zabi-components 7.0.2 → 8.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 (433) hide show
  1. package/CHANGELOG.md +1924 -0
  2. package/README.md +287 -11
  3. package/THEME.md +149 -332
  4. package/THEMING.md +1329 -163
  5. package/dist/atoms/ActionPanel.svelte +24 -9
  6. package/dist/atoms/ActionPanel.svelte.d.ts +2 -0
  7. package/dist/atoms/Avatar.svelte +104 -0
  8. package/dist/atoms/Avatar.svelte.d.ts +34 -0
  9. package/dist/atoms/Badge.svelte +124 -58
  10. package/dist/atoms/Badge.svelte.d.ts +17 -5
  11. package/dist/atoms/Button.svelte +212 -62
  12. package/dist/atoms/Button.svelte.d.ts +33 -2
  13. package/dist/atoms/Card.svelte +31 -28
  14. package/dist/atoms/Card.svelte.d.ts +5 -2
  15. package/dist/atoms/CardContent.svelte +10 -2
  16. package/dist/atoms/CardContent.svelte.d.ts +2 -0
  17. package/dist/atoms/CardFooter.svelte +10 -2
  18. package/dist/atoms/CardFooter.svelte.d.ts +2 -0
  19. package/dist/atoms/CardHeader.svelte +26 -6
  20. package/dist/atoms/CardHeader.svelte.d.ts +2 -0
  21. package/dist/atoms/Checkbox.svelte +52 -21
  22. package/dist/atoms/Checkbox.svelte.d.ts +6 -2
  23. package/dist/atoms/CodeBlock.svelte +35 -9
  24. package/dist/atoms/CodeBlock.svelte.d.ts +13 -3
  25. package/dist/atoms/ColorPicker.svelte +272 -52
  26. package/dist/atoms/ColorPicker.svelte.d.ts +6 -1
  27. package/dist/atoms/Container.svelte +17 -10
  28. package/dist/atoms/DateField.svelte +107 -0
  29. package/dist/atoms/DateField.svelte.d.ts +53 -0
  30. package/dist/atoms/Divider.svelte +4 -4
  31. package/dist/atoms/FeatureCard.svelte +4 -3
  32. package/dist/atoms/FieldMessages.svelte +69 -0
  33. package/dist/atoms/FieldMessages.svelte.d.ts +23 -0
  34. package/dist/atoms/FloatingActionButton.svelte +174 -0
  35. package/dist/atoms/FloatingActionButton.svelte.d.ts +51 -0
  36. package/dist/atoms/Heading.svelte +93 -32
  37. package/dist/atoms/Heading.svelte.d.ts +24 -4
  38. package/dist/atoms/IconButton.svelte +242 -53
  39. package/dist/atoms/IconButton.svelte.d.ts +49 -4
  40. package/dist/atoms/Input.svelte +267 -74
  41. package/dist/atoms/Input.svelte.d.ts +32 -2
  42. package/dist/atoms/List.svelte +13 -2
  43. package/dist/atoms/List.svelte.d.ts +2 -0
  44. package/dist/atoms/ListItem.svelte +44 -11
  45. package/dist/atoms/ListItem.svelte.d.ts +5 -0
  46. package/dist/atoms/ListItemLeading.svelte +4 -2
  47. package/dist/atoms/ListItemLeading.svelte.d.ts +1 -1
  48. package/dist/atoms/OptimizedImage.svelte +11 -2
  49. package/dist/atoms/OptimizedImage.svelte.d.ts +2 -0
  50. package/dist/atoms/Progress.svelte +31 -9
  51. package/dist/atoms/Progress.svelte.d.ts +6 -0
  52. package/dist/atoms/Radio.svelte +23 -3
  53. package/dist/atoms/Radio.svelte.d.ts +6 -2
  54. package/dist/atoms/Rating.svelte +494 -0
  55. package/dist/atoms/Rating.svelte.d.ts +56 -0
  56. package/dist/atoms/Select.svelte +475 -135
  57. package/dist/atoms/Select.svelte.d.ts +52 -2
  58. package/dist/atoms/SelectionControl.svelte +99 -18
  59. package/dist/atoms/SelectionControl.svelte.d.ts +6 -3
  60. package/dist/atoms/Skeleton.svelte +5 -3
  61. package/dist/atoms/Slider.svelte +309 -0
  62. package/dist/atoms/Slider.svelte.d.ts +40 -0
  63. package/dist/atoms/Spinner.svelte +57 -0
  64. package/dist/atoms/Spinner.svelte.d.ts +19 -0
  65. package/dist/atoms/Table.svelte +152 -6
  66. package/dist/atoms/Table.svelte.d.ts +15 -3
  67. package/dist/atoms/TemporalField.svelte +140 -0
  68. package/dist/atoms/TemporalField.svelte.d.ts +32 -0
  69. package/dist/atoms/Text.svelte +56 -15
  70. package/dist/atoms/Text.svelte.d.ts +13 -4
  71. package/dist/atoms/Textarea.svelte +57 -45
  72. package/dist/atoms/Textarea.svelte.d.ts +14 -2
  73. package/dist/atoms/ThemeToggle.svelte +238 -56
  74. package/dist/atoms/ThemeToggle.svelte.d.ts +28 -3
  75. package/dist/atoms/TimeField.svelte +108 -0
  76. package/dist/atoms/TimeField.svelte.d.ts +54 -0
  77. package/dist/atoms/Toast.svelte +25 -10
  78. package/dist/atoms/Toast.svelte.d.ts +2 -0
  79. package/dist/atoms/Toggle.svelte +60 -19
  80. package/dist/atoms/Toggle.svelte.d.ts +18 -2
  81. package/dist/atoms/Tooltip.svelte +583 -40
  82. package/dist/atoms/Tooltip.svelte.d.ts +26 -0
  83. package/dist/atoms/ZabiStringsProvider.svelte +45 -0
  84. package/dist/atoms/ZabiStringsProvider.svelte.d.ts +27 -0
  85. package/dist/atoms/index.d.ts +17 -0
  86. package/dist/atoms/index.js +12 -0
  87. package/dist/atoms/selection-control.styles.d.ts +36 -5
  88. package/dist/atoms/selection-control.styles.js +40 -9
  89. package/dist/components/atoms/index.d.ts +17 -0
  90. package/dist/components/atoms/index.d.ts.map +1 -1
  91. package/dist/components/atoms/selection-control.styles.d.ts +36 -5
  92. package/dist/components/atoms/selection-control.styles.d.ts.map +1 -1
  93. package/dist/components/index.d.ts +83 -3
  94. package/dist/components/index.d.ts.map +1 -1
  95. package/dist/components/molecules/index.d.ts +46 -0
  96. package/dist/components/molecules/index.d.ts.map +1 -1
  97. package/dist/components/molecules/toast-store.d.ts +53 -7
  98. package/dist/components/molecules/toast-store.d.ts.map +1 -1
  99. package/dist/components/organisms/index.d.ts +6 -0
  100. package/dist/components/organisms/index.d.ts.map +1 -1
  101. package/dist/components/types/variants.d.ts +15 -1
  102. package/dist/components/types/variants.d.ts.map +1 -1
  103. package/dist/components/util/app-shell.d.ts +28 -0
  104. package/dist/components/util/app-shell.d.ts.map +1 -0
  105. package/dist/components/util/avatar.d.ts +36 -0
  106. package/dist/components/util/avatar.d.ts.map +1 -0
  107. package/dist/components/util/bottom-sheet.d.ts +30 -0
  108. package/dist/components/util/bottom-sheet.d.ts.map +1 -0
  109. package/dist/components/util/bottom-tab-bar.d.ts +35 -0
  110. package/dist/components/util/bottom-tab-bar.d.ts.map +1 -0
  111. package/dist/components/util/calendar.d.ts +56 -0
  112. package/dist/components/util/calendar.d.ts.map +1 -0
  113. package/dist/components/util/cn.d.ts +8 -0
  114. package/dist/components/util/cn.d.ts.map +1 -0
  115. package/dist/components/util/collapsible.d.ts +58 -0
  116. package/dist/components/util/collapsible.d.ts.map +1 -0
  117. package/dist/components/util/confirm-dialog.d.ts +12 -0
  118. package/dist/components/util/confirm-dialog.d.ts.map +1 -0
  119. package/dist/components/util/date.d.ts +96 -0
  120. package/dist/components/util/date.d.ts.map +1 -0
  121. package/dist/components/util/drawer.d.ts +13 -0
  122. package/dist/components/util/drawer.d.ts.map +1 -0
  123. package/dist/components/util/dropdown.d.ts +47 -0
  124. package/dist/components/util/dropdown.d.ts.map +1 -0
  125. package/dist/components/util/field.d.ts +39 -0
  126. package/dist/components/util/field.d.ts.map +1 -0
  127. package/dist/components/util/fit-in-viewport.d.ts +201 -0
  128. package/dist/components/util/fit-in-viewport.d.ts.map +1 -0
  129. package/dist/components/util/focus-utils.d.ts +75 -2
  130. package/dist/components/util/focus-utils.d.ts.map +1 -1
  131. package/dist/components/util/hydration.d.ts +45 -0
  132. package/dist/components/util/hydration.d.ts.map +1 -0
  133. package/dist/components/util/keyboard-inset.d.ts +18 -0
  134. package/dist/components/util/keyboard-inset.d.ts.map +1 -0
  135. package/dist/components/util/media-grid.d.ts +51 -0
  136. package/dist/components/util/media-grid.d.ts.map +1 -0
  137. package/dist/components/util/media.d.ts +6 -0
  138. package/dist/components/util/media.d.ts.map +1 -0
  139. package/dist/components/util/overlay-chrome.d.ts +53 -0
  140. package/dist/components/util/overlay-chrome.d.ts.map +1 -0
  141. package/dist/components/util/overlay.d.ts +72 -0
  142. package/dist/components/util/overlay.d.ts.map +1 -0
  143. package/dist/components/util/photo.d.ts +215 -0
  144. package/dist/components/util/photo.d.ts.map +1 -0
  145. package/dist/components/util/portal.d.ts +23 -0
  146. package/dist/components/util/portal.d.ts.map +1 -0
  147. package/dist/components/util/pull-to-refresh.d.ts +27 -0
  148. package/dist/components/util/pull-to-refresh.d.ts.map +1 -0
  149. package/dist/components/util/radio-keys.d.ts +25 -0
  150. package/dist/components/util/radio-keys.d.ts.map +1 -0
  151. package/dist/components/util/rating.d.ts +23 -0
  152. package/dist/components/util/rating.d.ts.map +1 -0
  153. package/dist/components/util/ready-made-strings.d.ts +77 -0
  154. package/dist/components/util/ready-made-strings.d.ts.map +1 -0
  155. package/dist/components/util/scroll-padding.d.ts +20 -0
  156. package/dist/components/util/scroll-padding.d.ts.map +1 -0
  157. package/dist/components/util/segmented-control.d.ts +16 -0
  158. package/dist/components/util/segmented-control.d.ts.map +1 -0
  159. package/dist/components/util/select.d.ts +41 -0
  160. package/dist/components/util/select.d.ts.map +1 -0
  161. package/dist/components/util/sheet-drag.d.ts +60 -0
  162. package/dist/components/util/sheet-drag.d.ts.map +1 -0
  163. package/dist/components/util/sidebar.d.ts +63 -0
  164. package/dist/components/util/sidebar.d.ts.map +1 -0
  165. package/dist/components/util/sortable-list.d.ts +65 -0
  166. package/dist/components/util/sortable-list.d.ts.map +1 -0
  167. package/dist/components/util/ssr-safe.d.ts +4 -4
  168. package/dist/components/util/ssr-safe.d.ts.map +1 -1
  169. package/dist/components/util/stepper.d.ts +40 -0
  170. package/dist/components/util/stepper.d.ts.map +1 -0
  171. package/dist/components/util/swipeable-list-item.d.ts +36 -0
  172. package/dist/components/util/swipeable-list-item.d.ts.map +1 -0
  173. package/dist/components/util/theme-mode.d.ts +80 -0
  174. package/dist/components/util/theme-mode.d.ts.map +1 -0
  175. package/dist/components/util/toaster.d.ts +93 -0
  176. package/dist/components/util/toaster.d.ts.map +1 -0
  177. package/dist/components/util/tooltip.d.ts +10 -0
  178. package/dist/components/util/tooltip.d.ts.map +1 -0
  179. package/dist/components/util/top-navbar.d.ts +11 -0
  180. package/dist/components/util/top-navbar.d.ts.map +1 -0
  181. package/dist/components/util/touch-target.d.ts +31 -0
  182. package/dist/components/util/touch-target.d.ts.map +1 -0
  183. package/dist/components/util/zabi-strings.d.ts +133 -0
  184. package/dist/components/util/zabi-strings.d.ts.map +1 -0
  185. package/dist/create-theme/cli.js +169 -0
  186. package/dist/create-theme/index.d.ts +176 -0
  187. package/dist/create-theme/index.js +817 -0
  188. package/dist/create-theme/lib/ramp-math.js +128 -0
  189. package/dist/create-theme/lib/resolve.js +141 -0
  190. package/dist/create-theme/theme-data.js +1116 -0
  191. package/dist/index.d.ts +83 -3
  192. package/dist/index.js +60 -8
  193. package/dist/molecules/Alert.svelte +73 -66
  194. package/dist/molecules/Alert.svelte.d.ts +9 -1
  195. package/dist/molecules/AppBar.svelte +415 -0
  196. package/dist/molecules/AppBar.svelte.d.ts +69 -0
  197. package/dist/molecules/AvatarGroup.svelte +116 -0
  198. package/dist/molecules/AvatarGroup.svelte.d.ts +40 -0
  199. package/dist/molecules/BottomSheet.svelte +540 -0
  200. package/dist/molecules/BottomSheet.svelte.d.ts +93 -0
  201. package/dist/molecules/BottomTabBar.svelte +297 -0
  202. package/dist/molecules/BottomTabBar.svelte.d.ts +64 -0
  203. package/dist/molecules/Calendar.svelte +597 -0
  204. package/dist/molecules/Calendar.svelte.d.ts +72 -0
  205. package/dist/molecules/Collapsible.svelte +243 -0
  206. package/dist/molecules/Collapsible.svelte.d.ts +44 -0
  207. package/dist/molecules/CollapsibleGroup.svelte +126 -0
  208. package/dist/molecules/CollapsibleGroup.svelte.d.ts +14 -0
  209. package/dist/molecules/ComponentDemo.svelte +25 -5
  210. package/dist/molecules/ComponentDemo.svelte.d.ts +5 -0
  211. package/dist/molecules/ConfirmDialog.svelte +253 -0
  212. package/dist/molecules/ConfirmDialog.svelte.d.ts +55 -0
  213. package/dist/molecules/ContactForm.svelte +46 -19
  214. package/dist/molecules/ContactForm.svelte.d.ts +10 -0
  215. package/dist/molecules/Drawer.svelte +394 -0
  216. package/dist/molecules/Drawer.svelte.d.ts +55 -0
  217. package/dist/molecules/Dropdown.svelte +540 -50
  218. package/dist/molecules/Dropdown.svelte.d.ts +49 -6
  219. package/dist/molecules/DropdownItem.svelte +122 -0
  220. package/dist/molecules/DropdownItem.svelte.d.ts +28 -0
  221. package/dist/molecules/EmptyState.svelte +56 -10
  222. package/dist/molecules/EmptyState.svelte.d.ts +8 -0
  223. package/dist/molecules/Form.svelte +25 -14
  224. package/dist/molecules/Form.svelte.d.ts +13 -5
  225. package/dist/molecules/FormField.svelte +11 -2
  226. package/dist/molecules/FormField.svelte.d.ts +2 -0
  227. package/dist/molecules/Header.svelte +13 -3
  228. package/dist/molecules/Header.svelte.d.ts +2 -0
  229. package/dist/molecules/ImageUpload.svelte +422 -70
  230. package/dist/molecules/ImageUpload.svelte.d.ts +61 -5
  231. package/dist/molecules/MediaGrid.svelte +527 -0
  232. package/dist/molecules/MediaGrid.svelte.d.ts +77 -0
  233. package/dist/molecules/Modal.svelte +340 -45
  234. package/dist/molecules/Modal.svelte.d.ts +59 -7
  235. package/dist/molecules/NavigationMenu.svelte +15 -3
  236. package/dist/molecules/NavigationMenu.svelte.d.ts +4 -0
  237. package/dist/molecules/NavigationMenuContent.svelte +91 -36
  238. package/dist/molecules/NavigationMenuContent.svelte.d.ts +2 -0
  239. package/dist/molecules/NavigationMenuItem.svelte +10 -3
  240. package/dist/molecules/NavigationMenuItem.svelte.d.ts +2 -0
  241. package/dist/molecules/NavigationMenuLink.svelte +10 -2
  242. package/dist/molecules/NavigationMenuLink.svelte.d.ts +2 -0
  243. package/dist/molecules/NavigationMenuList.svelte +19 -4
  244. package/dist/molecules/NavigationMenuList.svelte.d.ts +2 -0
  245. package/dist/molecules/NavigationMenuTrigger.svelte +16 -3
  246. package/dist/molecules/NavigationMenuTrigger.svelte.d.ts +2 -0
  247. package/dist/molecules/Page.svelte +38 -2
  248. package/dist/molecules/Page.svelte.d.ts +13 -0
  249. package/dist/molecules/PhotoGrid.svelte +433 -0
  250. package/dist/molecules/PhotoGrid.svelte.d.ts +62 -0
  251. package/dist/molecules/PhotoViewer.svelte +1116 -0
  252. package/dist/molecules/PhotoViewer.svelte.d.ts +56 -0
  253. package/dist/molecules/PropsTable.svelte +26 -11
  254. package/dist/molecules/PropsTable.svelte.d.ts +5 -0
  255. package/dist/molecules/PullToRefresh.svelte +263 -0
  256. package/dist/molecules/PullToRefresh.svelte.d.ts +52 -0
  257. package/dist/molecules/RadioGroup.svelte +57 -15
  258. package/dist/molecules/RadioGroup.svelte.d.ts +16 -3
  259. package/dist/molecules/Section.svelte +13 -5
  260. package/dist/molecules/Section.svelte.d.ts +3 -1
  261. package/dist/molecules/SegmentedControl.svelte +323 -0
  262. package/dist/molecules/SegmentedControl.svelte.d.ts +34 -0
  263. package/dist/molecules/SidebarBrandHeader.svelte +24 -5
  264. package/dist/molecules/SidebarBrandHeader.svelte.d.ts +5 -0
  265. package/dist/molecules/SidebarFooter.svelte +39 -8
  266. package/dist/molecules/SidebarFooter.svelte.d.ts +5 -0
  267. package/dist/molecules/SidebarNavSection.svelte +12 -4
  268. package/dist/molecules/SidebarNavSection.svelte.d.ts +2 -0
  269. package/dist/molecules/SlideUp.svelte +253 -30
  270. package/dist/molecules/SlideUp.svelte.d.ts +31 -4
  271. package/dist/molecules/SortableList.svelte +632 -0
  272. package/dist/molecules/SortableList.svelte.d.ts +69 -0
  273. package/dist/molecules/Stepper.svelte +548 -0
  274. package/dist/molecules/Stepper.svelte.d.ts +39 -0
  275. package/dist/molecules/StickyActionBar.svelte +191 -0
  276. package/dist/molecules/StickyActionBar.svelte.d.ts +65 -0
  277. package/dist/molecules/SwipeableListItem.svelte +334 -0
  278. package/dist/molecules/SwipeableListItem.svelte.d.ts +54 -0
  279. package/dist/molecules/Tabs.svelte +254 -24
  280. package/dist/molecules/Tabs.svelte.d.ts +15 -4
  281. package/dist/molecules/Toaster.svelte +352 -6
  282. package/dist/molecules/Toaster.svelte.d.ts +95 -2
  283. package/dist/molecules/ToasterToast.svelte +279 -62
  284. package/dist/molecules/ToasterToast.svelte.d.ts +11 -0
  285. package/dist/molecules/UnsavedChangesBar.svelte +212 -0
  286. package/dist/molecules/UnsavedChangesBar.svelte.d.ts +43 -0
  287. package/dist/molecules/index.d.ts +46 -0
  288. package/dist/molecules/index.js +27 -0
  289. package/dist/molecules/toast-store.d.ts +53 -7
  290. package/dist/molecules/toast-store.js +21 -0
  291. package/dist/organisms/AppShell.svelte +196 -0
  292. package/dist/organisms/AppShell.svelte.d.ts +61 -0
  293. package/dist/organisms/SidebarAccountPanel.svelte +111 -12
  294. package/dist/organisms/SidebarAccountPanel.svelte.d.ts +21 -0
  295. package/dist/organisms/SidebarNavigation.svelte +193 -69
  296. package/dist/organisms/SidebarNavigation.svelte.d.ts +31 -1
  297. package/dist/organisms/SidebarPanel.svelte +45 -16
  298. package/dist/organisms/SidebarPanel.svelte.d.ts +2 -0
  299. package/dist/organisms/SidebarShell.svelte +263 -0
  300. package/dist/organisms/SidebarShell.svelte.d.ts +106 -0
  301. package/dist/organisms/TopNavbar.svelte +329 -33
  302. package/dist/organisms/TopNavbar.svelte.d.ts +28 -0
  303. package/dist/organisms/index.d.ts +6 -0
  304. package/dist/organisms/index.js +4 -0
  305. package/dist/routes/lib/variant-utils.d.ts +26 -0
  306. package/dist/routes/lib/{variant-utils.ts → variant-utils.js} +15 -46
  307. package/dist/types/components.d.ts +4 -0
  308. package/dist/types/components.d.ts.map +1 -1
  309. package/dist/types/events.js +1 -0
  310. package/dist/types/index.d.ts +605 -25
  311. package/dist/types/index.d.ts.map +1 -1
  312. package/dist/types/index.js +3 -0
  313. package/dist/types/variants.ts +17 -1
  314. package/dist/util/app-shell.d.ts +27 -0
  315. package/dist/util/app-shell.js +72 -0
  316. package/dist/util/avatar.d.ts +35 -0
  317. package/dist/util/avatar.js +52 -0
  318. package/dist/util/bottom-sheet.d.ts +29 -0
  319. package/dist/util/bottom-sheet.js +43 -0
  320. package/dist/util/bottom-tab-bar.d.ts +34 -0
  321. package/dist/util/bottom-tab-bar.js +54 -0
  322. package/dist/util/calendar.d.ts +55 -0
  323. package/dist/util/calendar.js +74 -0
  324. package/dist/util/cn.d.ts +7 -0
  325. package/dist/util/cn.js +48 -0
  326. package/dist/util/collapsible.d.ts +57 -0
  327. package/dist/util/collapsible.js +23 -0
  328. package/dist/util/confirm-dialog.d.ts +11 -0
  329. package/dist/util/confirm-dialog.js +2 -0
  330. package/dist/util/date.d.ts +95 -0
  331. package/dist/util/date.js +237 -0
  332. package/dist/util/drawer.d.ts +12 -0
  333. package/dist/util/drawer.js +7 -0
  334. package/dist/util/dropdown.d.ts +46 -0
  335. package/dist/util/dropdown.js +21 -0
  336. package/dist/util/field.d.ts +38 -0
  337. package/dist/util/field.js +38 -0
  338. package/dist/util/fit-in-viewport.d.ts +200 -0
  339. package/dist/util/fit-in-viewport.js +399 -0
  340. package/dist/util/focus-utils.d.ts +75 -2
  341. package/dist/util/focus-utils.js +182 -9
  342. package/dist/util/hydration.d.ts +44 -0
  343. package/dist/util/hydration.js +58 -0
  344. package/dist/util/keyboard-inset.d.ts +17 -0
  345. package/dist/util/keyboard-inset.js +53 -0
  346. package/dist/util/media-grid.d.ts +50 -0
  347. package/dist/util/media-grid.js +81 -0
  348. package/dist/util/media.d.ts +5 -0
  349. package/dist/util/media.js +10 -0
  350. package/dist/util/overlay-chrome.d.ts +52 -0
  351. package/dist/util/overlay-chrome.js +56 -0
  352. package/dist/util/overlay.d.ts +71 -0
  353. package/dist/util/overlay.js +240 -0
  354. package/dist/util/photo.d.ts +214 -0
  355. package/dist/util/photo.js +206 -0
  356. package/dist/util/portal.d.ts +22 -0
  357. package/dist/util/portal.js +50 -0
  358. package/dist/util/pull-to-refresh.d.ts +26 -0
  359. package/dist/util/pull-to-refresh.js +30 -0
  360. package/dist/util/radio-keys.d.ts +24 -0
  361. package/dist/util/radio-keys.js +49 -0
  362. package/dist/util/rating.d.ts +22 -0
  363. package/dist/util/rating.js +26 -0
  364. package/dist/util/ready-made-strings.d.ts +76 -0
  365. package/dist/util/ready-made-strings.js +67 -0
  366. package/dist/util/scroll-padding.d.ts +19 -0
  367. package/dist/util/scroll-padding.js +44 -0
  368. package/dist/util/segmented-control.d.ts +15 -0
  369. package/dist/util/segmented-control.js +1 -0
  370. package/dist/util/select.d.ts +40 -0
  371. package/dist/util/select.js +63 -0
  372. package/dist/util/sheet-drag.d.ts +59 -0
  373. package/dist/util/sheet-drag.js +241 -0
  374. package/dist/util/sidebar.d.ts +62 -0
  375. package/dist/util/sidebar.js +38 -0
  376. package/dist/util/sortable-list.d.ts +64 -0
  377. package/dist/util/sortable-list.js +53 -0
  378. package/dist/util/ssr-safe.d.ts +4 -4
  379. package/dist/util/stepper.d.ts +39 -0
  380. package/dist/util/stepper.js +38 -0
  381. package/dist/util/swipeable-list-item.d.ts +35 -0
  382. package/dist/util/swipeable-list-item.js +32 -0
  383. package/dist/util/theme-mode.d.ts +79 -0
  384. package/dist/util/theme-mode.js +121 -0
  385. package/dist/util/toaster.d.ts +92 -0
  386. package/dist/util/toaster.js +75 -0
  387. package/dist/util/tooltip.d.ts +9 -0
  388. package/dist/util/tooltip.js +18 -0
  389. package/dist/util/top-navbar.d.ts +10 -0
  390. package/dist/util/top-navbar.js +5 -0
  391. package/dist/util/touch-target.d.ts +30 -0
  392. package/dist/util/touch-target.js +30 -0
  393. package/dist/util/zabi-strings.d.ts +132 -0
  394. package/dist/util/zabi-strings.js +105 -0
  395. package/dist/zabi-components-colors.css +5 -2
  396. package/dist/zabi-components-theme-dark-only.css +574 -225
  397. package/dist/zabi-components-theme-dark.css +574 -225
  398. package/dist/zabi-components-theme-only.css +1680 -317
  399. package/dist/zabi-components-theme.css +1680 -317
  400. package/dist/zabi-components.css +4473 -1158
  401. package/docs/lucide-icons.md +41 -16
  402. package/docs/theme-imports.md +81 -11
  403. package/package.json +51 -29
  404. package/dist/lib/layout-width-tokens.d.ts +0 -17
  405. package/dist/lib/layout-width-tokens.d.ts.map +0 -1
  406. package/dist/lib/showcase/component-docs/Button.d.ts +0 -3
  407. package/dist/lib/showcase/component-docs/Button.d.ts.map +0 -1
  408. package/dist/lib/showcase/component-docs/Input.d.ts +0 -3
  409. package/dist/lib/showcase/component-docs/Input.d.ts.map +0 -1
  410. package/dist/lib/showcase/component-docs/List.d.ts +0 -3
  411. package/dist/lib/showcase/component-docs/List.d.ts.map +0 -1
  412. package/dist/lib/showcase/component-docs/Modal.d.ts +0 -3
  413. package/dist/lib/showcase/component-docs/Modal.d.ts.map +0 -1
  414. package/dist/lib/showcase/component-docs/Radio.d.ts +0 -3
  415. package/dist/lib/showcase/component-docs/Radio.d.ts.map +0 -1
  416. package/dist/lib/showcase/component-docs/SidebarNavigation.d.ts +0 -3
  417. package/dist/lib/showcase/component-docs/SidebarNavigation.d.ts.map +0 -1
  418. package/dist/lib/showcase/component-docs/Skeleton.d.ts +0 -3
  419. package/dist/lib/showcase/component-docs/Skeleton.d.ts.map +0 -1
  420. package/dist/lib/showcase/component-docs/_shared.d.ts +0 -12
  421. package/dist/lib/showcase/component-docs/_shared.d.ts.map +0 -1
  422. package/dist/lib/showcase/component-docs/index.d.ts +0 -4
  423. package/dist/lib/showcase/component-docs/index.d.ts.map +0 -1
  424. package/dist/lib/showcase/components-catalog.d.ts +0 -3
  425. package/dist/lib/showcase/components-catalog.d.ts.map +0 -1
  426. package/dist/lib/showcase/components-showcase-constants.d.ts +0 -89
  427. package/dist/lib/showcase/components-showcase-constants.d.ts.map +0 -1
  428. package/dist/lib/showcase/docs-sidebar-helpers.d.ts +0 -15
  429. package/dist/lib/showcase/docs-sidebar-helpers.d.ts.map +0 -1
  430. package/dist/routes/lib/focus-utils.d.ts +0 -12
  431. package/dist/routes/lib/focus-utils.ts +0 -110
  432. package/dist/routes/lib/ssr-safe.ts +0 -58
  433. package/scripts/fix-lucide-svelte-icon-dts.js +0 -35
