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.
- package/dist/alert/alert.svelte +174 -19
- package/dist/alert/alert.svelte.d.ts +26 -3
- package/dist/alert/index.d.ts +1 -1
- package/dist/alert/index.js +1 -1
- package/dist/autocomplete/autocomplete-content.svelte +2 -2
- package/dist/autocomplete/autocomplete-content.svelte.d.ts +2 -2
- package/dist/autocomplete/autocomplete-item.svelte +3 -3
- package/dist/autocomplete/autocomplete-item.svelte.d.ts +3 -3
- package/dist/autocomplete/autocomplete.svelte +2 -2
- package/dist/autocomplete/autocomplete.svelte.d.ts +2 -2
- package/dist/base.d.ts +3 -3
- package/dist/base.js +3 -2
- package/dist/box/box.svelte +2 -2
- package/dist/box/box.svelte.d.ts +2 -2
- package/dist/breadcrumbs/breadcrumbs.svelte +1 -1
- package/dist/breadcrumbs/breadcrumbs.svelte.d.ts +1 -1
- package/dist/button/button.svelte +3 -3
- package/dist/button/button.svelte.d.ts +3 -3
- package/dist/chip/chip.svelte +1 -1
- package/dist/chip/chip.svelte.d.ts +1 -1
- package/dist/command/action.svelte.d.ts +1 -1
- package/dist/command/action.svelte.js +0 -1
- package/dist/command/command-content.svelte +2 -2
- package/dist/command/command-content.svelte.d.ts +2 -2
- package/dist/command/command-input.svelte +2 -2
- package/dist/command/command-input.svelte.d.ts +2 -2
- package/dist/command/command-item.svelte +3 -3
- package/dist/command/command-item.svelte.d.ts +3 -3
- package/dist/command/command.svelte +2 -2
- package/dist/command/command.svelte.d.ts +2 -2
- package/dist/common/divider.svelte +2 -2
- package/dist/common/divider.svelte.d.ts +2 -2
- package/dist/common/header.svelte +3 -3
- package/dist/common/header.svelte.d.ts +3 -3
- package/dist/dialog/dialog-button.svelte +1 -1
- package/dist/dialog/dialog-button.svelte.d.ts +1 -1
- package/dist/dialog/dialog.svelte +2 -2
- package/dist/dialog/dialog.svelte.d.ts +2 -2
- package/dist/dialog/dialoguer-context.svelte.d.ts +3 -3
- package/dist/dialog/dialoguer-context.svelte.js +0 -3
- package/dist/dialog/dialoguer.svelte +1 -1
- package/dist/dialog/dialoguer.svelte.d.ts +1 -1
- package/dist/fab/fab.svelte +1 -1
- package/dist/fab/fab.svelte.d.ts +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.js +1 -0
- package/dist/input/input.svelte +1 -1
- package/dist/input/input.svelte.d.ts +4 -4
- package/dist/link/link.svelte +1 -1
- package/dist/link/link.svelte.d.ts +1 -1
- package/dist/markdown/markdown-blockquote.svelte +3 -3
- package/dist/markdown/markdown-blockquote.svelte.d.ts +3 -3
- package/dist/markdown/markdown-br.svelte +3 -3
- package/dist/markdown/markdown-br.svelte.d.ts +3 -3
- package/dist/markdown/markdown-code.svelte +3 -3
- package/dist/markdown/markdown-code.svelte.d.ts +3 -3
- package/dist/markdown/markdown-codespan.svelte +3 -3
- package/dist/markdown/markdown-codespan.svelte.d.ts +3 -3
- package/dist/markdown/markdown-context.svelte.d.ts +1 -1
- package/dist/markdown/markdown-context.svelte.js +0 -1
- package/dist/markdown/markdown-def.svelte +3 -3
- package/dist/markdown/markdown-def.svelte.d.ts +3 -3
- package/dist/markdown/markdown-del.svelte +3 -3
- package/dist/markdown/markdown-del.svelte.d.ts +3 -3
- package/dist/markdown/markdown-em.svelte +3 -3
- package/dist/markdown/markdown-em.svelte.d.ts +3 -3
- package/dist/markdown/markdown-escape.svelte +2 -2
- package/dist/markdown/markdown-escape.svelte.d.ts +2 -2
- package/dist/markdown/markdown-heading.svelte +3 -3
- package/dist/markdown/markdown-heading.svelte.d.ts +3 -3
- package/dist/markdown/markdown-hr.svelte +3 -3
- package/dist/markdown/markdown-hr.svelte.d.ts +3 -3
- package/dist/markdown/markdown-html.svelte +2 -2
- package/dist/markdown/markdown-html.svelte.d.ts +2 -2
- package/dist/markdown/markdown-image.svelte +3 -3
- package/dist/markdown/markdown-image.svelte.d.ts +3 -3
- package/dist/markdown/markdown-link.svelte +3 -3
- package/dist/markdown/markdown-link.svelte.d.ts +3 -3
- package/dist/markdown/markdown-list-item.svelte +3 -3
- package/dist/markdown/markdown-list-item.svelte.d.ts +3 -3
- package/dist/markdown/markdown-list.svelte +3 -3
- package/dist/markdown/markdown-list.svelte.d.ts +3 -3
- package/dist/markdown/markdown-paragraph.svelte +3 -3
- package/dist/markdown/markdown-paragraph.svelte.d.ts +3 -3
- package/dist/markdown/markdown-space.svelte +2 -2
- package/dist/markdown/markdown-space.svelte.d.ts +2 -2
- package/dist/markdown/markdown-strong.svelte +3 -3
- package/dist/markdown/markdown-strong.svelte.d.ts +3 -3
- package/dist/markdown/markdown-table-cell.svelte +3 -6
- package/dist/markdown/markdown-table-cell.svelte.d.ts +3 -3
- package/dist/markdown/markdown-table.svelte +2 -2
- package/dist/markdown/markdown-table.svelte.d.ts +2 -2
- package/dist/markdown/markdown-text.svelte +2 -2
- package/dist/markdown/markdown-text.svelte.d.ts +2 -2
- package/dist/markdown/markdown-token.svelte +1 -1
- package/dist/markdown/markdown-token.svelte.d.ts +1 -1
- package/dist/markdown/markdown-tokens.svelte +1 -1
- package/dist/markdown/markdown-tokens.svelte.d.ts +1 -1
- package/dist/markdown/markdown.svelte +1 -1
- package/dist/markdown/markdown.svelte.d.ts +1 -1
- package/dist/menu/menu-actions.svelte +1 -1
- package/dist/menu/menu-actions.svelte.d.ts +1 -1
- package/dist/menu/menu-content.svelte +2 -2
- package/dist/menu/menu-content.svelte.d.ts +2 -2
- package/dist/menu/menu-item.svelte +3 -3
- package/dist/menu/menu-item.svelte.d.ts +3 -3
- package/dist/menu/menu-trigger.svelte +4 -4
- package/dist/menu/menu-trigger.svelte.d.ts +4 -4
- package/dist/menu/menu.svelte +2 -2
- package/dist/menu/menu.svelte.d.ts +2 -2
- package/dist/modal/modal.svelte +3 -3
- package/dist/modal/modal.svelte.d.ts +3 -3
- package/dist/popover/popover.svelte +2 -2
- package/dist/popover/popover.svelte.d.ts +2 -2
- package/dist/portal/proxy.svelte +1 -1
- package/dist/portal/proxy.svelte.d.ts +1 -1
- package/dist/progress/circular-progress.svelte +1 -1
- package/dist/progress/circular-progress.svelte.d.ts +1 -1
- package/dist/shortcut/shortcut-badge.svelte +2 -2
- package/dist/shortcut/shortcut-badge.svelte.d.ts +2 -2
- package/dist/shortcut/shortcut.d.ts +2 -0
- package/dist/shortcut/shortcut.js +2 -0
- package/dist/skeleton/skeleton.svelte +1 -1
- package/dist/skeleton/skeleton.svelte.d.ts +1 -1
- package/dist/slider/index.d.ts +8 -0
- package/dist/slider/index.js +8 -0
- package/dist/slider/slider-context.svelte.d.ts +50 -0
- package/dist/slider/slider-context.svelte.js +198 -0
- package/dist/slider/slider-handle-label-arrow.svelte +18 -0
- package/dist/slider/slider-handle-label-arrow.svelte.d.ts +6 -0
- package/dist/slider/slider-handle-label.svelte +35 -0
- package/dist/slider/slider-handle-label.svelte.d.ts +6 -0
- package/dist/slider/slider-handle.svelte +54 -0
- package/dist/slider/slider-handle.svelte.d.ts +6 -0
- package/dist/slider/slider-mark-dot.svelte +25 -0
- package/dist/slider/slider-mark-dot.svelte.d.ts +6 -0
- package/dist/slider/slider-mark-label.svelte +37 -0
- package/dist/slider/slider-mark-label.svelte.d.ts +9 -0
- package/dist/slider/slider-mark.svelte +33 -0
- package/dist/slider/slider-mark.svelte.d.ts +9 -0
- package/dist/slider/slider.svelte +249 -0
- package/dist/slider/slider.svelte.d.ts +41 -0
- package/dist/switch/switch-thumb.svelte +2 -2
- package/dist/switch/switch-thumb.svelte.d.ts +2 -2
- package/dist/switch/switch.svelte +3 -3
- package/dist/switch/switch.svelte.d.ts +6 -6
- package/dist/textarea/textarea.svelte +2 -2
- package/dist/textarea/textarea.svelte.d.ts +5 -5
- package/dist/toggle/toggle-button.svelte +3 -3
- package/dist/toggle/toggle-button.svelte.d.ts +3 -3
- package/dist/toggle/toggle-group.svelte +2 -2
- package/dist/toggle/toggle-group.svelte.d.ts +2 -2
- package/dist/tooltip/tooltip.svelte +6 -5
- package/dist/tooltip/tooltip.svelte.d.ts +2 -2
- package/dist/utils.d.ts +1 -1
- package/dist/utils.js +0 -1
- package/package.json +5 -5
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { type MarkdownComponentProps } from "./index.js";
|
|
2
2
|
import { type MarkedOptions, type Tokens } from "marked";
|
|
3
|
-
import {
|
|
3
|
+
import type { Snippet } from "svelte";
|
|
4
4
|
export type MarkdownProps = {
|
|
5
5
|
value: string;
|
|
6
6
|
options?: MarkedOptions;
|
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
import { getMenuContext } from "./index.js";
|
|
4
4
|
import { mergeComponentProps } from "../merge-props.js";
|
|
5
5
|
import { Popover, type PopoverProps } from "../popover/index.js";
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
6
|
+
import type { ClassName } from "../utils.js";
|
|
7
|
+
import type { Snippet } from "svelte";
|
|
8
8
|
import { twMerge } from "tailwind-merge";
|
|
9
9
|
|
|
10
10
|
export type MenuContentProps = {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { type Variants } from "../base.js";
|
|
2
2
|
import { type PopoverProps } from "../popover/index.js";
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
3
|
+
import type { ClassName } from "../utils.js";
|
|
4
|
+
import type { Snippet } from "svelte";
|
|
5
5
|
export type MenuContentProps = {
|
|
6
6
|
children: Snippet;
|
|
7
7
|
} & ClassName & Variants & Omit<PopoverProps, "children" | "open">;
|
|
@@ -3,9 +3,9 @@
|
|
|
3
3
|
import { getMenuContext } from "./index.js";
|
|
4
4
|
import { mergeProps } from "../merge-props.js";
|
|
5
5
|
import { Shortcut } from "../shortcut/index.js";
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
6
|
+
import type { ClassName, ElementRef } from "../utils.js";
|
|
7
|
+
import type { Snippet } from "svelte";
|
|
8
|
+
import type { HTMLButtonAttributes } from "svelte/elements";
|
|
9
9
|
import { twMerge } from "tailwind-merge";
|
|
10
10
|
|
|
11
11
|
export type MenuItemProps = {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { type Variants } from "../base.js";
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
2
|
+
import type { ClassName, ElementRef } from "../utils.js";
|
|
3
|
+
import type { Snippet } from "svelte";
|
|
4
|
+
import type { HTMLButtonAttributes } from "svelte/elements";
|
|
5
5
|
export type MenuItemProps = {
|
|
6
6
|
onSelect?: (el: HTMLElement) => void;
|
|
7
7
|
children: Snippet<[]>;
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
<script lang="ts" module>
|
|
2
|
-
import {
|
|
2
|
+
import type { Variants } from "../base.js";
|
|
3
3
|
import { getMenuContext } from "./index.js";
|
|
4
4
|
import { mergeProps } from "../merge-props.js";
|
|
5
5
|
import { Shortcut } from "../shortcut/index.js";
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
6
|
+
import type { ClassName } from "../utils.js";
|
|
7
|
+
import type { Snippet } from "svelte";
|
|
8
|
+
import type { HTMLButtonAttributes } from "svelte/elements";
|
|
9
9
|
import { twMerge } from "tailwind-merge";
|
|
10
10
|
|
|
11
11
|
export type MenuTriggerProps = {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
1
|
+
import type { Variants } from "../base.js";
|
|
2
|
+
import type { ClassName } from "../utils.js";
|
|
3
|
+
import type { Snippet } from "svelte";
|
|
4
|
+
import type { HTMLButtonAttributes } from "svelte/elements";
|
|
5
5
|
export type MenuTriggerProps = {
|
|
6
6
|
children?: Snippet;
|
|
7
7
|
} & ClassName & Variants & HTMLButtonAttributes;
|
package/dist/menu/menu.svelte
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
<script module lang="ts">
|
|
2
2
|
import { MenuContext, setMenuContext } from "./index.js";
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
3
|
+
import type { ElementRef } from "../utils.js";
|
|
4
|
+
import type { Snippet } from "svelte";
|
|
5
5
|
|
|
6
6
|
export type MenuProps = {
|
|
7
7
|
open?: boolean;
|
package/dist/modal/modal.svelte
CHANGED
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
import { events } from "../index.js";
|
|
3
3
|
import { mergeProps } from "../merge-props.js";
|
|
4
4
|
import { Shortcut } from "../shortcut/index.js";
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
5
|
+
import type { ClassName } from "../utils.js";
|
|
6
|
+
import type { Snippet } from "svelte";
|
|
7
|
+
import type { HTMLDialogAttributes } from "svelte/elements";
|
|
8
8
|
import { scale } from "svelte/transition";
|
|
9
9
|
import { twMerge } from "tailwind-merge";
|
|
10
10
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
1
|
+
import type { ClassName } from "../utils.js";
|
|
2
|
+
import type { Snippet } from "svelte";
|
|
3
|
+
import type { HTMLDialogAttributes } from "svelte/elements";
|
|
4
4
|
export type ModalProps = {
|
|
5
5
|
ref?: HTMLDialogElement;
|
|
6
6
|
onCancel?: () => void;
|
|
@@ -9,8 +9,8 @@
|
|
|
9
9
|
type ToggleEventWithTarget,
|
|
10
10
|
} from "../utils.js";
|
|
11
11
|
import * as floatingUi from "@floating-ui/dom";
|
|
12
|
-
import {
|
|
13
|
-
import {
|
|
12
|
+
import type { Snippet } from "svelte";
|
|
13
|
+
import type { HTMLAttributes } from "svelte/elements";
|
|
14
14
|
import { scale } from "svelte/transition";
|
|
15
15
|
import { twMerge, type ClassNameValue } from "tailwind-merge";
|
|
16
16
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { type ClassName, type ElementRef } from "../utils.js";
|
|
2
2
|
import * as floatingUi from "@floating-ui/dom";
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
3
|
+
import type { Snippet } from "svelte";
|
|
4
|
+
import type { HTMLAttributes } from "svelte/elements";
|
|
5
5
|
import { type ClassNameValue } from "tailwind-merge";
|
|
6
6
|
export type PopoverProps = {
|
|
7
7
|
arrow?: boolean;
|
package/dist/portal/proxy.svelte
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
<script module lang="ts">
|
|
2
2
|
import { Box } from "../box/index.js";
|
|
3
|
-
import {
|
|
3
|
+
import type { Shortcut } from "./index.js";
|
|
4
4
|
import { noop, type ClassName, type ElementRef } from "../utils.js";
|
|
5
|
-
import {
|
|
5
|
+
import type { HTMLInputAttributes } from "svelte/elements";
|
|
6
6
|
import { twMerge, type ClassNameValue } from "tailwind-merge";
|
|
7
7
|
|
|
8
8
|
export type ShortcutBadgeProps = {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import type { Shortcut } from "./index.js";
|
|
2
2
|
import { type ClassName, type ElementRef } from "../utils.js";
|
|
3
|
-
import {
|
|
3
|
+
import type { HTMLInputAttributes } from "svelte/elements";
|
|
4
4
|
import { type ClassNameValue } from "tailwind-merge";
|
|
5
5
|
export type ShortcutBadgeProps = {
|
|
6
6
|
shortcut: Shortcut;
|
|
@@ -19,6 +19,8 @@ export declare class Shortcut {
|
|
|
19
19
|
static fromEvent(event: KeyboardEvent): Shortcut;
|
|
20
20
|
static ARROW_UP: Shortcut;
|
|
21
21
|
static ARROW_DOWN: Shortcut;
|
|
22
|
+
static ARROW_LEFT: Shortcut;
|
|
23
|
+
static ARROW_RIGHT: Shortcut;
|
|
22
24
|
static END: Shortcut;
|
|
23
25
|
static ENTER: Shortcut;
|
|
24
26
|
static ESCAPE: Shortcut;
|
|
@@ -85,6 +85,8 @@ export class Shortcut {
|
|
|
85
85
|
}
|
|
86
86
|
static ARROW_UP = new Shortcut({ key: "ArrowUp" });
|
|
87
87
|
static ARROW_DOWN = new Shortcut({ key: "ArrowDown" });
|
|
88
|
+
static ARROW_LEFT = new Shortcut({ key: "ArrowLeft" });
|
|
89
|
+
static ARROW_RIGHT = new Shortcut({ key: "ArrowRight" });
|
|
88
90
|
static END = new Shortcut({ key: "End" });
|
|
89
91
|
static ENTER = new Shortcut({ key: "Enter" });
|
|
90
92
|
static ESCAPE = new Shortcut({ key: "Escape" });
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export { getSliderContext, setSliderContext, SliderContext, } from "./slider-context.svelte.js";
|
|
2
|
+
export { default as SliderHandleLabelArrow, type SliderHandleLabelArrowProps, } from "./slider-handle-label-arrow.svelte";
|
|
3
|
+
export { default as SliderHandleLabel, type SliderHandleLabelProps, } from "./slider-handle-label.svelte";
|
|
4
|
+
export { default as SliderHandle, type SliderHandleProps, } from "./slider-handle.svelte";
|
|
5
|
+
export { default as SliderMarkDot, type SliderMarkDotProps, } from "./slider-mark-dot.svelte";
|
|
6
|
+
export { default as SliderMarkLabel, type SliderMarkLabelProps, } from "./slider-mark-label.svelte";
|
|
7
|
+
export { default as SliderMark, type SliderMarkProps, } from "./slider-mark.svelte";
|
|
8
|
+
export { default as Slider, SLIDER_COLORS, SLIDER_RADII, SLIDER_SIZES, type Mark, type SliderColor, type SliderColorProp, type SliderProps, type SliderRadius, type SliderRadiusProp, type SliderSize, type SliderSizeProp, } from "./slider.svelte";
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export { getSliderContext, setSliderContext, SliderContext, } from "./slider-context.svelte.js";
|
|
2
|
+
export { default as SliderHandleLabelArrow, } from "./slider-handle-label-arrow.svelte";
|
|
3
|
+
export { default as SliderHandleLabel, } from "./slider-handle-label.svelte";
|
|
4
|
+
export { default as SliderHandle, } from "./slider-handle.svelte";
|
|
5
|
+
export { default as SliderMarkDot, } from "./slider-mark-dot.svelte";
|
|
6
|
+
export { default as SliderMarkLabel, } from "./slider-mark-label.svelte";
|
|
7
|
+
export { default as SliderMark, } from "./slider-mark.svelte";
|
|
8
|
+
export { default as Slider, SLIDER_COLORS, SLIDER_RADII, SLIDER_SIZES, } from "./slider.svelte";
|
|
@@ -0,0 +1,50 @@
|
|
|
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
|
+
hovered: boolean;
|
|
19
|
+
clicked: boolean;
|
|
20
|
+
dragging: boolean;
|
|
21
|
+
focused: boolean;
|
|
22
|
+
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]>);
|
|
23
|
+
get value(): number;
|
|
24
|
+
set value(value: number);
|
|
25
|
+
get min(): number;
|
|
26
|
+
get max(): number;
|
|
27
|
+
get step(): number;
|
|
28
|
+
get marks(): Mark[];
|
|
29
|
+
get disabled(): boolean;
|
|
30
|
+
get label(): string;
|
|
31
|
+
get labelAlwaysOn(): boolean;
|
|
32
|
+
get inverted(): boolean;
|
|
33
|
+
get restrictToMarks(): boolean;
|
|
34
|
+
get color(): SliderColor;
|
|
35
|
+
get size(): SliderSize;
|
|
36
|
+
get radius(): SliderRadius;
|
|
37
|
+
get position(): number;
|
|
38
|
+
get animated(): boolean;
|
|
39
|
+
clamp: (val: number, minVal: number, maxVal: number) => number;
|
|
40
|
+
getValueFromPosition: (position: number) => number;
|
|
41
|
+
getPositionFromValue: (val: number) => number;
|
|
42
|
+
pointerDown: (event: PointerEvent) => void;
|
|
43
|
+
pointerMove: (event: PointerEvent) => void;
|
|
44
|
+
pointerUp: (event: PointerEvent) => void;
|
|
45
|
+
keyDown: (event: KeyboardEvent) => void;
|
|
46
|
+
focus: () => void;
|
|
47
|
+
blur: () => void;
|
|
48
|
+
}
|
|
49
|
+
export declare function setSliderContext(state: SliderContext): SliderContext;
|
|
50
|
+
export declare function getSliderContext(): SliderContext;
|
|
@@ -0,0 +1,198 @@
|
|
|
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
|
+
hovered = $state(false);
|
|
28
|
+
clicked = $state(false);
|
|
29
|
+
dragging = $state(false);
|
|
30
|
+
focused = $state(false);
|
|
31
|
+
constructor(getValue, setValue, min, max, step, marks, disabled, label, labelAlwaysOn, inverted, restrictToMarks, color, size, radius, onChange, onChangeEnd, handleRenderer, handleLabelRenderer, handleLabelArrowRenderer, markRenderer, markDotRenderer, markLabelRenderer) {
|
|
32
|
+
this.#value = new Bindable(getValue());
|
|
33
|
+
this.#value.bind(getValue, setValue);
|
|
34
|
+
this.#min = min;
|
|
35
|
+
this.#max = max;
|
|
36
|
+
this.#step = step;
|
|
37
|
+
this.#marks = marks;
|
|
38
|
+
this.#disabled = disabled;
|
|
39
|
+
this.#label = label;
|
|
40
|
+
this.#labelAlwaysOn = labelAlwaysOn;
|
|
41
|
+
this.#inverted = inverted;
|
|
42
|
+
this.#restrictToMarks = restrictToMarks;
|
|
43
|
+
this.#color = color;
|
|
44
|
+
this.#size = size;
|
|
45
|
+
this.#radius = radius;
|
|
46
|
+
this.onChange = onChange;
|
|
47
|
+
this.onChangeEnd = onChangeEnd;
|
|
48
|
+
this.handleRenderer = handleRenderer;
|
|
49
|
+
this.handleLabelRenderer = handleLabelRenderer;
|
|
50
|
+
this.handleLabelArrowRenderer = handleLabelArrowRenderer;
|
|
51
|
+
this.markRenderer = markRenderer;
|
|
52
|
+
this.markDotRenderer = markDotRenderer;
|
|
53
|
+
this.markLabelRenderer = markLabelRenderer;
|
|
54
|
+
}
|
|
55
|
+
get value() {
|
|
56
|
+
return this.#value.value;
|
|
57
|
+
}
|
|
58
|
+
set value(value) {
|
|
59
|
+
this.#value.value = this.clamp(value, this.min, this.max);
|
|
60
|
+
this.onChange?.(this.value);
|
|
61
|
+
}
|
|
62
|
+
get min() {
|
|
63
|
+
return this.#min();
|
|
64
|
+
}
|
|
65
|
+
get max() {
|
|
66
|
+
return this.#max();
|
|
67
|
+
}
|
|
68
|
+
get step() {
|
|
69
|
+
return this.#step();
|
|
70
|
+
}
|
|
71
|
+
get marks() {
|
|
72
|
+
return this.#marks();
|
|
73
|
+
}
|
|
74
|
+
get disabled() {
|
|
75
|
+
return this.#disabled();
|
|
76
|
+
}
|
|
77
|
+
get label() {
|
|
78
|
+
return this.#label(this.value);
|
|
79
|
+
}
|
|
80
|
+
get labelAlwaysOn() {
|
|
81
|
+
return this.#labelAlwaysOn();
|
|
82
|
+
}
|
|
83
|
+
get inverted() {
|
|
84
|
+
return this.#inverted();
|
|
85
|
+
}
|
|
86
|
+
get restrictToMarks() {
|
|
87
|
+
return this.#restrictToMarks();
|
|
88
|
+
}
|
|
89
|
+
get color() {
|
|
90
|
+
return this.#color();
|
|
91
|
+
}
|
|
92
|
+
get size() {
|
|
93
|
+
return this.#size();
|
|
94
|
+
}
|
|
95
|
+
get radius() {
|
|
96
|
+
return this.#radius();
|
|
97
|
+
}
|
|
98
|
+
get position() {
|
|
99
|
+
return this.getPositionFromValue(this.value);
|
|
100
|
+
}
|
|
101
|
+
get animated() {
|
|
102
|
+
return !this.dragging || this.restrictToMarks;
|
|
103
|
+
}
|
|
104
|
+
clamp = (val, minVal, maxVal) => {
|
|
105
|
+
return Math.min(Math.max(val, minVal), maxVal);
|
|
106
|
+
};
|
|
107
|
+
getValueFromPosition = (position) => {
|
|
108
|
+
const rect = this.sliderEl.getBoundingClientRect();
|
|
109
|
+
const percentage = this.clamp((position - rect.left) / rect.width, 0, 1);
|
|
110
|
+
const range = this.max - this.min;
|
|
111
|
+
let newValue = this.min + (this.inverted ? 1 - percentage : percentage) * range;
|
|
112
|
+
if (this.restrictToMarks && this.marks.length > 0) {
|
|
113
|
+
// Find closest mark
|
|
114
|
+
const closest = this.marks.reduce((prev, curr) => Math.abs(curr.value - newValue) < Math.abs(prev.value - newValue)
|
|
115
|
+
? curr
|
|
116
|
+
: prev);
|
|
117
|
+
newValue = closest.value;
|
|
118
|
+
}
|
|
119
|
+
else {
|
|
120
|
+
// Round to step
|
|
121
|
+
newValue = Math.round(newValue / this.step) * this.step;
|
|
122
|
+
}
|
|
123
|
+
return this.clamp(newValue, this.min, this.max);
|
|
124
|
+
};
|
|
125
|
+
getPositionFromValue = (val) => {
|
|
126
|
+
const percentage = (val - this.min) / (this.max - this.min);
|
|
127
|
+
return this.inverted ? (1 - percentage) * 100 : percentage * 100;
|
|
128
|
+
};
|
|
129
|
+
pointerDown = (event) => {
|
|
130
|
+
if (this.disabled)
|
|
131
|
+
return;
|
|
132
|
+
this.clicked = true;
|
|
133
|
+
this.sliderEl.setPointerCapture(event.pointerId);
|
|
134
|
+
this.value = this.getValueFromPosition(event.clientX);
|
|
135
|
+
event.preventDefault();
|
|
136
|
+
event.stopImmediatePropagation();
|
|
137
|
+
};
|
|
138
|
+
pointerMove = (event) => {
|
|
139
|
+
if (this.disabled || !this.clicked)
|
|
140
|
+
return;
|
|
141
|
+
this.dragging = true;
|
|
142
|
+
this.value = this.getValueFromPosition(event.clientX);
|
|
143
|
+
event.preventDefault();
|
|
144
|
+
event.stopImmediatePropagation();
|
|
145
|
+
};
|
|
146
|
+
pointerUp = (event) => {
|
|
147
|
+
if (this.disabled || !this.clicked)
|
|
148
|
+
return;
|
|
149
|
+
this.dragging = false;
|
|
150
|
+
this.clicked = false;
|
|
151
|
+
this.sliderEl.releasePointerCapture(event.pointerId);
|
|
152
|
+
this.onChangeEnd?.(this.value);
|
|
153
|
+
event.preventDefault();
|
|
154
|
+
event.stopImmediatePropagation();
|
|
155
|
+
};
|
|
156
|
+
keyDown = (event) => {
|
|
157
|
+
if (this.disabled)
|
|
158
|
+
return;
|
|
159
|
+
if (Shortcut.ARROW_UP.matches(event) ||
|
|
160
|
+
Shortcut.ARROW_RIGHT.matches(event)) {
|
|
161
|
+
this.value = this.value + this.step;
|
|
162
|
+
event.preventDefault();
|
|
163
|
+
event.stopImmediatePropagation();
|
|
164
|
+
}
|
|
165
|
+
else if (Shortcut.ARROW_DOWN.matches(event) ||
|
|
166
|
+
Shortcut.ARROW_LEFT.matches(event)) {
|
|
167
|
+
this.value = this.value - this.step;
|
|
168
|
+
event.preventDefault();
|
|
169
|
+
event.stopImmediatePropagation();
|
|
170
|
+
}
|
|
171
|
+
else if (Shortcut.HOME.matches(event)) {
|
|
172
|
+
this.value = this.min;
|
|
173
|
+
event.preventDefault();
|
|
174
|
+
event.stopImmediatePropagation();
|
|
175
|
+
}
|
|
176
|
+
else if (Shortcut.END.matches(event)) {
|
|
177
|
+
this.value = this.max;
|
|
178
|
+
event.preventDefault();
|
|
179
|
+
event.stopImmediatePropagation();
|
|
180
|
+
}
|
|
181
|
+
this.onChangeEnd?.(this.value);
|
|
182
|
+
};
|
|
183
|
+
focus = () => {
|
|
184
|
+
this.focused = true;
|
|
185
|
+
};
|
|
186
|
+
blur = () => {
|
|
187
|
+
this.focused = false;
|
|
188
|
+
};
|
|
189
|
+
}
|
|
190
|
+
export function setSliderContext(state) {
|
|
191
|
+
return setContext(SliderContext, state);
|
|
192
|
+
}
|
|
193
|
+
export function getSliderContext() {
|
|
194
|
+
const ctx = getContext(SliderContext);
|
|
195
|
+
if (!ctx)
|
|
196
|
+
throw new Error("SliderContext is undefined");
|
|
197
|
+
return ctx;
|
|
198
|
+
}
|
|
@@ -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,35 @@
|
|
|
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 ||
|
|
16
|
+
ctx.clicked ||
|
|
17
|
+
ctx.hovered ||
|
|
18
|
+
ctx.dragging ||
|
|
19
|
+
ctx.focused),
|
|
20
|
+
);
|
|
21
|
+
</script>
|
|
22
|
+
|
|
23
|
+
{#if showLabel}
|
|
24
|
+
<div
|
|
25
|
+
role="tooltip"
|
|
26
|
+
class={twMerge(
|
|
27
|
+
"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",
|
|
28
|
+
className,
|
|
29
|
+
)}
|
|
30
|
+
{...restProps}
|
|
31
|
+
>
|
|
32
|
+
{ctx.label}
|
|
33
|
+
{@render ctx.handleLabelArrowRenderer({})}
|
|
34
|
+
</div>
|
|
35
|
+
{/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;
|