@sentropic/design-system-svelte 0.3.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.
Files changed (82) hide show
  1. package/dist/Alert.svelte +92 -0
  2. package/dist/Alert.svelte.d.ts +14 -0
  3. package/dist/Alert.svelte.d.ts.map +1 -0
  4. package/dist/Badge.svelte +55 -0
  5. package/dist/Badge.svelte.d.ts +11 -0
  6. package/dist/Badge.svelte.d.ts.map +1 -0
  7. package/dist/Breadcrumb.svelte +67 -0
  8. package/dist/Breadcrumb.svelte.d.ts +15 -0
  9. package/dist/Breadcrumb.svelte.d.ts.map +1 -0
  10. package/dist/Button.svelte +99 -0
  11. package/dist/Button.svelte.d.ts +14 -0
  12. package/dist/Button.svelte.d.ts.map +1 -0
  13. package/dist/Card.svelte +42 -0
  14. package/dist/Card.svelte.d.ts +11 -0
  15. package/dist/Card.svelte.d.ts.map +1 -0
  16. package/dist/Checkbox.svelte +56 -0
  17. package/dist/Checkbox.svelte.d.ts +11 -0
  18. package/dist/Checkbox.svelte.d.ts.map +1 -0
  19. package/dist/Drawer.svelte +135 -0
  20. package/dist/Drawer.svelte.d.ts +17 -0
  21. package/dist/Drawer.svelte.d.ts.map +1 -0
  22. package/dist/Dropdown.svelte +158 -0
  23. package/dist/Dropdown.svelte.d.ts +19 -0
  24. package/dist/Dropdown.svelte.d.ts.map +1 -0
  25. package/dist/EmptyState.svelte +65 -0
  26. package/dist/EmptyState.svelte.d.ts +13 -0
  27. package/dist/EmptyState.svelte.d.ts.map +1 -0
  28. package/dist/Input.svelte +121 -0
  29. package/dist/Input.svelte.d.ts +13 -0
  30. package/dist/Input.svelte.d.ts.map +1 -0
  31. package/dist/Link.svelte +90 -0
  32. package/dist/Link.svelte.d.ts +17 -0
  33. package/dist/Link.svelte.d.ts.map +1 -0
  34. package/dist/LoadingState.svelte +77 -0
  35. package/dist/LoadingState.svelte.d.ts +10 -0
  36. package/dist/LoadingState.svelte.d.ts.map +1 -0
  37. package/dist/Menu.svelte +72 -0
  38. package/dist/Menu.svelte.d.ts +16 -0
  39. package/dist/Menu.svelte.d.ts.map +1 -0
  40. package/dist/Modal.svelte +123 -0
  41. package/dist/Modal.svelte.d.ts +16 -0
  42. package/dist/Modal.svelte.d.ts.map +1 -0
  43. package/dist/Pagination.svelte +75 -0
  44. package/dist/Pagination.svelte.d.ts +13 -0
  45. package/dist/Pagination.svelte.d.ts.map +1 -0
  46. package/dist/Popover.svelte +74 -0
  47. package/dist/Popover.svelte.d.ts +14 -0
  48. package/dist/Popover.svelte.d.ts.map +1 -0
  49. package/dist/Radio.svelte +51 -0
  50. package/dist/Radio.svelte.d.ts +11 -0
  51. package/dist/Radio.svelte.d.ts.map +1 -0
  52. package/dist/Select.svelte +109 -0
  53. package/dist/Select.svelte.d.ts +15 -0
  54. package/dist/Select.svelte.d.ts.map +1 -0
  55. package/dist/SideNav.svelte +63 -0
  56. package/dist/SideNav.svelte.d.ts +15 -0
  57. package/dist/SideNav.svelte.d.ts.map +1 -0
  58. package/dist/Switch.svelte +88 -0
  59. package/dist/Switch.svelte.d.ts +10 -0
  60. package/dist/Switch.svelte.d.ts.map +1 -0
  61. package/dist/Table.svelte +104 -0
  62. package/dist/Table.svelte.d.ts +17 -0
  63. package/dist/Table.svelte.d.ts.map +1 -0
  64. package/dist/Tabs.svelte +102 -0
  65. package/dist/Tabs.svelte.d.ts +18 -0
  66. package/dist/Tabs.svelte.d.ts.map +1 -0
  67. package/dist/Textarea.svelte +97 -0
  68. package/dist/Textarea.svelte.d.ts +12 -0
  69. package/dist/Textarea.svelte.d.ts.map +1 -0
  70. package/dist/ThemeProvider.svelte +22 -0
  71. package/dist/ThemeProvider.svelte.d.ts +11 -0
  72. package/dist/ThemeProvider.svelte.d.ts.map +1 -0
  73. package/dist/Toast.svelte +84 -0
  74. package/dist/Toast.svelte.d.ts +13 -0
  75. package/dist/Toast.svelte.d.ts.map +1 -0
  76. package/dist/Tooltip.svelte +66 -0
  77. package/dist/Tooltip.svelte.d.ts +12 -0
  78. package/dist/Tooltip.svelte.d.ts.map +1 -0
  79. package/dist/index.d.ts +33 -0
  80. package/dist/index.d.ts.map +1 -0
  81. package/dist/index.js +26 -0
  82. package/package.json +47 -0
