@joewinke/jatui 0.1.33 → 0.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (221) hide show
  1. package/CLAUDE.md +22 -0
  2. package/dist/actions/attention.d.ts +24 -0
  3. package/dist/actions/attention.js +94 -0
  4. package/dist/actions/floating.d.ts +53 -0
  5. package/dist/actions/floating.js +158 -0
  6. package/dist/actions/staggerEntrance.d.ts +28 -0
  7. package/dist/actions/staggerEntrance.js +71 -0
  8. package/dist/actions/tooltip.d.ts +28 -0
  9. package/dist/actions/tooltip.js +186 -0
  10. package/dist/assets/sounds/README.md +47 -0
  11. package/dist/assets/sounds/error.d.ts +1 -0
  12. package/dist/assets/sounds/error.js +4 -0
  13. package/dist/assets/sounds/notify.d.ts +1 -0
  14. package/dist/assets/sounds/notify.js +4 -0
  15. package/dist/assets/sounds/pop.d.ts +1 -0
  16. package/dist/assets/sounds/pop.js +4 -0
  17. package/dist/assets/sounds/send.d.ts +1 -0
  18. package/dist/assets/sounds/send.js +4 -0
  19. package/dist/assets/sounds/success.d.ts +1 -0
  20. package/dist/assets/sounds/success.js +4 -0
  21. package/dist/assets/sounds/toggle.d.ts +1 -0
  22. package/dist/assets/sounds/toggle.js +4 -0
  23. package/dist/carousel/index.d.ts +1 -0
  24. package/dist/carousel/index.js +2 -0
  25. package/dist/components/AnimatedNumber.svelte +112 -0
  26. package/dist/components/AnimatedNumber.svelte.d.ts +8 -0
  27. package/dist/components/Badge.svelte +75 -4
  28. package/dist/components/Badge.svelte.d.ts +6 -1
  29. package/dist/components/Button.svelte +196 -21
  30. package/dist/components/Button.svelte.d.ts +10 -1
  31. package/dist/components/Carousel.svelte +265 -0
  32. package/dist/components/Carousel.svelte.d.ts +21 -0
  33. package/dist/components/ChipInput.svelte +63 -3
  34. package/dist/components/Collapse.svelte +70 -14
  35. package/dist/components/Collapse.svelte.d.ts +11 -0
  36. package/dist/components/ColorSelector.svelte +21 -24
  37. package/dist/components/CommandPalette.svelte +475 -0
  38. package/dist/components/CommandPalette.svelte.d.ts +3 -0
  39. package/dist/components/ContextMenu.svelte +9 -73
  40. package/dist/components/CopyButton.svelte +156 -0
  41. package/dist/components/CopyButton.svelte.d.ts +12 -0
  42. package/dist/components/HoldToConfirm.svelte +183 -0
  43. package/dist/components/HoldToConfirm.svelte.d.ts +11 -0
  44. package/dist/components/KeyboardShortcutsOverlay.svelte +54 -8
  45. package/dist/components/KeyboardShortcutsOverlay.svelte.d.ts +3 -0
  46. package/dist/components/PasswordMeter.svelte +87 -0
  47. package/dist/components/PasswordMeter.svelte.d.ts +8 -0
  48. package/dist/components/PinInput.svelte +186 -0
  49. package/dist/components/PinInput.svelte.d.ts +13 -0
  50. package/dist/components/QuantityStepper.svelte +185 -0
  51. package/dist/components/QuantityStepper.svelte.d.ts +12 -0
  52. package/dist/components/Skeleton.svelte +123 -0
  53. package/dist/components/Skeleton.svelte.d.ts +12 -0
  54. package/dist/components/SpeechForm.svelte +37 -0
  55. package/dist/components/StatusBadge.svelte +31 -3
  56. package/dist/components/StatusBadge.svelte.d.ts +0 -5
  57. package/dist/components/Tabs.svelte +270 -0
  58. package/dist/components/Tabs.svelte.d.ts +15 -0
  59. package/dist/components/TextInput.svelte +138 -38
  60. package/dist/components/TextInput.svelte.d.ts +9 -1
  61. package/dist/components/VoicePlayer.svelte +51 -0
  62. package/dist/components/basic/Alert.svelte +36 -0
  63. package/dist/components/basic/Alert.svelte.d.ts +9 -0
  64. package/dist/components/basic/Breadcrumb.svelte +27 -0
  65. package/dist/components/basic/Breadcrumb.svelte.d.ts +11 -0
  66. package/dist/components/basic/ButtonGroup.svelte +15 -0
  67. package/dist/components/basic/ButtonGroup.svelte.d.ts +8 -0
  68. package/dist/components/basic/Checkbox.svelte +85 -0
  69. package/dist/components/basic/Checkbox.svelte.d.ts +15 -0
  70. package/dist/components/basic/Empty.svelte +17 -0
  71. package/dist/components/basic/Empty.svelte.d.ts +8 -0
  72. package/dist/components/basic/Kbd.svelte +16 -0
  73. package/dist/components/basic/Kbd.svelte.d.ts +8 -0
  74. package/dist/components/basic/Pagination.svelte +104 -0
  75. package/dist/components/basic/Pagination.svelte.d.ts +12 -0
  76. package/dist/components/basic/RadioGroup.svelte +71 -0
  77. package/dist/components/basic/RadioGroup.svelte.d.ts +18 -0
  78. package/dist/components/basic/Separator.svelte +19 -0
  79. package/dist/components/basic/Separator.svelte.d.ts +8 -0
  80. package/dist/components/basic/Slider.svelte +72 -0
  81. package/dist/components/basic/Slider.svelte.d.ts +17 -0
  82. package/dist/components/basic/Switch.svelte +88 -0
  83. package/dist/components/basic/Switch.svelte.d.ts +14 -0
  84. package/dist/components/basic/Toggle.svelte +43 -0
  85. package/dist/components/basic/Toggle.svelte.d.ts +14 -0
  86. package/dist/components/graph/GraphCanvas.svelte +103 -0
  87. package/dist/components/graph/GraphCanvas.svelte.d.ts +22 -0
  88. package/dist/components/graph/JatuiNode.svelte +128 -0
  89. package/dist/components/graph/JatuiNode.svelte.d.ts +14 -0
  90. package/dist/components/graph/index.d.ts +4 -0
  91. package/dist/components/graph/index.js +4 -0
  92. package/dist/components/graph/theme.d.ts +27 -0
  93. package/dist/components/graph/theme.js +136 -0
  94. package/dist/components/messaging/MessageItem.svelte +92 -0
  95. package/dist/components/messaging/MessageItem.svelte.d.ts +5 -0
  96. package/dist/components/messaging/TypingIndicator.svelte +63 -0
  97. package/dist/components/messaging/TypingIndicator.svelte.d.ts +7 -0
  98. package/dist/components/pipeline/PipelineColumn.svelte +44 -3
  99. package/dist/components/progress/ProgressBar.svelte +189 -0
  100. package/dist/components/progress/ProgressBar.svelte.d.ts +17 -0
  101. package/dist/components/progress/ProgressRing.svelte +138 -0
  102. package/dist/components/progress/ProgressRing.svelte.d.ts +12 -0
  103. package/dist/components/progress/Steps.svelte +195 -0
  104. package/dist/components/progress/Steps.svelte.d.ts +14 -0
  105. package/dist/components/shell/NavigationMenu.svelte +422 -0
  106. package/dist/components/shell/NavigationMenu.svelte.d.ts +43 -0
  107. package/dist/components/shell/Sidebar.svelte +276 -0
  108. package/dist/components/shell/Sidebar.svelte.d.ts +32 -0
  109. package/dist/components/shell/SidebarGroup.svelte +180 -0
  110. package/dist/components/shell/SidebarGroup.svelte.d.ts +19 -0
  111. package/dist/components/shell/SidebarItem.svelte +170 -0
  112. package/dist/components/shell/SidebarItem.svelte.d.ts +24 -0
  113. package/dist/components/shell/shell.d.ts +30 -0
  114. package/dist/components/shell/shell.js +65 -0
  115. package/dist/components/table/DataTable.svelte +364 -0
  116. package/dist/components/table/DataTable.svelte.d.ts +4 -0
  117. package/dist/components/table/flexRender.d.ts +31 -0
  118. package/dist/components/table/flexRender.js +32 -0
  119. package/dist/components/table/index.d.ts +3 -0
  120. package/dist/components/table/index.js +3 -0
  121. package/dist/components/table/types.d.ts +28 -0
  122. package/dist/components/table/types.js +1 -0
  123. package/dist/components/toast/ToastHost.svelte +21 -0
  124. package/dist/components/toast/ToastHost.svelte.d.ts +3 -0
  125. package/dist/components/toast/ToastItem.svelte +287 -0
  126. package/dist/components/toast/ToastItem.svelte.d.ts +9 -0
  127. package/dist/index.d.ts +51 -0
  128. package/dist/index.js +64 -0
  129. package/dist/showcase/AnimatedBeam.svelte +183 -0
  130. package/dist/showcase/AnimatedBeam.svelte.d.ts +26 -0
  131. package/dist/showcase/AuroraDrift.svelte +74 -0
  132. package/dist/showcase/AuroraDrift.svelte.d.ts +9 -0
  133. package/dist/showcase/BentoCard.svelte +50 -0
  134. package/dist/showcase/BentoCard.svelte.d.ts +14 -0
  135. package/dist/showcase/BentoGrid.svelte +43 -0
  136. package/dist/showcase/BentoGrid.svelte.d.ts +12 -0
  137. package/dist/showcase/BorderBeam.svelte +79 -0
  138. package/dist/showcase/BorderBeam.svelte.d.ts +12 -0
  139. package/dist/showcase/ClipWipe.svelte +82 -0
  140. package/dist/showcase/ClipWipe.svelte.d.ts +12 -0
  141. package/dist/showcase/Confetti.svelte +71 -0
  142. package/dist/showcase/Confetti.svelte.d.ts +10 -0
  143. package/dist/showcase/CursorSpotlight.svelte +85 -0
  144. package/dist/showcase/CursorSpotlight.svelte.d.ts +9 -0
  145. package/dist/showcase/DeviceMock.svelte +186 -0
  146. package/dist/showcase/DeviceMock.svelte.d.ts +11 -0
  147. package/dist/showcase/Dock.svelte +123 -0
  148. package/dist/showcase/Dock.svelte.d.ts +17 -0
  149. package/dist/showcase/FlipCard.svelte +103 -0
  150. package/dist/showcase/FlipCard.svelte.d.ts +10 -0
  151. package/dist/showcase/FocusReveal.svelte +83 -0
  152. package/dist/showcase/FocusReveal.svelte.d.ts +11 -0
  153. package/dist/showcase/Globe.svelte +202 -0
  154. package/dist/showcase/Globe.svelte.d.ts +16 -0
  155. package/dist/showcase/KenBurns.svelte +105 -0
  156. package/dist/showcase/KenBurns.svelte.d.ts +13 -0
  157. package/dist/showcase/Marquee.svelte +89 -0
  158. package/dist/showcase/Marquee.svelte.d.ts +9 -0
  159. package/dist/showcase/ParallaxTilt.svelte +98 -0
  160. package/dist/showcase/ParallaxTilt.svelte.d.ts +10 -0
  161. package/dist/showcase/ScrambleText.svelte +98 -0
  162. package/dist/showcase/ScrambleText.svelte.d.ts +11 -0
  163. package/dist/showcase/ShineSweep.svelte +81 -0
  164. package/dist/showcase/ShineSweep.svelte.d.ts +9 -0
  165. package/dist/showcase/Terminal.svelte +230 -0
  166. package/dist/showcase/Terminal.svelte.d.ts +18 -0
  167. package/dist/showcase/TextSplitReveal.svelte +146 -0
  168. package/dist/showcase/TextSplitReveal.svelte.d.ts +13 -0
  169. package/dist/showcase/TextWave.svelte +55 -0
  170. package/dist/showcase/TextWave.svelte.d.ts +8 -0
  171. package/dist/showcase/TypewriterText.svelte +130 -0
  172. package/dist/showcase/TypewriterText.svelte.d.ts +9 -0
  173. package/dist/showcase/backdrop/GrainGradient.svelte +126 -0
  174. package/dist/showcase/backdrop/GrainGradient.svelte.d.ts +23 -0
  175. package/dist/showcase/backdrop/MeshGradient.svelte +104 -0
  176. package/dist/showcase/backdrop/MeshGradient.svelte.d.ts +20 -0
  177. package/dist/showcase/backdrop/Metaballs.svelte +116 -0
  178. package/dist/showcase/backdrop/Metaballs.svelte.d.ts +18 -0
  179. package/dist/showcase/backdrop/NeuroNoise.svelte +115 -0
  180. package/dist/showcase/backdrop/NeuroNoise.svelte.d.ts +20 -0
  181. package/dist/showcase/backdrop/ShowcaseBackdrop.svelte +48 -0
  182. package/dist/showcase/backdrop/ShowcaseBackdrop.svelte.d.ts +12 -0
  183. package/dist/showcase/backdrop/index.d.ts +5 -0
  184. package/dist/showcase/backdrop/index.js +6 -0
  185. package/dist/showcase/generative/GenerativeBackdrop.svelte +234 -0
  186. package/dist/showcase/generative/GenerativeBackdrop.svelte.d.ts +9 -0
  187. package/dist/showcase/generative/intent.d.ts +7 -0
  188. package/dist/showcase/generative/intent.js +67 -0
  189. package/dist/showcase/generative/manifest.d.ts +9 -0
  190. package/dist/showcase/generative/manifest.js +97 -0
  191. package/dist/showcase/generative/types.d.ts +48 -0
  192. package/dist/showcase/generative/types.js +8 -0
  193. package/dist/showcase/globe/index.d.ts +1 -0
  194. package/dist/showcase/globe/index.js +2 -0
  195. package/dist/showcase/index.d.ts +25 -0
  196. package/dist/showcase/index.js +39 -0
  197. package/dist/showcase/scroll/SmoothScroll.svelte +49 -0
  198. package/dist/showcase/scroll/SmoothScroll.svelte.d.ts +12 -0
  199. package/dist/showcase/scroll/index.d.ts +5 -0
  200. package/dist/showcase/scroll/index.js +4 -0
  201. package/dist/showcase/scroll/scrollProgress.d.ts +24 -0
  202. package/dist/showcase/scroll/scrollProgress.js +65 -0
  203. package/dist/showcase/scroll/scrollReveal.d.ts +30 -0
  204. package/dist/showcase/scroll/scrollReveal.js +70 -0
  205. package/dist/stores/commandPalette.svelte.d.ts +24 -0
  206. package/dist/stores/commandPalette.svelte.js +82 -0
  207. package/dist/stores/toast.svelte.d.ts +28 -0
  208. package/dist/stores/toast.svelte.js +33 -0
  209. package/dist/styles/motion.css +46 -0
  210. package/dist/styles/tokens.css +31 -0
  211. package/dist/transitions/glide.d.ts +31 -0
  212. package/dist/transitions/glide.js +58 -0
  213. package/dist/utils/sound.d.ts +6 -0
  214. package/dist/utils/sound.js +113 -0
  215. package/dist/utils/splitText.d.ts +25 -0
  216. package/dist/utils/splitText.js +94 -0
  217. package/dist/utils/themeWipe.d.ts +21 -0
  218. package/dist/utils/themeWipe.js +94 -0
  219. package/dist/utils/viewTransition.d.ts +23 -0
  220. package/dist/utils/viewTransition.js +75 -0
  221. package/package.json +78 -4
