@noxlovette/material 0.3.3 → 0.4.1

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 (289) 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/{containers/merger → chips}/index.js +2 -1
  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/theme.d.ts +14 -14
  83. package/dist/components/containers/list/theme.js +1 -1
  84. package/dist/components/containers/menu/Menu.stories.svelte +105 -3
  85. package/dist/components/containers/menu/Menu.stories.svelte.d.ts +2 -17
  86. package/dist/components/containers/menu/Menu.svelte +9 -7
  87. package/dist/components/containers/menu/MenuCheckboxItem.svelte +55 -0
  88. package/dist/components/containers/menu/MenuCheckboxItem.svelte.d.ts +25 -0
  89. package/dist/components/containers/menu/MenuGroup.svelte +43 -0
  90. package/dist/components/containers/menu/MenuGroup.svelte.d.ts +28 -0
  91. package/dist/components/containers/menu/MenuRadioGroup.svelte +39 -0
  92. package/dist/components/containers/menu/MenuRadioGroup.svelte.d.ts +27 -0
  93. package/dist/components/containers/menu/MenuRadioItem.svelte +49 -0
  94. package/dist/components/containers/menu/MenuRadioItem.svelte.d.ts +17 -0
  95. package/dist/components/containers/menu/MenuSub.svelte +91 -0
  96. package/dist/components/containers/menu/MenuSub.svelte.d.ts +29 -0
  97. package/dist/components/containers/menu/index.d.ts +7 -0
  98. package/dist/components/containers/menu/index.js +8 -0
  99. package/dist/components/containers/menu/menu-item/MenuItem.svelte +71 -0
  100. package/dist/components/containers/{menu-item → menu/menu-item}/MenuItem.svelte.d.ts +2 -1
  101. package/dist/components/containers/{menu-item → menu/menu-item}/types.d.ts +5 -1
  102. package/dist/components/containers/menu/menu-item/types.js +1 -0
  103. package/dist/components/containers/menu/theme.d.ts +68 -0
  104. package/dist/components/containers/menu/theme.js +36 -0
  105. package/dist/components/containers/menu/types.d.ts +113 -2
  106. package/dist/components/containers/pane/DraggablePane.stories.svelte +199 -0
  107. package/dist/components/containers/pane/DraggablePane.stories.svelte.d.ts +4 -0
  108. package/dist/components/containers/pane/DraggablePane.svelte +533 -0
  109. package/dist/components/containers/pane/DraggablePane.svelte.d.ts +29 -0
  110. package/dist/components/containers/pane/Pane.stories.svelte +104 -0
  111. package/dist/components/containers/pane/Pane.stories.svelte.d.ts +19 -0
  112. package/dist/components/containers/pane/Pane.svelte +78 -0
  113. package/dist/components/containers/pane/Pane.svelte.d.ts +18 -0
  114. package/dist/components/containers/pane/PaneGrid.stories.svelte +134 -0
  115. package/dist/components/containers/pane/PaneGrid.stories.svelte.d.ts +19 -0
  116. package/dist/components/containers/pane/PaneGrid.svelte +43 -0
  117. package/dist/components/containers/pane/PaneGrid.svelte.d.ts +13 -0
  118. package/dist/components/containers/pane/PaneHandle.svelte +90 -0
  119. package/dist/components/containers/pane/PaneHandle.svelte.d.ts +12 -0
  120. package/dist/components/containers/pane/dragStore.svelte.d.ts +16 -0
  121. package/dist/components/containers/pane/dragStore.svelte.js +38 -0
  122. package/dist/components/containers/pane/index.d.ts +8 -0
  123. package/dist/components/containers/pane/index.js +11 -0
  124. package/dist/components/containers/pane/resizeStore.svelte.d.ts +10 -0
  125. package/dist/components/containers/pane/resizeStore.svelte.js +30 -0
  126. package/dist/components/containers/pane/theme.d.ts +571 -0
  127. package/dist/components/containers/pane/theme.js +211 -0
  128. package/dist/components/containers/pane/types.d.ts +249 -0
  129. package/dist/components/containers/pane/types.js +1 -0
  130. package/dist/components/containers/popover/Popover.stories.svelte +4 -4
  131. package/dist/components/containers/popover/Popover.svelte +3 -1
  132. package/dist/components/containers/popover/theme.d.ts +20 -20
  133. package/dist/components/containers/popover/types.d.ts +6 -2
  134. package/dist/components/containers/scroll-area/theme.d.ts +2 -2
  135. package/dist/components/containers/side-sheet/SideSheet.stories.svelte +16 -24
  136. package/dist/components/containers/side-sheet/SideSheet.svelte +73 -7
  137. package/dist/components/containers/side-sheet/SideSheet.svelte.d.ts +5 -0
  138. package/dist/components/containers/stack/theme.d.ts +44 -44
  139. package/dist/components/date/DateField.stories.svelte +57 -0
  140. package/dist/components/{containers/panes/SplitPane.stories.svelte.d.ts → date/DateField.stories.svelte.d.ts} +4 -4
  141. package/dist/components/date/DateField.svelte +11 -2
  142. package/dist/components/date/DateRangeField.stories.svelte +53 -0
  143. package/dist/components/{containers/panes/SupportingPane.stories.svelte.d.ts → date/DateRangeField.stories.svelte.d.ts} +4 -4
  144. package/dist/components/date/DateRangeField.svelte +2 -1
  145. package/dist/components/date/theme.d.ts +73 -4
  146. package/dist/components/date/theme.js +95 -26
  147. package/dist/components/date/types.d.ts +5 -0
  148. package/dist/components/forms/checkbox/Checkbox.svelte +7 -9
  149. package/dist/components/forms/checkbox/theme.d.ts +8 -8
  150. package/dist/components/forms/checkbox/theme.js +31 -9
  151. package/dist/components/forms/command/theme.d.ts +35 -35
  152. package/dist/components/forms/pin/theme.d.ts +2 -2
  153. package/dist/components/forms/radio-group/theme.d.ts +2 -2
  154. package/dist/components/forms/search/theme.d.ts +8 -8
  155. package/dist/components/forms/select/Select.svelte +3 -2
  156. package/dist/components/forms/select/theme.d.ts +26 -2
  157. package/dist/components/forms/select/theme.js +56 -22
  158. package/dist/components/forms/slider/theme.d.ts +20 -20
  159. package/dist/components/forms/switch/theme.d.ts +2 -2
  160. package/dist/components/forms/textfield/Textfield.stories.svelte +22 -0
  161. package/dist/components/forms/textfield/Textfield.svelte +10 -1
  162. package/dist/components/forms/textfield/theme.d.ts +44 -2
  163. package/dist/components/forms/textfield/theme.js +56 -16
  164. package/dist/components/forms/toggle-group/ToggleGroup.svelte +2 -2
  165. package/dist/components/forms/toggle-group/ToggleGroup.svelte.d.ts +2 -2
  166. package/dist/components/forms/toggle-group/ToggleGroupItem.svelte +1 -1
  167. package/dist/components/forms/toggle-group/ToggleGroupItem.svelte.d.ts +1 -1
  168. package/dist/components/forms/toggle-group/theme.d.ts +16 -16
  169. package/dist/components/forms/toggle-group/types.d.ts +2 -2
  170. package/dist/components/forms/tooltip/Tooltip.svelte +1 -1
  171. package/dist/components/forms/tooltip/theme.d.ts +2 -2
  172. package/dist/components/index.d.ts +1 -0
  173. package/dist/components/index.js +1 -0
  174. package/dist/components/misc/Avatar.stories.svelte +8 -0
  175. package/dist/components/misc/Avatar.svelte +35 -10
  176. package/dist/components/misc/DicebearAvatarBuilder.d.ts +59 -0
  177. package/dist/components/misc/DicebearAvatarBuilder.js +115 -0
  178. package/dist/components/misc/ThemeSettings.svelte +1 -1
  179. package/dist/components/misc/ThemeSwitcher.svelte +2 -2
  180. package/dist/components/misc/dicebearStyles.d.ts +21 -0
  181. package/dist/components/misc/dicebearStyles.js +169 -0
  182. package/dist/components/misc/index.d.ts +3 -0
  183. package/dist/components/misc/index.js +3 -0
  184. package/dist/components/misc/materialAvatarPalette.d.ts +6 -0
  185. package/dist/components/misc/materialAvatarPalette.js +44 -0
  186. package/dist/components/misc/theme.d.ts +20 -2
  187. package/dist/components/misc/theme.js +7 -1
  188. package/dist/components/misc/types.d.ts +20 -2
  189. package/dist/components/nav/appbar/AppBar.stories.svelte +1 -1
  190. package/dist/components/nav/appbar/AppBar.svelte +46 -15
  191. package/dist/components/nav/appbar/AppBar.svelte.d.ts +5 -0
  192. package/dist/components/nav/appbar/theme.d.ts +20 -14
  193. package/dist/components/nav/appbar/theme.js +11 -7
  194. package/dist/components/nav/appbar/types.d.ts +3 -1
  195. package/dist/components/nav/breadcrumb/Breadcrumb.stories.svelte +50 -0
  196. package/dist/components/nav/breadcrumb/Breadcrumb.stories.svelte.d.ts +19 -0
  197. package/dist/components/nav/breadcrumb/Breadcrumb.svelte +46 -0
  198. package/dist/components/nav/breadcrumb/Breadcrumb.svelte.d.ts +13 -0
  199. package/dist/components/nav/breadcrumb/index.d.ts +3 -0
  200. package/dist/components/nav/breadcrumb/index.js +6 -0
  201. package/dist/components/nav/breadcrumb/theme.d.ts +84 -0
  202. package/dist/components/nav/breadcrumb/theme.js +35 -0
  203. package/dist/components/nav/breadcrumb/types.d.ts +14 -0
  204. package/dist/components/nav/breadcrumb/types.js +1 -0
  205. package/dist/components/nav/index.d.ts +1 -0
  206. package/dist/components/nav/index.js +1 -0
  207. package/dist/components/nav/navbar/theme.d.ts +19 -19
  208. package/dist/components/nav/rail/Rail.stories.svelte +1 -5
  209. package/dist/components/nav/rail/Rail.svelte +3 -25
  210. package/dist/components/nav/rail/theme.d.ts +4 -4
  211. package/dist/components/nav/rail/types.d.ts +0 -5
  212. package/dist/components/nav/tabs/TabHolder.svelte +2 -1
  213. package/dist/components/nav/tabs/theme.d.ts +21 -21
  214. package/dist/components/nav/tabs/theme.js +6 -0
  215. package/dist/components/nav/tabs/types.d.ts +2 -2
  216. package/dist/components/pill/theme.d.ts +35 -35
  217. package/dist/components/snackbar/theme.d.ts +8 -8
  218. package/dist/components/table/Table.stories.svelte +267 -0
  219. package/dist/components/table/Table.stories.svelte.d.ts +19 -0
  220. package/dist/components/table/Table.svelte +1 -1
  221. package/dist/components/table/TableBody.svelte +16 -3
  222. package/dist/components/table/TableBody.svelte.d.ts +5 -1
  223. package/dist/components/table/TableRow.svelte +1 -1
  224. package/dist/components/table/theme.d.ts +2 -2
  225. package/dist/components/table/theme.js +2 -2
  226. package/dist/components/table/types.d.ts +7 -0
  227. package/dist/components/time/theme.d.ts +29 -29
  228. package/dist/components/toolbar/Toolbar.stories.svelte +71 -0
  229. package/dist/components/toolbar/Toolbar.stories.svelte.d.ts +19 -0
  230. package/dist/components/toolbar/Toolbar.svelte +19 -3
  231. package/dist/components/toolbar/Toolbar.svelte.d.ts +8 -2
  232. package/dist/components/toolbar/ToolbarButton.svelte +28 -4
  233. package/dist/components/toolbar/ToolbarDivider.svelte +4 -3
  234. package/dist/components/toolbar/ToolbarGroup.svelte +7 -2
  235. package/dist/components/toolbar/ToolbarGroupItem.svelte +29 -4
  236. package/dist/components/toolbar/ToolbarSection.svelte +35 -0
  237. package/dist/components/toolbar/ToolbarSection.svelte.d.ts +9 -0
  238. package/dist/components/toolbar/ToolbarSpacer.svelte +18 -0
  239. package/dist/components/toolbar/ToolbarSpacer.svelte.d.ts +9 -0
  240. package/dist/components/toolbar/index.d.ts +2 -0
  241. package/dist/components/toolbar/index.js +2 -0
  242. package/dist/components/toolbar/theme.d.ts +36 -21
  243. package/dist/components/toolbar/theme.js +27 -11
  244. package/dist/components/toolbar/types.d.ts +37 -4
  245. package/dist/components/typography/body/theme.d.ts +14 -14
  246. package/dist/components/typography/display/theme.d.ts +14 -14
  247. package/dist/components/typography/headline/theme.d.ts +14 -14
  248. package/dist/components/typography/kbd/Kbd.stories.svelte +1 -1
  249. package/dist/components/typography/kbd/theme.d.ts +8 -8
  250. package/dist/components/typography/label/theme.d.ts +14 -14
  251. package/dist/components/typography/title/theme.d.ts +14 -14
  252. package/dist/styles/component.css +126 -4
  253. package/dist/styles/motion.css +6 -3
  254. package/dist/utils/Layer.svelte +7 -3
  255. package/dist/utils/Theme.svelte +20 -20
  256. package/dist/utils/ThemeScript.svelte +1 -1
  257. package/dist/utils/icon/theme.d.ts +14 -14
  258. package/dist/utils/theme.svelte.js +1 -1
  259. package/package.json +39 -38
  260. package/bin/install-skill.js +0 -29
  261. package/dist/components/buttons/button-group/ButtonGroupItem.svelte +0 -41
  262. package/dist/components/buttons/button-group/ButtonGroupItem.svelte.d.ts +0 -8
  263. package/dist/components/buttons/connected/ConnectedButtons.svelte +0 -14
  264. package/dist/components/buttons/connected/ConnectedButtons.svelte.d.ts +0 -8
  265. package/dist/components/containers/menu-item/MenuItem.svelte +0 -74
  266. package/dist/components/containers/merger/InputMerger.svelte +0 -24
  267. package/dist/components/containers/merger/InputMerger.svelte.d.ts +0 -14
  268. package/dist/components/containers/merger/index.d.ts +0 -2
  269. package/dist/components/containers/merger/theme.d.ts +0 -1
  270. package/dist/components/containers/merger/theme.js +0 -4
  271. package/dist/components/containers/panes/SinglePane.stories.svelte +0 -67
  272. package/dist/components/containers/panes/SinglePane.svelte +0 -32
  273. package/dist/components/containers/panes/SinglePane.svelte.d.ts +0 -5
  274. package/dist/components/containers/panes/SplitPane.stories.svelte +0 -124
  275. package/dist/components/containers/panes/SplitPane.svelte +0 -144
  276. package/dist/components/containers/panes/SplitPane.svelte.d.ts +0 -8
  277. package/dist/components/containers/panes/SupportingPane.stories.svelte +0 -113
  278. package/dist/components/containers/panes/SupportingPane.svelte +0 -175
  279. package/dist/components/containers/panes/SupportingPane.svelte.d.ts +0 -9
  280. package/dist/components/containers/panes/index.d.ts +0 -5
  281. package/dist/components/containers/panes/theme.d.ts +0 -490
  282. package/dist/components/containers/panes/theme.js +0 -185
  283. package/dist/components/containers/panes/types.d.ts +0 -108
  284. package/dist/components/nav/rail/RailNavContext.svelte +0 -14
  285. package/dist/components/nav/rail/RailNavContext.svelte.d.ts +0 -8
  286. /package/dist/components/{containers/menu-item → buttons/split-button}/types.js +0 -0
  287. /package/dist/components/{containers/panes → chips}/types.js +0 -0
  288. /package/dist/components/containers/{menu-item → menu/menu-item}/index.d.ts +0 -0
  289. /package/dist/components/containers/{menu-item → menu/menu-item}/index.js +0 -0