package/dist/index.d.ts CHANGED
@@ -9,11 +9,14 @@ export { default as CardFooter } from './atoms/CardFooter.svelte';
9
9
  export { default as Input } from './atoms/Input.svelte';
10
10
  export { default as Textarea } from './atoms/Textarea.svelte';
11
11
  export { default as Select } from './atoms/Select.svelte';
12
+ export { default as Slider } from './atoms/Slider.svelte';
12
13
  export { default as ColorPicker } from './atoms/ColorPicker.svelte';
13
14
  export { default as List } from './atoms/List.svelte';
14
15
  export { default as ListItem } from './atoms/ListItem.svelte';
15
16
  export { default as Heading } from './atoms/Heading.svelte';
16
17
  export { default as ThemeToggle } from './atoms/ThemeToggle.svelte';
18
+ export { DEFAULT_THEME_STORAGE_KEY, THEME_MODES, getStoredThemeMode, getThemeMode, isThemeDark, isThemeMode, setThemeMode, storeThemeMode, themeInitScript, } from './util/theme-mode.js';
19
+ export type { SetThemeModeOptions, ThemeMode, ThemeToggleLabels } from './util/theme-mode.js';
17
20
  export { default as Divider } from './atoms/Divider.svelte';
18
21
  export { default as Container } from './atoms/Container.svelte';
