@openelement/ui 0.41.0-alpha.1
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 +78 -0
- package/package.json +142 -0
- package/src/daisy-classes.d.ts +7 -0
- package/src/daisy-classes.js +770 -0
- package/src/index.d.ts +57 -0
- package/src/index.js +62 -0
- package/src/manifest.d.ts +8 -0
- package/src/manifest.js +255 -0
- package/src/open-badge.d.ts +15 -0
- package/src/open-badge.js +88 -0
- package/src/open-brand-mark.d.ts +14 -0
- package/src/open-brand-mark.js +107 -0
- package/src/open-button.d.ts +38 -0
- package/src/open-button.js +219 -0
- package/src/open-callout.d.ts +26 -0
- package/src/open-callout.js +99 -0
- package/src/open-card.d.ts +33 -0
- package/src/open-card.js +107 -0
- package/src/open-code-block.d.ts +44 -0
- package/src/open-code-block.js +267 -0
- package/src/open-dialog.d.ts +47 -0
- package/src/open-dialog.js +235 -0
- package/src/open-dropdown.d.ts +25 -0
- package/src/open-dropdown.js +45 -0
- package/src/open-hero-ping.d.ts +27 -0
- package/src/open-hero-ping.js +136 -0
- package/src/open-input.d.ts +51 -0
- package/src/open-input.js +233 -0
- package/src/open-lab-panel.d.ts +16 -0
- package/src/open-lab-panel.js +151 -0
- package/src/open-lab-stage.d.ts +15 -0
- package/src/open-lab-stage.js +622 -0
- package/src/open-layout.d.ts +111 -0
- package/src/open-layout.js +1377 -0
- package/src/open-modal.d.ts +25 -0
- package/src/open-modal.js +48 -0
- package/src/open-props-tokens.d.ts +7 -0
- package/src/open-props-tokens.js +474 -0
- package/src/open-standards-visual.d.ts +20 -0
- package/src/open-standards-visual.js +425 -0
- package/src/open-step-card.d.ts +34 -0
- package/src/open-step-card.js +117 -0
- package/src/open-tabs.d.ts +27 -0
- package/src/open-tabs.js +56 -0
- package/src/open-theme-toggle.d.ts +38 -0
- package/src/open-theme-toggle.js +223 -0
|
@@ -0,0 +1,425 @@
|
|
|
1
|
+
/** @jsxImportSource @openelement/core */ /**
|
|
2
|
+
* @openelement/ui - open-standards-visual
|
|
3
|
+
*
|
|
4
|
+
* Product-art diagrams for the openElement standards lab website.
|
|
5
|
+
*/ import { OpenElement } from '@openelement/element';
|
|
6
|
+
import { StyleSheet } from '@openelement/core/style-sheet';
|
|
7
|
+
export const tagName = 'open-standards-visual';
|
|
8
|
+
const sheet = new StyleSheet();
|
|
9
|
+
sheet.replaceSync(`
|
|
10
|
+
:host {
|
|
11
|
+
display: block;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
* {
|
|
15
|
+
box-sizing: border-box;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
.visual {
|
|
19
|
+
display: grid;
|
|
20
|
+
gap: var(--size-4);
|
|
21
|
+
color: var(--text-primary);
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
.visual--high {
|
|
25
|
+
gap: var(--size-5);
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
.hero {
|
|
29
|
+
display: grid;
|
|
30
|
+
gap: var(--size-4);
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
.hero__top {
|
|
34
|
+
display: grid;
|
|
35
|
+
grid-template-columns: minmax(0, 1.12fr) minmax(0, .88fr);
|
|
36
|
+
gap: var(--size-4);
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
.code {
|
|
40
|
+
margin: 0;
|
|
41
|
+
overflow: auto;
|
|
42
|
+
color: var(--code-text);
|
|
43
|
+
font-family: var(--font-mono);
|
|
44
|
+
font-size: var(--font-size-00);
|
|
45
|
+
line-height: var(--font-lineheight-4);
|
|
46
|
+
white-space: pre-wrap;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
.mark {
|
|
50
|
+
color: var(--brand-light);
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
.spec {
|
|
54
|
+
display: grid;
|
|
55
|
+
gap: var(--size-3);
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
.spec__row,
|
|
59
|
+
.route,
|
|
60
|
+
.package,
|
|
61
|
+
.token,
|
|
62
|
+
.stage {
|
|
63
|
+
position: relative;
|
|
64
|
+
display: grid;
|
|
65
|
+
gap: var(--size-1);
|
|
66
|
+
padding: var(--size-3);
|
|
67
|
+
overflow: hidden;
|
|
68
|
+
border: var(--border-size-1) solid var(--border);
|
|
69
|
+
border-radius: var(--radius-2);
|
|
70
|
+
background: var(--bg-card);
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
.route::before,
|
|
74
|
+
.package::before,
|
|
75
|
+
.token::before,
|
|
76
|
+
.stage::before {
|
|
77
|
+
content: "";
|
|
78
|
+
position: absolute;
|
|
79
|
+
inset-block: 0;
|
|
80
|
+
inset-inline-start: 0;
|
|
81
|
+
width: var(--size-1);
|
|
82
|
+
background: var(--brand);
|
|
83
|
+
opacity: .72;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
.spec__key,
|
|
87
|
+
.route__path,
|
|
88
|
+
.package__name,
|
|
89
|
+
.token__name,
|
|
90
|
+
.stage__num {
|
|
91
|
+
color: var(--brand);
|
|
92
|
+
font-family: var(--font-mono);
|
|
93
|
+
font-size: var(--font-size-00);
|
|
94
|
+
font-weight: var(--font-weight-8);
|
|
95
|
+
letter-spacing: 0;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
.spec__value,
|
|
99
|
+
.route__desc,
|
|
100
|
+
.package__desc,
|
|
101
|
+
.token__desc,
|
|
102
|
+
.stage__copy {
|
|
103
|
+
color: var(--text-secondary);
|
|
104
|
+
font-size: var(--font-size-0);
|
|
105
|
+
line-height: var(--font-lineheight-3);
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
.pipeline {
|
|
109
|
+
display: grid;
|
|
110
|
+
grid-template-columns: repeat(5, minmax(0, 1fr));
|
|
111
|
+
gap: var(--size-2);
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
.stage {
|
|
115
|
+
min-height: var(--size-16);
|
|
116
|
+
background: color-mix(in srgb, var(--bg-card) 82%, var(--brand-subtle));
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
.visual--high .stage,
|
|
120
|
+
.visual--high .route,
|
|
121
|
+
.visual--high .package,
|
|
122
|
+
.visual--high .token {
|
|
123
|
+
background:
|
|
124
|
+
linear-gradient(135deg, color-mix(in srgb, var(--brand-subtle) 64%, transparent), transparent),
|
|
125
|
+
var(--bg-card);
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
.stage--success .stage__num,
|
|
129
|
+
.package--success .package__name {
|
|
130
|
+
color: var(--success);
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
.stage--success::before,
|
|
134
|
+
.package--success::before {
|
|
135
|
+
background: var(--success);
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
.stage--warning .stage__num,
|
|
139
|
+
.package--warning .package__name {
|
|
140
|
+
color: var(--warning);
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
.stage--warning::before,
|
|
144
|
+
.package--warning::before {
|
|
145
|
+
background: var(--warning);
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
.routes,
|
|
149
|
+
.packages,
|
|
150
|
+
.tokens {
|
|
151
|
+
display: grid;
|
|
152
|
+
gap: var(--size-3);
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
.route {
|
|
156
|
+
grid-template-columns: minmax(0, .44fr) minmax(0, 1fr);
|
|
157
|
+
align-items: start;
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
.package {
|
|
161
|
+
grid-template-columns: minmax(0, .36fr) minmax(0, 1fr);
|
|
162
|
+
align-items: start;
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
.tokens {
|
|
166
|
+
grid-template-columns: repeat(2, minmax(0, 1fr));
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
.token__swatch {
|
|
170
|
+
width: var(--size-8);
|
|
171
|
+
height: var(--size-5);
|
|
172
|
+
border-radius: var(--radius-1);
|
|
173
|
+
border: var(--border-size-1) solid var(--border);
|
|
174
|
+
background: var(--bg-card);
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
.token--brand .token__swatch { background: var(--brand); }
|
|
178
|
+
.token--success .token__swatch { background: var(--success); }
|
|
179
|
+
.token--warning .token__swatch { background: var(--warning); }
|
|
180
|
+
.token--info .token__swatch { background: var(--info); }
|
|
181
|
+
.token--surface .token__swatch { background: var(--bg-elevated); }
|
|
182
|
+
.token--code .token__swatch { background: var(--bg-code, var(--gray-11)); }
|
|
183
|
+
|
|
184
|
+
.matrix {
|
|
185
|
+
display: grid;
|
|
186
|
+
grid-template-columns: repeat(2, minmax(0, 1fr));
|
|
187
|
+
gap: var(--size-3);
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
.visual--motion .stage,
|
|
191
|
+
.visual--motion .route,
|
|
192
|
+
.visual--motion .package,
|
|
193
|
+
.visual--motion .token {
|
|
194
|
+
animation: visual-lift 7s var(--ease-2) infinite alternate;
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
.visual--motion .stage:nth-child(2),
|
|
198
|
+
.visual--motion .route:nth-child(2),
|
|
199
|
+
.visual--motion .package:nth-child(2),
|
|
200
|
+
.visual--motion .token:nth-child(2) {
|
|
201
|
+
animation-delay: 600ms;
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
.visual--motion .stage:nth-child(3),
|
|
205
|
+
.visual--motion .route:nth-child(3),
|
|
206
|
+
.visual--motion .package:nth-child(3),
|
|
207
|
+
.visual--motion .token:nth-child(3) {
|
|
208
|
+
animation-delay: 1200ms;
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
.visual--motion .code {
|
|
212
|
+
animation: visual-code 8s var(--ease-1) infinite alternate;
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
@keyframes visual-lift {
|
|
216
|
+
from {
|
|
217
|
+
filter: brightness(1);
|
|
218
|
+
}
|
|
219
|
+
to {
|
|
220
|
+
filter: brightness(1.12);
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
@keyframes visual-code {
|
|
225
|
+
from {
|
|
226
|
+
color: var(--code-text);
|
|
227
|
+
}
|
|
228
|
+
to {
|
|
229
|
+
color: var(--brand-light);
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
@media (prefers-reduced-motion: reduce) {
|
|
234
|
+
.visual--motion .stage,
|
|
235
|
+
.visual--motion .route,
|
|
236
|
+
.visual--motion .package,
|
|
237
|
+
.visual--motion .token,
|
|
238
|
+
.visual--motion .code {
|
|
239
|
+
animation: none;
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
@media (max-width: 760px) {
|
|
244
|
+
.hero__top,
|
|
245
|
+
.pipeline,
|
|
246
|
+
.route,
|
|
247
|
+
.package,
|
|
248
|
+
.tokens,
|
|
249
|
+
.matrix {
|
|
250
|
+
grid-template-columns: 1fr;
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
`);
|
|
254
|
+
export class OpenStandardsVisual extends OpenElement {
|
|
255
|
+
static styles = [
|
|
256
|
+
sheet
|
|
257
|
+
];
|
|
258
|
+
static observedAttributes = [
|
|
259
|
+
'variant',
|
|
260
|
+
'motion',
|
|
261
|
+
'emphasis'
|
|
262
|
+
];
|
|
263
|
+
render() {
|
|
264
|
+
const variant = this._getStr('variant', 'hero');
|
|
265
|
+
const visualClass = this._visualClass();
|
|
266
|
+
if (variant === 'routes') return this._routes(visualClass);
|
|
267
|
+
if (variant === 'packages') return this._packages(visualClass);
|
|
268
|
+
if (variant === 'tokens') return this._tokens(visualClass);
|
|
269
|
+
return this._hero(visualClass);
|
|
270
|
+
}
|
|
271
|
+
_getStr(attr, def) {
|
|
272
|
+
const camel = attr.replace(/-([a-z])/g, (_, c)=>c.toUpperCase());
|
|
273
|
+
const prop = this[camel] ?? this[attr];
|
|
274
|
+
if (prop !== undefined && prop !== null) return String(prop);
|
|
275
|
+
return this.getAttribute(attr) || def;
|
|
276
|
+
}
|
|
277
|
+
_visualClass() {
|
|
278
|
+
const motion = this._getStr('motion', 'auto') === 'off' ? 'still' : 'motion';
|
|
279
|
+
const emphasis = this._getStr('emphasis', 'normal') === 'high' ? 'high' : 'normal';
|
|
280
|
+
return `visual visual--${emphasis} visual--${motion}`;
|
|
281
|
+
}
|
|
282
|
+
_hero(visualClass) {
|
|
283
|
+
return <div className={`${visualClass} hero`}>
|
|
284
|
+
<div className='hero__top'>
|
|
285
|
+
<pre className='code'><code>{`export default app({
|
|
286
|
+
routes: './app/routes',
|
|
287
|
+
render: 'declarative-shadow-dom',
|
|
288
|
+
islands: 'interaction-only',
|
|
289
|
+
adapter: 'vite'
|
|
290
|
+
})`}</code></pre>
|
|
291
|
+
<div className='spec' aria-label='Standards sheet'>
|
|
292
|
+
<div className='spec__row'>
|
|
293
|
+
<span className='spec__key'>HTML</span>
|
|
294
|
+
<span className='spec__value'>
|
|
295
|
+
Declarative Shadow DOM as the first rendering target
|
|
296
|
+
</span>
|
|
297
|
+
</div>
|
|
298
|
+
<div className='spec__row'>
|
|
299
|
+
<span className='spec__key'>WC</span>
|
|
300
|
+
<span className='spec__value'>
|
|
301
|
+
Custom elements own behavior and progressive hydration
|
|
302
|
+
</span>
|
|
303
|
+
</div>
|
|
304
|
+
<div className='spec__row'>
|
|
305
|
+
<span className='spec__key'>API</span>
|
|
306
|
+
<span className='spec__value'>
|
|
307
|
+
Hono endpoints sit beside pages and content routes
|
|
308
|
+
</span>
|
|
309
|
+
</div>
|
|
310
|
+
</div>
|
|
311
|
+
</div>
|
|
312
|
+
<div className='pipeline' aria-label='Render pipeline'>
|
|
313
|
+
<div className='stage'>
|
|
314
|
+
<span className='stage__num'>01</span>
|
|
315
|
+
<span className='stage__copy'>Route</span>
|
|
316
|
+
</div>
|
|
317
|
+
<div className='stage stage--success'>
|
|
318
|
+
<span className='stage__num'>02</span>
|
|
319
|
+
<span className='stage__copy'>Render DSD</span>
|
|
320
|
+
</div>
|
|
321
|
+
<div className='stage'>
|
|
322
|
+
<span className='stage__num'>03</span>
|
|
323
|
+
<span className='stage__copy'>Ship HTML</span>
|
|
324
|
+
</div>
|
|
325
|
+
<div className='stage stage--warning'>
|
|
326
|
+
<span className='stage__num'>04</span>
|
|
327
|
+
<span className='stage__copy'>Hydrate island</span>
|
|
328
|
+
</div>
|
|
329
|
+
<div className='stage'>
|
|
330
|
+
<span className='stage__num'>05</span>
|
|
331
|
+
<span className='stage__copy'>Verify</span>
|
|
332
|
+
</div>
|
|
333
|
+
</div>
|
|
334
|
+
</div>;
|
|
335
|
+
}
|
|
336
|
+
_routes(visualClass) {
|
|
337
|
+
return <div className={`${visualClass} routes`} aria-label='Route graph'>
|
|
338
|
+
<div className='route'>
|
|
339
|
+
<span className='route__path'>/</span>
|
|
340
|
+
<span className='route__desc'>homepage lab artifact and product paths</span>
|
|
341
|
+
</div>
|
|
342
|
+
<div className='route'>
|
|
343
|
+
<span className='route__path'>/guide/*</span>
|
|
344
|
+
<span className='route__desc'>
|
|
345
|
+
build path, configuration, deployment, and production flow
|
|
346
|
+
</span>
|
|
347
|
+
</div>
|
|
348
|
+
<div className='route'>
|
|
349
|
+
<span className='route__path'>/architecture/*</span>
|
|
350
|
+
<span className='route__desc'>package graph, DSD, islands, and standards registry</span>
|
|
351
|
+
</div>
|
|
352
|
+
<div className='route'>
|
|
353
|
+
<span className='route__path'>/api</span>
|
|
354
|
+
<span className='route__desc'>public contract index across the product graph</span>
|
|
355
|
+
</div>
|
|
356
|
+
</div>;
|
|
357
|
+
}
|
|
358
|
+
_packages(visualClass) {
|
|
359
|
+
return <div className={`${visualClass} packages`} aria-label='Package graph'>
|
|
360
|
+
<div className='package package--success'>
|
|
361
|
+
<span className='package__name'>Elements</span>
|
|
362
|
+
<span className='package__desc'>
|
|
363
|
+
custom elements, DSD rendering, and component contracts
|
|
364
|
+
</span>
|
|
365
|
+
</div>
|
|
366
|
+
<div className='package'>
|
|
367
|
+
<span className='package__name'>UI</span>
|
|
368
|
+
<span className='package__desc'>
|
|
369
|
+
Open Props primitives used by this website and consumers
|
|
370
|
+
</span>
|
|
371
|
+
</div>
|
|
372
|
+
<div className='package package--warning'>
|
|
373
|
+
<span className='package__name'>Framework</span>
|
|
374
|
+
<span className='package__desc'>
|
|
375
|
+
routes, layouts, content, islands, i18n, and adapter-vite
|
|
376
|
+
</span>
|
|
377
|
+
</div>
|
|
378
|
+
<div className='package'>
|
|
379
|
+
<span className='package__name'>Protocols</span>
|
|
380
|
+
<span className='package__desc'>
|
|
381
|
+
public boundary declarations and package compatibility language
|
|
382
|
+
</span>
|
|
383
|
+
</div>
|
|
384
|
+
</div>;
|
|
385
|
+
}
|
|
386
|
+
_tokens(visualClass) {
|
|
387
|
+
return <div className={`${visualClass} tokens`} aria-label='Token board'>
|
|
388
|
+
<div className='token token--surface'>
|
|
389
|
+
<span className='token__swatch'></span>
|
|
390
|
+
<span className='token__name'>--bg-card</span>
|
|
391
|
+
<span className='token__desc'>reading surfaces</span>
|
|
392
|
+
</div>
|
|
393
|
+
<div className='token token--brand'>
|
|
394
|
+
<span className='token__swatch'></span>
|
|
395
|
+
<span className='token__name'>--brand</span>
|
|
396
|
+
<span className='token__desc'>links and primary action</span>
|
|
397
|
+
</div>
|
|
398
|
+
<div className='token token--success'>
|
|
399
|
+
<span className='token__swatch'></span>
|
|
400
|
+
<span className='token__name'>--success</span>
|
|
401
|
+
<span className='token__desc'>standards and shipped state</span>
|
|
402
|
+
</div>
|
|
403
|
+
<div className='token token--warning'>
|
|
404
|
+
<span className='token__swatch'></span>
|
|
405
|
+
<span className='token__name'>--warning</span>
|
|
406
|
+
<span className='token__desc'>planned or directional state</span>
|
|
407
|
+
</div>
|
|
408
|
+
<div className='token token--info'>
|
|
409
|
+
<span className='token__swatch'></span>
|
|
410
|
+
<span className='token__name'>--info</span>
|
|
411
|
+
<span className='token__desc'>reference and API state</span>
|
|
412
|
+
</div>
|
|
413
|
+
<div className='token token--code'>
|
|
414
|
+
<span className='token__swatch'></span>
|
|
415
|
+
<span className='token__name'>--bg-code</span>
|
|
416
|
+
<span className='token__desc'>code and artifact panels</span>
|
|
417
|
+
</div>
|
|
418
|
+
</div>;
|
|
419
|
+
}
|
|
420
|
+
}
|
|
421
|
+
export default OpenStandardsVisual;
|
|
422
|
+
if (typeof customElements !== 'undefined' && !customElements.get(tagName)) {
|
|
423
|
+
customElements.define(tagName, OpenStandardsVisual);
|
|
424
|
+
}
|
|
425
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImZpbGU6Ly8vaG9tZS9ydW5uZXIvd29yay9vcGVuZWxlbWVudC9vcGVuZWxlbWVudC9wYWNrYWdlcy91aS9zcmMvb3Blbi1zdGFuZGFyZHMtdmlzdWFsLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiogQGpzeEltcG9ydFNvdXJjZSBAb3BlbmVsZW1lbnQvY29yZSAqL1xuLyoqXG4gKiBAb3BlbmVsZW1lbnQvdWkgLSBvcGVuLXN0YW5kYXJkcy12aXN1YWxcbiAqXG4gKiBQcm9kdWN0LWFydCBkaWFncmFtcyBmb3IgdGhlIG9wZW5FbGVtZW50IHN0YW5kYXJkcyBsYWIgd2Vic2l0ZS5cbiAqL1xuXG5pbXBvcnQgeyBPcGVuRWxlbWVudCB9IGZyb20gJ0BvcGVuZWxlbWVudC9lbGVtZW50JztcbmltcG9ydCB7IFN0eWxlU2hlZXQsIHR5cGUgU3R5bGVTaGVldExpa2UgfSBmcm9tICdAb3BlbmVsZW1lbnQvY29yZS9zdHlsZS1zaGVldCc7XG5cbmV4cG9ydCBjb25zdCB0YWdOYW1lID0gJ29wZW4tc3RhbmRhcmRzLXZpc3VhbCc7XG5cbmNvbnN0IHNoZWV0OiBTdHlsZVNoZWV0TGlrZSA9IG5ldyBTdHlsZVNoZWV0KCk7XG5zaGVldC5yZXBsYWNlU3luYyhgXG4gIDpob3N0IHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgfVxuXG4gICoge1xuICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIH1cblxuICAudmlzdWFsIHtcbiAgICBkaXNwbGF5OiBncmlkO1xuICAgIGdhcDogdmFyKC0tc2l6ZS00KTtcbiAgICBjb2xvcjogdmFyKC0tdGV4dC1wcmltYXJ5KTtcbiAgfVxuXG4gIC52aXN1YWwtLWhpZ2gge1xuICAgIGdhcDogdmFyKC0tc2l6ZS01KTtcbiAgfVxuXG4gIC5oZXJvIHtcbiAgICBkaXNwbGF5OiBncmlkO1xuICAgIGdhcDogdmFyKC0tc2l6ZS00KTtcbiAgfVxuXG4gIC5oZXJvX190b3Age1xuICAgIGRpc3BsYXk6IGdyaWQ7XG4gICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiBtaW5tYXgoMCwgMS4xMmZyKSBtaW5tYXgoMCwgLjg4ZnIpO1xuICAgIGdhcDogdmFyKC0tc2l6ZS00KTtcbiAgfVxuXG4gIC5jb2RlIHtcbiAgICBtYXJnaW46IDA7XG4gICAgb3ZlcmZsb3c6IGF1dG87XG4gICAgY29sb3I6IHZhcigtLWNvZGUtdGV4dCk7XG4gICAgZm9udC1mYW1pbHk6IHZhcigtLWZvbnQtbW9ubyk7XG4gICAgZm9udC1zaXplOiB2YXIoLS1mb250LXNpemUtMDApO1xuICAgIGxpbmUtaGVpZ2h0OiB2YXIoLS1mb250LWxpbmVoZWlnaHQtNCk7XG4gICAgd2hpdGUtc3BhY2U6IHByZS13cmFwO1xuICB9XG5cbiAgLm1hcmsge1xuICAgIGNvbG9yOiB2YXIoLS1icmFuZC1saWdodCk7XG4gIH1cblxuICAuc3BlYyB7XG4gICAgZGlzcGxheTogZ3JpZDtcbiAgICBnYXA6IHZhcigtLXNpemUtMyk7XG4gIH1cblxuICAuc3BlY19fcm93LFxuICAucm91dGUsXG4gIC5wYWNrYWdlLFxuICAudG9rZW4sXG4gIC5zdGFnZSB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIGRpc3BsYXk6IGdyaWQ7XG4gICAgZ2FwOiB2YXIoLS1zaXplLTEpO1xuICAgIHBhZGRpbmc6IHZhcigtLXNpemUtMyk7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICBib3JkZXI6IHZhcigtLWJvcmRlci1zaXplLTEpIHNvbGlkIHZhcigtLWJvcmRlcik7XG4gICAgYm9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLTIpO1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWJnLWNhcmQpO1xuICB9XG5cbiAgLnJvdXRlOjpiZWZvcmUsXG4gIC5wYWNrYWdlOjpiZWZvcmUsXG4gIC50b2tlbjo6YmVmb3JlLFxuICAuc3RhZ2U6OmJlZm9yZSB7XG4gICAgY29udGVudDogXCJcIjtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgaW5zZXQtYmxvY2s6IDA7XG4gICAgaW5zZXQtaW5saW5lLXN0YXJ0OiAwO1xuICAgIHdpZHRoOiB2YXIoLS1zaXplLTEpO1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWJyYW5kKTtcbiAgICBvcGFjaXR5OiAuNzI7XG4gIH1cblxuICAuc3BlY19fa2V5LFxuICAucm91dGVfX3BhdGgsXG4gIC5wYWNrYWdlX19uYW1lLFxuICAudG9rZW5fX25hbWUsXG4gIC5zdGFnZV9fbnVtIHtcbiAgICBjb2xvcjogdmFyKC0tYnJhbmQpO1xuICAgIGZvbnQtZmFtaWx5OiB2YXIoLS1mb250LW1vbm8pO1xuICAgIGZvbnQtc2l6ZTogdmFyKC0tZm9udC1zaXplLTAwKTtcbiAgICBmb250LXdlaWdodDogdmFyKC0tZm9udC13ZWlnaHQtOCk7XG4gICAgbGV0dGVyLXNwYWNpbmc6IDA7XG4gIH1cblxuICAuc3BlY19fdmFsdWUsXG4gIC5yb3V0ZV9fZGVzYyxcbiAgLnBhY2thZ2VfX2Rlc2MsXG4gIC50b2tlbl9fZGVzYyxcbiAgLnN0YWdlX19jb3B5IHtcbiAgICBjb2xvcjogdmFyKC0tdGV4dC1zZWNvbmRhcnkpO1xuICAgIGZvbnQtc2l6ZTogdmFyKC0tZm9udC1zaXplLTApO1xuICAgIGxpbmUtaGVpZ2h0OiB2YXIoLS1mb250LWxpbmVoZWlnaHQtMyk7XG4gIH1cblxuICAucGlwZWxpbmUge1xuICAgIGRpc3BsYXk6IGdyaWQ7XG4gICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiByZXBlYXQoNSwgbWlubWF4KDAsIDFmcikpO1xuICAgIGdhcDogdmFyKC0tc2l6ZS0yKTtcbiAgfVxuXG4gIC5zdGFnZSB7XG4gICAgbWluLWhlaWdodDogdmFyKC0tc2l6ZS0xNik7XG4gICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLWJnLWNhcmQpIDgyJSwgdmFyKC0tYnJhbmQtc3VidGxlKSk7XG4gIH1cblxuICAudmlzdWFsLS1oaWdoIC5zdGFnZSxcbiAgLnZpc3VhbC0taGlnaCAucm91dGUsXG4gIC52aXN1YWwtLWhpZ2ggLnBhY2thZ2UsXG4gIC52aXN1YWwtLWhpZ2ggLnRva2VuIHtcbiAgICBiYWNrZ3JvdW5kOlxuICAgICAgbGluZWFyLWdyYWRpZW50KDEzNWRlZywgY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLWJyYW5kLXN1YnRsZSkgNjQlLCB0cmFuc3BhcmVudCksIHRyYW5zcGFyZW50KSxcbiAgICAgIHZhcigtLWJnLWNhcmQpO1xuICB9XG5cbiAgLnN0YWdlLS1zdWNjZXNzIC5zdGFnZV9fbnVtLFxuICAucGFja2FnZS0tc3VjY2VzcyAucGFja2FnZV9fbmFtZSB7XG4gICAgY29sb3I6IHZhcigtLXN1Y2Nlc3MpO1xuICB9XG5cbiAgLnN0YWdlLS1zdWNjZXNzOjpiZWZvcmUsXG4gIC5wYWNrYWdlLS1zdWNjZXNzOjpiZWZvcmUge1xuICAgIGJhY2tncm91bmQ6IHZhcigtLXN1Y2Nlc3MpO1xuICB9XG5cbiAgLnN0YWdlLS13YXJuaW5nIC5zdGFnZV9fbnVtLFxuICAucGFja2FnZS0td2FybmluZyAucGFja2FnZV9fbmFtZSB7XG4gICAgY29sb3I6IHZhcigtLXdhcm5pbmcpO1xuICB9XG5cbiAgLnN0YWdlLS13YXJuaW5nOjpiZWZvcmUsXG4gIC5wYWNrYWdlLS13YXJuaW5nOjpiZWZvcmUge1xuICAgIGJhY2tncm91bmQ6IHZhcigtLXdhcm5pbmcpO1xuICB9XG5cbiAgLnJvdXRlcyxcbiAgLnBhY2thZ2VzLFxuICAudG9rZW5zIHtcbiAgICBkaXNwbGF5OiBncmlkO1xuICAgIGdhcDogdmFyKC0tc2l6ZS0zKTtcbiAgfVxuXG4gIC5yb3V0ZSB7XG4gICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiBtaW5tYXgoMCwgLjQ0ZnIpIG1pbm1heCgwLCAxZnIpO1xuICAgIGFsaWduLWl0ZW1zOiBzdGFydDtcbiAgfVxuXG4gIC5wYWNrYWdlIHtcbiAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IG1pbm1heCgwLCAuMzZmcikgbWlubWF4KDAsIDFmcik7XG4gICAgYWxpZ24taXRlbXM6IHN0YXJ0O1xuICB9XG5cbiAgLnRva2VucyB7XG4gICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiByZXBlYXQoMiwgbWlubWF4KDAsIDFmcikpO1xuICB9XG5cbiAgLnRva2VuX19zd2F0Y2gge1xuICAgIHdpZHRoOiB2YXIoLS1zaXplLTgpO1xuICAgIGhlaWdodDogdmFyKC0tc2l6ZS01KTtcbiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtMSk7XG4gICAgYm9yZGVyOiB2YXIoLS1ib3JkZXItc2l6ZS0xKSBzb2xpZCB2YXIoLS1ib3JkZXIpO1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWJnLWNhcmQpO1xuICB9XG5cbiAgLnRva2VuLS1icmFuZCAudG9rZW5fX3N3YXRjaCB7IGJhY2tncm91bmQ6IHZhcigtLWJyYW5kKTsgfVxuICAudG9rZW4tLXN1Y2Nlc3MgLnRva2VuX19zd2F0Y2ggeyBiYWNrZ3JvdW5kOiB2YXIoLS1zdWNjZXNzKTsgfVxuICAudG9rZW4tLXdhcm5pbmcgLnRva2VuX19zd2F0Y2ggeyBiYWNrZ3JvdW5kOiB2YXIoLS13YXJuaW5nKTsgfVxuICAudG9rZW4tLWluZm8gLnRva2VuX19zd2F0Y2ggeyBiYWNrZ3JvdW5kOiB2YXIoLS1pbmZvKTsgfVxuICAudG9rZW4tLXN1cmZhY2UgLnRva2VuX19zd2F0Y2ggeyBiYWNrZ3JvdW5kOiB2YXIoLS1iZy1lbGV2YXRlZCk7IH1cbiAgLnRva2VuLS1jb2RlIC50b2tlbl9fc3dhdGNoIHsgYmFja2dyb3VuZDogdmFyKC0tYmctY29kZSwgdmFyKC0tZ3JheS0xMSkpOyB9XG5cbiAgLm1hdHJpeCB7XG4gICAgZGlzcGxheTogZ3JpZDtcbiAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdCgyLCBtaW5tYXgoMCwgMWZyKSk7XG4gICAgZ2FwOiB2YXIoLS1zaXplLTMpO1xuICB9XG5cbiAgLnZpc3VhbC0tbW90aW9uIC5zdGFnZSxcbiAgLnZpc3VhbC0tbW90aW9uIC5yb3V0ZSxcbiAgLnZpc3VhbC0tbW90aW9uIC5wYWNrYWdlLFxuICAudmlzdWFsLS1tb3Rpb24gLnRva2VuIHtcbiAgICBhbmltYXRpb246IHZpc3VhbC1saWZ0IDdzIHZhcigtLWVhc2UtMikgaW5maW5pdGUgYWx0ZXJuYXRlO1xuICB9XG5cbiAgLnZpc3VhbC0tbW90aW9uIC5zdGFnZTpudGgtY2hpbGQoMiksXG4gIC52aXN1YWwtLW1vdGlvbiAucm91dGU6bnRoLWNoaWxkKDIpLFxuICAudmlzdWFsLS1tb3Rpb24gLnBhY2thZ2U6bnRoLWNoaWxkKDIpLFxuICAudmlzdWFsLS1tb3Rpb24gLnRva2VuOm50aC1jaGlsZCgyKSB7XG4gICAgYW5pbWF0aW9uLWRlbGF5OiA2MDBtcztcbiAgfVxuXG4gIC52aXN1YWwtLW1vdGlvbiAuc3RhZ2U6bnRoLWNoaWxkKDMpLFxuICAudmlzdWFsLS1tb3Rpb24gLnJvdXRlOm50aC1jaGlsZCgzKSxcbiAgLnZpc3VhbC0tbW90aW9uIC5wYWNrYWdlOm50aC1jaGlsZCgzKSxcbiAgLnZpc3VhbC0tbW90aW9uIC50b2tlbjpudGgtY2hpbGQoMykge1xuICAgIGFuaW1hdGlvbi1kZWxheTogMTIwMG1zO1xuICB9XG5cbiAgLnZpc3VhbC0tbW90aW9uIC5jb2RlIHtcbiAgICBhbmltYXRpb246IHZpc3VhbC1jb2RlIDhzIHZhcigtLWVhc2UtMSkgaW5maW5pdGUgYWx0ZXJuYXRlO1xuICB9XG5cbiAgQGtleWZyYW1lcyB2aXN1YWwtbGlmdCB7XG4gICAgZnJvbSB7XG4gICAgICBmaWx0ZXI6IGJyaWdodG5lc3MoMSk7XG4gICAgfVxuICAgIHRvIHtcbiAgICAgIGZpbHRlcjogYnJpZ2h0bmVzcygxLjEyKTtcbiAgICB9XG4gIH1cblxuICBAa2V5ZnJhbWVzIHZpc3VhbC1jb2RlIHtcbiAgICBmcm9tIHtcbiAgICAgIGNvbG9yOiB2YXIoLS1jb2RlLXRleHQpO1xuICAgIH1cbiAgICB0byB7XG4gICAgICBjb2xvcjogdmFyKC0tYnJhbmQtbGlnaHQpO1xuICAgIH1cbiAgfVxuXG4gIEBtZWRpYSAocHJlZmVycy1yZWR1Y2VkLW1vdGlvbjogcmVkdWNlKSB7XG4gICAgLnZpc3VhbC0tbW90aW9uIC5zdGFnZSxcbiAgICAudmlzdWFsLS1tb3Rpb24gLnJvdXRlLFxuICAgIC52aXN1YWwtLW1vdGlvbiAucGFja2FnZSxcbiAgICAudmlzdWFsLS1tb3Rpb24gLnRva2VuLFxuICAgIC52aXN1YWwtLW1vdGlvbiAuY29kZSB7XG4gICAgICBhbmltYXRpb246IG5vbmU7XG4gICAgfVxuICB9XG5cbiAgQG1lZGlhIChtYXgtd2lkdGg6IDc2MHB4KSB7XG4gICAgLmhlcm9fX3RvcCxcbiAgICAucGlwZWxpbmUsXG4gICAgLnJvdXRlLFxuICAgIC5wYWNrYWdlLFxuICAgIC50b2tlbnMsXG4gICAgLm1hdHJpeCB7XG4gICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDFmcjtcbiAgICB9XG4gIH1cbmApO1xuXG5leHBvcnQgY2xhc3MgT3BlblN0YW5kYXJkc1Zpc3VhbCBleHRlbmRzIE9wZW5FbGVtZW50IHtcbiAgc3RhdGljIG92ZXJyaWRlIHN0eWxlcyA9IFtzaGVldF07XG4gIHN0YXRpYyBvdmVycmlkZSBvYnNlcnZlZEF0dHJpYnV0ZXMgPSBbJ3ZhcmlhbnQnLCAnbW90aW9uJywgJ2VtcGhhc2lzJ107XG5cbiAgb3ZlcnJpZGUgcmVuZGVyKCk6IFJldHVyblR5cGU8dHlwZW9mIE9wZW5FbGVtZW50LnByb3RvdHlwZS5yZW5kZXI+IHtcbiAgICBjb25zdCB2YXJpYW50ID0gdGhpcy5fZ2V0U3RyKCd2YXJpYW50JywgJ2hlcm8nKTtcbiAgICBjb25zdCB2aXN1YWxDbGFzcyA9IHRoaXMuX3Zpc3VhbENsYXNzKCk7XG4gICAgaWYgKHZhcmlhbnQgPT09ICdyb3V0ZXMnKSByZXR1cm4gdGhpcy5fcm91dGVzKHZpc3VhbENsYXNzKTtcbiAgICBpZiAodmFyaWFudCA9PT0gJ3BhY2thZ2VzJykgcmV0dXJuIHRoaXMuX3BhY2thZ2VzKHZpc3VhbENsYXNzKTtcbiAgICBpZiAodmFyaWFudCA9PT0gJ3Rva2VucycpIHJldHVybiB0aGlzLl90b2tlbnModmlzdWFsQ2xhc3MpO1xuICAgIHJldHVybiB0aGlzLl9oZXJvKHZpc3VhbENsYXNzKTtcbiAgfVxuXG4gIHByaXZhdGUgX2dldFN0cihhdHRyOiBzdHJpbmcsIGRlZjogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBjYW1lbCA9IGF0dHIucmVwbGFjZSgvLShbYS16XSkvZywgKF8sIGM6IHN0cmluZykgPT4gYy50b1VwcGVyQ2FzZSgpKTtcbiAgICBjb25zdCBwcm9wID0gKHRoaXMgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pW2NhbWVsXSA/P1xuICAgICAgKHRoaXMgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pW2F0dHJdO1xuICAgIGlmIChwcm9wICE9PSB1bmRlZmluZWQgJiYgcHJvcCAhPT0gbnVsbCkgcmV0dXJuIFN0cmluZyhwcm9wKTtcbiAgICByZXR1cm4gdGhpcy5nZXRBdHRyaWJ1dGUoYXR0cikgfHwgZGVmO1xuICB9XG5cbiAgcHJpdmF0ZSBfdmlzdWFsQ2xhc3MoKTogc3RyaW5nIHtcbiAgICBjb25zdCBtb3Rpb24gPSB0aGlzLl9nZXRTdHIoJ21vdGlvbicsICdhdXRvJykgPT09ICdvZmYnID8gJ3N0aWxsJyA6ICdtb3Rpb24nO1xuICAgIGNvbnN0IGVtcGhhc2lzID0gdGhpcy5fZ2V0U3RyKCdlbXBoYXNpcycsICdub3JtYWwnKSA9PT0gJ2hpZ2gnID8gJ2hpZ2gnIDogJ25vcm1hbCc7XG4gICAgcmV0dXJuIGB2aXN1YWwgdmlzdWFsLS0ke2VtcGhhc2lzfSB2aXN1YWwtLSR7bW90aW9ufWA7XG4gIH1cblxuICBwcml2YXRlIF9oZXJvKHZpc3VhbENsYXNzOiBzdHJpbmcpOiBSZXR1cm5UeXBlPHR5cGVvZiBPcGVuRWxlbWVudC5wcm90b3R5cGUucmVuZGVyPiB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtgJHt2aXN1YWxDbGFzc30gaGVyb2B9PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT0naGVyb19fdG9wJz5cbiAgICAgICAgICA8cHJlIGNsYXNzTmFtZT0nY29kZSc+PGNvZGU+e2BleHBvcnQgZGVmYXVsdCBhcHAoe1xuICByb3V0ZXM6ICcuL2FwcC9yb3V0ZXMnLFxuICByZW5kZXI6ICdkZWNsYXJhdGl2ZS1zaGFkb3ctZG9tJyxcbiAgaXNsYW5kczogJ2ludGVyYWN0aW9uLW9ubHknLFxuICBhZGFwdGVyOiAndml0ZSdcbn0pYH08L2NvZGU+PC9wcmU+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9J3NwZWMnIGFyaWEtbGFiZWw9J1N0YW5kYXJkcyBzaGVldCc+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT0nc3BlY19fcm93Jz5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPSdzcGVjX19rZXknPkhUTUw8L3NwYW4+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT0nc3BlY19fdmFsdWUnPlxuICAgICAgICAgICAgICAgIERlY2xhcmF0aXZlIFNoYWRvdyBET00gYXMgdGhlIGZpcnN0IHJlbmRlcmluZyB0YXJnZXRcbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT0nc3BlY19fcm93Jz5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPSdzcGVjX19rZXknPldDPC9zcGFuPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9J3NwZWNfX3ZhbHVlJz5cbiAgICAgICAgICAgICAgICBDdXN0b20gZWxlbWVudHMgb3duIGJlaGF2aW9yIGFuZCBwcm9ncmVzc2l2ZSBoeWRyYXRpb25cbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT0nc3BlY19fcm93Jz5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPSdzcGVjX19rZXknPkFQSTwvc3Bhbj5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPSdzcGVjX192YWx1ZSc+XG4gICAgICAgICAgICAgICAgSG9ubyBlbmRwb2ludHMgc2l0IGJlc2lkZSBwYWdlcyBhbmQgY29udGVudCByb3V0ZXNcbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT0ncGlwZWxpbmUnIGFyaWEtbGFiZWw9J1JlbmRlciBwaXBlbGluZSc+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9J3N0YWdlJz5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT0nc3RhZ2VfX251bSc+MDE8L3NwYW4+XG4gICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9J3N0YWdlX19jb3B5Jz5Sb3V0ZTwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT0nc3RhZ2Ugc3RhZ2UtLXN1Y2Nlc3MnPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPSdzdGFnZV9fbnVtJz4wMjwvc3Bhbj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT0nc3RhZ2VfX2NvcHknPlJlbmRlciBEU0Q8L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9J3N0YWdlJz5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT0nc3RhZ2VfX251bSc+MDM8L3NwYW4+XG4gICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9J3N0YWdlX19jb3B5Jz5TaGlwIEhUTUw8L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9J3N0YWdlIHN0YWdlLS13YXJuaW5nJz5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT0nc3RhZ2VfX251bSc+MDQ8L3NwYW4+XG4gICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9J3N0YWdlX19jb3B5Jz5IeWRyYXRlIGlzbGFuZDwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT0nc3RhZ2UnPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPSdzdGFnZV9fbnVtJz4wNTwvc3Bhbj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT0nc3RhZ2VfX2NvcHknPlZlcmlmeTwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBfcm91dGVzKHZpc3VhbENsYXNzOiBzdHJpbmcpOiBSZXR1cm5UeXBlPHR5cGVvZiBPcGVuRWxlbWVudC5wcm90b3R5cGUucmVuZGVyPiB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtgJHt2aXN1YWxDbGFzc30gcm91dGVzYH0gYXJpYS1sYWJlbD0nUm91dGUgZ3JhcGgnPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT0ncm91dGUnPlxuICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT0ncm91dGVfX3BhdGgnPi88L3NwYW4+XG4gICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPSdyb3V0ZV9fZGVzYyc+aG9tZXBhZ2UgbGFiIGFydGlmYWN0IGFuZCBwcm9kdWN0IHBhdGhzPC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9J3JvdXRlJz5cbiAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9J3JvdXRlX19wYXRoJz4vZ3VpZGUvKjwvc3Bhbj5cbiAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9J3JvdXRlX19kZXNjJz5cbiAgICAgICAgICAgIGJ1aWxkIHBhdGgsIGNvbmZpZ3VyYXRpb24sIGRlcGxveW1lbnQsIGFuZCBwcm9kdWN0aW9uIGZsb3dcbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT0ncm91dGUnPlxuICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT0ncm91dGVfX3BhdGgnPi9hcmNoaXRlY3R1cmUvKjwvc3Bhbj5cbiAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9J3JvdXRlX19kZXNjJz5wYWNrYWdlIGdyYXBoLCBEU0QsIGlzbGFuZHMsIGFuZCBzdGFuZGFyZHMgcmVnaXN0cnk8L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT0ncm91dGUnPlxuICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT0ncm91dGVfX3BhdGgnPi9hcGk8L3NwYW4+XG4gICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPSdyb3V0ZV9fZGVzYyc+cHVibGljIGNvbnRyYWN0IGluZGV4IGFjcm9zcyB0aGUgcHJvZHVjdCBncmFwaDwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBfcGFja2FnZXModmlzdWFsQ2xhc3M6IHN0cmluZyk6IFJldHVyblR5cGU8dHlwZW9mIE9wZW5FbGVtZW50LnByb3RvdHlwZS5yZW5kZXI+IHtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9e2Ake3Zpc3VhbENsYXNzfSBwYWNrYWdlc2B9IGFyaWEtbGFiZWw9J1BhY2thZ2UgZ3JhcGgnPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT0ncGFja2FnZSBwYWNrYWdlLS1zdWNjZXNzJz5cbiAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9J3BhY2thZ2VfX25hbWUnPkVsZW1lbnRzPC9zcGFuPlxuICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT0ncGFja2FnZV9fZGVzYyc+XG4gICAgICAgICAgICBjdXN0b20gZWxlbWVudHMsIERTRCByZW5kZXJpbmcsIGFuZCBjb21wb25lbnQgY29udHJhY3RzXG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9J3BhY2thZ2UnPlxuICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT0ncGFja2FnZV9fbmFtZSc+VUk8L3NwYW4+XG4gICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPSdwYWNrYWdlX19kZXNjJz5cbiAgICAgICAgICAgIE9wZW4gUHJvcHMgcHJpbWl0aXZlcyB1c2VkIGJ5IHRoaXMgd2Vic2l0ZSBhbmQgY29uc3VtZXJzXG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9J3BhY2thZ2UgcGFja2FnZS0td2FybmluZyc+XG4gICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPSdwYWNrYWdlX19uYW1lJz5GcmFtZXdvcms8L3NwYW4+XG4gICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPSdwYWNrYWdlX19kZXNjJz5cbiAgICAgICAgICAgIHJvdXRlcywgbGF5b3V0cywgY29udGVudCwgaXNsYW5kcywgaTE4biwgYW5kIGFkYXB0ZXItdml0ZVxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPSdwYWNrYWdlJz5cbiAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9J3BhY2thZ2VfX25hbWUnPlByb3RvY29sczwvc3Bhbj5cbiAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9J3BhY2thZ2VfX2Rlc2MnPlxuICAgICAgICAgICAgcHVibGljIGJvdW5kYXJ5IGRlY2xhcmF0aW9ucyBhbmQgcGFja2FnZSBjb21wYXRpYmlsaXR5IGxhbmd1YWdlXG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIF90b2tlbnModmlzdWFsQ2xhc3M6IHN0cmluZyk6IFJldHVyblR5cGU8dHlwZW9mIE9wZW5FbGVtZW50LnByb3RvdHlwZS5yZW5kZXI+IHtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9e2Ake3Zpc3VhbENsYXNzfSB0b2tlbnNgfSBhcmlhLWxhYmVsPSdUb2tlbiBib2FyZCc+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPSd0b2tlbiB0b2tlbi0tc3VyZmFjZSc+XG4gICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPSd0b2tlbl9fc3dhdGNoJz48L3NwYW4+XG4gICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPSd0b2tlbl9fbmFtZSc+LS1iZy1jYXJkPC9zcGFuPlxuICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT0ndG9rZW5fX2Rlc2MnPnJlYWRpbmcgc3VyZmFjZXM8L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT0ndG9rZW4gdG9rZW4tLWJyYW5kJz5cbiAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9J3Rva2VuX19zd2F0Y2gnPjwvc3Bhbj5cbiAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9J3Rva2VuX19uYW1lJz4tLWJyYW5kPC9zcGFuPlxuICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT0ndG9rZW5fX2Rlc2MnPmxpbmtzIGFuZCBwcmltYXJ5IGFjdGlvbjwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPSd0b2tlbiB0b2tlbi0tc3VjY2Vzcyc+XG4gICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPSd0b2tlbl9fc3dhdGNoJz48L3NwYW4+XG4gICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPSd0b2tlbl9fbmFtZSc+LS1zdWNjZXNzPC9zcGFuPlxuICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT0ndG9rZW5fX2Rlc2MnPnN0YW5kYXJkcyBhbmQgc2hpcHBlZCBzdGF0ZTwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPSd0b2tlbiB0b2tlbi0td2FybmluZyc+XG4gICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPSd0b2tlbl9fc3dhdGNoJz48L3NwYW4+XG4gICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPSd0b2tlbl9fbmFtZSc+LS13YXJuaW5nPC9zcGFuPlxuICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT0ndG9rZW5fX2Rlc2MnPnBsYW5uZWQgb3IgZGlyZWN0aW9uYWwgc3RhdGU8L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT0ndG9rZW4gdG9rZW4tLWluZm8nPlxuICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT0ndG9rZW5fX3N3YXRjaCc+PC9zcGFuPlxuICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT0ndG9rZW5fX25hbWUnPi0taW5mbzwvc3Bhbj5cbiAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9J3Rva2VuX19kZXNjJz5yZWZlcmVuY2UgYW5kIEFQSSBzdGF0ZTwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPSd0b2tlbiB0b2tlbi0tY29kZSc+XG4gICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPSd0b2tlbl9fc3dhdGNoJz48L3NwYW4+XG4gICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPSd0b2tlbl9fbmFtZSc+LS1iZy1jb2RlPC9zcGFuPlxuICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT0ndG9rZW5fX2Rlc2MnPmNvZGUgYW5kIGFydGlmYWN0IHBhbmVsczwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IE9wZW5TdGFuZGFyZHNWaXN1YWw7XG5cbmlmICh0eXBlb2YgY3VzdG9tRWxlbWVudHMgIT09ICd1bmRlZmluZWQnICYmICFjdXN0b21FbGVtZW50cy5nZXQodGFnTmFtZSkpIHtcbiAgY3VzdG9tRWxlbWVudHMuZGVmaW5lKHRhZ05hbWUsIE9wZW5TdGFuZGFyZHNWaXN1YWwpO1xufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHVDQUF1QyxHQUN2Qzs7OztDQUlDLEdBRUQsU0FBUyxXQUFXLFFBQVEsdUJBQXVCO0FBQ25ELFNBQVMsVUFBVSxRQUE2QixnQ0FBZ0M7QUFFaEYsT0FBTyxNQUFNLFVBQVUsd0JBQXdCO0FBRS9DLE1BQU0sUUFBd0IsSUFBSTtBQUNsQyxNQUFNLFdBQVcsQ0FBQyxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7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
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/** @jsxImportSource @openelement/core */ /**
|
|
2
|
+
* @openelement/ui - OpenStepCard Component
|
|
3
|
+
*
|
|
4
|
+
* Step card with numbered indicator and label.
|
|
5
|
+
* Used in Quick Start sections and Getting Started guides.
|
|
6
|
+
*
|
|
7
|
+
* v0.20.0: Migrated from DsdLitElement to DsdElement (Ocean component).
|
|
8
|
+
* v0.24.1: Migrated from html`` template to JSX (ADR-0057).
|
|
9
|
+
*
|
|
10
|
+
* @csspart container -The step card wrapper
|
|
11
|
+
* @csspart indicator -The step number circle
|
|
12
|
+
* @csspart title -The step label heading
|
|
13
|
+
* @csspart description -The step description paragraph
|
|
14
|
+
* @csspart content -The slot content area
|
|
15
|
+
*
|
|
16
|
+
* Usage:
|
|
17
|
+
* ```html
|
|
18
|
+
* <open-step-card step="1" label="Create">
|
|
19
|
+
* deno run -A npm:@openelement/create my-app
|
|
20
|
+
* </open-step-card>
|
|
21
|
+
* ```
|
|
22
|
+
*/ import { OpenElement } from '@openelement/element';
|
|
23
|
+
import { type StyleSheetLike } from '@openelement/core/style-sheet';
|
|
24
|
+
export declare const tagName: 'open-step-card';
|
|
25
|
+
declare const sheet: StyleSheetLike;
|
|
26
|
+
export declare class OpenStepCard extends OpenElement {
|
|
27
|
+
static override styles: [];
|
|
28
|
+
static override observedAttributes: [string, string, string, string];
|
|
29
|
+
override render(): ReturnType<typeof OpenElement.prototype.render>;
|
|
30
|
+
override attributeChangedCallback(_name: string, old: string | null, val: string | null): void;
|
|
31
|
+
private _syncDOM: any;
|
|
32
|
+
private _esc: any;
|
|
33
|
+
}
|
|
34
|
+
export default OpenStepCard;
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
/** @jsxImportSource @openelement/core */ /**
|
|
2
|
+
* @openelement/ui - OpenStepCard Component
|
|
3
|
+
*
|
|
4
|
+
* Step card with numbered indicator and label.
|
|
5
|
+
* Used in Quick Start sections and Getting Started guides.
|
|
6
|
+
*
|
|
7
|
+
* v0.20.0: Migrated from DsdLitElement to DsdElement (Ocean component).
|
|
8
|
+
* v0.24.1: Migrated from html`` template to JSX (ADR-0057).
|
|
9
|
+
*
|
|
10
|
+
* @csspart container -The step card wrapper
|
|
11
|
+
* @csspart indicator -The step number circle
|
|
12
|
+
* @csspart title -The step label heading
|
|
13
|
+
* @csspart description -The step description paragraph
|
|
14
|
+
* @csspart content -The slot content area
|
|
15
|
+
*
|
|
16
|
+
* Usage:
|
|
17
|
+
* ```html
|
|
18
|
+
* <open-step-card step="1" label="Create">
|
|
19
|
+
* deno run -A npm:@openelement/create my-app
|
|
20
|
+
* </open-step-card>
|
|
21
|
+
* ```
|
|
22
|
+
*/ import { OpenElement } from '@openelement/element';
|
|
23
|
+
import { StyleSheet } from '@openelement/core/style-sheet';
|
|
24
|
+
import { escapeHtml } from '@openelement/core';
|
|
25
|
+
export const tagName = 'open-step-card';
|
|
26
|
+
const sheet = new StyleSheet();
|
|
27
|
+
sheet.replaceSync(`
|
|
28
|
+
:host {
|
|
29
|
+
display: block;
|
|
30
|
+
}
|
|
31
|
+
.step-card {
|
|
32
|
+
border: var(--border-size-1) solid var(--gray-3);
|
|
33
|
+
border-radius: var(--radius-2);
|
|
34
|
+
padding: var(--size-4);
|
|
35
|
+
background: var(--gray-1);
|
|
36
|
+
position: relative;
|
|
37
|
+
border-top: var(--border-size-2) solid var(--brand);
|
|
38
|
+
}
|
|
39
|
+
.step-header {
|
|
40
|
+
display: flex;
|
|
41
|
+
align-items: center;
|
|
42
|
+
gap: var(--size-2);
|
|
43
|
+
margin-bottom: var(--size-2);
|
|
44
|
+
}
|
|
45
|
+
.step-number {
|
|
46
|
+
width: 28px;
|
|
47
|
+
height: 28px;
|
|
48
|
+
border-radius: var(--radius-round);
|
|
49
|
+
background: var(--brand);
|
|
50
|
+
color: var(--text-primary);
|
|
51
|
+
font-size: var(--font-size-00);
|
|
52
|
+
font-weight: var(--font-weight-7);
|
|
53
|
+
display: flex;
|
|
54
|
+
align-items: center;
|
|
55
|
+
justify-content: center;
|
|
56
|
+
flex-shrink: 0;
|
|
57
|
+
}
|
|
58
|
+
.step-label {
|
|
59
|
+
font-size: var(--font-size-00);
|
|
60
|
+
font-weight: var(--font-weight-6);
|
|
61
|
+
color: var(--gray-5);
|
|
62
|
+
text-transform: uppercase;
|
|
63
|
+
letter-spacing: var(--font-letterspacing-5);
|
|
64
|
+
}
|
|
65
|
+
.step-body {
|
|
66
|
+
font-size: var(--font-size-1);
|
|
67
|
+
line-height: var(--font-lineheight-3);
|
|
68
|
+
color: var(--gray-9);
|
|
69
|
+
}
|
|
70
|
+
.step-body ::slotted(code) {
|
|
71
|
+
font-family: var(--font-mono);
|
|
72
|
+
font-size: var(--font-size-00);
|
|
73
|
+
color: var(--gray-9);
|
|
74
|
+
}
|
|
75
|
+
`);
|
|
76
|
+
export class OpenStepCard extends OpenElement {
|
|
77
|
+
static styles = [
|
|
78
|
+
sheet
|
|
79
|
+
];
|
|
80
|
+
static observedAttributes = [
|
|
81
|
+
'step',
|
|
82
|
+
'label',
|
|
83
|
+
'description',
|
|
84
|
+
'status'
|
|
85
|
+
];
|
|
86
|
+
render() {
|
|
87
|
+
const step = parseInt(this.getAttribute('step') || '1', 10);
|
|
88
|
+
const label = this.getAttribute('label') || '';
|
|
89
|
+
const description = this.getAttribute('description') || '';
|
|
90
|
+
return <div className='step-card' part='container'>
|
|
91
|
+
<div className='step-header'>
|
|
92
|
+
<span className='step-number' part='indicator'>{step}</span>
|
|
93
|
+
<span className='step-label' part='title'>{this._esc(label)}</span>
|
|
94
|
+
</div>
|
|
95
|
+
{description && <p part='description' style='margin:0 0 var(--size-2);color:var(--gray-7);font-size:var(--font-size-0);'>
|
|
96
|
+
{this._esc(description)}
|
|
97
|
+
</p>}
|
|
98
|
+
<div className='step-body' part='content'>
|
|
99
|
+
<slot></slot>
|
|
100
|
+
</div>
|
|
101
|
+
</div>;
|
|
102
|
+
}
|
|
103
|
+
attributeChangedCallback(_name, old, val) {
|
|
104
|
+
if (old === val) return;
|
|
105
|
+
this._syncDOM();
|
|
106
|
+
}
|
|
107
|
+
_syncDOM() {
|
|
108
|
+
this.update();
|
|
109
|
+
}
|
|
110
|
+
_esc = escapeHtml;
|
|
111
|
+
}
|
|
112
|
+
export default OpenStepCard;
|
|
113
|
+
// Guard: idempotent across SSR paths
|
|
114
|
+
if (typeof customElements !== 'undefined' && !customElements.get(tagName)) {
|
|
115
|
+
customElements.define(tagName, OpenStepCard);
|
|
116
|
+
}
|
|
117
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImZpbGU6Ly8vaG9tZS9ydW5uZXIvd29yay9vcGVuZWxlbWVudC9vcGVuZWxlbWVudC9wYWNrYWdlcy91aS9zcmMvb3Blbi1zdGVwLWNhcmQudHN4Il0sInNvdXJjZXNDb250ZW50IjpbIi8qKiBAanN4SW1wb3J0U291cmNlIEBvcGVuZWxlbWVudC9jb3JlICovXG4vKipcbiAqIEBvcGVuZWxlbWVudC91aSAtIE9wZW5TdGVwQ2FyZCBDb21wb25lbnRcbiAqXG4gKiBTdGVwIGNhcmQgd2l0aCBudW1iZXJlZCBpbmRpY2F0b3IgYW5kIGxhYmVsLlxuICogVXNlZCBpbiBRdWljayBTdGFydCBzZWN0aW9ucyBhbmQgR2V0dGluZyBTdGFydGVkIGd1aWRlcy5cbiAqXG4gKiB2MC4yMC4wOiBNaWdyYXRlZCBmcm9tIERzZExpdEVsZW1lbnQgdG8gRHNkRWxlbWVudCAoT2NlYW4gY29tcG9uZW50KS5cbiAqIHYwLjI0LjE6IE1pZ3JhdGVkIGZyb20gaHRtbGBgIHRlbXBsYXRlIHRvIEpTWCAoQURSLTAwNTcpLlxuICpcbiAqIEBjc3NwYXJ0IGNvbnRhaW5lciAtVGhlIHN0ZXAgY2FyZCB3cmFwcGVyXG4gKiBAY3NzcGFydCBpbmRpY2F0b3IgLVRoZSBzdGVwIG51bWJlciBjaXJjbGVcbiAqIEBjc3NwYXJ0IHRpdGxlIC1UaGUgc3RlcCBsYWJlbCBoZWFkaW5nXG4gKiBAY3NzcGFydCBkZXNjcmlwdGlvbiAtVGhlIHN0ZXAgZGVzY3JpcHRpb24gcGFyYWdyYXBoXG4gKiBAY3NzcGFydCBjb250ZW50IC1UaGUgc2xvdCBjb250ZW50IGFyZWFcbiAqXG4gKiBVc2FnZTpcbiAqIGBgYGh0bWxcbiAqIDxvcGVuLXN0ZXAtY2FyZCBzdGVwPVwiMVwiIGxhYmVsPVwiQ3JlYXRlXCI+XG4gKiAgIGRlbm8gcnVuIC1BIG5wbTpAb3BlbmVsZW1lbnQvY3JlYXRlIG15LWFwcFxuICogPC9vcGVuLXN0ZXAtY2FyZD5cbiAqIGBgYFxuICovXG5cbmltcG9ydCB7IE9wZW5FbGVtZW50IH0gZnJvbSAnQG9wZW5lbGVtZW50L2VsZW1lbnQnO1xuaW1wb3J0IHsgU3R5bGVTaGVldCwgdHlwZSBTdHlsZVNoZWV0TGlrZSB9IGZyb20gJ0BvcGVuZWxlbWVudC9jb3JlL3N0eWxlLXNoZWV0JztcbmltcG9ydCB7IGVzY2FwZUh0bWwgfSBmcm9tICdAb3BlbmVsZW1lbnQvY29yZSc7XG5cbmV4cG9ydCBjb25zdCB0YWdOYW1lID0gJ29wZW4tc3RlcC1jYXJkJztcblxuY29uc3Qgc2hlZXQ6IFN0eWxlU2hlZXRMaWtlID0gbmV3IFN0eWxlU2hlZXQoKTtcbnNoZWV0LnJlcGxhY2VTeW5jKGBcbiAgOmhvc3Qge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICB9XG4gIC5zdGVwLWNhcmQge1xuICAgIGJvcmRlcjogdmFyKC0tYm9yZGVyLXNpemUtMSkgc29saWQgdmFyKC0tZ3JheS0zKTtcbiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtMik7XG4gICAgcGFkZGluZzogdmFyKC0tc2l6ZS00KTtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1ncmF5LTEpO1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICBib3JkZXItdG9wOiB2YXIoLS1ib3JkZXItc2l6ZS0yKSBzb2xpZCB2YXIoLS1icmFuZCk7XG4gIH1cbiAgLnN0ZXAtaGVhZGVyIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgZ2FwOiB2YXIoLS1zaXplLTIpO1xuICAgIG1hcmdpbi1ib3R0b206IHZhcigtLXNpemUtMik7XG4gIH1cbiAgLnN0ZXAtbnVtYmVyIHtcbiAgICB3aWR0aDogMjhweDtcbiAgICBoZWlnaHQ6IDI4cHg7XG4gICAgYm9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLXJvdW5kKTtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1icmFuZCk7XG4gICAgY29sb3I6IHZhcigtLXRleHQtcHJpbWFyeSk7XG4gICAgZm9udC1zaXplOiB2YXIoLS1mb250LXNpemUtMDApO1xuICAgIGZvbnQtd2VpZ2h0OiB2YXIoLS1mb250LXdlaWdodC03KTtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgZmxleC1zaHJpbms6IDA7XG4gIH1cbiAgLnN0ZXAtbGFiZWwge1xuICAgIGZvbnQtc2l6ZTogdmFyKC0tZm9udC1zaXplLTAwKTtcbiAgICBmb250LXdlaWdodDogdmFyKC0tZm9udC13ZWlnaHQtNik7XG4gICAgY29sb3I6IHZhcigtLWdyYXktNSk7XG4gICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgICBsZXR0ZXItc3BhY2luZzogdmFyKC0tZm9udC1sZXR0ZXJzcGFjaW5nLTUpO1xuICB9XG4gIC5zdGVwLWJvZHkge1xuICAgIGZvbnQtc2l6ZTogdmFyKC0tZm9udC1zaXplLTEpO1xuICAgIGxpbmUtaGVpZ2h0OiB2YXIoLS1mb250LWxpbmVoZWlnaHQtMyk7XG4gICAgY29sb3I6IHZhcigtLWdyYXktOSk7XG4gIH1cbiAgLnN0ZXAtYm9keSA6OnNsb3R0ZWQoY29kZSkge1xuICAgIGZvbnQtZmFtaWx5OiB2YXIoLS1mb250LW1vbm8pO1xuICAgIGZvbnQtc2l6ZTogdmFyKC0tZm9udC1zaXplLTAwKTtcbiAgICBjb2xvcjogdmFyKC0tZ3JheS05KTtcbiAgfVxuYCk7XG5cbmV4cG9ydCBjbGFzcyBPcGVuU3RlcENhcmQgZXh0ZW5kcyBPcGVuRWxlbWVudCB7XG4gIHN0YXRpYyBvdmVycmlkZSBzdHlsZXMgPSBbc2hlZXRdO1xuICBzdGF0aWMgb3ZlcnJpZGUgb2JzZXJ2ZWRBdHRyaWJ1dGVzID0gWydzdGVwJywgJ2xhYmVsJywgJ2Rlc2NyaXB0aW9uJywgJ3N0YXR1cyddO1xuXG4gIG92ZXJyaWRlIHJlbmRlcigpOiBSZXR1cm5UeXBlPHR5cGVvZiBPcGVuRWxlbWVudC5wcm90b3R5cGUucmVuZGVyPiB7XG4gICAgY29uc3Qgc3RlcCA9IHBhcnNlSW50KHRoaXMuZ2V0QXR0cmlidXRlKCdzdGVwJykgfHwgJzEnLCAxMCk7XG4gICAgY29uc3QgbGFiZWwgPSB0aGlzLmdldEF0dHJpYnV0ZSgnbGFiZWwnKSB8fCAnJztcbiAgICBjb25zdCBkZXNjcmlwdGlvbiA9IHRoaXMuZ2V0QXR0cmlidXRlKCdkZXNjcmlwdGlvbicpIHx8ICcnO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPSdzdGVwLWNhcmQnIHBhcnQ9J2NvbnRhaW5lcic+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPSdzdGVwLWhlYWRlcic+XG4gICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPSdzdGVwLW51bWJlcicgcGFydD0naW5kaWNhdG9yJz57c3RlcH08L3NwYW4+XG4gICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPSdzdGVwLWxhYmVsJyBwYXJ0PSd0aXRsZSc+e3RoaXMuX2VzYyhsYWJlbCl9PC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAge2Rlc2NyaXB0aW9uICYmIChcbiAgICAgICAgICA8cFxuICAgICAgICAgICAgcGFydD0nZGVzY3JpcHRpb24nXG4gICAgICAgICAgICBzdHlsZT0nbWFyZ2luOjAgMCB2YXIoLS1zaXplLTIpO2NvbG9yOnZhcigtLWdyYXktNyk7Zm9udC1zaXplOnZhcigtLWZvbnQtc2l6ZS0wKTsnXG4gICAgICAgICAgPlxuICAgICAgICAgICAge3RoaXMuX2VzYyhkZXNjcmlwdGlvbil9XG4gICAgICAgICAgPC9wPlxuICAgICAgICApfVxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT0nc3RlcC1ib2R5JyBwYXJ0PSdjb250ZW50Jz5cbiAgICAgICAgICA8c2xvdD48L3Nsb3Q+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuXG4gIG92ZXJyaWRlIGF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjayhfbmFtZTogc3RyaW5nLCBvbGQ6IHN0cmluZyB8IG51bGwsIHZhbDogc3RyaW5nIHwgbnVsbCk6IHZvaWQge1xuICAgIGlmIChvbGQgPT09IHZhbCkgcmV0dXJuO1xuICAgIHRoaXMuX3N5bmNET00oKTtcbiAgfVxuXG4gIHByaXZhdGUgX3N5bmNET00oKTogdm9pZCB7XG4gICAgdGhpcy51cGRhdGUoKTtcbiAgfVxuXG4gIHByaXZhdGUgX2VzYyA9IGVzY2FwZUh0bWw7XG59XG5cbmV4cG9ydCBkZWZhdWx0IE9wZW5TdGVwQ2FyZDtcblxuLy8gR3VhcmQ6IGlkZW1wb3RlbnQgYWNyb3NzIFNTUiBwYXRoc1xuaWYgKHR5cGVvZiBjdXN0b21FbGVtZW50cyAhPT0gJ3VuZGVmaW5lZCcgJiYgIWN1c3RvbUVsZW1lbnRzLmdldCh0YWdOYW1lKSkge1xuICBjdXN0b21FbGVtZW50cy5kZWZpbmUodGFnTmFtZSwgT3BlblN0ZXBDYXJkKTtcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx1Q0FBdUMsR0FDdkM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztDQXFCQyxHQUVELFNBQVMsV0FBVyxRQUFRLHVCQUF1QjtBQUNuRCxTQUFTLFVBQVUsUUFBNkIsZ0NBQWdDO0FBQ2hGLFNBQVMsVUFBVSxRQUFRLG9CQUFvQjtBQUUvQyxPQUFPLE1BQU0sVUFBVSxpQkFBaUI7QUFFeEMsTUFBTSxRQUF3QixJQUFJO0FBQ2xDLE1BQU0sV0FBVyxDQUFDLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQWdEbkIsQ0FBQztBQUVELE9BQU8sTUFBTSxxQkFBcUI7RUFDaEMsT0FBZ0IsU0FBUztJQUFDO0dBQU0sQ0FBQztFQUNqQyxPQUFnQixxQkFBcUI7SUFBQztJQUFRO0lBQVM7SUFBZTtHQUFTLENBQUM7RUFFdkUsU0FBMEQ7SUFDakUsTUFBTSxPQUFPLFNBQVMsSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLEtBQUs7SUFDeEQsTUFBTSxRQUFRLElBQUksQ0FBQyxZQUFZLENBQUMsWUFBWTtJQUM1QyxNQUFNLGNBQWMsSUFBSSxDQUFDLFlBQVksQ0FBQyxrQkFBa0I7SUFFeEQsUUFDRyxJQUFJLFVBQVUsWUFBWSxLQUFLLFlBQVk7UUFDMUMsQ0FBQyxJQUFJLFVBQVUsY0FBYztVQUMzQixDQUFDLEtBQUssVUFBVSxjQUFjLEtBQUssYUFBYSxPQUFPLEtBQUs7VUFDNUQsQ0FBQyxLQUFLLFVBQVUsYUFBYSxLQUFLLFNBQVMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEtBQUs7UUFDckUsRUFBRSxJQUFJO1FBQ04sQ0FBQyxnQkFDRSxFQUNDLEtBQUssY0FDTCxNQUFNLDZFQUNQO1lBQ0MsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWE7VUFDMUIsRUFBRSxHQUNGO1FBQ0YsQ0FBQyxJQUFJLFVBQVUsWUFBWSxLQUFLLFVBQVU7VUFDeEMsQ0FBQyxPQUFPLEtBQUs7UUFDZixFQUFFLElBQUk7TUFDUixFQUFFO0VBRU47RUFFUyx5QkFBeUIsS0FBYSxFQUFFLEdBQWtCLEVBQUUsR0FBa0IsRUFBUTtJQUM3RixJQUFJLFFBQVEsS0FBSztJQUNqQixJQUFJLENBQUMsUUFBUTtFQUNmO0VBRVEsV0FBaUI7SUFDdkIsSUFBSSxDQUFDLE1BQU07RUFDYjtFQUVRLE9BQU8sV0FBVztBQUM1QjtBQUVBLGVBQWUsYUFBYTtBQUU1QixxQ0FBcUM7QUFDckMsSUFBSSxPQUFPLG1CQUFtQixlQUFlLENBQUMsZUFBZSxHQUFHLENBQUMsVUFBVTtFQUN6RSxlQUFlLE1BQU0sQ0FBQyxTQUFTO0FBQ2pDIn0=
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/** @jsxImportSource @openelement/core */ /**
|
|
2
|
+
* @openelement/ui - open-tabs
|
|
3
|
+
*
|
|
4
|
+
* DaisyUI-style tabs using DsdElement + Signals.
|
|
5
|
+
* Reads light DOM children with `slot="tab"` and `slot="panel"`
|
|
6
|
+
* to render tab buttons and panel content.
|
|
7
|
+
*
|
|
8
|
+
* Usage:
|
|
9
|
+
* ```html
|
|
10
|
+
* <open-tabs>
|
|
11
|
+
* <span slot="tab">Tab 1</span>
|
|
12
|
+
* <span slot="tab">Tab 2</span>
|
|
13
|
+
* <div slot="panel">Panel 1 content</div>
|
|
14
|
+
* <div slot="panel">Panel 2 content</div>
|
|
15
|
+
* </open-tabs>
|
|
16
|
+
* ```
|
|
17
|
+
*
|
|
18
|
+
* @slot tab - Tab button labels (multiple)
|
|
19
|
+
* @slot panel - Tab panel content (multiple, one per tab)
|
|
20
|
+
*/ import { OpenElement, type VNode } from '@openelement/element';
|
|
21
|
+
import { daisyClassSheet } from "./daisy-classes.js";
|
|
22
|
+
export declare const tagName: 'open-tabs';
|
|
23
|
+
export declare class OpenTabs extends OpenElement {
|
|
24
|
+
static override styles: [];
|
|
25
|
+
override render(): VNode;
|
|
26
|
+
}
|
|
27
|
+
export default OpenTabs;
|