@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
package/dist/Hero.svelte
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import "./register.js";
|
|
3
|
+
import type { Snippet } from "svelte";
|
|
4
|
+
|
|
5
|
+
type HeroAlign = "center" | "start";
|
|
6
|
+
|
|
7
|
+
interface Props {
|
|
8
|
+
align?: HeroAlign;
|
|
9
|
+
split?: boolean;
|
|
10
|
+
children?: Snippet;
|
|
11
|
+
/** Any other attribute (`title`, `id`, `data-*`, `aria-*`, …) passes through to the element. */
|
|
12
|
+
[key: string]: unknown;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
let { align = "center", split = false, children, ...rest }: Props = $props();
|
|
16
|
+
</script>
|
|
17
|
+
|
|
18
|
+
<xtyle-hero {...rest} align={align !== "center" ? align : undefined} split={split ? "" : undefined}>
|
|
19
|
+
{@render children?.()}
|
|
20
|
+
</xtyle-hero>
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import "./register.js";
|
|
2
|
+
import type { Snippet } from "svelte";
|
|
3
|
+
type HeroAlign = "center" | "start";
|
|
4
|
+
interface Props {
|
|
5
|
+
align?: HeroAlign;
|
|
6
|
+
split?: boolean;
|
|
7
|
+
children?: Snippet;
|
|
8
|
+
/** Any other attribute (`title`, `id`, `data-*`, `aria-*`, …) passes through to the element. */
|
|
9
|
+
[key: string]: unknown;
|
|
10
|
+
}
|
|
11
|
+
declare const Hero: import("svelte").Component<Props, {}, "">;
|
|
12
|
+
type Hero = ReturnType<typeof Hero>;
|
|
13
|
+
export default Hero;
|
package/dist/Icon.svelte
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import "./register.js";
|
|
3
|
+
import type { FullTone, IconName, IconSize, SeriesScheme } from "@xtyle/core";
|
|
4
|
+
|
|
5
|
+
interface Props {
|
|
6
|
+
name: IconName | (string & {});
|
|
7
|
+
size?: IconSize;
|
|
8
|
+
tone?: FullTone;
|
|
9
|
+
/** The series scheme a generated mark's `c3+` color slots draw from. */
|
|
10
|
+
colors?: SeriesScheme;
|
|
11
|
+
label?: string;
|
|
12
|
+
spin?: boolean;
|
|
13
|
+
/** Any other attribute (`title`, `id`, `data-*`, `aria-*`, …) passes through to the element. */
|
|
14
|
+
[key: string]: unknown;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
let { name, size = "md", tone, colors, label, spin = false, ...rest }: Props = $props();
|
|
18
|
+
</script>
|
|
19
|
+
|
|
20
|
+
<xtyle-icon {...rest} {name} {size} {tone} {colors} {label} spin={spin ? "" : undefined}></xtyle-icon>
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import "./register.js";
|
|
2
|
+
import type { FullTone, IconName, IconSize, SeriesScheme } from "@xtyle/core";
|
|
3
|
+
interface Props {
|
|
4
|
+
name: IconName | (string & {});
|
|
5
|
+
size?: IconSize;
|
|
6
|
+
tone?: FullTone;
|
|
7
|
+
/** The series scheme a generated mark's `c3+` color slots draw from. */
|
|
8
|
+
colors?: SeriesScheme;
|
|
9
|
+
label?: string;
|
|
10
|
+
spin?: boolean;
|
|
11
|
+
/** Any other attribute (`title`, `id`, `data-*`, `aria-*`, …) passes through to the element. */
|
|
12
|
+
[key: string]: unknown;
|
|
13
|
+
}
|
|
14
|
+
declare const Icon: import("svelte").Component<Props, {}, "">;
|
|
15
|
+
type Icon = ReturnType<typeof Icon>;
|
|
16
|
+
export default Icon;
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import "./register.js";
|
|
3
|
+
|
|
4
|
+
type ImageFit = "cover" | "contain";
|
|
5
|
+
type ImageRadius = "none" | "sm" | "md" | "lg";
|
|
6
|
+
type ImageLoading = "lazy" | "eager";
|
|
7
|
+
|
|
8
|
+
interface Props {
|
|
9
|
+
src?: string;
|
|
10
|
+
alt?: string;
|
|
11
|
+
ratio?: string;
|
|
12
|
+
fit?: ImageFit;
|
|
13
|
+
radius?: ImageRadius;
|
|
14
|
+
loading?: ImageLoading;
|
|
15
|
+
lightbox?: boolean;
|
|
16
|
+
caption?: string;
|
|
17
|
+
/** Any other attribute (`title`, `id`, `data-*`, `aria-*`, …) passes through to the element. */
|
|
18
|
+
[key: string]: unknown;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
let {
|
|
22
|
+
src,
|
|
23
|
+
alt = "",
|
|
24
|
+
ratio,
|
|
25
|
+
fit = "cover",
|
|
26
|
+
radius = "md",
|
|
27
|
+
loading = "lazy",
|
|
28
|
+
lightbox = false,
|
|
29
|
+
caption,
|
|
30
|
+
...rest
|
|
31
|
+
}: Props = $props();
|
|
32
|
+
</script>
|
|
33
|
+
|
|
34
|
+
<xtyle-image
|
|
35
|
+
{...rest}
|
|
36
|
+
{src}
|
|
37
|
+
{alt}
|
|
38
|
+
{ratio}
|
|
39
|
+
{fit}
|
|
40
|
+
{radius}
|
|
41
|
+
{loading}
|
|
42
|
+
{caption}
|
|
43
|
+
lightbox={lightbox ? "" : undefined}
|
|
44
|
+
></xtyle-image>
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import "./register.js";
|
|
2
|
+
type ImageFit = "cover" | "contain";
|
|
3
|
+
type ImageRadius = "none" | "sm" | "md" | "lg";
|
|
4
|
+
type ImageLoading = "lazy" | "eager";
|
|
5
|
+
interface Props {
|
|
6
|
+
src?: string;
|
|
7
|
+
alt?: string;
|
|
8
|
+
ratio?: string;
|
|
9
|
+
fit?: ImageFit;
|
|
10
|
+
radius?: ImageRadius;
|
|
11
|
+
loading?: ImageLoading;
|
|
12
|
+
lightbox?: boolean;
|
|
13
|
+
caption?: string;
|
|
14
|
+
/** Any other attribute (`title`, `id`, `data-*`, `aria-*`, …) passes through to the element. */
|
|
15
|
+
[key: string]: unknown;
|
|
16
|
+
}
|
|
17
|
+
declare const Image: import("svelte").Component<Props, {}, "">;
|
|
18
|
+
type Image = ReturnType<typeof Image>;
|
|
19
|
+
export default Image;
|
package/dist/Kbd.svelte
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import "./register.js";
|
|
3
|
+
import type { Snippet } from "svelte";
|
|
4
|
+
import type { FullTone as KbdTone } from "@xtyle/core";
|
|
5
|
+
|
|
6
|
+
type KbdSize = "sm" | "md" | "lg";
|
|
7
|
+
|
|
8
|
+
interface Props {
|
|
9
|
+
size?: KbdSize;
|
|
10
|
+
tone?: KbdTone;
|
|
11
|
+
children?: Snippet;
|
|
12
|
+
/** Any other attribute (`title`, `id`, `data-*`, `aria-*`, …) passes through to the element. */
|
|
13
|
+
[key: string]: unknown;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
let { size = "md", tone, children, ...rest }: Props = $props();
|
|
17
|
+
</script>
|
|
18
|
+
|
|
19
|
+
<xtyle-kbd {...rest} {size} {tone}>
|
|
20
|
+
{@render children?.()}
|
|
21
|
+
</xtyle-kbd>
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import "./register.js";
|
|
2
|
+
import type { Snippet } from "svelte";
|
|
3
|
+
import type { FullTone as KbdTone } from "@xtyle/core";
|
|
4
|
+
type KbdSize = "sm" | "md" | "lg";
|
|
5
|
+
interface Props {
|
|
6
|
+
size?: KbdSize;
|
|
7
|
+
tone?: KbdTone;
|
|
8
|
+
children?: Snippet;
|
|
9
|
+
/** Any other attribute (`title`, `id`, `data-*`, `aria-*`, …) passes through to the element. */
|
|
10
|
+
[key: string]: unknown;
|
|
11
|
+
}
|
|
12
|
+
declare const Kbd: import("svelte").Component<Props, {}, "">;
|
|
13
|
+
type Kbd = ReturnType<typeof Kbd>;
|
|
14
|
+
export default Kbd;
|
package/dist/Link.svelte
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import "./register.js";
|
|
3
|
+
import type { Snippet } from "svelte";
|
|
4
|
+
|
|
5
|
+
type LinkVariant = "default" | "muted" | "quiet";
|
|
6
|
+
|
|
7
|
+
interface Props {
|
|
8
|
+
variant?: LinkVariant;
|
|
9
|
+
href?: string;
|
|
10
|
+
target?: string;
|
|
11
|
+
rel?: string;
|
|
12
|
+
externalIcon?: boolean;
|
|
13
|
+
ariaLabel?: string;
|
|
14
|
+
onclick?: (event: MouseEvent) => void;
|
|
15
|
+
children?: Snippet;
|
|
16
|
+
/** Any other attribute (`title`, `id`, `data-*`, `aria-*`, …) passes through to the element. */
|
|
17
|
+
[key: string]: unknown;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
let { variant = "default", href, target, rel, externalIcon, ariaLabel, onclick, children, ...rest }: Props = $props();
|
|
21
|
+
</script>
|
|
22
|
+
|
|
23
|
+
<xtyle-link
|
|
24
|
+
{...rest}
|
|
25
|
+
{variant}
|
|
26
|
+
{href}
|
|
27
|
+
{target}
|
|
28
|
+
{rel}
|
|
29
|
+
external-icon={externalIcon === undefined ? undefined : String(externalIcon)}
|
|
30
|
+
aria-label={ariaLabel ?? (rest["aria-label"] as string | undefined)}
|
|
31
|
+
{onclick}
|
|
32
|
+
>
|
|
33
|
+
{@render children?.()}
|
|
34
|
+
</xtyle-link>
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import "./register.js";
|
|
2
|
+
import type { Snippet } from "svelte";
|
|
3
|
+
type LinkVariant = "default" | "muted" | "quiet";
|
|
4
|
+
interface Props {
|
|
5
|
+
variant?: LinkVariant;
|
|
6
|
+
href?: string;
|
|
7
|
+
target?: string;
|
|
8
|
+
rel?: string;
|
|
9
|
+
externalIcon?: boolean;
|
|
10
|
+
ariaLabel?: string;
|
|
11
|
+
onclick?: (event: MouseEvent) => void;
|
|
12
|
+
children?: Snippet;
|
|
13
|
+
/** Any other attribute (`title`, `id`, `data-*`, `aria-*`, …) passes through to the element. */
|
|
14
|
+
[key: string]: unknown;
|
|
15
|
+
}
|
|
16
|
+
declare const Link: import("svelte").Component<Props, {}, "">;
|
|
17
|
+
type Link = ReturnType<typeof Link>;
|
|
18
|
+
export default Link;
|
package/dist/Menu.svelte
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import "./register.js";
|
|
3
|
+
import type { MenuItem } from "@xtyle/core/elements";
|
|
4
|
+
|
|
5
|
+
interface Props {
|
|
6
|
+
items?: MenuItem[];
|
|
7
|
+
label?: string;
|
|
8
|
+
open?: boolean;
|
|
9
|
+
onselect?: (event: Event) => void;
|
|
10
|
+
/** Any other attribute (`title`, `id`, `data-*`, `aria-*`, …) passes through to the element. */
|
|
11
|
+
[key: string]: unknown;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
let { items = [], label, open = false, onselect, ...rest }: Props = $props();
|
|
15
|
+
|
|
16
|
+
let el: (HTMLElement & { items?: MenuItem[]; open?: boolean }) | undefined = $state();
|
|
17
|
+
|
|
18
|
+
$effect(() => {
|
|
19
|
+
if (el) el.items = items;
|
|
20
|
+
});
|
|
21
|
+
|
|
22
|
+
$effect(() => {
|
|
23
|
+
const target = el;
|
|
24
|
+
if (!target) return;
|
|
25
|
+
// Defer to a microtask so an `open`-by-default menu doesn't fire the element's popover
|
|
26
|
+
// logic synchronously inside Svelte's mount-effect flush (which corrupts Svelte's
|
|
27
|
+
// reconciliation). Post-mount toggles settle a microtask later — imperceptible.
|
|
28
|
+
queueMicrotask(() => {
|
|
29
|
+
target.open = open;
|
|
30
|
+
});
|
|
31
|
+
});
|
|
32
|
+
</script>
|
|
33
|
+
|
|
34
|
+
<xtyle-menu {...rest} bind:this={el} {label} {onselect}></xtyle-menu>
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import "./register.js";
|
|
2
|
+
import type { MenuItem } from "@xtyle/core/elements";
|
|
3
|
+
interface Props {
|
|
4
|
+
items?: MenuItem[];
|
|
5
|
+
label?: string;
|
|
6
|
+
open?: boolean;
|
|
7
|
+
onselect?: (event: Event) => void;
|
|
8
|
+
/** Any other attribute (`title`, `id`, `data-*`, `aria-*`, …) passes through to the element. */
|
|
9
|
+
[key: string]: unknown;
|
|
10
|
+
}
|
|
11
|
+
declare const Menu: import("svelte").Component<Props, {}, "">;
|
|
12
|
+
type Menu = ReturnType<typeof Menu>;
|
|
13
|
+
export default Menu;
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import "./register.js";
|
|
3
|
+
import type { Size } from "@xtyle/core";
|
|
4
|
+
|
|
5
|
+
interface Props {
|
|
6
|
+
value?: number | string;
|
|
7
|
+
min?: number;
|
|
8
|
+
max?: number;
|
|
9
|
+
/** A positive number, or `"any"` for unstepped free-form entry (no snapping, no precision cap). */
|
|
10
|
+
step?: number | "any";
|
|
11
|
+
altStep?: number;
|
|
12
|
+
altDefault?: boolean;
|
|
13
|
+
modifier?: "shift" | "alt" | "ctrl" | "meta";
|
|
14
|
+
disabled?: boolean;
|
|
15
|
+
size?: Size;
|
|
16
|
+
label?: string;
|
|
17
|
+
labelledby?: string;
|
|
18
|
+
name?: string;
|
|
19
|
+
placeholder?: string;
|
|
20
|
+
oninput?: (event: Event) => void;
|
|
21
|
+
onchange?: (event: Event) => void;
|
|
22
|
+
/** Any other attribute (`title`, `id`, `data-*`, `aria-*`, …) passes through to the element. */
|
|
23
|
+
[key: string]: unknown;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
let {
|
|
27
|
+
value = $bindable(""),
|
|
28
|
+
min,
|
|
29
|
+
max,
|
|
30
|
+
step,
|
|
31
|
+
altStep,
|
|
32
|
+
altDefault = false,
|
|
33
|
+
modifier,
|
|
34
|
+
disabled = false,
|
|
35
|
+
size = "md",
|
|
36
|
+
label,
|
|
37
|
+
labelledby,
|
|
38
|
+
name,
|
|
39
|
+
placeholder,
|
|
40
|
+
oninput,
|
|
41
|
+
onchange,
|
|
42
|
+
...rest
|
|
43
|
+
}: Props = $props();
|
|
44
|
+
|
|
45
|
+
function sync(event: Event) {
|
|
46
|
+
const host = event.currentTarget as HTMLElement & { value: string };
|
|
47
|
+
value = host.value;
|
|
48
|
+
}
|
|
49
|
+
function handleInput(event: Event) {
|
|
50
|
+
sync(event);
|
|
51
|
+
oninput?.(event);
|
|
52
|
+
}
|
|
53
|
+
function handleChange(event: Event) {
|
|
54
|
+
sync(event);
|
|
55
|
+
onchange?.(event);
|
|
56
|
+
}
|
|
57
|
+
</script>
|
|
58
|
+
|
|
59
|
+
<xtyle-number-input
|
|
60
|
+
{...rest}
|
|
61
|
+
value={value === "" ? undefined : String(value)}
|
|
62
|
+
min={min}
|
|
63
|
+
max={max}
|
|
64
|
+
step={step}
|
|
65
|
+
alt-step={altStep}
|
|
66
|
+
alt-default={altDefault || undefined}
|
|
67
|
+
{modifier}
|
|
68
|
+
disabled={disabled || undefined}
|
|
69
|
+
{size}
|
|
70
|
+
{label}
|
|
71
|
+
labelledby={labelledby || undefined}
|
|
72
|
+
{name}
|
|
73
|
+
{placeholder}
|
|
74
|
+
oninput={handleInput}
|
|
75
|
+
onchange={handleChange}
|
|
76
|
+
></xtyle-number-input>
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import "./register.js";
|
|
2
|
+
import type { Size } from "@xtyle/core";
|
|
3
|
+
interface Props {
|
|
4
|
+
value?: number | string;
|
|
5
|
+
min?: number;
|
|
6
|
+
max?: number;
|
|
7
|
+
/** A positive number, or `"any"` for unstepped free-form entry (no snapping, no precision cap). */
|
|
8
|
+
step?: number | "any";
|
|
9
|
+
altStep?: number;
|
|
10
|
+
altDefault?: boolean;
|
|
11
|
+
modifier?: "shift" | "alt" | "ctrl" | "meta";
|
|
12
|
+
disabled?: boolean;
|
|
13
|
+
size?: Size;
|
|
14
|
+
label?: string;
|
|
15
|
+
labelledby?: string;
|
|
16
|
+
name?: string;
|
|
17
|
+
placeholder?: string;
|
|
18
|
+
oninput?: (event: Event) => void;
|
|
19
|
+
onchange?: (event: Event) => void;
|
|
20
|
+
/** Any other attribute (`title`, `id`, `data-*`, `aria-*`, …) passes through to the element. */
|
|
21
|
+
[key: string]: unknown;
|
|
22
|
+
}
|
|
23
|
+
declare const NumberInput: import("svelte").Component<Props, {}, "value">;
|
|
24
|
+
type NumberInput = ReturnType<typeof NumberInput>;
|
|
25
|
+
export default NumberInput;
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import "./register.js";
|
|
3
|
+
import type { FullTone, Size } from "@xtyle/core";
|
|
4
|
+
|
|
5
|
+
type PageChange = CustomEvent<{ page: number }>;
|
|
6
|
+
|
|
7
|
+
interface Props {
|
|
8
|
+
page?: number;
|
|
9
|
+
total?: number;
|
|
10
|
+
siblings?: number;
|
|
11
|
+
boundaries?: number;
|
|
12
|
+
href?: string;
|
|
13
|
+
tone?: FullTone;
|
|
14
|
+
size?: Size;
|
|
15
|
+
label?: string;
|
|
16
|
+
/** Fired when a page or control is activated in button mode (no `href`). */
|
|
17
|
+
onpagechange?: (event: PageChange) => void;
|
|
18
|
+
/** Any other attribute (`title`, `id`, `data-*`, `aria-*`, …) passes through to the element. */
|
|
19
|
+
[key: string]: unknown;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
let {
|
|
23
|
+
page = 1,
|
|
24
|
+
total = 1,
|
|
25
|
+
siblings = 1,
|
|
26
|
+
boundaries = 1,
|
|
27
|
+
href,
|
|
28
|
+
tone = "accent",
|
|
29
|
+
size = "md",
|
|
30
|
+
label = "Pagination",
|
|
31
|
+
onpagechange,
|
|
32
|
+
...rest
|
|
33
|
+
}: Props = $props();
|
|
34
|
+
|
|
35
|
+
let host: HTMLElement | undefined = $state();
|
|
36
|
+
|
|
37
|
+
$effect(() => {
|
|
38
|
+
if (!host || !onpagechange) return;
|
|
39
|
+
const handler = (event: Event) => onpagechange(event as PageChange);
|
|
40
|
+
host.addEventListener("page-change", handler);
|
|
41
|
+
return () => host?.removeEventListener("page-change", handler);
|
|
42
|
+
});
|
|
43
|
+
</script>
|
|
44
|
+
|
|
45
|
+
<xtyle-pagination
|
|
46
|
+
{...rest}
|
|
47
|
+
bind:this={host}
|
|
48
|
+
page={page}
|
|
49
|
+
total={total}
|
|
50
|
+
siblings={siblings}
|
|
51
|
+
boundaries={boundaries}
|
|
52
|
+
href={href}
|
|
53
|
+
tone={tone}
|
|
54
|
+
size={size}
|
|
55
|
+
label={label}
|
|
56
|
+
></xtyle-pagination>
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import "./register.js";
|
|
2
|
+
import type { FullTone, Size } from "@xtyle/core";
|
|
3
|
+
type PageChange = CustomEvent<{
|
|
4
|
+
page: number;
|
|
5
|
+
}>;
|
|
6
|
+
interface Props {
|
|
7
|
+
page?: number;
|
|
8
|
+
total?: number;
|
|
9
|
+
siblings?: number;
|
|
10
|
+
boundaries?: number;
|
|
11
|
+
href?: string;
|
|
12
|
+
tone?: FullTone;
|
|
13
|
+
size?: Size;
|
|
14
|
+
label?: string;
|
|
15
|
+
/** Fired when a page or control is activated in button mode (no `href`). */
|
|
16
|
+
onpagechange?: (event: PageChange) => void;
|
|
17
|
+
/** Any other attribute (`title`, `id`, `data-*`, `aria-*`, …) passes through to the element. */
|
|
18
|
+
[key: string]: unknown;
|
|
19
|
+
}
|
|
20
|
+
declare const Pagination: import("svelte").Component<Props, {}, "">;
|
|
21
|
+
type Pagination = ReturnType<typeof Pagination>;
|
|
22
|
+
export default Pagination;
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import "./register.js";
|
|
3
|
+
import type { Snippet } from "svelte";
|
|
4
|
+
|
|
5
|
+
type PanelVariant = "default" | "collapsible";
|
|
6
|
+
|
|
7
|
+
interface Props {
|
|
8
|
+
title?: string;
|
|
9
|
+
level?: 1 | 2 | 3 | 4 | 5 | 6;
|
|
10
|
+
variant?: PanelVariant;
|
|
11
|
+
open?: boolean;
|
|
12
|
+
scroll?: boolean;
|
|
13
|
+
onToggle?: (open: boolean) => void;
|
|
14
|
+
actions?: Snippet;
|
|
15
|
+
footer?: Snippet;
|
|
16
|
+
children?: Snippet;
|
|
17
|
+
/** Any other attribute (`title` is taken; `id`, `data-*`, `aria-*`, …) passes through to the element. */
|
|
18
|
+
[key: string]: unknown;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
let {
|
|
22
|
+
title,
|
|
23
|
+
level = 2,
|
|
24
|
+
variant = "default",
|
|
25
|
+
open = $bindable(false),
|
|
26
|
+
scroll = false,
|
|
27
|
+
onToggle,
|
|
28
|
+
actions,
|
|
29
|
+
footer,
|
|
30
|
+
children,
|
|
31
|
+
...rest
|
|
32
|
+
}: Props = $props();
|
|
33
|
+
|
|
34
|
+
function handleToggle(event: Event) {
|
|
35
|
+
open = (event.currentTarget as HTMLElement).hasAttribute("open");
|
|
36
|
+
onToggle?.(open);
|
|
37
|
+
}
|
|
38
|
+
</script>
|
|
39
|
+
|
|
40
|
+
<xtyle-panel
|
|
41
|
+
{...rest}
|
|
42
|
+
{title}
|
|
43
|
+
level={level}
|
|
44
|
+
variant={variant}
|
|
45
|
+
open={open || undefined}
|
|
46
|
+
scroll={scroll || undefined}
|
|
47
|
+
ontoggle={handleToggle}
|
|
48
|
+
>
|
|
49
|
+
{#if actions}<span slot="actions">{@render actions()}</span>{/if}
|
|
50
|
+
{@render children?.()}
|
|
51
|
+
{#if footer}<span slot="footer">{@render footer()}</span>{/if}
|
|
52
|
+
</xtyle-panel>
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import "./register.js";
|
|
2
|
+
import type { Snippet } from "svelte";
|
|
3
|
+
type PanelVariant = "default" | "collapsible";
|
|
4
|
+
interface Props {
|
|
5
|
+
title?: string;
|
|
6
|
+
level?: 1 | 2 | 3 | 4 | 5 | 6;
|
|
7
|
+
variant?: PanelVariant;
|
|
8
|
+
open?: boolean;
|
|
9
|
+
scroll?: boolean;
|
|
10
|
+
onToggle?: (open: boolean) => void;
|
|
11
|
+
actions?: Snippet;
|
|
12
|
+
footer?: Snippet;
|
|
13
|
+
children?: Snippet;
|
|
14
|
+
/** Any other attribute (`title` is taken; `id`, `data-*`, `aria-*`, …) passes through to the element. */
|
|
15
|
+
[key: string]: unknown;
|
|
16
|
+
}
|
|
17
|
+
declare const Panel: import("svelte").Component<Props, {}, "open">;
|
|
18
|
+
type Panel = ReturnType<typeof Panel>;
|
|
19
|
+
export default Panel;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import "./register.js";
|
|
3
|
+
import type { Snippet } from "svelte";
|
|
4
|
+
|
|
5
|
+
interface Props {
|
|
6
|
+
minHeight?: string;
|
|
7
|
+
amplitude?: number;
|
|
8
|
+
mode?: "scroll" | "cursor";
|
|
9
|
+
children?: Snippet;
|
|
10
|
+
/** Any other attribute (`title`, `id`, `data-*`, `aria-*`, …) passes through to the element. */
|
|
11
|
+
[key: string]: unknown;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
let { minHeight, amplitude, mode, children, ...rest }: Props = $props();
|
|
15
|
+
</script>
|
|
16
|
+
|
|
17
|
+
<xtyle-parallax {...rest} min-height={minHeight} amplitude={amplitude} mode={mode}>
|
|
18
|
+
{@render children?.()}
|
|
19
|
+
</xtyle-parallax>
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import "./register.js";
|
|
2
|
+
import type { Snippet } from "svelte";
|
|
3
|
+
interface Props {
|
|
4
|
+
minHeight?: string;
|
|
5
|
+
amplitude?: number;
|
|
6
|
+
mode?: "scroll" | "cursor";
|
|
7
|
+
children?: Snippet;
|
|
8
|
+
/** Any other attribute (`title`, `id`, `data-*`, `aria-*`, …) passes through to the element. */
|
|
9
|
+
[key: string]: unknown;
|
|
10
|
+
}
|
|
11
|
+
declare const Parallax: import("svelte").Component<Props, {}, "">;
|
|
12
|
+
type Parallax = ReturnType<typeof Parallax>;
|
|
13
|
+
export default Parallax;
|
package/dist/Pie.svelte
ADDED
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import "./register.js";
|
|
3
|
+
import type { PieDatum, PieScheme, PieVariant } from "@xtyle/core";
|
|
4
|
+
|
|
5
|
+
interface Props {
|
|
6
|
+
data?: PieDatum[];
|
|
7
|
+
scheme?: PieScheme;
|
|
8
|
+
reverse?: boolean;
|
|
9
|
+
variant?: PieVariant;
|
|
10
|
+
showValues?: boolean;
|
|
11
|
+
legend?: boolean;
|
|
12
|
+
size?: number;
|
|
13
|
+
label?: string;
|
|
14
|
+
/** Any other attribute (`title`, `id`, `style`, `data-*`, `aria-*`, …) passes through. */
|
|
15
|
+
[key: string]: unknown;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
let {
|
|
19
|
+
data = [],
|
|
20
|
+
scheme = "skittles",
|
|
21
|
+
reverse = false,
|
|
22
|
+
variant = "pie",
|
|
23
|
+
showValues = false,
|
|
24
|
+
legend = true,
|
|
25
|
+
size = 200,
|
|
26
|
+
label,
|
|
27
|
+
...rest
|
|
28
|
+
}: Props = $props();
|
|
29
|
+
|
|
30
|
+
let host: (HTMLElement & { data: PieDatum[]; scheme: PieScheme }) | undefined = $state();
|
|
31
|
+
|
|
32
|
+
$effect(() => {
|
|
33
|
+
if (!host) return;
|
|
34
|
+
host.data = data;
|
|
35
|
+
host.scheme = scheme;
|
|
36
|
+
});
|
|
37
|
+
</script>
|
|
38
|
+
|
|
39
|
+
<xtyle-pie
|
|
40
|
+
bind:this={host}
|
|
41
|
+
{...rest}
|
|
42
|
+
{variant}
|
|
43
|
+
reverse={reverse || undefined}
|
|
44
|
+
show-values={showValues || undefined}
|
|
45
|
+
legend={legend ? undefined : "false"}
|
|
46
|
+
{size}
|
|
47
|
+
{label}
|
|
48
|
+
></xtyle-pie>
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import "./register.js";
|
|
2
|
+
import type { PieDatum, PieScheme, PieVariant } from "@xtyle/core";
|
|
3
|
+
interface Props {
|
|
4
|
+
data?: PieDatum[];
|
|
5
|
+
scheme?: PieScheme;
|
|
6
|
+
reverse?: boolean;
|
|
7
|
+
variant?: PieVariant;
|
|
8
|
+
showValues?: boolean;
|
|
9
|
+
legend?: boolean;
|
|
10
|
+
size?: number;
|
|
11
|
+
label?: string;
|
|
12
|
+
/** Any other attribute (`title`, `id`, `style`, `data-*`, `aria-*`, …) passes through. */
|
|
13
|
+
[key: string]: unknown;
|
|
14
|
+
}
|
|
15
|
+
declare const Pie: import("svelte").Component<Props, {}, "">;
|
|
16
|
+
type Pie = ReturnType<typeof Pie>;
|
|
17
|
+
export default Pie;
|