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

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 (186) hide show
  1. package/README.md +852 -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 +43 -42
  8. package/dist/components/alert/alert-close-button.svelte +70 -72
  9. package/dist/components/alert/alert-content.svelte +43 -42
  10. package/dist/components/alert/alert-description.svelte +42 -41
  11. package/dist/components/alert/alert-icon.svelte +47 -46
  12. package/dist/components/alert/alert-root.svelte +103 -102
  13. package/dist/components/alert/alert-title.svelte +42 -41
  14. package/dist/components/alert/alert.stories.svelte +384 -23
  15. package/dist/components/alert/alert.stories.svelte.d.ts +2 -5
  16. package/dist/components/atom/html-atom.svelte +207 -201
  17. package/dist/components/atom/html-atom.svelte.d.ts +1 -1
  18. package/dist/components/atom/snippet-renderer.svelte +5 -0
  19. package/dist/components/atom/snippet-renderer.svelte.d.ts +5 -0
  20. package/dist/components/avatar/avatar.stories.svelte.d.ts +1 -1
  21. package/dist/components/badge/badge.stories.svelte.d.ts +1 -1
  22. package/dist/components/breadcrumb/breadcrumb.stories.svelte.d.ts +1 -1
  23. package/dist/components/button/button.stories.svelte +17 -14
  24. package/dist/components/calendar/atoms.d.ts +5 -0
  25. package/dist/components/calendar/atoms.js +5 -0
  26. package/dist/components/calendar/bond.svelte.d.ts +72 -0
  27. package/dist/components/calendar/bond.svelte.js +132 -0
  28. package/dist/components/calendar/calendar-body.svelte +107 -0
  29. package/dist/components/calendar/calendar-body.svelte.d.ts +8 -0
  30. package/dist/components/calendar/calendar-day.svelte +96 -0
  31. package/dist/components/calendar/calendar-day.svelte.d.ts +4 -0
  32. package/dist/components/calendar/calendar-header.svelte +29 -0
  33. package/dist/components/calendar/calendar-header.svelte.d.ts +6 -0
  34. package/dist/components/calendar/calendar-root.svelte +206 -0
  35. package/dist/components/calendar/calendar-root.svelte.d.ts +8 -0
  36. package/dist/components/calendar/calendar-week-day.svelte +34 -0
  37. package/dist/components/calendar/calendar-week-day.svelte.d.ts +9 -0
  38. package/dist/components/calendar/calendar.css +26 -0
  39. package/dist/components/calendar/calendar.stories.svelte +31 -0
  40. package/dist/components/calendar/calendar.stories.svelte.d.ts +26 -0
  41. package/dist/components/calendar/index.d.ts +4 -0
  42. package/dist/components/calendar/index.js +4 -0
  43. package/dist/components/calendar/runes.svelte.d.ts +3 -0
  44. package/dist/components/calendar/runes.svelte.js +25 -0
  45. package/dist/components/calendar/types.d.ts +62 -0
  46. package/dist/components/calendar/types.js +1 -0
  47. package/dist/components/card/card-body.svelte +39 -39
  48. package/dist/components/card/card-description.svelte +41 -41
  49. package/dist/components/card/card-footer.svelte +41 -41
  50. package/dist/components/card/card-header.svelte +41 -41
  51. package/dist/components/card/card-media.svelte +41 -41
  52. package/dist/components/card/card-root.svelte +91 -91
  53. package/dist/components/card/card-subtitle.svelte +41 -41
  54. package/dist/components/card/card-title.svelte +45 -45
  55. package/dist/components/collapsible/collapsible-body.svelte +39 -39
  56. package/dist/components/collapsible/collapsible-header.svelte +39 -39
  57. package/dist/components/collapsible/collapsible-indicator.svelte +50 -50
  58. package/dist/components/collapsible/collapsible-root.svelte +66 -66
  59. package/dist/components/combobox/combobox-root.svelte +65 -65
  60. package/dist/components/container/container.stories.svelte.d.ts +1 -1
  61. package/dist/components/contextmenu/contextmenu-trigger.svelte.d.ts +1 -1
  62. package/dist/components/datagrid/bond.svelte.d.ts +2 -2
  63. package/dist/components/datagrid/datagrid-body.svelte +37 -37
  64. package/dist/components/datagrid/datagrid-checkbox.svelte +101 -101
  65. package/dist/components/datagrid/datagrid-footer.svelte +34 -34
  66. package/dist/components/datagrid/datagrid-header.svelte +49 -49
  67. package/dist/components/datagrid/datagrid-root.svelte +2 -2
  68. package/dist/components/datagrid/datagrid.css +5 -47
  69. package/dist/components/datagrid/td/datagrid-td.svelte +66 -66
  70. package/dist/components/datagrid/th/datagrid-th.svelte +106 -106
  71. package/dist/components/datagrid/tr/datagrid-tr.svelte +88 -88
  72. package/dist/components/datagrid/types.d.ts +1 -1
  73. package/dist/components/date-picker/atoms.d.ts +3 -0
  74. package/dist/components/date-picker/atoms.js +3 -0
  75. package/dist/components/date-picker/bond.svelte.d.ts +67 -0
  76. package/dist/components/date-picker/bond.svelte.js +174 -0
  77. package/dist/components/date-picker/date-picker-calendar.svelte +67 -0
  78. package/dist/components/date-picker/date-picker-calendar.svelte.d.ts +4 -0
  79. package/dist/components/date-picker/date-picker-header.svelte +100 -0
  80. package/dist/components/date-picker/date-picker-header.svelte.d.ts +4 -0
  81. package/dist/components/date-picker/date-picker-months.svelte +142 -0
  82. package/dist/components/date-picker/date-picker-months.svelte.d.ts +4 -0
  83. package/dist/components/date-picker/date-picker-root.svelte +95 -0
  84. package/dist/components/date-picker/date-picker-root.svelte.d.ts +4 -0
  85. package/dist/components/date-picker/date-picker-years.svelte +205 -0
  86. package/dist/components/date-picker/date-picker-years.svelte.d.ts +4 -0
  87. package/dist/components/date-picker/date-picker.stories.svelte +42 -0
  88. package/dist/components/date-picker/date-picker.stories.svelte.d.ts +3 -0
  89. package/dist/components/date-picker/index.d.ts +3 -0
  90. package/dist/components/date-picker/index.js +3 -0
  91. package/dist/components/date-picker/types.d.ts +53 -0
  92. package/dist/components/date-picker/types.js +1 -0
  93. package/dist/components/dialog/dialog-body.svelte +39 -39
  94. package/dist/components/dialog/dialog-close-button.svelte +58 -58
  95. package/dist/components/dialog/dialog-content.svelte +1 -1
  96. package/dist/components/dialog/dialog-description.svelte +40 -40
  97. package/dist/components/dialog/dialog-footer.svelte +39 -39
  98. package/dist/components/dialog/dialog-header.svelte +39 -39
  99. package/dist/components/dialog/dialog-root.svelte +110 -110
  100. package/dist/components/dialog/dialog-title.svelte +41 -41
  101. package/dist/components/drawer/drawer-backdrop.svelte +38 -38
  102. package/dist/components/drawer/drawer-body.svelte +42 -42
  103. package/dist/components/drawer/drawer-content.svelte +42 -42
  104. package/dist/components/drawer/drawer-description.svelte +44 -44
  105. package/dist/components/drawer/drawer-footer.svelte +41 -41
  106. package/dist/components/drawer/drawer-header.svelte +43 -43
  107. package/dist/components/drawer/drawer-root.svelte +93 -93
  108. package/dist/components/drawer/drawer-title.svelte +44 -44
  109. package/dist/components/dropdown/dropdown-query.svelte +54 -54
  110. package/dist/components/dropdown/dropdown-root.svelte +59 -59
  111. package/dist/components/dropdown/dropdown-trigger.svelte +41 -41
  112. package/dist/components/dropdown/dropdown-value.svelte +60 -60
  113. package/dist/components/element/types.d.ts +1 -1
  114. package/dist/components/form/bond.svelte.d.ts +1 -1
  115. package/dist/components/form/field/field-control.svelte +48 -48
  116. package/dist/components/form/field/field-label.svelte +24 -24
  117. package/dist/components/form/field/field-root.svelte +59 -59
  118. package/dist/components/icon/icon.svelte +44 -44
  119. package/dist/components/image/image.stories.svelte.d.ts +1 -1
  120. package/dist/components/index.d.ts +4 -0
  121. package/dist/components/index.js +4 -0
  122. package/dist/components/input/input-control.svelte +103 -103
  123. package/dist/components/label/label.svelte +25 -25
  124. package/dist/components/lazy/index.d.ts +1 -0
  125. package/dist/components/lazy/index.js +1 -0
  126. package/dist/components/lazy/lazy.stories.svelte +35 -0
  127. package/dist/components/lazy/lazy.stories.svelte.d.ts +19 -0
  128. package/dist/components/lazy/lazy.svelte +28 -0
  129. package/dist/components/lazy/lazy.svelte.d.ts +5 -0
  130. package/dist/components/lazy/types.d.ts +10 -0
  131. package/dist/components/lazy/types.js +1 -0
  132. package/dist/components/menu/menu-list.svelte +40 -39
  133. package/dist/components/menu/menu-list.svelte.d.ts +1 -0
  134. package/dist/components/popover/popover-arrow.svelte +111 -111
  135. package/dist/components/popover/popover-content.svelte +178 -139
  136. package/dist/components/popover/popover-root.svelte +16 -17
  137. package/dist/components/popover/popover.stories.svelte +0 -15
  138. package/dist/components/portal/portal-root.svelte +83 -83
  139. package/dist/components/portal/teleport.svelte +50 -50
  140. package/dist/components/qr-code/index.d.ts +2 -0
  141. package/dist/components/qr-code/index.js +2 -0
  142. package/dist/components/qr-code/qr-code.stories.svelte +27 -0
  143. package/dist/components/qr-code/qr-code.stories.svelte.d.ts +26 -0
  144. package/dist/components/qr-code/qr-code.svelte +75 -0
  145. package/dist/components/qr-code/qr-code.svelte.d.ts +4 -0
  146. package/dist/components/qr-code/types.d.ts +14 -0
  147. package/dist/components/qr-code/types.js +1 -0
  148. package/dist/components/radio/radio.svelte +109 -109
  149. package/dist/components/radio/types.svelte.d.ts +1 -1
  150. package/dist/components/scrollable/scrollable-container.svelte +82 -82
  151. package/dist/components/scrollable/scrollable-content.svelte +41 -41
  152. package/dist/components/scrollable/scrollable-root.svelte +100 -100
  153. package/dist/components/scrollable/scrollable-thumb.svelte +75 -75
  154. package/dist/components/scrollable/scrollable-track.svelte +59 -59
  155. package/dist/components/scrollable/scrollable.stories.svelte.d.ts +1 -1
  156. package/dist/components/sidebar/bond.svelte.d.ts +0 -5
  157. package/dist/components/sidebar/bond.svelte.js +1 -12
  158. package/dist/components/sidebar/sidebar-content.svelte +39 -39
  159. package/dist/components/sidebar/sidebar-content.svelte.d.ts +2 -2
  160. package/dist/components/sidebar/sidebar-root.svelte +41 -68
  161. package/dist/components/sidebar/sidebar-root.svelte.d.ts +2 -2
  162. package/dist/components/sidebar/sidebar.stories.svelte +54 -52
  163. package/dist/components/sidebar/types.d.ts +6 -6
  164. package/dist/components/tabs/tab/tab-body.svelte +52 -52
  165. package/dist/components/tabs/tab/tab-description.svelte +41 -41
  166. package/dist/components/tabs/tab/tab-header.svelte +71 -71
  167. package/dist/components/tabs/tab/tab-root.svelte +86 -86
  168. package/dist/components/toast/toast-description.svelte +38 -38
  169. package/dist/components/toast/toast-root.svelte +61 -61
  170. package/dist/components/toast/toast-title.svelte +35 -35
  171. package/dist/components/tree/tree-body.svelte +39 -39
  172. package/dist/components/tree/tree-header.svelte +54 -54
  173. package/dist/components/tree/tree-indicator.svelte +40 -40
  174. package/dist/components/tree/tree-root.svelte +65 -65
  175. package/dist/components/virtual/virtual-root.svelte +239 -239
  176. package/dist/context/preset.svelte.d.ts +1 -1
  177. package/dist/icons/icon-arrow-down.svelte.d.ts +1 -1
  178. package/dist/icons/icon-checkmark.svelte.d.ts +1 -1
  179. package/dist/icons/icon-close.svelte.d.ts +1 -1
  180. package/dist/icons/icon-more-vert.svelte.d.ts +1 -1
  181. package/dist/runes/container.svelte.d.ts +2 -2
  182. package/dist/shared/bond.svelte.d.ts +1 -1
  183. package/dist/utils/state.d.ts +1 -1
  184. package/dist/utils/state.js +2 -1
  185. package/llm/variants.md +650 -103
  186. package/package.json +465 -437
