@svelte-atoms/core 1.0.0-alpha.30 → 1.0.0-alpha.32

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 (221) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +176 -739
  3. package/dist/attachments/index.d.ts +1 -0
  4. package/dist/attachments/index.js +1 -0
  5. package/dist/components/accordion/accordion-root.svelte +65 -61
  6. package/dist/components/accordion/accordion.stories.svelte +70 -145
  7. package/dist/components/accordion/item/accordion-item-body.svelte +6 -4
  8. package/dist/components/accordion/item/accordion-item-header.svelte +2 -1
  9. package/dist/components/accordion/item/accordion-item-indicator.svelte +2 -1
  10. package/dist/components/accordion/item/accordion-item-root.svelte +2 -1
  11. package/dist/components/accordion/item/bond.svelte.d.ts +2 -0
  12. package/dist/components/accordion/item/index.d.ts +3 -0
  13. package/dist/components/accordion/item/index.js +3 -0
  14. package/dist/components/accordion/item/motion.svelte.d.ts +15 -0
  15. package/dist/components/accordion/item/motion.svelte.js +30 -0
  16. package/dist/components/accordion/item/types.d.ts +7 -24
  17. package/dist/components/alert/alert-close-button.svelte +32 -36
  18. package/dist/components/alert/alert-description.svelte +1 -1
  19. package/dist/components/alert/alert-description.svelte.d.ts +3 -6
  20. package/dist/components/alert/alert-root.svelte +3 -38
  21. package/dist/components/alert/alert-root.svelte.d.ts +2 -2
  22. package/dist/components/alert/alert.stories.svelte +400 -400
  23. package/dist/components/alert/bond.svelte.d.ts +0 -13
  24. package/dist/components/alert/bond.svelte.js +0 -32
  25. package/dist/components/alert/types.d.ts +8 -32
  26. package/dist/components/atom/html-atom.svelte +93 -261
  27. package/dist/components/atom/types.d.ts +3 -2
  28. package/dist/components/atom/utils.d.ts +37 -0
  29. package/dist/components/atom/utils.js +208 -0
  30. package/dist/components/avatar/avatar.stories.svelte +22 -22
  31. package/dist/components/badge/badge.stories.svelte +12 -12
  32. package/dist/components/badge/badge.svelte +19 -19
  33. package/dist/components/breadcrumb/breadcrumb-item.svelte +1 -1
  34. package/dist/components/breadcrumb/breadcrumb-separator.svelte +5 -1
  35. package/dist/components/breadcrumb/breadcrumb.stories.svelte +16 -16
  36. package/dist/components/button/button.stories.svelte +27 -27
  37. package/dist/components/calendar/calendar-day.svelte +9 -4
  38. package/dist/components/calendar/calendar.stories.svelte +26 -26
  39. package/dist/components/card/card-body.svelte +39 -39
  40. package/dist/components/card/card-footer.svelte +41 -41
  41. package/dist/components/card/card-root.svelte +91 -91
  42. package/dist/components/card/card.stories.svelte +133 -133
  43. package/dist/components/checkbox/checkbox.stories.svelte +22 -22
  44. package/dist/components/checkbox/checkbox.svelte +159 -155
  45. package/dist/components/collapsible/bond.svelte.js +2 -1
  46. package/dist/components/collapsible/collapsible-body.svelte +3 -2
  47. package/dist/components/collapsible/collapsible.stories.svelte +172 -172
  48. package/dist/components/collapsible/motion.svelte.d.ts +6 -0
  49. package/dist/components/collapsible/motion.svelte.js +15 -0
  50. package/dist/components/combobox/atoms.d.ts +3 -3
  51. package/dist/components/combobox/atoms.js +3 -3
  52. package/dist/components/combobox/bond.svelte.d.ts +6 -6
  53. package/dist/components/combobox/bond.svelte.js +3 -26
  54. package/dist/components/combobox/combobox-control.svelte +52 -52
  55. package/dist/components/combobox/{compobox-item.svelte → combobox-item.svelte} +62 -68
  56. package/dist/components/combobox/combobox-item.svelte.d.ts +12 -0
  57. package/dist/components/combobox/combobox-root.svelte +65 -65
  58. package/dist/components/combobox/combobox.stories.svelte +50 -0
  59. package/dist/components/combobox/combobox.stories.svelte.d.ts +3 -0
  60. package/dist/components/combobox/index.d.ts +1 -0
  61. package/dist/components/container/container.stories.svelte +20 -20
  62. package/dist/components/container/container.svelte.d.ts +1 -1
  63. package/dist/components/datagrid/datagrid.stories.svelte +72 -72
  64. package/dist/components/datagrid/tr/bond.svelte.d.ts +4 -2
  65. package/dist/components/datagrid/tr/bond.svelte.js +9 -7
  66. package/dist/components/datagrid/tr/datagrid-tr.svelte +9 -7
  67. package/dist/components/date-picker/bond.svelte.d.ts +15 -5
  68. package/dist/components/date-picker/bond.svelte.js +5 -11
  69. package/dist/components/date-picker/date-picker-calendar.svelte +2 -2
  70. package/dist/components/date-picker/date-picker-root.svelte +95 -95
  71. package/dist/components/date-picker/date-picker.stories.svelte +35 -35
  72. package/dist/components/dialog/bond.svelte.d.ts +13 -3
  73. package/dist/components/dialog/bond.svelte.js +52 -6
  74. package/dist/components/dialog/dialog-content.svelte +2 -20
  75. package/dist/components/dialog/dialog-root.svelte +3 -22
  76. package/dist/components/dialog/dialog.stories.svelte +64 -64
  77. package/dist/components/dialog/motion.svelte.d.ts +13 -0
  78. package/dist/components/dialog/motion.svelte.js +44 -0
  79. package/dist/components/drawer/attachments.svelte.d.ts +1 -1
  80. package/dist/components/drawer/attachments.svelte.js +1 -3
  81. package/dist/components/drawer/bond.svelte.d.ts +30 -9
  82. package/dist/components/drawer/bond.svelte.js +80 -24
  83. package/dist/components/drawer/drawer-content.svelte +49 -57
  84. package/dist/components/drawer/drawer-root.svelte +5 -4
  85. package/dist/components/drawer/drawer.stories.svelte +141 -212
  86. package/dist/components/drawer/index.d.ts +2 -0
  87. package/dist/components/drawer/index.js +2 -0
  88. package/dist/components/drawer/motion.d.ts +15 -0
  89. package/dist/components/drawer/motion.js +28 -0
  90. package/dist/components/dropdown/atoms.d.ts +1 -1
  91. package/dist/components/dropdown/atoms.js +1 -1
  92. package/dist/components/dropdown/bond.svelte.d.ts +22 -19
  93. package/dist/components/dropdown/bond.svelte.js +29 -53
  94. package/dist/components/dropdown/dropdown-root.svelte +7 -1
  95. package/dist/components/dropdown/dropdown-values.svelte +17 -17
  96. package/dist/components/dropdown/dropdown-values.svelte.d.ts +1 -2
  97. package/dist/components/dropdown/dropdown.stories.svelte +13 -10
  98. package/dist/components/dropdown/index.d.ts +2 -0
  99. package/dist/components/dropdown/index.js +1 -0
  100. package/dist/components/dropdown/item/attachments.svelte.d.ts +2 -2
  101. package/dist/components/dropdown/item/attachments.svelte.js +2 -2
  102. package/dist/components/dropdown/item/controller.svelte.d.ts +34 -0
  103. package/dist/components/dropdown/item/controller.svelte.js +82 -0
  104. package/dist/components/dropdown/item/dropdown-item.svelte +109 -102
  105. package/dist/components/dropdown/item/dropdown-item.svelte.d.ts +13 -28
  106. package/dist/components/dropdown/item/index.d.ts +3 -0
  107. package/dist/components/dropdown/item/index.js +3 -0
  108. package/dist/components/dropdown/item/types.d.ts +29 -0
  109. package/dist/components/dropdown/item/types.js +1 -0
  110. package/dist/components/form/form.stories.svelte +96 -96
  111. package/dist/components/image/image.stories.svelte +20 -20
  112. package/dist/components/input/input.stories.svelte +35 -35
  113. package/dist/components/label/label.stories.svelte +15 -15
  114. package/dist/components/lazy/lazy.stories.svelte +28 -28
  115. package/dist/components/link/link.stories.svelte +15 -15
  116. package/dist/components/list/list-item.svelte +2 -2
  117. package/dist/components/menu/atoms.d.ts +9 -3
  118. package/dist/components/menu/atoms.js +9 -3
  119. package/dist/components/menu/bond.svelte.d.ts +54 -0
  120. package/dist/components/menu/bond.svelte.js +132 -0
  121. package/dist/components/menu/index.d.ts +3 -1
  122. package/dist/components/menu/index.js +2 -1
  123. package/dist/components/menu/item/controller.svelte.d.ts +26 -0
  124. package/dist/components/menu/item/controller.svelte.js +69 -0
  125. package/dist/components/menu/item/index.d.ts +2 -0
  126. package/dist/components/menu/item/index.js +2 -0
  127. package/dist/components/menu/item/menu-item.svelte +103 -0
  128. package/dist/components/menu/item/menu-item.svelte.d.ts +31 -0
  129. package/dist/components/menu/item/types.d.ts +62 -0
  130. package/dist/components/menu/item/types.js +1 -0
  131. package/dist/components/menu/{menu-list.svelte → menu-content.svelte} +40 -40
  132. package/dist/components/menu/{menu-list.svelte.d.ts → menu-content.svelte.d.ts} +3 -3
  133. package/dist/components/menu/menu-root.svelte +15 -0
  134. package/dist/components/menu/menu-root.svelte.d.ts +8 -0
  135. package/dist/components/menu/menu.stories.svelte +5 -5
  136. package/dist/components/menu/types.d.ts +0 -7
  137. package/dist/components/popover/bond.svelte.d.ts +18 -8
  138. package/dist/components/popover/bond.svelte.js +76 -40
  139. package/dist/components/popover/motion.d.ts +6 -0
  140. package/dist/components/popover/motion.js +56 -0
  141. package/dist/components/popover/popover-arrow.svelte +111 -111
  142. package/dist/components/popover/popover-content.svelte +137 -175
  143. package/dist/components/popover/popover-indicator.svelte +44 -44
  144. package/dist/components/popover/popover-root.svelte +48 -48
  145. package/dist/components/popover/popover.stories.svelte +37 -49
  146. package/dist/components/popover/types.d.ts +9 -7
  147. package/dist/components/portal/active-portal.svelte +12 -5
  148. package/dist/components/portal/active-portal.svelte.d.ts +2 -9
  149. package/dist/components/portal/portal-root.svelte +1 -8
  150. package/dist/components/portal/portal-root.svelte.d.ts +4 -6
  151. package/dist/components/portal/teleport.svelte +1 -2
  152. package/dist/components/portal/teleport.svelte.d.ts +3 -4
  153. package/dist/components/qr-code/qr-code.stories.svelte +18 -18
  154. package/dist/components/radio/radio-group.stories.svelte +41 -41
  155. package/dist/components/radio/radio.stories.svelte +17 -17
  156. package/dist/components/radio/radio.svelte +109 -109
  157. package/dist/components/radio/types.d.ts +98 -0
  158. package/dist/components/radio/types.js +2 -0
  159. package/dist/components/root/index.d.ts +1 -0
  160. package/dist/components/root/index.js +1 -0
  161. package/dist/components/root/l0-portal.svelte +8 -0
  162. package/dist/components/{radio/types.svelte.d.ts → root/l0-portal.svelte.d.ts} +3 -3
  163. package/dist/components/root/l1-portal.svelte +7 -0
  164. package/dist/components/root/l1-portal.svelte.d.ts +26 -0
  165. package/dist/components/root/root.css +119 -119
  166. package/dist/components/root/root.svelte +26 -44
  167. package/dist/components/root/root.svelte.d.ts +2 -6
  168. package/dist/components/root/toasts-portal.svelte +7 -0
  169. package/dist/components/root/toasts-portal.svelte.d.ts +26 -0
  170. package/dist/components/root/types.d.ts +17 -0
  171. package/dist/components/scrollable/scrollable-root.svelte.d.ts +2 -2
  172. package/dist/components/scrollable/scrollable.stories.svelte +116 -116
  173. package/dist/components/sidebar/index.d.ts +2 -0
  174. package/dist/components/sidebar/index.js +2 -0
  175. package/dist/components/sidebar/motion.svelte.d.ts +11 -0
  176. package/dist/components/sidebar/motion.svelte.js +16 -0
  177. package/dist/components/sidebar/sidebar-content.svelte +40 -50
  178. package/dist/components/sidebar/sidebar-root.svelte +39 -39
  179. package/dist/components/sidebar/sidebar.stories.svelte +43 -43
  180. package/dist/components/sidebar/types.d.ts +2 -12
  181. package/dist/components/tabs/tabs.stories.svelte +56 -56
  182. package/dist/components/textarea/atoms.d.ts +1 -0
  183. package/dist/components/textarea/atoms.js +1 -0
  184. package/dist/components/textarea/textarea-input.svelte +4 -1
  185. package/dist/components/textarea/textarea-root.svelte +2 -2
  186. package/dist/components/textarea/textarea-root.svelte.d.ts +2 -0
  187. package/dist/components/tooltip/tooltip-trigger.svelte +39 -39
  188. package/dist/components/tooltip/tooltip-trigger.svelte.d.ts +1 -0
  189. package/dist/components/tooltip/tooltip.stories.svelte +32 -32
  190. package/dist/components/tree/index.d.ts +1 -0
  191. package/dist/components/tree/index.js +1 -0
  192. package/dist/components/tree/motion.svelte.d.ts +6 -0
  193. package/dist/components/tree/motion.svelte.js +14 -0
  194. package/dist/components/tree/tree-body.svelte +4 -3
  195. package/dist/components/tree/tree.stories.svelte +142 -142
  196. package/dist/context/preset.svelte.d.ts +3 -1
  197. package/dist/icons/icon-copy.svelte +6 -0
  198. package/dist/icons/icon-copy.svelte.d.ts +26 -0
  199. package/dist/utils/dom.svelte.d.ts +2 -0
  200. package/dist/utils/dom.svelte.js +21 -0
  201. package/dist/utils/function.d.ts +1 -1
  202. package/dist/utils/promise.svelte.d.ts +5 -0
  203. package/dist/utils/promise.svelte.js +20 -0
  204. package/package.json +4 -3
  205. package/dist/components/combobox/compobox-item.svelte.d.ts +0 -34
  206. package/dist/components/combobox/compobox.stories.svelte +0 -51
  207. package/dist/components/combobox/compobox.stories.svelte.d.ts +0 -3
  208. package/dist/components/dropdown/item/bond.svelte.d.ts +0 -42
  209. package/dist/components/dropdown/item/bond.svelte.js +0 -99
  210. package/dist/components/menu/menu-item.svelte +0 -51
  211. package/dist/components/menu/menu-item.svelte.d.ts +0 -36
  212. package/dist/components/radio/types.svelte +0 -0
  213. package/llm/composition.md +0 -395
  214. package/llm/crafting.md +0 -838
  215. package/llm/motion.md +0 -970
  216. package/llm/philosophy.md +0 -23
  217. package/llm/preset-variant-integration.md +0 -516
  218. package/llm/preset.md +0 -383
  219. package/llm/styling.md +0 -216
  220. package/llm/usage.md +0 -46
  221. package/llm/variants.md +0 -1259
