svelte-comp 1.3.3 → 1.3.6
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/LICENSE.md +21 -21
- package/README.md +101 -100
- package/dist/App.svelte +507 -507
- package/dist/Container.svelte +59 -59
- package/dist/app.css +234 -235
- package/dist/app.d.ts +10 -0
- package/dist/lib/Accordion.svelte +155 -155
- package/dist/lib/Badge.svelte +44 -44
- package/dist/lib/Button.svelte +185 -170
- package/dist/lib/Calendar.svelte +384 -384
- package/dist/lib/Card.svelte +103 -103
- package/dist/lib/Carousel.svelte +293 -293
- package/dist/lib/Carousel.svelte.d.ts +1 -1
- package/dist/lib/CheckBox.svelte +210 -210
- package/dist/lib/CodeView.svelte +308 -307
- package/dist/lib/ColorPicker.svelte +159 -159
- package/dist/lib/ContextMenu.svelte +328 -322
- package/dist/lib/DatePicker.svelte +246 -246
- package/dist/lib/Dialog.svelte +233 -233
- package/dist/lib/Field.svelte +299 -299
- package/dist/lib/FilePicker.svelte +295 -240
- package/dist/lib/FilePicker.svelte.d.ts +6 -1
- package/dist/lib/Form.svelte +438 -438
- package/dist/lib/Hamburger.svelte +217 -217
- package/dist/lib/InstallPWA.svelte +94 -94
- package/dist/lib/Menu.svelte +623 -623
- package/dist/lib/NoticeBase.svelte +140 -140
- package/dist/lib/PaginatedCard.svelte +73 -73
- package/dist/lib/Pagination.svelte +119 -119
- package/dist/lib/PrimaryColorSelect.svelte +111 -111
- package/dist/lib/ProgressBar.svelte +141 -141
- package/dist/lib/ProgressCircle.svelte +190 -190
- package/dist/lib/Radio.svelte +189 -189
- package/dist/lib/SearchInput.svelte +104 -104
- package/dist/lib/Select.svelte +524 -524
- package/dist/lib/Slider.svelte +253 -253
- package/dist/lib/Splitter.svelte +159 -150
- package/dist/lib/Switch.svelte +168 -167
- package/dist/lib/Table.svelte +299 -299
- package/dist/lib/Tabs.svelte +213 -213
- package/dist/lib/ThemeToggle.svelte +128 -127
- package/dist/lib/TimePicker.svelte +312 -312
- package/dist/lib/TimePickerNew.svelte +634 -0
- package/dist/lib/TimePickerNew.svelte.d.ts +49 -0
- package/dist/lib/Toast.svelte +123 -123
- package/dist/lib/Tooltip.svelte +110 -110
- package/dist/lib/Topbar.svelte +107 -107
- package/dist/lib/__tests__/Accordion.test.d.ts +1 -0
- package/dist/lib/__tests__/Accordion.test.js +171 -0
- package/dist/lib/__tests__/Badge.test.d.ts +1 -0
- package/dist/lib/__tests__/Badge.test.js +41 -0
- package/dist/lib/__tests__/Button.test.d.ts +1 -0
- package/dist/lib/__tests__/Button.test.js +269 -0
- package/dist/lib/__tests__/Calendar.test.d.ts +1 -0
- package/dist/lib/__tests__/Calendar.test.js +171 -0
- package/dist/lib/__tests__/Card.test.d.ts +1 -0
- package/dist/lib/__tests__/Card.test.js +148 -0
- package/dist/lib/__tests__/Carousel.test.d.ts +1 -0
- package/dist/lib/__tests__/Carousel.test.js +439 -0
- package/dist/lib/__tests__/CheckBox.test.d.ts +1 -0
- package/dist/lib/__tests__/CheckBox.test.js +152 -0
- package/dist/lib/__tests__/CodeView.test.d.ts +1 -0
- package/dist/lib/__tests__/CodeView.test.js +157 -0
- package/dist/lib/__tests__/ColorPicker.test.d.ts +1 -0
- package/dist/lib/__tests__/ColorPicker.test.js +93 -0
- package/dist/lib/__tests__/ContextMenu.test.d.ts +1 -0
- package/dist/lib/__tests__/ContextMenu.test.js +67 -0
- package/dist/lib/__tests__/DatePicker.test.d.ts +1 -0
- package/dist/lib/__tests__/DatePicker.test.js +108 -0
- package/dist/lib/__tests__/Dialog.test.d.ts +1 -0
- package/dist/lib/__tests__/Dialog.test.js +183 -0
- package/dist/lib/__tests__/Field.test.d.ts +1 -0
- package/dist/lib/__tests__/Field.test.js +190 -0
- package/dist/lib/__tests__/FilePicker.test.d.ts +1 -0
- package/dist/lib/__tests__/FilePicker.test.js +179 -0
- package/dist/lib/__tests__/Form.integration.test.d.ts +1 -0
- package/dist/lib/__tests__/Form.integration.test.js +158 -0
- package/dist/lib/__tests__/Form.test.d.ts +1 -0
- package/dist/lib/__tests__/Form.test.js +463 -0
- package/dist/lib/__tests__/Hamburger.test.d.ts +1 -0
- package/dist/lib/__tests__/Hamburger.test.js +161 -0
- package/dist/lib/__tests__/InstallPWA.test.d.ts +1 -0
- package/dist/lib/__tests__/InstallPWA.test.js +15 -0
- package/dist/lib/__tests__/Menu.test.d.ts +1 -0
- package/dist/lib/__tests__/Menu.test.js +285 -0
- package/dist/lib/__tests__/NoticeBase.test.d.ts +1 -0
- package/dist/lib/__tests__/NoticeBase.test.js +60 -0
- package/dist/lib/__tests__/PaginatedCard.test.d.ts +1 -0
- package/dist/lib/__tests__/PaginatedCard.test.js +89 -0
- package/dist/lib/__tests__/Pagination.test.d.ts +1 -0
- package/dist/lib/__tests__/Pagination.test.js +168 -0
- package/dist/lib/__tests__/PrimaryColorSelect.test.d.ts +1 -0
- package/dist/lib/__tests__/PrimaryColorSelect.test.js +92 -0
- package/dist/lib/__tests__/ProgressBar.test.d.ts +1 -0
- package/dist/lib/__tests__/ProgressBar.test.js +69 -0
- package/dist/lib/__tests__/ProgressCircle.test.d.ts +1 -0
- package/dist/lib/__tests__/ProgressCircle.test.js +71 -0
- package/dist/lib/__tests__/Radio.test.d.ts +1 -0
- package/dist/lib/__tests__/Radio.test.js +127 -0
- package/dist/lib/__tests__/SearchInput.test.d.ts +1 -0
- package/dist/lib/__tests__/SearchInput.test.js +80 -0
- package/dist/lib/__tests__/Select.test.d.ts +1 -0
- package/dist/lib/__tests__/Select.test.js +408 -0
- package/dist/lib/__tests__/Slider.test.d.ts +1 -0
- package/dist/lib/__tests__/Slider.test.js +213 -0
- package/dist/lib/__tests__/Splitter.test.d.ts +1 -0
- package/dist/lib/__tests__/Splitter.test.js +87 -0
- package/dist/lib/__tests__/Switch.test.d.ts +1 -0
- package/dist/lib/__tests__/Switch.test.js +97 -0
- package/dist/lib/__tests__/Table.test.d.ts +1 -0
- package/dist/lib/__tests__/Table.test.js +349 -0
- package/dist/lib/__tests__/Tabs.test.d.ts +1 -0
- package/dist/lib/__tests__/Tabs.test.js +262 -0
- package/dist/lib/__tests__/ThemeToggle.test.d.ts +1 -0
- package/dist/lib/__tests__/ThemeToggle.test.js +84 -0
- package/dist/lib/__tests__/TimePicker.test.d.ts +1 -0
- package/dist/lib/__tests__/TimePicker.test.js +146 -0
- package/dist/lib/__tests__/TimePickerNew.test.d.ts +1 -0
- package/dist/lib/__tests__/TimePickerNew.test.js +322 -0
- package/dist/lib/__tests__/Toast.test.d.ts +1 -0
- package/dist/lib/__tests__/Toast.test.js +135 -0
- package/dist/lib/__tests__/Tooltip.test.d.ts +1 -0
- package/dist/lib/__tests__/Tooltip.test.js +171 -0
- package/dist/lib/__tests__/Topbar.test.d.ts +1 -0
- package/dist/lib/__tests__/Topbar.test.js +25 -0
- package/dist/lib/__tests__/setupLangContext.d.ts +1 -0
- package/dist/lib/__tests__/setupLangContext.js +65 -0
- package/dist/lib/__tests__/storage.test.d.ts +1 -0
- package/dist/lib/__tests__/storage.test.js +124 -0
- package/dist/lib/__tests__/utils.test.d.ts +1 -0
- package/dist/lib/__tests__/utils.test.js +11 -0
- package/dist/lib/index.d.ts +1 -0
- package/dist/lib/index.js +1 -0
- package/dist/lib/lang.d.ts +4 -0
- package/dist/lib/lang.js +4 -0
- package/dist/styles.css +234 -232
- package/dist/utils/index.js +15 -4
- package/package.json +52 -52
|
@@ -1,155 +1,155 @@
|
|
|
1
|
-
<!-- src/lib/Accordion.svelte -->
|
|
2
|
-
<script lang="ts">
|
|
3
|
-
/**
|
|
4
|
-
* @component Accordion
|
|
5
|
-
* @description Collapsible content container with flexible sizing and optional multi-open behavior.
|
|
6
|
-
*
|
|
7
|
-
* @prop items {AccordionItem[]} - Array of sections `{ id?, title, content }`
|
|
8
|
-
* @default []
|
|
9
|
-
*
|
|
10
|
-
* @prop multiple {boolean} - Allow more than one section to be open at the same time
|
|
11
|
-
* @default false
|
|
12
|
-
*
|
|
13
|
-
* @prop defaultOpen {number[]} - Indexes of initially opened sections
|
|
14
|
-
* @default []
|
|
15
|
-
*
|
|
16
|
-
* @prop onToggle {(index: number, open: boolean) => void} - Callback fired when a section is toggled
|
|
17
|
-
*
|
|
18
|
-
* @prop sz {SizeKey} - Size variant
|
|
19
|
-
* @options xs|sm|md|lg|xl
|
|
20
|
-
* @default md
|
|
21
|
-
*
|
|
22
|
-
* @prop class {string} - Additional classes for the outer container
|
|
23
|
-
* @default ""
|
|
24
|
-
*
|
|
25
|
-
* @note Smooth expand/collapse via CSS grid transitions
|
|
26
|
-
* @note Accessible triggers (button + aria-expanded)
|
|
27
|
-
* @note For full ARIA compliance, pair triggers with aria-controls and hide collapsed panels using aria-hidden or inert
|
|
28
|
-
* @note State is index-based; reordering items will change which panels start open
|
|
29
|
-
* @note AccordionItem.content is a plain string; wrap HTML inside the string or fork the component if you need custom nodes
|
|
30
|
-
*/
|
|
31
|
-
|
|
32
|
-
import { type AccordionItem, type SizeKey, TEXT } from "./types";
|
|
33
|
-
import { cx } from "../utils";
|
|
34
|
-
|
|
35
|
-
type Props = {
|
|
36
|
-
items?: AccordionItem[];
|
|
37
|
-
multiple?: boolean;
|
|
38
|
-
defaultOpen?: number[];
|
|
39
|
-
onToggle?: (index: number, open: boolean) => void;
|
|
40
|
-
sz?: SizeKey;
|
|
41
|
-
class?: string;
|
|
42
|
-
};
|
|
43
|
-
|
|
44
|
-
let {
|
|
45
|
-
items = [],
|
|
46
|
-
multiple = false,
|
|
47
|
-
defaultOpen = [],
|
|
48
|
-
onToggle,
|
|
49
|
-
sz = "md",
|
|
50
|
-
class: externalClass = "",
|
|
51
|
-
}: Props = $props();
|
|
52
|
-
|
|
53
|
-
const base =
|
|
54
|
-
"w-full border border-[var(--border-color-default)] bg-[var(--color-bg-surface)] shadow-
|
|
55
|
-
|
|
56
|
-
const sizes: Record<SizeKey, string> = {
|
|
57
|
-
xs: "rounded-[var(--radius-md)]
|
|
58
|
-
sm: "rounded-[var(--radius-md)]
|
|
59
|
-
md: "rounded-[var(--radius-lg)]
|
|
60
|
-
lg: "rounded-[var(--radius-lg)]
|
|
61
|
-
xl: "rounded-[var(--radius-xl)]
|
|
62
|
-
};
|
|
63
|
-
|
|
64
|
-
const contentSize: Record<SizeKey, string> = {
|
|
65
|
-
xs: "px-
|
|
66
|
-
sm: "px-
|
|
67
|
-
md: "px-
|
|
68
|
-
lg: "px-
|
|
69
|
-
xl: "px-
|
|
70
|
-
};
|
|
71
|
-
|
|
72
|
-
const iconSize: Record<SizeKey, string> = {
|
|
73
|
-
xs: "w-3 h-3",
|
|
74
|
-
sm: "w-3.5 h-3.5",
|
|
75
|
-
md: "w-4 h-4",
|
|
76
|
-
lg: "w-[18px] h-[18px]",
|
|
77
|
-
xl: "w-5 h-5",
|
|
78
|
-
};
|
|
79
|
-
|
|
80
|
-
const componentClass = $derived(cx(base, sizes[sz], externalClass));
|
|
81
|
-
|
|
82
|
-
const iconClass = $derived(iconSize[sz]);
|
|
83
|
-
|
|
84
|
-
const contentClass = $derived(cx(contentSize[sz], TEXT[sz]));
|
|
85
|
-
|
|
86
|
-
let open = $derived(defaultOpen);
|
|
87
|
-
|
|
88
|
-
const isOpen = (i: number) => open.includes(i);
|
|
89
|
-
|
|
90
|
-
const toggle = (i: number) => {
|
|
91
|
-
const opened = isOpen(i);
|
|
92
|
-
open = multiple
|
|
93
|
-
? opened
|
|
94
|
-
? open.filter((x) => x !== i)
|
|
95
|
-
: [...open, i]
|
|
96
|
-
: opened
|
|
97
|
-
? []
|
|
98
|
-
: [i];
|
|
99
|
-
onToggle?.(i, !opened);
|
|
100
|
-
};
|
|
101
|
-
</script>
|
|
102
|
-
|
|
103
|
-
<div class={componentClass}>
|
|
104
|
-
{#each items as item, i (item.id ?? i)}
|
|
105
|
-
<section
|
|
106
|
-
class="group border-b border-[var(--border-color-default)] last:border-b-0 overflow-hidden"
|
|
107
|
-
class:first-of-type:rounded-t={items.length > 1}
|
|
108
|
-
class:last-of-type:rounded-b={items.length > 1}
|
|
109
|
-
>
|
|
110
|
-
<h3>
|
|
111
|
-
<button
|
|
112
|
-
type="button"
|
|
113
|
-
class="flex w-full items-center justify-between gap-
|
|
114
|
-
aria-expanded={isOpen(i)}
|
|
115
|
-
onclick={() => toggle(i)}
|
|
116
|
-
>
|
|
117
|
-
<span>{item.title}</span>
|
|
118
|
-
<svg
|
|
119
|
-
class={cx(
|
|
120
|
-
"shrink-0 transition-transform duration-
|
|
121
|
-
iconClass
|
|
122
|
-
)}
|
|
123
|
-
class:rotate-180={isOpen(i)}
|
|
124
|
-
viewBox="0 0 20 20"
|
|
125
|
-
fill="currentColor"
|
|
126
|
-
aria-hidden="true"
|
|
127
|
-
>
|
|
128
|
-
<path
|
|
129
|
-
fill-rule="evenodd"
|
|
130
|
-
d="M5.23 7.21a.75.75 0 011.06.02L10 11.135l3.71-3.904a.75.75 0 111.08 1.04l-4.24 4.46a.75.75 0 01-1.08 0L5.21 8.27a.75.75 0 01.02-1.06z"
|
|
131
|
-
clip-rule="evenodd"
|
|
132
|
-
/>
|
|
133
|
-
</svg>
|
|
134
|
-
</button>
|
|
135
|
-
</h3>
|
|
136
|
-
|
|
137
|
-
<div
|
|
138
|
-
class="grid overflow-hidden transition-[grid-template-rows] duration-
|
|
139
|
-
class:grid-rows-[1fr]={isOpen(i)}
|
|
140
|
-
class:grid-rows-[0fr]={!isOpen(i)}
|
|
141
|
-
>
|
|
142
|
-
<div class="min-h-0">
|
|
143
|
-
<div
|
|
144
|
-
class={cx(
|
|
145
|
-
"leading-relaxed text-[var(--color-text-default)]",
|
|
146
|
-
contentClass
|
|
147
|
-
)}
|
|
148
|
-
>
|
|
149
|
-
{item.content}
|
|
150
|
-
</div>
|
|
151
|
-
</div>
|
|
152
|
-
</div>
|
|
153
|
-
</section>
|
|
154
|
-
{/each}
|
|
155
|
-
</div>
|
|
1
|
+
<!-- src/lib/Accordion.svelte -->
|
|
2
|
+
<script lang="ts">
|
|
3
|
+
/**
|
|
4
|
+
* @component Accordion
|
|
5
|
+
* @description Collapsible content container with flexible sizing and optional multi-open behavior.
|
|
6
|
+
*
|
|
7
|
+
* @prop items {AccordionItem[]} - Array of sections `{ id?, title, content }`
|
|
8
|
+
* @default []
|
|
9
|
+
*
|
|
10
|
+
* @prop multiple {boolean} - Allow more than one section to be open at the same time
|
|
11
|
+
* @default false
|
|
12
|
+
*
|
|
13
|
+
* @prop defaultOpen {number[]} - Indexes of initially opened sections
|
|
14
|
+
* @default []
|
|
15
|
+
*
|
|
16
|
+
* @prop onToggle {(index: number, open: boolean) => void} - Callback fired when a section is toggled
|
|
17
|
+
*
|
|
18
|
+
* @prop sz {SizeKey} - Size variant
|
|
19
|
+
* @options xs|sm|md|lg|xl
|
|
20
|
+
* @default md
|
|
21
|
+
*
|
|
22
|
+
* @prop class {string} - Additional classes for the outer container
|
|
23
|
+
* @default ""
|
|
24
|
+
*
|
|
25
|
+
* @note Smooth expand/collapse via CSS grid transitions
|
|
26
|
+
* @note Accessible triggers (button + aria-expanded)
|
|
27
|
+
* @note For full ARIA compliance, pair triggers with aria-controls and hide collapsed panels using aria-hidden or inert
|
|
28
|
+
* @note State is index-based; reordering items will change which panels start open
|
|
29
|
+
* @note AccordionItem.content is a plain string; wrap HTML inside the string or fork the component if you need custom nodes
|
|
30
|
+
*/
|
|
31
|
+
|
|
32
|
+
import { type AccordionItem, type SizeKey, TEXT } from "./types";
|
|
33
|
+
import { cx } from "../utils";
|
|
34
|
+
|
|
35
|
+
type Props = {
|
|
36
|
+
items?: AccordionItem[];
|
|
37
|
+
multiple?: boolean;
|
|
38
|
+
defaultOpen?: number[];
|
|
39
|
+
onToggle?: (index: number, open: boolean) => void;
|
|
40
|
+
sz?: SizeKey;
|
|
41
|
+
class?: string;
|
|
42
|
+
};
|
|
43
|
+
|
|
44
|
+
let {
|
|
45
|
+
items = [],
|
|
46
|
+
multiple = false,
|
|
47
|
+
defaultOpen = [],
|
|
48
|
+
onToggle,
|
|
49
|
+
sz = "md",
|
|
50
|
+
class: externalClass = "",
|
|
51
|
+
}: Props = $props();
|
|
52
|
+
|
|
53
|
+
const base =
|
|
54
|
+
"w-full border border-[var(--border-color-default)] bg-[var(--color-bg-surface)] shadow-[0_1px_2px_var(--shadow-color)]";
|
|
55
|
+
|
|
56
|
+
const sizes: Record<SizeKey, string> = {
|
|
57
|
+
xs: cx("rounded-[var(--radius-md)]", TEXT.xs),
|
|
58
|
+
sm: cx("rounded-[var(--radius-md)]", TEXT.sm),
|
|
59
|
+
md: cx("rounded-[var(--radius-lg)]", TEXT.md),
|
|
60
|
+
lg: cx("rounded-[var(--radius-lg)]", TEXT.lg),
|
|
61
|
+
xl: cx("rounded-[var(--radius-xl)]", TEXT.xl),
|
|
62
|
+
};
|
|
63
|
+
|
|
64
|
+
const contentSize: Record<SizeKey, string> = {
|
|
65
|
+
xs: "px-[var(--spacing-md)] pb-[var(--spacing-md)] mt-[var(--spacing-xs)]",
|
|
66
|
+
sm: "px-[calc(var(--spacing-md)+var(--spacing-xs))] pb-[calc(var(--spacing-md)+var(--spacing-xs))] mt-[var(--spacing-sm)]",
|
|
67
|
+
md: "px-[calc(var(--spacing-md)+var(--spacing-sm))] pb-[calc(var(--spacing-md)+var(--spacing-sm))] mt-[calc(var(--spacing-sm)+var(--spacing-xs))]",
|
|
68
|
+
lg: "px-[var(--spacing-xl)] pb-[var(--spacing-xl)] mt-[var(--spacing-md)]",
|
|
69
|
+
xl: "px-[calc(var(--spacing-xl)+var(--spacing-sm))] pb-[calc(var(--spacing-xl)+var(--spacing-sm))] mt-[calc(var(--spacing-md)+var(--spacing-xs))]",
|
|
70
|
+
};
|
|
71
|
+
|
|
72
|
+
const iconSize: Record<SizeKey, string> = {
|
|
73
|
+
xs: "w-3 h-3",
|
|
74
|
+
sm: "w-3.5 h-3.5",
|
|
75
|
+
md: "w-4 h-4",
|
|
76
|
+
lg: "w-[18px] h-[18px]",
|
|
77
|
+
xl: "w-5 h-5",
|
|
78
|
+
};
|
|
79
|
+
|
|
80
|
+
const componentClass = $derived(cx(base, sizes[sz], externalClass));
|
|
81
|
+
|
|
82
|
+
const iconClass = $derived(iconSize[sz]);
|
|
83
|
+
|
|
84
|
+
const contentClass = $derived(cx(contentSize[sz], TEXT[sz]));
|
|
85
|
+
|
|
86
|
+
let open = $derived(defaultOpen);
|
|
87
|
+
|
|
88
|
+
const isOpen = (i: number) => open.includes(i);
|
|
89
|
+
|
|
90
|
+
const toggle = (i: number) => {
|
|
91
|
+
const opened = isOpen(i);
|
|
92
|
+
open = multiple
|
|
93
|
+
? opened
|
|
94
|
+
? open.filter((x) => x !== i)
|
|
95
|
+
: [...open, i]
|
|
96
|
+
: opened
|
|
97
|
+
? []
|
|
98
|
+
: [i];
|
|
99
|
+
onToggle?.(i, !opened);
|
|
100
|
+
};
|
|
101
|
+
</script>
|
|
102
|
+
|
|
103
|
+
<div class={componentClass}>
|
|
104
|
+
{#each items as item, i (item.id ?? i)}
|
|
105
|
+
<section
|
|
106
|
+
class="group border-b border-[var(--border-color-default)] last:border-b-0 overflow-hidden"
|
|
107
|
+
class:first-of-type:rounded-t={items.length > 1}
|
|
108
|
+
class:last-of-type:rounded-b={items.length > 1}
|
|
109
|
+
>
|
|
110
|
+
<h3>
|
|
111
|
+
<button
|
|
112
|
+
type="button"
|
|
113
|
+
class="flex w-full items-center justify-between gap-[calc(var(--spacing-sm)+var(--spacing-xs))] p-[var(--spacing-sm)] text-left font-medium text-[var(--color-text-default)] bg-transparent transition-colors hover:bg-[var(--color-bg-hover)] active:bg-[var(--color-bg-active)] focus:outline-none focus:ring-2 focus:ring-[var(--border-color-focus)] focus:ring-inset"
|
|
114
|
+
aria-expanded={isOpen(i)}
|
|
115
|
+
onclick={() => toggle(i)}
|
|
116
|
+
>
|
|
117
|
+
<span>{item.title}</span>
|
|
118
|
+
<svg
|
|
119
|
+
class={cx(
|
|
120
|
+
"shrink-0 transition-transform duration-[var(--transition-fast)] text-[var(--color-text-muted)]",
|
|
121
|
+
iconClass
|
|
122
|
+
)}
|
|
123
|
+
class:rotate-180={isOpen(i)}
|
|
124
|
+
viewBox="0 0 20 20"
|
|
125
|
+
fill="currentColor"
|
|
126
|
+
aria-hidden="true"
|
|
127
|
+
>
|
|
128
|
+
<path
|
|
129
|
+
fill-rule="evenodd"
|
|
130
|
+
d="M5.23 7.21a.75.75 0 011.06.02L10 11.135l3.71-3.904a.75.75 0 111.08 1.04l-4.24 4.46a.75.75 0 01-1.08 0L5.21 8.27a.75.75 0 01.02-1.06z"
|
|
131
|
+
clip-rule="evenodd"
|
|
132
|
+
/>
|
|
133
|
+
</svg>
|
|
134
|
+
</button>
|
|
135
|
+
</h3>
|
|
136
|
+
|
|
137
|
+
<div
|
|
138
|
+
class="grid overflow-hidden transition-[grid-template-rows] duration-[var(--transition-fast)]"
|
|
139
|
+
class:grid-rows-[1fr]={isOpen(i)}
|
|
140
|
+
class:grid-rows-[0fr]={!isOpen(i)}
|
|
141
|
+
>
|
|
142
|
+
<div class="min-h-0">
|
|
143
|
+
<div
|
|
144
|
+
class={cx(
|
|
145
|
+
"leading-relaxed text-[var(--color-text-default)]",
|
|
146
|
+
contentClass
|
|
147
|
+
)}
|
|
148
|
+
>
|
|
149
|
+
{item.content}
|
|
150
|
+
</div>
|
|
151
|
+
</div>
|
|
152
|
+
</div>
|
|
153
|
+
</section>
|
|
154
|
+
{/each}
|
|
155
|
+
</div>
|
package/dist/lib/Badge.svelte
CHANGED
|
@@ -1,44 +1,44 @@
|
|
|
1
|
-
<!-- src/lib/Badge.svelte -->
|
|
2
|
-
<script lang="ts">
|
|
3
|
-
/**
|
|
4
|
-
* @component Badge
|
|
5
|
-
* @description Compact status badge for inline labels and small indicators.
|
|
6
|
-
*
|
|
7
|
-
* @prop message {string} - Badge text
|
|
8
|
-
*
|
|
9
|
-
* @prop variant {ToastVariant} - Visual style
|
|
10
|
-
* @options success|danger|warning|info
|
|
11
|
-
* @default info
|
|
12
|
-
*
|
|
13
|
-
* @prop showIcon {boolean} - Shows a variant icon
|
|
14
|
-
* @default false
|
|
15
|
-
*
|
|
16
|
-
* @prop class {string} - Additional wrapper classes
|
|
17
|
-
* @default ""
|
|
18
|
-
*
|
|
19
|
-
* @note Intended for inline status labels.
|
|
20
|
-
* @note Uses NoticeBase for shared styling with Toast.
|
|
21
|
-
*/
|
|
22
|
-
import NoticeBase from "./NoticeBase.svelte";
|
|
23
|
-
import type { ToastVariant } from "./types";
|
|
24
|
-
|
|
25
|
-
let {
|
|
26
|
-
message,
|
|
27
|
-
variant = "info",
|
|
28
|
-
showIcon = false,
|
|
29
|
-
class: externalClass = "",
|
|
30
|
-
}: {
|
|
31
|
-
message: string;
|
|
32
|
-
variant?: ToastVariant;
|
|
33
|
-
showIcon?: boolean;
|
|
34
|
-
class?: string;
|
|
35
|
-
} = $props();
|
|
36
|
-
</script>
|
|
37
|
-
|
|
38
|
-
<NoticeBase
|
|
39
|
-
{message}
|
|
40
|
-
{variant}
|
|
41
|
-
{showIcon}
|
|
42
|
-
inline
|
|
43
|
-
class={externalClass}
|
|
44
|
-
/>
|
|
1
|
+
<!-- src/lib/Badge.svelte -->
|
|
2
|
+
<script lang="ts">
|
|
3
|
+
/**
|
|
4
|
+
* @component Badge
|
|
5
|
+
* @description Compact status badge for inline labels and small indicators.
|
|
6
|
+
*
|
|
7
|
+
* @prop message {string} - Badge text
|
|
8
|
+
*
|
|
9
|
+
* @prop variant {ToastVariant} - Visual style
|
|
10
|
+
* @options success|danger|warning|info
|
|
11
|
+
* @default info
|
|
12
|
+
*
|
|
13
|
+
* @prop showIcon {boolean} - Shows a variant icon
|
|
14
|
+
* @default false
|
|
15
|
+
*
|
|
16
|
+
* @prop class {string} - Additional wrapper classes
|
|
17
|
+
* @default ""
|
|
18
|
+
*
|
|
19
|
+
* @note Intended for inline status labels.
|
|
20
|
+
* @note Uses NoticeBase for shared styling with Toast.
|
|
21
|
+
*/
|
|
22
|
+
import NoticeBase from "./NoticeBase.svelte";
|
|
23
|
+
import type { ToastVariant } from "./types";
|
|
24
|
+
|
|
25
|
+
let {
|
|
26
|
+
message,
|
|
27
|
+
variant = "info",
|
|
28
|
+
showIcon = false,
|
|
29
|
+
class: externalClass = "",
|
|
30
|
+
}: {
|
|
31
|
+
message: string;
|
|
32
|
+
variant?: ToastVariant;
|
|
33
|
+
showIcon?: boolean;
|
|
34
|
+
class?: string;
|
|
35
|
+
} = $props();
|
|
36
|
+
</script>
|
|
37
|
+
|
|
38
|
+
<NoticeBase
|
|
39
|
+
{message}
|
|
40
|
+
{variant}
|
|
41
|
+
{showIcon}
|
|
42
|
+
inline
|
|
43
|
+
class={externalClass}
|
|
44
|
+
/>
|