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
@@ -0,0 +1,463 @@
1
+ {
2
+ "$schema": "https://decantr.ai/schemas/module.v1.json",
3
+ "generated": "2026-03-13",
4
+ "source": "decantr original icons",
5
+ "essential": [
6
+ "accessibility",
7
+ "activity",
8
+ "air-conditioning",
9
+ "alarm",
10
+ "alarm-clock",
11
+ "alert-circle",
12
+ "alert-triangle",
13
+ "align-center",
14
+ "align-justify",
15
+ "align-left",
16
+ "align-right",
17
+ "analytics",
18
+ "anchor",
19
+ "angry",
20
+ "apartment",
21
+ "api",
22
+ "apple",
23
+ "archive",
24
+ "area-chart",
25
+ "arrow-down",
26
+ "arrow-left",
27
+ "arrow-right",
28
+ "arrow-up",
29
+ "arrow-up-down",
30
+ "asterisk",
31
+ "at",
32
+ "at-sign",
33
+ "award",
34
+ "baby",
35
+ "ban",
36
+ "bandage",
37
+ "bank",
38
+ "bar-chart",
39
+ "bar-chart-horizontal",
40
+ "barcode",
41
+ "bath",
42
+ "battery",
43
+ "battery-charging",
44
+ "battery-low",
45
+ "bed",
46
+ "bell",
47
+ "bell-ring",
48
+ "benchmark",
49
+ "bicycle",
50
+ "binary",
51
+ "blocks",
52
+ "bluetooth",
53
+ "book",
54
+ "book-open",
55
+ "bookmark",
56
+ "bookmark-plus",
57
+ "box",
58
+ "boxes",
59
+ "brain",
60
+ "briefcase",
61
+ "brush",
62
+ "bubble-chart",
63
+ "bug",
64
+ "building",
65
+ "building-2",
66
+ "bus",
67
+ "cake",
68
+ "calculator",
69
+ "calendar",
70
+ "calendar-check",
71
+ "calendar-plus",
72
+ "calendar-x",
73
+ "camera",
74
+ "camera-off",
75
+ "candlestick-chart",
76
+ "car",
77
+ "cast",
78
+ "cctv",
79
+ "chart-comparison",
80
+ "chart-correlation",
81
+ "chart-decline",
82
+ "chart-distribution",
83
+ "chart-donut",
84
+ "chart-forecast",
85
+ "chart-funnel",
86
+ "chart-gantt",
87
+ "chart-growth",
88
+ "chart-heatmap",
89
+ "chart-radar",
90
+ "chart-sankey",
91
+ "chart-scatter",
92
+ "chart-treemap",
93
+ "chart-waterfall",
94
+ "check",
95
+ "check-circle",
96
+ "chef-hat",
97
+ "chevron-down",
98
+ "chevron-left",
99
+ "chevron-right",
100
+ "chevron-up",
101
+ "chevrons-left",
102
+ "chevrons-right",
103
+ "chip",
104
+ "circle",
105
+ "circle-dot",
106
+ "clipboard",
107
+ "clock",
108
+ "cloud",
109
+ "cloud-cog",
110
+ "cloud-download",
111
+ "cloud-lightning",
112
+ "cloud-upload",
113
+ "code",
114
+ "coffee",
115
+ "cog",
116
+ "coins",
117
+ "columns",
118
+ "compass",
119
+ "construction",
120
+ "container",
121
+ "container-ship",
122
+ "contract",
123
+ "copy",
124
+ "coupon",
125
+ "cpu",
126
+ "credit-card",
127
+ "crop",
128
+ "crown",
129
+ "database",
130
+ "diamond",
131
+ "dna",
132
+ "dollar-sign",
133
+ "door-closed",
134
+ "door-open",
135
+ "download",
136
+ "droplet",
137
+ "dumbbell",
138
+ "edit",
139
+ "eraser",
140
+ "expand",
141
+ "external-link",
142
+ "eye",
143
+ "eye-off",
144
+ "eye-scan",
145
+ "eyedropper",
146
+ "factory",
147
+ "fence",
148
+ "file",
149
+ "file-audio",
150
+ "file-check",
151
+ "file-code",
152
+ "file-image",
153
+ "file-minus",
154
+ "file-plus",
155
+ "file-search",
156
+ "file-spreadsheet",
157
+ "file-text",
158
+ "file-video",
159
+ "file-x",
160
+ "files",
161
+ "film",
162
+ "filter",
163
+ "filter-x",
164
+ "fingerprint",
165
+ "flag",
166
+ "folder",
167
+ "folder-check",
168
+ "folder-open",
169
+ "folder-plus",
170
+ "forklift",
171
+ "frown",
172
+ "fuel",
173
+ "garage",
174
+ "garden",
175
+ "gauge",
176
+ "gift",
177
+ "git-branch",
178
+ "git-commit",
179
+ "git-merge",
180
+ "git-pull-request",
181
+ "globe",
182
+ "graduation-cap",
183
+ "grape",
184
+ "grid-3x3",
185
+ "grip-vertical",
186
+ "group",
187
+ "hammer",
188
+ "handshake",
189
+ "hard-drive",
190
+ "hash",
191
+ "hash-tag",
192
+ "headphones",
193
+ "heart",
194
+ "heart-crack",
195
+ "heart-pulse",
196
+ "helicopter",
197
+ "hexagon",
198
+ "histogram",
199
+ "history",
200
+ "home",
201
+ "hospital",
202
+ "hourglass",
203
+ "house",
204
+ "id-card",
205
+ "image",
206
+ "inbox",
207
+ "infinity",
208
+ "info",
209
+ "invoice",
210
+ "kanban",
211
+ "key",
212
+ "kpi-card",
213
+ "lamp",
214
+ "landmark",
215
+ "laptop",
216
+ "laugh",
217
+ "layers",
218
+ "layout-dashboard",
219
+ "layout-grid",
220
+ "leaf",
221
+ "lightbulb",
222
+ "lighthouse",
223
+ "line-chart",
224
+ "link",
225
+ "list",
226
+ "list-ordered",
227
+ "loader",
228
+ "lock",
229
+ "lock-keyhole",
230
+ "log-in",
231
+ "log-out",
232
+ "mail",
233
+ "map",
234
+ "map-compass",
235
+ "map-pin",
236
+ "maximize",
237
+ "medal",
238
+ "megaphone",
239
+ "meh",
240
+ "menu",
241
+ "message-circle",
242
+ "message-square",
243
+ "metric",
244
+ "microphone",
245
+ "microphone-off",
246
+ "milestone",
247
+ "minimize",
248
+ "minus",
249
+ "monitor",
250
+ "moon",
251
+ "more-horizontal",
252
+ "more-vertical",
253
+ "mountain",
254
+ "move",
255
+ "navigation",
256
+ "newspaper",
257
+ "notebook",
258
+ "nut",
259
+ "package",
260
+ "palette",
261
+ "pallet",
262
+ "panel-left",
263
+ "panel-right",
264
+ "paperclip",
265
+ "parentheses",
266
+ "parking",
267
+ "passport",
268
+ "pen",
269
+ "pen-tool",
270
+ "pencil",
271
+ "percent",
272
+ "percent-circle",
273
+ "phone",
274
+ "pie-chart",
275
+ "piggy-bank",
276
+ "pill",
277
+ "pivot-table",
278
+ "pizza",
279
+ "plane",
280
+ "plug",
281
+ "plus",
282
+ "podcast",
283
+ "power",
284
+ "presentation",
285
+ "price-tag",
286
+ "printer",
287
+ "puzzle",
288
+ "qr-code",
289
+ "radio",
290
+ "receipt",
291
+ "redo",
292
+ "refresh",
293
+ "regex",
294
+ "reply",
295
+ "returns",
296
+ "robot",
297
+ "rocket",
298
+ "rotate-ccw",
299
+ "rotate-cw",
300
+ "route",
301
+ "rows",
302
+ "rss",
303
+ "satellite",
304
+ "save",
305
+ "scale",
306
+ "scan",
307
+ "school",
308
+ "scissors",
309
+ "screwdriver",
310
+ "search",
311
+ "send",
312
+ "server",
313
+ "settings",
314
+ "share",
315
+ "share-2",
316
+ "shield",
317
+ "shield-alert",
318
+ "shield-check",
319
+ "shield-x",
320
+ "ship",
321
+ "shipping",
322
+ "shopping-bag",
323
+ "shopping-cart",
324
+ "shrink",
325
+ "sidebar",
326
+ "signal",
327
+ "signature",
328
+ "sliders-horizontal",
329
+ "smartphone",
330
+ "smile",
331
+ "snowflake",
332
+ "sofa",
333
+ "sort-asc",
334
+ "sort-desc",
335
+ "sparkles",
336
+ "sparkline",
337
+ "spreadsheet",
338
+ "square",
339
+ "stacked-bar-chart",
340
+ "stamp",
341
+ "star",
342
+ "stethoscope",
343
+ "store",
344
+ "sun",
345
+ "sunrise",
346
+ "sunset",
347
+ "syringe",
348
+ "table",
349
+ "table-cells",
350
+ "table-columns",
351
+ "table-rows",
352
+ "tablet",
353
+ "tag",
354
+ "target",
355
+ "taxi",
356
+ "terminal",
357
+ "thermometer",
358
+ "thumbs-down",
359
+ "thumbs-up",
360
+ "timer",
361
+ "toggle-left",
362
+ "toggle-right",
363
+ "tool",
364
+ "train",
365
+ "trash",
366
+ "tree",
367
+ "trending-down",
368
+ "trending-up",
369
+ "trendline",
370
+ "triangle",
371
+ "trophy",
372
+ "truck",
373
+ "tv",
374
+ "type",
375
+ "umbrella",
376
+ "undo",
377
+ "ungroup",
378
+ "unlink",
379
+ "unlock",
380
+ "upload",
381
+ "usb",
382
+ "user",
383
+ "user-check",
384
+ "user-minus",
385
+ "user-plus",
386
+ "user-x",
387
+ "users",
388
+ "users-round",
389
+ "utensils",
390
+ "variable",
391
+ "video",
392
+ "wallet",
393
+ "wand",
394
+ "warehouse",
395
+ "watch",
396
+ "watch-smart",
397
+ "webhook",
398
+ "wheat",
399
+ "wifi",
400
+ "wifi-off",
401
+ "wind",
402
+ "window",
403
+ "wine",
404
+ "workflow",
405
+ "wrench",
406
+ "x",
407
+ "x-circle",
408
+ "zap"
409
+ ],
410
+ "essentialCount": 403,
411
+ "groups": {
412
+ "navigation": { "label": "Navigation", "description": "Arrows, chevrons, and directional indicators", "icons": ["check", "x", "plus", "minus", "chevron-down", "chevron-up", "chevron-left", "chevron-right", "chevrons-left", "chevrons-right", "arrow-left", "arrow-right", "arrow-up", "arrow-down", "navigation"] },
413
+ "actions": { "label": "Actions", "description": "Common interactive operations and controls", "icons": ["search", "menu", "more-horizontal", "more-vertical", "external-link", "home", "bell", "bell-ring", "settings", "star", "edit", "trash", "copy", "eye", "eye-off", "filter", "filter-x", "download", "upload", "refresh", "loader", "log-out", "log-in", "undo", "redo", "share", "share-2", "rotate-cw", "rotate-ccw", "scissors", "zap", "power", "move", "scan", "wand", "sparkles", "eraser"] },
414
+ "feedback": { "label": "Feedback", "description": "Status indicators, alerts, and validation", "icons": ["info", "alert-triangle", "alert-circle", "check-circle", "x-circle", "circle-dot", "flag", "ban", "alarm"] },
415
+ "people": { "label": "People & Security", "description": "User accounts, permissions, and authentication", "icons": ["user", "users", "user-plus", "user-minus", "user-check", "user-x", "users-round", "shield", "shield-check", "shield-x", "shield-alert", "lock", "lock-keyhole", "unlock", "key", "fingerprint", "eye-scan", "id-card", "passport"] },
416
+ "content": { "label": "Content", "description": "Files, documents, and media", "icons": ["file", "file-text", "file-plus", "file-minus", "file-check", "file-x", "file-search", "file-code", "file-spreadsheet", "file-image", "file-audio", "file-video", "files", "folder", "folder-open", "folder-plus", "folder-check", "save", "printer", "bookmark", "bookmark-plus", "archive", "clipboard", "paperclip", "link", "unlink", "hash", "tag", "image"] },
417
+ "communication": { "label": "Communication", "description": "Messaging, social, and engagement", "icons": ["mail", "phone", "video", "send", "at-sign", "at", "message-square", "message-circle", "reply", "rss", "podcast", "microphone", "microphone-off", "headphones", "megaphone", "newspaper", "radio", "tv", "cast", "heart", "heart-crack", "thumbs-up", "thumbs-down", "smile", "frown", "meh", "laugh", "angry", "award"] },
418
+ "time": { "label": "Time", "description": "Clocks, calendars, scheduling, and deadlines", "icons": ["clock", "timer", "hourglass", "alarm-clock", "watch", "watch-smart", "history", "calendar", "calendar-check", "calendar-plus", "calendar-x"] },
419
+ "layout": { "label": "Layout", "description": "Grids, panels, and spatial arrangement", "icons": ["layout-dashboard", "layout-grid", "sidebar", "panel-left", "panel-right", "maximize", "minimize", "expand", "shrink", "grip-vertical", "grid-3x3", "kanban", "columns", "rows", "layers", "inbox", "blocks"] },
420
+ "data": { "label": "Data", "description": "Tables, sorting, and structured data", "icons": ["list", "list-ordered", "table", "table-rows", "table-columns", "table-cells", "sort-asc", "sort-desc", "arrow-up-down", "spreadsheet", "pivot-table", "group", "ungroup"] },
421
+ "charts": { "label": "Charts & Analytics", "description": "Chart types, trends, and analytics concepts", "icons": ["bar-chart", "bar-chart-horizontal", "stacked-bar-chart", "line-chart", "area-chart", "pie-chart", "chart-donut", "histogram", "chart-scatter", "bubble-chart", "chart-radar", "chart-heatmap", "chart-treemap", "chart-sankey", "chart-funnel", "chart-waterfall", "chart-gantt", "candlestick-chart", "trending-up", "trending-down", "activity", "percent", "analytics", "metric", "kpi-card", "benchmark", "sparkline", "trendline", "chart-comparison", "chart-correlation", "chart-forecast", "chart-growth", "chart-decline", "chart-distribution"] },
422
+ "commerce": { "label": "Commerce", "description": "Shopping, payments, and logistics", "icons": ["credit-card", "shopping-cart", "shopping-bag", "store", "wallet", "dollar-sign", "receipt", "gift", "coupon", "barcode", "qr-code", "price-tag", "percent-circle", "shipping", "returns", "truck", "package", "box", "boxes", "container", "pallet", "forklift"] },
423
+ "business": { "label": "Business & Finance", "description": "Banking, contracts, and professional tools", "icons": ["calculator", "bank", "coins", "piggy-bank", "invoice", "contract", "signature", "stamp", "briefcase", "handshake", "scale", "target", "crown", "lighthouse"] },
424
+ "media": { "label": "Media & Creative", "description": "Photography, design tools, and text formatting", "icons": ["camera", "camera-off", "film", "palette", "brush", "pen-tool", "eyedropper", "crop", "type", "align-left", "align-center", "align-right", "align-justify", "pencil", "pen"] },
425
+ "devices": { "label": "Devices & Technology", "description": "Hardware, connectivity, and device types", "icons": ["smartphone", "tablet", "laptop", "monitor", "bluetooth", "usb", "battery", "battery-charging", "battery-low", "signal", "satellite", "robot", "chip"] },
426
+ "infrastructure": { "label": "Infrastructure", "description": "Development, servers, and system tools", "icons": ["code", "terminal", "server", "database", "cloud", "cloud-upload", "cloud-download", "cloud-cog", "cloud-lightning", "wifi", "wifi-off", "moon", "sun", "cpu", "hard-drive", "wrench", "tool", "hammer", "screwdriver", "nut", "plug", "cog", "sliders-horizontal", "gauge", "toggle-left", "toggle-right", "bug", "cctv"] },
427
+ "workflow": { "label": "Workflow & Dev", "description": "Version control, CI/CD, and project management", "icons": ["git-branch", "git-merge", "git-pull-request", "git-commit", "milestone", "workflow", "variable", "regex", "binary", "webhook", "api", "container-ship"] },
428
+ "healthcare": { "label": "Healthcare", "description": "Medical, wellness, and accessibility", "icons": ["stethoscope", "pill", "syringe", "heart-pulse", "bandage", "thermometer", "brain", "dna", "accessibility", "baby", "apple", "dumbbell"] },
429
+ "education": { "label": "Education", "description": "Learning, achievements, and school", "icons": ["book", "book-open", "graduation-cap", "notebook", "presentation", "trophy", "medal", "school", "lightbulb", "puzzle"] },
430
+ "transport": { "label": "Transportation", "description": "Vehicles, travel, and logistics", "icons": ["car", "bus", "train", "bicycle", "ship", "rocket", "helicopter", "taxi", "parking", "fuel", "map-compass"] },
431
+ "food": { "label": "Food & Hospitality", "description": "Dining, beverages, and culinary", "icons": ["utensils", "coffee", "wine", "pizza", "cake", "chef-hat", "grape", "wheat"] },
432
+ "home": { "label": "Home & Real Estate", "description": "Furniture, property, and living spaces", "icons": ["house", "apartment", "sofa", "lamp", "bed", "bath", "garden", "door-closed", "window", "air-conditioning"] },
433
+ "weather": { "label": "Weather", "description": "Climate, nature, and environment", "icons": ["umbrella", "wind", "droplet", "snowflake", "sunrise", "sunset", "leaf", "tree", "mountain"] },
434
+ "places": { "label": "Places", "description": "Buildings, locations, and geography", "icons": ["globe", "map", "map-pin", "compass", "route", "building", "building-2", "hospital", "factory", "warehouse", "landmark", "door-open", "garage", "fence", "construction", "anchor", "plane"] },
435
+ "shapes": { "label": "Shapes & Symbols", "description": "Geometric shapes and common symbols", "icons": ["circle", "square", "triangle", "diamond", "hexagon", "infinity", "asterisk", "hash-tag", "parentheses"] }
436
+ },
437
+ "structural": [
438
+ "chevron-down", "chevron-up", "chevron-left", "chevron-right",
439
+ "check", "x", "calendar", "clock", "search", "arrow-up",
440
+ "grip-vertical", "info", "check-circle", "alert-triangle", "x-circle"
441
+ ],
442
+ "structuralNote": "Framework components depend on these 15 icons. Always available via built-in essential set. Can be overridden via registerIcon() for visual consistency with third-party libraries.",
443
+ "fillDetection": "buildDataUri() auto-detects fill-based SVGs: if inner content contains fill= with a non-none value, uses fill='black' stroke='none' wrapper. Otherwise uses stroke-based wrapper (default). For SVGs relying on inherited fill (no explicit fill attr), add fill='currentColor' when registering.",
444
+ "weightControl": {
445
+ "description": "Stroke weight control via opts.weight. Named levels: thin(1), light(1.5), regular(2, default), medium(2.5), bold(3). Numeric values clamped to [0.5, 4]. Fill-based icons ignore weight.",
446
+ "cssClass": "d-i-{name}--w{value} where decimals use 'p' (e.g. w1p5 for 1.5). Default weight (2) produces no suffix."
447
+ },
448
+ "fillControl": {
449
+ "description": "Fill toggle via opts.filled (boolean, default false). Adds fill='black' alongside stroke attrs for stroke-based icons. Fill-based icons ignore this option.",
450
+ "cssClass": "d-i-{name}--filled. Combined with weight: d-i-{name}--w{value}-filled."
451
+ },
452
+ "api": {
453
+ "icon(name, opts?)": "Render icon as <span> with CSS mask-image. Supports weight, filled, and size options. Auto-detects fill vs stroke SVG format.",
454
+ "registerIcon(name, svgInner)": "Add a single custom icon",
455
+ "registerIcons(map)": "Bulk-register icons from { name: svgInner }",
456
+ "hasIcon(name)": "Check if icon is available",
457
+ "getIconNames()": "List all available icon names"
458
+ },
459
+ "config": {
460
+ "icons.library": "Optional string in decantr.config.json — signals to LLM which icon library the project uses (e.g. 'lucide', 'material', 'fontawesome'). Decantr does not act on this value."
461
+ },
462
+ "importGuide": "node tools/icons.js <svg-dir> [output.js] — import SVG directory as JS module"
463
+ }
@@ -0,0 +1,101 @@
1
+ {
2
+ "$schema": "https://decantr.ai/schemas/registry.v1.json",
3
+ "version": "0.4.0",
4
+ "generated": "2026-03-17",
5
+ "modules": {
6
+ "decantr/core": {
7
+ "description": "DOM engine — hyperscript rendering, conditional, list, mount, lifecycle",
8
+ "file": "core.json",
9
+ "exports": 16
10
+ },
11
+ "decantr/state": {
12
+ "description": "Reactive primitives — signals, effects, memos, stores, batch",
13
+ "file": "state.json",
14
+ "exports": 12
15
+ },
16
+ "decantr/router": {
17
+ "description": "Client-side routing — hash or history mode",
18
+ "file": "router.json",
19
+ "exports": 9
20
+ },
21
+ "decantr/css": {
22
+ "description": "Atomic CSS engine + theme management",
23
+ "file": "css.json",
24
+ "exports": 23
25
+ },
26
+ "decantr/components": {
27
+ "description": "UI components — all return HTMLElement, all accept inline styles",
28
+ "file": "components.json",
29
+ "exports": 108
30
+ },
31
+ "decantr/tags": {
32
+ "description": "Proxy-based tag functions for concise markup",
33
+ "usage": "import { tags } from 'decantr/tags'; const { div, p } = tags; div({ class: 'card' }, p('Content'))"
34
+ },
35
+ "decantr/icons": {
36
+ "description": "First-party icon suite — undefined Lucide icons via CSS mask-image",
37
+ "file": "icons.json"
38
+ }
39
+ },
40
+ "archetypes": {
41
+ "description": "Domain archetypes for the Decantation Process — pre-mapped page patterns, organs, and layouts per domain",
42
+ "index": "archetypes/index.json",
43
+ "entries": {
44
+ "ecommerce": {
45
+ "file": "archetypes/ecommerce.json",
46
+ "description": "Online retail"
47
+ },
48
+ "saas-dashboard": {
49
+ "file": "archetypes/saas-dashboard.json",
50
+ "description": "Analytics/admin dashboard"
51
+ },
52
+ "portfolio": {
53
+ "file": "archetypes/portfolio.json",
54
+ "description": "Personal/agency showcase"
55
+ },
56
+ "content-site": {
57
+ "file": "archetypes/content-site.json",
58
+ "description": "Blog/magazine/documentation"
59
+ },
60
+ "docs-explorer": {
61
+ "file": "archetypes/docs-explorer.json",
62
+ "description": "Interactive documentation explorer"
63
+ },
64
+ "financial-dashboard": {
65
+ "file": "archetypes/financial-dashboard.json",
66
+ "description": "Financial services lending dashboard"
67
+ },
68
+ "recipe-community": {
69
+ "file": "archetypes/recipe-community.json",
70
+ "description": "AI-powered recipe sharing platform"
71
+ }
72
+ }
73
+ },
74
+ "patterns": {
75
+ "description": "Experience patterns — composable UI building blocks that archetypes reference",
76
+ "index": "patterns/index.json",
77
+ "count": 49
78
+ },
79
+ "recipes": {
80
+ "description": "Visual language recipes — composition rules for drastic visual transformations beyond token-level styling",
81
+ "entries": {
82
+ "command-center": {
83
+ "file": "recipe-command-center.json",
84
+ "style": "command-center",
85
+ "description": "HUD/radar visual language — monochromatic cyan, beveled frames, scanlines, status bars"
86
+ }
87
+ }
88
+ },
89
+ "atoms": {
90
+ "file": "atoms.json",
91
+ "description": "Atomic CSS utility classes — categorized prefix groups"
92
+ },
93
+ "tokens": {
94
+ "file": "tokens.json",
95
+ "description": "Design tokens derived from style seeds — 170+ CSS custom properties"
96
+ },
97
+ "foundations": {
98
+ "file": "foundations.json",
99
+ "description": "Foundation modules — core, state, router, form"
100
+ }
101
+ }
@@ -0,0 +1,37 @@
1
+ {
2
+ "$schema": "https://decantr.ai/schemas/pattern.v1.json",
3
+ "id": "activity-feed",
4
+ "name": "Activity Feed",
5
+ "description": "Chronological list of activity events with avatars, timestamps, and action descriptions. Used in dashboards and profile pages.",
6
+ "components": ["Timeline", "Avatar", "Badge", "Text", "Separator"],
7
+ "default_blend": {
8
+ "layout": "stack",
9
+ "atoms": "_flex _flexCol _gap2 _p4",
10
+ "slots": {
11
+ "header": "Section title with _heading5 and optional filter/date-range controls",
12
+ "feed": "Timeline of activity items, each with Avatar, action Text, timestamp Badge, and Separator between entries",
13
+ "load-more": "Optional Button at bottom for pagination"
14
+ }
15
+ },
16
+ "recipe_overrides": {
17
+ "command-center": {
18
+ "wrapper": "cc-frame-sm",
19
+ "atoms": "cc-scanline",
20
+ "notes": "Header uses cc-bar with cc-label. Timestamps use cc-data. Feed area gets cc-scanline. New/unread items get cc-glow pulse."
21
+ },
22
+ "auradecantism": {
23
+ "wrapper": "d-glass",
24
+ "atoms": "_r4",
25
+ "notes": "Feed in d-glass panel. New items highlighted with subtle glow. Timestamps in muted text."
26
+ },
27
+ "clean": {
28
+ "wrapper": "",
29
+ "atoms": "_b1 _r4",
30
+ "notes": "Feed in bordered container. Simple list items with bottom borders."
31
+ }
32
+ },
33
+ "code": {
34
+ "imports": "import { tags } from 'decantr/tags';\nimport { css } from 'decantr/css';\nimport { Avatar, Badge, Button } from 'decantr/components';",
35
+ "example": "function ActivityFeed() {\n const { div, span, h3 } = tags;\n const items = [\n { avatar: '', user: 'Alice Chen', action: 'deployed v2.4.1 to production', time: '2 min ago', type: 'success' },\n { avatar: '', user: 'Bob Patel', action: 'opened pull request #142', time: '15 min ago', type: 'default' },\n { avatar: '', user: 'Carol Liu', action: 'commented on issue #89', time: '1 hour ago', type: 'default' },\n { avatar: '', user: 'Dan Kim', action: 'merged branch feature/auth', time: '3 hours ago', type: 'success' }\n ];\n\n return div({ class: css('_flex _col _gap2 _p4') },\n h3({ class: css('_heading5') }, 'Recent Activity'),\n ...items.map(item =>\n div({ class: css('_flex _gap3 _aic _py2 _borderB') },\n Avatar({ src: item.avatar, name: item.user, size: 'sm' }),\n div({ class: css('_flex _col _flex1') },\n span({ class: css('_textsm') }, span({ class: css('_bold') }, item.user), ` ${item.action}`),\n span({ class: css('_textxs _fgmuted') }, item.time)\n ),\n Badge({ variant: item.type === 'success' ? 'success' : 'default' }, item.type)\n )\n ),\n Button({ variant: 'ghost', class: css('_wfull _mt2') }, 'Load More')\n );\n}"
36
+ }
37
+ }
@@ -0,0 +1,27 @@
1
+ {
2
+ "$schema": "https://decantr.ai/schemas/pattern.v1.json",
3
+ "id": "article-content",
4
+ "name": "Article Content",
5
+ "description": "Long-form article layout with sticky table-of-contents sidebar. Used for documentation, blog posts, and content-heavy pages.",
6
+ "components": ["Card", "Avatar", "Badge", "Text", "Separator"],
7
+ "default_blend": {
8
+ "layout": "grid",
9
+ "atoms": "_grid _gc12 _gap8 _p6",
10
+ "slots": {
11
+ "toc-sidebar": "Sticky nav list in a 3-column sidebar with _colSpan3, built from heading anchors",
12
+ "article": "Main content area with _colSpan9, containing prose Text and Card sections",
13
+ "author": "Card at article end with Avatar, bio Text, and links, preceded by Separator"
14
+ }
15
+ },
16
+ "recipe_overrides": {
17
+ "command-center": {
18
+ "wrapper": "cc-frame",
19
+ "atoms": "cc-scanline",
20
+ "notes": "ToC headings use cc-label. Active ToC item gets cc-glow. Article headings use cc-label. Code blocks use cc-scanline with cc-data for line numbers."
21
+ }
22
+ },
23
+ "code": {
24
+ "imports": "import { tags } from 'decantr/tags';\nimport { css } from 'decantr/css';\nimport { Separator, Avatar } from 'decantr/components';",
25
+ "example": "function ArticleContent() {\n const { div, h1, p, span, time, article: articleEl } = tags;\n const article = {\n title: 'Building Scalable Design Systems',\n author: { avatar: '', name: 'Jane Doe' },\n date: 'Mar 12, 2026',\n readTime: '8 min read',\n html: '<p>Design systems provide a shared language between design and engineering. By establishing reusable components and tokens, teams ship faster while maintaining consistency.</p>'\n };\n\n return articleEl({ class: css('_flex _col _gap6 _mw[720px] _mxa _py8') },\n div({ class: css('_flex _col _gap3') },\n h1({ class: css('_heading1') }, article.title),\n div({ class: css('_flex _aic _gap3') },\n Avatar({ src: article.author.avatar, name: article.author.name, size: 'sm' }),\n span({ class: css('_textsm') }, article.author.name),\n time({ class: css('_textsm _fgmuted') }, article.date),\n span({ class: css('_textsm _fgmuted') }, article.readTime)\n )\n ),\n Separator(),\n div({ class: css('_body _lhrelaxed'), innerHTML: article.html })\n );\n}"
26
+ }
27
+ }