19
22
  export { default as Text } from './atoms/Text.svelte';
@@ -28,20 +31,32 @@ export { default as CodeBlock } from './atoms/CodeBlock.svelte';
28
31
  export { default as FeatureCard } from './atoms/FeatureCard.svelte';
29
32
  export { default as OptimizedImage } from './atoms/OptimizedImage.svelte';
30
33
  export { default as ActionPanel } from './atoms/ActionPanel.svelte';
34
+ export { default as Spinner } from './atoms/Spinner.svelte';
35
+ export { default as Rating } from './atoms/Rating.svelte';
36
+ export type { RatingStrings } from './util/rating.js';
37
+ export { default as FloatingActionButton } from './atoms/FloatingActionButton.svelte';
38
+ export { default as DateField } from './atoms/DateField.svelte';
39
+ export { default as TimeField } from './atoms/TimeField.svelte';
31
40
  export { default as Alert } from './molecules/Alert.svelte';
32
41
  export { default as ComponentDemo } from './molecules/ComponentDemo.svelte';
33
42
  export { default as ContactForm } from './molecules/ContactForm.svelte';
34
43
  export { default as Dropdown } from './molecules/Dropdown.svelte';
44
+ export { default as DropdownItem } from './molecules/DropdownItem.svelte';
45
+ export type { DropdownItemIcon, DropdownItemTone, DropdownOption, } from './util/dropdown.js';
35
46
  export { default as Form } from './molecules/Form.svelte';
