@noxlovette/material 0.5.0 → 0.6.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 (316) hide show
  1. package/bin/material-claude-skill.js +31 -0
  2. package/claude-skill/material-design/SKILL.md +68 -0
  3. package/claude-skill/material-design/references/accessibility-checklist.md +29 -0
  4. package/claude-skill/material-design/references/component-patterns.md +55 -0
  5. package/claude-skill/material-design/references/motion-guide.md +163 -0
  6. package/claude-skill/material-design/references/tokens-and-styles.md +68 -0
  7. package/dist/animation/Shapes.stories.svelte +60 -0
  8. package/dist/animation/Shapes.stories.svelte.d.ts +3 -0
  9. package/dist/animation/TransitionPatterns.stories.svelte +32 -20
  10. package/dist/animation/containerTransform.d.ts +11 -0
  11. package/dist/animation/containerTransform.js +11 -0
  12. package/dist/animation/enterExit.d.ts +9 -0
  13. package/dist/animation/enterExit.js +6 -3
  14. package/dist/animation/index.d.ts +1 -0
  15. package/dist/animation/index.js +1 -0
  16. package/dist/animation/shapeMorph.svelte.d.ts +52 -0
  17. package/dist/animation/shapeMorph.svelte.js +112 -0
  18. package/dist/animation/shapesAnimatableSmall.d.ts +28 -22
  19. package/dist/animation/shapesAnimatableSmall.js +32 -23
  20. package/dist/animation/sharedAxisTransition.d.ts +22 -0
  21. package/dist/animation/sharedAxisTransition.js +25 -1
  22. package/dist/animation/skeleton.d.ts +6 -1
  23. package/dist/animation/skeleton.js +6 -1
  24. package/dist/components/badge/Badge.mdx +70 -0
  25. package/dist/components/badge/Badge.stories.svelte +38 -20
  26. package/dist/components/badge/Badge.svelte +12 -5
  27. package/dist/components/badge/theme.d.ts +30 -7
  28. package/dist/components/badge/theme.js +24 -4
  29. package/dist/components/badge/types.d.ts +18 -4
  30. package/dist/components/buttons/Button.mdx +85 -0
  31. package/dist/components/buttons/Button.stories.svelte +62 -27
  32. package/dist/components/buttons/Button.svelte +29 -25
  33. package/dist/components/buttons/Button.svelte.d.ts +11 -9
  34. package/dist/components/buttons/ButtonIcon.mdx +52 -0
  35. package/dist/components/buttons/ButtonIcon.stories.svelte +72 -48
  36. package/dist/components/buttons/ButtonIcon.svelte +58 -36
  37. package/dist/components/buttons/ButtonIcon.svelte.d.ts +9 -7
  38. package/dist/components/buttons/FAB.mdx +84 -0
  39. package/dist/components/buttons/FAB.stories.svelte +103 -24
  40. package/dist/components/buttons/FAB.stories.svelte.d.ts +2 -17
  41. package/dist/components/buttons/FAB.svelte +353 -29
  42. package/dist/components/buttons/FAB.svelte.d.ts +11 -6
  43. package/dist/components/buttons/FABMenu.svelte +27 -8
  44. package/dist/components/buttons/FABMenu.svelte.d.ts +7 -3
  45. package/dist/components/buttons/FABMenuItem.svelte +20 -16
  46. package/dist/components/buttons/FABMenuItem.svelte.d.ts +3 -3
  47. package/dist/components/buttons/Toggle.stories.svelte +31 -23
  48. package/dist/components/buttons/Toggle.stories.svelte.d.ts +2 -17
  49. package/dist/components/buttons/Toggle.svelte +28 -25
  50. package/dist/components/buttons/Toggle.svelte.d.ts +5 -5
  51. package/dist/components/buttons/button-group/ButtonGroup.mdx +39 -0
  52. package/dist/components/buttons/button-group/ButtonGroup.stories.svelte +62 -43
  53. package/dist/components/buttons/button-group/ButtonGroup.stories.svelte.d.ts +2 -17
  54. package/dist/components/buttons/button-group/ButtonGroup.svelte +102 -8
  55. package/dist/components/buttons/button-group/ButtonGroup.svelte.d.ts +6 -7
  56. package/dist/components/buttons/button-group/theme.d.ts +45 -15
  57. package/dist/components/buttons/button-group/theme.js +13 -8
  58. package/dist/components/buttons/button-group/types.d.ts +13 -7
  59. package/dist/components/buttons/connected/ConnectedButtonGroup.mdx +43 -0
  60. package/dist/components/buttons/connected/ConnectedButtonGroup.stories.svelte +56 -74
  61. package/dist/components/buttons/connected/ConnectedButtonGroup.stories.svelte.d.ts +2 -17
  62. package/dist/components/buttons/connected/ConnectedButtonGroup.svelte +16 -4
  63. package/dist/components/buttons/connected/ConnectedButtonGroup.svelte.d.ts +4 -4
  64. package/dist/components/buttons/connected/ConnectedButtonGroupItem.svelte +35 -8
  65. package/dist/components/buttons/connected/ConnectedButtonGroupItem.svelte.d.ts +2 -3
  66. package/dist/components/buttons/connected/theme.d.ts +33 -18
  67. package/dist/components/buttons/connected/theme.js +32 -9
  68. package/dist/components/buttons/connected/types.d.ts +36 -9
  69. package/dist/components/buttons/shapeMorph.d.ts +26 -0
  70. package/dist/components/buttons/shapeMorph.js +142 -0
  71. package/dist/components/buttons/split-button/SplitButton.mdx +48 -0
  72. package/dist/components/buttons/split-button/SplitButton.stories.svelte +9 -14
  73. package/dist/components/buttons/split-button/SplitButton.svelte +65 -48
  74. package/dist/components/buttons/split-button/SplitButton.svelte.d.ts +6 -11
  75. package/dist/components/buttons/split-button/theme.d.ts +110 -17
  76. package/dist/components/buttons/split-button/theme.js +74 -16
  77. package/dist/components/buttons/split-button/types.d.ts +24 -18
  78. package/dist/components/buttons/theme.d.ts +422 -230
  79. package/dist/components/buttons/theme.js +286 -380
  80. package/dist/components/buttons/types.d.ts +130 -125
  81. package/dist/components/cards/Card.mdx +44 -0
  82. package/dist/components/cards/Card.stories.svelte +11 -11
  83. package/dist/components/cards/theme.js +5 -5
  84. package/dist/components/chips/Chip.mdx +68 -0
  85. package/dist/components/chips/Chip.stories.svelte +4 -4
  86. package/dist/components/chips/theme.js +3 -3
  87. package/dist/components/containers/action-rail/ActionRail.stories.svelte +1 -0
  88. package/dist/components/containers/action-rail/theme.js +1 -1
  89. package/dist/components/containers/bottom-sheet/BottomSheet.mdx +64 -0
  90. package/dist/components/containers/bottom-sheet/BottomSheet.stories.svelte +108 -12
  91. package/dist/components/containers/bottom-sheet/BottomSheet.svelte +179 -109
  92. package/dist/components/containers/bottom-sheet/BottomSheet.svelte.d.ts +10 -5
  93. package/dist/components/containers/bottom-sheet/index.d.ts +1 -0
  94. package/dist/components/containers/bottom-sheet/index.js +1 -0
  95. package/dist/components/containers/bottom-sheet/theme.d.ts +45 -0
  96. package/dist/components/containers/bottom-sheet/theme.js +42 -0
  97. package/dist/components/containers/bottom-sheet/types.d.ts +37 -5
  98. package/dist/components/containers/carousel/Carousel.mdx +80 -0
  99. package/dist/components/containers/carousel/Carousel.stories.svelte +131 -0
  100. package/dist/components/containers/carousel/Carousel.stories.svelte.d.ts +4 -0
  101. package/dist/components/containers/carousel/Carousel.svelte +194 -0
  102. package/dist/components/containers/carousel/Carousel.svelte.d.ts +25 -0
  103. package/dist/components/containers/carousel/index.d.ts +3 -0
  104. package/dist/components/containers/{stack → carousel}/index.js +1 -2
  105. package/dist/components/containers/carousel/keylines.d.ts +32 -0
  106. package/dist/components/containers/carousel/keylines.js +88 -0
  107. package/dist/components/containers/carousel/theme.d.ts +162 -0
  108. package/dist/components/containers/carousel/theme.js +67 -0
  109. package/dist/components/containers/carousel/types.d.ts +52 -0
  110. package/dist/components/containers/context-menu/ContextMenu.stories.svelte +1 -0
  111. package/dist/components/containers/context-menu/ContextMenu.svelte +2 -2
  112. package/dist/components/containers/context-menu/ContextMenu.svelte.d.ts +1 -1
  113. package/dist/components/containers/context-menu/theme.js +10 -10
  114. package/dist/components/containers/dialogue/Dialogue.mdx +65 -0
  115. package/dist/components/containers/dialogue/Dialogue.stories.svelte +4 -4
  116. package/dist/components/containers/dialogue/Dialogue.svelte +1 -1
  117. package/dist/components/containers/dialogue/theme.js +3 -3
  118. package/dist/components/containers/divider/Divider.stories.svelte +2 -1
  119. package/dist/components/containers/divider/Divider.svelte +2 -2
  120. package/dist/components/containers/divider/theme.d.ts +6 -6
  121. package/dist/components/containers/divider/theme.js +2 -2
  122. package/dist/components/containers/index.d.ts +1 -1
  123. package/dist/components/containers/index.js +1 -1
  124. package/dist/components/containers/link-preview/theme.js +2 -2
  125. package/dist/components/containers/list/List.svelte +18 -0
  126. package/dist/components/containers/list/List.svelte.d.ts +4 -0
  127. package/dist/components/containers/list/ListItem.mdx +100 -0
  128. package/dist/components/containers/list/ListItem.stories.svelte +177 -42
  129. package/dist/components/containers/list/ListItem.stories.svelte.d.ts +2 -17
  130. package/dist/components/containers/list/ListItem.svelte +92 -37
  131. package/dist/components/containers/list/ListItem.svelte.d.ts +1 -1
  132. package/dist/components/containers/list/context.d.ts +6 -0
  133. package/dist/components/containers/list/context.js +4 -0
  134. package/dist/components/containers/list/index.d.ts +1 -0
  135. package/dist/components/containers/list/index.js +1 -0
  136. package/dist/components/containers/list/theme.d.ts +487 -12
  137. package/dist/components/containers/list/theme.js +140 -13
  138. package/dist/components/containers/list/types.d.ts +39 -5
  139. package/dist/components/containers/menu/Menu.mdx +52 -0
  140. package/dist/components/containers/menu/Menu.stories.svelte +14 -14
  141. package/dist/components/containers/menu/Menu.svelte +1 -1
  142. package/dist/components/containers/menu/MenuGroup.svelte +1 -1
  143. package/dist/components/containers/menu/MenuGroup.svelte.d.ts +1 -1
  144. package/dist/components/containers/menu/menu-item/MenuItem.svelte +1 -1
  145. package/dist/components/containers/menu/theme.js +8 -8
  146. package/dist/components/containers/pane/DraggablePane.stories.svelte +4 -3
  147. package/dist/components/containers/pane/DraggablePane.svelte +2 -2
  148. package/dist/components/containers/pane/Pane.stories.svelte +11 -10
  149. package/dist/components/containers/pane/Pane.svelte +24 -2
  150. package/dist/components/containers/pane/PaneGrid.stories.svelte +19 -18
  151. package/dist/components/containers/pane/PaneGrid.svelte +3 -2
  152. package/dist/components/containers/pane/PaneGrid.svelte.d.ts +2 -1
  153. package/dist/components/containers/pane/PaneHandle.svelte +48 -2
  154. package/dist/components/containers/pane/PaneHandle.svelte.d.ts +4 -0
  155. package/dist/components/containers/pane/resizeStore.svelte.d.ts +10 -1
  156. package/dist/components/containers/pane/resizeStore.svelte.js +13 -2
  157. package/dist/components/containers/pane/theme.js +129 -45
  158. package/dist/components/containers/pane/types.d.ts +3 -2
  159. package/dist/components/containers/popover/Popover.mdx +45 -0
  160. package/dist/components/containers/popover/Popover.stories.svelte +1 -1
  161. package/dist/components/containers/popover/Popover.svelte +1 -1
  162. package/dist/components/containers/popover/theme.js +3 -3
  163. package/dist/components/containers/scroll-area/theme.js +2 -2
  164. package/dist/components/containers/side-sheet/SideSheet.mdx +71 -0
  165. package/dist/components/containers/side-sheet/SideSheet.stories.svelte +113 -17
  166. package/dist/components/containers/side-sheet/SideSheet.svelte +113 -66
  167. package/dist/components/containers/side-sheet/SideSheet.svelte.d.ts +8 -7
  168. package/dist/components/containers/side-sheet/index.d.ts +1 -0
  169. package/dist/components/containers/side-sheet/index.js +1 -0
  170. package/dist/components/containers/side-sheet/theme.d.ts +108 -0
  171. package/dist/components/containers/side-sheet/theme.js +72 -0
  172. package/dist/components/containers/side-sheet/types.d.ts +35 -7
  173. package/dist/components/date/DateField.stories.svelte +4 -3
  174. package/dist/components/date/DateField.svelte +49 -26
  175. package/dist/components/date/DateField.svelte.d.ts +2 -0
  176. package/dist/components/date/DateRangeField.stories.svelte +4 -3
  177. package/dist/components/date/DateRangeField.svelte +54 -31
  178. package/dist/components/date/DateRangeField.svelte.d.ts +2 -0
  179. package/dist/components/date/calendarMotion.d.ts +9 -0
  180. package/dist/components/date/calendarMotion.js +23 -0
  181. package/dist/components/date/theme.d.ts +7 -7
  182. package/dist/components/date/theme.js +34 -30
  183. package/dist/components/forms/checkbox/Checkbox.mdx +35 -0
  184. package/dist/components/forms/checkbox/Checkbox.stories.svelte +2 -2
  185. package/dist/components/forms/checkbox/Checkbox.svelte +1 -1
  186. package/dist/components/forms/checkbox/theme.js +3 -3
  187. package/dist/components/forms/command/Command.stories.svelte +1 -0
  188. package/dist/components/forms/command/theme.js +9 -9
  189. package/dist/components/forms/pin/theme.js +4 -4
  190. package/dist/components/forms/radio-group/RadioGroup.svelte +1 -1
  191. package/dist/components/forms/radio-group/theme.js +5 -5
  192. package/dist/components/forms/search/Search.mdx +38 -0
  193. package/dist/components/forms/search/Search.stories.svelte +19 -9
  194. package/dist/components/forms/search/Search.svelte +40 -17
  195. package/dist/components/forms/search/Search.svelte.d.ts +2 -2
  196. package/dist/components/forms/search/theme.d.ts +45 -12
  197. package/dist/components/forms/search/theme.js +13 -8
  198. package/dist/components/forms/search/types.d.ts +18 -12
  199. package/dist/components/forms/select/Select.mdx +53 -0
  200. package/dist/components/forms/select/Select.stories.svelte +4 -4
  201. package/dist/components/forms/select/Select.svelte +10 -2
  202. package/dist/components/forms/select/SelectItem.svelte +1 -1
  203. package/dist/components/forms/select/theme.js +12 -12
  204. package/dist/components/forms/slider/Slider.mdx +85 -0
  205. package/dist/components/forms/slider/Slider.stories.svelte +7 -7
  206. package/dist/components/forms/slider/Slider.svelte +46 -28
  207. package/dist/components/forms/slider/theme.d.ts +14 -0
  208. package/dist/components/forms/slider/theme.js +28 -17
  209. package/dist/components/forms/slider/types.d.ts +3 -2
  210. package/dist/components/forms/switch/Switch.mdx +38 -0
  211. package/dist/components/forms/switch/Switch.stories.svelte +3 -3
  212. package/dist/components/forms/switch/theme.js +6 -6
  213. package/dist/components/forms/textfield/Textfield.mdx +53 -0
  214. package/dist/components/forms/textfield/Textfield.stories.svelte +6 -6
  215. package/dist/components/forms/textfield/Textfield.svelte +1 -0
  216. package/dist/components/forms/textfield/theme.d.ts +3 -0
  217. package/dist/components/forms/textfield/theme.js +22 -19
  218. package/dist/components/forms/toggle-group/theme.js +2 -2
  219. package/dist/components/forms/tooltip/Tooltip.stories.svelte +1 -0
  220. package/dist/components/forms/tooltip/theme.js +3 -3
  221. package/dist/components/misc/Avatar.stories.svelte +5 -4
  222. package/dist/components/misc/ThemeSettings.svelte +9 -9
  223. package/dist/components/misc/ThemeSwitcher.svelte +3 -3
  224. package/dist/components/misc/theme.js +4 -4
  225. package/dist/components/nav/appbar/AppBar.mdx +71 -0
  226. package/dist/components/nav/appbar/AppBar.stories.svelte +93 -3
  227. package/dist/components/nav/appbar/AppBar.stories.svelte.d.ts +2 -17
  228. package/dist/components/nav/appbar/AppBar.svelte +90 -37
  229. package/dist/components/nav/appbar/AppBar.svelte.d.ts +9 -2
  230. package/dist/components/nav/appbar/theme.d.ts +85 -18
  231. package/dist/components/nav/appbar/theme.js +159 -23
  232. package/dist/components/nav/appbar/types.d.ts +46 -9
  233. package/dist/components/nav/breadcrumb/Breadcrumb.stories.svelte +1 -0
  234. package/dist/components/nav/breadcrumb/theme.js +5 -5
  235. package/dist/components/nav/navbar/Navbar.mdx +38 -0
  236. package/dist/components/nav/navbar/Navbar.svelte +1 -1
  237. package/dist/components/nav/navbar/NavbarItem.svelte +12 -9
  238. package/dist/components/nav/navbar/theme.js +6 -6
  239. package/dist/components/nav/rail/Rail.mdx +73 -0
  240. package/dist/components/nav/rail/Rail.stories.svelte +3 -7
  241. package/dist/components/nav/rail/Rail.svelte +1 -0
  242. package/dist/components/nav/rail/RailItem.svelte +12 -9
  243. package/dist/components/nav/rail/theme.js +13 -13
  244. package/dist/components/nav/rail/types.d.ts +4 -1
  245. package/dist/components/nav/tabs/TabHolder.svelte +29 -3
  246. package/dist/components/nav/tabs/TabHolder.svelte.d.ts +3 -1
  247. package/dist/components/nav/tabs/Tabs.mdx +62 -0
  248. package/dist/components/nav/tabs/Tabs.stories.svelte +1 -1
  249. package/dist/components/nav/tabs/theme.js +4 -4
  250. package/dist/components/pill/Pill.mdx +32 -0
  251. package/dist/components/pill/Pill.stories.svelte +1 -1
  252. package/dist/components/pill/theme.d.ts +1 -1
  253. package/dist/components/pill/theme.js +1 -1
  254. package/dist/components/progress/LinearProgress.svelte +1 -1
  255. package/dist/components/progress/Progress.mdx +50 -0
  256. package/dist/components/progress/Progress.stories.svelte +6 -6
  257. package/dist/components/snackbar/Snackbar.mdx +52 -0
  258. package/dist/components/snackbar/Snackbar.stories.svelte +5 -5
  259. package/dist/components/snackbar/Snackbar.svelte +1 -1
  260. package/dist/components/snackbar/theme.d.ts +3 -3
  261. package/dist/components/snackbar/theme.js +4 -4
  262. package/dist/components/table/Table.stories.svelte +1 -0
  263. package/dist/components/table/TableHeader.svelte +1 -1
  264. package/dist/components/table/theme.js +3 -3
  265. package/dist/components/time/TimeField.stories.svelte +3 -2
  266. package/dist/components/time/TimeField.svelte +14 -8
  267. package/dist/components/time/TimeField.svelte.d.ts +6 -0
  268. package/dist/components/time/TimepickerInput.svelte +9 -5
  269. package/dist/components/time/theme.js +5 -5
  270. package/dist/components/time/types.d.ts +11 -1
  271. package/dist/components/toolbar/Toolbar.stories.svelte +1 -0
  272. package/dist/components/toolbar/Toolbar.svelte +1 -1
  273. package/dist/components/toolbar/Toolbar.svelte.d.ts +1 -1
  274. package/dist/components/toolbar/theme.js +14 -14
  275. package/dist/components/typography/Typography.mdx +67 -0
  276. package/dist/components/typography/body/Body.stories.svelte +2 -1
  277. package/dist/components/typography/body/theme.d.ts +15 -12
  278. package/dist/components/typography/body/theme.js +19 -4
  279. package/dist/components/typography/body/types.d.ts +2 -1
  280. package/dist/components/typography/display/Display.stories.svelte +2 -1
  281. package/dist/components/typography/display/theme.d.ts +15 -12
  282. package/dist/components/typography/display/theme.js +19 -4
  283. package/dist/components/typography/display/types.d.ts +2 -1
  284. package/dist/components/typography/headline/Headline.stories.svelte +2 -1
  285. package/dist/components/typography/headline/theme.d.ts +15 -12
  286. package/dist/components/typography/headline/theme.js +19 -4
  287. package/dist/components/typography/headline/types.d.ts +2 -1
  288. package/dist/components/typography/kbd/Kbd.stories.svelte +2 -1
  289. package/dist/components/typography/kbd/theme.d.ts +4 -4
  290. package/dist/components/typography/kbd/theme.js +2 -2
  291. package/dist/components/typography/label/Label.stories.svelte +2 -1
  292. package/dist/components/typography/label/theme.d.ts +15 -12
  293. package/dist/components/typography/label/theme.js +19 -4
  294. package/dist/components/typography/label/types.d.ts +2 -1
  295. package/dist/components/typography/title/Title.stories.svelte +2 -1
  296. package/dist/components/typography/title/theme.d.ts +15 -12
  297. package/dist/components/typography/title/theme.js +19 -4
  298. package/dist/components/typography/title/types.d.ts +2 -1
  299. package/dist/index.css +1 -0
  300. package/dist/styles/component.css +78 -175
  301. package/dist/styles/elevation.css +9 -0
  302. package/dist/styles/spacing.css +29 -0
  303. package/dist/styles/typescale.css +635 -20
  304. package/dist/utils/Layer.svelte +1 -1
  305. package/dist/utils/icon/Icon.svelte +8 -6
  306. package/dist/utils/icon/loadingShapes.js +11 -10
  307. package/package.json +19 -15
  308. package/dist/components/containers/stack/HStack.svelte +0 -23
  309. package/dist/components/containers/stack/HStack.svelte.d.ts +0 -5
  310. package/dist/components/containers/stack/VStack.svelte +0 -23
  311. package/dist/components/containers/stack/VStack.svelte.d.ts +0 -5
  312. package/dist/components/containers/stack/index.d.ts +0 -4
  313. package/dist/components/containers/stack/theme.d.ts +0 -66
  314. package/dist/components/containers/stack/theme.js +0 -26
  315. package/dist/components/containers/stack/types.d.ts +0 -12
  316. /package/dist/components/containers/{stack → carousel}/types.js +0 -0