@@ -1,49 +1,49 @@
1
- <script lang="ts" generics="T extends keyof HTMLElementTagNameMap, B extends Base = Base">
2
- import { HtmlAtom, type Base } from '../atom';
3
- import { setDatagridHeaderContext } from './context';
4
- import { DataGridBond } from './bond.svelte';
5
- import type { DatagridHeaderProps } from './types';
6
-
7
- const bond = DataGridBond.get();
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
- }: DatagridHeaderProps<T> = $props();
20
-
21
- const header = $state(true);
22
-
23
- const derived_header = $derived({
24
- data: {
25
- header
26
- }
27
- });
28
-
29
- setDatagridHeaderContext({
30
- get derived() {
31
- return derived_header;
32
- }
33
- });
34
- </script>
35
-
36
- <HtmlAtom
37
- {bond}
38
- preset="datagrid.header"
39
- class={['border-border col-span-full grid grid-cols-subgrid', '$preset', klass]}
40
- enter={enter?.bind(bond.state)}
41
- exit={exit?.bind(bond.state)}
42
- initial={initial?.bind(bond.state)}
43
- animate={animate?.bind(bond.state)}
44
- onmount={onmount?.bind(bond.state)}
45
- ondestroy={ondestroy?.bind(bond.state)}
46
- {...restProps}
47
- >
48
- {@render children?.({ datagrid: bond })}
49
- </HtmlAtom>
1
+ <script lang="ts" generics="T extends keyof HTMLElementTagNameMap, B extends Base = Base">
2
+ import { HtmlAtom, type Base } from '../atom';
3
+ import { setDatagridHeaderContext } from './context';
4
+ import { DataGridBond } from './bond.svelte';
5
+ import type { DatagridHeaderProps } from './types';
6
+
7
+ const bond = DataGridBond.get();
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
+ }: DatagridHeaderProps<T> = $props();
20
+
21
+ const header = $state(true);
22
+
23
+ const derived_header = $derived({
24
+ data: {
25
+ header
26
+ }
27
+ });
28
+
29
+ setDatagridHeaderContext({
30
+ get derived() {
31
+ return derived_header;
32
+ }
33
+ });
34
+ </script>
35
+
36
+ <HtmlAtom
37
+ {bond}
38
+ preset="datagrid.header"
39
+ class={['border-border col-span-full grid grid-cols-subgrid', '$preset', klass]}
40
+ enter={enter?.bind(bond.state)}
41
+ exit={exit?.bind(bond.state)}
42
+ initial={initial?.bind(bond.state)}
43
+ animate={animate?.bind(bond.state)}
44
+ onmount={onmount?.bind(bond.state)}
45
+ ondestroy={ondestroy?.bind(bond.state)}
46
+ {...restProps}
47
+ >
48
+ {@render children?.({ datagrid: bond })}
49
+ </HtmlAtom>
@@ -10,7 +10,7 @@
10
10
  class: klass = '',
