@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.
- package/LICENSE +21 -0
- package/README.md +176 -739
- package/dist/attachments/index.d.ts +1 -0
- package/dist/attachments/index.js +1 -0
- package/dist/components/accordion/accordion-root.svelte +65 -61
- package/dist/components/accordion/accordion.stories.svelte +70 -145
- package/dist/components/accordion/item/accordion-item-body.svelte +6 -4
- package/dist/components/accordion/item/accordion-item-header.svelte +2 -1
- package/dist/components/accordion/item/accordion-item-indicator.svelte +2 -1
- package/dist/components/accordion/item/accordion-item-root.svelte +2 -1
- package/dist/components/accordion/item/bond.svelte.d.ts +2 -0
- package/dist/components/accordion/item/index.d.ts +3 -0
- package/dist/components/accordion/item/index.js +3 -0
- package/dist/components/accordion/item/motion.svelte.d.ts +15 -0
- package/dist/components/accordion/item/motion.svelte.js +30 -0
- package/dist/components/accordion/item/types.d.ts +7 -24
- package/dist/components/alert/alert-close-button.svelte +32 -36
- package/dist/components/alert/alert-description.svelte +1 -1
- package/dist/components/alert/alert-description.svelte.d.ts +3 -6
- package/dist/components/alert/alert-root.svelte +3 -38
- package/dist/components/alert/alert-root.svelte.d.ts +2 -2
- package/dist/components/alert/alert.stories.svelte +400 -400
- package/dist/components/alert/bond.svelte.d.ts +0 -13
- package/dist/components/alert/bond.svelte.js +0 -32
- package/dist/components/alert/types.d.ts +8 -32
- package/dist/components/atom/html-atom.svelte +93 -261
- package/dist/components/atom/types.d.ts +3 -2
- package/dist/components/atom/utils.d.ts +37 -0
- package/dist/components/atom/utils.js +208 -0
- package/dist/components/avatar/avatar.stories.svelte +22 -22
- package/dist/components/badge/badge.stories.svelte +12 -12
- package/dist/components/badge/badge.svelte +19 -19
- package/dist/components/breadcrumb/breadcrumb-item.svelte +1 -1
- package/dist/components/breadcrumb/breadcrumb-separator.svelte +5 -1
- package/dist/components/breadcrumb/breadcrumb.stories.svelte +16 -16
- package/dist/components/button/button.stories.svelte +27 -27
- package/dist/components/calendar/calendar-day.svelte +9 -4
- package/dist/components/calendar/calendar.stories.svelte +26 -26
- package/dist/components/card/card-body.svelte +39 -39
- package/dist/components/card/card-footer.svelte +41 -41
- package/dist/components/card/card-root.svelte +91 -91
- package/dist/components/card/card.stories.svelte +133 -133
- package/dist/components/checkbox/checkbox.stories.svelte +22 -22
- package/dist/components/checkbox/checkbox.svelte +159 -155
- package/dist/components/collapsible/bond.svelte.js +2 -1
- package/dist/components/collapsible/collapsible-body.svelte +3 -2
- package/dist/components/collapsible/collapsible.stories.svelte +172 -172
- package/dist/components/collapsible/motion.svelte.d.ts +6 -0
- package/dist/components/collapsible/motion.svelte.js +15 -0
- package/dist/components/combobox/atoms.d.ts +3 -3
- package/dist/components/combobox/atoms.js +3 -3
- package/dist/components/combobox/bond.svelte.d.ts +6 -6
- package/dist/components/combobox/bond.svelte.js +3 -26
- package/dist/components/combobox/combobox-control.svelte +52 -52
- package/dist/components/combobox/{compobox-item.svelte → combobox-item.svelte} +62 -68
- package/dist/components/combobox/combobox-item.svelte.d.ts +12 -0
- package/dist/components/combobox/combobox-root.svelte +65 -65
- package/dist/components/combobox/combobox.stories.svelte +50 -0
- package/dist/components/combobox/combobox.stories.svelte.d.ts +3 -0
- package/dist/components/combobox/index.d.ts +1 -0
- package/dist/components/container/container.stories.svelte +20 -20
- package/dist/components/container/container.svelte.d.ts +1 -1
- package/dist/components/datagrid/datagrid.stories.svelte +72 -72
- package/dist/components/datagrid/tr/bond.svelte.d.ts +4 -2
- package/dist/components/datagrid/tr/bond.svelte.js +9 -7
- package/dist/components/datagrid/tr/datagrid-tr.svelte +9 -7
- package/dist/components/date-picker/bond.svelte.d.ts +15 -5
- package/dist/components/date-picker/bond.svelte.js +5 -11
- package/dist/components/date-picker/date-picker-calendar.svelte +2 -2
- package/dist/components/date-picker/date-picker-root.svelte +95 -95
- package/dist/components/date-picker/date-picker.stories.svelte +35 -35
- package/dist/components/dialog/bond.svelte.d.ts +13 -3
- package/dist/components/dialog/bond.svelte.js +52 -6
- package/dist/components/dialog/dialog-content.svelte +2 -20
- package/dist/components/dialog/dialog-root.svelte +3 -22
- package/dist/components/dialog/dialog.stories.svelte +64 -64
- package/dist/components/dialog/motion.svelte.d.ts +13 -0
- package/dist/components/dialog/motion.svelte.js +44 -0
- package/dist/components/drawer/attachments.svelte.d.ts +1 -1
- package/dist/components/drawer/attachments.svelte.js +1 -3
- package/dist/components/drawer/bond.svelte.d.ts +30 -9
- package/dist/components/drawer/bond.svelte.js +80 -24
- package/dist/components/drawer/drawer-content.svelte +49 -57
- package/dist/components/drawer/drawer-root.svelte +5 -4
- package/dist/components/drawer/drawer.stories.svelte +141 -212
- package/dist/components/drawer/index.d.ts +2 -0
- package/dist/components/drawer/index.js +2 -0
- package/dist/components/drawer/motion.d.ts +15 -0
- package/dist/components/drawer/motion.js +28 -0
- package/dist/components/dropdown/atoms.d.ts +1 -1
- package/dist/components/dropdown/atoms.js +1 -1
- package/dist/components/dropdown/bond.svelte.d.ts +22 -19
- package/dist/components/dropdown/bond.svelte.js +29 -53
- package/dist/components/dropdown/dropdown-root.svelte +7 -1
- package/dist/components/dropdown/dropdown-values.svelte +17 -17
- package/dist/components/dropdown/dropdown-values.svelte.d.ts +1 -2
- package/dist/components/dropdown/dropdown.stories.svelte +13 -10
- package/dist/components/dropdown/index.d.ts +2 -0
- package/dist/components/dropdown/index.js +1 -0
- package/dist/components/dropdown/item/attachments.svelte.d.ts +2 -2
- package/dist/components/dropdown/item/attachments.svelte.js +2 -2
- package/dist/components/dropdown/item/controller.svelte.d.ts +34 -0
- package/dist/components/dropdown/item/controller.svelte.js +82 -0
- package/dist/components/dropdown/item/dropdown-item.svelte +109 -102
- package/dist/components/dropdown/item/dropdown-item.svelte.d.ts +13 -28
- package/dist/components/dropdown/item/index.d.ts +3 -0
- package/dist/components/dropdown/item/index.js +3 -0
- package/dist/components/dropdown/item/types.d.ts +29 -0
- package/dist/components/dropdown/item/types.js +1 -0
- package/dist/components/form/form.stories.svelte +96 -96
- package/dist/components/image/image.stories.svelte +20 -20
- package/dist/components/input/input.stories.svelte +35 -35
- package/dist/components/label/label.stories.svelte +15 -15
- package/dist/components/lazy/lazy.stories.svelte +28 -28
- package/dist/components/link/link.stories.svelte +15 -15
- package/dist/components/list/list-item.svelte +2 -2
- package/dist/components/menu/atoms.d.ts +9 -3
- package/dist/components/menu/atoms.js +9 -3
- package/dist/components/menu/bond.svelte.d.ts +54 -0
- package/dist/components/menu/bond.svelte.js +132 -0
- package/dist/components/menu/index.d.ts +3 -1
- package/dist/components/menu/index.js +2 -1
- package/dist/components/menu/item/controller.svelte.d.ts +26 -0
- package/dist/components/menu/item/controller.svelte.js +69 -0
- package/dist/components/menu/item/index.d.ts +2 -0
- package/dist/components/menu/item/index.js +2 -0
- package/dist/components/menu/item/menu-item.svelte +103 -0
- package/dist/components/menu/item/menu-item.svelte.d.ts +31 -0
- package/dist/components/menu/item/types.d.ts +62 -0
- package/dist/components/menu/item/types.js +1 -0
- package/dist/components/menu/{menu-list.svelte → menu-content.svelte} +40 -40
- package/dist/components/menu/{menu-list.svelte.d.ts → menu-content.svelte.d.ts} +3 -3
- package/dist/components/menu/menu-root.svelte +15 -0
- package/dist/components/menu/menu-root.svelte.d.ts +8 -0
- package/dist/components/menu/menu.stories.svelte +5 -5
- package/dist/components/menu/types.d.ts +0 -7
- package/dist/components/popover/bond.svelte.d.ts +18 -8
- package/dist/components/popover/bond.svelte.js +76 -40
- package/dist/components/popover/motion.d.ts +6 -0
- package/dist/components/popover/motion.js +56 -0
- package/dist/components/popover/popover-arrow.svelte +111 -111
- package/dist/components/popover/popover-content.svelte +137 -175
- package/dist/components/popover/popover-indicator.svelte +44 -44
- package/dist/components/popover/popover-root.svelte +48 -48
- package/dist/components/popover/popover.stories.svelte +37 -49
- package/dist/components/popover/types.d.ts +9 -7
- package/dist/components/portal/active-portal.svelte +12 -5
- package/dist/components/portal/active-portal.svelte.d.ts +2 -9
- package/dist/components/portal/portal-root.svelte +1 -8
- package/dist/components/portal/portal-root.svelte.d.ts +4 -6
- package/dist/components/portal/teleport.svelte +1 -2
- package/dist/components/portal/teleport.svelte.d.ts +3 -4
- package/dist/components/qr-code/qr-code.stories.svelte +18 -18
- package/dist/components/radio/radio-group.stories.svelte +41 -41
- package/dist/components/radio/radio.stories.svelte +17 -17
- package/dist/components/radio/radio.svelte +109 -109
- package/dist/components/radio/types.d.ts +98 -0
- package/dist/components/radio/types.js +2 -0
- package/dist/components/root/index.d.ts +1 -0
- package/dist/components/root/index.js +1 -0
- package/dist/components/root/l0-portal.svelte +8 -0
- package/dist/components/{radio/types.svelte.d.ts → root/l0-portal.svelte.d.ts} +3 -3
- package/dist/components/root/l1-portal.svelte +7 -0
- package/dist/components/root/l1-portal.svelte.d.ts +26 -0
- package/dist/components/root/root.css +119 -119
- package/dist/components/root/root.svelte +26 -44
- package/dist/components/root/root.svelte.d.ts +2 -6
- package/dist/components/root/toasts-portal.svelte +7 -0
- package/dist/components/root/toasts-portal.svelte.d.ts +26 -0
- package/dist/components/root/types.d.ts +17 -0
- package/dist/components/scrollable/scrollable-root.svelte.d.ts +2 -2
- package/dist/components/scrollable/scrollable.stories.svelte +116 -116
- package/dist/components/sidebar/index.d.ts +2 -0
- package/dist/components/sidebar/index.js +2 -0
- package/dist/components/sidebar/motion.svelte.d.ts +11 -0
- package/dist/components/sidebar/motion.svelte.js +16 -0
- package/dist/components/sidebar/sidebar-content.svelte +40 -50
- package/dist/components/sidebar/sidebar-root.svelte +39 -39
- package/dist/components/sidebar/sidebar.stories.svelte +43 -43
- package/dist/components/sidebar/types.d.ts +2 -12
- package/dist/components/tabs/tabs.stories.svelte +56 -56
- package/dist/components/textarea/atoms.d.ts +1 -0
- package/dist/components/textarea/atoms.js +1 -0
- package/dist/components/textarea/textarea-input.svelte +4 -1
- package/dist/components/textarea/textarea-root.svelte +2 -2
- package/dist/components/textarea/textarea-root.svelte.d.ts +2 -0
- package/dist/components/tooltip/tooltip-trigger.svelte +39 -39
- package/dist/components/tooltip/tooltip-trigger.svelte.d.ts +1 -0
- package/dist/components/tooltip/tooltip.stories.svelte +32 -32
- package/dist/components/tree/index.d.ts +1 -0
- package/dist/components/tree/index.js +1 -0
- package/dist/components/tree/motion.svelte.d.ts +6 -0
- package/dist/components/tree/motion.svelte.js +14 -0
- package/dist/components/tree/tree-body.svelte +4 -3
- package/dist/components/tree/tree.stories.svelte +142 -142
- package/dist/context/preset.svelte.d.ts +3 -1
- package/dist/icons/icon-copy.svelte +6 -0
- package/dist/icons/icon-copy.svelte.d.ts +26 -0
- package/dist/utils/dom.svelte.d.ts +2 -0
- package/dist/utils/dom.svelte.js +21 -0
- package/dist/utils/function.d.ts +1 -1
- package/dist/utils/promise.svelte.d.ts +5 -0
- package/dist/utils/promise.svelte.js +20 -0
- package/package.json +4 -3
- package/dist/components/combobox/compobox-item.svelte.d.ts +0 -34
- package/dist/components/combobox/compobox.stories.svelte +0 -51
- package/dist/components/combobox/compobox.stories.svelte.d.ts +0 -3
- package/dist/components/dropdown/item/bond.svelte.d.ts +0 -42
- package/dist/components/dropdown/item/bond.svelte.js +0 -99
- package/dist/components/menu/menu-item.svelte +0 -51
- package/dist/components/menu/menu-item.svelte.d.ts +0 -36
- package/dist/components/radio/types.svelte +0 -0
- package/llm/composition.md +0 -395
- package/llm/crafting.md +0 -838
- package/llm/motion.md +0 -970
- package/llm/philosophy.md +0 -23
- package/llm/preset-variant-integration.md +0 -516
- package/llm/preset.md +0 -383
- package/llm/styling.md +0 -216
- package/llm/usage.md +0 -46
- package/llm/variants.md +0 -1259
|
@@ -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,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 {
|
|
3
|
-
import {
|
|
4
|
-
import
|
|
5
|
-
import {
|
|
6
|
-
|
|
7
|
-
const bond =
|
|
8
|
-
|
|
9
|
-
let {
|
|
10
|
-
class: klass = '',
|
|
11
|
-
as = 'ul' as T,
|
|
12
|
-
base =
|
|
13
|
-
preset = 'menu.
|
|
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={['
|
|
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
|
|
36
|
-
type
|
|
37
|
-
export default
|
|
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
|
|
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
|
-
|
|
38
|
-
|
|
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(
|
|
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
|
-
|
|
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(
|
|
64
|
+
indicator(): {
|
|
65
|
+
[x: symbol]: (node: HTMLElement) => void;
|
|
60
66
|
id: string;
|
|
61
|
-
'aria-
|
|
67
|
+
'aria-hidden': boolean;
|
|
68
|
+
'aria-live': string;
|
|
62
69
|
'data-kind': string;
|
|
63
70
|
};
|
|
64
|
-
arrow(
|
|
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;
|