36
47
  export { default as FormField } from './molecules/FormField.svelte';
37
48
  export { default as Header } from './molecules/Header.svelte';
38
49
  export { default as EmptyState } from './molecules/EmptyState.svelte';
39
50
  export { default as Toaster } from './molecules/Toaster.svelte';
40
51
  export { default as ImageUpload } from './molecules/ImageUpload.svelte';
52
+ export { default as MediaGrid } from './molecules/MediaGrid.svelte';
53
+ export type { MediaGridItemType, MediaGridKey, MediaGridSelectDetail, MediaGridStrings, } from './util/media-grid.js';
41
54
  export { default as Modal } from './molecules/Modal.svelte';
42
55
  export { default as SlideUp } from './molecules/SlideUp.svelte';
43
56
  export { default as Tabs } from './molecules/Tabs.svelte';
44
57
  export { default as RadioGroup } from './molecules/RadioGroup.svelte';
58
+ export { default as SegmentedControl } from './molecules/SegmentedControl.svelte';
59
+ export type { SegmentedControlIcon, SegmentedControlOption, } from './util/segmented-control.js';
45
60
  export { default as NavigationMenu } from './molecules/NavigationMenu.svelte';
46
61
  export { default as NavigationMenuList } from './molecules/NavigationMenuList.svelte';
