@misoto22/folio 0.0.0 → 0.16.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 (686) hide show
  1. package/AGENTS.md +88 -0
  2. package/CLAUDE.md +1 -0
  3. package/LICENSE +21 -0
  4. package/README.md +208 -2
  5. package/bin/folio-design.mjs +277 -0
  6. package/bin/migrate-legacy.mjs +81 -0
  7. package/dist/agent/Accordion.md +65 -0
  8. package/dist/agent/Actions.md +49 -0
  9. package/dist/agent/Alert.md +65 -0
  10. package/dist/agent/AppShell.md +69 -0
  11. package/dist/agent/ArchitectureFigure.md +72 -0
  12. package/dist/agent/AreaChart.md +94 -0
  13. package/dist/agent/Article.md +65 -0
  14. package/dist/agent/AspectRatio.md +58 -0
  15. package/dist/agent/Avatar.md +53 -0
  16. package/dist/agent/Badge.md +62 -0
  17. package/dist/agent/BarChart.md +93 -0
  18. package/dist/agent/BarList.md +67 -0
  19. package/dist/agent/BigNumber.md +70 -0
  20. package/dist/agent/BoxPlot.md +82 -0
  21. package/dist/agent/Breadcrumb.md +55 -0
  22. package/dist/agent/BulletChart.md +71 -0
  23. package/dist/agent/Button.md +81 -0
  24. package/dist/agent/Calendar.md +77 -0
  25. package/dist/agent/CalendarHeatmap.md +75 -0
  26. package/dist/agent/Card.md +72 -0
  27. package/dist/agent/Checkbox.md +57 -0
  28. package/dist/agent/Code.md +51 -0
  29. package/dist/agent/CodeBlock.md +77 -0
  30. package/dist/agent/Collapsible.md +68 -0
  31. package/dist/agent/Collection.md +169 -0
  32. package/dist/agent/ColorPicker.md +76 -0
  33. package/dist/agent/Combobox.md +77 -0
  34. package/dist/agent/Command.md +122 -0
  35. package/dist/agent/ComposedChart.md +82 -0
  36. package/dist/agent/Contact.md +90 -0
  37. package/dist/agent/Content.md +70 -0
  38. package/dist/agent/ContextMenu.md +93 -0
  39. package/dist/agent/Conversation.md +247 -0
  40. package/dist/agent/DataflowFigure.md +49 -0
  41. package/dist/agent/DatePicker.md +104 -0
  42. package/dist/agent/DescriptionList.md +69 -0
  43. package/dist/agent/Diagram.md +71 -0
  44. package/dist/agent/DiagramCanvas.md +71 -0
  45. package/dist/agent/DiagramExportMenu.md +65 -0
  46. package/dist/agent/DiagramInspector.md +73 -0
  47. package/dist/agent/DiagramLegend.md +56 -0
  48. package/dist/agent/DiagramMinimap.md +69 -0
  49. package/dist/agent/DiagramToolbar.md +70 -0
  50. package/dist/agent/Dialog.md +76 -0
  51. package/dist/agent/DropdownMenu.md +110 -0
  52. package/dist/agent/EmptyState.md +63 -0
  53. package/dist/agent/ErrorState.md +67 -0
  54. package/dist/agent/Evidence.md +165 -0
  55. package/dist/agent/Facet.md +107 -0
  56. package/dist/agent/Field.md +79 -0
  57. package/dist/agent/FigureBand.md +49 -0
  58. package/dist/agent/FloatingIconButton.md +61 -0
  59. package/dist/agent/FunnelChart.md +75 -0
  60. package/dist/agent/Heading.md +65 -0
  61. package/dist/agent/Heatmap.md +78 -0
  62. package/dist/agent/Histogram.md +88 -0
  63. package/dist/agent/Input.md +52 -0
  64. package/dist/agent/Kbd.md +48 -0
  65. package/dist/agent/LifecycleFigure.md +50 -0
  66. package/dist/agent/LineChart.md +85 -0
  67. package/dist/agent/LinkArrow.md +49 -0
  68. package/dist/agent/Markdown.md +69 -0
  69. package/dist/agent/Media.md +261 -0
  70. package/dist/agent/Metric.md +70 -0
  71. package/dist/agent/Metrics.md +114 -0
  72. package/dist/agent/Music.md +86 -0
  73. package/dist/agent/NativeSelect.md +62 -0
  74. package/dist/agent/NavItem.md +56 -0
  75. package/dist/agent/NumberField.md +73 -0
  76. package/dist/agent/PageHeader.md +69 -0
  77. package/dist/agent/Pagination.md +70 -0
  78. package/dist/agent/PieChart.md +80 -0
  79. package/dist/agent/Popover.md +80 -0
  80. package/dist/agent/Portfolio.md +93 -0
  81. package/dist/agent/PortfolioIndex.md +34 -0
  82. package/dist/agent/Progress.md +58 -0
  83. package/dist/agent/RadarChart.md +79 -0
  84. package/dist/agent/RadialChart.md +81 -0
  85. package/dist/agent/RadioGroup.md +66 -0
  86. package/dist/agent/Reading.md +233 -0
  87. package/dist/agent/Recovery.md +72 -0
  88. package/dist/agent/SankeyChart.md +85 -0
  89. package/dist/agent/ScatterChart.md +80 -0
  90. package/dist/agent/ScrollArea.md +62 -0
  91. package/dist/agent/SearchPalette.md +51 -0
  92. package/dist/agent/SearchableMenu.md +69 -0
  93. package/dist/agent/Select.md +102 -0
  94. package/dist/agent/Separator.md +60 -0
  95. package/dist/agent/SequenceFigure.md +51 -0
  96. package/dist/agent/Sheet.md +82 -0
  97. package/dist/agent/Sidebar.md +194 -0
  98. package/dist/agent/SiteNavigation.md +62 -0
  99. package/dist/agent/SiteShell.md +67 -0
  100. package/dist/agent/Skeleton.md +96 -0
  101. package/dist/agent/Slider.md +67 -0
  102. package/dist/agent/Sparkline.md +68 -0
  103. package/dist/agent/Spinner.md +62 -0
  104. package/dist/agent/StatusDot.md +56 -0
  105. package/dist/agent/StatusPill.md +55 -0
  106. package/dist/agent/Steps.md +68 -0
  107. package/dist/agent/Switch.md +50 -0
  108. package/dist/agent/Table.md +111 -0
  109. package/dist/agent/Tabs.md +71 -0
  110. package/dist/agent/Tag.md +67 -0
  111. package/dist/agent/Text.md +66 -0
  112. package/dist/agent/Textarea.md +46 -0
  113. package/dist/agent/Timeline.md +114 -0
  114. package/dist/agent/Timestamp.md +65 -0
  115. package/dist/agent/Toast.md +51 -0
  116. package/dist/agent/ToggleGroup.md +67 -0
  117. package/dist/agent/Toolbar.md +72 -0
  118. package/dist/agent/Tooltip.md +74 -0
  119. package/dist/agent/TreemapChart.md +76 -0
  120. package/dist/agent/WaterfallChart.md +86 -0
  121. package/dist/agent/WorkflowFigure.md +51 -0
  122. package/dist/agent/catalog.json +8006 -0
  123. package/dist/agent/index.md +182 -0
  124. package/dist/article.css +407 -0
  125. package/dist/charts/AreaChart/AreaChart.d.ts +198 -0
  126. package/dist/charts/AreaChart/AreaChart.js +479 -0
  127. package/dist/charts/AreaChart/AreaChart.js.map +1 -0
  128. package/dist/charts/BarChart/BarChart.d.ts +190 -0
  129. package/dist/charts/BarChart/BarChart.js +599 -0
  130. package/dist/charts/BarChart/BarChart.js.map +1 -0
  131. package/dist/charts/BarList/BarList.d.ts +65 -0
  132. package/dist/charts/BarList/BarList.js +79 -0
  133. package/dist/charts/BarList/BarList.js.map +1 -0
  134. package/dist/charts/BigNumber/BigNumber.d.ts +72 -0
  135. package/dist/charts/BigNumber/BigNumber.js +51 -0
  136. package/dist/charts/BigNumber/BigNumber.js.map +1 -0
  137. package/dist/charts/BoxPlot/BoxPlot.d.ts +177 -0
  138. package/dist/charts/BoxPlot/BoxPlot.js +497 -0
  139. package/dist/charts/BoxPlot/BoxPlot.js.map +1 -0
  140. package/dist/charts/BulletChart/BulletChart.d.ts +100 -0
  141. package/dist/charts/BulletChart/BulletChart.js +197 -0
  142. package/dist/charts/BulletChart/BulletChart.js.map +1 -0
  143. package/dist/charts/CalendarHeatmap/CalendarHeatmap.d.ts +106 -0
  144. package/dist/charts/CalendarHeatmap/CalendarHeatmap.js +103 -0
  145. package/dist/charts/CalendarHeatmap/CalendarHeatmap.js.map +1 -0
  146. package/dist/charts/ComposedChart/ComposedChart.d.ts +178 -0
  147. package/dist/charts/ComposedChart/ComposedChart.js +667 -0
  148. package/dist/charts/ComposedChart/ComposedChart.js.map +1 -0
  149. package/dist/charts/Facet/Facet.d.ts +240 -0
  150. package/dist/charts/Facet/Facet.js +133 -0
  151. package/dist/charts/Facet/Facet.js.map +1 -0
  152. package/dist/charts/Facet/panels.d.ts +187 -0
  153. package/dist/charts/Facet/panels.js +203 -0
  154. package/dist/charts/Facet/panels.js.map +1 -0
  155. package/dist/charts/FunnelChart/FunnelChart.d.ts +106 -0
  156. package/dist/charts/FunnelChart/FunnelChart.js +137 -0
  157. package/dist/charts/FunnelChart/FunnelChart.js.map +1 -0
  158. package/dist/charts/Heatmap/Heatmap.d.ts +101 -0
  159. package/dist/charts/Heatmap/Heatmap.js +125 -0
  160. package/dist/charts/Heatmap/Heatmap.js.map +1 -0
  161. package/dist/charts/Histogram/Histogram.d.ts +188 -0
  162. package/dist/charts/Histogram/Histogram.js +382 -0
  163. package/dist/charts/Histogram/Histogram.js.map +1 -0
  164. package/dist/charts/LineChart/LineChart.d.ts +174 -0
  165. package/dist/charts/LineChart/LineChart.js +485 -0
  166. package/dist/charts/LineChart/LineChart.js.map +1 -0
  167. package/dist/charts/PieChart/PieChart.d.ts +140 -0
  168. package/dist/charts/PieChart/PieChart.js +317 -0
  169. package/dist/charts/PieChart/PieChart.js.map +1 -0
  170. package/dist/charts/RadarChart/RadarChart.d.ts +135 -0
  171. package/dist/charts/RadarChart/RadarChart.js +303 -0
  172. package/dist/charts/RadarChart/RadarChart.js.map +1 -0
  173. package/dist/charts/RadialChart/RadialChart.d.ts +142 -0
  174. package/dist/charts/RadialChart/RadialChart.js +279 -0
  175. package/dist/charts/RadialChart/RadialChart.js.map +1 -0
  176. package/dist/charts/SankeyChart/SankeyChart.d.ts +149 -0
  177. package/dist/charts/SankeyChart/SankeyChart.js +509 -0
  178. package/dist/charts/SankeyChart/SankeyChart.js.map +1 -0
  179. package/dist/charts/ScatterChart/ScatterChart.d.ts +149 -0
  180. package/dist/charts/ScatterChart/ScatterChart.js +275 -0
  181. package/dist/charts/ScatterChart/ScatterChart.js.map +1 -0
  182. package/dist/charts/Sparkline/Sparkline.d.ts +53 -0
  183. package/dist/charts/Sparkline/Sparkline.js +95 -0
  184. package/dist/charts/Sparkline/Sparkline.js.map +1 -0
  185. package/dist/charts/TreemapChart/TreemapChart.d.ts +98 -0
  186. package/dist/charts/TreemapChart/TreemapChart.js +127 -0
  187. package/dist/charts/TreemapChart/TreemapChart.js.map +1 -0
  188. package/dist/charts/WaterfallChart/WaterfallChart.d.ts +164 -0
  189. package/dist/charts/WaterfallChart/WaterfallChart.js +321 -0
  190. package/dist/charts/WaterfallChart/WaterfallChart.js.map +1 -0
  191. package/dist/charts/index.d.ts +43 -0
  192. package/dist/charts/index.js +130 -0
  193. package/dist/charts/index.js.map +1 -0
  194. package/dist/charts/lib/annotations.d.ts +103 -0
  195. package/dist/charts/lib/annotations.js +99 -0
  196. package/dist/charts/lib/annotations.js.map +1 -0
  197. package/dist/charts/lib/axis.d.ts +18 -0
  198. package/dist/charts/lib/axis.js +21 -0
  199. package/dist/charts/lib/axis.js.map +1 -0
  200. package/dist/charts/lib/background.d.ts +33 -0
  201. package/dist/charts/lib/background.js +173 -0
  202. package/dist/charts/lib/background.js.map +1 -0
  203. package/dist/charts/lib/brush.d.ts +94 -0
  204. package/dist/charts/lib/brush.js +535 -0
  205. package/dist/charts/lib/brush.js.map +1 -0
  206. package/dist/charts/lib/chart.d.ts +94 -0
  207. package/dist/charts/lib/chart.js +149 -0
  208. package/dist/charts/lib/chart.js.map +1 -0
  209. package/dist/charts/lib/dot.d.ts +29 -0
  210. package/dist/charts/lib/dot.js +78 -0
  211. package/dist/charts/lib/dot.js.map +1 -0
  212. package/dist/charts/lib/empty.d.ts +31 -0
  213. package/dist/charts/lib/empty.js +24 -0
  214. package/dist/charts/lib/empty.js.map +1 -0
  215. package/dist/charts/lib/export.d.ts +94 -0
  216. package/dist/charts/lib/export.js +62 -0
  217. package/dist/charts/lib/export.js.map +1 -0
  218. package/dist/charts/lib/figure.d.ts +81 -0
  219. package/dist/charts/lib/figure.js +62 -0
  220. package/dist/charts/lib/figure.js.map +1 -0
  221. package/dist/charts/lib/format.d.ts +46 -0
  222. package/dist/charts/lib/format.js +56 -0
  223. package/dist/charts/lib/format.js.map +1 -0
  224. package/dist/charts/lib/legend.d.ts +45 -0
  225. package/dist/charts/lib/legend.js +117 -0
  226. package/dist/charts/lib/legend.js.map +1 -0
  227. package/dist/charts/lib/loading.d.ts +48 -0
  228. package/dist/charts/lib/loading.js +105 -0
  229. package/dist/charts/lib/loading.js.map +1 -0
  230. package/dist/charts/lib/paint.d.ts +154 -0
  231. package/dist/charts/lib/paint.js +551 -0
  232. package/dist/charts/lib/paint.js.map +1 -0
  233. package/dist/charts/lib/scale.d.ts +23 -0
  234. package/dist/charts/lib/scale.js +13 -0
  235. package/dist/charts/lib/scale.js.map +1 -0
  236. package/dist/charts/lib/selection.d.ts +20 -0
  237. package/dist/charts/lib/selection.js +18 -0
  238. package/dist/charts/lib/selection.js.map +1 -0
  239. package/dist/charts/lib/sonify-control.d.ts +163 -0
  240. package/dist/charts/lib/sonify-control.js +172 -0
  241. package/dist/charts/lib/sonify-control.js.map +1 -0
  242. package/dist/charts/lib/sonify.d.ts +248 -0
  243. package/dist/charts/lib/sonify.js +262 -0
  244. package/dist/charts/lib/sonify.js.map +1 -0
  245. package/dist/charts/lib/toolbar.d.ts +144 -0
  246. package/dist/charts/lib/toolbar.js +156 -0
  247. package/dist/charts/lib/toolbar.js.map +1 -0
  248. package/dist/charts/lib/tooltip.d.ts +59 -0
  249. package/dist/charts/lib/tooltip.js +135 -0
  250. package/dist/charts/lib/tooltip.js.map +1 -0
  251. package/dist/charts/lib/values.d.ts +56 -0
  252. package/dist/charts/lib/values.js +71 -0
  253. package/dist/charts/lib/values.js.map +1 -0
  254. package/dist/charts/lib/zoom.d.ts +139 -0
  255. package/dist/charts/lib/zoom.js +314 -0
  256. package/dist/charts/lib/zoom.js.map +1 -0
  257. package/dist/components/Accordion/Accordion.d.ts +34 -0
  258. package/dist/components/Accordion/Accordion.js +43 -0
  259. package/dist/components/Accordion/Accordion.js.map +1 -0
  260. package/dist/components/Alert/Alert.d.ts +32 -0
  261. package/dist/components/Alert/Alert.js +49 -0
  262. package/dist/components/Alert/Alert.js.map +1 -0
  263. package/dist/components/AppShell/AppShell.d.ts +58 -0
  264. package/dist/components/AppShell/AppShell.js +126 -0
  265. package/dist/components/AppShell/AppShell.js.map +1 -0
  266. package/dist/components/Article/Article.d.ts +58 -0
  267. package/dist/components/Article/Article.js +34 -0
  268. package/dist/components/Article/Article.js.map +1 -0
  269. package/dist/components/AspectRatio/AspectRatio.d.ts +46 -0
  270. package/dist/components/AspectRatio/AspectRatio.js +33 -0
  271. package/dist/components/AspectRatio/AspectRatio.js.map +1 -0
  272. package/dist/components/Avatar/Avatar.d.ts +38 -0
  273. package/dist/components/Avatar/Avatar.js +44 -0
  274. package/dist/components/Avatar/Avatar.js.map +1 -0
  275. package/dist/components/Badge/Badge.d.ts +30 -0
  276. package/dist/components/Badge/Badge.js +29 -0
  277. package/dist/components/Badge/Badge.js.map +1 -0
  278. package/dist/components/Breadcrumb/Breadcrumb.d.ts +37 -0
  279. package/dist/components/Breadcrumb/Breadcrumb.js +46 -0
  280. package/dist/components/Breadcrumb/Breadcrumb.js.map +1 -0
  281. package/dist/components/Button/Button.d.ts +70 -0
  282. package/dist/components/Button/Button.js +95 -0
  283. package/dist/components/Button/Button.js.map +1 -0
  284. package/dist/components/Calendar/Calendar.d.ts +54 -0
  285. package/dist/components/Calendar/Calendar.js +369 -0
  286. package/dist/components/Calendar/Calendar.js.map +1 -0
  287. package/dist/components/Card/Card.d.ts +55 -0
  288. package/dist/components/Card/Card.js +64 -0
  289. package/dist/components/Card/Card.js.map +1 -0
  290. package/dist/components/Checkbox/Checkbox.d.ts +26 -0
  291. package/dist/components/Checkbox/Checkbox.js +34 -0
  292. package/dist/components/Checkbox/Checkbox.js.map +1 -0
  293. package/dist/components/Code/Code.d.ts +30 -0
  294. package/dist/components/Code/Code.js +21 -0
  295. package/dist/components/Code/Code.js.map +1 -0
  296. package/dist/components/CodeBlock/CodeBlock.d.ts +145 -0
  297. package/dist/components/CodeBlock/CodeBlock.js +114 -0
  298. package/dist/components/CodeBlock/CodeBlock.js.map +1 -0
  299. package/dist/components/Collapsible/Collapsible.d.ts +45 -0
  300. package/dist/components/Collapsible/Collapsible.js +60 -0
  301. package/dist/components/Collapsible/Collapsible.js.map +1 -0
  302. package/dist/components/ColorPicker/ColorPicker.d.ts +67 -0
  303. package/dist/components/ColorPicker/ColorPicker.js +334 -0
  304. package/dist/components/ColorPicker/ColorPicker.js.map +1 -0
  305. package/dist/components/Combobox/Combobox.d.ts +77 -0
  306. package/dist/components/Combobox/Combobox.js +170 -0
  307. package/dist/components/Combobox/Combobox.js.map +1 -0
  308. package/dist/components/Command/Command.d.ts +125 -0
  309. package/dist/components/Command/Command.js +204 -0
  310. package/dist/components/Command/Command.js.map +1 -0
  311. package/dist/components/ContextMenu/ContextMenu.d.ts +63 -0
  312. package/dist/components/ContextMenu/ContextMenu.js +109 -0
  313. package/dist/components/ContextMenu/ContextMenu.js.map +1 -0
  314. package/dist/components/DatePicker/DatePicker.d.ts +130 -0
  315. package/dist/components/DatePicker/DatePicker.js +257 -0
  316. package/dist/components/DatePicker/DatePicker.js.map +1 -0
  317. package/dist/components/DescriptionList/DescriptionList.d.ts +73 -0
  318. package/dist/components/DescriptionList/DescriptionList.js +35 -0
  319. package/dist/components/DescriptionList/DescriptionList.js.map +1 -0
  320. package/dist/components/Diagram/Diagram.d.ts +86 -0
  321. package/dist/components/Diagram/Diagram.js +211 -0
  322. package/dist/components/Diagram/Diagram.js.map +1 -0
  323. package/dist/components/Dialog/Dialog.d.ts +63 -0
  324. package/dist/components/Dialog/Dialog.js +90 -0
  325. package/dist/components/Dialog/Dialog.js.map +1 -0
  326. package/dist/components/DropdownMenu/DropdownMenu.d.ts +87 -0
  327. package/dist/components/DropdownMenu/DropdownMenu.js +120 -0
  328. package/dist/components/DropdownMenu/DropdownMenu.js.map +1 -0
  329. package/dist/components/EmptyState/EmptyState.d.ts +55 -0
  330. package/dist/components/EmptyState/EmptyState.js +32 -0
  331. package/dist/components/EmptyState/EmptyState.js.map +1 -0
  332. package/dist/components/ErrorState/ErrorState.d.ts +55 -0
  333. package/dist/components/ErrorState/ErrorState.js +41 -0
  334. package/dist/components/ErrorState/ErrorState.js.map +1 -0
  335. package/dist/components/Field/Field.d.ts +111 -0
  336. package/dist/components/Field/Field.js +95 -0
  337. package/dist/components/Field/Field.js.map +1 -0
  338. package/dist/components/Field/field-control.d.ts +31 -0
  339. package/dist/components/Field/field-control.js +12 -0
  340. package/dist/components/Field/field-control.js.map +1 -0
  341. package/dist/components/FigureBand/FigureBand.d.ts +31 -0
  342. package/dist/components/FigureBand/FigureBand.js +51 -0
  343. package/dist/components/FigureBand/FigureBand.js.map +1 -0
  344. package/dist/components/FloatingIconButton/FloatingIconButton.d.ts +29 -0
  345. package/dist/components/FloatingIconButton/FloatingIconButton.js +34 -0
  346. package/dist/components/FloatingIconButton/FloatingIconButton.js.map +1 -0
  347. package/dist/components/Heading/Heading.d.ts +62 -0
  348. package/dist/components/Heading/Heading.js +44 -0
  349. package/dist/components/Heading/Heading.js.map +1 -0
  350. package/dist/components/Input/Input.d.ts +22 -0
  351. package/dist/components/Input/Input.js +21 -0
  352. package/dist/components/Input/Input.js.map +1 -0
  353. package/dist/components/Kbd/Kbd.d.ts +27 -0
  354. package/dist/components/Kbd/Kbd.js +21 -0
  355. package/dist/components/Kbd/Kbd.js.map +1 -0
  356. package/dist/components/LinkArrow/LinkArrow.d.ts +24 -0
  357. package/dist/components/LinkArrow/LinkArrow.js +24 -0
  358. package/dist/components/LinkArrow/LinkArrow.js.map +1 -0
  359. package/dist/components/Markdown/Markdown.d.ts +139 -0
  360. package/dist/components/Markdown/Markdown.js +135 -0
  361. package/dist/components/Markdown/Markdown.js.map +1 -0
  362. package/dist/components/Markdown/inline.d.ts +29 -0
  363. package/dist/components/Markdown/inline.js +74 -0
  364. package/dist/components/Markdown/inline.js.map +1 -0
  365. package/dist/components/Markdown/nodes.d.ts +65 -0
  366. package/dist/components/Markdown/nodes.js +1 -0
  367. package/dist/components/Markdown/nodes.js.map +1 -0
  368. package/dist/components/Markdown/parse.d.ts +24 -0
  369. package/dist/components/Markdown/parse.js +110 -0
  370. package/dist/components/Markdown/parse.js.map +1 -0
  371. package/dist/components/Markdown/slug.d.ts +15 -0
  372. package/dist/components/Markdown/slug.js +7 -0
  373. package/dist/components/Markdown/slug.js.map +1 -0
  374. package/dist/components/Metric/Metric.d.ts +61 -0
  375. package/dist/components/Metric/Metric.js +51 -0
  376. package/dist/components/Metric/Metric.js.map +1 -0
  377. package/dist/components/NativeSelect/NativeSelect.d.ts +33 -0
  378. package/dist/components/NativeSelect/NativeSelect.js +44 -0
  379. package/dist/components/NativeSelect/NativeSelect.js.map +1 -0
  380. package/dist/components/NavItem/NavItem.d.ts +39 -0
  381. package/dist/components/NavItem/NavItem.js +31 -0
  382. package/dist/components/NavItem/NavItem.js.map +1 -0
  383. package/dist/components/NumberField/NumberField.d.ts +69 -0
  384. package/dist/components/NumberField/NumberField.js +162 -0
  385. package/dist/components/NumberField/NumberField.js.map +1 -0
  386. package/dist/components/PageHeader/PageHeader.d.ts +92 -0
  387. package/dist/components/PageHeader/PageHeader.js +37 -0
  388. package/dist/components/PageHeader/PageHeader.js.map +1 -0
  389. package/dist/components/Pagination/Pagination.d.ts +67 -0
  390. package/dist/components/Pagination/Pagination.js +112 -0
  391. package/dist/components/Pagination/Pagination.js.map +1 -0
  392. package/dist/components/Popover/Popover.d.ts +39 -0
  393. package/dist/components/Popover/Popover.js +57 -0
  394. package/dist/components/Popover/Popover.js.map +1 -0
  395. package/dist/components/Progress/Progress.d.ts +43 -0
  396. package/dist/components/Progress/Progress.js +57 -0
  397. package/dist/components/Progress/Progress.js.map +1 -0
  398. package/dist/components/RadioGroup/RadioGroup.d.ts +49 -0
  399. package/dist/components/RadioGroup/RadioGroup.js +53 -0
  400. package/dist/components/RadioGroup/RadioGroup.js.map +1 -0
  401. package/dist/components/ScrollArea/ScrollArea.d.ts +46 -0
  402. package/dist/components/ScrollArea/ScrollArea.js +54 -0
  403. package/dist/components/ScrollArea/ScrollArea.js.map +1 -0
  404. package/dist/components/SearchableMenu/SearchableMenu.d.ts +68 -0
  405. package/dist/components/SearchableMenu/SearchableMenu.js +101 -0
  406. package/dist/components/SearchableMenu/SearchableMenu.js.map +1 -0
  407. package/dist/components/Select/Select.d.ts +87 -0
  408. package/dist/components/Select/Select.js +130 -0
  409. package/dist/components/Select/Select.js.map +1 -0
  410. package/dist/components/Separator/Separator.d.ts +48 -0
  411. package/dist/components/Separator/Separator.js +43 -0
  412. package/dist/components/Separator/Separator.js.map +1 -0
  413. package/dist/components/Sheet/Sheet.d.ts +43 -0
  414. package/dist/components/Sheet/Sheet.js +79 -0
  415. package/dist/components/Sheet/Sheet.js.map +1 -0
  416. package/dist/components/Sidebar/Sidebar.d.ts +357 -0
  417. package/dist/components/Sidebar/Sidebar.js +447 -0
  418. package/dist/components/Sidebar/Sidebar.js.map +1 -0
  419. package/dist/components/Skeleton/Skeleton.d.ts +70 -0
  420. package/dist/components/Skeleton/Skeleton.js +44 -0
  421. package/dist/components/Skeleton/Skeleton.js.map +1 -0
  422. package/dist/components/Slider/Slider.d.ts +74 -0
  423. package/dist/components/Slider/Slider.js +143 -0
  424. package/dist/components/Slider/Slider.js.map +1 -0
  425. package/dist/components/Spinner/Spinner.d.ts +58 -0
  426. package/dist/components/Spinner/Spinner.js +49 -0
  427. package/dist/components/Spinner/Spinner.js.map +1 -0
  428. package/dist/components/StatusDot/StatusDot.d.ts +29 -0
  429. package/dist/components/StatusDot/StatusDot.js +44 -0
  430. package/dist/components/StatusDot/StatusDot.js.map +1 -0
  431. package/dist/components/StatusPill/StatusPill.d.ts +30 -0
  432. package/dist/components/StatusPill/StatusPill.js +37 -0
  433. package/dist/components/StatusPill/StatusPill.js.map +1 -0
  434. package/dist/components/Steps/Steps.d.ts +65 -0
  435. package/dist/components/Steps/Steps.js +25 -0
  436. package/dist/components/Steps/Steps.js.map +1 -0
  437. package/dist/components/Switch/Switch.d.ts +23 -0
  438. package/dist/components/Switch/Switch.js +23 -0
  439. package/dist/components/Switch/Switch.js.map +1 -0
  440. package/dist/components/Table/Table.d.ts +116 -0
  441. package/dist/components/Table/Table.js +137 -0
  442. package/dist/components/Table/Table.js.map +1 -0
  443. package/dist/components/Tabs/Tabs.d.ts +37 -0
  444. package/dist/components/Tabs/Tabs.js +205 -0
  445. package/dist/components/Tabs/Tabs.js.map +1 -0
  446. package/dist/components/Tag/Tag.d.ts +87 -0
  447. package/dist/components/Tag/Tag.js +62 -0
  448. package/dist/components/Tag/Tag.js.map +1 -0
  449. package/dist/components/Text/Text.d.ts +62 -0
  450. package/dist/components/Text/Text.js +30 -0
  451. package/dist/components/Text/Text.js.map +1 -0
  452. package/dist/components/Textarea/Textarea.d.ts +20 -0
  453. package/dist/components/Textarea/Textarea.js +32 -0
  454. package/dist/components/Textarea/Textarea.js.map +1 -0
  455. package/dist/components/Timestamp/Timestamp.d.ts +59 -0
  456. package/dist/components/Timestamp/Timestamp.js +56 -0
  457. package/dist/components/Timestamp/Timestamp.js.map +1 -0
  458. package/dist/components/Toast/Toast.d.ts +32 -0
  459. package/dist/components/Toast/Toast.js +64 -0
  460. package/dist/components/Toast/Toast.js.map +1 -0
  461. package/dist/components/ToggleGroup/ToggleGroup.d.ts +46 -0
  462. package/dist/components/ToggleGroup/ToggleGroup.js +88 -0
  463. package/dist/components/ToggleGroup/ToggleGroup.js.map +1 -0
  464. package/dist/components/Toolbar/Toolbar.d.ts +55 -0
  465. package/dist/components/Toolbar/Toolbar.js +43 -0
  466. package/dist/components/Toolbar/Toolbar.js.map +1 -0
  467. package/dist/components/Tooltip/Tooltip.d.ts +43 -0
  468. package/dist/components/Tooltip/Tooltip.js +40 -0
  469. package/dist/components/Tooltip/Tooltip.js.map +1 -0
  470. package/dist/diagrams/ArchitectureFigure/ArchitectureFigure.d.ts +55 -0
  471. package/dist/diagrams/ArchitectureFigure/ArchitectureFigure.js +175 -0
  472. package/dist/diagrams/ArchitectureFigure/ArchitectureFigure.js.map +1 -0
  473. package/dist/diagrams/DataflowFigure/DataflowFigure.d.ts +28 -0
  474. package/dist/diagrams/DataflowFigure/DataflowFigure.js +148 -0
  475. package/dist/diagrams/DataflowFigure/DataflowFigure.js.map +1 -0
  476. package/dist/diagrams/DiagramCanvas/DiagramCanvas.d.ts +78 -0
  477. package/dist/diagrams/DiagramCanvas/DiagramCanvas.js +229 -0
  478. package/dist/diagrams/DiagramCanvas/DiagramCanvas.js.map +1 -0
  479. package/dist/diagrams/DiagramExportMenu/DiagramExportMenu.d.ts +106 -0
  480. package/dist/diagrams/DiagramExportMenu/DiagramExportMenu.js +123 -0
  481. package/dist/diagrams/DiagramExportMenu/DiagramExportMenu.js.map +1 -0
  482. package/dist/diagrams/DiagramInspector/DiagramInspector.d.ts +70 -0
  483. package/dist/diagrams/DiagramInspector/DiagramInspector.js +94 -0
  484. package/dist/diagrams/DiagramInspector/DiagramInspector.js.map +1 -0
  485. package/dist/diagrams/DiagramLegend/DiagramLegend.d.ts +42 -0
  486. package/dist/diagrams/DiagramLegend/DiagramLegend.js +35 -0
  487. package/dist/diagrams/DiagramLegend/DiagramLegend.js.map +1 -0
  488. package/dist/diagrams/DiagramMinimap/DiagramMinimap.d.ts +77 -0
  489. package/dist/diagrams/DiagramMinimap/DiagramMinimap.js +106 -0
  490. package/dist/diagrams/DiagramMinimap/DiagramMinimap.js.map +1 -0
  491. package/dist/diagrams/DiagramToolbar/DiagramToolbar.d.ts +48 -0
  492. package/dist/diagrams/DiagramToolbar/DiagramToolbar.js +53 -0
  493. package/dist/diagrams/DiagramToolbar/DiagramToolbar.js.map +1 -0
  494. package/dist/diagrams/LifecycleFigure/LifecycleFigure.d.ts +31 -0
  495. package/dist/diagrams/LifecycleFigure/LifecycleFigure.js +234 -0
  496. package/dist/diagrams/LifecycleFigure/LifecycleFigure.js.map +1 -0
  497. package/dist/diagrams/SequenceFigure/SequenceFigure.d.ts +38 -0
  498. package/dist/diagrams/SequenceFigure/SequenceFigure.js +261 -0
  499. package/dist/diagrams/SequenceFigure/SequenceFigure.js.map +1 -0
  500. package/dist/diagrams/WorkflowFigure/WorkflowFigure.d.ts +36 -0
  501. package/dist/diagrams/WorkflowFigure/WorkflowFigure.js +259 -0
  502. package/dist/diagrams/WorkflowFigure/WorkflowFigure.js.map +1 -0
  503. package/dist/diagrams/index.d.ts +17 -0
  504. package/dist/diagrams/index.js +29 -0
  505. package/dist/diagrams/index.js.map +1 -0
  506. package/dist/diagrams/lib/dev.d.ts +61 -0
  507. package/dist/diagrams/lib/dev.js +96 -0
  508. package/dist/diagrams/lib/dev.js.map +1 -0
  509. package/dist/diagrams/lib/frame.d.ts +138 -0
  510. package/dist/diagrams/lib/frame.js +131 -0
  511. package/dist/diagrams/lib/frame.js.map +1 -0
  512. package/dist/diagrams/lib/geometry.d.ts +114 -0
  513. package/dist/diagrams/lib/geometry.js +113 -0
  514. package/dist/diagrams/lib/geometry.js.map +1 -0
  515. package/dist/diagrams/lib/legend.d.ts +32 -0
  516. package/dist/diagrams/lib/legend.js +84 -0
  517. package/dist/diagrams/lib/legend.js.map +1 -0
  518. package/dist/diagrams/lib/marks.d.ts +207 -0
  519. package/dist/diagrams/lib/marks.js +480 -0
  520. package/dist/diagrams/lib/marks.js.map +1 -0
  521. package/dist/diagrams/lib/route.d.ts +106 -0
  522. package/dist/diagrams/lib/route.js +201 -0
  523. package/dist/diagrams/lib/route.js.map +1 -0
  524. package/dist/diagrams/lib/wires.d.ts +59 -0
  525. package/dist/diagrams/lib/wires.js +94 -0
  526. package/dist/diagrams/lib/wires.js.map +1 -0
  527. package/dist/diagrams/spec.d.ts +405 -0
  528. package/dist/diagrams/spec.js +1 -0
  529. package/dist/diagrams/spec.js.map +1 -0
  530. package/dist/fonts/hanken-grotesk-300.woff2 +0 -0
  531. package/dist/fonts/hanken-grotesk-400.woff2 +0 -0
  532. package/dist/fonts/hanken-grotesk-500.woff2 +0 -0
  533. package/dist/fonts/hanken-grotesk-600.woff2 +0 -0
  534. package/dist/fonts/hanken-grotesk-700.woff2 +0 -0
  535. package/dist/fonts/ibm-plex-mono-400.woff2 +0 -0
  536. package/dist/fonts/ibm-plex-mono-500.woff2 +0 -0
  537. package/dist/fonts/ibm-plex-mono-600.woff2 +0 -0
  538. package/dist/fonts/newsreader-300.woff2 +0 -0
  539. package/dist/fonts/newsreader-400.woff2 +0 -0
  540. package/dist/fonts/newsreader-500.woff2 +0 -0
  541. package/dist/fonts/newsreader-600.woff2 +0 -0
  542. package/dist/fonts.css +96 -0
  543. package/dist/index.d.ts +97 -0
  544. package/dist/index.js +80 -0
  545. package/dist/index.js.map +1 -0
  546. package/dist/keyframes.css +300 -0
  547. package/dist/lib/cn.d.ts +21 -0
  548. package/dist/lib/cn.js +9 -0
  549. package/dist/lib/cn.js.map +1 -0
  550. package/dist/lib/color.d.ts +80 -0
  551. package/dist/lib/color.js +189 -0
  552. package/dist/lib/color.js.map +1 -0
  553. package/dist/lib/control.d.ts +32 -0
  554. package/dist/lib/control.js +14 -0
  555. package/dist/lib/control.js.map +1 -0
  556. package/dist/lib/index.d.ts +4 -0
  557. package/dist/lib/index.js +11 -0
  558. package/dist/lib/index.js.map +1 -0
  559. package/dist/lib/numeric.d.ts +35 -0
  560. package/dist/lib/numeric.js +29 -0
  561. package/dist/lib/numeric.js.map +1 -0
  562. package/dist/lib/overlay-container.d.ts +48 -0
  563. package/dist/lib/overlay-container.js +15 -0
  564. package/dist/lib/overlay-container.js.map +1 -0
  565. package/dist/lib/slot-content.d.ts +8 -0
  566. package/dist/lib/slot-content.js +17 -0
  567. package/dist/lib/slot-content.js.map +1 -0
  568. package/dist/lib/step-rail.d.ts +45 -0
  569. package/dist/lib/step-rail.js +47 -0
  570. package/dist/lib/step-rail.js.map +1 -0
  571. package/dist/lib/svg-export.d.ts +138 -0
  572. package/dist/lib/svg-export.js +198 -0
  573. package/dist/lib/svg-export.js.map +1 -0
  574. package/dist/lib/useClipboardCopy.d.ts +30 -0
  575. package/dist/lib/useClipboardCopy.js +37 -0
  576. package/dist/lib/useClipboardCopy.js.map +1 -0
  577. package/dist/lib/useSelectionIndicator.d.ts +29 -0
  578. package/dist/lib/useSelectionIndicator.js +49 -0
  579. package/dist/lib/useSelectionIndicator.js.map +1 -0
  580. package/dist/lib/warn.d.ts +73 -0
  581. package/dist/lib/warn.js +38 -0
  582. package/dist/lib/warn.js.map +1 -0
  583. package/dist/semantic.css +193 -0
  584. package/dist/styles.css +98 -0
  585. package/dist/themes.css +514 -0
  586. package/dist/tokens/brand.d.ts +47 -0
  587. package/dist/tokens/brand.js +38 -0
  588. package/dist/tokens/brand.js.map +1 -0
  589. package/dist/tokens.css +652 -0
  590. package/dist/tokens.d.ts +198 -0
  591. package/dist/tokens.js +1020 -0
  592. package/dist/tokens.json +1019 -0
  593. package/dist/website/Actions/Actions.d.ts +34 -0
  594. package/dist/website/Actions/Actions.js +29 -0
  595. package/dist/website/Actions/Actions.js.map +1 -0
  596. package/dist/website/Collection/Collection.d.ts +128 -0
  597. package/dist/website/Collection/Collection.js +162 -0
  598. package/dist/website/Collection/Collection.js.map +1 -0
  599. package/dist/website/Contact/Contact.d.ts +87 -0
  600. package/dist/website/Contact/Contact.js +94 -0
  601. package/dist/website/Contact/Contact.js.map +1 -0
  602. package/dist/website/Content/CodePanel.d.ts +27 -0
  603. package/dist/website/Content/CodePanel.js +30 -0
  604. package/dist/website/Content/CodePanel.js.map +1 -0
  605. package/dist/website/Content/Content.d.ts +29 -0
  606. package/dist/website/Content/Content.js +38 -0
  607. package/dist/website/Content/Content.js.map +1 -0
  608. package/dist/website/Conversation/Conversation.d.ts +193 -0
  609. package/dist/website/Conversation/Conversation.js +252 -0
  610. package/dist/website/Conversation/Conversation.js.map +1 -0
  611. package/dist/website/Evidence/Evidence.d.ts +116 -0
  612. package/dist/website/Evidence/Evidence.js +142 -0
  613. package/dist/website/Evidence/Evidence.js.map +1 -0
  614. package/dist/website/Media/Media.d.ts +173 -0
  615. package/dist/website/Media/Media.js +225 -0
  616. package/dist/website/Media/Media.js.map +1 -0
  617. package/dist/website/Media/MediaLightbox.d.ts +18 -0
  618. package/dist/website/Media/MediaLightbox.js +38 -0
  619. package/dist/website/Media/MediaLightbox.js.map +1 -0
  620. package/dist/website/Metrics/Metrics.d.ts +74 -0
  621. package/dist/website/Metrics/Metrics.js +96 -0
  622. package/dist/website/Metrics/Metrics.js.map +1 -0
  623. package/dist/website/Music/Music.d.ts +60 -0
  624. package/dist/website/Music/Music.js +80 -0
  625. package/dist/website/Music/Music.js.map +1 -0
  626. package/dist/website/Portfolio/FrameLayout.d.ts +9 -0
  627. package/dist/website/Portfolio/FrameLayout.js +42 -0
  628. package/dist/website/Portfolio/FrameLayout.js.map +1 -0
  629. package/dist/website/Portfolio/Portfolio.d.ts +49 -0
  630. package/dist/website/Portfolio/Portfolio.js +66 -0
  631. package/dist/website/Portfolio/Portfolio.js.map +1 -0
  632. package/dist/website/Portfolio/QuestionCard.d.ts +22 -0
  633. package/dist/website/Portfolio/QuestionCard.js +33 -0
  634. package/dist/website/Portfolio/QuestionCard.js.map +1 -0
  635. package/dist/website/PortfolioIndex/PortfolioIndex.d.ts +21 -0
  636. package/dist/website/PortfolioIndex/PortfolioIndex.js +31 -0
  637. package/dist/website/PortfolioIndex/PortfolioIndex.js.map +1 -0
  638. package/dist/website/Reading/Reading.d.ts +203 -0
  639. package/dist/website/Reading/Reading.js +357 -0
  640. package/dist/website/Reading/Reading.js.map +1 -0
  641. package/dist/website/Recovery/Recovery.d.ts +39 -0
  642. package/dist/website/Recovery/Recovery.js +96 -0
  643. package/dist/website/Recovery/Recovery.js.map +1 -0
  644. package/dist/website/SearchPalette/SearchPalette.d.ts +59 -0
  645. package/dist/website/SearchPalette/SearchPalette.js +120 -0
  646. package/dist/website/SearchPalette/SearchPalette.js.map +1 -0
  647. package/dist/website/SiteNavigation/SiteNavigation.d.ts +46 -0
  648. package/dist/website/SiteNavigation/SiteNavigation.js +101 -0
  649. package/dist/website/SiteNavigation/SiteNavigation.js.map +1 -0
  650. package/dist/website/SiteShell/SiteShell.d.ts +45 -0
  651. package/dist/website/SiteShell/SiteShell.js +46 -0
  652. package/dist/website/SiteShell/SiteShell.js.map +1 -0
  653. package/dist/website/Timeline/Timeline.d.ts +80 -0
  654. package/dist/website/Timeline/Timeline.js +99 -0
  655. package/dist/website/Timeline/Timeline.js.map +1 -0
  656. package/dist/website/index.d.ts +27 -0
  657. package/dist/website/index.js +21 -0
  658. package/dist/website/index.js.map +1 -0
  659. package/dist/website-actions.css +6 -0
  660. package/dist/website-base.css +46 -0
  661. package/dist/website-collection.css +89 -0
  662. package/dist/website-contact.css +29 -0
  663. package/dist/website-content.css +17 -0
  664. package/dist/website-controls.css +91 -0
  665. package/dist/website-conversation.css +115 -0
  666. package/dist/website-evidence.css +56 -0
  667. package/dist/website-media.css +227 -0
  668. package/dist/website-metrics.css +15 -0
  669. package/dist/website-music.css +27 -0
  670. package/dist/website-portfolio.css +94 -0
  671. package/dist/website-reading.css +159 -0
  672. package/dist/website-recovery.css +28 -0
  673. package/dist/website-search.css +26 -0
  674. package/dist/website-shell.css +89 -0
  675. package/dist/website-timeline.css +43 -0
  676. package/dist/website.css +25 -0
  677. package/llms.txt +35 -0
  678. package/package.json +163 -5
  679. package/skills/folio-design/SKILL.md +228 -0
  680. package/skills/folio-design/evals/claims.json +95 -0
  681. package/skills/folio-design/evals/evals.json +84 -0
  682. package/skills/folio-design/rules/a11y.md +167 -0
  683. package/skills/folio-design/rules/composition.md +108 -0
  684. package/skills/folio-design/rules/forms.md +135 -0
  685. package/skills/folio-design/rules/naming.md +155 -0
  686. package/skills/folio-design/rules/tokens.md +133 -0
