@xtyle/svelte 0.5.0
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/README.md +42 -0
- package/dist/Accordion.svelte +50 -0
- package/dist/Accordion.svelte.d.ts +22 -0
- package/dist/Alert.svelte +55 -0
- package/dist/Alert.svelte.d.ts +25 -0
- package/dist/AppShell.svelte +69 -0
- package/dist/AppShell.svelte.d.ts +27 -0
- package/dist/Avatar.svelte +53 -0
- package/dist/Avatar.svelte.d.ts +23 -0
- package/dist/AvatarGroup.svelte +31 -0
- package/dist/AvatarGroup.svelte.d.ts +18 -0
- package/dist/Badge.svelte +56 -0
- package/dist/Badge.svelte.d.ts +21 -0
- package/dist/Bar.svelte +69 -0
- package/dist/Bar.svelte.d.ts +30 -0
- package/dist/Breadcrumb.svelte +33 -0
- package/dist/Breadcrumb.svelte.d.ts +27 -0
- package/dist/Button.svelte +74 -0
- package/dist/Button.svelte.d.ts +28 -0
- package/dist/Card.svelte +26 -0
- package/dist/Card.svelte.d.ts +18 -0
- package/dist/CardLink.svelte +45 -0
- package/dist/CardLink.svelte.d.ts +18 -0
- package/dist/Carousel.svelte +39 -0
- package/dist/Carousel.svelte.d.ts +16 -0
- package/dist/Checkbox.svelte +59 -0
- package/dist/Checkbox.svelte.d.ts +21 -0
- package/dist/CheckboxGroup.svelte +47 -0
- package/dist/CheckboxGroup.svelte.d.ts +20 -0
- package/dist/Cluster.svelte +24 -0
- package/dist/Cluster.svelte.d.ts +17 -0
- package/dist/Code.svelte +29 -0
- package/dist/Code.svelte.d.ts +23 -0
- package/dist/ColorPicker.svelte +82 -0
- package/dist/ColorPicker.svelte.d.ts +26 -0
- package/dist/Dialog.svelte +60 -0
- package/dist/Dialog.svelte.d.ts +22 -0
- package/dist/Dock.svelte +57 -0
- package/dist/Dock.svelte.d.ts +23 -0
- package/dist/DockZone.svelte +74 -0
- package/dist/DockZone.svelte.d.ts +33 -0
- package/dist/Eyebrow.svelte +24 -0
- package/dist/Eyebrow.svelte.d.ts +17 -0
- package/dist/Field.svelte +92 -0
- package/dist/Field.svelte.d.ts +34 -0
- package/dist/FormGroup.svelte +43 -0
- package/dist/FormGroup.svelte.d.ts +18 -0
- package/dist/Grid.svelte +24 -0
- package/dist/Grid.svelte.d.ts +17 -0
- package/dist/Heading.svelte +20 -0
- package/dist/Heading.svelte.d.ts +14 -0
- package/dist/Heatmap.svelte +100 -0
- package/dist/Heatmap.svelte.d.ts +41 -0
- package/dist/Hero.svelte +20 -0
- package/dist/Hero.svelte.d.ts +13 -0
- package/dist/Icon.svelte +20 -0
- package/dist/Icon.svelte.d.ts +16 -0
- package/dist/Image.svelte +44 -0
- package/dist/Image.svelte.d.ts +19 -0
- package/dist/Kbd.svelte +21 -0
- package/dist/Kbd.svelte.d.ts +14 -0
- package/dist/Link.svelte +34 -0
- package/dist/Link.svelte.d.ts +18 -0
- package/dist/Menu.svelte +34 -0
- package/dist/Menu.svelte.d.ts +13 -0
- package/dist/NumberInput.svelte +76 -0
- package/dist/NumberInput.svelte.d.ts +25 -0
- package/dist/Pagination.svelte +56 -0
- package/dist/Pagination.svelte.d.ts +22 -0
- package/dist/Panel.svelte +52 -0
- package/dist/Panel.svelte.d.ts +19 -0
- package/dist/Parallax.svelte +19 -0
- package/dist/Parallax.svelte.d.ts +13 -0
- package/dist/Pie.svelte +48 -0
- package/dist/Pie.svelte.d.ts +17 -0
- package/dist/Progress.svelte +68 -0
- package/dist/Progress.svelte.d.ts +30 -0
- package/dist/Radio.svelte +72 -0
- package/dist/Radio.svelte.d.ts +24 -0
- package/dist/RadioGroup.svelte +39 -0
- package/dist/RadioGroup.svelte.d.ts +16 -0
- package/dist/Section.svelte +37 -0
- package/dist/Section.svelte.d.ts +21 -0
- package/dist/Segment.svelte +23 -0
- package/dist/Segment.svelte.d.ts +14 -0
- package/dist/Segmented.svelte +64 -0
- package/dist/Segmented.svelte.d.ts +28 -0
- package/dist/Select.svelte +57 -0
- package/dist/Select.svelte.d.ts +21 -0
- package/dist/Separator.svelte +23 -0
- package/dist/Separator.svelte.d.ts +16 -0
- package/dist/Skeleton.svelte +19 -0
- package/dist/Skeleton.svelte.d.ts +14 -0
- package/dist/Slider.svelte +82 -0
- package/dist/Slider.svelte.d.ts +24 -0
- package/dist/Sparkline.svelte +62 -0
- package/dist/Sparkline.svelte.d.ts +25 -0
- package/dist/Spinner.svelte +16 -0
- package/dist/Spinner.svelte.d.ts +12 -0
- package/dist/Splitter.svelte +85 -0
- package/dist/Splitter.svelte.d.ts +30 -0
- package/dist/Stack.svelte +23 -0
- package/dist/Stack.svelte.d.ts +16 -0
- package/dist/Stat.svelte +41 -0
- package/dist/Stat.svelte.d.ts +23 -0
- package/dist/Statusbar.svelte +50 -0
- package/dist/Statusbar.svelte.d.ts +20 -0
- package/dist/Swatch.svelte +48 -0
- package/dist/Swatch.svelte.d.ts +22 -0
- package/dist/Switch.svelte +69 -0
- package/dist/Switch.svelte.d.ts +24 -0
- package/dist/Table.svelte +39 -0
- package/dist/Table.svelte.d.ts +17 -0
- package/dist/Tabs.svelte +84 -0
- package/dist/Tabs.svelte.d.ts +28 -0
- package/dist/Text.svelte +38 -0
- package/dist/Text.svelte.d.ts +22 -0
- package/dist/Textarea.svelte +74 -0
- package/dist/Textarea.svelte.d.ts +25 -0
- package/dist/Toast.svelte +55 -0
- package/dist/Toast.svelte.d.ts +25 -0
- package/dist/Toc.svelte +22 -0
- package/dist/Toc.svelte.d.ts +15 -0
- package/dist/Toolbar.svelte +49 -0
- package/dist/Toolbar.svelte.d.ts +20 -0
- package/dist/Tooltip.svelte +28 -0
- package/dist/Tooltip.svelte.d.ts +19 -0
- package/dist/Tree.svelte +51 -0
- package/dist/Tree.svelte.d.ts +24 -0
- package/dist/elements.d.ts +65 -0
- package/dist/index.d.ts +65 -0
- package/dist/index.js +65 -0
- package/dist/register.d.ts +2 -0
- package/dist/register.js +2 -0
- package/package.json +41 -0
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import "./register.js";
|
|
2
|
+
import type { Size, FullTone as Tone } from "@xtyle/core";
|
|
3
|
+
interface Props {
|
|
4
|
+
value?: number;
|
|
5
|
+
min?: number;
|
|
6
|
+
max?: number;
|
|
7
|
+
step?: number;
|
|
8
|
+
disabled?: boolean;
|
|
9
|
+
size?: Size;
|
|
10
|
+
tone?: Tone;
|
|
11
|
+
label?: string;
|
|
12
|
+
labelledby?: string;
|
|
13
|
+
name?: string;
|
|
14
|
+
showValue?: boolean;
|
|
15
|
+
hideLabel?: boolean;
|
|
16
|
+
format?: ((value: number) => string) | null;
|
|
17
|
+
oninput?: (event: Event) => void;
|
|
18
|
+
onchange?: (event: Event) => void;
|
|
19
|
+
/** Any other attribute (`title`, `id`, `data-*`, `aria-*`, …) passes through to the element. */
|
|
20
|
+
[key: string]: unknown;
|
|
21
|
+
}
|
|
22
|
+
declare const Slider: import("svelte").Component<Props, {}, "value">;
|
|
23
|
+
type Slider = ReturnType<typeof Slider>;
|
|
24
|
+
export default Slider;
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import "./register.js";
|
|
3
|
+
import type { SparklineVariant, SparklineTone, TimeSample } from "@xtyle/core";
|
|
4
|
+
|
|
5
|
+
interface Props {
|
|
6
|
+
values?: number[];
|
|
7
|
+
/** Time-windowed mode: timestamped points (`at` is epoch ms or a date string) placed on a real
|
|
8
|
+
* time axis instead of even spacing. Pass alongside `window` or `domain`. */
|
|
9
|
+
points?: TimeSample[];
|
|
10
|
+
/** The sliding window width in ms (default 5m), ending at now; ignored when `domain` is set. */
|
|
11
|
+
window?: number;
|
|
12
|
+
/** An explicit `[start, end]` x-axis span (epoch ms or date strings), instead of a sliding window. */
|
|
13
|
+
domain?: [number | string, number | string];
|
|
14
|
+
/** Render the line as a sample-and-hold step (for on/off or discrete series). */
|
|
15
|
+
step?: boolean;
|
|
16
|
+
variant?: SparklineVariant;
|
|
17
|
+
tone?: SparklineTone;
|
|
18
|
+
showEnd?: boolean;
|
|
19
|
+
min?: number;
|
|
20
|
+
max?: number;
|
|
21
|
+
label?: string;
|
|
22
|
+
/** Any other attribute (`title`, `id`, `style`, `data-*`, `aria-*`, …) passes through. */
|
|
23
|
+
[key: string]: unknown;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
let {
|
|
27
|
+
values = [],
|
|
28
|
+
points,
|
|
29
|
+
window: windowMs,
|
|
30
|
+
domain,
|
|
31
|
+
step = false,
|
|
32
|
+
variant = "line",
|
|
33
|
+
tone = "accent",
|
|
34
|
+
showEnd = true,
|
|
35
|
+
min,
|
|
36
|
+
max,
|
|
37
|
+
label,
|
|
38
|
+
...rest
|
|
39
|
+
}: Props = $props();
|
|
40
|
+
|
|
41
|
+
let host: (HTMLElement & { values: number[]; points: unknown[] }) | undefined = $state();
|
|
42
|
+
|
|
43
|
+
$effect(() => {
|
|
44
|
+
if (!host) return;
|
|
45
|
+
host.values = values;
|
|
46
|
+
host.points = points ?? [];
|
|
47
|
+
});
|
|
48
|
+
</script>
|
|
49
|
+
|
|
50
|
+
<xtyle-sparkline
|
|
51
|
+
bind:this={host}
|
|
52
|
+
{...rest}
|
|
53
|
+
{variant}
|
|
54
|
+
{tone}
|
|
55
|
+
show-end={showEnd ? undefined : "false"}
|
|
56
|
+
step={step || undefined}
|
|
57
|
+
window={windowMs ?? undefined}
|
|
58
|
+
domain={domain ? JSON.stringify(domain) : undefined}
|
|
59
|
+
min={min ?? undefined}
|
|
60
|
+
max={max ?? undefined}
|
|
61
|
+
{label}
|
|
62
|
+
></xtyle-sparkline>
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import "./register.js";
|
|
2
|
+
import type { SparklineVariant, SparklineTone, TimeSample } from "@xtyle/core";
|
|
3
|
+
interface Props {
|
|
4
|
+
values?: number[];
|
|
5
|
+
/** Time-windowed mode: timestamped points (`at` is epoch ms or a date string) placed on a real
|
|
6
|
+
* time axis instead of even spacing. Pass alongside `window` or `domain`. */
|
|
7
|
+
points?: TimeSample[];
|
|
8
|
+
/** The sliding window width in ms (default 5m), ending at now; ignored when `domain` is set. */
|
|
9
|
+
window?: number;
|
|
10
|
+
/** An explicit `[start, end]` x-axis span (epoch ms or date strings), instead of a sliding window. */
|
|
11
|
+
domain?: [number | string, number | string];
|
|
12
|
+
/** Render the line as a sample-and-hold step (for on/off or discrete series). */
|
|
13
|
+
step?: boolean;
|
|
14
|
+
variant?: SparklineVariant;
|
|
15
|
+
tone?: SparklineTone;
|
|
16
|
+
showEnd?: boolean;
|
|
17
|
+
min?: number;
|
|
18
|
+
max?: number;
|
|
19
|
+
label?: string;
|
|
20
|
+
/** Any other attribute (`title`, `id`, `style`, `data-*`, `aria-*`, …) passes through. */
|
|
21
|
+
[key: string]: unknown;
|
|
22
|
+
}
|
|
23
|
+
declare const Sparkline: import("svelte").Component<Props, {}, "">;
|
|
24
|
+
type Sparkline = ReturnType<typeof Sparkline>;
|
|
25
|
+
export default Sparkline;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import "./register.js";
|
|
3
|
+
import type { Size, FullTone as Tone } from "@xtyle/core";
|
|
4
|
+
|
|
5
|
+
interface Props {
|
|
6
|
+
tone?: Tone;
|
|
7
|
+
size?: Size;
|
|
8
|
+
ariaLabel?: string;
|
|
9
|
+
/** Any other attribute (`title`, `id`, `data-*`, `aria-*`, …) passes through to the element. */
|
|
10
|
+
[key: string]: unknown;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
let { tone = "accent", size = "md", ariaLabel = "Loading", ...rest }: Props = $props();
|
|
14
|
+
</script>
|
|
15
|
+
|
|
16
|
+
<xtyle-spinner {...rest} {tone} {size} aria-label={ariaLabel ?? (rest["aria-label"] as string | undefined)}></xtyle-spinner>
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import "./register.js";
|
|
2
|
+
import type { Size, FullTone as Tone } from "@xtyle/core";
|
|
3
|
+
interface Props {
|
|
4
|
+
tone?: Tone;
|
|
5
|
+
size?: Size;
|
|
6
|
+
ariaLabel?: string;
|
|
7
|
+
/** Any other attribute (`title`, `id`, `data-*`, `aria-*`, …) passes through to the element. */
|
|
8
|
+
[key: string]: unknown;
|
|
9
|
+
}
|
|
10
|
+
declare const Spinner: import("svelte").Component<Props, {}, "">;
|
|
11
|
+
type Spinner = ReturnType<typeof Spinner>;
|
|
12
|
+
export default Spinner;
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import "./register.js";
|
|
3
|
+
|
|
4
|
+
type SplitterOrientation = "vertical" | "horizontal";
|
|
5
|
+
type SplitterSize = "sm" | "md" | "lg";
|
|
6
|
+
|
|
7
|
+
interface SplitterResizeDetail {
|
|
8
|
+
value: number;
|
|
9
|
+
orientation: SplitterOrientation;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
interface Props {
|
|
13
|
+
orientation?: SplitterOrientation;
|
|
14
|
+
size?: SplitterSize;
|
|
15
|
+
line?: boolean;
|
|
16
|
+
min?: number;
|
|
17
|
+
max?: number;
|
|
18
|
+
step?: number;
|
|
19
|
+
value: number;
|
|
20
|
+
default?: number;
|
|
21
|
+
disabled?: boolean;
|
|
22
|
+
reversed?: boolean;
|
|
23
|
+
var?: string;
|
|
24
|
+
for?: string;
|
|
25
|
+
label?: string;
|
|
26
|
+
labelledby?: string;
|
|
27
|
+
onresize?: (event: CustomEvent<SplitterResizeDetail>) => void;
|
|
28
|
+
onresizeend?: (event: CustomEvent<SplitterResizeDetail>) => void;
|
|
29
|
+
/** Any other attribute (`title`, `id`, `data-*`, `aria-*`, …) passes through to the element. */
|
|
30
|
+
[key: string]: unknown;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
let {
|
|
34
|
+
orientation = "vertical",
|
|
35
|
+
size = "md",
|
|
36
|
+
line = false,
|
|
37
|
+
min = 0,
|
|
38
|
+
max,
|
|
39
|
+
step = 1,
|
|
40
|
+
value = $bindable(0),
|
|
41
|
+
default: defaultValue,
|
|
42
|
+
disabled = false,
|
|
43
|
+
reversed = false,
|
|
44
|
+
var: varName,
|
|
45
|
+
for: forId,
|
|
46
|
+
label,
|
|
47
|
+
labelledby,
|
|
48
|
+
onresize,
|
|
49
|
+
onresizeend,
|
|
50
|
+
...rest
|
|
51
|
+
}: Props = $props();
|
|
52
|
+
|
|
53
|
+
function sync(event: Event) {
|
|
54
|
+
const target = event.currentTarget as HTMLElement & { value: number };
|
|
55
|
+
value = target.value;
|
|
56
|
+
}
|
|
57
|
+
function handleResize(event: Event) {
|
|
58
|
+
sync(event);
|
|
59
|
+
onresize?.(event as CustomEvent<SplitterResizeDetail>);
|
|
60
|
+
}
|
|
61
|
+
function handleResizeEnd(event: Event) {
|
|
62
|
+
sync(event);
|
|
63
|
+
onresizeend?.(event as CustomEvent<SplitterResizeDetail>);
|
|
64
|
+
}
|
|
65
|
+
</script>
|
|
66
|
+
|
|
67
|
+
<xtyle-splitter
|
|
68
|
+
{...rest}
|
|
69
|
+
{orientation}
|
|
70
|
+
{size}
|
|
71
|
+
line={line || undefined}
|
|
72
|
+
{min}
|
|
73
|
+
max={max ?? undefined}
|
|
74
|
+
{step}
|
|
75
|
+
{value}
|
|
76
|
+
default={defaultValue ?? undefined}
|
|
77
|
+
disabled={disabled || undefined}
|
|
78
|
+
reversed={reversed || undefined}
|
|
79
|
+
var={varName}
|
|
80
|
+
for={forId}
|
|
81
|
+
{label}
|
|
82
|
+
{labelledby}
|
|
83
|
+
onresize={handleResize}
|
|
84
|
+
onresizeend={handleResizeEnd}
|
|
85
|
+
></xtyle-splitter>
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import "./register.js";
|
|
2
|
+
type SplitterOrientation = "vertical" | "horizontal";
|
|
3
|
+
type SplitterSize = "sm" | "md" | "lg";
|
|
4
|
+
interface SplitterResizeDetail {
|
|
5
|
+
value: number;
|
|
6
|
+
orientation: SplitterOrientation;
|
|
7
|
+
}
|
|
8
|
+
interface Props {
|
|
9
|
+
orientation?: SplitterOrientation;
|
|
10
|
+
size?: SplitterSize;
|
|
11
|
+
line?: boolean;
|
|
12
|
+
min?: number;
|
|
13
|
+
max?: number;
|
|
14
|
+
step?: number;
|
|
15
|
+
value: number;
|
|
16
|
+
default?: number;
|
|
17
|
+
disabled?: boolean;
|
|
18
|
+
reversed?: boolean;
|
|
19
|
+
var?: string;
|
|
20
|
+
for?: string;
|
|
21
|
+
label?: string;
|
|
22
|
+
labelledby?: string;
|
|
23
|
+
onresize?: (event: CustomEvent<SplitterResizeDetail>) => void;
|
|
24
|
+
onresizeend?: (event: CustomEvent<SplitterResizeDetail>) => void;
|
|
25
|
+
/** Any other attribute (`title`, `id`, `data-*`, `aria-*`, …) passes through to the element. */
|
|
26
|
+
[key: string]: unknown;
|
|
27
|
+
}
|
|
28
|
+
declare const Splitter: import("svelte").Component<Props, {}, "value">;
|
|
29
|
+
type Splitter = ReturnType<typeof Splitter>;
|
|
30
|
+
export default Splitter;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import "./register.js";
|
|
3
|
+
import type { Snippet } from "svelte";
|
|
4
|
+
|
|
5
|
+
type StackAlign = "start" | "center" | "end" | "stretch" | "baseline";
|
|
6
|
+
type StackJustify = "start" | "center" | "end" | "between" | "around" | "evenly";
|
|
7
|
+
|
|
8
|
+
interface Props {
|
|
9
|
+
gap?: number;
|
|
10
|
+
align?: StackAlign;
|
|
11
|
+
justify?: StackJustify;
|
|
12
|
+
inline?: boolean;
|
|
13
|
+
children?: Snippet;
|
|
14
|
+
/** Any other attribute (`title`, `id`, `data-*`, `aria-*`, …) passes through to the element. */
|
|
15
|
+
[key: string]: unknown;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
let { gap = 4, align, justify, inline = false, children, ...rest }: Props = $props();
|
|
19
|
+
</script>
|
|
20
|
+
|
|
21
|
+
<xtyle-stack {...rest} {gap} {align} {justify} inline={inline || undefined}>
|
|
22
|
+
{@render children?.()}
|
|
23
|
+
</xtyle-stack>
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import "./register.js";
|
|
2
|
+
import type { Snippet } from "svelte";
|
|
3
|
+
type StackAlign = "start" | "center" | "end" | "stretch" | "baseline";
|
|
4
|
+
type StackJustify = "start" | "center" | "end" | "between" | "around" | "evenly";
|
|
5
|
+
interface Props {
|
|
6
|
+
gap?: number;
|
|
7
|
+
align?: StackAlign;
|
|
8
|
+
justify?: StackJustify;
|
|
9
|
+
inline?: boolean;
|
|
10
|
+
children?: Snippet;
|
|
11
|
+
/** Any other attribute (`title`, `id`, `data-*`, `aria-*`, …) passes through to the element. */
|
|
12
|
+
[key: string]: unknown;
|
|
13
|
+
}
|
|
14
|
+
declare const Stack: import("svelte").Component<Props, {}, "">;
|
|
15
|
+
type Stack = ReturnType<typeof Stack>;
|
|
16
|
+
export default Stack;
|
package/dist/Stat.svelte
ADDED
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import "./register.js";
|
|
3
|
+
import type { Snippet } from "svelte";
|
|
4
|
+
|
|
5
|
+
type StatTrend = "up" | "down" | "flat";
|
|
6
|
+
type StatSentiment = "positive" | "negative" | "neutral";
|
|
7
|
+
type StatAlign = "start" | "center";
|
|
8
|
+
type Size = "sm" | "md" | "lg";
|
|
9
|
+
|
|
10
|
+
interface Props {
|
|
11
|
+
label?: string;
|
|
12
|
+
delta?: string;
|
|
13
|
+
trend?: StatTrend;
|
|
14
|
+
/** The delta's color reading. Omit to derive it from `trend` (up→positive, down→negative, flat→neutral). */
|
|
15
|
+
sentiment?: StatSentiment;
|
|
16
|
+
caption?: string;
|
|
17
|
+
size?: Size;
|
|
18
|
+
align?: StatAlign;
|
|
19
|
+
inline?: boolean;
|
|
20
|
+
children?: Snippet;
|
|
21
|
+
/** Any other attribute (`title`, `id`, `data-*`, `aria-*`, …) passes through to the element. */
|
|
22
|
+
[key: string]: unknown;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
let {
|
|
26
|
+
label,
|
|
27
|
+
delta,
|
|
28
|
+
trend = "flat",
|
|
29
|
+
sentiment,
|
|
30
|
+
caption,
|
|
31
|
+
size = "md",
|
|
32
|
+
align = "start",
|
|
33
|
+
inline = false,
|
|
34
|
+
children,
|
|
35
|
+
...rest
|
|
36
|
+
}: Props = $props();
|
|
37
|
+
</script>
|
|
38
|
+
|
|
39
|
+
<xtyle-stat {...rest} {label} {delta} {trend} {sentiment} {caption} {size} {align} inline={inline || undefined}>
|
|
40
|
+
{@render children?.()}
|
|
41
|
+
</xtyle-stat>
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import "./register.js";
|
|
2
|
+
import type { Snippet } from "svelte";
|
|
3
|
+
type StatTrend = "up" | "down" | "flat";
|
|
4
|
+
type StatSentiment = "positive" | "negative" | "neutral";
|
|
5
|
+
type StatAlign = "start" | "center";
|
|
6
|
+
type Size = "sm" | "md" | "lg";
|
|
7
|
+
interface Props {
|
|
8
|
+
label?: string;
|
|
9
|
+
delta?: string;
|
|
10
|
+
trend?: StatTrend;
|
|
11
|
+
/** The delta's color reading. Omit to derive it from `trend` (up→positive, down→negative, flat→neutral). */
|
|
12
|
+
sentiment?: StatSentiment;
|
|
13
|
+
caption?: string;
|
|
14
|
+
size?: Size;
|
|
15
|
+
align?: StatAlign;
|
|
16
|
+
inline?: boolean;
|
|
17
|
+
children?: Snippet;
|
|
18
|
+
/** Any other attribute (`title`, `id`, `data-*`, `aria-*`, …) passes through to the element. */
|
|
19
|
+
[key: string]: unknown;
|
|
20
|
+
}
|
|
21
|
+
declare const Stat: import("svelte").Component<Props, {}, "">;
|
|
22
|
+
type Stat = ReturnType<typeof Stat>;
|
|
23
|
+
export default Stat;
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import "./register.js";
|
|
3
|
+
import type { Snippet } from "svelte";
|
|
4
|
+
|
|
5
|
+
type OverflowChange = CustomEvent<{ hidden: HTMLElement[]; visible: HTMLElement[] }>;
|
|
6
|
+
|
|
7
|
+
interface Props {
|
|
8
|
+
live?: boolean;
|
|
9
|
+
label?: string;
|
|
10
|
+
overflow?: "clip" | "wrap" | "scroll" | "collapse";
|
|
11
|
+
manualOverflow?: boolean;
|
|
12
|
+
separated?: boolean;
|
|
13
|
+
onOverflowChange?: (event: OverflowChange) => void;
|
|
14
|
+
children?: Snippet;
|
|
15
|
+
/** Any other attribute (`title`, `id`, `data-*`, `aria-*`, …) passes through to the element. */
|
|
16
|
+
[key: string]: unknown;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
let {
|
|
20
|
+
live = false,
|
|
21
|
+
label,
|
|
22
|
+
overflow = "clip",
|
|
23
|
+
manualOverflow = false,
|
|
24
|
+
separated = false,
|
|
25
|
+
onOverflowChange,
|
|
26
|
+
children,
|
|
27
|
+
...rest
|
|
28
|
+
}: Props = $props();
|
|
29
|
+
|
|
30
|
+
let host: HTMLElement | undefined = $state();
|
|
31
|
+
|
|
32
|
+
$effect(() => {
|
|
33
|
+
if (!host || !onOverflowChange) return;
|
|
34
|
+
const handler = (event: Event) => onOverflowChange(event as OverflowChange);
|
|
35
|
+
host.addEventListener("overflow-change", handler);
|
|
36
|
+
return () => host?.removeEventListener("overflow-change", handler);
|
|
37
|
+
});
|
|
38
|
+
</script>
|
|
39
|
+
|
|
40
|
+
<xtyle-statusbar
|
|
41
|
+
{...rest}
|
|
42
|
+
bind:this={host}
|
|
43
|
+
live={live || undefined}
|
|
44
|
+
label={label}
|
|
45
|
+
overflow={overflow}
|
|
46
|
+
manual-overflow={manualOverflow || undefined}
|
|
47
|
+
separated={separated || undefined}
|
|
48
|
+
>
|
|
49
|
+
{@render children?.()}
|
|
50
|
+
</xtyle-statusbar>
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import "./register.js";
|
|
2
|
+
import type { Snippet } from "svelte";
|
|
3
|
+
type OverflowChange = CustomEvent<{
|
|
4
|
+
hidden: HTMLElement[];
|
|
5
|
+
visible: HTMLElement[];
|
|
6
|
+
}>;
|
|
7
|
+
interface Props {
|
|
8
|
+
live?: boolean;
|
|
9
|
+
label?: string;
|
|
10
|
+
overflow?: "clip" | "wrap" | "scroll" | "collapse";
|
|
11
|
+
manualOverflow?: boolean;
|
|
12
|
+
separated?: boolean;
|
|
13
|
+
onOverflowChange?: (event: OverflowChange) => void;
|
|
14
|
+
children?: Snippet;
|
|
15
|
+
/** Any other attribute (`title`, `id`, `data-*`, `aria-*`, …) passes through to the element. */
|
|
16
|
+
[key: string]: unknown;
|
|
17
|
+
}
|
|
18
|
+
declare const Statusbar: import("svelte").Component<Props, {}, "">;
|
|
19
|
+
type Statusbar = ReturnType<typeof Statusbar>;
|
|
20
|
+
export default Statusbar;
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import "./register.js";
|
|
3
|
+
|
|
4
|
+
type SwatchSize = "sm" | "md" | "lg";
|
|
5
|
+
|
|
6
|
+
interface SwatchSelectDetail {
|
|
7
|
+
color: string | null;
|
|
8
|
+
label: string | null;
|
|
9
|
+
value: string | null;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
interface Props {
|
|
13
|
+
color: string;
|
|
14
|
+
label?: string;
|
|
15
|
+
value?: string;
|
|
16
|
+
size?: SwatchSize;
|
|
17
|
+
interactive?: boolean;
|
|
18
|
+
selected?: boolean;
|
|
19
|
+
details?: boolean;
|
|
20
|
+
onselect?: (event: CustomEvent<SwatchSelectDetail>) => void;
|
|
21
|
+
/** Any other attribute (`title`, `id`, `data-*`, `aria-*`, …) passes through to the element. */
|
|
22
|
+
[key: string]: unknown;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
let {
|
|
26
|
+
color,
|
|
27
|
+
label,
|
|
28
|
+
value,
|
|
29
|
+
size = "md",
|
|
30
|
+
interactive = false,
|
|
31
|
+
selected = false,
|
|
32
|
+
details = false,
|
|
33
|
+
onselect,
|
|
34
|
+
...rest
|
|
35
|
+
}: Props = $props();
|
|
36
|
+
</script>
|
|
37
|
+
|
|
38
|
+
<xtyle-swatch
|
|
39
|
+
{...rest}
|
|
40
|
+
{color}
|
|
41
|
+
{label}
|
|
42
|
+
{value}
|
|
43
|
+
{size}
|
|
44
|
+
interactive={interactive || undefined}
|
|
45
|
+
selected={selected || undefined}
|
|
46
|
+
details={details || undefined}
|
|
47
|
+
onselect={onselect as EventListener | undefined}
|
|
48
|
+
></xtyle-swatch>
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import "./register.js";
|
|
2
|
+
type SwatchSize = "sm" | "md" | "lg";
|
|
3
|
+
interface SwatchSelectDetail {
|
|
4
|
+
color: string | null;
|
|
5
|
+
label: string | null;
|
|
6
|
+
value: string | null;
|
|
7
|
+
}
|
|
8
|
+
interface Props {
|
|
9
|
+
color: string;
|
|
10
|
+
label?: string;
|
|
11
|
+
value?: string;
|
|
12
|
+
size?: SwatchSize;
|
|
13
|
+
interactive?: boolean;
|
|
14
|
+
selected?: boolean;
|
|
15
|
+
details?: boolean;
|
|
16
|
+
onselect?: (event: CustomEvent<SwatchSelectDetail>) => void;
|
|
17
|
+
/** Any other attribute (`title`, `id`, `data-*`, `aria-*`, …) passes through to the element. */
|
|
18
|
+
[key: string]: unknown;
|
|
19
|
+
}
|
|
20
|
+
declare const Swatch: import("svelte").Component<Props, {}, "">;
|
|
21
|
+
type Swatch = ReturnType<typeof Swatch>;
|
|
22
|
+
export default Swatch;
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import "./register.js";
|
|
3
|
+
import type { Size, FullTone as Tone } from "@xtyle/core";
|
|
4
|
+
|
|
5
|
+
interface Props {
|
|
6
|
+
checked?: boolean;
|
|
7
|
+
disabled?: boolean;
|
|
8
|
+
size?: Size;
|
|
9
|
+
tone?: Tone;
|
|
10
|
+
shape?: "pill" | "square";
|
|
11
|
+
orientation?: "horizontal" | "vertical";
|
|
12
|
+
reverse?: boolean;
|
|
13
|
+
labelSide?: "start" | "end";
|
|
14
|
+
label?: string;
|
|
15
|
+
labelledby?: string;
|
|
16
|
+
onLabel?: string;
|
|
17
|
+
offLabel?: string;
|
|
18
|
+
name?: string;
|
|
19
|
+
value?: string;
|
|
20
|
+
onchange?: (event: Event) => void;
|
|
21
|
+
/** Any other attribute (`title`, `id`, `data-*`, `aria-*`, …) passes through to the element. */
|
|
22
|
+
[key: string]: unknown;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
let {
|
|
26
|
+
checked = $bindable(false),
|
|
27
|
+
disabled = false,
|
|
28
|
+
size = "md",
|
|
29
|
+
tone = "accent",
|
|
30
|
+
shape = "pill",
|
|
31
|
+
orientation = "horizontal",
|
|
32
|
+
reverse = false,
|
|
33
|
+
labelSide = "start",
|
|
34
|
+
label,
|
|
35
|
+
labelledby,
|
|
36
|
+
onLabel,
|
|
37
|
+
offLabel,
|
|
38
|
+
name,
|
|
39
|
+
value,
|
|
40
|
+
onchange,
|
|
41
|
+
...rest
|
|
42
|
+
}: Props = $props();
|
|
43
|
+
|
|
44
|
+
function handleChange(event: Event) {
|
|
45
|
+
const host = event.currentTarget as HTMLElement & { checked: boolean };
|
|
46
|
+
const inner = host.querySelector('[role="switch"]');
|
|
47
|
+
checked = inner ? inner.getAttribute("aria-checked") === "true" : host.checked;
|
|
48
|
+
onchange?.(event);
|
|
49
|
+
}
|
|
50
|
+
</script>
|
|
51
|
+
|
|
52
|
+
<xtyle-switch
|
|
53
|
+
{...rest}
|
|
54
|
+
checked={checked || undefined}
|
|
55
|
+
disabled={disabled || undefined}
|
|
56
|
+
{size}
|
|
57
|
+
{tone}
|
|
58
|
+
shape={shape !== "pill" ? shape : undefined}
|
|
59
|
+
orientation={orientation !== "horizontal" ? orientation : undefined}
|
|
60
|
+
reverse={reverse || undefined}
|
|
61
|
+
label-side={labelSide !== "start" ? labelSide : undefined}
|
|
62
|
+
{label}
|
|
63
|
+
labelledby={labelledby || undefined}
|
|
64
|
+
on-label={onLabel}
|
|
65
|
+
off-label={offLabel}
|
|
66
|
+
{name}
|
|
67
|
+
{value}
|
|
68
|
+
onchange={handleChange}
|
|
69
|
+
></xtyle-switch>
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import "./register.js";
|
|
2
|
+
import type { Size, FullTone as Tone } from "@xtyle/core";
|
|
3
|
+
interface Props {
|
|
4
|
+
checked?: boolean;
|
|
5
|
+
disabled?: boolean;
|
|
6
|
+
size?: Size;
|
|
7
|
+
tone?: Tone;
|
|
8
|
+
shape?: "pill" | "square";
|
|
9
|
+
orientation?: "horizontal" | "vertical";
|
|
10
|
+
reverse?: boolean;
|
|
11
|
+
labelSide?: "start" | "end";
|
|
12
|
+
label?: string;
|
|
13
|
+
labelledby?: string;
|
|
14
|
+
onLabel?: string;
|
|
15
|
+
offLabel?: string;
|
|
16
|
+
name?: string;
|
|
17
|
+
value?: string;
|
|
18
|
+
onchange?: (event: Event) => void;
|
|
19
|
+
/** Any other attribute (`title`, `id`, `data-*`, `aria-*`, …) passes through to the element. */
|
|
20
|
+
[key: string]: unknown;
|
|
21
|
+
}
|
|
22
|
+
declare const Switch: import("svelte").Component<Props, {}, "checked">;
|
|
23
|
+
type Switch = ReturnType<typeof Switch>;
|
|
24
|
+
export default Switch;
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import "./register.js";
|
|
3
|
+
import type { Snippet } from "svelte";
|
|
4
|
+
|
|
5
|
+
type TableVariant = "default" | "striped" | "bordered";
|
|
6
|
+
type TableSize = "normal" | "compact";
|
|
7
|
+
|
|
8
|
+
interface Props {
|
|
9
|
+
variant?: TableVariant;
|
|
10
|
+
size?: TableSize;
|
|
11
|
+
hover?: boolean;
|
|
12
|
+
sticky?: boolean;
|
|
13
|
+
ariaLabel?: string;
|
|
14
|
+
children?: Snippet;
|
|
15
|
+
/** Any other attribute (`title`, `id`, `data-*`, `aria-*`, …) passes through to the element. */
|
|
16
|
+
[key: string]: unknown;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
let {
|
|
20
|
+
variant = "default",
|
|
21
|
+
size = "normal",
|
|
22
|
+
hover = false,
|
|
23
|
+
sticky = false,
|
|
24
|
+
ariaLabel,
|
|
25
|
+
children,
|
|
26
|
+
...rest
|
|
27
|
+
}: Props = $props();
|
|
28
|
+
</script>
|
|
29
|
+
|
|
30
|
+
<xtyle-table
|
|
31
|
+
{...rest}
|
|
32
|
+
{variant}
|
|
33
|
+
{size}
|
|
34
|
+
hover={hover || undefined}
|
|
35
|
+
sticky={sticky || undefined}
|
|
36
|
+
aria-label={ariaLabel ?? (rest["aria-label"] as string | undefined)}
|
|
37
|
+
>
|
|
38
|
+
{@render children?.()}
|
|
39
|
+
</xtyle-table>
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import "./register.js";
|
|
2
|
+
import type { Snippet } from "svelte";
|
|
3
|
+
type TableVariant = "default" | "striped" | "bordered";
|
|
4
|
+
type TableSize = "normal" | "compact";
|
|
5
|
+
interface Props {
|
|
6
|
+
variant?: TableVariant;
|
|
7
|
+
size?: TableSize;
|
|
8
|
+
hover?: boolean;
|
|
9
|
+
sticky?: boolean;
|
|
10
|
+
ariaLabel?: string;
|
|
11
|
+
children?: Snippet;
|
|
12
|
+
/** Any other attribute (`title`, `id`, `data-*`, `aria-*`, …) passes through to the element. */
|
|
13
|
+
[key: string]: unknown;
|
|
14
|
+
}
|
|
15
|
+
declare const Table: import("svelte").Component<Props, {}, "">;
|
|
16
|
+
type Table = ReturnType<typeof Table>;
|
|
17
|
+
export default Table;
|