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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (221) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +176 -739
  3. package/dist/attachments/index.d.ts +1 -0
  4. package/dist/attachments/index.js +1 -0
  5. package/dist/components/accordion/accordion-root.svelte +65 -61
  6. package/dist/components/accordion/accordion.stories.svelte +70 -145
  7. package/dist/components/accordion/item/accordion-item-body.svelte +6 -4
  8. package/dist/components/accordion/item/accordion-item-header.svelte +2 -1
  9. package/dist/components/accordion/item/accordion-item-indicator.svelte +2 -1
  10. package/dist/components/accordion/item/accordion-item-root.svelte +2 -1
  11. package/dist/components/accordion/item/bond.svelte.d.ts +2 -0
  12. package/dist/components/accordion/item/index.d.ts +3 -0
  13. package/dist/components/accordion/item/index.js +3 -0
  14. package/dist/components/accordion/item/motion.svelte.d.ts +15 -0
  15. package/dist/components/accordion/item/motion.svelte.js +30 -0
  16. package/dist/components/accordion/item/types.d.ts +7 -24
  17. package/dist/components/alert/alert-close-button.svelte +32 -36
  18. package/dist/components/alert/alert-description.svelte +1 -1
  19. package/dist/components/alert/alert-description.svelte.d.ts +3 -6
  20. package/dist/components/alert/alert-root.svelte +3 -38
  21. package/dist/components/alert/alert-root.svelte.d.ts +2 -2
  22. package/dist/components/alert/alert.stories.svelte +400 -400
  23. package/dist/components/alert/bond.svelte.d.ts +0 -13
  24. package/dist/components/alert/bond.svelte.js +0 -32
  25. package/dist/components/alert/types.d.ts +8 -32
  26. package/dist/components/atom/html-atom.svelte +93 -261
  27. package/dist/components/atom/types.d.ts +3 -2
  28. package/dist/components/atom/utils.d.ts +37 -0
  29. package/dist/components/atom/utils.js +208 -0
  30. package/dist/components/avatar/avatar.stories.svelte +22 -22
  31. package/dist/components/badge/badge.stories.svelte +12 -12
  32. package/dist/components/badge/badge.svelte +19 -19
  33. package/dist/components/breadcrumb/breadcrumb-item.svelte +1 -1
  34. package/dist/components/breadcrumb/breadcrumb-separator.svelte +5 -1
  35. package/dist/components/breadcrumb/breadcrumb.stories.svelte +16 -16
  36. package/dist/components/button/button.stories.svelte +27 -27
  37. package/dist/components/calendar/calendar-day.svelte +9 -4
  38. package/dist/components/calendar/calendar.stories.svelte +26 -26
  39. package/dist/components/card/card-body.svelte +39 -39
  40. package/dist/components/card/card-footer.svelte +41 -41
  41. package/dist/components/card/card-root.svelte +91 -91
  42. package/dist/components/card/card.stories.svelte +133 -133
  43. package/dist/components/checkbox/checkbox.stories.svelte +22 -22
  44. package/dist/components/checkbox/checkbox.svelte +159 -155
  45. package/dist/components/collapsible/bond.svelte.js +2 -1
  46. package/dist/components/collapsible/collapsible-body.svelte +3 -2
  47. package/dist/components/collapsible/collapsible.stories.svelte +172 -172
  48. package/dist/components/collapsible/motion.svelte.d.ts +6 -0
  49. package/dist/components/collapsible/motion.svelte.js +15 -0
  50. package/dist/components/combobox/atoms.d.ts +3 -3
  51. package/dist/components/combobox/atoms.js +3 -3
  52. package/dist/components/combobox/bond.svelte.d.ts +6 -6
  53. package/dist/components/combobox/bond.svelte.js +3 -26
  54. package/dist/components/combobox/combobox-control.svelte +52 -52
  55. package/dist/components/combobox/{compobox-item.svelte → combobox-item.svelte} +62 -68
  56. package/dist/components/combobox/combobox-item.svelte.d.ts +12 -0
  57. package/dist/components/combobox/combobox-root.svelte +65 -65
  58. package/dist/components/combobox/combobox.stories.svelte +50 -0
  59. package/dist/components/combobox/combobox.stories.svelte.d.ts +3 -0
  60. package/dist/components/combobox/index.d.ts +1 -0
  61. package/dist/components/container/container.stories.svelte +20 -20
  62. package/dist/components/container/container.svelte.d.ts +1 -1
  63. package/dist/components/datagrid/datagrid.stories.svelte +72 -72
  64. package/dist/components/datagrid/tr/bond.svelte.d.ts +4 -2
  65. package/dist/components/datagrid/tr/bond.svelte.js +9 -7
  66. package/dist/components/datagrid/tr/datagrid-tr.svelte +9 -7
  67. package/dist/components/date-picker/bond.svelte.d.ts +15 -5
  68. package/dist/components/date-picker/bond.svelte.js +5 -11
  69. package/dist/components/date-picker/date-picker-calendar.svelte +2 -2
  70. package/dist/components/date-picker/date-picker-root.svelte +95 -95
  71. package/dist/components/date-picker/date-picker.stories.svelte +35 -35
  72. package/dist/components/dialog/bond.svelte.d.ts +13 -3
  73. package/dist/components/dialog/bond.svelte.js +52 -6
  74. package/dist/components/dialog/dialog-content.svelte +2 -20
  75. package/dist/components/dialog/dialog-root.svelte +3 -22
  76. package/dist/components/dialog/dialog.stories.svelte +64 -64
  77. package/dist/components/dialog/motion.svelte.d.ts +13 -0
  78. package/dist/components/dialog/motion.svelte.js +44 -0
  79. package/dist/components/drawer/attachments.svelte.d.ts +1 -1
  80. package/dist/components/drawer/attachments.svelte.js +1 -3
  81. package/dist/components/drawer/bond.svelte.d.ts +30 -9
  82. package/dist/components/drawer/bond.svelte.js +80 -24
  83. package/dist/components/drawer/drawer-content.svelte +49 -57
  84. package/dist/components/drawer/drawer-root.svelte +5 -4
  85. package/dist/components/drawer/drawer.stories.svelte +141 -212
  86. package/dist/components/drawer/index.d.ts +2 -0
  87. package/dist/components/drawer/index.js +2 -0
  88. package/dist/components/drawer/motion.d.ts +15 -0
  89. package/dist/components/drawer/motion.js +28 -0
  90. package/dist/components/dropdown/atoms.d.ts +1 -1
  91. package/dist/components/dropdown/atoms.js +1 -1
  92. package/dist/components/dropdown/bond.svelte.d.ts +22 -19
  93. package/dist/components/dropdown/bond.svelte.js +29 -53
  94. package/dist/components/dropdown/dropdown-root.svelte +7 -1
  95. package/dist/components/dropdown/dropdown-values.svelte +17 -17
  96. package/dist/components/dropdown/dropdown-values.svelte.d.ts +1 -2
  97. package/dist/components/dropdown/dropdown.stories.svelte +13 -10
  98. package/dist/components/dropdown/index.d.ts +2 -0
  99. package/dist/components/dropdown/index.js +1 -0
  100. package/dist/components/dropdown/item/attachments.svelte.d.ts +2 -2
  101. package/dist/components/dropdown/item/attachments.svelte.js +2 -2
  102. package/dist/components/dropdown/item/controller.svelte.d.ts +34 -0
  103. package/dist/components/dropdown/item/controller.svelte.js +82 -0
  104. package/dist/components/dropdown/item/dropdown-item.svelte +109 -102
  105. package/dist/components/dropdown/item/dropdown-item.svelte.d.ts +13 -28
  106. package/dist/components/dropdown/item/index.d.ts +3 -0
  107. package/dist/components/dropdown/item/index.js +3 -0
  108. package/dist/components/dropdown/item/types.d.ts +29 -0
  109. package/dist/components/dropdown/item/types.js +1 -0
  110. package/dist/components/form/form.stories.svelte +96 -96
  111. package/dist/components/image/image.stories.svelte +20 -20
  112. package/dist/components/input/input.stories.svelte +35 -35
  113. package/dist/components/label/label.stories.svelte +15 -15
  114. package/dist/components/lazy/lazy.stories.svelte +28 -28
  115. package/dist/components/link/link.stories.svelte +15 -15
  116. package/dist/components/list/list-item.svelte +2 -2
  117. package/dist/components/menu/atoms.d.ts +9 -3
  118. package/dist/components/menu/atoms.js +9 -3
  119. package/dist/components/menu/bond.svelte.d.ts +54 -0
  120. package/dist/components/menu/bond.svelte.js +132 -0
  121. package/dist/components/menu/index.d.ts +3 -1
  122. package/dist/components/menu/index.js +2 -1
  123. package/dist/components/menu/item/controller.svelte.d.ts +26 -0
  124. package/dist/components/menu/item/controller.svelte.js +69 -0
  125. package/dist/components/menu/item/index.d.ts +2 -0
  126. package/dist/components/menu/item/index.js +2 -0
  127. package/dist/components/menu/item/menu-item.svelte +103 -0
  128. package/dist/components/menu/item/menu-item.svelte.d.ts +31 -0
  129. package/dist/components/menu/item/types.d.ts +62 -0
  130. package/dist/components/menu/item/types.js +1 -0
  131. package/dist/components/menu/{menu-list.svelte → menu-content.svelte} +40 -40
  132. package/dist/components/menu/{menu-list.svelte.d.ts → menu-content.svelte.d.ts} +3 -3
  133. package/dist/components/menu/menu-root.svelte +15 -0
  134. package/dist/components/menu/menu-root.svelte.d.ts +8 -0
  135. package/dist/components/menu/menu.stories.svelte +5 -5
  136. package/dist/components/menu/types.d.ts +0 -7
  137. package/dist/components/popover/bond.svelte.d.ts +18 -8
  138. package/dist/components/popover/bond.svelte.js +76 -40
  139. package/dist/components/popover/motion.d.ts +6 -0
  140. package/dist/components/popover/motion.js +56 -0
  141. package/dist/components/popover/popover-arrow.svelte +111 -111
  142. package/dist/components/popover/popover-content.svelte +137 -175
  143. package/dist/components/popover/popover-indicator.svelte +44 -44
  144. package/dist/components/popover/popover-root.svelte +48 -48
  145. package/dist/components/popover/popover.stories.svelte +37 -49
  146. package/dist/components/popover/types.d.ts +9 -7
  147. package/dist/components/portal/active-portal.svelte +12 -5
  148. package/dist/components/portal/active-portal.svelte.d.ts +2 -9
  149. package/dist/components/portal/portal-root.svelte +1 -8
  150. package/dist/components/portal/portal-root.svelte.d.ts +4 -6
  151. package/dist/components/portal/teleport.svelte +1 -2
  152. package/dist/components/portal/teleport.svelte.d.ts +3 -4
  153. package/dist/components/qr-code/qr-code.stories.svelte +18 -18
  154. package/dist/components/radio/radio-group.stories.svelte +41 -41
  155. package/dist/components/radio/radio.stories.svelte +17 -17
  156. package/dist/components/radio/radio.svelte +109 -109
  157. package/dist/components/radio/types.d.ts +98 -0
  158. package/dist/components/radio/types.js +2 -0
  159. package/dist/components/root/index.d.ts +1 -0
  160. package/dist/components/root/index.js +1 -0
  161. package/dist/components/root/l0-portal.svelte +8 -0
  162. package/dist/components/{radio/types.svelte.d.ts → root/l0-portal.svelte.d.ts} +3 -3
  163. package/dist/components/root/l1-portal.svelte +7 -0
  164. package/dist/components/root/l1-portal.svelte.d.ts +26 -0
  165. package/dist/components/root/root.css +119 -119
  166. package/dist/components/root/root.svelte +26 -44
  167. package/dist/components/root/root.svelte.d.ts +2 -6
  168. package/dist/components/root/toasts-portal.svelte +7 -0
  169. package/dist/components/root/toasts-portal.svelte.d.ts +26 -0
  170. package/dist/components/root/types.d.ts +17 -0
  171. package/dist/components/scrollable/scrollable-root.svelte.d.ts +2 -2
  172. package/dist/components/scrollable/scrollable.stories.svelte +116 -116
  173. package/dist/components/sidebar/index.d.ts +2 -0
  174. package/dist/components/sidebar/index.js +2 -0
  175. package/dist/components/sidebar/motion.svelte.d.ts +11 -0
  176. package/dist/components/sidebar/motion.svelte.js +16 -0
  177. package/dist/components/sidebar/sidebar-content.svelte +40 -50
  178. package/dist/components/sidebar/sidebar-root.svelte +39 -39
  179. package/dist/components/sidebar/sidebar.stories.svelte +43 -43
  180. package/dist/components/sidebar/types.d.ts +2 -12
  181. package/dist/components/tabs/tabs.stories.svelte +56 -56
  182. package/dist/components/textarea/atoms.d.ts +1 -0
  183. package/dist/components/textarea/atoms.js +1 -0
  184. package/dist/components/textarea/textarea-input.svelte +4 -1
  185. package/dist/components/textarea/textarea-root.svelte +2 -2
  186. package/dist/components/textarea/textarea-root.svelte.d.ts +2 -0
  187. package/dist/components/tooltip/tooltip-trigger.svelte +39 -39
  188. package/dist/components/tooltip/tooltip-trigger.svelte.d.ts +1 -0
  189. package/dist/components/tooltip/tooltip.stories.svelte +32 -32
  190. package/dist/components/tree/index.d.ts +1 -0
  191. package/dist/components/tree/index.js +1 -0
  192. package/dist/components/tree/motion.svelte.d.ts +6 -0
  193. package/dist/components/tree/motion.svelte.js +14 -0
  194. package/dist/components/tree/tree-body.svelte +4 -3
  195. package/dist/components/tree/tree.stories.svelte +142 -142
  196. package/dist/context/preset.svelte.d.ts +3 -1
  197. package/dist/icons/icon-copy.svelte +6 -0
  198. package/dist/icons/icon-copy.svelte.d.ts +26 -0
  199. package/dist/utils/dom.svelte.d.ts +2 -0
  200. package/dist/utils/dom.svelte.js +21 -0
  201. package/dist/utils/function.d.ts +1 -1
  202. package/dist/utils/promise.svelte.d.ts +5 -0
  203. package/dist/utils/promise.svelte.js +20 -0
  204. package/package.json +4 -3
  205. package/dist/components/combobox/compobox-item.svelte.d.ts +0 -34
  206. package/dist/components/combobox/compobox.stories.svelte +0 -51
  207. package/dist/components/combobox/compobox.stories.svelte.d.ts +0 -3
  208. package/dist/components/dropdown/item/bond.svelte.d.ts +0 -42
  209. package/dist/components/dropdown/item/bond.svelte.js +0 -99
  210. package/dist/components/menu/menu-item.svelte +0 -51
  211. package/dist/components/menu/menu-item.svelte.d.ts +0 -36
  212. package/dist/components/radio/types.svelte +0 -0
  213. package/llm/composition.md +0 -395
  214. package/llm/crafting.md +0 -838
  215. package/llm/motion.md +0 -970
  216. package/llm/philosophy.md +0 -23
  217. package/llm/preset-variant-integration.md +0 -516
  218. package/llm/preset.md +0 -383
  219. package/llm/styling.md +0 -216
  220. package/llm/usage.md +0 -46
  221. package/llm/variants.md +0 -1259
