From f6a70d1110cd51b6eee3499720f3af89028f7587 Mon Sep 17 00:00:00 2001 From: Cory LaViska Date: Tue, 10 Jun 2025 11:21:21 -0400 Subject: [PATCH] untying the knots --- cspell.json | 7 + packages/webawesome/docs/.eleventy.js | 14 +- .../webawesome/docs/_data/componentList.js | 78 --- packages/webawesome/docs/_data/components.js | 3 - packages/webawesome/docs/_data/hueRanges.js | 1 - packages/webawesome/docs/_data/hues.json | 1 - packages/webawesome/docs/_data/palettes.js | 1 - packages/webawesome/docs/_data/themes.js | 62 --- packages/webawesome/docs/_includes/base.njk | 2 - .../webawesome/docs/_includes/breadcrumbs.njk | 13 - .../docs/_includes/color-scheme-selector.njk | 1 - .../docs/_includes/contrast-table.njk | 52 -- .../docs/_includes/grouped-pages.njk | 18 - packages/webawesome/docs/_includes/head.njk | 20 +- .../_includes/import-stylesheet-code.md.njk | 18 - .../webawesome/docs/_includes/page-card.njk | 13 - .../webawesome/docs/_includes/page-demo.njk | 25 - .../docs/_includes/preset-theme-selector.njk | 9 +- packages/webawesome/docs/_includes/status.njk | 20 - .../docs/_includes/svgs/palette.njk | 20 - .../docs/_includes/svgs/theme-color.njk | 24 - .../docs/_includes/svgs/theme-typography.njk | 16 - .../webawesome/docs/_includes/svgs/theme.njk | 29 - .../docs/_includes/theme-showcase.njk | 347 ------------ packages/webawesome/docs/_layouts/block.njk | 38 -- .../webawesome/docs/_layouts/component.njk | 2 +- packages/webawesome/docs/_layouts/element.njk | 32 -- .../webawesome/docs/_layouts/overview.njk | 26 - packages/webawesome/docs/_layouts/palette.njk | 313 ----------- .../webawesome/docs/_layouts/patterns.njk | 1 - packages/webawesome/docs/_layouts/theme.njk | 185 ------- packages/webawesome/docs/_layouts/utility.njk | 19 - packages/webawesome/docs/_utils/filters.js | 410 -------------- .../docs/assets/components/scoped.js | 172 ------ .../webawesome/docs/assets/data/colors.js | 47 -- packages/webawesome/docs/assets/data/fonts.js | 65 --- packages/webawesome/docs/assets/data/icons.js | 7 - packages/webawesome/docs/assets/data/index.js | 6 - .../docs/assets/data/palettes.js.njk | 57 -- .../webawesome/docs/assets/data/themes.js.njk | 27 - .../webawesome/docs/assets/data/theming.js | 100 ---- .../docs/assets/examples/page/demo-1.html | 289 ---------- .../docs/assets/examples/page/demo-2.html | 484 ----------------- .../webawesome/docs/assets/scripts/filter.js | 35 -- packages/webawesome/docs/assets/scripts/my.js | 172 ------ .../assets/scripts/preset-theme-picker.js | 52 -- .../docs/assets/scripts/prism-downloaded.js | 9 - .../webawesome/docs/assets/scripts/prism.js | 8 - .../docs/assets/scripts/sidebar-tweaks.js | 122 ----- .../docs/assets/scripts/sync-iframe-height.js | 37 -- .../docs/assets/scripts/theme-picker.js | 139 ----- .../webawesome/docs/assets/scripts/tweak.js | 6 - .../docs/assets/scripts/tweak/code.js | 91 ---- .../docs/assets/scripts/tweak/util.js | 36 -- .../docs/assets/scripts/util/array.js | 17 - .../docs/assets/scripts/util/deep.js | 180 ------- .../docs/assets/scripts/util/string.js | 42 -- .../dom-change.js => view-transitions.js} | 16 +- .../assets/vue/components/color-select.js | 78 --- .../assets/vue/components/editable-text.js | 90 ---- .../docs/assets/vue/components/fonts-card.js | 132 ----- .../docs/assets/vue/components/icons-card.js | 176 ------- .../docs/assets/vue/components/index.js | 13 - .../docs/assets/vue/components/info-tip.js | 39 -- .../docs/assets/vue/components/page-card.js | 83 --- .../assets/vue/components/palette-card.js | 63 --- .../docs/assets/vue/components/panel.css | 167 ------ .../docs/assets/vue/components/scrollable.css | 89 ---- .../assets/vue/components/swatch-select.js | 54 -- .../docs/assets/vue/components/theme-card.js | 119 ----- .../vue/components/ui-panel-container.js | 120 ----- .../docs/assets/vue/components/ui-panel.js | 73 --- .../assets/vue/components/ui-scrollable.js | 77 --- .../docs/assets/vue/components/ui-slider.css | 46 -- .../docs/assets/vue/components/ui-slider.js | 88 ---- .../docs/assets/vue/directives/content.js | 22 - .../docs/assets/vue/mixins/input.js | 32 -- .../docs/assets/vue/mixins/saved.js | 110 ---- .../docs/docs/components/animated-image.md | 1 - .../docs/docs/components/animation.md | 15 +- .../webawesome/docs/docs/components/avatar.md | 1 - .../webawesome/docs/docs/components/badge.md | 1 - .../docs/docs/components/breadcrumb-item.md | 2 - .../docs/docs/components/breadcrumb.md | 1 - .../docs/docs/components/button-group.md | 1 - .../webawesome/docs/docs/components/button.md | 2 - .../docs/docs/components/callout.md | 3 +- .../webawesome/docs/docs/components/card.md | 43 +- .../docs/docs/components/carousel-item.md | 2 - .../docs/docs/components/carousel.md | 9 +- .../docs/docs/components/checkbox.md | 2 - .../docs/docs/components/color-picker.md | 2 - .../docs/docs/components/comparison.md | 1 - .../docs/docs/components/components.json | 11 - .../docs/docs/components/copy-button.md | 5 +- .../docs/docs/components/details.md | 49 +- .../webawesome/docs/docs/components/dialog.md | 21 +- .../docs/docs/components/divider.md | 1 - .../webawesome/docs/docs/components/drawer.md | 25 +- .../docs/docs/components/dropdown.md | 1 - .../docs/docs/components/format-bytes.md | 1 - .../docs/docs/components/format-date.md | 1 - .../docs/docs/components/format-number.md | 1 - .../webawesome/docs/docs/components/icon.md | 72 +-- .../docs/docs/components/include.md | 1 - .../webawesome/docs/docs/components/index.md | 5 + .../webawesome/docs/docs/components/index.njk | 11 - .../webawesome/docs/docs/components/input.md | 7 +- .../docs/docs/components/mutation-observer.md | 1 - .../webawesome/docs/docs/components/option.md | 2 - .../webawesome/docs/docs/components/popup.md | 32 +- .../docs/docs/components/progress-bar.md | 3 +- .../docs/docs/components/progress-ring.md | 1 - .../docs/docs/components/qr-code.md | 1 - .../docs/docs/components/radio-group.md | 3 +- .../webawesome/docs/docs/components/radio.md | 4 - .../webawesome/docs/docs/components/rating.md | 13 +- .../docs/docs/components/relative-time.md | 1 - .../docs/docs/components/resize-observer.md | 1 - .../docs/docs/components/scroller.md | 103 +++- .../webawesome/docs/docs/components/select.md | 85 ++- .../docs/docs/components/skeleton.md | 1 - .../webawesome/docs/docs/components/slider.md | 4 +- .../docs/docs/components/spinner.md | 2 - .../docs/docs/components/split-panel.md | 1 - .../webawesome/docs/docs/components/switch.md | 2 - .../docs/docs/components/tab-group.md | 8 +- .../docs/docs/components/tab-panel.md | 2 - .../webawesome/docs/docs/components/tab.md | 2 - .../webawesome/docs/docs/components/tag.md | 70 +-- .../docs/docs/components/textarea.md | 2 - .../docs/docs/components/tooltip.md | 6 +- .../docs/docs/components/tree-item.md | 1 - .../webawesome/docs/docs/components/tree.md | 1 - .../webawesome/docs/docs/docs.11tydata.js | 108 ---- .../webawesome/docs/docs/experimental/ssr.md | 18 +- packages/webawesome/docs/docs/layout.njk | 5 +- .../webawesome/docs/docs/palettes/bright.md | 3 - .../webawesome/docs/docs/palettes/default.md | 5 - .../webawesome/docs/docs/palettes/index.njk | 10 - .../docs/docs/palettes/palettes.json | 10 - .../webawesome/docs/docs/palettes/shoelace.md | 4 - .../webawesome/docs/docs/palettes/tweak.css | 172 ------ .../webawesome/docs/docs/palettes/tweak.js | 498 ------------------ .../docs/docs/resources/visual-tests.md | 6 +- .../webawesome/docs/docs/themes/app/index.js | 0 .../webawesome/docs/docs/themes/awesome.md | 9 +- .../webawesome/docs/docs/themes/creating.md | 60 --- .../webawesome/docs/docs/themes/default.md | 8 +- .../webawesome/docs/docs/themes/demo/index.js | 69 --- .../docs/docs/themes/demo/index.njk | 47 -- .../webawesome/docs/docs/themes/edit/index.js | 361 ------------- .../docs/docs/themes/edit/index.njk | 243 --------- .../docs/docs/themes/edit/style.css | 240 --------- .../webawesome/docs/docs/themes/index.njk | 58 -- .../docs/docs/themes/preview/app.css | 39 -- .../docs/docs/themes/preview/app.njk | 20 - .../docs/docs/themes/preview/content.css | 342 ------------ .../docs/docs/themes/preview/content.njk | 147 ------ .../docs/docs/themes/preview/preview.js | 276 ---------- .../webawesome/docs/docs/themes/remix.css | 74 --- .../webawesome/docs/docs/themes/shoelace.md | 4 +- .../webawesome/docs/docs/themes/showcase.css | 67 --- .../webawesome/docs/docs/themes/themes.json | 10 - packages/webawesome/docs/docs/tokens/index.md | 7 + .../webawesome/docs/docs/tokens/index.njk | 7 - .../webawesome/docs/docs/tokens/tokens.json | 7 - .../docs/docs/utilities/align-items.md | 6 +- .../webawesome/docs/docs/utilities/cluster.md | 6 +- .../webawesome/docs/docs/utilities/color.md | 13 +- .../webawesome/docs/docs/utilities/flank.md | 36 +- .../webawesome/docs/docs/utilities/fouce.md | 5 +- .../webawesome/docs/docs/utilities/frame.md | 7 +- .../webawesome/docs/docs/utilities/gap.md | 4 +- .../webawesome/docs/docs/utilities/grid.md | 5 +- .../docs/utilities/{index.njk => index.md} | 9 +- .../webawesome/docs/docs/utilities/native.md | 118 +++-- .../docs/docs/utilities/rounding.md | 5 +- .../webawesome/docs/docs/utilities/split.md | 12 +- .../webawesome/docs/docs/utilities/stack.md | 17 +- .../webawesome/docs/docs/utilities/text.md | 33 +- .../docs/docs/utilities/utilities.json | 4 - .../docs/docs/utilities/visually-hidden.md | 67 ++- packages/webawesome/package.json | 4 +- .../scripts/color-palette-contrast-test.js | 71 --- .../animated-image/animated-image.test.ts | 2 +- .../src/components/carousel/carousel.test.ts | 2 +- .../src/components/checkbox/checkbox.test.ts | 2 +- .../color-picker/color-picker.test.ts | 2 +- .../src/components/dialog/dialog.test.ts | 2 +- .../src/components/drawer/drawer.test.ts | 2 +- .../src/components/input/input.test.ts | 2 +- .../src/components/rating/rating.test.ts | 2 +- .../src/components/select/select.test.ts | 2 +- .../src/components/slider/slider.test.ts | 2 +- .../split-panel/split-panel.test.ts | 2 +- .../components/tab-group/tab-group.test.ts | 2 +- .../src/components/tree/tree.test.ts | 2 +- .../src/internal/active-elements.ts | 2 +- packages/webawesome/src/internal/form.test.ts | 2 +- .../internal/test/form-control-base-tests.ts | 2 +- .../{test.ts => test/pointer-utilities.ts} | 0 .../styles/color/scripts/palettes-analyzed.js | 70 --- .../src/styles/color/scripts/palettes.js | 82 --- .../src/styles/color/scripts/postprocess.js | 162 ------ .../src/styles/color/scripts/ranges.js | 207 -------- .../src/styles/color/scripts/util.js | 106 ---- .../src/utilities/animation-registry.ts | 74 --- 208 files changed, 585 insertions(+), 9861 deletions(-) delete mode 100644 packages/webawesome/docs/_data/componentList.js delete mode 100644 packages/webawesome/docs/_data/components.js delete mode 100644 packages/webawesome/docs/_data/hueRanges.js delete mode 100644 packages/webawesome/docs/_data/hues.json delete mode 100644 packages/webawesome/docs/_data/palettes.js delete mode 100644 packages/webawesome/docs/_data/themes.js delete mode 100644 packages/webawesome/docs/_includes/breadcrumbs.njk delete mode 100644 packages/webawesome/docs/_includes/contrast-table.njk delete mode 100644 packages/webawesome/docs/_includes/grouped-pages.njk delete mode 100644 packages/webawesome/docs/_includes/import-stylesheet-code.md.njk delete mode 100644 packages/webawesome/docs/_includes/page-card.njk delete mode 100644 packages/webawesome/docs/_includes/page-demo.njk delete mode 100644 packages/webawesome/docs/_includes/status.njk delete mode 100644 packages/webawesome/docs/_includes/svgs/palette.njk delete mode 100644 packages/webawesome/docs/_includes/svgs/theme-color.njk delete mode 100644 packages/webawesome/docs/_includes/svgs/theme-typography.njk delete mode 100644 packages/webawesome/docs/_includes/svgs/theme.njk delete mode 100644 packages/webawesome/docs/_includes/theme-showcase.njk delete mode 100644 packages/webawesome/docs/_layouts/block.njk delete mode 100644 packages/webawesome/docs/_layouts/element.njk delete mode 100644 packages/webawesome/docs/_layouts/overview.njk delete mode 100644 packages/webawesome/docs/_layouts/palette.njk delete mode 100644 packages/webawesome/docs/_layouts/patterns.njk delete mode 100644 packages/webawesome/docs/_layouts/theme.njk delete mode 100644 packages/webawesome/docs/_layouts/utility.njk delete mode 100644 packages/webawesome/docs/_utils/filters.js delete mode 100644 packages/webawesome/docs/assets/components/scoped.js delete mode 100644 packages/webawesome/docs/assets/data/colors.js delete mode 100644 packages/webawesome/docs/assets/data/fonts.js delete mode 100644 packages/webawesome/docs/assets/data/icons.js delete mode 100644 packages/webawesome/docs/assets/data/index.js delete mode 100644 packages/webawesome/docs/assets/data/palettes.js.njk delete mode 100644 packages/webawesome/docs/assets/data/themes.js.njk delete mode 100644 packages/webawesome/docs/assets/data/theming.js delete mode 100644 packages/webawesome/docs/assets/examples/page/demo-1.html delete mode 100644 packages/webawesome/docs/assets/examples/page/demo-2.html delete mode 100644 packages/webawesome/docs/assets/scripts/filter.js delete mode 100644 packages/webawesome/docs/assets/scripts/my.js delete mode 100644 packages/webawesome/docs/assets/scripts/preset-theme-picker.js delete mode 100644 packages/webawesome/docs/assets/scripts/prism-downloaded.js delete mode 100644 packages/webawesome/docs/assets/scripts/prism.js delete mode 100644 packages/webawesome/docs/assets/scripts/sidebar-tweaks.js delete mode 100644 packages/webawesome/docs/assets/scripts/sync-iframe-height.js delete mode 100644 packages/webawesome/docs/assets/scripts/theme-picker.js delete mode 100644 packages/webawesome/docs/assets/scripts/tweak.js delete mode 100644 packages/webawesome/docs/assets/scripts/tweak/code.js delete mode 100644 packages/webawesome/docs/assets/scripts/tweak/util.js delete mode 100644 packages/webawesome/docs/assets/scripts/util/array.js delete mode 100644 packages/webawesome/docs/assets/scripts/util/deep.js delete mode 100644 packages/webawesome/docs/assets/scripts/util/string.js rename packages/webawesome/docs/assets/scripts/{util/dom-change.js => view-transitions.js} (52%) delete mode 100644 packages/webawesome/docs/assets/vue/components/color-select.js delete mode 100644 packages/webawesome/docs/assets/vue/components/editable-text.js delete mode 100644 packages/webawesome/docs/assets/vue/components/fonts-card.js delete mode 100644 packages/webawesome/docs/assets/vue/components/icons-card.js delete mode 100644 packages/webawesome/docs/assets/vue/components/index.js delete mode 100644 packages/webawesome/docs/assets/vue/components/info-tip.js delete mode 100644 packages/webawesome/docs/assets/vue/components/page-card.js delete mode 100644 packages/webawesome/docs/assets/vue/components/palette-card.js delete mode 100644 packages/webawesome/docs/assets/vue/components/panel.css delete mode 100644 packages/webawesome/docs/assets/vue/components/scrollable.css delete mode 100644 packages/webawesome/docs/assets/vue/components/swatch-select.js delete mode 100644 packages/webawesome/docs/assets/vue/components/theme-card.js delete mode 100644 packages/webawesome/docs/assets/vue/components/ui-panel-container.js delete mode 100644 packages/webawesome/docs/assets/vue/components/ui-panel.js delete mode 100644 packages/webawesome/docs/assets/vue/components/ui-scrollable.js delete mode 100644 packages/webawesome/docs/assets/vue/components/ui-slider.css delete mode 100644 packages/webawesome/docs/assets/vue/components/ui-slider.js delete mode 100644 packages/webawesome/docs/assets/vue/directives/content.js delete mode 100644 packages/webawesome/docs/assets/vue/mixins/input.js delete mode 100644 packages/webawesome/docs/assets/vue/mixins/saved.js delete mode 100644 packages/webawesome/docs/docs/components/components.json create mode 100644 packages/webawesome/docs/docs/components/index.md delete mode 100644 packages/webawesome/docs/docs/components/index.njk delete mode 100644 packages/webawesome/docs/docs/docs.11tydata.js delete mode 100644 packages/webawesome/docs/docs/palettes/bright.md delete mode 100644 packages/webawesome/docs/docs/palettes/default.md delete mode 100644 packages/webawesome/docs/docs/palettes/index.njk delete mode 100644 packages/webawesome/docs/docs/palettes/palettes.json delete mode 100644 packages/webawesome/docs/docs/palettes/shoelace.md delete mode 100644 packages/webawesome/docs/docs/palettes/tweak.css delete mode 100644 packages/webawesome/docs/docs/palettes/tweak.js delete mode 100644 packages/webawesome/docs/docs/themes/app/index.js delete mode 100644 packages/webawesome/docs/docs/themes/creating.md delete mode 100644 packages/webawesome/docs/docs/themes/demo/index.js delete mode 100644 packages/webawesome/docs/docs/themes/demo/index.njk delete mode 100644 packages/webawesome/docs/docs/themes/edit/index.js delete mode 100644 packages/webawesome/docs/docs/themes/edit/index.njk delete mode 100644 packages/webawesome/docs/docs/themes/edit/style.css delete mode 100644 packages/webawesome/docs/docs/themes/index.njk delete mode 100644 packages/webawesome/docs/docs/themes/preview/app.css delete mode 100644 packages/webawesome/docs/docs/themes/preview/app.njk delete mode 100644 packages/webawesome/docs/docs/themes/preview/content.css delete mode 100644 packages/webawesome/docs/docs/themes/preview/content.njk delete mode 100644 packages/webawesome/docs/docs/themes/preview/preview.js delete mode 100644 packages/webawesome/docs/docs/themes/remix.css delete mode 100644 packages/webawesome/docs/docs/themes/showcase.css delete mode 100644 packages/webawesome/docs/docs/themes/themes.json create mode 100644 packages/webawesome/docs/docs/tokens/index.md delete mode 100644 packages/webawesome/docs/docs/tokens/index.njk delete mode 100644 packages/webawesome/docs/docs/tokens/tokens.json rename packages/webawesome/docs/docs/utilities/{index.njk => index.md} (68%) delete mode 100644 packages/webawesome/docs/docs/utilities/utilities.json delete mode 100644 packages/webawesome/scripts/color-palette-contrast-test.js rename packages/webawesome/src/internal/{test.ts => test/pointer-utilities.ts} (100%) delete mode 100644 packages/webawesome/src/styles/color/scripts/palettes-analyzed.js delete mode 100644 packages/webawesome/src/styles/color/scripts/palettes.js delete mode 100644 packages/webawesome/src/styles/color/scripts/postprocess.js delete mode 100644 packages/webawesome/src/styles/color/scripts/ranges.js delete mode 100644 packages/webawesome/src/styles/color/scripts/util.js delete mode 100644 packages/webawesome/src/utilities/animation-registry.ts diff --git a/cspell.json b/cspell.json index f6f397bb8..07b88cc2b 100644 --- a/cspell.json +++ b/cspell.json @@ -8,8 +8,10 @@ "APG", "apos", "atrule", + "autocapitalize", "autocorrect", "autofix", + "autofocus", "autoload", "autoloader", "autoloading", @@ -50,7 +52,9 @@ "dropdowns", "easings", "ecommerce", + "elif", "endfor", + "endmarkdown", "endraw", "endregion", "enterkeyhint", @@ -60,6 +64,7 @@ "esbuild", "exportmaps", "exportparts", + "fetchpriority", "fieldsets", "focusin", "focusout", @@ -88,6 +93,7 @@ "inputmode", "ionicon", "ionicons", + "jank", "jsDelivr", "jsfiddle", "keydown", @@ -123,6 +129,7 @@ "noindex", "noopener", "noreferrer", + "noscript", "novalidate", "Numberish", "nums", diff --git a/packages/webawesome/docs/.eleventy.js b/packages/webawesome/docs/.eleventy.js index 48b2361c1..359d125db 100644 --- a/packages/webawesome/docs/.eleventy.js +++ b/packages/webawesome/docs/.eleventy.js @@ -1,5 +1,6 @@ import * as fs from 'node:fs'; import * as path from 'node:path'; +import { parse } from 'path'; import { anchorHeadingsPlugin } from './_utils/anchor-headings.js'; import { codeExamplesPlugin } from './_utils/code-examples.js'; import { copyCodePlugin } from './_utils/copy-code.js'; @@ -10,8 +11,6 @@ import { markdown } from './_utils/markdown.js'; // import litPlugin from '@lit-labs/eleventy-plugin-lit'; import { readFile } from 'fs/promises'; import nunjucks from 'nunjucks'; -// import componentList from './_data/componentList.js'; -import * as filters from './_utils/filters.js'; import { outlinePlugin } from './_utils/outline.js'; import { replaceTextPlugin } from './_utils/replace-text.js'; import { searchPlugin } from './_utils/search.js'; @@ -57,10 +56,13 @@ export default async function (eleventyConfig) { // Template filters - {{ content | filter }} eleventyConfig.addFilter('inlineMarkdown', content => markdown.renderInline(content || '')); eleventyConfig.addFilter('markdown', content => markdown.render(content || '')); - - for (let name in filters) { - eleventyConfig.addFilter(name, filters[name]); - } + eleventyConfig.addFilter('stripExtension', string => parse(string).name); + eleventyConfig.addFilter('stripPrefix', content => content.replace(/^wa-/, '')); + // Trims whitespace and pipes from the start and end of a string. Useful for CEM types, which can be pipe-delimited. + // With Prettier 3, this means a leading pipe will exist be present when the line wraps. + eleventyConfig.addFilter('trimPipes', content => { + return typeof content === 'string' ? content.replace(/^(\s|\|)/g, '').replace(/(\s|\|)$/g, '') : content; + }); // Shortcodes - {% shortCode arg1, arg2 %} eleventyConfig.addShortcode('cdnUrl', location => { diff --git a/packages/webawesome/docs/_data/componentList.js b/packages/webawesome/docs/_data/componentList.js deleted file mode 100644 index b212e5738..000000000 --- a/packages/webawesome/docs/_data/componentList.js +++ /dev/null @@ -1,78 +0,0 @@ -/** - * @module components Fetches components from custom-elements.json and exposes them in a saner format. - */ -import { readFileSync } from 'fs'; -import { dirname, join, resolve } from 'path'; -import { fileURLToPath } from 'url'; - -const __dirname = dirname(fileURLToPath(import.meta.url)); -const customElementsJSON = process.env.DIST_DIR - ? join(process.env.DIST_DIR, 'custom-elements.json') - : resolve(__dirname, '../../dist/custom-elements.json'); - -const manifest = JSON.parse(readFileSync(customElementsJSON), 'utf-8'); - -const components = manifest.modules.flatMap(module => { - return module.declarations - .filter(c => c?.customElement) - .map(declaration => { - // Generate the dist path based on the src path and attach it to the component - declaration.path = module.path.replace(/^src\//, 'dist/').replace(/\.ts$/, '.js'); - - // Remove private members and those that lack a description - const members = declaration.members?.filter(member => member.description && member.privacy !== 'private'); - - const methods = members?.filter(prop => prop.kind === 'method' && prop.privacy !== 'private'); - const attributes = declaration.attributes ?? []; - const properties = members?.filter(prop => { - // Look for a corresponding attribute - const attribute = attributes?.find(attr => attr.fieldName === prop.name); - if (attribute) { - prop.attribute = attribute.name || attribute.fieldName; - } - - return prop.kind === 'field' && prop.privacy !== 'private'; - }); - - return { - ...declaration, - slug: declaration.tagName.replace(/^wa-/, ''), - methods, - attributes, - properties, - }; - }); -}); - -// Build dependency graphs -components.forEach(component => { - const dependencies = []; - - // Recursively fetch sub-dependencies - function getDependencies(tag) { - const cmp = components.find(c => c.tagName === tag); - if (!cmp || !Array.isArray(component.dependencies)) { - return; - } - - cmp.dependencies?.forEach(dependentTag => { - if (!dependencies.includes(dependentTag)) { - dependencies.push(dependentTag); - } - getDependencies(dependentTag); - }); - } - - getDependencies(component.tagName); - - component.dependencies = dependencies.sort(); -}); - -// Sort by name -components.sort((a, b) => { - if (a.name < b.name) return -1; - if (a.name > b.name) return 1; - return 0; -}); - -export default components; diff --git a/packages/webawesome/docs/_data/components.js b/packages/webawesome/docs/_data/components.js deleted file mode 100644 index 1dab4c111..000000000 --- a/packages/webawesome/docs/_data/components.js +++ /dev/null @@ -1,3 +0,0 @@ -import componentList from './componentList.js'; - -export default Object.fromEntries(componentList.map(component => [component.slug, component])); diff --git a/packages/webawesome/docs/_data/hueRanges.js b/packages/webawesome/docs/_data/hueRanges.js deleted file mode 100644 index 63d7400a6..000000000 --- a/packages/webawesome/docs/_data/hueRanges.js +++ /dev/null @@ -1 +0,0 @@ -export { hueRanges as default } from '../assets/data/index.js'; diff --git a/packages/webawesome/docs/_data/hues.json b/packages/webawesome/docs/_data/hues.json deleted file mode 100644 index 2e68ebe4b..000000000 --- a/packages/webawesome/docs/_data/hues.json +++ /dev/null @@ -1 +0,0 @@ -["red", "orange", "yellow", "green", "cyan", "blue", "indigo", "purple", "pink", "gray"] diff --git a/packages/webawesome/docs/_data/palettes.js b/packages/webawesome/docs/_data/palettes.js deleted file mode 100644 index 3ce705beb..000000000 --- a/packages/webawesome/docs/_data/palettes.js +++ /dev/null @@ -1 +0,0 @@ -export { default as default } from '../../src/styles/color/scripts/palettes-analyzed.js'; diff --git a/packages/webawesome/docs/_data/themes.js b/packages/webawesome/docs/_data/themes.js deleted file mode 100644 index 52ea04b20..000000000 --- a/packages/webawesome/docs/_data/themes.js +++ /dev/null @@ -1,62 +0,0 @@ -import fs from 'fs'; -import path from 'path'; -// import { inlined } from '../../dist/components/icon/library.wa.js'; -const distDirectory = process.env.UNBUNDLED_DIST_DIRECTORY || path.join(path.resolve(), 'dist'); - -const THEME_DIR = path.join(distDirectory, 'styles', 'themes'); - -const themeFiles = fs.readdirSync(THEME_DIR).filter(file => file.endsWith('.css') && !file.endsWith('base.css')); - -const declarationRegex = /^\s*--wa-(?[a-z-]+)?:\s*(?.+?)\s*(\/\*.+?\*\/)?\s*;$/gm; -const importRegex = /^\s*@import\s+url\(['"](?.+?)['"]\);$/gm; -const themes = {}; - -for (const file of themeFiles) { - const id = file.replace('.css', ''); - const { imports, declarations } = readCSSFile(file); - let theme = { palette: 'default', declarations, imports }; - - for (const url of imports) { - if (url.endsWith('/color.css')) { - // Color settings - const color = readCSSFile(url); - for (const colorUrl of color.imports) { - if (colorUrl.startsWith('../../color/')) { - // Color palette - theme.palette = getFileSlug(colorUrl); - } else if (colorUrl.startsWith('../../brand/')) { - // Brand color - theme.brand = getFileSlug(colorUrl); - } - } - } else if (url.endsWith('/dimension.css')) { - theme.dimension = true; - } - } - - let icon = {}; - icon.family = theme.declarations['icon-family'] ?? theme.default?.iconFamily ?? 'classic'; - icon.variant = theme.declarations['icon-variant'] ?? theme.default?.iconVariant ?? 'solid'; - theme.icons = icon; - - theme.rounding = Number(theme.declarations['border-radius-scale'] ?? theme.default?.rounding ?? 1); - theme.spacing = Number(theme.declarations['space-scale'] ?? theme.default?.spacing ?? 1); - theme.borderWidth = Number(theme.declarations['border-width-scale'] ?? theme.default?.borderWidth ?? 1); - - themes[id] = theme; -} - -export default themes; - -function readCSSFile(url) { - const contents = fs.readFileSync(path.join(THEME_DIR, url), 'utf8'); - const imports = [...contents.matchAll(importRegex)].map(match => match.groups.path); - const declarations = Object.fromEntries( - [...contents.matchAll(declarationRegex)].map(match => [match.groups.property, match.groups.value]), - ); - return { imports, declarations }; -} - -function getFileSlug(url) { - return url.split('/').pop().replace('.css', ''); -} diff --git a/packages/webawesome/docs/_includes/base.njk b/packages/webawesome/docs/_includes/base.njk index b826b1cf2..e9add0b30 100644 --- a/packages/webawesome/docs/_includes/base.njk +++ b/packages/webawesome/docs/_includes/base.njk @@ -10,7 +10,6 @@ {% if hasSidebar %}{% endif %} - {% if hasSidebar %}{% endif %} {# Docs styles #} @@ -94,7 +93,6 @@
{% server "flashes" %}
{% block header %} - {% include 'breadcrumbs.njk' %}