47
62
  export { default as NavigationMenuItem } from './molecules/NavigationMenuItem.svelte';
@@ -53,12 +68,63 @@ export { default as Section } from './molecules/Section.svelte';
53
68
  export { default as SidebarBrandHeader } from './molecules/SidebarBrandHeader.svelte';
54
69
  export { default as SidebarFooter } from './molecules/SidebarFooter.svelte';
55
70
  export { default as SidebarNavSection } from './molecules/SidebarNavSection.svelte';
56
- export { toastStore, pushToast, dismissToast, type ToastItem, type ToastLevel, } from './molecules/toast-store.js';
71
+ export { default as SortableList } from './molecules/SortableList.svelte';
72
+ export type { SortableListAnnouncement, SortableListReorderDetail, SortableListRow, SortableListStrings, } from './util/sortable-list.js';
73
+ export { default as Collapsible } from './molecules/Collapsible.svelte';
74
+ export { default as SwipeableListItem } from './molecules/SwipeableListItem.svelte';
75
+ export { DEFAULT_SWIPEABLE_LIST_ITEM_STRINGS } from './util/swipeable-list-item.js';
76
+ export type { SwipeableListItemAction, SwipeableListItemStrings } from './util/swipeable-list-item.js';
77
+ export { default as PullToRefresh } from './molecules/PullToRefresh.svelte';
78
+ export { DEFAULT_PULL_TO_REFRESH_STRINGS } from './util/pull-to-refresh.js';
79
+ export type { PullToRefreshStrings } from './util/pull-to-refresh.js';
80
+ export { default as CollapsibleGroup } from './molecules/CollapsibleGroup.svelte';
81
+ export type { CollapsibleHeadingLevel, CollapsibleTriggerProps, CollapsibleTriggerState, } from './util/collapsible.js';
82
+ export { default as ConfirmDialog } from './molecules/ConfirmDialog.svelte';
83
+ export type { ConfirmDialogCancelReason, ConfirmDialogResult, ConfirmDialogVariant, } from './util/confirm-dialog.js';
84
+ export { default as Drawer } from './molecules/Drawer.svelte';
85
+ export type { DrawerCloseReason, DrawerSide, DrawerSize, } from './util/drawer.js';
86
+ export { default as UnsavedChangesBar } from './molecules/UnsavedChangesBar.svelte';
87
+ export { default as AppBar } from './molecules/AppBar.svelte';
88
+ export { default as BottomTabBar } from './molecules/BottomTabBar.svelte';
89
+ export type { BottomTabBarIcon, BottomTabBarItem, } from './util/bottom-tab-bar.js';
90
+ export { default as BottomSheet } from './molecules/BottomSheet.svelte';
91
+ export type { BottomSheetCloseReason, BottomSheetSnap, } from './util/bottom-sheet.js';
92
+ export { default as StickyActionBar } from './molecules/StickyActionBar.svelte';
93
+ export { default as Calendar } from './molecules/Calendar.svelte';
94
+ export type { CalendarEvent, CalendarStrings, CalendarTone, } from './util/calendar.js';
95
+ export { default as PhotoGrid } from './molecules/PhotoGrid.svelte';
96
+ export { default as PhotoViewer } from './molecules/PhotoViewer.svelte';
97
+ export type { Photo, PhotoGridSelectDetail, PhotoGridStrings, PhotoKey, PhotoViewerAction, PhotoViewerCloseReason, PhotoViewerStrings, } from './util/photo.js';
98
+ export { default as Avatar } from './atoms/Avatar.svelte';
99
+ export { default as AvatarGroup } from './molecules/AvatarGroup.svelte';
100
+ export { DEFAULT_AVATAR_GROUP_STRINGS } from './util/avatar.js';
101
+ export type { AvatarGroupStrings, AvatarPerson, AvatarSize } from './util/avatar.js';
102
+ export { default as Stepper } from './molecules/Stepper.svelte';
103
+ export type { StepperItem, StepperLayout, StepperStep, StepperStepState, StepperStrings, } from './util/stepper.js';
104
+ export { toastStore, pushToast, dismissToast, focusToasts, type ToastItem, type ToastAction, type ToastLevel, } from './molecules/toast-store.js';
105
+ export { DEFAULT_TOASTER_STRINGS, TOAST_DURATIONS } from './util/toaster.js';
106
+ export type { ToasterStrings, ToastPauseChange, ToastDuration } from './util/toaster.js';
107
+ export { DEFAULT_SELECT_STRINGS } from './util/select.js';
108
+ export type { SelectStrings, SelectPresentation } from './util/select.js';
109
+ export { DEFAULT_TOP_NAVBAR_STRINGS } from './util/top-navbar.js';
110
+ export type { TopNavbarStrings } from './util/top-navbar.js';
111
+ export { DEFAULT_SIDEBAR_ACCOUNT_PANEL_STRINGS, DEFAULT_SIDEBAR_BRAND_HEADER_STRINGS, DEFAULT_SIDEBAR_FOOTER_STRINGS, DEFAULT_SIDEBAR_NAVIGATION_STRINGS, } from './util/sidebar.js';
112
+ export type { SidebarAccountPanelStrings, SidebarBrandHeaderStrings, SidebarFooterStrings, SidebarNavigationStrings, } from './util/sidebar.js';
113
+ export { DEFAULT_COLOR_PICKER_STRINGS, DEFAULT_COMPONENT_DEMO_STRINGS, DEFAULT_CONTACT_FORM_STRINGS, DEFAULT_PROPS_TABLE_STRINGS, } from './util/ready-made-strings.js';
114
+ export type { ColorPickerStrings, ComponentDemoStrings, ContactFormStrings, PropsTableStrings, } from './util/ready-made-strings.js';
57
115
  export { default as TopNavbar } from './organisms/TopNavbar.svelte';
58
116
  export { default as SidebarNavigation } from './organisms/SidebarNavigation.svelte';
117
+ export { default as SidebarShell } from './organisms/SidebarShell.svelte';
59
118
  export { default as SidebarAccountPanel } from './organisms/SidebarAccountPanel.svelte';
