@svelte-atoms/core 1.0.0-alpha.29 → 1.0.0-alpha.31

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 (176) hide show
  1. package/README.md +3 -2
  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 +65 -61
  5. package/dist/components/accordion/accordion-root.svelte.d.ts +1 -1
  6. package/dist/components/accordion/accordion.stories.svelte +70 -134
  7. package/dist/components/accordion/item/accordion-item-body.svelte +44 -42
  8. package/dist/components/accordion/item/accordion-item-header.svelte +51 -50
  9. package/dist/components/accordion/item/accordion-item-indicator.svelte +51 -50
  10. package/dist/components/accordion/item/accordion-item-root.svelte +66 -65
  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 +66 -70
  18. package/dist/components/alert/alert-description.svelte +42 -42
  19. package/dist/components/alert/alert-description.svelte.d.ts +3 -6
  20. package/dist/components/alert/alert-root.svelte +68 -103
  21. package/dist/components/alert/alert-root.svelte.d.ts +2 -2
  22. package/dist/components/alert/alert.stories.svelte +10 -11
  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 +261 -207
  27. package/dist/components/avatar/avatar.stories.svelte +8 -13
  28. package/dist/components/badge/badge.stories.svelte +1 -6
  29. package/dist/components/badge/badge.svelte +1 -1
  30. package/dist/components/breadcrumb/breadcrumb.stories.svelte +16 -21
  31. package/dist/components/button/button.stories.svelte +1 -34
  32. package/dist/components/calendar/calendar-day.svelte +9 -4
  33. package/dist/components/calendar/calendar-header.svelte +29 -29
  34. package/dist/components/calendar/calendar-root.svelte +206 -206
  35. package/dist/components/calendar/calendar.stories.svelte +26 -31
  36. package/dist/components/card/card-body.svelte +1 -1
  37. package/dist/components/card/card-footer.svelte +1 -1
  38. package/dist/components/card/card-root.svelte +1 -1
  39. package/dist/components/card/card.stories.svelte +92 -104
  40. package/dist/components/checkbox/checkbox.stories.svelte +4 -9
  41. package/dist/components/checkbox/checkbox.svelte +159 -157
  42. package/dist/components/collapsible/collapsible.stories.svelte +2 -3
  43. package/dist/components/combobox/atoms.d.ts +1 -1
  44. package/dist/components/combobox/atoms.js +1 -1
  45. package/dist/components/combobox/combobox-root.svelte +1 -1
  46. package/dist/components/combobox/compobox.stories.svelte +19 -22
  47. package/dist/components/combobox/index.d.ts +1 -0
  48. package/dist/components/container/container.stories.svelte +8 -11
  49. package/dist/components/container/container.svelte.d.ts +1 -1
  50. package/dist/components/datagrid/datagrid-root.svelte +59 -59
  51. package/dist/components/datagrid/datagrid.css +5 -5
  52. package/dist/components/datagrid/datagrid.stories.svelte +47 -50
  53. package/dist/components/datagrid/tr/bond.svelte.d.ts +4 -2
  54. package/dist/components/datagrid/tr/bond.svelte.js +9 -7
  55. package/dist/components/datagrid/tr/datagrid-tr.svelte +90 -88
  56. package/dist/components/date-picker/date-picker-calendar.svelte +2 -2
  57. package/dist/components/date-picker/date-picker-header.svelte +100 -100
  58. package/dist/components/date-picker/date-picker-months.svelte +142 -142
  59. package/dist/components/date-picker/date-picker-root.svelte +95 -95
  60. package/dist/components/date-picker/date-picker-years.svelte +205 -205
  61. package/dist/components/date-picker/date-picker.stories.svelte +35 -42
  62. package/dist/components/dialog/bond.svelte.d.ts +13 -3
  63. package/dist/components/dialog/bond.svelte.js +66 -5
  64. package/dist/components/dialog/dialog-content.svelte +2 -20
  65. package/dist/components/dialog/dialog-root.svelte +91 -110
  66. package/dist/components/dialog/dialog.stories.svelte +34 -37
  67. package/dist/components/dialog/motion.svelte.d.ts +13 -0
  68. package/dist/components/dialog/motion.svelte.js +44 -0
  69. package/dist/components/drawer/attachments.svelte.d.ts +1 -1
  70. package/dist/components/drawer/attachments.svelte.js +7 -10
  71. package/dist/components/drawer/bond.svelte.d.ts +24 -5
  72. package/dist/components/drawer/bond.svelte.js +77 -11
  73. package/dist/components/drawer/drawer-content.svelte +49 -42
  74. package/dist/components/drawer/drawer.stories.svelte +144 -224
  75. package/dist/components/drawer/index.d.ts +2 -0
  76. package/dist/components/drawer/index.js +2 -0
  77. package/dist/components/drawer/motion.d.ts +15 -0
  78. package/dist/components/drawer/motion.js +28 -0
  79. package/dist/components/dropdown/atoms.d.ts +1 -1
  80. package/dist/components/dropdown/atoms.js +1 -1
  81. package/dist/components/dropdown/bond.svelte.d.ts +5 -1
  82. package/dist/components/dropdown/dropdown-root.svelte +1 -1
  83. package/dist/components/dropdown/dropdown.stories.svelte +38 -41
  84. package/dist/components/dropdown/index.d.ts +1 -0
  85. package/dist/components/form/form.stories.svelte +58 -61
  86. package/dist/components/image/image.stories.svelte +9 -12
  87. package/dist/components/input/input.stories.svelte +11 -14
  88. package/dist/components/label/label.stories.svelte +1 -12
  89. package/dist/components/label/label.stories.svelte.d.ts +24 -4
  90. package/dist/components/lazy/lazy.stories.svelte +28 -35
  91. package/dist/components/lazy/lazy.svelte +28 -28
  92. package/dist/components/link/link.stories.svelte +1 -12
  93. package/dist/components/link/link.stories.svelte.d.ts +24 -4
  94. package/dist/components/list/list-item.svelte +20 -20
  95. package/dist/components/menu/atoms.d.ts +1 -0
  96. package/dist/components/menu/atoms.js +1 -0
  97. package/dist/components/menu/index.d.ts +2 -1
  98. package/dist/components/menu/index.js +1 -1
  99. package/dist/components/menu/menu-item.svelte +69 -51
  100. package/dist/components/menu/menu-item.svelte.d.ts +1 -0
  101. package/dist/components/menu/menu-list.svelte +40 -40
  102. package/dist/components/menu/menu.stories.svelte +9 -12
  103. package/dist/components/popover/bond.svelte.d.ts +20 -7
  104. package/dist/components/popover/bond.svelte.js +104 -45
  105. package/dist/components/popover/motion.d.ts +6 -0
  106. package/dist/components/popover/motion.js +56 -0
  107. package/dist/components/popover/popover-arrow.svelte +4 -4
  108. package/dist/components/popover/popover-content.svelte +137 -178
  109. package/dist/components/popover/popover-indicator.svelte +2 -1
  110. package/dist/components/popover/popover-root.svelte +1 -1
  111. package/dist/components/popover/popover.stories.svelte +49 -52
  112. package/dist/components/popover/types.d.ts +9 -7
  113. package/dist/components/portal/active-portal.svelte +29 -22
  114. package/dist/components/portal/active-portal.svelte.d.ts +2 -9
  115. package/dist/components/portal/portal-root.svelte +76 -83
  116. package/dist/components/portal/portal-root.svelte.d.ts +4 -6
  117. package/dist/components/portal/teleport.svelte +49 -50
  118. package/dist/components/portal/teleport.svelte.d.ts +3 -4
  119. package/dist/components/qr-code/qr-code.stories.svelte +18 -27
  120. package/dist/components/qr-code/qr-code.svelte +75 -75
  121. package/dist/components/radio/radio-group.stories.svelte +21 -30
  122. package/dist/components/radio/radio.stories.svelte +1 -10
  123. package/dist/components/radio/radio.svelte +109 -109
  124. package/dist/components/radio/types.d.ts +98 -0
  125. package/dist/components/radio/types.js +2 -0
  126. package/dist/components/root/root.svelte +104 -121
  127. package/dist/components/scrollable/scrollable-root.svelte.d.ts +2 -2
  128. package/dist/components/scrollable/scrollable.stories.svelte +95 -105
  129. package/dist/components/sidebar/index.d.ts +2 -0
  130. package/dist/components/sidebar/index.js +2 -0
  131. package/dist/components/sidebar/motion.svelte.d.ts +11 -0
  132. package/dist/components/sidebar/motion.svelte.js +16 -0
  133. package/dist/components/sidebar/sidebar-content.svelte +3 -2
  134. package/dist/components/sidebar/sidebar-root.svelte +39 -41
  135. package/dist/components/sidebar/sidebar.stories.svelte +43 -54
  136. package/dist/components/sidebar/types.d.ts +3 -12
  137. package/dist/components/tabs/tab/bond.svelte.d.ts +4 -1
  138. package/dist/components/tabs/tab/bond.svelte.js +4 -1
  139. package/dist/components/tabs/tabs.stories.svelte +31 -34
  140. package/dist/components/textarea/atoms.d.ts +1 -0
  141. package/dist/components/textarea/atoms.js +1 -0
  142. package/dist/components/textarea/textarea-input.svelte +9 -6
  143. package/dist/components/textarea/textarea-root.svelte +9 -9
  144. package/dist/components/textarea/textarea-root.svelte.d.ts +2 -0
  145. package/dist/components/tooltip/tooltip-trigger.svelte +39 -37
  146. package/dist/components/tooltip/tooltip-trigger.svelte.d.ts +1 -0
  147. package/dist/components/tooltip/tooltip.stories.svelte +7 -10
  148. package/dist/components/tree/tree.stories.svelte +102 -94
  149. package/dist/context/preset.svelte.d.ts +3 -3
  150. package/dist/icons/icon-copy.svelte +6 -0
  151. package/dist/{components/radio/types.svelte.d.ts → icons/icon-copy.svelte.d.ts} +3 -3
  152. package/dist/utils/function.d.ts +2 -0
  153. package/dist/utils/function.js +6 -0
  154. package/dist/utils/markdown-to-llm.d.ts +28 -0
  155. package/dist/utils/markdown-to-llm.js +76 -0
  156. package/package.json +6 -10
  157. package/dist/actions/animation.svelte.d.ts +0 -6
  158. package/dist/actions/animation.svelte.js +0 -14
  159. package/dist/actions/clickout.svelte.d.ts +0 -2
  160. package/dist/actions/clickout.svelte.js +0 -15
  161. package/dist/actions/popover.svelte.d.ts +0 -19
  162. package/dist/actions/popover.svelte.js +0 -81
  163. package/dist/actions/portal.svelte.d.ts +0 -8
  164. package/dist/actions/portal.svelte.js +0 -32
  165. package/dist/attachments/gsap.svelte.d.ts +0 -2
  166. package/dist/attachments/gsap.svelte.js +0 -26
  167. package/dist/components/radio/types.svelte +0 -0
  168. package/llm/composition.md +0 -395
  169. package/llm/crafting.md +0 -838
  170. package/llm/motion.md +0 -970
  171. package/llm/philosophy.md +0 -23
  172. package/llm/preset-variant-integration.md +0 -516
  173. package/llm/preset.md +0 -383
  174. package/llm/styling.md +0 -216
  175. package/llm/usage.md +0 -46
  176. package/llm/variants.md +0 -1259
