kosui 0.0.26 → 0.0.28

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (186) hide show
  1. package/dist/alert/alert.svelte +1 -1
  2. package/dist/alert/alert.svelte.d.ts +1 -1
  3. package/dist/autocomplete/autocomplete-content.svelte +4 -4
  4. package/dist/autocomplete/autocomplete-content.svelte.d.ts +3 -3
  5. package/dist/autocomplete/autocomplete-context.svelte.d.ts +1 -1
  6. package/dist/autocomplete/autocomplete-context.svelte.js +2 -2
  7. package/dist/autocomplete/autocomplete-input.svelte +3 -4
  8. package/dist/autocomplete/autocomplete-input.svelte.d.ts +1 -1
  9. package/dist/autocomplete/autocomplete-item.svelte +5 -5
  10. package/dist/autocomplete/autocomplete-item.svelte.d.ts +3 -3
  11. package/dist/autocomplete/autocomplete.svelte +3 -3
  12. package/dist/autocomplete/autocomplete.svelte.d.ts +1 -1
  13. package/dist/autocomplete/index.d.ts +1 -0
  14. package/dist/autocomplete/index.js +1 -0
  15. package/dist/avatar/avatar.svelte +1 -1
  16. package/dist/avatar/avatar.svelte.d.ts +1 -1
  17. package/dist/badge/badge.svelte +1 -1
  18. package/dist/badge/badge.svelte.d.ts +1 -1
  19. package/dist/box/box.svelte +2 -2
  20. package/dist/box/box.svelte.d.ts +2 -2
  21. package/dist/breadcrumbs/breadcrumbs.svelte +1 -1
  22. package/dist/breadcrumbs/breadcrumbs.svelte.d.ts +1 -1
  23. package/dist/button/button.svelte +4 -4
  24. package/dist/button/button.svelte.d.ts +2 -2
  25. package/dist/chip/chip.svelte +1 -2
  26. package/dist/chip/chip.svelte.d.ts +1 -1
  27. package/dist/command/action.svelte.d.ts +1 -1
  28. package/dist/command/command-content.svelte +1 -1
  29. package/dist/command/command-content.svelte.d.ts +1 -1
  30. package/dist/command/command-context.svelte.d.ts +1 -1
  31. package/dist/command/command-context.svelte.js +1 -1
  32. package/dist/command/command-input.svelte +4 -4
  33. package/dist/command/command-input.svelte.d.ts +2 -2
  34. package/dist/command/command-item.svelte +5 -5
  35. package/dist/command/command-item.svelte.d.ts +3 -3
  36. package/dist/command/command-search.svelte +1 -2
  37. package/dist/command/command-search.svelte.d.ts +1 -1
  38. package/dist/command/command.svelte +2 -2
  39. package/dist/command/command.svelte.d.ts +1 -1
  40. package/dist/command/commander.svelte +6 -6
  41. package/dist/command/commander.svelte.d.ts +1 -1
  42. package/dist/command/index.d.ts +7 -6
  43. package/dist/command/index.js +5 -4
  44. package/dist/common/divider.svelte +1 -1
  45. package/dist/common/divider.svelte.d.ts +1 -1
  46. package/dist/common/header.svelte +2 -2
  47. package/dist/common/header.svelte.d.ts +2 -2
  48. package/dist/common/item-context.svelte.js +3 -3
  49. package/dist/dialog/dialog-button.svelte +1 -1
  50. package/dist/dialog/dialog-button.svelte.d.ts +1 -1
  51. package/dist/dialog/dialog.svelte +2 -2
  52. package/dist/dialog/dialog.svelte.d.ts +1 -1
  53. package/dist/dialog/dialoguer-context.svelte.d.ts +5 -5
  54. package/dist/dialog/dialoguer.svelte +7 -7
  55. package/dist/dialog/index.d.ts +1 -1
  56. package/dist/dialog/index.js +1 -1
  57. package/dist/event-manager.d.ts +1 -1
  58. package/dist/event-manager.js +2 -2
  59. package/dist/fab/fab.svelte +2 -2
  60. package/dist/fab/fab.svelte.d.ts +2 -2
  61. package/dist/fab/index.d.ts +1 -1
  62. package/dist/index.d.ts +31 -30
  63. package/dist/index.js +31 -30
  64. package/dist/input/input.svelte +4 -4
  65. package/dist/input/input.svelte.d.ts +2 -2
  66. package/dist/link/link.svelte +2 -2
  67. package/dist/link/link.svelte.d.ts +2 -2
  68. package/dist/markdown/markdown-blockquote.svelte +1 -1
  69. package/dist/markdown/markdown-blockquote.svelte.d.ts +1 -1
  70. package/dist/markdown/markdown-br.svelte +1 -1
  71. package/dist/markdown/markdown-br.svelte.d.ts +1 -1
  72. package/dist/markdown/markdown-code.svelte +1 -1
  73. package/dist/markdown/markdown-code.svelte.d.ts +1 -1
  74. package/dist/markdown/markdown-codespan.svelte +1 -1
  75. package/dist/markdown/markdown-codespan.svelte.d.ts +1 -1
  76. package/dist/markdown/markdown-def.svelte +1 -1
  77. package/dist/markdown/markdown-def.svelte.d.ts +1 -1
  78. package/dist/markdown/markdown-del.svelte +1 -1
  79. package/dist/markdown/markdown-del.svelte.d.ts +1 -1
  80. package/dist/markdown/markdown-em.svelte +1 -1
  81. package/dist/markdown/markdown-em.svelte.d.ts +1 -1
  82. package/dist/markdown/markdown-escape.svelte +2 -2
  83. package/dist/markdown/markdown-escape.svelte.d.ts +2 -2
  84. package/dist/markdown/markdown-heading.svelte +1 -1
  85. package/dist/markdown/markdown-heading.svelte.d.ts +1 -1
  86. package/dist/markdown/markdown-hr.svelte +1 -1
  87. package/dist/markdown/markdown-hr.svelte.d.ts +1 -1
  88. package/dist/markdown/markdown-html.svelte +1 -1
  89. package/dist/markdown/markdown-html.svelte.d.ts +1 -1
  90. package/dist/markdown/markdown-image.svelte +1 -1
  91. package/dist/markdown/markdown-image.svelte.d.ts +1 -1
  92. package/dist/markdown/markdown-link.svelte +1 -1
  93. package/dist/markdown/markdown-link.svelte.d.ts +1 -1
  94. package/dist/markdown/markdown-list-item.svelte +1 -1
  95. package/dist/markdown/markdown-list-item.svelte.d.ts +1 -1
  96. package/dist/markdown/markdown-list.svelte +1 -1
  97. package/dist/markdown/markdown-list.svelte.d.ts +1 -1
  98. package/dist/markdown/markdown-paragraph.svelte +1 -1
  99. package/dist/markdown/markdown-paragraph.svelte.d.ts +1 -1
  100. package/dist/markdown/markdown-space.svelte +1 -1
  101. package/dist/markdown/markdown-space.svelte.d.ts +1 -1
  102. package/dist/markdown/markdown-strong.svelte +1 -1
  103. package/dist/markdown/markdown-strong.svelte.d.ts +1 -1
  104. package/dist/markdown/markdown-table-cell.svelte +1 -1
  105. package/dist/markdown/markdown-table-cell.svelte.d.ts +1 -1
  106. package/dist/markdown/markdown-table.svelte +4 -2
  107. package/dist/markdown/markdown-table.svelte.d.ts +1 -1
  108. package/dist/markdown/markdown-text.svelte +1 -1
  109. package/dist/markdown/markdown-text.svelte.d.ts +1 -1
  110. package/dist/markdown/markdown-token.svelte +2 -2
  111. package/dist/markdown/markdown-token.svelte.d.ts +1 -1
  112. package/dist/markdown/markdown-tokens.svelte +1 -1
  113. package/dist/markdown/markdown.svelte +8 -8
  114. package/dist/markdown/markdown.svelte.d.ts +1 -1
  115. package/dist/menu/index.d.ts +2 -1
  116. package/dist/menu/index.js +2 -1
  117. package/dist/menu/menu-actions.svelte +2 -2
  118. package/dist/menu/menu-actions.svelte.d.ts +1 -1
  119. package/dist/menu/menu-content.svelte +5 -5
  120. package/dist/menu/menu-content.svelte.d.ts +3 -3
  121. package/dist/menu/menu-context.svelte.js +4 -4
  122. package/dist/menu/menu-item.svelte +6 -6
  123. package/dist/menu/menu-item.svelte.d.ts +3 -3
  124. package/dist/menu/menu-trigger-button.svelte +4 -4
  125. package/dist/menu/menu-trigger-button.svelte.d.ts +1 -1
  126. package/dist/menu/menu-trigger.svelte +6 -6
  127. package/dist/menu/menu-trigger.svelte.d.ts +3 -3
  128. package/dist/menu/menu.svelte +2 -2
  129. package/dist/menu/menu.svelte.d.ts +1 -1
  130. package/dist/modal/modal.svelte +4 -4
  131. package/dist/modal/modal.svelte.d.ts +1 -1
  132. package/dist/popover/popover.svelte +9 -9
  133. package/dist/popover/popover.svelte.d.ts +2 -2
  134. package/dist/portal/index.d.ts +2 -1
  135. package/dist/portal/index.js +1 -0
  136. package/dist/portal/portal.svelte +7 -4
  137. package/dist/portal/portal.svelte.d.ts +2 -2
  138. package/dist/portal/proxy.svelte +6 -3
  139. package/dist/portal/proxy.svelte.d.ts +2 -2
  140. package/dist/progress/circular-progress.svelte +7 -6
  141. package/dist/progress/circular-progress.svelte.d.ts +2 -2
  142. package/dist/progress/index.d.ts +1 -1
  143. package/dist/progress/index.js +1 -1
  144. package/dist/shortcut/index.d.ts +1 -1
  145. package/dist/shortcut/index.js +1 -1
  146. package/dist/shortcut/shortcut-badge.svelte +3 -3
  147. package/dist/shortcut/shortcut-badge.svelte.d.ts +2 -2
  148. package/dist/shortcut/shortcut.d.ts +2 -0
  149. package/dist/shortcut/shortcut.js +2 -0
  150. package/dist/skeleton/skeleton.svelte +1 -1
  151. package/dist/skeleton/skeleton.svelte.d.ts +1 -1
  152. package/dist/slider/index.d.ts +8 -0
  153. package/dist/slider/index.js +8 -0
  154. package/dist/slider/slider-context.svelte.d.ts +48 -0
  155. package/dist/slider/slider-context.svelte.js +192 -0
  156. package/dist/slider/slider-handle-label-arrow.svelte +18 -0
  157. package/dist/slider/slider-handle-label-arrow.svelte.d.ts +6 -0
  158. package/dist/slider/slider-handle-label.svelte +31 -0
  159. package/dist/slider/slider-handle-label.svelte.d.ts +6 -0
  160. package/dist/slider/slider-handle.svelte +51 -0
  161. package/dist/slider/slider-handle.svelte.d.ts +6 -0
  162. package/dist/slider/slider-mark-dot.svelte +25 -0
  163. package/dist/slider/slider-mark-dot.svelte.d.ts +6 -0
  164. package/dist/slider/slider-mark-label.svelte +37 -0
  165. package/dist/slider/slider-mark-label.svelte.d.ts +9 -0
  166. package/dist/slider/slider-mark.svelte +33 -0
  167. package/dist/slider/slider-mark.svelte.d.ts +9 -0
  168. package/dist/slider/slider.svelte +227 -0
  169. package/dist/slider/slider.svelte.d.ts +41 -0
  170. package/dist/switch/index.d.ts +1 -0
  171. package/dist/switch/index.js +1 -0
  172. package/dist/switch/switch-thumb.svelte +52 -0
  173. package/dist/switch/switch-thumb.svelte.d.ts +7 -0
  174. package/dist/switch/switch.svelte +15 -29
  175. package/dist/switch/switch.svelte.d.ts +6 -3
  176. package/dist/textarea/textarea.svelte +2 -2
  177. package/dist/textarea/textarea.svelte.d.ts +2 -2
  178. package/dist/toggle/index.d.ts +3 -2
  179. package/dist/toggle/index.js +3 -2
  180. package/dist/toggle/toggle-button.svelte +4 -4
  181. package/dist/toggle/toggle-button.svelte.d.ts +2 -2
  182. package/dist/toggle/toggle-group.svelte +3 -3
  183. package/dist/toggle/toggle-group.svelte.d.ts +2 -2
  184. package/dist/tooltip/tooltip.svelte +7 -6
  185. package/dist/tooltip/tooltip.svelte.d.ts +3 -3
  186. package/package.json +7 -5