60
119
  export { default as SidebarPanel } from './organisms/SidebarPanel.svelte';
61
- export declare const generateId: (prefix?: string) => string;
120
+ export { default as AppShell } from './organisms/AppShell.svelte';
121
+ import { generateId } from './util/ssr-safe.js';
122
+ export { generateId };
123
+ /**
124
+ * Dates and times for reading, in the page's language: what a DateField or a
125
+ * TimeField holds (`2026-10-06`, `19:00`) as "6 okt. 2026" and "19:00".
126
+ */
127
+ export { formatDate, formatTime } from './util/date.js';
62
128
  export declare const createId: (prefix?: string) => string;
63
129
  export declare const cn: (...classes: (string | undefined | null | false)[]) => string;
64
130
  export declare const getFormData: (form: HTMLFormElement) => Record<string, unknown>;
@@ -68,4 +134,18 @@ export declare const isBrowser: () => boolean;
68
134
  export declare const safeWindow: () => Window | undefined;
69
135
  export declare const safeDocument: () => Document | undefined;
70
136
  export declare const safeLocalStorage: () => Storage | undefined;
71
- export { Sun, Moon, Monitor, Grip, GripVertical, ChevronUp, ChevronDown, ChevronRight, Zap, Briefcase, Clipboard, Settings, } from '@lucide/svelte';
137
+ export { default as Sun } from '@lucide/svelte/icons/sun';
138
+ export { default as Moon } from '@lucide/svelte/icons/moon';
139
+ export { default as Monitor } from '@lucide/svelte/icons/monitor';
140
+ export { default as Grip } from '@lucide/svelte/icons/grip';
141
+ export { default as GripVertical } from '@lucide/svelte/icons/grip-vertical';
142
+ export { default as ChevronUp } from '@lucide/svelte/icons/chevron-up';
143
+ export { default as ChevronDown } from '@lucide/svelte/icons/chevron-down';
144
+ export { default as ChevronRight } from '@lucide/svelte/icons/chevron-right';
145
+ export { default as Zap } from '@lucide/svelte/icons/zap';
146
+ export { default as Briefcase } from '@lucide/svelte/icons/briefcase';
147
+ export { default as Clipboard } from '@lucide/svelte/icons/clipboard';
148
+ export { default as Settings } from '@lucide/svelte/icons/settings';
149
+ export { default as ZabiStringsProvider } from './atoms/ZabiStringsProvider.svelte';
150
+ export { DEFAULT_ZABI_COMMON_STRINGS, getZabiStrings } from './util/zabi-strings.js';
151
+ export type { ZabiStrings, ZabiCommonStrings, ZabiStringsContext, AlertTexts, CodeBlockTexts, ImageUploadTexts, ToastTexts, UnsavedChangesBarTexts } from './util/zabi-strings.js';
package/dist/index.js CHANGED
@@ -9,11 +9,13 @@ export { default as CardFooter } from './atoms/CardFooter.svelte';
9
9
  export { default as Input } from './atoms/Input.svelte';
10
10
  export { default as Textarea } from './atoms/Textarea.svelte';
11
11
  export { default as Select } from './atoms/Select.svelte';
12
+ export { default as Slider } from './atoms/Slider.svelte';
12
13
  export { default as ColorPicker } from './atoms/ColorPicker.svelte';
13
14
  export { default as List } from './atoms/List.svelte';
14
15
  export { default as ListItem } from './atoms/ListItem.svelte';
15
16
  export { default as Heading } from './atoms/Heading.svelte';
16
17
  export { default as ThemeToggle } from './atoms/ThemeToggle.svelte';
18
+ export { DEFAULT_THEME_STORAGE_KEY, THEME_MODES, getStoredThemeMode, getThemeMode, isThemeDark, isThemeMode, setThemeMode, storeThemeMode, themeInitScript, } from './util/theme-mode.js';
17
19
  export { default as Divider } from './atoms/Divider.svelte';
18
20
  export { default as Container } from './atoms/Container.svelte';
19
21
  export { default as Text } from './atoms/Text.svelte';
@@ -28,20 +30,28 @@ export { default as CodeBlock } from './atoms/CodeBlock.svelte';
28
30
  export { default as FeatureCard } from './atoms/FeatureCard.svelte';
29
31
  export { default as OptimizedImage } from './atoms/OptimizedImage.svelte';
30
32
  export { default as ActionPanel } from './atoms/ActionPanel.svelte';
33
+ export { default as Spinner } from './atoms/Spinner.svelte';
34
+ export { default as Rating } from './atoms/Rating.svelte';
35
+ export { default as FloatingActionButton } from './atoms/FloatingActionButton.svelte';
36
+ export { default as DateField } from './atoms/DateField.svelte';
37
+ export { default as TimeField } from './atoms/TimeField.svelte';
31
38
  export { default as Alert } from './molecules/Alert.svelte';
32
39
  export { default as ComponentDemo } from './molecules/ComponentDemo.svelte';
33
40
  export { default as ContactForm } from './molecules/ContactForm.svelte';
34
41
  export { default as Dropdown } from './molecules/Dropdown.svelte';
42
+ export { default as DropdownItem } from './molecules/DropdownItem.svelte';
35
43
  export { default as Form } from './molecules/Form.svelte';
36
44
  export { default as FormField } from './molecules/FormField.svelte';
37
45
  export { default as Header } from './molecules/Header.svelte';
38
46
  export { default as EmptyState } from './molecules/EmptyState.svelte';
39
47
  export { default as Toaster } from './molecules/Toaster.svelte';
40
48
  export { default as ImageUpload } from './molecules/ImageUpload.svelte';
49
+ export { default as MediaGrid } from './molecules/MediaGrid.svelte';
41
50
  export { default as Modal } from './molecules/Modal.svelte';
42
51
  export { default as SlideUp } from './molecules/SlideUp.svelte';
43
52
  export { default as Tabs } from './molecules/Tabs.svelte';
44
53
  export { default as RadioGroup } from './molecules/RadioGroup.svelte';
54
+ export { default as SegmentedControl } from './molecules/SegmentedControl.svelte';
45
55
  export { default as NavigationMenu } from './molecules/NavigationMenu.svelte';
46
56
  export { default as NavigationMenuList } from './molecules/NavigationMenuList.svelte';
47
57
  export { default as NavigationMenuItem } from './molecules/NavigationMenuItem.svelte';
@@ -53,17 +63,46 @@ export { default as Section } from './molecules/Section.svelte';
53
63
  export { default as SidebarBrandHeader } from './molecules/SidebarBrandHeader.svelte';
54
64
  export { default as SidebarFooter } from './molecules/SidebarFooter.svelte';
55
65
  export { default as SidebarNavSection } from './molecules/SidebarNavSection.svelte';