@@ -1,3 +1,4 @@
1
1
  export * as Menu from './atoms';
2
2
  export * from './types';
3
- export { PopoverBond, PopoverState } from '../popover/bond.svelte';
3
+ export { PopoverBond, PopoverState } from '../popover';
4
+ export * from './item';
@@ -0,0 +1,26 @@
1
+ import { MenuBond, MenuBondState, type MenuBondProps } from '../bond.svelte';
2
+ export type MenuItemControllerProps = {
3
+ id?: string;
4
+ };
5
+ export declare class MenuItemController {
6
+ #private;
7
+ static CONTEXT_KEY: string;
8
+ constructor(props?: () => MenuItemControllerProps);
9
+ get id(): string;
10
+ get props(): MenuItemControllerProps;
11
+ get element(): HTMLElement | null;
12
+ get menu(): MenuBond<MenuBondProps, MenuBondState<MenuBondProps>, import("..").PopoverDomElements> | undefined;
13
+ get isHighlighted(): boolean;
14
+ mount(): () => void;
15
+ unmount(): void;
16
+ destroy(): void;
17
+ share(): MenuItemController;
18
+ elementProps(): {
19
+ readonly [x: symbol]: (node: HTMLElement) => () => void;
20
+ readonly id: string;
21
+ readonly role: "menuitem";
22
+ readonly 'data-highlighted': boolean;
23
+ };
24
+ static get(): MenuItemController | undefined;
25
+ static set(item: MenuItemController): MenuItemController;
26
+ }
@@ -0,0 +1,69 @@
1
+ import { getContext, setContext } from 'svelte';
2
+ import { createAttachmentKey } from 'svelte/attachments';
3
+ import { nanoid } from 'nanoid';
4
+ import { MenuBond, MenuBondState } from '../bond.svelte';
5
+ export class MenuItemController {
6
+ static CONTEXT_KEY = '@atoms/context/menu/item';
7
+ #id;
8
+ #props;
9
+ #element = null;
10
+ #menu;
11
+ #unmount;
12
+ constructor(props = () => ({})) {
13
+ this.#props = props;
14
+ this.#id = this.props.id ?? nanoid();
15
+ this.#menu = MenuBond.get();
16
+ if (!this.#menu) {
17
+ throw new Error('MenuItem must be used within a Menu context');
18
+ }
19
+ }
20
+ get id() {
21
+ return this.#id;
22
+ }
23
+ get props() {
24
+ return this.#props();
25
+ }
26
+ get element() {
27
+ return this.#element;
28
+ }
29
+ get menu() {
30
+ return this.#menu;
31
+ }
32
+ get isHighlighted() {
33
+ return this.#menu?.state.highlightedId === this.#id;
34
+ }
35
+ mount() {
36
+ this.#unmount = this.#menu?.state?.mountItem?.(this.#id, this) ?? undefined;
37
+ return this.unmount;
38
+ }
39
+ unmount() {
40
+ this.#unmount?.();
41
+ }
42
+ destroy() {
43
+ this.unmount();
44
+ }
45
+ share() {
46
+ return MenuItemController.set(this);
47
+ }
48
+ elementProps() {
49
+ const itemId = `item-${this.id}`;
50
+ return {
51
+ id: itemId,
52
+ role: 'menuitem',
53
+ 'data-highlighted': this.isHighlighted,
54
+ [createAttachmentKey()]: (node) => {
55
+ this.#element = node;
56
+ return () => {
57
+ // this.#unmount?.();
58
+ this.#element = null;
59
+ };
60
+ }
61
+ };
62
+ }
63
+ static get() {
64
+ return getContext(MenuItemController.CONTEXT_KEY);
65
+ }
66
+ static set(item) {
67
+ return setContext(MenuItemController.CONTEXT_KEY, item);
68
+ }
69
+ }
@@ -0,0 +1,2 @@
1
+ export { MenuItemController, type MenuItemControllerProps } from './controller.svelte';
2
+ export * from './types';
@@ -0,0 +1,2 @@
1
+ export { MenuItemController } from './controller.svelte';
2
+ export * from './types';
@@ -0,0 +1,103 @@
1
+ <script
2
+ lang="ts"
3
+ generics="D, E extends keyof HTMLElementTagNameMap = 'div', B extends Base = Base"
4
+ >
5
+ import { defineProperty, defineState } from '../../../utils';
6
+ import type { Base } from '../../atom';
7
+ import { MenuItemController, type MenuItemControllerProps } from './controller.svelte';
8
+ import { MenuBond } from '../bond.svelte';
9
+ import { List } from '../../list';
10
+ import type { MenuItemProps } from './types';
11
+
12
+ const menu = MenuBond.get();
13
+
14
+ if (!menu) {
15
+ throw new Error('<MenuItem> must be used within a <Menu>.');
16
+ }
17
+
18
+ const ID = $props.id();
19
+
20
+ let {
21
+ class: klass = '',
22
+ id = ID,
23
+ preset: presetKey = 'menu.item',
24
+ children = undefined,
25
+ onclick = undefined,
26
+ disabled = undefined,
27
+ onmount = undefined,
28
+ ondestroy = undefined,
29
+ animate = undefined,
30
+ enter = undefined,
31
+ exit = undefined,
32
+ initial = undefined,
33
+ factory = _factory,
34
+ ...restProps
35
+ }: MenuItemProps = $props();
36
+
37
+ const controller = factory().share();
38
+
39
+ const itemProps = $derived({
40
+ ...menu?.item?.(),
41
+ ...controller?.elementProps(),
42
+ ...restProps
43
+ });
44
+
45
+ $effect(() => {
46
+ return () => {
47
+ controller.destroy();
48
+ };
49
+ });
50
+
51
+ function _factory() {
52
+ const item = menu?.state?.item?.(id);
53
+
54
+ if (item) {
55
+ return item as MenuItemController;
56
+ }
57
+
58
+ const bondProps = defineState<MenuItemControllerProps>([defineProperty('id', () => id)]);
59
+ const controller = new MenuItemController(() => bondProps);
60
+
61
+ controller.mount();
62
+
63
+ return controller;
64
+ }
65
+
66
+ function handleClick(ev: MouseEvent) {
67
+ onclick?.(ev);
68
+
69
+ if (ev.defaultPrevented) {
70
+ return;
71
+ }
72
+
73
+ ev.preventDefault();
74
+
75
+ controller?.menu?.state.close();
76
+ }
77
+
78
+ export function getController() {
79
+ return controller;
80
+ }
81
+ </script>
82
+
83
+ <List.Item
84
+ bond={controller}
85
+ preset={presetKey}
86
+ class={[
87
+ 'border-border last:border-b-none hover:bg-foreground/5 active:bg-foreground/10 outline-primary cursor-pointer border-b',
88
+ '$preset',
89
+ klass
90
+ ]}
91
+ onmount={onmount?.bind(controller) as any}
92
+ ondestroy={ondestroy?.bind(controller) as any}
93
+ enter={enter?.bind(controller) as any}
94
+ exit={exit?.bind(controller) as any}
95
+ initial={initial?.bind(controller) as any}
96
+ animate={animate?.bind(controller) as any}
97
+ aria-disabled={disabled ? true : undefined}
98
+ tabIndex={disabled ? -1 : 0}
99
+ onclick={handleClick}
100
+ {...itemProps}
101
+ >
102
+ {@render children?.({ menuItem: controller })}
103
+ </List.Item>
@@ -0,0 +1,31 @@
1
+ import type { Base } from '../../atom';
2
+ import { MenuItemController } from './controller.svelte';
3
+ import type { MenuItemProps } from './types';
4
+ declare function $$render<D, E extends keyof HTMLElementTagNameMap = 'div', B extends Base = Base>(): {
5
+ props: MenuItemProps;
6
+ exports: {
7
+ getController: () => MenuItemController;
8
+ };
9
+ bindings: "";
10
+ slots: {};
11
+ events: {};
12
+ };
13
+ declare class __sveltets_Render<D, E extends keyof HTMLElementTagNameMap = 'div', B extends Base = Base> {
14
+ props(): ReturnType<typeof $$render<D, E, B>>['props'];
15
+ events(): ReturnType<typeof $$render<D, E, B>>['events'];
16
+ slots(): ReturnType<typeof $$render<D, E, B>>['slots'];
17
+ bindings(): "";
18
+ exports(): {
19
+ getController: () => MenuItemController;
20
+ };
21
+ }
22
+ interface $$IsomorphicComponent {
23
+ new <D, E extends keyof HTMLElementTagNameMap = 'div', B extends Base = Base>(options: import('svelte').ComponentConstructorOptions<ReturnType<__sveltets_Render<D, E, B>['props']>>): import('svelte').SvelteComponent<ReturnType<__sveltets_Render<D, E, B>['props']>, ReturnType<__sveltets_Render<D, E, B>['events']>, ReturnType<__sveltets_Render<D, E, B>['slots']>> & {
24
+ $$bindings?: ReturnType<__sveltets_Render<D, E, B>['bindings']>;
25
+ } & ReturnType<__sveltets_Render<D, E, B>['exports']>;
26
+ <D, E extends keyof HTMLElementTagNameMap = 'div', B extends Base = Base>(internal: unknown, props: ReturnType<__sveltets_Render<D, E, B>['props']> & {}): ReturnType<__sveltets_Render<D, E, B>['exports']>;
27
+ z_$$bindings?: ReturnType<__sveltets_Render<any, any, any>['bindings']>;
28
+ }
29
+ declare const MenuItem: $$IsomorphicComponent;
30
+ type MenuItem<D, E extends keyof HTMLElementTagNameMap = 'div', B extends Base = Base> = InstanceType<typeof MenuItem<D, E, B>>;
31
+ export default MenuItem;
@@ -0,0 +1,62 @@
1
+ import type { Snippet } from 'svelte';
2
+ import type { MenuItemController } from './controller.svelte';
3
+ import type { ClassValue } from '../../../utils';
4
+ import type { Base, HtmlAtomProps } from '../../atom';
5
+ /**
6
+ * Extend this interface to add custom menu list properties in your application.
7
+ */
8
+ export interface MenuItemExtendProps {
9
+ }
10
+ export interface MenuItemProps<E extends keyof HTMLElementTagNameMap = 'div', B extends Base = Base> extends HtmlAtomProps<E, B>, MenuItemExtendProps {
11
+ /**
12
+ * Custom CSS class(es) to apply to the menu item
13
+ */
14
+ class?: ClassValue;
15
+ /**
16
+ * Preset key for styling
17
+ * @default 'menu.item'
18
+ */
19
+ preset?: string;
20
+ /**
21
+ * Whether the menu item is disabled
22
+ */
23
+ disabled?: boolean;
24
+ /**
25
+ * Click event handler
26
+ */
27
+ onclick?: (event: MouseEvent) => void;
28
+ /**
29
+ * Mount lifecycle callback
30
+ */
31
+ onmount?: (this: MenuItemController) => void;
32
+ /**
33
+ * Destroy lifecycle callback
34
+ */
35
+ ondestroy?: (this: MenuItemController) => void;
36
+ /**
37
+ * Animation configuration
38
+ */
39
+ animate?: (this: MenuItemController) => any;
40
+ /**
41
+ * Enter animation configuration
42
+ */
43
+ enter?: (this: MenuItemController) => any;
44
+ /**
45
+ * Exit animation configuration
46
+ */
47
+ exit?: (this: MenuItemController) => any;
48
+ /**
49
+ * Initial state configuration
50
+ */
51
+ initial?: (this: MenuItemController) => any;
52
+ /**
53
+ * Factory function to create a custom MenuItemController instance
54
+ */
55
+ factory?: () => MenuItemController;
56
+ /**
57
+ * Render prop for children
58
+ */
59
+ children?: Snippet<[{
60
+ menuItem: MenuItemController;
61
+ }]>;
62
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -1,40 +1,40 @@
1
- <script lang="ts" generics="T extends keyof HTMLElementTagNameMap = 'div', B extends Base = Base">
2
- import { List } from '../list';
3
- import { Content } from '../popover/atoms';
4
- import type { Base } from '../atom';
5
- import { PopoverBond } from '../popover';
6
-
7
- const bond = PopoverBond.get();
8
-
9
- let {
10
- class: klass = '',
11
- as = 'ul' as T,
12
- base = List.Root as B,
13
- preset = 'menu.list',
14
- children = undefined,
15
- onmount = undefined,
16
- ondestroy = undefined,
17
- animate = undefined,
18
- enter = undefined,
19
- exit = undefined,
20
- initial = undefined,
21
- ...restProps
22
- } = $props();
23
- </script>
24
-
25
- <Content
26
- {as}
27
- {base}
28
- {bond}
29
- {preset}
30
- class={['bg-background border-border overflow-hidden p-0', '$preset', klass]}
31
- onmount={onmount?.bind(bond.state)}
32
- ondestroy={ondestroy?.bind(bond.state)}
33
- enter={enter?.bind(bond.state)}
34
- exit={exit?.bind(bond.state)}
35
- initial={initial?.bind(bond.state)}
36
- animate={animate?.bind(bond.state)}
37
- {...restProps}
38
- >
39
- {@render children?.()}
40
- </Content>
1
+ <script lang="ts" generics="T extends keyof HTMLElementTagNameMap = 'div', B extends Base = Base">
2
+ import { Content } from '../popover/atoms';
3
+ import type { Base } from '../atom';
4
+ import { MenuBond } from './bond.svelte';
5
+ import { Root } from '../list/atoms';
6
+
7
+ const bond = MenuBond.get();
8
+
9
+ let {
10
+ class: klass = '',
11
+ as = 'ul' as T,
12
+ base = Root as B,
13
+ preset = 'menu.content',
14
+ children = undefined,
15
+ onmount = undefined,
16
+ ondestroy = undefined,
17
+ animate = undefined,
18
+ enter = undefined,
19
+ exit = undefined,
20
+ initial = undefined,
21
+ ...restProps
22
+ } = $props();
23
+ </script>
24
+
25
+ <Content
26
+ {as}
27
+ {base}
28
+ {bond}
29
+ {preset}
30
+ class={['border-border overflow-hidden p-0', '$preset', klass]}
31
+ onmount={onmount?.bind(bond.state)}
32
+ ondestroy={ondestroy?.bind(bond.state)}
33
+ enter={enter?.bind(bond.state)}
34
+ exit={exit?.bind(bond.state)}
35
+ initial={initial?.bind(bond.state)}
36
+ animate={animate?.bind(bond.state)}
37
+ {...restProps}
38
+ >
39
+ {@render children?.()}
40
+ </Content>
@@ -32,6 +32,6 @@ interface $$IsomorphicComponent {
32
32
  <T extends keyof HTMLElementTagNameMap = 'div', B extends Base = Base>(internal: unknown, props: ReturnType<__sveltets_Render<T, B>['props']> & {}): ReturnType<__sveltets_Render<T, B>['exports']>;
33
33
  z_$$bindings?: ReturnType<__sveltets_Render<any, any>['bindings']>;
34
34
  }
35
- declare const MenuList: $$IsomorphicComponent;
36
- type MenuList<T extends keyof HTMLElementTagNameMap = 'div', B extends Base = Base> = InstanceType<typeof MenuList<T, B>>;
37
- export default MenuList;
35
+ declare const MenuContent: $$IsomorphicComponent;
36
+ type MenuContent<T extends keyof HTMLElementTagNameMap = 'div', B extends Base = Base> = InstanceType<typeof MenuContent<T, B>>;
37
+ export default MenuContent;
@@ -0,0 +1,15 @@
1
+ <script lang="ts">
2
+ import { MenuBond, MenuBondState, type MenuBondProps } from './bond.svelte';
3
+ import { Root } from '../popover/atoms';
4
+
5
+ let { open = $bindable(false), factory = _factory, children, ...restProps } = $props();
6
+
7
+ function _factory(props: MenuBondProps) {
8
+ const menuBondState = new MenuBondState(() => props);
9
+ return new MenuBond(menuBondState);
10
+ }
11
+ </script>
12
+
13
+ <Root bind:open {factory} {...restProps}>
14
+ {@render children?.()}
15
+ </Root>
@@ -0,0 +1,8 @@
1
+ import { MenuBond, MenuBondState, type MenuBondProps } from './bond.svelte';
2
+ declare const MenuRoot: import("svelte").Component<{
3
+ open?: boolean;
4
+ factory?: (props: MenuBondProps) => MenuBond<MenuBondProps, MenuBondState<MenuBondProps>, import(".").PopoverDomElements>;
5
+ children: any;
6
+ } & Record<string, any>, {}, "open">;
7
+ type MenuRoot = ReturnType<typeof MenuRoot>;
8
+ export default MenuRoot;
@@ -21,13 +21,13 @@
21
21
  </script>
22
22
 
23
23
  <Story name="Menu" args={{}}>
24
- <AMenu.Root bind:open offset={4}>
24
+ <AMenu.Root bind:open>
25
25
  <AMenu.Trigger base={Button}>Select a language</AMenu.Trigger>
26
26
  <AMenu.List>
27
- <AMenu.Item>Arabic</AMenu.Item>
28
- <AMenu.Item>English</AMenu.Item>
29
- <AMenu.Item>Spanish</AMenu.Item>
30
- <AMenu.Item>Italian</AMenu.Item>
27
+ <AMenu.Item onclick={() => console.log('Arabic')}>Arabic</AMenu.Item>
28
+ <AMenu.Item onclick={() => console.log('English')}>English</AMenu.Item>
29
+ <AMenu.Item onclick={() => console.log('Spanish')}>Spanish</AMenu.Item>
30
+ <AMenu.Item onclick={() => console.log('Italian')}>Italian</AMenu.Item>
31
31
  </AMenu.List>
32
32
  </AMenu.Root>
33
33
  </Story>
@@ -1,15 +1,8 @@
1
1
  import type { HtmlAtomProps, Base } from '../atom';
2
- /**
3
- * Extend this interface to add custom menu item properties in your application.
4
- */
5
- export interface MenuItemExtendProps {
6
- }
7
2
  /**
8
3
  * Extend this interface to add custom menu list properties in your application.
9
4
  */
10
5
  export interface MenuListExtendProps {
11
6
  }
12
- export interface MenuItemProps<E extends keyof HTMLElementTagNameMap = 'button', B extends Base = Base> extends HtmlAtomProps<E, B>, MenuItemExtendProps {
13
- }
14
7
  export interface MenuListProps<E extends keyof HTMLElementTagNameMap = 'div', B extends Base = Base> extends HtmlAtomProps<E, B>, MenuListExtendProps {
15
8
  }
@@ -31,11 +31,11 @@ export type PopoverDomElements = {
31
31
  arrow: HTMLElement;
32
32
  };
33
33
  export declare class PopoverBond<Props extends PopoverStateProps = PopoverStateProps, State extends PopoverState<Props> = PopoverState<Props>, Elements extends PopoverDomElements = PopoverDomElements> extends Bond<Props, State, Elements> {
34
- #private;
35
34
  static CONTEXT_KEY: string;
35
+ position: ComputePositionReturn | undefined;
36
36
  constructor(state: State);
37
- get position(): ComputePositionReturn | undefined;
38
- trigger(props?: Record<string, unknown>): {
37
+ trigger(): {
38
+ [x: symbol]: (node: HTMLElement) => (() => void) | undefined;
39
39
  id: string;
40
40
  role: string;
41
41
  disabled: boolean | undefined;
@@ -43,26 +43,36 @@ export declare class PopoverBond<Props extends PopoverStateProps = PopoverStateP
43
43
  'aria-expanded': boolean;
44
44
  'aria-disabled': boolean;
45
45
  'aria-controls': string;
46
+ 'aria-haspopup': string;
46
47
  'data-kind': string;
47
48
  onclick: (ev: PointerEvent) => void;
49
+ onkeydown: (ev: KeyboardEvent) => void;
48
50
  };
49
- content(props?: Record<string, unknown>): {
51
+ content(): {
52
+ [x: symbol]: (node: HTMLElement) => (() => void) | undefined;
50
53
  id: string;
51
54
  role: string;
52
55
  'aria-modal': boolean;
53
56
  'aria-labelledby': string;
54
- 'aria-controlledby': string;
57
+ inert: boolean | undefined;
58
+ tabindex: number;
55
59
  'data-atom': string;
56
60
  'data-kind': string;
57
61
  'data-active': boolean;
62
+ onkeydown: ((ev: KeyboardEvent) => void) | undefined;
58
63
  };
59
- indicator(props?: Record<string, unknown>): {
64
+ indicator(): {
65
+ [x: symbol]: (node: HTMLElement) => void;
60
66
  id: string;
61
- 'aria-controlledby': string;
67
+ 'aria-hidden': boolean;
68
+ 'aria-live': string;
62
69
  'data-kind': string;
63
70
  };
64
- arrow(props?: Record<string, unknown>): {
71
+ arrow(): {
72
+ [x: symbol]: (node: HTMLElement) => void;
65
73
  id: string;
74
+ role: string;
75
+ 'aria-hidden': boolean;
66
76
  'data-kind': string;
67
77
  };
68
78
  share(): this;