decantr 0.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +868 -0
- package/CHANGELOG.md +255 -0
- package/CLAUDE.md +178 -0
- package/LICENSE +21 -0
- package/README.md +229 -0
- package/cli/art.js +127 -0
- package/cli/commands/a11y.js +61 -0
- package/cli/commands/audit.js +225 -0
- package/cli/commands/build.js +38 -0
- package/cli/commands/dev.js +18 -0
- package/cli/commands/doctor.js +197 -0
- package/cli/commands/figma-sync.js +48 -0
- package/cli/commands/figma-tokens.js +55 -0
- package/cli/commands/generate.js +26 -0
- package/cli/commands/init.js +116 -0
- package/cli/commands/lint.js +209 -0
- package/cli/commands/mcp.js +530 -0
- package/cli/commands/migrate.js +175 -0
- package/cli/commands/test.js +38 -0
- package/cli/commands/validate.js +354 -0
- package/cli/index.js +113 -0
- package/package.json +95 -0
- package/reference/atoms.md +517 -0
- package/reference/behaviors.md +384 -0
- package/reference/build-tooling.md +275 -0
- package/reference/color-guidelines.md +965 -0
- package/reference/component-lifecycle.md +137 -0
- package/reference/compound-spacing.md +95 -0
- package/reference/decantation-process.md +499 -0
- package/reference/dev-server-routes.md +93 -0
- package/reference/form-system.md +253 -0
- package/reference/i18n.md +336 -0
- package/reference/icons.md +576 -0
- package/reference/llm-primer.md +953 -0
- package/reference/plugins.md +252 -0
- package/reference/registry-consumption.md +76 -0
- package/reference/router.md +217 -0
- package/reference/shells.md +116 -0
- package/reference/spatial-guidelines.md +541 -0
- package/reference/ssr.md +234 -0
- package/reference/state-data.md +215 -0
- package/reference/state-patterns.md +166 -0
- package/reference/state.md +194 -0
- package/reference/style-system.md +110 -0
- package/reference/tokens.md +460 -0
- package/src/app.js +19 -0
- package/src/chart/_animate.js +266 -0
- package/src/chart/_base.js +109 -0
- package/src/chart/_data.js +209 -0
- package/src/chart/_format.js +106 -0
- package/src/chart/_interact.js +364 -0
- package/src/chart/_palette.js +105 -0
- package/src/chart/_renderer.js +52 -0
- package/src/chart/_scene.js +262 -0
- package/src/chart/_shared.js +371 -0
- package/src/chart/index.js +637 -0
- package/src/chart/layouts/_layout-base.js +328 -0
- package/src/chart/layouts/cartesian.js +148 -0
- package/src/chart/layouts/hierarchy.js +562 -0
- package/src/chart/layouts/polar.js +101 -0
- package/src/chart/renderers/canvas.js +179 -0
- package/src/chart/renderers/svg.js +256 -0
- package/src/chart/renderers/webgpu.js +715 -0
- package/src/chart/types/_type-base.js +26 -0
- package/src/chart/types/area.js +134 -0
- package/src/chart/types/bar.js +173 -0
- package/src/chart/types/box-plot.js +125 -0
- package/src/chart/types/bubble.js +63 -0
- package/src/chart/types/candlestick.js +115 -0
- package/src/chart/types/chord.js +85 -0
- package/src/chart/types/combination.js +108 -0
- package/src/chart/types/funnel.js +68 -0
- package/src/chart/types/gauge.js +163 -0
- package/src/chart/types/heatmap.js +98 -0
- package/src/chart/types/histogram.js +71 -0
- package/src/chart/types/line.js +111 -0
- package/src/chart/types/org-chart.js +93 -0
- package/src/chart/types/pie.js +81 -0
- package/src/chart/types/radar.js +96 -0
- package/src/chart/types/radial.js +68 -0
- package/src/chart/types/range-area.js +55 -0
- package/src/chart/types/range-bar.js +61 -0
- package/src/chart/types/sankey.js +73 -0
- package/src/chart/types/scatter.js +66 -0
- package/src/chart/types/sparkline.js +81 -0
- package/src/chart/types/sunburst.js +69 -0
- package/src/chart/types/swimlane.js +88 -0
- package/src/chart/types/treemap.js +62 -0
- package/src/chart/types/waterfall.js +100 -0
- package/src/components/_base.js +1658 -0
- package/src/components/_behaviors.js +1140 -0
- package/src/components/_primitives.js +534 -0
- package/src/components/_qr-encoder.js +539 -0
- package/src/components/accordion.js +207 -0
- package/src/components/affix.js +62 -0
- package/src/components/alert-dialog.js +75 -0
- package/src/components/alert.js +47 -0
- package/src/components/aspect-ratio.js +24 -0
- package/src/components/avatar-group.js +55 -0
- package/src/components/avatar.js +38 -0
- package/src/components/back-top.js +75 -0
- package/src/components/badge.js +74 -0
- package/src/components/banner.js +68 -0
- package/src/components/breadcrumb.js +162 -0
- package/src/components/button.js +115 -0
- package/src/components/calendar.js +131 -0
- package/src/components/card.js +192 -0
- package/src/components/carousel.js +98 -0
- package/src/components/cascader.js +261 -0
- package/src/components/checkbox.js +80 -0
- package/src/components/chip.js +81 -0
- package/src/components/code-block.js +82 -0
- package/src/components/collapsible.js +50 -0
- package/src/components/color-palette.js +438 -0
- package/src/components/color-picker.js +314 -0
- package/src/components/combobox.js +181 -0
- package/src/components/command.js +174 -0
- package/src/components/comment.js +206 -0
- package/src/components/context-menu.js +76 -0
- package/src/components/data-table.js +724 -0
- package/src/components/date-picker.js +217 -0
- package/src/components/date-range-picker.js +244 -0
- package/src/components/datetime-picker.js +271 -0
- package/src/components/descriptions.js +68 -0
- package/src/components/drawer.js +179 -0
- package/src/components/dropdown.js +88 -0
- package/src/components/empty.js +41 -0
- package/src/components/float-button.js +90 -0
- package/src/components/form.js +106 -0
- package/src/components/hover-card.js +49 -0
- package/src/components/icon.js +87 -0
- package/src/components/image.js +97 -0
- package/src/components/index.js +117 -0
- package/src/components/input-group.js +75 -0
- package/src/components/input-number.js +155 -0
- package/src/components/input-otp.js +178 -0
- package/src/components/input.js +91 -0
- package/src/components/kbd.js +36 -0
- package/src/components/label.js +25 -0
- package/src/components/list.js +118 -0
- package/src/components/masked-input.js +236 -0
- package/src/components/mentions.js +165 -0
- package/src/components/menu.js +259 -0
- package/src/components/message.js +80 -0
- package/src/components/modal.js +147 -0
- package/src/components/navigation-menu.js +166 -0
- package/src/components/notification.js +84 -0
- package/src/components/pagination.js +104 -0
- package/src/components/placeholder.js +132 -0
- package/src/components/popconfirm.js +70 -0
- package/src/components/popover.js +58 -0
- package/src/components/progress.js +61 -0
- package/src/components/qrcode.js +251 -0
- package/src/components/radiogroup.js +120 -0
- package/src/components/range-slider.js +176 -0
- package/src/components/rate.js +186 -0
- package/src/components/resizable.js +83 -0
- package/src/components/result.js +57 -0
- package/src/components/scroll-area.js +43 -0
- package/src/components/segmented.js +97 -0
- package/src/components/select.js +165 -0
- package/src/components/separator.js +31 -0
- package/src/components/shell.js +407 -0
- package/src/components/skeleton.js +39 -0
- package/src/components/slider.js +141 -0
- package/src/components/sortable-list.js +176 -0
- package/src/components/space.js +42 -0
- package/src/components/spinner.js +112 -0
- package/src/components/splitter.js +147 -0
- package/src/components/statistic.js +136 -0
- package/src/components/steps.js +99 -0
- package/src/components/switch.js +95 -0
- package/src/components/table.js +44 -0
- package/src/components/tabs.js +216 -0
- package/src/components/tag.js +115 -0
- package/src/components/textarea.js +82 -0
- package/src/components/time-picker.js +153 -0
- package/src/components/time-range-picker.js +170 -0
- package/src/components/timeline.js +226 -0
- package/src/components/toast.js +71 -0
- package/src/components/toggle.js +213 -0
- package/src/components/tooltip.js +57 -0
- package/src/components/tour.js +159 -0
- package/src/components/transfer.js +163 -0
- package/src/components/tree-select.js +274 -0
- package/src/components/tree.js +141 -0
- package/src/components/typography.js +136 -0
- package/src/components/upload.js +118 -0
- package/src/components/visually-hidden.js +20 -0
- package/src/components/watermark.js +124 -0
- package/src/core/index.js +539 -0
- package/src/core/lifecycle.js +69 -0
- package/src/css/atoms.js +651 -0
- package/src/css/components.js +940 -0
- package/src/css/derive.js +1296 -0
- package/src/css/index.js +265 -0
- package/src/css/runtime.js +268 -0
- package/src/css/styles/addons/bioluminescent.js +93 -0
- package/src/css/styles/addons/clay.js +70 -0
- package/src/css/styles/addons/clean.js +57 -0
- package/src/css/styles/addons/command-center.js +143 -0
- package/src/css/styles/addons/dopamine.js +83 -0
- package/src/css/styles/addons/editorial.js +80 -0
- package/src/css/styles/addons/glassmorphism.js +99 -0
- package/src/css/styles/addons/liquid-glass.js +105 -0
- package/src/css/styles/addons/prismatic.js +100 -0
- package/src/css/styles/addons/retro.js +63 -0
- package/src/css/styles/auradecantism.js +96 -0
- package/src/css/theme-registry.js +444 -0
- package/src/data/entity.js +281 -0
- package/src/data/index.js +13 -0
- package/src/data/persist.js +225 -0
- package/src/data/query.js +839 -0
- package/src/data/realtime.js +299 -0
- package/src/data/url.js +177 -0
- package/src/data/worker.js +134 -0
- package/src/explorer/archetypes.js +243 -0
- package/src/explorer/atoms.js +228 -0
- package/src/explorer/charts.js +497 -0
- package/src/explorer/components.js +129 -0
- package/src/explorer/foundations.js +949 -0
- package/src/explorer/icons.js +178 -0
- package/src/explorer/patterns.js +247 -0
- package/src/explorer/recipes.js +194 -0
- package/src/explorer/shared/pattern-examples.js +1337 -0
- package/src/explorer/shared/showcase-renderer.js +958 -0
- package/src/explorer/shared/spec-table.js +41 -0
- package/src/explorer/shared/usage-links.js +87 -0
- package/src/explorer/shell-config.js +10 -0
- package/src/explorer/shells.js +551 -0
- package/src/explorer/styles.js +161 -0
- package/src/explorer/tokens.js +262 -0
- package/src/explorer/tools.js +525 -0
- package/src/form/index.js +804 -0
- package/src/i18n/index.js +251 -0
- package/src/icons/essential.js +479 -0
- package/src/icons/index.js +53 -0
- package/src/plugins/index.js +282 -0
- package/src/registry/archetypes/content-site.json +71 -0
- package/src/registry/archetypes/docs-explorer.json +23 -0
- package/src/registry/archetypes/ecommerce.json +104 -0
- package/src/registry/archetypes/financial-dashboard.json +77 -0
- package/src/registry/archetypes/index.json +41 -0
- package/src/registry/archetypes/portfolio.json +82 -0
- package/src/registry/archetypes/recipe-community.json +159 -0
- package/src/registry/archetypes/saas-dashboard.json +86 -0
- package/src/registry/architect/cross-cutting.json +45 -0
- package/src/registry/architect/domains/ecommerce.json +294 -0
- package/src/registry/architect/domains/financial-services.json +302 -0
- package/src/registry/architect/index.json +26 -0
- package/src/registry/architect/traits.json +379 -0
- package/src/registry/atoms.json +16 -0
- package/src/registry/chart-showcase.json +160 -0
- package/src/registry/chart.json +136 -0
- package/src/registry/components.json +8616 -0
- package/src/registry/core.json +216 -0
- package/src/registry/css.json +319 -0
- package/src/registry/data.json +135 -0
- package/src/registry/foundations.json +11 -0
- package/src/registry/icons.json +463 -0
- package/src/registry/index.json +101 -0
- package/src/registry/patterns/activity-feed.json +37 -0
- package/src/registry/patterns/article-content.json +27 -0
- package/src/registry/patterns/auth-form.json +37 -0
- package/src/registry/patterns/author-card.json +20 -0
- package/src/registry/patterns/card-grid.json +127 -0
- package/src/registry/patterns/category-nav.json +26 -0
- package/src/registry/patterns/chart-grid.json +36 -0
- package/src/registry/patterns/chat-interface.json +37 -0
- package/src/registry/patterns/checklist-card.json +55 -0
- package/src/registry/patterns/comparison-panel.json +27 -0
- package/src/registry/patterns/component-showcase.json +24 -0
- package/src/registry/patterns/contact-form.json +31 -0
- package/src/registry/patterns/cta-section.json +20 -0
- package/src/registry/patterns/data-table.json +37 -0
- package/src/registry/patterns/detail-header.json +83 -0
- package/src/registry/patterns/detail-panel.json +27 -0
- package/src/registry/patterns/explorer-shell.json +22 -0
- package/src/registry/patterns/filter-bar.json +33 -0
- package/src/registry/patterns/filter-sidebar.json +27 -0
- package/src/registry/patterns/form-sections.json +110 -0
- package/src/registry/patterns/goal-tracker.json +27 -0
- package/src/registry/patterns/hero.json +107 -0
- package/src/registry/patterns/index.json +47 -0
- package/src/registry/patterns/kpi-grid.json +36 -0
- package/src/registry/patterns/media-gallery.json +20 -0
- package/src/registry/patterns/order-history.json +20 -0
- package/src/registry/patterns/pagination.json +19 -0
- package/src/registry/patterns/photo-to-recipe.json +36 -0
- package/src/registry/patterns/pipeline-tracker.json +28 -0
- package/src/registry/patterns/post-list.json +27 -0
- package/src/registry/patterns/pricing-table.json +32 -0
- package/src/registry/patterns/scorecard.json +28 -0
- package/src/registry/patterns/search-bar.json +20 -0
- package/src/registry/patterns/specimen-grid.json +19 -0
- package/src/registry/patterns/stat-card.json +55 -0
- package/src/registry/patterns/stats-bar.json +55 -0
- package/src/registry/patterns/steps-card.json +55 -0
- package/src/registry/patterns/table-of-contents.json +19 -0
- package/src/registry/patterns/testimonials.json +21 -0
- package/src/registry/patterns/timeline.json +27 -0
- package/src/registry/patterns/token-inspector.json +21 -0
- package/src/registry/patterns/wizard.json +27 -0
- package/src/registry/recipe-auradecantism.json +69 -0
- package/src/registry/recipe-clean.json +65 -0
- package/src/registry/recipe-command-center.json +78 -0
- package/src/registry/router.json +73 -0
- package/src/registry/schema/README.md +197 -0
- package/src/registry/skeletons.json +259 -0
- package/src/registry/state.json +137 -0
- package/src/registry/tokens.json +40 -0
- package/src/router/hash.js +17 -0
- package/src/router/history.js +18 -0
- package/src/router/index.js +598 -0
- package/src/ssr/index.js +922 -0
- package/src/state/arrays.js +181 -0
- package/src/state/devtools.js +647 -0
- package/src/state/index.js +498 -0
- package/src/state/middleware.js +288 -0
- package/src/state/scheduler.js +206 -0
- package/src/state/store.js +300 -0
- package/src/tags/index.js +19 -0
- package/src/tannins/auth.js +396 -0
- package/src/test/dom.js +352 -0
- package/src/test/index.js +62 -0
- package/src/test/state.js +306 -0
- package/tools/a11y-audit.js +487 -0
- package/tools/analyzer.js +315 -0
- package/tools/audit.js +706 -0
- package/tools/builder.js +1422 -0
- package/tools/css-extract.js +188 -0
- package/tools/dev-server.js +316 -0
- package/tools/dts-gen.js +1260 -0
- package/tools/figma-components.js +329 -0
- package/tools/figma-patterns.js +516 -0
- package/tools/figma-plugin/code.js +453 -0
- package/tools/figma-plugin/manifest.json +14 -0
- package/tools/figma-plugin/ui.html +268 -0
- package/tools/figma-render.js +293 -0
- package/tools/figma-tokens.js +712 -0
- package/tools/figma-upload.js +318 -0
- package/tools/generate.js +738 -0
- package/tools/icons.js +133 -0
- package/tools/init-templates.js +265 -0
- package/tools/install-hooks.sh +5 -0
- package/tools/migrations/0.5.0.js +53 -0
- package/tools/migrations/0.6.0.js +95 -0
- package/tools/minify.js +170 -0
- package/tools/pre-commit +4 -0
- package/tools/registry.js +662 -0
- package/tools/reset-playground.js +61 -0
- package/tools/starter-templates/content-site/app.js +49 -0
- package/tools/starter-templates/content-site/essence.js +19 -0
- package/tools/starter-templates/content-site/pages.js +31 -0
- package/tools/starter-templates/ecommerce/app.js +50 -0
- package/tools/starter-templates/ecommerce/essence.js +19 -0
- package/tools/starter-templates/ecommerce/pages.js +31 -0
- package/tools/starter-templates/landing-page/app.js +38 -0
- package/tools/starter-templates/landing-page/essence.js +18 -0
- package/tools/starter-templates/landing-page/pages.js +21 -0
- package/tools/starter-templates/portfolio/app.js +45 -0
- package/tools/starter-templates/portfolio/essence.js +19 -0
- package/tools/starter-templates/portfolio/pages.js +33 -0
- package/tools/starter-templates/saas-dashboard/app.js +70 -0
- package/tools/starter-templates/saas-dashboard/essence.js +19 -0
- package/tools/starter-templates/saas-dashboard/pages.js +31 -0
- package/tools/verify-pack.js +203 -0
- package/types/chart.d.ts +77 -0
- package/types/components.d.ts +587 -0
- package/types/core.d.ts +89 -0
- package/types/css.d.ts +149 -0
- package/types/data.d.ts +238 -0
- package/types/form.d.ts +164 -0
- package/types/i18n.d.ts +51 -0
- package/types/icons.d.ts +27 -0
- package/types/index.d.ts +13 -0
- package/types/router.d.ts +116 -0
- package/types/ssr.d.ts +102 -0
- package/types/state.d.ts +83 -0
- package/types/tags.d.ts +62 -0
- package/types/tannins.d.ts +63 -0
- package/types/test.d.ts +48 -0
|
@@ -0,0 +1,460 @@
|
|
|
1
|
+
# Design Token Reference
|
|
2
|
+
|
|
3
|
+
Components use a two-layer CSS system: base CSS (`_base.js`) for structure, style CSS (`styles/*.js` + `derive.js`) for visual identity. Component CSS is organized as a keyed object (`componentCSSMap` in `src/css/components.js`) with 78 sections, enabling build-time pruning of unused component styles. The backward-compatible `componentCSS` export (joined string) is maintained for runtime use. All spacing and typography references design tokens via `var()` with fallbacks.
|
|
4
|
+
|
|
5
|
+
## Typography Tokens
|
|
6
|
+
|
|
7
|
+
| Token | Default | Semantic Role |
|
|
8
|
+
|-------|---------|---------------|
|
|
9
|
+
| `--d-font` | `system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif` | Body font family |
|
|
10
|
+
| `--d-font-mono` | `ui-monospace,SFMono-Regular,"SF Mono",Menlo,Consolas,"Liberation Mono",monospace` | Code font family |
|
|
11
|
+
| `--d-text-xs` | `0.625rem` | Progress labels, avatar-fallback-sm |
|
|
12
|
+
| `--d-text-sm` | `0.75rem` | Badges, tooltips, captions |
|
|
13
|
+
| `--d-text-base` | `0.875rem` | Body default, inputs, tables, tabs, alerts |
|
|
14
|
+
| `--d-text-md` | `1rem` | Feature titles, btn-lg |
|
|
15
|
+
| `--d-text-lg` | `1.125rem` | Card headers, lead text |
|
|
16
|
+
| `--d-text-xl` | `1.25rem` | Dashboard header, sidebar branding |
|
|
17
|
+
| `--d-text-2xl` | `1.5rem` | Section titles |
|
|
18
|
+
| `--d-text-3xl` | `2rem` | Article/page headings, stat values |
|
|
19
|
+
| `--d-text-4xl` | `2.5rem` | Hero headlines, pricing price |
|
|
20
|
+
| `--d-lh-none` | `1` | Single-line (buttons, badges, icons) |
|
|
21
|
+
| `--d-lh-tight` | `1.1` | Large headings, hero text |
|
|
22
|
+
| `--d-lh-snug` | `1.25` | Subheadings |
|
|
23
|
+
| `--d-lh-normal` | `1.5` | Body text, tables, form labels |
|
|
24
|
+
| `--d-lh-relaxed` | `1.6` | Descriptive/long-form text |
|
|
25
|
+
| `--d-lh-loose` | `1.75` | Article body, reading mode |
|
|
26
|
+
| `--d-fw-heading` | `700` | Heading font-weight (retro: `800`) |
|
|
27
|
+
| `--d-fw-title` | `600` | Title/subtitle font-weight (retro: `800`) |
|
|
28
|
+
| `--d-ls-heading` | `-0.025em` | Heading letter-spacing (retro: `0.05em`, stormy-ai: `-0.015em`) |
|
|
29
|
+
| `--d-ls-caps` | `0.05em` | Uppercase label contexts (group labels, table headers, codeblock lang) |
|
|
30
|
+
|
|
31
|
+
## Spacing Tokens
|
|
32
|
+
|
|
33
|
+
> For strategic guidance on when to use these tokens, see `reference/spatial-guidelines.md` §1 The Spacing Scale and §3 Gestalt Proximity Rules.
|
|
34
|
+
|
|
35
|
+
| Token | Default | Common Usage |
|
|
36
|
+
|-------|---------|-------------|
|
|
37
|
+
| `--d-sp-0-5` | `0.125rem` | Segmented padding/gap |
|
|
38
|
+
| `--d-sp-1` | `0.25rem` | Badge padding, minimal gaps |
|
|
39
|
+
| `--d-sp-1-5` | `0.375rem` | Button-sm padding, tooltip padding, chip gap, table-compact |
|
|
40
|
+
| `--d-sp-2` | `0.5rem` | Button gap, input padding, control gaps |
|
|
41
|
+
| `--d-sp-2-5` | `0.625rem` | Button-lg padding, tab vertical padding, tooltip horizontal |
|
|
42
|
+
| `--d-sp-3` | `0.75rem` | Cell padding, alert/toast, accordion |
|
|
43
|
+
| `--d-sp-4` | `1rem` | Tab/accordion padding, element spacing |
|
|
44
|
+
| `--d-sp-5` | `1.25rem` | Container padding (dark/retro `--d-pad`) |
|
|
45
|
+
| `--d-sp-6` | `1.5rem` | Container padding (light), card/feature padding |
|
|
46
|
+
| `--d-sp-8` | `2rem` | Section inline padding, hero margins |
|
|
47
|
+
| `--d-sp-10` | `2.5rem` | Reserved for larger layouts |
|
|
48
|
+
| `--d-sp-12` | `3rem` | Section block padding |
|
|
49
|
+
| `--d-sp-16` | `4rem` | Hero block padding |
|
|
50
|
+
| `--d-pad` | `1.25rem` | Card/Modal container padding (per-theme) |
|
|
51
|
+
| `--d-compound-gap` | `var(--d-sp-3)` | Gap between header/body/footer in compound components |
|
|
52
|
+
| `--d-compound-pad` | `var(--d-pad)` | Inline + block-end padding in compound components |
|
|
53
|
+
| `--d-offset-dropdown` | `2px` | Trigger->panel offset for form dropdowns (select, combobox, etc.) |
|
|
54
|
+
| `--d-offset-menu` | `4px` | Trigger->panel offset for dropdown/context menus |
|
|
55
|
+
| `--d-offset-tooltip` | `6px` | Trigger->panel offset for tooltips |
|
|
56
|
+
| `--d-offset-popover` | `8px` | Trigger->panel offset for popovers/hovercards |
|
|
57
|
+
| `--d-offset-tour` | `12px` | Trigger->panel offset for tour/walkthrough steps |
|
|
58
|
+
|
|
59
|
+
## Field Sizing Tokens
|
|
60
|
+
|
|
61
|
+
> For tier selection logic and touch target rules, see `reference/spatial-guidelines.md` §7 Component Sizing.
|
|
62
|
+
|
|
63
|
+
Height-first, 4-tier sizing system for form components. `md` = density comfortable (zero regression).
|
|
64
|
+
|
|
65
|
+
| Tier | Height | Padding-Y | Padding-X | Font Size | Gap |
|
|
66
|
+
|------|--------|-----------|-----------|-----------|-----|
|
|
67
|
+
| **xs** | `--d-field-h-xs` (1.5rem/24px) | `--d-field-py-xs` (sp-1) | `--d-field-px-xs` (sp-2) | `--d-field-text-xs` (text-xs) | `--d-field-gap-xs` (sp-1) |
|
|
68
|
+
| **sm** | `--d-field-h-sm` (1.75rem/28px) | `--d-field-py-sm` (sp-1) | `--d-field-px-sm` (sp-2-5) | `--d-field-text-sm` (text-sm) | `--d-field-gap-sm` (sp-1-5) |
|
|
69
|
+
| **md** | `--d-field-h-md` (2.25rem/36px) | `--d-field-py-md` (sp-2) | `--d-field-px-md` (sp-4) | `--d-field-text-md` (text-base) | `--d-field-gap-md` (sp-2) |
|
|
70
|
+
| **lg** | `--d-field-h-lg` (2.75rem/44px) | `--d-field-py-lg` (sp-2-5) | `--d-field-px-lg` (sp-6) | `--d-field-text-lg` (text-md) | `--d-field-gap-lg` (sp-2-5) |
|
|
71
|
+
|
|
72
|
+
**Density ↔ tier mapping:** compact → sm tokens, comfortable → md tokens, spacious → lg tokens.
|
|
73
|
+
|
|
74
|
+
**Switch dimension tokens per tier:**
|
|
75
|
+
|
|
76
|
+
| Tier | Width | Height | Thumb |
|
|
77
|
+
|------|-------|--------|-------|
|
|
78
|
+
| xs | `--d-switch-w-xs` (1.5rem) | `--d-switch-h-xs` (0.875rem) | `--d-switch-thumb-xs` (0.625rem) |
|
|
79
|
+
| sm | `--d-switch-w-sm` (1.75rem) | `--d-switch-h-sm` (1rem) | `--d-switch-thumb-sm` (0.75rem) |
|
|
80
|
+
| md | `--d-switch-w` (2.5rem) | `--d-switch-h` (1.375rem) | `--d-switch-thumb` (1rem) |
|
|
81
|
+
| lg | `--d-switch-w-lg` (3.25rem) | `--d-switch-h-lg` (1.75rem) | `--d-switch-thumb-lg` (1.25rem) |
|
|
82
|
+
|
|
83
|
+
**Checkbox/Radio dimension tokens:**
|
|
84
|
+
|
|
85
|
+
| Tier | Size |
|
|
86
|
+
|------|------|
|
|
87
|
+
| xs | `--d-checkbox-size-xs` (0.875rem/14px) |
|
|
88
|
+
| sm | `--d-checkbox-size-sm` (1rem/16px) |
|
|
89
|
+
| md | `--d-checkbox-size` (1.125rem/18px) |
|
|
90
|
+
| lg | `--d-checkbox-size-lg` (1.375rem/22px) |
|
|
91
|
+
|
|
92
|
+
**OTP slot tokens:**
|
|
93
|
+
|
|
94
|
+
| Tier | Width | Height | Font |
|
|
95
|
+
|------|-------|--------|------|
|
|
96
|
+
| sm | `--d-otp-w-sm` (2rem) | `--d-otp-h-sm` (2rem) | `--d-otp-text-sm` (text-base) |
|
|
97
|
+
| md | `--d-otp-w` (2.5rem) | `--d-otp-h` (2.5rem) | `--d-otp-text` (text-lg) |
|
|
98
|
+
| lg | `--d-otp-w-lg` (3rem) | `--d-otp-h-lg` (3rem) | `--d-otp-text-lg` (text-xl) |
|
|
99
|
+
|
|
100
|
+
**Style-specific token overrides (retro):**
|
|
101
|
+
|
|
102
|
+
| Token | clean (default) | retro |
|
|
103
|
+
|-------|----------------|-------|
|
|
104
|
+
| `--d-fw-heading` | 700 | 800 |
|
|
105
|
+
| `--d-fw-title` | 600 | 800 |
|
|
106
|
+
| `--d-fw-medium` | 500 | 700 |
|
|
107
|
+
| `--d-ls-heading` | -0.025em | 0.05em |
|
|
108
|
+
|
|
109
|
+
## Component Anatomy Tokens
|
|
110
|
+
|
|
111
|
+
Fixed dimensions for component internals. These centralize magic numbers and allow density/style overrides.
|
|
112
|
+
|
|
113
|
+
| Token | Default | Component |
|
|
114
|
+
|-------|---------|-----------|
|
|
115
|
+
| `--d-avatar-size-sm` | 24px | Avatar small |
|
|
116
|
+
| `--d-avatar-size` | 36px | Avatar default |
|
|
117
|
+
| `--d-avatar-size-lg` | 48px | Avatar large |
|
|
118
|
+
| `--d-avatar-size-xl` | 64px | Avatar extra-large |
|
|
119
|
+
| `--d-spinner-size-xs` | 12px | Spinner extra-small |
|
|
120
|
+
| `--d-spinner-size-sm` | 16px | Spinner small |
|
|
121
|
+
| `--d-spinner-size-lg` | 28px | Spinner large |
|
|
122
|
+
| `--d-spinner-size-xl` | 36px | Spinner extra-large |
|
|
123
|
+
| `--d-progress-h` | 8px | Progress bar default height |
|
|
124
|
+
| `--d-progress-h-sm` | 4px | Progress bar small |
|
|
125
|
+
| `--d-progress-h-md` | 16px | Progress bar medium |
|
|
126
|
+
| `--d-progress-h-lg` | 24px | Progress bar large |
|
|
127
|
+
| `--d-slider-thumb` | 18px | Slider thumb diameter |
|
|
128
|
+
| `--d-slider-track-h` | 6px | Slider/RangeSlider track height |
|
|
129
|
+
| `--d-badge-dot` | 8px | Badge dot diameter |
|
|
130
|
+
| `--d-carousel-dot` | 8px | Carousel indicator dot diameter |
|
|
131
|
+
| `--d-float-btn-size` | 48px | Float button diameter |
|
|
132
|
+
| `--d-backtop-size` | 40px | Back-to-top button diameter |
|
|
133
|
+
| `--d-step-icon-size` | 2rem | Step/stepper icon diameter |
|
|
134
|
+
| `--d-colorpicker-swatch` | 24px | Color swatch preview |
|
|
135
|
+
| `--d-colorpicker-thumb` | 14px | Picker cursor thumb |
|
|
136
|
+
| `--d-colorpicker-preset` | 20px | Preset color swatch |
|
|
137
|
+
| `--d-colorpicker-sat-h` | 150px | Saturation panel height |
|
|
138
|
+
| `--d-colorpicker-bar-h` | 12px | Hue/alpha bar height |
|
|
139
|
+
| `--d-timeline-dot` | 10px | Timeline dot diameter |
|
|
140
|
+
| `--d-timeline-dot-lg` | 24px | Timeline large dot |
|
|
141
|
+
| `--d-timeline-sm-dot` | 8px | Timeline small-size dot |
|
|
142
|
+
| `--d-timeline-sm-dot-lg` | 20px | Timeline small-size large dot |
|
|
143
|
+
| `--d-timeline-lg-dot` | 32px | Timeline large-size dot |
|
|
144
|
+
| `--d-timeline-lg-dot-lg` | 40px | Timeline large-size large dot |
|
|
145
|
+
| `--d-timeline-line-w` | 2px | Timeline connector line width |
|
|
146
|
+
| `--d-rangeslider-thumb` | 16px | Range slider thumb diameter |
|
|
147
|
+
| `--d-slide-distance` | 8px | Slide-in/out animation distance |
|
|
148
|
+
|
|
149
|
+
## Semantic Color Tokens
|
|
150
|
+
|
|
151
|
+
| Token Pattern | Count | Description |
|
|
152
|
+
|---------------|-------|-------------|
|
|
153
|
+
| `--d-{role}` | 7 | Base palette: primary, accent, tertiary, success, warning, error, info |
|
|
154
|
+
| `--d-{role}-fg` | 7 | WCAG AA foreground on base |
|
|
155
|
+
| `--d-{role}-hover` | 7 | Hover state |
|
|
156
|
+
| `--d-{role}-active` | 7 | Active/pressed state |
|
|
157
|
+
| `--d-{role}-subtle` | 7 | Low-opacity tint background |
|
|
158
|
+
| `--d-{role}-subtle-fg` | 7 | Text on subtle background |
|
|
159
|
+
| `--d-{role}-on-subtle` | 7 | Contrast-safe role color for interactive elements on subtle bg (buttons, chips, toggles) |
|
|
160
|
+
| `--d-{role}-border` | 7 | Semi-transparent border |
|
|
161
|
+
| `--d-bg`, `--d-fg` | 2 | Page background / foreground |
|
|
162
|
+
| `--d-muted`, `--d-muted-fg` | 2 | Muted text (labels, descriptions) |
|
|
163
|
+
| `--d-border`, `--d-border-strong` | 2 | Border colors |
|
|
164
|
+
| `--d-ring` | 1 | Focus ring color (defaults to primary) |
|
|
165
|
+
| `--d-overlay` | 1 | Modal/dialog backdrop |
|
|
166
|
+
| `--d-surface-{0-3}` | 4 | Surface backgrounds (canvas -> overlay) |
|
|
167
|
+
| `--d-surface-{0-3}-fg` | 4 | Surface foregrounds |
|
|
168
|
+
| `--d-surface-{0-3}-border` | 4 | Surface borders |
|
|
169
|
+
| `--d-surface-{1-3}-filter` | 3 | Backdrop-filter for glass styles |
|
|
170
|
+
| `--d-elevation-{0-3}` | 4 | Box-shadow by level |
|
|
171
|
+
|
|
172
|
+
## Chrome Tokens
|
|
173
|
+
|
|
174
|
+
Inverted chrome for header/sidebar navigation. In light mode, chrome is dark (tinted toward primary) for anchoring; in dark mode, chrome blends with the surface hierarchy.
|
|
175
|
+
|
|
176
|
+
| Token | Light Mode | Dark Mode | Description |
|
|
177
|
+
|-------|-----------|-----------|-------------|
|
|
178
|
+
| `--d-chrome-bg` | Dark (bgDark + 12% primary) | lighten(bg, 4) | Chrome background |
|
|
179
|
+
| `--d-chrome-fg` | Auto (white on dark) | `#fafafa` | Chrome foreground |
|
|
180
|
+
| `--d-chrome-border` | lighten(chromeBg, 10) | lighten(bg, 12) | Chrome border |
|
|
181
|
+
| `--d-chrome-muted` | lighten(chromeBg, 30) | lighten(neutral, 15) | Muted text in chrome |
|
|
182
|
+
| `--d-chrome-hover` | lighten(chromeBg, 6) | lighten(chromeBg, 6) | Chrome hover state |
|
|
183
|
+
| `--d-chrome-active` | lighten(chromeBg, 12) | lighten(chromeBg, 10) | Chrome active state |
|
|
184
|
+
|
|
185
|
+
**Usage:** Apply `--d-chrome-bg` + `--d-chrome-fg` to sidebar/header containers. Use `--d-chrome-hover`/`--d-chrome-active` for nav item states.
|
|
186
|
+
|
|
187
|
+
## Z-Index Tokens
|
|
188
|
+
|
|
189
|
+
| Token | Value | Usage |
|
|
190
|
+
|-------|-------|-------|
|
|
191
|
+
| `--d-z-dropdown` | 1000 | Select, combobox, datepicker, cascader, dropdown, menu |
|
|
192
|
+
| `--d-z-sticky` | 1100 | Affix, float button |
|
|
193
|
+
| `--d-z-modal` | 1200 | Modal, drawer, image overlay, tour |
|
|
194
|
+
| `--d-z-popover` | 1300 | Popover, popconfirm, context menu, hovercard |
|
|
195
|
+
| `--d-z-toast` | 1400 | Toast, notification, message containers |
|
|
196
|
+
| `--d-z-tooltip` | 1500 | Tooltip |
|
|
197
|
+
|
|
198
|
+
## Interaction Tokens
|
|
199
|
+
|
|
200
|
+
`--d-hover-translate`, `--d-hover-shadow`, `--d-hover-brightness`, `--d-active-scale`, `--d-active-translate`, `--d-active-shadow`, `--d-focus-ring-width`, `--d-focus-ring-color`, `--d-focus-ring-offset`, `--d-focus-ring-style`, `--d-selection-bg`, `--d-selection-fg`
|
|
201
|
+
|
|
202
|
+
## Motion Tokens
|
|
203
|
+
|
|
204
|
+
`--d-duration-instant`, `--d-duration-fast`, `--d-duration-normal`, `--d-duration-slow`, `--d-duration-spin`, `--d-easing-standard`, `--d-easing-decelerate`, `--d-easing-accelerate`, `--d-easing-bounce`
|
|
205
|
+
|
|
206
|
+
| Token | instant | snappy | smooth | bouncy |
|
|
207
|
+
|-------|---------|--------|--------|--------|
|
|
208
|
+
| `--d-duration-spin` | 200ms | 500ms | 850ms | 1000ms |
|
|
209
|
+
|
|
210
|
+
Spinner variants use `calc(var(--d-duration-spin) * N)` for staggered timings (dots ×1.6, bars ×1.4, pulse/orbit ×1.8).
|
|
211
|
+
|
|
212
|
+
## Gradient Tokens
|
|
213
|
+
|
|
214
|
+
`--d-gradient-brand`, `--d-gradient-brand-alt`, `--d-gradient-brand-full`, `--d-gradient-surface`, `--d-gradient-overlay`, `--d-gradient-subtle`, `--d-gradient-text`, `--d-gradient-text-alt`, `--d-gradient-angle`, `--d-gradient-intensity`
|
|
215
|
+
|
|
216
|
+
## Chart Tokens
|
|
217
|
+
|
|
218
|
+
| Token Pattern | Count | Description |
|
|
219
|
+
|---|---|---|
|
|
220
|
+
| `--d-chart-{0-7}` | 8 | Base chart palette (resolved hex for SVG/canvas compat) |
|
|
221
|
+
| `--d-chart-{0-7}-ext-1` | 8 | Extended: lightness-shifted variation |
|
|
222
|
+
| `--d-chart-{0-7}-ext-2` | 8 | Extended: hue-rotated +30 variation |
|
|
223
|
+
| `--d-chart-{0-7}-ext-3` | 8 | Extended: hue-rotated -30 + lightness variation |
|
|
224
|
+
| `--d-chart-tooltip-bg` | 1 | Chart tooltip background (= surface-2) |
|
|
225
|
+
| `--d-chart-grid` | 1 | Grid lines (mode-aware alpha) |
|
|
226
|
+
| `--d-chart-axis` | 1 | Axis lines (mode-aware alpha) |
|
|
227
|
+
| `--d-chart-crosshair` | 1 | Crosshair indicator (mode-aware alpha) |
|
|
228
|
+
| `--d-chart-selection` | 1 | Selection highlight (primary @ 15% alpha) |
|
|
229
|
+
|
|
230
|
+
When colorblind mode is active (`setColorblindMode()`), `--d-chart-{0-7}` are replaced with Wong/Okabe-Ito adapted palettes. Extended tokens are re-derived from the CVD-safe base.
|
|
231
|
+
|
|
232
|
+
All color derivation uses **OKLCH** (perceptually uniform color space). See `reference/color-guidelines.md` §13 and `reference/style-system.md`.
|
|
233
|
+
|
|
234
|
+
## Radius Token Hierarchy
|
|
235
|
+
|
|
236
|
+
Components use semantic radius tokens that resolve differently per personality preset:
|
|
237
|
+
|
|
238
|
+
| Token | sharp | rounded | pill | Semantic Role |
|
|
239
|
+
|-------|-------|---------|------|---------------|
|
|
240
|
+
| `--d-radius-sm` | 2px | 4px | 9999px | Checkboxes, inline code |
|
|
241
|
+
| `--d-radius` | 0 | 8px | 9999px | Inline controls: buttons, inputs, chips, tags, select triggers |
|
|
242
|
+
| `--d-radius-panel` | 0 | 8px | 16px | Containers/panels: dropdowns, tooltips, alerts, textarea, menus, popovers |
|
|
243
|
+
| `--d-radius-inner` | 0 | 6px | 14px | Nested interactive cells: datepicker days, toggle/segmented items, close buttons |
|
|
244
|
+
| `--d-radius-lg` | 0 | 12px | 24px | Large surfaces: cards, modals, tables |
|
|
245
|
+
| `--d-radius-full` | 9999px | 9999px | 9999px | Circles, always-pill elements |
|
|
246
|
+
|
|
247
|
+
**Assignment rules:**
|
|
248
|
+
- Single-line inline controls (buttons, inputs, chips, tags, select triggers) -> `--d-radius`
|
|
249
|
+
- Floating panels, overlays, feedback containers, tall form fields -> `--d-radius-panel`
|
|
250
|
+
- Interactive elements nested inside panels/groups (calendar cells, menu links, toggle items) -> `--d-radius-inner`
|
|
251
|
+
- Large container surfaces (cards, modals, dialogs, tables) -> `--d-radius-lg`
|
|
252
|
+
|
|
253
|
+
**Concentric radius rule:** `--d-radius-inner` MUST equal `--d-radius-panel` minus the container's padding so that nested rounded rectangles follow concentric curves. For pill: `16px - 2px (--d-sp-0-5) = 14px`. Mismatched inner/outer radii create a visually jarring flat-inside-round artifact. When adding a new radius preset, always derive `inner` from `panel - padding`.
|
|
254
|
+
|
|
255
|
+
New components MUST use the appropriate semantic radius token. Never use `--d-radius` for panels or inner cells.
|
|
256
|
+
|
|
257
|
+
## Composition Guidelines
|
|
258
|
+
|
|
259
|
+
- **External layout** — Use atomic CSS (`_gap4`, `_grid _gc3`, `_p6`) for spacing between components
|
|
260
|
+
- **Internal spacing** — Components handle their own padding via `--d-pad` token; don't add padding inside Card/Modal wrappers
|
|
261
|
+
- **Theme overrides** — Only add padding in theme CSS when it intentionally differs from base (e.g. retro's accordion/tabs)
|
|
262
|
+
- **Token-backed atoms** — Use `_textbase`, `_fwheading`, `_lhnormal` etc. in component and pattern code for theme-customizable typography (see `reference/atoms.md`)
|
|
263
|
+
|
|
264
|
+
## Token Compliance
|
|
265
|
+
|
|
266
|
+
ALL consumer CSS (workbench, docs, generated code) MUST use design tokens. No hardcoded values.
|
|
267
|
+
|
|
268
|
+
### Quick-Reference Mapping
|
|
269
|
+
|
|
270
|
+
| Literal Value | Token |
|
|
271
|
+
|--------------|-------|
|
|
272
|
+
| `0.25rem` / `4px` | `var(--d-sp-1)` |
|
|
273
|
+
| `0.375rem` / `6px` | `var(--d-sp-1-5)` |
|
|
274
|
+
| `0.5rem` / `8px` | `var(--d-sp-2)` |
|
|
275
|
+
| `0.75rem` / `12px` | `var(--d-sp-3)` |
|
|
276
|
+
| `1rem` / `16px` | `var(--d-sp-4)` |
|
|
277
|
+
| `1.25rem` / `20px` | `var(--d-sp-5)` |
|
|
278
|
+
| `1.5rem` / `24px` | `var(--d-sp-6)` |
|
|
279
|
+
| `2rem` / `32px` | `var(--d-sp-8)` |
|
|
280
|
+
| `2.5rem` / `40px` | `var(--d-sp-10)` |
|
|
281
|
+
| `3rem` / `48px` | `var(--d-sp-12)` |
|
|
282
|
+
| `4rem` / `64px` | `var(--d-sp-16)` |
|
|
283
|
+
|
|
284
|
+
### Required Token Categories
|
|
285
|
+
|
|
286
|
+
| CSS Property | Token Family | Notes |
|
|
287
|
+
|-------------|-------------|-------|
|
|
288
|
+
| `padding`, `gap`, `margin` | `--d-sp-*` | Never use raw `px`/`rem` |
|
|
289
|
+
| `border-radius` | `--d-radius`, `--d-radius-panel`, `--d-radius-inner`, `--d-radius-lg`, `--d-radius-sm` | Use semantic role (see Radius section above) |
|
|
290
|
+
| `transition-duration` | `--d-duration-instant`, `--d-duration-fast`, `--d-duration-normal`, `--d-duration-slow` | Never hardcode `150ms`, `200ms` |
|
|
291
|
+
| `z-index` | `--d-z-dropdown`, `--d-z-sticky`, `--d-z-modal`, `--d-z-popover`, `--d-z-toast`, `--d-z-tooltip` | Never use raw numbers |
|
|
292
|
+
| `font-size` | `--d-text-xs` through `--d-text-4xl` | When a token exists for the size |
|
|
293
|
+
| `outline` (focus) | `--d-focus-ring-width`, `--d-focus-ring-style`, `--d-focus-ring-color`, `--d-focus-ring-offset` | All four tokens required |
|
|
294
|
+
|
|
295
|
+
### Workbench-Specific Layout Tokens
|
|
296
|
+
|
|
297
|
+
Workbench/tooling code may define named custom properties for layout dimensions that have no framework equivalent:
|
|
298
|
+
|
|
299
|
+
```css
|
|
300
|
+
:root {
|
|
301
|
+
--de-header-h: 52px;
|
|
302
|
+
--de-sidebar-w: 240px;
|
|
303
|
+
}
|
|
304
|
+
```
|
|
305
|
+
|
|
306
|
+
These use the `--de-*` prefix (not `--d-*`) and are the ONLY acceptable place for raw dimension values in consumer CSS.
|
|
307
|
+
|
|
308
|
+
## Field Tokens
|
|
309
|
+
|
|
310
|
+
Unified visual system for all form field containers. Applied via `.d-field` base class.
|
|
311
|
+
|
|
312
|
+
| Token | Default | Description |
|
|
313
|
+
|-------|---------|-------------|
|
|
314
|
+
| `--d-field-bg` | `var(--d-bg)` | Field background (outlined default) |
|
|
315
|
+
| `--d-field-bg-hover` | Surface shift | Background on hover |
|
|
316
|
+
| `--d-field-bg-disabled` | alpha(fg, 0.05) | Disabled field background |
|
|
317
|
+
| `--d-field-bg-readonly` | alpha(fg, 0.03) | Read-only field background |
|
|
318
|
+
| `--d-field-border` | `var(--d-border)` | Default border color |
|
|
319
|
+
| `--d-field-border-hover` | `var(--d-border-strong)` | Border on hover |
|
|
320
|
+
| `--d-field-border-focus` | `var(--d-primary)` | Border on focus-within |
|
|
321
|
+
| `--d-field-border-error` | `var(--d-error)` | Border for error state |
|
|
322
|
+
| `--d-field-border-success` | `var(--d-success)` | Border for success state |
|
|
323
|
+
| `--d-field-border-disabled` | alpha(border, 0.5) | Disabled border |
|
|
324
|
+
| `--d-field-bg-error` | alpha(error, 0.06) | Error state background tint |
|
|
325
|
+
| `--d-field-bg-success` | alpha(success, 0.06) | Success state background tint |
|
|
326
|
+
| `--d-field-border-width` | `var(--d-border-width)` | Field border width |
|
|
327
|
+
| `--d-field-ring` | Focus shadow | Focus ring (box-shadow) |
|
|
328
|
+
| `--d-field-ring-error` | Error focus shadow | Error focus ring |
|
|
329
|
+
| `--d-field-ring-success` | Success focus shadow | Success focus ring |
|
|
330
|
+
| `--d-field-radius` | `var(--d-radius)` | Field border radius |
|
|
331
|
+
| `--d-field-placeholder` | `var(--d-muted)` | Placeholder text color |
|
|
332
|
+
|
|
333
|
+
### Variants
|
|
334
|
+
|
|
335
|
+
| Class | Effect |
|
|
336
|
+
|-------|--------|
|
|
337
|
+
| `.d-field-outlined` | Default — transparent bg, visible border |
|
|
338
|
+
| `.d-field-filled` | Surface bg, transparent border |
|
|
339
|
+
| `.d-field-ghost` | Transparent bg + border, shows border on focus |
|
|
340
|
+
|
|
341
|
+
### State Matrix
|
|
342
|
+
|
|
343
|
+
| State | Background | Border | Shadow |
|
|
344
|
+
|-------|-----------|--------|--------|
|
|
345
|
+
| Default | `--d-field-bg` | `--d-field-border` | none |
|
|
346
|
+
| Hover | `--d-field-bg-hover` | `--d-field-border-hover` | none |
|
|
347
|
+
| Focus | `--d-field-bg` | `--d-field-border-focus` | `--d-field-ring` |
|
|
348
|
+
| Error | `--d-field-bg-error` | `--d-field-border-error` | none |
|
|
349
|
+
| Error+Focus | `--d-field-bg-error` | `--d-field-border-error` | `--d-field-ring-error` |
|
|
350
|
+
| Success | `--d-field-bg-success` | `--d-field-border-success` | none |
|
|
351
|
+
| Disabled | `--d-field-bg-disabled` | `--d-field-border-disabled` | none |
|
|
352
|
+
| Readonly | `--d-field-bg-readonly` | `--d-field-border` | none |
|
|
353
|
+
|
|
354
|
+
## Interactive State Tokens
|
|
355
|
+
|
|
356
|
+
Semantic tokens for item hover, selection, and disabled states.
|
|
357
|
+
|
|
358
|
+
| Token | Default | Description |
|
|
359
|
+
|-------|---------|-------------|
|
|
360
|
+
| `--d-item-hover-bg` | `var(--d-surface-1)` / glass alpha | Hover background for list items, options, rows |
|
|
361
|
+
| `--d-item-active-bg` | `var(--d-primary-subtle)` | Active/pressed item background |
|
|
362
|
+
| `--d-selected-bg` | `var(--d-primary-subtle)` | Selected item background |
|
|
363
|
+
| `--d-selected-fg` | `var(--d-primary)` | Selected item text color |
|
|
364
|
+
| `--d-selected-border` | `var(--d-primary-border)` | Selected item border |
|
|
365
|
+
| `--d-disabled-opacity` | `0.5` | Primary disabled opacity |
|
|
366
|
+
| `--d-disabled-opacity-soft` | `0.35` | Secondary disabled opacity (steppers, pagination) |
|
|
367
|
+
| `--d-icon-muted` | `0.55` | Opacity for close buttons, clear icons, prefix/suffix |
|
|
368
|
+
| `--d-icon-subtle` | `0.35` | Opacity for very subtle elements (out-of-range dates, hidden sort) |
|
|
369
|
+
|
|
370
|
+
### Migration Guide
|
|
371
|
+
|
|
372
|
+
| Old Pattern | New Token |
|
|
373
|
+
|-------------|-----------|
|
|
374
|
+
| `opacity:0.5` on disabled | `var(--d-disabled-opacity)` |
|
|
375
|
+
| `opacity:0.3` on soft disabled | `var(--d-disabled-opacity-soft)` |
|
|
376
|
+
| `opacity:0.6` on close/clear icons | `var(--d-icon-muted)` |
|
|
377
|
+
| `opacity:0.4` on sort/pagination | `var(--d-disabled-opacity-soft)` |
|
|
378
|
+
| `background:var(--d-surface-1)` on hover | `var(--d-item-hover-bg)` |
|
|
379
|
+
| `background:var(--d-primary-subtle)` on selected | `var(--d-selected-bg)` |
|
|
380
|
+
|
|
381
|
+
## Overlay Tokens
|
|
382
|
+
|
|
383
|
+
Three overlay intensity levels for modal backdrops and scrims.
|
|
384
|
+
|
|
385
|
+
| Token | Dark | Light | Description |
|
|
386
|
+
|-------|------|-------|-------------|
|
|
387
|
+
| `--d-overlay` | `rgba(0,0,0,0.7)` | `rgba(0,0,0,0.5)` | Standard overlay (existing) |
|
|
388
|
+
| `--d-overlay-light` | `rgba(0,0,0,0.3)` | `rgba(0,0,0,0.2)` | Light overlay for non-modal scrims |
|
|
389
|
+
| `--d-overlay-heavy` | `rgba(0,0,0,0.85)` | `rgba(0,0,0,0.7)` | Heavy overlay for image lightboxes |
|
|
390
|
+
|
|
391
|
+
## Table Tokens
|
|
392
|
+
|
|
393
|
+
| Token | Default | Description |
|
|
394
|
+
|-------|---------|-------------|
|
|
395
|
+
| `--d-table-stripe-bg` | alpha(fg, 0.02-0.03) | Striped row background |
|
|
396
|
+
| `--d-table-header-bg` | `var(--d-surface-1)` | Table header background |
|
|
397
|
+
| `--d-table-hover-bg` | `var(--d-item-hover-bg)` | Row hover background |
|
|
398
|
+
| `--d-table-selected-bg` | `var(--d-selected-bg)` | Selected row background |
|
|
399
|
+
|
|
400
|
+
## Scrollbar Tokens
|
|
401
|
+
|
|
402
|
+
| Token | Default | Description |
|
|
403
|
+
|-------|---------|-------------|
|
|
404
|
+
| `--d-scrollbar-w` | `8px` | Scrollbar width/height |
|
|
405
|
+
| `--d-scrollbar-track` | `transparent` | Track background |
|
|
406
|
+
| `--d-scrollbar-thumb` | `var(--d-border)` | Thumb color |
|
|
407
|
+
| `--d-scrollbar-thumb-hover` | `var(--d-border-strong)` | Thumb hover color |
|
|
408
|
+
|
|
409
|
+
## Skeleton Tokens
|
|
410
|
+
|
|
411
|
+
| Token | Default | Description |
|
|
412
|
+
|-------|---------|-------------|
|
|
413
|
+
| `--d-skeleton-bg` | `var(--d-muted)` | Skeleton element background |
|
|
414
|
+
| `--d-skeleton-shine` | Gradient | Shimmer animation gradient |
|
|
415
|
+
|
|
416
|
+
## Layout Tokens
|
|
417
|
+
|
|
418
|
+
| Token | Default | Description |
|
|
419
|
+
|-------|---------|-------------|
|
|
420
|
+
| `--d-prose-width` | `75ch` | Optimal reading line length |
|
|
421
|
+
| `--d-content-width-prose` | `75ch` | Content area max-width for prose |
|
|
422
|
+
| `--d-content-width-standard` | `960px` | Standard content area max-width |
|
|
423
|
+
| `--d-sidebar-width-sm` | `220px` | Small sidebar width |
|
|
424
|
+
| `--d-sidebar-width` | `260px` | Default sidebar width |
|
|
425
|
+
| `--d-sidebar-width-lg` | `320px` | Large sidebar width |
|
|
426
|
+
| `--d-drawer-width` | `360px` | Drawer panel width |
|
|
427
|
+
| `--d-drawer-bottom-max-h` | `85vh` | Bottom drawer max-height |
|
|
428
|
+
|
|
429
|
+
## Chart UI Tokens
|
|
430
|
+
|
|
431
|
+
Extends the existing chart section with UI tokens.
|
|
432
|
+
|
|
433
|
+
| Token | Default | Description |
|
|
434
|
+
|-------|---------|-------------|
|
|
435
|
+
| `--d-chart-tooltip-shadow` | Mode-aware shadow | Tooltip box-shadow |
|
|
436
|
+
| `--d-chart-axis-opacity` | `0.3` | Axis line opacity |
|
|
437
|
+
| `--d-chart-grid-opacity` | `0.06`/`0.08` | Grid line opacity (light/dark) |
|
|
438
|
+
| `--d-chart-legend-gap` | `var(--d-sp-3)` | Gap between legend items |
|
|
439
|
+
|
|
440
|
+
## Glass Blur Tokens
|
|
441
|
+
|
|
442
|
+
| Token | Value | Description |
|
|
443
|
+
|-------|-------|-------------|
|
|
444
|
+
| `--d-glass-blur-sm` | `blur(8px)` | Light glass effect |
|
|
445
|
+
| `--d-glass-blur` | `blur(16px)` | Standard glass effect |
|
|
446
|
+
| `--d-glass-blur-lg` | `blur(24px)` | Heavy glass effect |
|
|
447
|
+
|
|
448
|
+
## Semantic Motion Tokens
|
|
449
|
+
|
|
450
|
+
Semantic shorthand tokens for common transition patterns.
|
|
451
|
+
|
|
452
|
+
| Token | Value | Description |
|
|
453
|
+
|-------|-------|-------------|
|
|
454
|
+
| `--d-motion-enter` | `var(--d-duration-normal) var(--d-easing-decelerate)` | Enter/appear transition |
|
|
455
|
+
| `--d-motion-exit` | `var(--d-duration-fast) var(--d-easing-accelerate)` | Exit/disappear transition |
|
|
456
|
+
| `--d-motion-state` | `var(--d-duration-fast) var(--d-easing-standard)` | State change transition |
|
|
457
|
+
|
|
458
|
+
---
|
|
459
|
+
|
|
460
|
+
**See also:** `reference/atoms.md`, `reference/spatial-guidelines.md`, `reference/style-system.md`
|
package/src/app.js
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { mount } from 'decantr/core';
|
|
2
|
+
import { tags } from 'decantr/tags';
|
|
3
|
+
import { css, setStyle, setMode } from 'decantr/css';
|
|
4
|
+
|
|
5
|
+
const { div, h1, p } = tags;
|
|
6
|
+
|
|
7
|
+
// Style and mode are set here for initial render.
|
|
8
|
+
// After CLARIFY, these should match your essence vintage.
|
|
9
|
+
// For sectioned essences, add a router.beforeEach guard to switch per section.
|
|
10
|
+
setStyle('auradecantism');
|
|
11
|
+
setMode('dark');
|
|
12
|
+
|
|
13
|
+
const app = div({ class: css('_flex _col _center _minhscreen _bgbg') },
|
|
14
|
+
h1({ class: css('_t24 _bold _fgfg') }, 'Welcome to My App'),
|
|
15
|
+
p({ class: css('_t14 _fgmuted _mt2') }, 'Start building by prompting your AI.')
|
|
16
|
+
);
|
|
17
|
+
|
|
18
|
+
mount(document.getElementById('app'), () => app);
|
|
19
|
+
|