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,48 @@
1
+ import type { SliderColor, SliderHandleLabelArrowProps, SliderHandleLabelProps, SliderHandleProps, SliderMarkDotProps, SliderMarkLabelProps, SliderMarkProps, SliderRadius, SliderSize } from "./index.js";
2
+ import { type Snippet } from "svelte";
3
+ export type Mark = {
4
+ value: number;
5
+ label?: string;
6
+ };
7
+ export declare class SliderContext {
8
+ #private;
9
+ onChange: ((value: number) => void) | undefined;
10
+ onChangeEnd: ((value: number) => void) | undefined;
11
+ handleRenderer: Snippet<[SliderHandleProps]>;
12
+ handleLabelRenderer: Snippet<[SliderHandleLabelProps]>;
13
+ handleLabelArrowRenderer: Snippet<[SliderHandleLabelArrowProps]>;
14
+ markRenderer: Snippet<[SliderMarkProps]>;
15
+ markDotRenderer: Snippet<[SliderMarkDotProps]>;
16
+ markLabelRenderer: Snippet<[SliderMarkLabelProps]>;
17
+ sliderEl: HTMLDivElement;
18
+ isHovered: boolean;
19
+ isDragging: boolean;
20
+ isFocused: boolean;
21
+ constructor(getValue: () => number, setValue: (val: number) => void, min: () => number, max: () => number, step: () => number, marks: () => Mark[], disabled: () => boolean, label: (value: number) => string, labelAlwaysOn: () => boolean, inverted: () => boolean, restrictToMarks: () => boolean, color: () => SliderColor, size: () => SliderSize, radius: () => SliderRadius, onChange: ((value: number) => void) | undefined, onChangeEnd: ((value: number) => void) | undefined, handleRenderer: Snippet<[SliderHandleProps]>, handleLabelRenderer: Snippet<[SliderHandleLabelProps]>, handleLabelArrowRenderer: Snippet<[SliderHandleLabelArrowProps]>, markRenderer: Snippet<[SliderMarkProps]>, markDotRenderer: Snippet<[SliderMarkDotProps]>, markLabelRenderer: Snippet<[SliderMarkLabelProps]>);
22
+ get value(): number;
23
+ set value(value: number);
24
+ get min(): number;
25
+ get max(): number;
26
+ get step(): number;
27
+ get marks(): Mark[];
28
+ get disabled(): boolean;
29
+ get label(): string;
30
+ get labelAlwaysOn(): boolean;
31
+ get inverted(): boolean;
32
+ get restrictToMarks(): boolean;
33
+ get color(): SliderColor;
34
+ get size(): SliderSize;
35
+ get radius(): SliderRadius;
36
+ get position(): number;
37
+ clamp: (val: number, minVal: number, maxVal: number) => number;
38
+ getValueFromPosition: (position: number) => number;
39
+ getPositionFromValue: (val: number) => number;
40
+ pointerDown: (event: PointerEvent) => void;
41
+ pointerMove: (event: PointerEvent) => void;
42
+ pointerUp: (event: PointerEvent) => void;
43
+ keyDown: (event: KeyboardEvent) => void;
44
+ focus: () => void;
45
+ blur: () => void;
46
+ }
47
+ export declare function setSliderContext(state: SliderContext): SliderContext;
48
+ export declare function getSliderContext(): SliderContext;
@@ -0,0 +1,192 @@
1
+ import { Bindable } from "../bindable.svelte.js";
2
+ import { Shortcut } from "../shortcut/shortcut.js";
3
+ import { getContext, setContext } from "svelte";
4
+ export class SliderContext {
5
+ #value;
6
+ #min;
7
+ #max;
8
+ #step;
9
+ #marks;
10
+ #disabled;
11
+ #label;
12
+ #labelAlwaysOn;
13
+ #inverted;
14
+ #restrictToMarks;
15
+ #color;
16
+ #size;
17
+ #radius;
18
+ onChange;
19
+ onChangeEnd;
20
+ handleRenderer;
21
+ handleLabelRenderer;
22
+ handleLabelArrowRenderer;
23
+ markRenderer;
24
+ markDotRenderer;
25
+ markLabelRenderer;
26
+ sliderEl;
27
+ isHovered = $state(false);
28
+ isDragging = $state(false);
29
+ isFocused = $state(false);
30
+ constructor(getValue, setValue, min, max, step, marks, disabled, label, labelAlwaysOn, inverted, restrictToMarks, color, size, radius, onChange, onChangeEnd, handleRenderer, handleLabelRenderer, handleLabelArrowRenderer, markRenderer, markDotRenderer, markLabelRenderer) {
31
+ this.#value = new Bindable(getValue());
32
+ this.#value.bind(getValue, setValue);
33
+ this.#min = min;
34
+ this.#max = max;
35
+ this.#step = step;
36
+ this.#marks = marks;
37
+ this.#disabled = disabled;
38
+ this.#label = label;
39
+ this.#labelAlwaysOn = labelAlwaysOn;
40
+ this.#inverted = inverted;
41
+ this.#restrictToMarks = restrictToMarks;
42
+ this.#color = color;
43
+ this.#size = size;
44
+ this.#radius = radius;
45
+ this.onChange = onChange;
46
+ this.onChangeEnd = onChangeEnd;
47
+ this.handleRenderer = handleRenderer;
48
+ this.handleLabelRenderer = handleLabelRenderer;
49
+ this.handleLabelArrowRenderer = handleLabelArrowRenderer;
50
+ this.markRenderer = markRenderer;
51
+ this.markDotRenderer = markDotRenderer;
52
+ this.markLabelRenderer = markLabelRenderer;
53
+ }
54
+ get value() {
55
+ return this.#value.value;
56
+ }
57
+ set value(value) {
58
+ this.#value.value = this.clamp(value, this.min, this.max);
59
+ this.onChange?.(this.value);
60
+ }
61
+ get min() {
62
+ return this.#min();
63
+ }
64
+ get max() {
65
+ return this.#max();
66
+ }
67
+ get step() {
68
+ return this.#step();
69
+ }
70
+ get marks() {
71
+ return this.#marks();
72
+ }
73
+ get disabled() {
74
+ return this.#disabled();
75
+ }
76
+ get label() {
77
+ return this.#label(this.value);
78
+ }
79
+ get labelAlwaysOn() {
80
+ return this.#labelAlwaysOn();
81
+ }
82
+ get inverted() {
83
+ return this.#inverted();
84
+ }
85
+ get restrictToMarks() {
86
+ return this.#restrictToMarks();
87
+ }
88
+ get color() {
89
+ return this.#color();
90
+ }
91
+ get size() {
92
+ return this.#size();
93
+ }
94
+ get radius() {
95
+ return this.#radius();
96
+ }
97
+ get position() {
98
+ return this.getPositionFromValue(this.value);
99
+ }
100
+ clamp = (val, minVal, maxVal) => {
101
+ return Math.min(Math.max(val, minVal), maxVal);
102
+ };
103
+ getValueFromPosition = (position) => {
104
+ const rect = this.sliderEl.getBoundingClientRect();
105
+ const percentage = this.clamp((position - rect.left) / rect.width, 0, 1);
106
+ const range = this.max - this.min;
107
+ let newValue = this.min + (this.inverted ? 1 - percentage : percentage) * range;
108
+ if (this.restrictToMarks && this.marks.length > 0) {
109
+ // Find closest mark
110
+ const closest = this.marks.reduce((prev, curr) => Math.abs(curr.value - newValue) < Math.abs(prev.value - newValue)
111
+ ? curr
112
+ : prev);
113
+ newValue = closest.value;
114
+ }
115
+ else {
116
+ // Round to step
117
+ newValue = Math.round(newValue / this.step) * this.step;
118
+ }
119
+ return this.clamp(newValue, this.min, this.max);
120
+ };
121
+ getPositionFromValue = (val) => {
122
+ const percentage = (val - this.min) / (this.max - this.min);
123
+ return this.inverted ? (1 - percentage) * 100 : percentage * 100;
124
+ };
125
+ pointerDown = (event) => {
126
+ if (this.disabled)
127
+ return;
128
+ this.isDragging = true;
129
+ this.sliderEl.setPointerCapture(event.pointerId);
130
+ this.value = this.getValueFromPosition(event.clientX);
131
+ event.preventDefault();
132
+ event.stopImmediatePropagation();
133
+ };
134
+ pointerMove = (event) => {
135
+ if (this.disabled || !this.isDragging)
136
+ return;
137
+ this.value = this.getValueFromPosition(event.clientX);
138
+ event.preventDefault();
139
+ event.stopImmediatePropagation();
140
+ };
141
+ pointerUp = (event) => {
142
+ if (this.disabled || !this.isDragging)
143
+ return;
144
+ this.isDragging = false;
145
+ this.sliderEl.releasePointerCapture(event.pointerId);
146
+ this.onChangeEnd?.(this.value);
147
+ event.preventDefault();
148
+ event.stopImmediatePropagation();
149
+ };
150
+ keyDown = (event) => {
151
+ if (this.disabled)
152
+ return;
153
+ if (Shortcut.ARROW_UP.matches(event) ||
154
+ Shortcut.ARROW_RIGHT.matches(event)) {
155
+ this.value = this.value + this.step;
156
+ event.preventDefault();
157
+ event.stopImmediatePropagation();
158
+ }
159
+ else if (Shortcut.ARROW_DOWN.matches(event) ||
160
+ Shortcut.ARROW_LEFT.matches(event)) {
161
+ this.value = this.value - this.step;
162
+ event.preventDefault();
163
+ event.stopImmediatePropagation();
164
+ }
165
+ else if (Shortcut.HOME.matches(event)) {
166
+ this.value = this.min;
167
+ event.preventDefault();
168
+ event.stopImmediatePropagation();
169
+ }
170
+ else if (Shortcut.END.matches(event)) {
171
+ this.value = this.max;
172
+ event.preventDefault();
173
+ event.stopImmediatePropagation();
174
+ }
175
+ this.onChangeEnd?.(this.value);
176
+ };
177
+ focus = () => {
178
+ this.isFocused = true;
179
+ };
180
+ blur = () => {
181
+ this.isFocused = false;
182
+ };
183
+ }
184
+ export function setSliderContext(state) {
185
+ return setContext(SliderContext, state);
186
+ }
187
+ export function getSliderContext() {
188
+ const ctx = getContext(SliderContext);
189
+ if (!ctx)
190
+ throw new Error("SliderContext is undefined");
191
+ return ctx;
192
+ }
@@ -0,0 +1,18 @@
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
+
6
+ export type SliderHandleLabelArrowProps = {} & ClassName &
7
+ HTMLAttributes<HTMLDivElement>;
8
+ let { class: className, ...restProps }: SliderHandleLabelArrowProps =
9
+ $props();
10
+ </script>
11
+
12
+ <div
13
+ class={twMerge(
14
+ "absolute top-full left-1/2 h-0 w-0 -translate-x-1/2 border-t-4 border-r-4 border-l-4 border-transparent border-t-m3-outline-variant",
15
+ className,
16
+ )}
17
+ {...restProps}
18
+ ></div>
@@ -0,0 +1,6 @@
1
+ import type { ClassName } from "../utils.js";
2
+ import type { HTMLAttributes } from "svelte/elements";
3
+ export type SliderHandleLabelArrowProps = {} & ClassName & HTMLAttributes<HTMLDivElement>;
4
+ declare const SliderHandleLabelArrow: import("svelte").Component<SliderHandleLabelArrowProps, {}, "">;
5
+ type SliderHandleLabelArrow = ReturnType<typeof SliderHandleLabelArrow>;
6
+ export default SliderHandleLabelArrow;
@@ -0,0 +1,31 @@
1
+ <script lang="ts">
2
+ import { getSliderContext } from "./index.js";
3
+ import type { ClassName } from "../utils.js";
4
+ import type { HTMLAttributes } from "svelte/elements";
5
+ import { twMerge } from "tailwind-merge";
6
+
7
+ export type SliderHandleLabelProps = {} & ClassName &
8
+ HTMLAttributes<HTMLDivElement>;
9
+ let { class: className, ...restProps }: SliderHandleLabelProps = $props();
10
+
11
+ const ctx = getSliderContext();
12
+
13
+ const showLabel = $derived(
14
+ !ctx.disabled &&
15
+ (ctx.labelAlwaysOn || ctx.isHovered || ctx.isDragging || ctx.isFocused),
16
+ );
17
+ </script>
18
+
19
+ {#if showLabel}
20
+ <div
21
+ role="tooltip"
22
+ class={twMerge(
23
+ "pointer-events-none absolute bottom-full left-1/2 mb-1 -translate-x-1/2 rounded-md border border-m3-outline-variant bg-m3-surface-container px-2 py-1 text-xs whitespace-nowrap text-m3-on-surface shadow-sm transition-opacity duration-200",
24
+ className,
25
+ )}
26
+ {...restProps}
27
+ >
28
+ {ctx.label}
29
+ {@render ctx.handleLabelArrowRenderer({})}
30
+ </div>
31
+ {/if}
@@ -0,0 +1,6 @@
1
+ import type { ClassName } from "../utils.js";
2
+ import type { HTMLAttributes } from "svelte/elements";
3
+ export type SliderHandleLabelProps = {} & ClassName & HTMLAttributes<HTMLDivElement>;
4
+ declare const SliderHandleLabel: import("svelte").Component<SliderHandleLabelProps, {}, "">;
5
+ type SliderHandleLabel = ReturnType<typeof SliderHandleLabel>;
6
+ export default SliderHandleLabel;
@@ -0,0 +1,51 @@
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 transition-all",
22
+
23
+ !ctx.disabled && "hover:scale-110 focus:scale-110 active:scale-110",
24
+
25
+ ctx.color === "primary" && "bg-m3-primary",
26
+ ctx.color === "secondary" && "bg-m3-secondary",
27
+ ctx.color === "tertiary" && "bg-m3-tertiary",
28
+ ctx.color === "error" && "bg-m3-error",
29
+
30
+ ctx.size === "xs" && "size-3",
31
+ ctx.size === "sm" && "size-4",
32
+ ctx.size === "md" && "size-5",
33
+ ctx.size === "lg" && "size-6",
34
+ ctx.size === "xl" && "size-7",
35
+
36
+ ctx.radius === "xs" && "rounded-xs",
37
+ ctx.radius === "sm" && "rounded-sm",
38
+ ctx.radius === "md" && "rounded-lg",
39
+ ctx.radius === "lg" && "rounded-2xl",
40
+ ctx.radius === "xl" && "rounded-full",
41
+
42
+ className,
43
+ )}
44
+ {...mergeProps(restProps, {
45
+ onpointerenter: () => (ctx.isHovered = true),
46
+ onpointerleave: () => (ctx.isHovered = false),
47
+ })}
48
+ ></div>
49
+
50
+ {@render ctx.handleLabelRenderer({})}
51
+ </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;