@@ -0,0 +1,108 @@
1
+ # Composition
2
+
3
+ ## `className` adjusts layout, never appearance
4
+
5
+ The caller's `className` is merged last through `cn()`, so it *can* override
6
+ anything. That is what makes the rule necessary rather than enforced.
7
+
8
+ ```tsx
9
+ // Incorrect — re-skins the component, and only in this one place
10
+ <Button className="bg-blue-600 text-white rounded-full px-8 text-lg">
11
+
12
+ // Correct — the appearance is a variant, the layout is the class
13
+ <Button variant="primary" size="lg" className="w-full">
14
+ ```
15
+
16
+ Legitimate `className`: `w-`, `flex-`, `grid-`, `col-span-`, `m*`, `self-`,
17
+ `order-`. Not legitimate: colour, border, radius, font size, shadow. If the
18
+ appearance you want is not reachable through props and the theme axes, that is a
19
+ gap in the system — say so rather than patching it at one call site.
20
+
21
+ ## Use `cn()` for conditional classes
22
+
23
+ ```tsx
24
+ import { cn } from '@misoto22/folio'
25
+
26
+ // Incorrect — emits both sides of the conflict; stylesheet order picks a winner
27
+ <div className={`p-6 ${dense ? 'p-2' : ''}`}>
28
+
29
+ // Correct — twMerge resolves by utility group, so p-2 replaces p-6
30
+ <div className={cn('p-6', dense && 'p-2')}>
31
+ ```
32
+
33
+ ## Card uses its full set
34
+
35
+ ```tsx
36
+ // Incorrect
37
+ <Card><div className="p-6"><h3 className="font-bold">Usage</h3><p>…</p></div></Card>
38
+
39
+ // Correct
40
+ <Card variant="outline">
41
+ <CardHeader><CardTitle>Usage</CardTitle></CardHeader>
42
+ <CardBody>…</CardBody>
43
+ <CardFooter><Button>Manage</Button></CardFooter>
44
+ </Card>
45
+ ```
46
+
47
+ `variant`: `outline` (default) · `plate` · `flat`. The part is `CardBody`, not
48
+ `CardContent` — see [naming.md](./naming.md).
49
+
50
+ ## Reach for a component before writing markup
51
+
52
+ | Instead of | Use |
53
+ | --- | --- |
54
+ | a styled div with an icon and a message | `Alert` |
55
+ | a centred "nothing here yet" block | `EmptyState` |
56
+ | an error page or panel | `ErrorState` |
57
+ | `<hr>` or `border-t` | `Separator` |
58
+ | a custom `animate-pulse` div | `Skeleton` (+ `SkeletonLine` / `SkeletonText` / `SkeletonPage`) |
59
+ | a styled span for a count or state | `Badge`, or `StatusPill` for a live state |
60
+ | a styled span for a keyboard key | `Kbd` |
61
+ | a hand-built breadcrumb trail | `Breadcrumb` |
62
+ | a hand-built page/sidebar frame | `AppShell` |
63
+ | a hand-built numbered process | `Steps` |
64
+ | long-form prose you did not style yourself | `Article` |
65
+
66
+ ## Navigation goes through `asChild`
67
+
68
+ No component in this package imports a router. A control that navigates takes
69
+ its own element from the call site.
70
+
71
+ ```tsx
72
+ // Incorrect in a Next.js app — a full page load
73
+ <Button href="/settings">Settings</Button>
74
+
75
+ // Correct
76
+ <Button asChild><Link href="/settings">Settings</Link></Button>
77
+ ```
78
+
79
+ `href` on `Button` renders a plain `<a>`. That is right for an external link and
80
+ wrong for in-app navigation.
81
+
82
+ ## Overlays own their own stacking
83
+
84
+ `Dialog`, `Sheet`, `Popover`, `DropdownMenu`, `ContextMenu` and `Tooltip` portal
85
+ themselves and read `--z-overlay` / `--z-dropdown`.
86
+
87
+ ```tsx
88
+ // Incorrect
89
+ <DialogContent title="Edit" className="z-50">
90
+
91
+ // Correct
92
+ <DialogContent title="Edit">
93
+ ```
94
+
95
+ `TooltipProvider` goes once at the app root; `Toaster` too.
96
+
97
+ ## Logical properties, always
98
+
99
+ `ps-` / `pe-` / `ms-` / `me-` / `start-` / `end-` / `text-start` / `border-s`.
100
+ A physical property breaks RTL, and the package is RTL-correct everywhere else.
101
+
102
+ ## Server and client
103
+
104
+ The package is compiled per-file, so `'use client'` sits on the components that
105
+ need it. `Button`, `Card`, `Badge`, `Table`, `Alert`, `Separator` and the other
106
+ static primitives stay server-renderable; anything wrapping Radix carries the
107
+ directive itself. Do not add `'use client'` to a page just because it imports
108
+ from here.
@@ -0,0 +1,135 @@
1
+ # Forms
2
+
3
+ `Field` is the form row. It does the ARIA wiring that a hand-rolled label +
4
+ input + error div silently skips, and skipping it is invisible in a browser and
5
+ total for a screen reader.
6
+
7
+ ## A labelled control is a `Field`
8
+
9
+ ```tsx
10
+ // Incorrect — the hint is drawn and never announced, and required is decorative
11
+ <div className="space-y-2">
12
+ <label htmlFor="email">Email *</label>
13
+ <Input id="email" />
14
+ <p className="text-xs text-red-500">Enter a valid email.</p>
15
+ </div>
16
+
17
+ // Correct
18
+ <Field label="Email" required error="Enter a valid email.">
19
+ <Input type="email" />
20
+ </Field>
21
+ ```
22
+
23
+ `Field` generates the id, points the label at it, and sets `aria-describedby`,
24
+ `aria-required` and `aria-invalid` on the control.
25
+
26
+ ## Do not repeat what `Field` already sets
27
+
28
+ Passing `error` sets `aria-invalid` on the control for you. Writing `invalid`
29
+ as well is redundant, and writing a red border class is wrong.
30
+
31
+ ```tsx
32
+ // Redundant
33
+ <Field label="Email" error={message}><Input invalid /></Field>
34
+
35
+ // Wrong
36
+ <Field label="Email" error={message}><Input className="border-red-500" /></Field>
37
+
38
+ // Correct
39
+ <Field label="Email" error={message}><Input /></Field>
40
+ ```
41
+
42
+ Reach for `invalid` on the control only when there is no `Field` around it.
43
+
44
+ ## `hint` and `error` are one slot
45
+
46
+ They are not two stacked messages. `error` replaces `hint` when present: when a
47
+ field is wrong, the thing to read is what is wrong with it.
48
+
49
+ ```tsx
50
+ // Correct — one of the two shows, decided by whether there is an error
51
+ <Field label="Password" hint="At least 12 characters." error={errors.password}>
52
+ <Input type="password" />
53
+ </Field>
54
+ ```
55
+
56
+ ## One control per `Field`
57
+
58
+ `Field` warns in development when it cannot wire a control, so you do not have
59
+ to spot this by reading. `FIELD_CONTROL_NOT_LABELLABLE` means the child is a
60
+ wrapper and the label went onto the box; `FIELD_CONTROL_NOT_WIRED` means there
61
+ was no single element to wire at all. Both print the fix.
62
+
63
+ The wiring clones a **single** element child. Two children, or a wrapper div,
64
+ and nothing is wired — the label points at an id that is on nothing.
65
+
66
+ ```tsx
67
+ // Incorrect — the div is the child, so the input gets no id, no describedby
68
+ <Field label="Amount">
69
+ <div className="flex gap-2"><Input /><Button>Max</Button></div>
70
+ </Field>
71
+
72
+ // Correct — one Field per control; the row is laid out outside it
73
+ <div className="flex items-end gap-2">
74
+ <Field label="Amount" className="flex-1"><Input /></Field>
75
+ <Button>Max</Button>
76
+ </div>
77
+ ```
78
+
79
+ ## The controls
80
+
81
+ | Need | Component | Note |
82
+ | --- | --- | --- |
83
+ | Text, email, number | `Input` | |
84
+ | Multi-line | `Textarea` | |
85
+ | A short list, styled | `Select` | `label` is **required** |
86
+ | A short list, native | `NativeSelect` | Use on mobile-first forms |
87
+ | A long, searchable list | `Combobox` | `options` array, `label` **required** |
88
+ | Boolean, in a form | `Checkbox` | |
89
+ | Boolean, applied immediately | `Switch` | |
90
+ | One of 2–7 visible options | `RadioGroup` + `RadioGroupItem` | |
91
+ | One of 2–7, as a toolbar | `ToggleGroup` + `ToggleGroupItem` | |
92
+ | A number in a range | `Slider` | `editable` adds a box to type the exact figure into |
93
+ | A number that is tuned | `NumberField` | Drag the grip to sweep; `min`/`max`/`step` are honoured on the way out |
94
+ | A colour | `ColorPicker` | OKLCH panel; `label` is **required** |
95
+ | A date | `DatePicker` / `DateRangePicker` | |
96
+
97
+ `Select` and `Combobox` take `label` even inside a `Field` — it is the
98
+ accessible name of the trigger, which is a button, not a labellable control.
99
+
100
+ ## Custom controls read the shared base
101
+
102
+ Do not re-derive the text-control look. Three exports carry it, and they respond
103
+ to `data-density` and `data-mode` for free.
104
+
105
+ ```tsx
106
+ import { CONTROL_BASE, CONTROL_BORDER, cn, isInvalid } from '@misoto22/folio'
107
+
108
+ function MoneyInput({ invalid, 'aria-invalid': ariaInvalid, className, ...rest }) {
109
+ const bad = isInvalid(invalid, ariaInvalid)
110
+ return (
111
+ <input
112
+ aria-invalid={bad || undefined}
113
+ className={cn(CONTROL_BASE, bad ? CONTROL_BORDER.invalid : CONTROL_BORDER.resting, className)}
114
+ {...rest}
115
+ />
116
+ )
117
+ }
118
+ ```
119
+
120
+ `isInvalid()` reads both spellings — `invalid` is the ergonomic prop, and
121
+ `aria-invalid` is what a form library sets. A control that honours only one of
122
+ them loses the error styling for half the ecosystem.
123
+
124
+ ## Layout
125
+
126
+ `Field` already stacks its own parts. For the gap between fields, use flex with
127
+ `gap`, not margin utilities on the children.
128
+
129
+ ```tsx
130
+ // Correct
131
+ <form className="flex flex-col gap-4">
132
+ <Field label="Name"><Input /></Field>
133
+ <Field label="Email"><Input type="email" /></Field>
134
+ </form>
135
+ ```
@@ -0,0 +1,155 @@
1
+ # Naming — where habit produces an import that does not exist
2
+
3
+ Most models have read far more shadcn/ui and Radix than they have read this
4
+ package. Those habits produce identifiers that are not exported here, and the
5
+ failure is a TypeScript error at the import line rather than something subtle.
6
+
7
+ This is the whole divergence list. Everything not on it is spelled the way you
8
+ would guess.
9
+
10
+ ## Compound parts renamed
11
+
12
+ | Habit | Here |
13
+ | --- | --- |
14
+ | `CardContent` | `CardBody` |
15
+ | `TableHeader` | `THead` |
16
+ | `TableBody` | `TBody` |
17
+ | `TableRow` | `TR` |
18
+ | `TableHead` | `TH` |
19
+ | `TableCell` | `TD` |
20
+
21
+ ```tsx
22
+ // Incorrect
23
+ <Card><CardContent>…</CardContent></Card>
24
+
25
+ // Correct
26
+ <Card><CardBody>…</CardBody></Card>
27
+ ```
28
+
29
+ ## Compounds that are one component with props
30
+
31
+ These have no sub-parts at all. Reaching for `<XTrigger>` / `<XContent>` fails.
32
+
33
+ ### Dialog and Sheet — the title is a prop
34
+
35
+ ```tsx
36
+ // Incorrect — DialogTitle and DialogHeader are not exported
37
+ <DialogContent>
38
+ <DialogHeader><DialogTitle>Delete project</DialogTitle></DialogHeader>
39
+ …
40
+ </DialogContent>
41
+
42
+ // Correct
43
+ <DialogContent title="Delete project" description="This cannot be undone.">
44
+ …
45
+ </DialogContent>
46
+ ```
47
+
48
+ `Sheet` is the same shape, and `SheetTitle` does not exist either:
49
+
50
+ ```tsx
51
+ // Incorrect
52
+ <SheetContent><SheetTitle>Filters</SheetTitle>…</SheetContent>
53
+
54
+ // Correct
55
+ <SheetContent side="end" title="Filters">…</SheetContent>
56
+ ```
57
+
58
+ `SheetContent.title` is required by the type. `DialogContent.title` is optional
59
+ — Radix demands a title either way, so omitting it renders a visually-hidden
60
+ placeholder rather than warning. Pass it anyway: the placeholder keeps the modal
61
+ legal, not useful. When the design calls for no visible heading, pass the title
62
+ and add `hideTitle`, so the accessible name is a real one.
63
+
64
+ ### Tooltip — the content is a prop, and it wraps its trigger
65
+
66
+ ```tsx
67
+ // Incorrect
68
+ <Tooltip>
69
+ <TooltipTrigger asChild><Button /></TooltipTrigger>
70
+ <TooltipContent>Copy</TooltipContent>
71
+ </Tooltip>
72
+
73
+ // Correct — put TooltipProvider once at the app root
74
+ <Tooltip content="Copy"><Button iconOnly aria-label="Copy"><CopyIcon /></Button></Tooltip>
75
+ ```
76
+
77
+ ### Alert and EmptyState — tone and title are props
78
+
79
+ ```tsx
80
+ // Incorrect
81
+ <Alert><AlertTitle>Saved</AlertTitle><AlertDescription>…</AlertDescription></Alert>
82
+
83
+ // Correct
84
+ <Alert tone="success" title="Saved">Your changes are live.</Alert>
85
+ ```
86
+
87
+ `EmptyState` is the same shape: `icon` (a Remix Icon component, not an element),
88
+ `title`, `description`, `action`.
89
+
90
+ ### Accordion — the item carries its own title
91
+
92
+ ```tsx
93
+ // Incorrect
94
+ <AccordionItem value="a">
95
+ <AccordionTrigger>Billing</AccordionTrigger>
96
+ <AccordionContent>…</AccordionContent>
97
+ </AccordionItem>
98
+
99
+ // Correct
100
+ <AccordionItem value="a" title="Billing">…</AccordionItem>
101
+ ```
102
+
103
+ ### Select — one component, `SelectItem` children
104
+
105
+ ```tsx
106
+ // Incorrect
107
+ <Select>
108
+ <SelectTrigger><SelectValue placeholder="Choose" /></SelectTrigger>
109
+ <SelectContent><SelectItem value="au">Australia</SelectItem></SelectContent>
110
+ </Select>
111
+
112
+ // Correct — label is required
113
+ <Select label="Region" placeholder="Choose">
114
+ <SelectItem value="au">Australia</SelectItem>
115
+ </Select>
116
+ ```
117
+
118
+ `SelectRoot` is the raw Radix root, exported for the rare case that needs it.
119
+ Reach for `Select` unless you know why you are not.
120
+
121
+ ### Combobox — an options array, not children
122
+
123
+ ```tsx
124
+ // Correct
125
+ <Combobox
126
+ label="Assignee"
127
+ options={[{ value: 'ada', label: 'Ada Lovelace' }]}
128
+ value={value}
129
+ onValueChange={setValue}
130
+ />
131
+ ```
132
+
133
+ ## Compounds that ARE compounds
134
+
135
+ Spelled as expected, no surprises: `Popover`, `DropdownMenu`, `ContextMenu`,
136
+ `Command`, `Tabs`, `Collapsible`, `RadioGroup`, `ToggleGroup`, `Skeleton`.
137
+
138
+ ## Imports that come from here, not from upstream
139
+
140
+ | Habit | Here |
141
+ | --- | --- |
142
+ | `import { toast } from 'sonner'` | `import { toast } from '@misoto22/folio'` |
143
+ | `import { cn } from '@/lib/utils'` | `import { cn } from '@misoto22/folio'` |
144
+
145
+ `<Toaster />` goes once at the app root, and it is exported from here too.
146
+
147
+ ## When in doubt
148
+
149
+ ```bash
150
+ npx @misoto22/folio docs <Component>
151
+ ```
152
+
153
+ That prints the component's real exports, every prop with its type and default,
154
+ and its keyboard contract, read out of the installed source. It is cheaper than
155
+ a wrong import and a retry.
@@ -0,0 +1,133 @@
1
+ # Colour, theming and spacing
2
+
3
+ The system is monochrome by construction: paper ground, near-black mark, and
4
+ status is the only chroma. A raw colour class is not a style choice here, it is
5
+ a hole in the theme — it survives the light/dark swap unchanged and it ignores
6
+ every surface axis.
7
+
8
+ ## Never write a raw colour
9
+
10
+ ```tsx
11
+ // Incorrect
12
+ <div className="bg-white text-gray-500 border-neutral-200">
13
+ <div className="bg-neutral-900 dark:bg-white">
14
+ <div style={{ color: '#101010' }}>
15
+
16
+ // Correct
17
+ <div className="bg-(--background) text-(--foreground-muted) border-(--border-color)">
18
+ ```
19
+
20
+ The semantic layer is the one to read. It is shipped as its own entry point
21
+ (`@misoto22/folio/semantic.css`) and it is what the components themselves use.
22
+
23
+ | Role | Token |
24
+ | --- | --- |
25
+ | Page ground | `--background` |
26
+ | One step off the ground | `--background-elevated` |
27
+ | Card ground | `--card-background` |
28
+ | Body text | `--foreground` |
29
+ | Quieter text | `--foreground-muted` |
30
+ | Quietest text that still clears AA | `--secondary-text` |
31
+ | Edge | `--border-color` |
32
+ | Hairline | `--border-subtle` |
33
+ | A chosen state — primary button, checked box, active tab | `--accent` |
34
+ | Text on an accent fill | `--accent-foreground` |
35
+ | Text on an accent wash | `--accent-on-muted` |
36
+ | Status | `--success` `--warning` `--danger` `--info`, each with a `-wash` |
37
+ | Text over a photograph | `--on-dark` |
38
+
39
+ Prefer these over the primitive layer (`--paper`, `--ink`, `--rule`, `--stone`).
40
+ Primitives are values; semantics are roles, and a role can be re-pointed without
41
+ a component changing. `--card-background` is already an alias for a surface that
42
+ was retired — that is the layer doing its job.
43
+
44
+ ## Never write a `dark:` variant
45
+
46
+ ```tsx
47
+ // Incorrect — freezes one side of the swap
48
+ <div className="bg-white dark:bg-neutral-900">
49
+
50
+ // Correct — the token already resolves in both
51
+ <div className="bg-(--background)">
52
+ ```
53
+
54
+ Dark mode is a value swap on the primitives behind `[data-mode="dark"]`. Any
55
+ semantic token re-resolves on its own. A `dark:` class is a second, competing
56
+ theme that will disagree with the first the moment a surface axis is set.
57
+
58
+ ## Theme with the seven axes
59
+
60
+ Each is an attribute, each is independent, and each works on **any element** —
61
+ not just `:root`. An unset axis is the default.
62
+
63
+ | Attribute | Values | Unset means |
64
+ | --- | --- | --- |
65
+ | `data-mode` | `light` `dark` | follows the app |
66
+ | `data-accent` | `clay` `cobalt` `forest` `moss` `plum` | ink |
67
+ | `data-surface` | `warm` `cool` `glass` | paper |
68
+ | `data-radius` | `sharp` `round` | the default ladder |
69
+ | `data-rules` | `quiet` `firm` | hairline |
70
+ | `data-type` | `grotesk` `bookish` | editorial |
71
+ | `data-motion` | `still` `snappy` | calm |
72
+ | `data-density` | `compact` | comfortable |
73
+
74
+ ```tsx
75
+ // A warm, square, dense panel inside an otherwise default page.
76
+ <section data-surface="warm" data-radius="sharp" data-density="compact">…</section>
77
+ ```
78
+
79
+ The accent is **one token**, `--clay`, which every component reads through
80
+ `--accent`. The attribute is the five shipped hues plus `ink`; a brand that is
81
+ none of them re-points the token itself, and the whole system follows.
82
+
83
+ ```css
84
+ /* An accent the package has never seen. Both values: the mark, and the same
85
+ colour set as text, which has to clear AA on paper. */
86
+ [data-accent='brand'] { --clay: #1f6f5c; --clay-ink: #1a5c4c; }
87
+ ```
88
+
89
+ ## Radius, duration and control size come from tokens
90
+
91
+ ```tsx
92
+ // Incorrect
93
+ <div className="rounded-lg duration-150 min-h-11">
94
+
95
+ // Correct
96
+ <div className="rounded-(--radius) duration-(--duration-fast) min-h-(--control-h-md)">
97
+ ```
98
+
99
+ `--control-h-md` is 44px comfortable / 36px compact. Hard-coding `min-h-11`
100
+ means the control never responds to `data-density`, and `min-height` is a floor,
101
+ so it also never shrinks.
102
+
103
+ Durations: `--duration-fast` `--duration-base` `--duration-slow`. Easing:
104
+ `--ease-out-expo`.
105
+
106
+ ## No blurred shadow
107
+
108
+ `--shadow`, `--shadow-sm` and `--shadow-lg` all resolve to `none` on purpose.
109
+ The system has no elevation ramp. Depth is a hairline, a change of ground, or
110
+ `--lift` — a hard ink offset with no blur.
111
+
112
+ ```tsx
113
+ // Incorrect
114
+ <div className="shadow-lg">
115
+
116
+ // Correct
117
+ <div className="shadow-(--lift)">
118
+ ```
119
+
120
+ ## Logical properties, always
121
+
122
+ The package is RTL-correct and a physical property breaks it.
123
+
124
+ ```tsx
125
+ // Incorrect
126
+ <div className="pl-4 ml-2 text-left border-l">
127
+
128
+ // Correct
129
+ <div className="ps-4 ms-2 text-start border-s">
130
+ ```
131
+
132
+ Tailwind has no logical `translate`, so anything sliding along the inline axis
133
+ needs an explicit `rtl:` counterpart.