@@ -3,22 +3,50 @@ import type { Snippet } from 'svelte';
3
3
  * Props for the SideSheet component.
4
4
  */
5
5
  export interface SideSheetProps {
6
+ /** The title at the top of the sheet. It also names the sheet for assistive technology. */
7
+ headline: string;
8
+ /** The sheet's content. It scrolls inside the sheet, with 24dp padding. */
9
+ children: Snippet;
6
10
  /**
7
- * The title displayed at the top of the side sheet.
11
+ * Buttons pinned to the bottom of the sheet, e.g. Save and Cancel. Left-aligned, most
12
+ * important first.
8
13
  */
9
- headline: string;
14
+ actions?: Snippet;
10
15
  /**
11
- * The content of the side sheet.
16
+ * - `modal`: in front of the app above a scrim, blocking everything else until it's closed
17
+ * (close button, Esc, or a scrim tap). Use it on compact and medium windows, or when the
18
+ * content needs full attention.
19
+ * - `standard`: part of the layout. Place it as the last child of a full-height row; the
20
+ * content beside it reflows as it opens and closes, and stays usable.
21
+ * @default 'modal'
12
22
  */
13
- children: Snippet;
23
+ variant?: 'modal' | 'standard';
14
24
  /**
15
- * Whether the sheet is shown. Bind it (`bind:open`) so the sheet can play its exit animation
16
- * before unmounting.
25
+ * Whether the sheet is shown. Bind it (`bind:open`) so the sheet can close itself and play
26
+ * its exit animation.
17
27
  * @default true
18
28
  */
19
29
  open?: boolean;
20
30
  /**
21
- * Called when the user dismisses the sheet (close button, Esc, backdrop click).
31
+ * Sheet width in px. M3 sizes side sheets at 256dp and never wider than 400dp; wider values
32
+ * are capped at 400.
33
+ * @default 256
34
+ */
35
+ width?: number;
36
+ /** Floats the sheet 16dp from the window edges with 16dp corners all round. */
37
+ detached?: boolean;
38
+ /**
39
+ * Draws the optional dividers: along a docked standard sheet's inner edge, and above the
40
+ * actions.
41
+ * @default true
42
+ */
43
+ divider?: boolean;
44
+ /**
45
+ * Shows a back button before the headline, for sheets that navigate within themselves. Called
46
+ * when it's activated.
22
47
  */
48
+ onback?: () => void;
49
+ /** Called when the user closes the sheet (close button, Esc, or a scrim tap). */
23
50
  close?: () => void;
51
+ class?: string;
24
52
  }
