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.
Files changed (382) hide show
  1. package/AGENTS.md +868 -0
  2. package/CHANGELOG.md +255 -0
  3. package/CLAUDE.md +178 -0
  4. package/LICENSE +21 -0
  5. package/README.md +229 -0
  6. package/cli/art.js +127 -0
  7. package/cli/commands/a11y.js +61 -0
  8. package/cli/commands/audit.js +225 -0
  9. package/cli/commands/build.js +38 -0
  10. package/cli/commands/dev.js +18 -0
  11. package/cli/commands/doctor.js +197 -0
  12. package/cli/commands/figma-sync.js +48 -0
  13. package/cli/commands/figma-tokens.js +55 -0
  14. package/cli/commands/generate.js +26 -0
  15. package/cli/commands/init.js +116 -0
  16. package/cli/commands/lint.js +209 -0
  17. package/cli/commands/mcp.js +530 -0
  18. package/cli/commands/migrate.js +175 -0
  19. package/cli/commands/test.js +38 -0
  20. package/cli/commands/validate.js +354 -0
  21. package/cli/index.js +113 -0
  22. package/package.json +95 -0
  23. package/reference/atoms.md +517 -0
  24. package/reference/behaviors.md +384 -0
  25. package/reference/build-tooling.md +275 -0
  26. package/reference/color-guidelines.md +965 -0
  27. package/reference/component-lifecycle.md +137 -0
  28. package/reference/compound-spacing.md +95 -0
  29. package/reference/decantation-process.md +499 -0
  30. package/reference/dev-server-routes.md +93 -0
  31. package/reference/form-system.md +253 -0
  32. package/reference/i18n.md +336 -0
  33. package/reference/icons.md +576 -0
  34. package/reference/llm-primer.md +953 -0
  35. package/reference/plugins.md +252 -0
  36. package/reference/registry-consumption.md +76 -0
  37. package/reference/router.md +217 -0
  38. package/reference/shells.md +116 -0
  39. package/reference/spatial-guidelines.md +541 -0
  40. package/reference/ssr.md +234 -0
  41. package/reference/state-data.md +215 -0
  42. package/reference/state-patterns.md +166 -0
  43. package/reference/state.md +194 -0
  44. package/reference/style-system.md +110 -0
  45. package/reference/tokens.md +460 -0
  46. package/src/app.js +19 -0
  47. package/src/chart/_animate.js +266 -0
  48. package/src/chart/_base.js +109 -0
  49. package/src/chart/_data.js +209 -0
  50. package/src/chart/_format.js +106 -0
  51. package/src/chart/_interact.js +364 -0
  52. package/src/chart/_palette.js +105 -0
  53. package/src/chart/_renderer.js +52 -0
  54. package/src/chart/_scene.js +262 -0
  55. package/src/chart/_shared.js +371 -0
  56. package/src/chart/index.js +637 -0
  57. package/src/chart/layouts/_layout-base.js +328 -0
  58. package/src/chart/layouts/cartesian.js +148 -0
  59. package/src/chart/layouts/hierarchy.js +562 -0
  60. package/src/chart/layouts/polar.js +101 -0
  61. package/src/chart/renderers/canvas.js +179 -0
  62. package/src/chart/renderers/svg.js +256 -0
  63. package/src/chart/renderers/webgpu.js +715 -0
  64. package/src/chart/types/_type-base.js +26 -0
  65. package/src/chart/types/area.js +134 -0
  66. package/src/chart/types/bar.js +173 -0
  67. package/src/chart/types/box-plot.js +125 -0
  68. package/src/chart/types/bubble.js +63 -0
  69. package/src/chart/types/candlestick.js +115 -0
  70. package/src/chart/types/chord.js +85 -0
  71. package/src/chart/types/combination.js +108 -0
  72. package/src/chart/types/funnel.js +68 -0
  73. package/src/chart/types/gauge.js +163 -0
  74. package/src/chart/types/heatmap.js +98 -0
  75. package/src/chart/types/histogram.js +71 -0
  76. package/src/chart/types/line.js +111 -0
  77. package/src/chart/types/org-chart.js +93 -0
  78. package/src/chart/types/pie.js +81 -0
  79. package/src/chart/types/radar.js +96 -0
  80. package/src/chart/types/radial.js +68 -0
  81. package/src/chart/types/range-area.js +55 -0
  82. package/src/chart/types/range-bar.js +61 -0
  83. package/src/chart/types/sankey.js +73 -0
  84. package/src/chart/types/scatter.js +66 -0
  85. package/src/chart/types/sparkline.js +81 -0
  86. package/src/chart/types/sunburst.js +69 -0
  87. package/src/chart/types/swimlane.js +88 -0
  88. package/src/chart/types/treemap.js +62 -0
  89. package/src/chart/types/waterfall.js +100 -0
  90. package/src/components/_base.js +1658 -0
  91. package/src/components/_behaviors.js +1140 -0
  92. package/src/components/_primitives.js +534 -0
  93. package/src/components/_qr-encoder.js +539 -0
  94. package/src/components/accordion.js +207 -0
  95. package/src/components/affix.js +62 -0
  96. package/src/components/alert-dialog.js +75 -0
  97. package/src/components/alert.js +47 -0
  98. package/src/components/aspect-ratio.js +24 -0
  99. package/src/components/avatar-group.js +55 -0
  100. package/src/components/avatar.js +38 -0
  101. package/src/components/back-top.js +75 -0
  102. package/src/components/badge.js +74 -0
  103. package/src/components/banner.js +68 -0
  104. package/src/components/breadcrumb.js +162 -0
  105. package/src/components/button.js +115 -0
  106. package/src/components/calendar.js +131 -0
  107. package/src/components/card.js +192 -0
  108. package/src/components/carousel.js +98 -0
  109. package/src/components/cascader.js +261 -0
  110. package/src/components/checkbox.js +80 -0
  111. package/src/components/chip.js +81 -0
  112. package/src/components/code-block.js +82 -0
  113. package/src/components/collapsible.js +50 -0
  114. package/src/components/color-palette.js +438 -0
  115. package/src/components/color-picker.js +314 -0
  116. package/src/components/combobox.js +181 -0
  117. package/src/components/command.js +174 -0
  118. package/src/components/comment.js +206 -0
  119. package/src/components/context-menu.js +76 -0
  120. package/src/components/data-table.js +724 -0
  121. package/src/components/date-picker.js +217 -0
  122. package/src/components/date-range-picker.js +244 -0
  123. package/src/components/datetime-picker.js +271 -0
  124. package/src/components/descriptions.js +68 -0
  125. package/src/components/drawer.js +179 -0
  126. package/src/components/dropdown.js +88 -0
  127. package/src/components/empty.js +41 -0
  128. package/src/components/float-button.js +90 -0
  129. package/src/components/form.js +106 -0
  130. package/src/components/hover-card.js +49 -0
  131. package/src/components/icon.js +87 -0
  132. package/src/components/image.js +97 -0
  133. package/src/components/index.js +117 -0
  134. package/src/components/input-group.js +75 -0
  135. package/src/components/input-number.js +155 -0
  136. package/src/components/input-otp.js +178 -0
  137. package/src/components/input.js +91 -0
  138. package/src/components/kbd.js +36 -0
  139. package/src/components/label.js +25 -0
  140. package/src/components/list.js +118 -0
  141. package/src/components/masked-input.js +236 -0
  142. package/src/components/mentions.js +165 -0
  143. package/src/components/menu.js +259 -0
  144. package/src/components/message.js +80 -0
  145. package/src/components/modal.js +147 -0
  146. package/src/components/navigation-menu.js +166 -0
  147. package/src/components/notification.js +84 -0
  148. package/src/components/pagination.js +104 -0
  149. package/src/components/placeholder.js +132 -0
  150. package/src/components/popconfirm.js +70 -0
  151. package/src/components/popover.js +58 -0
  152. package/src/components/progress.js +61 -0
  153. package/src/components/qrcode.js +251 -0
  154. package/src/components/radiogroup.js +120 -0
  155. package/src/components/range-slider.js +176 -0
  156. package/src/components/rate.js +186 -0
  157. package/src/components/resizable.js +83 -0
  158. package/src/components/result.js +57 -0
  159. package/src/components/scroll-area.js +43 -0
  160. package/src/components/segmented.js +97 -0
  161. package/src/components/select.js +165 -0
  162. package/src/components/separator.js +31 -0
  163. package/src/components/shell.js +407 -0
  164. package/src/components/skeleton.js +39 -0
  165. package/src/components/slider.js +141 -0
  166. package/src/components/sortable-list.js +176 -0
  167. package/src/components/space.js +42 -0
  168. package/src/components/spinner.js +112 -0
  169. package/src/components/splitter.js +147 -0
  170. package/src/components/statistic.js +136 -0
  171. package/src/components/steps.js +99 -0
  172. package/src/components/switch.js +95 -0
  173. package/src/components/table.js +44 -0
  174. package/src/components/tabs.js +216 -0
  175. package/src/components/tag.js +115 -0
  176. package/src/components/textarea.js +82 -0
  177. package/src/components/time-picker.js +153 -0
  178. package/src/components/time-range-picker.js +170 -0
  179. package/src/components/timeline.js +226 -0
  180. package/src/components/toast.js +71 -0
  181. package/src/components/toggle.js +213 -0
  182. package/src/components/tooltip.js +57 -0
  183. package/src/components/tour.js +159 -0
  184. package/src/components/transfer.js +163 -0
  185. package/src/components/tree-select.js +274 -0
  186. package/src/components/tree.js +141 -0
  187. package/src/components/typography.js +136 -0
  188. package/src/components/upload.js +118 -0
  189. package/src/components/visually-hidden.js +20 -0
  190. package/src/components/watermark.js +124 -0
  191. package/src/core/index.js +539 -0
  192. package/src/core/lifecycle.js +69 -0
  193. package/src/css/atoms.js +651 -0
  194. package/src/css/components.js +940 -0
  195. package/src/css/derive.js +1296 -0
  196. package/src/css/index.js +265 -0
  197. package/src/css/runtime.js +268 -0
  198. package/src/css/styles/addons/bioluminescent.js +93 -0
  199. package/src/css/styles/addons/clay.js +70 -0
  200. package/src/css/styles/addons/clean.js +57 -0
  201. package/src/css/styles/addons/command-center.js +143 -0
  202. package/src/css/styles/addons/dopamine.js +83 -0
  203. package/src/css/styles/addons/editorial.js +80 -0
  204. package/src/css/styles/addons/glassmorphism.js +99 -0
  205. package/src/css/styles/addons/liquid-glass.js +105 -0
  206. package/src/css/styles/addons/prismatic.js +100 -0
  207. package/src/css/styles/addons/retro.js +63 -0
  208. package/src/css/styles/auradecantism.js +96 -0
  209. package/src/css/theme-registry.js +444 -0
  210. package/src/data/entity.js +281 -0
  211. package/src/data/index.js +13 -0
  212. package/src/data/persist.js +225 -0
  213. package/src/data/query.js +839 -0
  214. package/src/data/realtime.js +299 -0
  215. package/src/data/url.js +177 -0
  216. package/src/data/worker.js +134 -0
  217. package/src/explorer/archetypes.js +243 -0
  218. package/src/explorer/atoms.js +228 -0
  219. package/src/explorer/charts.js +497 -0
  220. package/src/explorer/components.js +129 -0
  221. package/src/explorer/foundations.js +949 -0
  222. package/src/explorer/icons.js +178 -0
  223. package/src/explorer/patterns.js +247 -0
  224. package/src/explorer/recipes.js +194 -0
  225. package/src/explorer/shared/pattern-examples.js +1337 -0
  226. package/src/explorer/shared/showcase-renderer.js +958 -0
  227. package/src/explorer/shared/spec-table.js +41 -0
  228. package/src/explorer/shared/usage-links.js +87 -0
  229. package/src/explorer/shell-config.js +10 -0
  230. package/src/explorer/shells.js +551 -0
  231. package/src/explorer/styles.js +161 -0
  232. package/src/explorer/tokens.js +262 -0
  233. package/src/explorer/tools.js +525 -0
  234. package/src/form/index.js +804 -0
  235. package/src/i18n/index.js +251 -0
  236. package/src/icons/essential.js +479 -0
  237. package/src/icons/index.js +53 -0
  238. package/src/plugins/index.js +282 -0
  239. package/src/registry/archetypes/content-site.json +71 -0
  240. package/src/registry/archetypes/docs-explorer.json +23 -0
  241. package/src/registry/archetypes/ecommerce.json +104 -0
  242. package/src/registry/archetypes/financial-dashboard.json +77 -0
  243. package/src/registry/archetypes/index.json +41 -0
  244. package/src/registry/archetypes/portfolio.json +82 -0
  245. package/src/registry/archetypes/recipe-community.json +159 -0
  246. package/src/registry/archetypes/saas-dashboard.json +86 -0
  247. package/src/registry/architect/cross-cutting.json +45 -0
  248. package/src/registry/architect/domains/ecommerce.json +294 -0
  249. package/src/registry/architect/domains/financial-services.json +302 -0
  250. package/src/registry/architect/index.json +26 -0
  251. package/src/registry/architect/traits.json +379 -0
  252. package/src/registry/atoms.json +16 -0
  253. package/src/registry/chart-showcase.json +160 -0
  254. package/src/registry/chart.json +136 -0
  255. package/src/registry/components.json +8616 -0
  256. package/src/registry/core.json +216 -0
  257. package/src/registry/css.json +319 -0
  258. package/src/registry/data.json +135 -0
  259. package/src/registry/foundations.json +11 -0
  260. package/src/registry/icons.json +463 -0
  261. package/src/registry/index.json +101 -0
  262. package/src/registry/patterns/activity-feed.json +37 -0
  263. package/src/registry/patterns/article-content.json +27 -0
  264. package/src/registry/patterns/auth-form.json +37 -0
  265. package/src/registry/patterns/author-card.json +20 -0
  266. package/src/registry/patterns/card-grid.json +127 -0
  267. package/src/registry/patterns/category-nav.json +26 -0
  268. package/src/registry/patterns/chart-grid.json +36 -0
  269. package/src/registry/patterns/chat-interface.json +37 -0
  270. package/src/registry/patterns/checklist-card.json +55 -0
  271. package/src/registry/patterns/comparison-panel.json +27 -0
  272. package/src/registry/patterns/component-showcase.json +24 -0
  273. package/src/registry/patterns/contact-form.json +31 -0
  274. package/src/registry/patterns/cta-section.json +20 -0
  275. package/src/registry/patterns/data-table.json +37 -0
  276. package/src/registry/patterns/detail-header.json +83 -0
  277. package/src/registry/patterns/detail-panel.json +27 -0
  278. package/src/registry/patterns/explorer-shell.json +22 -0
  279. package/src/registry/patterns/filter-bar.json +33 -0
  280. package/src/registry/patterns/filter-sidebar.json +27 -0
  281. package/src/registry/patterns/form-sections.json +110 -0
  282. package/src/registry/patterns/goal-tracker.json +27 -0
  283. package/src/registry/patterns/hero.json +107 -0
  284. package/src/registry/patterns/index.json +47 -0
  285. package/src/registry/patterns/kpi-grid.json +36 -0
  286. package/src/registry/patterns/media-gallery.json +20 -0
  287. package/src/registry/patterns/order-history.json +20 -0
  288. package/src/registry/patterns/pagination.json +19 -0
  289. package/src/registry/patterns/photo-to-recipe.json +36 -0
  290. package/src/registry/patterns/pipeline-tracker.json +28 -0
  291. package/src/registry/patterns/post-list.json +27 -0
  292. package/src/registry/patterns/pricing-table.json +32 -0
  293. package/src/registry/patterns/scorecard.json +28 -0
  294. package/src/registry/patterns/search-bar.json +20 -0
  295. package/src/registry/patterns/specimen-grid.json +19 -0
  296. package/src/registry/patterns/stat-card.json +55 -0
  297. package/src/registry/patterns/stats-bar.json +55 -0
  298. package/src/registry/patterns/steps-card.json +55 -0
  299. package/src/registry/patterns/table-of-contents.json +19 -0
  300. package/src/registry/patterns/testimonials.json +21 -0
  301. package/src/registry/patterns/timeline.json +27 -0
  302. package/src/registry/patterns/token-inspector.json +21 -0
  303. package/src/registry/patterns/wizard.json +27 -0
  304. package/src/registry/recipe-auradecantism.json +69 -0
  305. package/src/registry/recipe-clean.json +65 -0
  306. package/src/registry/recipe-command-center.json +78 -0
  307. package/src/registry/router.json +73 -0
  308. package/src/registry/schema/README.md +197 -0
  309. package/src/registry/skeletons.json +259 -0
  310. package/src/registry/state.json +137 -0
  311. package/src/registry/tokens.json +40 -0
  312. package/src/router/hash.js +17 -0
  313. package/src/router/history.js +18 -0
  314. package/src/router/index.js +598 -0
  315. package/src/ssr/index.js +922 -0
  316. package/src/state/arrays.js +181 -0
  317. package/src/state/devtools.js +647 -0
  318. package/src/state/index.js +498 -0
  319. package/src/state/middleware.js +288 -0
  320. package/src/state/scheduler.js +206 -0
  321. package/src/state/store.js +300 -0
  322. package/src/tags/index.js +19 -0
  323. package/src/tannins/auth.js +396 -0
  324. package/src/test/dom.js +352 -0
  325. package/src/test/index.js +62 -0
  326. package/src/test/state.js +306 -0
  327. package/tools/a11y-audit.js +487 -0
  328. package/tools/analyzer.js +315 -0
  329. package/tools/audit.js +706 -0
  330. package/tools/builder.js +1422 -0
  331. package/tools/css-extract.js +188 -0
  332. package/tools/dev-server.js +316 -0
  333. package/tools/dts-gen.js +1260 -0
  334. package/tools/figma-components.js +329 -0
  335. package/tools/figma-patterns.js +516 -0
  336. package/tools/figma-plugin/code.js +453 -0
  337. package/tools/figma-plugin/manifest.json +14 -0
  338. package/tools/figma-plugin/ui.html +268 -0
  339. package/tools/figma-render.js +293 -0
  340. package/tools/figma-tokens.js +712 -0
  341. package/tools/figma-upload.js +318 -0
  342. package/tools/generate.js +738 -0
  343. package/tools/icons.js +133 -0
  344. package/tools/init-templates.js +265 -0
  345. package/tools/install-hooks.sh +5 -0
  346. package/tools/migrations/0.5.0.js +53 -0
  347. package/tools/migrations/0.6.0.js +95 -0
  348. package/tools/minify.js +170 -0
  349. package/tools/pre-commit +4 -0
  350. package/tools/registry.js +662 -0
  351. package/tools/reset-playground.js +61 -0
  352. package/tools/starter-templates/content-site/app.js +49 -0
  353. package/tools/starter-templates/content-site/essence.js +19 -0
  354. package/tools/starter-templates/content-site/pages.js +31 -0
  355. package/tools/starter-templates/ecommerce/app.js +50 -0
  356. package/tools/starter-templates/ecommerce/essence.js +19 -0
  357. package/tools/starter-templates/ecommerce/pages.js +31 -0
  358. package/tools/starter-templates/landing-page/app.js +38 -0
  359. package/tools/starter-templates/landing-page/essence.js +18 -0
  360. package/tools/starter-templates/landing-page/pages.js +21 -0
  361. package/tools/starter-templates/portfolio/app.js +45 -0
  362. package/tools/starter-templates/portfolio/essence.js +19 -0
  363. package/tools/starter-templates/portfolio/pages.js +33 -0
  364. package/tools/starter-templates/saas-dashboard/app.js +70 -0
  365. package/tools/starter-templates/saas-dashboard/essence.js +19 -0
  366. package/tools/starter-templates/saas-dashboard/pages.js +31 -0
  367. package/tools/verify-pack.js +203 -0
  368. package/types/chart.d.ts +77 -0
  369. package/types/components.d.ts +587 -0
  370. package/types/core.d.ts +89 -0
  371. package/types/css.d.ts +149 -0
  372. package/types/data.d.ts +238 -0
  373. package/types/form.d.ts +164 -0
  374. package/types/i18n.d.ts +51 -0
  375. package/types/icons.d.ts +27 -0
  376. package/types/index.d.ts +13 -0
  377. package/types/router.d.ts +116 -0
  378. package/types/ssr.d.ts +102 -0
  379. package/types/state.d.ts +83 -0
  380. package/types/tags.d.ts +62 -0
  381. package/types/tannins.d.ts +63 -0
  382. 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.