@noxlovette/material 0.3.2 → 0.4.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 (299) hide show
  1. package/README.md +1 -0
  2. package/dist/actions/index.d.ts +1 -0
  3. package/dist/actions/index.js +1 -0
  4. package/dist/actions/rovingFocusGroup.d.ts +20 -0
  5. package/dist/actions/rovingFocusGroup.js +82 -0
  6. package/dist/components/badge/theme.d.ts +8 -8
  7. package/dist/components/buttons/button-group/ButtonGroup.stories.svelte +83 -0
  8. package/dist/components/buttons/button-group/ButtonGroup.stories.svelte.d.ts +19 -0
  9. package/dist/components/buttons/button-group/ButtonGroup.svelte +10 -29
  10. package/dist/components/buttons/button-group/ButtonGroup.svelte.d.ts +7 -3
  11. package/dist/components/buttons/button-group/index.d.ts +0 -1
  12. package/dist/components/buttons/button-group/index.js +3 -1
  13. package/dist/components/buttons/button-group/theme.d.ts +17 -103
  14. package/dist/components/buttons/button-group/theme.js +7 -35
  15. package/dist/components/buttons/button-group/types.d.ts +9 -20
  16. package/dist/components/buttons/connected/ConnectedButtonGroup.stories.svelte +118 -0
  17. package/dist/components/buttons/connected/ConnectedButtonGroup.stories.svelte.d.ts +19 -0
  18. package/dist/components/buttons/connected/ConnectedButtonGroup.svelte +52 -0
  19. package/dist/components/buttons/connected/ConnectedButtonGroup.svelte.d.ts +12 -0
  20. package/dist/components/buttons/connected/ConnectedButtonGroupItem.svelte +37 -0
  21. package/dist/components/buttons/connected/ConnectedButtonGroupItem.svelte.d.ts +9 -0
  22. package/dist/components/buttons/connected/index.d.ts +3 -1
  23. package/dist/components/buttons/connected/index.js +3 -1
  24. package/dist/components/buttons/connected/theme.d.ts +125 -0
  25. package/dist/components/buttons/connected/theme.js +38 -0
  26. package/dist/components/buttons/connected/types.d.ts +32 -13
  27. package/dist/components/buttons/index.d.ts +1 -0
  28. package/dist/components/buttons/index.js +1 -0
  29. package/dist/components/buttons/split-button/SplitButton.stories.svelte +103 -0
  30. package/dist/components/buttons/split-button/SplitButton.stories.svelte.d.ts +19 -0
  31. package/dist/components/buttons/split-button/SplitButton.svelte +104 -0
  32. package/dist/components/buttons/split-button/SplitButton.svelte.d.ts +19 -0
  33. package/dist/components/buttons/split-button/index.d.ts +3 -0
  34. package/dist/components/{containers/panes → buttons/split-button}/index.js +1 -3
  35. package/dist/components/buttons/split-button/theme.d.ts +35 -0
  36. package/dist/components/buttons/split-button/theme.js +26 -0
  37. package/dist/components/buttons/split-button/types.d.ts +33 -0
  38. package/dist/components/buttons/theme.d.ts +142 -142
  39. package/dist/components/buttons/theme.js +2 -2
  40. package/dist/components/cards/Card.stories.svelte +58 -0
  41. package/dist/components/cards/Card.stories.svelte.d.ts +2 -17
  42. package/dist/components/cards/Card.svelte +76 -8
  43. package/dist/components/cards/theme.d.ts +26 -14
  44. package/dist/components/cards/theme.js +5 -1
  45. package/dist/components/cards/types.d.ts +39 -1
  46. package/dist/components/chips/Chip.stories.svelte +64 -0
  47. package/dist/components/chips/Chip.stories.svelte.d.ts +19 -0
  48. package/dist/components/chips/Chip.svelte +115 -0
  49. package/dist/components/chips/Chip.svelte.d.ts +14 -0
  50. package/dist/components/chips/index.d.ts +3 -0
  51. package/dist/components/chips/index.js +6 -0
  52. package/dist/components/chips/theme.d.ts +78 -0
  53. package/dist/components/chips/theme.js +72 -0
  54. package/dist/components/chips/types.d.ts +43 -0
  55. package/dist/components/containers/action-rail/ActionRail.stories.svelte +36 -0
  56. package/dist/components/containers/{panes/SinglePane.stories.svelte.d.ts → action-rail/ActionRail.stories.svelte.d.ts} +4 -4
  57. package/dist/components/containers/action-rail/ActionRail.svelte +35 -0
  58. package/dist/components/containers/action-rail/ActionRail.svelte.d.ts +17 -0
  59. package/dist/components/containers/action-rail/index.d.ts +3 -0
  60. package/dist/components/containers/action-rail/index.js +6 -0
  61. package/dist/components/containers/action-rail/theme.d.ts +45 -0
  62. package/dist/components/containers/action-rail/theme.js +26 -0
  63. package/dist/components/containers/action-rail/types.d.ts +20 -0
  64. package/dist/components/containers/action-rail/types.js +1 -0
  65. package/dist/components/containers/app/App.svelte +6 -6
  66. package/dist/components/containers/app/App.svelte.d.ts +4 -2
  67. package/dist/components/containers/app/theme.d.ts +1 -1
  68. package/dist/components/containers/app/types.d.ts +9 -4
  69. package/dist/components/containers/bottom-sheet/BottomSheet.stories.svelte +1 -1
  70. package/dist/components/containers/bottom-sheet/BottomSheet.svelte +1 -1
  71. package/dist/components/containers/context-menu/ContextMenu.stories.svelte +44 -0
  72. package/dist/components/containers/context-menu/ContextMenu.svelte +21 -5
  73. package/dist/components/containers/context-menu/ContextMenu.svelte.d.ts +11 -0
  74. package/dist/components/containers/context-menu/theme.d.ts +20 -2
  75. package/dist/components/containers/context-menu/theme.js +31 -8
  76. package/dist/components/containers/context-menu/types.d.ts +14 -2
  77. package/dist/components/containers/dialogue/theme.d.ts +20 -20
  78. package/dist/components/containers/divider/theme.d.ts +17 -17
  79. package/dist/components/containers/index.d.ts +2 -3
  80. package/dist/components/containers/index.js +2 -3
  81. package/dist/components/containers/link-preview/theme.d.ts +11 -11
  82. package/dist/components/containers/list/ListItem.stories.svelte +100 -0
  83. package/dist/components/containers/list/ListItem.stories.svelte.d.ts +19 -0
  84. package/dist/components/containers/list/theme.d.ts +14 -14
  85. package/dist/components/containers/list/theme.js +3 -3
  86. package/dist/components/containers/menu/Menu.stories.svelte +105 -3
  87. package/dist/components/containers/menu/Menu.stories.svelte.d.ts +2 -17
  88. package/dist/components/containers/menu/Menu.svelte +9 -7
  89. package/dist/components/containers/menu/MenuCheckboxItem.svelte +55 -0
  90. package/dist/components/containers/menu/MenuCheckboxItem.svelte.d.ts +25 -0
  91. package/dist/components/containers/menu/MenuGroup.svelte +43 -0
  92. package/dist/components/containers/menu/MenuGroup.svelte.d.ts +28 -0
  93. package/dist/components/containers/menu/MenuRadioGroup.svelte +39 -0
  94. package/dist/components/containers/menu/MenuRadioGroup.svelte.d.ts +27 -0
  95. package/dist/components/containers/menu/MenuRadioItem.svelte +49 -0
  96. package/dist/components/containers/menu/MenuRadioItem.svelte.d.ts +17 -0
  97. package/dist/components/containers/menu/MenuSub.svelte +91 -0
  98. package/dist/components/containers/menu/MenuSub.svelte.d.ts +29 -0
  99. package/dist/components/containers/menu/index.d.ts +7 -0
  100. package/dist/components/containers/menu/index.js +8 -0
  101. package/dist/components/containers/menu/menu-item/MenuItem.svelte +71 -0
  102. package/dist/components/containers/{menu-item → menu/menu-item}/MenuItem.svelte.d.ts +2 -1
  103. package/dist/components/containers/{menu-item → menu/menu-item}/types.d.ts +5 -1
  104. package/dist/components/containers/menu/menu-item/types.js +1 -0
  105. package/dist/components/containers/menu/theme.d.ts +68 -0
  106. package/dist/components/containers/menu/theme.js +36 -0
  107. package/dist/components/containers/menu/types.d.ts +113 -2
  108. package/dist/components/containers/pane/DraggablePane.stories.svelte +199 -0
  109. package/dist/components/containers/pane/DraggablePane.stories.svelte.d.ts +4 -0
  110. package/dist/components/containers/pane/DraggablePane.svelte +533 -0
  111. package/dist/components/containers/pane/DraggablePane.svelte.d.ts +29 -0
  112. package/dist/components/containers/pane/Pane.stories.svelte +104 -0
  113. package/dist/components/containers/pane/Pane.stories.svelte.d.ts +19 -0
  114. package/dist/components/containers/pane/Pane.svelte +78 -0
  115. package/dist/components/containers/pane/Pane.svelte.d.ts +18 -0
  116. package/dist/components/containers/pane/PaneGrid.stories.svelte +134 -0
  117. package/dist/components/containers/pane/PaneGrid.stories.svelte.d.ts +19 -0
  118. package/dist/components/containers/pane/PaneGrid.svelte +43 -0
  119. package/dist/components/containers/pane/PaneGrid.svelte.d.ts +13 -0
  120. package/dist/components/containers/pane/PaneHandle.svelte +90 -0
  121. package/dist/components/containers/pane/PaneHandle.svelte.d.ts +12 -0
  122. package/dist/components/containers/pane/dragStore.svelte.d.ts +16 -0
  123. package/dist/components/containers/pane/dragStore.svelte.js +38 -0
  124. package/dist/components/containers/pane/index.d.ts +8 -0
  125. package/dist/components/containers/pane/index.js +11 -0
  126. package/dist/components/containers/pane/resizeStore.svelte.d.ts +10 -0
  127. package/dist/components/containers/pane/resizeStore.svelte.js +30 -0
  128. package/dist/components/containers/pane/theme.d.ts +571 -0
  129. package/dist/components/containers/pane/theme.js +211 -0
  130. package/dist/components/containers/pane/types.d.ts +249 -0
  131. package/dist/components/containers/pane/types.js +1 -0
  132. package/dist/components/containers/popover/Popover.stories.svelte +4 -4
  133. package/dist/components/containers/popover/Popover.svelte +3 -1
  134. package/dist/components/containers/popover/theme.d.ts +20 -20
  135. package/dist/components/containers/popover/types.d.ts +6 -2
  136. package/dist/components/containers/scroll-area/theme.d.ts +2 -2
  137. package/dist/components/containers/side-sheet/SideSheet.stories.svelte +16 -24
  138. package/dist/components/containers/side-sheet/SideSheet.svelte +73 -7
  139. package/dist/components/containers/side-sheet/SideSheet.svelte.d.ts +5 -0
  140. package/dist/components/containers/stack/theme.d.ts +44 -44
  141. package/dist/components/date/DateField.stories.svelte +57 -0
  142. package/dist/components/{containers/panes/SplitPane.stories.svelte.d.ts → date/DateField.stories.svelte.d.ts} +4 -4
  143. package/dist/components/date/DateField.svelte +11 -2
  144. package/dist/components/date/DateRangeField.stories.svelte +53 -0
  145. package/dist/components/{containers/panes/SupportingPane.stories.svelte.d.ts → date/DateRangeField.stories.svelte.d.ts} +4 -4
  146. package/dist/components/date/DateRangeField.svelte +2 -1
  147. package/dist/components/date/theme.d.ts +73 -4
  148. package/dist/components/date/theme.js +95 -26
  149. package/dist/components/date/types.d.ts +5 -0
  150. package/dist/components/forms/checkbox/Checkbox.svelte +7 -9
  151. package/dist/components/forms/checkbox/theme.d.ts +8 -8
  152. package/dist/components/forms/checkbox/theme.js +31 -9
  153. package/dist/components/forms/command/Command.stories.svelte +86 -0
  154. package/dist/components/forms/command/Command.stories.svelte.d.ts +19 -0
  155. package/dist/components/forms/command/theme.d.ts +35 -35
  156. package/dist/components/forms/command/theme.js +4 -4
  157. package/dist/components/forms/pin/theme.d.ts +2 -2
  158. package/dist/components/forms/radio-group/theme.d.ts +2 -2
  159. package/dist/components/forms/search/theme.d.ts +8 -8
  160. package/dist/components/forms/select/Select.svelte +3 -2
  161. package/dist/components/forms/select/theme.d.ts +26 -2
  162. package/dist/components/forms/select/theme.js +56 -22
  163. package/dist/components/forms/slider/theme.d.ts +20 -20
  164. package/dist/components/forms/switch/theme.d.ts +2 -2
  165. package/dist/components/forms/textfield/Textfield.stories.svelte +22 -0
  166. package/dist/components/forms/textfield/Textfield.svelte +10 -1
  167. package/dist/components/forms/textfield/theme.d.ts +44 -2
  168. package/dist/components/forms/textfield/theme.js +56 -16
  169. package/dist/components/forms/toggle-group/ToggleGroup.svelte +2 -2
  170. package/dist/components/forms/toggle-group/ToggleGroup.svelte.d.ts +2 -2
  171. package/dist/components/forms/toggle-group/ToggleGroupItem.svelte +1 -1
  172. package/dist/components/forms/toggle-group/ToggleGroupItem.svelte.d.ts +1 -1
  173. package/dist/components/forms/toggle-group/theme.d.ts +16 -16
  174. package/dist/components/forms/toggle-group/types.d.ts +2 -2
  175. package/dist/components/forms/tooltip/Tooltip.stories.svelte +90 -0
  176. package/dist/components/forms/tooltip/Tooltip.stories.svelte.d.ts +19 -0
  177. package/dist/components/forms/tooltip/Tooltip.svelte +5 -4
  178. package/dist/components/forms/tooltip/theme.d.ts +5 -2
  179. package/dist/components/forms/tooltip/theme.js +6 -5
  180. package/dist/components/index.d.ts +1 -0
  181. package/dist/components/index.js +1 -0
  182. package/dist/components/misc/Avatar.stories.svelte +63 -0
  183. package/dist/components/misc/Avatar.stories.svelte.d.ts +19 -0
  184. package/dist/components/misc/Avatar.svelte +35 -10
  185. package/dist/components/misc/DicebearAvatarBuilder.d.ts +59 -0
  186. package/dist/components/misc/DicebearAvatarBuilder.js +115 -0
  187. package/dist/components/misc/ThemeSettings.svelte +1 -1
  188. package/dist/components/misc/ThemeSwitcher.svelte +2 -2
  189. package/dist/components/misc/dicebearStyles.d.ts +21 -0
  190. package/dist/components/misc/dicebearStyles.js +169 -0
  191. package/dist/components/misc/index.d.ts +3 -0
  192. package/dist/components/misc/index.js +3 -0
  193. package/dist/components/misc/materialAvatarPalette.d.ts +6 -0
  194. package/dist/components/misc/materialAvatarPalette.js +44 -0
  195. package/dist/components/misc/theme.d.ts +20 -2
  196. package/dist/components/misc/theme.js +9 -3
  197. package/dist/components/misc/types.d.ts +20 -2
  198. package/dist/components/nav/appbar/AppBar.stories.svelte +1 -1
  199. package/dist/components/nav/appbar/AppBar.svelte +46 -15
  200. package/dist/components/nav/appbar/AppBar.svelte.d.ts +5 -0
  201. package/dist/components/nav/appbar/theme.d.ts +20 -14
  202. package/dist/components/nav/appbar/theme.js +11 -7
  203. package/dist/components/nav/appbar/types.d.ts +3 -1
  204. package/dist/components/nav/breadcrumb/Breadcrumb.stories.svelte +50 -0
  205. package/dist/components/nav/breadcrumb/Breadcrumb.stories.svelte.d.ts +19 -0
  206. package/dist/components/nav/breadcrumb/Breadcrumb.svelte +46 -0
  207. package/dist/components/nav/breadcrumb/Breadcrumb.svelte.d.ts +13 -0
  208. package/dist/components/nav/breadcrumb/index.d.ts +3 -0
  209. package/dist/components/nav/breadcrumb/index.js +6 -0
  210. package/dist/components/nav/breadcrumb/theme.d.ts +84 -0
  211. package/dist/components/nav/breadcrumb/theme.js +35 -0
  212. package/dist/components/nav/breadcrumb/types.d.ts +14 -0
  213. package/dist/components/nav/breadcrumb/types.js +1 -0
  214. package/dist/components/nav/index.d.ts +1 -0
  215. package/dist/components/nav/index.js +1 -0
  216. package/dist/components/nav/navbar/theme.d.ts +19 -19
  217. package/dist/components/nav/rail/Rail.stories.svelte +1 -5
  218. package/dist/components/nav/rail/Rail.svelte +3 -25
  219. package/dist/components/nav/rail/theme.d.ts +4 -4
  220. package/dist/components/nav/rail/types.d.ts +0 -5
  221. package/dist/components/nav/tabs/TabHolder.svelte +2 -1
  222. package/dist/components/nav/tabs/theme.d.ts +21 -21
  223. package/dist/components/nav/tabs/theme.js +6 -0
  224. package/dist/components/nav/tabs/types.d.ts +2 -2
  225. package/dist/components/pill/theme.d.ts +35 -35
  226. package/dist/components/snackbar/theme.d.ts +8 -8
  227. package/dist/components/table/Table.stories.svelte +267 -0
  228. package/dist/components/table/Table.stories.svelte.d.ts +19 -0
  229. package/dist/components/table/Table.svelte +1 -1
  230. package/dist/components/table/TableBody.svelte +16 -3
  231. package/dist/components/table/TableBody.svelte.d.ts +5 -1
  232. package/dist/components/table/TableRow.svelte +1 -1
  233. package/dist/components/table/theme.d.ts +2 -2
  234. package/dist/components/table/theme.js +2 -2
  235. package/dist/components/table/types.d.ts +7 -0
  236. package/dist/components/time/theme.d.ts +29 -29
  237. package/dist/components/time/theme.js +2 -2
  238. package/dist/components/toolbar/Toolbar.stories.svelte +71 -0
  239. package/dist/components/toolbar/Toolbar.stories.svelte.d.ts +19 -0
  240. package/dist/components/toolbar/Toolbar.svelte +19 -3
  241. package/dist/components/toolbar/Toolbar.svelte.d.ts +8 -2
  242. package/dist/components/toolbar/ToolbarButton.svelte +28 -4
  243. package/dist/components/toolbar/ToolbarDivider.svelte +4 -3
  244. package/dist/components/toolbar/ToolbarGroup.svelte +7 -2
  245. package/dist/components/toolbar/ToolbarGroupItem.svelte +29 -4
  246. package/dist/components/toolbar/ToolbarSection.svelte +35 -0
  247. package/dist/components/toolbar/ToolbarSection.svelte.d.ts +9 -0
  248. package/dist/components/toolbar/ToolbarSpacer.svelte +18 -0
  249. package/dist/components/toolbar/ToolbarSpacer.svelte.d.ts +9 -0
  250. package/dist/components/toolbar/index.d.ts +2 -0
  251. package/dist/components/toolbar/index.js +2 -0
  252. package/dist/components/toolbar/theme.d.ts +36 -21
  253. package/dist/components/toolbar/theme.js +27 -11
  254. package/dist/components/toolbar/types.d.ts +37 -4
  255. package/dist/components/typography/body/theme.d.ts +14 -14
  256. package/dist/components/typography/display/theme.d.ts +14 -14
  257. package/dist/components/typography/headline/theme.d.ts +14 -14
  258. package/dist/components/typography/kbd/Kbd.stories.svelte +41 -0
  259. package/dist/components/typography/kbd/Kbd.stories.svelte.d.ts +19 -0
  260. package/dist/components/typography/kbd/theme.d.ts +9 -9
  261. package/dist/components/typography/kbd/theme.js +2 -2
  262. package/dist/components/typography/label/theme.d.ts +14 -14
  263. package/dist/components/typography/title/theme.d.ts +14 -14
  264. package/dist/styles/component.css +126 -4
  265. package/dist/styles/motion.css +6 -3
  266. package/dist/utils/Layer.svelte +7 -3
  267. package/dist/utils/Theme.svelte +20 -20
  268. package/dist/utils/ThemeScript.svelte +1 -1
  269. package/dist/utils/icon/theme.d.ts +14 -14
  270. package/package.json +38 -37
  271. package/bin/install-skill.js +0 -29
  272. package/dist/components/buttons/button-group/ButtonGroupItem.svelte +0 -41
  273. package/dist/components/buttons/button-group/ButtonGroupItem.svelte.d.ts +0 -8
  274. package/dist/components/buttons/connected/ConnectedButtons.svelte +0 -14
  275. package/dist/components/buttons/connected/ConnectedButtons.svelte.d.ts +0 -8
  276. package/dist/components/containers/menu-item/MenuItem.svelte +0 -74
  277. package/dist/components/containers/merger/InputMerger.svelte +0 -29
  278. package/dist/components/containers/merger/InputMerger.svelte.d.ts +0 -14
  279. package/dist/components/containers/merger/index.d.ts +0 -1
  280. package/dist/components/containers/merger/index.js +0 -3
  281. package/dist/components/containers/panes/SinglePane.stories.svelte +0 -67
  282. package/dist/components/containers/panes/SinglePane.svelte +0 -32
  283. package/dist/components/containers/panes/SinglePane.svelte.d.ts +0 -5
  284. package/dist/components/containers/panes/SplitPane.stories.svelte +0 -124
  285. package/dist/components/containers/panes/SplitPane.svelte +0 -144
  286. package/dist/components/containers/panes/SplitPane.svelte.d.ts +0 -8
  287. package/dist/components/containers/panes/SupportingPane.stories.svelte +0 -113
  288. package/dist/components/containers/panes/SupportingPane.svelte +0 -175
  289. package/dist/components/containers/panes/SupportingPane.svelte.d.ts +0 -9
  290. package/dist/components/containers/panes/index.d.ts +0 -5
  291. package/dist/components/containers/panes/theme.d.ts +0 -490
  292. package/dist/components/containers/panes/theme.js +0 -185
  293. package/dist/components/containers/panes/types.d.ts +0 -108
  294. package/dist/components/nav/rail/RailNavContext.svelte +0 -14
  295. package/dist/components/nav/rail/RailNavContext.svelte.d.ts +0 -8
  296. /package/dist/components/{containers/menu-item → buttons/split-button}/types.js +0 -0
  297. /package/dist/components/{containers/panes → chips}/types.js +0 -0
  298. /package/dist/components/containers/{menu-item → menu/menu-item}/index.d.ts +0 -0
  299. /package/dist/components/containers/{menu-item → menu/menu-item}/index.js +0 -0
