@sepale/components 0.0.0-stage → 0.1.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 (261) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +65 -3
  3. package/dist/components/Accordion.svelte +48 -0
  4. package/dist/components/Accordion.svelte.d.ts +24 -0
  5. package/dist/components/Alert.svelte +107 -0
  6. package/dist/components/Alert.svelte.d.ts +40 -0
  7. package/dist/components/Avatar.svelte +75 -0
  8. package/dist/components/Avatar.svelte.d.ts +37 -0
  9. package/dist/components/Badge.svelte +46 -0
  10. package/dist/components/Badge.svelte.d.ts +22 -0
  11. package/dist/components/Breadcrumbs.svelte +36 -0
  12. package/dist/components/Breadcrumbs.svelte.d.ts +18 -0
  13. package/dist/components/Bubble.svelte +43 -0
  14. package/dist/components/Bubble.svelte.d.ts +23 -0
  15. package/dist/components/Button.svelte +132 -0
  16. package/dist/components/Button.svelte.d.ts +40 -0
  17. package/dist/components/Calendar.svelte +193 -0
  18. package/dist/components/Calendar.svelte.d.ts +60 -0
  19. package/dist/components/Card.svelte +69 -0
  20. package/dist/components/Card.svelte.d.ts +37 -0
  21. package/dist/components/Carousel.svelte +550 -0
  22. package/dist/components/Carousel.svelte.d.ts +124 -0
  23. package/dist/components/Checkbox.svelte +48 -0
  24. package/dist/components/Checkbox.svelte.d.ts +26 -0
  25. package/dist/components/Chip.svelte +60 -0
  26. package/dist/components/Chip.svelte.d.ts +26 -0
  27. package/dist/components/ChipsInput.svelte +158 -0
  28. package/dist/components/ChipsInput.svelte.d.ts +64 -0
  29. package/dist/components/Collapse.svelte +101 -0
  30. package/dist/components/Collapse.svelte.d.ts +46 -0
  31. package/dist/components/ColorPicker.svelte +135 -0
  32. package/dist/components/ColorPicker.svelte.d.ts +44 -0
  33. package/dist/components/Combobox.svelte +496 -0
  34. package/dist/components/Combobox.svelte.d.ts +96 -0
  35. package/dist/components/DataControl.svelte +754 -0
  36. package/dist/components/DataControl.svelte.d.ts +143 -0
  37. package/dist/components/DataHandler.svelte +67 -0
  38. package/dist/components/DataHandler.svelte.d.ts +44 -0
  39. package/dist/components/DatePicker.svelte +185 -0
  40. package/dist/components/DatePicker.svelte.d.ts +56 -0
  41. package/dist/components/Dialog.svelte +194 -0
  42. package/dist/components/Dialog.svelte.d.ts +51 -0
  43. package/dist/components/Divider.svelte +54 -0
  44. package/dist/components/Divider.svelte.d.ts +27 -0
  45. package/dist/components/Dock.svelte +34 -0
  46. package/dist/components/Dock.svelte.d.ts +18 -0
  47. package/dist/components/Drawer.svelte +174 -0
  48. package/dist/components/Drawer.svelte.d.ts +51 -0
  49. package/dist/components/Dropdown.svelte +183 -0
  50. package/dist/components/Dropdown.svelte.d.ts +52 -0
  51. package/dist/components/Editable.svelte +292 -0
  52. package/dist/components/Editable.svelte.d.ts +113 -0
  53. package/dist/components/EmptyState.svelte +64 -0
  54. package/dist/components/EmptyState.svelte.d.ts +29 -0
  55. package/dist/components/Fieldset.svelte +42 -0
  56. package/dist/components/Fieldset.svelte.d.ts +20 -0
  57. package/dist/components/FileDropzone.svelte +154 -0
  58. package/dist/components/FileDropzone.svelte.d.ts +45 -0
  59. package/dist/components/FileExplorer.svelte +643 -0
  60. package/dist/components/FileExplorer.svelte.d.ts +114 -0
  61. package/dist/components/FileInput.svelte +125 -0
  62. package/dist/components/FileInput.svelte.d.ts +51 -0
  63. package/dist/components/FloatingLabel.svelte +38 -0
  64. package/dist/components/FloatingLabel.svelte.d.ts +24 -0
  65. package/dist/components/Footer.svelte +68 -0
  66. package/dist/components/Footer.svelte.d.ts +37 -0
  67. package/dist/components/Grid.svelte +122 -0
  68. package/dist/components/Grid.svelte.d.ts +72 -0
  69. package/dist/components/Hero.svelte +62 -0
  70. package/dist/components/Hero.svelte.d.ts +33 -0
  71. package/dist/components/Input.svelte +184 -0
  72. package/dist/components/Input.svelte.d.ts +65 -0
  73. package/dist/components/Join.svelte +38 -0
  74. package/dist/components/Join.svelte.d.ts +21 -0
  75. package/dist/components/Kanban.svelte +284 -0
  76. package/dist/components/Kanban.svelte.d.ts +93 -0
  77. package/dist/components/Label.svelte +32 -0
  78. package/dist/components/Label.svelte.d.ts +21 -0
  79. package/dist/components/LaptopFrame.svelte +44 -0
  80. package/dist/components/LaptopFrame.svelte.d.ts +21 -0
  81. package/dist/components/List.svelte +95 -0
  82. package/dist/components/List.svelte.d.ts +69 -0
  83. package/dist/components/Loading.svelte +37 -0
  84. package/dist/components/Loading.svelte.d.ts +17 -0
  85. package/dist/components/Menu.svelte +144 -0
  86. package/dist/components/Menu.svelte.d.ts +53 -0
  87. package/dist/components/MobileFrame.svelte +41 -0
  88. package/dist/components/MobileFrame.svelte.d.ts +21 -0
  89. package/dist/components/Navbar.svelte +49 -0
  90. package/dist/components/Navbar.svelte.d.ts +25 -0
  91. package/dist/components/NumberInput.svelte +255 -0
  92. package/dist/components/NumberInput.svelte.d.ts +68 -0
  93. package/dist/components/Pagination.svelte +169 -0
  94. package/dist/components/Pagination.svelte.d.ts +50 -0
  95. package/dist/components/Progress.svelte +65 -0
  96. package/dist/components/Progress.svelte.d.ts +28 -0
  97. package/dist/components/RadialProgress.svelte +48 -0
  98. package/dist/components/RadialProgress.svelte.d.ts +20 -0
  99. package/dist/components/Radio.svelte +50 -0
  100. package/dist/components/Radio.svelte.d.ts +28 -0
  101. package/dist/components/Range.svelte +53 -0
  102. package/dist/components/Range.svelte.d.ts +26 -0
  103. package/dist/components/Rating.svelte +90 -0
  104. package/dist/components/Rating.svelte.d.ts +41 -0
  105. package/dist/components/Select.svelte +338 -0
  106. package/dist/components/Select.svelte.d.ts +74 -0
  107. package/dist/components/Sidebar.svelte +100 -0
  108. package/dist/components/Sidebar.svelte.d.ts +54 -0
  109. package/dist/components/Skeleton.svelte +40 -0
  110. package/dist/components/Skeleton.svelte.d.ts +18 -0
  111. package/dist/components/Stat.svelte +71 -0
  112. package/dist/components/Stat.svelte.d.ts +35 -0
  113. package/dist/components/Stats.svelte +38 -0
  114. package/dist/components/Stats.svelte.d.ts +22 -0
  115. package/dist/components/Steps.svelte +204 -0
  116. package/dist/components/Steps.svelte.d.ts +66 -0
  117. package/dist/components/Subtitle.svelte +44 -0
  118. package/dist/components/Subtitle.svelte.d.ts +26 -0
  119. package/dist/components/Swatch.svelte +61 -0
  120. package/dist/components/Swatch.svelte.d.ts +27 -0
  121. package/dist/components/Switch.svelte +105 -0
  122. package/dist/components/Switch.svelte.d.ts +44 -0
  123. package/dist/components/Table.svelte +243 -0
  124. package/dist/components/Table.svelte.d.ts +121 -0
  125. package/dist/components/Tabs.svelte +142 -0
  126. package/dist/components/Tabs.svelte.d.ts +80 -0
  127. package/dist/components/Text.svelte +43 -0
  128. package/dist/components/Text.svelte.d.ts +25 -0
  129. package/dist/components/Textarea.svelte +76 -0
  130. package/dist/components/Textarea.svelte.d.ts +39 -0
  131. package/dist/components/Title.svelte +46 -0
  132. package/dist/components/Title.svelte.d.ts +29 -0
  133. package/dist/components/Toast.svelte +154 -0
  134. package/dist/components/Toast.svelte.d.ts +49 -0
  135. package/dist/components/Toggle.svelte +48 -0
  136. package/dist/components/Toggle.svelte.d.ts +25 -0
  137. package/dist/components/Tooltip.svelte +70 -0
  138. package/dist/components/Tooltip.svelte.d.ts +34 -0
  139. package/dist/components/WindowFrame.svelte +53 -0
  140. package/dist/components/WindowFrame.svelte.d.ts +24 -0
  141. package/dist/components/accordion-context.d.ts +8 -0
  142. package/dist/components/accordion-context.js +25 -0
  143. package/dist/components/color.d.ts +39 -0
  144. package/dist/components/color.js +92 -0
  145. package/dist/components/data-handler.svelte.d.ts +362 -0
  146. package/dist/components/data-handler.svelte.js +690 -0
  147. package/dist/components/file-icons.d.ts +25 -0
  148. package/dist/components/file-icons.js +46 -0
  149. package/dist/family-types.d.ts +45 -0
  150. package/dist/family-types.js +73 -0
  151. package/dist/generated/classes.d.ts +17 -0
  152. package/dist/generated/classes.js +2511 -0
  153. package/dist/generated/components.d.ts +39 -0
  154. package/dist/generated/components.js +28666 -0
  155. package/dist/generated/registry.d.ts +35 -0
  156. package/dist/generated/registry.js +2658 -0
  157. package/dist/index.d.ts +73 -0
  158. package/dist/index.js +99 -0
  159. package/dist/sepale-types.d.ts +8 -0
  160. package/dist/sepale-types.js +200 -0
  161. package/dist/theme.d.ts +123 -0
  162. package/dist/theme.js +226 -0
  163. package/dist/variants.d.ts +124 -0
  164. package/dist/variants.js +70 -0
  165. package/dist/vendor/air-datepicker/LICENSE.md +21 -0
  166. package/dist/vendor/air-datepicker/README.md +19 -0
  167. package/dist/vendor/air-datepicker/buttonPresets.d.ts +13 -0
  168. package/dist/vendor/air-datepicker/buttonPresets.js +12 -0
  169. package/dist/vendor/air-datepicker/consts.d.ts +18 -0
  170. package/dist/vendor/air-datepicker/consts.js +35 -0
  171. package/dist/vendor/air-datepicker/datepicker.d.ts +289 -0
  172. package/dist/vendor/air-datepicker/datepicker.js +1435 -0
  173. package/dist/vendor/air-datepicker/datepickerBody.d.ts +46 -0
  174. package/dist/vendor/air-datepicker/datepickerBody.js +386 -0
  175. package/dist/vendor/air-datepicker/datepickerButtons.d.ts +25 -0
  176. package/dist/vendor/air-datepicker/datepickerButtons.js +85 -0
  177. package/dist/vendor/air-datepicker/datepickerCell.d.ts +35 -0
  178. package/dist/vendor/air-datepicker/datepickerCell.js +297 -0
  179. package/dist/vendor/air-datepicker/datepickerKeyboard.d.ts +26 -0
  180. package/dist/vendor/air-datepicker/datepickerKeyboard.js +207 -0
  181. package/dist/vendor/air-datepicker/datepickerNav.d.ts +31 -0
  182. package/dist/vendor/air-datepicker/datepickerNav.js +200 -0
  183. package/dist/vendor/air-datepicker/datepickerTime.d.ts +60 -0
  184. package/dist/vendor/air-datepicker/datepickerTime.js +276 -0
  185. package/dist/vendor/air-datepicker/defaults.d.ts +65 -0
  186. package/dist/vendor/air-datepicker/defaults.js +79 -0
  187. package/dist/vendor/air-datepicker/index.d.ts +168 -0
  188. package/dist/vendor/air-datepicker/index.js +3 -0
  189. package/dist/vendor/air-datepicker/locale/ar.d.ts +4 -0
  190. package/dist/vendor/air-datepicker/locale/ar.js +14 -0
  191. package/dist/vendor/air-datepicker/locale/bg.d.ts +4 -0
  192. package/dist/vendor/air-datepicker/locale/bg.js +14 -0
  193. package/dist/vendor/air-datepicker/locale/ca.d.ts +4 -0
  194. package/dist/vendor/air-datepicker/locale/ca.js +14 -0
  195. package/dist/vendor/air-datepicker/locale/cs.d.ts +4 -0
  196. package/dist/vendor/air-datepicker/locale/cs.js +14 -0
  197. package/dist/vendor/air-datepicker/locale/da.d.ts +4 -0
  198. package/dist/vendor/air-datepicker/locale/da.js +14 -0
  199. package/dist/vendor/air-datepicker/locale/de.d.ts +4 -0
  200. package/dist/vendor/air-datepicker/locale/de.js +14 -0
  201. package/dist/vendor/air-datepicker/locale/el.d.ts +4 -0
  202. package/dist/vendor/air-datepicker/locale/el.js +14 -0
  203. package/dist/vendor/air-datepicker/locale/en.d.ts +4 -0
  204. package/dist/vendor/air-datepicker/locale/en.js +14 -0
  205. package/dist/vendor/air-datepicker/locale/es.d.ts +4 -0
  206. package/dist/vendor/air-datepicker/locale/es.js +14 -0
  207. package/dist/vendor/air-datepicker/locale/eu.d.ts +4 -0
  208. package/dist/vendor/air-datepicker/locale/eu.js +14 -0
  209. package/dist/vendor/air-datepicker/locale/fi.d.ts +4 -0
  210. package/dist/vendor/air-datepicker/locale/fi.js +14 -0
  211. package/dist/vendor/air-datepicker/locale/fr.d.ts +4 -0
  212. package/dist/vendor/air-datepicker/locale/fr.js +14 -0
  213. package/dist/vendor/air-datepicker/locale/hr.d.ts +4 -0
  214. package/dist/vendor/air-datepicker/locale/hr.js +14 -0
  215. package/dist/vendor/air-datepicker/locale/hu.d.ts +4 -0
  216. package/dist/vendor/air-datepicker/locale/hu.js +14 -0
  217. package/dist/vendor/air-datepicker/locale/id.d.ts +4 -0
  218. package/dist/vendor/air-datepicker/locale/id.js +14 -0
  219. package/dist/vendor/air-datepicker/locale/it.d.ts +4 -0
  220. package/dist/vendor/air-datepicker/locale/it.js +14 -0
  221. package/dist/vendor/air-datepicker/locale/ja.d.ts +4 -0
  222. package/dist/vendor/air-datepicker/locale/ja.js +14 -0
  223. package/dist/vendor/air-datepicker/locale/ko.d.ts +4 -0
  224. package/dist/vendor/air-datepicker/locale/ko.js +14 -0
  225. package/dist/vendor/air-datepicker/locale/nb.d.ts +4 -0
  226. package/dist/vendor/air-datepicker/locale/nb.js +14 -0
  227. package/dist/vendor/air-datepicker/locale/nl.d.ts +4 -0
  228. package/dist/vendor/air-datepicker/locale/nl.js +14 -0
  229. package/dist/vendor/air-datepicker/locale/pl.d.ts +4 -0
  230. package/dist/vendor/air-datepicker/locale/pl.js +14 -0
  231. package/dist/vendor/air-datepicker/locale/pt-BR.d.ts +4 -0
  232. package/dist/vendor/air-datepicker/locale/pt-BR.js +14 -0
  233. package/dist/vendor/air-datepicker/locale/pt.d.ts +4 -0
  234. package/dist/vendor/air-datepicker/locale/pt.js +14 -0
  235. package/dist/vendor/air-datepicker/locale/ro.d.ts +4 -0
  236. package/dist/vendor/air-datepicker/locale/ro.js +14 -0
  237. package/dist/vendor/air-datepicker/locale/ru.d.ts +4 -0
  238. package/dist/vendor/air-datepicker/locale/ru.js +14 -0
  239. package/dist/vendor/air-datepicker/locale/si.d.ts +4 -0
  240. package/dist/vendor/air-datepicker/locale/si.js +14 -0
  241. package/dist/vendor/air-datepicker/locale/sk.d.ts +4 -0
  242. package/dist/vendor/air-datepicker/locale/sk.js +14 -0
  243. package/dist/vendor/air-datepicker/locale/sl.d.ts +4 -0
  244. package/dist/vendor/air-datepicker/locale/sl.js +14 -0
  245. package/dist/vendor/air-datepicker/locale/sv.d.ts +4 -0
  246. package/dist/vendor/air-datepicker/locale/sv.js +14 -0
  247. package/dist/vendor/air-datepicker/locale/th.d.ts +4 -0
  248. package/dist/vendor/air-datepicker/locale/th.js +14 -0
  249. package/dist/vendor/air-datepicker/locale/tr.d.ts +4 -0
  250. package/dist/vendor/air-datepicker/locale/tr.js +16 -0
  251. package/dist/vendor/air-datepicker/locale/uk.d.ts +4 -0
  252. package/dist/vendor/air-datepicker/locale/uk.js +14 -0
  253. package/dist/vendor/air-datepicker/locale/zh.d.ts +4 -0
  254. package/dist/vendor/air-datepicker/locale/zh.js +14 -0
  255. package/dist/vendor/air-datepicker/typedefs.d.ts +3 -0
  256. package/dist/vendor/air-datepicker/typedefs.js +15 -0
  257. package/dist/vendor/air-datepicker/utils.d.ts +155 -0
  258. package/dist/vendor/air-datepicker/utils.js +395 -0
  259. package/dist/vendor/air-datepicker/withEvents.d.ts +1 -0
  260. package/dist/vendor/air-datepicker/withEvents.js +39 -0
  261. package/package.json +44 -3
