@dxlbnl/ui 0.1.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 +94 -0
- package/dist/components/cards/Card.stories.svelte +82 -0
- package/dist/components/cards/Card.stories.svelte.d.ts +19 -0
- package/dist/components/cards/Card.svelte +28 -0
- package/dist/components/cards/Card.svelte.d.ts +12 -0
- package/dist/components/cards/NoteCard.stories.svelte +94 -0
- package/dist/components/cards/NoteCard.stories.svelte.d.ts +19 -0
- package/dist/components/cards/NoteCard.svelte +89 -0
- package/dist/components/cards/NoteCard.svelte.d.ts +18 -0
- package/dist/components/cards/ProductCard.stories.svelte +98 -0
- package/dist/components/cards/ProductCard.stories.svelte.d.ts +19 -0
- package/dist/components/cards/ProductCard.svelte +150 -0
- package/dist/components/cards/ProductCard.svelte.d.ts +22 -0
- package/dist/components/cards/ProjectCard.stories.svelte +88 -0
- package/dist/components/cards/ProjectCard.stories.svelte.d.ts +19 -0
- package/dist/components/cards/ProjectCard.svelte +109 -0
- package/dist/components/cards/ProjectCard.svelte.d.ts +20 -0
- package/dist/components/cards/index.d.ts +4 -0
- package/dist/components/cards/index.js +4 -0
- package/dist/components/data/Accordion.stories.svelte +316 -0
- package/dist/components/data/Accordion.stories.svelte.d.ts +19 -0
- package/dist/components/data/Accordion.svelte +23 -0
- package/dist/components/data/Accordion.svelte.d.ts +9 -0
- package/dist/components/data/AccordionItem.svelte +112 -0
- package/dist/components/data/AccordionItem.svelte.d.ts +11 -0
- package/dist/components/data/Table.composition.stories.svelte +67 -0
- package/dist/components/data/Table.composition.stories.svelte.d.ts +19 -0
- package/dist/components/data/Table.stories.svelte +137 -0
- package/dist/components/data/Table.stories.svelte.d.ts +19 -0
- package/dist/components/data/Table.svelte +83 -0
- package/dist/components/data/Table.svelte.d.ts +14 -0
- package/dist/components/data/Tabs.stories.svelte +386 -0
- package/dist/components/data/Tabs.stories.svelte.d.ts +19 -0
- package/dist/components/data/Tabs.svelte +142 -0
- package/dist/components/data/Tabs.svelte.d.ts +19 -0
- package/dist/components/data/index.d.ts +4 -0
- package/dist/components/data/index.js +4 -0
- package/dist/components/feedback/Modal.stories.svelte +192 -0
- package/dist/components/feedback/Modal.stories.svelte.d.ts +4 -0
- package/dist/components/feedback/Modal.svelte +185 -0
- package/dist/components/feedback/Modal.svelte.d.ts +19 -0
- package/dist/components/feedback/Toast.stories.svelte +203 -0
- package/dist/components/feedback/Toast.stories.svelte.d.ts +19 -0
- package/dist/components/feedback/Toast.svelte +109 -0
- package/dist/components/feedback/Toast.svelte.d.ts +15 -0
- package/dist/components/feedback/ToastRegion.stories.svelte +193 -0
- package/dist/components/feedback/ToastRegion.stories.svelte.d.ts +19 -0
- package/dist/components/feedback/ToastRegion.svelte +102 -0
- package/dist/components/feedback/ToastRegion.svelte.d.ts +9 -0
- package/dist/components/feedback/index.d.ts +3 -0
- package/dist/components/feedback/index.js +3 -0
- package/dist/components/forms/Checkbox.stories.svelte +103 -0
- package/dist/components/forms/Checkbox.stories.svelte.d.ts +19 -0
- package/dist/components/forms/Checkbox.svelte +150 -0
- package/dist/components/forms/Checkbox.svelte.d.ts +11 -0
- package/dist/components/forms/Field.stories.svelte +113 -0
- package/dist/components/forms/Field.stories.svelte.d.ts +19 -0
- package/dist/components/forms/Field.svelte +77 -0
- package/dist/components/forms/Field.svelte.d.ts +17 -0
- package/dist/components/forms/Input.stories.svelte +58 -0
- package/dist/components/forms/Input.stories.svelte.d.ts +19 -0
- package/dist/components/forms/Input.svelte +64 -0
- package/dist/components/forms/Input.svelte.d.ts +9 -0
- package/dist/components/forms/InputWrap.composition.stories.svelte +32 -0
- package/dist/components/forms/InputWrap.composition.stories.svelte.d.ts +19 -0
- package/dist/components/forms/InputWrap.stories.svelte +53 -0
- package/dist/components/forms/InputWrap.stories.svelte.d.ts +19 -0
- package/dist/components/forms/InputWrap.svelte +128 -0
- package/dist/components/forms/InputWrap.svelte.d.ts +21 -0
- package/dist/components/forms/Radio.stories.svelte +70 -0
- package/dist/components/forms/Radio.stories.svelte.d.ts +19 -0
- package/dist/components/forms/Radio.svelte +109 -0
- package/dist/components/forms/Radio.svelte.d.ts +9 -0
- package/dist/components/forms/RadioGroup.stories.svelte +115 -0
- package/dist/components/forms/RadioGroup.stories.svelte.d.ts +19 -0
- package/dist/components/forms/RadioGroup.svelte +116 -0
- package/dist/components/forms/RadioGroup.svelte.d.ts +24 -0
- package/dist/components/forms/Select.stories.svelte +168 -0
- package/dist/components/forms/Select.stories.svelte.d.ts +19 -0
- package/dist/components/forms/Select.svelte +262 -0
- package/dist/components/forms/Select.svelte.d.ts +23 -0
- package/dist/components/forms/Switch.stories.svelte +86 -0
- package/dist/components/forms/Switch.stories.svelte.d.ts +19 -0
- package/dist/components/forms/Switch.svelte +113 -0
- package/dist/components/forms/Switch.svelte.d.ts +11 -0
- package/dist/components/forms/Textarea.stories.svelte +40 -0
- package/dist/components/forms/Textarea.stories.svelte.d.ts +19 -0
- package/dist/components/forms/Textarea.svelte +66 -0
- package/dist/components/forms/Textarea.svelte.d.ts +9 -0
- package/dist/components/forms/field-context.d.ts +7 -0
- package/dist/components/forms/field-context.js +1 -0
- package/dist/components/forms/index.d.ts +9 -0
- package/dist/components/forms/index.js +9 -0
- package/dist/components/layout/Container.stories.svelte +67 -0
- package/dist/components/layout/Container.stories.svelte.d.ts +19 -0
- package/dist/components/layout/Container.svelte +52 -0
- package/dist/components/layout/Container.svelte.d.ts +14 -0
- package/dist/components/layout/Grid.stories.svelte +109 -0
- package/dist/components/layout/Grid.stories.svelte.d.ts +19 -0
- package/dist/components/layout/Grid.svelte +54 -0
- package/dist/components/layout/Grid.svelte.d.ts +19 -0
- package/dist/components/layout/Inline.stories.svelte +136 -0
- package/dist/components/layout/Inline.stories.svelte.d.ts +19 -0
- package/dist/components/layout/Inline.svelte +46 -0
- package/dist/components/layout/Inline.svelte.d.ts +19 -0
- package/dist/components/layout/Prose.stories.svelte +423 -0
- package/dist/components/layout/Prose.stories.svelte.d.ts +19 -0
- package/dist/components/layout/Prose.svelte +176 -0
- package/dist/components/layout/Prose.svelte.d.ts +12 -0
- package/dist/components/layout/Rule.stories.svelte +80 -0
- package/dist/components/layout/Rule.stories.svelte.d.ts +19 -0
- package/dist/components/layout/Rule.svelte +33 -0
- package/dist/components/layout/Rule.svelte.d.ts +9 -0
- package/dist/components/layout/Spread.stories.svelte +118 -0
- package/dist/components/layout/Spread.stories.svelte.d.ts +19 -0
- package/dist/components/layout/Spread.svelte +38 -0
- package/dist/components/layout/Spread.svelte.d.ts +16 -0
- package/dist/components/layout/Stack.stories.svelte +90 -0
- package/dist/components/layout/Stack.stories.svelte.d.ts +19 -0
- package/dist/components/layout/Stack.svelte +37 -0
- package/dist/components/layout/Stack.svelte.d.ts +16 -0
- package/dist/components/layout/index.d.ts +7 -0
- package/dist/components/layout/index.js +7 -0
- package/dist/components/navigation/Breadcrumb.stories.svelte +122 -0
- package/dist/components/navigation/Breadcrumb.stories.svelte.d.ts +19 -0
- package/dist/components/navigation/Breadcrumb.svelte +70 -0
- package/dist/components/navigation/Breadcrumb.svelte.d.ts +13 -0
- package/dist/components/navigation/Nav.stories.svelte +323 -0
- package/dist/components/navigation/Nav.stories.svelte.d.ts +19 -0
- package/dist/components/navigation/Nav.svelte +257 -0
- package/dist/components/navigation/Nav.svelte.d.ts +21 -0
- package/dist/components/navigation/index.d.ts +2 -0
- package/dist/components/navigation/index.js +2 -0
- package/dist/components/patterns/ActivityRow.stories.svelte +45 -0
- package/dist/components/patterns/ActivityRow.stories.svelte.d.ts +19 -0
- package/dist/components/patterns/ActivityRow.svelte +69 -0
- package/dist/components/patterns/ActivityRow.svelte.d.ts +16 -0
- package/dist/components/patterns/Alert.stories.svelte +63 -0
- package/dist/components/patterns/Alert.stories.svelte.d.ts +19 -0
- package/dist/components/patterns/Alert.svelte +91 -0
- package/dist/components/patterns/Alert.svelte.d.ts +16 -0
- package/dist/components/patterns/CtaBlock.stories.svelte +62 -0
- package/dist/components/patterns/CtaBlock.stories.svelte.d.ts +19 -0
- package/dist/components/patterns/CtaBlock.svelte +80 -0
- package/dist/components/patterns/CtaBlock.svelte.d.ts +16 -0
- package/dist/components/patterns/KvList.stories.svelte +48 -0
- package/dist/components/patterns/KvList.stories.svelte.d.ts +19 -0
- package/dist/components/patterns/KvList.svelte +65 -0
- package/dist/components/patterns/KvList.svelte.d.ts +15 -0
- package/dist/components/patterns/PageHero.stories.svelte +62 -0
- package/dist/components/patterns/PageHero.stories.svelte.d.ts +19 -0
- package/dist/components/patterns/PageHero.svelte +62 -0
- package/dist/components/patterns/PageHero.svelte.d.ts +14 -0
- package/dist/components/patterns/ProgressBar.stories.svelte +83 -0
- package/dist/components/patterns/ProgressBar.stories.svelte.d.ts +19 -0
- package/dist/components/patterns/ProgressBar.svelte +71 -0
- package/dist/components/patterns/ProgressBar.svelte.d.ts +13 -0
- package/dist/components/patterns/SectionFoot.stories.svelte +37 -0
- package/dist/components/patterns/SectionFoot.stories.svelte.d.ts +19 -0
- package/dist/components/patterns/SectionFoot.svelte +70 -0
- package/dist/components/patterns/SectionFoot.svelte.d.ts +15 -0
- package/dist/components/patterns/SectionHead.stories.svelte +67 -0
- package/dist/components/patterns/SectionHead.stories.svelte.d.ts +19 -0
- package/dist/components/patterns/SectionHead.svelte +54 -0
- package/dist/components/patterns/SectionHead.svelte.d.ts +14 -0
- package/dist/components/patterns/StatCard.stories.svelte +59 -0
- package/dist/components/patterns/StatCard.stories.svelte.d.ts +19 -0
- package/dist/components/patterns/StatCard.svelte +57 -0
- package/dist/components/patterns/StatCard.svelte.d.ts +15 -0
- package/dist/components/patterns/index.d.ts +9 -0
- package/dist/components/patterns/index.js +9 -0
- package/dist/components/primitives/Button.stories.svelte +132 -0
- package/dist/components/primitives/Button.stories.svelte.d.ts +19 -0
- package/dist/components/primitives/Button.svelte +142 -0
- package/dist/components/primitives/Button.svelte.d.ts +16 -0
- package/dist/components/primitives/Heading.stories.svelte +137 -0
- package/dist/components/primitives/Heading.stories.svelte.d.ts +19 -0
- package/dist/components/primitives/Heading.svelte +107 -0
- package/dist/components/primitives/Heading.svelte.d.ts +23 -0
- package/dist/components/primitives/Led.stories.svelte +63 -0
- package/dist/components/primitives/Led.stories.svelte.d.ts +19 -0
- package/dist/components/primitives/Led.svelte +65 -0
- package/dist/components/primitives/Led.svelte.d.ts +11 -0
- package/dist/components/primitives/TagPill.stories.svelte +90 -0
- package/dist/components/primitives/TagPill.stories.svelte.d.ts +19 -0
- package/dist/components/primitives/TagPill.svelte +44 -0
- package/dist/components/primitives/TagPill.svelte.d.ts +9 -0
- package/dist/components/primitives/Text.stories.svelte +252 -0
- package/dist/components/primitives/Text.stories.svelte.d.ts +19 -0
- package/dist/components/primitives/Text.svelte +101 -0
- package/dist/components/primitives/Text.svelte.d.ts +25 -0
- package/dist/components/primitives/index.d.ts +5 -0
- package/dist/components/primitives/index.js +5 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.js +10 -0
- package/dist/stores/toast.d.ts +19 -0
- package/dist/stores/toast.js +22 -0
- package/dist/storybook-utils.d.ts +11 -0
- package/dist/storybook-utils.js +29 -0
- package/dist/tokens/ColorSwatch.svelte +73 -0
- package/dist/tokens/ColorSwatch.svelte.d.ts +10 -0
- package/dist/tokens/layout.css +144 -0
- package/dist/tokens/patterns.css +281 -0
- package/dist/tokens/tokens.css +96 -0
- package/dist/tokens/tokens.stories.svelte +107 -0
- package/dist/tokens/tokens.stories.svelte.d.ts +18 -0
- package/dist/tokens/typography.css +159 -0
- package/package.json +62 -0
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
<script module lang="ts">
|
|
2
|
+
import { defineMeta } from "@storybook/addon-svelte-csf";
|
|
3
|
+
import { expect, within } from "storybook/test";
|
|
4
|
+
import Heading from "./Heading.svelte";
|
|
5
|
+
|
|
6
|
+
const { Story } = defineMeta({
|
|
7
|
+
title: "Primitives/Heading",
|
|
8
|
+
component: Heading,
|
|
9
|
+
tags: ["autodocs"],
|
|
10
|
+
});
|
|
11
|
+
</script>
|
|
12
|
+
|
|
13
|
+
<!-- AC-17, AC-18, AC-19, AC-21, AC-22, AC-23: levels 1/2/3 render h1/h2/h3 with default variant classes -->
|
|
14
|
+
<!-- AC-20: default level is 2 -->
|
|
15
|
+
<Story name="Levels"
|
|
16
|
+
play={async ({ canvasElement }) => {
|
|
17
|
+
const canvas = within(canvasElement);
|
|
18
|
+
|
|
19
|
+
const h1 = canvas.getByTestId("level-1");
|
|
20
|
+
await expect(h1.tagName).toBe("H1");
|
|
21
|
+
await expect(h1.classList.contains("h1")).toBe(true);
|
|
22
|
+
|
|
23
|
+
const h2 = canvas.getByTestId("level-2");
|
|
24
|
+
await expect(h2.tagName).toBe("H2");
|
|
25
|
+
await expect(h2.classList.contains("h2")).toBe(true);
|
|
26
|
+
|
|
27
|
+
const h3 = canvas.getByTestId("level-3");
|
|
28
|
+
await expect(h3.tagName).toBe("H3");
|
|
29
|
+
await expect(h3.classList.contains("h3")).toBe(true);
|
|
30
|
+
|
|
31
|
+
const defaultLevel = canvas.getByTestId("level-default");
|
|
32
|
+
await expect(defaultLevel.tagName).toBe("H2");
|
|
33
|
+
await expect(defaultLevel.classList.contains("h2")).toBe(true);
|
|
34
|
+
}}>
|
|
35
|
+
<Heading level={1} data-testid="level-1">Heading 1</Heading>
|
|
36
|
+
<Heading level={2} data-testid="level-2">Heading 2</Heading>
|
|
37
|
+
<Heading level={3} data-testid="level-3">Heading 3</Heading>
|
|
38
|
+
<Heading data-testid="level-default">Default Level</Heading>
|
|
39
|
+
</Story>
|
|
40
|
+
|
|
41
|
+
<!-- AC-25: level=1 variant="hero" renders <h1 class="hero-heading"> -->
|
|
42
|
+
<Story name="HeroVariant" args={{ level: 1, variant: "hero" }}
|
|
43
|
+
play={async ({ canvasElement }) => {
|
|
44
|
+
const root = canvasElement.firstElementChild!;
|
|
45
|
+
await expect(root.tagName).toBe("H1");
|
|
46
|
+
await expect(root.classList.contains("hero-heading")).toBe(true);
|
|
47
|
+
}}>
|
|
48
|
+
Dexterlabs
|
|
49
|
+
</Story>
|
|
50
|
+
|
|
51
|
+
<!-- AC-26: level=1 variant="display" renders <h1 class="display-heading"> -->
|
|
52
|
+
<Story name="DisplayVariant" args={{ level: 1, variant: "display" }}
|
|
53
|
+
play={async ({ canvasElement }) => {
|
|
54
|
+
const root = canvasElement.firstElementChild!;
|
|
55
|
+
await expect(root.tagName).toBe("H1");
|
|
56
|
+
await expect(root.classList.contains("display-heading")).toBe(true);
|
|
57
|
+
}}>
|
|
58
|
+
Dx
|
|
59
|
+
</Story>
|
|
60
|
+
|
|
61
|
+
<!-- AC-27: level=2 variant="h3" renders <h2 class="h3"> — semantic h2, visual h3 -->
|
|
62
|
+
<Story name="DecoupledLevelVariant" args={{ level: 2, variant: "h3" }}
|
|
63
|
+
play={async ({ canvasElement }) => {
|
|
64
|
+
const root = canvasElement.firstElementChild!;
|
|
65
|
+
await expect(root.tagName).toBe("H2");
|
|
66
|
+
await expect(root.classList.contains("h3")).toBe(true);
|
|
67
|
+
await expect(root.classList.contains("h2")).toBe(false);
|
|
68
|
+
}}>
|
|
69
|
+
Projects
|
|
70
|
+
</Story>
|
|
71
|
+
|
|
72
|
+
<!-- AC-24: level=4 has no heading visual class (h1/h2/h3/hero-heading/display-heading) -->
|
|
73
|
+
<Story name="Level4NoClass" args={{ level: 4 }}
|
|
74
|
+
play={async ({ canvasElement }) => {
|
|
75
|
+
const root = canvasElement.firstElementChild!;
|
|
76
|
+
await expect(root.tagName).toBe("H4");
|
|
77
|
+
await expect(root.classList.contains("h1")).toBe(false);
|
|
78
|
+
await expect(root.classList.contains("h2")).toBe(false);
|
|
79
|
+
await expect(root.classList.contains("h3")).toBe(false);
|
|
80
|
+
await expect(root.classList.contains("hero-heading")).toBe(false);
|
|
81
|
+
await expect(root.classList.contains("display-heading")).toBe(false);
|
|
82
|
+
}}>
|
|
83
|
+
Sub-section heading
|
|
84
|
+
</Story>
|
|
85
|
+
|
|
86
|
+
<!-- AC-28: color="amber" applies inline style with var(--amber) -->
|
|
87
|
+
<Story name="Color" args={{ level: 2, color: "amber" }}
|
|
88
|
+
play={async ({ canvasElement }) => {
|
|
89
|
+
const root = canvasElement.firstElementChild!;
|
|
90
|
+
await expect(root.getAttribute("style")).toContain("var(--amber)");
|
|
91
|
+
}}>
|
|
92
|
+
Amber Heading
|
|
93
|
+
</Story>
|
|
94
|
+
|
|
95
|
+
<!-- AC-29: extra class is merged alongside variant class -->
|
|
96
|
+
<!-- AC-30: data attributes are forwarded -->
|
|
97
|
+
<Story name="ClassMerge" args={{ level: 2, class: "section-title", "data-testid": "probe" }}
|
|
98
|
+
play={async ({ canvasElement }) => {
|
|
99
|
+
const root = canvasElement.firstElementChild!;
|
|
100
|
+
await expect(root.tagName).toBe("H2");
|
|
101
|
+
await expect(root.classList.contains("h2")).toBe(true);
|
|
102
|
+
await expect(root.classList.contains("section-title")).toBe(true);
|
|
103
|
+
await expect(root.getAttribute("data-testid")).toBe("probe");
|
|
104
|
+
}}>
|
|
105
|
+
Section Title
|
|
106
|
+
</Story>
|
|
107
|
+
|
|
108
|
+
<!-- B26 AC-12, AC-43: size="xs" on h3 → 12px -->
|
|
109
|
+
<Story name="SizeXs" args={{ level: 3, size: "xs" }}
|
|
110
|
+
play={async ({ canvasElement }) => {
|
|
111
|
+
const el = canvasElement.firstElementChild!;
|
|
112
|
+
await expect(el.getAttribute("data-size")).toBe("xs");
|
|
113
|
+
await expect(getComputedStyle(el).fontSize).toBe("12px");
|
|
114
|
+
}}>
|
|
115
|
+
Micro heading
|
|
116
|
+
</Story>
|
|
117
|
+
|
|
118
|
+
<!-- B26 AC-13, AC-15, AC-43: size="lg" on h3 → 19px, letterSpacing stays at h3 default -0.01em -->
|
|
119
|
+
<Story name="SizeLg" args={{ level: 3, size: "lg" }}
|
|
120
|
+
play={async ({ canvasElement }) => {
|
|
121
|
+
const el = canvasElement.firstElementChild!;
|
|
122
|
+
await expect(el.getAttribute("data-size")).toBe("lg");
|
|
123
|
+
await expect(getComputedStyle(el).fontSize).toBe("19px");
|
|
124
|
+
await expect(getComputedStyle(el).letterSpacing).toBe("-0.19px");
|
|
125
|
+
}}>
|
|
126
|
+
Lede-size heading
|
|
127
|
+
</Story>
|
|
128
|
+
|
|
129
|
+
<!-- B26 AC-14: size="xl" on h3 → 24px -->
|
|
130
|
+
<Story name="SizeXl" args={{ level: 3, size: "xl" }}
|
|
131
|
+
play={async ({ canvasElement }) => {
|
|
132
|
+
const el = canvasElement.firstElementChild!;
|
|
133
|
+
await expect(el.getAttribute("data-size")).toBe("xl");
|
|
134
|
+
await expect(getComputedStyle(el).fontSize).toBe("24px");
|
|
135
|
+
}}>
|
|
136
|
+
XL heading
|
|
137
|
+
</Story>
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import Heading from "./Heading.svelte";
|
|
2
|
+
interface $$__sveltets_2_IsomorphicComponent<Props extends Record<string, any> = any, Events extends Record<string, any> = any, Slots extends Record<string, any> = any, Exports = {}, Bindings = string> {
|
|
3
|
+
new (options: import('svelte').ComponentConstructorOptions<Props>): import('svelte').SvelteComponent<Props, Events, Slots> & {
|
|
4
|
+
$$bindings?: Bindings;
|
|
5
|
+
} & Exports;
|
|
6
|
+
(internal: unknown, props: {
|
|
7
|
+
$$events?: Events;
|
|
8
|
+
$$slots?: Slots;
|
|
9
|
+
}): Exports & {
|
|
10
|
+
$set?: any;
|
|
11
|
+
$on?: any;
|
|
12
|
+
};
|
|
13
|
+
z_$$bindings?: Bindings;
|
|
14
|
+
}
|
|
15
|
+
declare const Heading: $$__sveltets_2_IsomorphicComponent<Record<string, never>, {
|
|
16
|
+
[evt: string]: CustomEvent<any>;
|
|
17
|
+
}, {}, {}, string>;
|
|
18
|
+
type Heading = InstanceType<typeof Heading>;
|
|
19
|
+
export default Heading;
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import type { ClassValue } from 'svelte/elements'
|
|
3
|
+
import type { Snippet } from 'svelte'
|
|
4
|
+
|
|
5
|
+
type HeadingLevel = 1 | 2 | 3 | 4 | 5 | 6
|
|
6
|
+
type HeadingVariant = 'display' | 'hero' | 'h1' | 'h2' | 'h3'
|
|
7
|
+
type TextColor = 'ink' | 'dim' | 'faint' | 'amber' | 'cyan' | 'ok' | 'danger'
|
|
8
|
+
type SizeVariant = 'xs' | 'sm' | 'md' | 'lg' | 'xl'
|
|
9
|
+
|
|
10
|
+
interface Props {
|
|
11
|
+
/** HTML heading level (h1–h6). @default 2 */
|
|
12
|
+
level?: HeadingLevel
|
|
13
|
+
/** Typography class to apply — defaults to the level's matching variant. */
|
|
14
|
+
variant?: HeadingVariant
|
|
15
|
+
/** Text colour mapped to a design token. */
|
|
16
|
+
color?: TextColor
|
|
17
|
+
/** Font size override mapped to a type-scale token. */
|
|
18
|
+
size?: SizeVariant
|
|
19
|
+
children?: Snippet
|
|
20
|
+
class?: ClassValue | null
|
|
21
|
+
style?: string | null
|
|
22
|
+
[key: string]: unknown
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
const DEFAULT_VARIANT: Partial<Record<HeadingLevel, HeadingVariant>> = {
|
|
26
|
+
1: 'h1',
|
|
27
|
+
2: 'h2',
|
|
28
|
+
3: 'h3',
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
const VARIANT_CLASS: Record<HeadingVariant, string> = {
|
|
32
|
+
display: 'display-heading',
|
|
33
|
+
hero: 'hero-heading',
|
|
34
|
+
h1: 'h1',
|
|
35
|
+
h2: 'h2',
|
|
36
|
+
h3: 'h3',
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
const COLOR_MAP: Record<NonNullable<TextColor>, string> = {
|
|
40
|
+
ink: 'ink',
|
|
41
|
+
dim: 'ink-dim',
|
|
42
|
+
faint: 'ink-faint',
|
|
43
|
+
amber: 'amber',
|
|
44
|
+
cyan: 'cyan',
|
|
45
|
+
ok: 'ok',
|
|
46
|
+
danger: 'danger',
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
let { level = 2, variant, color, size, children, class: klass = '', style, ...rest }: Props = $props()
|
|
50
|
+
|
|
51
|
+
const resolvedVariant = $derived(variant ?? DEFAULT_VARIANT[level])
|
|
52
|
+
const variantClass = $derived(resolvedVariant ? VARIANT_CLASS[resolvedVariant] : undefined)
|
|
53
|
+
const colorStyle = $derived(color ? `color: var(--${COLOR_MAP[color]});` : '')
|
|
54
|
+
const mergedStyle = $derived([colorStyle, style].filter(Boolean).join(' ') || undefined)
|
|
55
|
+
</script>
|
|
56
|
+
|
|
57
|
+
<svelte:element this={"h" + level} class={[variantClass, klass]} style={mergedStyle} data-size={size || undefined} {...rest}>
|
|
58
|
+
{@render children?.()}
|
|
59
|
+
</svelte:element>
|
|
60
|
+
|
|
61
|
+
<style>
|
|
62
|
+
.h1 {
|
|
63
|
+
font-family: var(--sans);
|
|
64
|
+
font-weight: 500;
|
|
65
|
+
font-size: var(--t-h1);
|
|
66
|
+
letter-spacing: -0.03em;
|
|
67
|
+
line-height: 1;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
.h2 {
|
|
71
|
+
font-family: var(--sans);
|
|
72
|
+
font-weight: 500;
|
|
73
|
+
font-size: var(--t-h2);
|
|
74
|
+
letter-spacing: -0.01em;
|
|
75
|
+
line-height: 1.1;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
.h3 {
|
|
79
|
+
font-family: var(--sans);
|
|
80
|
+
font-weight: 500;
|
|
81
|
+
font-size: var(--t-h3);
|
|
82
|
+
letter-spacing: -0.01em;
|
|
83
|
+
line-height: 1.2;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
.hero-heading {
|
|
87
|
+
font-family: var(--sans);
|
|
88
|
+
font-weight: 500;
|
|
89
|
+
font-size: var(--t-hero);
|
|
90
|
+
letter-spacing: -0.03em;
|
|
91
|
+
line-height: 1;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
.display-heading {
|
|
95
|
+
font-family: var(--sans);
|
|
96
|
+
font-weight: 500;
|
|
97
|
+
font-size: var(--t-display);
|
|
98
|
+
letter-spacing: -0.04em;
|
|
99
|
+
line-height: 0.9;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
[data-size="xs"] { font-size: var(--t-micro) }
|
|
103
|
+
[data-size="sm"] { font-size: var(--t-mono) }
|
|
104
|
+
[data-size="md"] { font-size: var(--t-body) }
|
|
105
|
+
[data-size="lg"] { font-size: var(--t-lede) }
|
|
106
|
+
[data-size="xl"] { font-size: var(--t-h3) }
|
|
107
|
+
</style>
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { ClassValue } from 'svelte/elements';
|
|
2
|
+
import type { Snippet } from 'svelte';
|
|
3
|
+
type HeadingLevel = 1 | 2 | 3 | 4 | 5 | 6;
|
|
4
|
+
type HeadingVariant = 'display' | 'hero' | 'h1' | 'h2' | 'h3';
|
|
5
|
+
type TextColor = 'ink' | 'dim' | 'faint' | 'amber' | 'cyan' | 'ok' | 'danger';
|
|
6
|
+
type SizeVariant = 'xs' | 'sm' | 'md' | 'lg' | 'xl';
|
|
7
|
+
interface Props {
|
|
8
|
+
/** HTML heading level (h1–h6). @default 2 */
|
|
9
|
+
level?: HeadingLevel;
|
|
10
|
+
/** Typography class to apply — defaults to the level's matching variant. */
|
|
11
|
+
variant?: HeadingVariant;
|
|
12
|
+
/** Text colour mapped to a design token. */
|
|
13
|
+
color?: TextColor;
|
|
14
|
+
/** Font size override mapped to a type-scale token. */
|
|
15
|
+
size?: SizeVariant;
|
|
16
|
+
children?: Snippet;
|
|
17
|
+
class?: ClassValue | null;
|
|
18
|
+
style?: string | null;
|
|
19
|
+
[key: string]: unknown;
|
|
20
|
+
}
|
|
21
|
+
declare const Heading: import("svelte").Component<Props, {}, "">;
|
|
22
|
+
type Heading = ReturnType<typeof Heading>;
|
|
23
|
+
export default Heading;
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
<script module lang="ts">
|
|
2
|
+
import { defineMeta } from "@storybook/addon-svelte-csf";
|
|
3
|
+
import { expect, within } from "storybook/test";
|
|
4
|
+
import Led from "./Led.svelte";
|
|
5
|
+
import { resolveTokenColor } from "../../storybook-utils.js";
|
|
6
|
+
|
|
7
|
+
const { Story } = defineMeta({
|
|
8
|
+
title: "Primitives/Led",
|
|
9
|
+
component: Led,
|
|
10
|
+
tags: ["autodocs"],
|
|
11
|
+
});
|
|
12
|
+
</script>
|
|
13
|
+
|
|
14
|
+
<Story name="Ok" args={{ color: "ok", "aria-label": "Status: ok" }}
|
|
15
|
+
play={async ({ canvasElement }) => {
|
|
16
|
+
const el = within(canvasElement).getByRole("status");
|
|
17
|
+
await expect(el).toBeVisible();
|
|
18
|
+
await expect(getComputedStyle(el).width).toBe("7px");
|
|
19
|
+
await expect(getComputedStyle(el).height).toBe("7px");
|
|
20
|
+
const okColor = resolveTokenColor("--ok");
|
|
21
|
+
await expect(getComputedStyle(el).backgroundColor).toBe(okColor);
|
|
22
|
+
await expect(getComputedStyle(el).borderRadius).toBe("50%");
|
|
23
|
+
}} />
|
|
24
|
+
|
|
25
|
+
<Story name="Amber" args={{ color: "amber", "aria-label": "Status: amber" }}
|
|
26
|
+
play={async ({ canvasElement }) => {
|
|
27
|
+
const el = within(canvasElement).getByRole("status");
|
|
28
|
+
await expect(el).toBeVisible();
|
|
29
|
+
const amberColor = resolveTokenColor("--amber");
|
|
30
|
+
await expect(getComputedStyle(el).backgroundColor).toBe(amberColor);
|
|
31
|
+
}} />
|
|
32
|
+
|
|
33
|
+
<Story name="Cyan" args={{ color: "cyan", "aria-label": "Status: cyan" }}
|
|
34
|
+
play={async ({ canvasElement }) => {
|
|
35
|
+
const el = within(canvasElement).getByRole("status");
|
|
36
|
+
await expect(el).toBeVisible();
|
|
37
|
+
const cyanColor = resolveTokenColor("--cyan");
|
|
38
|
+
await expect(getComputedStyle(el).backgroundColor).toBe(cyanColor);
|
|
39
|
+
}} />
|
|
40
|
+
|
|
41
|
+
<Story name="Danger" args={{ color: "danger", "aria-label": "Status: danger" }}
|
|
42
|
+
play={async ({ canvasElement }) => {
|
|
43
|
+
const el = within(canvasElement).getByRole("status");
|
|
44
|
+
await expect(el).toBeVisible();
|
|
45
|
+
const dangerColor = resolveTokenColor("--danger");
|
|
46
|
+
await expect(getComputedStyle(el).backgroundColor).toBe(dangerColor);
|
|
47
|
+
}} />
|
|
48
|
+
|
|
49
|
+
<Story name="Off" args={{ color: "off", "aria-label": "Status: off" }}
|
|
50
|
+
play={async ({ canvasElement }) => {
|
|
51
|
+
const el = within(canvasElement).getByRole("status");
|
|
52
|
+
await expect(el).toBeVisible();
|
|
53
|
+
const inkFaintColor = resolveTokenColor("--ink-faint");
|
|
54
|
+
await expect(getComputedStyle(el).backgroundColor).toBe(inkFaintColor);
|
|
55
|
+
await expect(getComputedStyle(el).boxShadow).toBe("none");
|
|
56
|
+
}} />
|
|
57
|
+
|
|
58
|
+
<Story name="Blink" args={{ color: "amber", blink: true, "aria-label": "Status: blinking" }}
|
|
59
|
+
play={async ({ canvasElement }) => {
|
|
60
|
+
const el = within(canvasElement).getByRole("status");
|
|
61
|
+
await expect(el).toBeVisible();
|
|
62
|
+
await expect(getComputedStyle(el).animationName).not.toBe("none");
|
|
63
|
+
}} />
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import Led from "./Led.svelte";
|
|
2
|
+
interface $$__sveltets_2_IsomorphicComponent<Props extends Record<string, any> = any, Events extends Record<string, any> = any, Slots extends Record<string, any> = any, Exports = {}, Bindings = string> {
|
|
3
|
+
new (options: import('svelte').ComponentConstructorOptions<Props>): import('svelte').SvelteComponent<Props, Events, Slots> & {
|
|
4
|
+
$$bindings?: Bindings;
|
|
5
|
+
} & Exports;
|
|
6
|
+
(internal: unknown, props: {
|
|
7
|
+
$$events?: Events;
|
|
8
|
+
$$slots?: Slots;
|
|
9
|
+
}): Exports & {
|
|
10
|
+
$set?: any;
|
|
11
|
+
$on?: any;
|
|
12
|
+
};
|
|
13
|
+
z_$$bindings?: Bindings;
|
|
14
|
+
}
|
|
15
|
+
declare const Led: $$__sveltets_2_IsomorphicComponent<Record<string, never>, {
|
|
16
|
+
[evt: string]: CustomEvent<any>;
|
|
17
|
+
}, {}, {}, string>;
|
|
18
|
+
type Led = InstanceType<typeof Led>;
|
|
19
|
+
export default Led;
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import type { HTMLAttributes } from 'svelte/elements'
|
|
3
|
+
|
|
4
|
+
type LedColor = 'ok' | 'amber' | 'cyan' | 'danger' | 'off'
|
|
5
|
+
|
|
6
|
+
interface Props extends HTMLAttributes<HTMLSpanElement> {
|
|
7
|
+
/** Colour of the LED indicator. @default 'ok' */
|
|
8
|
+
color?: LedColor
|
|
9
|
+
/** Whether the LED pulses with a blink animation. @default false */
|
|
10
|
+
blink?: boolean
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
let { color = 'ok', blink = false, ...rest }: Props = $props()
|
|
14
|
+
</script>
|
|
15
|
+
|
|
16
|
+
<span
|
|
17
|
+
role="status"
|
|
18
|
+
class="led led-{color}"
|
|
19
|
+
class:blink
|
|
20
|
+
{...rest}
|
|
21
|
+
></span>
|
|
22
|
+
|
|
23
|
+
<style>
|
|
24
|
+
.led {
|
|
25
|
+
width: 7px;
|
|
26
|
+
height: 7px;
|
|
27
|
+
border-radius: 50%;
|
|
28
|
+
display: inline-block;
|
|
29
|
+
flex-shrink: 0;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
.led-ok {
|
|
33
|
+
background: var(--ok);
|
|
34
|
+
box-shadow: 0 0 6px var(--ok);
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
.led-amber {
|
|
38
|
+
background: var(--amber);
|
|
39
|
+
box-shadow: 0 0 6px var(--amber);
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
.led-cyan {
|
|
43
|
+
background: var(--cyan);
|
|
44
|
+
box-shadow: 0 0 6px var(--cyan);
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
.led-danger {
|
|
48
|
+
background: var(--danger);
|
|
49
|
+
box-shadow: 0 0 6px var(--danger);
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
.led-off {
|
|
53
|
+
background: var(--ink-faint);
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
.blink {
|
|
57
|
+
animation: blink 1.6s steps(2, end) infinite;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
@keyframes blink {
|
|
61
|
+
50% {
|
|
62
|
+
opacity: 0.25;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
</style>
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { HTMLAttributes } from 'svelte/elements';
|
|
2
|
+
type LedColor = 'ok' | 'amber' | 'cyan' | 'danger' | 'off';
|
|
3
|
+
interface Props extends HTMLAttributes<HTMLSpanElement> {
|
|
4
|
+
/** Colour of the LED indicator. @default 'ok' */
|
|
5
|
+
color?: LedColor;
|
|
6
|
+
/** Whether the LED pulses with a blink animation. @default false */
|
|
7
|
+
blink?: boolean;
|
|
8
|
+
}
|
|
9
|
+
declare const Led: import("svelte").Component<Props, {}, "">;
|
|
10
|
+
type Led = ReturnType<typeof Led>;
|
|
11
|
+
export default Led;
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
<script module lang="ts">
|
|
2
|
+
import { defineMeta } from "@storybook/addon-svelte-csf";
|
|
3
|
+
import { expect, within } from "storybook/test";
|
|
4
|
+
import TagPill from "./TagPill.svelte";
|
|
5
|
+
import Inline from "../layout/Inline.svelte";
|
|
6
|
+
import {
|
|
7
|
+
resolveTokenColor,
|
|
8
|
+
resolveTokenFgColor,
|
|
9
|
+
} from "../../storybook-utils.js";
|
|
10
|
+
|
|
11
|
+
const { Story } = defineMeta({
|
|
12
|
+
title: "Primitives/TagPill",
|
|
13
|
+
component: TagPill,
|
|
14
|
+
tags: ["autodocs"],
|
|
15
|
+
});
|
|
16
|
+
</script>
|
|
17
|
+
|
|
18
|
+
<Story
|
|
19
|
+
name="Default"
|
|
20
|
+
args={{ variant: "default" }}
|
|
21
|
+
play={async ({ canvasElement }) => {
|
|
22
|
+
const canvas = within(canvasElement);
|
|
23
|
+
const pill = canvas.getByText("Utility");
|
|
24
|
+
await expect(pill).toBeVisible();
|
|
25
|
+
await expect(getComputedStyle(pill).fontFamily.toLowerCase()).toContain(
|
|
26
|
+
"jetbrains",
|
|
27
|
+
);
|
|
28
|
+
await expect(getComputedStyle(pill).textTransform).toBe("uppercase");
|
|
29
|
+
const inkFaintColor = resolveTokenFgColor("--ink-faint");
|
|
30
|
+
await expect(getComputedStyle(pill).color).toBe(inkFaintColor);
|
|
31
|
+
}}
|
|
32
|
+
>
|
|
33
|
+
Utility
|
|
34
|
+
</Story>
|
|
35
|
+
|
|
36
|
+
<Story
|
|
37
|
+
name="Amber"
|
|
38
|
+
args={{ variant: "amber" }}
|
|
39
|
+
play={async ({ canvasElement }) => {
|
|
40
|
+
const canvas = within(canvasElement);
|
|
41
|
+
const pill = canvas.getByText("Featured");
|
|
42
|
+
await expect(pill).toBeVisible();
|
|
43
|
+
const amberColor = resolveTokenFgColor("--amber");
|
|
44
|
+
await expect(getComputedStyle(pill).color).toBe(amberColor);
|
|
45
|
+
// borderColor resolves as an RGB value; use same helper via background trick
|
|
46
|
+
const amberBgColor = resolveTokenColor("--amber");
|
|
47
|
+
await expect(getComputedStyle(pill).borderColor).toBe(amberBgColor);
|
|
48
|
+
}}
|
|
49
|
+
>
|
|
50
|
+
Featured
|
|
51
|
+
</Story>
|
|
52
|
+
|
|
53
|
+
<Story
|
|
54
|
+
name="Cyan"
|
|
55
|
+
args={{ variant: "cyan" }}
|
|
56
|
+
play={async ({ canvasElement }) => {
|
|
57
|
+
const canvas = within(canvasElement);
|
|
58
|
+
const pill = canvas.getByText("New");
|
|
59
|
+
await expect(pill).toBeVisible();
|
|
60
|
+
const cyanColor = resolveTokenFgColor("--cyan");
|
|
61
|
+
await expect(getComputedStyle(pill).color).toBe(cyanColor);
|
|
62
|
+
const cyanBgColor = resolveTokenColor("--cyan");
|
|
63
|
+
await expect(getComputedStyle(pill).borderColor).toBe(cyanBgColor);
|
|
64
|
+
}}
|
|
65
|
+
>
|
|
66
|
+
New
|
|
67
|
+
</Story>
|
|
68
|
+
|
|
69
|
+
<Story
|
|
70
|
+
name="Multiple Pills"
|
|
71
|
+
play={async ({ canvasElement }) => {
|
|
72
|
+
const canvas = within(canvasElement);
|
|
73
|
+
const utility = canvas.getByText("Utility");
|
|
74
|
+
const powerSupply = canvas.getByText("Power Supply");
|
|
75
|
+
const latest = canvas.getByText("Latest");
|
|
76
|
+
await expect(utility).toBeVisible();
|
|
77
|
+
await expect(powerSupply).toBeVisible();
|
|
78
|
+
await expect(latest).toBeVisible();
|
|
79
|
+
const inkFaintColor = resolveTokenFgColor("--ink-faint");
|
|
80
|
+
await expect(getComputedStyle(latest).color).not.toBe(inkFaintColor);
|
|
81
|
+
}}
|
|
82
|
+
>
|
|
83
|
+
{#snippet template()}
|
|
84
|
+
<Inline gap="sm">
|
|
85
|
+
<TagPill>Utility</TagPill>
|
|
86
|
+
<TagPill>Power Supply</TagPill>
|
|
87
|
+
<TagPill variant="amber">Latest</TagPill>
|
|
88
|
+
</Inline>
|
|
89
|
+
{/snippet}
|
|
90
|
+
</Story>
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import TagPill from "./TagPill.svelte";
|
|
2
|
+
interface $$__sveltets_2_IsomorphicComponent<Props extends Record<string, any> = any, Events extends Record<string, any> = any, Slots extends Record<string, any> = any, Exports = {}, Bindings = string> {
|
|
3
|
+
new (options: import('svelte').ComponentConstructorOptions<Props>): import('svelte').SvelteComponent<Props, Events, Slots> & {
|
|
4
|
+
$$bindings?: Bindings;
|
|
5
|
+
} & Exports;
|
|
6
|
+
(internal: unknown, props: {
|
|
7
|
+
$$events?: Events;
|
|
8
|
+
$$slots?: Slots;
|
|
9
|
+
}): Exports & {
|
|
10
|
+
$set?: any;
|
|
11
|
+
$on?: any;
|
|
12
|
+
};
|
|
13
|
+
z_$$bindings?: Bindings;
|
|
14
|
+
}
|
|
15
|
+
declare const TagPill: $$__sveltets_2_IsomorphicComponent<Record<string, never>, {
|
|
16
|
+
[evt: string]: CustomEvent<any>;
|
|
17
|
+
}, {}, {}, string>;
|
|
18
|
+
type TagPill = InstanceType<typeof TagPill>;
|
|
19
|
+
export default TagPill;
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import type { HTMLAttributes } from 'svelte/elements'
|
|
3
|
+
|
|
4
|
+
type TagPillVariant = 'default' | 'amber' | 'cyan'
|
|
5
|
+
|
|
6
|
+
interface Props extends HTMLAttributes<HTMLSpanElement> {
|
|
7
|
+
/** Colour variant of the pill. @default 'default' */
|
|
8
|
+
variant?: TagPillVariant
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
let { variant = 'default', children, ...rest }: Props = $props()
|
|
12
|
+
</script>
|
|
13
|
+
|
|
14
|
+
<span class="pill pill-{variant}" {...rest}>
|
|
15
|
+
{@render children?.()}
|
|
16
|
+
</span>
|
|
17
|
+
|
|
18
|
+
<style>
|
|
19
|
+
.pill {
|
|
20
|
+
display: inline-block;
|
|
21
|
+
font-family: var(--mono);
|
|
22
|
+
font-size: 11px;
|
|
23
|
+
letter-spacing: 0.1em;
|
|
24
|
+
text-transform: uppercase;
|
|
25
|
+
padding: 2px 6px;
|
|
26
|
+
border: 1px solid;
|
|
27
|
+
border-radius: 0;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
.pill-default {
|
|
31
|
+
color: var(--ink-faint);
|
|
32
|
+
border-color: var(--ink-faint);
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
.pill-amber {
|
|
36
|
+
color: var(--amber);
|
|
37
|
+
border-color: var(--amber);
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
.pill-cyan {
|
|
41
|
+
color: var(--cyan);
|
|
42
|
+
border-color: var(--cyan);
|
|
43
|
+
}
|
|
44
|
+
</style>
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { HTMLAttributes } from 'svelte/elements';
|
|
2
|
+
type TagPillVariant = 'default' | 'amber' | 'cyan';
|
|
3
|
+
interface Props extends HTMLAttributes<HTMLSpanElement> {
|
|
4
|
+
/** Colour variant of the pill. @default 'default' */
|
|
5
|
+
variant?: TagPillVariant;
|
|
6
|
+
}
|
|
7
|
+
declare const TagPill: import("svelte").Component<Props, {}, "">;
|
|
8
|
+
type TagPill = ReturnType<typeof TagPill>;
|
|
9
|
+
export default TagPill;
|