zabi-components 8.0.0 → 9.0.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 (456) hide show
  1. package/CHANGELOG.md +2935 -0
  2. package/README.md +243 -10
  3. package/THEME.md +162 -332
  4. package/THEMING.md +1419 -259
  5. package/dist/atoms/ActionPanel.svelte +15 -5
  6. package/dist/atoms/Avatar.svelte +120 -0
  7. package/dist/atoms/Avatar.svelte.d.ts +46 -0
  8. package/dist/atoms/Badge.svelte +71 -13
  9. package/dist/atoms/Badge.svelte.d.ts +8 -2
  10. package/dist/atoms/Block.svelte +74 -0
  11. package/dist/atoms/Block.svelte.d.ts +29 -0
  12. package/dist/atoms/Button.svelte +217 -30
  13. package/dist/atoms/Button.svelte.d.ts +33 -4
  14. package/dist/atoms/Card.svelte +182 -26
  15. package/dist/atoms/Card.svelte.d.ts +55 -3
  16. package/dist/atoms/CardHeader.svelte +16 -4
  17. package/dist/atoms/Checkbox.svelte +81 -21
  18. package/dist/atoms/Checkbox.svelte.d.ts +31 -2
  19. package/dist/atoms/Chip.svelte +351 -0
  20. package/dist/atoms/Chip.svelte.d.ts +57 -0
  21. package/dist/atoms/CodeBlock.svelte +20 -2
  22. package/dist/atoms/CodeBlock.svelte.d.ts +4 -0
  23. package/dist/atoms/CodeField.svelte +385 -0
  24. package/dist/atoms/CodeField.svelte.d.ts +61 -0
  25. package/dist/atoms/ColorPicker.svelte +260 -49
  26. package/dist/atoms/ColorPicker.svelte.d.ts +3 -0
  27. package/dist/atoms/Container.svelte +16 -8
  28. package/dist/atoms/DateField.svelte +145 -0
  29. package/dist/atoms/DateField.svelte.d.ts +81 -0
  30. package/dist/atoms/FieldMessages.svelte +69 -0
  31. package/dist/atoms/FieldMessages.svelte.d.ts +23 -0
  32. package/dist/atoms/FloatingActionButton.svelte +176 -0
  33. package/dist/atoms/FloatingActionButton.svelte.d.ts +51 -0
  34. package/dist/atoms/Heading.svelte +63 -5
  35. package/dist/atoms/Heading.svelte.d.ts +14 -0
  36. package/dist/atoms/IconButton.svelte +294 -26
  37. package/dist/atoms/IconButton.svelte.d.ts +62 -4
  38. package/dist/atoms/Input.svelte +259 -53
  39. package/dist/atoms/Input.svelte.d.ts +33 -2
  40. package/dist/atoms/List.svelte +5 -1
  41. package/dist/atoms/ListItem.svelte +70 -13
  42. package/dist/atoms/ListItem.svelte.d.ts +11 -0
  43. package/dist/atoms/PickerField.svelte +239 -0
  44. package/dist/atoms/PickerField.svelte.d.ts +67 -0
  45. package/dist/atoms/Progress.svelte +99 -19
  46. package/dist/atoms/Progress.svelte.d.ts +15 -1
  47. package/dist/atoms/Radio.svelte +51 -3
  48. package/dist/atoms/Radio.svelte.d.ts +30 -2
  49. package/dist/atoms/Rating.svelte +620 -0
  50. package/dist/atoms/Rating.svelte.d.ts +77 -0
  51. package/dist/atoms/Select.svelte +438 -98
  52. package/dist/atoms/Select.svelte.d.ts +61 -3
  53. package/dist/atoms/SelectionControl.svelte +193 -23
  54. package/dist/atoms/SelectionControl.svelte.d.ts +29 -3
  55. package/dist/atoms/Skeleton.svelte +114 -18
  56. package/dist/atoms/Skeleton.svelte.d.ts +30 -3
  57. package/dist/atoms/SkeletonGroup.svelte +43 -0
  58. package/dist/atoms/SkeletonGroup.svelte.d.ts +20 -0
  59. package/dist/atoms/Slider.svelte +344 -0
  60. package/dist/atoms/Slider.svelte.d.ts +40 -0
  61. package/dist/atoms/Sparkline.svelte +109 -0
  62. package/dist/atoms/Sparkline.svelte.d.ts +27 -0
  63. package/dist/atoms/SpeechBubble.svelte +187 -0
  64. package/dist/atoms/SpeechBubble.svelte.d.ts +33 -0
  65. package/dist/atoms/Spinner.svelte +57 -0
  66. package/dist/atoms/Spinner.svelte.d.ts +19 -0
  67. package/dist/atoms/Stat.svelte +72 -0
  68. package/dist/atoms/Stat.svelte.d.ts +19 -0
  69. package/dist/atoms/Table.svelte +151 -6
  70. package/dist/atoms/Table.svelte.d.ts +15 -3
  71. package/dist/atoms/TemporalField.svelte +472 -0
  72. package/dist/atoms/TemporalField.svelte.d.ts +48 -0
  73. package/dist/atoms/Text.svelte +23 -11
  74. package/dist/atoms/Text.svelte.d.ts +6 -3
  75. package/dist/atoms/Textarea.svelte +150 -44
  76. package/dist/atoms/Textarea.svelte.d.ts +35 -2
  77. package/dist/atoms/ThemeToggle.svelte +223 -44
  78. package/dist/atoms/ThemeToggle.svelte.d.ts +26 -3
  79. package/dist/atoms/TimeColumn.svelte +150 -0
  80. package/dist/atoms/TimeColumn.svelte.d.ts +25 -0
  81. package/dist/atoms/TimeField.svelte +151 -0
  82. package/dist/atoms/TimeField.svelte.d.ts +85 -0
  83. package/dist/atoms/Toast.svelte +22 -8
  84. package/dist/atoms/Toast.svelte.d.ts +2 -0
  85. package/dist/atoms/Toggle.svelte +98 -14
  86. package/dist/atoms/Toggle.svelte.d.ts +26 -2
  87. package/dist/atoms/Tooltip.svelte +528 -24
  88. package/dist/atoms/Tooltip.svelte.d.ts +18 -0
  89. package/dist/atoms/ZabiStringsProvider.svelte +45 -0
  90. package/dist/atoms/ZabiStringsProvider.svelte.d.ts +27 -0
  91. package/dist/atoms/index.d.ts +38 -0
  92. package/dist/atoms/index.js +29 -0
  93. package/dist/atoms/selection-control.styles.d.ts +47 -5
  94. package/dist/atoms/selection-control.styles.js +52 -10
  95. package/dist/components/atoms/index.d.ts +38 -0
  96. package/dist/components/atoms/index.d.ts.map +1 -1
  97. package/dist/components/atoms/selection-control.styles.d.ts +47 -5
  98. package/dist/components/atoms/selection-control.styles.d.ts.map +1 -1
  99. package/dist/components/index.d.ts +104 -2
  100. package/dist/components/index.d.ts.map +1 -1
  101. package/dist/components/map.d.ts +11 -0
  102. package/dist/components/map.d.ts.map +1 -0
  103. package/dist/components/molecules/index.d.ts +51 -0
  104. package/dist/components/molecules/index.d.ts.map +1 -1
  105. package/dist/components/molecules/toast-store.d.ts +83 -7
  106. package/dist/components/molecules/toast-store.d.ts.map +1 -1
  107. package/dist/components/organisms/index.d.ts +10 -0
  108. package/dist/components/organisms/index.d.ts.map +1 -1
  109. package/dist/components/types/variants.d.ts +24 -1
  110. package/dist/components/types/variants.d.ts.map +1 -1
  111. package/dist/components/util/app-shell.d.ts +79 -0
  112. package/dist/components/util/app-shell.d.ts.map +1 -0
  113. package/dist/components/util/avatar.d.ts +39 -0
  114. package/dist/components/util/avatar.d.ts.map +1 -0
  115. package/dist/components/util/bottom-sheet.d.ts +30 -0
  116. package/dist/components/util/bottom-sheet.d.ts.map +1 -0
  117. package/dist/components/util/bottom-tab-bar.d.ts +41 -0
  118. package/dist/components/util/bottom-tab-bar.d.ts.map +1 -0
  119. package/dist/components/util/calendar.d.ts +56 -0
  120. package/dist/components/util/calendar.d.ts.map +1 -0
  121. package/dist/components/util/chart.d.ts +140 -0
  122. package/dist/components/util/chart.d.ts.map +1 -0
  123. package/dist/components/util/chip.d.ts +66 -0
  124. package/dist/components/util/chip.d.ts.map +1 -0
  125. package/dist/components/util/cn.d.ts.map +1 -1
  126. package/dist/components/util/code-field.d.ts +63 -0
  127. package/dist/components/util/code-field.d.ts.map +1 -0
  128. package/dist/components/util/collapsible.d.ts +64 -0
  129. package/dist/components/util/collapsible.d.ts.map +1 -0
  130. package/dist/components/util/confirm-dialog.d.ts +12 -0
  131. package/dist/components/util/confirm-dialog.d.ts.map +1 -0
  132. package/dist/components/util/date.d.ts +96 -0
  133. package/dist/components/util/date.d.ts.map +1 -0
  134. package/dist/components/util/display-voice.d.ts +10 -0
  135. package/dist/components/util/display-voice.d.ts.map +1 -0
  136. package/dist/components/util/drawer.d.ts +13 -0
  137. package/dist/components/util/drawer.d.ts.map +1 -0
  138. package/dist/components/util/dropdown.d.ts +47 -0
  139. package/dist/components/util/dropdown.d.ts.map +1 -0
  140. package/dist/components/util/field-control.d.ts +30 -0
  141. package/dist/components/util/field-control.d.ts.map +1 -0
  142. package/dist/components/util/field.d.ts +45 -0
  143. package/dist/components/util/field.d.ts.map +1 -0
  144. package/dist/components/util/fit-in-viewport.d.ts +201 -0
  145. package/dist/components/util/fit-in-viewport.d.ts.map +1 -0
  146. package/dist/components/util/focus-utils.d.ts +77 -2
  147. package/dist/components/util/focus-utils.d.ts.map +1 -1
  148. package/dist/components/util/hydration.d.ts +45 -0
  149. package/dist/components/util/hydration.d.ts.map +1 -0
  150. package/dist/components/util/keyboard-inset.d.ts +18 -0
  151. package/dist/components/util/keyboard-inset.d.ts.map +1 -0
  152. package/dist/components/util/map-view.d.ts +144 -0
  153. package/dist/components/util/map-view.d.ts.map +1 -0
  154. package/dist/components/util/media-grid.d.ts +51 -0
  155. package/dist/components/util/media-grid.d.ts.map +1 -0
  156. package/dist/components/util/media.d.ts +6 -0
  157. package/dist/components/util/media.d.ts.map +1 -0
  158. package/dist/components/util/overlay-chrome.d.ts +53 -0
  159. package/dist/components/util/overlay-chrome.d.ts.map +1 -0
  160. package/dist/components/util/overlay.d.ts +72 -0
  161. package/dist/components/util/overlay.d.ts.map +1 -0
  162. package/dist/components/util/photo.d.ts +234 -0
  163. package/dist/components/util/photo.d.ts.map +1 -0
  164. package/dist/components/util/portal.d.ts +23 -0
  165. package/dist/components/util/portal.d.ts.map +1 -0
  166. package/dist/components/util/progress.d.ts +19 -0
  167. package/dist/components/util/progress.d.ts.map +1 -0
  168. package/dist/components/util/pull-to-refresh.d.ts +27 -0
  169. package/dist/components/util/pull-to-refresh.d.ts.map +1 -0
  170. package/dist/components/util/radio-keys.d.ts +25 -0
  171. package/dist/components/util/radio-keys.d.ts.map +1 -0
  172. package/dist/components/util/rating.d.ts +23 -0
  173. package/dist/components/util/rating.d.ts.map +1 -0
  174. package/dist/components/util/ready-made-strings.d.ts +77 -0
  175. package/dist/components/util/ready-made-strings.d.ts.map +1 -0
  176. package/dist/components/util/scroll-edge.d.ts +33 -0
  177. package/dist/components/util/scroll-edge.d.ts.map +1 -0
  178. package/dist/components/util/scroll-padding.d.ts +20 -0
  179. package/dist/components/util/scroll-padding.d.ts.map +1 -0
  180. package/dist/components/util/segmented-control.d.ts +16 -0
  181. package/dist/components/util/segmented-control.d.ts.map +1 -0
  182. package/dist/components/util/select.d.ts +41 -0
  183. package/dist/components/util/select.d.ts.map +1 -0
  184. package/dist/components/util/sheet-drag.d.ts +84 -0
  185. package/dist/components/util/sheet-drag.d.ts.map +1 -0
  186. package/dist/components/util/sidebar.d.ts +63 -0
  187. package/dist/components/util/sidebar.d.ts.map +1 -0
  188. package/dist/components/util/skeleton.d.ts +15 -0
  189. package/dist/components/util/skeleton.d.ts.map +1 -0
  190. package/dist/components/util/sliding-indicator.d.ts +25 -0
  191. package/dist/components/util/sliding-indicator.d.ts.map +1 -0
  192. package/dist/components/util/sortable-list.d.ts +65 -0
  193. package/dist/components/util/sortable-list.d.ts.map +1 -0
  194. package/dist/components/util/stepper.d.ts +40 -0
  195. package/dist/components/util/stepper.d.ts.map +1 -0
  196. package/dist/components/util/swipeable-list-item.d.ts +36 -0
  197. package/dist/components/util/swipeable-list-item.d.ts.map +1 -0
  198. package/dist/components/util/temporal-field.d.ts +89 -0
  199. package/dist/components/util/temporal-field.d.ts.map +1 -0
  200. package/dist/components/util/theme-mode.d.ts +80 -0
  201. package/dist/components/util/theme-mode.d.ts.map +1 -0
  202. package/dist/components/util/toaster.d.ts +133 -0
  203. package/dist/components/util/toaster.d.ts.map +1 -0
  204. package/dist/components/util/tone-surface.d.ts +34 -0
  205. package/dist/components/util/tone-surface.d.ts.map +1 -0
  206. package/dist/components/util/tooltip.d.ts +10 -0
  207. package/dist/components/util/tooltip.d.ts.map +1 -0
  208. package/dist/components/util/top-navbar.d.ts +35 -0
  209. package/dist/components/util/top-navbar.d.ts.map +1 -0
  210. package/dist/components/util/touch-target.d.ts +31 -0
  211. package/dist/components/util/touch-target.d.ts.map +1 -0
  212. package/dist/components/util/zabi-strings.d.ts +142 -0
  213. package/dist/components/util/zabi-strings.d.ts.map +1 -0
  214. package/dist/create-theme/cli.js +173 -0
  215. package/dist/create-theme/index.d.ts +190 -0
  216. package/dist/create-theme/index.js +1034 -0
  217. package/dist/create-theme/lib/ramp-math.js +128 -0
  218. package/dist/create-theme/lib/resolve.js +238 -0
  219. package/dist/create-theme/theme-data.js +2644 -0
  220. package/dist/index.d.ts +104 -2
  221. package/dist/index.js +75 -2
  222. package/dist/map.d.ts +10 -0
  223. package/dist/map.js +9 -0
  224. package/dist/molecules/Alert.svelte +63 -16
  225. package/dist/molecules/Alert.svelte.d.ts +14 -1
  226. package/dist/molecules/AppBar.svelte +674 -0
  227. package/dist/molecules/AppBar.svelte.d.ts +131 -0
  228. package/dist/molecules/AvatarGroup.svelte +116 -0
  229. package/dist/molecules/AvatarGroup.svelte.d.ts +40 -0
  230. package/dist/molecules/BarChart.svelte +381 -0
  231. package/dist/molecules/BarChart.svelte.d.ts +45 -0
  232. package/dist/molecules/BottomSheet.svelte +608 -0
  233. package/dist/molecules/BottomSheet.svelte.d.ts +109 -0
  234. package/dist/molecules/BottomTabBar.svelte +403 -0
  235. package/dist/molecules/BottomTabBar.svelte.d.ts +98 -0
  236. package/dist/molecules/Calendar.svelte +597 -0
  237. package/dist/molecules/Calendar.svelte.d.ts +72 -0
  238. package/dist/molecules/ChipGroup.svelte +325 -0
  239. package/dist/molecules/ChipGroup.svelte.d.ts +41 -0
  240. package/dist/molecules/Collapsible.svelte +347 -0
  241. package/dist/molecules/Collapsible.svelte.d.ts +61 -0
  242. package/dist/molecules/CollapsibleGroup.svelte +136 -0
  243. package/dist/molecules/CollapsibleGroup.svelte.d.ts +14 -0
  244. package/dist/molecules/ComponentDemo.svelte +16 -4
  245. package/dist/molecules/ComponentDemo.svelte.d.ts +3 -0
  246. package/dist/molecules/ConfirmDialog.svelte +257 -0
  247. package/dist/molecules/ConfirmDialog.svelte.d.ts +58 -0
  248. package/dist/molecules/ContactForm.svelte +34 -17
  249. package/dist/molecules/ContactForm.svelte.d.ts +8 -0
  250. package/dist/molecules/Drawer.svelte +415 -0
  251. package/dist/molecules/Drawer.svelte.d.ts +55 -0
  252. package/dist/molecules/Dropdown.svelte +517 -48
  253. package/dist/molecules/Dropdown.svelte.d.ts +47 -6
  254. package/dist/molecules/DropdownItem.svelte +122 -0
  255. package/dist/molecules/DropdownItem.svelte.d.ts +28 -0
  256. package/dist/molecules/EmptyState.svelte +55 -10
  257. package/dist/molecules/EmptyState.svelte.d.ts +8 -0
  258. package/dist/molecules/FormField.svelte +9 -1
  259. package/dist/molecules/FormField.svelte.d.ts +2 -0
  260. package/dist/molecules/Header.svelte +1 -1
  261. package/dist/molecules/ImageUpload.svelte +492 -69
  262. package/dist/molecules/ImageUpload.svelte.d.ts +82 -2
  263. package/dist/molecules/LineChart.svelte +459 -0
  264. package/dist/molecules/LineChart.svelte.d.ts +53 -0
  265. package/dist/molecules/MapView.svelte +565 -0
  266. package/dist/molecules/MapView.svelte.d.ts +88 -0
  267. package/dist/molecules/MediaGrid.svelte +527 -0
  268. package/dist/molecules/MediaGrid.svelte.d.ts +77 -0
  269. package/dist/molecules/Modal.svelte +293 -72
  270. package/dist/molecules/Modal.svelte.d.ts +51 -2
  271. package/dist/molecules/NavigationMenuContent.svelte +58 -1
  272. package/dist/molecules/NavigationMenuItem.svelte +0 -1
  273. package/dist/molecules/NavigationMenuLink.svelte +1 -1
  274. package/dist/molecules/NavigationMenuList.svelte +10 -3
  275. package/dist/molecules/NavigationMenuTrigger.svelte +2 -2
  276. package/dist/molecules/Page.svelte +32 -2
  277. package/dist/molecules/Page.svelte.d.ts +11 -0
  278. package/dist/molecules/PhotoGrid.svelte +523 -0
  279. package/dist/molecules/PhotoGrid.svelte.d.ts +73 -0
  280. package/dist/molecules/PhotoViewer.svelte +1213 -0
  281. package/dist/molecules/PhotoViewer.svelte.d.ts +74 -0
  282. package/dist/molecules/PieChart.svelte +421 -0
  283. package/dist/molecules/PieChart.svelte.d.ts +51 -0
  284. package/dist/molecules/PropsTable.svelte +22 -10
  285. package/dist/molecules/PropsTable.svelte.d.ts +3 -0
  286. package/dist/molecules/PullToRefresh.svelte +263 -0
  287. package/dist/molecules/PullToRefresh.svelte.d.ts +52 -0
  288. package/dist/molecules/RadioGroup.svelte +72 -18
  289. package/dist/molecules/RadioGroup.svelte.d.ts +19 -3
  290. package/dist/molecules/Section.svelte +1 -1
  291. package/dist/molecules/SegmentedControl.svelte +456 -0
  292. package/dist/molecules/SegmentedControl.svelte.d.ts +40 -0
  293. package/dist/molecules/SidebarBrandHeader.svelte +11 -1
  294. package/dist/molecules/SidebarBrandHeader.svelte.d.ts +3 -0
  295. package/dist/molecules/SidebarFooter.svelte +30 -7
  296. package/dist/molecules/SidebarFooter.svelte.d.ts +3 -0
  297. package/dist/molecules/SidebarNavSection.svelte +1 -1
  298. package/dist/molecules/SlideUp.svelte +220 -61
  299. package/dist/molecules/SlideUp.svelte.d.ts +26 -0
  300. package/dist/molecules/SortableList.svelte +633 -0
  301. package/dist/molecules/SortableList.svelte.d.ts +69 -0
  302. package/dist/molecules/Stepper.svelte +562 -0
  303. package/dist/molecules/Stepper.svelte.d.ts +39 -0
  304. package/dist/molecules/StickyActionBar.svelte +250 -0
  305. package/dist/molecules/StickyActionBar.svelte.d.ts +78 -0
  306. package/dist/molecules/SwipeableListItem.svelte +334 -0
  307. package/dist/molecules/SwipeableListItem.svelte.d.ts +54 -0
  308. package/dist/molecules/Tabs.svelte +310 -9
  309. package/dist/molecules/Tabs.svelte.d.ts +7 -0
  310. package/dist/molecules/Toaster.svelte +514 -5
  311. package/dist/molecules/Toaster.svelte.d.ts +153 -2
  312. package/dist/molecules/ToasterToast.svelte +495 -77
  313. package/dist/molecules/ToasterToast.svelte.d.ts +15 -0
  314. package/dist/molecules/UnsavedChangesBar.svelte +223 -0
  315. package/dist/molecules/UnsavedChangesBar.svelte.d.ts +43 -0
  316. package/dist/molecules/index.d.ts +51 -0
  317. package/dist/molecules/index.js +31 -0
  318. package/dist/molecules/toast-store.d.ts +83 -7
  319. package/dist/molecules/toast-store.js +25 -1
  320. package/dist/organisms/AppNavigation.svelte +440 -0
  321. package/dist/organisms/AppNavigation.svelte.d.ts +72 -0
  322. package/dist/organisms/AppShell.svelte +696 -0
  323. package/dist/organisms/AppShell.svelte.d.ts +157 -0
  324. package/dist/organisms/AppShellHeaderPart.svelte +163 -0
  325. package/dist/organisms/AppShellHeaderPart.svelte.d.ts +57 -0
  326. package/dist/organisms/SidebarAccountPanel.svelte +107 -12
  327. package/dist/organisms/SidebarAccountPanel.svelte.d.ts +19 -0
  328. package/dist/organisms/SidebarNavigation.svelte +111 -43
  329. package/dist/organisms/SidebarNavigation.svelte.d.ts +29 -1
  330. package/dist/organisms/SidebarPanel.svelte +34 -17
  331. package/dist/organisms/SidebarPanel.svelte.d.ts +1 -0
  332. package/dist/organisms/SidebarShell.svelte +164 -14
  333. package/dist/organisms/SidebarShell.svelte.d.ts +56 -2
  334. package/dist/organisms/TopNavbar.svelte +353 -39
  335. package/dist/organisms/TopNavbar.svelte.d.ts +47 -0
  336. package/dist/organisms/TopNavbarSheetContent.svelte +145 -0
  337. package/dist/organisms/TopNavbarSheetContent.svelte.d.ts +24 -0
  338. package/dist/organisms/index.d.ts +10 -0
  339. package/dist/organisms/index.js +7 -0
  340. package/dist/types/components.d.ts +21 -1
  341. package/dist/types/components.d.ts.map +1 -1
  342. package/dist/types/index.d.ts +1093 -26
  343. package/dist/types/index.d.ts.map +1 -1
  344. package/dist/types/variants.ts +28 -1
  345. package/dist/util/app-shell.d.ts +78 -0
  346. package/dist/util/app-shell.js +97 -0
  347. package/dist/util/avatar.d.ts +38 -0
  348. package/dist/util/avatar.js +52 -0
  349. package/dist/util/bottom-sheet.d.ts +29 -0
  350. package/dist/util/bottom-sheet.js +43 -0
  351. package/dist/util/bottom-tab-bar.d.ts +40 -0
  352. package/dist/util/bottom-tab-bar.js +54 -0
  353. package/dist/util/calendar.d.ts +55 -0
  354. package/dist/util/calendar.js +74 -0
  355. package/dist/util/chart.d.ts +139 -0
  356. package/dist/util/chart.js +305 -0
  357. package/dist/util/chip.d.ts +65 -0
  358. package/dist/util/chip.js +58 -0
  359. package/dist/util/cn.js +28 -2
  360. package/dist/util/code-field.d.ts +62 -0
  361. package/dist/util/code-field.js +112 -0
  362. package/dist/util/collapsible.d.ts +63 -0
  363. package/dist/util/collapsible.js +23 -0
  364. package/dist/util/confirm-dialog.d.ts +11 -0
  365. package/dist/util/confirm-dialog.js +2 -0
  366. package/dist/util/date.d.ts +95 -0
  367. package/dist/util/date.js +237 -0
  368. package/dist/util/display-voice.d.ts +9 -0
  369. package/dist/util/display-voice.js +9 -0
  370. package/dist/util/drawer.d.ts +12 -0
  371. package/dist/util/drawer.js +7 -0
  372. package/dist/util/dropdown.d.ts +46 -0
  373. package/dist/util/dropdown.js +21 -0
  374. package/dist/util/field-control.d.ts +29 -0
  375. package/dist/util/field-control.js +32 -0
  376. package/dist/util/field.d.ts +44 -0
  377. package/dist/util/field.js +38 -0
  378. package/dist/util/fit-in-viewport.d.ts +200 -0
  379. package/dist/util/fit-in-viewport.js +399 -0
  380. package/dist/util/focus-utils.d.ts +77 -2
  381. package/dist/util/focus-utils.js +186 -9
  382. package/dist/util/hydration.d.ts +44 -0
  383. package/dist/util/hydration.js +58 -0
  384. package/dist/util/keyboard-inset.d.ts +17 -0
  385. package/dist/util/keyboard-inset.js +53 -0
  386. package/dist/util/map-view.d.ts +143 -0
  387. package/dist/util/map-view.js +121 -0
  388. package/dist/util/media-grid.d.ts +50 -0
  389. package/dist/util/media-grid.js +81 -0
  390. package/dist/util/media.d.ts +5 -0
  391. package/dist/util/media.js +10 -0
  392. package/dist/util/overlay-chrome.d.ts +52 -0
  393. package/dist/util/overlay-chrome.js +56 -0
  394. package/dist/util/overlay.d.ts +71 -0
  395. package/dist/util/overlay.js +240 -0
  396. package/dist/util/photo.d.ts +233 -0
  397. package/dist/util/photo.js +209 -0
  398. package/dist/util/portal.d.ts +22 -0
  399. package/dist/util/portal.js +50 -0
  400. package/dist/util/progress.d.ts +18 -0
  401. package/dist/util/progress.js +17 -0
  402. package/dist/util/pull-to-refresh.d.ts +26 -0
  403. package/dist/util/pull-to-refresh.js +30 -0
  404. package/dist/util/radio-keys.d.ts +24 -0
  405. package/dist/util/radio-keys.js +49 -0
  406. package/dist/util/rating.d.ts +22 -0
  407. package/dist/util/rating.js +26 -0
  408. package/dist/util/ready-made-strings.d.ts +76 -0
  409. package/dist/util/ready-made-strings.js +67 -0
  410. package/dist/util/scroll-edge.d.ts +32 -0
  411. package/dist/util/scroll-edge.js +87 -0
  412. package/dist/util/scroll-padding.d.ts +19 -0
  413. package/dist/util/scroll-padding.js +44 -0
  414. package/dist/util/segmented-control.d.ts +15 -0
  415. package/dist/util/segmented-control.js +1 -0
  416. package/dist/util/select.d.ts +40 -0
  417. package/dist/util/select.js +63 -0
  418. package/dist/util/sheet-drag.d.ts +83 -0
  419. package/dist/util/sheet-drag.js +311 -0
  420. package/dist/util/sidebar.d.ts +62 -0
  421. package/dist/util/sidebar.js +38 -0
  422. package/dist/util/skeleton.d.ts +14 -0
  423. package/dist/util/skeleton.js +22 -0
  424. package/dist/util/sliding-indicator.d.ts +24 -0
  425. package/dist/util/sliding-indicator.js +44 -0
  426. package/dist/util/sortable-list.d.ts +64 -0
  427. package/dist/util/sortable-list.js +53 -0
  428. package/dist/util/stepper.d.ts +39 -0
  429. package/dist/util/stepper.js +38 -0
  430. package/dist/util/swipeable-list-item.d.ts +35 -0
  431. package/dist/util/swipeable-list-item.js +32 -0
  432. package/dist/util/temporal-field.d.ts +88 -0
  433. package/dist/util/temporal-field.js +136 -0
  434. package/dist/util/theme-mode.d.ts +79 -0
  435. package/dist/util/theme-mode.js +121 -0
  436. package/dist/util/toaster.d.ts +132 -0
  437. package/dist/util/toaster.js +130 -0
  438. package/dist/util/tone-surface.d.ts +33 -0
  439. package/dist/util/tone-surface.js +35 -0
  440. package/dist/util/tooltip.d.ts +9 -0
  441. package/dist/util/tooltip.js +18 -0
  442. package/dist/util/top-navbar.d.ts +34 -0
  443. package/dist/util/top-navbar.js +28 -0
  444. package/dist/util/touch-target.d.ts +30 -0
  445. package/dist/util/touch-target.js +30 -0
  446. package/dist/util/zabi-strings.d.ts +141 -0
  447. package/dist/util/zabi-strings.js +105 -0
  448. package/dist/zabi-components-colors.css +11 -2
  449. package/dist/zabi-components-theme-dark-only.css +870 -258
  450. package/dist/zabi-components-theme-dark.css +870 -258
  451. package/dist/zabi-components-theme-only.css +2419 -368
  452. package/dist/zabi-components-theme.css +2419 -368
  453. package/dist/zabi-components.css +6032 -711
  454. package/docs/lucide-icons.md +40 -17
  455. package/docs/theme-imports.md +81 -11
  456. package/package.json +45 -8