@@ -0,0 +1,92 @@
1
+ <script lang="ts">
2
+ import type { Snippet } from "svelte";
3
+ import type { HTMLAttributes } from "svelte/elements";
4
+
5
+ type AlertProps = Omit<HTMLAttributes<HTMLElement>, "class"> & {
6
+ tone?: "info" | "success" | "warning" | "error";
7
+ title: string;
8
+ message?: string;
9
+ class?: string;
10
+ actions?: Snippet;
11
+ children?: Snippet;
12
+ };
13
+
14
+ let {
15
+ tone = "info",
16
+ title,
17
+ message,
18
+ class: className,
19
+ actions,
20
+ children,
21
+ ...rest
22
+ }: AlertProps = $props();
23
+
24
+ const classes = () => ["st-alert", `st-alert--${tone}`, className].filter(Boolean).join(" ");
25
+ const role = () => (tone === "error" || tone === "warning" ? "alert" : "status");
26
+ </script>
27
+
28
+ <section {...rest} class={classes()} role={role()}>
29
+ <div class="st-alert__content">
30
+ <h2 class="st-alert__title">{title}</h2>
31
+ {#if message}<p class="st-alert__message">{message}</p>{/if}
32
+ {@render children?.()}
33
+ </div>
34
+ {#if actions}
35
+ <div class="st-alert__actions">
36
+ {@render actions()}
37
+ </div>
38
+ {/if}
39
+ </section>
40
+
41
+ <style>
42
+ .st-alert {
43
+ background: var(--st-component-alert-background, var(--st-semantic-surface-raised));
44
+ border: 1px solid var(--st-component-alert-border, var(--st-semantic-border-subtle));
45
+ border-left-width: 0.25rem;
46
+ border-radius: var(--st-component-alert-radius, 0.5rem);
47
+ color: var(--st-component-alert-text, var(--st-semantic-text-primary));
48
+ display: flex;
49
+ gap: var(--st-spacing-4, 1rem);
50
+ justify-content: space-between;
51
+ padding: var(--st-spacing-4, 1rem);
52
+ }
53
+
54
+ .st-alert--info {
55
+ border-left-color: var(--st-component-alert-infoBorder, var(--st-semantic-feedback-info));
56
+ }
57
+
58
+ .st-alert--success {
59
+ border-left-color: var(--st-component-alert-successBorder, var(--st-semantic-feedback-success));
60
+ }
61
+
62
+ .st-alert--warning {
63
+ border-left-color: var(--st-component-alert-warningBorder, var(--st-semantic-feedback-warning));
64
+ }
65
+
66
+ .st-alert--error {
67
+ border-left-color: var(--st-component-alert-errorBorder, var(--st-semantic-feedback-error));
68
+ }
69
+
70
+ .st-alert__content {
71
+ display: grid;
72
+ gap: var(--st-spacing-1, 0.25rem);
73
+ }
74
+
75
+ .st-alert__title {
76
+ font-size: 0.9375rem;
77
+ margin: 0;
78
+ }
79
+
80
+ .st-alert__message {
81
+ color: var(--st-semantic-text-secondary);
82
+ font-size: 0.875rem;
83
+ line-height: 1.5;
84
+ margin: 0;
85
+ }
86
+
87
+ .st-alert__actions {
88
+ align-items: start;
89
+ display: flex;
90
+ gap: var(--st-spacing-2, 0.5rem);
91
+ }
92
+ </style>
@@ -0,0 +1,14 @@
1
+ import type { Snippet } from "svelte";
2
+ import type { HTMLAttributes } from "svelte/elements";
3
+ type AlertProps = Omit<HTMLAttributes<HTMLElement>, "class"> & {
4
+ tone?: "info" | "success" | "warning" | "error";
5
+ title: string;
6
+ message?: string;
7
+ class?: string;
8
+ actions?: Snippet;
9
+ children?: Snippet;
10
+ };
11
+ declare const Alert: import("svelte").Component<AlertProps, {}, "">;
12
+ type Alert = ReturnType<typeof Alert>;
13
+ export default Alert;
14
+ //# sourceMappingURL=Alert.svelte.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Alert.svelte.d.ts","sourceRoot":"","sources":["../src/lib/Alert.svelte.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAGpD,KAAK,UAAU,GAAG,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,EAAE,OAAO,CAAC,GAAG;IAC7D,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,CAAC;IAChD,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB,CAAC;AAqCJ,QAAA,MAAM,KAAK,gDAAwC,CAAC;AACpD,KAAK,KAAK,GAAG,UAAU,CAAC,OAAO,KAAK,CAAC,CAAC;AACtC,eAAe,KAAK,CAAC"}
@@ -0,0 +1,55 @@
1
+ <script lang="ts">
2
+ import type { Snippet } from "svelte";
3
+ import type { HTMLAttributes } from "svelte/elements";
4
+
5
+ type BadgeProps = Omit<HTMLAttributes<HTMLSpanElement>, "class"> & {
6
+ tone?: "neutral" | "success" | "warning" | "error" | "info";
7
+ class?: string;
8
+ children?: Snippet;
9
+ };
10
+
11
+ let { tone = "neutral", class: className, children, ...rest }: BadgeProps = $props();
12
+
13
+ const classes = () => ["st-badge", `st-badge--${tone}`, className].filter(Boolean).join(" ");
14
+ </script>
15
+
16
+ <span {...rest} class={classes()}>
17
+ {@render children?.()}
18
+ </span>
19
+
20
+ <style>
21
+ .st-badge {
22
+ display: inline-flex;
23
+ align-items: center;
24
+ border-radius: var(--st-radius-pill, 999px);
25
+ font-size: 0.75rem;
26
+ font-weight: 650;
27
+ line-height: 1;
28
+ padding: 0.25rem 0.5rem;
29
+ }
30
+
31
+ .st-badge--neutral {
32
+ background: var(--st-semantic-surface-subtle);
33
+ color: var(--st-semantic-text-secondary);
34
+ }
35
+
36
+ .st-badge--success {
37
+ background: color-mix(in srgb, var(--st-semantic-feedback-success) 14%, white);
38
+ color: var(--st-semantic-feedback-success);
39
+ }
40
+
41
+ .st-badge--warning {
42
+ background: color-mix(in srgb, var(--st-semantic-feedback-warning) 14%, white);
43
+ color: var(--st-semantic-feedback-warning);
44
+ }
45
+
46
+ .st-badge--error {
47
+ background: color-mix(in srgb, var(--st-semantic-feedback-error) 14%, white);
48
+ color: var(--st-semantic-feedback-error);
49
+ }
50
+
51
+ .st-badge--info {
52
+ background: color-mix(in srgb, var(--st-semantic-feedback-info) 14%, white);
53
+ color: var(--st-semantic-feedback-info);
54
+ }
55
+ </style>
@@ -0,0 +1,11 @@
1
+ import type { Snippet } from "svelte";
2
+ import type { HTMLAttributes } from "svelte/elements";
3
+ type BadgeProps = Omit<HTMLAttributes<HTMLSpanElement>, "class"> & {
4
+ tone?: "neutral" | "success" | "warning" | "error" | "info";
5
+ class?: string;
6
+ children?: Snippet;
7
+ };
8
+ declare const Badge: import("svelte").Component<BadgeProps, {}, "">;
9
+ type Badge = ReturnType<typeof Badge>;
10
+ export default Badge;
11
+ //# sourceMappingURL=Badge.svelte.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Badge.svelte.d.ts","sourceRoot":"","sources":["../src/lib/Badge.svelte.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAGpD,KAAK,UAAU,GAAG,IAAI,CAAC,cAAc,CAAC,eAAe,CAAC,EAAE,OAAO,CAAC,GAAG;IACjE,IAAI,CAAC,EAAE,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,GAAG,MAAM,CAAC;IAC5D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB,CAAC;AAmBJ,QAAA,MAAM,KAAK,gDAAwC,CAAC;AACpD,KAAK,KAAK,GAAG,UAAU,CAAC,OAAO,KAAK,CAAC,CAAC;AACtC,eAAe,KAAK,CAAC"}
@@ -0,0 +1,67 @@
1
+ <script lang="ts" module>
2
+ export interface BreadcrumbItem {
3
+ label: string;
4
+ href?: string;
5
+ current?: boolean;
6
+ }
7
+ </script>
8
+
9
+ <script lang="ts">
10
+ import type { HTMLAttributes } from "svelte/elements";
11
+
12
+ type BreadcrumbProps = Omit<HTMLAttributes<HTMLElement>, "class"> & {
13
+ items: BreadcrumbItem[];
14
+ label?: string;
15
+ class?: string;
16
+ };
17
+
18
+ let { items, label = "Breadcrumb", class: className, ...rest }: BreadcrumbProps = $props();
19
+ const classes = () => ["st-breadcrumb", className].filter(Boolean).join(" ");
20
+ </script>
21
+
22
+ <nav {...rest} class={classes()} aria-label={label}>
23
+ <ol>
24
+ {#each items as item, index}
25
+ <li>
26
+ {#if item.href && !item.current}
27
+ <a href={item.href}>{item.label}</a>
28
+ {:else}
29
+ <span aria-current={item.current ? "page" : undefined}>{item.label}</span>
30
+ {/if}
31
+ {#if index < items.length - 1}<span class="st-breadcrumb__separator" aria-hidden="true">/</span>{/if}
32
+ </li>
33
+ {/each}
34
+ </ol>
35
+ </nav>
36
+
37
+ <style>
38
+ .st-breadcrumb ol {
39
+ align-items: center;
40
+ display: flex;
41
+ flex-wrap: wrap;
42
+ gap: var(--st-spacing-2, 0.5rem);
43
+ list-style: none;
44
+ margin: 0;
45
+ padding: 0;
46
+ }
47
+
48
+ .st-breadcrumb li {
49
+ align-items: center;
50
+ color: var(--st-component-breadcrumb-text, var(--st-semantic-text-secondary));
51
+ display: inline-flex;
52
+ gap: var(--st-spacing-2, 0.5rem);
53
+ }
54
+
55
+ .st-breadcrumb a {
56
+ color: var(--st-component-breadcrumb-linkText, var(--st-semantic-text-link));
57
+ }
58
+
59
+ .st-breadcrumb [aria-current="page"] {
60
+ color: var(--st-component-breadcrumb-currentText, var(--st-semantic-text-primary));
61
+ font-weight: 600;
62
+ }
63
+
64
+ .st-breadcrumb__separator {
65
+ color: var(--st-component-breadcrumb-separator, var(--st-semantic-text-muted));
66
+ }
67
+ </style>
@@ -0,0 +1,15 @@
1
+ export interface BreadcrumbItem {
2
+ label: string;
3
+ href?: string;
4
+ current?: boolean;
5
+ }
6
+ import type { HTMLAttributes } from "svelte/elements";
7
+ type BreadcrumbProps = Omit<HTMLAttributes<HTMLElement>, "class"> & {
8
+ items: BreadcrumbItem[];
9
+ label?: string;
10
+ class?: string;
11
+ };
12
+ declare const Breadcrumb: import("svelte").Component<BreadcrumbProps, {}, "">;
13
+ type Breadcrumb = ReturnType<typeof Breadcrumb>;
14
+ export default Breadcrumb;
15
+ //# sourceMappingURL=Breadcrumb.svelte.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Breadcrumb.svelte.d.ts","sourceRoot":"","sources":["../src/lib/Breadcrumb.svelte.ts"],"names":[],"mappings":"AAGE,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAGH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAGpD,KAAK,eAAe,GAAG,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,EAAE,OAAO,CAAC,GAAG;IAClE,KAAK,EAAE,cAAc,EAAE,CAAC;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AA8BJ,QAAA,MAAM,UAAU,qDAAwC,CAAC;AACzD,KAAK,UAAU,GAAG,UAAU,CAAC,OAAO,UAAU,CAAC,CAAC;AAChD,eAAe,UAAU,CAAC"}
@@ -0,0 +1,99 @@
1
+ <script lang="ts">
2
+ import type { Snippet } from "svelte";
3
+ import type { HTMLButtonAttributes } from "svelte/elements";
4
+
5
+ type ButtonProps = Omit<HTMLButtonAttributes, "class" | "disabled" | "type"> & {
6
+ variant?: "primary" | "secondary" | "ghost" | "danger";
7
+ size?: "sm" | "md" | "lg";
8
+ disabled?: boolean;
9
+ type?: "button" | "submit" | "reset";
10
+ class?: string;
11
+ children?: Snippet;
12
+ };
13
+
14
+ let {
15
+ variant = "primary",
16
+ size = "md",
17
+ disabled = false,
18
+ type = "button",
19
+ class: className,
20
+ children,
21
+ ...rest
22
+ }: ButtonProps = $props();
23
+
24
+ const classes = () =>
25
+ ["st-button", `st-button--${variant}`, `st-button--${size}`, className]
26
+ .filter(Boolean)
27
+ .join(" ");
28
+ </script>
29
+
30
+ <button {...rest} class={classes()} {type} {disabled}>
31
+ {@render children?.()}
32
+ </button>
33
+
34
+ <style>
35
+ .st-button {
36
+ border: 1px solid transparent;
37
+ border-radius: var(--st-component-button-radius, 0.375rem);
38
+ cursor: pointer;
39
+ display: inline-flex;
40
+ align-items: center;
41
+ justify-content: center;
42
+ gap: var(--st-spacing-2, 0.5rem);
43
+ font: inherit;
44
+ font-weight: 600;
45
+ transition:
46
+ background var(--st-motion-fast, 120ms) var(--st-motion-easing, ease),
47
+ border-color var(--st-motion-fast, 120ms) var(--st-motion-easing, ease),
48
+ color var(--st-motion-fast, 120ms) var(--st-motion-easing, ease);
49
+ }
50
+
51
+ .st-button--sm {
52
+ min-height: 2rem;
53
+ padding: 0 0.75rem;
54
+ font-size: 0.875rem;
55
+ }
56
+
57
+ .st-button--md {
58
+ min-height: 2.5rem;
59
+ padding: 0 1rem;
60
+ font-size: 0.9375rem;
61
+ }
62
+
63
+ .st-button--lg {
64
+ min-height: 3rem;
65
+ padding: 0 1.25rem;
66
+ font-size: 1rem;
67
+ }
68
+
69
+ .st-button--primary {
70
+ background: var(--st-component-button-primaryBackground, var(--st-semantic-action-primary));
71
+ color: var(--st-component-button-primaryText, var(--st-semantic-action-primaryText));
72
+ }
73
+
74
+ .st-button--secondary {
75
+ background: var(--st-component-button-secondaryBackground, var(--st-semantic-action-secondary));
76
+ color: var(--st-component-button-secondaryText, var(--st-semantic-action-secondaryText));
77
+ border-color: var(--st-semantic-border-subtle);
78
+ }
79
+
80
+ .st-button--ghost {
81
+ background: transparent;
82
+ color: var(--st-semantic-text-link);
83
+ }
84
+
85
+ .st-button--danger {
86
+ background: var(--st-semantic-action-danger);
87
+ color: var(--st-semantic-text-inverse);
88
+ }
89
+
90
+ .st-button:disabled {
91
+ cursor: not-allowed;
92
+ opacity: 0.55;
93
+ }
94
+
95
+ .st-button:focus-visible {
96
+ outline: 2px solid var(--st-component-input-focusRing, var(--st-semantic-border-interactive));
97
+ outline-offset: 2px;
98
+ }
99
+ </style>
@@ -0,0 +1,14 @@
1
+ import type { Snippet } from "svelte";
2
+ import type { HTMLButtonAttributes } from "svelte/elements";
3
+ type ButtonProps = Omit<HTMLButtonAttributes, "class" | "disabled" | "type"> & {
4
+ variant?: "primary" | "secondary" | "ghost" | "danger";
5
+ size?: "sm" | "md" | "lg";
6
+ disabled?: boolean;
7
+ type?: "button" | "submit" | "reset";
8
+ class?: string;
9
+ children?: Snippet;
10
+ };
11
+ declare const Button: import("svelte").Component<ButtonProps, {}, "">;
12
+ type Button = ReturnType<typeof Button>;
13
+ export default Button;
14
+ //# sourceMappingURL=Button.svelte.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Button.svelte.d.ts","sourceRoot":"","sources":["../src/lib/Button.svelte.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAG1D,KAAK,WAAW,GAAG,IAAI,CAAC,oBAAoB,EAAE,OAAO,GAAG,UAAU,GAAG,MAAM,CAAC,GAAG;IAC7E,OAAO,CAAC,EAAE,SAAS,GAAG,WAAW,GAAG,OAAO,GAAG,QAAQ,CAAC;IACvD,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;IAC1B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,IAAI,CAAC,EAAE,QAAQ,GAAG,QAAQ,GAAG,OAAO,CAAC;IACrC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB,CAAC;AA8BJ,QAAA,MAAM,MAAM,iDAAwC,CAAC;AACrD,KAAK,MAAM,GAAG,UAAU,CAAC,OAAO,MAAM,CAAC,CAAC;AACxC,eAAe,MAAM,CAAC"}
@@ -0,0 +1,42 @@
1
+ <script lang="ts">
2
+ import type { Snippet } from "svelte";
3
+ import type { HTMLAttributes } from "svelte/elements";
4
+
5
+ type CardProps = Omit<HTMLAttributes<HTMLElement>, "class"> & {
6
+ interactive?: boolean;
7
+ class?: string;
8
+ children?: Snippet;
9
+ };
10
+
11
+ let { interactive = false, class: className, children, ...rest }: CardProps = $props();
12
+
13
+ const classes = () =>
14
+ ["st-card", interactive && "st-card--interactive", className].filter(Boolean).join(" ");
15
+ </script>
16
+
17
+ <section {...rest} class={classes()}>
18
+ {@render children?.()}
19
+ </section>
20
+
21
+ <style>
22
+ .st-card {
23
+ background: var(--st-component-card-background, var(--st-semantic-surface-raised));
24
+ border: 1px solid var(--st-component-card-border, var(--st-semantic-border-subtle));
25
+ border-radius: var(--st-component-card-radius, 0.5rem);
26
+ box-shadow: var(--st-component-card-shadow, 0 1px 2px rgb(15 23 42 / 0.08));
27
+ color: var(--st-semantic-text-primary);
28
+ padding: var(--st-spacing-4, 1rem);
29
+ }
30
+
31
+ .st-card--interactive {
32
+ cursor: pointer;
33
+ transition:
34
+ box-shadow var(--st-motion-normal, 180ms) var(--st-motion-easing, ease),
35
+ transform var(--st-motion-normal, 180ms) var(--st-motion-easing, ease);
36
+ }
37
+
38
+ .st-card--interactive:hover {
39
+ box-shadow: var(--st-shadow-medium, 0 8px 24px rgb(15 23 42 / 0.12));
40
+ transform: translateY(-1px);
41
+ }
42
+ </style>
@@ -0,0 +1,11 @@
1
+ import type { Snippet } from "svelte";
2
+ import type { HTMLAttributes } from "svelte/elements";
3
+ type CardProps = Omit<HTMLAttributes<HTMLElement>, "class"> & {
4
+ interactive?: boolean;
5
+ class?: string;
6
+ children?: Snippet;
7
+ };
8
+ declare const Card: import("svelte").Component<CardProps, {}, "">;
9
+ type Card = ReturnType<typeof Card>;
10
+ export default Card;
11
+ //# sourceMappingURL=Card.svelte.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Card.svelte.d.ts","sourceRoot":"","sources":["../src/lib/Card.svelte.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAGpD,KAAK,SAAS,GAAG,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,EAAE,OAAO,CAAC,GAAG;IAC5D,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB,CAAC;AAoBJ,QAAA,MAAM,IAAI,+CAAwC,CAAC;AACnD,KAAK,IAAI,GAAG,UAAU,CAAC,OAAO,IAAI,CAAC,CAAC;AACpC,eAAe,IAAI,CAAC"}
@@ -0,0 +1,56 @@
1
+ <script lang="ts">
2
+ import type { HTMLInputAttributes } from "svelte/elements";
3
+
4
+ type CheckboxProps = Omit<HTMLInputAttributes, "class" | "type"> & {
5
+ label: string;
6
+ helperText?: string;
7
+ invalid?: boolean;
8
+ class?: string;
9
+ };
10
+
11
+ let { label, helperText, invalid = false, class: className, ...rest }: CheckboxProps = $props();
12
+ const classes = () => ["st-choice", className].filter(Boolean).join(" ");
13
+ </script>
14
+
15
+ <label class={classes()}>
16
+ <input {...rest} class="st-choice__input" type="checkbox" aria-invalid={invalid ? "true" : undefined} />
17
+ <span class="st-choice__box" aria-hidden="true"></span>
18
+ <span class="st-choice__content">
19
+ <span class="st-choice__label">{label}</span>
20
+ {#if helperText}<span class="st-choice__help">{helperText}</span>{/if}
21
+ </span>
22
+ </label>
23
+
24
+ <style>
25
+ .st-choice {
26
+ align-items: start;
27
+ color: var(--st-component-field-labelText, var(--st-semantic-text-primary));
28
+ display: inline-grid;
29
+ gap: 0.625rem;
30
+ grid-template-columns: auto 1fr;
31
+ }
32
+
33
+ .st-choice__input {
34
+ height: 1rem;
35
+ margin: 0.125rem 0 0;
36
+ width: 1rem;
37
+ }
38
+
39
+ .st-choice__box {
40
+ display: none;
41
+ }
42
+
43
+ .st-choice__content {
44
+ display: grid;
45
+ gap: 0.25rem;
46
+ }
47
+
48
+ .st-choice__label {
49
+ font-size: 0.9375rem;
50
+ }
51
+
52
+ .st-choice__help {
53
+ color: var(--st-component-field-helpText, var(--st-semantic-text-secondary));
54
+ font-size: 0.8125rem;
55
+ }
56
+ </style>
@@ -0,0 +1,11 @@
1
+ import type { HTMLInputAttributes } from "svelte/elements";
2
+ type CheckboxProps = Omit<HTMLInputAttributes, "class" | "type"> & {
3
+ label: string;
4
+ helperText?: string;
5
+ invalid?: boolean;
6
+ class?: string;
7
+ };
8
+ declare const Checkbox: import("svelte").Component<CheckboxProps, {}, "">;
9
+ type Checkbox = ReturnType<typeof Checkbox>;
10
+ export default Checkbox;
11
+ //# sourceMappingURL=Checkbox.svelte.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Checkbox.svelte.d.ts","sourceRoot":"","sources":["../src/lib/Checkbox.svelte.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAGzD,KAAK,aAAa,GAAG,IAAI,CAAC,mBAAmB,EAAE,OAAO,GAAG,MAAM,CAAC,GAAG;IACjE,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAsBJ,QAAA,MAAM,QAAQ,mDAAwC,CAAC;AACvD,KAAK,QAAQ,GAAG,UAAU,CAAC,OAAO,QAAQ,CAAC,CAAC;AAC5C,eAAe,QAAQ,CAAC"}
@@ -0,0 +1,135 @@
1
+ <script lang="ts">
2
+ import type { Snippet } from "svelte";
3
+ import type { HTMLAttributes } from "svelte/elements";
4
+
5
+ type DrawerProps = Omit<HTMLAttributes<HTMLElement>, "class"> & {
6
+ open?: boolean;
7
+ title: string;
8
+ description?: string;
9
+ side?: "left" | "right";
10
+ closeLabel?: string;
11
+ class?: string;
12
+ children?: Snippet;
13
+ footer?: Snippet;
14
+ onclose?: () => void;
15
+ };
16
+
17
+ let {
18
+ open = false,
19
+ title,
20
+ description,
21
+ side = "right",
22
+ closeLabel = "Close",
23
+ class: className,
24
+ children,
25
+ footer,
26
+ onclose,
27
+ ...rest
28
+ }: DrawerProps = $props();
29
+
30
+ const classes = () => ["st-drawer", `st-drawer--${side}`, className].filter(Boolean).join(" ");
31
+ </script>
32
+
33
+ {#if open}
34
+ <div class="st-drawer__backdrop">
35
+ <aside {...rest} class={classes()} role="dialog" aria-modal="true" aria-label={title}>
36
+ <header class="st-drawer__header">
37
+ <div>
38
+ <h2 class="st-drawer__title">{title}</h2>
39
+ {#if description}<p class="st-drawer__description">{description}</p>{/if}
40
+ </div>
41
+ <button class="st-drawer__close" type="button" aria-label={closeLabel} onclick={onclose}>
42
+ <span aria-hidden="true">x</span>
43
+ </button>
44
+ </header>
45
+ <div class="st-drawer__body">
46
+ {@render children?.()}
47
+ </div>
48
+ {#if footer}
49
+ <footer class="st-drawer__footer">
50
+ {@render footer()}
51
+ </footer>
52
+ {/if}
53
+ </aside>
54
+ </div>
55
+ {/if}
56
+
57
+ <style>
58
+ .st-drawer__backdrop {
59
+ background: var(--st-component-drawer-backdrop, var(--st-semantic-surface-overlay));
60
+ inset: 0;
61
+ position: fixed;
62
+ z-index: var(--st-component-drawer-zIndex, 90);
63
+ }
64
+
65
+ .st-drawer {
66
+ background: var(--st-component-drawer-surface, var(--st-semantic-surface-raised));
67
+ border-color: var(--st-component-drawer-border, var(--st-semantic-border-subtle));
68
+ box-shadow: var(--st-component-drawer-shadow, 0 18px 45px rgb(15 23 42 / 0.18));
69
+ color: var(--st-semantic-text-primary);
70
+ display: grid;
71
+ grid-template-rows: auto 1fr auto;
72
+ height: 100%;
73
+ max-width: min(100vw, var(--st-component-drawer-width, 24rem));
74
+ padding: var(--st-spacing-4, 1rem);
75
+ position: absolute;
76
+ top: 0;
77
+ width: var(--st-component-drawer-width, 24rem);
78
+ }
79
+
80
+ .st-drawer--right {
81
+ border-left-style: solid;
82
+ border-left-width: 1px;
83
+ right: 0;
84
+ }
85
+
86
+ .st-drawer--left {
87
+ border-right-style: solid;
88
+ border-right-width: 1px;
89
+ left: 0;
90
+ }
91
+
92
+ .st-drawer__header {
93
+ align-items: start;
94
+ display: flex;
95
+ gap: var(--st-spacing-4, 1rem);
96
+ justify-content: space-between;
97
+ }
98
+
99
+ .st-drawer__title {
100
+ font-size: 1.125rem;
101
+ line-height: 1.3;
102
+ margin: 0;
103
+ }
104
+
105
+ .st-drawer__description {
106
+ color: var(--st-semantic-text-secondary);
107
+ line-height: 1.5;
108
+ margin: 0.5rem 0 0;
109
+ }
110
+
111
+ .st-drawer__close {
112
+ align-items: center;
113
+ background: transparent;
114
+ border: 1px solid var(--st-semantic-border-subtle);
115
+ border-radius: var(--st-radius-small, 0.375rem);
116
+ color: var(--st-semantic-text-primary);
117
+ cursor: pointer;
118
+ display: inline-flex;
119
+ height: 2rem;
120
+ justify-content: center;
121
+ width: 2rem;
122
+ }
123
+
124
+ .st-drawer__body {
125
+ line-height: 1.5;
126
+ overflow: auto;
127
+ padding-block: var(--st-spacing-4, 1rem);
128
+ }
129
+
130
+ .st-drawer__footer {
131
+ display: flex;
132
+ gap: var(--st-spacing-2, 0.5rem);
133
+ justify-content: flex-end;
134
+ }
135
+ </style>
@@ -0,0 +1,17 @@
1
+ import type { Snippet } from "svelte";
2
+ import type { HTMLAttributes } from "svelte/elements";
3
+ type DrawerProps = Omit<HTMLAttributes<HTMLElement>, "class"> & {
4
+ open?: boolean;
5
+ title: string;
6
+ description?: string;
7
+ side?: "left" | "right";
8
+ closeLabel?: string;
9
+ class?: string;
10
+ children?: Snippet;
11
+ footer?: Snippet;
12
+ onclose?: () => void;
13
+ };
14
+ declare const Drawer: import("svelte").Component<DrawerProps, {}, "">;
15
+ type Drawer = ReturnType<typeof Drawer>;
16
+ export default Drawer;
17
+ //# sourceMappingURL=Drawer.svelte.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Drawer.svelte.d.ts","sourceRoot":"","sources":["../src/lib/Drawer.svelte.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAGpD,KAAK,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,EAAE,OAAO,CAAC,GAAG;IAC9D,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;CACtB,CAAC;AAkDJ,QAAA,MAAM,MAAM,iDAAwC,CAAC;AACrD,KAAK,MAAM,GAAG,UAAU,CAAC,OAAO,MAAM,CAAC,CAAC;AACxC,eAAe,MAAM,CAAC"}