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

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 (163) hide show
  1. package/README.md +856 -645
  2. package/dist/components/accordion/accordion-root.svelte +61 -61
  3. package/dist/components/accordion/item/accordion-item-body.svelte +42 -42
  4. package/dist/components/accordion/item/accordion-item-header.svelte +50 -50
  5. package/dist/components/accordion/item/accordion-item-indicator.svelte +50 -50
  6. package/dist/components/accordion/item/accordion-item-root.svelte +65 -65
  7. package/dist/components/alert/alert-actions.svelte +2 -1
  8. package/dist/components/alert/alert-close-button.svelte +18 -20
  9. package/dist/components/alert/alert-content.svelte +2 -1
  10. package/dist/components/alert/alert-description.svelte +2 -1
  11. package/dist/components/alert/alert-icon.svelte +2 -1
  12. package/dist/components/alert/alert-root.svelte +3 -2
  13. package/dist/components/alert/alert-title.svelte +2 -1
  14. package/dist/components/alert/alert.stories.svelte +401 -40
  15. package/dist/components/alert/alert.stories.svelte.d.ts +2 -5
  16. package/dist/components/atom/html-atom.svelte +205 -201
  17. package/dist/components/atom/snippet-renderer.svelte +5 -0
  18. package/dist/components/atom/snippet-renderer.svelte.d.ts +5 -0
  19. package/dist/components/avatar/avatar.stories.svelte.d.ts +1 -1
  20. package/dist/components/badge/badge.stories.svelte.d.ts +1 -1
  21. package/dist/components/breadcrumb/breadcrumb.stories.svelte.d.ts +1 -1
  22. package/dist/components/button/button.stories.svelte +60 -57
  23. package/dist/components/calendar/atoms.d.ts +5 -0
  24. package/dist/components/calendar/atoms.js +5 -0
  25. package/dist/components/calendar/bond.svelte.d.ts +72 -0
  26. package/dist/components/calendar/bond.svelte.js +132 -0
  27. package/dist/components/calendar/calendar-body.svelte +107 -0
  28. package/dist/components/calendar/calendar-body.svelte.d.ts +8 -0
  29. package/dist/components/calendar/calendar-day.svelte +97 -0
  30. package/dist/components/calendar/calendar-day.svelte.d.ts +4 -0
  31. package/dist/components/calendar/calendar-header.svelte +33 -0
  32. package/dist/components/calendar/calendar-header.svelte.d.ts +7 -0
  33. package/dist/components/calendar/calendar-root.svelte +208 -0
  34. package/dist/components/calendar/calendar-root.svelte.d.ts +8 -0
  35. package/dist/components/calendar/calendar-week-day.svelte +34 -0
  36. package/dist/components/calendar/calendar-week-day.svelte.d.ts +9 -0
  37. package/dist/components/calendar/calendar.css +26 -0
  38. package/dist/components/calendar/calendar.stories.svelte +36 -0
  39. package/dist/components/calendar/calendar.stories.svelte.d.ts +6 -0
  40. package/dist/components/calendar/index.d.ts +4 -0
  41. package/dist/components/calendar/index.js +4 -0
  42. package/dist/components/calendar/runes.svelte.d.ts +3 -0
  43. package/dist/components/calendar/runes.svelte.js +25 -0
  44. package/dist/components/calendar/types.d.ts +62 -0
  45. package/dist/components/calendar/types.js +1 -0
  46. package/dist/components/card/card-body.svelte +39 -39
  47. package/dist/components/card/card-description.svelte +41 -41
  48. package/dist/components/card/card-footer.svelte +41 -41
  49. package/dist/components/card/card-header.svelte +41 -41
  50. package/dist/components/card/card-media.svelte +41 -41
  51. package/dist/components/card/card-root.svelte +91 -91
  52. package/dist/components/card/card-subtitle.svelte +41 -41
  53. package/dist/components/card/card-title.svelte +45 -45
  54. package/dist/components/collapsible/collapsible-body.svelte +39 -39
  55. package/dist/components/collapsible/collapsible-header.svelte +39 -39
  56. package/dist/components/collapsible/collapsible-indicator.svelte +50 -50
  57. package/dist/components/collapsible/collapsible-root.svelte +66 -66
  58. package/dist/components/combobox/combobox-root.svelte +65 -65
  59. package/dist/components/container/container.stories.svelte.d.ts +1 -1
  60. package/dist/components/contextmenu/contextmenu-trigger.svelte.d.ts +1 -1
  61. package/dist/components/datagrid/bond.svelte.d.ts +2 -2
  62. package/dist/components/datagrid/datagrid-body.svelte +37 -37
  63. package/dist/components/datagrid/datagrid-checkbox.svelte +101 -101
  64. package/dist/components/datagrid/datagrid-footer.svelte +34 -34
  65. package/dist/components/datagrid/datagrid-header.svelte +49 -49
  66. package/dist/components/datagrid/datagrid-root.svelte +59 -59
  67. package/dist/components/datagrid/td/datagrid-td.svelte +66 -66
  68. package/dist/components/datagrid/th/datagrid-th.svelte +106 -106
  69. package/dist/components/datagrid/tr/datagrid-tr.svelte +88 -88
  70. package/dist/components/date-picker/atoms.d.ts +7 -0
  71. package/dist/components/date-picker/atoms.js +7 -0
  72. package/dist/components/date-picker/bond.svelte.d.ts +67 -0
  73. package/dist/components/date-picker/bond.svelte.js +174 -0
  74. package/dist/components/date-picker/date-picker-calendar.svelte +42 -0
  75. package/dist/components/date-picker/date-picker-calendar.svelte.d.ts +7 -0
  76. package/dist/components/date-picker/date-picker-header.svelte +105 -0
  77. package/dist/components/date-picker/date-picker-header.svelte.d.ts +7 -0
  78. package/dist/components/date-picker/date-picker-months.svelte +150 -0
  79. package/dist/components/date-picker/date-picker-months.svelte.d.ts +7 -0
  80. package/dist/components/date-picker/date-picker-root.svelte +94 -0
  81. package/dist/components/date-picker/date-picker-root.svelte.d.ts +17 -0
  82. package/dist/components/date-picker/date-picker-years.svelte +214 -0
  83. package/dist/components/date-picker/date-picker-years.svelte.d.ts +7 -0
  84. package/dist/components/date-picker/date-picker.stories.svelte +51 -0
  85. package/dist/components/date-picker/date-picker.stories.svelte.d.ts +3 -0
  86. package/dist/components/date-picker/index.d.ts +3 -0
  87. package/dist/components/date-picker/index.js +3 -0
  88. package/dist/components/date-picker/types.d.ts +1 -0
  89. package/dist/components/date-picker/types.js +1 -0
  90. package/dist/components/dialog/dialog-body.svelte +39 -39
  91. package/dist/components/dialog/dialog-close-button.svelte +58 -58
  92. package/dist/components/dialog/dialog-content.svelte +62 -62
  93. package/dist/components/dialog/dialog-description.svelte +40 -40
  94. package/dist/components/dialog/dialog-footer.svelte +39 -39
  95. package/dist/components/dialog/dialog-header.svelte +39 -39
  96. package/dist/components/dialog/dialog-root.svelte +110 -110
  97. package/dist/components/dialog/dialog-title.svelte +41 -41
  98. package/dist/components/drawer/drawer-backdrop.svelte +38 -38
  99. package/dist/components/drawer/drawer-body.svelte +42 -42
  100. package/dist/components/drawer/drawer-content.svelte +42 -42
  101. package/dist/components/drawer/drawer-description.svelte +44 -44
  102. package/dist/components/drawer/drawer-footer.svelte +41 -41
  103. package/dist/components/drawer/drawer-header.svelte +43 -43
  104. package/dist/components/drawer/drawer-root.svelte +93 -93
  105. package/dist/components/drawer/drawer-title.svelte +44 -44
  106. package/dist/components/dropdown/dropdown-query.svelte +54 -54
  107. package/dist/components/dropdown/dropdown-root.svelte +59 -59
  108. package/dist/components/dropdown/dropdown-trigger.svelte +41 -41
  109. package/dist/components/dropdown/dropdown-value.svelte +60 -60
  110. package/dist/components/element/html-element.svelte +85 -85
  111. package/dist/components/form/bond.svelte.d.ts +1 -1
  112. package/dist/components/form/field/field-control.svelte +48 -48
  113. package/dist/components/form/field/field-label.svelte +24 -24
  114. package/dist/components/form/field/field-root.svelte +59 -59
  115. package/dist/components/icon/icon.svelte +44 -44
  116. package/dist/components/image/image.stories.svelte.d.ts +1 -1
  117. package/dist/components/index.d.ts +3 -0
  118. package/dist/components/index.js +3 -0
  119. package/dist/components/input/input-control.svelte +103 -103
  120. package/dist/components/label/label.svelte +25 -25
  121. package/dist/components/popover/popover-arrow.svelte +111 -111
  122. package/dist/components/popover/popover-content.svelte +46 -7
  123. package/dist/components/popover/popover-root.svelte +48 -49
  124. package/dist/components/popover/popover.stories.svelte +52 -67
  125. package/dist/components/portal/portal-root.svelte +83 -83
  126. package/dist/components/portal/teleport.svelte +50 -50
  127. package/dist/components/qr-code/index.d.ts +1 -0
  128. package/dist/components/qr-code/index.js +1 -0
  129. package/dist/components/qr-code/qr-code.stories.svelte +24 -0
  130. package/dist/components/qr-code/qr-code.stories.svelte.d.ts +26 -0
  131. package/dist/components/qr-code/qr-code.svelte +25 -0
  132. package/dist/components/qr-code/qr-code.svelte.d.ts +6 -0
  133. package/dist/components/radio/radio.svelte +109 -109
  134. package/dist/components/radio/types.svelte.d.ts +1 -1
  135. package/dist/components/scrollable/scrollable-container.svelte +82 -82
  136. package/dist/components/scrollable/scrollable-content.svelte +41 -41
  137. package/dist/components/scrollable/scrollable-root.svelte +100 -100
  138. package/dist/components/scrollable/scrollable-thumb.svelte +75 -75
  139. package/dist/components/scrollable/scrollable-track.svelte +59 -59
  140. package/dist/components/scrollable/scrollable.stories.svelte.d.ts +1 -1
  141. package/dist/components/tabs/tab/tab-body.svelte +52 -52
  142. package/dist/components/tabs/tab/tab-description.svelte +41 -41
  143. package/dist/components/tabs/tab/tab-header.svelte +71 -71
  144. package/dist/components/tabs/tab/tab-root.svelte +86 -86
  145. package/dist/components/toast/toast-description.svelte +38 -38
  146. package/dist/components/toast/toast-root.svelte +61 -61
  147. package/dist/components/toast/toast-title.svelte +35 -35
  148. package/dist/components/tree/tree-body.svelte +39 -39
  149. package/dist/components/tree/tree-header.svelte +54 -54
  150. package/dist/components/tree/tree-indicator.svelte +40 -40
  151. package/dist/components/tree/tree-root.svelte +65 -65
  152. package/dist/components/virtual/virtual-root.svelte +239 -239
  153. package/dist/context/preset.svelte.d.ts +1 -1
  154. package/dist/icons/icon-arrow-down.svelte.d.ts +1 -1
  155. package/dist/icons/icon-checkmark.svelte.d.ts +1 -1
  156. package/dist/icons/icon-close.svelte.d.ts +1 -1
  157. package/dist/icons/icon-more-vert.svelte.d.ts +1 -1
  158. package/dist/runes/container.svelte.d.ts +2 -2
  159. package/dist/shared/bond.svelte.d.ts +1 -1
  160. package/dist/utils/state.d.ts +1 -1
  161. package/dist/utils/state.js +2 -1
  162. package/llm/variants.md +1261 -712
  163. package/package.json +464 -437