@@ -4,6 +4,7 @@
4
4
 
5
5
  const { Story } = defineMeta({
6
6
  title: 'Date/DateField',
7
+ tags: ['autodocs'],
7
8
  component: DateField,
8
9
  argTypes: {
9
10
  label: { control: 'text' },
@@ -24,14 +25,14 @@
24
25
 
25
26
  <Story name="Playground">
26
27
  {#snippet template(args)}
27
- <div class="max-w-sm p-6">
28
+ <div class="p-spacing-300 max-w-sm">
28
29
  <DateField {...args} />
29
30
  </div>
30
31
  {/snippet}
31
32
  </Story>
32
33
 
33
34
  <Story name="Outlined States" asChild>
34
- <div class="flex max-w-sm flex-col gap-6 p-6">
35
+ <div class="gap-spacing-300 p-spacing-300 flex max-w-sm flex-col">
35
36
  <DateField variant="outlined" label="Default" />
36
37
  <DateField variant="outlined" label="Required" required />
37
38
  <DateField variant="outlined" label="Error" error>
@@ -44,7 +45,7 @@
44
45
  </Story>
45
46
 
46
47
  <Story name="Filled States" asChild>
47
- <div class="flex max-w-sm flex-col gap-6 p-6">
48
+ <div class="gap-spacing-300 p-spacing-300 flex max-w-sm flex-col">
48
49
  <DateField variant="filled" label="Default" />
49
50
  <DateField variant="filled" label="Required" required />
50
51
  <DateField variant="filled" label="Error" error>
@@ -2,15 +2,19 @@
2
2
  @component
3
3
  DateField is a text field that allows users to enter a date or pick it from a docked calendar.
4
4
 
5
+ Changing the visible month slides the grid with the M3 lateral transition (see calendarMotion.ts).
6
+
5
7
  @see https://m3.material.io/components/date-pickers/guidelines
6
8
  -->
7
9
  <script lang="ts">
8
10
  import { DatePicker, useId } from 'bits-ui';
11
+ import type { DateValue } from '@internationalized/date';
9
12
  import { enterExit, presence } from '../../animation/index.js';
10
13
  import ButtonIcon from '../buttons/ButtonIcon.svelte';
11
14
  import Icon from '../../utils/icon/Icon.svelte';
12
15
  import Layer from '../../utils/Layer.svelte';
13
16
  import type { DateFieldProps } from './types';
17
+ import { slideMonth } from './calendarMotion.js';
14
18
  import { dateCalendar, dateField, dateSegment } from './theme';
15
19
 
16
20
  let {
@@ -30,10 +34,18 @@ DateField is a text field that allows users to enter a date or pick it from a do
30
34
 
31
35
  const cls = $derived(dateField({ disabled, error, variant }));
32
36
  const calendar = dateCalendar();
37
+
38
+ // Starts undefined on purpose: bits-ui writes its own default (from value, else today) through
39
+ // the setter on mount, which is why the getter below can assert.
40
+ let placeholder = $state<DateValue>();
41
+ let grids = $state<HTMLElement | null>(null);
42
+ const setPlaceholder = (next: DateValue) =>
43
+ slideMonth(placeholder, next, grids, (date) => (placeholder = date));
33
44
  </script>
34
45
 
35
46
  <DatePicker.Root
36
47
  bind:value
48
+ bind:placeholder={() => placeholder as DateValue, setPlaceholder}
37
49
  {weekStartsOn}
38
50
  {required}
39
51
  {disabled}
@@ -73,6 +85,7 @@ DateField is a text field that allows users to enter a date or pick it from a do
73
85
  <DatePicker.Trigger>
74
86
  {#snippet child({ props })}
75
87
  <ButtonIcon
88
+ variant="standard"
76
89
  {...props}
77
90
  {disabled}
78
91
  class={cls.trailingIcon()}
@@ -109,44 +122,54 @@ DateField is a text field that allows users to enter a date or pick it from a do
109
122
  <div class={calendar.nav()}>
110
123
  <DatePicker.PrevButton>
111
124
  {#snippet child({ props })}
112
- <ButtonIcon {...props} iconProps={{ name: 'chevron_left' }} />
125
+ <ButtonIcon
126
+ variant="standard"
127
+ {...props}
128
+ iconProps={{ name: 'chevron_left' }}
129
+ />
113
130
  {/snippet}
114
131
  </DatePicker.PrevButton>
115
132
  <DatePicker.NextButton>
116
133
  {#snippet child({ props })}
117
- <ButtonIcon {...props} iconProps={{ name: 'chevron_right' }} />
134
+ <ButtonIcon
135
+ variant="standard"
136
+ {...props}
137
+ iconProps={{ name: 'chevron_right' }}
138
+ />
118
139
  {/snippet}
119
140
  </DatePicker.NextButton>
120
141
  </div>
121
142
  </DatePicker.Header>
122
143
 
123
- {#each months as month (month.value.toString())}
124
- <DatePicker.Grid class={calendar.grid()}>
125
- <DatePicker.GridHead>
126
- <DatePicker.GridRow class={calendar.row()}>
127
- {#each weekdays as day, i (i)}
128
- <DatePicker.HeadCell class={calendar.weekday()}>
129
- {day}
130
- </DatePicker.HeadCell>
131
- {/each}
132
- </DatePicker.GridRow>
133
- </DatePicker.GridHead>
134
- <DatePicker.GridBody>
135
- {#each month.weeks as weekDates, i (i)}
144
+ <div bind:this={grids}>
145
+ {#each months as month (month.value.toString())}
146
+ <DatePicker.Grid class={calendar.grid()}>
147
+ <DatePicker.GridHead>
136
148
  <DatePicker.GridRow class={calendar.row()}>
137
- {#each weekDates as date (date.toString())}
138
- <DatePicker.Cell {date} month={month.value} class={calendar.cell()}>
139
- <DatePicker.Day class={calendar.day()}>
140
- <Layer />
141
- {date.day}
142
- </DatePicker.Day>
143
- </DatePicker.Cell>
149
+ {#each weekdays as day, i (i)}
150
+ <DatePicker.HeadCell class={calendar.weekday()}>
151
+ {day}
152
+ </DatePicker.HeadCell>
144
153
  {/each}
145
154
  </DatePicker.GridRow>
146
- {/each}
147
- </DatePicker.GridBody>
148
- </DatePicker.Grid>
149
- {/each}
155
+ </DatePicker.GridHead>
156
+ <DatePicker.GridBody>
157
+ {#each month.weeks as weekDates, i (i)}
158
+ <DatePicker.GridRow class={calendar.row()}>
159
+ {#each weekDates as date (date.toString())}
160
+ <DatePicker.Cell {date} month={month.value} class={calendar.cell()}>
161
+ <DatePicker.Day class={calendar.day()}>
162
+ <Layer />
163
+ {date.day}
164
+ </DatePicker.Day>
165
+ </DatePicker.Cell>
166
+ {/each}
167
+ </DatePicker.GridRow>
168
+ {/each}
169
+ </DatePicker.GridBody>
170
+ </DatePicker.Grid>
171
+ {/each}
172
+ </div>
150
173
  {/snippet}
151
174
  </DatePicker.Calendar>
152
175
  </div>
@@ -2,6 +2,8 @@ import type { DateFieldProps } from './types';
2
2
  /**
3
3
  * DateField is a text field that allows users to enter a date or pick it from a docked calendar.
4
4
  *
5
+ * Changing the visible month slides the grid with the M3 lateral transition (see calendarMotion.ts).
6
+ *
5
7
  * @see https://m3.material.io/components/date-pickers/guidelines
6
8
  */
7
9
  declare const DateField: import("svelte").Component<DateFieldProps, {}, "value">;
@@ -4,6 +4,7 @@
4
4
 
5
5
  const { Story } = defineMeta({
6
6
  title: 'Date/DateRangeField',
7
+ tags: ['autodocs'],
7
8
  component: DateRangeField,
8
9
  argTypes: {
9
10
  variant: { control: 'select', options: ['filled', 'outlined'] },
@@ -22,14 +23,14 @@
22
23
 
23
24
  <Story name="Playground">
24
25
  {#snippet template(args)}
25
- <div class="max-w-sm p-6">
26
+ <div class="p-spacing-300 max-w-sm">
26
27
  <DateRangeField {...args} />
27
28
  </div>
28
29
  {/snippet}
29
30
  </Story>
30
31
 
31
32
  <Story name="Outlined States" asChild>
32
- <div class="flex max-w-sm flex-col gap-6 p-6">
33
+ <div class="gap-spacing-300 p-spacing-300 flex max-w-sm flex-col">
33
34
  <DateRangeField variant="outlined" />
34
35
  <DateRangeField variant="outlined" error>
35
36
  {#snippet supportingText()}
@@ -41,7 +42,7 @@
41
42
  </Story>
42
43
 
43
44
  <Story name="Filled States" asChild>
44
- <div class="flex max-w-sm flex-col gap-6 p-6">
45
+ <div class="gap-spacing-300 p-spacing-300 flex max-w-sm flex-col">
45
46
  <DateRangeField variant="filled" />
46
47
  <DateRangeField variant="filled" error>
47
48
  {#snippet supportingText()}
@@ -3,15 +3,19 @@
3
3
  DateRangeField lets users enter or pick a date range (start + end) via two
4
4
  segment inputs and a shared docked calendar.
5
5
 
6
+ Changing the visible month slides the grid with the M3 lateral transition (see calendarMotion.ts).
7
+
6
8
  @see https://m3.material.io/components/date-pickers/guidelines
7
9
  -->
8
10
  <script lang="ts">
9
11
  import { DateRangePicker, Portal, useId } from 'bits-ui';
12
+ import type { DateValue } from '@internationalized/date';
10
13
  import { enterExit, presence } from '../../animation/index.js';
11
14
  import ButtonIcon from '../buttons/ButtonIcon.svelte';
12
15
  import Icon from '../../utils/icon/Icon.svelte';
13
16
  import Layer from '../../utils/Layer.svelte';
14
17
  import type { DateRangeFieldProps } from './types';
18
+ import { slideMonth } from './calendarMotion.js';
15
19
  import { dateCalendar, dateRangeField, dateSegment } from './theme';
16
20
 
17
21
  let {
@@ -33,6 +37,13 @@ segment inputs and a shared docked calendar.
33
37
 
34
38
  const cls = $derived(dateRangeField({ disabled, error, variant }));
35
39
  const calendar = dateCalendar();
40
+
41
+ // Starts undefined on purpose: bits-ui writes its own default (from value, else today) through
42
+ // the setter on mount, which is why the getter below can assert.
43
+ let placeholder = $state<DateValue>();
44
+ let grids = $state<HTMLElement | null>(null);
45
+ const setPlaceholder = (next: DateValue) =>
46
+ slideMonth(placeholder, next, grids, (date) => (placeholder = date));
36
47
  </script>
37
48
 
38
49
  {#snippet rangeInput(type: 'start' | 'end', fieldLabel: string)}
@@ -44,7 +55,7 @@ segment inputs and a shared docked calendar.
44
55
  id={`${id}-${type}`}
45
56
  >
46
57
  {#snippet children({ segments })}
47
- <div class="flex w-full pt-4 tabular-nums">
58
+ <div class="pt-spacing-200 flex w-full tabular-nums">
48
59
  {#each segments as { part, value: segment }}
49
60
  <DateRangePicker.Segment
50
61
  {part}
@@ -66,6 +77,7 @@ segment inputs and a shared docked calendar.
66
77
 
67
78
  <DateRangePicker.Root
68
79
  bind:value
80
+ bind:placeholder={() => placeholder as DateValue, setPlaceholder}
69
81
  {weekStartsOn}
70
82
  {required}
71
83
  {disabled}
@@ -90,6 +102,7 @@ segment inputs and a shared docked calendar.
90
102
  <DateRangePicker.Trigger>
91
103
  {#snippet child({ props })}
92
104
  <ButtonIcon
105
+ variant="standard"
93
106
  {...props}
94
107
  {disabled}
95
108
  class={cls.trailingIcon()}
@@ -118,48 +131,58 @@ segment inputs and a shared docked calendar.
118
131
  <div class={calendar.nav()}>
119
132
  <DateRangePicker.PrevButton>
120
133
  {#snippet child({ props })}
121
- <ButtonIcon {...props} iconProps={{ name: 'chevron_left' }} />
134
+ <ButtonIcon
135
+ variant="standard"
136
+ {...props}
137
+ iconProps={{ name: 'chevron_left' }}
138
+ />
122
139
  {/snippet}
123
140
  </DateRangePicker.PrevButton>
124
141
  <DateRangePicker.NextButton>
125
142
  {#snippet child({ props })}
126
- <ButtonIcon {...props} iconProps={{ name: 'chevron_right' }} />
143
+ <ButtonIcon
144
+ variant="standard"
145
+ {...props}
146
+ iconProps={{ name: 'chevron_right' }}
147
+ />
127
148
  {/snippet}
128
149
  </DateRangePicker.NextButton>
129
150
  </div>
130
151
  </DateRangePicker.Header>
131
152
 
132
- {#each months as month (month.value.toString())}
133
- <DateRangePicker.Grid class={calendar.grid()}>
134
- <DateRangePicker.GridHead>
135
- <DateRangePicker.GridRow class={calendar.row()}>
136
- {#each weekdays as day, i (i)}
137
- <DateRangePicker.HeadCell class={calendar.weekday()}>
138
- {day}
139
- </DateRangePicker.HeadCell>
140
- {/each}
141
- </DateRangePicker.GridRow>
142
- </DateRangePicker.GridHead>
143
- <DateRangePicker.GridBody>
144
- {#each month.weeks as weekDates, i (i)}
153
+ <div bind:this={grids}>
154
+ {#each months as month (month.value.toString())}
155
+ <DateRangePicker.Grid class={calendar.grid()}>
156
+ <DateRangePicker.GridHead>
145
157
  <DateRangePicker.GridRow class={calendar.row()}>
146
- {#each weekDates as date (date.toString())}
147
- <DateRangePicker.Cell
148
- {date}
149
- month={month.value}
150
- class={calendar.cell()}
151
- >
152
- <DateRangePicker.Day class={calendar.day()}>
153
- <Layer />
154
- {date.day}
155
- </DateRangePicker.Day>
156
- </DateRangePicker.Cell>
158
+ {#each weekdays as day, i (i)}
159
+ <DateRangePicker.HeadCell class={calendar.weekday()}>
160
+ {day}
161
+ </DateRangePicker.HeadCell>
157
162
  {/each}
158
163
  </DateRangePicker.GridRow>
159
- {/each}
160
- </DateRangePicker.GridBody>
161
- </DateRangePicker.Grid>
162
- {/each}
164
+ </DateRangePicker.GridHead>
165
+ <DateRangePicker.GridBody>
166
+ {#each month.weeks as weekDates, i (i)}
167
+ <DateRangePicker.GridRow class={calendar.row()}>
168
+ {#each weekDates as date (date.toString())}
169
+ <DateRangePicker.Cell
170
+ {date}
171
+ month={month.value}
172
+ class={calendar.cell()}
173
+ >
174
+ <DateRangePicker.Day class={calendar.day()}>
175
+ <Layer />
176
+ {date.day}
177
+ </DateRangePicker.Day>
178
+ </DateRangePicker.Cell>
179
+ {/each}
180
+ </DateRangePicker.GridRow>
181
+ {/each}
182
+ </DateRangePicker.GridBody>
183
+ </DateRangePicker.Grid>
184
+ {/each}
185
+ </div>
163
186
  {/snippet}
164
187
  </DateRangePicker.Calendar>
165
188
  </div>
@@ -3,6 +3,8 @@ import type { DateRangeFieldProps } from './types';
3
3
  * DateRangeField lets users enter or pick a date range (start + end) via two
4
4
  * segment inputs and a shared docked calendar.
5
5
  *
6
+ * Changing the visible month slides the grid with the M3 lateral transition (see calendarMotion.ts).
7
+ *
6
8
  * @see https://m3.material.io/components/date-pickers/guidelines
7
9
  */
8
10
  declare const DateRangeField: import("svelte").Component<DateRangeFieldProps, {}, "value">;
@@ -0,0 +1,9 @@
1
+ import type { DateValue } from '@internationalized/date';
2
+ /**
3
+ * Applies a new calendar placeholder (the month the grid shows). When the visible month changes
4
+ * while the calendar is open, the grid runs the M3 lateral transition — months are peers, so a
5
+ * later month pushes in from the right and an earlier one from the left. Covers every way the
6
+ * month changes: prev/next buttons, arrow keys past the month edge, picking an outside day.
7
+ * https://m3.material.io/styles/motion/transitions/transition-patterns#lateral
8
+ */
9
+ export declare const slideMonth: (current: DateValue | undefined, next: DateValue, target: HTMLElement | null | undefined, apply: (next: DateValue) => void) => undefined;
@@ -0,0 +1,23 @@
1
+ import { lateral } from '../../animation/index.js';
2
+ import { tick } from 'svelte';
3
+ const monthIndex = (date) => date.year * 12 + date.month;
4
+ /**
5
+ * Applies a new calendar placeholder (the month the grid shows). When the visible month changes
6
+ * while the calendar is open, the grid runs the M3 lateral transition — months are peers, so a
7
+ * later month pushes in from the right and an earlier one from the left. Covers every way the
8
+ * month changes: prev/next buttons, arrow keys past the month edge, picking an outside day.
9
+ * https://m3.material.io/styles/motion/transitions/transition-patterns#lateral
10
+ */
11
+ export const slideMonth = (current, next, target, apply) => {
12
+ const update = async () => {
13
+ apply(next);
14
+ await tick();
15
+ };
16
+ if (!current || !target?.isConnected || monthIndex(current) === monthIndex(next)) {
17
+ return void update();
18
+ }
19
+ lateral(update, {
20
+ target,
21
+ direction: monthIndex(next) > monthIndex(current) ? 'forward' : 'backward'
22
+ });
23
+ };
@@ -228,17 +228,17 @@ export declare const dateField: import("tailwind-variants").TVReturnType<{
228
228
  /** Segments of the typed date (`DatePicker.Segment` / `DateRangePicker.Segment`). */
229
229
  export declare const dateSegment: import("tailwind-variants").TVReturnType<{
230
230
  part: {
231
- literal: "text-md-sys-color-on-surface-variant px-0";
231
+ literal: "text-md-sys-color-on-surface-variant px-spacing-0";
232
232
  value: "\n text-md-sys-color-on-surface\n aria-[valuetext=Empty]:text-md-sys-color-on-surface-variant\n hover:bg-md-sys-color-on-surface/8\n focus:bg-md-sys-color-primary-container focus:text-md-sys-color-on-primary-container\n ";
233
233
  };
234
- }, undefined, "\n rounded-xs px-0.5 py-0.5 select-none cursor-default outline-none\n transition-colors md-sys-motion-fast-effects\n ", {
234
+ }, undefined, "\n rounded-xs px-spacing-25 py-spacing-25 select-none cursor-default outline-none\n transition-colors md-sys-motion-fast-effects\n ", {
235
235
  part: {
236
- literal: "text-md-sys-color-on-surface-variant px-0";
236
+ literal: "text-md-sys-color-on-surface-variant px-spacing-0";
237
237
  value: "\n text-md-sys-color-on-surface\n aria-[valuetext=Empty]:text-md-sys-color-on-surface-variant\n hover:bg-md-sys-color-on-surface/8\n focus:bg-md-sys-color-primary-container focus:text-md-sys-color-on-primary-container\n ";
238
238
  };
239
239
  }, undefined, import("tailwind-variants").TVReturnTypeLike<{
240
240
  part: {
241
- literal: "text-md-sys-color-on-surface-variant px-0";
241
+ literal: "text-md-sys-color-on-surface-variant px-spacing-0";
242
242
  value: "\n text-md-sys-color-on-surface\n aria-[valuetext=Empty]:text-md-sys-color-on-surface-variant\n hover:bg-md-sys-color-on-surface/8\n focus:bg-md-sys-color-primary-container focus:text-md-sys-color-on-primary-container\n ";
243
243
  };
244
244
  }, undefined>>;
@@ -251,12 +251,12 @@ export declare const dateCalendar: import("tailwind-variants").TVReturnType<{
251
251
  [key: string]: {
252
252
  [key: string]: import("tailwind-variants").ClassValue | {
253
253
  grid?: import("tailwind-variants").ClassValue;
254
+ row?: import("tailwind-variants").ClassValue;
254
255
  surface?: import("tailwind-variants").ClassValue;
255
256
  header?: import("tailwind-variants").ClassValue;
256
257
  nav?: import("tailwind-variants").ClassValue;
257
258
  cell?: import("tailwind-variants").ClassValue;
258
259
  heading?: import("tailwind-variants").ClassValue;
259
- row?: import("tailwind-variants").ClassValue;
260
260
  weekday?: import("tailwind-variants").ClassValue;
261
261
  day?: import("tailwind-variants").ClassValue;
262
262
  };
@@ -265,12 +265,12 @@ export declare const dateCalendar: import("tailwind-variants").TVReturnType<{
265
265
  [x: string]: {
266
266
  [x: string]: import("tailwind-variants").ClassValue | {
267
267
  grid?: import("tailwind-variants").ClassValue;
268
+ row?: import("tailwind-variants").ClassValue;
268
269
  surface?: import("tailwind-variants").ClassValue;
269
270
  header?: import("tailwind-variants").ClassValue;
270
271
  nav?: import("tailwind-variants").ClassValue;
271
272
  cell?: import("tailwind-variants").ClassValue;
272
273
  heading?: import("tailwind-variants").ClassValue;
273
- row?: import("tailwind-variants").ClassValue;
274
274
  weekday?: import("tailwind-variants").ClassValue;
275
275
  day?: import("tailwind-variants").ClassValue;
276
276
  };
@@ -289,12 +289,12 @@ export declare const dateCalendar: import("tailwind-variants").TVReturnType<{
289
289
  [key: string]: {
290
290
  [key: string]: import("tailwind-variants").ClassValue | {
291
291
  grid?: import("tailwind-variants").ClassValue;
292
+ row?: import("tailwind-variants").ClassValue;
292
293
  surface?: import("tailwind-variants").ClassValue;
293
294
  header?: import("tailwind-variants").ClassValue;
294
295
  nav?: import("tailwind-variants").ClassValue;
295
296
  cell?: import("tailwind-variants").ClassValue;
296
297
  heading?: import("tailwind-variants").ClassValue;
297
- row?: import("tailwind-variants").ClassValue;
298
298
  weekday?: import("tailwind-variants").ClassValue;
299
299
  day?: import("tailwind-variants").ClassValue;
300
300
  };