56
- export { toastStore, pushToast, dismissToast, } from './molecules/toast-store.js';
66
+ export { default as SortableList } from './molecules/SortableList.svelte';
67
+ export { default as Collapsible } from './molecules/Collapsible.svelte';
68
+ export { default as SwipeableListItem } from './molecules/SwipeableListItem.svelte';
69
+ export { DEFAULT_SWIPEABLE_LIST_ITEM_STRINGS } from './util/swipeable-list-item.js';
70
+ export { default as PullToRefresh } from './molecules/PullToRefresh.svelte';
71
+ export { DEFAULT_PULL_TO_REFRESH_STRINGS } from './util/pull-to-refresh.js';
72
+ export { default as CollapsibleGroup } from './molecules/CollapsibleGroup.svelte';
73
+ export { default as ConfirmDialog } from './molecules/ConfirmDialog.svelte';
74
+ export { default as Drawer } from './molecules/Drawer.svelte';
75
+ export { default as UnsavedChangesBar } from './molecules/UnsavedChangesBar.svelte';
76
+ export { default as AppBar } from './molecules/AppBar.svelte';
77
+ export { default as BottomTabBar } from './molecules/BottomTabBar.svelte';
78
+ export { default as BottomSheet } from './molecules/BottomSheet.svelte';
79
+ export { default as StickyActionBar } from './molecules/StickyActionBar.svelte';
80
+ export { default as Calendar } from './molecules/Calendar.svelte';
81
+ export { default as PhotoGrid } from './molecules/PhotoGrid.svelte';
82
+ export { default as PhotoViewer } from './molecules/PhotoViewer.svelte';
83
+ export { default as Avatar } from './atoms/Avatar.svelte';
84
+ export { default as AvatarGroup } from './molecules/AvatarGroup.svelte';
85
+ export { DEFAULT_AVATAR_GROUP_STRINGS } from './util/avatar.js';
86
+ export { default as Stepper } from './molecules/Stepper.svelte';
87
+ export { toastStore, pushToast, dismissToast, focusToasts, } from './molecules/toast-store.js';
88
+ export { DEFAULT_TOASTER_STRINGS, TOAST_DURATIONS } from './util/toaster.js';
89
+ export { DEFAULT_SELECT_STRINGS } from './util/select.js';
90
+ export { DEFAULT_TOP_NAVBAR_STRINGS } from './util/top-navbar.js';
91
+ export { DEFAULT_SIDEBAR_ACCOUNT_PANEL_STRINGS, DEFAULT_SIDEBAR_BRAND_HEADER_STRINGS, DEFAULT_SIDEBAR_FOOTER_STRINGS, DEFAULT_SIDEBAR_NAVIGATION_STRINGS, } from './util/sidebar.js';
92
+ export { DEFAULT_COLOR_PICKER_STRINGS, DEFAULT_COMPONENT_DEMO_STRINGS, DEFAULT_CONTACT_FORM_STRINGS, DEFAULT_PROPS_TABLE_STRINGS, } from './util/ready-made-strings.js';
57
93
  export { default as TopNavbar } from './organisms/TopNavbar.svelte';
58
94
  export { default as SidebarNavigation } from './organisms/SidebarNavigation.svelte';
95
+ export { default as SidebarShell } from './organisms/SidebarShell.svelte';
59
96
  export { default as SidebarAccountPanel } from './organisms/SidebarAccountPanel.svelte';
60
97
  export { default as SidebarPanel } from './organisms/SidebarPanel.svelte';
61
- export const generateId = (prefix = 'id') => {
62
- if (typeof window !== 'undefined') {
63
- return `${prefix}-${Math.random().toString(36).substr(2, 9)}`;
64
- }
65
- return `${prefix}-ssr-${Date.now()}`;
66
- };
98
+ export { default as AppShell } from './organisms/AppShell.svelte';
99
+ import { generateId } from './util/ssr-safe.js';
100
+ export { generateId };
101
+ /**
102
+ * Dates and times for reading, in the page's language: what a DateField or a
103
+ * TimeField holds (`2026-10-06`, `19:00`) as "6 okt. 2026" and "19:00".
104
+ */
105
+ export { formatDate, formatTime } from './util/date.js';
67
106
  export const createId = (prefix = 'id') => generateId(prefix);
68
107
  export const cn = (...classes) => classes.filter(Boolean).join(' ');
