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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (136) hide show
  1. package/README.md +852 -856
  2. package/dist/attachments/clickout.svelte.d.ts +1 -1
  3. package/dist/attachments/clickout.svelte.js +2 -2
  4. package/dist/components/accordion/accordion-root.svelte +61 -61
  5. package/dist/components/accordion/accordion-root.svelte.d.ts +1 -1
  6. package/dist/components/accordion/accordion.stories.svelte +145 -134
  7. package/dist/components/alert/alert-actions.svelte +43 -43
  8. package/dist/components/alert/alert-close-button.svelte +70 -70
  9. package/dist/components/alert/alert-content.svelte +43 -43
  10. package/dist/components/alert/alert-description.svelte +42 -42
  11. package/dist/components/alert/alert-icon.svelte +47 -47
  12. package/dist/components/alert/alert-root.svelte +103 -103
  13. package/dist/components/alert/alert-title.svelte +42 -42
  14. package/dist/components/alert/alert.stories.svelte +10 -11
  15. package/dist/components/atom/html-atom.svelte +75 -19
  16. package/dist/components/atom/html-atom.svelte.d.ts +1 -1
  17. package/dist/components/atom/snippet-renderer.svelte +5 -5
  18. package/dist/components/avatar/avatar.stories.svelte +22 -27
  19. package/dist/components/badge/badge.stories.svelte +12 -17
  20. package/dist/components/badge/badge.svelte +19 -19
  21. package/dist/components/breadcrumb/breadcrumb.stories.svelte +16 -21
  22. package/dist/components/button/button.stories.svelte +1 -34
  23. package/dist/components/calendar/calendar-body.svelte +107 -107
  24. package/dist/components/calendar/calendar-day.svelte +96 -97
  25. package/dist/components/calendar/calendar-header.svelte +29 -33
  26. package/dist/components/calendar/calendar-header.svelte.d.ts +0 -1
  27. package/dist/components/calendar/calendar-root.svelte +206 -208
  28. package/dist/components/calendar/calendar-week-day.svelte +34 -34
  29. package/dist/components/calendar/calendar.css +26 -26
  30. package/dist/components/calendar/calendar.stories.svelte +10 -20
  31. package/dist/components/calendar/calendar.stories.svelte.d.ts +24 -4
  32. package/dist/components/card/card-body.svelte +39 -39
  33. package/dist/components/card/card-footer.svelte +41 -41
  34. package/dist/components/card/card-root.svelte +91 -91
  35. package/dist/components/card/card.stories.svelte +133 -145
  36. package/dist/components/checkbox/checkbox.stories.svelte +22 -27
  37. package/dist/components/checkbox/checkbox.svelte +155 -157
  38. package/dist/components/collapsible/collapsible.stories.svelte +172 -173
  39. package/dist/components/combobox/combobox-root.svelte +65 -65
  40. package/dist/components/combobox/compobox.stories.svelte +51 -54
  41. package/dist/components/container/container.stories.svelte +20 -23
  42. package/dist/components/datagrid/datagrid-root.svelte +2 -2
  43. package/dist/components/datagrid/datagrid.css +0 -42
  44. package/dist/components/datagrid/datagrid.stories.svelte +72 -75
  45. package/dist/components/datagrid/types.d.ts +1 -1
  46. package/dist/components/date-picker/atoms.d.ts +0 -4
  47. package/dist/components/date-picker/atoms.js +0 -4
  48. package/dist/components/date-picker/date-picker-calendar.svelte +67 -42
  49. package/dist/components/date-picker/date-picker-calendar.svelte.d.ts +2 -5
  50. package/dist/components/date-picker/date-picker-header.svelte +100 -105
  51. package/dist/components/date-picker/date-picker-header.svelte.d.ts +2 -5
  52. package/dist/components/date-picker/date-picker-months.svelte +142 -150
  53. package/dist/components/date-picker/date-picker-months.svelte.d.ts +2 -5
  54. package/dist/components/date-picker/date-picker-root.svelte +4 -3
  55. package/dist/components/date-picker/date-picker-root.svelte.d.ts +2 -15
  56. package/dist/components/date-picker/date-picker-years.svelte +205 -214
  57. package/dist/components/date-picker/date-picker-years.svelte.d.ts +2 -5
  58. package/dist/components/date-picker/date-picker.stories.svelte +15 -31
  59. package/dist/components/date-picker/types.d.ts +53 -1
  60. package/dist/components/dialog/dialog-content.svelte +1 -1
  61. package/dist/components/dialog/dialog.stories.svelte +64 -67
  62. package/dist/components/drawer/attachments.svelte.js +8 -9
  63. package/dist/components/drawer/drawer-content.svelte +57 -42
  64. package/dist/components/drawer/drawer.stories.svelte +212 -224
  65. package/dist/components/dropdown/dropdown-root.svelte +59 -59
  66. package/dist/components/dropdown/dropdown.stories.svelte +80 -83
  67. package/dist/components/element/html-element.svelte +85 -85
  68. package/dist/components/element/types.d.ts +1 -1
  69. package/dist/components/form/form.stories.svelte +96 -99
  70. package/dist/components/image/image.stories.svelte +20 -23
  71. package/dist/components/index.d.ts +1 -0
  72. package/dist/components/index.js +1 -0
  73. package/dist/components/input/input.stories.svelte +35 -38
  74. package/dist/components/label/label.stories.svelte +15 -26
  75. package/dist/components/label/label.stories.svelte.d.ts +24 -4
  76. package/dist/components/lazy/index.d.ts +1 -0
  77. package/dist/components/lazy/index.js +1 -0
  78. package/dist/components/lazy/lazy.stories.svelte +28 -0
  79. package/dist/components/lazy/lazy.stories.svelte.d.ts +19 -0
  80. package/dist/components/lazy/lazy.svelte +28 -0
  81. package/dist/components/lazy/lazy.svelte.d.ts +5 -0
  82. package/dist/components/lazy/types.d.ts +10 -0
  83. package/dist/components/lazy/types.js +1 -0
  84. package/dist/components/link/link.stories.svelte +15 -26
  85. package/dist/components/link/link.stories.svelte.d.ts +24 -4
  86. package/dist/components/menu/menu-list.svelte +2 -1
  87. package/dist/components/menu/menu-list.svelte.d.ts +1 -0
  88. package/dist/components/menu/menu.stories.svelte +33 -36
  89. package/dist/components/popover/bond.svelte.js +31 -25
  90. package/dist/components/popover/popover-arrow.svelte +111 -111
  91. package/dist/components/popover/popover-content.svelte +2 -5
  92. package/dist/components/popover/popover-indicator.svelte +44 -43
  93. package/dist/components/popover/popover-root.svelte +1 -1
  94. package/dist/components/popover/popover.stories.svelte +18 -21
  95. package/dist/components/qr-code/index.d.ts +1 -0
  96. package/dist/components/qr-code/index.js +1 -0
  97. package/dist/components/qr-code/qr-code.stories.svelte +4 -10
  98. package/dist/components/qr-code/qr-code.svelte +75 -25
  99. package/dist/components/qr-code/qr-code.svelte.d.ts +2 -4
  100. package/dist/components/qr-code/types.d.ts +14 -0
  101. package/dist/components/qr-code/types.js +1 -0
  102. package/dist/components/radio/radio-group.stories.svelte +41 -50
  103. package/dist/components/radio/radio.stories.svelte +17 -26
  104. package/dist/components/radio/radio.svelte +109 -109
  105. package/dist/components/root/root.svelte +121 -121
  106. package/dist/components/root/root.svelte.d.ts +1 -1
  107. package/dist/components/scrollable/scrollable.stories.svelte +116 -126
  108. package/dist/components/sidebar/bond.svelte.d.ts +0 -5
  109. package/dist/components/sidebar/bond.svelte.js +1 -12
  110. package/dist/components/sidebar/sidebar-content.svelte +50 -39
  111. package/dist/components/sidebar/sidebar-content.svelte.d.ts +2 -2
  112. package/dist/components/sidebar/sidebar-root.svelte +39 -68
  113. package/dist/components/sidebar/sidebar-root.svelte.d.ts +2 -2
  114. package/dist/components/sidebar/sidebar.stories.svelte +43 -52
  115. package/dist/components/sidebar/types.d.ts +7 -6
  116. package/dist/components/tabs/tab/bond.svelte.d.ts +4 -1
  117. package/dist/components/tabs/tab/bond.svelte.js +4 -1
  118. package/dist/components/tabs/tabs.stories.svelte +56 -59
  119. package/dist/components/tooltip/tooltip-trigger.svelte +39 -37
  120. package/dist/components/tooltip/tooltip.stories.svelte +32 -35
  121. package/dist/components/tree/tree.stories.svelte +142 -134
  122. package/dist/context/preset.svelte.d.ts +3 -3
  123. package/dist/utils/function.d.ts +2 -0
  124. package/dist/utils/function.js +6 -0
  125. package/llm/variants.md +1259 -1261
  126. package/package.json +7 -9
  127. package/dist/actions/animation.svelte.d.ts +0 -6
  128. package/dist/actions/animation.svelte.js +0 -14
  129. package/dist/actions/clickout.svelte.d.ts +0 -2
  130. package/dist/actions/clickout.svelte.js +0 -15
  131. package/dist/actions/popover.svelte.d.ts +0 -19
  132. package/dist/actions/popover.svelte.js +0 -81
  133. package/dist/actions/portal.svelte.d.ts +0 -8
  134. package/dist/actions/portal.svelte.js +0 -32
  135. package/dist/attachments/gsap.svelte.d.ts +0 -2
  136. package/dist/attachments/gsap.svelte.js +0 -26
