kosui 0.0.27 → 0.0.29

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (157) hide show
  1. package/dist/alert/alert.svelte +174 -19
  2. package/dist/alert/alert.svelte.d.ts +26 -3
  3. package/dist/alert/index.d.ts +1 -1
  4. package/dist/alert/index.js +1 -1
  5. package/dist/autocomplete/autocomplete-content.svelte +2 -2
  6. package/dist/autocomplete/autocomplete-content.svelte.d.ts +2 -2
  7. package/dist/autocomplete/autocomplete-item.svelte +3 -3
  8. package/dist/autocomplete/autocomplete-item.svelte.d.ts +3 -3
  9. package/dist/autocomplete/autocomplete.svelte +2 -2
  10. package/dist/autocomplete/autocomplete.svelte.d.ts +2 -2
  11. package/dist/base.d.ts +3 -3
  12. package/dist/base.js +3 -2
  13. package/dist/box/box.svelte +2 -2
  14. package/dist/box/box.svelte.d.ts +2 -2
  15. package/dist/breadcrumbs/breadcrumbs.svelte +1 -1
  16. package/dist/breadcrumbs/breadcrumbs.svelte.d.ts +1 -1
  17. package/dist/button/button.svelte +3 -3
  18. package/dist/button/button.svelte.d.ts +3 -3
  19. package/dist/chip/chip.svelte +1 -1
  20. package/dist/chip/chip.svelte.d.ts +1 -1
  21. package/dist/command/action.svelte.d.ts +1 -1
  22. package/dist/command/action.svelte.js +0 -1
  23. package/dist/command/command-content.svelte +2 -2
  24. package/dist/command/command-content.svelte.d.ts +2 -2
  25. package/dist/command/command-input.svelte +2 -2
  26. package/dist/command/command-input.svelte.d.ts +2 -2
  27. package/dist/command/command-item.svelte +3 -3
  28. package/dist/command/command-item.svelte.d.ts +3 -3
  29. package/dist/command/command.svelte +2 -2
  30. package/dist/command/command.svelte.d.ts +2 -2
  31. package/dist/common/divider.svelte +2 -2
  32. package/dist/common/divider.svelte.d.ts +2 -2
  33. package/dist/common/header.svelte +3 -3
  34. package/dist/common/header.svelte.d.ts +3 -3
  35. package/dist/dialog/dialog-button.svelte +1 -1
  36. package/dist/dialog/dialog-button.svelte.d.ts +1 -1
  37. package/dist/dialog/dialog.svelte +2 -2
  38. package/dist/dialog/dialog.svelte.d.ts +2 -2
  39. package/dist/dialog/dialoguer-context.svelte.d.ts +3 -3
  40. package/dist/dialog/dialoguer-context.svelte.js +0 -3
  41. package/dist/dialog/dialoguer.svelte +1 -1
  42. package/dist/dialog/dialoguer.svelte.d.ts +1 -1
  43. package/dist/fab/fab.svelte +1 -1
  44. package/dist/fab/fab.svelte.d.ts +1 -1
  45. package/dist/index.d.ts +1 -0
  46. package/dist/index.js +1 -0
  47. package/dist/input/input.svelte +1 -1
  48. package/dist/input/input.svelte.d.ts +4 -4
  49. package/dist/link/link.svelte +1 -1
  50. package/dist/link/link.svelte.d.ts +1 -1
  51. package/dist/markdown/markdown-blockquote.svelte +3 -3
  52. package/dist/markdown/markdown-blockquote.svelte.d.ts +3 -3
  53. package/dist/markdown/markdown-br.svelte +3 -3
  54. package/dist/markdown/markdown-br.svelte.d.ts +3 -3
  55. package/dist/markdown/markdown-code.svelte +3 -3
  56. package/dist/markdown/markdown-code.svelte.d.ts +3 -3
  57. package/dist/markdown/markdown-codespan.svelte +3 -3
  58. package/dist/markdown/markdown-codespan.svelte.d.ts +3 -3
  59. package/dist/markdown/markdown-context.svelte.d.ts +1 -1
  60. package/dist/markdown/markdown-context.svelte.js +0 -1
  61. package/dist/markdown/markdown-def.svelte +3 -3
  62. package/dist/markdown/markdown-def.svelte.d.ts +3 -3
  63. package/dist/markdown/markdown-del.svelte +3 -3
  64. package/dist/markdown/markdown-del.svelte.d.ts +3 -3
  65. package/dist/markdown/markdown-em.svelte +3 -3
  66. package/dist/markdown/markdown-em.svelte.d.ts +3 -3
  67. package/dist/markdown/markdown-escape.svelte +2 -2
  68. package/dist/markdown/markdown-escape.svelte.d.ts +2 -2
  69. package/dist/markdown/markdown-heading.svelte +3 -3
  70. package/dist/markdown/markdown-heading.svelte.d.ts +3 -3
  71. package/dist/markdown/markdown-hr.svelte +3 -3
  72. package/dist/markdown/markdown-hr.svelte.d.ts +3 -3
  73. package/dist/markdown/markdown-html.svelte +2 -2
  74. package/dist/markdown/markdown-html.svelte.d.ts +2 -2
  75. package/dist/markdown/markdown-image.svelte +3 -3
  76. package/dist/markdown/markdown-image.svelte.d.ts +3 -3
  77. package/dist/markdown/markdown-link.svelte +3 -3
  78. package/dist/markdown/markdown-link.svelte.d.ts +3 -3
  79. package/dist/markdown/markdown-list-item.svelte +3 -3
  80. package/dist/markdown/markdown-list-item.svelte.d.ts +3 -3
  81. package/dist/markdown/markdown-list.svelte +3 -3
  82. package/dist/markdown/markdown-list.svelte.d.ts +3 -3
  83. package/dist/markdown/markdown-paragraph.svelte +3 -3
  84. package/dist/markdown/markdown-paragraph.svelte.d.ts +3 -3
  85. package/dist/markdown/markdown-space.svelte +2 -2
  86. package/dist/markdown/markdown-space.svelte.d.ts +2 -2
  87. package/dist/markdown/markdown-strong.svelte +3 -3
  88. package/dist/markdown/markdown-strong.svelte.d.ts +3 -3
  89. package/dist/markdown/markdown-table-cell.svelte +3 -6
  90. package/dist/markdown/markdown-table-cell.svelte.d.ts +3 -3
  91. package/dist/markdown/markdown-table.svelte +2 -2
  92. package/dist/markdown/markdown-table.svelte.d.ts +2 -2
  93. package/dist/markdown/markdown-text.svelte +2 -2
  94. package/dist/markdown/markdown-text.svelte.d.ts +2 -2
  95. package/dist/markdown/markdown-token.svelte +1 -1
  96. package/dist/markdown/markdown-token.svelte.d.ts +1 -1
  97. package/dist/markdown/markdown-tokens.svelte +1 -1
  98. package/dist/markdown/markdown-tokens.svelte.d.ts +1 -1
  99. package/dist/markdown/markdown.svelte +1 -1
  100. package/dist/markdown/markdown.svelte.d.ts +1 -1
  101. package/dist/menu/menu-actions.svelte +1 -1
  102. package/dist/menu/menu-actions.svelte.d.ts +1 -1
  103. package/dist/menu/menu-content.svelte +2 -2
  104. package/dist/menu/menu-content.svelte.d.ts +2 -2
  105. package/dist/menu/menu-item.svelte +3 -3
  106. package/dist/menu/menu-item.svelte.d.ts +3 -3
  107. package/dist/menu/menu-trigger.svelte +4 -4
  108. package/dist/menu/menu-trigger.svelte.d.ts +4 -4
  109. package/dist/menu/menu.svelte +2 -2
  110. package/dist/menu/menu.svelte.d.ts +2 -2
  111. package/dist/modal/modal.svelte +3 -3
  112. package/dist/modal/modal.svelte.d.ts +3 -3
  113. package/dist/popover/popover.svelte +2 -2
  114. package/dist/popover/popover.svelte.d.ts +2 -2
  115. package/dist/portal/proxy.svelte +1 -1
  116. package/dist/portal/proxy.svelte.d.ts +1 -1
  117. package/dist/progress/circular-progress.svelte +1 -1
  118. package/dist/progress/circular-progress.svelte.d.ts +1 -1
  119. package/dist/shortcut/shortcut-badge.svelte +2 -2
  120. package/dist/shortcut/shortcut-badge.svelte.d.ts +2 -2
  121. package/dist/shortcut/shortcut.d.ts +2 -0
  122. package/dist/shortcut/shortcut.js +2 -0
  123. package/dist/skeleton/skeleton.svelte +1 -1
  124. package/dist/skeleton/skeleton.svelte.d.ts +1 -1
  125. package/dist/slider/index.d.ts +8 -0
  126. package/dist/slider/index.js +8 -0
  127. package/dist/slider/slider-context.svelte.d.ts +50 -0
  128. package/dist/slider/slider-context.svelte.js +198 -0
  129. package/dist/slider/slider-handle-label-arrow.svelte +18 -0
  130. package/dist/slider/slider-handle-label-arrow.svelte.d.ts +6 -0
  131. package/dist/slider/slider-handle-label.svelte +35 -0
  132. package/dist/slider/slider-handle-label.svelte.d.ts +6 -0
  133. package/dist/slider/slider-handle.svelte +54 -0
  134. package/dist/slider/slider-handle.svelte.d.ts +6 -0
  135. package/dist/slider/slider-mark-dot.svelte +25 -0
  136. package/dist/slider/slider-mark-dot.svelte.d.ts +6 -0
  137. package/dist/slider/slider-mark-label.svelte +37 -0
  138. package/dist/slider/slider-mark-label.svelte.d.ts +9 -0
  139. package/dist/slider/slider-mark.svelte +33 -0
  140. package/dist/slider/slider-mark.svelte.d.ts +9 -0
  141. package/dist/slider/slider.svelte +249 -0
  142. package/dist/slider/slider.svelte.d.ts +41 -0
  143. package/dist/switch/switch-thumb.svelte +2 -2
  144. package/dist/switch/switch-thumb.svelte.d.ts +2 -2
  145. package/dist/switch/switch.svelte +3 -3
  146. package/dist/switch/switch.svelte.d.ts +6 -6
  147. package/dist/textarea/textarea.svelte +2 -2
  148. package/dist/textarea/textarea.svelte.d.ts +5 -5
  149. package/dist/toggle/toggle-button.svelte +3 -3
  150. package/dist/toggle/toggle-button.svelte.d.ts +3 -3
  151. package/dist/toggle/toggle-group.svelte +2 -2
  152. package/dist/toggle/toggle-group.svelte.d.ts +2 -2
  153. package/dist/tooltip/tooltip.svelte +6 -5
  154. package/dist/tooltip/tooltip.svelte.d.ts +2 -2
  155. package/dist/utils.d.ts +1 -1
  156. package/dist/utils.js +0 -1
  157. package/package.json +5 -5
