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
@@ -1,5 +1,6 @@
1
1
  <script lang="ts">
2
2
  import type { Snippet } from "svelte";
3
+ import { cn } from "../util/cn.js";
3
4
 
4
5
  interface Props {
5
6
  title?: string;
@@ -8,6 +9,8 @@
8
9
  /** `aria-label` on the `<ul>` (required when title is hidden in collapsed mode). */
9
10
  listAriaLabel: string;
10
11
  collapsed?: boolean;
12
+ class?: string;
13
+ /** @deprecated use `class`. */
11
14
  className?: string;
12
15
  children: Snippet;
13
16
  }
@@ -17,10 +20,15 @@
17
20
  sectionKey = "",
18
21
  listAriaLabel,
19
22
  collapsed = false,
20
- className = "",
23
+ class: classAttr = "",
24
+ className: legacyClass = "",
21
25
  children,
22
26
  }: Props = $props();
23
27
 
28
+ /** `class` is the public prop; `className` is a deprecated alias.
29
+ * Both are merged here so existing call sites keep working. */
30
+ const className = $derived(cn(`${classAttr} ${legacyClass}`));
31
+
24
32
  const trimmedTitle = $derived(title.trim());
25
33
  const headingId = $derived(
26
34
  trimmedTitle
@@ -30,17 +38,17 @@
30
38
  const showHeading = $derived(Boolean(trimmedTitle) && !collapsed);
31
39
  </script>
32
40
 
33
- <div class={`flex w-full flex-col gap-1.5 ${className}`.trim()}>
41
+ <div class={cn(`flex w-full flex-col gap-2 ${className}`)}>
34
42
  {#if showHeading && headingId}
35
43
  <h2
36
- class="px-0 text-[10px] font-semibold uppercase tracking-[0.12em] text-description"
44
+ class="px-0 text-xs font-semibold uppercase tracking-wider text-description"
37
45
  id={headingId}
38
46
  >
39
47
  {trimmedTitle}
40
48
  </h2>
41
49
  {/if}
42
50
  <ul
43
- class="flex w-full flex-col gap-0.5 px-0"
51
+ class="flex w-full flex-col gap-1 px-0"
44
52
  aria-labelledby={showHeading && headingId ? headingId : undefined}
45
53
  aria-label={showHeading ? undefined : listAriaLabel}
46
54
  >
@@ -6,6 +6,8 @@ interface Props {
6
6
  /** `aria-label` on the `<ul>` (required when title is hidden in collapsed mode). */
7
7
  listAriaLabel: string;
8
8
  collapsed?: boolean;
9
+ class?: string;
10
+ /** @deprecated use `class`. */
9
11
  className?: string;
10
12
  children: Snippet;
11
13
  }
@@ -1,40 +1,128 @@
1
1
  <script lang="ts">
2
+ import { zabiCommonStrings } from "../util/zabi-strings.js";
3
+ import type { Snippet } from 'svelte';
2
4
  import {
3
5
  focusFirstElement,
6
+ joinOverlayStack,
7
+ recoverStrayFocus,
4
8
  returnFocus,
5
9
  saveFocus,
6
- trapFocus,
7
10
  } from '../util/focus-utils.js';
11
+ import {
12
+ followKeyboard,
13
+ lockBodyScroll,
14
+ registerOverlayFooter,
15
+ registerOverlayHeader,
16
+ trapTabKey,
17
+ } from '../util/overlay.js';
18
+ import { TOUCH_HIT_AREA } from '../util/touch-target.js';
8
19
  import { generateId } from "../util/ssr-safe.js";
20
+ import { cn } from "../util/cn.js";
21
+ import {
22
+ OVERLAY_CHROME,
23
+ OVERLAY_CLOSE_GLYPH,
24
+ OVERLAY_TITLE_2XL,
25
+ OVERLAY_TITLE_HYPHENS,
26
+ OVERLAY_TITLE_WRAP,
27
+ textIsEnlarged,
28
+ } from "../util/overlay-chrome.js";
29
+ import { attachSheetDrag, FLICK_VELOCITY } from "../util/sheet-drag.js";
9
30
 
10
31
  interface Props {
32
+ /** Extra classes for the host element. */
33
+ class?: string;
11
34
  isOpen?: boolean;
12
35
  title?: string;
36
+ /** Accessible name of the close button. */
37
+ closeLabel?: string;
38
+ /**
39
+ * CSS selector, looked up inside the sheet, of the control that takes
40
+ * focus when it opens. Without it, or with no match, the first control does.
41
+ */
42
+ initialFocus?: string;
43
+ /**
44
+ * Adds a grip at the top and lets a swipe down close the sheet. The
45
+ * grip drags from anywhere; a swipe on the content closes only when
46
+ * the content is at its top, and scrolls it otherwise. The close
47
+ * button, the backdrop and Escape stay, so nothing depends on the
48
+ * gesture.
49
+ */
50
+ swipeToClose?: boolean;
51
+ /**
52
+ * Runs when the sheet closes itself, with the event that closed it:
53
+ * the click, the Escape keydown, or the end of a swipe.
54
+ */
13
55
  onclick?: (event: Event) => void;
14
56
  onkeydown?: (event: Event) => void;
57
+ children?: Snippet;
58
+ /**
59
+ * Pinned to the bottom of the sheet, below the content, which then
60
+ * scrolls on its own: for the buttons of a form. It stays above the
61
+ * on-screen keyboard, and toasts keep off it. Without it the sheet is
62
+ * as it always was: one box that scrolls as a whole.
63
+ */
64
+ footer?: Snippet;
15
65
  }
16
66
 
17
67
  let {
18
- isOpen = $bindable(false),
68
+ class: className = "",
69
+ isOpen = $bindable<Exclude<Props["isOpen"], undefined>>(),
19
70
  title = '',
71
+ closeLabel: closeLabelGiven,
72
+ initialFocus,
73
+ swipeToClose = false,
20
74
  onclick,
21
75
  onkeydown,
22
76
  children,
77
+ footer,
23
78
  ...restProps
24
- } = $props<Props & { children?: any }>();
79
+ }: Props = $props();
80
+
81
+ /** Words many components share: a `ZabiStringsProvider` above this one may give them; else English. */
82
+ const common = zabiCommonStrings();
83
+ const closeLabel = $derived(closeLabelGiven ?? common().close);
84
+
85
+ // No fallback on a bindable prop: Svelte refuses `bind:…={undefined}` on
86
+ // one that has a fallback (`props_invalid_value`), and a page that throws
87
+ // while it hydrates never becomes interactive. The default is applied
88
+ // here instead: at once, for the server and the first render, and again
89
+ // whenever a parent hands back `undefined`.
90
+ const applyDefaults = () => {
91
+ if (isOpen === undefined) isOpen = false;
92
+ };
93
+ applyDefaults();
94
+ $effect.pre(applyDefaults);
25
95
 
26
96
  const slideTitleId = generateId('slideup-title');
27
97
 
28
98
  let slideUpContainer = $state<HTMLDivElement>();
29
- let cleanupFocusTrap: (() => void) | null = null;
99
+ let grip = $state<HTMLDivElement>();
100
+ let headerElement = $state<HTMLDivElement>();
101
+ let footerElement = $state<HTMLDivElement>();
102
+
103
+ /**
104
+ * Read as the overlay opens: with the text enlarged, a long word in the
105
+ * title is hyphenated before it is cut (util/overlay-chrome.ts).
106
+ */
107
+ let enlargedText = $state(false);
108
+ $effect(() => {
109
+ if (isOpen) enlargedText = textIsEnlarged();
110
+ });
111
+ /** With a footer: the content, which is then what scrolls. */
112
+ let scroller = $state<HTMLDivElement>();
113
+ /** How far a swipe has pulled the sheet down, in px. */
114
+ let dragOffset = $state(0);
115
+ let dragging = $state(false);
116
+ let focusActive = false;
117
+ /** Position among the open overlays; lifts a sheet opened later above the earlier ones. */
118
+ let depth = $state(0);
30
119
 
31
120
  function closeSlideUp(event?: Event) {
32
121
  isOpen = false;
33
- if (cleanupFocusTrap) {
34
- cleanupFocusTrap();
35
- cleanupFocusTrap = null;
122
+ if (focusActive) {
123
+ focusActive = false;
124
+ returnFocus();
36
125
  }
37
- returnFocus();
38
126
  if (onclick && event) {
39
127
  onclick(event);
40
128
  }
@@ -44,17 +132,87 @@
44
132
  const container = slideUpContainer;
45
133
  if (isOpen && container) {
46
134
  saveFocus();
47
- cleanupFocusTrap = trapFocus(container);
48
- setTimeout(() => {
49
- focusFirstElement(container);
135
+ focusActive = true;
136
+ const unlockScroll = lockBodyScroll();
137
+ const overlay = joinOverlayStack(container);
138
+ depth = overlay.depth;
139
+ const t = setTimeout(() => {
140
+ // Something inside has taken focus already (a field that
141
+ // focuses itself as it mounts): leave it there. `initialFocus`
142
+ // is the consumer saying where focus goes, so it still decides.
143
+ const active = document.activeElement;
144
+ const inside = !!active && active !== container && container.contains(active);
145
+ if (inside && !(initialFocus && container.querySelector(initialFocus))) return;
146
+ focusFirstElement(container, initialFocus);
50
147
  }, 0);
51
- } else if (!isOpen && cleanupFocusTrap) {
52
- cleanupFocusTrap();
53
- cleanupFocusTrap = null;
54
- returnFocus();
148
+ // If the focused control is disabled or removed, focus lands on
149
+ // `<body>`; take Tab and Escape back from there.
150
+ const stopRecovery = recoverStrayFocus(container, {
151
+ onEscape: (event) => closeSlideUp(event),
152
+ });
153
+ // Where the on-screen keyboard covers the page, the overlay
154
+ // keeps to what is left above it.
155
+ const stopKeyboard = container.parentElement
156
+ ? followKeyboard(container.parentElement)
157
+ : undefined;
158
+ return () => {
159
+ clearTimeout(t);
160
+ stopRecovery();
161
+ stopKeyboard?.();
162
+ overlay.leave();
163
+ unlockScroll();
164
+ if (focusActive) {
165
+ focusActive = false;
166
+ returnFocus();
167
+ }
168
+ };
55
169
  }
56
170
  });
57
171
 
172
+ // For the toast stack: it starts below the header, which holds the close
173
+ // button, and stays off a pinned footer.
174
+ $effect(() => {
175
+ const top = headerElement;
176
+ if (!isOpen || !top) return;
177
+ return registerOverlayHeader(top);
178
+ });
179
+ $effect(() => {
180
+ const pinned = footerElement;
181
+ if (!isOpen || !pinned) return;
182
+ return registerOverlayFooter(pinned);
183
+ });
184
+
185
+ $effect(() => {
186
+ const container = slideUpContainer;
187
+ const zone = grip;
188
+ // With a footer the content scrolls, not the panel.
189
+ const scrolls = footer ? scroller : container;
190
+ if (!isOpen || !swipeToClose || !container || !zone || !scrolls) return;
191
+ const settle = () => {
192
+ dragging = false;
193
+ dragOffset = 0;
194
+ };
195
+ const stop = attachSheetDrag(
196
+ // Without a footer the panel is its own scrolling box.
197
+ { handleZone: zone, scroller: scrolls },
198
+ {
199
+ onStart: () => (dragging = true),
200
+ // Down only: there is nowhere for it to go upwards.
201
+ onMove: (distance) => (dragOffset = Math.max(0, distance)),
202
+ onEnd(distance, velocity, event) {
203
+ const far = distance > container.getBoundingClientRect().height * 0.3;
204
+ settle();
205
+ if (distance > 0 && (far || velocity >= FLICK_VELOCITY)) closeSlideUp(event);
206
+ },
207
+ onCancel: settle,
208
+ },
209
+ );
210
+ return () => {
211
+ stop();
212
+ settle();
213
+ };
214
+ });
215
+
58
216
  function handleBackdropClick(event: Event) {
59
217
  if (event.target === event.currentTarget) {
60
218
  closeSlideUp(event);
@@ -63,7 +221,8 @@
63
221
 
64
222
  function handleKeydown(event: Event) {
65
223
  const keyboardEvent = event as KeyboardEvent;
66
- if (keyboardEvent.key === 'Escape') {
224
+ if (keyboardEvent.key === 'Escape' && !keyboardEvent.defaultPrevented) {
225
+ keyboardEvent.preventDefault();
67
226
  closeSlideUp(event);
68
227
  }
69
228
  onkeydown?.(event);
@@ -71,42 +230,106 @@
71
230
  </script>
72
231
 
73
232
  {#if isOpen}
233
+ <!-- svelte-ignore a11y_click_events_have_key_events -->
74
234
  <div
75
- class="fixed inset-0 z-modal cursor-pointer bg-overlay"
235
+ class="group/overlay fixed inset-0 z-modal cursor-pointer bg-overlay"
236
+ style:z-index={depth > 0 ? `calc(var(--z-modal) + ${depth})` : undefined}
237
+ data-overlay-depth={depth}
76
238
  onclick={handleBackdropClick}
77
239
  onkeydown={handleKeydown}
78
- role="dialog"
79
- aria-modal="true"
80
- aria-labelledby={title ? slideTitleId : undefined}
81
- tabindex="-1"
82
- {...restProps}
240
+ role="presentation"
83
241
  >
84
242
  <div
85
243
  bind:this={slideUpContainer}
86
- class="fixed bottom-0 left-0 right-0 z-modal flex max-h-[90vh] cursor-default flex-col overflow-y-auto rounded-t-3xl bg-card shadow-xl animate-[slideUp_0.3s_ease-out]"
244
+ class={cn(
245
+ "group-data-keyboard-open/overlay:max-h-full",
246
+ "absolute bottom-0 left-0 right-0 z-modal flex max-h-[90dvh] cursor-default flex-col overflow-y-auto rounded-t-overlay border-t border-border-overlay bg-surface-overlay shadow-lg animate-[slideUp_0.3s_ease-out] motion-reduce:animate-none",
247
+ // With a footer the content scrolls between the header and it.
248
+ footer && "overflow-y-hidden",
249
+ // Back to rest after a swipe that did not close it.
250
+ swipeToClose &&
251
+ "overscroll-contain transition-transform duration-200 ease-out motion-reduce:transition-none",
252
+ className,
253
+ )}
254
+ style:transform={dragOffset > 0 ? `translateY(${dragOffset}px)` : undefined}
255
+ style:transition={dragging ? "none" : undefined}
256
+ data-dragging={dragging ? "true" : undefined}
257
+ role="dialog"
258
+ aria-modal="true"
259
+ aria-labelledby={title ? slideTitleId : undefined}
260
+ tabindex="-1"
261
+ onkeydown={(event) => trapTabKey(slideUpContainer, event)}
262
+ {...restProps}
87
263
  >
264
+ {#if swipeToClose}
265
+ <!-- Decorative: it adds a gesture, and the close button is the
266
+ control. It stays at the top while the content scrolls.
267
+ `touch-none`: otherwise the browser takes a touch here for
268
+ itself. The bar is drawn in the text colour where colours are
269
+ forced, since a background is dropped there. -->
270
+ <div
271
+ bind:this={grip}
272
+ data-sheet-grip
273
+ aria-hidden="true"
274
+ class="sticky top-0 z-10 flex h-[28px] shrink-0 cursor-grab touch-none items-start justify-center bg-surface-overlay pt-[10px] active:cursor-grabbing {OVERLAY_CHROME}"
275
+ >
276
+ <span
277
+ class="block h-1 w-9 rounded-pill bg-current text-description forced-colors:bg-[CanvasText]"
278
+ ></span>
279
+ </div>
280
+ {/if}
88
281
  {#if title}
89
- <div class="flex items-center justify-between px-6 pb-4 pt-6">
282
+ <!-- Chrome: laid out in px, with a title that stops at 1.3
283
+ times its size (util/overlay-chrome.ts). 12px between a long
284
+ title and the button: the title wraps, the button keeps its size. -->
285
+ <div
286
+ bind:this={headerElement}
287
+ class="flex shrink-0 items-center justify-between gap-[12px] px-6 pb-4 {OVERLAY_CHROME} {swipeToClose
288
+ ? 'pt-2'
289
+ : 'pt-6'}"
290
+ >
90
291
  <h2
91
292
  id={slideTitleId}
92
- class="text-2xl font-normal leading-8 tracking-normal text-headline"
293
+ class="min-w-0 {OVERLAY_TITLE_2XL} font-normal tracking-normal text-headline {OVERLAY_TITLE_WRAP} {enlargedText ? OVERLAY_TITLE_HYPHENS : ''}"
93
294
  >
94
295
  {title}
95
296
  </h2>
96
297
  <button
97
298
  type="button"
98
299
  onclick={closeSlideUp}
99
- class="flex h-8 w-8 cursor-pointer items-center justify-center rounded-full text-2xl text-description transition-colors hover:bg-base-100 hover:text-headline"
100
- aria-label="Close"
300
+ class="focus-ring pointer-coarse:relative flex h-8 w-8 shrink-0 cursor-pointer items-center justify-center rounded-full {OVERLAY_CLOSE_GLYPH} text-description transition-colors hover:bg-surface-overlay-hover hover:text-headline active:bg-surface-active {TOUCH_HIT_AREA}"
301
+ aria-label={closeLabel}
101
302
  >
102
303
  ×
103
304
  </button>
104
305
  </div>
105
306
  {/if}
106
307
 
107
- <div class="flex-1 px-6 pb-6">
108
- {@render children?.()}
109
- </div>
308
+ {#if footer}
309
+ <!-- `pt-1`: a scroll container clips, and the focus ring of a
310
+ first control needs the room. -->
311
+ <div
312
+ bind:this={scroller}
313
+ data-slide-up-content
314
+ class="min-h-0 flex-1 overflow-y-auto overscroll-contain px-[24px] pt-[4px] pb-[16px]"
315
+ >
316
+ {@render children?.()}
317
+ </div>
318
+ <!-- Clear of the home indicator on a phone; over the keyboard
319
+ that is under the keyboard, and 16px is enough. -->
320
+ <div
321
+ bind:this={footerElement}
322
+ data-slide-up-footer
323
+ class="flex shrink-0 flex-wrap justify-end gap-[8px] border-t border-border-overlay px-[24px] pt-[16px] pb-[calc(16px+env(safe-area-inset-bottom,0px))] group-data-keyboard-open/overlay:pb-[16px]"
324
+ >
325
+ {@render footer()}
326
+ </div>
327
+ {:else}
328
+ <!-- Clear of the home indicator on a phone. -->
329
+ <div class="flex-1 px-[24px] pb-[calc(1.5rem+env(safe-area-inset-bottom,0px))]">
330
+ {@render children?.()}
331
+ </div>
332
+ {/if}
110
333
  </div>
111
334
  </div>
112
335
  {/if}
@@ -1,12 +1,39 @@
1
+ import type { Snippet } from 'svelte';
1
2
  interface Props {
3
+ /** Extra classes for the host element. */
4
+ class?: string;
2
5
  isOpen?: boolean;
3
6
  title?: string;
7
+ /** Accessible name of the close button. */
8
+ closeLabel?: string;
9
+ /**
10
+ * CSS selector, looked up inside the sheet, of the control that takes
11
+ * focus when it opens. Without it, or with no match, the first control does.
12
+ */
13
+ initialFocus?: string;
14
+ /**
15
+ * Adds a grip at the top and lets a swipe down close the sheet. The
16
+ * grip drags from anywhere; a swipe on the content closes only when
17
+ * the content is at its top, and scrolls it otherwise. The close
18
+ * button, the backdrop and Escape stay, so nothing depends on the
19
+ * gesture.
20
+ */
21
+ swipeToClose?: boolean;
22
+ /**
23
+ * Runs when the sheet closes itself, with the event that closed it:
24
+ * the click, the Escape keydown, or the end of a swipe.
25
+ */
4
26
  onclick?: (event: Event) => void;
5
27
  onkeydown?: (event: Event) => void;
28
+ children?: Snippet;
29
+ /**
30
+ * Pinned to the bottom of the sheet, below the content, which then
31
+ * scrolls on its own: for the buttons of a form. It stays above the
32
+ * on-screen keyboard, and toasts keep off it. Without it the sheet is
33
+ * as it always was: one box that scrolls as a whole.
34
+ */
35
+ footer?: Snippet;
6
36
  }
7
- type $$ComponentProps = Props & {
8
- children?: any;
9
- };
10
- declare const SlideUp: import("svelte").Component<$$ComponentProps, {}, "isOpen">;
37
+ declare const SlideUp: import("svelte").Component<Props, {}, "isOpen">;
11
38
  type SlideUp = ReturnType<typeof SlideUp>;
12
39
  export default SlideUp;