@@ -1,27 +1,22 @@
1
- <script module>
2
- import { defineMeta } from '@storybook/addon-svelte-csf';
3
- import { default as CheckboxCmp } from './checkbox.svelte';
4
- import Root from '../root/root.svelte';
5
-
6
- const { Story } = defineMeta({
7
- title: 'ATOMS/Checkbox'
8
- });
9
- </script>
10
-
11
- <script>
12
- let checked = $state(false);
13
- </script>
14
-
15
- <Story name="Checkbox">
16
- {#snippet children({ args })}
17
- <Root class="p-4">
18
- {#snippet children({})}
19
- <div class="flex gap-2">
20
- <CheckboxCmp bind:checked />
21
-
22
- <CheckboxCmp indeterminate />
23
- </div>
24
- {/snippet}
25
- </Root>
26
- {/snippet}
27
- </Story>
1
+ <script module>
2
+ import { defineMeta } from '@storybook/addon-svelte-csf';
3
+ import { default as CheckboxCmp } from './checkbox.svelte';
4
+
5
+ const { Story } = defineMeta({
6
+ title: 'ATOMS/Checkbox'
7
+ });
8
+ </script>
9
+
10
+ <script>
11
+ let checked = $state(false);
12
+ </script>
13
+
14
+ <Story name="Checkbox">
15
+ {#snippet children({ args })}
16
+ <div class="flex gap-2">
17
+ <CheckboxCmp bind:checked />
18
+
19
+ <CheckboxCmp indeterminate />
20
+ </div>
21
+ {/snippet}
22
+ </Story>
@@ -1,157 +1,155 @@
1
- <script lang="ts">
2
- import { circOut } from 'svelte/easing';
3
- import type { HTMLInputAttributes } from 'svelte/elements';
4
- import { scale } from 'svelte/transition';
5
- import { Icon } from '../icon';
6
- import { HtmlAtom } from '../atom';
7
- import CheckmarkRegularIcon from '../../icons/icon-checkmark.svelte';
8
- import { DURATION } from '../../shared';
9
- import type { CheckboxProps } from './types';
10
- import './checkbox.css';
11
-
12
- let {
13
- class: klass = '',
14
- checked = $bindable(false),
15
- indeterminate = $bindable(false),
16
- value = $bindable(undefined),
17
- group = $bindable([]),
18
- id,
19
- name,
20
- checkedContent,
21
- indeterminateContent,
22
- enter,
23
- exit,
24
- initial,
25
- onchange,
26
- oninput,
27
- onblur,
28
- onfocus,
29
- onclick = undefined,
30
- ...restProps
31
- }: CheckboxProps & Exclude<HTMLInputAttributes, 'type'> = $props();
32
-
33
- let checkboxElement: HTMLInputElement | undefined = $state();
34
-
35
- // Computed state for visual representation
36
- const isChecked = $derived(checked === true);
37
- const isIndeterminate = $derived(indeterminate === true);
38
- const showCheckmark = $derived(isChecked && !isIndeterminate);
39
-
40
- function handleChange(ev: Event) {
41
- onchange?.(ev, {
42
- checked: checked,
43
- value: checked,
44
- type: 'boolean'
45
- });
46
- }
47
-
48
- function handleInput(ev: Event) {
49
- oninput?.(ev, {
50
- checked: checked,
51
- value: checked,
52
- type: 'boolean'
53
- });
54
- }
55
-
56
- function handleClick(ev: MouseEvent) {
57
- onclick?.(ev);
58
-
59
- if (ev.defaultPrevented) {
60
- return;
61
- }
62
-
63
- // Handle indeterminate → checked → unchecked cycle
64
- if (indeterminate) {
65
- // Indeterminate → checked
66
- indeterminate = false;
67
- checked = true;
68
- } else {
69
- // Toggle checked state
70
- checked = !checked;
71
- }
72
-
73
- // Trigger input event manually if needed
74
- handleInput(ev);
75
- }
76
- </script>
77
-
78
- <!-- svelte-ignore a11y_click_events_have_key_events -->
79
- <!-- svelte-ignore a11y_no_noninteractive_element_interactions -->
80
- <HtmlAtom
81
- preset="checkbox"
82
- as="div"
83
- class={[
84
- 'checkbox-root border-border outline-primary bg-input text-foreground aspect-square h-5 w-fit cursor-pointer rounded-sm border outline-0 outline-offset-2 transition-colors duration-100',
85
- isChecked && 'bg-foreground',
86
- '$preset',
87
- klass,
88
- 'relative'
89
- ]}
90
- role="checkbox"
91
- aria-checked={isIndeterminate ? 'mixed' : isChecked}
92
- {enter}
93
- {exit}
94
- {initial}
95
- onclick={handleClick}
96
- {...restProps}
97
- >
98
- <input
99
- bind:this={checkboxElement}
100
- bind:checked
101
- bind:group
102
- bind:indeterminate
103
- type="checkbox"
104
- class="checkbox-input pointer-events-none"
105
- {value}
106
- {id}
107
- {name}
108
- onchange={handleChange}
109
- oninput={handleInput}
110
- {onblur}
111
- {onfocus}
112
- hidden
113
- tabindex="-1"
114
- />
115
-
116
- {#if isIndeterminate}
117
- {#if indeterminateContent}
118
- <HtmlAtom
119
- preset="checkbox.indeterminate"
120
- class={[
121
- 'checkbox-indeterminate pointer-events-none flex size-full items-center justify-center p-1'
122
- ]}
123
- base={indeterminateContent}
124
- />
125
- {:else}
126
- <HtmlAtom
127
- preset="checkbox.indeterminate"
128
- class={[
129
- 'checkbox-indeterminate text-foreground pointer-events-none flex size-full items-center justify-center p-1'
130
- ]}
131
- >
132
- <div class={['size-full rounded-xs bg-current']}></div>
133
- </HtmlAtom>
134
- {/if}
135
- {:else if showCheckmark}
136
- {#if checkedContent}
137
- <HtmlAtom
138
- preset="checkbox.checkmark"
139
- class={[
140
- 'checkbox-indicator text-accent pointer-events-none flex h-full content-center items-center justify-center overflow-hidden p-0.5'
141
- ]}
142
- base={checkedContent}
143
- />
144
- {:else}
145
- <HtmlAtom
146
- preset="checkbox.checkmark"
147
- class={[
148
- 'checkbox-indicator text-accent pointer-events-none flex h-full content-center items-center justify-center overflow-hidden p-0.5'
149
- ]}
150
- enter={(node) => scale(node, { duration: DURATION.fast, easing: circOut, start: 0.6 })}
151
- exit={(node) => scale(node, { duration: DURATION.fast, easing: circOut, start: 0.6 })}
152
- >
153
- <Icon class="h-full p-0" src={CheckmarkRegularIcon} />
154
- </HtmlAtom>
155
- {/if}
156
- {/if}
157
- </HtmlAtom>
1
+ <script lang="ts">
2
+ import { circOut } from 'svelte/easing';
3
+ import type { HTMLInputAttributes } from 'svelte/elements';
4
+ import { scale } from 'svelte/transition';
5
+ import { Icon } from '../icon';
6
+ import { HtmlAtom } from '../atom';
7
+ import CheckmarkRegularIcon from '../../icons/icon-checkmark.svelte';
8
+ import { DURATION } from '../../shared';
9
+ import type { CheckboxProps } from './types';
10
+ import './checkbox.css';
11
+
12
+ let {
13
+ class: klass = '',
14
+ checked = $bindable(false),
15
+ indeterminate = $bindable(false),
16
+ value = $bindable(undefined),
17
+ group = $bindable([]),
18
+ id,
19
+ name,
20
+ checkedContent,
21
+ indeterminateContent,
22
+ enter,
23
+ exit,
24
+ initial,
25
+ onchange,
26
+ oninput,
27
+ onblur,
28
+ onfocus,
29
+ onclick = undefined,
30
+ ...restProps
31
+ }: CheckboxProps & Exclude<HTMLInputAttributes, 'type'> = $props();
32
+
33
+ let checkboxElement: HTMLInputElement | undefined = $state();
34
+
35
+ // Computed state for visual representation
36
+ const isChecked = $derived(checked === true);
37
+ const isIndeterminate = $derived(indeterminate === true);
38
+ const showCheckmark = $derived(isChecked && !isIndeterminate);
39
+
40
+ function handleChange(ev: Event) {
41
+ onchange?.(ev, {
42
+ checked: checked,
43
+ value: checked,
44
+ type: 'boolean'
45
+ });
46
+ }
47
+
48
+ function handleInput(ev: Event) {
49
+ oninput?.(ev, {
50
+ checked: checked,
51
+ value: checked,
52
+ type: 'boolean'
53
+ });
54
+ }
55
+
56
+ function handleClick(ev: MouseEvent) {
57
+ onclick?.(ev);
58
+
59
+ if (ev.defaultPrevented) {
60
+ return;
61
+ }
62
+
63
+ // Handle indeterminate → checked → unchecked cycle
64
+ if (indeterminate) {
65
+ // Indeterminate → checked
66
+ indeterminate = false;
67
+ checked = true;
68
+ } else {
69
+ // Toggle checked state
70
+ checked = !checked;
71
+ }
72
+
73
+ // Trigger input event manually if needed
74
+ handleInput(ev);
75
+ }
76
+ </script>
77
+
78
+ <!-- svelte-ignore a11y_click_events_have_key_events -->
79
+ <!-- svelte-ignore a11y_no_noninteractive_element_interactions -->
80
+ <HtmlAtom
81
+ preset="checkbox"
82
+ as="div"
83
+ class={[
84
+ 'checkbox-root border-border outline-primary bg-input text-foreground aspect-square h-5 w-fit cursor-pointer rounded-sm border outline-0 outline-offset-2 transition-colors duration-100',
85
+ isChecked && 'bg-foreground',
86
+ '$preset',
87
+ klass,
88
+ 'relative'
89
+ ]}
90
+ role="checkbox"
91
+ aria-checked={isIndeterminate ? 'mixed' : isChecked}
92
+ {enter}
93
+ {exit}
94
+ {initial}
95
+ onclick={handleClick}
96
+ {...restProps}
97
+ >
98
+ <input
99
+ bind:this={checkboxElement}
100
+ bind:checked
101
+ bind:group
102
+ bind:indeterminate
103
+ type="checkbox"
104
+ class="checkbox-input pointer-events-none"
105
+ {value}
106
+ {id}
107
+ {name}
108
+ onchange={handleChange}
109
+ oninput={handleInput}
110
+ {onblur}
111
+ {onfocus}
112
+ hidden
113
+ tabindex="-1"
114
+ />
115
+
116
+ {#if isIndeterminate}
117
+ {#if indeterminateContent}
118
+ <HtmlAtom
119
+ preset="checkbox.indeterminate"
120
+ class={[
121
+ 'checkbox-indeterminate pointer-events-none flex size-full scale-50 items-center justify-center rounded-[inherit] bg-current'
122
+ ]}
123
+ base={indeterminateContent}
124
+ />
125
+ {:else}
126
+ <HtmlAtom
127
+ preset="checkbox.indeterminate"
128
+ class={[
129
+ 'checkbox-indeterminate pointer-events-none flex size-full scale-50 items-center justify-center rounded-[inherit] bg-current'
130
+ ]}
131
+ />
132
+ {/if}
133
+ {:else if showCheckmark}
134
+ {#if checkedContent}
135
+ <HtmlAtom
136
+ preset="checkbox.checkmark"
137
+ class={[
138
+ 'checkbox-indicator text-accent pointer-events-none flex h-full content-center items-center justify-center overflow-hidden p-0.5'
139
+ ]}
140
+ base={checkedContent}
141
+ />
142
+ {:else}
143
+ <HtmlAtom
144
+ preset="checkbox.checkmark"
145
+ class={[
146
+ 'checkbox-indicator text-accent pointer-events-none flex h-full content-center items-center justify-center overflow-hidden p-0.5'
147
+ ]}
148
+ enter={(node) => scale(node, { duration: DURATION.fast, easing: circOut, start: 0.6 })}
149
+ exit={(node) => scale(node, { duration: DURATION.fast, easing: circOut, start: 0.6 })}
150
+ >
151
+ <Icon class="h-full p-0" src={CheckmarkRegularIcon} />
152
+ </HtmlAtom>
153
+ {/if}
154
+ {/if}
155
+ </HtmlAtom>