@@ -1,155 +1,159 @@
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>
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
+ disabled = false,
19
+ id,
20
+ name,
21
+ checkedContent,
22
+ indeterminateContent,
23
+ enter,
24
+ exit,
25
+ initial,
26
+ onchange,
27
+ oninput,
28
+ onblur,
29
+ onfocus,
30
+ onclick = undefined,
31
+ ...restProps
32
+ }: CheckboxProps & Exclude<HTMLInputAttributes, 'type'> = $props();
33
+
34
+ let checkboxElement: HTMLInputElement | undefined = $state();
35
+
36
+ // Computed state for visual representation
37
+ const isChecked = $derived(checked === true);
38
+ const isIndeterminate = $derived(indeterminate === true);
39
+ const showCheckmark = $derived(isChecked && !isIndeterminate);
40
+
41
+ function handleChange(ev: Event) {
42
+ onchange?.(ev, {
43
+ checked: checked,
44
+ value: checked,
45
+ type: 'boolean'
46
+ });
47
+ }
48
+
49
+ function handleInput(ev: Event) {
50
+ oninput?.(ev, {
51
+ checked: checked,
52
+ value: checked,
53
+ type: 'boolean'
54
+ });
55
+ }
56
+
57
+ function handleClick(ev: MouseEvent) {
58
+ if (disabled) return;
59
+
60
+ onclick?.(ev);
61
+
62
+ if (ev.defaultPrevented) {
63
+ return;
64
+ }
65
+
66
+ // Handle indeterminate checked → unchecked cycle
67
+ if (indeterminate) {
68
+ // Indeterminate → checked
69
+ indeterminate = false;
70
+ checked = true;
71
+ } else {
72
+ // Toggle checked state
73
+ checked = !checked;
74
+ }
75
+
76
+ // Trigger input event manually if needed
77
+ handleInput(ev);
78
+ }
79
+ </script>
80
+
81
+ <!-- svelte-ignore a11y_click_events_have_key_events -->
82
+ <!-- svelte-ignore a11y_no_noninteractive_element_interactions -->
83
+ <HtmlAtom
84
+ preset="checkbox"
85
+ as="div"
86
+ class={[
87
+ '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',
88
+ isChecked && 'bg-foreground',
89
+ '$preset',
90
+ klass,
91
+ 'relative'
92
+ ]}
93
+ role="checkbox"
94
+ aria-checked={isIndeterminate ? 'mixed' : isChecked}
95
+ {enter}
96
+ {exit}
97
+ {initial}
98
+ onclick={handleClick}
99
+ {...restProps}
100
+ >
101
+ <input
102
+ bind:this={checkboxElement}
103
+ bind:checked
104
+ bind:group
105
+ bind:indeterminate
106
+ {value}
107
+ {id}
108
+ {name}
109
+ {disabled}
110
+ type="checkbox"
111
+ class="checkbox-input pointer-events-none"
112
+ onchange={handleChange}
113
+ oninput={handleInput}
114
+ {onblur}
115
+ {onfocus}
116
+ hidden
117
+ tabindex="-1"
118
+ />
119
+
120
+ {#if isIndeterminate}
121
+ {#if indeterminateContent}
122
+ <HtmlAtom
123
+ preset="checkbox.indeterminate"
124
+ class={[
125
+ 'checkbox-indeterminate pointer-events-none flex size-full scale-50 items-center justify-center rounded-[inherit] bg-current'
126
+ ]}
127
+ base={indeterminateContent}
128
+ />
129
+ {:else}
130
+ <HtmlAtom
131
+ preset="checkbox.indeterminate"
132
+ class={[
133
+ 'checkbox-indeterminate pointer-events-none flex size-full scale-50 items-center justify-center rounded-[inherit] bg-current'
134
+ ]}
135
+ />
136
+ {/if}
137
+ {:else if showCheckmark}
138
+ {#if checkedContent}
139
+ <HtmlAtom
140
+ preset="checkbox.checkmark"
141
+ class={[
142
+ 'checkbox-indicator text-accent pointer-events-none flex h-full content-center items-center justify-center overflow-hidden p-0.5'
143
+ ]}
144
+ base={checkedContent}
145
+ />
146
+ {:else}
147
+ <HtmlAtom
148
+ preset="checkbox.checkmark"
149
+ class={[
150
+ 'checkbox-indicator text-accent pointer-events-none flex h-full content-center items-center justify-center overflow-hidden p-0.5'
151
+ ]}
152
+ enter={(node) => scale(node, { duration: DURATION.fast, easing: circOut, start: 0.6 })}
153
+ exit={(node) => scale(node, { duration: DURATION.fast, easing: circOut, start: 0.6 })}
154
+ >
155
+ <Icon class="h-full p-0" src={CheckmarkRegularIcon} />
156
+ </HtmlAtom>
157
+ {/if}
158
+ {/if}
159
+ </HtmlAtom>
@@ -1,6 +1,7 @@
1
1
  import { createAttachmentKey } from 'svelte/attachments';
2
2
  import { getContext, setContext } from 'svelte';
3
3
  import { Bond, BondState } from '../../shared/bond.svelte';
4
+ import { isBrowser } from '../../utils/dom.svelte.js';
4
5
  export class CollapsibleBond extends Bond {
5
6
  static CONTEXT_KEY = '@atoms/context/collapsible';
6
7
  #parent;
@@ -28,7 +29,7 @@ export class CollapsibleBond extends Bond {
28
29
  header(props = {}) {
29
30
  const isDisabled = this.state?.props?.disabled ?? false;
30
31
  const isOpen = this.state?.props?.open ?? false;
31
- const isButton = this.elements.header instanceof HTMLButtonElement;
32
+ const isButton = isBrowser() && this.elements.header instanceof HTMLButtonElement;
32
33
  return {
33
34
  'aria-disabled': isDisabled ? 'true' : 'false',
34
35
  'aria-expanded': isOpen ? 'true' : 'false',
@@ -1,6 +1,7 @@
1
1
  <script lang="ts" generics="E extends keyof HTMLElementTagNameMap = 'div', B extends Base = Base">
2
2
  import { HtmlAtom, type Base } from '../atom';
3
3
  import { CollapsibleBond } from './bond.svelte';
4
+ import { animateCollapsibleBody } from './motion.svelte';
4
5
  import type { CollapsibleBodyProps } from './types';
5
6
 
6
7
  const bond = CollapsibleBond.get();
@@ -10,10 +11,10 @@
10
11
  children = undefined,
11
12
  onmount = undefined,
12
13
  ondestroy = undefined,
13
- animate = undefined,
14
+ animate = animateCollapsibleBody(),
14
15
  enter = undefined,
15
16
  exit = undefined,
16
- initial = undefined,
17
+ initial = animateCollapsibleBody({ duration: 0 }),
17
18
  ...restProps
18
19
  }: CollapsibleBodyProps<E, B> = $props();
19
20