@dsn-starter-kit/components-web 1.0.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/LICENSE +21 -0
- package/README.md +120 -0
- package/dist/button/Button.d.ts +50 -0
- package/dist/button/Button.d.ts.map +1 -0
- package/dist/button/Button.js +247 -0
- package/dist/button/Button.js.map +1 -0
- package/dist/button/Button.test.d.ts +2 -0
- package/dist/button/Button.test.d.ts.map +1 -0
- package/dist/button/Button.test.js +299 -0
- package/dist/button/Button.test.js.map +1 -0
- package/dist/button/button-styles.generated.d.ts +2 -0
- package/dist/button/button-styles.generated.d.ts.map +1 -0
- package/dist/button/button-styles.generated.js +4 -0
- package/dist/button/button-styles.generated.js.map +1 -0
- package/dist/button/index.d.ts +3 -0
- package/dist/button/index.d.ts.map +1 -0
- package/dist/button/index.js +2 -0
- package/dist/button/index.js.map +1 -0
- package/dist/heading/Heading.d.ts +30 -0
- package/dist/heading/Heading.d.ts.map +1 -0
- package/dist/heading/Heading.js +79 -0
- package/dist/heading/Heading.js.map +1 -0
- package/dist/heading/Heading.test.d.ts +2 -0
- package/dist/heading/Heading.test.d.ts.map +1 -0
- package/dist/heading/Heading.test.js +157 -0
- package/dist/heading/Heading.test.js.map +1 -0
- package/dist/heading/heading-styles.generated.d.ts +2 -0
- package/dist/heading/heading-styles.generated.d.ts.map +1 -0
- package/dist/heading/heading-styles.generated.js +4 -0
- package/dist/heading/heading-styles.generated.js.map +1 -0
- package/dist/heading/index.d.ts +3 -0
- package/dist/heading/index.d.ts.map +1 -0
- package/dist/heading/index.js +2 -0
- package/dist/heading/index.js.map +1 -0
- package/dist/icon/Icon.d.ts +31 -0
- package/dist/icon/Icon.d.ts.map +1 -0
- package/dist/icon/Icon.js +110 -0
- package/dist/icon/Icon.js.map +1 -0
- package/dist/icon/Icon.test.d.ts +2 -0
- package/dist/icon/Icon.test.d.ts.map +1 -0
- package/dist/icon/Icon.test.js +193 -0
- package/dist/icon/Icon.test.js.map +1 -0
- package/dist/icon/icon-paths.generated.d.ts +2 -0
- package/dist/icon/icon-paths.generated.d.ts.map +1 -0
- package/dist/icon/icon-paths.generated.js +56 -0
- package/dist/icon/icon-paths.generated.js.map +1 -0
- package/dist/icon/icon-styles.generated.d.ts +2 -0
- package/dist/icon/icon-styles.generated.d.ts.map +1 -0
- package/dist/icon/icon-styles.generated.js +4 -0
- package/dist/icon/icon-styles.generated.js.map +1 -0
- package/dist/icon/index.d.ts +3 -0
- package/dist/icon/index.d.ts.map +1 -0
- package/dist/icon/index.js +2 -0
- package/dist/icon/index.js.map +1 -0
- package/dist/index.d.ts +52 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +71 -0
- package/dist/index.js.map +1 -0
- package/dist/link/Link.d.ts +52 -0
- package/dist/link/Link.d.ts.map +1 -0
- package/dist/link/Link.js +260 -0
- package/dist/link/Link.js.map +1 -0
- package/dist/link/Link.test.d.ts +2 -0
- package/dist/link/Link.test.d.ts.map +1 -0
- package/dist/link/Link.test.js +256 -0
- package/dist/link/Link.test.js.map +1 -0
- package/dist/link/index.d.ts +3 -0
- package/dist/link/index.d.ts.map +1 -0
- package/dist/link/index.js +2 -0
- package/dist/link/index.js.map +1 -0
- package/dist/link/link-styles.generated.d.ts +2 -0
- package/dist/link/link-styles.generated.d.ts.map +1 -0
- package/dist/link/link-styles.generated.js +4 -0
- package/dist/link/link-styles.generated.js.map +1 -0
- package/dist/ordered-list/OrderedList.d.ts +32 -0
- package/dist/ordered-list/OrderedList.d.ts.map +1 -0
- package/dist/ordered-list/OrderedList.js +72 -0
- package/dist/ordered-list/OrderedList.js.map +1 -0
- package/dist/ordered-list/OrderedList.test.d.ts +2 -0
- package/dist/ordered-list/OrderedList.test.d.ts.map +1 -0
- package/dist/ordered-list/OrderedList.test.js +82 -0
- package/dist/ordered-list/OrderedList.test.js.map +1 -0
- package/dist/ordered-list/index.d.ts +2 -0
- package/dist/ordered-list/index.d.ts.map +1 -0
- package/dist/ordered-list/index.js +2 -0
- package/dist/ordered-list/index.js.map +1 -0
- package/dist/ordered-list/ordered-list-styles.generated.d.ts +2 -0
- package/dist/ordered-list/ordered-list-styles.generated.d.ts.map +1 -0
- package/dist/ordered-list/ordered-list-styles.generated.js +4 -0
- package/dist/ordered-list/ordered-list-styles.generated.js.map +1 -0
- package/dist/paragraph/Paragraph.d.ts +26 -0
- package/dist/paragraph/Paragraph.d.ts.map +1 -0
- package/dist/paragraph/Paragraph.js +60 -0
- package/dist/paragraph/Paragraph.js.map +1 -0
- package/dist/paragraph/Paragraph.test.d.ts +2 -0
- package/dist/paragraph/Paragraph.test.d.ts.map +1 -0
- package/dist/paragraph/Paragraph.test.js +121 -0
- package/dist/paragraph/Paragraph.test.js.map +1 -0
- package/dist/paragraph/index.d.ts +3 -0
- package/dist/paragraph/index.d.ts.map +1 -0
- package/dist/paragraph/index.js +2 -0
- package/dist/paragraph/index.js.map +1 -0
- package/dist/paragraph/paragraph-styles.generated.d.ts +2 -0
- package/dist/paragraph/paragraph-styles.generated.d.ts.map +1 -0
- package/dist/paragraph/paragraph-styles.generated.js +4 -0
- package/dist/paragraph/paragraph-styles.generated.js.map +1 -0
- package/dist/unordered-list/UnorderedList.d.ts +22 -0
- package/dist/unordered-list/UnorderedList.d.ts.map +1 -0
- package/dist/unordered-list/UnorderedList.js +42 -0
- package/dist/unordered-list/UnorderedList.js.map +1 -0
- package/dist/unordered-list/UnorderedList.test.d.ts +2 -0
- package/dist/unordered-list/UnorderedList.test.d.ts.map +1 -0
- package/dist/unordered-list/UnorderedList.test.js +56 -0
- package/dist/unordered-list/UnorderedList.test.js.map +1 -0
- package/dist/unordered-list/index.d.ts +2 -0
- package/dist/unordered-list/index.d.ts.map +1 -0
- package/dist/unordered-list/index.js +2 -0
- package/dist/unordered-list/index.js.map +1 -0
- package/dist/unordered-list/unordered-list-styles.generated.d.ts +2 -0
- package/dist/unordered-list/unordered-list-styles.generated.d.ts.map +1 -0
- package/dist/unordered-list/unordered-list-styles.generated.js +4 -0
- package/dist/unordered-list/unordered-list-styles.generated.js.map +1 -0
- package/package.json +42 -0
- package/src/button/Button.test.ts +360 -0
- package/src/button/Button.ts +299 -0
- package/src/button/button-demo.html +477 -0
- package/src/button/button-styles.generated.ts +3 -0
- package/src/button/button.shadow.css +20 -0
- package/src/button/index.ts +2 -0
- package/src/heading/Heading.test.ts +186 -0
- package/src/heading/Heading.ts +104 -0
- package/src/heading/heading-styles.generated.ts +3 -0
- package/src/heading/heading.shadow.css +11 -0
- package/src/heading/index.ts +2 -0
- package/src/icon/Icon.test.ts +228 -0
- package/src/icon/Icon.ts +136 -0
- package/src/icon/icon-paths.generated.ts +55 -0
- package/src/icon/icon-styles.generated.ts +3 -0
- package/src/icon/icon.shadow.css +13 -0
- package/src/icon/index.ts +2 -0
- package/src/index.ts +83 -0
- package/src/link/Link.test.ts +309 -0
- package/src/link/Link.ts +284 -0
- package/src/link/index.ts +2 -0
- package/src/link/link-styles.generated.ts +3 -0
- package/src/link/link.shadow.css +15 -0
- package/src/ordered-list/OrderedList.test.ts +97 -0
- package/src/ordered-list/OrderedList.ts +84 -0
- package/src/ordered-list/index.ts +1 -0
- package/src/ordered-list/ordered-list-styles.generated.ts +3 -0
- package/src/ordered-list/ordered-list.shadow.css +11 -0
- package/src/paragraph/Paragraph.test.ts +143 -0
- package/src/paragraph/Paragraph.ts +77 -0
- package/src/paragraph/index.ts +2 -0
- package/src/paragraph/paragraph-styles.generated.ts +3 -0
- package/src/paragraph/paragraph.shadow.css +11 -0
- package/src/unordered-list/UnorderedList.test.ts +66 -0
- package/src/unordered-list/UnorderedList.ts +50 -0
- package/src/unordered-list/index.ts +1 -0
- package/src/unordered-list/unordered-list-styles.generated.ts +3 -0
- package/src/unordered-list/unordered-list.shadow.css +11 -0
|
@@ -0,0 +1,477 @@
|
|
|
1
|
+
<!doctype html>
|
|
2
|
+
<html lang="en">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="UTF-8" />
|
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
6
|
+
<title>Button Web Component - Design System</title>
|
|
7
|
+
|
|
8
|
+
<!-- Design Tokens -->
|
|
9
|
+
<link
|
|
10
|
+
rel="stylesheet"
|
|
11
|
+
href="../../../design-tokens/dist/css/variables.css"
|
|
12
|
+
/>
|
|
13
|
+
|
|
14
|
+
<!-- Core Styles -->
|
|
15
|
+
<link rel="stylesheet" href="../../../core/dist/core.css" />
|
|
16
|
+
|
|
17
|
+
<!-- Web Component -->
|
|
18
|
+
<script type="module">
|
|
19
|
+
import { defineButton } from './Button.js';
|
|
20
|
+
defineButton();
|
|
21
|
+
</script>
|
|
22
|
+
|
|
23
|
+
<style>
|
|
24
|
+
body {
|
|
25
|
+
font-family: var(--dsn-text-font-family-default);
|
|
26
|
+
padding: 2rem;
|
|
27
|
+
max-width: 1200px;
|
|
28
|
+
margin: 0 auto;
|
|
29
|
+
background-color: var(--dsn-color-neutral-bg-document);
|
|
30
|
+
color: var(--dsn-color-neutral-color-document);
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
.demo-section {
|
|
34
|
+
margin-bottom: 3rem;
|
|
35
|
+
padding: 2rem;
|
|
36
|
+
background: white;
|
|
37
|
+
border-radius: var(--dsn-border-radius-lg);
|
|
38
|
+
border: 1px solid var(--dsn-color-neutral-border-subtle);
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
.demo-section h2 {
|
|
42
|
+
margin-bottom: 1.5rem;
|
|
43
|
+
font-size: var(--dsn-text-font-size-xl);
|
|
44
|
+
color: var(--dsn-color-neutral-color-document);
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
.demo-section h3 {
|
|
48
|
+
margin-top: 2rem;
|
|
49
|
+
margin-bottom: 1rem;
|
|
50
|
+
font-size: var(--dsn-text-font-size-lg);
|
|
51
|
+
color: var(--dsn-color-neutral-color-default);
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
.demo-row {
|
|
55
|
+
display: flex;
|
|
56
|
+
flex-wrap: wrap;
|
|
57
|
+
gap: 1rem;
|
|
58
|
+
margin-bottom: 1.5rem;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
.demo-label {
|
|
62
|
+
font-size: var(--dsn-text-font-size-sm);
|
|
63
|
+
color: var(--dsn-color-neutral-color-subtle);
|
|
64
|
+
margin-bottom: 0.5rem;
|
|
65
|
+
font-weight: var(--dsn-text-font-weight-bold);
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
.code-example {
|
|
69
|
+
background: var(--dsn-color-neutral-bg-subtle);
|
|
70
|
+
padding: 1rem;
|
|
71
|
+
border-radius: var(--dsn-border-radius-md);
|
|
72
|
+
font-family: var(--dsn-text-font-family-monospace);
|
|
73
|
+
font-size: var(--dsn-text-font-size-sm);
|
|
74
|
+
margin-top: 0.5rem;
|
|
75
|
+
overflow-x: auto;
|
|
76
|
+
}
|
|
77
|
+
</style>
|
|
78
|
+
</head>
|
|
79
|
+
<body>
|
|
80
|
+
<h1>Button Web Component Examples</h1>
|
|
81
|
+
<p>
|
|
82
|
+
The <code><dsn-button></code> web component provides a consistent
|
|
83
|
+
button API across frameworks. It uses the same design tokens and visual
|
|
84
|
+
styling as the HTML and React button components.
|
|
85
|
+
</p>
|
|
86
|
+
|
|
87
|
+
<!-- Variants -->
|
|
88
|
+
<div class="demo-section">
|
|
89
|
+
<h2>Button Variants</h2>
|
|
90
|
+
|
|
91
|
+
<div class="demo-label">Strong (Main actions)</div>
|
|
92
|
+
<div class="demo-row">
|
|
93
|
+
<dsn-button variant="strong">Save</dsn-button>
|
|
94
|
+
<dsn-button variant="strong">Submit</dsn-button>
|
|
95
|
+
<dsn-button variant="strong">Continue</dsn-button>
|
|
96
|
+
</div>
|
|
97
|
+
<div class="code-example">
|
|
98
|
+
<dsn-button variant="strong">Save</dsn-button>
|
|
99
|
+
</div>
|
|
100
|
+
|
|
101
|
+
<div class="demo-label">Default (Alternative actions)</div>
|
|
102
|
+
<div class="demo-row">
|
|
103
|
+
<dsn-button variant="default">Cancel</dsn-button>
|
|
104
|
+
<dsn-button variant="default">Back</dsn-button>
|
|
105
|
+
<dsn-button variant="default">Learn more</dsn-button>
|
|
106
|
+
</div>
|
|
107
|
+
<div class="code-example">
|
|
108
|
+
<dsn-button variant="default">Cancel</dsn-button>
|
|
109
|
+
</div>
|
|
110
|
+
|
|
111
|
+
<div class="demo-label">Subtle (Low emphasis)</div>
|
|
112
|
+
<div class="demo-row">
|
|
113
|
+
<dsn-button variant="subtle">Edit</dsn-button>
|
|
114
|
+
<dsn-button variant="subtle">Share</dsn-button>
|
|
115
|
+
<dsn-button variant="subtle">More</dsn-button>
|
|
116
|
+
</div>
|
|
117
|
+
<div class="code-example">
|
|
118
|
+
<dsn-button variant="subtle">Edit</dsn-button>
|
|
119
|
+
</div>
|
|
120
|
+
|
|
121
|
+
<div class="demo-label">Link (Text-style button)</div>
|
|
122
|
+
<div class="demo-row">
|
|
123
|
+
<dsn-button variant="link">Learn more</dsn-button>
|
|
124
|
+
<dsn-button variant="link">View details</dsn-button>
|
|
125
|
+
<dsn-button variant="link">Skip</dsn-button>
|
|
126
|
+
</div>
|
|
127
|
+
<div class="code-example">
|
|
128
|
+
<dsn-button variant="link">Learn more</dsn-button>
|
|
129
|
+
</div>
|
|
130
|
+
|
|
131
|
+
<h3>Negative Sentiment</h3>
|
|
132
|
+
|
|
133
|
+
<div class="demo-label">Strong Negative (Destructive actions)</div>
|
|
134
|
+
<div class="demo-row">
|
|
135
|
+
<dsn-button variant="strong-negative">Delete</dsn-button>
|
|
136
|
+
<dsn-button variant="strong-negative">Remove</dsn-button>
|
|
137
|
+
<dsn-button variant="strong-negative">Reset</dsn-button>
|
|
138
|
+
</div>
|
|
139
|
+
<div class="code-example">
|
|
140
|
+
<dsn-button variant="strong-negative">Delete</dsn-button>
|
|
141
|
+
</div>
|
|
142
|
+
|
|
143
|
+
<div class="demo-label">Default Negative</div>
|
|
144
|
+
<div class="demo-row">
|
|
145
|
+
<dsn-button variant="default-negative">Delete</dsn-button>
|
|
146
|
+
<dsn-button variant="default-negative">Remove</dsn-button>
|
|
147
|
+
<dsn-button variant="default-negative">Discard</dsn-button>
|
|
148
|
+
</div>
|
|
149
|
+
|
|
150
|
+
<div class="demo-label">Subtle Negative</div>
|
|
151
|
+
<div class="demo-row">
|
|
152
|
+
<dsn-button variant="subtle-negative">Delete</dsn-button>
|
|
153
|
+
<dsn-button variant="subtle-negative">Remove</dsn-button>
|
|
154
|
+
<dsn-button variant="subtle-negative">Discard</dsn-button>
|
|
155
|
+
</div>
|
|
156
|
+
|
|
157
|
+
<h3>Positive Sentiment</h3>
|
|
158
|
+
|
|
159
|
+
<div class="demo-label">Strong Positive (Confirmation actions)</div>
|
|
160
|
+
<div class="demo-row">
|
|
161
|
+
<dsn-button variant="strong-positive">Approve</dsn-button>
|
|
162
|
+
<dsn-button variant="strong-positive">Confirm</dsn-button>
|
|
163
|
+
<dsn-button variant="strong-positive">Accept</dsn-button>
|
|
164
|
+
</div>
|
|
165
|
+
<div class="code-example">
|
|
166
|
+
<dsn-button variant="strong-positive">Approve</dsn-button>
|
|
167
|
+
</div>
|
|
168
|
+
|
|
169
|
+
<div class="demo-label">Default Positive</div>
|
|
170
|
+
<div class="demo-row">
|
|
171
|
+
<dsn-button variant="default-positive">Approve</dsn-button>
|
|
172
|
+
<dsn-button variant="default-positive">Like</dsn-button>
|
|
173
|
+
<dsn-button variant="default-positive">Enable</dsn-button>
|
|
174
|
+
</div>
|
|
175
|
+
|
|
176
|
+
<div class="demo-label">Subtle Positive</div>
|
|
177
|
+
<div class="demo-row">
|
|
178
|
+
<dsn-button variant="subtle-positive">Like</dsn-button>
|
|
179
|
+
<dsn-button variant="subtle-positive">Upvote</dsn-button>
|
|
180
|
+
<dsn-button variant="subtle-positive">Star</dsn-button>
|
|
181
|
+
</div>
|
|
182
|
+
</div>
|
|
183
|
+
|
|
184
|
+
<!-- Sizes -->
|
|
185
|
+
<div class="demo-section">
|
|
186
|
+
<h2>Button Sizes</h2>
|
|
187
|
+
|
|
188
|
+
<div class="demo-label">Small</div>
|
|
189
|
+
<div class="demo-row">
|
|
190
|
+
<dsn-button variant="strong" size="small">Small Strong</dsn-button>
|
|
191
|
+
<dsn-button variant="default" size="small">Small Default</dsn-button>
|
|
192
|
+
<dsn-button variant="strong-negative" size="small"
|
|
193
|
+
>Small Negative</dsn-button
|
|
194
|
+
>
|
|
195
|
+
</div>
|
|
196
|
+
<div class="code-example">
|
|
197
|
+
<dsn-button variant="strong" size="small">Small
|
|
198
|
+
Strong</dsn-button>
|
|
199
|
+
</div>
|
|
200
|
+
|
|
201
|
+
<div class="demo-label">Default (Medium)</div>
|
|
202
|
+
<div class="demo-row">
|
|
203
|
+
<dsn-button variant="strong" size="default">Default Strong</dsn-button>
|
|
204
|
+
<dsn-button variant="default" size="default"
|
|
205
|
+
>Default Default</dsn-button
|
|
206
|
+
>
|
|
207
|
+
<dsn-button variant="strong-negative" size="default"
|
|
208
|
+
>Default Negative</dsn-button
|
|
209
|
+
>
|
|
210
|
+
</div>
|
|
211
|
+
<div class="code-example">
|
|
212
|
+
<dsn-button variant="strong" size="default">Default
|
|
213
|
+
Strong</dsn-button>
|
|
214
|
+
</div>
|
|
215
|
+
|
|
216
|
+
<div class="demo-label">Large</div>
|
|
217
|
+
<div class="demo-row">
|
|
218
|
+
<dsn-button variant="strong" size="large">Large Strong</dsn-button>
|
|
219
|
+
<dsn-button variant="default" size="large">Large Default</dsn-button>
|
|
220
|
+
<dsn-button variant="strong-negative" size="large"
|
|
221
|
+
>Large Negative</dsn-button
|
|
222
|
+
>
|
|
223
|
+
</div>
|
|
224
|
+
<div class="code-example">
|
|
225
|
+
<dsn-button variant="strong" size="large">Large
|
|
226
|
+
Strong</dsn-button>
|
|
227
|
+
</div>
|
|
228
|
+
</div>
|
|
229
|
+
|
|
230
|
+
<!-- With Icons -->
|
|
231
|
+
<div class="demo-section">
|
|
232
|
+
<h2>Buttons with Icons</h2>
|
|
233
|
+
|
|
234
|
+
<div class="demo-label">Icon + Text</div>
|
|
235
|
+
<div class="demo-row">
|
|
236
|
+
<dsn-button variant="strong">
|
|
237
|
+
<svg
|
|
238
|
+
width="20"
|
|
239
|
+
height="20"
|
|
240
|
+
viewBox="0 0 24 24"
|
|
241
|
+
fill="none"
|
|
242
|
+
stroke="currentColor"
|
|
243
|
+
stroke-width="2"
|
|
244
|
+
stroke-linecap="round"
|
|
245
|
+
stroke-linejoin="round"
|
|
246
|
+
aria-hidden="true"
|
|
247
|
+
>
|
|
248
|
+
<path d="M12 5l0 14" />
|
|
249
|
+
<path d="M5 12l14 0" />
|
|
250
|
+
</svg>
|
|
251
|
+
Add item
|
|
252
|
+
</dsn-button>
|
|
253
|
+
|
|
254
|
+
<dsn-button variant="default">
|
|
255
|
+
<svg
|
|
256
|
+
width="20"
|
|
257
|
+
height="20"
|
|
258
|
+
viewBox="0 0 24 24"
|
|
259
|
+
fill="none"
|
|
260
|
+
stroke="currentColor"
|
|
261
|
+
stroke-width="2"
|
|
262
|
+
stroke-linecap="round"
|
|
263
|
+
stroke-linejoin="round"
|
|
264
|
+
aria-hidden="true"
|
|
265
|
+
>
|
|
266
|
+
<path d="M4 17v2a2 2 0 0 0 2 2h12a2 2 0 0 0 2 -2v-2" />
|
|
267
|
+
<path d="M7 11l5 5l5 -5" />
|
|
268
|
+
<path d="M12 4l0 12" />
|
|
269
|
+
</svg>
|
|
270
|
+
Download
|
|
271
|
+
</dsn-button>
|
|
272
|
+
|
|
273
|
+
<dsn-button variant="strong-negative">
|
|
274
|
+
<svg
|
|
275
|
+
width="20"
|
|
276
|
+
height="20"
|
|
277
|
+
viewBox="0 0 24 24"
|
|
278
|
+
fill="none"
|
|
279
|
+
stroke="currentColor"
|
|
280
|
+
stroke-width="2"
|
|
281
|
+
stroke-linecap="round"
|
|
282
|
+
stroke-linejoin="round"
|
|
283
|
+
aria-hidden="true"
|
|
284
|
+
>
|
|
285
|
+
<path d="M4 7l16 0" />
|
|
286
|
+
<path d="M10 11l0 6" />
|
|
287
|
+
<path d="M14 11l0 6" />
|
|
288
|
+
<path d="M5 7l1 12a2 2 0 0 0 2 2h8a2 2 0 0 0 2 -2l1 -12" />
|
|
289
|
+
<path d="M9 7v-3a1 1 0 0 1 1 -1h4a1 1 0 0 1 1 1v3" />
|
|
290
|
+
</svg>
|
|
291
|
+
Delete
|
|
292
|
+
</dsn-button>
|
|
293
|
+
</div>
|
|
294
|
+
|
|
295
|
+
<div class="demo-label">Icon Only</div>
|
|
296
|
+
<div class="demo-row">
|
|
297
|
+
<dsn-button variant="strong" icon-only aria-label="Add">
|
|
298
|
+
<svg
|
|
299
|
+
width="20"
|
|
300
|
+
height="20"
|
|
301
|
+
viewBox="0 0 24 24"
|
|
302
|
+
fill="none"
|
|
303
|
+
stroke="currentColor"
|
|
304
|
+
stroke-width="2"
|
|
305
|
+
stroke-linecap="round"
|
|
306
|
+
stroke-linejoin="round"
|
|
307
|
+
>
|
|
308
|
+
<path d="M12 5l0 14" />
|
|
309
|
+
<path d="M5 12l14 0" />
|
|
310
|
+
</svg>
|
|
311
|
+
</dsn-button>
|
|
312
|
+
|
|
313
|
+
<dsn-button variant="default" icon-only aria-label="Settings">
|
|
314
|
+
<svg
|
|
315
|
+
width="20"
|
|
316
|
+
height="20"
|
|
317
|
+
viewBox="0 0 24 24"
|
|
318
|
+
fill="none"
|
|
319
|
+
stroke="currentColor"
|
|
320
|
+
stroke-width="2"
|
|
321
|
+
stroke-linecap="round"
|
|
322
|
+
stroke-linejoin="round"
|
|
323
|
+
>
|
|
324
|
+
<path
|
|
325
|
+
d="M10.325 4.317c.426 -1.756 2.924 -1.756 3.35 0a1.724 1.724 0 0 0 2.573 1.066c1.543 -.94 3.31 .826 2.37 2.37a1.724 1.724 0 0 0 1.065 2.572c1.756 .426 1.756 2.924 0 3.35a1.724 1.724 0 0 0 -1.066 2.573c.94 1.543 -.826 3.31 -2.37 2.37a1.724 1.724 0 0 0 -2.572 1.065c-.426 1.756 -2.924 1.756 -3.35 0a1.724 1.724 0 0 0 -2.573 -1.066c-1.543 .94 -3.31 -.826 -2.37 -2.37a1.724 1.724 0 0 0 -1.065 -2.572c-1.756 -.426 -1.756 -2.924 0 -3.35a1.724 1.724 0 0 0 1.066 -2.573c-.94 -1.543 .826 -3.31 2.37 -2.37c1 .608 2.296 .07 2.572 -1.065z"
|
|
326
|
+
/>
|
|
327
|
+
<path d="M9 12a3 3 0 1 0 6 0a3 3 0 0 0 -6 0" />
|
|
328
|
+
</svg>
|
|
329
|
+
</dsn-button>
|
|
330
|
+
|
|
331
|
+
<dsn-button variant="subtle" icon-only aria-label="Close">
|
|
332
|
+
<svg
|
|
333
|
+
width="20"
|
|
334
|
+
height="20"
|
|
335
|
+
viewBox="0 0 24 24"
|
|
336
|
+
fill="none"
|
|
337
|
+
stroke="currentColor"
|
|
338
|
+
stroke-width="2"
|
|
339
|
+
stroke-linecap="round"
|
|
340
|
+
stroke-linejoin="round"
|
|
341
|
+
>
|
|
342
|
+
<path d="M18 6l-12 12" />
|
|
343
|
+
<path d="M6 6l12 12" />
|
|
344
|
+
</svg>
|
|
345
|
+
</dsn-button>
|
|
346
|
+
|
|
347
|
+
<dsn-button variant="strong-negative" icon-only aria-label="Delete">
|
|
348
|
+
<svg
|
|
349
|
+
width="20"
|
|
350
|
+
height="20"
|
|
351
|
+
viewBox="0 0 24 24"
|
|
352
|
+
fill="none"
|
|
353
|
+
stroke="currentColor"
|
|
354
|
+
stroke-width="2"
|
|
355
|
+
stroke-linecap="round"
|
|
356
|
+
stroke-linejoin="round"
|
|
357
|
+
>
|
|
358
|
+
<path d="M4 7l16 0" />
|
|
359
|
+
<path d="M10 11l0 6" />
|
|
360
|
+
<path d="M14 11l0 6" />
|
|
361
|
+
<path d="M5 7l1 12a2 2 0 0 0 2 2h8a2 2 0 0 0 2 -2l1 -12" />
|
|
362
|
+
<path d="M9 7v-3a1 1 0 0 1 1 -1h4a1 1 0 0 1 1 1v3" />
|
|
363
|
+
</svg>
|
|
364
|
+
</dsn-button>
|
|
365
|
+
</div>
|
|
366
|
+
<div class="code-example">
|
|
367
|
+
<dsn-button variant="strong" icon-only
|
|
368
|
+
aria-label="Add"><br /> <svg ...>...</svg><br /></dsn-button>
|
|
369
|
+
</div>
|
|
370
|
+
</div>
|
|
371
|
+
|
|
372
|
+
<!-- States -->
|
|
373
|
+
<div class="demo-section">
|
|
374
|
+
<h2>Button States</h2>
|
|
375
|
+
|
|
376
|
+
<div class="demo-label">Disabled</div>
|
|
377
|
+
<div class="demo-row">
|
|
378
|
+
<dsn-button variant="strong" disabled>Disabled Strong</dsn-button>
|
|
379
|
+
<dsn-button variant="default" disabled>Disabled Default</dsn-button>
|
|
380
|
+
<dsn-button variant="strong-negative" disabled
|
|
381
|
+
>Disabled Negative</dsn-button
|
|
382
|
+
>
|
|
383
|
+
</div>
|
|
384
|
+
<div class="code-example">
|
|
385
|
+
<dsn-button variant="strong" disabled>Disabled
|
|
386
|
+
Strong</dsn-button>
|
|
387
|
+
</div>
|
|
388
|
+
|
|
389
|
+
<div class="demo-label">Loading</div>
|
|
390
|
+
<div class="demo-row">
|
|
391
|
+
<dsn-button variant="strong" loading>Saving...</dsn-button>
|
|
392
|
+
<dsn-button variant="default" loading>Loading...</dsn-button>
|
|
393
|
+
</div>
|
|
394
|
+
<div class="code-example">
|
|
395
|
+
<dsn-button variant="strong" loading>Saving...</dsn-button>
|
|
396
|
+
</div>
|
|
397
|
+
</div>
|
|
398
|
+
|
|
399
|
+
<!-- Full Width -->
|
|
400
|
+
<div class="demo-section">
|
|
401
|
+
<h2>Full Width Buttons</h2>
|
|
402
|
+
|
|
403
|
+
<dsn-button variant="strong" full-width style="margin-bottom: 0.5rem">
|
|
404
|
+
Full Width Strong
|
|
405
|
+
</dsn-button>
|
|
406
|
+
<dsn-button variant="default" full-width>Full Width Default</dsn-button>
|
|
407
|
+
<div class="code-example">
|
|
408
|
+
<dsn-button variant="strong" full-width>Full Width
|
|
409
|
+
Strong</dsn-button>
|
|
410
|
+
</div>
|
|
411
|
+
</div>
|
|
412
|
+
|
|
413
|
+
<!-- API Comparison -->
|
|
414
|
+
<div class="demo-section">
|
|
415
|
+
<h2>API Comparison</h2>
|
|
416
|
+
<p>
|
|
417
|
+
The <code><dsn-button></code> web component uses the same naming
|
|
418
|
+
conventions as the React component:
|
|
419
|
+
</p>
|
|
420
|
+
<table
|
|
421
|
+
style="
|
|
422
|
+
width: 100%;
|
|
423
|
+
border-collapse: collapse;
|
|
424
|
+
margin-top: 1rem;
|
|
425
|
+
font-size: var(--dsn-text-font-size-sm);
|
|
426
|
+
"
|
|
427
|
+
>
|
|
428
|
+
<thead>
|
|
429
|
+
<tr style="background: var(--dsn-color-neutral-bg-subtle)">
|
|
430
|
+
<th style="padding: 0.75rem; text-align: left; border-bottom: 1px solid var(--dsn-color-neutral-border-default)">Feature</th>
|
|
431
|
+
<th style="padding: 0.75rem; text-align: left; border-bottom: 1px solid var(--dsn-color-neutral-border-default)">HTML (CSS classes)</th>
|
|
432
|
+
<th style="padding: 0.75rem; text-align: left; border-bottom: 1px solid var(--dsn-color-neutral-border-default)">React (props)</th>
|
|
433
|
+
<th style="padding: 0.75rem; text-align: left; border-bottom: 1px solid var(--dsn-color-neutral-border-default)">Web Component (attributes)</th>
|
|
434
|
+
</tr>
|
|
435
|
+
</thead>
|
|
436
|
+
<tbody>
|
|
437
|
+
<tr>
|
|
438
|
+
<td style="padding: 0.75rem; border-bottom: 1px solid var(--dsn-color-neutral-border-subtle)">Variant</td>
|
|
439
|
+
<td style="padding: 0.75rem; border-bottom: 1px solid var(--dsn-color-neutral-border-subtle)"><code>dsn-button--strong</code></td>
|
|
440
|
+
<td style="padding: 0.75rem; border-bottom: 1px solid var(--dsn-color-neutral-border-subtle)"><code>variant="strong"</code></td>
|
|
441
|
+
<td style="padding: 0.75rem; border-bottom: 1px solid var(--dsn-color-neutral-border-subtle)"><code>variant="strong"</code></td>
|
|
442
|
+
</tr>
|
|
443
|
+
<tr>
|
|
444
|
+
<td style="padding: 0.75rem; border-bottom: 1px solid var(--dsn-color-neutral-border-subtle)">Size</td>
|
|
445
|
+
<td style="padding: 0.75rem; border-bottom: 1px solid var(--dsn-color-neutral-border-subtle)"><code>dsn-button--size-small</code></td>
|
|
446
|
+
<td style="padding: 0.75rem; border-bottom: 1px solid var(--dsn-color-neutral-border-subtle)"><code>size="small"</code></td>
|
|
447
|
+
<td style="padding: 0.75rem; border-bottom: 1px solid var(--dsn-color-neutral-border-subtle)"><code>size="small"</code></td>
|
|
448
|
+
</tr>
|
|
449
|
+
<tr>
|
|
450
|
+
<td style="padding: 0.75rem; border-bottom: 1px solid var(--dsn-color-neutral-border-subtle)">Loading</td>
|
|
451
|
+
<td style="padding: 0.75rem; border-bottom: 1px solid var(--dsn-color-neutral-border-subtle)"><code>dsn-button--loading</code></td>
|
|
452
|
+
<td style="padding: 0.75rem; border-bottom: 1px solid var(--dsn-color-neutral-border-subtle)"><code>loading</code></td>
|
|
453
|
+
<td style="padding: 0.75rem; border-bottom: 1px solid var(--dsn-color-neutral-border-subtle)"><code>loading</code></td>
|
|
454
|
+
</tr>
|
|
455
|
+
<tr>
|
|
456
|
+
<td style="padding: 0.75rem; border-bottom: 1px solid var(--dsn-color-neutral-border-subtle)">Full width</td>
|
|
457
|
+
<td style="padding: 0.75rem; border-bottom: 1px solid var(--dsn-color-neutral-border-subtle)"><code>dsn-button--full-width</code></td>
|
|
458
|
+
<td style="padding: 0.75rem; border-bottom: 1px solid var(--dsn-color-neutral-border-subtle)"><code>fullWidth</code></td>
|
|
459
|
+
<td style="padding: 0.75rem; border-bottom: 1px solid var(--dsn-color-neutral-border-subtle)"><code>full-width</code></td>
|
|
460
|
+
</tr>
|
|
461
|
+
<tr>
|
|
462
|
+
<td style="padding: 0.75rem; border-bottom: 1px solid var(--dsn-color-neutral-border-subtle)">Icon only</td>
|
|
463
|
+
<td style="padding: 0.75rem; border-bottom: 1px solid var(--dsn-color-neutral-border-subtle)"><code>dsn-button--icon-only</code></td>
|
|
464
|
+
<td style="padding: 0.75rem; border-bottom: 1px solid var(--dsn-color-neutral-border-subtle)"><code>iconOnly</code></td>
|
|
465
|
+
<td style="padding: 0.75rem; border-bottom: 1px solid var(--dsn-color-neutral-border-subtle)"><code>icon-only</code></td>
|
|
466
|
+
</tr>
|
|
467
|
+
<tr>
|
|
468
|
+
<td style="padding: 0.75rem">Disabled</td>
|
|
469
|
+
<td style="padding: 0.75rem"><code>disabled</code></td>
|
|
470
|
+
<td style="padding: 0.75rem"><code>disabled</code></td>
|
|
471
|
+
<td style="padding: 0.75rem"><code>disabled</code></td>
|
|
472
|
+
</tr>
|
|
473
|
+
</tbody>
|
|
474
|
+
</table>
|
|
475
|
+
</div>
|
|
476
|
+
</body>
|
|
477
|
+
</html>
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
// Auto-generated — do not edit manually.
|
|
2
|
+
// Source: button.shadow.css + components-html source
|
|
3
|
+
export const buttonStyles = "/**\n * Shadow DOM wrapper styles for the Button Web Component.\n * The core button styles are imported from the shared HTML/CSS source.\n */\n\n:host {\n display: inline-block;\n}\n\n:host([full-width]) {\n display: block;\n width: 100%;\n}\n\n::slotted(*) {\n pointer-events: none;\n}\n\n/* Shared button styles - single source of truth */\n/**\n * Button Component\n * Uses component tokens for consistent styling\n */\n\n.dsn-button {\n /* Reset */\n display: inline-flex;\n align-self: flex-start;\n align-items: center;\n justify-content: center;\n position: relative; /* Ankerpunt voor DotBadge */\n\n /* Typography */\n font-family: var(--dsn-button-font-family);\n font-weight: var(--dsn-button-font-weight);\n line-height: var(--dsn-button-line-height);\n text-decoration: none;\n\n /* Borders */\n border: var(--dsn-button-border-width) solid transparent;\n border-radius: var(--dsn-button-border-radius);\n\n /* Interaction */\n cursor: pointer;\n user-select: none;\n transition:\n background-color var(--dsn-transition-duration-normal)\n var(--dsn-transition-easing-default),\n color var(--dsn-transition-duration-normal)\n var(--dsn-transition-easing-default),\n border-color var(--dsn-transition-duration-normal)\n var(--dsn-transition-easing-default);\n\n /* Accessibility - WCAG pointer target */\n min-block-size: var(--dsn-button-min-block-size);\n min-inline-size: var(--dsn-button-min-inline-size);\n}\n\n/* =============================================================================\n Size Variants\n ============================================================================= */\n\n.dsn-button--size-small {\n font-size: var(--dsn-button-size-small-font-size);\n padding-block: var(--dsn-button-size-small-padding-block);\n padding-inline: var(--dsn-button-size-small-padding-inline);\n gap: var(--dsn-button-size-small-gap);\n min-block-size: var(--dsn-button-size-small-min-block-size);\n}\n\n.dsn-button--size-default {\n font-size: var(--dsn-button-size-default-font-size);\n padding-block: var(--dsn-button-size-default-padding-block);\n padding-inline: var(--dsn-button-size-default-padding-inline);\n gap: var(--dsn-button-size-default-gap);\n}\n\n.dsn-button--size-large {\n font-size: var(--dsn-button-size-large-font-size);\n padding-block: var(--dsn-button-size-large-padding-block);\n padding-inline: var(--dsn-button-size-large-padding-inline);\n gap: var(--dsn-button-size-large-gap);\n}\n\n/* Icon sizing per button size */\n.dsn-button--size-small > .dsn-icon {\n width: var(--dsn-button-size-small-icon-size);\n height: var(--dsn-button-size-small-icon-size);\n}\n\n.dsn-button--size-default > .dsn-icon {\n width: var(--dsn-button-size-default-icon-size);\n height: var(--dsn-button-size-default-icon-size);\n}\n\n.dsn-button--size-large > .dsn-icon {\n width: var(--dsn-button-size-large-icon-size);\n height: var(--dsn-button-size-large-icon-size);\n}\n\n/* Icon Only Button */\n.dsn-button--icon-only {\n padding-inline: var(--dsn-button-size-default-icon-only-padding);\n}\n\n.dsn-button--icon-only.dsn-button--size-small {\n padding-inline: var(--dsn-button-size-small-icon-only-padding);\n}\n\n.dsn-button--icon-only.dsn-button--size-large {\n padding-inline: var(--dsn-button-size-large-icon-only-padding);\n}\n\n/* Icon Only — hide text label visually, keep accessible for screen readers */\n.dsn-button--icon-only .dsn-button__label {\n position: absolute;\n inline-size: 1px;\n block-size: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip-path: inset(50%);\n white-space: nowrap;\n border: 0;\n}\n\n/* =============================================================================\n Focus State\n ============================================================================= */\n\n.dsn-button:focus-visible {\n background-color: var(--dsn-focus-background-color);\n color: var(--dsn-focus-color);\n border-color: var(--dsn-focus-background-color);\n outline: var(--dsn-focus-outline-width) var(--dsn-focus-outline-style)\n var(--dsn-focus-outline-color);\n outline-offset: var(--dsn-focus-outline-offset);\n box-shadow: 0 0 0\n calc(var(--dsn-focus-outline-offset) + var(--dsn-focus-outline-width))\n var(--dsn-focus-inverse-outline-color);\n}\n\n/* =============================================================================\n Color Variants\n ============================================================================= */\n\n/* Variant: Strong (main CTA) */\n.dsn-button--strong {\n background-color: var(--dsn-button-strong-background-color);\n color: var(--dsn-button-strong-color);\n border-color: var(--dsn-button-strong-border-color);\n}\n\n.dsn-button--strong:hover:not(:disabled) {\n background-color: var(--dsn-button-strong-hover-background-color);\n color: var(--dsn-button-strong-hover-color);\n border-color: var(--dsn-button-strong-hover-border-color);\n}\n\n.dsn-button--strong:active:not(:disabled) {\n background-color: var(--dsn-button-strong-active-background-color);\n color: var(--dsn-button-strong-active-color);\n border-color: var(--dsn-button-strong-active-border-color);\n}\n\n/* Variant: Default (alternative actions) */\n.dsn-button--default {\n background-color: var(--dsn-button-default-background-color);\n color: var(--dsn-button-default-color);\n border-color: var(--dsn-button-default-border-color);\n}\n\n.dsn-button--default:hover:not(:disabled) {\n background-color: var(--dsn-button-default-hover-background-color);\n color: var(--dsn-button-default-hover-color);\n border-color: var(--dsn-button-default-hover-border-color);\n}\n\n.dsn-button--default:active:not(:disabled) {\n background-color: var(--dsn-button-default-active-background-color);\n color: var(--dsn-button-default-active-color);\n border-color: var(--dsn-button-default-active-border-color);\n}\n\n/* Variant: Subtle (low emphasis) */\n.dsn-button--subtle {\n background-color: var(--dsn-button-subtle-background-color);\n color: var(--dsn-button-subtle-color);\n border-color: var(--dsn-button-subtle-border-color);\n}\n\n.dsn-button--subtle:hover:not(:disabled) {\n background-color: var(--dsn-button-subtle-hover-background-color);\n color: var(--dsn-button-subtle-hover-color);\n border-color: var(--dsn-button-subtle-hover-border-color);\n}\n\n.dsn-button--subtle:active:not(:disabled) {\n background-color: var(--dsn-button-subtle-active-background-color);\n color: var(--dsn-button-subtle-active-color);\n border-color: var(--dsn-button-subtle-active-border-color);\n}\n\n/* =============================================================================\n Sentiment Variants: Negative\n ============================================================================= */\n\n.dsn-button--strong-negative {\n background-color: var(--dsn-button-strong-negative-background-color);\n color: var(--dsn-button-strong-negative-color);\n border-color: var(--dsn-button-strong-negative-border-color);\n}\n\n.dsn-button--strong-negative:hover:not(:disabled) {\n background-color: var(--dsn-button-strong-negative-hover-background-color);\n color: var(--dsn-button-strong-negative-hover-color);\n border-color: var(--dsn-button-strong-negative-hover-border-color);\n}\n\n.dsn-button--strong-negative:active:not(:disabled) {\n background-color: var(--dsn-button-strong-negative-active-background-color);\n color: var(--dsn-button-strong-negative-active-color);\n border-color: var(--dsn-button-strong-negative-active-border-color);\n}\n\n.dsn-button--default-negative {\n background-color: var(--dsn-button-default-negative-background-color);\n color: var(--dsn-button-default-negative-color);\n border-color: var(--dsn-button-default-negative-border-color);\n}\n\n.dsn-button--default-negative:hover:not(:disabled) {\n background-color: var(--dsn-button-default-negative-hover-background-color);\n color: var(--dsn-button-default-negative-hover-color);\n border-color: var(--dsn-button-default-negative-hover-border-color);\n}\n\n.dsn-button--default-negative:active:not(:disabled) {\n background-color: var(--dsn-button-default-negative-active-background-color);\n color: var(--dsn-button-default-negative-active-color);\n border-color: var(--dsn-button-default-negative-active-border-color);\n}\n\n.dsn-button--subtle-negative {\n background-color: var(--dsn-button-subtle-negative-background-color);\n color: var(--dsn-button-subtle-negative-color);\n border-color: var(--dsn-button-subtle-negative-border-color);\n}\n\n.dsn-button--subtle-negative:hover:not(:disabled) {\n background-color: var(--dsn-button-subtle-negative-hover-background-color);\n color: var(--dsn-button-subtle-negative-hover-color);\n border-color: var(--dsn-button-subtle-negative-hover-border-color);\n}\n\n.dsn-button--subtle-negative:active:not(:disabled) {\n background-color: var(--dsn-button-subtle-negative-active-background-color);\n color: var(--dsn-button-subtle-negative-active-color);\n border-color: var(--dsn-button-subtle-negative-active-border-color);\n}\n\n/* =============================================================================\n Sentiment Variants: Positive\n ============================================================================= */\n\n.dsn-button--strong-positive {\n background-color: var(--dsn-button-strong-positive-background-color);\n color: var(--dsn-button-strong-positive-color);\n border-color: var(--dsn-button-strong-positive-border-color);\n}\n\n.dsn-button--strong-positive:hover:not(:disabled) {\n background-color: var(--dsn-button-strong-positive-hover-background-color);\n color: var(--dsn-button-strong-positive-hover-color);\n border-color: var(--dsn-button-strong-positive-hover-border-color);\n}\n\n.dsn-button--strong-positive:active:not(:disabled) {\n background-color: var(--dsn-button-strong-positive-active-background-color);\n color: var(--dsn-button-strong-positive-active-color);\n border-color: var(--dsn-button-strong-positive-active-border-color);\n}\n\n.dsn-button--default-positive {\n background-color: var(--dsn-button-default-positive-background-color);\n color: var(--dsn-button-default-positive-color);\n border-color: var(--dsn-button-default-positive-border-color);\n}\n\n.dsn-button--default-positive:hover:not(:disabled) {\n background-color: var(--dsn-button-default-positive-hover-background-color);\n color: var(--dsn-button-default-positive-hover-color);\n border-color: var(--dsn-button-default-positive-hover-border-color);\n}\n\n.dsn-button--default-positive:active:not(:disabled) {\n background-color: var(--dsn-button-default-positive-active-background-color);\n color: var(--dsn-button-default-positive-active-color);\n border-color: var(--dsn-button-default-positive-active-border-color);\n}\n\n.dsn-button--subtle-positive {\n background-color: var(--dsn-button-subtle-positive-background-color);\n color: var(--dsn-button-subtle-positive-color);\n border-color: var(--dsn-button-subtle-positive-border-color);\n}\n\n.dsn-button--subtle-positive:hover:not(:disabled) {\n background-color: var(--dsn-button-subtle-positive-hover-background-color);\n color: var(--dsn-button-subtle-positive-hover-color);\n border-color: var(--dsn-button-subtle-positive-hover-border-color);\n}\n\n.dsn-button--subtle-positive:active:not(:disabled) {\n background-color: var(--dsn-button-subtle-positive-active-background-color);\n color: var(--dsn-button-subtle-positive-active-color);\n border-color: var(--dsn-button-subtle-positive-active-border-color);\n}\n\n/* =============================================================================\n States\n ============================================================================= */\n\n/* Disabled State */\n.dsn-button:disabled {\n background-color: var(--dsn-button-disabled-background-color);\n color: var(--dsn-button-disabled-color);\n border-color: var(--dsn-button-disabled-border-color);\n cursor: not-allowed;\n}\n\n/* Loading State */\n.dsn-button--loading {\n pointer-events: none;\n}\n\n.dsn-button--loading > .dsn-button__loader {\n animation: dsn-button-spin 0.8s linear infinite;\n}\n\n@keyframes dsn-button-spin {\n to {\n transform: rotate(360deg);\n }\n}\n\n/* Full Width */\n.dsn-button--full-width {\n width: 100%;\n}\n\n";
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shadow DOM wrapper styles for the Button Web Component.
|
|
3
|
+
* The core button styles are imported from the shared HTML/CSS source.
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
:host {
|
|
7
|
+
display: inline-block;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
:host([full-width]) {
|
|
11
|
+
display: block;
|
|
12
|
+
width: 100%;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
::slotted(*) {
|
|
16
|
+
pointer-events: none;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
/* Shared button styles - single source of truth */
|
|
20
|
+
@import '../../../components-html/src/button/button.css';
|