@@ -0,0 +1,15 @@
1
+ <script lang="ts">
2
+ interface Props {
3
+ orientation?: 'horizontal' | 'vertical';
4
+ class?: string;
5
+ children?: import('svelte').Snippet;
6
+ }
7
+
8
+ let { orientation = 'horizontal', class: className = '', children }: Props = $props();
9
+
10
+ const orientationClass = $derived(orientation === 'vertical' ? 'join-vertical' : 'join');
11
+ </script>
12
+
13
+ <div class="{orientationClass} {className}">
14
+ {#if children}{@render children()}{/if}
15
+ </div>
@@ -0,0 +1,8 @@
1
+ interface Props {
2
+ orientation?: 'horizontal' | 'vertical';
3
+ class?: string;
4
+ children?: import('svelte').Snippet;
5
+ }
6
+ declare const ButtonGroup: import("svelte").Component<Props, {}, "">;
7
+ type ButtonGroup = ReturnType<typeof ButtonGroup>;
8
+ export default ButtonGroup;
@@ -0,0 +1,85 @@
1
+ <script lang="ts">
2
+ interface Props {
3
+ checked?: boolean;
4
+ label?: string;
5
+ size?: 'xs' | 'sm' | 'md' | 'lg';
6
+ variant?: 'default' | 'primary' | 'secondary' | 'accent' | 'success' | 'warning' | 'error' | 'info';
7
+ disabled?: boolean;
8
+ indeterminate?: boolean;
9
+ name?: string;
10
+ id?: string;
11
+ onchange?: (checked: boolean) => void;
12
+ class?: string;
13
+ }
14
+
15
+ let {
16
+ checked = $bindable(false),
17
+ label,
18
+ size = 'md',
19
+ variant = 'primary',
20
+ disabled = false,
21
+ indeterminate = false,
22
+ name,
23
+ id,
24
+ onchange,
25
+ class: className = ''
26
+ }: Props = $props();
27
+
28
+ const sizeClass = $derived({ xs: 'checkbox-xs', sm: 'checkbox-sm', md: '', lg: 'checkbox-lg' }[size]);
29
+ const variantClass = $derived(
30
+ {
31
+ default: '',
32
+ primary: 'checkbox-primary',
33
+ secondary: 'checkbox-secondary',
34
+ accent: 'checkbox-accent',
35
+ success: 'checkbox-success',
36
+ warning: 'checkbox-warning',
37
+ error: 'checkbox-error',
38
+ info: 'checkbox-info'
39
+ }[variant]
40
+ );
41
+ const inputClass = $derived(
42
+ ['checkbox', sizeClass, variantClass, className].filter(Boolean).join(' ')
43
+ );
44
+
45
+ const inputId = $derived(id || (label ? `checkbox-${Math.random().toString(36).slice(2)}` : undefined));
46
+
47
+ let inputEl: HTMLInputElement | undefined = $state();
48
+
49
+ $effect(() => {
50
+ if (inputEl) inputEl.indeterminate = indeterminate;
51
+ });
52
+
53
+ function handleChange(e: Event) {
54
+ checked = (e.target as HTMLInputElement).checked;
55
+ onchange?.(checked);
56
+ }
57
+ </script>
58
+
59
+ {#if label}
60
+ <label class="flex cursor-pointer items-center gap-2" for={inputId}>
61
+ <input
62
+ bind:this={inputEl}
63
+ type="checkbox"
64
+ {name}
65
+ id={inputId}
66
+ class={inputClass}
67
+ checked={checked}
68
+ {disabled}
69
+ onchange={handleChange}
70
+ />
71
+ <span class="label-text">{label}</span>
72
+ </label>
73
+ {:else}
74
+ <input
75
+ bind:this={inputEl}
76
+ type="checkbox"
77
+ {name}
78
+ {id}
79
+ class={inputClass}
80
+ checked={checked}
81
+ {disabled}
82
+ onchange={handleChange}
83
+ aria-label={label}
84
+ />
85
+ {/if}
@@ -0,0 +1,15 @@
1
+ interface Props {
2
+ checked?: boolean;
3
+ label?: string;
4
+ size?: 'xs' | 'sm' | 'md' | 'lg';
5
+ variant?: 'default' | 'primary' | 'secondary' | 'accent' | 'success' | 'warning' | 'error' | 'info';
6
+ disabled?: boolean;
7
+ indeterminate?: boolean;
8
+ name?: string;
9
+ id?: string;
10
+ onchange?: (checked: boolean) => void;
11
+ class?: string;
12
+ }
13
+ declare const Checkbox: import("svelte").Component<Props, {}, "checked">;
14
+ type Checkbox = ReturnType<typeof Checkbox>;
15
+ export default Checkbox;
@@ -0,0 +1,17 @@
1
+ <script lang="ts">
2
+ interface Props {
3
+ copy?: string;
4
+ class?: string;
5
+ children?: import('svelte').Snippet;
6
+ }
7
+
8
+ let { copy = 'Nothing here yet.', class: className = '', children }: Props = $props();
9
+ </script>
10
+
11
+ <div class="text-base-content/45 flex flex-col items-center justify-center gap-2 py-8 text-sm {className}">
12
+ {#if children}
13
+ {@render children()}
14
+ {:else}
15
+ <span>{copy}</span>
16
+ {/if}
17
+ </div>
@@ -0,0 +1,8 @@
1
+ interface Props {
2
+ copy?: string;
3
+ class?: string;
4
+ children?: import('svelte').Snippet;
5
+ }
6
+ declare const Empty: import("svelte").Component<Props, {}, "">;
7
+ type Empty = ReturnType<typeof Empty>;
8
+ export default Empty;
@@ -0,0 +1,16 @@
1
+ <script lang="ts">
2
+ interface Props {
3
+ size?: 'xs' | 'sm' | 'md' | 'lg';
4
+ class?: string;
5
+ children?: import('svelte').Snippet;
6
+ }
7
+
8
+ let { size = 'md', class: className = '', children }: Props = $props();
9
+
10
+ const sizeClass = $derived({ xs: 'kbd-xs', sm: 'kbd-sm', md: '', lg: 'kbd-lg' }[size]);
11
+ const kbdClass = $derived(['kbd', sizeClass, className].filter(Boolean).join(' '));
12
+ </script>
13
+
14
+ <kbd class={kbdClass}>
15
+ {#if children}{@render children()}{/if}
16
+ </kbd>
@@ -0,0 +1,8 @@
1
+ interface Props {
2
+ size?: 'xs' | 'sm' | 'md' | 'lg';
3
+ class?: string;
4
+ children?: import('svelte').Snippet;
5
+ }
6
+ declare const Kbd: import("svelte").Component<Props, {}, "">;
7
+ type Kbd = ReturnType<typeof Kbd>;
8
+ export default Kbd;
@@ -0,0 +1,104 @@
1
+ <script lang="ts">
2
+ interface Props {
3
+ page?: number;
4
+ count: number;
5
+ pageSize?: number;
6
+ size?: 'xs' | 'sm' | 'md' | 'lg';
7
+ showEdges?: boolean;
8
+ onchange?: (page: number) => void;
9
+ class?: string;
10
+ }
11
+
12
+ let {
13
+ page = $bindable(1),
14
+ count,
15
+ pageSize = 10,
16
+ size = 'md',
17
+ showEdges = true,
18
+ onchange,
19
+ class: className = ''
20
+ }: Props = $props();
21
+
22
+ const totalPages = $derived(Math.max(1, Math.ceil(count / pageSize)));
23
+ const canPrev = $derived(page > 1);
24
+ const canNext = $derived(page < totalPages);
25
+
26
+ const btnSizeClass = $derived({ xs: 'btn-xs', sm: 'btn-sm', md: 'btn-sm', lg: 'btn-md' }[size]);
27
+
28
+ // Show at most 5 page buttons, centered on current page
29
+ const pageNumbers = $derived(() => {
30
+ const delta = 2;
31
+ const range: number[] = [];
32
+ for (
33
+ let i = Math.max(1, page - delta);
34
+ i <= Math.min(totalPages, page + delta);
35
+ i++
36
+ ) {
37
+ range.push(i);
38
+ }
39
+ return range;
40
+ });
41
+
42
+ function go(p: number) {
43
+ if (p < 1 || p > totalPages) return;
44
+ page = p;
45
+ onchange?.(page);
46
+ }
47
+
48
+ function handleKeydown(e: KeyboardEvent, p: number) {
49
+ if (e.key === 'Enter' || e.key === ' ') {
50
+ e.preventDefault();
51
+ go(p);
52
+ }
53
+ }
54
+ </script>
55
+
56
+ <div class="join {className}" role="navigation" aria-label="Pagination">
57
+ {#if showEdges}
58
+ <button
59
+ type="button"
60
+ class="btn join-item {btnSizeClass}"
61
+ disabled={!canPrev}
62
+ onclick={() => go(1)}
63
+ aria-label="First page"
64
+ >«</button>
65
+ {/if}
66
+
67
+ <button
68
+ type="button"
69
+ class="btn join-item {btnSizeClass}"
70
+ disabled={!canPrev}
71
+ onclick={() => go(page - 1)}
72
+ aria-label="Previous page"
73
+ >‹</button>
74
+
75
+ {#each pageNumbers() as p}
76
+ <button
77
+ type="button"
78
+ class="btn join-item {btnSizeClass}"
79
+ class:btn-active={p === page}
80
+ onclick={() => go(p)}
81
+ onkeydown={(e) => handleKeydown(e, p)}
82
+ aria-label="Page {p}"
83
+ aria-current={p === page ? 'page' : undefined}
84
+ >{p}</button>
85
+ {/each}
86
+
87
+ <button
88
+ type="button"
89
+ class="btn join-item {btnSizeClass}"
90
+ disabled={!canNext}
91
+ onclick={() => go(page + 1)}
92
+ aria-label="Next page"
93
+ >›</button>
94
+
95
+ {#if showEdges}
96
+ <button
97
+ type="button"
98
+ class="btn join-item {btnSizeClass}"
99
+ disabled={!canNext}
100
+ onclick={() => go(totalPages)}
101
+ aria-label="Last page"
102
+ >»</button>
103
+ {/if}
104
+ </div>
@@ -0,0 +1,12 @@
1
+ interface Props {
2
+ page?: number;
3
+ count: number;
4
+ pageSize?: number;
5
+ size?: 'xs' | 'sm' | 'md' | 'lg';
6
+ showEdges?: boolean;
7
+ onchange?: (page: number) => void;
8
+ class?: string;
9
+ }
10
+ declare const Pagination: import("svelte").Component<Props, {}, "page">;
11
+ type Pagination = ReturnType<typeof Pagination>;
12
+ export default Pagination;
@@ -0,0 +1,71 @@
1
+ <script lang="ts">
2
+ export interface RadioOption {
3
+ value: string;
4
+ label: string;
5
+ disabled?: boolean;
6
+ }
7
+
8
+ interface Props {
9
+ value?: string;
10
+ options: RadioOption[];
11
+ name: string;
12
+ size?: 'xs' | 'sm' | 'md' | 'lg';
13
+ variant?: 'default' | 'primary' | 'secondary' | 'accent' | 'success' | 'warning' | 'error' | 'info';
14
+ orientation?: 'horizontal' | 'vertical';
15
+ onchange?: (value: string) => void;
16
+ class?: string;
17
+ }
18
+
19
+ let {
20
+ value = $bindable(''),
21
+ options,
22
+ name,
23
+ size = 'md',
24
+ variant = 'primary',
25
+ orientation = 'vertical',
26
+ onchange,
27
+ class: className = ''
28
+ }: Props = $props();
29
+
30
+ const sizeClass = $derived({ xs: 'radio-xs', sm: 'radio-sm', md: '', lg: 'radio-lg' }[size]);
31
+ const variantClass = $derived(
32
+ {
33
+ default: '',
34
+ primary: 'radio-primary',
35
+ secondary: 'radio-secondary',
36
+ accent: 'radio-accent',
37
+ success: 'radio-success',
38
+ warning: 'radio-warning',
39
+ error: 'radio-error',
40
+ info: 'radio-info'
41
+ }[variant]
42
+ );
43
+ const radioClass = $derived(['radio', sizeClass, variantClass].filter(Boolean).join(' '));
44
+ const groupClass = $derived(
45
+ ['flex', orientation === 'horizontal' ? 'flex-row flex-wrap gap-4' : 'flex-col gap-2', className].join(' ')
46
+ );
47
+
48
+ function handleChange(e: Event, optValue: string) {
49
+ value = optValue;
50
+ onchange?.(value);
51
+ }
52
+ </script>
53
+
54
+ <div class={groupClass} role="radiogroup">
55
+ {#each options as opt}
56
+ {@const inputId = `${name}-${opt.value}`}
57
+ <label class="flex cursor-pointer items-center gap-2" for={inputId}>
58
+ <input
59
+ type="radio"
60
+ id={inputId}
61
+ {name}
62
+ value={opt.value}
63
+ class={radioClass}
64
+ checked={value === opt.value}
65
+ disabled={opt.disabled}
66
+ onchange={(e) => handleChange(e, opt.value)}
67
+ />
68
+ <span class="label-text">{opt.label}</span>
69
+ </label>
70
+ {/each}
71
+ </div>
@@ -0,0 +1,18 @@
1
+ export interface RadioOption {
2
+ value: string;
3
+ label: string;
4
+ disabled?: boolean;
5
+ }
6
+ interface Props {
7
+ value?: string;
8
+ options: RadioOption[];
9
+ name: string;
10
+ size?: 'xs' | 'sm' | 'md' | 'lg';
11
+ variant?: 'default' | 'primary' | 'secondary' | 'accent' | 'success' | 'warning' | 'error' | 'info';
12
+ orientation?: 'horizontal' | 'vertical';
13
+ onchange?: (value: string) => void;
14
+ class?: string;
15
+ }
16
+ declare const RadioGroup: import("svelte").Component<Props, {}, "value">;
17
+ type RadioGroup = ReturnType<typeof RadioGroup>;
18
+ export default RadioGroup;
@@ -0,0 +1,19 @@
1
+ <script lang="ts">
2
+ interface Props {
3
+ orientation?: 'horizontal' | 'vertical';
4
+ label?: string;
5
+ class?: string;
6
+ }
7
+
8
+ let { orientation = 'horizontal', label, class: className = '' }: Props = $props();
9
+ </script>
10
+
11
+ {#if orientation === 'vertical'}
12
+ <div class="divider divider-horizontal {className}" role="separator" aria-orientation="vertical">
13
+ {#if label}{label}{/if}
14
+ </div>
15
+ {:else if label}
16
+ <div class="divider {className}" role="separator" aria-orientation="horizontal">{label}</div>
17
+ {:else}
18
+ <hr class="border-base-content/10 my-0 {className}" role="separator" aria-orientation="horizontal" />
19
+ {/if}
@@ -0,0 +1,8 @@
1
+ interface Props {
2
+ orientation?: 'horizontal' | 'vertical';
3
+ label?: string;
4
+ class?: string;
5
+ }
6
+ declare const Separator: import("svelte").Component<Props, {}, "">;
7
+ type Separator = ReturnType<typeof Separator>;
8
+ export default Separator;
@@ -0,0 +1,72 @@
1
+ <script lang="ts">
2
+ interface Props {
3
+ value?: number;
4
+ min?: number;
5
+ max?: number;
6
+ step?: number;
7
+ size?: 'xs' | 'sm' | 'md' | 'lg';
8
+ variant?: 'default' | 'primary' | 'secondary' | 'accent' | 'success' | 'warning' | 'error' | 'info';
9
+ showValue?: boolean;
10
+ disabled?: boolean;
11
+ name?: string;
12
+ id?: string;
13
+ onchange?: (value: number) => void;
14
+ class?: string;
15
+ }
16
+
17
+ let {
18
+ value = $bindable(50),
19
+ min = 0,
20
+ max = 100,
21
+ step = 1,
22
+ size = 'md',
23
+ variant = 'primary',
24
+ showValue = false,
25
+ disabled = false,
26
+ name,
27
+ id,
28
+ onchange,
29
+ class: className = ''
30
+ }: Props = $props();
31
+
32
+ const sizeClass = $derived({ xs: 'range-xs', sm: 'range-sm', md: '', lg: 'range-lg' }[size]);
33
+ const variantClass = $derived(
34
+ {
35
+ default: '',
36
+ primary: 'range-primary',
37
+ secondary: 'range-secondary',
38
+ accent: 'range-accent',
39
+ success: 'range-success',
40
+ warning: 'range-warning',
41
+ error: 'range-error',
42
+ info: 'range-info'
43
+ }[variant]
44
+ );
45
+ const rangeClass = $derived(['range', sizeClass, variantClass, className].filter(Boolean).join(' '));
46
+
47
+ function handleInput(e: Event) {
48
+ value = Number((e.target as HTMLInputElement).value);
49
+ onchange?.(value);
50
+ }
51
+ </script>
52
+
53
+ <div class="flex w-full flex-col gap-1">
54
+ <input
55
+ type="range"
56
+ {name}
57
+ {id}
58
+ class={rangeClass}
59
+ {min}
60
+ {max}
61
+ {step}
62
+ value={value}
63
+ {disabled}
64
+ oninput={handleInput}
65
+ aria-valuenow={value}
66
+ aria-valuemin={min}
67
+ aria-valuemax={max}
68
+ />
69
+ {#if showValue}
70
+ <div class="text-base-content/60 w-full text-right text-xs tabular-nums">{value}</div>
71
+ {/if}
72
+ </div>
@@ -0,0 +1,17 @@
1
+ interface Props {
2
+ value?: number;
3
+ min?: number;
4
+ max?: number;
5
+ step?: number;
6
+ size?: 'xs' | 'sm' | 'md' | 'lg';
7
+ variant?: 'default' | 'primary' | 'secondary' | 'accent' | 'success' | 'warning' | 'error' | 'info';
8
+ showValue?: boolean;
9
+ disabled?: boolean;
10
+ name?: string;
11
+ id?: string;
12
+ onchange?: (value: number) => void;
13
+ class?: string;
14
+ }
15
+ declare const Slider: import("svelte").Component<Props, {}, "value">;
16
+ type Slider = ReturnType<typeof Slider>;
17
+ export default Slider;
@@ -0,0 +1,88 @@
1
+ <script lang="ts">
2
+ interface Props {
3
+ checked?: boolean;
4
+ label?: string;
5
+ size?: 'xs' | 'sm' | 'md' | 'lg';
6
+ variant?: 'default' | 'primary' | 'secondary' | 'accent' | 'success' | 'warning' | 'error' | 'info';
7
+ disabled?: boolean;
8
+ name?: string;
9
+ id?: string;
10
+ onchange?: (checked: boolean) => void;
11
+ class?: string;
12
+ }
13
+
14
+ let {
15
+ checked = $bindable(false),
16
+ label,
17
+ size = 'md',
18
+ variant = 'primary',
19
+ disabled = false,
20
+ name,
21
+ id,
22
+ onchange,
23
+ class: className = ''
24
+ }: Props = $props();
25
+
26
+ const sizeClass = $derived({ xs: 'toggle-xs', sm: 'toggle-sm', md: '', lg: 'toggle-lg' }[size]);
27
+ const variantClass = $derived(
28
+ {
29
+ default: '',
30
+ primary: 'toggle-primary',
31
+ secondary: 'toggle-secondary',
32
+ accent: 'toggle-accent',
33
+ success: 'toggle-success',
34
+ warning: 'toggle-warning',
35
+ error: 'toggle-error',
36
+ info: 'toggle-info'
37
+ }[variant]
38
+ );
39
+ const inputClass = $derived(
40
+ ['toggle', 'jatui-switch', sizeClass, variantClass, className].filter(Boolean).join(' ')
41
+ );
42
+
43
+ const inputId = $derived(id || (label ? `switch-${Math.random().toString(36).slice(2)}` : undefined));
44
+
45
+ function handleChange(e: Event) {
46
+ checked = (e.target as HTMLInputElement).checked;
47
+ onchange?.(checked);
48
+ }
49
+ </script>
50
+
51
+ {#if label}
52
+ <label class="flex cursor-pointer items-center gap-2" for={inputId}>
53
+ <input
54
+ type="checkbox"
55
+ {name}
56
+ id={inputId}
57
+ class={inputClass}
58
+ checked={checked}
59
+ {disabled}
60
+ onchange={handleChange}
61
+ />
62
+ <span class="label-text">{label}</span>
63
+ </label>
64
+ {:else}
65
+ <input
66
+ type="checkbox"
67
+ {name}
68
+ {id}
69
+ class={inputClass}
70
+ checked={checked}
71
+ {disabled}
72
+ onchange={handleChange}
73
+ aria-label={label}
74
+ />
75
+ {/if}
76
+
77
+ <style>
78
+ /* Spring settle on toggle confirmation — sanctioned per motion contract */
79
+ .jatui-switch {
80
+ transition: background-color var(--motion-fast) var(--motion-spring);
81
+ }
82
+
83
+ @media (prefers-reduced-motion: reduce) {
84
+ .jatui-switch {
85
+ transition: none;
86
+ }
87
+ }
88
+ </style>
@@ -0,0 +1,14 @@
1
+ interface Props {
2
+ checked?: boolean;
3
+ label?: string;
4
+ size?: 'xs' | 'sm' | 'md' | 'lg';
5
+ variant?: 'default' | 'primary' | 'secondary' | 'accent' | 'success' | 'warning' | 'error' | 'info';
6
+ disabled?: boolean;
7
+ name?: string;
8
+ id?: string;
9
+ onchange?: (checked: boolean) => void;
10
+ class?: string;
11
+ }
12
+ declare const Switch: import("svelte").Component<Props, {}, "checked">;
13
+ type Switch = ReturnType<typeof Switch>;
14
+ export default Switch;
@@ -0,0 +1,43 @@
1
+ <script lang="ts">
2
+ /**
3
+ * Toggle — alias for Switch with identical props.
4
+ * DaisyUI uses `toggle` class; this re-exports that surface.
5
+ */
6
+ import Switch from './Switch.svelte';
7
+
8
+ interface Props {
9
+ checked?: boolean;
10
+ label?: string;
11
+ size?: 'xs' | 'sm' | 'md' | 'lg';
12
+ variant?: 'default' | 'primary' | 'secondary' | 'accent' | 'success' | 'warning' | 'error' | 'info';
13
+ disabled?: boolean;
14
+ name?: string;
15
+ id?: string;
16
+ onchange?: (checked: boolean) => void;
17
+ class?: string;
18
+ }
19
+
20
+ let {
21
+ checked = $bindable(false),
22
+ label,
23
+ size = 'md',
24
+ variant = 'primary',
25
+ disabled = false,
26
+ name,
27
+ id,
28
+ onchange,
29
+ class: className = ''
30
+ }: Props = $props();
31
+ </script>
32
+
33
+ <Switch
34
+ bind:checked
35
+ {label}
36
+ {size}
37
+ {variant}
38
+ {disabled}
39
+ {name}
40
+ {id}
41
+ {onchange}
42
+ class={className}
43
+ />
@@ -0,0 +1,14 @@
1
+ interface Props {
2
+ checked?: boolean;
3
+ label?: string;
4
+ size?: 'xs' | 'sm' | 'md' | 'lg';
5
+ variant?: 'default' | 'primary' | 'secondary' | 'accent' | 'success' | 'warning' | 'error' | 'info';
6
+ disabled?: boolean;
7
+ name?: string;
8
+ id?: string;
9
+ onchange?: (checked: boolean) => void;
10
+ class?: string;
11
+ }
12
+ declare const Toggle: import("svelte").Component<Props, {}, "checked">;
13
+ type Toggle = ReturnType<typeof Toggle>;
14
+ export default Toggle;