@@ -1,61 +1,61 @@
1
- <script lang="ts" generics="E extends keyof HTMLElementTagNameMap = 'div', B extends Base = Base">
2
- import { AccordionBond, AccordionState, type AccordionStateProps } from './bond.svelte';
3
- import { defineProperty, defineState } from '../../utils';
4
- import { HtmlAtom, type Base } from '../atom';
5
- import type { AccordionRootProps } from './types';
6
-
7
- let {
8
- value = $bindable(undefined),
9
- values = $bindable([]),
10
- data = $bindable([]),
11
- class: klass = '',
12
- multiple = false,
13
- collapsible = false,
14
- disabled = false,
15
- children = undefined,
16
- factory = _factory,
17
- onmount = undefined,
18
- ondestroy = undefined,
19
- animate = undefined,
20
- enter = undefined,
21
- exit = undefined,
22
- initial = undefined,
23
- ...restProps
24
- }: AccordionRootProps<E, B> = $props();
25
-
26
- const bondProps = defineState<AccordionStateProps>([
27
- defineProperty(
28
- 'values',
29
- () => (multiple ? values : ([value].filter(Boolean) as string[])),
30
- (v) => {
31
- values = v;
32
- value = values[0];
33
- }
34
- )
35
- ]);
36
- const bond = factory(bondProps).share();
37
-
38
- const rootProps = $derived({
39
- ...bond.root(),
40
- ...restProps
41
- });
42
-
43
- function _factory(props: typeof bondProps = bondProps) {
44
- const bondState = new AccordionState(() => props);
45
-
46
- return new AccordionBond(bondState);
47
- }
48
-
49
- export function getBond() {
50
- return bond;
51
- }
52
- </script>
53
-
54
- <HtmlAtom
55
- preset="accordion"
56
- class={['bg-card border-border flex list-none flex-col', '$preset', klass]}
57
- {bond}
58
- {...rootProps}
59
- >
60
- {@render children?.({ accordion: bond })}
61
- </HtmlAtom>
1
+ <script lang="ts" generics="E extends keyof HTMLElementTagNameMap = 'div', B extends Base = Base">
2
+ import { AccordionBond, AccordionState, type AccordionStateProps } from './bond.svelte';
3
+ import { defineProperty, defineState } from '../../utils';
4
+ import { HtmlAtom, type Base } from '../atom';
5
+ import type { AccordionRootProps } from './types';
6
+
7
+ let {
8
+ value = $bindable(undefined),
9
+ values = $bindable([]),
10
+ data = $bindable([]),
11
+ class: klass = '',
12
+ multiple = false,
13
+ collapsible = false,
14
+ disabled = false,
15
+ children = undefined,
16
+ factory = _factory,
17
+ onmount = undefined,
18
+ ondestroy = undefined,
19
+ animate = undefined,
20
+ enter = undefined,
21
+ exit = undefined,
22
+ initial = undefined,
23
+ ...restProps
24
+ }: AccordionRootProps<E, B> = $props();
25
+
26
+ const bondProps = defineState<AccordionStateProps>([
27
+ defineProperty(
28
+ 'values',
29
+ () => (multiple ? values : ([value].filter(Boolean) as string[])),
30
+ (v) => {
31
+ values = v;
32
+ value = values[0];
33
+ }
34
+ )
35
+ ]);
36
+ const bond = factory(bondProps).share();
37
+
38
+ const rootProps = $derived({
39
+ ...bond.root(),
40
+ ...restProps
41
+ });
42
+
43
+ function _factory(props: typeof bondProps = bondProps) {
44
+ const bondState = new AccordionState(() => props);
45
+
46
+ return new AccordionBond(bondState);
47
+ }
48
+
49
+ export function getBond() {
50
+ return bond;
51
+ }
52
+ </script>
53
+
54
+ <HtmlAtom
55
+ preset="accordion"
56
+ class={['bg-card border-border flex list-none flex-col', '$preset', klass]}
57
+ {bond}
58
+ {...rootProps}
59
+ >
60
+ {@render children?.({ accordion: bond })}
61
+ </HtmlAtom>
@@ -1,42 +1,42 @@
1
- <script lang="ts" generics="E extends keyof HTMLElementTagNameMap = 'div', B extends Base = Base">
2
- import { HtmlAtom, type Base } from '../../atom';
3
- import { AccordionItemBond } from './bond.svelte';
4
- import type { AccordionItemBodyProps } from './types';
5
-
6
- const bond = AccordionItemBond.get();
7
- const isOpen = $derived(bond?.state.isOpen ?? false);
8
-
9
- let {
10
- class: klass = '',
11
- children = undefined,
12
- onmount = undefined,
13
- ondestroy = undefined,
14
- animate = undefined,
15
- enter = undefined,
16
- exit = undefined,
17
- initial = undefined,
18
- ...restProps
19
- }: AccordionItemBodyProps<E, B> = $props();
20
-
21
- const bodyProps = $derived({
22
- ...bond?.body(),
23
- ...restProps
24
- });
25
- </script>
26
-
27
- {#if isOpen}
28
- <HtmlAtom
29
- preset="accordion.item.body"
30
- class={['border-border box-content', '$preset', klass]}
31
- {bond}
32
- onmount={onmount?.bind(bond.state)}
33
- ondestroy={ondestroy?.bind(bond.state)}
34
- animate={animate?.bind(bond.state)}
35
- enter={enter?.bind(bond.state)}
36
- exit={exit?.bind(bond.state)}
37
- initial={initial?.bind(bond.state)}
38
- {...bodyProps}
39
- >
40
- {@render children?.({ accordionItem: bond })}
41
- </HtmlAtom>
42
- {/if}
1
+ <script lang="ts" generics="E extends keyof HTMLElementTagNameMap = 'div', B extends Base = Base">
2
+ import { HtmlAtom, type Base } from '../../atom';
3
+ import { AccordionItemBond } from './bond.svelte';
4
+ import type { AccordionItemBodyProps } from './types';
5
+
6
+ const bond = AccordionItemBond.get();
7
+ const isOpen = $derived(bond?.state.isOpen ?? false);
8
+
9
+ let {
10
+ class: klass = '',
11
+ children = undefined,
12
+ onmount = undefined,
13
+ ondestroy = undefined,
14
+ animate = undefined,
15
+ enter = undefined,
16
+ exit = undefined,
17
+ initial = undefined,
18
+ ...restProps
19
+ }: AccordionItemBodyProps<E, B> = $props();
20
+
21
+ const bodyProps = $derived({
22
+ ...bond?.body(),
23
+ ...restProps
24
+ });
25
+ </script>
26
+
27
+ {#if isOpen}
28
+ <HtmlAtom
29
+ preset="accordion.item.body"
30
+ class={['border-border box-content', '$preset', klass]}
31
+ {bond}
32
+ onmount={onmount?.bind(bond.state)}
33
+ ondestroy={ondestroy?.bind(bond.state)}
34
+ animate={animate?.bind(bond.state)}
35
+ enter={enter?.bind(bond.state)}
36
+ exit={exit?.bind(bond.state)}
37
+ initial={initial?.bind(bond.state)}
38
+ {...bodyProps}
39
+ >
40
+ {@render children?.({ accordionItem: bond })}
41
+ </HtmlAtom>
42
+ {/if}
@@ -1,50 +1,50 @@
1
- <script lang="ts" generics="E extends keyof HTMLElementTagNameMap = 'div', B extends Base = Base">
2
- import { HtmlAtom, type Base } from '../../atom';
3
- import { AccordionItemBond } from './bond.svelte';
4
- import type { AccordionItemHeaderProps } from './types';
5
-
6
- let {
7
- class: klass = '',
8
- as = 'button',
9
- children = undefined,
10
- onpointerdown = undefined,
11
- onmount = undefined,
12
- ondestroy = undefined,
13
- animate = undefined,
14
- enter = undefined,
15
- exit = undefined,
16
- initial = undefined,
17
- ...restProps
18
- }: AccordionItemHeaderProps = $props();
19
-
20
- const bond = AccordionItemBond.get();
21
-
22
- const headerProps = $derived({
23
- ...bond?.header(),
24
- ...restProps
25
- });
26
- </script>
27
-
28
- <!-- svelte-ignore a11y_no_static_element_interactions -->
29
- <HtmlAtom
30
- {as}
31
- {bond}
32
- preset="accordion.item.header"
33
- class={[
34
- 'border-border relative box-border flex w-full cursor-pointer items-center',
35
- '$preset',
36
- klass
37
- ]}
38
- onmount={onmount?.bind(bond.state)}
39
- ondestroy={ondestroy?.bind(bond.state)}
40
- animate={animate?.bind(bond.state)}
41
- enter={enter?.bind(bond.state)}
42
- exit={exit?.bind(bond.state)}
43
- initial={initial?.bind(bond.state)}
44
- tabindex={as !== 'button' ? 0 : undefined}
45
- {...headerProps}
46
- >
47
- {@render children?.({
48
- accordionItem: bond
49
- })}
50
- </HtmlAtom>
1
+ <script lang="ts" generics="E extends keyof HTMLElementTagNameMap = 'div', B extends Base = Base">
2
+ import { HtmlAtom, type Base } from '../../atom';
3
+ import { AccordionItemBond } from './bond.svelte';
4
+ import type { AccordionItemHeaderProps } from './types';
5
+
6
+ let {
7
+ class: klass = '',
8
+ as = 'button',
9
+ children = undefined,
10
+ onpointerdown = undefined,
11
+ onmount = undefined,
12
+ ondestroy = undefined,
13
+ animate = undefined,
14
+ enter = undefined,
15
+ exit = undefined,
16
+ initial = undefined,
17
+ ...restProps
18
+ }: AccordionItemHeaderProps = $props();
19
+
20
+ const bond = AccordionItemBond.get();
21
+
22
+ const headerProps = $derived({
23
+ ...bond?.header(),
24
+ ...restProps
25
+ });
26
+ </script>
27
+
28
+ <!-- svelte-ignore a11y_no_static_element_interactions -->
29
+ <HtmlAtom
30
+ {as}
31
+ {bond}
32
+ preset="accordion.item.header"
33
+ class={[
34
+ 'border-border relative box-border flex w-full cursor-pointer items-center',
35
+ '$preset',
36
+ klass
37
+ ]}
38
+ onmount={onmount?.bind(bond.state)}
39
+ ondestroy={ondestroy?.bind(bond.state)}
40
+ animate={animate?.bind(bond.state)}
41
+ enter={enter?.bind(bond.state)}
42
+ exit={exit?.bind(bond.state)}
43
+ initial={initial?.bind(bond.state)}
44
+ tabindex={as !== 'button' ? 0 : undefined}
45
+ {...headerProps}
46
+ >
47
+ {@render children?.({
48
+ accordionItem: bond
49
+ })}
50
+ </HtmlAtom>
@@ -1,50 +1,50 @@
1
- <script lang="ts" generics="E extends keyof HTMLElementTagNameMap = 'div', B extends Base = Base">
2
- import { animate as motion } from 'motion';
3
- import { Icon } from '../../icon';
4
- import IconArrowDown from '../../../icons/icon-arrow-down.svelte';
5
- import { HtmlAtom, type Base } from '../../atom';
6
- import { AccordionItemBond } from './bond.svelte';
7
- import type { AccordionItemIndicatorProps } from './types';
8
-
9
- const bond = AccordionItemBond.get();
10
- const isOpen = $derived(bond?.state?.isOpen ?? false);
11
-
12
- let {
13
- class: klass = '',
14
- children = undefined,
15
- onmount = undefined,
16
- ondestroy = undefined,
17
- animate = _animate,
18
- enter = undefined,
19
- exit = undefined,
20
- initial = undefined,
21
- ...restProps
22
- }: AccordionItemIndicatorProps<E, B> = $props();
23
-
24
- const indicatorProps = $derived({
25
- ...bond?.indicator(),
26
- ...restProps
27
- });
28
-
29
- function _animate(node: HTMLElement) {
30
- return motion(node, { rotate: 180 * +isOpen }, { duration: 0.3, ease: 'anticipate' });
31
- }
32
- </script>
33
-
34
- <HtmlAtom
35
- preset="accordion.item.indicator"
36
- class={['border-border pointer-events-none flex items-center justify-center', '$preset', klass]}
37
- onmount={onmount?.bind(bond.state)}
38
- ondestroy={ondestroy?.bind(bond.state)}
39
- animate={animate?.bind(bond.state)}
40
- enter={enter?.bind(bond.state)}
41
- exit={exit?.bind(bond.state)}
42
- initial={initial?.bind(bond.state)}
43
- {...indicatorProps}
44
- >
45
- {#if children}
46
- {@render children({ accordionItem: bond })}
47
- {:else}
48
- <Icon src={IconArrowDown} />
49
- {/if}
50
- </HtmlAtom>
1
+ <script lang="ts" generics="E extends keyof HTMLElementTagNameMap = 'div', B extends Base = Base">
2
+ import { animate as motion } from 'motion';
3
+ import { Icon } from '../../icon';
4
+ import IconArrowDown from '../../../icons/icon-arrow-down.svelte';
5
+ import { HtmlAtom, type Base } from '../../atom';
6
+ import { AccordionItemBond } from './bond.svelte';
7
+ import type { AccordionItemIndicatorProps } from './types';
8
+
9
+ const bond = AccordionItemBond.get();
10
+ const isOpen = $derived(bond?.state?.isOpen ?? false);
11
+
12
+ let {
13
+ class: klass = '',
14
+ children = undefined,
15
+ onmount = undefined,
16
+ ondestroy = undefined,
17
+ animate = _animate,
18
+ enter = undefined,
19
+ exit = undefined,
20
+ initial = undefined,
21
+ ...restProps
22
+ }: AccordionItemIndicatorProps<E, B> = $props();
23
+
24
+ const indicatorProps = $derived({
25
+ ...bond?.indicator(),
26
+ ...restProps
27
+ });
28
+
29
+ function _animate(node: HTMLElement) {
30
+ return motion(node, { rotate: 180 * +isOpen }, { duration: 0.3, ease: 'anticipate' });
31
+ }
32
+ </script>
33
+
34
+ <HtmlAtom
35
+ preset="accordion.item.indicator"
36
+ class={['border-border pointer-events-none flex items-center justify-center', '$preset', klass]}
37
+ onmount={onmount?.bind(bond.state)}
38
+ ondestroy={ondestroy?.bind(bond.state)}
39
+ animate={animate?.bind(bond.state)}
40
+ enter={enter?.bind(bond.state)}
41
+ exit={exit?.bind(bond.state)}
42
+ initial={initial?.bind(bond.state)}
43
+ {...indicatorProps}
44
+ >
45
+ {#if children}
46
+ {@render children({ accordionItem: bond })}
47
+ {:else}
48
+ <Icon src={IconArrowDown} />
49
+ {/if}
50
+ </HtmlAtom>
@@ -1,65 +1,65 @@
1
- <script lang="ts" generics="E extends keyof HTMLElementTagNameMap = 'div', B extends Base = Base">
2
- import { nanoid } from 'nanoid';
3
- import { defineProperty, defineState } from '../../../utils';
4
- import { HtmlAtom, type Base } from '../../atom';
5
- import {
6
- AccordionItemBond,
7
- AccordionItemBondState,
8
- type AccordionItemBondProps
9
- } from './bond.svelte';
10
- import type { AccordionItemRootProps } from './types';
11
-
12
- let {
13
- class: klass = '',
14
- value = nanoid(),
15
- data = undefined,
16
- disabled = false,
17
- factory = _factory,
18
- children = undefined,
19
- onmount = undefined,
20
- ondestroy = undefined,
21
- animate = undefined,
22
- enter = undefined,
23
- exit = undefined,
24
- initial = undefined,
25
- ...restProps
26
- }: AccordionItemRootProps<E, B> = $props();
27
-
28
- const accordionItemProps = defineState<AccordionItemBondProps>([
29
- defineProperty('data', () => data),
30
- defineProperty('disabled', () => disabled),
31
- defineProperty('value', () => value)
32
- ]);
33
- const bond = factory(accordionItemProps).share();
34
-
35
- bond.state.mount();
36
-
37
- const rootProps = $derived({
38
- ...bond.root(),
39
- ...restProps
40
- });
41
-
42
- function _factory(props: typeof accordionItemProps) {
43
- const accordionItemState = new AccordionItemBondState(() => props);
44
- return new AccordionItemBond(accordionItemState);
45
- }
46
-
47
- export function getBond() {
48
- return bond;
49
- }
50
- </script>
51
-
52
- <HtmlAtom
53
- {bond}
54
- preset="accordion.item"
55
- class={['border-border', '$preset', klass]}
56
- onmount={onmount?.bind(bond.state)}
57
- ondestroy={ondestroy?.bind(bond.state)}
58
- animate={animate?.bind(bond.state)}
59
- enter={enter?.bind(bond.state)}
60
- exit={exit?.bind(bond.state)}
61
- initial={initial?.bind(bond.state)}
62
- {...rootProps}
63
- >
64
- {@render children?.({ accordionItem: bond })}
65
- </HtmlAtom>
1
+ <script lang="ts" generics="E extends keyof HTMLElementTagNameMap = 'div', B extends Base = Base">
2
+ import { nanoid } from 'nanoid';
3
+ import { defineProperty, defineState } from '../../../utils';
4
+ import { HtmlAtom, type Base } from '../../atom';
5
+ import {
6
+ AccordionItemBond,
7
+ AccordionItemBondState,
8
+ type AccordionItemBondProps
9
+ } from './bond.svelte';
10
+ import type { AccordionItemRootProps } from './types';
11
+
12
+ let {
13
+ class: klass = '',
14
+ value = nanoid(),
15
+ data = undefined,
16
+ disabled = false,
17
+ factory = _factory,
18
+ children = undefined,
19
+ onmount = undefined,
20
+ ondestroy = undefined,
21
+ animate = undefined,
22
+ enter = undefined,
23
+ exit = undefined,
24
+ initial = undefined,
25
+ ...restProps
26
+ }: AccordionItemRootProps<E, B> = $props();
27
+
28
+ const accordionItemProps = defineState<AccordionItemBondProps>([
29
+ defineProperty('data', () => data),
30
+ defineProperty('disabled', () => disabled),
31
+ defineProperty('value', () => value)
32
+ ]);
33
+ const bond = factory(accordionItemProps).share();
34
+
35
+ bond.state.mount();
36
+
37
+ const rootProps = $derived({
38
+ ...bond.root(),
39
+ ...restProps
40
+ });
41
+
42
+ function _factory(props: typeof accordionItemProps) {
43
+ const accordionItemState = new AccordionItemBondState(() => props);
44
+ return new AccordionItemBond(accordionItemState);
45
+ }
46
+
47
+ export function getBond() {
48
+ return bond;
49
+ }
50
+ </script>
51
+
52
+ <HtmlAtom
53
+ {bond}
54
+ preset="accordion.item"
55
+ class={['border-border', '$preset', klass]}
56
+ onmount={onmount?.bind(bond.state)}
57
+ ondestroy={ondestroy?.bind(bond.state)}
58
+ animate={animate?.bind(bond.state)}
59
+ enter={enter?.bind(bond.state)}
60
+ exit={exit?.bind(bond.state)}
61
+ initial={initial?.bind(bond.state)}
62
+ {...rootProps}
63
+ >
64
+ {@render children?.({ accordionItem: bond })}
65
+ </HtmlAtom>
@@ -10,6 +10,7 @@
10
10
 
11
11
  let {
12
12
  class: klass = '',
13
+ preset = 'alert.actions',
13
14
  children = undefined,
14
15
  onmount = undefined,
15
16
  ondestroy = undefined,
@@ -28,7 +29,7 @@
28
29
 
29
30
  <HtmlAtom
30
31
  {bond}
31
- preset="alert.actions"
32
+ {preset}
32
33
  class={['alert-actions border-border mt-3 flex items-center gap-2', '$preset', klass]}
33
34
  onmount={onmount?.bind(bond.state)}
34
35
  ondestroy={ondestroy?.bind(bond.state)}
@@ -3,9 +3,10 @@
3
3
  generics="E extends keyof HTMLElementTagNameMap = 'button', B extends Base = Base"
4
4
  >
5
5
  import type { HTMLAttributes } from 'svelte/elements';
6
- import { AlertBond } from './bond.svelte';
7
6
  import { HtmlAtom, type Base } from '../atom';
7
+ import { AlertBond } from './bond.svelte';
8
8
  import type { AlertCloseButtonProps } from './types';
9
+ import { Icon } from '../icon';
9
10
 
10
11
  type Element = HTMLElementTagNameMap[E];
11
12
 
@@ -14,6 +15,7 @@
14
15
  let {
15
16
  class: klass = '',
16
17
  as = 'button' as E,
18
+ preset = 'alert.close-button',
17
19
  children = undefined,
18
20
  onmount = undefined,
19
21
  ondestroy = undefined,
@@ -36,16 +38,9 @@
36
38
  <HtmlAtom
37
39
  {as}
38
40
  {bond}
39
- preset="alert.close-button"
41
+ {preset}
40
42
  class={[
41
- 'alert-close-button border-border absolute top-2 right-2 rounded p-1 transition-colors hover:bg-black/10 dark:hover:bg-white/10',
42
- 'focus:ring-2 focus:ring-offset-1 focus:outline-none',
43
- {
44
- 'focus:ring-blue-500': bond?.state.variant === 'info',
45
- 'focus:ring-green-500': bond?.state.variant === 'success',
46
- 'focus:ring-yellow-500': bond?.state.variant === 'warning',
47
- 'focus:ring-red-500': bond?.state.variant === 'error'
48
- },
43
+ 'alert-close-button border-border flex size-6 items-center justify-center rounded p-0.5 transition-colors hover:bg-black/10 dark:hover:bg-white/10',
49
44
  '$preset',
50
45
  klass
51
46
  ]}
@@ -57,16 +52,19 @@
57
52
  initial={initial?.bind(bond.state)}
58
53
  {...closeButtonProps}
59
54
  >
60
- {@render children?.({ alert: bond! })}
61
- {#if !children}
62
- <svg class="h-4 w-4" fill="none" stroke="currentColor" viewBox="0 0 24 24">
63
- <path
64
- stroke-linecap="round"
65
- stroke-linejoin="round"
66
- stroke-width="2"
67
- d="M6 18L18 6M6 6l12 12"
68
- />
69
- </svg>
55
+ {#if children}
56
+ {@render children({ alert: bond! })}
57
+ {:else}
58
+ <Icon class="h-full">
59
+ <svg fill="none" stroke="currentColor" viewBox="0 0 24 24">
60
+ <path
61
+ stroke-linecap="round"
62
+ stroke-linejoin="round"
63
+ stroke-width="2"
64
+ d="M6 18L18 6M6 6l12 12"
65
+ />
66
+ </svg>
67
+ </Icon>
70
68
  {/if}
71
69
  </HtmlAtom>
72
70
  {/if}
@@ -10,6 +10,7 @@
10
10
 
11
11
  let {
12
12
  class: klass = '',
13
+ preset = 'alert.content',
13
14
  children = undefined,
14
15
  onmount = undefined,
15
16
  ondestroy = undefined,
@@ -28,7 +29,7 @@
28
29
 
29
30
  <HtmlAtom
30
31
  {bond}
31
- preset="alert.content"
32
+ {preset}
32
33
  class={['alert-content border-border flex-1 space-y-1', '$preset', klass]}
33
34
  onmount={onmount?.bind(bond.state)}
34
35
  ondestroy={ondestroy?.bind(bond.state)}
@@ -8,6 +8,7 @@
8
8
  let {
9
9
  class: klass = '',
10
10
  as = 'p' as E,
11
+ preset = 'alert.description',
11
12
  children = undefined,
12
13
  onmount = undefined,
13
14
  ondestroy = undefined,
@@ -26,7 +27,7 @@
26
27
 
27
28
  <HtmlAtom
28
29
  {bond}
29
- preset="alert.description"
30
+ {preset}
30
31
  class={['alert-description border-border mt-1 text-sm leading-relaxed', '$preset', klass]}
31
32
  onmount={onmount?.bind(bond.state)}
32
33
  ondestroy={ondestroy?.bind(bond.state)}