{{ title }}

{% endblock %} diff --git a/packages/webawesome/docs/_includes/breadcrumbs.njk b/packages/webawesome/docs/_includes/breadcrumbs.njk deleted file mode 100644 index 96d5563e8..000000000 --- a/packages/webawesome/docs/_includes/breadcrumbs.njk +++ /dev/null @@ -1,13 +0,0 @@ -{% set ancestors = page.url | ancestors %} - -{% if ancestors.length > 0 %} - - {% for ancestor in ancestors %} - {% if ancestor.page.url != "/" %} - {{ ancestor.data.title }} - {% endif %} - {% endfor %} - {# Current page #} - - {% else %} -{% endif %} diff --git a/packages/webawesome/docs/_includes/color-scheme-selector.njk b/packages/webawesome/docs/_includes/color-scheme-selector.njk index a320fc8d6..1cee3e2d3 100644 --- a/packages/webawesome/docs/_includes/color-scheme-selector.njk +++ b/packages/webawesome/docs/_includes/color-scheme-selector.njk @@ -1,4 +1,3 @@ -{# Color scheme selector #} diff --git a/packages/webawesome/docs/_includes/contrast-table.njk b/packages/webawesome/docs/_includes/contrast-table.njk deleted file mode 100644 index 9ecdfb852..000000000 --- a/packages/webawesome/docs/_includes/contrast-table.njk +++ /dev/null @@ -1,52 +0,0 @@ - - - - - {% for tint_bg in tints -%} - {% for tint_fg in tints | reverse -%} - {% if (tint_fg - tint_bg) | abs == difference %} - - {% endif %} - {%- endfor -%} - {%- endfor %} - - -{% for hue in hues -%} - - - {% for tint_bg in tints -%} - {% set color_bg = palettes[paletteId][hue][tint_bg] %} - {% for tint_fg in tints | reverse -%} - {% set color_fg = palettes[paletteId][hue][tint_fg] %} - {% if (tint_fg - tint_bg) | abs == difference %} - {% set contrast_wcag = '' %} - {% if color_fg and color_bg -%} - {% set contrast_wcag = color_bg.contrast(color_fg, 'WCAG21') %} - {%- endif %} - - {% endif %} - {%- endfor -%} - {%- endfor -%} - -{%- endfor %} - diff --git a/packages/webawesome/docs/_includes/grouped-pages.njk b/packages/webawesome/docs/_includes/grouped-pages.njk deleted file mode 100644 index 2273f4c98..000000000 --- a/packages/webawesome/docs/_includes/grouped-pages.njk +++ /dev/null @@ -1,18 +0,0 @@ -{# Cards for pages listed by category #} - -
-{% set groupedPages = allPages | groupPages(categories, page) %} -{% for category, pages in groupedPages -%} - {% if groupedPages.meta.groupCount > 1 and pages.length > 0 %} -

- {% if pages.meta.url %}{{ pages.meta.title }} - {% else %} - {{ pages.meta.title }} - {% endif %} -

- {% endif %} - {%- for page in pages -%} - {% include "page-card.njk" %} - {%- endfor -%} -{%- endfor -%} -
diff --git a/packages/webawesome/docs/_includes/head.njk b/packages/webawesome/docs/_includes/head.njk index fa6afd1ea..d2c49ca1c 100644 --- a/packages/webawesome/docs/_includes/head.njk +++ b/packages/webawesome/docs/_includes/head.njk @@ -24,9 +24,6 @@ -{# Internal components #} - - {# Web Awesome #} @@ -45,22 +42,7 @@ } - -{# Preset Theme #} -{% if noTheme %} -{% elif forceTheme %} - -{% else %} - - - -{% endif %} + diff --git a/packages/webawesome/docs/_includes/import-stylesheet-code.md.njk b/packages/webawesome/docs/_includes/import-stylesheet-code.md.njk deleted file mode 100644 index d7f538b5b..000000000 --- a/packages/webawesome/docs/_includes/import-stylesheet-code.md.njk +++ /dev/null @@ -1,18 +0,0 @@ - -In HTML -In CSS - - -Add the following code to the `` of your page: -```html - -``` - - - -Add the following code at the top of your CSS file: -```css -@import url('{% cdnUrl stylesheet %}'); -``` - - diff --git a/packages/webawesome/docs/_includes/page-card.njk b/packages/webawesome/docs/_includes/page-card.njk deleted file mode 100644 index d1111fcf0..000000000 --- a/packages/webawesome/docs/_includes/page-card.njk +++ /dev/null @@ -1,13 +0,0 @@ -{%- if not page.data.unlisted -%} -{% if page.url %}{% endif %} - -
- {% include "svgs/" + (page.data.icon or "thumbnail-placeholder") + ".njk" ignore missing %} -
- {{ page.data.title }} - {% if pageSubtitle -%} - - {%- endif %} -
-{% if page.url %}
{% endif %} -{% endif %} diff --git a/packages/webawesome/docs/_includes/page-demo.njk b/packages/webawesome/docs/_includes/page-demo.njk deleted file mode 100644 index fc22ab978..000000000 --- a/packages/webawesome/docs/_includes/page-demo.njk +++ /dev/null @@ -1,25 +0,0 @@ -
- -{% set slots = components.page.slots %} - -
- Slots -
- {% for slot in slots %} - {% if (slot.name != "skip-to-content") and (slot.name != "navigation-toggle-icon") %} - - {{ slot.name or "(default)" }} - - {% endif %} - {% endfor %} -
-
- - -
- - diff --git a/packages/webawesome/docs/_includes/preset-theme-selector.njk b/packages/webawesome/docs/_includes/preset-theme-selector.njk index 0a6527d76..ed134db2c 100644 --- a/packages/webawesome/docs/_includes/preset-theme-selector.njk +++ b/packages/webawesome/docs/_includes/preset-theme-selector.njk @@ -1,9 +1,6 @@ -{# Preset theme selector #} - {% for theme in collections.theme | sort %} - - {{ theme.data.title }} - - {% endfor %} + Default + Shoelace + Awesome diff --git a/packages/webawesome/docs/_includes/status.njk b/packages/webawesome/docs/_includes/status.njk deleted file mode 100644 index 4ccb6845d..000000000 --- a/packages/webawesome/docs/_includes/status.njk +++ /dev/null @@ -1,20 +0,0 @@ -{% if since -%} - Since {{ since }} -{% endif -%} - -{%- if status %} - {%- if status == "experimental" %} - - - Experimental - - {%- elif status == "stable" %} - Stable - {%- else %} - {{ status}} - {%- endif -%} -{%- endif %} - -{%- if isPro %} - PRO -{%- endif -%} diff --git a/packages/webawesome/docs/_includes/svgs/palette.njk b/packages/webawesome/docs/_includes/svgs/palette.njk deleted file mode 100644 index 380be36ca..000000000 --- a/packages/webawesome/docs/_includes/svgs/palette.njk +++ /dev/null @@ -1,20 +0,0 @@ -{% set paletteId = palette.fileSlug or page.fileSlug %} -{% set suffixes = ['-80', '', '-20'] %} - - - - diff --git a/packages/webawesome/docs/_includes/svgs/theme-color.njk b/packages/webawesome/docs/_includes/svgs/theme-color.njk deleted file mode 100644 index a5d543ced..000000000 --- a/packages/webawesome/docs/_includes/svgs/theme-color.njk +++ /dev/null @@ -1,24 +0,0 @@ -{% set themeId = theme.fileSlug %} - - - - diff --git a/packages/webawesome/docs/_includes/svgs/theme-typography.njk b/packages/webawesome/docs/_includes/svgs/theme-typography.njk deleted file mode 100644 index e72813555..000000000 --- a/packages/webawesome/docs/_includes/svgs/theme-typography.njk +++ /dev/null @@ -1,16 +0,0 @@ -{% set themeId = theme.fileSlug or page.fileSlug %} - - - - diff --git a/packages/webawesome/docs/_includes/svgs/theme.njk b/packages/webawesome/docs/_includes/svgs/theme.njk deleted file mode 100644 index 613f9ceb4..000000000 --- a/packages/webawesome/docs/_includes/svgs/theme.njk +++ /dev/null @@ -1,29 +0,0 @@ -{% set themeId = theme.fileSlug or page.fileSlug %} - - - - - diff --git a/packages/webawesome/docs/_includes/theme-showcase.njk b/packages/webawesome/docs/_includes/theme-showcase.njk deleted file mode 100644 index 551f2e628..000000000 --- a/packages/webawesome/docs/_includes/theme-showcase.njk +++ /dev/null @@ -1,347 +0,0 @@ - diff --git a/packages/webawesome/docs/_layouts/block.njk b/packages/webawesome/docs/_layouts/block.njk deleted file mode 100644 index 91e64589b..000000000 --- a/packages/webawesome/docs/_layouts/block.njk +++ /dev/null @@ -1,38 +0,0 @@ -{% set hasSidebar = true %} -{% set hasOutline = true %} - -{% extends '../_includes/base.njk' %} - -{# Component header #} -{% block header %} - {% include 'breadcrumbs.njk' %} -

{{ title }}

-
- {% set snippets = (elements or element or snippets or snippet) | dict %} - - {% for snippet, link in snippets %} - {% if snippet %} - - {%- if link -%} - {{ snippet }} - {%- else -%} - {{ snippet }} - {%- endif-%} - - {%- endif %} - {% endfor %} - - {% include '../_includes/status.njk' %} -
- {% if description %} -

- {{ description | inlineMarkdown | safe }} -

- {% endif %} - {% block notes %}{% endblock %} -{% endblock %} - -{# Content #} -{% block content %} - {{ content | safe }} -{% endblock %} diff --git a/packages/webawesome/docs/_layouts/component.njk b/packages/webawesome/docs/_layouts/component.njk index 774ef07fe..d683f6506 100644 --- a/packages/webawesome/docs/_layouts/component.njk +++ b/packages/webawesome/docs/_layouts/component.njk @@ -1,4 +1,4 @@ -{% extends '../_layouts/block.njk' %} +{% extends '../_layouts/docs.njk' %} {% set component = components[page.fileSlug] %} {# Component API #} diff --git a/packages/webawesome/docs/_layouts/element.njk b/packages/webawesome/docs/_layouts/element.njk deleted file mode 100644 index a0b5b434b..000000000 --- a/packages/webawesome/docs/_layouts/element.njk +++ /dev/null @@ -1,32 +0,0 @@ -{% extends '../_layouts/block.njk' %} - -{# Component header #} -{% block notes %} - {% if component %} - - - Want to do more? - Check out the {% for name in (component | toList) -%} - {{ ' and ' if loop.last and not loop.first }}<wa-{{ name }}>{{ ', ' if not loop.last }} - {%- endfor %} component{{ 's' if (component | isList) }}! - - {% endif %} -{% endblock %} - -{% block afterContent %} -{% if file %} -{% markdown %} -## Opting In to Native {{ title }} Styles - -If you want to use the Native {{ title }} styles **without including the entirety of Web Awesome Native Styles**, - you can include the following CSS files from the Web Awesome CDN. - -{% set stylesheet = file %} -{% include 'import-stylesheet-code.md.njk' %} - -To use all of Web Awesome Native styles, follow the [instructions on the Native Styles overview page](../). - -{% endmarkdown %} -{% endif %} - -{% endblock %} diff --git a/packages/webawesome/docs/_layouts/overview.njk b/packages/webawesome/docs/_layouts/overview.njk deleted file mode 100644 index f0e201092..000000000 --- a/packages/webawesome/docs/_layouts/overview.njk +++ /dev/null @@ -1,26 +0,0 @@ ---- -layout: page-outline ---- -{% set forTag = forTag or (page.url | split('/') | last) %} -{% if description %} -
{{ description | markdown | safe }}
-{% endif %} - -
- - - -
- -{% set allPages = allPages or collections[forTag] %} -{% if allPages and allPages.length > 0 %} -{% include "grouped-pages.njk" %} -{% endif %} - - - - -{% if content | trim %} - {# Temp fix for spacing issue #} -{{ content | safe }} -{% endif %} diff --git a/packages/webawesome/docs/_layouts/palette.njk b/packages/webawesome/docs/_layouts/palette.njk deleted file mode 100644 index ed311a403..000000000 --- a/packages/webawesome/docs/_layouts/palette.njk +++ /dev/null @@ -1,313 +0,0 @@ -{% set hasSidebar = true %} -{% set hasOutline = true %} -{% set paletteId = page.fileSlug %} -{% set tints = ["95", "90", "80", "70", "60", "50", "40", "30", "20", "10", "05"] %} - -{% extends '../_includes/base.njk' %} - -{% block head %} - - - -{% endblock %} - -{% block header %} -
-
- - {% include 'breadcrumbs.njk' %} - -

- {{ title }} - -

- -
- .wa-palette-{{ paletteId }} - {% include '../_includes/status.njk' %} - {% if not isPro %} - PRO - {% endif %} -
- {% if description %} -

- {{ description | inlineMarkdown | safe }} -

- {% endif %} -{% endblock %} - -{% block afterContent %} - -{% set maxChroma = 0 %} - - - - This palette has been tweaked. - - - - - Reset - - - - - - - - - {% for tint in tints -%} - - {%- endfor %} - - -{# Initialize to last hue before gray #} -{%- set hueBefore = hues[hues|length - 2] -%} -{% for hue in hues -%} -{% set coreTint = palettes[paletteId][hue].maxChromaTint %} -{%- set coreColor = palettes[paletteId][hue][coreTint] -%} -{%- set maxChroma = coreColor.c if coreColor.c > maxChroma else maxChroma -%} -{% if hue === 'gray' %} - -{% else %} - -{% endif %} - - - {% for tint in tints -%} - {%- set color = palettes[paletteId][hue][tint] -%} - - {%- endfor -%} - -{%- endfor %} - - -{% set chromaScaleBounds = [ -(0.08 / maxChroma) | number({maximumFractionDigits: 2}), -(0.3 / maxChroma]) | number({maximumFractionDigits: 2}) -%} - - -

Used By

- -
-{% for page in collections.theme %} - {%- if page.data.palette == paletteId -%} - {% include "page-card.njk" %} - {%- endif -%} -{% endfor %} -
- -{% markdown %} -## Color Contrast - -Web Awesome color scales are designed to guarantee certain contrast ratios, -both per [WCAG 2.1 success criteria](https://www.w3.org/TR/WCAG21/#contrast-minimum) -as well as the emergent APCA specification _(planned)_, -so you can ensure that text is both legible to all users, and legally conformant. - -### Level 1 - -A difference of `40` ensures a minimum **3:1** contrast ratio, suitable for large text and icons (AA). -{% endmarkdown %} - -{% set difference = 40 %} -{% set minContrast = 3 %} -{% include "contrast-table.njk" %} - -{% markdown %} - -This also goes for a difference of `45`: - -{% endmarkdown %} - -{% set difference = 45 %} -{% include "contrast-table.njk" %} - -{% markdown %} - -### Level 2 - -A difference of `50` ensures a minimum **4.5:1** contrast ratio, suitable for normal text (AA) and large text (AAA) -{% endmarkdown %} - -{% set difference = 50 %} -{% set minContrast = 4.5 %} -{% include "contrast-table.njk" %} - -{% markdown %} - -This also goes for a difference of `55`: - -{% endmarkdown %} - -{% set difference = 55 %} -{% include "contrast-table.njk" %} - -{% markdown %} -### Level 3 - -A difference of `60` ensures a minimum **7:1** contrast ratio, suitable for all text (AAA) -{% endmarkdown %} - -{% set difference = 60 %} -{% set minContrast = 7 %} -{% include "contrast-table.njk" %} - -{% markdown %} - -This also goes for a difference of `65`: - -{% endmarkdown %} - -{% set difference = 65 %} -{% include "contrast-table.njk" %} - -{% markdown %} -## How to use this palette { #usage } - -If you are using a Web Awesome theme that uses this palette, it will already be included. -To use a different palette than a theme default, or to use it in a custom theme, you can import this palette directly from the Web Awesome CDN. - -{% set stylesheet = 'styles/color/' + page.fileSlug + '.css' %} - -In HTML -In CSS - - -Add the following code to the `` of your page: -```html { v-content:html="code.html.highlighted" } - -``` - - - -Add the following code at the top of your CSS file: -```css { v-content:html="code.css.highlighted" } -@import url('{% cdnUrl stylesheet %}'); -``` - - - - -{% endmarkdown %} -
{# end palette app #} -{% endblock %} - - diff --git a/packages/webawesome/docs/_layouts/patterns.njk b/packages/webawesome/docs/_layouts/patterns.njk deleted file mode 100644 index cb2836dd6..000000000 --- a/packages/webawesome/docs/_layouts/patterns.njk +++ /dev/null @@ -1 +0,0 @@ -{% extends '../_layouts/block.njk' %} diff --git a/packages/webawesome/docs/_layouts/theme.njk b/packages/webawesome/docs/_layouts/theme.njk deleted file mode 100644 index 5ac6bad97..000000000 --- a/packages/webawesome/docs/_layouts/theme.njk +++ /dev/null @@ -1,185 +0,0 @@ -{% set hasSidebar = true %} -{% set hasOutline = true %} -{# {% set forceTheme = page.fileSlug %} #} - -{% extends '../_includes/base.njk' %} - -{% block head %} - - -{% endblock %} - -{% block header %} - -
- - - -{% if page.fileSlug !== 'custom' %} - -{% endif %} -

Color

- -
- {% if page.fileSlug === 'custom' %} - - {% else %} - {% set themePage = page %} - {% set paletteURL = '/docs/palettes/' + palette + '/' %} - {% set page = paletteURL | getCollectionItemFromUrl %} - {% set pageSubtitle = "Default color palette" %} - {% include 'page-card.njk' %} - {% set page = themePage %} - {% endif %} - -
-{% endblock %} - -{% block afterContent %} - -

How to use this theme

- -{% markdown %} -You can import this theme from the Web Awesome CDN. - -{% set stylesheet = 'styles/themes/' + page.fileSlug + '.css' %} - - -In HTML -In CSS - - -Add the following code to the `` of your page: -```html { v-content:html="code.html.highlighted" } - -``` - - - -Add the following code at the top of your CSS file: -```css { v-content:html="code.css.highlighted" } -@import url('{% cdnUrl stylesheet %}'); -``` - - - -## Dark mode - -To activate the dark color scheme of the theme on any element and its contents, apply the class `wa-dark` to it. -This means you can use different color schemes throughout the page. -Here, we use the default theme with a dark sidebar: - -```html - - - - - - - - - - - -``` - -You can apply the class to the `` element on your page to activate the dark color scheme for the entire page. - -```html - - - - - - - - - -``` -### Detecting Color Scheme Preference - -Web Awesome's themes have both light and dark styles built in. -However, Web Awesome doesn't try to auto-detect the user's light/dark mode preference. -This should be done at the application level. - -As a best practice, to provide a dark theme in your app, you should: - -- Check for [`prefers-color-scheme`](https://stackoverflow.com/a/57795495/567486) and use its value by default -- Allow the user to override the setting in your app -- Remember the user's preference and restore it on subsequent logins - -Web Awesome avoids using the `prefers-color-scheme` media query because not all apps support dark mode, and it would break things for the ones that don't. - -Assuming the user's preference is in a variable called `colorScheme` (values: `auto`, `light`, `dark`), -you can use the following JS snippet to apply the `wa-dark` class to the `` element accordingly: - -```js -const systemDark = window.matchMedia('(prefers-color-scheme: dark)'); -const applyDark = function (event = systemDark) { - const isDark = colorScheme === 'auto' ? event.matches : colorScheme === 'dark'; - document.documentElement.classList.toggle('wa-dark', isDark); -}; -systemDark.addEventListener('change', applyDark); -applyDark(); -``` - -
{# end theme app #} -{% endmarkdown %} -{% endblock %} diff --git a/packages/webawesome/docs/_layouts/utility.njk b/packages/webawesome/docs/_layouts/utility.njk deleted file mode 100644 index 032e98277..000000000 --- a/packages/webawesome/docs/_layouts/utility.njk +++ /dev/null @@ -1,19 +0,0 @@ -{% extends '../_layouts/block.njk' %} - -{% block afterContent %} -{% if file %} -{% markdown %} -## Opting In - -If you want to use this utility **only** without [all others](../), you can include the following CSS file from the Web Awesome CDN. - -{% set stylesheet = file %} -{% include 'import-stylesheet-code.md.njk' %} - -Want them all? -Follow the [instructions on the Utilities overview page](../) to get all Web Awesome utilities. - -{% endmarkdown %} -{% endif %} - -{% endblock %} diff --git a/packages/webawesome/docs/_utils/filters.js b/packages/webawesome/docs/_utils/filters.js deleted file mode 100644 index 5b0f5a285..000000000 --- a/packages/webawesome/docs/_utils/filters.js +++ /dev/null @@ -1,410 +0,0 @@ -import { parse } from 'path'; - -export function stripExtension(string) { - return parse(string).name; -} - -export function stripPrefix(content) { - return content.replace(/^wa-/, ''); -} - -// Trims whitespace and pipes from the start and end of a string. Useful for CEM types, which can be pipe-delimited. -// With Prettier 3, this means a leading pipe will exist be present when the line wraps. -export function trimPipes(content) { - return typeof content === 'string' ? content.replace(/^(\s|\|)/g, '').replace(/(\s|\|)$/g, '') : content; -} - -export function keys(obj) { - return Object.keys(obj); -} - -export function log(firstArg, ...rest) { - console.log(firstArg, ...rest); - return firstArg; -} - -function getCollection(name) { - // From https://github.com/11ty/eleventy/blob/d3d24ccddb804e6e14773501d8c4e07e2c4b9c2b/src/Filters/GetLocaleCollectionItem.js#L39-L43 - return this.collections?.[name] || this.ctx?.collections?.[name] || this.context?.environments?.collections?.[name]; -} - -export function getCollectionItemFromUrl(url, collection) { - if (!url) { - return null; - } - collection ??= getCollection.call(this, 'all') || []; - return collection.find(item => item.url === url); -} - -export function getTitleFromUrl(url, collection) { - const item = getCollectionItemFromUrl.call(this, url, collection); - return item?.data.title || ''; -} - -export function split(text, separator) { - return (text + '').split(separator).filter(Boolean); -} - -export function ancestors(url, { withCurrent = false, withRoot = false } = {}) { - let ret = []; - let currentUrl = url; - let currentItem = getCollectionItemFromUrl.call(this, url); - - if (!currentItem) { - // Might have eleventyExcludeFromCollections, jump to parent - let parentUrl = this.ctx.parentUrl; - if (parentUrl) { - url = parentUrl; - } - } - - for (let item; (item = getCollectionItemFromUrl.call(this, url)); url = item.data.parentUrl) { - ret.unshift(item); - } - - if (!withRoot && ret[0]?.page.url === '/') { - // Remove root - ret.shift(); - } - - if (!withCurrent && ret.at(-1)?.page.url === currentUrl) { - // Remove current page - ret.pop(); - } - - return ret; -} - -export function isObject(value) { - return typeof value === 'object' && value !== null && !Array.isArray(value); -} - -export function isList(value) { - return Array.isArray(value) || value instanceof Set; -} - -/** Get an Array or Set */ -export function toList(value) { - return isList(value) ? value : [value]; -} - -/** - * Convert any value to something that can be iterated over with a for key, value loop. - * Arrays and sets will be converted to a Map of value -> undefined - */ -export function dict(value) { - if (value instanceof Map || isObject(value)) { - return value; - } - - let list = toList(value); - return new Map([...list].map(item => [item, undefined])); -} - -export function deepValue(obj, key) { - key = Array.isArray(key) ? key : key.split('.'); - return key.reduce((subObj, property) => subObj?.[property], obj); -} - -export function number(value, options) { - if (typeof value !== 'number' && isNaN(value)) { - return value; - } - - let lang = options?.lang ?? 'en'; - if (options?.lang) { - delete options.lang; - } - - if (!options || Object.keys(options).length === 0) { - options = { maximumSignificantDigits: 3 }; - } - - return Number(value).toLocaleString(lang, options); -} - -export function isNumeric(value) { - return typeof value === 'number' || (typeof value === 'string' && !isNaN(value)); -} - -export function isString(value) { - return typeof value === 'string'; -} - -export function isEmpty(value) { - return value === null || value === undefined || value === ''; -} - -function compare(a, b) { - let isEmptyA = isEmpty(a); - let isEmptyB = isEmpty(b); - - if (isEmptyA) { - if (isEmptyB) { - return 0; - } else { - return 1; - } - } else if (isEmptyB) { - return -1; - } - - // Both strings, and at least one non-numeric - if (isNumeric(a) || isNumeric(b)) { - return a - b; - } - - return (a + '').localeCompare(b); -} - -/** Sort an array of objects by one or more of their properties */ -export function sort(arr, by = { 'data.order': 1, 'data.title': '' }) { - let keys = Array.isArray(by) ? by : Object.keys(by); - - return arr.sort((a, b) => { - let aValues = keys.map(key => deepValue(a, key) ?? by[key]); - let bValues = keys.map(key => deepValue(b, key) ?? by[key]); - - for (let i = 0; i < aValues.length; i++) { - let aVal = aValues[i]; - let bVal = bValues[i]; - let result = compare(aVal, bVal); - - // They are not equal in terms of comparison OR we're at the last key - if (result !== 0 || i === aValues.length - 1) { - return result; - } - } - }); -} - -/** - * Group an 11ty collection (or any array of objects with a `data.tags` property) by certain tags. - * @param {object[]} collection - * @param { Object | string[]} [options] Options object or array of tags to group by. - * @param {string[] | true} [options.tags] Tags to group by. If true, groups by all tags. - * If not provided/empty, defaults to grouping by page hierarchy, with any pages with more than 1 children becoming groups. - * @param {string[]} [options.groups] The groups to use if only a subset or a specific order is desired. Defaults to `options.tags`. - * @param {string[]} [options.titles] Any title overrides for groups. - * @param {string | false} [options.other="Other"] The title to use for the "Other" group. If `false`, the "Other" group is removed.. - * @returns { Object. } An object of group ids to arrays of page objects. - */ -export function groupPages(collection, options = {}, page) { - if (!collection) { - console.error(`Empty collection passed to groupPages() to group by ${JSON.stringify(options)}`); - } - - if (Array.isArray(options)) { - options = { tags: options }; - } - - let { tags, groups, titles = {}, other = 'Other' } = options; - - if (groups === undefined && Array.isArray(tags)) { - groups = tags; - } - - let grouping; - - if (tags) { - grouping = { - isGroup: item => undefined, - getCandidateGroups: item => item.data.tags, - getGroupMeta: group => ({}), - }; - } else { - grouping = { - isGroup: item => (item.data.children.length >= 2 ? item.page.url : undefined), - getCandidateGroups: item => { - let parentUrl = item.data.parentUrl; - if (page?.url === parentUrl) { - return []; - } - return [parentUrl]; - }, - getGroupMeta: group => { - let item = byUrl[group] || getCollectionItemFromUrl.call(this, group); - return { - title: item?.data.title, - url: group, - item, - }; - }, - sortGroups: groups => sort(groups.map(url => byUrl[url]).filter(Boolean)).map(item => item.page.url), - }; - } - - let byUrl = {}; - let byParentUrl = {}; - - for (let item of collection) { - let url = item.page.url; - let parentUrl = item.data.parentUrl; - - byUrl[url] = item; - - if (parentUrl) { - byParentUrl[parentUrl] ??= []; - byParentUrl[parentUrl].push(item); - } - } - - let urlToGroups = {}; - - for (let item of collection) { - let url = item.page.url; - let parentUrl = item.data.parentUrl; - - if (grouping.isGroup(item)) { - continue; - } - - let parentItem = byUrl[parentUrl]; - if (parentItem && !grouping.isGroup(parentItem)) { - // Their parent is also here and is not a group - continue; - } - - let candidateGroups = grouping.getCandidateGroups(item); - - if (groups) { - candidateGroups = candidateGroups.filter(group => groups.includes(group)); - } - - urlToGroups[url] ??= []; - - for (let group of candidateGroups) { - urlToGroups[url].push(group); - } - } - - let ret = {}; - - for (let url in urlToGroups) { - let groups = urlToGroups[url]; - let item = byUrl[url]; - - if (groups.length === 0) { - // Not filtered out but also not categorized - groups = ['other']; - } - - for (let group of groups) { - ret[group] ??= []; - ret[group].push(item); - - if (!ret[group].meta) { - if (group === 'other') { - ret[group].meta = { title: other }; - } else { - ret[group].meta = grouping.getGroupMeta(group); - ret[group].meta.title = titles[group] ?? ret[group].meta.title ?? capitalize(group); - } - } - } - } - - if (other === false) { - delete ret.other; - } - - // Sort - let sortedGroups = groups ?? grouping.sortGroups?.(Object.keys(ret)); - - if (sortedGroups) { - ret = sortObject(ret, sortedGroups); - } else { - // At least make sure other is last - if (ret.other) { - let otherGroup = ret.other; - delete ret.other; - ret.other = otherGroup; - } - } - - Object.defineProperty(ret, 'meta', { - value: { - groupCount: Object.keys(ret).length, - }, - enumerable: false, - }); - - return ret; -} - -/** - * Sort an object by its keys - * @param {*} obj - * @param {function | string[]} order - */ -function sortObject(obj, order) { - let ret = {}; - let sortedKeys = Array.isArray(order) ? order : Object.keys(obj).sort(order); - - for (let key of sortedKeys) { - if (key in obj) { - ret[key] = obj[key]; - } - } - - // Add any keys that weren't in the order - for (let key in obj) { - if (!(key in ret)) { - ret[key] = obj[key]; - } - } - - return ret; -} - -function capitalize(str) { - str += ''; - return str.charAt(0).toUpperCase() + str.slice(1); -} - -const IDENTITY = x => x; - -/** - * Helper to print out one or more HTML attributes, especially conditional ones. - * Usage in 11ty: - * - Single attribute: `` - * - Multiple attributes: `` - * - * @overload - * @param {any} value - The attribute value If falsey, the attribute is not printed. If `true` the attribute is printed without a value. - * @param {string} name - The name of the attribute - * - * @overload - * @param {Object} obj - Map of attribute names to values - * - * @returns {string} The attribute string. No `| safe` is needed. - */ -export function attr(value, name) { - const safe = this?.env.filters.safe ?? IDENTITY; - - if (arguments.length === 1 && value && typeof value === 'object') { - // Called with a single object argument of names to values - let ret = Object.entries(obj) - .map(([name, value]) => attr(value, name)) - .join(''); - return safe(ret); - } - - if (!value) { - // false, "", null, undefined - return ''; - } - - let ret = ' ' + name + (value === true ? '' : `="${value}"`); - - return safe(ret); -} - -/** - * Format an object as JSON, with formatting & indentation (unlike the default `dump` filter) - * @param {*} value - * @returns {string} - */ -export function json(value) { - return JSON.stringify(value, null, 2); -} diff --git a/packages/webawesome/docs/assets/components/scoped.js b/packages/webawesome/docs/assets/components/scoped.js deleted file mode 100644 index a4c777119..000000000 --- a/packages/webawesome/docs/assets/components/scoped.js +++ /dev/null @@ -1,172 +0,0 @@ -/** - * Low-level utility to encapsulate a bit of HTML (mainly to apply certain stylesheets to it without them leaking to the rest of the page) - * Usage: - */ -import { discover } from '/dist/webawesome.js'; - -const imports = new Set(); -const fontFaceRules = new Set(); - -export default class WaScoped extends HTMLElement { - constructor() { - super(); - this.attachShadow({ mode: 'open' }); - - this.observer = new MutationObserver(records => this.render(records)); - this.observer.observe(this, { childList: true, subtree: true, characterData: true }); - } - - connectedCallback() { - this.render(); - this.ownerDocument.documentElement.addEventListener('wa-color-scheme-change', e => - this.#applyDarkMode(e.detail.dark), - ); - } - - render(records) { - this.observer.takeRecords(); - this.observer.disconnect(); - - this.shadowRoot.innerHTML = ''; - - // To avoid mutating this.childNodes while iterating over it - let nodes = []; - - for (let template of this.childNodes) { - if (!(template instanceof HTMLTemplateElement)) { - if (template.nodeType === Node.ELEMENT_NODE) { - console.warn(' can only contain