@@ -0,0 +1,91 @@
1
+ <!--
2
+ @component
3
+ A `MenuItem`-like row that opens a nested submenu panel on hover or press,
4
+ instead of firing a selection itself.
5
+
6
+ Wraps bits-ui's `DropdownMenu.Sub` + `SubTrigger` + `SubContent`. The
7
+ trigger row (`iconProps`/`helper`/`children` label) behaves like a
8
+ `MenuItem`; pass the nested rows — `MenuItem`, `MenuCheckboxItem`,
9
+ `MenuRadioItem`, `MenuGroup`, more `MenuSub`, etc. — as `submenu`.
10
+
11
+ @example
12
+ ```svelte
13
+ <Menu label="File">
14
+ <MenuItem iconProps={{ name: 'draft' }}>New</MenuItem>
15
+ <MenuSub iconProps={{ name: 'ios_share' }}>
16
+ Share
17
+ {#snippet submenu()}
18
+ <MenuItem>Email</MenuItem>
19
+ <MenuItem>Link</MenuItem>
20
+ {/snippet}
21
+ </MenuSub>
22
+ </Menu>
23
+ ```
24
+
25
+ @see https://m3.material.io/components/menus/guidelines
26
+ -->
27
+ <script lang="ts">
28
+ import { DropdownMenu } from 'bits-ui';
29
+ import clsx from 'clsx';
30
+ import Icon from '../../../utils/icon/Icon.svelte';
31
+ import Layer from '../../../utils/Layer.svelte';
32
+ import { menu as menuCls } from './theme.js';
33
+ import { enterExit } from '../../../animation/enterExit.js';
34
+ import { easeEmphasizedDecel } from '../../../animation/easing.js';
35
+ import type { MenuSubProps } from './types.js';
36
+
37
+ let {
38
+ iconProps,
39
+ disabled = false,
40
+ helper,
41
+ children,
42
+ submenu,
43
+ open = $bindable(false),
44
+ class: className,
45
+ submenuClass
46
+ }: MenuSubProps = $props();
47
+
48
+ const cls = $derived(menuCls());
49
+ </script>
50
+
51
+ <DropdownMenu.Sub bind:open>
52
+ <DropdownMenu.SubTrigger {disabled}>
53
+ {#snippet child({ props })}
54
+ <div {...props} class={cls.item({ class: className })}>
55
+ {#if iconProps}
56
+ <Icon class={cls.icon()} {...iconProps} />
57
+ {/if}
58
+ <div class={cls.itemContent()}>
59
+ {@render children()}
60
+ {#if helper}
61
+ <span class={cls.helper()}>{helper}</span>
62
+ {/if}
63
+ </div>
64
+ <Icon name="chevron_right" class={cls.rightSlot()} />
65
+ <Layer />
66
+ </div>
67
+ {/snippet}
68
+ </DropdownMenu.SubTrigger>
69
+
70
+ <DropdownMenu.Portal>
71
+ <DropdownMenu.SubContent forceMount sideOffset={4} class="z-100">
72
+ {#snippet child({ wrapperProps, props, open: isOpen })}
73
+ {#if isOpen}
74
+ <div {...wrapperProps} class={wrapperProps.class as any}>
75
+ <div
76
+ {...props}
77
+ class={clsx(cls.content(), props.class as any, submenuClass)}
78
+ transition:enterExit={{
79
+ duration: 200,
80
+ easing: easeEmphasizedDecel,
81
+ mode: 'scale'
82
+ }}
83
+ >
84
+ {@render submenu()}
85
+ </div>
86
+ </div>
87
+ {/if}
88
+ {/snippet}
89
+ </DropdownMenu.SubContent>
90
+ </DropdownMenu.Portal>
91
+ </DropdownMenu.Sub>
@@ -0,0 +1,29 @@
1
+ import type { MenuSubProps } from './types.js';
2
+ /**
3
+ * A `MenuItem`-like row that opens a nested submenu panel on hover or press,
4
+ * instead of firing a selection itself.
5
+ *
6
+ * Wraps bits-ui's `DropdownMenu.Sub` + `SubTrigger` + `SubContent`. The
7
+ * trigger row (`iconProps`/`helper`/`children` label) behaves like a
8
+ * `MenuItem`; pass the nested rows — `MenuItem`, `MenuCheckboxItem`,
9
+ * `MenuRadioItem`, `MenuGroup`, more `MenuSub`, etc. — as `submenu`.
10
+ *
11
+ * @example
12
+ * ```svelte
13
+ * <Menu label="File">
14
+ * <MenuItem iconProps={{ name: 'draft' }}>New</MenuItem>
15
+ * <MenuSub iconProps={{ name: 'ios_share' }}>
16
+ * Share
17
+ * {#snippet submenu()}
18
+ * <MenuItem>Email</MenuItem>
19
+ * <MenuItem>Link</MenuItem>
20
+ * {/snippet}
21
+ * </MenuSub>
22
+ * </Menu>
23
+ * ```
24
+ *
25
+ * @see https://m3.material.io/components/menus/guidelines
26
+ */
27
+ declare const MenuSub: import("svelte").Component<MenuSubProps, {}, "open">;
28
+ type MenuSub = ReturnType<typeof MenuSub>;
29
+ export default MenuSub;
@@ -1,2 +1,9 @@
1
+ export * from './menu-item/index.js';
2
+ export * from './theme.js';
1
3
  export * from './types.js';
2
4
  export { default as Menu } from './Menu.svelte';
5
+ export { default as MenuCheckboxItem } from './MenuCheckboxItem.svelte';
6
+ export { default as MenuGroup } from './MenuGroup.svelte';
7
+ export { default as MenuRadioGroup } from './MenuRadioGroup.svelte';
8
+ export { default as MenuRadioItem } from './MenuRadioItem.svelte';
9
+ export { default as MenuSub } from './MenuSub.svelte';
@@ -1,5 +1,13 @@
1
1
  // THIS FILE IS AUTO-GENERATED BY scripts/generate-components-index.ts - DO NOT EDIT MANUALLY
2
+ // folder re-exports (export everything from these folders)
3
+ export * from './menu-item/index.js';
2
4
  // re-export TS/JS modules from this folder
5
+ export * from './theme.js';
3
6
  export * from './types.js';
4
7
  // default exports for components in this folder
5
8
  export { default as Menu } from './Menu.svelte';
9
+ export { default as MenuCheckboxItem } from './MenuCheckboxItem.svelte';
10
+ export { default as MenuGroup } from './MenuGroup.svelte';
11
+ export { default as MenuRadioGroup } from './MenuRadioGroup.svelte';
12
+ export { default as MenuRadioItem } from './MenuRadioItem.svelte';
13
+ export { default as MenuSub } from './MenuSub.svelte';
@@ -0,0 +1,71 @@
1
+ <!--
2
+ @component
3
+ A single interactive row inside a `Menu`.
4
+
5
+ `MenuItem` is the leaf node of the menu system. It wraps bits-ui's
6
+ `DropdownMenu.Item` so each row automatically gets keyboard navigation,
7
+ focus management, and the ARIA `menuitem` role.
8
+
9
+ Pass `onclick` (or `onSelect`) for the action; use `iconProps` for a
10
+ leading icon and `helper` for a supporting line below the label.
11
+
12
+ Contrast with `Menu`, which is just the shell (open state + floating panel),
13
+ and `ContextMenu`, which owns its own item list and is right-click triggered.
14
+
15
+ @see https://m3.material.io/components/menus/guidelines
16
+ -->
17
+ <script lang="ts">
18
+ import type { MenuItemProps } from './types.js';
19
+ import type { DropdownMenuItemProps } from 'bits-ui';
20
+ import Icon from '../../../../utils/icon/Icon.svelte';
21
+ import Layer from '../../../../utils/Layer.svelte';
22
+ import { DropdownMenu } from 'bits-ui';
23
+ import { menu as menuCls } from '../theme.js';
24
+
25
+ let {
26
+ iconProps,
27
+ disabled = false,
28
+ onclick,
29
+ onSelect,
30
+ isGap,
31
+ selected,
32
+ helper,
33
+ children,
34
+ class: className,
35
+ ...restProps
36
+ }: MenuItemProps & DropdownMenuItemProps = $props();
37
+
38
+ // bits-ui fires onSelect at the Item level; avoid wiring onclick to the
39
+ // native button as well or it would fire twice on every click.
40
+ const handleSelect = $derived(onSelect ?? (onclick ? () => onclick() : undefined));
41
+
42
+ const cls = $derived(menuCls({ selected }));
43
+ </script>
44
+
45
+ {#if !isGap}
46
+ <DropdownMenu.Item
47
+ {...restProps}
48
+ {disabled}
49
+ onSelect={handleSelect}
50
+ class={cls.item({ class: className as string })}
51
+ >
52
+ {#if iconProps}
53
+ <Icon class={cls.icon()} {...iconProps} />
54
+ {/if}
55
+
56
+ <div class={cls.itemContent()}>
57
+ {@render children()}
58
+ {#if helper}
59
+ <span class={cls.helper()}>
60
+ {helper}
61
+ </span>
62
+ {/if}
63
+ </div>
64
+ <Layer />
65
+ </DropdownMenu.Item>
66
+ {:else}
67
+ <!-- Render as a gap -->
68
+ <DropdownMenu.Item>
69
+ <hr class="h-1" />
70
+ </DropdownMenu.Item>
71
+ {/if}
@@ -1,5 +1,6 @@
1
1
  import type { MenuItemProps } from './types.js';
2
- type $$ComponentProps = MenuItemProps & Record<string, any>;
2
+ import type { DropdownMenuItemProps } from 'bits-ui';
3
+ type $$ComponentProps = MenuItemProps & DropdownMenuItemProps;
3
4
  /**
4
5
  * A single interactive row inside a `Menu`.
5
6
  *
@@ -1,4 +1,4 @@
1
- import type { IconProps } from '../../../utils/icon/types.js';
1
+ import type { IconProps } from '../../../../utils/icon/types.js';
2
2
  import type { Snippet } from 'svelte';
3
3
  /**
4
4
  * Props for the MenuItem component.
@@ -33,4 +33,8 @@ export interface MenuItemProps {
33
33
  * The content of the menu item, typically a label.
34
34
  */
35
35
  children: Snippet;
36
+ /**
37
+ * Whether this item is in fact a gap
38
+ */
39
+ isGap?: boolean;
36
40
  }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,68 @@
1
+ import { type VariantProps } from 'tailwind-variants';
2
+ /**
3
+ * Shared styling for every row-shaped element inside a `Menu`'s floating
4
+ * panel: `MenuItem`, `MenuCheckboxItem`, `MenuRadioItem`, and `MenuSub`'s
5
+ * trigger row all pull from this one `tv()` so they stay visually identical.
6
+ */
7
+ export type MenuVariants = VariantProps<typeof menu>;
8
+ export declare const menu: import("tailwind-variants").TVReturnType<{
9
+ selected: {
10
+ true: {
11
+ item: string;
12
+ };
13
+ };
14
+ checked: {
15
+ true: {
16
+ indicator: string;
17
+ };
18
+ };
19
+ }, {
20
+ content: string;
21
+ item: string;
22
+ icon: string;
23
+ indicator: string;
24
+ itemContent: string;
25
+ helper: string;
26
+ rightSlot: string;
27
+ groupHeading: string;
28
+ }, undefined, {
29
+ selected: {
30
+ true: {
31
+ item: string;
32
+ };
33
+ };
34
+ checked: {
35
+ true: {
36
+ indicator: string;
37
+ };
38
+ };
39
+ }, {
40
+ content: string;
41
+ item: string;
42
+ icon: string;
43
+ indicator: string;
44
+ itemContent: string;
45
+ helper: string;
46
+ rightSlot: string;
47
+ groupHeading: string;
48
+ }, import("tailwind-variants").TVReturnTypeLike<{
49
+ selected: {
50
+ true: {
51
+ item: string;
52
+ };
53
+ };
54
+ checked: {
55
+ true: {
56
+ indicator: string;
57
+ };
58
+ };
59
+ }, {
60
+ content: string;
61
+ item: string;
62
+ icon: string;
63
+ indicator: string;
64
+ itemContent: string;
65
+ helper: string;
66
+ rightSlot: string;
67
+ groupHeading: string;
68
+ }>>;
@@ -0,0 +1,36 @@
1
+ import { tv } from 'tailwind-variants';
2
+ export const menu = tv({
3
+ slots: {
4
+ content: `
5
+ bg-md-sys-color-surface-container-high shadow-elevation-3
6
+ ring-md-sys-color-outline/10 max-w-sm min-w-48 gap-1
7
+ overflow-y-auto rounded-lg px-2 py-1
8
+ `,
9
+ item: `
10
+ rounded-sm h-11 relative flex w-full cursor-pointer items-center gap-2 px-3 py-2
11
+ md-sys-typescale-body-medium whitespace-nowrap text-md-sys-color-on-surface
12
+ hover:bg-md-sys-color-on-surface/8 data-[highlighted]:bg-md-sys-color-on-surface/8
13
+ focus-visible:outline-2 focus-visible:outline-offset-2
14
+ focus-visible:outline-md-sys-color-primary
15
+ data-[disabled]:cursor-not-allowed data-[disabled]:opacity-38
16
+ `,
17
+ icon: 'text-md-sys-color-on-surface-variant size-5 text-[20px] shrink-0',
18
+ indicator: 'size-5 text-[20px] shrink-0 text-md-sys-color-on-surface-variant',
19
+ itemContent: 'flex flex-1 flex-col gap-1 text-left min-w-0',
20
+ helper: 'md-sys-typescale-body-medium text-md-sys-color-on-surface-variant',
21
+ rightSlot: 'text-md-sys-color-on-surface-variant size-5 text-[20px] shrink-0',
22
+ groupHeading: 'px-3 pt-2 pb-1 md-sys-typescale-label-medium text-md-sys-color-primary'
23
+ },
24
+ variants: {
25
+ selected: {
26
+ true: {
27
+ item: 'bg-md-sys-color-secondary-container rounded-lg text-md-sys-color-on-secondary-container'
28
+ }
29
+ },
30
+ checked: {
31
+ true: {
32
+ indicator: 'text-md-sys-color-primary'
33
+ }
34
+ }
35
+ }
36
+ });
@@ -1,3 +1,4 @@
1
+ import type { IconProps } from '../../../utils/icon/types.js';
1
2
  import type { Snippet } from 'svelte';
2
3
  /**
3
4
  * Props for the Menu component.
@@ -18,9 +19,11 @@ export type MenuProps = {
18
19
  children: Snippet;
19
20
  /**
20
21
  * Custom trigger element. When omitted, a default filled `Button` labelled
21
- * by `label` is used.
22
+ * by `label` is used. Receives the trigger's props — spread them onto the
23
+ * rendered element/component so bits-ui doesn't wrap it in its own
24
+ * `<button>` (which would nest buttons).
22
25
  */
23
- trigger?: Snippet;
26
+ trigger?: Snippet<[Record<string, unknown>]>;
24
27
  /**
25
28
  * Label for the default button trigger. Ignored when `trigger` is provided.
26
29
  * @default 'Open menu'
@@ -38,3 +41,111 @@ export type MenuProps = {
38
41
  /** Additional CSS classes applied to the floating content panel. */
39
42
  class?: string;
40
43
  };
44
+ /**
45
+ * Props for `MenuGroup`, which wraps related `MenuItem`s (or
46
+ * `MenuCheckboxItem`/`MenuRadioItem`s) under an optional heading so screen
47
+ * readers announce them as a labelled set.
48
+ */
49
+ export type MenuGroupProps = {
50
+ /** Optional label rendered above the group's items. */
51
+ heading?: string;
52
+ /** Items inside the group. */
53
+ children: Snippet;
54
+ /** Additional CSS classes applied to the group container. */
55
+ class?: string;
56
+ };
57
+ /**
58
+ * Props for `MenuRadioGroup`, which restricts its `MenuRadioItem` children
59
+ * to a single selected value at a time.
60
+ */
61
+ export type MenuRadioGroupProps = {
62
+ /**
63
+ * The value of the currently selected radio item.
64
+ * Supports two-way binding with `bind:value`.
65
+ */
66
+ value?: string;
67
+ /** Called when the selected value changes. */
68
+ onValueChange?: (value: string) => void;
69
+ /** `MenuRadioItem`s inside the group. */
70
+ children: Snippet;
71
+ /** Additional CSS classes applied to the group container. */
72
+ class?: string;
73
+ };
74
+ /**
75
+ * Props for a single option inside a `MenuRadioGroup`.
76
+ */
77
+ export type MenuRadioItemProps = {
78
+ /** The value this item represents within its `MenuRadioGroup`. */
79
+ value: string;
80
+ /**
81
+ * Whether the item is disabled.
82
+ * @default false
83
+ */
84
+ disabled?: boolean;
85
+ /** Optional supporting text shown below the label. */
86
+ helper?: string;
87
+ /** The item's label. */
88
+ children: Snippet;
89
+ /**
90
+ * Whether the menu closes when this item is selected.
91
+ * @default true
92
+ */
93
+ closeOnSelect?: boolean;
94
+ /** Additional CSS classes applied to the item row. */
95
+ class?: string;
96
+ };
97
+ /**
98
+ * Props for a toggleable option inside a `Menu`, independent of any other
99
+ * item (unlike `MenuRadioItem`, any number of `MenuCheckboxItem`s can be
100
+ * checked at once).
101
+ */
102
+ export type MenuCheckboxItemProps = {
103
+ /**
104
+ * The checked state. Supports two-way binding with `bind:checked`.
105
+ * @default false
106
+ */
107
+ checked?: boolean;
108
+ /** Called when the checked state changes. */
109
+ onCheckedChange?: (checked: boolean) => void;
110
+ /**
111
+ * Whether the item is disabled.
112
+ * @default false
113
+ */
114
+ disabled?: boolean;
115
+ /** Optional supporting text shown below the label. */
116
+ helper?: string;
117
+ /** The item's label. */
118
+ children: Snippet;
119
+ /**
120
+ * Whether the menu closes when this item is selected.
121
+ * @default true
122
+ */
123
+ closeOnSelect?: boolean;
124
+ /** Additional CSS classes applied to the item row. */
125
+ class?: string;
126
+ };
127
+ /**
128
+ * Props for `MenuSub`, a `MenuItem`-like row that opens a nested submenu
129
+ * panel on hover/click instead of firing a selection.
130
+ */
131
+ export type MenuSubProps = {
132
+ /** Props for the trigger row's leading icon. */
133
+ iconProps?: IconProps;
134
+ /**
135
+ * Whether the submenu trigger is disabled.
136
+ * @default false
137
+ */
138
+ disabled?: boolean;
139
+ /** Optional supporting text shown below the trigger's label. */
140
+ helper?: string;
141
+ /** The trigger row's label. */
142
+ children: Snippet;
143
+ /** Items rendered inside the nested submenu panel. */
144
+ submenu: Snippet;
145
+ /** Controlled open state for the submenu. */
146
+ open?: boolean;
147
+ /** Additional CSS classes applied to the trigger row. */
148
+ class?: string;
149
+ /** Additional CSS classes applied to the submenu's floating panel. */
150
+ submenuClass?: string;
151
+ };
@@ -0,0 +1,199 @@
1
+ <script module lang="ts">
2
+ import { defineMeta } from '@storybook/addon-svelte-csf';
3
+ import DraggablePane from './DraggablePane.svelte';
4
+
5
+ const { Story } = defineMeta({
6
+ title: 'Containers/DraggablePane',
7
+ component: DraggablePane,
8
+ argTypes: {
9
+ title: { control: 'text' },
10
+ disableDrag: { control: 'boolean' }
11
+ },
12
+ args: {
13
+ title: 'Inspector',
14
+ disableDrag: false
15
+ }
16
+ });
17
+ </script>
18
+
19
+ <script lang="ts">
20
+ let boundedEl: HTMLDivElement | undefined = $state();
21
+ let boundedX: number | undefined = $state();
22
+ let boundedY: number | undefined = $state();
23
+
24
+ // DraggablePane positions with `position: fixed` (viewport coordinates), so
25
+ // seed x/y from the container's own rect rather than an arbitrary offset —
26
+ // `bounds` only clamps the drag, it doesn't reposition the panel into the box.
27
+ $effect(() => {
28
+ if (boundedEl && boundedX === undefined) {
29
+ const rect = boundedEl.getBoundingClientRect();
30
+ boundedX = rect.left + 16;
31
+ boundedY = rect.top + 16;
32
+ }
33
+ });
34
+ </script>
35
+
36
+ <!--
37
+ Bare `position: fixed` panel — drag the header around the Storybook canvas
38
+ by pointer or, once focused, the arrow keys (shift for a bigger step).
39
+ -->
40
+ <Story name="Playground">
41
+ {#snippet template(args)}
42
+ <DraggablePane title={args.title} disableDrag={args.disableDrag} initialX={32} initialY={32}>
43
+ <p class="md-sys-typescale-body-medium text-md-sys-color-on-surface-variant w-56">
44
+ Drag the header to move this panel. Its position is bindable via <code>x</code>/<code
45
+ >y</code
46
+ >.
47
+ </p>
48
+ </DraggablePane>
49
+ {/snippet}
50
+ </Story>
51
+
52
+ <!-- A closable pane, and a second one demonstrating `persistKey` position persistence. -->
53
+ <Story name="Closable + Persisted" asChild>
54
+ <DraggablePane title="Closable" initialX={32} initialY={32} onClose={() => {}}>
55
+ <p class="md-sys-typescale-body-medium text-md-sys-color-on-surface-variant w-56">
56
+ Has a close button in its header.
57
+ </p>
58
+ </DraggablePane>
59
+ <DraggablePane
60
+ title="Remembers position"
61
+ initialX={340}
62
+ initialY={32}
63
+ persistKey="storybook-draggable-pane-demo"
64
+ >
65
+ <p class="md-sys-typescale-body-medium text-md-sys-color-on-surface-variant w-56">
66
+ Drag me, then reload the story — <code>persistKey</code> saves the position to
67
+ <code>localStorage</code>.
68
+ </p>
69
+ </DraggablePane>
70
+ </Story>
71
+
72
+ <!--
73
+ `onClickOutside` fires on any click landing outside the panel — wired to
74
+ `onClose` here, so clicking the surrounding canvas dismisses it.
75
+ -->
76
+ <Story name="Close On Outside Click" asChild>
77
+ <DraggablePane
78
+ title="Click outside to close"
79
+ initialX={32}
80
+ initialY={32}
81
+ onClose={() => console.log('DraggablePane closed')}
82
+ onClickOutside={() => console.log('DraggablePane: click outside')}
83
+ >
84
+ <p class="md-sys-typescale-body-medium text-md-sys-color-on-surface-variant w-56">
85
+ Click anywhere outside this panel (or the close button) to dismiss it.
86
+ </p>
87
+ </DraggablePane>
88
+ </Story>
89
+
90
+ <!-- Custom header content via the `header` snippet instead of `title`/`onClose`. -->
91
+ <Story name="Custom Header" asChild>
92
+ <DraggablePane initialX={32} initialY={32}>
93
+ {#snippet header()}
94
+ <span
95
+ class="md-sys-typescale-label-large text-md-sys-color-on-surface flex-1 truncate px-1 py-1"
96
+ >
97
+ ⠿ Custom drag handle
98
+ </span>
99
+ {/snippet}
100
+ <p class="md-sys-typescale-body-medium text-md-sys-color-on-surface-variant w-56">
101
+ The default grip/title/close row is fully replaceable.
102
+ </p>
103
+ </DraggablePane>
104
+ </Story>
105
+
106
+ <!--
107
+ `bounds` clamps dragging to a given element's current rect instead of the
108
+ viewport — here, the dashed container below.
109
+ -->
110
+ <Story name="Bounded To Container">
111
+ {#snippet template()}
112
+ <div
113
+ bind:this={boundedEl}
114
+ class="border-md-sys-color-outline relative h-[320px] w-full overflow-hidden rounded-lg border border-dashed"
115
+ >
116
+ {#if boundedEl && boundedX !== undefined && boundedY !== undefined}
117
+ <DraggablePane title="Confined" bind:x={boundedX} bind:y={boundedY} bounds={boundedEl}>
118
+ <p class="md-sys-typescale-body-medium text-md-sys-color-on-surface-variant w-48">
119
+ Can't leave this box.
120
+ </p>
121
+ </DraggablePane>
122
+ {/if}
123
+ </div>
124
+ {/snippet}
125
+ </Story>
126
+
127
+ <!--
128
+ `resizable` adds edge/corner handles (pointer drag, or arrow keys once an
129
+ edge handle is focused). `minWidth`/`minHeight` are the safety net that
130
+ keeps a resize from shrinking the panel into uselessness; `maxWidth`/
131
+ `maxHeight` cap the other direction (both are also implicitly capped by
132
+ `bounds`, the viewport here).
133
+ -->
134
+ <Story name="Resizable" asChild>
135
+ <DraggablePane
136
+ title="Resizable"
137
+ initialX={32}
138
+ initialY={32}
139
+ resizable
140
+ minWidth={220}
141
+ minHeight={140}
142
+ maxWidth={520}
143
+ maxHeight={420}
144
+ >
145
+ <p class="md-sys-typescale-body-medium text-md-sys-color-on-surface-variant">
146
+ Drag any edge or corner to resize. Can't go below 220×140, or above 520×420.
147
+ </p>
148
+ </DraggablePane>
149
+ </Story>
150
+
151
+ <!--
152
+ Content-sized (no `height`) is the default — but content taller than the
153
+ viewport still carries a standing `max-height` (`bounds` minus
154
+ `boundsPadding`, see the component doc comment), so it scrolls internally
155
+ instead of rendering off-screen with the bottom of the panel unreachable.
156
+ -->
157
+ <Story name="Content Overflow (Unbounded)" asChild>
158
+ <DraggablePane title="Long Form">
159
+ <div
160
+ class="md-sys-typescale-body-medium text-md-sys-color-on-surface-variant flex w-56 flex-col gap-3"
161
+ >
162
+ {#each Array(30) as _, i (i)}
163
+ <p>
164
+ Field {i + 1} — this panel never sets `height`, yet can't render taller than the viewport.
165
+ </p>
166
+ {/each}
167
+ </div>
168
+ </DraggablePane>
169
+ </Story>
170
+
171
+ <!--
172
+ A fixed `height` turns the content area into an internal scroll region
173
+ instead of letting the panel grow past its bound — the `content` slot needs
174
+ `min-h-0` alongside `flex-1 overflow-auto`, otherwise a flex child's default
175
+ `min-height: auto` lets it grow past its flex-basis and overflow the fixed-
176
+ height panel instead of scrolling internally.
177
+ -->
178
+ <Story name="Scrollable Content" asChild>
179
+ <DraggablePane title="Long List" initialX={32} initialY={32} height={240} width={280}>
180
+ <ul class="md-sys-typescale-body-medium text-md-sys-color-on-surface-variant">
181
+ {#each Array(40) as _, i (i)}
182
+ <li>Item {i + 1}</li>
183
+ {/each}
184
+ </ul>
185
+ </DraggablePane>
186
+ </Story>
187
+
188
+ <!--
189
+ `collapsible` adds a minimize button that docks the pane into a small pill
190
+ at `minimizedCorner` (default bottom-left) showing `minimizedTitle` (falls
191
+ back to `title`); clicking the pill restores it at its previous position.
192
+ -->
193
+ <Story name="Collapsible" asChild>
194
+ <DraggablePane title="Mini Player" initialX={32} initialY={32} collapsible resizable>
195
+ <p class="md-sys-typescale-body-medium text-md-sys-color-on-surface-variant w-56">
196
+ Click the minimize icon in the header to collapse this into a pill in the bottom-left corner.
197
+ </p>
198
+ </DraggablePane>
199
+ </Story>
@@ -0,0 +1,4 @@
1
+ import DraggablePane from './DraggablePane.svelte';
2
+ declare const DraggablePane: import("svelte").Component<Record<string, never>, {}, "">;
3
+ type DraggablePane = ReturnType<typeof DraggablePane>;
4
+ export default DraggablePane;