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
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,255 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
## 0.9.1 — Production Cleanup
|
|
4
|
+
|
|
5
|
+
### Style System
|
|
6
|
+
- **Addon architecture**: Only `auradecantism` ships as core builtin. 10 styles moved to `src/css/styles/addons/` — import individually via `decantr/styles/clean` + `registerStyle()`
|
|
7
|
+
- **Plugin style wiring**: `mergePluginStyles()` added to theme-registry for plugin-contributed styles
|
|
8
|
+
|
|
9
|
+
### New Atom Features
|
|
10
|
+
- **Pseudo-class prefixes**: `_h:` (hover), `_f:` (focus), `_fv:` (focus-visible), `_a:` (active), `_fw:` (focus-within) — compose with ANY existing atom
|
|
11
|
+
- **Responsive + pseudo**: `_sm:h:bgmuted` — breakpoint-wrapped pseudo-class atoms
|
|
12
|
+
- **Ring utilities**: `_ring1`, `_ring2`, `_ring4`, `_ring0`, `_ringPrimary`, `_ringAccent`, `_ringBorder`
|
|
13
|
+
- **Transition shortcuts**: `_transColors`, `_transOpacity`, `_transTransform`, `_transShadow`
|
|
14
|
+
- **Prose atom**: `_prose` maps to `d-prose` class for nested rich-text typography (h1-h4, p, code, blockquote, etc.)
|
|
15
|
+
- **Divide utilities**: `_divideY`, `_divideX` — child separator borders
|
|
16
|
+
- **Text wrapping**: `_textBalance`, `_textPretty`
|
|
17
|
+
- **Scroll behavior**: `_scrollSmooth`
|
|
18
|
+
|
|
19
|
+
### Behaviors
|
|
20
|
+
- **createScrollReveal()**: IntersectionObserver wrapper that adds `d-visible` class on viewport entry. Returns cleanup function for `onDestroy`.
|
|
21
|
+
|
|
22
|
+
### Documentation Fixes
|
|
23
|
+
- CLAUDE.md: Updated style list to 11 (1 core + 10 addons), documented opacity modifiers and arbitrary transitions
|
|
24
|
+
- Docs essence synced to match actual 14 routes (was claiming 5-pattern homepage with only 1 implemented)
|
|
25
|
+
- Workbench essence: added version field, verified sidebar data-driven from registry
|
|
26
|
+
- Fixed markdown path resolution (relative → absolute) in tutorial and cookbook pages
|
|
27
|
+
- Added explorer module exports to package.json
|
|
28
|
+
- Reference docs: atoms.md documents all new atoms, llm-primer.md updated
|
|
29
|
+
|
|
30
|
+
### Consolidation
|
|
31
|
+
- Workbench integrated into docs site as `/workbench` route section
|
|
32
|
+
- `de-card-grid`/`de-card-item` custom CSS replaced with framework atoms
|
|
33
|
+
- docs/src/style.js: hardcoded pixel values replaced with design tokens
|
|
34
|
+
|
|
35
|
+
## 0.9.0 — Release Candidate
|
|
36
|
+
|
|
37
|
+
### Docs Site
|
|
38
|
+
- Full documentation site at decantr.ai with nested routing (17 routes)
|
|
39
|
+
- Markdown renderer (260 LOC) for tutorial and cookbook content
|
|
40
|
+
- ShadCN-style component gallery with search, category filters, and detail views
|
|
41
|
+
- Live component showcase carousel on landing page
|
|
42
|
+
- Framework comparison table (decantr vs React vs Angular)
|
|
43
|
+
- Sidebar layout with mobile hamburger, active link tracking
|
|
44
|
+
- JSON-LD structured data, enhanced OpenGraph/Twitter meta tags
|
|
45
|
+
- Explorer modules (icons, charts, tokens, atoms, patterns, archetypes, recipes, shells, tools) integrated into docs
|
|
46
|
+
|
|
47
|
+
### Registry Enrichment
|
|
48
|
+
- Icon groups (24) moved from workbench JS → `icons.json` registry
|
|
49
|
+
- Chart groups (5) + type metadata (25) in new `chart-showcase.json`
|
|
50
|
+
- Data subsection added to `foundations.json`
|
|
51
|
+
- Component group categorization in `components.json` (form, layout, data, feedback, navigation, overlay, typography, chart)
|
|
52
|
+
|
|
53
|
+
### CLI
|
|
54
|
+
- `decantr doctor` — 8 health checks with colored pass/warn/fail output
|
|
55
|
+
- Doctor accepts both `decantr` and `decantr` package names
|
|
56
|
+
|
|
57
|
+
### Infrastructure
|
|
58
|
+
- CI/CD: `ci.yml` (Node 20.x/22.x matrix), `docs-deploy.yml` (GitHub Pages), `release.yml` (tag → npm publish)
|
|
59
|
+
- `tools/verify-pack.js` — npm package verification (expected files, sensitive leak detection, size reporting)
|
|
60
|
+
- MIT LICENSE file
|
|
61
|
+
- README: CI/npm/license badges, expanded CLI commands list
|
|
62
|
+
|
|
63
|
+
### Playground
|
|
64
|
+
- Ellafi Lending Dashboard validated end-to-end (validate, doctor, lint, a11y, build)
|
|
65
|
+
- Playground README documenting validation checklist
|
|
66
|
+
|
|
67
|
+
## Unreleased
|
|
68
|
+
|
|
69
|
+
### Added
|
|
70
|
+
- **SSR + Hydration** (`decantr/ssr`) — server-side rendering for SEO-dependent apps. Zero DOM dependencies at module level.
|
|
71
|
+
- `renderToString(component)` — renders component tree to HTML string in pure Node.js
|
|
72
|
+
- `renderToStream(component)` — streaming render via Web Streams API (Node 18+)
|
|
73
|
+
- `hydrate(root, component)` — walks existing SSR DOM, attaches signal bindings + event listeners without re-creating elements
|
|
74
|
+
- SSR context: `h()`, `text()`, `cond()`, `list()`, `css()` all work transparently in server environment
|
|
75
|
+
- **Accessibility testing** (`decantr a11y`) — static analysis for 8 WCAG rules: button-label, input-label, img-alt, focus-visible, keyboard-handler, role-valid, heading-order, contrast-ratio. Zero dependencies. Also available via `decantr audit --a11y`.
|
|
76
|
+
- **`decantr migrate` command** — automated migration for `decantr.essence.json` between versions. Supports `--dry-run` for preview, `--target` for specific version. Migrations: 0.5.0 (organs→tannins, anatomy→structure) and 0.6.0 (pattern consolidation to preset format).
|
|
77
|
+
- **Starter templates** — `decantr init --template=<name>` with 5 templates: `saas-dashboard`, `ecommerce`, `portfolio`, `content-site`, `landing-page`. Each provides pre-filled essence, router setup, and page stubs.
|
|
78
|
+
- **Archetype inheritance** — Archetypes now support `extends` field for inheriting pages, tannins, and skeletons from parent archetypes. Circular dependency detection and max depth (5) enforced. `financial-dashboard` updated to extend `saas-dashboard` as a reference example.
|
|
79
|
+
- **Component-level HMR** — Dev server now sends targeted `hmr` messages for `src/pages/` and `src/components/` file changes instead of full-page reloads. Module-level state (signals, stores) is preserved across updates. Infrastructure files (`state/`, `css/`, `router/`, `app.js`, essence) still trigger full reload. HMR remount hook in `src/core/index.js` is gated behind `globalThis.__DECANTR_DEV__` for zero production cost.
|
|
80
|
+
- **Auth reference tannin** (`decantr/tannins/auth`) — token-based authentication with reactive signals, persistent cross-tab token storage, auto-refresh on 401, and route guard helper.
|
|
81
|
+
- `createAuth(config)` — creates an auth instance with `user()`, `token()`, `isAuthenticated()`, `login()`, `logout()`, `refresh()`, `destroy()`
|
|
82
|
+
- `requireAuth(router, options)` — installs route guard that redirects unauthenticated users to login page
|
|
83
|
+
- Fetch middleware: auto-injects Bearer token, intercepts 401 → refresh → retry
|
|
84
|
+
- Token persistence via `createPersisted()` with cross-tab sync
|
|
85
|
+
|
|
86
|
+
## v0.7.0 — Internationalization (2026-03-16)
|
|
87
|
+
|
|
88
|
+
### Added
|
|
89
|
+
- **i18n module** (`decantr/i18n`) — reactive internationalization built on Decantr signals and `Intl.PluralRules`. Zero external dependencies.
|
|
90
|
+
- `createI18n({ locale, messages, fallbackLocale })` — creates a reactive i18n instance
|
|
91
|
+
- `t(key, params?)` — translate with dot notation, `{param}` interpolation, and automatic pluralization via `_one`/`_other` suffixes
|
|
92
|
+
- `locale()` — signal getter for the current locale
|
|
93
|
+
- `setLocale(loc)` — reactively switch locales (all `t()` consumers auto-update)
|
|
94
|
+
- `setDirection('rtl' | 'ltr')` — set `dir` attribute on `<html>` for RTL languages
|
|
95
|
+
- `addMessages(locale, messages)` — deep-merge translations at runtime for lazy loading
|
|
96
|
+
- Fallback chain: current locale -> fallback locale -> raw key
|
|
97
|
+
- **TypeScript declarations** for i18n (`types/i18n.d.ts`)
|
|
98
|
+
- **Reference docs** (`reference/i18n.md`) — API, interpolation, pluralization rules, RTL setup, lazy loading patterns
|
|
99
|
+
- **Test suite** (`test/i18n.test.js`) — comprehensive tests covering translation, dot notation, interpolation, pluralization, locale switching, fallback chain, direction setting, addMessages, edge cases, and reactivity
|
|
100
|
+
|
|
101
|
+
### Changed
|
|
102
|
+
- `package.json` — added `./i18n` export
|
|
103
|
+
- `tools/dev-server.js` — added `decantr/i18n` import map entry
|
|
104
|
+
- `tools/dts-gen.js` — added i18n declaration generator
|
|
105
|
+
- `src/registry/index.json` — added `decantr/i18n` module entry
|
|
106
|
+
- `CLAUDE.md` — added i18n import to Framework Imports section
|
|
107
|
+
- `AGENTS.md` — added react-intl/vue-i18n/svelte-i18n equivalence row for `createI18n`
|
|
108
|
+
|
|
109
|
+
## v0.6.0 — Architectural Audit & Pattern v2 (2026-03-16)
|
|
110
|
+
|
|
111
|
+
### Breaking Changes
|
|
112
|
+
- **Pattern v2 schema** — Patterns now support `presets` (named variants within a single file) and `default_preset`. Archetypes reference patterns as `{ "pattern": "hero", "preset": "image-overlay", "as": "recipe-hero" }` instead of separate files.
|
|
113
|
+
- **13 domain-specific patterns removed** and consolidated into presets on generic patterns:
|
|
114
|
+
- `recipe-hero`, `cookbook-hero` → `hero` (presets: `image-overlay`, `image-overlay-compact`)
|
|
115
|
+
- `product-grid`, `recipe-card-grid`, `cookbook-grid`, `feature-grid` → `card-grid` (presets: `product`, `content`, `collection`, `icon`)
|
|
116
|
+
- `recipe-stats-bar` → `stats-bar`
|
|
117
|
+
- `recipe-ingredients` → `checklist-card`
|
|
118
|
+
- `recipe-instructions` → `steps-card`
|
|
119
|
+
- `nutrition-card` → `stat-card`
|
|
120
|
+
- `recipe-form-simple`, `recipe-form-chef` → `form-sections` (presets: `creation`, `structured`)
|
|
121
|
+
- `profile-header` → `detail-header` (preset: `profile`)
|
|
122
|
+
- Pattern count: 49 → 41 (4 new generics + presets replace 13 domain-specific files)
|
|
123
|
+
|
|
124
|
+
### Added
|
|
125
|
+
- **Three-tier pattern architecture** — Tier 1 (structural patterns), Tier 2 (presets within patterns), Tier 3 (domain compositions in archetypes)
|
|
126
|
+
- **Pattern Design Review Gate** — mandatory checkpoint between CLARIFY and DECANT stages to prevent pattern proliferation
|
|
127
|
+
- **Plugin system** (`src/plugins/index.js`) — extend Decantr without forking via `plugins` config in `decantr.config.json`. Hooks: `onBuild`, `onDev`, `onGenerate`, `registerStyle`, `registerPattern`, `registerRecipe`
|
|
128
|
+
- **`decantr lint` command** — code quality gates: atom validation, essence drift detection, inline style detection
|
|
129
|
+
- **Error telemetry hooks** — `setErrorHandler(fn)` for ErrorBoundary integration with external error services
|
|
130
|
+
- **Request middleware** — `queryClient.use(middleware)` chain for auth headers, logging, retry logic
|
|
131
|
+
- **Cache invalidation API** — `queryClient.invalidateQueries('user.*')` glob-based query invalidation
|
|
132
|
+
- **Route metadata** — `meta` field on route definitions, merged parent→child, accessible via `useRoute().meta`
|
|
133
|
+
- **Bundle size budgets** — `build.sizeBudget` config with warnings for JS, CSS, total, and chunk size limits
|
|
134
|
+
- **Essence versioning** — `version` field (semver) for tracking essence evolution
|
|
135
|
+
- **Blend validation depth** — validates `at` breakpoints, `span` values, and span/cols consistency
|
|
136
|
+
- **Package distribution** — `files` field and `publishConfig` in package.json for clean npm publishing
|
|
137
|
+
|
|
138
|
+
### Changed
|
|
139
|
+
- Archetype schemas updated to v2 (`ecommerce.json`, `recipe-community.json`) with preset references
|
|
140
|
+
- Pattern index updated to v2 format with `presets` arrays per pattern
|
|
141
|
+
- `tools/generate.js` — `resolvePatternRef()` handles both v1 strings and v2 `{pattern, preset, as}` objects
|
|
142
|
+
- `test/decantation/engine.js` — `resolveBlend()` and `validateBlend()` handle v2 format
|
|
143
|
+
- `cli/commands/validate.js` — validates preset existence against pattern index
|
|
144
|
+
- `tools/figma-patterns.js` — preset-aware `patternToFigmaFrame()` and archetype composition
|
|
145
|
+
- `workbench/src/explorer/patterns.js` — displays presets as expandable sub-items within pattern detail
|
|
146
|
+
- All reference docs updated for v2 pattern architecture
|
|
147
|
+
|
|
148
|
+
## v0.5.1 — Recipe Community Archetype (2026-03-16)
|
|
149
|
+
|
|
150
|
+
### Added
|
|
151
|
+
- **New archetype: `recipe-community`** — AI-powered recipe sharing platform with 12 pages (home, feed, recipe detail, create/edit, AI generate, chef chat, cookbooks, profile, auth), 8 tannins, and 3 skeletons
|
|
152
|
+
- **14 new patterns** (now consolidated into presets in v0.6.0)
|
|
153
|
+
- **New pattern category: Social** — groups community and social cooking patterns in the workbench explorer
|
|
154
|
+
- Registry: 35 → 49 patterns, 6 → 7 archetypes
|
|
155
|
+
|
|
156
|
+
## v0.5.0 — Greenfield Component Rebuild (2026-03-13)
|
|
157
|
+
|
|
158
|
+
### Breaking Changes
|
|
159
|
+
- **`createFormField()` wrapper class** renamed from `d-field` → `d-form-field`. CSS classes `.d-field-label`, `.d-field-help`, `.d-field-error`, `.d-field-required` → `.d-form-field-*`. The `.d-field` class is now reserved for field visual styling (border/bg/focus).
|
|
160
|
+
- **`createFormField()` return value** changed from `HTMLElement` to `{ wrapper, setError, setSuccess, destroy }`.
|
|
161
|
+
- **ColorPicker** now uses OKLCH color space instead of HSV. Saturation panel is now a Lightness/Chroma plane. API unchanged (hex in/out).
|
|
162
|
+
- All 14 field components now apply `.d-field` class on their bordered container. Consumers querying DOM structure may need updates.
|
|
163
|
+
|
|
164
|
+
### Added
|
|
165
|
+
- **New file: `_primitives.js`** — shared rendering primitives: `renderCalendar()`, `renderTimeColumns()`, `renderMenuItems()`, `applyFieldState()`, `createFieldOverlay()`, `hexToOklch()`, `oklchToHex()`.
|
|
166
|
+
- **Unified field API** on all 14 field components: `variant` (outlined/filled/ghost), `success`, `loading`, `label`, `help`, `required`, `aria-label`.
|
|
167
|
+
- **`applyFieldState()`** — single source of truth for reactive `data-error`, `data-success`, `data-disabled`, variant class, size class on `.d-field` elements.
|
|
168
|
+
- **`createFieldOverlay()`** — thin wrapper around `createOverlay()` with field-standard defaults (portal, matchWidth, closeOnEscape/Outside).
|
|
169
|
+
- **Error/aria-label** support added to Checkbox, Switch, InputOTP, RadioGroup.
|
|
170
|
+
- **Keyboard navigation** added to Accordion (ArrowUp/Down/Home/End between triggers).
|
|
171
|
+
- **`disabled` prop** added to Segmented.
|
|
172
|
+
- **`aria-checked`** wired on Switch.
|
|
173
|
+
- 58 new component rebuild tests (425 total).
|
|
174
|
+
|
|
175
|
+
### Changed
|
|
176
|
+
- All 23 interactive components migrated from `h()` to `tags` proxy API (~25% fewer markup tokens).
|
|
177
|
+
- All overlay components (Select, Combobox, DatePicker, TimePicker, Cascader, TreeSelect, Mentions, ColorPicker) now use `createFieldOverlay()` + portal positioning.
|
|
178
|
+
- Combobox: manual click-outside replaced with `createOverlay()`.
|
|
179
|
+
- Mentions: blur timeout replaced with `createOverlay()`.
|
|
180
|
+
- RadioGroup: manual arrow-key nav replaced with `createRovingTabindex()`.
|
|
181
|
+
- Slider: manual pointer handlers replaced with `createDrag()` from `_behaviors.js`.
|
|
182
|
+
- DatePicker/DateRangePicker: calendar rendering deduplicated via `renderCalendar()`.
|
|
183
|
+
- TimePicker/TimeRangePicker: column rendering deduplicated via `renderTimeColumns()`.
|
|
184
|
+
- ContextMenu: item rendering deduplicated via `renderMenuItems()`.
|
|
185
|
+
- All overlay components now wire `onDestroy()` for cleanup.
|
|
186
|
+
- Segmented now wires `onDestroy()` for roving tabindex cleanup.
|
|
187
|
+
- Net: ~555 fewer LOC across 23 components.
|
|
188
|
+
|
|
189
|
+
## v0.4.1 — Full Design Token Sweep (2026-03-12)
|
|
190
|
+
|
|
191
|
+
### Added
|
|
192
|
+
- **Field tokens** (15 tokens): `--d-field-bg`, `--d-field-border`, `--d-field-border-focus`, `--d-field-border-error`, `--d-field-ring`, `--d-field-radius`, `--d-field-placeholder`, and 8 more state variants
|
|
193
|
+
- **Interactive state tokens** (9 tokens): `--d-item-hover-bg`, `--d-selected-bg/fg/border`, `--d-disabled-opacity`, `--d-disabled-opacity-soft`, `--d-icon-muted`, `--d-icon-subtle`
|
|
194
|
+
- **Overlay tokens**: `--d-overlay-light`, `--d-overlay-heavy` — three intensity levels
|
|
195
|
+
- **Table tokens**: `--d-table-stripe-bg`, `--d-table-header-bg`, `--d-table-hover-bg`, `--d-table-selected-bg`
|
|
196
|
+
- **Semantic motion tokens**: `--d-motion-enter`, `--d-motion-exit`, `--d-motion-state`
|
|
197
|
+
- **Layout tokens**: `--d-prose-width`, `--d-sidebar-width`, `--d-drawer-width`, `--d-sheet-max-h`, `--d-content-width-*`
|
|
198
|
+
- **Typography semantic roles**: `--d-text-helper`, `--d-text-error`, `--d-ls-tight`, `--d-ls-wide`
|
|
199
|
+
- **Chart UI tokens**: `--d-chart-tooltip-shadow`, `--d-chart-axis-opacity`, `--d-chart-grid-opacity`, `--d-chart-legend-gap`
|
|
200
|
+
- **Glass blur tokens**: `--d-glass-blur-sm`, `--d-glass-blur`, `--d-glass-blur-lg`
|
|
201
|
+
- **Scrollbar tokens**: `--d-scrollbar-w`, `--d-scrollbar-track`, `--d-scrollbar-thumb`, `--d-scrollbar-thumb-hover`
|
|
202
|
+
- **Skeleton tokens**: `--d-skeleton-bg`, `--d-skeleton-shine`
|
|
203
|
+
- **Focus ring inset**: `--d-focus-ring-offset-inset` — replaces inline `calc()` in every `outline-offset`
|
|
204
|
+
- `.d-field` base CSS class with hover, focus, error, success, disabled, readonly states
|
|
205
|
+
- `.d-field-outlined`, `.d-field-filled`, `.d-field-ghost` variant modifiers
|
|
206
|
+
- New atoms: `_field`, `_fieldFilled`, `_fieldGhost`, `_hoverBg`, `_activeBg`, `_selectedBg`, `_selectedFg`, `_proseWidth`, `_disabled`
|
|
207
|
+
- Per-style field token overrides for all 5 styles
|
|
208
|
+
- 28 new tests for token existence + cross-style verification (367 total)
|
|
209
|
+
|
|
210
|
+
### Changed
|
|
211
|
+
- ~44 hardcoded `opacity` values in `_base.js` replaced with semantic tokens (`--d-disabled-opacity`, `--d-icon-muted`, etc.)
|
|
212
|
+
- ~13 hardcoded `background:var(--d-surface-1)` on hover rules replaced with `var(--d-item-hover-bg)`
|
|
213
|
+
- ~11 `outline-offset:calc(...)` replaced with `var(--d-focus-ring-offset-inset)`
|
|
214
|
+
- Selected row/range backgrounds now use `var(--d-selected-bg)` instead of `var(--d-primary-subtle)`
|
|
215
|
+
- Default scrollbar CSS now uses tokens (overridable per style)
|
|
216
|
+
- Token count: ~280 → ~340 CSS custom properties
|
|
217
|
+
- Contrast validation: added field-placeholder and selected-fg pairs
|
|
218
|
+
|
|
219
|
+
### Documentation
|
|
220
|
+
- `reference/tokens.md`: 11 new sections (field, interactive state, overlay, table, scrollbar, skeleton, layout, chart UI, glass blur, semantic motion)
|
|
221
|
+
- `reference/atoms.md`: 4 new sections (field, interactive state, semantic opacity, layout atoms)
|
|
222
|
+
- `src/registry/css.json`: 7 new token family entries
|
|
223
|
+
- `CLAUDE.md`: new FIELD checklist item, 2 new anti-patterns, code standard #13
|
|
224
|
+
|
|
225
|
+
## v0.4.0 — Enterprise Upgrade
|
|
226
|
+
|
|
227
|
+
### Breaking Changes
|
|
228
|
+
|
|
229
|
+
- **Blocks removed.** `src/blocks/` (21 files) deleted. Use patterns (`registry/patterns/`) instead.
|
|
230
|
+
- **Kits removed.** `src/kit/` (16 files) deleted. Use patterns and archetypes instead.
|
|
231
|
+
- **Terminology renames.** "Anatomy" → "Structure", "Organs" → "Tannins".
|
|
232
|
+
- **Legacy color atoms removed.** `_fg0`–`_fg9`, `_bg0`–`_bg9`, `_bc0`–`_bc9`, `legacyColorMap()`, `--c0`–`--c9` variables all removed.
|
|
233
|
+
|
|
234
|
+
### Added
|
|
235
|
+
|
|
236
|
+
- **Core:** ErrorBoundary, Portal, Suspense, Transition, forwardRef; `mount()` returns unmount function
|
|
237
|
+
- **State:** createContext/provide/inject, createSelector, createDeferred, createHistory, useLocalStorage
|
|
238
|
+
- **Router:** Nested routes, route guards (beforeEach/afterEach), lazy loading, query params, active links, scroll restoration, named routes, URL validation
|
|
239
|
+
- **Form system:** `decantr/form` module — createForm, validators, fieldArray, useFormField
|
|
240
|
+
- **DataTable:** Sort, paginate, select, pin, resize, virtual scroll, edit, expand, filter, export
|
|
241
|
+
- **New components:** DateRangePicker, TimeRangePicker, RangeSlider, TreeSelect, AvatarGroup, NavigationMenu, Splitter, BackTop, VisuallyHidden
|
|
242
|
+
- **New style:** Command Center (`command-center`) — HUD/radar visual language with recipe system
|
|
243
|
+
- **Accessibility:** WCAG AA contrast validation in derive(), RTL logical property atoms
|
|
244
|
+
- **Security:** Router URL validation (rejects javascript:, data:, absolute URLs), `sanitize()` utility
|
|
245
|
+
- **Build tooling:** Tree shaking, code splitting, source maps, incremental builds, CSS purging, Brotli reporting, bundle analyzer
|
|
246
|
+
- **TypeScript declarations:** `tools/dts-gen.js` generates `.d.ts` for all 15 modules
|
|
247
|
+
- **Registry:** 49 patterns, 7 archetypes, recipe system, architect domain files
|
|
248
|
+
- **Workbench:** Complete rewrite as "Decantation Explorer" — 7-layer navigation, token inspector, global search
|
|
249
|
+
- **Decantation Process:** Full POUR→SETTLE→CLARIFY→DECANT→SERVE→AGE methodology with essence files
|
|
250
|
+
- **Reference docs:** 14 deep-dive reference documents for all subsystems
|
|
251
|
+
|
|
252
|
+
### Fixed
|
|
253
|
+
|
|
254
|
+
- Component lifecycle cleanup: Modal, Select, Dropdown, Combobox, ContextMenu, Tooltip, Slider, Image, DataTable now properly clean up via `onDestroy`
|
|
255
|
+
- CSS runtime performance: `inject()`/`injectResponsive()` buffer rules and flush via microtask
|
package/CLAUDE.md
ADDED
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
# /tmp/decantr-baseline-test
|
|
2
|
+
|
|
3
|
+
Built with [decantr](https://decantr.ai) v0.4.2 — AI-first web framework.
|
|
4
|
+
|
|
5
|
+
## Project Structure
|
|
6
|
+
|
|
7
|
+
- `src/app.js` — Entry point, mounts the app to `#app`
|
|
8
|
+
- `src/pages/` — Route page components
|
|
9
|
+
- `src/components/` — Project-specific reusable components
|
|
10
|
+
- `public/index.html` — HTML shell with theme CSS variables
|
|
11
|
+
- `decantr.config.json` — Project configuration
|
|
12
|
+
- `decantr.essence.json` — Project DNA (generated during Decantation Process)
|
|
13
|
+
- `AGENTS.md` — Framework translation layer (read this for API equivalences)
|
|
14
|
+
- `reference/llm-primer.md` — Imports, atoms, components, pattern snippets
|
|
15
|
+
- `reference/spatial-guidelines.md` — Spacing rules, density zones, Clarity profiles
|
|
16
|
+
- `reference/atoms.md` — Valid atom class names (always check before using `_` atoms)
|
|
17
|
+
- `reference/shells.md` — Shell layout presets, config schema, nav states, grid area diagrams
|
|
18
|
+
|
|
19
|
+
## The Decantation Process
|
|
20
|
+
|
|
21
|
+
Follow this process for ALL new projects and major feature additions:
|
|
22
|
+
|
|
23
|
+
### Stage 1: POUR — User expresses intent in natural language
|
|
24
|
+
### Stage 2: SETTLE — Decompose into five layers:
|
|
25
|
+
- **Terroir**: Domain archetype → read `node_modules/decantr/src/registry/archetypes/`
|
|
26
|
+
- **Vintage**: Style + mode + recipe → read `node_modules/decantr/src/registry/recipe-*.json`
|
|
27
|
+
- **Character**: Brand personality traits (e.g. "tactical", "minimal", "playful")
|
|
28
|
+
- **Structure**: Page/view map with skeleton assignments
|
|
29
|
+
- **Tannins**: Functional systems (auth, search, payments, etc.)
|
|
30
|
+
### Stage 3: CLARIFY — Write `decantr.essence.json` and confirm with user
|
|
31
|
+
### Stage 4: DECANT — Resolve each page's Blend (spatial arrangement)
|
|
32
|
+
Read the archetype's `default_blend` for each page. Copy into the Essence's `blend` array, then customize.
|
|
33
|
+
Derive Clarity profile from Character traits → `reference/spatial-guidelines.md` §17. Apply density-appropriate gaps to each page's `surface` atoms.
|
|
34
|
+
|
|
35
|
+
**Blend format**: Each `blend` is an ordered array of rows:
|
|
36
|
+
- `"pattern-id"` — full-width pattern row (default preset)
|
|
37
|
+
- `{ "pattern": "hero", "preset": "image-overlay", "as": "recipe-hero" }` — pattern with preset + local alias
|
|
38
|
+
- `{ "cols": ["a", "b"], "at": "lg" }` — equal-width side-by-side, collapse below `lg`
|
|
39
|
+
- `{ "cols": ["a", "b"], "span": { "a": 3 }, "at": "md" }` — weighted columns (a=3fr, b=1fr)
|
|
40
|
+
|
|
41
|
+
**Pattern Presets (v2)**: Patterns support named presets — structural variants within a single file.
|
|
42
|
+
- `hero` has presets: `landing`, `image-overlay`, `image-overlay-compact`
|
|
43
|
+
- `card-grid` has presets: `product`, `content`, `collection`, `icon`
|
|
44
|
+
- `form-sections` has presets: `settings`, `creation`, `structured`
|
|
45
|
+
- `detail-header` has presets: `standard`, `profile`
|
|
46
|
+
Before creating a new pattern file, check if it can be a preset on an existing pattern.
|
|
47
|
+
|
|
48
|
+
Optional `surface` on each structure entry sets page container atoms (default: `_flex _col _gap4 _p4 _overflow[auto] _flex1`).
|
|
49
|
+
|
|
50
|
+
### Stage 5: SERVE — Generate code from Blend specs
|
|
51
|
+
For each page, read its `blend` array and apply:
|
|
52
|
+
1. Create page container with `surface` atoms
|
|
53
|
+
2. String rows → full-width pattern (use pattern's `default_blend.atoms`)
|
|
54
|
+
3. `{ cols }` rows → `_grid _gc{N} _gap4` wrapper, collapse below `at` breakpoint
|
|
55
|
+
4. `{ cols, span }` rows → `_gc{total}` grid, each pattern gets `_span{weight}`
|
|
56
|
+
5. Apply recipe wrappers per `recipe_overrides`
|
|
57
|
+
|
|
58
|
+
### Ongoing: AGE — Read Essence before every change. Guard against drift.
|
|
59
|
+
|
|
60
|
+
### Cork Rules (Anti-Drift)
|
|
61
|
+
Before writing ANY code, read `decantr.essence.json`. Verify:
|
|
62
|
+
1. Style matches the Vintage. Do not switch styles.
|
|
63
|
+
2. Page exists in the Structure. If new, add it to the Essence first.
|
|
64
|
+
3. Layout follows the page's Blend. Do not freestyle spatial arrangement.
|
|
65
|
+
4. Composition follows the active Recipe. Do not freestyle decoration.
|
|
66
|
+
5. Spacing follows the Clarity profile derived from Character → `reference/spatial-guidelines.md` §17. Do not default to `_gap4`/`_p4` everywhere.
|
|
67
|
+
If a request conflicts with the Essence, flag the conflict and ask for confirmation.
|
|
68
|
+
|
|
69
|
+
## Essence Schema
|
|
70
|
+
|
|
71
|
+
You MUST create `decantr.essence.json` during CLARIFY. Do NOT proceed to DECANT without it.
|
|
72
|
+
|
|
73
|
+
**Simple (single domain):**
|
|
74
|
+
```json
|
|
75
|
+
{
|
|
76
|
+
"version": "1.0.0",
|
|
77
|
+
"terroir": "saas-dashboard",
|
|
78
|
+
"vintage": { "style": "command-center", "mode": "dark", "recipe": "command-center", "shape": "sharp" },
|
|
79
|
+
"character": ["tactical", "data-dense"],
|
|
80
|
+
"vessel": { "type": "spa", "routing": "hash" },
|
|
81
|
+
"structure": [
|
|
82
|
+
{ "id": "overview", "skeleton": "sidebar-main", "blend": ["kpi-grid", "data-table"] },
|
|
83
|
+
{ "id": "catalog", "skeleton": "top-nav-main", "blend": [
|
|
84
|
+
{ "pattern": "card-grid", "preset": "product", "as": "product-grid" }
|
|
85
|
+
]}
|
|
86
|
+
],
|
|
87
|
+
"tannins": ["auth", "realtime-data"],
|
|
88
|
+
"cork": { "enforce_style": true, "enforce_recipe": true }
|
|
89
|
+
}
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
**Sectioned (multi-domain):**
|
|
93
|
+
```json
|
|
94
|
+
{
|
|
95
|
+
"vessel": { "type": "spa", "routing": "hash" },
|
|
96
|
+
"character": ["professional", "technical"],
|
|
97
|
+
"sections": [
|
|
98
|
+
{
|
|
99
|
+
"id": "brand",
|
|
100
|
+
"path": "/",
|
|
101
|
+
"terroir": "portfolio",
|
|
102
|
+
"vintage": { "style": "glassmorphism", "mode": "dark" },
|
|
103
|
+
"structure": [{ "id": "home", "skeleton": "full-bleed", "blend": ["hero", "cta-section"] }],
|
|
104
|
+
"tannins": ["analytics"]
|
|
105
|
+
}
|
|
106
|
+
],
|
|
107
|
+
"shared_tannins": ["auth"],
|
|
108
|
+
"cork": { "enforce_style": true, "enforce_sections": true }
|
|
109
|
+
}
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
## Framework Imports
|
|
113
|
+
|
|
114
|
+
```js
|
|
115
|
+
import { tags } from 'decantr/tags';
|
|
116
|
+
import { h, text, cond, list, mount, onMount, onDestroy } from 'decantr/core';
|
|
117
|
+
import { createSignal, createEffect, createMemo, createStore, batch, createRoot, on } from 'decantr/state';
|
|
118
|
+
import { createQuery, createMutation, queryClient, createEntityStore, createURLSignal, createPersisted } from 'decantr/data';
|
|
119
|
+
import { createRouter, link, navigate, useRoute } from 'decantr/router';
|
|
120
|
+
import { css, setStyle, setMode } from 'decantr/css';
|
|
121
|
+
import { Button, Input, Card, Modal, Tabs, ... } from 'decantr/components';
|
|
122
|
+
import { createI18n } from 'decantr/i18n';
|
|
123
|
+
import { createAuth, requireAuth } from 'decantr/tannins/auth';
|
|
124
|
+
import { renderToString, renderToStream, hydrate } from 'decantr/ssr';
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
## Styles
|
|
128
|
+
|
|
129
|
+
**Core** (ships with framework, no extra import): `auradecantism` (default)
|
|
130
|
+
|
|
131
|
+
**Add-on styles** (import individually via `import { clean } from 'decantr/styles/clean'` then `registerStyle(clean)`):
|
|
132
|
+
`clean`, `retro`, `glassmorphism`, `command-center`, `bioluminescent`, `clay`, `dopamine`, `editorial`, `liquid-glass`, `prismatic`
|
|
133
|
+
|
|
134
|
+
Modes: `light`, `dark`, `auto`
|
|
135
|
+
Shapes: `sharp`, `rounded`, `pill`
|
|
136
|
+
|
|
137
|
+
### Atom Capabilities
|
|
138
|
+
- **Arbitrary transitions**: `_trans[color_0.15s_ease]` — underscores become spaces
|
|
139
|
+
- **Opacity modifiers**: Work on all semantic color atoms — `_bgprimary/50`, `_bcborder/80`, `_fgmuted/60`
|
|
140
|
+
- **Arbitrary values**: `_bg[#1a1a2e]`, `_w[calc(100%-2rem)]`, `_p[clamp(1rem,3vw,2rem)]`
|
|
141
|
+
|
|
142
|
+
## Registry
|
|
143
|
+
|
|
144
|
+
- `node_modules/decantr/src/registry/index.json` — Full API catalog
|
|
145
|
+
- `node_modules/decantr/src/registry/components.json` — Component props/types
|
|
146
|
+
- `node_modules/decantr/src/registry/archetypes/` — Domain archetypes (v2: `{pattern, preset, as}` references)
|
|
147
|
+
- `node_modules/decantr/src/registry/patterns/` — Experience patterns (v2: presets within files)
|
|
148
|
+
- `node_modules/decantr/src/registry/recipe-*.json` — Visual language recipes
|
|
149
|
+
|
|
150
|
+
## Build Configuration
|
|
151
|
+
|
|
152
|
+
In `decantr.config.json`:
|
|
153
|
+
```json
|
|
154
|
+
{
|
|
155
|
+
"build": {
|
|
156
|
+
"sizeBudget": {
|
|
157
|
+
"jsRaw": 102400,
|
|
158
|
+
"jsBrotli": 25600,
|
|
159
|
+
"cssRaw": 51200,
|
|
160
|
+
"totalBrotli": 51200,
|
|
161
|
+
"chunkRaw": 51200
|
|
162
|
+
}
|
|
163
|
+
},
|
|
164
|
+
"plugins": [
|
|
165
|
+
"./plugins/my-plugin.js",
|
|
166
|
+
["@acme/decantr-plugin", { "option": true }]
|
|
167
|
+
]
|
|
168
|
+
}
|
|
169
|
+
```
|
|
170
|
+
See `reference/plugins.md` for plugin API documentation.
|
|
171
|
+
|
|
172
|
+
## Commands
|
|
173
|
+
|
|
174
|
+
- `npx decantr dev` — Dev server with hot reload
|
|
175
|
+
- `npx decantr build` — Production build to `dist/`
|
|
176
|
+
- `npx decantr test` — Run tests
|
|
177
|
+
- `npx decantr validate` — Validate `decantr.essence.json`
|
|
178
|
+
|
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 David Aimi
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|