@@ -1,7 +1,6 @@
1
1
  <script module>
2
2
  import { defineMeta } from '@storybook/addon-svelte-csf';
3
3
  import { Combobox as ACombobox } from '.';
4
- import Root from '../root/root.svelte';
5
4
  import { Input } from '../input';
6
5
  import { Divider } from '../divider';
7
6
 
@@ -30,25 +29,23 @@
30
29
  </script>
31
30
 
32
31
  <Story name="Combobox" args={{}}>
33
- <Root class="items-center justify-center p-4">
34
- <ACombobox.Root bind:open bind:value>
35
- {#snippet children({ combobox })}
36
- <ACombobox.Trigger
37
- base={Input.Root}
38
- class="h-10 min-w-sm items-center gap-0 rounded-sm p-1 transition-colors duration-200"
39
- >
40
- <Input.Icon class="text-foreground/50">$</Input.Icon>
41
- <Divider class="mx-1" vertical />
42
- <ACombobox.Input class="px-1" placeholder="Select a language" />
43
- </ACombobox.Trigger>
44
- <ACombobox.List>
45
- {#each array.filter((item) => !combobox.state.query || item.label
46
- .toLowerCase()
47
- .includes(combobox.state.query)) as item (item.value)}
48
- <ACombobox.Item value={item.value}>{item.label}</ACombobox.Item>
49
- {/each}
50
- </ACombobox.List>
51
- {/snippet}
52
- </ACombobox.Root>
53
- </Root>
32
+ <ACombobox.Root bind:open bind:value>
33
+ {#snippet children({ combobox })}
34
+ <ACombobox.Trigger
35
+ base={Input.Root}
36
+ class="h-10 min-w-sm items-center gap-0 rounded-sm p-1 transition-colors duration-200"
37
+ >
38
+ <Input.Icon class="text-foreground/50">$</Input.Icon>
39
+ <Divider class="mx-1" vertical />
40
+ <ACombobox.Input class="px-1" placeholder="Select a language" />
41
+ </ACombobox.Trigger>
42
+ <ACombobox.List>
43
+ {#each array.filter((item) => !combobox.state.query || item.label
44
+ .toLowerCase()
45
+ .includes(combobox.state.query)) as item (item.value)}
46
+ <ACombobox.Item value={item.value}>{item.label}</ACombobox.Item>
47
+ {/each}
48
+ </ACombobox.List>
49
+ {/snippet}
50
+ </ACombobox.Root>
54
51
  </Story>