@@ -0,0 +1,227 @@
1
+ <script lang="ts" module>
2
+ import {
3
+ COLORS,
4
+ RADII,
5
+ SIZES,
6
+ type Color,
7
+ type ColorProp,
8
+ type Radius,
9
+ type RadiusProp,
10
+ type Size,
11
+ type SizeProp,
12
+ } from "../base.js";
13
+ import { mergeProps } from "../merge-props.js";
14
+ import {
15
+ setSliderContext,
16
+ SliderContext,
17
+ SliderHandle,
18
+ SliderHandleLabel,
19
+ SliderHandleLabelArrow,
20
+ SliderMark,
21
+ SliderMarkDot,
22
+ SliderMarkLabel,
23
+ type SliderHandleLabelArrowProps,
24
+ type SliderHandleLabelProps,
25
+ type SliderHandleProps,
26
+ type SliderMarkDotProps,
27
+ type SliderMarkLabelProps,
28
+ type SliderMarkProps,
29
+ } from "./index.js";
30
+ import type { ClassName } from "../utils.js";
31
+ import type { Snippet } from "svelte";
32
+ import type { HTMLAttributes } from "svelte/elements";
33
+ import { twMerge } from "tailwind-merge";
34
+
35
+ export const SLIDER_COLORS = COLORS;
36
+ export type SliderColor = Color;
37
+ export type SliderColorProp = ColorProp;
38
+
39
+ export const SLIDER_SIZES = SIZES;
40
+ export type SliderSize = Size;
41
+ export type SliderSizeProp = SizeProp;
42
+
43
+ export const SLIDER_RADII = RADII;
44
+ export type SliderRadius = Radius;
45
+ export type SliderRadiusProp = RadiusProp;
46
+
47
+ export type Mark = {
48
+ value: number;
49
+ label?: string;
50
+ };
51
+
52
+ export type SliderProps = {
53
+ value?: number;
54
+ min?: number;
55
+ max?: number;
56
+ step?: number;
57
+ marks?: Mark[];
58
+ disabled?: boolean;
59
+ label?: (value: number) => string;
60
+ labelAlwaysOn?: boolean;
61
+ inverted?: boolean;
62
+ restrictToMarks?: boolean;
63
+ onChange?: (value: number) => void;
64
+ onChangeEnd?: (value: number) => void;
65
+ sliderHandle?: Snippet<[SliderHandleProps]>;
66
+ sliderHandleLabel?: Snippet<[SliderHandleLabelProps]>;
67
+ sliderHandleLabelArrow?: Snippet<[SliderHandleLabelArrowProps]>;
68
+ sliderMark?: Snippet<[SliderMarkProps]>;
69
+ sliderMarkDot?: Snippet<[SliderMarkDotProps]>;
70
+ sliderMarkLabel?: Snippet<[SliderMarkLabelProps]>;
71
+ } & ClassName &
72
+ SliderColorProp &
73
+ SliderSizeProp &
74
+ SliderRadiusProp &
75
+ HTMLAttributes<HTMLDivElement>;
76
+ </script>
77
+
78
+ <script lang="ts">
79
+ let {
80
+ value = $bindable(0),
81
+ min = 0,
82
+ max = 100,
83
+ step = 1,
84
+ marks = [],
85
+ disabled = false,
86
+ label = (val: number) => val.toString(),
87
+ labelAlwaysOn = false,
88
+ inverted = false,
89
+ restrictToMarks = false,
90
+ onChange,
91
+ onChangeEnd,
92
+ sliderHandle = defaultSliderHandle,
93
+ sliderHandleLabel = defaultSliderHandleLabel,
94
+ sliderHandleLabelArrow = defaultSliderHandleLabelArrow,
95
+ sliderMark = defaultSliderMark,
96
+ sliderMarkDot = defaultSliderMarkDot,
97
+ sliderMarkLabel = defaultSliderMarkLabel,
98
+ class: className,
99
+ color = "primary",
100
+ size = "md",
101
+ radius = "xl",
102
+ ...restProps
103
+ }: SliderProps = $props();
104
+
105
+ const ctx = setSliderContext(
106
+ new SliderContext(
107
+ () => value,
108
+ (newValue) => (value = newValue),
109
+ () => min,
110
+ () => max,
111
+ () => step,
112
+ () => marks,
113
+ () => disabled,
114
+ label,
115
+ () => labelAlwaysOn,
116
+ () => inverted,
117
+ () => restrictToMarks,
118
+ () => color,
119
+ () => size,
120
+ () => radius,
121
+ onChange,
122
+ onChangeEnd,
123
+ sliderHandle,
124
+ sliderHandleLabel,
125
+ sliderHandleLabelArrow,
126
+ sliderMark,
127
+ sliderMarkDot,
128
+ sliderMarkLabel,
129
+ ),
130
+ );
131
+ </script>
132
+
133
+ {#snippet defaultSliderHandle(props: SliderHandleProps)}
134
+ <SliderHandle {...props} />
135
+ {/snippet}
136
+
137
+ {#snippet defaultSliderHandleLabel(props: SliderHandleLabelProps)}
138
+ <SliderHandleLabel {...props} />
139
+ {/snippet}
140
+
141
+ {#snippet defaultSliderHandleLabelArrow(props: SliderHandleLabelArrowProps)}
142
+ <SliderHandleLabelArrow {...props} />
143
+ {/snippet}
144
+
145
+ {#snippet defaultSliderMark(props: SliderMarkProps)}
146
+ <SliderMark {...props} />
147
+ {/snippet}
148
+
149
+ {#snippet defaultSliderMarkDot(props: SliderMarkDotProps)}
150
+ <SliderMarkDot {...props} />
151
+ {/snippet}
152
+
153
+ {#snippet defaultSliderMarkLabel(props: SliderMarkLabelProps)}
154
+ <SliderMarkLabel {...props} />
155
+ {/snippet}
156
+
157
+ <!-- Track -->
158
+ <div
159
+ bind:this={ctx.sliderEl}
160
+ class={twMerge(
161
+ "relative w-full cursor-pointer touch-none bg-m3-surface-container-highest select-none",
162
+
163
+ ctx.disabled && "cursor-not-allowed opacity-50",
164
+
165
+ ctx.radius === "xs" && "rounded-xs",
166
+ ctx.radius === "sm" && "rounded-sm",
167
+ ctx.radius === "md" && "rounded-lg",
168
+ ctx.radius === "lg" && "rounded-2xl",
169
+ ctx.radius === "xl" && "rounded-4xl",
170
+
171
+ ctx.size === "xs" && "my-2.5 h-0.5",
172
+ ctx.size === "sm" && "my-3 h-1",
173
+ ctx.size === "md" && "my-3.5 h-2",
174
+ ctx.size === "lg" && "my-4 h-3",
175
+ ctx.size === "xl" && "my-4.5 h-4",
176
+
177
+ className,
178
+ )}
179
+ {...mergeProps(restProps, {
180
+ role: "slider",
181
+ tabindex: ctx.disabled ? -1 : 0,
182
+ "aria-valuenow": ctx.value,
183
+ "aria-valuemin": ctx.min,
184
+ "aria-valuemax": ctx.max,
185
+ "aria-disabled": ctx.disabled,
186
+ onpointerdown: ctx.pointerDown,
187
+ onpointermove: ctx.pointerMove,
188
+ onpointerup: ctx.pointerUp,
189
+ onkeydown: ctx.keyDown,
190
+ onfocus: ctx.focus,
191
+ onblur: ctx.blur,
192
+ })}
193
+ >
194
+ <!-- Filled track -->
195
+ <div
196
+ class={twMerge(
197
+ "absolute top-1/2 h-full -translate-y-1/2 transition-all",
198
+
199
+ ctx.color === "primary" && "bg-m3-primary",
200
+ ctx.color === "secondary" && "bg-m3-secondary",
201
+ ctx.color === "tertiary" && "bg-m3-tertiary",
202
+ ctx.color === "error" && "bg-m3-error",
203
+
204
+ ctx.radius === "xs" && "rounded-xs",
205
+ ctx.radius === "sm" && "rounded-sm",
206
+ ctx.radius === "md" && "rounded-lg",
207
+ ctx.radius === "lg" && "rounded-2xl",
208
+ ctx.radius === "xl" && "rounded-4xl",
209
+ )}
210
+ style={ctx.inverted
211
+ ? `right: 0; width: ${100 - ctx.position}%`
212
+ : `left: 0; width: ${ctx.position}%`}
213
+ ></div>
214
+
215
+ <!-- Marks -->
216
+ {#each marks as { value, label } (value)}
217
+ {@render ctx.markRenderer({ value, label })}
218
+ {/each}
219
+
220
+ <!-- Handle -->
221
+ <div
222
+ class="absolute top-1/2 -translate-x-1/2 -translate-y-1/2 transition-all"
223
+ style={`left: ${ctx.position}%`}
224
+ >
225
+ {@render ctx.handleRenderer({})}
226
+ </div>
227
+ </div>
@@ -0,0 +1,41 @@
1
+ import { type Color, type ColorProp, type Radius, type RadiusProp, type Size, type SizeProp } from "../base.js";
2
+ import { type SliderHandleLabelArrowProps, type SliderHandleLabelProps, type SliderHandleProps, type SliderMarkDotProps, type SliderMarkLabelProps, type SliderMarkProps } from "./index.js";
3
+ import type { ClassName } from "../utils.js";
4
+ import type { Snippet } from "svelte";
5
+ import type { HTMLAttributes } from "svelte/elements";
6
+ export declare const SLIDER_COLORS: readonly ["primary", "secondary", "tertiary", "error", "inherit"];
7
+ export type SliderColor = Color;
8
+ export type SliderColorProp = ColorProp;
9
+ export declare const SLIDER_SIZES: readonly ["xs", "sm", "md", "lg", "xl", "inherit"];
10
+ export type SliderSize = Size;
11
+ export type SliderSizeProp = SizeProp;
12
+ export declare const SLIDER_RADII: readonly ["xs", "sm", "md", "lg", "xl", "inherit"];
13
+ export type SliderRadius = Radius;
14
+ export type SliderRadiusProp = RadiusProp;
15
+ export type Mark = {
16
+ value: number;
17
+ label?: string;
18
+ };
19
+ export type SliderProps = {
20
+ value?: number;
21
+ min?: number;
22
+ max?: number;
23
+ step?: number;
24
+ marks?: Mark[];
25
+ disabled?: boolean;
26
+ label?: (value: number) => string;
27
+ labelAlwaysOn?: boolean;
28
+ inverted?: boolean;
29
+ restrictToMarks?: boolean;
30
+ onChange?: (value: number) => void;
31
+ onChangeEnd?: (value: number) => void;
32
+ sliderHandle?: Snippet<[SliderHandleProps]>;
33
+ sliderHandleLabel?: Snippet<[SliderHandleLabelProps]>;
34
+ sliderHandleLabelArrow?: Snippet<[SliderHandleLabelArrowProps]>;
35
+ sliderMark?: Snippet<[SliderMarkProps]>;
36
+ sliderMarkDot?: Snippet<[SliderMarkDotProps]>;
37
+ sliderMarkLabel?: Snippet<[SliderMarkLabelProps]>;
38
+ } & ClassName & SliderColorProp & SliderSizeProp & SliderRadiusProp & HTMLAttributes<HTMLDivElement>;
39
+ declare const Slider: import("svelte").Component<SliderProps, {}, "value">;
40
+ type Slider = ReturnType<typeof Slider>;
41
+ export default Slider;
@@ -1 +1,2 @@
1
+ export { default as SwitchThumb, type SwitchThumbProps, } from "./switch-thumb.svelte";
1
2
  export { default as Switch, SWITCH_COLORS, SWITCH_RADII, SWITCH_SIZES, type SwitchColor, type SwitchColorProp, type SwitchProps, type SwitchRadius, type SwitchRadiusProp, type SwitchSize, type SwitchSizeProp, } from "./switch.svelte";
@@ -1 +1,2 @@
1
+ export { default as SwitchThumb, } from "./switch-thumb.svelte";
1
2
  export { default as Switch, SWITCH_COLORS, SWITCH_RADII, SWITCH_SIZES, } from "./switch.svelte";
@@ -0,0 +1,52 @@
1
+ <script lang="ts" module>
2
+ import type {
3
+ SwitchColorProp,
4
+ SwitchRadiusProp,
5
+ SwitchSizeProp,
6
+ } from "./index.js";
7
+ import type { ClassName } from "../utils.js";
8
+ import type { HTMLAttributes } from "svelte/elements";
9
+ import { twMerge } from "tailwind-merge";
10
+
11
+ export type SwitchThumbProps = {} & ClassName &
12
+ SwitchColorProp &
13
+ SwitchSizeProp &
14
+ SwitchRadiusProp &
15
+ HTMLAttributes<HTMLDivElement>;
16
+ </script>
17
+
18
+ <script lang="ts">
19
+ let {
20
+ class: className,
21
+ color = "primary",
22
+ size = "sm",
23
+ radius = "xl",
24
+ ...restProps
25
+ }: SwitchThumbProps = $props();
26
+ </script>
27
+
28
+ <div
29
+ class={twMerge(
30
+ "absolute top-0.5 left-0.5 shadow-sm transition-all",
31
+
32
+ color === "primary" && "bg-m3-on-primary",
33
+ color === "secondary" && "bg-m3-on-secondary",
34
+ color === "tertiary" && "bg-m3-on-tertiary",
35
+ color === "error" && "bg-m3-on-error",
36
+
37
+ size === "xs" && "size-3 group-aria-checked:translate-x-4",
38
+ size === "sm" && "size-4 group-aria-checked:translate-x-5",
39
+ size === "md" && "size-5 group-aria-checked:translate-x-6",
40
+ size === "lg" && "size-6 group-aria-checked:translate-x-7",
41
+ size === "xl" && "size-7 group-aria-checked:translate-x-8",
42
+
43
+ radius === "xs" && "rounded-xs",
44
+ radius === "sm" && "rounded-sm",
45
+ radius === "md" && "rounded-lg",
46
+ radius === "lg" && "rounded-2xl",
47
+ radius === "xl" && "rounded-4xl",
48
+
49
+ className,
50
+ )}
51
+ {...restProps}
52
+ ></div>
@@ -0,0 +1,7 @@
1
+ import type { SwitchColorProp, SwitchRadiusProp, SwitchSizeProp } from "./index.js";
2
+ import type { ClassName } from "../utils.js";
3
+ import type { HTMLAttributes } from "svelte/elements";
4
+ export type SwitchThumbProps = {} & ClassName & SwitchColorProp & SwitchSizeProp & SwitchRadiusProp & HTMLAttributes<HTMLDivElement>;
5
+ declare const SwitchThumb: import("svelte").Component<SwitchThumbProps, {}, "">;
6
+ type SwitchThumb = ReturnType<typeof SwitchThumb>;
7
+ export default SwitchThumb;
@@ -1,6 +1,4 @@
1
1
  <script lang="ts" module>
2
- import type { HTMLButtonAttributes } from "svelte/elements";
3
- import { twMerge } from "tailwind-merge";
4
2
  import {
5
3
  COLORS,
6
4
  RADII,
@@ -11,9 +9,13 @@
11
9
  type RadiusProp,
12
10
  type Size,
13
11
  type SizeProp,
14
- } from "../base";
15
- import { mergeProps } from "../merge-props";
16
- import type { ClassName } from "../utils";
12
+ } from "../base.js";
13
+ import { mergeProps } from "../merge-props.js";
14
+ import { SwitchThumb, type SwitchThumbProps } from "./index.js";
15
+ import type { ClassName } from "../utils.js";
16
+ import type { Snippet } from "svelte";
17
+ import type { HTMLButtonAttributes } from "svelte/elements";
18
+ import { twMerge } from "tailwind-merge";
17
19
 
18
20
  export const SWITCH_COLORS = COLORS;
19
21
  export type SwitchColor = Color;
@@ -29,16 +31,18 @@
29
31
 
30
32
  export type SwitchProps = {
31
33
  checked?: boolean;
34
+ thumb?: Snippet<[SwitchThumbProps]>;
32
35
  } & ClassName &
36
+ SwitchColorProp &
33
37
  SwitchSizeProp &
34
38
  SwitchRadiusProp &
35
- SwitchColorProp &
36
39
  HTMLButtonAttributes;
37
40
  </script>
38
41
 
39
42
  <script lang="ts">
40
43
  let {
41
44
  checked = $bindable(false),
45
+ thumb = defaultThumb,
42
46
  class: className,
43
47
  color = "primary",
44
48
  size = "sm",
@@ -47,6 +51,10 @@
47
51
  }: SwitchProps = $props();
48
52
  </script>
49
53
 
54
+ {#snippet defaultThumb(props: SwitchThumbProps)}
55
+ <SwitchThumb {...props} />
56
+ {/snippet}
57
+
50
58
  <button
51
59
  type="button"
52
60
  role="switch"
@@ -79,27 +87,5 @@
79
87
  )}
80
88
  {...mergeProps(restProps, { onclick: () => (checked = !checked) })}
81
89
  >
82
- <!-- Thumb -->
83
- <div
84
- class={twMerge(
85
- "absolute top-0.5 left-0.5 shadow-sm transition-all",
86
-
87
- color === "primary" && "bg-m3-on-primary",
88
- color === "secondary" && "bg-m3-on-secondary",
89
- color === "tertiary" && "bg-m3-on-tertiary",
90
- color === "error" && "bg-m3-on-error",
91
-
92
- size === "xs" && "size-3 group-aria-checked:translate-x-4",
93
- size === "sm" && "size-4 group-aria-checked:translate-x-5",
94
- size === "md" && "size-5 group-aria-checked:translate-x-6",
95
- size === "lg" && "size-6 group-aria-checked:translate-x-7",
96
- size === "xl" && "size-7 group-aria-checked:translate-x-8",
97
-
98
- radius === "xs" && "rounded-xs",
99
- radius === "sm" && "rounded-sm",
100
- radius === "md" && "rounded-lg",
101
- radius === "lg" && "rounded-2xl",
102
- radius === "xl" && "rounded-4xl",
103
- )}
104
- ></div>
90
+ {@render thumb({ color, size, radius })}
105
91
  </button>
@@ -1,6 +1,8 @@
1
+ import { type Color, type ColorProp, type Radius, type RadiusProp, type Size, type SizeProp } from "../base.js";
2
+ import { type SwitchThumbProps } from "./index.js";
3
+ import type { ClassName } from "../utils.js";
4
+ import type { Snippet } from "svelte";
1
5
  import type { HTMLButtonAttributes } from "svelte/elements";
2
- import { type Color, type ColorProp, type Radius, type RadiusProp, type Size, type SizeProp } from "../base";
3
- import type { ClassName } from "../utils";
4
6
  export declare const SWITCH_COLORS: readonly ["primary", "secondary", "tertiary", "error", "inherit"];
5
7
  export type SwitchColor = Color;
6
8
  export type SwitchColorProp = ColorProp;
@@ -12,7 +14,8 @@ export type SwitchRadius = Radius;
12
14
  export type SwitchRadiusProp = RadiusProp;
13
15
  export type SwitchProps = {
14
16
  checked?: boolean;
15
- } & ClassName & SwitchSizeProp & SwitchRadiusProp & SwitchColorProp & HTMLButtonAttributes;
17
+ thumb?: Snippet<[SwitchThumbProps]>;
18
+ } & ClassName & SwitchColorProp & SwitchSizeProp & SwitchRadiusProp & HTMLButtonAttributes;
16
19
  declare const Switch: import("svelte").Component<SwitchProps, {}, "checked">;
17
20
  type Switch = ReturnType<typeof Switch>;
18
21
  export default Switch;
@@ -9,8 +9,8 @@
9
9
  type RadiusProp,
10
10
  type Size,
11
11
  type SizeProp,
12
- } from "..";
13
- import { type ClassName } from "../utils";
12
+ } from "../base.js";
13
+ import type { ClassName } from "../utils.js";
14
14
  import type { HTMLTextareaAttributes } from "svelte/elements";
15
15
  import { twMerge } from "tailwind-merge";
16
16
 
@@ -1,5 +1,5 @@
1
- import { type Color, type ColorProp, type Radius, type RadiusProp, type Size, type SizeProp } from "..";
2
- import { type ClassName } from "../utils";
1
+ import { type Color, type ColorProp, type Radius, type RadiusProp, type Size, type SizeProp } from "../base.js";
2
+ import type { ClassName } from "../utils.js";
3
3
  import type { HTMLTextareaAttributes } from "svelte/elements";
4
4
  export declare const TEXTAREA_VARIANTS: readonly ["outlined", "filled", "inherit"];
5
5
  export type TextareaVariant = (typeof TEXTAREA_VARIANTS)[number];
@@ -1,2 +1,3 @@
1
- export { default as ToggleButton } from "./toggle-button.svelte";
2
- export { default as ToggleGroup } from "./toggle-group.svelte";
1
+ export { default as ToggleButton, type ToggleButtonProps, } from "./toggle-button.svelte";
2
+ export { getToggleContext, setToggleContext, ToggleContext, } from "./toggle-context.svelte.js";
3
+ export { default as ToggleGroup, type ToggleGroupProps, } from "./toggle-group.svelte";
@@ -1,2 +1,3 @@
1
- export { default as ToggleButton } from "./toggle-button.svelte";
2
- export { default as ToggleGroup } from "./toggle-group.svelte";
1
+ export { default as ToggleButton, } from "./toggle-button.svelte";
2
+ export { getToggleContext, setToggleContext, ToggleContext, } from "./toggle-context.svelte.js";
3
+ export { default as ToggleGroup, } from "./toggle-group.svelte";
@@ -1,11 +1,11 @@
1
1
  <script module lang="ts">
2
+ import type { Variants } from "../base.js";
3
+ import { mergeProps } from "../merge-props.js";
4
+ import { getToggleContext } from "./index.js";
5
+ import { noop, type ClassName, type ElementRef } from "../utils.js";
2
6
  import type { Snippet } from "svelte";
3
7
  import type { HTMLButtonAttributes } from "svelte/elements";
4
8
  import { twMerge } from "tailwind-merge";
5
- import { type Variants } from "../base";
6
- import { mergeProps } from "../merge-props";
7
- import { noop, type ClassName, type ElementRef } from "../utils";
8
- import { getToggleContext } from "./toggle-context.svelte";
9
9
 
10
10
  export type ToggleButtonProps<T> = {
11
11
  value: T;
@@ -1,7 +1,7 @@
1
+ import type { Variants } from "../base.js";
2
+ import { type ClassName, type ElementRef } from "../utils.js";
1
3
  import type { Snippet } from "svelte";
2
4
  import type { HTMLButtonAttributes } from "svelte/elements";
3
- import { type Variants } from "../base";
4
- import { type ClassName, type ElementRef } from "../utils";
5
5
  export type ToggleButtonProps<T> = {
6
6
  value: T;
7
7
  children: Snippet;
@@ -1,9 +1,9 @@
1
1
  <script module lang="ts">
2
- import { type Snippet } from "svelte";
2
+ import { setToggleContext, ToggleContext } from "./index.js";
3
+ import { noop, type ClassName, type ElementRef } from "../utils.js";
4
+ import type { Snippet } from "svelte";
3
5
  import type { HTMLAttributes } from "svelte/elements";
4
6
  import { twMerge } from "tailwind-merge";
5
- import { noop, type ClassName, type ElementRef } from "../utils";
6
- import { setToggleContext, ToggleContext } from "./toggle-context.svelte";
7
7
 
8
8
  export type ToggleGroupProps<T> = {
9
9
  value?: T;
@@ -1,6 +1,6 @@
1
- import { type Snippet } from "svelte";
1
+ import { type ClassName, type ElementRef } from "../utils.js";
2
+ import type { Snippet } from "svelte";
2
3
  import type { HTMLAttributes } from "svelte/elements";
3
- import { type ClassName, type ElementRef } from "../utils";
4
4
  export type ToggleGroupProps<T> = {
5
5
  value?: T;
6
6
  onChange?: (value?: T) => void;
@@ -1,8 +1,8 @@
1
1
  <script lang="ts" module>
2
- import { type Snippet } from "svelte";
2
+ import { Popover, type PopoverProps } from "../popover/index.js";
3
+ import type { ClassName } from "../utils.js";
4
+ import type { Snippet } from "svelte";
3
5
  import { twMerge } from "tailwind-merge";
4
- import { Popover, type PopoverProps } from "../popover";
5
- import type { ClassName } from "../utils";
6
6
 
7
7
  export type TooltipTriggerProps = {
8
8
  ref: (el: HTMLElement) => void;
@@ -36,8 +36,9 @@
36
36
  ...restProps
37
37
  }: TooltipProps = $props();
38
38
 
39
- const isTouchDevice =
40
- "ontouchstart" in window || navigator.maxTouchPoints > 0;
39
+ function isTouchDevice() {
40
+ return "ontouchstart" in window || navigator.maxTouchPoints > 0;
41
+ }
41
42
 
42
43
  let timeout: number;
43
44
 
@@ -64,7 +65,7 @@
64
65
  }
65
66
  : {
66
67
  ref: (ref) => (anchorEl = ref),
67
- onmouseenter: () => !isTouchDevice && show(),
68
+ onmouseenter: () => !isTouchDevice() && show(),
68
69
  onmouseleave: () => hide(),
69
70
  ontouchstart: () => show(delay),
70
71
  ontouchend: () => cancel(),
@@ -1,6 +1,6 @@
1
- import { type Snippet } from "svelte";
2
- import { type PopoverProps } from "../popover";
3
- import type { ClassName } from "../utils";
1
+ import { type PopoverProps } from "../popover/index.js";
2
+ import type { ClassName } from "../utils.js";
3
+ import type { Snippet } from "svelte";
4
4
  export type TooltipTriggerProps = {
5
5
  ref: (el: HTMLElement) => void;
6
6
  onclick?: () => void;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "kosui",
3
- "version": "0.0.26",
3
+ "version": "0.0.28",
4
4
  "type": "module",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -28,7 +28,7 @@
28
28
  },
29
29
  "dependencies": {
30
30
  "@floating-ui/dom": "^1.7.2",
31
- "@lucide/svelte": "^0.539.0",
31
+ "@lucide/svelte": "^0.542.0",
32
32
  "marked": "^16.1.1"
33
33
  },
34
34
  "peerDependencies": {
@@ -39,7 +39,7 @@
39
39
  "@eslint/compat": "^1.2.5",
40
40
  "@eslint/js": "^9.18.0",
41
41
  "@playwright/test": "^1.49.1",
42
- "@sveltejs/adapter-auto": "^6.0.0",
42
+ "@sveltejs/adapter-static": "^3.0.9",
43
43
  "@sveltejs/kit": "^2.22.0",
44
44
  "@sveltejs/package": "^2.0.0",
45
45
  "@sveltejs/vite-plugin-svelte": "^6.0.0",
@@ -51,6 +51,8 @@
51
51
  "eslint-config-prettier": "^10.0.1",
52
52
  "eslint-plugin-svelte": "^3.0.0",
53
53
  "globals": "^16.0.0",
54
+ "highlight.js": "^11.11.1",
55
+ "highlight.svelte": "^0.1.3",
54
56
  "jsdom": "^26.1.0",
55
57
  "postcss": "^8.5.6",
56
58
  "prettier": "^3.4.2",
@@ -77,9 +79,9 @@
77
79
  "check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch",
78
80
  "format": "prettier --write .",
79
81
  "lint": "prettier --check . && eslint .",
80
- "test:unit": "vitest",
81
- "test": "pnpm test:unit -- --run && pnpm test:e2e",
82
+ "test:unit": "vitest run",
82
83
  "test:e2e": "playwright test",
84
+ "test": "pnpm run \"/^(build|check|lint|test:unit)$/\"",
83
85
  "ci:publish": "changeset publish"
84
86
  }
85
87
  }