lithesome 0.13.7 → 0.14.0

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 (139) hide show
  1. package/dist/components/Accordion/Accordion.svelte +8 -21
  2. package/dist/components/Accordion/Accordion.svelte.d.ts +0 -2
  3. package/dist/components/Accordion/AccordionButton.svelte +6 -21
  4. package/dist/components/Accordion/AccordionContent.svelte +8 -13
  5. package/dist/components/Accordion/AccordionHeading.svelte +4 -10
  6. package/dist/components/Accordion/AccordionItem.svelte +6 -28
  7. package/dist/components/Accordion/main.svelte.d.ts +93 -0
  8. package/dist/components/Accordion/main.svelte.js +126 -0
  9. package/dist/components/Accordion/types.d.ts +5 -12
  10. package/dist/components/Checkbox/Checkbox.svelte +1 -2
  11. package/dist/components/Combobox/Combobox.svelte +31 -40
  12. package/dist/components/Combobox/Combobox.svelte.d.ts +10 -12
  13. package/dist/components/Combobox/ComboboxArrow.svelte +4 -11
  14. package/dist/components/Combobox/ComboboxContent.svelte +7 -11
  15. package/dist/components/Combobox/ComboboxInput.svelte +7 -74
  16. package/dist/components/Combobox/ComboboxOption.svelte +10 -48
  17. package/dist/components/Combobox/main.svelte.d.ts +120 -0
  18. package/dist/components/Combobox/main.svelte.js +282 -0
  19. package/dist/components/Combobox/types.d.ts +10 -14
  20. package/dist/components/Hovercard/Hovercard.svelte +20 -20
  21. package/dist/components/Hovercard/Hovercard.svelte.d.ts +0 -2
  22. package/dist/components/Hovercard/HovercardArrow.svelte +4 -11
  23. package/dist/components/Hovercard/HovercardContent.svelte +6 -22
  24. package/dist/components/Hovercard/HovercardTrigger.svelte +6 -44
  25. package/dist/components/Hovercard/main.svelte.d.ts +63 -0
  26. package/dist/components/Hovercard/main.svelte.js +148 -0
  27. package/dist/components/Hovercard/types.d.ts +3 -3
  28. package/dist/components/Menu/Menu.svelte +18 -20
  29. package/dist/components/Menu/Menu.svelte.d.ts +0 -2
  30. package/dist/components/Menu/MenuArrow.svelte +4 -4
  31. package/dist/components/Menu/MenuContent.svelte +6 -7
  32. package/dist/components/Menu/MenuItem.svelte +8 -39
  33. package/dist/components/Menu/MenuTrigger.svelte +6 -78
  34. package/dist/components/Menu/main.svelte.d.ts +83 -0
  35. package/dist/components/Menu/main.svelte.js +211 -0
  36. package/dist/components/Menu/types.d.ts +2 -0
  37. package/dist/components/Modal/Modal.svelte +10 -44
  38. package/dist/components/Modal/Modal.svelte.d.ts +0 -2
  39. package/dist/components/Modal/ModalContent.svelte +18 -19
  40. package/dist/components/Modal/ModalDescription.svelte +3 -10
  41. package/dist/components/Modal/ModalOverlay.svelte +16 -12
  42. package/dist/components/Modal/ModalTitle.svelte +3 -3
  43. package/dist/components/Modal/main.svelte.d.ts +62 -0
  44. package/dist/components/Modal/main.svelte.js +106 -0
  45. package/dist/components/Pin/Pin.svelte +10 -33
  46. package/dist/components/Pin/Pin.svelte.d.ts +0 -2
  47. package/dist/components/Pin/PinInput.svelte +4 -115
  48. package/dist/components/Pin/PinValue.svelte +5 -14
  49. package/dist/components/Pin/main.svelte.d.ts +70 -0
  50. package/dist/components/Pin/main.svelte.js +174 -0
  51. package/dist/components/Pin/types.d.ts +2 -6
  52. package/dist/components/Popover/Popover.svelte +9 -38
  53. package/dist/components/Popover/Popover.svelte.d.ts +0 -2
  54. package/dist/components/Popover/PopoverArrow.svelte +3 -10
  55. package/dist/components/Popover/PopoverContent.svelte +6 -8
  56. package/dist/components/Popover/PopoverTrigger.svelte +6 -59
  57. package/dist/components/Popover/main.svelte.d.ts +51 -0
  58. package/dist/components/Popover/main.svelte.js +132 -0
  59. package/dist/components/RadioGroup/RadioGroup.svelte +12 -29
  60. package/dist/components/RadioGroup/RadioGroup.svelte.d.ts +0 -2
  61. package/dist/components/RadioGroup/RadioGroupItem.svelte +7 -56
  62. package/dist/components/RadioGroup/main.svelte.d.ts +61 -0
  63. package/dist/components/RadioGroup/main.svelte.js +115 -0
  64. package/dist/components/RadioGroup/types.d.ts +4 -6
  65. package/dist/components/Select/Select.svelte +17 -31
  66. package/dist/components/Select/Select.svelte.d.ts +10 -12
  67. package/dist/components/Select/SelectArrow.svelte +4 -11
  68. package/dist/components/Select/SelectContent.svelte +5 -8
  69. package/dist/components/Select/SelectOption.svelte +9 -55
  70. package/dist/components/Select/SelectTrigger.svelte +6 -72
  71. package/dist/components/Select/SelectValue.svelte +5 -14
  72. package/dist/components/Select/main.svelte.d.ts +123 -0
  73. package/dist/components/Select/main.svelte.js +306 -0
  74. package/dist/components/Select/types.d.ts +4 -3
  75. package/dist/components/Slider/Slider.svelte +19 -86
  76. package/dist/components/Slider/Slider.svelte.d.ts +0 -2
  77. package/dist/components/Slider/SliderRange.svelte +3 -27
  78. package/dist/components/Slider/SliderThumb.svelte +4 -62
  79. package/dist/components/Slider/SliderValue.svelte +4 -11
  80. package/dist/components/Slider/main.svelte.d.ts +112 -0
  81. package/dist/components/Slider/main.svelte.js +232 -0
  82. package/dist/components/Slider/types.d.ts +1 -5
  83. package/dist/components/Switch/Switch.svelte +1 -2
  84. package/dist/components/Tabs/Tabs.svelte +7 -25
  85. package/dist/components/Tabs/Tabs.svelte.d.ts +0 -2
  86. package/dist/components/Tabs/TabsButton.svelte +8 -48
  87. package/dist/components/Tabs/TabsContent.svelte +7 -18
  88. package/dist/components/Tabs/TabsList.svelte +5 -14
  89. package/dist/components/Tabs/main.svelte.d.ts +88 -0
  90. package/dist/components/Tabs/main.svelte.js +136 -0
  91. package/dist/components/Tabs/types.d.ts +2 -4
  92. package/dist/components/Toast/Toast.svelte +3 -20
  93. package/dist/components/Toast/Toast.svelte.d.ts +0 -2
  94. package/dist/components/Toast/ToastMessage.svelte +3 -10
  95. package/dist/components/Toast/ToastTitle.svelte +3 -3
  96. package/dist/components/Toast/Toaster.svelte +1 -1
  97. package/dist/components/Toast/index.d.ts +2 -1
  98. package/dist/components/Toast/index.js +2 -1
  99. package/dist/components/Toast/main.svelte.d.ts +38 -0
  100. package/dist/components/Toast/main.svelte.js +93 -0
  101. package/dist/internal/components/FloatingArrow.svelte +10 -19
  102. package/dist/internal/components/FloatingArrow.svelte.d.ts +12 -12
  103. package/dist/internal/components/FloatingContent.svelte +15 -25
  104. package/dist/internal/components/FloatingContent.svelte.d.ts +12 -12
  105. package/dist/internal/components/types.d.ts +11 -0
  106. package/dist/internal/components/types.js +1 -0
  107. package/dist/internal/helpers/context.svelte.d.ts +24 -20
  108. package/dist/internal/helpers/context.svelte.js +44 -45
  109. package/dist/internal/helpers/log.d.ts +1 -1
  110. package/dist/internal/helpers/log.js +1 -1
  111. package/dist/internal/helpers/transition.d.ts +0 -1
  112. package/dist/internal/helpers/utils.svelte.d.ts +5 -0
  113. package/dist/internal/helpers/utils.svelte.js +15 -4
  114. package/dist/internal/types.d.ts +8 -1
  115. package/package.json +27 -29
  116. package/dist/components/Accordion/context.svelte.d.ts +0 -18
  117. package/dist/components/Accordion/context.svelte.js +0 -31
  118. package/dist/components/Combobox/context.svelte.d.ts +0 -38
  119. package/dist/components/Combobox/context.svelte.js +0 -95
  120. package/dist/components/Hovercard/context.svelte.d.ts +0 -22
  121. package/dist/components/Hovercard/context.svelte.js +0 -37
  122. package/dist/components/Menu/context.svelte.d.ts +0 -16
  123. package/dist/components/Menu/context.svelte.js +0 -40
  124. package/dist/components/Modal/context.svelte.d.ts +0 -10
  125. package/dist/components/Modal/context.svelte.js +0 -13
  126. package/dist/components/Pin/context.svelte.d.ts +0 -24
  127. package/dist/components/Pin/context.svelte.js +0 -28
  128. package/dist/components/Popover/context.svelte.d.ts +0 -15
  129. package/dist/components/Popover/context.svelte.js +0 -20
  130. package/dist/components/RadioGroup/context.svelte.d.ts +0 -24
  131. package/dist/components/RadioGroup/context.svelte.js +0 -29
  132. package/dist/components/Select/context.svelte.d.ts +0 -33
  133. package/dist/components/Select/context.svelte.js +0 -89
  134. package/dist/components/Slider/context.svelte.d.ts +0 -32
  135. package/dist/components/Slider/context.svelte.js +0 -45
  136. package/dist/components/Tabs/context.svelte.d.ts +0 -17
  137. package/dist/components/Tabs/context.svelte.js +0 -24
  138. package/dist/components/Toast/context.svelte.d.ts +0 -11
  139. package/dist/components/Toast/context.svelte.js +0 -37