11
11
  values = $bindable([]),
12
12
  template = undefined,
13
- data = [],
13
+ fallbackTemplate = 'auto',
14
14
  factory = _factory,
15
15
  children = undefined,
16
16
  onmount = undefined,
@@ -46,7 +46,7 @@
46
46
  {bond}
47
47
  preset="datagrid"
48
48
  class={['border-border', 'datagrid-root w-full gap-x-0 gap-y-0', '$preset', klass]}
49
- style="--template-columns:{bond.state.template}"
49
+ style="--template-columns:{bond.state.template ?? fallbackTemplate}"
50
50
  enter={enter?.bind(bond.state)}
51
51
  exit={exit?.bind(bond.state)}
52
52
  initial={initial?.bind(bond.state)}
@@ -1,47 +1,5 @@
1
- .datagrid-root {
2
- display: grid;
3
- grid-auto-flow: row;
4
- grid-template-columns: var(--template-columns, auto);
5
- }
6
-
7
- .cas-[data-screen='sm'] {
8
- @media (max-width: var(--screens-sm)) {
9
- display: none;
10
- }
11
- }
12
-
13
- .cas-[data-screen='md'] {
14
- @media (max-width: var(--screens-md)) {
15
- display: none;
16
- }
17
- }
18
-
19
- .cas-[data-screen='sd'] {
20
- @media (max-width: var(--screens-sd)) {
21
- display: none;
22
- }
23
- }
24
-
25
- .cas-[data-screen='lg'] {
26
- @media (max-width: var(--screens-lg)) {
27
- display: none;
28
- }
29
- }
30
-
31
- .cas-[data-screen='xl'] {
32
- @media (max-width: var(--screens-xl)) {
33
- display: none;
34
- }
35
- }
36
-
37
- .cas-[data-screen='2xl'] {
38
- @media (max-width: var(--screens-2xl)) {
39
- display: none;
40
- }
41
- }
42
-
43
- .cas-[data-screen='3xl'] {
44
- @media (max-width: var(--screens-3xl)) {
45
- display: none;
46
- }
47
- }
1
+ .datagrid-root {
2
+ display: grid;
3
+ grid-auto-flow: row;
4
+ grid-template-columns: var(--template-columns, auto);
5
+ }
@@ -1,66 +1,66 @@
1
- <script lang="ts" generics="D,E extends HtmlElementTagName, B extends Base = Base">
2
- import { DataGridBond } from '../bond.svelte';
3
- import { HtmlAtom, type Base } from '../../atom';
4
- import type { HtmlElementTagName } from '../../element';
5
- import type { DataGridTdBond } from './bond.svelte';
6
- export type { DatagridTdProps } from '../types';
7
-
8
- const bond = DataGridBond.get();
9
-
10
- let {
11
- class: klass = '',
12
- children = undefined,
13
- onmount = undefined,
14
- ondestroy = undefined,
15
- animate = undefined,
16
- enter = undefined,
17
- exit = undefined,
18
- initial = undefined,
19
- onclick = undefined,
20
- ...restProps
21
- }: DatagridTdProps<D, E, B> = $props();
22
-
23
- let element = $state<HTMLElement>();
24
-
25
- const elementIndex = $derived.by(() => {
26
- if (element) {
27
- const children = [...(element?.parentElement?.children ?? [])];
28
- return children.indexOf(element);
29
- }
30
-
31
- return -1;
32
- });
33
-
34
- const column = $derived(bond.state.columns.values().find((col) => col.index === elementIndex));
35
-
36
- const isHidden = $derived(column?.state.props.hidden ?? false);
37
-
38
- function onclick_(ev: Event) {
39
- onclick?.(ev, { td: bond as unknown as DataGridTdBond<D> });
40
-
41
- if (!ev.defaultPrevented) {
42
- //
43
- }
44
- }
45
- </script>
46
-
47
- {#if !isHidden}
48
- <HtmlAtom
49
- {@attach (node) => {
50
- element = node;
51
- }}
52
- {bond}
53
- preset="datagrid.td"
54
- class={['border-border flex h-full items-center py-2 text-left', '$preset', klass]}
55
- enter={enter?.bind(bond.state)}
56
- exit={exit?.bind(bond.state)}
57
- initial={initial?.bind(bond.state)}
58
- animate={animate?.bind(bond.state)}
59
- onmount={onmount?.bind(bond.state)}
60
- ondestroy={ondestroy?.bind(bond.state)}
61
- onclick={onclick_}
62
- {...restProps}
63
- >
64
- {@render children?.({ td: bond as unknown as DataGridTdBond<D> })}
65
- </HtmlAtom>
66
- {/if}
1
+ <script lang="ts" generics="D,E extends HtmlElementTagName, B extends Base = Base">
2
+ import { DataGridBond } from '../bond.svelte';
3
+ import { HtmlAtom, type Base } from '../../atom';
4
+ import type { HtmlElementTagName } from '../../element';
5
+ import type { DataGridTdBond } from './bond.svelte';
6
+ export type { DatagridTdProps } from '../types';
7
+
8
+ const bond = DataGridBond.get();
9
+
10
+ let {
11
+ class: klass = '',
12
+ children = undefined,
13
+ onmount = undefined,
14
+ ondestroy = undefined,
15
+ animate = undefined,
16
+ enter = undefined,
17
+ exit = undefined,
18
+ initial = undefined,
19
+ onclick = undefined,
20
+ ...restProps
21
+ }: DatagridTdProps<D, E, B> = $props();
22
+
23
+ let element = $state<HTMLElement>();
24
+
25
+ const elementIndex = $derived.by(() => {
26
+ if (element) {
27
+ const children = [...(element?.parentElement?.children ?? [])];
28
+ return children.indexOf(element);
29
+ }
30
+
31
+ return -1;
32
+ });
33
+
34
+ const column = $derived(bond.state.columns.values().find((col) => col.index === elementIndex));
35
+
36
+ const isHidden = $derived(column?.state.props.hidden ?? false);
37
+
38
+ function onclick_(ev: Event) {
39
+ onclick?.(ev, { td: bond as unknown as DataGridTdBond<D> });
40
+
41
+ if (!ev.defaultPrevented) {
42
+ //
43
+ }
44
+ }
45
+ </script>
46
+
47
+ {#if !isHidden}
48
+ <HtmlAtom
49
+ {@attach (node) => {
50
+ element = node;
51
+ }}
52
+ {bond}
53
+ preset="datagrid.td"
54
+ class={['border-border flex h-full items-center py-2 text-left', '$preset', klass]}
55
+ enter={enter?.bind(bond.state)}
56
+ exit={exit?.bind(bond.state)}
57
+ initial={initial?.bind(bond.state)}
58
+ animate={animate?.bind(bond.state)}
59
+ onmount={onmount?.bind(bond.state)}
60
+ ondestroy={ondestroy?.bind(bond.state)}
61
+ onclick={onclick_}
62
+ {...restProps}
63
+ >
64
+ {@render children?.({ td: bond as unknown as DataGridTdBond<D> })}
65
+ </HtmlAtom>
66
+ {/if}
@@ -1,106 +1,106 @@
1
- <script lang="ts" generics="T extends keyof HTMLElementTagNameMap, B extends Base = Base">
2
- import { nanoid } from 'nanoid';
3
- import { defineProperty, defineState } from '../../../utils';
4
- import { HtmlAtom, type Base } from '../../atom';
5
- import { DataGridThBond, DataGridThBondState, type DataGridThBondProps } from './bond.svelte';
6
- import type { DatagridContext } from '../context';
7
- import type { DatagridThProps } from '../types';
8
-
9
- let {
10
- class: klass = '',
11
- id = nanoid(),
12
- width = '1fr',
13
- direction = 'asc',
14
- screen = undefined,
15
- hidden = false,
16
- sortable = undefined,
17
- factory = _factory,
18
- children = undefined,
19
- onclick = undefined,
20
- onsort = undefined,
21
- onmount = undefined,
22
- ondestroy = undefined,
23
- animate = undefined,
24
- enter = undefined,
25
- exit = undefined,
26
- initial = undefined,
27
- ...restProps
28
- }: DatagridThProps = $props();
29
-
30
- const bond = factory().share();
31
-
32
- const isSortable = $derived(bond.state.isSortable);
33
- // const directionAsNumber = $derived(+(direction === 'asc'));
34
-
35
- const unmount = bond.mount();
36
-
37
- $effect(() => unmount);
38
-
39
- function _factory() {
40
- const bondProps = defineState<DataGridThBondProps>([
41
- defineProperty('id', () => id),
42
- defineProperty('width', () => width),
43
- defineProperty('sortable', () => sortable),
44
- defineProperty('hidden', () => hidden),
45
- defineProperty('direction', () => direction)
46
- ]);
47
-
48
- const bondState = new DataGridThBondState(() => bondProps);
49
- return new DataGridThBond(bondState);
50
- }
51
-
52
- function onclick_(ev: Event) {
53
- onclick?.(ev as MouseEvent & { currentTarget: EventTarget & HTMLDivElement });
54
-
55
- if (!ev.defaultPrevented) {
56
- if (!isSortable) {
57
- return;
58
- }
59
-
60
- if (isSortable) {
61
- if (direction === 'asc') {
62
- direction = 'desc';
63
- } else {
64
- direction = 'asc';
65
- }
66
- } else {
67
- if (!(typeof sortable === 'boolean')) {
68
- // sortby_columns[value] = column;
69
- }
70
- }
71
-
72
- onsort?.(new CustomEvent('sort'), {
73
- field: typeof sortable === 'boolean' ? undefined : sortable,
74
- direction
75
- });
76
- }
77
- }
78
- </script>
79
-
80
- <!-- svelte-ignore a11y_no_static_element_interactions -->
81
- {#if !hidden}
82
- <HtmlAtom
83
- {@attach (node) => {
84
- bond.elements.root = node;
85
- }}
86
- {bond}
87
- preset="datagrid.th"
88
- class={[
89
- 'border-border flex cursor-pointer py-1 font-medium select-none',
90
- !!sortable && 'sortable',
91
- '$preset',
92
- klass
93
- ]}
94
- enter={enter?.bind(bond.state)}
95
- exit={exit?.bind(bond.state)}
96
- initial={initial?.bind(bond.state)}
97
- animate={animate?.bind(bond.state)}
98
- onmount={onmount?.bind(bond.state)}
99
- ondestroy={ondestroy?.bind(bond.state)}
100
- onclick={onclick_}
101
- {...bond.props()}
102
- {...restProps}
103
- >
104
- {@render children?.({ th: bond as unknown as DatagridContext })}
105
- </HtmlAtom>
106
- {/if}
1
+ <script lang="ts" generics="T extends keyof HTMLElementTagNameMap, B extends Base = Base">
2
+ import { nanoid } from 'nanoid';
3
+ import { defineProperty, defineState } from '../../../utils';
4
+ import { HtmlAtom, type Base } from '../../atom';
5
+ import { DataGridThBond, DataGridThBondState, type DataGridThBondProps } from './bond.svelte';
6
+ import type { DatagridContext } from '../context';
7
+ import type { DatagridThProps } from '../types';
8
+
9
+ let {
10
+ class: klass = '',
11
+ id = nanoid(),
12
+ width = '1fr',
13
+ direction = 'asc',
14
+ screen = undefined,
15
+ hidden = false,
16
+ sortable = undefined,
17
+ factory = _factory,
18
+ children = undefined,
19
+ onclick = undefined,
20
+ onsort = undefined,
21
+ onmount = undefined,
22
+ ondestroy = undefined,
23
+ animate = undefined,
24
+ enter = undefined,
25
+ exit = undefined,
26
+ initial = undefined,
27
+ ...restProps
28
+ }: DatagridThProps = $props();
29
+
30
+ const bond = factory().share();
31
+
32
+ const isSortable = $derived(bond.state.isSortable);
33
+ // const directionAsNumber = $derived(+(direction === 'asc'));
34
+
35
+ const unmount = bond.mount();
36
+
37
+ $effect(() => unmount);
38
+
39
+ function _factory() {
40
+ const bondProps = defineState<DataGridThBondProps>([
41
+ defineProperty('id', () => id),
42
+ defineProperty('width', () => width),
43
+ defineProperty('sortable', () => sortable),
44
+ defineProperty('hidden', () => hidden),
45
+ defineProperty('direction', () => direction)
46
+ ]);
47
+
48
+ const bondState = new DataGridThBondState(() => bondProps);
49
+ return new DataGridThBond(bondState);
50
+ }
51
+
52
+ function onclick_(ev: Event) {
53
+ onclick?.(ev as MouseEvent & { currentTarget: EventTarget & HTMLDivElement });
54
+
55
+ if (!ev.defaultPrevented) {
56
+ if (!isSortable) {
57
+ return;
58
+ }
59
+
60
+ if (isSortable) {
61
+ if (direction === 'asc') {
62
+ direction = 'desc';
63
+ } else {
64
+ direction = 'asc';
65
+ }
66
+ } else {
67
+ if (!(typeof sortable === 'boolean')) {
68
+ // sortby_columns[value] = column;
69
+ }
70
+ }
71
+
72
+ onsort?.(new CustomEvent('sort'), {
73
+ field: typeof sortable === 'boolean' ? undefined : sortable,
74
+ direction
75
+ });
76
+ }
77
+ }
78
+ </script>
79
+
80
+ <!-- svelte-ignore a11y_no_static_element_interactions -->
81
+ {#if !hidden}
82
+ <HtmlAtom
83
+ {@attach (node) => {
84
+ bond.elements.root = node;
85
+ }}
86
+ {bond}
87
+ preset="datagrid.th"
88
+ class={[
89
+ 'border-border flex cursor-pointer py-1 font-medium select-none',
90
+ !!sortable && 'sortable',
91
+ '$preset',
92
+ klass
93
+ ]}
94
+ enter={enter?.bind(bond.state)}
95
+ exit={exit?.bind(bond.state)}
96
+ initial={initial?.bind(bond.state)}
97
+ animate={animate?.bind(bond.state)}
98
+ onmount={onmount?.bind(bond.state)}
99
+ ondestroy={ondestroy?.bind(bond.state)}
100
+ onclick={onclick_}
101
+ {...bond.props()}
102
+ {...restProps}
103
+ >
104
+ {@render children?.({ th: bond as unknown as DatagridContext })}
105
+ </HtmlAtom>
106
+ {/if}