@@ -0,0 +1,73 @@
1
+ export { default as Button } from './components/Button.svelte';
2
+ export { default as Input } from './components/Input.svelte';
3
+ export { default as Textarea } from './components/Textarea.svelte';
4
+ export { default as Select } from './components/Select.svelte';
5
+ export { default as Combobox, type ComboboxSource } from './components/Combobox.svelte';
6
+ export { default as ChipsInput, type ChipsInputField } from './components/ChipsInput.svelte';
7
+ export { default as FileInput } from './components/FileInput.svelte';
8
+ export { default as FileDropzone } from './components/FileDropzone.svelte';
9
+ export { default as Calendar } from './components/Calendar.svelte';
10
+ export { default as DatePicker } from './components/DatePicker.svelte';
11
+ export { default as Checkbox } from './components/Checkbox.svelte';
12
+ export { default as Radio } from './components/Radio.svelte';
13
+ export { default as Toggle } from './components/Toggle.svelte';
14
+ export { default as Range } from './components/Range.svelte';
15
+ export { default as Fieldset } from './components/Fieldset.svelte';
16
+ export { default as Label } from './components/Label.svelte';
17
+ export { default as FloatingLabel } from './components/FloatingLabel.svelte';
18
+ export { default as Switch } from './components/Switch.svelte';
19
+ export { default as NumberInput } from './components/NumberInput.svelte';
20
+ export { default as Avatar } from './components/Avatar.svelte';
21
+ export { default as Bubble } from './components/Bubble.svelte';
22
+ export { default as Chip } from './components/Chip.svelte';
23
+ export { default as Badge } from './components/Badge.svelte';
24
+ export { default as Swatch } from './components/Swatch.svelte';
25
+ export { default as ColorPicker } from './components/ColorPicker.svelte';
26
+ export { default as Loading } from './components/Loading.svelte';
27
+ export { default as Progress } from './components/Progress.svelte';
28
+ export { default as RadialProgress } from './components/RadialProgress.svelte';
29
+ export { default as Skeleton } from './components/Skeleton.svelte';
30
+ export { default as List } from './components/List.svelte';
31
+ export { default as Card } from './components/Card.svelte';
32
+ export { default as Stat } from './components/Stat.svelte';
33
+ export { default as Stats } from './components/Stats.svelte';
34
+ export { default as Carousel } from './components/Carousel.svelte';
35
+ export { default as Text } from './components/Text.svelte';
36
+ export { default as Title } from './components/Title.svelte';
37
+ export { default as Subtitle } from './components/Subtitle.svelte';
38
+ export { default as Divider } from './components/Divider.svelte';
39
+ export { default as Alert } from './components/Alert.svelte';
40
+ export { default as Toast, type ToastOptions } from './components/Toast.svelte';
41
+ export { default as Tooltip } from './components/Tooltip.svelte';
42
+ export { default as Collapse } from './components/Collapse.svelte';
43
+ export { default as Accordion } from './components/Accordion.svelte';
44
+ export { default as Rating } from './components/Rating.svelte';
45
+ export { default as Editable, type EditableKind, type EditableTrigger, type EditableControl } from './components/Editable.svelte';
46
+ export { default as EmptyState } from './components/EmptyState.svelte';
47
+ export { default as Hero } from './components/Hero.svelte';
48
+ export { default as Footer, type FooterSection } from './components/Footer.svelte';
49
+ export { default as MobileFrame } from './components/MobileFrame.svelte';
50
+ export { default as WindowFrame } from './components/WindowFrame.svelte';
51
+ export { default as LaptopFrame } from './components/LaptopFrame.svelte';
52
+ export { default as Sidebar } from './components/Sidebar.svelte';
53
+ export { default as Drawer, type DrawerState } from './components/Drawer.svelte';
54
+ export { default as Menu, type MenuNode } from './components/Menu.svelte';
55
+ export { default as Navbar } from './components/Navbar.svelte';
56
+ export { default as Breadcrumbs } from './components/Breadcrumbs.svelte';
57
+ export { default as Pagination } from './components/Pagination.svelte';
58
+ export { default as Steps, type Step, type StepState } from './components/Steps.svelte';
59
+ export { default as Dock } from './components/Dock.svelte';
60
+ export { default as Tabs, type TabItem } from './components/Tabs.svelte';
61
+ export { default as DataHandler, DataHandlerState, parseQuery, parseFilterValues, filterValuesToParams, type DataHandlerOptions, type DataHandlerMessages, type DataRow, type DiscardChoice, type EntityValue, type EntitySuggestion, type Filter, type FilterValues, type GetParams, type GetResult, type HandledFilter, type Identifier, type Navigation, type Sort } from './components/DataHandler.svelte';
62
+ export { default as DataControl, LABELS as DATA_CONTROL_LABELS, type DataControlLabels } from './components/DataControl.svelte';
63
+ export { default as Table, type TableColumn, type TableSort, type TableSortDirection } from './components/Table.svelte';
64
+ export { default as Grid } from './components/Grid.svelte';
65
+ export { default as Kanban, type KanbanColumn, type KanbanMove } from './components/Kanban.svelte';
66
+ export { default as FileExplorer, type FileNode, type FileDrop } from './components/FileExplorer.svelte';
67
+ export { FILE_ICONS, extensionOf, type FileIcon } from './components/file-icons.js';
68
+ export { default as Dialog } from './components/Dialog.svelte';
69
+ export { default as Dropdown, type DropdownTrigger } from './components/Dropdown.svelte';
70
+ export { default as Join } from './components/Join.svelte';
71
+ export { type Axis, type AxisProps, type Values } from './variants.js';
72
+ export { families, themesByFamily, type ThemeData } from './generated/registry.js';
73
+ export { defaultTheme, familyCategory, cloneTheme, serializeTheme, tokensToInlineStyle, tokensForFamily, parseTheme, type ThemeToken, type TokenType } from './theme.js';
package/dist/index.js ADDED
@@ -0,0 +1,99 @@
1
+ // Sepale — the Svelte layer.
2
+ //
3
+ // Every component emits the class names of whatever family stylesheet is
4
+ // loaded; bring `families/<name>.css` and a theme alongside. A component
5
+ // declares its own vocabulary in AXES and FLAGS blocks, and the build writes a
6
+ // copy per family as plain code — props typed to exactly the classes the family
7
+ // ships, nothing generic, nothing to import — so an exported component cannot
8
+ // offer a variant its stylesheet has never heard of.
9
+ //
10
+ // `link` and `validator` have no component here on purpose: they are one
11
+ // class on one element, with no axis and no structure, and a wrapper would only
12
+ // add an import. Write `<a class="link">`. Text does have wrappers — `Text`,
13
+ // `Title`, `Subtitle` — because it has three axes (size, weight, colour) and
14
+ // a heading has a tag to choose.
15
+ //
16
+ // A component draws its own inner parts rather than exposing them as separate
17
+ // wrappers: `Menu` renders its rows from `items`, `Tabs` its tabs from `tabs`,
18
+ // `List` its rows from `rows`. One stylesheet, one namespace, one component
19
+ // (ADR 0009).
20
+ export { default as Button } from './components/Button.svelte';
21
+ // Form
22
+ export { default as Input } from './components/Input.svelte';
23
+ export { default as Textarea } from './components/Textarea.svelte';
24
+ export { default as Select } from './components/Select.svelte';
25
+ export { default as Combobox } from './components/Combobox.svelte';
26
+ export { default as ChipsInput } from './components/ChipsInput.svelte';
27
+ export { default as FileInput } from './components/FileInput.svelte';
28
+ export { default as FileDropzone } from './components/FileDropzone.svelte';
29
+ export { default as Calendar } from './components/Calendar.svelte';
30
+ export { default as DatePicker } from './components/DatePicker.svelte';
31
+ export { default as Checkbox } from './components/Checkbox.svelte';
32
+ export { default as Radio } from './components/Radio.svelte';
33
+ export { default as Toggle } from './components/Toggle.svelte';
34
+ export { default as Range } from './components/Range.svelte';
35
+ export { default as Fieldset } from './components/Fieldset.svelte';
36
+ export { default as Label } from './components/Label.svelte';
37
+ export { default as FloatingLabel } from './components/FloatingLabel.svelte';
38
+ export { default as Switch } from './components/Switch.svelte';
39
+ export { default as NumberInput } from './components/NumberInput.svelte';
40
+ // Display
41
+ export { default as Avatar } from './components/Avatar.svelte';
42
+ export { default as Bubble } from './components/Bubble.svelte';
43
+ export { default as Chip } from './components/Chip.svelte';
44
+ export { default as Badge } from './components/Badge.svelte';
45
+ export { default as Swatch } from './components/Swatch.svelte';
46
+ export { default as ColorPicker } from './components/ColorPicker.svelte';
47
+ export { default as Loading } from './components/Loading.svelte';
48
+ export { default as Progress } from './components/Progress.svelte';
49
+ export { default as RadialProgress } from './components/RadialProgress.svelte';
50
+ export { default as Skeleton } from './components/Skeleton.svelte';
51
+ export { default as List } from './components/List.svelte';
52
+ export { default as Card } from './components/Card.svelte';
53
+ export { default as Stat } from './components/Stat.svelte';
54
+ export { default as Stats } from './components/Stats.svelte';
55
+ export { default as Carousel } from './components/Carousel.svelte';
56
+ export { default as Text } from './components/Text.svelte';
57
+ export { default as Title } from './components/Title.svelte';
58
+ export { default as Subtitle } from './components/Subtitle.svelte';
59
+ export { default as Divider } from './components/Divider.svelte';
60
+ export { default as Alert } from './components/Alert.svelte';
61
+ export { default as Toast } from './components/Toast.svelte';
62
+ export { default as Tooltip } from './components/Tooltip.svelte';
63
+ export { default as Collapse } from './components/Collapse.svelte';
64
+ export { default as Accordion } from './components/Accordion.svelte';
65
+ export { default as Rating } from './components/Rating.svelte';
66
+ export { default as Editable } from './components/Editable.svelte';
67
+ export { default as EmptyState } from './components/EmptyState.svelte';
68
+ export { default as Hero } from './components/Hero.svelte';
69
+ export { default as Footer } from './components/Footer.svelte';
70
+ export { default as MobileFrame } from './components/MobileFrame.svelte';
71
+ export { default as WindowFrame } from './components/WindowFrame.svelte';
72
+ export { default as LaptopFrame } from './components/LaptopFrame.svelte';
73
+ export { default as Sidebar } from './components/Sidebar.svelte';
74
+ export { default as Drawer } from './components/Drawer.svelte';
75
+ // Navigation
76
+ export { default as Menu } from './components/Menu.svelte';
77
+ export { default as Navbar } from './components/Navbar.svelte';
78
+ export { default as Breadcrumbs } from './components/Breadcrumbs.svelte';
79
+ export { default as Pagination } from './components/Pagination.svelte';
80
+ export { default as Steps } from './components/Steps.svelte';
81
+ export { default as Dock } from './components/Dock.svelte';
82
+ export { default as Tabs } from './components/Tabs.svelte';
83
+ // Data
84
+ export { default as DataHandler, DataHandlerState, parseQuery, parseFilterValues, filterValuesToParams } from './components/DataHandler.svelte';
85
+ export { default as DataControl, LABELS as DATA_CONTROL_LABELS } from './components/DataControl.svelte';
86
+ export { default as Table } from './components/Table.svelte';
87
+ export { default as Grid } from './components/Grid.svelte';
88
+ export { default as Kanban } from './components/Kanban.svelte';
89
+ export { default as FileExplorer } from './components/FileExplorer.svelte';
90
+ export { FILE_ICONS, extensionOf } from './components/file-icons.js';
91
+ // Overlay
92
+ export { default as Dialog } from './components/Dialog.svelte';
93
+ export { default as Dropdown } from './components/Dropdown.svelte';
94
+ // Other
95
+ export { default as Join } from './components/Join.svelte';
96
+ export {} from './variants.js';
97
+ // Registry of style families + their themes, auto-generated from src/scss.
98
+ export { families, themesByFamily } from './generated/registry.js';
99
+ export { defaultTheme, familyCategory, cloneTheme, serializeTheme, tokensToInlineStyle, tokensForFamily, parseTheme } from './theme.js';
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env node
2
+ export type Decl = {
3
+ name: string;
4
+ prefix: string;
5
+ axes: Record<string, string[]>;
6
+ flags: string[];
7
+ parts: string[];
8
+ };
@@ -0,0 +1,200 @@
1
+ #!/usr/bin/env node
2
+ // @ts-nocheck — a Node command in a package whose types target the browser
3
+ // (no @types/node here); its behaviour is checked against the build instead.
4
+ /**
5
+ * sepale-types — write the types a family stylesheet carries (ADR 0015).
6
+ *
7
+ * npx sepale-types orchid.css → orchid.css.d.ts beside it
8
+ * npx sepale-types --components lib/components orchid.css
9
+ *
10
+ * For a stylesheet that never went through Sepale's build or app: one written
11
+ * by hand or by an assistant, or one you changed after downloading it. It does
12
+ * what they do — reads which axis value, flag or part each class is, from the
13
+ * components' own AXES / FLAGS / PARTS blocks — and writes the declaration
14
+ * with the same function (family-types). Never write that file by hand: it
15
+ * would say what you meant the stylesheet to draw, not what it draws.
16
+ *
17
+ * `--components` points at the components to read: by default the ones next
18
+ * to this script (the package's, or a bundle's `lib/components`). Point it at
19
+ * your own copies when you changed their AXES, so a variant you added is typed.
20
+ *
21
+ * Plain JavaScript, no dependency: it runs from node_modules and from a
22
+ * bundle's `lib/` alike. In a bundle, family-types is TypeScript, which Node
23
+ * runs as it is from 22.18 / 23.6.
24
+ */
25
+
26
+ import { readFileSync, readdirSync, writeFileSync, existsSync } from 'node:fs';
27
+ import { basename, dirname, join, resolve } from 'node:path';
28
+ import { fileURLToPath, pathToFileURL } from 'node:url';
29
+
30
+ const here = dirname(fileURLToPath(import.meta.url));
31
+
32
+ /* Classes Sepale writes but does not own: never classified (scripts/prefix.mjs). */
33
+ const EXTERNAL = new Set(['prose', 'filter']);
34
+ const EXTERNAL_PREFIXES = ['air-datepicker'];
35
+ const isExternal = (/** @type {string} */ cls) =>
36
+ EXTERNAL.has(cls) || EXTERNAL_PREFIXES.some((p) => cls.startsWith(p));
37
+
38
+ /** The class suffix one axis value writes — the rules of variants.ts. */
39
+ const axisSuffix = (/** @type {string} */ axis, /** @type {string} */ value) =>
40
+ value === 'none' ? `no${axis}` : /^\d+$/.test(value) ? `${axis}${value}` : value;
41
+
42
+ /** Every class name in a stylesheet. */
43
+ function classesIn(/** @type {string} */ css) {
44
+ const clean = css
45
+ .replace(/\/\*[\s\S]*?\*\//g, '')
46
+ .replace(/url\([^)]*\)/g, '')
47
+ .replace(/"[^"\n]*"|'[^'\n]*'/g, '');
48
+ return new Set([...clean.matchAll(/\.([a-z][a-z0-9]*(?:-[a-z0-9]+)*)/g)].map((m) => /** @type {string} */ (m[1])));
49
+ }
50
+
51
+ /**
52
+ * The literal after `export const NAME =` in a component: a string, an array
53
+ * or an object of strings. Parsed as data (quotes normalised to JSON), never
54
+ * evaluated.
55
+ * @param {string} src
56
+ * @param {string} name
57
+ * @returns {unknown}
58
+ */
59
+ function readConst(src, name) {
60
+ const at = src.indexOf(`export const ${name} =`);
61
+ if (at < 0) return undefined;
62
+ const start = src.indexOf('=', at) + 1;
63
+ const from = start + src.slice(start).search(/[[{'"]/);
64
+ const open = src[from];
65
+ if (open === "'" || open === '"') return src.slice(from + 1, src.indexOf(open, from + 1));
66
+ const close = open === '[' ? ']' : '}';
67
+ let depth = 0;
68
+ for (let i = from; i < src.length; i++) {
69
+ if (src[i] === open) depth++;
70
+ else if (src[i] === close && --depth === 0) {
71
+ const json = src
72
+ .slice(from, i + 1)
73
+ .replace(/\/\*[\s\S]*?\*\//g, '')
74
+ .replace(/\/\/[^\n]*/g, '')
75
+ .replace(/'((?:[^'\\]|\\.)*)'/g, (_, s) => JSON.stringify(s.replace(/\\'/g, "'")))
76
+ .replace(/([{,]\s*)([A-Za-z_$][\w$-]*)\s*:/g, '$1"$2":')
77
+ .replace(/,(\s*[}\]])/g, '$1');
78
+ return JSON.parse(json);
79
+ }
80
+ }
81
+ return undefined;
82
+ }
83
+
84
+ /**
85
+ * @typedef {{ name: string, prefix: string, axes: Record<string, string[]>, flags: string[], parts: string[] }} Decl
86
+ */
87
+
88
+ /** Every component with a namespace in `dir`, read from its module script. */
89
+ function componentsIn(/** @type {string} */ dir) {
90
+ /** @type {Decl[]} */
91
+ const out = [];
92
+ for (const file of readdirSync(dir).filter((f) => f.endsWith('.svelte'))) {
93
+ const src = readFileSync(join(dir, file), 'utf8');
94
+ const prefix = readConst(src, 'PREFIX');
95
+ if (typeof prefix !== 'string') continue;
96
+ try {
97
+ const flags = /** @type {Record<string, string>} */ (readConst(src, 'FLAGS') ?? {});
98
+ out.push({
99
+ name: file.replace(/\.svelte$/, ''),
100
+ prefix,
101
+ axes: /** @type {Record<string, string[]>} */ (readConst(src, 'AXES') ?? {}),
102
+ flags: Object.keys(flags),
103
+ parts: /** @type {string[]} */ (readConst(src, 'PARTS') ?? [])
104
+ });
105
+ } catch (e) {
106
+ throw new Error(`${file}: its AXES / FLAGS / PARTS block is not plain data (${/** @type {Error} */ (e).message})`);
107
+ }
108
+ }
109
+ return out.sort((a, b) => b.prefix.length - a.prefix.length);
110
+ }
111
+
112
+ /**
113
+ * What each class of a stylesheet is, in the shape family-types reads.
114
+ * @param {string} css
115
+ * @param {Decl[]} decls longest prefix first
116
+ */
117
+ function classify(css, decls) {
118
+ /** @type {Record<string, { kind: string, component?: string, axis?: string, value?: string }>} */
119
+ const classes = {};
120
+ /** @type {string[]} */
121
+ const unclassified = [];
122
+ for (const cls of [...classesIn(css)].sort()) {
123
+ if (isExternal(cls)) continue;
124
+ const owner = decls.find((c) => cls === c.prefix || cls.startsWith(`${c.prefix}-`));
125
+ if (!owner) continue;
126
+ if (cls === owner.prefix) {
127
+ classes[cls] = { kind: 'root', component: owner.name };
128
+ continue;
129
+ }
130
+ const suffix = cls.slice(owner.prefix.length + 1);
131
+ let info = null;
132
+ for (const [axis, values] of Object.entries(owner.axes)) {
133
+ const value = values.find((v) => axisSuffix(axis, v) === suffix);
134
+ if (value !== undefined) info = { kind: 'axis', component: owner.name, axis, value };
135
+ }
136
+ if (!info && owner.flags.includes(suffix)) info = { kind: 'flag', component: owner.name };
137
+ if (!info && owner.parts.includes(suffix)) info = { kind: 'part', component: owner.name };
138
+ if (!info) {
139
+ info = { kind: 'unclassified', component: owner.name };
140
+ unclassified.push(cls);
141
+ }
142
+ classes[cls] = info;
143
+ }
144
+ return { classes, unclassified };
145
+ }
146
+
147
+ /** family-types, as JavaScript (package) or TypeScript (bundle). */
148
+ async function loadFamilyTypes() {
149
+ for (const file of ['family-types.js', 'family-types.ts']) {
150
+ const path = join(here, file);
151
+ if (existsSync(path)) return import(pathToFileURL(path).href);
152
+ }
153
+ throw new Error(`family-types not found next to ${here}`);
154
+ }
155
+
156
+ async function main(/** @type {string[]} */ argv) {
157
+ let componentsDir = join(here, 'components');
158
+ let help = false;
159
+ /** @type {string[]} */
160
+ const files = [];
161
+ for (let i = 0; i < argv.length; i++) {
162
+ const arg = /** @type {string} */ (argv[i]);
163
+ if (arg === '--components') componentsDir = resolve(/** @type {string} */ (argv[++i]));
164
+ else if (arg === '-h' || arg === '--help') help = true;
165
+ else files.push(arg);
166
+ }
167
+ if (help || !files.length) {
168
+ console.log('usage: sepale-types [--components <dir>] <family.css>…\n\nWrites <family>.css.d.ts beside each stylesheet: what it draws, as types.');
169
+ return help ? 0 : 1;
170
+ }
171
+ if (!existsSync(componentsDir)) throw new Error(`no components at ${componentsDir} (use --components <dir>)`);
172
+
173
+ const { familyShape, familyTypes } = await loadFamilyTypes();
174
+ const decls = componentsIn(componentsDir);
175
+ const schema = Object.fromEntries(decls.map((d) => [d.name, { prefix: d.prefix, flags: d.flags }]));
176
+
177
+ for (const file of files) {
178
+ const css = readFileSync(file, 'utf8');
179
+ const family = basename(file).replace(/\.css$/, '');
180
+ const { classes, unclassified } = classify(css, decls);
181
+ const out = `${file.replace(/\.css$/, '')}.css.d.ts`;
182
+ writeFileSync(out, familyTypes(family, familyShape(classes, schema, css)));
183
+ console.log(`sepale-types: ${family} -> ${out}`);
184
+ if (unclassified.length) {
185
+ console.warn(
186
+ ` ${unclassified.length} class(es) under a component's namespace that no AXES, FLAGS or PARTS block names — untyped:\n` +
187
+ unclassified.map((c) => ` .${c}`).join('\n')
188
+ );
189
+ }
190
+ }
191
+ return 0;
192
+ }
193
+
194
+ main(process.argv.slice(2)).then(
195
+ (code) => process.exit(code),
196
+ (e) => {
197
+ console.error(`sepale-types: ${e.message}`);
198
+ process.exit(1);
199
+ }
200
+ );
@@ -0,0 +1,123 @@
1
+ /**
2
+ * Theme model.
3
+ *
4
+ * A *family* is a set of opinionated classes **with its own set of
5
+ * variables**. Sharing a variable name with another family is a convenience,
6
+ * never a rule. This module does not decide what a family exposes: it reads
7
+ * the declaration out of the registry and serialises the edited values back
8
+ * to a drop-in `:root { … }` stylesheet.
9
+ *
10
+ * Which inks are parameters is the family's call: daisy exposes every one
11
+ * (`--color-primary-content`, as daisyUI does), the others derive theirs in
12
+ * CSS (`--color-on-primary`, see each family's `_root.scss`). A colour token
13
+ * says which variable holds its ink through `on`; nothing here reads a name.
14
+ */
15
+ /**
16
+ * `edge-width` and `shadows` are still ONE variable each — what changes is the
17
+ * control that edits it:
18
+ *
19
+ * edge-width a width and the edges it is drawn on, as the `border-width`
20
+ * shorthand (`1px 0 1px 0`). The parts at `0` ARE the edges that
21
+ * are off, so the value is its own record.
22
+ * shadows a whole `box-shadow` value, edited as a list of layers.
23
+ */
24
+ export type TokenType = 'color' | 'length' | 'number' | 'text' | 'edge-width' | 'shadows';
25
+ export interface ThemeToken {
26
+ /** CSS custom property name without the leading `--`. */
27
+ name: string;
28
+ label: string;
29
+ group: string;
30
+ type: TokenType;
31
+ value: string;
32
+ /** Short help text shown under the control, explaining what it tunes. */
33
+ description?: string;
34
+ /** Slider bounds for `number` and `length` tokens (rendered as range + number input). */
35
+ min?: number;
36
+ max?: number;
37
+ step?: number;
38
+ /** Unit of a `length` token, written back with the number (e.g. `rem`, `px`). */
39
+ unit?: string;
40
+ /** Units the editor offers for this token. A length with several units gets
41
+ * a unit picker next to its number; the CSS never cares which one is used. */
42
+ units?: string[];
43
+ /** Colours only: `surface` (a ground), `accent` (a colour things are
44
+ * painted with) or `ink` (text and lines drawn over both). */
45
+ kind?: string;
46
+ /** Colours only: the variable (without `--`) holding the ink written on
47
+ * this colour — another token of the family, or a value it derives. */
48
+ on?: string;
49
+ }
50
+ /** Units offered for editable lengths. `%` is excluded on purpose: it is
51
+ * meaningless on a border and unreadable on a slider. */
52
+ export declare const LENGTH_UNITS: string[];
53
+ /**
54
+ * Split a CSS length into its number and its unit (`"0.5rem"` → `[0.5, 'rem']`).
55
+ *
56
+ * A four-value shorthand — `1px 0 1px 0`, an edge set — reads back as its
57
+ * first non-zero part, which is exactly the number that was typed.
58
+ */
59
+ export declare function splitLength(value: string, fallbackUnit?: string): [number, string];
60
+ export interface Sides {
61
+ top: boolean;
62
+ right: boolean;
63
+ bottom: boolean;
64
+ left: boolean;
65
+ }
66
+ export interface EdgeWidth {
67
+ width: string;
68
+ sides: Sides;
69
+ }
70
+ export declare const SIDES: readonly ["top", "right", "bottom", "left"];
71
+ /** A width and its edges as one shorthand. All four on → just the length. */
72
+ export declare function edgeWidthToCss({ width, sides }: EdgeWidth): string;
73
+ /** And back. A part at `0` is an edge that is off. */
74
+ export declare function edgeWidthFromCss(raw: string, fallbackUnit?: string): EdgeWidth;
75
+ export interface ShadowLayer {
76
+ x: string;
77
+ y: string;
78
+ blur: string;
79
+ spread: string;
80
+ color: string;
81
+ inset: boolean;
82
+ }
83
+ /** The layers as CSS. An empty list is `none`, not an empty string. */
84
+ export declare function shadowsToCss(layers: ShadowLayer[]): string;
85
+ /**
86
+ * And back. A layer is up to four lengths and a colour, in any order the
87
+ * spec allows; whatever is not a length is the colour.
88
+ */
89
+ export declare function shadowsFromCss(raw: string): ShadowLayer[];
90
+ /**
91
+ * Read a theme file — any stylesheet of `--name: value;` declarations — back
92
+ * into variables. A theme IS its variables, so this is all it takes; the
93
+ * family then keeps the ones it declares (see `tokensForFamily`).
94
+ */
95
+ export declare function parseTheme(css: string): {
96
+ vars: Record<string, string>;
97
+ scheme?: string;
98
+ };
99
+ import type { FamilyParam } from './generated/registry.js';
100
+ /** A neutral fallback for the rare caller with no family in hand. */
101
+ export declare const defaultTheme: ThemeToken[];
102
+ /** Human label of each family's design language, taken from its own header. */
103
+ export declare const familyCategory: Record<string, string>;
104
+ /** A custom property name (without `--`) safe to write. */
105
+ export declare const isSafeName: (name: unknown) => name is string;
106
+ /** A value safe to write after `--name:`: no way out of the declaration. */
107
+ export declare function isSafeValue(value: unknown): value is string;
108
+ /** A `color-scheme` keyword, or undefined. */
109
+ export declare function safeScheme(scheme: unknown): string | undefined;
110
+ /** Convert tokens into an inline `style` string for a preview element. */
111
+ export declare function tokensToInlineStyle(tokens: ThemeToken[]): string;
112
+ /** Serialise tokens into a drop-in `:root { … }` stylesheet. */
113
+ export declare function serializeTheme(tokens: ThemeToken[], scheme?: string): string;
114
+ /** Deep copy so callers can edit without mutating the schema. */
115
+ export declare function cloneTheme(tokens?: ThemeToken[]): ThemeToken[];
116
+ /**
117
+ * Editable tokens for a family: exactly the parameters that family declares,
118
+ * seeded from `vars` (a theme's parsed custom properties) where present and
119
+ * from the family's own default otherwise.
120
+ */
121
+ export declare function tokensForFamily(family: string, vars?: Record<string, string>): ThemeToken[];
122
+ /** The same, from a parameter list in hand — a family the build never saw. */
123
+ export declare function tokensFrom(params: FamilyParam[], vars?: Record<string, string>): ThemeToken[];