@@ -0,0 +1,54 @@
1
+ <script lang="ts" module>
2
+ import { mergeProps } from "../merge-props.js";
3
+ import { getSliderContext } from "./index.js";
4
+ import type { ClassName } from "../utils.js";
5
+ import type { HTMLAttributes } from "svelte/elements";
6
+ import { twMerge } from "tailwind-merge";
7
+
8
+ export type SliderHandleProps = {} & ClassName &
9
+ HTMLAttributes<HTMLDivElement>;
10
+ </script>
11
+
12
+ <script lang="ts">
13
+ let { class: className, ...restProps }: SliderHandleProps = $props();
14
+
15
+ const ctx = getSliderContext();
16
+ </script>
17
+
18
+ <div class="relative">
19
+ <div
20
+ class={twMerge(
21
+ "border-2 border-m3-surface shadow-md",
22
+
23
+ ctx.animated && "transition-all",
24
+ !ctx.disabled && "hover:scale-110 focus:scale-110 active:scale-110",
25
+
26
+ ctx.color === "primary" && "bg-m3-primary",
27
+ ctx.color === "secondary" && "bg-m3-secondary",
28
+ ctx.color === "tertiary" && "bg-m3-tertiary",
29
+ ctx.color === "error" && "bg-m3-error",
30
+
31
+ ctx.size === "xs" && "size-3",
32
+ ctx.size === "sm" && "size-4",
33
+ ctx.size === "md" && "size-5",
34
+ ctx.size === "lg" && "size-6",
35
+ ctx.size === "xl" && "size-7",
36
+
37
+ ctx.radius === "none" && "rounded-none",
38
+ ctx.radius === "xs" && "rounded-xs",
39
+ ctx.radius === "sm" && "rounded-sm",
40
+ ctx.radius === "md" && "rounded-lg",
41
+ ctx.radius === "lg" && "rounded-2xl",
42
+ ctx.radius === "xl" && "rounded-4xl",
43
+ ctx.radius === "full" && "rounded-full",
44
+
45
+ className,
46
+ )}
47
+ {...mergeProps(restProps, {
48
+ onpointerenter: () => (ctx.hovered = true),
49
+ onpointerleave: () => (ctx.hovered = false),
50
+ })}
51
+ ></div>
52
+
53
+ {@render ctx.handleLabelRenderer({})}
54
+ </div>
@@ -0,0 +1,6 @@
1
+ import type { ClassName } from "../utils.js";
2
+ import type { HTMLAttributes } from "svelte/elements";
3
+ export type SliderHandleProps = {} & ClassName & HTMLAttributes<HTMLDivElement>;
4
+ declare const SliderHandle: import("svelte").Component<SliderHandleProps, {}, "">;
5
+ type SliderHandle = ReturnType<typeof SliderHandle>;
6
+ export default SliderHandle;
@@ -0,0 +1,25 @@
1
+ <script lang="ts">
2
+ import type { ClassName } from "../utils.js";
3
+ import type { HTMLAttributes } from "svelte/elements";
4
+ import { twMerge } from "tailwind-merge";
5
+ import { getSliderContext } from "./index.js";
6
+
7
+ export type SliderMarkDotProps = {} & ClassName &
8
+ HTMLAttributes<HTMLDivElement>;
9
+ let { class: className, ...restProps }: SliderMarkDotProps = $props();
10
+ const ctx = getSliderContext();
11
+ </script>
12
+
13
+ <div
14
+ class={twMerge(
15
+ "rounded-full bg-m3-surface-container-lowest",
16
+
17
+ ctx.size === "sm" && "size-0.5",
18
+ ctx.size === "md" && "size-1",
19
+ ctx.size === "lg" && "size-1.5",
20
+ ctx.size === "xl" && "size-2",
21
+
22
+ className,
23
+ )}
24
+ {...restProps}
25
+ ></div>
@@ -0,0 +1,6 @@
1
+ import type { ClassName } from "../utils.js";
2
+ import type { HTMLAttributes } from "svelte/elements";
3
+ export type SliderMarkDotProps = {} & ClassName & HTMLAttributes<HTMLDivElement>;
4
+ declare const SliderMarkDot: import("svelte").Component<SliderMarkDotProps, {}, "">;
5
+ type SliderMarkDot = ReturnType<typeof SliderMarkDot>;
6
+ export default SliderMarkDot;
@@ -0,0 +1,37 @@
1
+ <script lang="ts">
2
+ import { mergeProps } from "../merge-props.js";
3
+ import type { ClassName } from "../utils.js";
4
+ import type { HTMLButtonAttributes } from "svelte/elements";
5
+ import { twMerge } from "tailwind-merge";
6
+ import { getSliderContext } from "./slider-context.svelte.js";
7
+
8
+ export type SliderMarkLabelProps = {
9
+ value: number;
10
+ label?: string;
11
+ } & ClassName &
12
+ HTMLButtonAttributes;
13
+ let {
14
+ value,
15
+ label,
16
+ class: className,
17
+ ...restProps
18
+ }: SliderMarkLabelProps = $props();
19
+
20
+ const ctx = getSliderContext();
21
+ </script>
22
+
23
+ {#if label}
24
+ <button
25
+ class={twMerge(
26
+ "absolute top-full mt-2 text-xs whitespace-nowrap text-m3-on-surface-variant",
27
+ "left-1/2 -translate-x-1/2",
28
+ className,
29
+ )}
30
+ {...mergeProps(restProps, {
31
+ onpointerdown: (e: PointerEvent) => e.stopImmediatePropagation(),
32
+ onclick: () => (ctx.value = value),
33
+ })}
34
+ >
35
+ {label}
36
+ </button>
37
+ {/if}
@@ -0,0 +1,9 @@
1
+ import type { ClassName } from "../utils.js";
2
+ import type { HTMLButtonAttributes } from "svelte/elements";
3
+ export type SliderMarkLabelProps = {
4
+ value: number;
5
+ label?: string;
6
+ } & ClassName & HTMLButtonAttributes;
7
+ declare const SliderMarkLabel: import("svelte").Component<SliderMarkLabelProps, {}, "">;
8
+ type SliderMarkLabel = ReturnType<typeof SliderMarkLabel>;
9
+ export default SliderMarkLabel;
@@ -0,0 +1,33 @@
1
+ <script lang="ts">
2
+ import type { ClassName } from "../utils.js";
3
+ import type { HTMLAttributes } from "svelte/elements";
4
+ import { twMerge } from "tailwind-merge";
5
+ import { getSliderContext } from "./index.js";
6
+
7
+ export type SliderMarkProps = {
8
+ value: number;
9
+ label?: string;
10
+ } & ClassName &
11
+ HTMLAttributes<HTMLDivElement>;
12
+
13
+ let {
14
+ value,
15
+ label,
16
+ class: className,
17
+ ...restProps
18
+ }: SliderMarkProps = $props();
19
+
20
+ const ctx = getSliderContext();
21
+ </script>
22
+
23
+ <div
24
+ class={twMerge(
25
+ "absolute top-1/2 -translate-x-1/2 -translate-y-1/2",
26
+ className,
27
+ )}
28
+ style={`left: ${ctx.getPositionFromValue(value)}%`}
29
+ {...restProps}
30
+ >
31
+ {@render ctx.markDotRenderer({})}
32
+ {@render ctx.markLabelRenderer({ value, label })}
33
+ </div>
@@ -0,0 +1,9 @@
1
+ import type { ClassName } from "../utils.js";
2
+ import type { HTMLAttributes } from "svelte/elements";
3
+ export type SliderMarkProps = {
4
+ value: number;
5
+ label?: string;
6
+ } & ClassName & HTMLAttributes<HTMLDivElement>;
7
+ declare const SliderMark: import("svelte").Component<SliderMarkProps, {}, "">;
8
+ type SliderMark = ReturnType<typeof SliderMark>;
9
+ export default SliderMark;
@@ -0,0 +1,249 @@
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 = "full",
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
+
132
+ const SIZE_RATIO: Record<Size, number> = {
133
+ xs: 1.5,
134
+ sm: 2,
135
+ md: 2.5,
136
+ lg: 3,
137
+ xl: 3.5,
138
+ };
139
+
140
+ let ratio = $derived(SIZE_RATIO[ctx.size]);
141
+ </script>
142
+
143
+ {#snippet defaultSliderHandle(props: SliderHandleProps)}
144
+ <SliderHandle {...props} />
145
+ {/snippet}
146
+
147
+ {#snippet defaultSliderHandleLabel(props: SliderHandleLabelProps)}
148
+ <SliderHandleLabel {...props} />
149
+ {/snippet}
150
+
151
+ {#snippet defaultSliderHandleLabelArrow(props: SliderHandleLabelArrowProps)}
152
+ <SliderHandleLabelArrow {...props} />
153
+ {/snippet}
154
+
155
+ {#snippet defaultSliderMark(props: SliderMarkProps)}
156
+ <SliderMark {...props} />
157
+ {/snippet}
158
+
159
+ {#snippet defaultSliderMarkDot(props: SliderMarkDotProps)}
160
+ <SliderMarkDot {...props} />
161
+ {/snippet}
162
+
163
+ {#snippet defaultSliderMarkLabel(props: SliderMarkLabelProps)}
164
+ <SliderMarkLabel {...props} />
165
+ {/snippet}
166
+
167
+ <!-- Track -->
168
+ <div
169
+ class={twMerge(
170
+ "cursor-pointer bg-m3-surface-container-highest px-2 select-none",
171
+
172
+ ctx.disabled && "cursor-not-allowed opacity-50",
173
+
174
+ ctx.radius === "none" && "rounded-none",
175
+ ctx.radius === "xs" && "rounded-xs",
176
+ ctx.radius === "sm" && "rounded-sm",
177
+ ctx.radius === "md" && "rounded-lg",
178
+ ctx.radius === "lg" && "rounded-2xl",
179
+ ctx.radius === "xl" && "rounded-4xl",
180
+ ctx.radius === "full" && "rounded-full",
181
+
182
+ ctx.size === "xs" && "my-1 h-0.5 px-1.5",
183
+ ctx.size === "sm" && "my-1 h-1 px-2",
184
+ ctx.size === "md" && "my-1 h-2 px-2.5",
185
+ ctx.size === "lg" && "my-1 h-3 px-3",
186
+ ctx.size === "xl" && "my-1 h-4 px-3.5",
187
+
188
+ marks.length > 0 && "mb-6",
189
+
190
+ className,
191
+ )}
192
+ {...mergeProps(restProps, {
193
+ role: "slider",
194
+ tabindex: ctx.disabled ? -1 : 0,
195
+ "aria-valuenow": ctx.value,
196
+ "aria-valuemin": ctx.min,
197
+ "aria-valuemax": ctx.max,
198
+ "aria-disabled": ctx.disabled,
199
+ onpointerdown: ctx.pointerDown,
200
+ onpointermove: ctx.pointerMove,
201
+ onpointerup: ctx.pointerUp,
202
+ onkeydown: ctx.keyDown,
203
+ onfocus: ctx.focus,
204
+ onblur: ctx.blur,
205
+ })}
206
+ >
207
+ <div bind:this={ctx.sliderEl} class="relative h-full">
208
+ <!-- Filled track -->
209
+ <div
210
+ class={twMerge(
211
+ "absolute h-full",
212
+
213
+ ctx.animated && "transition-all",
214
+
215
+ ctx.color === "primary" && "bg-m3-primary",
216
+ ctx.color === "secondary" && "bg-m3-secondary",
217
+ ctx.color === "tertiary" && "bg-m3-tertiary",
218
+ ctx.color === "error" && "bg-m3-error",
219
+
220
+ ctx.radius === "none" && "rounded-none",
221
+ ctx.radius === "xs" && "rounded-xs",
222
+ ctx.radius === "sm" && "rounded-sm",
223
+ ctx.radius === "md" && "rounded-lg",
224
+ ctx.radius === "lg" && "rounded-2xl",
225
+ ctx.radius === "xl" && "rounded-4xl",
226
+ ctx.radius === "full" && "rounded-full",
227
+ )}
228
+ style={ctx.inverted
229
+ ? `right: 0; margin-right: calc(var(--spacing) * -${ratio}); width: calc(${100 - ctx.position}% + var(--spacing) * ${ratio})`
230
+ : `left: 0; margin-left: calc(var(--spacing) * -${ratio}); width: calc(${ctx.position}% + var(--spacing) * ${ratio})`}
231
+ ></div>
232
+
233
+ <!-- Marks -->
234
+ {#each marks as { value, label } (value)}
235
+ {@render ctx.markRenderer({ value, label })}
236
+ {/each}
237
+
238
+ <!-- Handle -->
239
+ <div
240
+ class={twMerge(
241
+ "absolute top-1/2 -translate-x-1/2 -translate-y-1/2",
242
+ ctx.animated && "transition-all",
243
+ )}
244
+ style={`left: ${ctx.position}%`}
245
+ >
246
+ {@render ctx.handleRenderer({})}
247
+ </div>
248
+ </div>
249
+ </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", "plain", "inherit"];
7
+ export type SliderColor = Color;
8
+ export type SliderColorProp = ColorProp;
9
+ export declare const SLIDER_SIZES: readonly ["xs", "sm", "md", "lg", "xl"];
10
+ export type SliderSize = Size;
11
+ export type SliderSizeProp = SizeProp;
12
+ export declare const SLIDER_RADII: readonly ["none", "xs", "sm", "md", "lg", "xl", "full"];
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;
@@ -4,8 +4,8 @@
4
4
  SwitchRadiusProp,
5
5
  SwitchSizeProp,
6
6
  } from "./index.js";
7
- import { type ClassName } from "../utils.js";
8
- import { type HTMLAttributes } from "svelte/elements";
7
+ import type { ClassName } from "../utils.js";
8
+ import type { HTMLAttributes } from "svelte/elements";
9
9
  import { twMerge } from "tailwind-merge";
10
10
 
11
11
  export type SwitchThumbProps = {} & ClassName &
@@ -1,6 +1,6 @@
1
1
  import type { SwitchColorProp, SwitchRadiusProp, SwitchSizeProp } from "./index.js";
2
- import { type ClassName } from "../utils.js";
3
- import { type HTMLAttributes } from "svelte/elements";
2
+ import type { ClassName } from "../utils.js";
3
+ import type { HTMLAttributes } from "svelte/elements";
4
4
  export type SwitchThumbProps = {} & ClassName & SwitchColorProp & SwitchSizeProp & SwitchRadiusProp & HTMLAttributes<HTMLDivElement>;
5
5
  declare const SwitchThumb: import("svelte").Component<SwitchThumbProps, {}, "">;
6
6
  type SwitchThumb = ReturnType<typeof SwitchThumb>;
@@ -12,9 +12,9 @@
12
12
  } from "../base.js";
13
13
  import { mergeProps } from "../merge-props.js";
14
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";
15
+ import type { ClassName } from "../utils.js";
16
+ import type { Snippet } from "svelte";
17
+ import type { HTMLButtonAttributes } from "svelte/elements";
18
18
  import { twMerge } from "tailwind-merge";
19
19
 
20
20
  export const SWITCH_COLORS = COLORS;
@@ -1,15 +1,15 @@
1
1
  import { type Color, type ColorProp, type Radius, type RadiusProp, type Size, type SizeProp } from "../base.js";
2
2
  import { type SwitchThumbProps } from "./index.js";
3
- import { type ClassName } from "../utils.js";
4
- import { type Snippet } from "svelte";
5
- import { type HTMLButtonAttributes } from "svelte/elements";
6
- export declare const SWITCH_COLORS: readonly ["primary", "secondary", "tertiary", "error", "inherit"];
3
+ import type { ClassName } from "../utils.js";
4
+ import type { Snippet } from "svelte";
5
+ import type { HTMLButtonAttributes } from "svelte/elements";
6
+ export declare const SWITCH_COLORS: readonly ["primary", "secondary", "tertiary", "error", "plain", "inherit"];
7
7
  export type SwitchColor = Color;
8
8
  export type SwitchColorProp = ColorProp;
9
- export declare const SWITCH_SIZES: readonly ["xs", "sm", "md", "lg", "xl", "inherit"];
9
+ export declare const SWITCH_SIZES: readonly ["xs", "sm", "md", "lg", "xl"];
10
10
  export type SwitchSize = Size;
11
11
  export type SwitchSizeProp = SizeProp;
12
- export declare const SWITCH_RADII: readonly ["xs", "sm", "md", "lg", "xl", "inherit"];
12
+ export declare const SWITCH_RADII: readonly ["none", "xs", "sm", "md", "lg", "xl", "full"];
13
13
  export type SwitchRadius = Radius;
14
14
  export type SwitchRadiusProp = RadiusProp;
15
15
  export type SwitchProps = {
@@ -10,8 +10,8 @@
10
10
  type Size,
11
11
  type SizeProp,
12
12
  } from "../base.js";
13
- import { type ClassName } from "../utils.js";
14
- import { type HTMLTextareaAttributes } from "svelte/elements";
13
+ import type { ClassName } from "../utils.js";
14
+ import type { HTMLTextareaAttributes } from "svelte/elements";
15
15
  import { twMerge } from "tailwind-merge";
16
16
 
17
17
  export const TEXTAREA_VARIANTS = ["outlined", "filled", "inherit"] as const;
@@ -1,18 +1,18 @@
1
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
- import { type HTMLTextareaAttributes } from "svelte/elements";
2
+ import type { ClassName } from "../utils.js";
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];
6
6
  export type TextareaVariantProp = {
7
7
  variant?: TextareaVariant;
8
8
  };
9
- export declare const TEXTAREA_COLORS: readonly ["primary", "secondary", "tertiary", "error", "inherit"];
9
+ export declare const TEXTAREA_COLORS: readonly ["primary", "secondary", "tertiary", "error", "plain", "inherit"];
10
10
  export type TextareaColor = Color;
11
11
  export type TextareaColorProp = ColorProp;
12
- export declare const TEXTAREA_SIZES: readonly ["xs", "sm", "md", "lg", "xl", "inherit"];
12
+ export declare const TEXTAREA_SIZES: readonly ["xs", "sm", "md", "lg", "xl"];
13
13
  export type TextareaSize = Size;
14
14
  export type TextareaSizeProp = SizeProp;
15
- export declare const TEXTAREA_RADII: readonly ["xs", "sm", "md", "lg", "xl", "inherit"];
15
+ export declare const TEXTAREA_RADII: readonly ["none", "xs", "sm", "md", "lg", "xl", "full"];
16
16
  export type TextareaRadius = Radius;
17
17
  export type TextareaRadiusProp = RadiusProp;
18
18
  export type TextareaProps = ClassName & TextareaVariantProp & TextareaSizeProp & TextareaRadiusProp & TextareaColorProp & Omit<HTMLTextareaAttributes, "size">;
@@ -1,10 +1,10 @@
1
1
  <script module lang="ts">
2
- import { type Variants } from "../base.js";
2
+ import type { Variants } from "../base.js";
3
3
  import { mergeProps } from "../merge-props.js";
4
4
  import { getToggleContext } from "./index.js";
5
5
  import { noop, type ClassName, type ElementRef } from "../utils.js";
6
- import { type Snippet } from "svelte";
7
- import { type HTMLButtonAttributes } from "svelte/elements";
6
+ import type { Snippet } from "svelte";
7
+ import type { HTMLButtonAttributes } from "svelte/elements";
8
8
  import { twMerge } from "tailwind-merge";
9
9
 
10
10
  export type ToggleButtonProps<T> = {
@@ -1,7 +1,7 @@
1
- import { type Variants } from "../base.js";
1
+ import type { Variants } from "../base.js";
2
2
  import { type ClassName, type ElementRef } from "../utils.js";
3
- import { type Snippet } from "svelte";
4
- import { type HTMLButtonAttributes } from "svelte/elements";
3
+ import type { Snippet } from "svelte";
4
+ import type { HTMLButtonAttributes } from "svelte/elements";
5
5
  export type ToggleButtonProps<T> = {
6
6
  value: T;
7
7
  children: Snippet;
@@ -1,8 +1,8 @@
1
1
  <script module lang="ts">
2
2
  import { setToggleContext, ToggleContext } from "./index.js";
3
3
  import { noop, type ClassName, type ElementRef } from "../utils.js";
4
- import { type Snippet } from "svelte";
5
- import { type HTMLAttributes } from "svelte/elements";
4
+ import type { Snippet } from "svelte";
5
+ import type { HTMLAttributes } from "svelte/elements";
6
6
  import { twMerge } from "tailwind-merge";
7
7
 
8
8
  export type ToggleGroupProps<T> = {
@@ -1,6 +1,6 @@
1
1
  import { type ClassName, type ElementRef } from "../utils.js";
2
- import { type Snippet } from "svelte";
3
- import { type HTMLAttributes } from "svelte/elements";
2
+ import type { Snippet } from "svelte";
3
+ import type { HTMLAttributes } from "svelte/elements";
4
4
  export type ToggleGroupProps<T> = {
5
5
  value?: T;
6
6
  onChange?: (value?: T) => void;
@@ -1,7 +1,7 @@
1
1
  <script lang="ts" module>
2
2
  import { Popover, type PopoverProps } from "../popover/index.js";
3
- import { type ClassName } from "../utils.js";
4
- import { type Snippet } from "svelte";
3
+ import type { ClassName } from "../utils.js";
4
+ import type { Snippet } from "svelte";
5
5
  import { twMerge } from "tailwind-merge";
6
6
 
7
7
  export type TooltipTriggerProps = {
@@ -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
1
  import { type PopoverProps } from "../popover/index.js";
2
- import { type ClassName } from "../utils.js";
3
- import { type Snippet } from "svelte";
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;