@svelte-atoms/core 1.0.0-alpha.44 → 1.0.0-alpha.46
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/README.md +13 -0
- package/dist/components/accordion/item/accordion-item-body.svelte +5 -8
- package/dist/components/accordion/item/accordion-item-header.svelte +0 -13
- package/dist/components/accordion/item/accordion-item-indicator.svelte +0 -12
- package/dist/components/accordion/item/accordion-item-root.svelte +0 -12
- package/dist/components/alert/alert-actions.svelte +0 -12
- package/dist/components/alert/alert-close-button.svelte +0 -12
- package/dist/components/alert/alert-content.svelte +0 -12
- package/dist/components/alert/alert-description.svelte +0 -12
- package/dist/components/alert/alert-icon.svelte +0 -12
- package/dist/components/alert/alert-root.svelte +1 -13
- package/dist/components/alert/alert-title.svelte +0 -12
- package/dist/components/atom/html-atom.svelte +31 -17
- package/dist/components/atom/types.d.ts +9 -0
- package/dist/components/atom/utils/base.d.ts +6 -0
- package/dist/components/atom/utils/base.js +8 -0
- package/dist/components/atom/utils/cache.d.ts +17 -0
- package/dist/components/atom/utils/cache.js +134 -0
- package/dist/components/atom/utils/classes.d.ts +14 -0
- package/dist/components/atom/utils/classes.js +42 -0
- package/dist/components/atom/utils/constants.d.ts +9 -0
- package/dist/components/atom/utils/constants.js +9 -0
- package/dist/components/atom/utils/index.d.ts +6 -0
- package/dist/components/atom/utils/index.js +5 -0
- package/dist/components/atom/utils/preset.d.ts +22 -0
- package/dist/components/atom/utils/preset.js +94 -0
- package/dist/components/atom/utils/props.d.ts +13 -0
- package/dist/components/atom/utils/props.js +60 -0
- package/dist/components/atom/utils/variants.d.ts +31 -0
- package/dist/components/atom/utils/variants.js +270 -0
- package/dist/components/card/card-body.svelte +0 -12
- package/dist/components/card/card-description.svelte +0 -12
- package/dist/components/card/card-footer.svelte +0 -12
- package/dist/components/card/card-header.svelte +0 -12
- package/dist/components/card/card-media.svelte +0 -12
- package/dist/components/card/card-root.svelte +0 -12
- package/dist/components/card/card-subtitle.svelte +0 -12
- package/dist/components/card/card-title.svelte +0 -12
- package/dist/components/collapsible/collapsible-body.svelte +5 -12
- package/dist/components/collapsible/collapsible-header.svelte +0 -12
- package/dist/components/collapsible/collapsible-indicator.svelte +0 -12
- package/dist/components/collapsible/collapsible-root.svelte +0 -12
- package/dist/components/combobox/combobox-control.svelte +0 -12
- package/dist/components/combobox/combobox-item.svelte +0 -12
- package/dist/components/combobox/combobox-item.svelte.d.ts +0 -6
- package/dist/components/combobox/index.d.ts +1 -1
- package/dist/components/container/container.svelte +0 -12
- package/dist/components/datagrid/column/datagrid-column-sort-icon.svelte +3 -12
- package/dist/components/datagrid/column/datagrid-column-sort-icon.svelte.d.ts +0 -6
- package/dist/components/datagrid/datagrid-body.svelte +17 -1
- package/dist/components/dialog/dialog-body.svelte +0 -12
- package/dist/components/dialog/dialog-close-button.svelte +0 -12
- package/dist/components/dialog/dialog-close.svelte +0 -12
- package/dist/components/dialog/dialog-content.svelte +4 -12
- package/dist/components/dialog/dialog-description.svelte +0 -12
- package/dist/components/dialog/dialog-footer.svelte +0 -12
- package/dist/components/dialog/dialog-header.svelte +0 -12
- package/dist/components/dialog/dialog-title.svelte +0 -12
- package/dist/components/dialog/index.d.ts +3 -0
- package/dist/components/dialog/index.js +3 -0
- package/dist/components/drawer/drawer-backdrop.svelte +0 -12
- package/dist/components/drawer/drawer-body.svelte +0 -12
- package/dist/components/drawer/drawer-content.svelte +5 -12
- package/dist/components/drawer/drawer-description.svelte +0 -12
- package/dist/components/drawer/drawer-footer.svelte +0 -12
- package/dist/components/drawer/drawer-header.svelte +0 -12
- package/dist/components/drawer/drawer-root.svelte +5 -4
- package/dist/components/drawer/drawer-title.svelte +0 -12
- package/dist/components/dropdown/dropdown-placeholder.svelte +0 -6
- package/dist/components/dropdown/dropdown-placeholder.svelte.d.ts +0 -6
- package/dist/components/dropdown/dropdown-query.svelte +0 -12
- package/dist/components/dropdown-menu/bond.svelte.d.ts +0 -4
- package/dist/components/dropdown-menu/dropdown-menu-content.svelte +0 -12
- package/dist/components/dropdown-menu/dropdown-menu-content.svelte.d.ts +0 -6
- package/dist/components/dropdown-menu/index.d.ts +1 -1
- package/dist/components/form/field/bond.svelte.d.ts +29 -17
- package/dist/components/form/field/bond.svelte.js +73 -49
- package/dist/components/form/field/field-control.svelte +21 -18
- package/dist/components/form/field/field-label.svelte +2 -2
- package/dist/components/form/field/field-root.svelte +2 -1
- package/dist/components/index.d.ts +2 -0
- package/dist/components/index.js +2 -0
- package/dist/components/input/input-file-control.svelte +0 -12
- package/dist/components/input/input-icon.svelte +3 -3
- package/dist/components/input/input-number-control.svelte +28 -35
- package/dist/components/input/input-text-control.svelte +8 -3
- package/dist/components/input/input-url-control.svelte +2 -2
- package/dist/components/input/types.d.ts +4 -4
- package/dist/components/kbd/index.d.ts +3 -0
- package/dist/components/kbd/index.js +3 -0
- package/dist/components/kbd/kbd.svelte +19 -0
- package/dist/components/kbd/kbd.svelte.d.ts +4 -0
- package/dist/components/kbd/shortcut.svelte +38 -0
- package/dist/components/kbd/shortcut.svelte.d.ts +4 -0
- package/dist/components/kbd/types.d.ts +20 -0
- package/dist/components/kbd/types.js +1 -0
- package/dist/components/layer/layer-inner.svelte +0 -12
- package/dist/components/layer/layer-root.svelte +0 -12
- package/dist/components/menu/menu-content.svelte +0 -12
- package/dist/components/menu/menu-content.svelte.d.ts +0 -6
- package/dist/components/popover/bond.svelte.d.ts +29 -1
- package/dist/components/popover/bond.svelte.js +55 -2
- package/dist/components/popover/index.d.ts +1 -0
- package/dist/components/popover/index.js +1 -0
- package/dist/components/popover/popover-arrow.svelte +4 -2
- package/dist/components/popover/popover-content.svelte +17 -90
- package/dist/components/popover/popover-overlay.svelte +98 -0
- package/dist/components/popover/popover-overlay.svelte.d.ts +4 -0
- package/dist/components/popover/popover-trigger.svelte +9 -0
- package/dist/components/popover/strategies/floating.svelte +10 -10
- package/dist/components/popover/types.d.ts +7 -2
- package/dist/components/portal/portal-inner.svelte +0 -12
- package/dist/components/portal/portal-root.svelte +0 -12
- package/dist/components/portal/types.d.ts +1 -1
- package/dist/components/progress/index.d.ts +3 -0
- package/dist/components/progress/index.js +3 -0
- package/dist/components/progress/progress-circular.svelte +99 -0
- package/dist/components/progress/progress-circular.svelte.d.ts +6 -0
- package/dist/components/progress/progress-linear.svelte +66 -0
- package/dist/components/progress/progress-linear.svelte.d.ts +6 -0
- package/dist/components/progress/types.d.ts +18 -0
- package/dist/components/progress/types.js +1 -0
- package/dist/components/scrollable/scrollable-container.svelte +0 -12
- package/dist/components/scrollable/scrollable-content.svelte +0 -12
- package/dist/components/scrollable/scrollable-root.svelte +0 -12
- package/dist/components/scrollable/scrollable-thumb.svelte +1 -12
- package/dist/components/scrollable/scrollable-track.svelte +0 -12
- package/dist/components/select/bond.svelte.d.ts +0 -4
- package/dist/components/select/index.d.ts +1 -1
- package/dist/components/select/select-placeholder.svelte +0 -6
- package/dist/components/select/select-placeholder.svelte.d.ts +0 -6
- package/dist/components/sidebar/sidebar-content.svelte +5 -12
- package/dist/components/stack/bond.svelte.js +6 -0
- package/dist/components/stack/stack-item.svelte +4 -0
- package/dist/components/switch/switch.svelte +2 -0
- package/dist/components/tabs/tab/tab-header.svelte +4 -4
- package/dist/components/tabs/tabs-body.svelte +0 -2
- package/dist/components/tabs/tabs-root.svelte +11 -3
- package/dist/components/toast/atoms.d.ts +1 -1
- package/dist/components/toast/atoms.js +1 -1
- package/dist/components/toast/attachments.svelte.d.ts +10 -2
- package/dist/components/toast/attachments.svelte.js +9 -1
- package/dist/components/toast/bond.svelte.d.ts +73 -0
- package/dist/components/toast/bond.svelte.js +132 -0
- package/dist/components/toast/index.d.ts +1 -1
- package/dist/components/toast/index.js +1 -1
- package/dist/components/toast/toast-close.svelte +47 -0
- package/dist/components/toast/toast-close.svelte.d.ts +26 -0
- package/dist/components/toast/toast-description.svelte +16 -24
- package/dist/components/toast/toast-description.svelte.d.ts +15 -19
- package/dist/components/toast/toast-root.svelte +36 -26
- package/dist/components/toast/toast-root.svelte.d.ts +16 -15
- package/dist/components/toast/toast-title.svelte +17 -22
- package/dist/components/toast/toast-title.svelte.d.ts +13 -13
- package/dist/components/toast/toaster.svelte.d.ts +38 -0
- package/dist/components/toast/toaster.svelte.js +107 -0
- package/dist/components/toast/types.d.ts +13 -21
- package/dist/components/tree/tree-body.svelte +5 -12
- package/dist/components/tree/tree-header.svelte +0 -12
- package/dist/components/tree/tree-indicator.svelte +0 -12
- package/dist/components/tree/tree-root.svelte +0 -12
- package/dist/context/preset.svelte.d.ts +53 -37
- package/dist/context/preset.svelte.js +29 -3
- package/package.json +1 -1
- package/dist/components/atom/utils.d.ts +0 -44
- package/dist/components/atom/utils.js +0 -275
- package/dist/components/popover/popover-engine.svelte +0 -118
- package/dist/components/popover/popover-engine.svelte.d.ts +0 -3
- package/dist/components/toast/bond.d.ts +0 -35
- package/dist/components/toast/bond.js +0 -59
- package/dist/components/toast/manager.svelte.d.ts +0 -38
- package/dist/components/toast/manager.svelte.js +0 -82
- package/dist/components/toast/toast-root-managed.svelte +0 -64
- package/dist/components/toast/toast-root-managed.svelte.d.ts +0 -7
- package/dist/components/toast/toast-toaster.svelte +0 -42
- package/dist/components/toast/toast-toaster.svelte.d.ts +0 -4
- /package/dist/components/popover/{motion.d.ts → motion.svelte.d.ts} +0 -0
- /package/dist/components/popover/{motion.js → motion.svelte.js} +0 -0
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
<script lang="ts">
|
|
2
2
|
import type { HTMLAttributes } from 'svelte/elements';
|
|
3
|
-
import { HtmlAtom } from '../atom';
|
|
4
3
|
import { InputBond } from './bond.svelte';
|
|
5
4
|
import type { InputNumberControlProps } from './types';
|
|
6
5
|
|
|
@@ -8,7 +7,7 @@
|
|
|
8
7
|
|
|
9
8
|
let {
|
|
10
9
|
class: klass = '',
|
|
11
|
-
number = $bindable(),
|
|
10
|
+
number = $bindable(0),
|
|
12
11
|
min = undefined,
|
|
13
12
|
max = undefined,
|
|
14
13
|
step = 1,
|
|
@@ -16,8 +15,8 @@
|
|
|
16
15
|
disabled = false,
|
|
17
16
|
placeholder = undefined,
|
|
18
17
|
preset = 'input.number',
|
|
19
|
-
|
|
20
|
-
|
|
18
|
+
decrement = undefined,
|
|
19
|
+
increment = undefined,
|
|
21
20
|
onchange = undefined,
|
|
22
21
|
...restProps
|
|
23
22
|
}: InputNumberControlProps & HTMLAttributes<HTMLDivElement> = $props();
|
|
@@ -27,17 +26,17 @@
|
|
|
27
26
|
const canDecrement = $derived(!disabled && (min === undefined || numberValue - step >= min));
|
|
28
27
|
const canIncrement = $derived(!disabled && (max === undefined || numberValue + step <= max));
|
|
29
28
|
|
|
30
|
-
const decrementSnippet = $derived(showControls ? (
|
|
31
|
-
const incrementSnippet = $derived(showControls ? (
|
|
29
|
+
const decrementSnippet = $derived(showControls ? (decrement ?? defaultDecrement) : undefined);
|
|
30
|
+
const incrementSnippet = $derived(showControls ? (increment ?? defaultIncrement) : undefined);
|
|
32
31
|
|
|
33
|
-
function
|
|
32
|
+
function handleDecrement() {
|
|
34
33
|
if (!canDecrement) return;
|
|
35
34
|
number = parseFloat((number - step).toPrecision(10));
|
|
36
35
|
onchange?.(undefined, { number });
|
|
37
36
|
bond?.state?.props && (bond.state.props.value = number);
|
|
38
37
|
}
|
|
39
38
|
|
|
40
|
-
function
|
|
39
|
+
function handleIncrement() {
|
|
41
40
|
if (!canIncrement) return;
|
|
42
41
|
number = parseFloat((number + step).toPrecision(10));
|
|
43
42
|
onchange?.(undefined, { number });
|
|
@@ -57,13 +56,13 @@
|
|
|
57
56
|
|
|
58
57
|
<!-- ─── Default part snippets ──────────────────────────────────────────── -->
|
|
59
58
|
|
|
60
|
-
{#snippet defaultDecrement({
|
|
59
|
+
{#snippet defaultDecrement({ action: dec, disabled: dis }: { action: () => void; disabled: boolean })}
|
|
61
60
|
<button
|
|
62
61
|
type="button"
|
|
63
62
|
onclick={dec}
|
|
64
63
|
disabled={dis}
|
|
65
64
|
aria-label="Decrement"
|
|
66
|
-
class="input-number-decrement text-foreground hover:bg-muted disabled:text-muted-foreground flex h-full
|
|
65
|
+
class="input-number-decrement text-foreground hover:bg-muted disabled:text-muted-foreground flex h-full aspect-square shrink-0 cursor-pointer items-center justify-center transition-colors disabled:cursor-not-allowed"
|
|
67
66
|
>
|
|
68
67
|
<svg viewBox="0 0 16 16" fill="none" class="h-3 w-3" aria-hidden="true">
|
|
69
68
|
<path d="M3 8h10" stroke="currentColor" stroke-width="1.5" stroke-linecap="round"/>
|
|
@@ -71,13 +70,13 @@
|
|
|
71
70
|
</button>
|
|
72
71
|
{/snippet}
|
|
73
72
|
|
|
74
|
-
{#snippet defaultIncrement({
|
|
73
|
+
{#snippet defaultIncrement({ action: inc, disabled: dis }: { action: () => void; disabled: boolean })}
|
|
75
74
|
<button
|
|
76
75
|
type="button"
|
|
77
76
|
onclick={inc}
|
|
78
77
|
disabled={dis}
|
|
79
78
|
aria-label="Increment"
|
|
80
|
-
class="input-number-increment text-foreground hover:bg-muted disabled:text-muted-foreground flex h-full
|
|
79
|
+
class="input-number-increment text-foreground hover:bg-muted disabled:text-muted-foreground flex h-full aspect-square shrink-0 cursor-pointer items-center justify-center transition-colors disabled:cursor-not-allowed"
|
|
81
80
|
>
|
|
82
81
|
<svg viewBox="0 0 16 16" fill="none" class="h-3 w-3" aria-hidden="true">
|
|
83
82
|
<path d="M8 3v10M3 8h10" stroke="currentColor" stroke-width="1.5" stroke-linecap="round"/>
|
|
@@ -87,28 +86,22 @@
|
|
|
87
86
|
|
|
88
87
|
<!-- ─── Render ────────────────────────────────────────────────────────── -->
|
|
89
88
|
|
|
90
|
-
|
|
91
|
-
{preset}
|
|
92
|
-
as="div"
|
|
93
|
-
class={['input-number-root flex h-full w-full items-center', '$preset', klass]}
|
|
94
|
-
{...restProps}
|
|
95
|
-
>
|
|
96
|
-
{@render decrementSnippet?.({ decrement, disabled: !canDecrement })}
|
|
89
|
+
{@render decrementSnippet?.({ action: handleDecrement, disabled: !canDecrement })}
|
|
97
90
|
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
91
|
+
<input
|
|
92
|
+
type="number"
|
|
93
|
+
bind:value={number}
|
|
94
|
+
{min}
|
|
95
|
+
{max}
|
|
96
|
+
{step}
|
|
97
|
+
{disabled}
|
|
98
|
+
{placeholder}
|
|
99
|
+
oninput={handleInput}
|
|
100
|
+
class={["input-number-field text-foreground placeholder:text-muted-foreground h-full w-full flex-1 bg-transparent text-center text-sm outline-none [appearance:textfield] [&::-webkit-inner-spin-button]:appearance-none [&::-webkit-outer-spin-button]:appearance-none", '$preset', klass]}
|
|
101
|
+
aria-valuemin={min}
|
|
102
|
+
aria-valuemax={max}
|
|
103
|
+
aria-valuenow={number}
|
|
104
|
+
{...restProps}
|
|
105
|
+
/>
|
|
112
106
|
|
|
113
|
-
|
|
114
|
-
</HtmlAtom>
|
|
107
|
+
{@render incrementSnippet?.({ action: handleIncrement, disabled: !canIncrement })}
|
|
@@ -11,7 +11,6 @@
|
|
|
11
11
|
|
|
12
12
|
let {
|
|
13
13
|
value = $bindable(),
|
|
14
|
-
type = 'text',
|
|
15
14
|
class: klass = '',
|
|
16
15
|
placeholder = '',
|
|
17
16
|
disabled = false,
|
|
@@ -31,8 +30,14 @@
|
|
|
31
30
|
function handleInput(ev: Event) {
|
|
32
31
|
const input = ev.currentTarget as HTMLInputElement;
|
|
33
32
|
value = input.value;
|
|
34
|
-
|
|
33
|
+
|
|
35
34
|
oninput?.(ev, { value });
|
|
35
|
+
|
|
36
|
+
if(ev.defaultPrevented) {
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
if (bond) bond.state.props.value = value;
|
|
36
41
|
}
|
|
37
42
|
</script>
|
|
38
43
|
|
|
@@ -44,7 +49,7 @@
|
|
|
44
49
|
if (bond) bond.state.props.value = v;
|
|
45
50
|
}
|
|
46
51
|
}
|
|
47
|
-
type=
|
|
52
|
+
type='text'
|
|
48
53
|
{placeholder}
|
|
49
54
|
{disabled}
|
|
50
55
|
{readonly}
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
let {
|
|
13
13
|
class: klass = '',
|
|
14
14
|
value = $bindable(),
|
|
15
|
-
placeholder = '
|
|
15
|
+
placeholder = '',
|
|
16
16
|
disabled = false,
|
|
17
17
|
readonly = false,
|
|
18
18
|
preset: presetKey = 'input.url',
|
|
@@ -186,7 +186,7 @@
|
|
|
186
186
|
<!-- Offset to match input scroll position -->
|
|
187
187
|
<span style="transform: translateX(-{scrollLeft}px)">
|
|
188
188
|
{#if segments.length}
|
|
189
|
-
{#each segments as seg}
|
|
189
|
+
{#each segments as seg (seg)}
|
|
190
190
|
<span style={kindStyle[seg.kind]}>{seg.text}</span>
|
|
191
191
|
{/each}
|
|
192
192
|
{:else}
|
|
@@ -50,13 +50,13 @@ export interface InputNumberControlProps {
|
|
|
50
50
|
placeholder?: string;
|
|
51
51
|
showControls?: boolean;
|
|
52
52
|
/** Custom decrement button snippet */
|
|
53
|
-
|
|
54
|
-
|
|
53
|
+
decrement?: Snippet<[{
|
|
54
|
+
action: () => void;
|
|
55
55
|
disabled: boolean;
|
|
56
56
|
}]>;
|
|
57
57
|
/** Custom increment button snippet */
|
|
58
|
-
|
|
59
|
-
|
|
58
|
+
increment?: Snippet<[{
|
|
59
|
+
action: () => void;
|
|
60
60
|
disabled: boolean;
|
|
61
61
|
}]>;
|
|
62
62
|
onchange?: (ev?: Event, options?: {
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import { HtmlAtom } from '../atom';
|
|
3
|
+
import type { KbdProps } from './types';
|
|
4
|
+
|
|
5
|
+
let { class: klass = '', children, ...restProps }: KbdProps = $props();
|
|
6
|
+
</script>
|
|
7
|
+
|
|
8
|
+
<HtmlAtom
|
|
9
|
+
preset="kbd"
|
|
10
|
+
as="kbd"
|
|
11
|
+
class={[
|
|
12
|
+
'kbd border-border bg-muted text-foreground inline-flex items-center justify-center rounded-md border px-1.5 py-0.5 font-mono text-xs font-medium shadow-[inset_0_-1px_0] shadow-black/10',
|
|
13
|
+
'$preset',
|
|
14
|
+
klass
|
|
15
|
+
]}
|
|
16
|
+
{...restProps}
|
|
17
|
+
>
|
|
18
|
+
{@render children?.()}
|
|
19
|
+
</HtmlAtom>
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import { HtmlAtom } from '../atom';
|
|
3
|
+
import Kbd from './kbd.svelte';
|
|
4
|
+
import type { ShortcutProps } from './types';
|
|
5
|
+
|
|
6
|
+
let {
|
|
7
|
+
class: klass = '',
|
|
8
|
+
keys = [],
|
|
9
|
+
separator = '+',
|
|
10
|
+
children,
|
|
11
|
+
...restProps
|
|
12
|
+
}: ShortcutProps = $props();
|
|
13
|
+
|
|
14
|
+
let content = $derived(children ?? defaultChildren)
|
|
15
|
+
</script>
|
|
16
|
+
|
|
17
|
+
{#snippet separatorContent()}
|
|
18
|
+
<span class="text-muted-foreground text-xs">{separator}</span>
|
|
19
|
+
{/snippet}
|
|
20
|
+
|
|
21
|
+
{#snippet defaultChildren()}
|
|
22
|
+
{#each keys as key, i ( key )}
|
|
23
|
+
{@const content = i > 0 ? separatorContent : null}
|
|
24
|
+
|
|
25
|
+
{@render content?.()}
|
|
26
|
+
<Kbd>{key}</Kbd>
|
|
27
|
+
{/each}
|
|
28
|
+
{/snippet}
|
|
29
|
+
|
|
30
|
+
<HtmlAtom
|
|
31
|
+
preset="shortcut"
|
|
32
|
+
as="span"
|
|
33
|
+
class={['shortcut inline-flex items-center gap-1', '$preset', klass]}
|
|
34
|
+
aria-label={keys.join(' ' + separator + ' ')}
|
|
35
|
+
{...restProps}
|
|
36
|
+
>
|
|
37
|
+
{@render content()}
|
|
38
|
+
</HtmlAtom>
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { Snippet } from 'svelte';
|
|
2
|
+
import type { HtmlAtomProps } from '../atom';
|
|
3
|
+
export interface KbdExtendProps {
|
|
4
|
+
}
|
|
5
|
+
export interface ShortcutExtendProps {
|
|
6
|
+
}
|
|
7
|
+
export interface KbdProps extends HtmlAtomProps<'kbd'>, KbdExtendProps {
|
|
8
|
+
children?: Snippet<[]>;
|
|
9
|
+
}
|
|
10
|
+
export interface ShortcutProps extends HtmlAtomProps<'span'>, ShortcutExtendProps {
|
|
11
|
+
/**
|
|
12
|
+
* Array of keys to render in sequence, e.g. ['⌘', 'K'] or ['Ctrl', 'Shift', 'P']
|
|
13
|
+
*/
|
|
14
|
+
keys?: string[];
|
|
15
|
+
/**
|
|
16
|
+
* Separator between keys — default '+'
|
|
17
|
+
*/
|
|
18
|
+
separator?: string;
|
|
19
|
+
children?: Snippet<[]>;
|
|
20
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -15,12 +15,6 @@
|
|
|
15
15
|
let {
|
|
16
16
|
class: klass = '',
|
|
17
17
|
children = undefined,
|
|
18
|
-
onmount = undefined,
|
|
19
|
-
ondestroy = undefined,
|
|
20
|
-
animate = undefined,
|
|
21
|
-
enter = undefined,
|
|
22
|
-
exit = undefined,
|
|
23
|
-
initial = undefined,
|
|
24
18
|
...restProps
|
|
25
19
|
}: HtmlAtomProps<E, B> & HTMLAttributes<Element> = $props();
|
|
26
20
|
|
|
@@ -33,12 +27,6 @@
|
|
|
33
27
|
<HtmlAtom
|
|
34
28
|
preset="layer.inner"
|
|
35
29
|
class={['relative size-full', '$preset', klass]}
|
|
36
|
-
enter={enter?.bind(bond.state)}
|
|
37
|
-
exit={exit?.bind(bond.state)}
|
|
38
|
-
initial={initial?.bind(bond.state)}
|
|
39
|
-
animate={animate?.bind(bond.state)}
|
|
40
|
-
onmount={onmount?.bind(bond.state)}
|
|
41
|
-
ondestroy={ondestroy?.bind(bond.state)}
|
|
42
30
|
{...innerProps}
|
|
43
31
|
>
|
|
44
32
|
{@render children?.()}
|
|
@@ -18,12 +18,6 @@
|
|
|
18
18
|
class: klass = '',
|
|
19
19
|
factory = _factory,
|
|
20
20
|
children = undefined,
|
|
21
|
-
onmount = undefined,
|
|
22
|
-
ondestroy = undefined,
|
|
23
|
-
animate = undefined,
|
|
24
|
-
enter = undefined,
|
|
25
|
-
exit = undefined,
|
|
26
|
-
initial = undefined,
|
|
27
21
|
...restProps
|
|
28
22
|
}: HtmlAtomProps<E, B> & HTMLAttributes<Element> = $props();
|
|
29
23
|
|
|
@@ -53,12 +47,6 @@
|
|
|
53
47
|
<HtmlAtom
|
|
54
48
|
preset="layer"
|
|
55
49
|
class={['pointer-events-none absolute inset-0', '$preset', klass]}
|
|
56
|
-
enter={enter?.bind(bond.state)}
|
|
57
|
-
exit={exit?.bind(bond.state)}
|
|
58
|
-
initial={initial?.bind(bond.state)}
|
|
59
|
-
animate={animate?.bind(bond.state)}
|
|
60
|
-
onmount={onmount?.bind(bond.state)}
|
|
61
|
-
ondestroy={ondestroy?.bind(bond.state)}
|
|
62
50
|
{...rootProps}
|
|
63
51
|
>
|
|
64
52
|
{@render children?.()}
|
|
@@ -12,12 +12,6 @@
|
|
|
12
12
|
base = Root as B,
|
|
13
13
|
preset = 'menu.content',
|
|
14
14
|
children = undefined,
|
|
15
|
-
onmount = undefined,
|
|
16
|
-
ondestroy = undefined,
|
|
17
|
-
animate = undefined,
|
|
18
|
-
enter = undefined,
|
|
19
|
-
exit = undefined,
|
|
20
|
-
initial = undefined,
|
|
21
15
|
...restProps
|
|
22
16
|
} = $props();
|
|
23
17
|
</script>
|
|
@@ -28,12 +22,6 @@
|
|
|
28
22
|
{bond}
|
|
29
23
|
{preset}
|
|
30
24
|
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
25
|
{...restProps}
|
|
38
26
|
>
|
|
39
27
|
{@render children?.()}
|
|
@@ -6,12 +6,6 @@ declare function $$render<T extends keyof HTMLElementTagNameMap = 'div', B exten
|
|
|
6
6
|
base?: B;
|
|
7
7
|
preset?: string;
|
|
8
8
|
children?: any;
|
|
9
|
-
onmount?: any;
|
|
10
|
-
ondestroy?: any;
|
|
11
|
-
animate?: any;
|
|
12
|
-
enter?: any;
|
|
13
|
-
exit?: any;
|
|
14
|
-
initial?: any;
|
|
15
9
|
} & Record<string, any>;
|
|
16
10
|
exports: {};
|
|
17
11
|
bindings: "";
|
|
@@ -39,6 +39,7 @@ export type TriggerParams = {
|
|
|
39
39
|
export type PopoverDomElements = {
|
|
40
40
|
trigger: HTMLElement;
|
|
41
41
|
'virtual-trigger'?: BondVirtualElement;
|
|
42
|
+
overlay: HTMLElement;
|
|
42
43
|
content: HTMLElement;
|
|
43
44
|
indicator: HTMLElement;
|
|
44
45
|
arrow: HTMLElement;
|
|
@@ -51,6 +52,8 @@ export declare class PopoverBond<Props extends PopoverStateProps = PopoverStateP
|
|
|
51
52
|
/** Handle for granular access to the virtual trigger reference */
|
|
52
53
|
virtualTrigger(): PopoverVirtualTriggerAtom;
|
|
53
54
|
/** Handle for granular access to content attrs, handlers, and attachment */
|
|
55
|
+
overlay(): PopoverOverlayAtom;
|
|
56
|
+
/** Handle for granular access to content attrs, handlers, and attachment */
|
|
54
57
|
content(): PopoverContentAtom;
|
|
55
58
|
/** Handle for granular access to arrow attrs and attachment */
|
|
56
59
|
arrow(): PopoverArrowAtom;
|
|
@@ -61,8 +64,25 @@ export declare class PopoverBond<Props extends PopoverStateProps = PopoverStateP
|
|
|
61
64
|
static set(bond: PopoverBond): PopoverBond<PopoverStateProps, PopoverState<PopoverStateProps>, PopoverDomElements>;
|
|
62
65
|
}
|
|
63
66
|
export declare class PopoverState<Props extends PopoverStateProps = PopoverStateProps> extends BondState<Props> {
|
|
67
|
+
#private;
|
|
64
68
|
position: ComputePositionReturn | undefined;
|
|
69
|
+
/**
|
|
70
|
+
* Controls whether the positioning strategy should actively compute the
|
|
71
|
+
* popover position. Defaults to `open` when unset, but can be toggled
|
|
72
|
+
* independently to keep computing while the content is hiding, or to
|
|
73
|
+
* start computing on hover before the popover is opened.
|
|
74
|
+
*/
|
|
75
|
+
tracking: boolean | undefined;
|
|
76
|
+
/**
|
|
77
|
+
* A promise that resolves with the next position computation. The promise
|
|
78
|
+
* is renewed after each resolution, so consumers can `await bond.state.computed`
|
|
79
|
+
* repeatedly to wait for subsequent computations.
|
|
80
|
+
*/
|
|
81
|
+
computed: Promise<ComputePositionReturn>;
|
|
65
82
|
constructor(props: () => Props);
|
|
83
|
+
/** Notify awaiters of a fresh computation and renew the promise. */
|
|
84
|
+
notifyComputed(position: ComputePositionReturn): void;
|
|
85
|
+
get shouldTrackPosition(): boolean;
|
|
66
86
|
get isOpen(): boolean;
|
|
67
87
|
open(): void;
|
|
68
88
|
close(): void;
|
|
@@ -84,7 +104,7 @@ export declare class PopoverVirtualTriggerAtom extends BondAtom<PopoverBond, Bon
|
|
|
84
104
|
get element(): BondVirtualElement | undefined;
|
|
85
105
|
set element(element: BondVirtualElement | undefined);
|
|
86
106
|
}
|
|
87
|
-
export declare class
|
|
107
|
+
export declare class PopoverOverlayAtom extends BondAtom<PopoverBond, HTMLElement> {
|
|
88
108
|
constructor(bond: PopoverBond);
|
|
89
109
|
get attrs(): {
|
|
90
110
|
role: string;
|
|
@@ -99,6 +119,14 @@ export declare class PopoverContentAtom extends BondAtom<PopoverBond, HTMLElemen
|
|
|
99
119
|
};
|
|
100
120
|
onmount(node: HTMLElement): void;
|
|
101
121
|
}
|
|
122
|
+
export declare class PopoverContentAtom extends BondAtom<PopoverBond, HTMLElement> {
|
|
123
|
+
constructor(bond: PopoverBond);
|
|
124
|
+
get attrs(): {
|
|
125
|
+
'data-active': boolean;
|
|
126
|
+
};
|
|
127
|
+
get handlers(): {};
|
|
128
|
+
onmount(_node: HTMLElement): void;
|
|
129
|
+
}
|
|
102
130
|
export declare class PopoverIndicatorAtom extends BondAtom<PopoverBond, HTMLElement> {
|
|
103
131
|
constructor(bond: PopoverBond);
|
|
104
132
|
get attrs(): {
|
|
@@ -17,6 +17,10 @@ export class PopoverBond extends Bond {
|
|
|
17
17
|
return this.atom('virtual-trigger', () => new PopoverVirtualTriggerAtom(this));
|
|
18
18
|
}
|
|
19
19
|
/** Handle for granular access to content attrs, handlers, and attachment */
|
|
20
|
+
overlay() {
|
|
21
|
+
return this.atom('overlay', () => new PopoverOverlayAtom(this));
|
|
22
|
+
}
|
|
23
|
+
/** Handle for granular access to content attrs, handlers, and attachment */
|
|
20
24
|
content() {
|
|
21
25
|
return this.atom('content', () => new PopoverContentAtom(this));
|
|
22
26
|
}
|
|
@@ -40,9 +44,37 @@ export class PopoverBond extends Bond {
|
|
|
40
44
|
}
|
|
41
45
|
export class PopoverState extends BondState {
|
|
42
46
|
position = $state();
|
|
47
|
+
/**
|
|
48
|
+
* Controls whether the positioning strategy should actively compute the
|
|
49
|
+
* popover position. Defaults to `open` when unset, but can be toggled
|
|
50
|
+
* independently to keep computing while the content is hiding, or to
|
|
51
|
+
* start computing on hover before the popover is opened.
|
|
52
|
+
*/
|
|
53
|
+
tracking = $state(undefined);
|
|
54
|
+
#computedResolve;
|
|
55
|
+
/**
|
|
56
|
+
* A promise that resolves with the next position computation. The promise
|
|
57
|
+
* is renewed after each resolution, so consumers can `await bond.state.computed`
|
|
58
|
+
* repeatedly to wait for subsequent computations.
|
|
59
|
+
*/
|
|
60
|
+
computed = this.#createComputed();
|
|
43
61
|
constructor(props) {
|
|
44
62
|
super(props);
|
|
45
63
|
}
|
|
64
|
+
#createComputed() {
|
|
65
|
+
return new Promise((resolve) => {
|
|
66
|
+
this.#computedResolve = resolve;
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
/** Notify awaiters of a fresh computation and renew the promise. */
|
|
70
|
+
notifyComputed(position) {
|
|
71
|
+
this.position = position;
|
|
72
|
+
this.#computedResolve(position);
|
|
73
|
+
this.computed = this.#createComputed();
|
|
74
|
+
}
|
|
75
|
+
get shouldTrackPosition() {
|
|
76
|
+
return this.tracking ?? this.isOpen;
|
|
77
|
+
}
|
|
46
78
|
get isOpen() {
|
|
47
79
|
return this.props.open ?? false;
|
|
48
80
|
}
|
|
@@ -91,9 +123,9 @@ export class PopoverVirtualTriggerAtom extends BondAtom {
|
|
|
91
123
|
this.setElement(element);
|
|
92
124
|
}
|
|
93
125
|
}
|
|
94
|
-
export class
|
|
126
|
+
export class PopoverOverlayAtom extends BondAtom {
|
|
95
127
|
constructor(bond) {
|
|
96
|
-
super(bond, '
|
|
128
|
+
super(bond, 'overlay');
|
|
97
129
|
}
|
|
98
130
|
get attrs() {
|
|
99
131
|
const triggerId = getElementId(this.bond.id, `${this.bond.name}-trigger`);
|
|
@@ -140,6 +172,27 @@ export class PopoverContentAtom extends BondAtom {
|
|
|
140
172
|
}
|
|
141
173
|
}
|
|
142
174
|
}
|
|
175
|
+
export class PopoverContentAtom extends BondAtom {
|
|
176
|
+
constructor(bond) {
|
|
177
|
+
super(bond, 'content');
|
|
178
|
+
}
|
|
179
|
+
get attrs() {
|
|
180
|
+
const isOpen = this.bond.state?.props?.open ?? false;
|
|
181
|
+
const isDisabled = this.bond.state?.props?.disabled ?? false;
|
|
182
|
+
const isActive = isOpen && !isDisabled;
|
|
183
|
+
return {
|
|
184
|
+
...super.attrs,
|
|
185
|
+
'data-active': isActive
|
|
186
|
+
};
|
|
187
|
+
}
|
|
188
|
+
get handlers() {
|
|
189
|
+
return {};
|
|
190
|
+
}
|
|
191
|
+
onmount(_node) {
|
|
192
|
+
void _node;
|
|
193
|
+
return;
|
|
194
|
+
}
|
|
195
|
+
}
|
|
143
196
|
export class PopoverIndicatorAtom extends BondAtom {
|
|
144
197
|
constructor(bond) {
|
|
145
198
|
super(bond, 'indicator');
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
export * as Popover from './atoms';
|
|
2
2
|
export { clickoutPopover, popover } from './attachments.svelte';
|
|
3
3
|
export { PopoverBond, type PopoverDomElements, type PopoverParams, PopoverState, type PopoverStateProps, type TriggerParams, PopoverTriggerAtom, PopoverContentAtom, PopoverArrowAtom, PopoverIndicatorAtom, PopoverVirtualTriggerAtom } from './bond.svelte';
|
|
4
|
+
export * from './motion.svelte';
|
|
4
5
|
export * from './types';
|
|
5
6
|
export * from './strategy-types';
|
|
6
7
|
export * as PopoverStrategies from './strategies';
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
export * as Popover from './atoms';
|
|
2
2
|
export { clickoutPopover, popover } from './attachments.svelte';
|
|
3
3
|
export { PopoverBond, PopoverState, PopoverTriggerAtom, PopoverContentAtom, PopoverArrowAtom, PopoverIndicatorAtom, PopoverVirtualTriggerAtom } from './bond.svelte';
|
|
4
|
+
export * from './motion.svelte';
|
|
4
5
|
export * from './types';
|
|
5
6
|
export * from './strategy-types';
|
|
6
7
|
export * as PopoverStrategies from './strategies';
|
|
@@ -13,7 +13,9 @@
|
|
|
13
13
|
let {
|
|
14
14
|
class: klass = '',
|
|
15
15
|
children = undefined,
|
|
16
|
-
|
|
16
|
+
fallback = {
|
|
17
|
+
animate: _animate
|
|
18
|
+
},
|
|
17
19
|
...restProps
|
|
18
20
|
}: PopoverArrowProps<E, B> = $props();
|
|
19
21
|
|
|
@@ -74,9 +76,9 @@
|
|
|
74
76
|
|
|
75
77
|
<HtmlAtom
|
|
76
78
|
{bond}
|
|
79
|
+
{fallback}
|
|
77
80
|
preset="popover.arrow"
|
|
78
81
|
class={['text-border border-border pointer-events-none absolute opacity-0', '$preset', klass]}
|
|
79
|
-
animate={animate?.bind(bond.state)}
|
|
80
82
|
style="{side}: 100%;"
|
|
81
83
|
{...arrowProps}
|
|
82
84
|
>
|