@@ -1,33 +1,20 @@
1
- <script lang="ts" context="module">import { setupContext } from "../../internal/index.js";
2
- import { AccordionContext } from "./context.svelte.js";
3
- export const { context, contextName } = setupContext();
4
- </script>
5
-
6
- <script lang="ts">import { useActions, classProp } from "../../internal/index.js";
7
- import { setContext } from "svelte";
1
+ <script lang="ts">import { useActions, classProp, stateValue } from "../../internal/index.js";
2
+ import { createAccordionRootContext } from "./main.svelte.js";
8
3
  let {
9
4
  children,
10
5
  use = [],
11
6
  class: klass,
7
+ value = $bindable(),
12
8
  self = $bindable(),
13
9
  single = $bindable(false),
14
10
  ...props
15
11
  } = $props();
16
- const ctx = new AccordionContext({ single });
17
- const active = $derived(ctx.activeItems.length > 0);
18
- setContext(contextName, ctx);
19
- $effect(() => {
20
- ctx.single = single;
12
+ const ctx = createAccordionRootContext({
13
+ single: stateValue(() => single),
14
+ value: stateValue(() => value)
21
15
  });
22
16
  </script>
23
17
 
24
- <div
25
- bind:this={self}
26
- use:useActions={use}
27
- id={ctx.uid()}
28
- class={classProp(klass, { active })}
29
- data-accordion=""
30
- {...props}
31
- >
32
- {@render children({ active })}
18
+ <div bind:this={self} use:useActions={use} class={classProp(klass)} {...ctx.attrs} {...props}>
19
+ {@render children({})}
33
20
  </div>
@@ -1,6 +1,4 @@
1
1
  import { SvelteComponent } from "svelte";
2
- import { AccordionContext } from './context.svelte.js';
3
- export declare const context: () => AccordionContext, contextName: string;
4
2
  import type { AccordionProps } from './types.js';
5
3
  declare const __propDef: {
6
4
  props: AccordionProps;
@@ -1,31 +1,16 @@
1
- <script lang="ts">import { context } from "./Accordion.svelte";
1
+ <script lang="ts">import { useAccordionButton } from "./main.svelte.js";
2
2
  import { useActions, classProp } from "../../internal/index.js";
3
- import { getContext } from "svelte";
4
- let { children, class: klass, use = [], self = $bindable(), onClick, ...props } = $props();
5
- const ctx = context();
6
- const itemId = getContext("accordionitem-id");
7
- const active = $derived(ctx.activeItems.includes(itemId));
8
- const item = $derived(ctx.items.find((el) => el.id === itemId));
9
- const handleClick = (e) => {
10
- onClick?.(e);
11
- if (!item?.disabled)
12
- ctx.toggle(itemId);
13
- };
3
+ let { children, class: klass, use = [], self = $bindable(), ...props } = $props();
4
+ const ctx = useAccordionButton();
14
5
  </script>
15
6
 
16
7
  <button
17
8
  type="button"
18
9
  bind:this={self}
19
10
  use:useActions={use}
20
- class={classProp(klass, { active, disabled: item?.disabled || false })}
21
- aria-expanded={active}
22
- aria-disabled={item?.disabled}
23
- aria-controls={active ? ctx.uid('content') : undefined}
24
- tabindex={item?.disabled ? -1 : 0}
25
- data-accordionbutton=""
26
- data-active={active || undefined}
27
- onclick={handleClick}
11
+ class={classProp(klass, ctx.state)}
12
+ {...ctx.attrs}
28
13
  {...props}
29
14
  >
30
- {@render children({ active, disabled: item?.disabled || false })}
15
+ {@render children(ctx.state)}
31
16
  </button>
@@ -1,27 +1,22 @@
1
- <script lang="ts">import { context } from "./Accordion.svelte";
1
+ <script lang="ts">import { useAccordionContent } from "./main.svelte.js";
2
2
  import { useActions, getTransition, classProp } from "../../internal/index.js";
3
- import { getContext } from "svelte";
4
3
  let { children, class: klass, use = [], self = $bindable(), transition, ...props } = $props();
5
- const ctx = context();
6
- const itemId = getContext("accordionitem-id");
7
- const active = $derived(ctx.activeItems.includes(itemId));
4
+ const ctx = useAccordionContent();
8
5
  const { inTransition, outTransition } = getTransition(transition);
9
6
  const attrs = $derived({
10
- id: ctx.uid("content"),
11
- "data-accordioncontent": "",
12
- "data-active": active || void 0,
13
- class: classProp(klass, { active })
7
+ ...ctx.attrs,
8
+ class: classProp(klass)
14
9
  });
15
10
  </script>
16
11
 
17
- {#if inTransition && outTransition && active}
12
+ {#if inTransition && outTransition && ctx.item.Active}
18
13
  {@const { config: inConf, transition: inFn } = inTransition}
19
14
  {@const { config: outConf, transition: outFn } = outTransition}
20
15
  <div bind:this={self} use:useActions={use} in:inFn={inConf} out:outFn={outConf} {...attrs} {...props}>
21
- {@render children({ active })}
16
+ {@render children({})}
22
17
  </div>
23
- {:else if active}
18
+ {:else if ctx.item.Active}
24
19
  <div bind:this={self} use:useActions={use} {...attrs} {...props}>
25
- {@render children({ active })}
20
+ {@render children({})}
26
21
  </div>
27
22
  {/if}
@@ -1,15 +1,9 @@
1
- <script lang="ts">import { useActions, classProp } from "../../internal/index.js";
1
+ <script lang="ts">import { useAccordionHeading } from "./main.svelte.js";
2
+ import { useActions, classProp } from "../../internal/index.js";
2
3
  let { children, class: klass, use = [], level = 3, self = $bindable(), ...props } = $props();
4
+ const ctx = useAccordionHeading({ level });
3
5
  </script>
4
6
 
5
- <div
6
- bind:this={self}
7
- use:useActions={use}
8
- class={classProp(klass)}
9
- role="heading"
10
- aria-level={level}
11
- data-accordionheading=""
12
- {...props}
13
- >
7
+ <div bind:this={self} use:useActions={use} class={classProp(klass)} {...ctx.attrs} {...props}>
14
8
  {@render children({})}
15
9
  </div>
@@ -1,6 +1,5 @@
1
- <script lang="ts">import { context } from "./Accordion.svelte";
2
- import { log, useActions, createUID, classProp } from "../../internal/index.js";
3
- import { onMount, setContext } from "svelte";
1
+ <script lang="ts">import { createAccordionItemContext } from "./main.svelte.js";
2
+ import { useActions, classProp, stateValue } from "../../internal/index.js";
4
3
  let {
5
4
  children,
6
5
  class: klass,
@@ -9,32 +8,11 @@ let {
9
8
  disabled = $bindable(false),
10
9
  ...props
11
10
  } = $props();
12
- const ctx = context();
13
- const { uid } = createUID("item");
14
- const active = $derived(ctx.activeItems.includes(uid()));
15
- setContext("accordionitem-id", uid());
16
- onMount(() => {
17
- if (!ctx)
18
- log.error("<AccordionItem /> must be a direct child of <Accordion />");
19
- ctx.register({
20
- id: uid(),
21
- disabled
22
- });
23
- });
24
- $effect(() => {
25
- ctx.setDisabled(uid(), disabled);
11
+ const ctx = createAccordionItemContext({
12
+ disabled: stateValue(() => disabled)
26
13
  });
27
14
  </script>
28
15
 
29
- <div
30
- bind:this={self}
31
- use:useActions={use}
32
- id={uid()}
33
- class={classProp(klass, { active, disabled })}
34
- data-accordionitem=""
35
- data-disabled={disabled || undefined}
36
- data-state={active ? 'opened' : 'closed'}
37
- {...props}
38
- >
39
- {@render children({ active, disabled })}
16
+ <div bind:this={self} use:useActions={use} {...ctx.attrs} class={classProp(klass, ctx.state)} {...props}>
17
+ {@render children(ctx.state)}
40
18
  </div>
@@ -0,0 +1,93 @@
1
+ import { type StateValues } from '../../internal/index.js';
2
+ interface Item {
3
+ id: string;
4
+ disabled: boolean;
5
+ }
6
+ type AccordionRootProps = StateValues<{
7
+ single: boolean;
8
+ value?: string;
9
+ }>;
10
+ declare class AccordionRoot {
11
+ uid: (component?: string) => string;
12
+ $value: AccordionRootProps['value'];
13
+ $single: AccordionRootProps['single'];
14
+ items: Item[];
15
+ activeItems: string[];
16
+ constructor(props: AccordionRootProps);
17
+ toggleActiveItem: (itemId: string) => void;
18
+ attrs: {
19
+ readonly id: string;
20
+ readonly 'data-accordion': "";
21
+ };
22
+ }
23
+ type AccordionItemProps = StateValues<{
24
+ disabled: boolean;
25
+ }>;
26
+ declare class AccordionItem {
27
+ uid: (component?: string) => string;
28
+ root: AccordionRoot;
29
+ $disabled: AccordionItemProps['disabled'];
30
+ Active: boolean;
31
+ constructor(root: AccordionRoot, props: AccordionItemProps);
32
+ attrs: {
33
+ readonly 'data-accordionitem': "";
34
+ readonly 'data-disabled': boolean;
35
+ readonly 'data-state': "opened" | "closed";
36
+ };
37
+ state: {
38
+ active: boolean;
39
+ disabled: boolean;
40
+ };
41
+ }
42
+ interface AccordionHeadingProps {
43
+ level: 1 | 2 | 3 | 4 | 5 | 6;
44
+ }
45
+ declare class AccordionHeading {
46
+ level: 1 | 2 | 5 | 3 | 4 | 6;
47
+ root: AccordionRoot;
48
+ constructor(root: AccordionRoot, props: AccordionHeadingProps);
49
+ attrs: {
50
+ role: string;
51
+ 'aria-level': 1 | 2 | 5 | 3 | 4 | 6;
52
+ 'data-accordionheading': string;
53
+ };
54
+ }
55
+ declare class AccordionButton {
56
+ #private;
57
+ root: AccordionRoot;
58
+ item: AccordionItem;
59
+ constructor(item: AccordionItem, root: AccordionRoot);
60
+ attrs: {
61
+ readonly 'aria-expanded': boolean;
62
+ readonly 'aria-disabled': boolean;
63
+ readonly 'aria-controls': string | undefined;
64
+ readonly tabindex: 0 | -1;
65
+ readonly 'data-accordionbutton': "";
66
+ readonly 'data-active': true | undefined;
67
+ readonly onclick: () => void;
68
+ };
69
+ state: {
70
+ active: boolean;
71
+ disabled: boolean;
72
+ };
73
+ }
74
+ declare class AccordionContent {
75
+ item: AccordionItem;
76
+ root: AccordionRoot;
77
+ constructor(item: AccordionItem, root: AccordionRoot);
78
+ attrs: {
79
+ id: string;
80
+ 'data-accordioncontent': string;
81
+ 'data-active': boolean;
82
+ } | {
83
+ id?: undefined;
84
+ 'data-accordioncontent'?: undefined;
85
+ 'data-active'?: undefined;
86
+ };
87
+ }
88
+ export declare const createAccordionRootContext: (props: AccordionRootProps) => AccordionRoot;
89
+ export declare const createAccordionItemContext: (props: AccordionItemProps) => AccordionItem;
90
+ export declare const useAccordionHeading: (props: AccordionHeadingProps) => AccordionHeading;
91
+ export declare const useAccordionButton: () => AccordionButton;
92
+ export declare const useAccordionContent: () => AccordionContent;
93
+ export {};
@@ -0,0 +1,126 @@
1
+ import { buildContext, createUID } from '../../internal/index.js';
2
+ class AccordionRoot {
3
+ uid = createUID('accordion').uid;
4
+ $value;
5
+ $single;
6
+ items = $state([]);
7
+ activeItems = $state([]);
8
+ constructor(props) {
9
+ this.$single = props.single;
10
+ this.$value = props.value;
11
+ }
12
+ toggleActiveItem = (itemId) => {
13
+ if (this.$single.val) {
14
+ this.activeItems = this.activeItems[0] === itemId ? [] : [itemId];
15
+ }
16
+ else {
17
+ if (this.activeItems.includes(itemId))
18
+ this.activeItems = this.activeItems.filter((el) => el !== itemId);
19
+ else
20
+ this.activeItems.push(itemId);
21
+ }
22
+ };
23
+ attrs = $derived.by(() => ({
24
+ id: this.uid(),
25
+ 'data-accordion': ''
26
+ }));
27
+ }
28
+ class AccordionItem {
29
+ uid = createUID('item').uid;
30
+ root;
31
+ $disabled;
32
+ Active = $derived.by(() => this.root.activeItems.includes(this.uid()) || false);
33
+ constructor(root, props) {
34
+ this.root = root;
35
+ this.$disabled = props.disabled;
36
+ }
37
+ attrs = $derived.by(() => ({
38
+ 'data-accordionitem': '',
39
+ 'data-disabled': this.$disabled.val,
40
+ 'data-state': this.Active ? 'opened' : 'closed'
41
+ }));
42
+ state = $derived.by(() => ({
43
+ active: this.Active,
44
+ disabled: this.$disabled.val
45
+ }));
46
+ }
47
+ class AccordionHeading {
48
+ level = $state(3);
49
+ root;
50
+ constructor(root, props) {
51
+ this.root = root;
52
+ this.level = props.level;
53
+ }
54
+ attrs = $derived.by(() => ({
55
+ role: 'heading',
56
+ 'aria-level': this.level,
57
+ 'data-accordionheading': ''
58
+ }));
59
+ }
60
+ //
61
+ // Button
62
+ //
63
+ class AccordionButton {
64
+ root;
65
+ item;
66
+ constructor(item, root) {
67
+ this.root = root;
68
+ this.item = item;
69
+ }
70
+ #handleClick = () => {
71
+ if (this.item.$disabled.val)
72
+ return;
73
+ this.root.toggleActiveItem(this.item.uid());
74
+ };
75
+ attrs = $derived.by(() => ({
76
+ 'aria-expanded': this.item.Active,
77
+ 'aria-disabled': this.item.$disabled.val,
78
+ 'aria-controls': this.item.Active ? this.root.uid('content') : undefined,
79
+ tabindex: this.item.$disabled.val ? -1 : 0,
80
+ 'data-accordionbutton': '',
81
+ 'data-active': this.item.Active || undefined,
82
+ onclick: this.#handleClick
83
+ }));
84
+ state = $derived.by(() => ({
85
+ active: this.item.Active,
86
+ disabled: this.item.$disabled.val
87
+ }));
88
+ }
89
+ //
90
+ // Content
91
+ //
92
+ class AccordionContent {
93
+ item;
94
+ root;
95
+ constructor(item, root) {
96
+ this.item = item;
97
+ this.root = root;
98
+ }
99
+ attrs = $derived.by(() => this.item && this.root
100
+ ? {
101
+ id: this.root.uid('content'),
102
+ 'data-accordioncontent': '',
103
+ 'data-active': this.item.Active
104
+ }
105
+ : {});
106
+ }
107
+ //
108
+ // Builders
109
+ //
110
+ const rootContext = buildContext(AccordionRoot);
111
+ const itemContext = buildContext(AccordionItem);
112
+ export const createAccordionRootContext = (props) => {
113
+ return rootContext.createContext(props);
114
+ };
115
+ export const createAccordionItemContext = (props) => {
116
+ return itemContext.createContext(rootContext.getContext(), props);
117
+ };
118
+ export const useAccordionHeading = (props) => {
119
+ return rootContext.register(AccordionHeading, props);
120
+ };
121
+ export const useAccordionButton = () => {
122
+ return itemContext.register(AccordionButton, rootContext.getContext());
123
+ };
124
+ export const useAccordionContent = () => {
125
+ return itemContext.register(AccordionContent, rootContext.getContext());
126
+ };
@@ -1,17 +1,11 @@
1
- import type { Props, Handler, Transition } from '../../internal/index.js';
2
- interface AccordionState {
3
- /** True if any item is opened. */
4
- active: boolean;
5
- }
6
- export interface AccordionProps extends Props<HTMLDivElement, AccordionState> {
1
+ import type { Props, Transition } from '../../internal/index.js';
2
+ export interface AccordionProps extends Props<HTMLDivElement> {
3
+ /** The value of the active item. */
4
+ value?: string;
7
5
  /** Allow only a singluar `AccordionItem` to be opened at once. */
8
6
  single?: boolean;
9
7
  }
10
- interface AccordionContentState {
11
- /** True if any item is opened. */
12
- active: boolean;
13
- }
14
- export interface AccordionContentProps extends Props<HTMLDivElement, AccordionContentState> {
8
+ export interface AccordionContentProps extends Props<HTMLDivElement> {
15
9
  /**
16
10
  * The `svelte/transtion` you wish to use.
17
11
  *
@@ -30,7 +24,6 @@ interface AccordionButtonState {
30
24
  disabled: boolean;
31
25
  }
32
26
  export interface AccordionButtonProps extends Props<HTMLButtonElement, AccordionButtonState> {
33
- onClick?: Handler<MouseEvent, HTMLButtonElement>;
34
27
  }
35
28
  interface AccordionItemState {
36
29
  /** True if the item is opened. */
@@ -12,8 +12,7 @@ let {
12
12
  } = $props();
13
13
  const handleClick = (e) => {
14
14
  onClick?.(e);
15
- if (disabled)
16
- return;
15
+ if (disabled) return;
17
16
  checked = checked === "mixed" ? true : !checked;
18
17
  };
19
18
  </script>
@@ -1,56 +1,47 @@
1
- <script lang="ts" context="module">import { setupContext } from "../../internal/index.js";
2
- import { ComboboxContext } from "./context.svelte.js";
3
- export const { context, contextName } = setupContext();
4
- </script>
5
-
6
- <script lang="ts" generics="ValueType">import { useActions, classProp } from "../../internal/index.js";
7
- import { setContext, onMount, tick } from "svelte";
1
+ <script lang="ts">import { useActions, classProp, stateValue } from "../../internal/index.js";
2
+ import { createRootContext } from "./main.svelte.js";
8
3
  let {
9
4
  children,
10
5
  use = [],
11
6
  class: klass,
12
7
  value = $bindable(),
13
8
  label = $bindable(),
14
- touched = $bindable(),
9
+ touched = $bindable(false),
10
+ disabled = $bindable(false),
11
+ visible = $bindable(true),
15
12
  self = $bindable(),
16
13
  onChange,
17
14
  ...props
18
15
  } = $props();
19
16
  const multiple = Array.isArray(value);
20
- const ctx = new ComboboxContext(
21
- { multiple },
22
- {
23
- onChange({ newValue, newTouched, newLabel }) {
24
- if (newValue) {
25
- value = newValue;
26
- onChange?.({ value: newValue });
27
- }
28
- if (newLabel && !multiple) {
29
- label = newLabel;
30
- onChange?.({ label: newLabel });
31
- }
32
- if (typeof newTouched === "boolean")
33
- touched = newTouched;
17
+ const ctx = createRootContext({
18
+ value: stateValue(
19
+ () => value,
20
+ (v) => {
21
+ value = v;
22
+ onChange?.({ value: v });
23
+ }
24
+ ),
25
+ disabled: stateValue(() => disabled),
26
+ label: stateValue(
27
+ () => label || self?.textContent?.trim() || "",
28
+ (v) => {
29
+ label = v;
30
+ onChange?.({ label: v });
34
31
  }
35
- }
36
- );
37
- setContext(contextName, ctx);
38
- onMount(async () => {
39
- await tick();
40
- ctx.setInitialSelected(value);
41
- ctx.close();
42
- ctx.mounted = true;
32
+ ),
33
+ multiple: stateValue(() => multiple),
34
+ touched: stateValue(
35
+ () => touched,
36
+ (v) => touched = v
37
+ ),
38
+ visible: stateValue(
39
+ () => visible,
40
+ (v) => visible = v
41
+ )
43
42
  });
44
43
  </script>
45
44
 
46
- <div
47
- bind:this={self}
48
- use:useActions={use}
49
- id={ctx.uid()}
50
- class={classProp(klass, { visible: ctx.visible && ctx.mounted })}
51
- data-select=""
52
- data-state={ctx.visible && ctx.mounted ? 'opened' : 'closed'}
53
- {...props}
54
- >
55
- {@render children({ visible: ctx.visible && ctx.mounted })}
45
+ <div bind:this={self} use:useActions={use} class={classProp(klass, ctx.state)} {...ctx.attrs} {...props}>
46
+ {@render children(ctx.state)}
56
47
  </div>
@@ -1,17 +1,15 @@
1
1
  import { SvelteComponent } from "svelte";
2
- import { ComboboxContext } from './context.svelte.js';
3
- export declare const context: () => ComboboxContext<any>, contextName: string;
4
2
  import type { ComboboxProps } from './types.js';
5
- declare class __sveltets_Render<ValueType> {
6
- props(): ComboboxProps<ValueType>;
7
- events(): {} & {
3
+ declare const __propDef: {
4
+ props: ComboboxProps;
5
+ events: {
8
6
  [evt: string]: CustomEvent<any>;
9
7
  };
10
- slots(): {};
8
+ slots: {};
9
+ };
10
+ type ComboboxProps_ = typeof __propDef.props;
11
+ export { ComboboxProps_ as ComboboxProps };
12
+ export type ComboboxEvents = typeof __propDef.events;
13
+ export type ComboboxSlots = typeof __propDef.slots;
14
+ export default class Combobox extends SvelteComponent<ComboboxProps_, ComboboxEvents, ComboboxSlots> {
11
15
  }
12
- export type ComboboxProps_<ValueType> = ReturnType<__sveltets_Render<ValueType>['props']>;
13
- export type ComboboxEvents<ValueType> = ReturnType<__sveltets_Render<ValueType>['events']>;
14
- export type ComboboxSlots<ValueType> = ReturnType<__sveltets_Render<ValueType>['slots']>;
15
- export default class Combobox<ValueType> extends SvelteComponent<ComboboxProps_<ValueType>, ComboboxEvents<ValueType>, ComboboxSlots<ValueType>> {
16
- }
17
- export {};
@@ -1,14 +1,7 @@
1
- <script lang="ts">import { context } from "./Combobox.svelte";
2
- import { FloatingArrow } from "../../internal/index.js";
1
+ <script lang="ts">import { FloatingArrow } from "../../internal/index.js";
2
+ import { useComboboxArrow } from "./main.svelte.js";
3
3
  let { class: klass, use = [], self = $bindable(), ...props } = $props();
4
- const ctx = context();
4
+ const ctx = useComboboxArrow();
5
5
  </script>
6
6
 
7
- <FloatingArrow
8
- {ctx}
9
- component="Combobox"
10
- state={{ visible: ctx.visible }}
11
- class={klass}
12
- id={ctx.uid('arrow')}
13
- {...props}
14
- />
7
+ <FloatingArrow {ctx} component="Combobox" class={klass} {...props} />
@@ -1,5 +1,5 @@
1
- <script lang="ts">import { context } from "./Combobox.svelte";
2
- import { classProp, FloatingContent } from "../../internal/index.js";
1
+ <script lang="ts">import { FloatingContent } from "../../internal/index.js";
2
+ import { useComboboxContent } from "./main.svelte.js";
3
3
  let {
4
4
  children,
5
5
  transition,
@@ -12,16 +12,13 @@ let {
12
12
  constrainViewport = false,
13
13
  ...props
14
14
  } = $props();
15
- const ctx = context();
16
- const state = $derived({ visible: ctx.visible });
15
+ const ctx = useComboboxContent();
17
16
  </script>
18
17
 
19
18
  <FloatingContent
20
19
  {children}
21
- componentName="Select"
22
- visible={ctx.visible}
23
- bind:self
24
- {state}
20
+ componentName="Combobox"
21
+ visible={ctx.root.$visible.val}
25
22
  {ctx}
26
23
  {transition}
27
24
  {use}
@@ -29,9 +26,8 @@ const state = $derived({ visible: ctx.visible });
29
26
  {constrainViewport}
30
27
  {placement}
31
28
  {portalTarget}
32
- outsideCallback={() => ctx.close()}
29
+ outsideCallback={() => ctx.root.close()}
33
30
  role="listbox"
34
- class={classProp(klass, state)}
35
- hidden={!ctx.mounted || undefined}
31
+ class={klass}
36
32
  {...props}
37
33
  />