69
108
  export const getFormData = (form) => {
@@ -89,4 +128,17 @@ export const safeDocument = () => {
89
128
  export const safeLocalStorage = () => {
90
129
  return typeof window !== 'undefined' ? localStorage : undefined;
91
130
  };
92
- export { Sun, Moon, Monitor, Grip, GripVertical, ChevronUp, ChevronDown, ChevronRight, Zap, Briefcase, Clipboard, Settings, } from '@lucide/svelte';
131
+ export { default as Sun } from '@lucide/svelte/icons/sun';
132
+ export { default as Moon } from '@lucide/svelte/icons/moon';
133
+ export { default as Monitor } from '@lucide/svelte/icons/monitor';
134
+ export { default as Grip } from '@lucide/svelte/icons/grip';
135
+ export { default as GripVertical } from '@lucide/svelte/icons/grip-vertical';
136
+ export { default as ChevronUp } from '@lucide/svelte/icons/chevron-up';
137
+ export { default as ChevronDown } from '@lucide/svelte/icons/chevron-down';
138
+ export { default as ChevronRight } from '@lucide/svelte/icons/chevron-right';
139
+ export { default as Zap } from '@lucide/svelte/icons/zap';
140
+ export { default as Briefcase } from '@lucide/svelte/icons/briefcase';
141
+ export { default as Clipboard } from '@lucide/svelte/icons/clipboard';
142
+ export { default as Settings } from '@lucide/svelte/icons/settings';
143
+ export { default as ZabiStringsProvider } from './atoms/ZabiStringsProvider.svelte';
144
+ export { DEFAULT_ZABI_COMMON_STRINGS, getZabiStrings } from './util/zabi-strings.js';
@@ -1,5 +1,13 @@
1
1
  <script lang="ts">
2
+ import { DEFAULT_ALERT_TEXTS, zabiStringsFor } from "../util/zabi-strings.js";
3
+ import Check from "@lucide/svelte/icons/check";
4
+ import TriangleAlert from "@lucide/svelte/icons/triangle-alert";
5
+ import X from "@lucide/svelte/icons/x";
6
+ import Info from "@lucide/svelte/icons/info";
7
+ import Zap from "@lucide/svelte/icons/zap";
2
8
  import type { ExtendedSemanticVariant } from "../types/variants.js";
9
+ import { cn } from "../util/cn.js";
10
+ import { TOUCH_HIT_AREA } from "../util/touch-target.js";
3
11
  type AlertVisualVariant = Exclude<ExtendedSemanticVariant, "default">;
4
12
 
5
13
  interface Props {
@@ -7,6 +15,14 @@
7
15
  title?: string;
8
16
  message?: string;
9
17
  closable?: boolean;
18
+ /** Accessible name of the dismiss button a `closable` alert has. */
19
+ closeLabel?: string;
20
+ /** Visible state; `closable` dismiss sets it to `false`. Supports `bind:open`. */
21
+ open?: boolean;
22
+ /** Shrink to content instead of filling the container. */
23
+ inline?: boolean;
24
+ class?: string;
25
+ /** @deprecated use `class` — kept so 7.x call sites keep working. */
10
26
  className?: string;
11
27
  onclick?: (event: Event) => void;
12
28
  }
@@ -16,13 +32,33 @@
16
32
  title = "",
17
33
  message = "",
18
34
  closable = false,
35
+ closeLabel: closeLabelGiven,
36
+ open = $bindable<Exclude<Props["open"], undefined>>(),
37
+ inline = false,
38
+ class: classProp = "",
19
39
  className = "",
20
40
  onclick,
21
41
  children,
22
42
  ...restProps
23
43
  }: Props & { children?: any } = $props();
24
44
 
45
+ /** Each text: the prop, else the app-wide word from a `ZabiStringsProvider` above this one, else English. */
46
+ const provided = zabiStringsFor("alert");
47
+ const closeLabel = $derived(closeLabelGiven ?? provided()?.closeLabel ?? DEFAULT_ALERT_TEXTS.closeLabel);
48
+
49
+ // No fallback on a bindable prop: Svelte refuses `bind:…={undefined}` on
50
+ // one that has a fallback (`props_invalid_value`), and a page that throws
51
+ // while it hydrates never becomes interactive. The default is applied
52
+ // here instead: at once, for the server and the first render, and again
53
+ // whenever a parent hands back `undefined`.
54
+ const applyDefaults = () => {
55
+ if (open === undefined) open = true;
56
+ };
57
+ applyDefaults();
58
+ $effect.pre(applyDefaults);
59
+
25
60
  function handleDismiss(event: MouseEvent) {
61
+ open = false;
26
62
  if (onclick) {
27
63
  onclick(event);
28
64
  }
@@ -32,13 +68,20 @@
32
68
  variant === "default" ? "info" : variant,
33
69
  );
34
70
 
71
+ /**
72
+ * A tinted fill plus a tinted edge, not a bare 1px outline on a
73
+ * transparent ground — an outline-only alert on a light page barely
74
+ * registers, and the pale warning and citron borders were close to
75
+ * invisible. The icon carries the family colour at its `-text` step.
76
+ */
35
77
  let alertClasses = $derived({
36
- info: "text-info border border-info",
37
- success: "text-success border border-success",
38
- warning: "text-warning border border-warning",
39
- error: "text-error border border-error",
40
- neutral: "text-neutral border border-neutral",
41
- energetic: "text-energetic border border-energetic",
78
+ info: "bg-info-subtle border-info-border text-info-text",
79
+ success: "bg-success-subtle border-success-border text-success-text",
80
+ warning: "bg-warning-subtle border-warning-border text-warning-text",
81
+ error: "bg-error-subtle border-error-border text-error-text",
82
+ neutral: "bg-neutral-subtle border-neutral-border text-neutral-text",
83
+ energetic:
84
+ "bg-energetic-subtle border-energetic-border text-energetic-text",
42
85
  });
43
86
 
44
87
  let alertRole = $derived(
@@ -48,87 +91,50 @@
48
91
 
49
92
  {#snippet icon()}
50
93
  {#if visualVariant === "info"}
51
- <svg class="h-5 w-5" fill="currentColor" viewBox="0 0 20 20">
52
- <path
53
- fill-rule="evenodd"
54
- d="M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7-4a1 1 0 11-2 0 1 1 0 012 0zM9 9a1 1 0 000 2v3a1 1 0 001 1h1a1 1 0 100-2v-3a1 1 0 00-1-1H9z"
55
- clip-rule="evenodd"
56
- />
57
- </svg>
94
+ <Info size={20} aria-hidden="true" />
58
95
  {:else if visualVariant === "success"}
59
- <svg class="h-5 w-5" fill="currentColor" viewBox="0 0 20 20">
60
- <path
61
- fill-rule="evenodd"
62
- d="M10 18a8 8 0 100-16 8 8 0 000 16zm3.707-9.293a1 1 0 00-1.414-1.414L9 10.586 7.707 9.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4z"
63
- clip-rule="evenodd"
64
- />
65
- </svg>
96
+ <Check size={20} aria-hidden="true" />
66
97
  {:else if visualVariant === "warning"}
67
- <svg class="h-5 w-5" fill="currentColor" viewBox="0 0 20 20">
68
- <path
69
- fill-rule="evenodd"
70
- d="M8.257 3.099c.765-1.36 2.722-1.36 3.486 0l5.58 9.92c.75 1.334-.213 2.98-1.742 2.98H4.42c-1.53 0-2.493-1.646-1.743-2.98l5.58-9.92zM11 13a1 1 0 11-2 0 1 1 0 012 0zm-1-8a1 1 0 00-1 1v3a1 1 0 002 0V6a1 1 0 00-1-1z"
71
- clip-rule="evenodd"
72
- />
73
- </svg>
98
+ <TriangleAlert size={20} aria-hidden="true" />
74
99
  {:else if visualVariant === "error"}
75
- <svg class="h-5 w-5" fill="currentColor" viewBox="0 0 20 20">
76
- <path
77
- fill-rule="evenodd"
78
- d="M10 18a8 8 0 100-16 8 8 0 000 16zM8.707 7.293a1 1 0 00-1.414 1.414L8.586 10l-1.293 1.293a1 1 0 101.414 1.414L10 11.414l1.293 1.293a1 1 0 001.414-1.414L11.414 10l1.293-1.293a1 1 0 00-1.414-1.414L10 8.586 8.707 7.293z"
79
- clip-rule="evenodd"
80
- />
81
- </svg>
100
+ <X size={20} aria-hidden="true" />
82
101
  {:else if visualVariant === "neutral"}
83
- <svg class="h-5 w-5" fill="currentColor" viewBox="0 0 20 20">
84
- <path
85
- fill-rule="evenodd"
86
- d="M18 10a8 8 0 11-16 0 8 8 0 0116 0zM10 9a1 1 0 100 2 1 1 0 000-2z"
87
- clip-rule="evenodd"
88
- />
89
- </svg>
102
+ <Info size={20} aria-hidden="true" />
90
103
  {:else}
91
- <svg class="h-5 w-5" fill="currentColor" viewBox="0 0 20 20">
92
- <path d="M11 3L4 14h6l-1 7 7-11h-6l1-7z" />
93
- </svg>
104
+ <Zap size={20} aria-hidden="true" />
94
105
  {/if}
95
106
  {/snippet}
96
107
 
108
+ {#if open}
97
109
  <div
98
- class="relative rounded-md p-4 border {alertClasses[
99
- visualVariant
100
- ]} transition-all duration-200 motion-reduce:transition-none {className}"
110
+ class={cn(
111
+ 'relative rounded-container p-4 border',
112
+ inline ? 'inline-block' : 'block w-full',
113
+ alertClasses[visualVariant],
114
+ 'transition-colors duration-150 motion-reduce:transition-none',
115
+ classProp,
116
+ className,
117
+ )}
101
118
  role={alertRole}
102
- aria-live={visualVariant === "success" || visualVariant === "info"
103
- ? "polite"
104
- : "assertive"}
105
119
  aria-atomic="true"
106
120
  {...restProps}
107
121
  >
108
122
  {#if closable}
123
+ <!-- At the end edge (`end-2`), so it is on the left in a right-to-left
124
+ layout, and the text keeps clear of it on that side (`pe-8`).
125
+ Nested corners: 0.5rem (`end-2 top-2`) and the 1px border inside
126
+ the alert's corner, so the radius is the alert's less that gap. -->
109
127
  <button
110
128
  onclick={handleDismiss}
111
- class="group absolute right-2 top-2 z-10 flex h-6 w-6 cursor-pointer items-center justify-center rounded-full text-description transition-colors duration-200 hover:text-body motion-reduce:transition-none focus-ring"
112
- aria-label="Dismiss alert"
129
+ class="absolute end-2 top-2 z-10 flex size-6 cursor-pointer items-center justify-center rounded-[calc(var(--radius-container)-0.5rem-1px)] text-description transition-colors duration-150 hover:bg-surface-hover hover:text-body active:bg-surface-active motion-reduce:transition-none focus-ring focus-ring--muted {TOUCH_HIT_AREA}"
130
+ aria-label={closeLabel}
113
131
  type="button"
114
132
  >
115
- <svg
116
- class="w-4 h-4 text-current group-hover:scale-110 transition-transform duration-200 motion-reduce:transition-none"
117
- fill="none"
118
- stroke="currentColor"
119
- viewBox="0 0 24 24"
120
- >
121
- <path
122
- stroke-linecap="round"
123
- stroke-linejoin="round"
124
- stroke-width="2"
125
- d="M6 18L18 6M6 6l12 12"
126
- />
127
- </svg>
133
+ <X size={16} aria-hidden="true" />
128
134
  </button>
129
135
  {/if}
130
136
 
131
- <div class="flex items-start gap-3 {closable ? 'pr-8' : ''}">
137
+ <div class="flex items-start gap-3 {closable ? 'pe-8' : ''}">
132
138
  <div class="shrink-0 mt-0.5">
133
139
  {@render icon()}
134
140
  </div>
@@ -148,3 +154,4 @@
148
154
  </div>
149
155
  </div>
150
156
  </div>
157
+ {/if}
@@ -4,12 +4,20 @@ interface Props {
4
4
  title?: string;
5
5
  message?: string;
6
6
  closable?: boolean;
7
+ /** Accessible name of the dismiss button a `closable` alert has. */
8
+ closeLabel?: string;
9
+ /** Visible state; `closable` dismiss sets it to `false`. Supports `bind:open`. */
10
+ open?: boolean;
11
+ /** Shrink to content instead of filling the container. */
12
+ inline?: boolean;
13
+ class?: string;
14
+ /** @deprecated use `class` — kept so 7.x call sites keep working. */
7
15
  className?: string;
8
16
  onclick?: (event: Event) => void;
9
17
  }
10
18
  type $$ComponentProps = Props & {
11
19
  children?: any;
12
20
  };
13
- declare const Alert: import("svelte").Component<$$ComponentProps, {}, "">;
21
+ declare const Alert: import("svelte").Component<$$ComponentProps, {}, "open">;
14
22
  type Alert = ReturnType<typeof Alert>;
15
23
  export default Alert;