@@ -1,4 +1,6 @@
1
- import type { Snippet } from 'svelte';
1
+ import { type Snippet } from 'svelte';
2
+ import { type DropdownOption, type DropdownPresentation } from "../util/dropdown.js";
3
+ import type { BottomSheetSnap } from "../util/bottom-sheet.js";
2
4
  export type DropdownTriggerProps = {
3
5
  'aria-expanded': boolean;
4
6
  'aria-haspopup': 'menu' | 'listbox';
@@ -8,16 +10,55 @@ interface Props {
8
10
  /** Extra classes for the host element. */
9
11
  class?: string;
10
12
  isOpen?: boolean;
13
+ /**
14
+ * The side the menu opens on. It is where the menu goes whenever it
15
+ * fits there; near an edge of the screen it flips to the other side,
16
+ * and is narrowed or given its own scroll when neither side has room.
17
+ */
11
18
  placement?: 'bottom-start' | 'bottom-end' | 'top-start' | 'top-end';
19
+ /**
20
+ * How the menu is shown. `popover`: under its trigger, as always.
21
+ * `sheet`: in a BottomSheet, with the same items, roles and keys; this
22
+ * is the action sheet ("Edit, Share, Delete" from the bottom of the
23
+ * screen). `auto`: a sheet on a phone (a touch screen narrower than
24
+ * 640px), the pop-over everywhere else. Decided each time the menu
25
+ * opens, in the browser.
26
+ */
27
+ presentation?: DropdownPresentation;
28
+ /**
29
+ * The host fills its container instead of being as wide as its
30
+ * trigger's content, and the menu is at least as wide as the host.
31
+ * For a trigger that is a field (Select); a menu on an icon button
32
+ * stays as it is.
33
+ */
34
+ fullWidth?: boolean;
35
+ /** Heading of the sheet. Without it, `ariaLabel` is. */
36
+ sheetTitle?: string;
37
+ /**
38
+ * The height the sheet opens at. Without it: half the screen for up
39
+ * to six `options`, all of it for more. The grip moves it either way.
40
+ */
41
+ sheetSnap?: BottomSheetSnap;
42
+ /** The sheet is as tall as the list, up to half the screen (BottomSheet `fit`); the grip then only drags. Off by default. */
43
+ sheetFit?: boolean;
44
+ /** Accessible name of the sheet's close button. */
45
+ sheetCloseLabel?: string;
46
+ /** Accessible name of the sheet's grip while its button takes the sheet up a step. */
47
+ sheetExpandLabel?: string;
48
+ /** The same, while it takes the sheet down a step. */
49
+ sheetCollapseLabel?: string;
12
50
  ariaLabel?: string;
51
+ /** Id of an element that names the list; wins over `ariaLabel` for the pop-over list. */
52
+ ariaLabelledby?: string;
13
53
  /** `listbox` for Select-style; `menu` for actions. */
14
54
  menuRole?: 'menu' | 'listbox';
15
55
  selectedValue?: string | number | null;
16
- options?: Array<{
17
- value: string | number;
18
- label: string;
19
- disabled?: boolean;
20
- }>;
56
+ /**
57
+ * Menu items, when not supplying children. Each takes an optional
58
+ * `icon`, `tone` (`danger`) and `description`; a disabled item stays
59
+ * focusable so its description can be read.
60
+ */
61
+ options?: DropdownOption[];
21
62
  onOptionClick?: (value: string | number) => void;
22
63
  trigger: Snippet<[DropdownTriggerProps]>;
23
64
  /** Rendered in the popup above the menu/listbox, outside its role (e.g. a search field). */
@@ -0,0 +1,122 @@
1
+ <script lang="ts">
2
+ import Check from "@lucide/svelte/icons/check";
3
+ import { getContext, type Snippet } from "svelte";
4
+ import type { HTMLButtonAttributes } from "svelte/elements";
5
+ import { generateId } from "../util/ssr-safe.js";
6
+ import { cn } from "../util/cn.js";
7
+ import {
8
+ DROPDOWN_CONTEXT_KEY,
9
+ type DropdownContext,
10
+ type DropdownItemIcon,
11
+ type DropdownItemTone,
12
+ } from "../util/dropdown.js";
13
+
14
+ type Props = Omit<HTMLButtonAttributes, "class" | "disabled"> & {
15
+ /** The text of the item, and its accessible name. Use `children` for custom content instead. */
16
+ label?: string;
17
+ /** Second line under the label, e.g. why the item is disabled. */
18
+ description?: string;
19
+ /** Rendered before the label, at 16px. Decorative: the label names the item. */
20
+ icon?: DropdownItemIcon;
21
+ /** `danger` for a destructive action such as Delete. */
22
+ tone?: DropdownItemTone;
23
+ /**
24
+ * Rendered as `aria-disabled`, not `disabled`: the item stays focusable,
25
+ * so the arrow keys reach it and its description is read, but a click
26
+ * does nothing.
27
+ */
28
+ disabled?: boolean;
29
+ /** Marks the chosen option of a listbox (`aria-selected`). */
30
+ selected?: boolean;
31
+ /** Extra classes for the item. */
32
+ class?: string;
33
+ /** Replaces `label` as the content. */
34
+ children?: Snippet;
35
+ };
36
+
37
+ let {
38
+ label = "",
39
+ description = "",
40
+ icon: Icon,
41
+ tone = "default",
42
+ disabled = false,
43
+ selected = false,
44
+ role,
45
+ class: className = "",
46
+ onclick,
47
+ children,
48
+ ...restProps
49
+ }: Props = $props();
50
+
51
+ const dropdown = getContext<DropdownContext | undefined>(DROPDOWN_CONTEXT_KEY);
52
+ // The keyboard model of Dropdown finds items by role, so there is always one.
53
+ const itemRole = $derived(role ?? dropdown?.itemRole ?? "menuitem");
54
+
55
+ const labelId = generateId("dropdown-item-label");
56
+ const descriptionId = generateId("dropdown-item-description");
57
+
58
+ function handleClick(
59
+ event: MouseEvent & { currentTarget: EventTarget & HTMLButtonElement },
60
+ ) {
61
+ if (disabled) {
62
+ event.preventDefault();
63
+ event.stopPropagation();
64
+ return;
65
+ }
66
+ onclick?.(event);
67
+ }
68
+
69
+ const itemClasses = $derived(
70
+ cn(
71
+ "focus-ring flex w-full items-start justify-start gap-2 rounded-control px-3 py-2 pointer-coarse:py-3 text-start text-sm transition-colors focus:outline-none",
72
+ tone === "danger" ? "text-error-text focus-ring--danger" : "text-body",
73
+ disabled
74
+ ? "cursor-not-allowed"
75
+ : tone === "danger"
76
+ ? "cursor-pointer hover:bg-action-danger-subtle active:bg-action-danger-subtle-hover"
77
+ : "cursor-pointer hover:bg-surface-overlay-hover active:bg-surface-active",
78
+ // The chosen option has a fill and a check: a mark of its own,
79
+ // which is neither the focus ring nor colour alone.
80
+ itemRole === "option" && selected && "bg-surface-overlay-hover text-headline",
81
+ className,
82
+ ),
83
+ );
84
+ // The description explains a disabled item, so it is never dimmed with it.
85
+ const dimmed = $derived(disabled ? "opacity-50" : "");
86
+ </script>
87
+
88
+ <button
89
+ type="button"
90
+ role={itemRole}
91
+ aria-selected={itemRole === "option" ? selected : undefined}
92
+ aria-disabled={disabled ? "true" : undefined}
93
+ aria-labelledby={description && (label || children) ? labelId : undefined}
94
+ aria-describedby={description ? descriptionId : undefined}
95
+ class={itemClasses}
96
+ onclick={handleClick}
97
+ {...restProps}
98
+ >
99
+ {#if Icon}
100
+ <span class="mt-0.5 shrink-0 {dimmed}" aria-hidden="true">
101
+ <Icon size={16} />
102
+ </span>
103
+ {/if}
104
+ <span class="min-w-0 flex-1">
105
+ {#if children}
106
+ <!-- The label when there is a description, so the name is the content alone. -->
107
+ <span id={labelId} class="block {dimmed}">{@render children()}</span>
108
+ {:else}
109
+ <span id={labelId} class="block {dimmed}">{label}</span>
110
+ {/if}
111
+ {#if description}
112
+ <span id={descriptionId} class="mt-0.5 block text-xs text-description">
113
+ {description}
114
+ </span>
115
+ {/if}
116
+ </span>
117
+ {#if itemRole === "option" && selected}
118
+ <span class="mt-0.5 shrink-0 text-headline" aria-hidden="true">
119
+ <Check size={16} />
120
+ </span>
121
+ {/if}
122
+ </button>
@@ -0,0 +1,28 @@
1
+ import { type Snippet } from "svelte";
2
+ import type { HTMLButtonAttributes } from "svelte/elements";
3
+ import { type DropdownItemIcon, type DropdownItemTone } from "../util/dropdown.js";
4
+ type Props = Omit<HTMLButtonAttributes, "class" | "disabled"> & {
5
+ /** The text of the item, and its accessible name. Use `children` for custom content instead. */
6
+ label?: string;
7
+ /** Second line under the label, e.g. why the item is disabled. */
8
+ description?: string;
9
+ /** Rendered before the label, at 16px. Decorative: the label names the item. */
10
+ icon?: DropdownItemIcon;
11
+ /** `danger` for a destructive action such as Delete. */
12
+ tone?: DropdownItemTone;
13
+ /**
14
+ * Rendered as `aria-disabled`, not `disabled`: the item stays focusable,
15
+ * so the arrow keys reach it and its description is read, but a click
16
+ * does nothing.
17
+ */
18
+ disabled?: boolean;
19
+ /** Marks the chosen option of a listbox (`aria-selected`). */
20
+ selected?: boolean;
21
+ /** Extra classes for the item. */
22
+ class?: string;
23
+ /** Replaces `label` as the content. */
24
+ children?: Snippet;
25
+ };
26
+ declare const DropdownItem: import("svelte").Component<Props, {}, "">;
27
+ type DropdownItem = ReturnType<typeof DropdownItem>;
28
+ export default DropdownItem;
@@ -2,10 +2,18 @@
2
2
  import type { Snippet } from "svelte";
3
3
  import { generateId } from "../util/ssr-safe.js";
4
4
  import { cn } from "../util/cn.js";
5
+ import type { CollapsibleHeadingLevel } from "../util/collapsible.js";
5
6
 
6
7
  interface Props {
7
8
  title: string;
8
9
  description: string;
10
+ /** Heading element of the title, to fit the outline of the page around it. */
11
+ headingLevel?: CollapsibleHeadingLevel;
12
+ /**
13
+ * `compact` tightens the padding and the title to sit inside a card,
14
+ * and is a plain `<div>`, not a landmark region like the default.
15
+ */
16
+ size?: "default" | "compact";
9
17
  class?: string;
10
18
  action?: Snippet;
11
19
  media?: Snippet;
@@ -14,32 +22,69 @@
14
22
  let {
15
23
  title,
16
24
  description,
25
+ headingLevel = 2,
26
+ size = "default",
17
27
  class: className = "",
18
28
  action,
19
29
  media,
20
30
  }: Props = $props();
21
31
 
22
32
  const titleId = generateId("empty-state-title");
33
+ const compact = $derived(size === "compact");
34
+ const rootClasses = $derived(
35
+ cn(
36
+ "mx-auto flex flex-col items-center justify-center text-center",
37
+ compact ? "gap-3 px-4 py-6" : "gap-4 px-6 py-12",
38
+ className,
39
+ ),
40
+ );
23
41
  </script>
24
42
 
25
- <section
26
- class={cn("mx-auto flex flex-col items-center justify-center gap-4 px-6 py-12 text-center", className)}
27
- aria-labelledby={titleId}
28
- >
43
+ {#snippet body()}
44
+ {@const headingClasses = cn("font-semibold text-headline", compact ? "text-base" : "text-lg")}
29
45
  {#if media}
30
46
  <div class="text-description" aria-hidden="true">
31
47
  {@render media()}
32
48
  </div>
33
49
  {/if}
34
- <div class="space-y-2">
35
- <h2 id={titleId} class="text-lg font-semibold text-headline">
36
- {title}
37
- </h2>
50
+ <div class={compact ? "space-y-1" : "space-y-2"}>
51
+ {#if headingLevel === 1}
52
+ <h1 id={titleId} class={headingClasses}>{title}</h1>
53
+ {:else if headingLevel === 2}
54
+ <h2 id={titleId} class={headingClasses}>{title}</h2>
55
+ {:else if headingLevel === 3}
56
+ <h3 id={titleId} class={headingClasses}>{title}</h3>
57
+ {:else if headingLevel === 4}
58
+ <h4 id={titleId} class={headingClasses}>{title}</h4>
59
+ {:else if headingLevel === 5}
60
+ <h5 id={titleId} class={headingClasses}>{title}</h5>
61
+ {:else}
62
+ <h6 id={titleId} class={headingClasses}>{title}</h6>
63
+ {/if}
38
64
  <p class="text-sm text-description">{description}</p>
39
65
  </div>
40
66
  {#if action}
41
- <div class="mt-2 flex flex-wrap items-center justify-center gap-2">
67
+ <div
68
+ class={cn("flex flex-wrap items-center justify-center gap-2", compact ? "mt-1" : "mt-2")}
69
+ >
42
70
  {@render action()}
43
71
  </div>
44
72
  {/if}
45
- </section>
73
+ {/snippet}
74
+
75
+ <!-- A named `<section>` is a landmark. One per page is a help; a compact empty
76
+ state in every card is a page of landmarks, so that size is a plain `<div>`.
77
+
78
+ Two branches, not `<svelte:element>`: hydration takes a dynamic element
79
+ out and puts it back, which blurs a control inside it that the user had
80
+ already tabbed to. The heading is one branch per level for the same
81
+ reason. -->
82
+ {#if compact}
83
+ <div class={rootClasses}>
84
+ {@render body()}
85
+ </div>
86
+ {:else}
87
+ <section class={rootClasses} aria-labelledby={titleId}>
88
+ {@render body()}
89
+ </section>
90
+ {/if}
@@ -1,7 +1,15 @@
1
1
  import type { Snippet } from "svelte";
2
+ import type { CollapsibleHeadingLevel } from "../util/collapsible.js";
2
3
  interface Props {
3
4
  title: string;
4
5
  description: string;
6
+ /** Heading element of the title, to fit the outline of the page around it. */
7
+ headingLevel?: CollapsibleHeadingLevel;
8
+ /**
9
+ * `compact` tightens the padding and the title to sit inside a card,
10
+ * and is a plain `<div>`, not a landmark region like the default.
11
+ */
12
+ size?: "default" | "compact";
5
13
  class?: string;
6
14
  action?: Snippet;
7
15
  media?: Snippet;
@@ -1,4 +1,5 @@
1
1
  <script lang="ts">
2
+ import { zabiCommonStrings } from "../util/zabi-strings.js";
2
3
  import type { Snippet } from 'svelte';
3
4
  import { generateId } from "../util/ssr-safe.js";
4
5
 
@@ -17,6 +18,8 @@
17
18
  description?: string;
18
19
  error?: string;
19
20
  required?: boolean;
21
+ /** Read after the label of a required field, where the asterisk is only seen. */
22
+ requiredLabel?: string;
20
23
  disabled?: boolean;
21
24
  class?: string;
22
25
  labelClass?: string;
@@ -30,6 +33,7 @@
30
33
  description,
31
34
  error,
32
35
  required = false,
36
+ requiredLabel: requiredLabelGiven,
33
37
  disabled = false,
34
38
  class: className = '',
35
39
  labelClass = '',
@@ -37,6 +41,10 @@
37
41
  meta,
38
42
  }: Props = $props();
39
43
 
44
+ /** Words many components share: a `ZabiStringsProvider` above this one may give them; else English. */
45
+ const common = zabiCommonStrings();
46
+ const requiredLabel = $derived(requiredLabelGiven ?? common().required);
47
+
40
48
  const fallbackId = generateId('field');
41
49
  const fieldId = $derived(idProp ?? fallbackId);
42
50
  const descriptionId = $derived(
@@ -63,7 +71,7 @@
63
71
  {label}
64
72
  {#if required}
65
73
  <span class="ml-1 text-error" aria-hidden="true">*</span>
66
- <span class="sr-only">(required)</span>
74
+ <span class="sr-only">{requiredLabel}</span>
67
75
  {/if}
68
76
  </label>
69
77
 
@@ -12,6 +12,8 @@ interface Props {
12
12
  description?: string;
13
13
  error?: string;
14
14
  required?: boolean;
15
+ /** Read after the label of a required field, where the asterisk is only seen. */
16
+ requiredLabel?: string;
15
17
  disabled?: boolean;
16
18
  class?: string;
17
19
  labelClass?: string;
@@ -42,7 +42,7 @@
42
42
  Variants / states:
43
43
  </span>
44
44
  {#each variantsStates as v (v)}
45
- <span class="rounded-control bg-base-100 px-2 py-1 text-xs text-headline">
45
+ <span class="rounded-control bg-neutral-subtle px-2 py-1 text-xs text-headline">
46
46
  {v}
47
47
  </span>
48
48
  {/each}