@svelte-atoms/core 1.0.0-alpha.31 → 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 +289 -853
- package/dist/attachments/index.d.ts +1 -0
- package/dist/attachments/index.js +1 -0
- package/dist/components/accordion/accordion-root.svelte +65 -65
- package/dist/components/accordion/accordion.stories.svelte +70 -70
- package/dist/components/accordion/item/accordion-item-body.svelte +44 -44
- package/dist/components/accordion/item/accordion-item-header.svelte +51 -51
- package/dist/components/accordion/item/accordion-item-indicator.svelte +51 -51
- package/dist/components/accordion/item/accordion-item-root.svelte +66 -66
- package/dist/components/alert/alert-close-button.svelte +66 -66
- package/dist/components/alert/alert-description.svelte +42 -42
- package/dist/components/alert/alert-root.svelte +68 -68
- package/dist/components/atom/html-atom.svelte +26 -194
- 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/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/calendar/calendar-day.svelte +101 -101
- package/dist/components/checkbox/checkbox.svelte +159 -159
- package/dist/components/collapsible/bond.svelte.js +2 -1
- package/dist/components/collapsible/collapsible-body.svelte +3 -2
- 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.stories.svelte +50 -0
- package/dist/components/combobox/combobox.stories.svelte.d.ts +3 -0
- package/dist/components/datagrid/tr/datagrid-tr.svelte +90 -90
- 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 +67 -67
- package/dist/components/dialog/bond.svelte.js +5 -20
- package/dist/components/dialog/dialog-content.svelte +44 -44
- package/dist/components/dialog/dialog-root.svelte +91 -91
- package/dist/components/drawer/bond.svelte.d.ts +18 -16
- package/dist/components/drawer/bond.svelte.js +8 -18
- package/dist/components/drawer/drawer-content.svelte +49 -49
- package/dist/components/drawer/drawer-root.svelte +5 -4
- package/dist/components/drawer/drawer.stories.svelte +141 -144
- package/dist/components/drawer/motion.js +1 -1
- 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 +21 -22
- package/dist/components/dropdown/bond.svelte.js +29 -53
- package/dist/components/dropdown/dropdown-root.svelte +65 -59
- 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 +83 -80
- package/dist/components/dropdown/index.d.ts +1 -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/list/list-item.svelte +20 -20
- package/dist/components/menu/atoms.d.ts +8 -3
- package/dist/components/menu/atoms.js +8 -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 +1 -0
- package/dist/components/menu/index.js +1 -0
- 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 +33 -33
- package/dist/components/menu/types.d.ts +0 -7
- package/dist/components/popover/bond.svelte.d.ts +11 -14
- package/dist/components/popover/bond.svelte.js +27 -44
- package/dist/components/popover/popover-content.svelte +137 -137
- package/dist/components/popover/popover.stories.svelte +37 -49
- package/dist/components/portal/active-portal.svelte +29 -29
- package/dist/components/portal/portal-root.svelte +76 -76
- package/dist/components/portal/teleport.svelte +49 -49
- package/dist/components/radio/radio.svelte +109 -109
- 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/root/l0-portal.svelte.d.ts +26 -0
- 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 +17 -18
- 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/sidebar/motion.svelte.js +3 -3
- package/dist/components/sidebar/sidebar-content.svelte +40 -40
- package/dist/components/textarea/textarea-input.svelte +9 -9
- package/dist/components/textarea/textarea-root.svelte +9 -9
- package/dist/components/tooltip/tooltip-trigger.svelte +39 -39
- 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/context/preset.svelte.d.ts +3 -1
- package/dist/icons/icon-copy.svelte +6 -6
- 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 -2
- 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 -69
- package/dist/components/menu/menu-item.svelte.d.ts +0 -37
- package/dist/utils/markdown-to-llm.d.ts +0 -28
- package/dist/utils/markdown-to-llm.js +0 -76
|
@@ -5,7 +5,7 @@ export class ComboboxBond extends DropdownBond {
|
|
|
5
5
|
constructor(s) {
|
|
6
6
|
super(s);
|
|
7
7
|
}
|
|
8
|
-
|
|
8
|
+
control() {
|
|
9
9
|
return {
|
|
10
10
|
'data-atom': `trigger-${this.id}`,
|
|
11
11
|
'data-kind': 'combobox-input',
|
|
@@ -17,9 +17,7 @@ export class ComboboxBond extends DropdownBond {
|
|
|
17
17
|
? `item-${this.state.selectedItems.at(0)?.id}`
|
|
18
18
|
: undefined,
|
|
19
19
|
'aria-disabled': this.state.props.disabled ?? false,
|
|
20
|
-
'aria-label': props['aria-label'] ?? 'Choose an option',
|
|
21
20
|
tabindex: this.state.props.disabled ? -1 : 0,
|
|
22
|
-
...props,
|
|
23
21
|
oninput: (ev) => {
|
|
24
22
|
const target = ev.target;
|
|
25
23
|
this.state.props.query = target.value;
|
|
@@ -27,35 +25,14 @@ export class ComboboxBond extends DropdownBond {
|
|
|
27
25
|
onkeydown: (ev) => {
|
|
28
26
|
if (this.state.props.disabled)
|
|
29
27
|
return;
|
|
30
|
-
if (ev.key === 'ArrowDown' || ev.key === 'ArrowUp') {
|
|
31
|
-
ev.preventDefault();
|
|
32
|
-
if (document.activeElement === this.elements.input) {
|
|
33
|
-
this.state.open();
|
|
34
|
-
if (ev.key === 'ArrowDown') {
|
|
35
|
-
this.state.highlightNextItem();
|
|
36
|
-
}
|
|
37
|
-
else if (ev.key === 'ArrowUp') {
|
|
38
|
-
this.state.highlightPreviousItem();
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
if (ev.key === 'Escape') {
|
|
43
|
-
ev.preventDefault();
|
|
44
|
-
if (document.activeElement === this.elements.input) {
|
|
45
|
-
this.state.close();
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
if (ev.key === 'Enter') {
|
|
49
|
-
this.state.highlightedItem?.elements.root?.click();
|
|
50
|
-
}
|
|
51
28
|
},
|
|
52
29
|
[createAttachmentKey()]: (node) => {
|
|
53
30
|
this.elements.input = node;
|
|
54
31
|
}
|
|
55
32
|
};
|
|
56
33
|
}
|
|
57
|
-
static get = DropdownBond.
|
|
58
|
-
static set = DropdownBond.
|
|
34
|
+
static get = DropdownBond.get;
|
|
35
|
+
static set = DropdownBond.set;
|
|
59
36
|
}
|
|
60
37
|
export class ComboboxBondState extends DropdownBondState {
|
|
61
38
|
// #items: Map<string, DropdownItemAtom<T>> = new SvelteMap();
|
|
@@ -1,52 +1,52 @@
|
|
|
1
|
-
<script lang="ts">
|
|
2
|
-
import { onMount } from 'svelte';
|
|
3
|
-
import { Input } from '../input';
|
|
4
|
-
import { ComboboxBond } from './bond.svelte';
|
|
5
|
-
|
|
6
|
-
const bond = ComboboxBond.get() as ComboboxBond<{}>;
|
|
7
|
-
|
|
8
|
-
if (!bond) {
|
|
9
|
-
throw new Error('Combobox atom was not found');
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
let {
|
|
13
|
-
class: klass = '',
|
|
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
|
-
|
|
24
|
-
let isMounted = $state(false);
|
|
25
|
-
|
|
26
|
-
onMount(() => {
|
|
27
|
-
isMounted = true;
|
|
28
|
-
});
|
|
29
|
-
|
|
30
|
-
const isMultiple = $derived(bond?.state.props?.multiple ?? false);
|
|
31
|
-
const selectedText = $derived(
|
|
32
|
-
isMounted || isMultiple ? (bond.state.selectedItems.at(0)?.text ?? '') : ''
|
|
33
|
-
);
|
|
34
|
-
|
|
35
|
-
const value = $derived(
|
|
36
|
-
bond?.state.props?.query ?? (bond?.state.props?.text || selectedText || '')
|
|
37
|
-
);
|
|
38
|
-
</script>
|
|
39
|
-
|
|
40
|
-
<Input.Control
|
|
41
|
-
{value}
|
|
42
|
-
preset="combobox.control"
|
|
43
|
-
class={['border-border flex-1 py-1', '$preset', klass]}
|
|
44
|
-
enter={enter?.bind(bond.state)}
|
|
45
|
-
exit={exit?.bind(bond.state)}
|
|
46
|
-
initial={initial?.bind(bond.state)}
|
|
47
|
-
animate={animate?.bind(bond.state)}
|
|
48
|
-
onmount={onmount?.bind(bond.state)}
|
|
49
|
-
ondestroy={ondestroy?.bind(bond.state)}
|
|
50
|
-
{...bond.
|
|
51
|
-
{...restProps}
|
|
52
|
-
/>
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import { onMount } from 'svelte';
|
|
3
|
+
import { Input } from '../input';
|
|
4
|
+
import { ComboboxBond } from './bond.svelte';
|
|
5
|
+
|
|
6
|
+
const bond = ComboboxBond.get() as ComboboxBond<{}>;
|
|
7
|
+
|
|
8
|
+
if (!bond) {
|
|
9
|
+
throw new Error('Combobox atom was not found');
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
let {
|
|
13
|
+
class: klass = '',
|
|
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
|
+
|
|
24
|
+
let isMounted = $state(false);
|
|
25
|
+
|
|
26
|
+
onMount(() => {
|
|
27
|
+
isMounted = true;
|
|
28
|
+
});
|
|
29
|
+
|
|
30
|
+
const isMultiple = $derived(bond?.state.props?.multiple ?? false);
|
|
31
|
+
const selectedText = $derived(
|
|
32
|
+
isMounted || isMultiple ? (bond.state.selectedItems.at(0)?.text ?? '') : ''
|
|
33
|
+
);
|
|
34
|
+
|
|
35
|
+
const value = $derived(
|
|
36
|
+
bond?.state.props?.query ?? (bond?.state.props?.text || selectedText || '')
|
|
37
|
+
);
|
|
38
|
+
</script>
|
|
39
|
+
|
|
40
|
+
<Input.Control
|
|
41
|
+
{value}
|
|
42
|
+
preset="combobox.control"
|
|
43
|
+
class={['border-border flex-1 py-1', '$preset', klass]}
|
|
44
|
+
enter={enter?.bind(bond.state)}
|
|
45
|
+
exit={exit?.bind(bond.state)}
|
|
46
|
+
initial={initial?.bind(bond.state)}
|
|
47
|
+
animate={animate?.bind(bond.state)}
|
|
48
|
+
onmount={onmount?.bind(bond.state)}
|
|
49
|
+
ondestroy={ondestroy?.bind(bond.state)}
|
|
50
|
+
{...bond.control()}
|
|
51
|
+
{...restProps}
|
|
52
|
+
/>
|
|
@@ -1,68 +1,62 @@
|
|
|
1
|
-
<script
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
import {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
bond
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
}
|
|
56
|
-
{bond}
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
onmount={onmount?.bind(bond.state)}
|
|
64
|
-
ondestroy={ondestroy?.bind(bond.state)}
|
|
65
|
-
{...restProps}
|
|
66
|
-
>
|
|
67
|
-
{@render children?.({ combobox: bond })}
|
|
68
|
-
</Item>
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import { ComboboxBond } from './bond.svelte';
|
|
3
|
+
import { Item } from '../dropdown/atoms';
|
|
4
|
+
import { DropdownItemController } from '../dropdown/item/controller.svelte';
|
|
5
|
+
|
|
6
|
+
import { on } from '../../attachments';
|
|
7
|
+
|
|
8
|
+
const bond = ComboboxBond.get() as ComboboxBond<{}>;
|
|
9
|
+
|
|
10
|
+
if (!bond) {
|
|
11
|
+
throw new Error('Combobox atom was not found');
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
let {
|
|
15
|
+
class: klass = '',
|
|
16
|
+
children = undefined,
|
|
17
|
+
onmount = undefined,
|
|
18
|
+
ondestroy = undefined,
|
|
19
|
+
animate = undefined,
|
|
20
|
+
enter = undefined,
|
|
21
|
+
exit = undefined,
|
|
22
|
+
initial = undefined,
|
|
23
|
+
...restProps
|
|
24
|
+
} = $props();
|
|
25
|
+
</script>
|
|
26
|
+
|
|
27
|
+
<Item
|
|
28
|
+
{@attach (node: HTMLElement) => {
|
|
29
|
+
const item = DropdownItemController.get();
|
|
30
|
+
|
|
31
|
+
return on('click', (ev) => {
|
|
32
|
+
ev.preventDefault();
|
|
33
|
+
|
|
34
|
+
const currentTarget = ev.currentTarget as HTMLElement | undefined;
|
|
35
|
+
|
|
36
|
+
const textElement = (currentTarget?.querySelector('data-text') ?? currentTarget) as
|
|
37
|
+
| HTMLElement
|
|
38
|
+
| undefined;
|
|
39
|
+
|
|
40
|
+
// Set selected item text
|
|
41
|
+
bond.state.props.text = textElement?.innerText ?? '';
|
|
42
|
+
// Clear input query
|
|
43
|
+
bond.state.props.query = '';
|
|
44
|
+
|
|
45
|
+
item?.toggle();
|
|
46
|
+
|
|
47
|
+
bond?.state.close();
|
|
48
|
+
})(node);
|
|
49
|
+
}}
|
|
50
|
+
{bond}
|
|
51
|
+
preset="combobox.item"
|
|
52
|
+
class={['border-border', '$preset', klass].filter(Boolean).join(' ')}
|
|
53
|
+
enter={enter?.bind(bond.state)}
|
|
54
|
+
exit={exit?.bind(bond.state)}
|
|
55
|
+
initial={initial?.bind(bond.state)}
|
|
56
|
+
animate={animate?.bind(bond.state)}
|
|
57
|
+
onmount={onmount?.bind(bond.state)}
|
|
58
|
+
ondestroy={ondestroy?.bind(bond.state)}
|
|
59
|
+
{...restProps}
|
|
60
|
+
>
|
|
61
|
+
{@render children?.({ combobox: bond })}
|
|
62
|
+
</Item>
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
declare const ComboboxItem: import("svelte").Component<{
|
|
2
|
+
class?: string;
|
|
3
|
+
children?: any;
|
|
4
|
+
onmount?: any;
|
|
5
|
+
ondestroy?: any;
|
|
6
|
+
animate?: any;
|
|
7
|
+
enter?: any;
|
|
8
|
+
exit?: any;
|
|
9
|
+
initial?: any;
|
|
10
|
+
} & Record<string, any>, {}, "">;
|
|
11
|
+
type ComboboxItem = ReturnType<typeof ComboboxItem>;
|
|
12
|
+
export default ComboboxItem;
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
<script module>
|
|
2
|
+
import { defineMeta } from '@storybook/addon-svelte-csf';
|
|
3
|
+
import { Combobox as ACombobox } from '.';
|
|
4
|
+
import { Input } from '../input';
|
|
5
|
+
import { Divider } from '../divider';
|
|
6
|
+
|
|
7
|
+
// More on how to set up stories at: https://storybook.js.org/docs/writing-stories
|
|
8
|
+
const { Story } = defineMeta({
|
|
9
|
+
title: 'Atoms/Combobox',
|
|
10
|
+
// This component will have an automatically generated Autodocs entry: https://storybook.js.org/docs/writing-docs/autodocs
|
|
11
|
+
|
|
12
|
+
parameters: {
|
|
13
|
+
// More on how to position stories at: https://storybook.js.org/docs/configure/story-layout
|
|
14
|
+
layout: 'fullscreen'
|
|
15
|
+
},
|
|
16
|
+
args: {}
|
|
17
|
+
});
|
|
18
|
+
</script>
|
|
19
|
+
|
|
20
|
+
<script lang="ts">
|
|
21
|
+
let open = $state(false);
|
|
22
|
+
let value = $state<string | undefined>('usd');
|
|
23
|
+
let query = $state('');
|
|
24
|
+
let array = $state([
|
|
25
|
+
{ value: 'usd', label: 'US Dollar' },
|
|
26
|
+
{ value: 'eur', label: 'Euro' },
|
|
27
|
+
{ value: 'gbp', label: 'British Pound' },
|
|
28
|
+
{ value: 'jpy', label: 'Japanese Yen' },
|
|
29
|
+
{ value: 'cny', label: 'Chinese Yuan' }
|
|
30
|
+
]);
|
|
31
|
+
|
|
32
|
+
const filteredItems = $derived(
|
|
33
|
+
array.filter((item) => !query || item.label.toLowerCase().includes(query))
|
|
34
|
+
);
|
|
35
|
+
</script>
|
|
36
|
+
|
|
37
|
+
<Story name="Combobox" args={{}}>
|
|
38
|
+
<ACombobox.Root bind:open bind:value bind:query>
|
|
39
|
+
<ACombobox.Trigger base={Input.Root} class="h-10 min-w-sm">
|
|
40
|
+
<Input.Icon class="text-foreground/50">$</Input.Icon>
|
|
41
|
+
<Divider class="mx-1" vertical />
|
|
42
|
+
<ACombobox.Control class="px-1" placeholder="Select a language" />
|
|
43
|
+
</ACombobox.Trigger>
|
|
44
|
+
<ACombobox.List>
|
|
45
|
+
{#each filteredItems as item (item.value)}
|
|
46
|
+
<ACombobox.Item value={item.value}>{item.label}</ACombobox.Item>
|
|
47
|
+
{/each}
|
|
48
|
+
</ACombobox.List>
|
|
49
|
+
</ACombobox.Root>
|
|
50
|
+
</Story>
|
|
@@ -1,90 +1,90 @@
|
|
|
1
|
-
<script lang="ts" generics="T, E extends HtmlElementTagName, B extends Base = Base">
|
|
2
|
-
import { untrack } from 'svelte';
|
|
3
|
-
import { nanoid } from 'nanoid';
|
|
4
|
-
import { defineProperty, defineState } from '../../../utils';
|
|
5
|
-
import { HtmlAtom, type Base } from '../../atom';
|
|
6
|
-
import type { HtmlElementTagName } from '../../element';
|
|
7
|
-
import { DataGridTrBond, DataGridTrBondState, type DataGridTrBondProps } from './bond.svelte';
|
|
8
|
-
import type { DatagridTrProps } from '../types';
|
|
9
|
-
import { type DatagridContext } from '../context';
|
|
10
|
-
|
|
11
|
-
import './datagrid-tr.css';
|
|
12
|
-
|
|
13
|
-
let {
|
|
14
|
-
class: klass = '',
|
|
15
|
-
value = nanoid(),
|
|
16
|
-
rows = 'auto',
|
|
17
|
-
data = undefined,
|
|
18
|
-
header = false,
|
|
19
|
-
factory = _factory,
|
|
20
|
-
children = undefined,
|
|
21
|
-
onmount = undefined,
|
|
22
|
-
ondestroy = undefined,
|
|
23
|
-
animate = undefined,
|
|
24
|
-
enter = undefined,
|
|
25
|
-
exit = undefined,
|
|
26
|
-
initial = undefined,
|
|
27
|
-
onclick = undefined,
|
|
28
|
-
...restProps
|
|
29
|
-
}: DatagridTrProps<T, E, B> = $props();
|
|
30
|
-
|
|
31
|
-
const bondProps = defineState<DataGridTrBondProps>([
|
|
32
|
-
defineProperty('data', () => data),
|
|
33
|
-
defineProperty('value', () => value),
|
|
34
|
-
defineProperty('header', () => header)
|
|
35
|
-
]);
|
|
36
|
-
const bond = factory(bondProps).share();
|
|
37
|
-
|
|
38
|
-
const isHeader = $derived(bond?.state.isHeader ?? false);
|
|
39
|
-
const isSelected = $derived(bond.state.isSelected);
|
|
40
|
-
|
|
41
|
-
const headerProps = $derived({
|
|
42
|
-
...bond.root(),
|
|
43
|
-
...restProps
|
|
44
|
-
});
|
|
45
|
-
|
|
46
|
-
const unmount = untrack(() => {
|
|
47
|
-
if (!isHeader) {
|
|
48
|
-
return bond.mount();
|
|
49
|
-
}
|
|
50
|
-
});
|
|
51
|
-
|
|
52
|
-
$effect(() => unmount);
|
|
53
|
-
|
|
54
|
-
function _factory(props: typeof bondProps) {
|
|
55
|
-
const datagridTrState = new DataGridTrBondState(() => props);
|
|
56
|
-
return new DataGridTrBond(datagridTrState);
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
function onclick_(ev: Event) {
|
|
60
|
-
onclick?.(ev, { tr: bond as unknown as DatagridContext<T> });
|
|
61
|
-
|
|
62
|
-
if (!ev.defaultPrevented) {
|
|
63
|
-
//
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
</script>
|
|
67
|
-
|
|
68
|
-
<HtmlAtom
|
|
69
|
-
{bond}
|
|
70
|
-
preset="datagrid.tr"
|
|
71
|
-
class={[
|
|
72
|
-
'datagrid-tr border-border items-center border-b bg-transparent',
|
|
73
|
-
!isHeader && 'hover:bg-foreground/2 active:bg-foreground/4 transition-colors duration-100',
|
|
74
|
-
isHeader && 'header-tr',
|
|
75
|
-
isSelected && 'bg-primary/2 hover:bg-primary/4 active:bg-primary/6',
|
|
76
|
-
'$preset',
|
|
77
|
-
klass
|
|
78
|
-
]}
|
|
79
|
-
style="--rows:{rows}"
|
|
80
|
-
enter={enter?.bind(bond.state)}
|
|
81
|
-
exit={exit?.bind(bond.state)}
|
|
82
|
-
initial={initial?.bind(bond.state)}
|
|
83
|
-
animate={animate?.bind(bond.state)}
|
|
84
|
-
onmount={onmount?.bind(bond.state)}
|
|
85
|
-
ondestroy={ondestroy?.bind(bond.state)}
|
|
86
|
-
onclick={onclick_}
|
|
87
|
-
{...headerProps}
|
|
88
|
-
>
|
|
89
|
-
{@render children?.({ tr: bond as unknown as DatagridContext<T> })}
|
|
90
|
-
</HtmlAtom>
|
|
1
|
+
<script lang="ts" generics="T, E extends HtmlElementTagName, B extends Base = Base">
|
|
2
|
+
import { untrack } from 'svelte';
|
|
3
|
+
import { nanoid } from 'nanoid';
|
|
4
|
+
import { defineProperty, defineState } from '../../../utils';
|
|
5
|
+
import { HtmlAtom, type Base } from '../../atom';
|
|
6
|
+
import type { HtmlElementTagName } from '../../element';
|
|
7
|
+
import { DataGridTrBond, DataGridTrBondState, type DataGridTrBondProps } from './bond.svelte';
|
|
8
|
+
import type { DatagridTrProps } from '../types';
|
|
9
|
+
import { type DatagridContext } from '../context';
|
|
10
|
+
|
|
11
|
+
import './datagrid-tr.css';
|
|
12
|
+
|
|
13
|
+
let {
|
|
14
|
+
class: klass = '',
|
|
15
|
+
value = nanoid(),
|
|
16
|
+
rows = 'auto',
|
|
17
|
+
data = undefined,
|
|
18
|
+
header = false,
|
|
19
|
+
factory = _factory,
|
|
20
|
+
children = undefined,
|
|
21
|
+
onmount = undefined,
|
|
22
|
+
ondestroy = undefined,
|
|
23
|
+
animate = undefined,
|
|
24
|
+
enter = undefined,
|
|
25
|
+
exit = undefined,
|
|
26
|
+
initial = undefined,
|
|
27
|
+
onclick = undefined,
|
|
28
|
+
...restProps
|
|
29
|
+
}: DatagridTrProps<T, E, B> = $props();
|
|
30
|
+
|
|
31
|
+
const bondProps = defineState<DataGridTrBondProps>([
|
|
32
|
+
defineProperty('data', () => data),
|
|
33
|
+
defineProperty('value', () => value),
|
|
34
|
+
defineProperty('header', () => header)
|
|
35
|
+
]);
|
|
36
|
+
const bond = factory(bondProps).share();
|
|
37
|
+
|
|
38
|
+
const isHeader = $derived(bond?.state.isHeader ?? false);
|
|
39
|
+
const isSelected = $derived(bond.state.isSelected);
|
|
40
|
+
|
|
41
|
+
const headerProps = $derived({
|
|
42
|
+
...bond.root(),
|
|
43
|
+
...restProps
|
|
44
|
+
});
|
|
45
|
+
|
|
46
|
+
const unmount = untrack(() => {
|
|
47
|
+
if (!isHeader) {
|
|
48
|
+
return bond.mount();
|
|
49
|
+
}
|
|
50
|
+
});
|
|
51
|
+
|
|
52
|
+
$effect(() => unmount);
|
|
53
|
+
|
|
54
|
+
function _factory(props: typeof bondProps) {
|
|
55
|
+
const datagridTrState = new DataGridTrBondState(() => props);
|
|
56
|
+
return new DataGridTrBond(datagridTrState);
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
function onclick_(ev: Event) {
|
|
60
|
+
onclick?.(ev, { tr: bond as unknown as DatagridContext<T> });
|
|
61
|
+
|
|
62
|
+
if (!ev.defaultPrevented) {
|
|
63
|
+
//
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
</script>
|
|
67
|
+
|
|
68
|
+
<HtmlAtom
|
|
69
|
+
{bond}
|
|
70
|
+
preset="datagrid.tr"
|
|
71
|
+
class={[
|
|
72
|
+
'datagrid-tr border-border items-center border-b bg-transparent',
|
|
73
|
+
!isHeader && 'hover:bg-foreground/2 active:bg-foreground/4 transition-colors duration-100',
|
|
74
|
+
isHeader && 'header-tr',
|
|
75
|
+
isSelected && 'bg-primary/2 hover:bg-primary/4 active:bg-primary/6',
|
|
76
|
+
'$preset',
|
|
77
|
+
klass
|
|
78
|
+
]}
|
|
79
|
+
style="--rows:{rows}"
|
|
80
|
+
enter={enter?.bind(bond.state)}
|
|
81
|
+
exit={exit?.bind(bond.state)}
|
|
82
|
+
initial={initial?.bind(bond.state)}
|
|
83
|
+
animate={animate?.bind(bond.state)}
|
|
84
|
+
onmount={onmount?.bind(bond.state)}
|
|
85
|
+
ondestroy={ondestroy?.bind(bond.state)}
|
|
86
|
+
onclick={onclick_}
|
|
87
|
+
{...headerProps}
|
|
88
|
+
>
|
|
89
|
+
{@render children?.({ tr: bond as unknown as DatagridContext<T> })}
|
|
90
|
+
</HtmlAtom>
|
|
@@ -12,13 +12,11 @@ export type DatePickerBondElements = PopoverDomElements & {
|
|
|
12
12
|
};
|
|
13
13
|
export declare class DatePickerBond<Props extends DatePickerBondProps = DatePickerBondProps, State extends DatePickerBondState<Props> = DatePickerBondState<Props>> extends PopoverBond<Props, State, DatePickerBondElements> {
|
|
14
14
|
#private;
|
|
15
|
-
static CONTEXT_KEY: string;
|
|
16
15
|
constructor(state: State);
|
|
17
16
|
get calendar(): CalendarBond<CalendarBondProps, import("..").CalendarBondState<CalendarBondProps>> | undefined;
|
|
18
17
|
setCalendar(calendar: CalendarBond): void;
|
|
19
18
|
share(): this;
|
|
20
19
|
trigger(): {
|
|
21
|
-
[x: symbol]: (node: HTMLInputElement) => void;
|
|
22
20
|
id: string;
|
|
23
21
|
role: string;
|
|
24
22
|
'aria-expanded': boolean;
|
|
@@ -29,19 +27,31 @@ export declare class DatePickerBond<Props extends DatePickerBondProps = DatePick
|
|
|
29
27
|
disabled: boolean;
|
|
30
28
|
readonly: boolean;
|
|
31
29
|
tabindex: number;
|
|
30
|
+
'aria-haspopup': string;
|
|
31
|
+
'data-kind': string;
|
|
32
|
+
onclick: (ev: PointerEvent) => void;
|
|
33
|
+
onkeydown: (ev: KeyboardEvent) => void;
|
|
32
34
|
};
|
|
33
35
|
content(): {
|
|
34
|
-
[x: symbol]: (node: HTMLElement) => void;
|
|
35
36
|
id: string;
|
|
36
37
|
role: string;
|
|
37
38
|
'aria-label': string;
|
|
39
|
+
'aria-modal': boolean;
|
|
40
|
+
'aria-labelledby': string;
|
|
41
|
+
inert: boolean | undefined;
|
|
42
|
+
tabindex: number;
|
|
43
|
+
'data-atom': string;
|
|
44
|
+
'data-kind': string;
|
|
45
|
+
'data-active': boolean;
|
|
46
|
+
onkeydown: ((ev: KeyboardEvent) => void) | undefined;
|
|
38
47
|
};
|
|
39
|
-
clearButton(
|
|
40
|
-
|
|
48
|
+
clearButton(): {
|
|
49
|
+
[x: symbol]: (node: HTMLElement) => void;
|
|
41
50
|
id: string;
|
|
42
51
|
type: string;
|
|
43
52
|
'aria-label': string;
|
|
44
53
|
tabindex: number;
|
|
54
|
+
onclick: (ev: Event) => void;
|
|
45
55
|
};
|
|
46
56
|
static get(): DatePickerBond;
|
|
47
57
|
static set(bond: DatePickerBond): DatePickerBond;
|
|
@@ -2,7 +2,6 @@ import { PopoverBond, PopoverState } from '../popover/bond.svelte';
|
|
|
2
2
|
import { getContext, setContext } from 'svelte';
|
|
3
3
|
import { createAttachmentKey } from 'svelte/attachments';
|
|
4
4
|
export class DatePickerBond extends PopoverBond {
|
|
5
|
-
static CONTEXT_KEY = '@atoms/context/date-picker';
|
|
6
5
|
#calendarBond;
|
|
7
6
|
constructor(state) {
|
|
8
7
|
super(state);
|
|
@@ -20,6 +19,7 @@ export class DatePickerBond extends PopoverBond {
|
|
|
20
19
|
const isDisabled = this.state.props.disabled ?? false;
|
|
21
20
|
const placeholder = this.state.props.placeholder ?? 'Select a date';
|
|
22
21
|
return {
|
|
22
|
+
...super.trigger(),
|
|
23
23
|
id: `date-picker-input-${this.id}`,
|
|
24
24
|
role: 'combobox',
|
|
25
25
|
'aria-expanded': this.state.props.open ?? false,
|
|
@@ -29,30 +29,24 @@ export class DatePickerBond extends PopoverBond {
|
|
|
29
29
|
placeholder,
|
|
30
30
|
disabled: isDisabled,
|
|
31
31
|
readonly: true,
|
|
32
|
-
tabindex: isDisabled ? -1 : 0
|
|
33
|
-
[createAttachmentKey()]: (node) => {
|
|
34
|
-
this.elements.trigger = node;
|
|
35
|
-
}
|
|
32
|
+
tabindex: isDisabled ? -1 : 0
|
|
36
33
|
};
|
|
37
34
|
}
|
|
38
35
|
content() {
|
|
39
36
|
return {
|
|
37
|
+
...super.content(),
|
|
40
38
|
id: `date-picker-calendar-${this.id}`,
|
|
41
39
|
role: 'dialog',
|
|
42
|
-
'aria-label': 'Choose date'
|
|
43
|
-
[createAttachmentKey()]: (node) => {
|
|
44
|
-
this.elements.content = node;
|
|
45
|
-
}
|
|
40
|
+
'aria-label': 'Choose date'
|
|
46
41
|
};
|
|
47
42
|
}
|
|
48
|
-
clearButton(
|
|
43
|
+
clearButton() {
|
|
49
44
|
const hasValue = this.state.hasValue;
|
|
50
45
|
return {
|
|
51
46
|
id: `date-picker-clear-${this.id}`,
|
|
52
47
|
type: 'button',
|
|
53
48
|
'aria-label': 'Clear date',
|
|
54
49
|
tabindex: hasValue ? 0 : -1,
|
|
55
|
-
...props,
|
|
56
50
|
onclick: (ev) => {
|
|
57
51
|
ev.preventDefault();
|
|
58
52
|
ev.stopPropagation();
|