@@ -1,2 +1,3 @@
1
1
  export * as Combobox from './atoms';
2
2
  export * from './types';
3
+ export type { AnimatePopoverContentParams as AnimateComboboxContentParams, animatePopoverContent as animateComboboxContent } from '../popover/motion';
@@ -1,6 +1,5 @@
1
1
  <script module>
2
2
  import { defineMeta } from '@storybook/addon-svelte-csf';
3
- import Root from '../root/root.svelte';
4
3
  import ContainerCmp from './container.svelte';
5
4
 
6
5
  const { Story } = defineMeta({
@@ -9,15 +8,13 @@
9
8
  </script>
10
9
 
11
10
  <Story name="Container">
12
- <Root class="p-4">
13
- <ContainerCmp class="flex w-full flex-col items-center gap-4">
14
- <div class="flex w-full gap-4">
15
- {#each { length: 5 } as _, i (i)}
16
- <div class="bg-foreground h-80 flex-1 rounded-lg"></div>
17
- {/each}
18
- </div>
11
+ <ContainerCmp class="flex w-full flex-col items-center gap-4">
12
+ <div class="flex w-full gap-4">
13
+ {#each { length: 5 } as _, i (i)}
14
+ <div class="bg-foreground h-80 flex-1 rounded-lg"></div>
15
+ {/each}
16
+ </div>
19
17
 
20
- <div class="bg-foreground h-80 w-[50cqw] rounded-lg"></div>
21
- </ContainerCmp>
22
- </Root>
18
+ <div class="bg-foreground h-80 w-[50cqw] rounded-lg"></div>
19
+ </ContainerCmp>
23
20
  </Story>
@@ -1,4 +1,4 @@
1
1
  import type { ContainerProps } from './types';
2
- declare const Container: import("svelte").Component<ContainerProps, {}, "clientWidth" | "clientHeight">;
2
+ declare const Container: import("svelte").Component<ContainerProps, {}, "clientHeight" | "clientWidth">;
3
3
  type Container = ReturnType<typeof Container>;
4
4
  export default Container;
@@ -1,59 +1,59 @@
1
- <script lang="ts" generics="T extends keyof HTMLElementTagNameMap, B extends Base = Base">
2
- import { defineProperty, defineState } from '../../utils';
3
- import { HtmlAtom, type Base } from '../atom';
4
- import { DataGridBond, DataGridBondState, type DataGridStateProps } from './bond.svelte';
5
- import type { DatagridRootProps } from './types';
6
-
7
- import './datagrid.css';
8
-
9
- let {
10
- class: klass = '',
11
- values = $bindable([]),
12
- template = undefined,
13
- fallbackTemplate = 'auto',
14
- factory = _factory,
15
- children = undefined,
16
- onmount = undefined,
17
- ondestroy = undefined,
18
- animate = undefined,
19
- enter = undefined,
20
- exit = undefined,
21
- initial = undefined,
22
- ...restProps
23
- }: DatagridRootProps<T> = $props();
24
-
25
- const bondProps = defineState<DataGridStateProps<T>>([
26
- defineProperty('template', () => template),
27
- defineProperty(
28
- 'values',
29
- () => values,
30
- (v) => (values = v)
31
- )
32
- ]);
33
- const bond = factory(bondProps).share();
34
-
35
- function _factory(props: typeof bondProps) {
36
- const dataGridState = new DataGridBondState(() => props);
37
- return new DataGridBond(dataGridState);
38
- }
39
-
40
- export function getBond() {
41
- return bond;
42
- }
43
- </script>
44
-
45
- <HtmlAtom
46
- {bond}
47
- preset="datagrid"
48
- class={['border-border', 'datagrid-root w-full gap-x-0 gap-y-0', '$preset', klass]}
49
- style="--template-columns:{bond.state.template ?? fallbackTemplate}"
50
- enter={enter?.bind(bond.state)}
51
- exit={exit?.bind(bond.state)}
52
- initial={initial?.bind(bond.state)}
53
- animate={animate?.bind(bond.state)}
54
- onmount={onmount?.bind(bond.state)}
55
- ondestroy={ondestroy?.bind(bond.state)}
56
- {...restProps}
57
- >
58
- {@render children?.({ datagrid: bond })}
59
- </HtmlAtom>
1
+ <script lang="ts" generics="T extends keyof HTMLElementTagNameMap, B extends Base = Base">
2
+ import { defineProperty, defineState } from '../../utils';
3
+ import { HtmlAtom, type Base } from '../atom';
4
+ import { DataGridBond, DataGridBondState, type DataGridStateProps } from './bond.svelte';
5
+ import type { DatagridRootProps } from './types';
6
+
7
+ import './datagrid.css';
8
+
9
+ let {
10
+ class: klass = '',
11
+ values = $bindable([]),
12
+ template = undefined,
13
+ fallbackTemplate = 'auto',
14
+ factory = _factory,
15
+ children = undefined,
16
+ onmount = undefined,
17
+ ondestroy = undefined,
18
+ animate = undefined,
19
+ enter = undefined,
20
+ exit = undefined,
21
+ initial = undefined,
22
+ ...restProps
23
+ }: DatagridRootProps<T> = $props();
24
+
25
+ const bondProps = defineState<DataGridStateProps<T>>([
26
+ defineProperty('template', () => template),
27
+ defineProperty(
28
+ 'values',
29
+ () => values,
30
+ (v) => (values = v)
31
+ )
32
+ ]);
33
+ const bond = factory(bondProps).share();
34
+
35
+ function _factory(props: typeof bondProps) {
36
+ const dataGridState = new DataGridBondState(() => props);
37
+ return new DataGridBond(dataGridState);
38
+ }
39
+
40
+ export function getBond() {
41
+ return bond;
42
+ }
43
+ </script>
44
+
45
+ <HtmlAtom
46
+ {bond}
47
+ preset="datagrid"
48
+ class={['border-border', 'datagrid-root w-full gap-x-0 gap-y-0', '$preset', klass]}
49
+ style="--template-columns:{bond.state.template ?? fallbackTemplate}"
50
+ enter={enter?.bind(bond.state)}
51
+ exit={exit?.bind(bond.state)}
52
+ initial={initial?.bind(bond.state)}
53
+ animate={animate?.bind(bond.state)}
54
+ onmount={onmount?.bind(bond.state)}
55
+ ondestroy={ondestroy?.bind(bond.state)}
56
+ {...restProps}
57
+ >
58
+ {@render children?.({ datagrid: bond })}
59
+ </HtmlAtom>
@@ -1,5 +1,5 @@
1
- .datagrid-root {
2
- display: grid;
3
- grid-auto-flow: row;
4
- grid-template-columns: var(--template-columns, auto);
5
- }
1
+ .datagrid-root {
2
+ display: grid;
3
+ grid-auto-flow: row;
4
+ grid-template-columns: var(--template-columns, auto);
5
+ }
@@ -1,6 +1,5 @@
1
1
  <script module>
2
2
  import { defineMeta } from '@storybook/addon-svelte-csf';
3
- import Root from '../root/root.svelte';
4
3
  import { DataGrid as DataGridCmp } from '.';
5
4
  import { Dropdown } from '../dropdown';
6
5
  import MoreVerticalIcon from '../../icons/icon-more-vert.svelte';
@@ -19,57 +18,55 @@
19
18
  </script>
20
19
 
21
20
  <Story name="DataGrid">
22
- <Root>
23
- {#snippet children({ args })}
24
- <DataGridCmp.Root class="" {@attach datagridContainer.attach}>
25
- <DataGridCmp.Header>
26
- <DataGridCmp.Tr header>
27
- <DataGridCmp.Th width="auto">
28
- <DataGridCmp.Checkbox />
29
- </DataGridCmp.Th>
30
- <DataGridCmp.Th
31
- class="resize-x overflow-x-auto"
32
- width="auto"
33
- hidden={datagridContainer.current?.width
34
- ? datagridContainer.current.width < 1024
35
- : false}>ID</DataGridCmp.Th
36
- >
37
- <DataGridCmp.Th>Name</DataGridCmp.Th>
38
- <DataGridCmp.Th width="auto">Job</DataGridCmp.Th>
39
- <DataGridCmp.Th width="auto">Contact</DataGridCmp.Th>
40
- <DataGridCmp.Th width="auto"></DataGridCmp.Th>
41
- </DataGridCmp.Tr>
42
- </DataGridCmp.Header>
21
+ {#snippet children({ args })}
22
+ <DataGridCmp.Root class="" {@attach datagridContainer.attach}>
23
+ <DataGridCmp.Header>
24
+ <DataGridCmp.Tr header>
25
+ <DataGridCmp.Th width="auto">
26
+ <DataGridCmp.Checkbox />
27
+ </DataGridCmp.Th>
28
+ <DataGridCmp.Th
29
+ class="resize-x overflow-x-auto"
30
+ width="auto"
31
+ hidden={datagridContainer.current?.width
32
+ ? datagridContainer.current.width < 1024
33
+ : false}>ID</DataGridCmp.Th
34
+ >
35
+ <DataGridCmp.Th>Name</DataGridCmp.Th>
36
+ <DataGridCmp.Th width="auto">Job</DataGridCmp.Th>
37
+ <DataGridCmp.Th width="auto">Contact</DataGridCmp.Th>
38
+ <DataGridCmp.Th width="auto"></DataGridCmp.Th>
39
+ </DataGridCmp.Tr>
40
+ </DataGridCmp.Header>
43
41
 
44
- <DataGridCmp.Body>
45
- {#each { length: 10 } as _, i (i)}
46
- <DataGridCmp.Tr>
47
- <DataGridCmp.Td>
48
- <DataGridCmp.Checkbox />
49
- </DataGridCmp.Td>
42
+ <DataGridCmp.Body>
43
+ {#each { length: 10 } as _, i (i)}
44
+ <DataGridCmp.Tr>
45
+ <DataGridCmp.Td>
46
+ <DataGridCmp.Checkbox />
47
+ </DataGridCmp.Td>
50
48
 
51
- <DataGridCmp.Td>{crypto.randomUUID()}</DataGridCmp.Td>
52
- <DataGridCmp.Td>John Doe</DataGridCmp.Td>
53
- <DataGridCmp.Td>Software Engineer</DataGridCmp.Td>
54
- <DataGridCmp.Td>+213659009944</DataGridCmp.Td>
49
+ <DataGridCmp.Td>{crypto.randomUUID()}</DataGridCmp.Td>
50
+ <DataGridCmp.Td>John Doe</DataGridCmp.Td>
51
+ <DataGridCmp.Td>Software Engineer</DataGridCmp.Td>
52
+ <DataGridCmp.Td>+213659009944</DataGridCmp.Td>
55
53
 
56
- <DataGridCmp.Td base={Dropdown.Root} placement="bottom-end" offset={0}>
57
- <Dropdown.Trigger class="flex aspect-square items-center justify-center p-0">
58
- <Icon src={MoreVerticalIcon} />
59
- </Dropdown.Trigger>
60
- <Dropdown.List>
61
- <Dropdown.Item value="ar">Arabic</Dropdown.Item>
62
- <Dropdown.Item value="en">English</Dropdown.Item>
63
- <Dropdown.Item value="sp">Spanish</Dropdown.Item>
64
- <Dropdown.Item value="fr">Frensh</Dropdown.Item>
65
- </Dropdown.List>
66
- </DataGridCmp.Td>
67
- </DataGridCmp.Tr>
68
- {/each}
69
- </DataGridCmp.Body>
54
+ <DataGridCmp.Td base={Dropdown.Root} placement="bottom-end" offset={0}>
55
+ <Dropdown.Trigger class="flex aspect-square items-center justify-center p-0">
56
+ <Icon src={MoreVerticalIcon} />
57
+ </Dropdown.Trigger>
58
+ <Dropdown.List>
59
+ <Dropdown.Item value="ar">Arabic</Dropdown.Item>
60
+ <Dropdown.Item value="en">English</Dropdown.Item>
61
+ <Dropdown.Item value="sp">Spanish</Dropdown.Item>
62
+ <Dropdown.Item value="fr">Frensh</Dropdown.Item>
63
+ </Dropdown.List>
64
+ </DataGridCmp.Td>
65
+ </DataGridCmp.Tr>
66
+ {/each}
67
+ </DataGridCmp.Body>
70
68
 
71
- <DataGridCmp.Footer></DataGridCmp.Footer>
72
- </DataGridCmp.Root>
73
- {/snippet}
74
- </Root>
69
+ <DataGridCmp.Footer></DataGridCmp.Footer>
70
+ </DataGridCmp.Root>
71
+ {/snippet}
75
72
  </Story>
@@ -15,7 +15,8 @@ export declare class DataGridTrBond<T, Props extends DataGridTrBondProps<T> = Da
15
15
  share(): this;
16
16
  mount(): () => void;
17
17
  unmount(): void;
18
- root(props?: Record<string, unknown>): {
18
+ root(): {
19
+ [x: symbol]: (node: HTMLElement) => void;
19
20
  'data-kind': string;
20
21
  'data-header': string | undefined;
21
22
  'data-selected': string | undefined;
@@ -24,12 +25,13 @@ export declare class DataGridTrBond<T, Props extends DataGridTrBondProps<T> = Da
24
25
  static set(bond: DataGridTrBond): DataGridTrBond;
25
26
  }
26
27
  export declare class DataGridTrBondState<T, Props extends DataGridTrBondProps<T> = DataGridTrBondProps<T>> extends BondState<Props> {
28
+ #private;
27
29
  static CONTEXT_KEY: string;
28
30
  constructor(props: () => Props);
29
31
  get id(): string;
30
32
  get isSelected(): boolean | undefined;
31
33
  get isHeader(): boolean;
32
- get datagrid(): import("..").DataGridBondState<unknown>;
34
+ get datagrid(): import("..").DataGridBondState<unknown> | undefined;
33
35
  select(): void;
34
36
  unselect(): void;
35
37
  }
@@ -2,6 +2,7 @@ import { getContext, setContext } from 'svelte';
2
2
  import { createAttachmentKey } from 'svelte/attachments';
3
3
  import { Bond, BondState } from '../../../shared/bond.svelte';
4
4
  import { DataGridBond } from '../bond.svelte';
5
+ import { getDatagridHeaderContext } from '../context';
5
6
  const DATAGRID_TR_ELEMENTS_KIND = {
6
7
  root: 'datagrid-tr'
7
8
  };
@@ -26,12 +27,11 @@ export class DataGridTrBond extends Bond {
26
27
  unmount() {
27
28
  return this.datagrid.state.unmountRow(this.state.id);
28
29
  }
29
- root(props = {}) {
30
+ root() {
30
31
  return {
31
32
  'data-kind': DATAGRID_TR_ELEMENTS_KIND.root,
32
33
  'data-header': this.state.isHeader ? 'true' : undefined,
33
34
  'data-selected': this.state.isSelected ? 'true' : undefined,
34
- ...props,
35
35
  [createAttachmentKey()]: (node) => {
36
36
  this.elements.root = node;
37
37
  }
@@ -46,6 +46,8 @@ export class DataGridTrBond extends Bond {
46
46
  }
47
47
  export class DataGridTrBondState extends BondState {
48
48
  static CONTEXT_KEY = '@atoms/context/datagrid/tr';
49
+ #datagrid = DataGridBond.get();
50
+ #isHeader = $state(!!getDatagridHeaderContext());
49
51
  constructor(props) {
50
52
  super(props);
51
53
  }
@@ -53,18 +55,18 @@ export class DataGridTrBondState extends BondState {
53
55
  return this.props.value || super.id;
54
56
  }
55
57
  get isSelected() {
56
- return this.datagrid.props.values?.some((id) => id === this.id);
58
+ return this.datagrid?.props.values?.some((id) => id === this.id);
57
59
  }
58
60
  get isHeader() {
59
- return this.props.header ?? false;
61
+ return this.#isHeader;
60
62
  }
61
63
  get datagrid() {
62
- return DataGridBond.get().state;
64
+ return this.#datagrid?.state;
63
65
  }
64
66
  select() {
65
- this.datagrid.select([this.id]);
67
+ this.datagrid?.select([this.id]);
66
68
  }
67
69
  unselect() {
68
- this.datagrid.unselect([this.id]);
70
+ this.datagrid?.unselect([this.id]);
69
71
  }
70
72
  }
@@ -1,88 +1,90 @@
1
- <script lang="ts" generics="T, E extends HtmlElementTagName, B extends Base = Base">
2
- import { untrack } from 'svelte';
3
- import { nanoid } from 'nanoid';
4
- import { defineProperty, defineState } from '../../../utils';
5
- import { HtmlAtom, type Base } from '../../atom';
6
- import type { HtmlElementTagName } from '../../element';
7
- import { DataGridTrBond, DataGridTrBondState, type DataGridTrBondProps } from './bond.svelte';
8
- import type { DatagridTrProps } from '../types';
9
- import { getDatagridHeaderContext, type DatagridContext } from '../context';
10
-
11
- import './datagrid-tr.css';
12
-
13
- const context_header = getDatagridHeaderContext();
14
-
15
- let {
16
- class: klass = '',
17
- value = nanoid(),
18
- rows = 'auto',
19
- data = undefined,
20
- header = false,
21
- factory = _factory,
22
- children = undefined,
23
- onmount = undefined,
24
- ondestroy = undefined,
25
- animate = undefined,
26
- enter = undefined,
27
- exit = undefined,
28
- initial = undefined,
29
- onclick = undefined,
30
- ...restProps
31
- }: DatagridTrProps<T, E, B> = $props();
32
-
33
- const bondProps = defineState<DataGridTrBondProps>([
34
- defineProperty('data', () => data),
35
- defineProperty('value', () => value),
36
- defineProperty('header', () => header)
37
- ]);
38
- const bond = factory(bondProps).share();
39
-
40
- const isHeader = $derived(context_header?.derived?.data?.header ?? false);
41
- const isSelected = $derived(bond.state.isSelected);
42
-
43
- const unmount = untrack(() => {
44
- if (!isHeader) {
45
- return bond.mount();
46
- }
47
- });
48
-
49
- $effect(() => unmount);
50
-
51
- function _factory(props: typeof bondProps) {
52
- const datagridTrState = new DataGridTrBondState(() => props);
53
- return new DataGridTrBond(datagridTrState);
54
- }
55
-
56
- function onclick_(ev: Event) {
57
- onclick?.(ev, { tr: bond as unknown as DatagridContext<T> });
58
-
59
- if (!ev.defaultPrevented) {
60
- //
61
- }
62
- }
63
- </script>
64
-
65
- <HtmlAtom
66
- {bond}
67
- preset="datagrid.tr"
68
- class={[
69
- 'datagrid-tr border-border items-center border-b bg-transparent',
70
- !isHeader &&
71
- 'hover:bg-foreground/2 active:bg-foreground/4 transition-colors duration-100 last:border-b-0',
72
- isHeader && 'header-tr',
73
- isSelected && 'bg-primary/2 hover:bg-primary/4 active:bg-primary/6',
74
- '$preset',
75
- klass
76
- ]}
77
- style="--rows:{rows}"
78
- enter={enter?.bind(bond.state)}
79
- exit={exit?.bind(bond.state)}
80
- initial={initial?.bind(bond.state)}
81
- animate={animate?.bind(bond.state)}
82
- onmount={onmount?.bind(bond.state)}
83
- ondestroy={ondestroy?.bind(bond.state)}
84
- onclick={onclick_}
85
- {...bond.root(restProps)}
86
- >
87
- {@render children?.({ tr: bond as unknown as DatagridContext<T> })}
88
- </HtmlAtom>
1
+ <script lang="ts" generics="T, E extends HtmlElementTagName, B extends Base = Base">
2
+ import { untrack } from 'svelte';
3
+ import { nanoid } from 'nanoid';
4
+ import { defineProperty, defineState } from '../../../utils';
5
+ import { HtmlAtom, type Base } from '../../atom';
6
+ import type { HtmlElementTagName } from '../../element';
7
+ import { DataGridTrBond, DataGridTrBondState, type DataGridTrBondProps } from './bond.svelte';
8
+ import type { DatagridTrProps } from '../types';
9
+ import { type DatagridContext } from '../context';
10
+
11
+ import './datagrid-tr.css';
12
+
13
+ let {
14
+ class: klass = '',
15
+ value = nanoid(),
16
+ rows = 'auto',
17
+ data = undefined,
18
+ header = false,
19
+ factory = _factory,
20
+ children = undefined,
21
+ onmount = undefined,
22
+ ondestroy = undefined,
23
+ animate = undefined,
24
+ enter = undefined,
25
+ exit = undefined,
26
+ initial = undefined,
27
+ onclick = undefined,
28
+ ...restProps
29
+ }: DatagridTrProps<T, E, B> = $props();
30
+
31
+ const bondProps = defineState<DataGridTrBondProps>([
32
+ defineProperty('data', () => data),
33
+ defineProperty('value', () => value),
34
+ defineProperty('header', () => header)
35
+ ]);
36
+ const bond = factory(bondProps).share();
37
+
38
+ const isHeader = $derived(bond?.state.isHeader ?? false);
39
+ const isSelected = $derived(bond.state.isSelected);
40
+
41
+ const headerProps = $derived({
42
+ ...bond.root(),
43
+ ...restProps
44
+ });
45
+
46
+ const unmount = untrack(() => {
47
+ if (!isHeader) {
48
+ return bond.mount();
49
+ }
50
+ });
51
+
52
+ $effect(() => unmount);
53
+
54
+ function _factory(props: typeof bondProps) {
55
+ const datagridTrState = new DataGridTrBondState(() => props);
56
+ return new DataGridTrBond(datagridTrState);
57
+ }
58
+
59
+ function onclick_(ev: Event) {
60
+ onclick?.(ev, { tr: bond as unknown as DatagridContext<T> });
61
+
62
+ if (!ev.defaultPrevented) {
63
+ //
64
+ }
65
+ }
66
+ </script>
67
+
68
+ <HtmlAtom
69
+ {bond}
70
+ preset="datagrid.tr"
71
+ class={[
72
+ 'datagrid-tr border-border items-center border-b bg-transparent',
73
+ !isHeader && 'hover:bg-foreground/2 active:bg-foreground/4 transition-colors duration-100',
74
+ isHeader && 'header-tr',
75
+ isSelected && 'bg-primary/2 hover:bg-primary/4 active:bg-primary/6',
76
+ '$preset',
77
+ klass
78
+ ]}
79
+ style="--rows:{rows}"
80
+ enter={enter?.bind(bond.state)}
81
+ exit={exit?.bind(bond.state)}
82
+ initial={initial?.bind(bond.state)}
83
+ animate={animate?.bind(bond.state)}
84
+ onmount={onmount?.bind(bond.state)}
85
+ ondestroy={ondestroy?.bind(bond.state)}
86
+ onclick={onclick_}
87
+ {...headerProps}
88
+ >
89
+ {@render children?.({ tr: bond as unknown as DatagridContext<T> })}
90
+ </HtmlAtom>
@@ -52,11 +52,11 @@
52
52
  {...calendarProps}
53
53
  >
54
54
  <HtmlAtom base={Header} class="col-span-full" />
55
- <HtmlAtom base={Weekdays} />
55
+ <HtmlAtom base={Weekdays} class="border-0" />
56
56
 
57
57
  <HtmlAtom base={Body}>
58
58
  {#snippet children({ day }: { day: CalendarDayType })}
59
- <HtmlAtom base={Day} {day} class="flex items-center justify-center">
59
+ <HtmlAtom base={Day} {day} class="flex items-center justify-center border-0">
60
60
  <span class="value">{day.dayOfMonth}</span>
61
61
  </HtmlAtom>
62
62
  {/snippet}