@@ -1,144 +0,0 @@
1
- <!--
2
- @component
3
- SplitPane provides a two-column layout. Set `resizable={false}` for a static,
4
- non-draggable sidebar (e.g. a docs nav) instead of a user-resizable split.
5
- -->
6
- <script lang="ts">
7
- import type { SplitPaneProps } from './types.js';
8
- import { splitPane } from './theme.js';
9
- import { onDestroy, onMount } from 'svelte';
10
- import clsx from 'clsx';
11
-
12
- let dragging = $state(false);
13
-
14
- let {
15
- left,
16
- right,
17
- leftWidth = $bindable(396),
18
- full = true,
19
- rounded = true,
20
- resizable = true,
21
- minLeft = 280,
22
- maxLeft = 720,
23
- storageKey = 'splitpane:leftWidth',
24
- persist = true,
25
- onPaddingChange,
26
- anchor = 'viewport',
27
- mobilePane = 'right',
28
- class: className,
29
- leftClass,
30
- rightClass
31
- }: SplitPaneProps = $props();
32
-
33
- const {
34
- base,
35
- left: lCls,
36
- right: rCls,
37
- handle: hCls,
38
- handleGrip
39
- } = $derived(splitPane({ full, anchor, rounded }));
40
-
41
- const leftMobileClass = $derived(
42
- mobilePane === 'left' ? 'block w-full md:w-[var(--splitpane-left-width)]' : ''
43
- );
44
- const rightMobileClass = $derived(mobilePane === 'left' ? 'hidden md:flex' : '');
45
-
46
- const leftOffset = $derived(anchor === 'viewport' ? 'var(--splitpane-offset, 0px)' : '0px');
47
- const handleOffset = $derived(
48
- anchor === 'viewport'
49
- ? 'calc(var(--splitpane-left-width) + var(--splitpane-offset, 0px))'
50
- : 'var(--splitpane-left-width)'
51
- );
52
-
53
- const clampWidth = (next: number) => Math.min(maxLeft, Math.max(minLeft, next));
54
-
55
- const footerPaddingOffset = 80;
56
-
57
- let dragStartX = 0;
58
- let dragStartWidth = 0;
59
- let mounted = false;
60
-
61
- const startDrag = (event: PointerEvent) => {
62
- dragging = true;
63
- dragStartX = event.clientX;
64
- dragStartWidth = leftWidth;
65
- (event.currentTarget as HTMLElement).setPointerCapture(event.pointerId);
66
- };
67
-
68
- const moveDrag = (event: PointerEvent) => {
69
- if (!dragging) return;
70
- const delta = event.clientX - dragStartX;
71
- leftWidth = clampWidth(dragStartWidth + delta);
72
- };
73
-
74
- const endDrag = () => {
75
- dragging = false;
76
- };
77
-
78
- onMount(() => {
79
- mounted = true;
80
-
81
- if (resizable && persist && typeof localStorage !== 'undefined') {
82
- const stored = Number(localStorage.getItem(storageKey));
83
- if (!Number.isNaN(stored)) {
84
- leftWidth = clampWidth(stored);
85
- }
86
- }
87
-
88
- onPaddingChange?.(leftWidth + footerPaddingOffset);
89
- });
90
-
91
- onDestroy(() => {
92
- onPaddingChange?.(0);
93
- });
94
-
95
- $effect(() => {
96
- if (!mounted) return;
97
- onPaddingChange?.(leftWidth + footerPaddingOffset);
98
- });
99
-
100
- $effect(() => {
101
- if (!resizable || !persist || typeof localStorage === 'undefined') return;
102
- localStorage.setItem(storageKey, String(leftWidth));
103
- });
104
- </script>
105
-
106
- <div class={base({ class: clsx(className) })} style={`--splitpane-left-width: ${leftWidth}px;`}>
107
- <!-- LEFT PANE -->
108
- <div
109
- class={lCls({ class: clsx(leftClass, leftMobileClass) })}
110
- style={mobilePane === 'left'
111
- ? `left: ${leftOffset};`
112
- : `width: var(--splitpane-left-width); left: ${leftOffset};`}
113
- >
114
- {@render left()}
115
- </div>
116
-
117
- <!-- DRAG HANDLE -->
118
- {#if resizable}
119
- <div
120
- class={hCls()}
121
- role="separator"
122
- aria-orientation="vertical"
123
- aria-valuenow={leftWidth}
124
- aria-valuemin={minLeft}
125
- aria-valuemax={maxLeft}
126
- style={anchor === 'sticky' ? undefined : `left: ${handleOffset};`}
127
- onpointerdown={startDrag}
128
- onpointermove={moveDrag}
129
- onpointerup={endDrag}
130
- onpointercancel={endDrag}
131
- >
132
- <div
133
- class={handleGrip({
134
- class: clsx(dragging && 'w-0.5')
135
- })}
136
- ></div>
137
- </div>
138
- {/if}
139
-
140
- <!-- RIGHT PANE -->
141
- <div class={rCls({ class: clsx(rightClass, rightMobileClass) })}>
142
- {@render right()}
143
- </div>
144
- </div>
@@ -1,8 +0,0 @@
1
- import type { SplitPaneProps } from './types.js';
2
- /**
3
- * SplitPane provides a two-column layout. Set `resizable={false}` for a static,
4
- * non-draggable sidebar (e.g. a docs nav) instead of a user-resizable split.
5
- */
6
- declare const SplitPane: import("svelte").Component<SplitPaneProps, {}, "leftWidth">;
7
- type SplitPane = ReturnType<typeof SplitPane>;
8
- export default SplitPane;
@@ -1,113 +0,0 @@
1
- <script module lang="ts">
2
- import { defineMeta } from '@storybook/addon-svelte-csf';
3
- import SupportingPane from './SupportingPane.svelte';
4
-
5
- const { Story } = defineMeta({
6
- title: 'Containers/Supporting Pane',
7
- component: SupportingPane,
8
- argTypes: {
9
- anchor: {
10
- control: 'select',
11
- options: ['viewport', 'parent']
12
- },
13
- position: {
14
- control: 'select',
15
- options: ['left', 'right']
16
- },
17
- centered: { control: 'boolean' },
18
- rounded: { control: 'boolean' },
19
- full: { control: 'boolean' },
20
- gap: {
21
- control: 'select',
22
- options: ['none', 'sm', 'md', 'lg']
23
- },
24
- collapsible: { control: 'boolean' },
25
- supportingWidth: { control: 'number' },
26
- mobileSheet: { control: 'boolean' }
27
- },
28
- args: {
29
- anchor: 'parent',
30
- position: 'right',
31
- centered: false,
32
- rounded: false,
33
- full: false,
34
- gap: 'md',
35
- collapsible: false,
36
- supportingWidth: 320,
37
- mobileSheet: false
38
- }
39
- });
40
- </script>
41
-
42
- <!--
43
- anchor="parent" demos meaningfully in a bounded box (classic sticky-while-
44
- scrolling-the-page behaviour). anchor="viewport" — used by the docs pages'
45
- own "On this page" TOC — fixes the supporting pane to the true browser edge,
46
- which only reads correctly on a real scrolling page, not inside Storybook's
47
- iframe canvas.
48
- -->
49
- <Story name="Playground">
50
- {#snippet template(args)}
51
- <SupportingPane {...args}>
52
- {#snippet main()}
53
- <div class="flex flex-col gap-4 p-4">
54
- {#each Array(6) as _, i}
55
- <div class="bg-md-sys-color-surface-container-high rounded-lg p-6">
56
- Main content block {i + 1}
57
- </div>
58
- {/each}
59
- </div>
60
- {/snippet}
61
- {#snippet supporting()}
62
- <div class="bg-md-sys-color-surface-container rounded-lg p-4">
63
- <p class="md-sys-typescale-title-small mb-2">Supporting content</p>
64
- <p class="text-md-sys-color-on-surface-variant text-sm">
65
- Fixed-width side panel — e.g. a table of contents or contextual actions.
66
- </p>
67
- </div>
68
- {/snippet}
69
- </SupportingPane>
70
- {/snippet}
71
- </Story>
72
-
73
- <Story name="Collapsible" asChild>
74
- <SupportingPane anchor="parent" position="right" collapsible>
75
- {#snippet main()}
76
- <div class="flex flex-col gap-4 p-4">
77
- {#each Array(4) as _, i}
78
- <div class="bg-md-sys-color-surface-container-high rounded-lg p-6">
79
- Main content block {i + 1}
80
- </div>
81
- {/each}
82
- </div>
83
- {/snippet}
84
- {#snippet supporting()}
85
- <div class="bg-md-sys-color-surface-container rounded-lg p-4">
86
- <p class="md-sys-typescale-title-small mb-2">Collapsible panel</p>
87
- <p class="text-md-sys-color-on-surface-variant text-sm">
88
- A toggle button appears over the main pane to hide/show this panel (desktop only).
89
- </p>
90
- </div>
91
- {/snippet}
92
- </SupportingPane>
93
- </Story>
94
-
95
- <Story name="Position Left" asChild>
96
- <SupportingPane anchor="parent" position="left">
97
- {#snippet main()}
98
- <div class="flex flex-col gap-4 p-4">
99
- {#each Array(4) as _, i}
100
- <div class="bg-md-sys-color-surface-container-high rounded-lg p-6">
101
- Main content block {i + 1}
102
- </div>
103
- {/each}
104
- </div>
105
- {/snippet}
106
- {#snippet supporting()}
107
- <div class="bg-md-sys-color-surface-container rounded-lg p-4">
108
- <p class="md-sys-typescale-title-small mb-2">Supporting content</p>
109
- <p class="text-md-sys-color-on-surface-variant text-sm">Panel rendered on the left.</p>
110
- </div>
111
- {/snippet}
112
- </SupportingPane>
113
- </Story>
@@ -1,175 +0,0 @@
1
- <!--
2
- @component
3
- SupportingPane provides a layout with a main content area and a supporting side pane.
4
-
5
- @see https://m3.material.io/foundations/layout/canonical-layouts/supporting-pane
6
- -->
7
- <script lang="ts">
8
- import clsx from 'clsx';
9
- import type { SupportingPaneProps } from './types.js';
10
- import { supportingPane } from './theme.js';
11
- import ButtonIcon from '../../buttons/ButtonIcon.svelte';
12
- import {
13
- easeEmphasized,
14
- easeEmphasizedAccel,
15
- easeEmphasizedDecel
16
- } from '../../../animation/easing.js';
17
- import { fade } from 'svelte/transition';
18
- import type { TransitionConfig } from 'svelte/transition';
19
-
20
- function slideWidth(node: HTMLElement): TransitionConfig {
21
- const width = node.offsetWidth;
22
- return {
23
- duration: 500,
24
- easing: easeEmphasized,
25
- css: (t) => `width: ${t * width}px; min-width: 0; overflow: hidden;`
26
- };
27
- }
28
-
29
- function sheetIn(_node: HTMLElement): TransitionConfig {
30
- return {
31
- duration: 500,
32
- easing: easeEmphasizedDecel,
33
- css: (t) => `transform: translateY(${(1 - t) * 100}%);`
34
- };
35
- }
36
-
37
- function sheetOut(_node: HTMLElement): TransitionConfig {
38
- return {
39
- duration: 280,
40
- easing: easeEmphasizedAccel,
41
- css: (t) => `transform: translateY(${(1 - t) * 100}%);`
42
- };
43
- }
44
-
45
- const {
46
- main,
47
- supporting,
48
- anchor = 'viewport',
49
- position = 'right',
50
- centered = false,
51
- rounded = true,
52
- gap = 'md',
53
- class: className,
54
- mainClass,
55
- full = true,
56
- supportingClass,
57
- collapsible,
58
- supportingWidth = 320,
59
- supportingTop = 0,
60
- mobileSheet = false,
61
- mobileSheetIcon = 'info',
62
- mobileTriggerClass
63
- }: SupportingPaneProps = $props();
64
-
65
- let supportingVisible = $state(true);
66
- let mobileSheetOpen = $state(false);
67
- let isLargeScreen = $state(false);
68
- const supportingId = 'supporting-pane';
69
-
70
- $effect(() => {
71
- const mq = window.matchMedia('(min-width: 1024px)');
72
- isLargeScreen = mq.matches;
73
- const handler = (e: MediaQueryListEvent) => {
74
- isLargeScreen = e.matches;
75
- };
76
- mq.addEventListener('change', handler);
77
- return () => mq.removeEventListener('change', handler);
78
- });
79
-
80
- const {
81
- base,
82
- main: mainCls,
83
- supporting: supportingCls
84
- } = $derived(supportingPane({ anchor, position, centered, full, rounded, gap }));
85
-
86
- const cssVars = $derived(
87
- anchor === 'viewport'
88
- ? `--supporting-pane-width: ${supportingWidth}px; --supporting-pane-top: ${supportingTop}px;`
89
- : ''
90
- );
91
-
92
- const mainViewportStyle = $derived(
93
- anchor === 'viewport' && isLargeScreen
94
- ? `transition: margin-${position === 'right' ? 'right' : 'left'} ${supportingVisible ? '500ms' : '280ms'} cubic-bezier(0.2, 0, 0, 1); margin-${position === 'right' ? 'right' : 'left'}: ${supportingVisible ? supportingWidth : 0}px;`
95
- : ''
96
- );
97
-
98
- const inlineSupportingClass = $derived(mobileSheet ? 'hidden lg:block' : '');
99
- </script>
100
-
101
- <div class={base({ class: clsx(className) })} style={cssVars}>
102
- <div class={mainCls({ class: clsx('relative', mainClass) })} style={mainViewportStyle}>
103
- {#if collapsible}
104
- <div class="top-3 right-3 z-10 hidden h-12 w-12 lg:absolute lg:block">
105
- <ButtonIcon
106
- type="button"
107
- variant="elevated"
108
- tooltipContent={supportingVisible ? 'Скрыть панель' : 'Показать панель'}
109
- size="xs"
110
- iconProps={{
111
- name: supportingVisible ? 'right_panel_close' : 'right_panel_open'
112
- }}
113
- aria-controls={supportingId}
114
- aria-expanded={supportingVisible}
115
- aria-label={supportingVisible ? 'Hide supporting pane' : 'Show supporting pane'}
116
- onclick={() => {
117
- supportingVisible = !supportingVisible;
118
- }}
119
- />
120
- </div>
121
- {/if}
122
- {@render main()}
123
- {#if mobileSheet}
124
- <ButtonIcon
125
- class={clsx('fixed right-4 bottom-6 z-30 lg:hidden', mobileTriggerClass)}
126
- type="button"
127
- variant="tonal"
128
- iconProps={{ name: mobileSheetIcon }}
129
- aria-label="Open supporting panel"
130
- onclick={() => (mobileSheetOpen = true)}
131
- />
132
- {/if}
133
- </div>
134
-
135
- {#if supportingVisible}
136
- <aside
137
- transition:slideWidth
138
- id={supportingId}
139
- class={supportingCls({
140
- class: clsx(supportingClass, inlineSupportingClass)
141
- })}
142
- data-position={position}
143
- >
144
- {@render supporting()}
145
- </aside>
146
- {/if}
147
- </div>
148
-
149
- {#if mobileSheet && mobileSheetOpen}
150
- <!-- Scrim -->
151
- <div
152
- class="bg-md-sys-color-scrim/40 fixed inset-0 z-40 lg:hidden"
153
- transition:fade={{ duration: 220 }}
154
- onclick={() => (mobileSheetOpen = false)}
155
- aria-hidden="true"
156
- ></div>
157
-
158
- <!-- Sheet -->
159
- <div
160
- class="bg-md-sys-color-surface-container-low fixed inset-x-0 bottom-0 z-50 max-h-[85dvh] scrollbar-none overflow-y-auto rounded-t-[28px] pb-[env(safe-area-inset-bottom)] lg:hidden"
161
- in:sheetIn
162
- out:sheetOut
163
- role="dialog"
164
- aria-modal="true"
165
- >
166
- <button
167
- class="flex w-full cursor-pointer items-center justify-center pt-4 pb-2"
168
- aria-label="Close supporting panel"
169
- onclick={() => (mobileSheetOpen = false)}
170
- >
171
- <div class="bg-md-sys-color-on-surface-variant/40 h-1 w-8 rounded-full"></div>
172
- </button>
173
- {@render supporting()}
174
- </div>
175
- {/if}
@@ -1,9 +0,0 @@
1
- import type { SupportingPaneProps } from './types.js';
2
- /**
3
- * SupportingPane provides a layout with a main content area and a supporting side pane.
4
- *
5
- * @see https://m3.material.io/foundations/layout/canonical-layouts/supporting-pane
6
- */
7
- declare const SupportingPane: import("svelte").Component<SupportingPaneProps, {}, "">;
8
- type SupportingPane = ReturnType<typeof SupportingPane>;
9
- export default SupportingPane;
@@ -1,5 +0,0 @@
1
- export * from './theme.js';
2
- export * from './types.js';
3
- export { default as SinglePane } from './SinglePane.svelte';
4
- export { default as SplitPane } from './SplitPane.svelte';
5
- export { default as SupportingPane } from './SupportingPane.svelte';