@skagerakenergi/design 0.5.1 → 0.6.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/INSTRUCTIONS.md
CHANGED
|
@@ -122,7 +122,10 @@ Interactive states use native HTML attributes and ARIA:
|
|
|
122
122
|
**Variants:** `--filled`, `--tonal`, `--elevated`, `--outlined`, `--text`
|
|
123
123
|
**M3 Expressive sizes:** `--xs` (32px), default (40px), `--md` (56px), `--lg` (96px), `--xl` (136px)
|
|
124
124
|
**Shape:** `--square` (rounded rectangle instead of pill)
|
|
125
|
-
**Toggle:** Add `aria-pressed="true"` or `aria-pressed="false"`
|
|
125
|
+
**Toggle:** Add `aria-pressed="true"` or `aria-pressed="false"` — adds `se-button--selected` state automatically
|
|
126
|
+
**Usage:** variant by emphasis — Filled (high) → Tonal (medium) → Outlined/Text (low). Labels 1–3 words, sentence case; never truncate or wrap. Max 3 buttons in one arrangement.
|
|
127
|
+
**Placement:** primary action (filled) at trailing edge; secondary (outlined/text) at leading edge. Used in dialogs, forms, cards, toolbars.
|
|
128
|
+
**Touch target:** 48 × 48 CSS px minimum; ensure container–background contrast ≥ 3:1.
|
|
126
129
|
|
|
127
130
|
```html
|
|
128
131
|
<!-- Filled button -->
|
|
@@ -137,7 +140,13 @@ Interactive states use native HTML attributes and ARIA:
|
|
|
137
140
|
<!-- Large square tonal button -->
|
|
138
141
|
<button class="se-button se-button--tonal se-button--lg se-button--square">Large</button>
|
|
139
142
|
|
|
140
|
-
<!-- Toggle button -->
|
|
143
|
+
<!-- Toggle button (selected) -->
|
|
144
|
+
<button class="se-button se-button--filled se-button--selected" aria-pressed="true">
|
|
145
|
+
<span class="se-button__icon material-symbols-outlined" aria-hidden="true">favorite</span>
|
|
146
|
+
Favorite
|
|
147
|
+
</button>
|
|
148
|
+
|
|
149
|
+
<!-- Toggle button (unselected) -->
|
|
141
150
|
<button class="se-button se-button--filled" aria-pressed="false">
|
|
142
151
|
<span class="se-button__icon material-symbols-outlined" aria-hidden="true">favorite</span>
|
|
143
152
|
Favorite
|
|
@@ -158,6 +167,9 @@ Interactive states use native HTML attributes and ARIA:
|
|
|
158
167
|
**Shape:** `--square`
|
|
159
168
|
**Width:** `--narrow`, default, `--wide`
|
|
160
169
|
**Toggle:** `aria-pressed="true"` / `"false"`
|
|
170
|
+
**Usage:** default for openers (menus, search); toggle for binary actions (favorite, bookmark). Group related icon buttons in toolbars.
|
|
171
|
+
**Toggle behavior:** outlined = unselected, filled = selected. Two visual cues required (not just color) — e.g. fill + weight.
|
|
172
|
+
**Touch target:** 48 × 48 CSS px minimum even when nested inside smaller containers. Tooltip on hover required on web.
|
|
161
173
|
|
|
162
174
|
```html
|
|
163
175
|
<!-- Standard icon button -->
|
|
@@ -185,6 +197,9 @@ Interactive states use native HTML attributes and ARIA:
|
|
|
185
197
|
**Sizes:** default (56px), `--medium` (80px), `--large` (96px)
|
|
186
198
|
**Container colors:** `--secondary`, `--tertiary` (default is primary container)
|
|
187
199
|
**Tone colors:** `--primary-tone`, `--secondary-tone`, `--tertiary-tone`
|
|
200
|
+
**Usage:** most important action on screen; one FAB per screen. Constructive actions only: create, favorite, share, start. Hide if unavailable — never disable.
|
|
201
|
+
**Placement:** compact/medium: lower-right corner. Expanded: upper-left (within navigation rail). Scale size with viewport. Tooltip on focus required on web.
|
|
202
|
+
**Contrast:** icon must have ≥ 3:1 contrast against container. Prioritize in focus order.
|
|
188
203
|
|
|
189
204
|
```html
|
|
190
205
|
<button class="se-fab" aria-label="Add">
|
|
@@ -211,6 +226,9 @@ Interactive states use native HTML attributes and ARIA:
|
|
|
211
226
|
**Sizes:** default (56px), `--medium` (80px), `--large` (96px)
|
|
212
227
|
**Container colors:** `--secondary`, `--tertiary` (default is primary container)
|
|
213
228
|
**Tone colors:** `--primary-tone`, `--secondary-tone`, `--tertiary-tone`
|
|
229
|
+
**Usage:** use on long, scrolling views needing persistent access to a primary action. Label 1–2 words; icon optional but label required. One per screen.
|
|
230
|
+
**Placement:** compact/medium: bottom of screen, center or trailing edge. Expanded: bottom-right or within navigation rail. Don't place in cards, dialogs, or upper half of mobile screens.
|
|
231
|
+
**Behavior:** collapses to FAB on scroll down; re-expands on scroll up.
|
|
214
232
|
|
|
215
233
|
```html
|
|
216
234
|
<button class="se-extended-fab">
|
|
@@ -259,8 +277,10 @@ Interactive states use native HTML attributes and ARIA:
|
|
|
259
277
|
|
|
260
278
|
**Variants:** `--filled`, `--tonal`, `--elevated`, `--outlined`
|
|
261
279
|
**M3 Expressive sizes:** `--xs`, default, `--md`, `--lg`, `--xl`
|
|
280
|
+
**Optional:** `se-split-button__icon` (leading icon in action button)
|
|
262
281
|
|
|
263
282
|
```html
|
|
283
|
+
<!-- Split button without icon -->
|
|
264
284
|
<div class="se-split-button se-split-button--filled">
|
|
265
285
|
<button class="se-split-button__action">
|
|
266
286
|
<span class="se-split-button__label">Save</span>
|
|
@@ -269,6 +289,17 @@ Interactive states use native HTML attributes and ARIA:
|
|
|
269
289
|
<span class="se-split-button__menu-icon" aria-hidden="true"><span class="material-symbols-outlined">arrow_drop_down</span></span>
|
|
270
290
|
</button>
|
|
271
291
|
</div>
|
|
292
|
+
|
|
293
|
+
<!-- Split button with leading icon -->
|
|
294
|
+
<div class="se-split-button se-split-button--tonal">
|
|
295
|
+
<button class="se-split-button__action">
|
|
296
|
+
<span class="se-split-button__icon material-symbols-outlined" aria-hidden="true">save</span>
|
|
297
|
+
<span class="se-split-button__label">Save</span>
|
|
298
|
+
</button>
|
|
299
|
+
<button class="se-split-button__trigger" aria-label="More save options" aria-haspopup="true" aria-expanded="false">
|
|
300
|
+
<span class="se-split-button__menu-icon" aria-hidden="true"><span class="material-symbols-outlined">arrow_drop_down</span></span>
|
|
301
|
+
</button>
|
|
302
|
+
</div>
|
|
272
303
|
```
|
|
273
304
|
|
|
274
305
|
### Card
|
|
@@ -279,6 +310,10 @@ Interactive states use native HTML attributes and ARIA:
|
|
|
279
310
|
|
|
280
311
|
**Variants:** `--elevated`, `--filled`, `--outlined`
|
|
281
312
|
**Interactive:** Add `--interactive` + `tabindex="0"` + `role="button"`
|
|
313
|
+
**Drag state:** `--dragged` (applied during drag operations on interactive cards)
|
|
314
|
+
**Usage:** display content and actions on a single topic; cards are scan-friendly entry points. Don't force content into cards when dividers or spacing suffice.
|
|
315
|
+
**Actionability:** non-actionable (holds buttons/links) or directly actionable (whole card clickable) — never both. Directly actionable cards use `role="button"` or `<a>`.
|
|
316
|
+
**Adaptive:** compact — consider swapping cards for lists. Expanded — use multi-column grids. Drag interactions require a single-pointer alternative.
|
|
282
317
|
|
|
283
318
|
```html
|
|
284
319
|
<!-- Elevated card -->
|
|
@@ -299,6 +334,10 @@ Interactive states use native HTML attributes and ARIA:
|
|
|
299
334
|
@import '@skagerakenergi/design/checkbox.css';
|
|
300
335
|
```
|
|
301
336
|
|
|
337
|
+
**Usage:** select one or more options from a list. Use checkboxes for grouped options; radio for single-select; switches for standalone toggles. Parent checkbox is indeterminate when some children are checked.
|
|
338
|
+
**Placement:** click the icon **or** the text label to toggle.
|
|
339
|
+
**Touch target:** 48 × 48 CSS px minimum; don't apply density by default.
|
|
340
|
+
|
|
302
341
|
```html
|
|
303
342
|
<label class="se-checkbox">
|
|
304
343
|
<input class="se-checkbox__input" type="checkbox">
|
|
@@ -320,7 +359,13 @@ Interactive states use native HTML attributes and ARIA:
|
|
|
320
359
|
@import '@skagerakenergi/design/switch.css';
|
|
321
360
|
```
|
|
322
361
|
|
|
362
|
+
**Icons:** Add `--icons` modifier + `se-switch__icon` inside the handle
|
|
363
|
+
**Usage:** binary on/off settings with immediate effect. Don't use for opposing options (use connected button group) or grouped save-and-submit options (use checkboxes). Icons optional.
|
|
364
|
+
**Labels:** short and direct; describe what happens when ON. Never embed label text in the switch.
|
|
365
|
+
**Touch target:** 48 × 48 CSS px minimum; don't apply density by default.
|
|
366
|
+
|
|
323
367
|
```html
|
|
368
|
+
<!-- Basic switch -->
|
|
324
369
|
<label class="se-switch">
|
|
325
370
|
<input class="se-switch__input" type="checkbox" role="switch">
|
|
326
371
|
<span class="se-switch__track" aria-hidden="true">
|
|
@@ -328,6 +373,17 @@ Interactive states use native HTML attributes and ARIA:
|
|
|
328
373
|
</span>
|
|
329
374
|
<span class="se-switch__label">Dark mode</span>
|
|
330
375
|
</label>
|
|
376
|
+
|
|
377
|
+
<!-- Switch with icons -->
|
|
378
|
+
<label class="se-switch se-switch--icons">
|
|
379
|
+
<input class="se-switch__input" type="checkbox" role="switch">
|
|
380
|
+
<span class="se-switch__track" aria-hidden="true">
|
|
381
|
+
<span class="se-switch__handle">
|
|
382
|
+
<span class="se-switch__icon" aria-hidden="true"><span class="material-symbols-outlined">close</span></span>
|
|
383
|
+
</span>
|
|
384
|
+
</span>
|
|
385
|
+
<span class="se-switch__label">Notifications</span>
|
|
386
|
+
</label>
|
|
331
387
|
```
|
|
332
388
|
|
|
333
389
|
### Radio
|
|
@@ -336,20 +392,24 @@ Interactive states use native HTML attributes and ARIA:
|
|
|
336
392
|
@import '@skagerakenergi/design/radio.css';
|
|
337
393
|
```
|
|
338
394
|
|
|
395
|
+
**Usage:** single-select from ≤ 5 options; one must always be pre-selected. Use dropdown for more options. Click icon or label to select. Provide “Not applicable” if deselection needed.
|
|
396
|
+
**Placement:** stack vertically; avoid horizontal lists.
|
|
397
|
+
**Touch target:** 48 × 48 CSS px minimum. Arrow keys navigate and select within the group.
|
|
398
|
+
|
|
339
399
|
```html
|
|
340
|
-
<
|
|
341
|
-
<
|
|
400
|
+
<div class="se-radio-group" role="radiogroup" aria-labelledby="options-label">
|
|
401
|
+
<span id="options-label" class="se-radio-group__label">Choose option</span>
|
|
342
402
|
<label class="se-radio">
|
|
343
403
|
<input class="se-radio__input" type="radio" name="option" value="a" checked>
|
|
344
|
-
<span class="se-radio__indicator"
|
|
404
|
+
<span class="se-radio__indicator"></span>
|
|
345
405
|
<span class="se-radio__label">Option A</span>
|
|
346
406
|
</label>
|
|
347
407
|
<label class="se-radio">
|
|
348
408
|
<input class="se-radio__input" type="radio" name="option" value="b">
|
|
349
|
-
<span class="se-radio__indicator"
|
|
409
|
+
<span class="se-radio__indicator"></span>
|
|
350
410
|
<span class="se-radio__label">Option B</span>
|
|
351
411
|
</label>
|
|
352
|
-
</
|
|
412
|
+
</div>
|
|
353
413
|
```
|
|
354
414
|
|
|
355
415
|
### Chips
|
|
@@ -359,6 +419,9 @@ Interactive states use native HTML attributes and ARIA:
|
|
|
359
419
|
```
|
|
360
420
|
|
|
361
421
|
**Types:** `--assist`, `--filter`, `--input`, `--suggestion`
|
|
422
|
+
**Usage:** enter information, make selections, filter content, or trigger actions. Always display as a group — never a single chip. Labels ≤ 20 characters, skip articles. Variant choice: Assist (verbs) | Filter (nouns) | Input (user data) | Suggestion (dynamic phrases).
|
|
423
|
+
**Placement:** inline as a row; 8 dp spacing between chips. Wrap to a new row; use horizontal scroll if ≥ 3 rows. Filter chip trailing icon: medium/expanded windows only.
|
|
424
|
+
**Touch target:** 48 × 48 CSS px minimum. Label contrast ≥ 3:1 against background.
|
|
362
425
|
|
|
363
426
|
```html
|
|
364
427
|
<!-- Filter chip set -->
|
|
@@ -387,6 +450,12 @@ Interactive states use native HTML attributes and ARIA:
|
|
|
387
450
|
```
|
|
388
451
|
|
|
389
452
|
**Variants:** `--filled` (default), `--outlined`
|
|
453
|
+
**States:** `--populated` (when input has a value), `--error`, `--disabled`
|
|
454
|
+
**Optional elements:** `se-text-field__leading` (leading icon), `se-text-field__trailing` (trailing action button)
|
|
455
|
+
**Filled only:** `se-text-field__indicator` (active indicator line)
|
|
456
|
+
**Usage:** for text input (contact info, search, etc.). Don't intermix filled and outlined in the same region. Error icon strongly recommended; asterisk (*) for required fields.
|
|
457
|
+
**Adaptive:** compact — full width. Medium/expanded — bound by margins; avoid edge-to-edge stretching.
|
|
458
|
+
**Touch target:** 48 × 48 CSS px minimum. Outlined fields need ≥ 3:1 outline–background contrast.
|
|
390
459
|
|
|
391
460
|
```html
|
|
392
461
|
<!-- Filled text field -->
|
|
@@ -398,6 +467,17 @@ Interactive states use native HTML attributes and ARIA:
|
|
|
398
467
|
</div>
|
|
399
468
|
</div>
|
|
400
469
|
|
|
470
|
+
<!-- Filled text field with leading and trailing icons -->
|
|
471
|
+
<div class="se-text-field se-text-field--filled se-text-field--populated">
|
|
472
|
+
<div class="se-text-field__container">
|
|
473
|
+
<span class="se-text-field__leading" aria-hidden="true"><span class="material-symbols-outlined">search</span></span>
|
|
474
|
+
<label class="se-text-field__label" for="search">Search</label>
|
|
475
|
+
<input class="se-text-field__input" id="search" type="text" value="query">
|
|
476
|
+
<button class="se-text-field__trailing" type="button" aria-label="Clear"><span class="material-symbols-outlined">close</span></button>
|
|
477
|
+
<span class="se-text-field__indicator" aria-hidden="true"></span>
|
|
478
|
+
</div>
|
|
479
|
+
</div>
|
|
480
|
+
|
|
401
481
|
<!-- Outlined text field with supporting text -->
|
|
402
482
|
<div class="se-text-field se-text-field--outlined">
|
|
403
483
|
<div class="se-text-field__container">
|
|
@@ -412,6 +492,7 @@ Interactive states use native HTML attributes and ARIA:
|
|
|
412
492
|
<div class="se-text-field__container">
|
|
413
493
|
<label class="se-text-field__label" for="username">Username</label>
|
|
414
494
|
<input class="se-text-field__input" id="username" type="text" aria-invalid="true" aria-describedby="username-error">
|
|
495
|
+
<button class="se-text-field__trailing" type="button" aria-label="Error"><span class="material-symbols-outlined">error</span></button>
|
|
415
496
|
</div>
|
|
416
497
|
<div class="se-text-field__supporting" id="username-error" role="alert">Username is already taken</div>
|
|
417
498
|
</div>
|
|
@@ -424,8 +505,13 @@ Interactive states use native HTML attributes and ARIA:
|
|
|
424
505
|
```
|
|
425
506
|
|
|
426
507
|
**Variants:** `--primary`, `--secondary`
|
|
508
|
+
**Optional:** `se-tabs__icon` (icon above label, primary variant only; auto-fills on active)
|
|
509
|
+
**Usage:** group related content at the same hierarchy level — not sequential content. Primary tabs under app bar; secondary below primary. Icons should be globally recognized. Max 4 fixed tabs; use scrollable for more.
|
|
510
|
+
**Placement:** full-width container. Scrollable tabs offset 52 dp from leading edge. Don't scroll tabs behind an app bar.
|
|
511
|
+
**Touch target:** 48 × 48 CSS px minimum. Arrow keys navigate between tabs; Space/Enter activates.
|
|
427
512
|
|
|
428
513
|
```html
|
|
514
|
+
<!-- Primary tabs (text only) -->
|
|
429
515
|
<div class="se-tabs se-tabs--primary" role="tablist" aria-label="Content sections">
|
|
430
516
|
<button class="se-tabs__tab se-tabs__tab--active" role="tab" aria-selected="true">
|
|
431
517
|
<span class="se-tabs__label">Tab 1</span>
|
|
@@ -441,6 +527,21 @@ Interactive states use native HTML attributes and ARIA:
|
|
|
441
527
|
</button>
|
|
442
528
|
<span class="se-tabs__divider" aria-hidden="true"></span>
|
|
443
529
|
</div>
|
|
530
|
+
|
|
531
|
+
<!-- Primary tabs with icons -->
|
|
532
|
+
<div class="se-tabs se-tabs--primary" role="tablist" aria-label="Travel">
|
|
533
|
+
<button class="se-tabs__tab se-tabs__tab--active" role="tab" aria-selected="true">
|
|
534
|
+
<span class="se-tabs__icon material-symbols-outlined" aria-hidden="true">flight</span>
|
|
535
|
+
<span class="se-tabs__label">Flights</span>
|
|
536
|
+
<span class="se-tabs__indicator" aria-hidden="true"></span>
|
|
537
|
+
</button>
|
|
538
|
+
<button class="se-tabs__tab" role="tab" aria-selected="false" tabindex="-1">
|
|
539
|
+
<span class="se-tabs__icon material-symbols-outlined" aria-hidden="true">explore</span>
|
|
540
|
+
<span class="se-tabs__label">Explore</span>
|
|
541
|
+
<span class="se-tabs__indicator" aria-hidden="true"></span>
|
|
542
|
+
</button>
|
|
543
|
+
<span class="se-tabs__divider" aria-hidden="true"></span>
|
|
544
|
+
</div>
|
|
444
545
|
```
|
|
445
546
|
|
|
446
547
|
### App Bar
|
|
@@ -495,8 +596,10 @@ Interactive states use native HTML attributes and ARIA:
|
|
|
495
596
|
```
|
|
496
597
|
|
|
497
598
|
**Variants:** default (collapsed), `--expanded` (replaces former Navigation Drawer), `--modal`
|
|
599
|
+
**Optional slots:** `se-nav-rail__menu` (icon button), `se-nav-rail__fab` (FAB container), `se-nav-rail__section` + `se-nav-rail__section-header` (grouped items in expanded mode)
|
|
498
600
|
|
|
499
601
|
```html
|
|
602
|
+
<!-- Collapsed navigation rail -->
|
|
500
603
|
<nav class="se-nav-rail" aria-label="Main navigation">
|
|
501
604
|
<div class="se-nav-rail__items">
|
|
502
605
|
<a class="se-nav-rail__item se-nav-rail__item--active" href="#home" aria-current="page">
|
|
@@ -511,6 +614,34 @@ Interactive states use native HTML attributes and ARIA:
|
|
|
511
614
|
</a>
|
|
512
615
|
</div>
|
|
513
616
|
</nav>
|
|
617
|
+
|
|
618
|
+
<!-- Expanded navigation rail with menu, FAB, and sections -->
|
|
619
|
+
<nav class="se-nav-rail se-nav-rail--expanded" aria-label="Main navigation">
|
|
620
|
+
<button class="se-icon-button se-nav-rail__menu" aria-label="Close menu" aria-expanded="true">
|
|
621
|
+
<span class="se-icon-button__icon material-symbols-outlined" aria-hidden="true">menu</span>
|
|
622
|
+
</button>
|
|
623
|
+
<div class="se-nav-rail__fab">
|
|
624
|
+
<button class="se-extended-fab" aria-label="Compose">
|
|
625
|
+
<span class="se-extended-fab__icon material-symbols-outlined" aria-hidden="true">edit</span>
|
|
626
|
+
<span class="se-extended-fab__label">Compose</span>
|
|
627
|
+
</button>
|
|
628
|
+
</div>
|
|
629
|
+
<div class="se-nav-rail__items">
|
|
630
|
+
<a class="se-nav-rail__item se-nav-rail__item--active" href="#home" aria-current="page">
|
|
631
|
+
<span class="se-nav-rail__indicator" aria-hidden="true"></span>
|
|
632
|
+
<span class="se-nav-rail__icon material-symbols-outlined" aria-hidden="true">home</span>
|
|
633
|
+
<span class="se-nav-rail__label">Home</span>
|
|
634
|
+
</a>
|
|
635
|
+
<div class="se-nav-rail__section">
|
|
636
|
+
<span class="se-nav-rail__section-header">Settings</span>
|
|
637
|
+
<a class="se-nav-rail__item" href="#preferences">
|
|
638
|
+
<span class="se-nav-rail__indicator" aria-hidden="true"></span>
|
|
639
|
+
<span class="se-nav-rail__icon material-symbols-outlined" aria-hidden="true">tune</span>
|
|
640
|
+
<span class="se-nav-rail__label">Preferences</span>
|
|
641
|
+
</a>
|
|
642
|
+
</div>
|
|
643
|
+
</div>
|
|
644
|
+
</nav>
|
|
514
645
|
```
|
|
515
646
|
|
|
516
647
|
### Toolbar
|
|
@@ -521,8 +652,10 @@ Interactive states use native HTML attributes and ARIA:
|
|
|
521
652
|
|
|
522
653
|
**Variants:** `--docked` (replaces former Bottom App Bar), `--floating`, `--floating-vertical`
|
|
523
654
|
**Style:** `--vibrant` (primary-container background)
|
|
655
|
+
**Optional slot:** `se-toolbar__fab` (FAB container, used in docked variant)
|
|
524
656
|
|
|
525
657
|
```html
|
|
658
|
+
<!-- Docked toolbar with FAB -->
|
|
526
659
|
<footer class="se-toolbar se-toolbar--docked" role="toolbar" aria-label="Actions">
|
|
527
660
|
<div class="se-toolbar__actions">
|
|
528
661
|
<button class="se-icon-button" aria-label="Edit">
|
|
@@ -532,6 +665,11 @@ Interactive states use native HTML attributes and ARIA:
|
|
|
532
665
|
<span class="se-icon-button__icon material-symbols-outlined" aria-hidden="true">share</span>
|
|
533
666
|
</button>
|
|
534
667
|
</div>
|
|
668
|
+
<div class="se-toolbar__fab">
|
|
669
|
+
<button class="se-fab" aria-label="Add">
|
|
670
|
+
<span class="se-fab__icon material-symbols-outlined" aria-hidden="true">add</span>
|
|
671
|
+
</button>
|
|
672
|
+
</div>
|
|
535
673
|
</footer>
|
|
536
674
|
```
|
|
537
675
|
|
|
@@ -541,6 +679,10 @@ Interactive states use native HTML attributes and ARIA:
|
|
|
541
679
|
@import '@skagerakenergi/design/badge.css';
|
|
542
680
|
```
|
|
543
681
|
|
|
682
|
+
**Usage:** indicate notifications, counts, or status on navigation destinations. Small = unread dot; large = text (max 4 chars). Hide once the destination is viewed.
|
|
683
|
+
**Placement:** anchored inside icon bounding box. Adjust for RTL. Use small in tight spaces (app bars); large when space allows (navigation rail).
|
|
684
|
+
**Contrast:** badge container and label ≥ 3:1 contrast. Small badges use `aria-hidden="true"`; large badges use `aria-label`.
|
|
685
|
+
|
|
544
686
|
```html
|
|
545
687
|
<!-- Small dot badge (no count) -->
|
|
546
688
|
<span style="position: relative; display: inline-flex;">
|
|
@@ -565,7 +707,13 @@ Interactive states use native HTML attributes and ARIA:
|
|
|
565
707
|
@import '@skagerakenergi/design/snackbar.css';
|
|
566
708
|
```
|
|
567
709
|
|
|
710
|
+
**Variants:** `--two-line` (top-aligned items), `--action-below` (action moves below text)
|
|
711
|
+
**Usage:** minimally interruptive messages not requiring user action. One at a time; max one action. Auto-dismiss 4–10 s; but auto-dismiss is inaccessible on web — add inline feedback near the trigger.
|
|
712
|
+
**Placement:** bottom of UI, above FABs. Don't cover navigation or frequently used targets. Don't stack snackbars.
|
|
713
|
+
**Accessibility:** `role="status"` + `aria-live="polite"`. Don't move focus to snackbar automatically. Focus returns to trigger on dismiss.
|
|
714
|
+
|
|
568
715
|
```html
|
|
716
|
+
<!-- Single-line snackbar -->
|
|
569
717
|
<div class="se-snackbar" role="status" aria-live="polite">
|
|
570
718
|
<span class="se-snackbar__text">Item saved</span>
|
|
571
719
|
<button class="se-snackbar__action">Undo</button>
|
|
@@ -573,6 +721,15 @@ Interactive states use native HTML attributes and ARIA:
|
|
|
573
721
|
<span class="material-symbols-outlined">close</span>
|
|
574
722
|
</button>
|
|
575
723
|
</div>
|
|
724
|
+
|
|
725
|
+
<!-- Two-line snackbar -->
|
|
726
|
+
<div class="se-snackbar se-snackbar--two-line" role="status" aria-live="polite">
|
|
727
|
+
<span class="se-snackbar__text">This item has been moved to the trash. You can restore it from the trash folder.</span>
|
|
728
|
+
<button class="se-snackbar__action">Undo</button>
|
|
729
|
+
<button class="se-snackbar__close" aria-label="Dismiss">
|
|
730
|
+
<span class="material-symbols-outlined">close</span>
|
|
731
|
+
</button>
|
|
732
|
+
</div>
|
|
576
733
|
```
|
|
577
734
|
|
|
578
735
|
### Progress Indicator
|
|
@@ -581,16 +738,20 @@ Interactive states use native HTML attributes and ARIA:
|
|
|
581
738
|
@import '@skagerakenergi/design/progress-indicator.css';
|
|
582
739
|
```
|
|
583
740
|
|
|
584
|
-
```html
|
|
585
741
|
**Variants:** `--linear`, `--circular`
|
|
586
742
|
**States:** `--indeterminate`
|
|
587
743
|
**M3 Expressive:** `--wavy` (linear only)
|
|
744
|
+
**Custom height:** Set `--se-progress-height` (default: `4px`)
|
|
745
|
+
**Usage:** show status of ongoing processes. Choose by wait time: instant (< 200 ms) = none; short (200 ms–5 s) = loading indicator; long (> 5 s) = progress indicator. Linear for edge-of-container; circular for centered-in-element.
|
|
746
|
+
**Placement:** linear along container edge; circular centered on loading area. In buttons: circular with flat shape, no track, indicator matches button label color.
|
|
747
|
+
**Contrast:** active indicator ≥ 3:1 against background. Stop indicator required when track contrast < 3:1.
|
|
588
748
|
|
|
589
749
|
```html
|
|
590
|
-
<!-- Linear determinate -->
|
|
750
|
+
<!-- Linear determinate (with stop indicator) -->
|
|
591
751
|
<div class="se-progress se-progress--linear" role="progressbar" aria-label="Loading" aria-valuenow="60" aria-valuemin="0" aria-valuemax="100">
|
|
592
752
|
<div class="se-progress__track">
|
|
593
753
|
<div class="se-progress__indicator" style="width: 60%"></div>
|
|
754
|
+
<div class="se-progress__stop" aria-hidden="true" style="left: 60%"></div>
|
|
594
755
|
</div>
|
|
595
756
|
</div>
|
|
596
757
|
|
|
@@ -601,6 +762,21 @@ Interactive states use native HTML attributes and ARIA:
|
|
|
601
762
|
</div>
|
|
602
763
|
</div>
|
|
603
764
|
|
|
765
|
+
<!-- Wavy linear (no stop element) -->
|
|
766
|
+
<div class="se-progress se-progress--linear se-progress--wavy" role="progressbar" aria-label="Loading" aria-valuenow="40" aria-valuemin="0" aria-valuemax="100">
|
|
767
|
+
<div class="se-progress__track">
|
|
768
|
+
<div class="se-progress__indicator" style="width: 40%"></div>
|
|
769
|
+
</div>
|
|
770
|
+
</div>
|
|
771
|
+
|
|
772
|
+
<!-- Custom height -->
|
|
773
|
+
<div class="se-progress se-progress--linear" role="progressbar" aria-label="Loading" aria-valuenow="60" aria-valuemin="0" aria-valuemax="100" style="--se-progress-height: 8px">
|
|
774
|
+
<div class="se-progress__track">
|
|
775
|
+
<div class="se-progress__indicator" style="width: 60%"></div>
|
|
776
|
+
<div class="se-progress__stop" aria-hidden="true" style="left: 60%"></div>
|
|
777
|
+
</div>
|
|
778
|
+
</div>
|
|
779
|
+
|
|
604
780
|
<!-- Circular determinate -->
|
|
605
781
|
<div class="se-progress se-progress--circular" role="progressbar" aria-valuenow="60" aria-valuemin="0" aria-valuemax="100" aria-label="60% complete">
|
|
606
782
|
<svg class="se-progress__track" viewBox="0 0 48 48">
|
|
@@ -616,11 +792,44 @@ Interactive states use native HTML attributes and ARIA:
|
|
|
616
792
|
@import '@skagerakenergi/design/loading-indicator.css';
|
|
617
793
|
```
|
|
618
794
|
|
|
795
|
+
**Variants:** default (no background), `--contained` (with primary-container background)
|
|
796
|
+
**Responsive sizing:** `--se-loading-indicator-size` custom property (default: 48px, range: 24px–240px). Container-to-indicator ratio (79.2%) preserved at all sizes.
|
|
797
|
+
**Usage scope:** short indeterminate waits (200ms–5s). Replaces indeterminate circular progress indicator for short processes. Never transition from loading indicator to progress indicator.
|
|
798
|
+
**Container guidance:** use `--contained` when placed over other content (extra contrast); omit when on a plain surface; always use with pull-to-refresh.
|
|
799
|
+
**Placement:** center in page/container when loading; center in empty space for loading more items; can embed inside other components (e.g. buttons).
|
|
800
|
+
|
|
801
|
+
The loading indicator requires an inner SVG that performs shape morphing between 7 M3 MaterialShapes (SoftBurst → Cookie9Sided → Pentagon → Pill → Sunny → Cookie4Sided → Oval) with continuous rotation. The MaterialShapes library has no official web implementation — this package ships the pre-baked SVG as an importable asset.
|
|
802
|
+
|
|
803
|
+
**Import the shapes SVG** (avoids inlining the large path data):
|
|
804
|
+
|
|
805
|
+
```js
|
|
806
|
+
// Vite / Vite-based frameworks (React, Vue, Svelte, etc.)
|
|
807
|
+
import shapesSvg from '@skagerakenergi/design/loading-indicator-shapes.svg?raw'
|
|
808
|
+
|
|
809
|
+
// Non-Vite (Webpack, plain HTML, SSR, etc.)
|
|
810
|
+
import { loadingIndicatorShapesSvg } from '@skagerakenergi/design/loading-indicator-shapes.js'
|
|
811
|
+
```
|
|
812
|
+
|
|
813
|
+
Then inject the imported string as `innerHTML` of the container element:
|
|
814
|
+
|
|
619
815
|
```html
|
|
620
816
|
<div class="se-loading-indicator" role="status" aria-label="Loading">
|
|
817
|
+
<!-- inject shapesSvg / loadingIndicatorShapesSvg here -->
|
|
818
|
+
</div>
|
|
819
|
+
|
|
820
|
+
<!-- Contained variant (with background — use over other content) -->
|
|
821
|
+
<div class="se-loading-indicator se-loading-indicator--contained" role="status" aria-label="Loading">
|
|
822
|
+
<!-- inject shapesSvg / loadingIndicatorShapesSvg here -->
|
|
823
|
+
</div>
|
|
824
|
+
|
|
825
|
+
<!-- Responsive sizing (120px) -->
|
|
826
|
+
<div class="se-loading-indicator" style="--se-loading-indicator-size: 120px" role="status" aria-label="Loading">
|
|
827
|
+
<!-- inject shapesSvg / loadingIndicatorShapesSvg here -->
|
|
621
828
|
</div>
|
|
622
829
|
```
|
|
623
830
|
|
|
831
|
+
**Accessibility:** `role="status"` + descriptive `aria-label` explaining what is loading (e.g. "Loading news article"). Active indicator must have ≥3:1 contrast against background. When embedded in another component, ≥3:1 contrast against that component's background.
|
|
832
|
+
|
|
624
833
|
### Divider
|
|
625
834
|
|
|
626
835
|
```css
|
|
@@ -628,6 +837,8 @@ Interactive states use native HTML attributes and ARIA:
|
|
|
628
837
|
```
|
|
629
838
|
|
|
630
839
|
**Variants:** `--inset`, `--middle-inset`, `--vertical`
|
|
840
|
+
**Usage:** full-width for unrelated content sections; inset for related content. Use sparingly — too many clutters the interface. Vertical dividers for large-screen side-by-side layouts.
|
|
841
|
+
**Contrast:** decorative elements with no contrast minimums.
|
|
631
842
|
|
|
632
843
|
```html
|
|
633
844
|
<hr class="se-divider">
|
|
@@ -641,15 +852,64 @@ Interactive states use native HTML attributes and ARIA:
|
|
|
641
852
|
@import '@skagerakenergi/design/list.css';
|
|
642
853
|
```
|
|
643
854
|
|
|
855
|
+
**Line variants:** default (one line), `--two-line`, `--three-line`
|
|
856
|
+
**States:** `--interactive` (with `tabindex="0"`), `--selected`
|
|
857
|
+
**Leading variants:** default (icon), `--avatar` (initials circle), `--image` (image background), `--video` (video thumbnail)
|
|
858
|
+
**Trailing:** `se-list__trailing` (icon), `se-list__trailing-text` (text)
|
|
859
|
+
**Optional element:** `se-list__overline` (overline text above the label)
|
|
860
|
+
**List variant:** `--segmented` (dividers between items)
|
|
861
|
+
**Usage:** vertical groups of text, icons, images. Keep labels brief; supporting text 1–3 lines. Use consistent placement for visuals across items. Gaps for contained lists; dividers for uncontained.
|
|
862
|
+
**Adaptive:** compact — edge-to-edge, full-screen detail on select. Medium/expanded — list-detail side-by-side. Consider swapping for cards on large screens. Ideal line length 40–60 characters.
|
|
863
|
+
**Touch target:** all interactive elements ≥ 48 × 48 CSS px.
|
|
864
|
+
|
|
644
865
|
```html
|
|
866
|
+
<!-- Two-line list with icon leading and trailing text -->
|
|
645
867
|
<ul class="se-list">
|
|
646
868
|
<li class="se-list__item se-list__item--two-line">
|
|
647
869
|
<span class="se-list__leading" aria-hidden="true">
|
|
648
870
|
<span class="material-symbols-outlined">person</span>
|
|
649
871
|
</span>
|
|
650
872
|
<span class="se-list__content">
|
|
651
|
-
<span class="se-list__label">
|
|
652
|
-
<span class="se-list__supporting">
|
|
873
|
+
<span class="se-list__label">John Doe</span>
|
|
874
|
+
<span class="se-list__supporting">john@example.com</span>
|
|
875
|
+
</span>
|
|
876
|
+
<span class="se-list__trailing-text">3m ago</span>
|
|
877
|
+
</li>
|
|
878
|
+
</ul>
|
|
879
|
+
|
|
880
|
+
<!-- Interactive list with avatars -->
|
|
881
|
+
<ul class="se-list">
|
|
882
|
+
<li class="se-list__item se-list__item--two-line se-list__item--interactive se-list__item--selected" tabindex="0">
|
|
883
|
+
<span class="se-list__leading se-list__leading--avatar">JD</span>
|
|
884
|
+
<span class="se-list__content">
|
|
885
|
+
<span class="se-list__label">John Doe</span>
|
|
886
|
+
<span class="se-list__supporting">john@example.com</span>
|
|
887
|
+
</span>
|
|
888
|
+
<span class="se-list__trailing" aria-hidden="true">
|
|
889
|
+
<span class="material-symbols-outlined">chevron_right</span>
|
|
890
|
+
</span>
|
|
891
|
+
</li>
|
|
892
|
+
</ul>
|
|
893
|
+
|
|
894
|
+
<!-- Three-line list with image leading -->
|
|
895
|
+
<ul class="se-list">
|
|
896
|
+
<li class="se-list__item se-list__item--three-line">
|
|
897
|
+
<div class="se-list__leading se-list__leading--image"></div>
|
|
898
|
+
<span class="se-list__content">
|
|
899
|
+
<span class="se-list__label">Project files</span>
|
|
900
|
+
<span class="se-list__supporting">Updated design files for the new dashboard layout.</span>
|
|
901
|
+
</span>
|
|
902
|
+
</li>
|
|
903
|
+
</ul>
|
|
904
|
+
|
|
905
|
+
<!-- List item with video thumbnail leading -->
|
|
906
|
+
<ul class="se-list">
|
|
907
|
+
<li class="se-list__item se-list__item--three-line">
|
|
908
|
+
<div class="se-list__leading se-list__leading--video"></div>
|
|
909
|
+
<span class="se-list__content">
|
|
910
|
+
<span class="se-list__overline">Category</span>
|
|
911
|
+
<span class="se-list__label">Video title</span>
|
|
912
|
+
<span class="se-list__supporting">Description text</span>
|
|
653
913
|
</span>
|
|
654
914
|
</li>
|
|
655
915
|
</ul>
|
|
@@ -704,7 +964,7 @@ This library implements M3 Expressive, which adds to baseline M3:
|
|
|
704
964
|
| Button Group | — | `se-button-group` (standard + `--connected`) |
|
|
705
965
|
| Split Button | — | `se-split-button` |
|
|
706
966
|
| Toolbar | — | `se-toolbar` (`--docked` + `--floating` + `--floating-vertical`) |
|
|
707
|
-
| Loading Indicator | — | `se-loading-indicator` |
|
|
967
|
+
| Loading Indicator | — | `se-loading-indicator` (default/`--contained`; `--se-loading-indicator-size`: 24–240px) |
|
|
708
968
|
| Flexible App Bar | App Bar | `--medium-flexible`, `--large-flexible` |
|
|
709
969
|
| Search App Bar | App Bar | `--search` |
|
|
710
970
|
|
package/README.md
CHANGED
|
@@ -288,6 +288,10 @@ Component files:
|
|
|
288
288
|
- `split-button.css`, `switch.css`, `tabs.css`, `text-field.css`, `toolbar.css`
|
|
289
289
|
- `layout.css`
|
|
290
290
|
|
|
291
|
+
Loading indicator shape asset (avoids inlining the large SVG path data):
|
|
292
|
+
- `loading-indicator-shapes.svg` — import with `?raw` in Vite-based projects
|
|
293
|
+
- `loading-indicator-shapes.js` — ESM export (`loadingIndicatorShapesSvg: string`) for non-Vite environments
|
|
294
|
+
|
|
291
295
|
## Figma Code Connect
|
|
292
296
|
|
|
293
297
|
This project uses [Figma Code Connect](https://github.com/figma/code-connect) to link Figma component instances to the corresponding HTML/CSS snippets so designers see real code in the Figma Dev Mode inspector.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const loadingIndicatorShapesSvg: string;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export const loadingIndicatorShapesSvg = '<svg class="se-loading-indicator__shapes" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="4 4 40 40" aria-hidden="true"><path fill="currentColor"><animate attributeName="d" calcMode="spline" dur="5s" keySplines="0.5 0.2 0 0.8; 0.5 0.2 0 0.8; 0.5 0.2 0 0.8; 0.5 0.2 0 0.8; 0.5 0.2 0 0.8; 0.5 0.2 0 0.8; 0.5 0.2 0 0.8" keyTimes="0; 0.14; 0.29; 0.43; 0.57; 0.71; 0.86; 1" repeatCount="indefinite" values="m37.4 24.7 0.5 0.7 0.8 0.9 0.8 1.0 0.6 1.0 -0.1 0.8 -0.0 0.1 -0.6 0.7 -1.1 0.5 -1.3 0.3 -1.0 0.2 -0.9 0.4 -0.7 1.1 0.1 1.0 0.1 1.1 0.0 1.2 -0.2 1.1 -0.4 0.5 -0.3 0.2 -0.8 0.2 -1.2 -0.4 -1.2 -0.4 -1.0 -0.5 -0.8 -0.1 -1.3 0.5 -0.5 0.8 -0.6 0.9 -0.6 1.0 -0.8 0.8 -0.8 0.2 -0.1 -0.0 -0.9 -0.3 -0.8 -1.0 -0.6 -1.0 -0.6 -0.9 -0.5 -0.7 -1.3 -0.3 -0.9 0.2 -0.9 0.4 -1.2 0.5 -1.2 0.3 -0.8 -0.3 -0.0 -0.1 -0.6 -0.6 -0.1 -1.2 0.1 -1.2 0.0 -1.1 0.0 -0.9 -0.7 -1.1 -0.9 -0.3 -1.1 -0.3 -1.2 -0.3 -1.1 -0.4 -0.5 -0.8 -0.0 0.0 -0.1 -0.9 0.6 -1.0 0.8 -0.9 0.8 -0.9 0.5 -0.7 -0.0 -1.4 -0.5 -0.7 -0.8 -0.9 -0.8 -0.9 -0.6 -1.0 0.1 -0.9 0.0 -0.0 0.5 -0.8 1.1 -0.4 1.2 -0.3 1.1 -0.3 0.9 -0.3 0.7 -1.1 0.0 -0.9 -0.0 -1.1 -0.1 -1.2 0.1 -1.2 0.6 -0.6 0.0 -0.1 0.8 -0.3 1.2 0.3 1.2 0.5 0.9 0.4 0.9 0.2 1.3 -0.3 0.5 -0.7 0.6 -0.9 0.6 -1.0 0.8 -1.0 0.9 -0.3 0.1 0.0 0.8 0.2 0.8 0.8 0.6 1.0 0.6 0.9 0.5 0.8 1.3 0.5 0.8 -0.1 1.0 -0.5 1.2 -0.4 1.2 -0.4 0.8 0.2 0.3 0.2 0.4 0.5 0.2 1.1 -0.0 1.2 -0.1 1.1 -0.1 1.0 0.7 1.1 0.9 0.4 1.0 0.2 1.3 0.3 1.1 0.5 0.6 0.7 0.0 0.1 0.1 0.8 -0.5 1.0 -0.9 1.0 -0.8 0.9 -0.5 0.7 z; m39.9 24.0 -0.3 0.8 -0.4 0.8 -0.3 0.8 -0.2 1.5 0.1 0.9 0.1 0.9 -0.1 0.9 -0.2 0.8 -0.3 0.8 -0.2 0.4 -0.3 0.4 -0.5 0.7 -0.7 0.5 -0.8 0.4 -0.8 0.4 -0.8 0.4 -1.2 1.0 -0.5 0.7 -0.5 0.8 -0.6 0.6 -0.6 0.6 -0.8 0.4 -0.4 0.2 -0.5 0.1 -0.9 0.2 -0.8 -0.0 -0.9 -0.2 -0.9 -0.3 -0.8 -0.1 -1.6 -0.1 -0.8 0.2 -0.9 0.3 -0.9 0.2 -0.8 -0.0 -0.9 -0.2 -0.5 -0.1 -0.4 -0.2 -0.8 -0.4 -0.6 -0.5 -0.6 -0.7 -0.5 -0.8 -0.5 -0.7 -1.2 -1.0 -0.7 -0.4 -0.9 -0.4 -0.8 -0.4 -0.6 -0.5 -0.6 -0.7 -0.3 -0.4 -0.2 -0.4 -0.3 -0.8 -0.2 -0.8 -0.1 -0.9 0.1 -0.9 0.1 -0.9 -0.2 -1.5 -0.3 -0.8 -0.4 -0.8 -0.3 -0.8 -0.2 -0.8 -0.1 -0.9 0.1 -0.7 -0.0 -0.2 0.2 -0.8 0.4 -0.8 0.5 -0.7 0.6 -0.6 0.7 -0.7 0.5 -0.6 0.6 -1.3 0.3 -0.9 0.2 -0.8 0.3 -0.8 0.5 -0.7 0.5 -0.6 0.2 -0.2 0.5 -0.4 0.8 -0.4 0.8 -0.3 0.8 -0.2 0.9 -0.0 0.8 -0.1 1.4 -0.5 0.7 -0.4 0.7 -0.5 0.7 -0.5 0.8 -0.3 0.8 -0.2 0.9 -0.1 0.0 -0.0 0.8 0.1 0.9 0.2 0.8 0.3 0.7 0.5 0.7 0.5 0.7 0.4 1.4 0.5 0.8 0.1 0.9 0.0 0.9 0.2 0.8 0.3 0.7 0.4 0.5 0.4 0.2 0.1 0.5 0.7 0.5 0.7 0.3 0.8 0.2 0.8 0.3 0.9 0.6 1.3 0.5 0.6 0.7 0.7 0.6 0.6 0.5 0.7 0.4 0.8 0.2 0.8 0.0 0.2 0.1 0.7 -0.1 0.9 z; m38.9 24.2 -0.2 0.8 -0.2 0.7 -0.3 0.8 -0.2 0.8 -0.3 0.7 -0.2 0.8 -0.3 0.8 -0.2 0.7 -0.3 0.8 -0.2 0.8 -0.3 0.7 -0.2 0.8 -0.4 1.0 -0.4 0.8 -0.4 0.8 -0.6 0.6 -0.7 0.5 0.0 0.1 -0.7 0.4 -0.8 0.3 -0.8 0.3 -0.9 0.1 -1.1 -0.0 -0.8 -0.0 -0.8 -0.0 -0.8 -0.0 -0.8 -0.0 -0.8 -0.0 -0.8 -0.0 -0.8 -0.0 -0.8 -0.0 -0.8 -0.0 -0.8 -0.0 -0.8 -0.0 -0.8 -0.0 -0.8 -0.0 -1.1 -0.0 -0.9 -0.1 -0.8 -0.3 -0.8 -0.3 -0.7 -0.5 -0.1 0.0 -0.6 -0.5 -0.6 -0.7 -0.4 -0.7 -0.4 -0.8 -0.4 -1.0 -0.2 -0.8 -0.3 -0.7 -0.2 -0.8 -0.3 -0.8 -0.2 -0.7 -0.3 -0.8 -0.2 -0.8 -0.3 -0.7 -0.2 -0.8 -0.3 -0.7 -0.2 -0.8 -0.3 -0.8 -0.2 -0.7 -0.3 -1.1 -0.2 -0.9 -0.0 -0.8 0.0 -0.9 0.2 -0.8 0.1 -0.1 0.3 -0.7 0.4 -0.8 0.6 -0.6 0.6 -0.6 0.9 -0.7 0.6 -0.5 0.7 -0.4 0.6 -0.5 0.7 -0.5 0.6 -0.4 0.7 -0.5 0.6 -0.5 0.7 -0.5 0.6 -0.4 0.7 -0.5 0.6 -0.5 0.7 -0.4 0.6 -0.5 0.9 -0.7 0.8 -0.4 0.8 -0.3 0.8 -0.2 0.8 -0.0 0.1 -0.0 0.9 0.0 0.8 0.2 0.8 0.3 0.8 0.4 0.9 0.7 0.6 0.5 0.7 0.4 0.6 0.5 0.7 0.5 0.6 0.4 0.7 0.5 0.6 0.5 0.7 0.5 0.6 0.4 0.7 0.5 0.6 0.5 0.7 0.4 0.6 0.5 0.9 0.7 0.6 0.6 0.6 0.7 0.4 0.7 0.3 0.7 0.0 0.1 0.2 0.8 0.1 0.9 -0.0 0.9 -0.2 0.8 -0.3 1.1 z; m39.6 24.0 -0.1 0.8 -0.3 0.8 -0.2 0.8 -0.3 0.7 -0.3 0.8 -0.4 0.7 -0.4 0.7 -0.5 0.6 -0.4 0.6 -0.6 0.6 -0.6 0.6 -0.4 0.4 -0.6 0.6 -0.4 0.5 -0.9 0.8 -0.5 0.5 -0.6 0.6 -0.4 0.4 -0.7 0.7 -0.5 0.5 -0.6 0.4 -0.7 0.5 -0.6 0.4 -0.7 0.4 -0.7 0.3 -0.8 0.3 -0.8 0.3 -0.8 0.2 -0.8 0.1 -0.8 0.1 -0.8 0.1 -0.9 0.0 -0.8 -0.0 -0.9 -0.1 -0.8 -0.2 -0.8 -0.2 -0.9 -0.2 -0.8 -0.3 -0.8 -0.4 -0.8 -0.4 -0.7 -0.5 -0.7 -0.5 -0.7 -0.5 -0.6 -0.6 -0.1 -0.1 -0.5 -0.6 -0.6 -0.7 -0.5 -0.7 -0.5 -0.8 -0.4 -0.7 -0.4 -0.8 -0.3 -0.8 -0.2 -0.8 -0.2 -0.9 -0.2 -0.8 -0.1 -0.9 0.0 -0.8 0.0 -0.9 0.1 -0.8 0.1 -0.8 0.1 -0.8 0.3 -0.8 0.2 -0.8 0.3 -0.7 0.4 -0.8 0.3 -0.7 0.5 -0.6 0.4 -0.7 0.4 -0.5 0.6 -0.6 0.6 -0.7 0.4 -0.4 0.6 -0.6 0.5 -0.4 0.8 -0.9 0.5 -0.5 0.6 -0.6 0.4 -0.4 0.7 -0.7 0.5 -0.5 0.6 -0.4 0.7 -0.5 0.6 -0.4 0.7 -0.4 0.7 -0.3 0.8 -0.3 0.8 -0.3 0.8 -0.2 0.8 -0.1 0.8 -0.1 0.8 -0.1 0.9 -0.0 0.8 0.0 0.9 0.1 0.8 0.2 0.8 0.2 0.9 0.2 0.8 0.4 0.8 0.3 0.8 0.4 0.7 0.5 0.7 0.5 0.7 0.5 0.6 0.7 0.1 -0.0 0.5 0.6 0.6 0.7 0.5 0.7 0.5 0.8 0.4 0.7 0.3 0.8 0.4 0.8 0.2 0.8 0.2 0.9 0.2 0.8 0.1 0.9 0.0 0.8 -0.0 0.8 -0.1 0.9 z; m40.0 24.0 -0.1 0.8 -0.5 0.8 -0.6 0.8 -0.6 0.6 -0.6 0.7 -0.5 0.6 -0.7 1.2 -0.1 0.7 -0.1 0.8 -0.0 0.9 -0.1 0.9 -0.1 0.9 -0.2 0.9 -0.5 0.7 -0.0 0.0 -0.7 0.5 -0.9 0.2 -0.9 0.1 -0.9 0.1 -0.8 0.0 -0.8 0.1 -0.8 0.1 -1.2 0.7 -0.6 0.5 -0.7 0.6 -0.6 0.6 -0.8 0.6 -0.8 0.5 -0.8 0.1 -0.0 0.0 -0.8 -0.1 -0.8 -0.5 -0.8 -0.6 -0.6 -0.6 -0.7 -0.6 -0.6 -0.5 -1.2 -0.7 -0.7 -0.1 -0.8 -0.1 -0.9 -0.0 -0.9 -0.1 -0.9 -0.1 -0.9 -0.2 -0.7 -0.5 -0.0 0.0 -0.5 -0.7 -0.2 -0.9 -0.1 -0.9 -0.1 -0.9 -0.0 -0.8 -0.1 -0.8 -0.1 -0.8 -0.7 -1.2 -0.5 -0.6 -0.6 -0.7 -0.6 -0.6 -0.6 -0.8 -0.5 -0.8 -0.1 -0.8 -0.0 -0.0 0.1 -0.8 0.5 -0.8 0.6 -0.8 0.6 -0.6 0.6 -0.7 0.5 -0.6 0.7 -1.2 0.1 -0.7 0.1 -0.8 0.0 -0.9 0.1 -0.9 0.1 -0.9 0.2 -0.9 0.5 -0.7 -0.0 -0.0 0.7 -0.5 0.9 -0.2 0.9 -0.1 0.9 -0.1 0.8 -0.0 0.8 -0.1 0.8 -0.1 1.2 -0.7 0.6 -0.5 0.7 -0.6 0.6 -0.6 0.8 -0.6 0.8 -0.5 0.8 -0.1 0.0 -0.0 0.8 0.1 0.8 0.5 0.8 0.6 0.6 0.6 0.7 0.6 0.6 0.5 1.2 0.7 0.7 0.1 0.8 0.1 0.9 0.0 0.9 0.1 0.9 0.1 0.9 0.2 0.7 0.5 0.0 -0.0 0.5 0.7 0.2 0.9 0.1 0.9 0.1 0.9 0.0 0.8 0.1 0.8 0.1 0.8 0.7 1.2 0.5 0.6 0.6 0.7 0.6 0.6 0.6 0.8 0.5 0.8 0.1 0.8 z; m36.9 24.6 0.1 0.7 0.2 0.8 0.2 0.7 0.4 0.9 0.4 0.9 0.2 0.9 0.1 1.0 0.1 0.9 -0.1 0.9 -0.3 0.9 -0.3 0.9 -0.4 0.8 -0.5 0.8 -0.6 0.6 -0.1 0.1 -0.6 0.6 -0.8 0.5 -0.8 0.4 -0.9 0.3 -0.9 0.3 -0.9 0.1 -0.9 -0.1 -1.0 -0.1 -0.9 -0.2 -0.9 -0.4 -0.9 -0.4 -0.7 -0.2 -0.8 -0.2 -0.7 -0.1 -1.2 0.0 -0.7 0.1 -0.8 0.2 -0.7 0.2 -0.9 0.4 -0.9 0.4 -0.9 0.2 -1.0 0.1 -0.9 0.1 -0.9 -0.1 -0.9 -0.3 -0.9 -0.3 -0.8 -0.4 -0.8 -0.5 -0.6 -0.6 -0.1 -0.1 -0.6 -0.6 -0.5 -0.8 -0.4 -0.8 -0.3 -0.9 -0.3 -0.9 -0.1 -0.9 0.1 -0.9 0.1 -1.0 0.2 -0.9 0.4 -0.9 0.4 -0.9 0.2 -0.7 0.2 -0.8 0.1 -0.7 -0.0 -1.2 -0.1 -0.7 -0.2 -0.8 -0.2 -0.7 -0.4 -0.9 -0.4 -0.9 -0.2 -0.9 -0.1 -1.0 -0.1 -0.9 0.1 -0.9 0.3 -0.9 0.3 -0.9 0.4 -0.8 0.5 -0.8 0.6 -0.6 0.1 -0.1 0.6 -0.6 0.8 -0.5 0.8 -0.4 0.9 -0.3 0.9 -0.3 0.9 -0.1 0.9 0.1 1.0 0.1 0.9 0.2 0.9 0.4 0.9 0.4 0.7 0.2 0.8 0.2 0.7 0.1 1.2 -0.0 0.7 -0.1 0.8 -0.2 0.7 -0.2 0.9 -0.4 0.9 -0.4 0.9 -0.2 1.0 -0.1 0.9 -0.1 0.9 0.1 0.9 0.3 0.9 0.3 0.8 0.4 0.8 0.5 0.6 0.6 0.1 0.1 0.6 0.6 0.5 0.8 0.4 0.8 0.3 0.9 0.3 0.9 0.1 0.9 -0.1 0.9 -0.1 1.0 -0.2 0.9 -0.4 0.9 -0.4 0.9 -0.2 0.7 -0.2 0.8 -0.1 0.7 z; m37.7 24.0 -0.3 0.7 -0.4 0.7 -0.3 0.6 -0.3 0.7 -0.4 0.6 -0.3 0.5 -0.4 0.6 -0.4 0.5 -0.4 0.5 -0.4 0.5 -0.4 0.5 -0.4 0.5 -0.3 0.4 -0.5 0.4 -0.8 0.8 -0.4 0.5 -0.4 0.3 -0.5 0.4 -0.5 0.4 -0.5 0.4 -0.5 0.4 -0.5 0.4 -0.6 0.4 -0.5 0.3 -0.6 0.4 -0.7 0.3 -0.6 0.3 -0.7 0.4 -0.7 0.3 -0.7 0.2 -0.7 0.3 -0.9 0.3 -0.8 0.2 -0.8 0.1 -0.9 0.1 -1.0 0.1 -0.9 -0.0 -0.9 -0.1 -0.9 -0.1 -0.9 -0.3 -0.9 -0.3 -0.8 -0.4 -0.8 -0.6 -0.7 -0.6 -0.0 0.0 -0.6 -0.7 -0.6 -0.8 -0.4 -0.8 -0.3 -0.9 -0.3 -0.9 -0.1 -0.9 -0.1 -0.9 0.0 -0.9 0.1 -1.0 0.1 -0.9 0.1 -0.8 0.2 -0.8 0.3 -0.9 0.3 -0.7 0.2 -0.7 0.3 -0.7 0.4 -0.7 0.3 -0.6 0.3 -0.7 0.4 -0.6 0.3 -0.5 0.4 -0.6 0.4 -0.5 0.4 -0.5 0.4 -0.5 0.4 -0.5 0.4 -0.5 0.3 -0.4 0.5 -0.4 0.8 -0.8 0.4 -0.5 0.4 -0.3 0.5 -0.4 0.5 -0.4 0.5 -0.4 0.5 -0.4 0.5 -0.4 0.6 -0.4 0.5 -0.3 0.6 -0.4 0.7 -0.3 0.6 -0.3 0.7 -0.4 0.7 -0.3 0.7 -0.2 0.7 -0.3 0.9 -0.3 0.8 -0.2 0.8 -0.1 0.9 -0.1 1.0 -0.1 0.9 0.0 0.9 0.1 0.9 0.1 0.9 0.3 0.9 0.3 0.8 0.4 0.8 0.6 0.7 0.6 -0.0 0.0 0.6 0.7 0.6 0.8 0.4 0.8 0.3 0.9 0.3 0.9 0.1 0.9 0.1 0.9 -0.0 0.9 -0.1 1.0 -0.1 0.9 -0.1 0.8 -0.2 0.8 -0.3 0.9 -0.3 0.7 z; m37.4 24.7 0.5 0.7 0.8 0.9 0.8 1.0 0.6 1.0 -0.1 0.8 -0.0 0.1 -0.6 0.7 -1.1 0.5 -1.3 0.3 -1.0 0.2 -0.9 0.4 -0.7 1.1 0.1 1.0 0.1 1.1 0.0 1.2 -0.2 1.1 -0.4 0.5 -0.3 0.2 -0.8 0.2 -1.2 -0.4 -1.2 -0.4 -1.0 -0.5 -0.8 -0.1 -1.3 0.5 -0.5 0.8 -0.6 0.9 -0.6 1.0 -0.8 0.8 -0.8 0.2 -0.1 -0.0 -0.9 -0.3 -0.8 -1.0 -0.6 -1.0 -0.6 -0.9 -0.5 -0.7 -1.3 -0.3 -0.9 0.2 -0.9 0.4 -1.2 0.5 -1.2 0.3 -0.8 -0.3 -0.0 -0.1 -0.6 -0.6 -0.1 -1.2 0.1 -1.2 0.0 -1.1 0.0 -0.9 -0.7 -1.1 -0.9 -0.3 -1.1 -0.3 -1.2 -0.3 -1.1 -0.4 -0.5 -0.8 -0.0 0.0 -0.1 -0.9 0.6 -1.0 0.8 -0.9 0.8 -0.9 0.5 -0.7 -0.0 -1.4 -0.5 -0.7 -0.8 -0.9 -0.8 -0.9 -0.6 -1.0 0.1 -0.9 0.0 -0.0 0.5 -0.8 1.1 -0.4 1.2 -0.3 1.1 -0.3 0.9 -0.3 0.7 -1.1 0.0 -0.9 -0.0 -1.1 -0.1 -1.2 0.1 -1.2 0.6 -0.6 0.0 -0.1 0.8 -0.3 1.2 0.3 1.2 0.5 0.9 0.4 0.9 0.2 1.3 -0.3 0.5 -0.7 0.6 -0.9 0.6 -1.0 0.8 -1.0 0.9 -0.3 0.1 0.0 0.8 0.2 0.8 0.8 0.6 1.0 0.6 0.9 0.5 0.8 1.3 0.5 0.8 -0.1 1.0 -0.5 1.2 -0.4 1.2 -0.4 0.8 0.2 0.3 0.2 0.4 0.5 0.2 1.1 -0.0 1.2 -0.1 1.1 -0.1 1.0 0.7 1.1 0.9 0.4 1.0 0.2 1.3 0.3 1.1 0.5 0.6 0.7 0.0 0.1 0.1 0.8 -0.5 1.0 -0.9 1.0 -0.8 0.9 -0.5 0.7 z"/><animateTransform attributeName="transform" attributeType="XML" calcMode="spline" dur="5s" keySplines="0.5 0.2 0 0.8; 0.5 0.2 0 0.8; 0.5 0.2 0 0.8; 0.5 0.2 0 0.8; 0.5 0.2 0 0.8; 0.5 0.2 0 0.8; 0.5 0.2 0 0.8" keyTimes="0; 0.14; 0.29; 0.43; 0.57; 0.71; 0.86; 1" repeatCount="indefinite" type="rotate" values="0 24 24; 154 24 24; 309 24 24; 463 24 24; 617 24 24; 771 24 24; 926 24 24; 1080 24 24"/></path></svg>';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg class="se-loading-indicator__shapes" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="4 4 40 40" aria-hidden="true"><path fill="currentColor"><animate attributeName="d" calcMode="spline" dur="5s" keySplines="0.5 0.2 0 0.8; 0.5 0.2 0 0.8; 0.5 0.2 0 0.8; 0.5 0.2 0 0.8; 0.5 0.2 0 0.8; 0.5 0.2 0 0.8; 0.5 0.2 0 0.8" keyTimes="0; 0.14; 0.29; 0.43; 0.57; 0.71; 0.86; 1" repeatCount="indefinite" values="m37.4 24.7 0.5 0.7 0.8 0.9 0.8 1.0 0.6 1.0 -0.1 0.8 -0.0 0.1 -0.6 0.7 -1.1 0.5 -1.3 0.3 -1.0 0.2 -0.9 0.4 -0.7 1.1 0.1 1.0 0.1 1.1 0.0 1.2 -0.2 1.1 -0.4 0.5 -0.3 0.2 -0.8 0.2 -1.2 -0.4 -1.2 -0.4 -1.0 -0.5 -0.8 -0.1 -1.3 0.5 -0.5 0.8 -0.6 0.9 -0.6 1.0 -0.8 0.8 -0.8 0.2 -0.1 -0.0 -0.9 -0.3 -0.8 -1.0 -0.6 -1.0 -0.6 -0.9 -0.5 -0.7 -1.3 -0.3 -0.9 0.2 -0.9 0.4 -1.2 0.5 -1.2 0.3 -0.8 -0.3 -0.0 -0.1 -0.6 -0.6 -0.1 -1.2 0.1 -1.2 0.0 -1.1 0.0 -0.9 -0.7 -1.1 -0.9 -0.3 -1.1 -0.3 -1.2 -0.3 -1.1 -0.4 -0.5 -0.8 -0.0 0.0 -0.1 -0.9 0.6 -1.0 0.8 -0.9 0.8 -0.9 0.5 -0.7 -0.0 -1.4 -0.5 -0.7 -0.8 -0.9 -0.8 -0.9 -0.6 -1.0 0.1 -0.9 0.0 -0.0 0.5 -0.8 1.1 -0.4 1.2 -0.3 1.1 -0.3 0.9 -0.3 0.7 -1.1 0.0 -0.9 -0.0 -1.1 -0.1 -1.2 0.1 -1.2 0.6 -0.6 0.0 -0.1 0.8 -0.3 1.2 0.3 1.2 0.5 0.9 0.4 0.9 0.2 1.3 -0.3 0.5 -0.7 0.6 -0.9 0.6 -1.0 0.8 -1.0 0.9 -0.3 0.1 0.0 0.8 0.2 0.8 0.8 0.6 1.0 0.6 0.9 0.5 0.8 1.3 0.5 0.8 -0.1 1.0 -0.5 1.2 -0.4 1.2 -0.4 0.8 0.2 0.3 0.2 0.4 0.5 0.2 1.1 -0.0 1.2 -0.1 1.1 -0.1 1.0 0.7 1.1 0.9 0.4 1.0 0.2 1.3 0.3 1.1 0.5 0.6 0.7 0.0 0.1 0.1 0.8 -0.5 1.0 -0.9 1.0 -0.8 0.9 -0.5 0.7 z; m39.9 24.0 -0.3 0.8 -0.4 0.8 -0.3 0.8 -0.2 1.5 0.1 0.9 0.1 0.9 -0.1 0.9 -0.2 0.8 -0.3 0.8 -0.2 0.4 -0.3 0.4 -0.5 0.7 -0.7 0.5 -0.8 0.4 -0.8 0.4 -0.8 0.4 -1.2 1.0 -0.5 0.7 -0.5 0.8 -0.6 0.6 -0.6 0.6 -0.8 0.4 -0.4 0.2 -0.5 0.1 -0.9 0.2 -0.8 -0.0 -0.9 -0.2 -0.9 -0.3 -0.8 -0.1 -1.6 -0.1 -0.8 0.2 -0.9 0.3 -0.9 0.2 -0.8 -0.0 -0.9 -0.2 -0.5 -0.1 -0.4 -0.2 -0.8 -0.4 -0.6 -0.5 -0.6 -0.7 -0.5 -0.8 -0.5 -0.7 -1.2 -1.0 -0.7 -0.4 -0.9 -0.4 -0.8 -0.4 -0.6 -0.5 -0.6 -0.7 -0.3 -0.4 -0.2 -0.4 -0.3 -0.8 -0.2 -0.8 -0.1 -0.9 0.1 -0.9 0.1 -0.9 -0.2 -1.5 -0.3 -0.8 -0.4 -0.8 -0.3 -0.8 -0.2 -0.8 -0.1 -0.9 0.1 -0.7 -0.0 -0.2 0.2 -0.8 0.4 -0.8 0.5 -0.7 0.6 -0.6 0.7 -0.7 0.5 -0.6 0.6 -1.3 0.3 -0.9 0.2 -0.8 0.3 -0.8 0.5 -0.7 0.5 -0.6 0.2 -0.2 0.5 -0.4 0.8 -0.4 0.8 -0.3 0.8 -0.2 0.9 -0.0 0.8 -0.1 1.4 -0.5 0.7 -0.4 0.7 -0.5 0.7 -0.5 0.8 -0.3 0.8 -0.2 0.9 -0.1 0.0 -0.0 0.8 0.1 0.9 0.2 0.8 0.3 0.7 0.5 0.7 0.5 0.7 0.4 1.4 0.5 0.8 0.1 0.9 0.0 0.9 0.2 0.8 0.3 0.7 0.4 0.5 0.4 0.2 0.1 0.5 0.7 0.5 0.7 0.3 0.8 0.2 0.8 0.3 0.9 0.6 1.3 0.5 0.6 0.7 0.7 0.6 0.6 0.5 0.7 0.4 0.8 0.2 0.8 0.0 0.2 0.1 0.7 -0.1 0.9 z; m38.9 24.2 -0.2 0.8 -0.2 0.7 -0.3 0.8 -0.2 0.8 -0.3 0.7 -0.2 0.8 -0.3 0.8 -0.2 0.7 -0.3 0.8 -0.2 0.8 -0.3 0.7 -0.2 0.8 -0.4 1.0 -0.4 0.8 -0.4 0.8 -0.6 0.6 -0.7 0.5 0.0 0.1 -0.7 0.4 -0.8 0.3 -0.8 0.3 -0.9 0.1 -1.1 -0.0 -0.8 -0.0 -0.8 -0.0 -0.8 -0.0 -0.8 -0.0 -0.8 -0.0 -0.8 -0.0 -0.8 -0.0 -0.8 -0.0 -0.8 -0.0 -0.8 -0.0 -0.8 -0.0 -0.8 -0.0 -0.8 -0.0 -1.1 -0.0 -0.9 -0.1 -0.8 -0.3 -0.8 -0.3 -0.7 -0.5 -0.1 0.0 -0.6 -0.5 -0.6 -0.7 -0.4 -0.7 -0.4 -0.8 -0.4 -1.0 -0.2 -0.8 -0.3 -0.7 -0.2 -0.8 -0.3 -0.8 -0.2 -0.7 -0.3 -0.8 -0.2 -0.8 -0.3 -0.7 -0.2 -0.8 -0.3 -0.7 -0.2 -0.8 -0.3 -0.8 -0.2 -0.7 -0.3 -1.1 -0.2 -0.9 -0.0 -0.8 0.0 -0.9 0.2 -0.8 0.1 -0.1 0.3 -0.7 0.4 -0.8 0.6 -0.6 0.6 -0.6 0.9 -0.7 0.6 -0.5 0.7 -0.4 0.6 -0.5 0.7 -0.5 0.6 -0.4 0.7 -0.5 0.6 -0.5 0.7 -0.5 0.6 -0.4 0.7 -0.5 0.6 -0.5 0.7 -0.4 0.6 -0.5 0.9 -0.7 0.8 -0.4 0.8 -0.3 0.8 -0.2 0.8 -0.0 0.1 -0.0 0.9 0.0 0.8 0.2 0.8 0.3 0.8 0.4 0.9 0.7 0.6 0.5 0.7 0.4 0.6 0.5 0.7 0.5 0.6 0.4 0.7 0.5 0.6 0.5 0.7 0.5 0.6 0.4 0.7 0.5 0.6 0.5 0.7 0.4 0.6 0.5 0.9 0.7 0.6 0.6 0.6 0.7 0.4 0.7 0.3 0.7 0.0 0.1 0.2 0.8 0.1 0.9 -0.0 0.9 -0.2 0.8 -0.3 1.1 z; m39.6 24.0 -0.1 0.8 -0.3 0.8 -0.2 0.8 -0.3 0.7 -0.3 0.8 -0.4 0.7 -0.4 0.7 -0.5 0.6 -0.4 0.6 -0.6 0.6 -0.6 0.6 -0.4 0.4 -0.6 0.6 -0.4 0.5 -0.9 0.8 -0.5 0.5 -0.6 0.6 -0.4 0.4 -0.7 0.7 -0.5 0.5 -0.6 0.4 -0.7 0.5 -0.6 0.4 -0.7 0.4 -0.7 0.3 -0.8 0.3 -0.8 0.3 -0.8 0.2 -0.8 0.1 -0.8 0.1 -0.8 0.1 -0.9 0.0 -0.8 -0.0 -0.9 -0.1 -0.8 -0.2 -0.8 -0.2 -0.9 -0.2 -0.8 -0.3 -0.8 -0.4 -0.8 -0.4 -0.7 -0.5 -0.7 -0.5 -0.7 -0.5 -0.6 -0.6 -0.1 -0.1 -0.5 -0.6 -0.6 -0.7 -0.5 -0.7 -0.5 -0.8 -0.4 -0.7 -0.4 -0.8 -0.3 -0.8 -0.2 -0.8 -0.2 -0.9 -0.2 -0.8 -0.1 -0.9 0.0 -0.8 0.0 -0.9 0.1 -0.8 0.1 -0.8 0.1 -0.8 0.3 -0.8 0.2 -0.8 0.3 -0.7 0.4 -0.8 0.3 -0.7 0.5 -0.6 0.4 -0.7 0.4 -0.5 0.6 -0.6 0.6 -0.7 0.4 -0.4 0.6 -0.6 0.5 -0.4 0.8 -0.9 0.5 -0.5 0.6 -0.6 0.4 -0.4 0.7 -0.7 0.5 -0.5 0.6 -0.4 0.7 -0.5 0.6 -0.4 0.7 -0.4 0.7 -0.3 0.8 -0.3 0.8 -0.3 0.8 -0.2 0.8 -0.1 0.8 -0.1 0.8 -0.1 0.9 -0.0 0.8 0.0 0.9 0.1 0.8 0.2 0.8 0.2 0.9 0.2 0.8 0.4 0.8 0.3 0.8 0.4 0.7 0.5 0.7 0.5 0.7 0.5 0.6 0.7 0.1 -0.0 0.5 0.6 0.6 0.7 0.5 0.7 0.5 0.8 0.4 0.7 0.3 0.8 0.4 0.8 0.2 0.8 0.2 0.9 0.2 0.8 0.1 0.9 0.0 0.8 -0.0 0.8 -0.1 0.9 z; m40.0 24.0 -0.1 0.8 -0.5 0.8 -0.6 0.8 -0.6 0.6 -0.6 0.7 -0.5 0.6 -0.7 1.2 -0.1 0.7 -0.1 0.8 -0.0 0.9 -0.1 0.9 -0.1 0.9 -0.2 0.9 -0.5 0.7 -0.0 0.0 -0.7 0.5 -0.9 0.2 -0.9 0.1 -0.9 0.1 -0.8 0.0 -0.8 0.1 -0.8 0.1 -1.2 0.7 -0.6 0.5 -0.7 0.6 -0.6 0.6 -0.8 0.6 -0.8 0.5 -0.8 0.1 -0.0 0.0 -0.8 -0.1 -0.8 -0.5 -0.8 -0.6 -0.6 -0.6 -0.7 -0.6 -0.6 -0.5 -1.2 -0.7 -0.7 -0.1 -0.8 -0.1 -0.9 -0.0 -0.9 -0.1 -0.9 -0.1 -0.9 -0.2 -0.7 -0.5 -0.0 0.0 -0.5 -0.7 -0.2 -0.9 -0.1 -0.9 -0.1 -0.9 -0.0 -0.8 -0.1 -0.8 -0.1 -0.8 -0.7 -1.2 -0.5 -0.6 -0.6 -0.7 -0.6 -0.6 -0.6 -0.8 -0.5 -0.8 -0.1 -0.8 -0.0 -0.0 0.1 -0.8 0.5 -0.8 0.6 -0.8 0.6 -0.6 0.6 -0.7 0.5 -0.6 0.7 -1.2 0.1 -0.7 0.1 -0.8 0.0 -0.9 0.1 -0.9 0.1 -0.9 0.2 -0.9 0.5 -0.7 -0.0 -0.0 0.7 -0.5 0.9 -0.2 0.9 -0.1 0.9 -0.1 0.8 -0.0 0.8 -0.1 0.8 -0.1 1.2 -0.7 0.6 -0.5 0.7 -0.6 0.6 -0.6 0.8 -0.6 0.8 -0.5 0.8 -0.1 0.0 -0.0 0.8 0.1 0.8 0.5 0.8 0.6 0.6 0.6 0.7 0.6 0.6 0.5 1.2 0.7 0.7 0.1 0.8 0.1 0.9 0.0 0.9 0.1 0.9 0.1 0.9 0.2 0.7 0.5 0.0 -0.0 0.5 0.7 0.2 0.9 0.1 0.9 0.1 0.9 0.0 0.8 0.1 0.8 0.1 0.8 0.7 1.2 0.5 0.6 0.6 0.7 0.6 0.6 0.6 0.8 0.5 0.8 0.1 0.8 z; m36.9 24.6 0.1 0.7 0.2 0.8 0.2 0.7 0.4 0.9 0.4 0.9 0.2 0.9 0.1 1.0 0.1 0.9 -0.1 0.9 -0.3 0.9 -0.3 0.9 -0.4 0.8 -0.5 0.8 -0.6 0.6 -0.1 0.1 -0.6 0.6 -0.8 0.5 -0.8 0.4 -0.9 0.3 -0.9 0.3 -0.9 0.1 -0.9 -0.1 -1.0 -0.1 -0.9 -0.2 -0.9 -0.4 -0.9 -0.4 -0.7 -0.2 -0.8 -0.2 -0.7 -0.1 -1.2 0.0 -0.7 0.1 -0.8 0.2 -0.7 0.2 -0.9 0.4 -0.9 0.4 -0.9 0.2 -1.0 0.1 -0.9 0.1 -0.9 -0.1 -0.9 -0.3 -0.9 -0.3 -0.8 -0.4 -0.8 -0.5 -0.6 -0.6 -0.1 -0.1 -0.6 -0.6 -0.5 -0.8 -0.4 -0.8 -0.3 -0.9 -0.3 -0.9 -0.1 -0.9 0.1 -0.9 0.1 -1.0 0.2 -0.9 0.4 -0.9 0.4 -0.9 0.2 -0.7 0.2 -0.8 0.1 -0.7 -0.0 -1.2 -0.1 -0.7 -0.2 -0.8 -0.2 -0.7 -0.4 -0.9 -0.4 -0.9 -0.2 -0.9 -0.1 -1.0 -0.1 -0.9 0.1 -0.9 0.3 -0.9 0.3 -0.9 0.4 -0.8 0.5 -0.8 0.6 -0.6 0.1 -0.1 0.6 -0.6 0.8 -0.5 0.8 -0.4 0.9 -0.3 0.9 -0.3 0.9 -0.1 0.9 0.1 1.0 0.1 0.9 0.2 0.9 0.4 0.9 0.4 0.7 0.2 0.8 0.2 0.7 0.1 1.2 -0.0 0.7 -0.1 0.8 -0.2 0.7 -0.2 0.9 -0.4 0.9 -0.4 0.9 -0.2 1.0 -0.1 0.9 -0.1 0.9 0.1 0.9 0.3 0.9 0.3 0.8 0.4 0.8 0.5 0.6 0.6 0.1 0.1 0.6 0.6 0.5 0.8 0.4 0.8 0.3 0.9 0.3 0.9 0.1 0.9 -0.1 0.9 -0.1 1.0 -0.2 0.9 -0.4 0.9 -0.4 0.9 -0.2 0.7 -0.2 0.8 -0.1 0.7 z; m37.7 24.0 -0.3 0.7 -0.4 0.7 -0.3 0.6 -0.3 0.7 -0.4 0.6 -0.3 0.5 -0.4 0.6 -0.4 0.5 -0.4 0.5 -0.4 0.5 -0.4 0.5 -0.4 0.5 -0.3 0.4 -0.5 0.4 -0.8 0.8 -0.4 0.5 -0.4 0.3 -0.5 0.4 -0.5 0.4 -0.5 0.4 -0.5 0.4 -0.5 0.4 -0.6 0.4 -0.5 0.3 -0.6 0.4 -0.7 0.3 -0.6 0.3 -0.7 0.4 -0.7 0.3 -0.7 0.2 -0.7 0.3 -0.9 0.3 -0.8 0.2 -0.8 0.1 -0.9 0.1 -1.0 0.1 -0.9 -0.0 -0.9 -0.1 -0.9 -0.1 -0.9 -0.3 -0.9 -0.3 -0.8 -0.4 -0.8 -0.6 -0.7 -0.6 -0.0 0.0 -0.6 -0.7 -0.6 -0.8 -0.4 -0.8 -0.3 -0.9 -0.3 -0.9 -0.1 -0.9 -0.1 -0.9 0.0 -0.9 0.1 -1.0 0.1 -0.9 0.1 -0.8 0.2 -0.8 0.3 -0.9 0.3 -0.7 0.2 -0.7 0.3 -0.7 0.4 -0.7 0.3 -0.6 0.3 -0.7 0.4 -0.6 0.3 -0.5 0.4 -0.6 0.4 -0.5 0.4 -0.5 0.4 -0.5 0.4 -0.5 0.4 -0.5 0.3 -0.4 0.5 -0.4 0.8 -0.8 0.4 -0.5 0.4 -0.3 0.5 -0.4 0.5 -0.4 0.5 -0.4 0.5 -0.4 0.5 -0.4 0.6 -0.4 0.5 -0.3 0.6 -0.4 0.7 -0.3 0.6 -0.3 0.7 -0.4 0.7 -0.3 0.7 -0.2 0.7 -0.3 0.9 -0.3 0.8 -0.2 0.8 -0.1 0.9 -0.1 1.0 -0.1 0.9 0.0 0.9 0.1 0.9 0.1 0.9 0.3 0.9 0.3 0.8 0.4 0.8 0.6 0.7 0.6 -0.0 0.0 0.6 0.7 0.6 0.8 0.4 0.8 0.3 0.9 0.3 0.9 0.1 0.9 0.1 0.9 -0.0 0.9 -0.1 1.0 -0.1 0.9 -0.1 0.8 -0.2 0.8 -0.3 0.9 -0.3 0.7 z; m37.4 24.7 0.5 0.7 0.8 0.9 0.8 1.0 0.6 1.0 -0.1 0.8 -0.0 0.1 -0.6 0.7 -1.1 0.5 -1.3 0.3 -1.0 0.2 -0.9 0.4 -0.7 1.1 0.1 1.0 0.1 1.1 0.0 1.2 -0.2 1.1 -0.4 0.5 -0.3 0.2 -0.8 0.2 -1.2 -0.4 -1.2 -0.4 -1.0 -0.5 -0.8 -0.1 -1.3 0.5 -0.5 0.8 -0.6 0.9 -0.6 1.0 -0.8 0.8 -0.8 0.2 -0.1 -0.0 -0.9 -0.3 -0.8 -1.0 -0.6 -1.0 -0.6 -0.9 -0.5 -0.7 -1.3 -0.3 -0.9 0.2 -0.9 0.4 -1.2 0.5 -1.2 0.3 -0.8 -0.3 -0.0 -0.1 -0.6 -0.6 -0.1 -1.2 0.1 -1.2 0.0 -1.1 0.0 -0.9 -0.7 -1.1 -0.9 -0.3 -1.1 -0.3 -1.2 -0.3 -1.1 -0.4 -0.5 -0.8 -0.0 0.0 -0.1 -0.9 0.6 -1.0 0.8 -0.9 0.8 -0.9 0.5 -0.7 -0.0 -1.4 -0.5 -0.7 -0.8 -0.9 -0.8 -0.9 -0.6 -1.0 0.1 -0.9 0.0 -0.0 0.5 -0.8 1.1 -0.4 1.2 -0.3 1.1 -0.3 0.9 -0.3 0.7 -1.1 0.0 -0.9 -0.0 -1.1 -0.1 -1.2 0.1 -1.2 0.6 -0.6 0.0 -0.1 0.8 -0.3 1.2 0.3 1.2 0.5 0.9 0.4 0.9 0.2 1.3 -0.3 0.5 -0.7 0.6 -0.9 0.6 -1.0 0.8 -1.0 0.9 -0.3 0.1 0.0 0.8 0.2 0.8 0.8 0.6 1.0 0.6 0.9 0.5 0.8 1.3 0.5 0.8 -0.1 1.0 -0.5 1.2 -0.4 1.2 -0.4 0.8 0.2 0.3 0.2 0.4 0.5 0.2 1.1 -0.0 1.2 -0.1 1.1 -0.1 1.0 0.7 1.1 0.9 0.4 1.0 0.2 1.3 0.3 1.1 0.5 0.6 0.7 0.0 0.1 0.1 0.8 -0.5 1.0 -0.9 1.0 -0.8 0.9 -0.5 0.7 z"/><animateTransform attributeName="transform" attributeType="XML" calcMode="spline" dur="5s" keySplines="0.5 0.2 0 0.8; 0.5 0.2 0 0.8; 0.5 0.2 0 0.8; 0.5 0.2 0 0.8; 0.5 0.2 0 0.8; 0.5 0.2 0 0.8; 0.5 0.2 0 0.8" keyTimes="0; 0.14; 0.29; 0.43; 0.57; 0.71; 0.86; 1" repeatCount="indefinite" type="rotate" values="0 24 24; 154 24 24; 309 24 24; 463 24 24; 617 24 24; 771 24 24; 926 24 24; 1080 24 24"/></path></svg>
|
|
@@ -1,26 +1,31 @@
|
|
|
1
1
|
/* Loading Indicator — M3 Expressive */
|
|
2
2
|
/* Uses SVG shape morphing between 7 MaterialShapes with continuous rotation.
|
|
3
|
-
Shapes: SoftBurst → Cookie9Sided → Pentagon → Pill → Sunny → Cookie4Sided → Oval
|
|
3
|
+
Shapes: SoftBurst → Cookie9Sided → Pentagon → Pill → Sunny → Cookie4Sided → Oval
|
|
4
|
+
Usage: short indeterminate waits (200ms–5s). Not for long processes — use progress indicator.
|
|
5
|
+
Responsive sizing: 24px–240px via --se-loading-indicator-size. Container-to-indicator ratio is 79.2%. */
|
|
4
6
|
|
|
5
7
|
/* ── Base (default, no container) ── */
|
|
6
8
|
.se-loading-indicator {
|
|
9
|
+
--se-loading-indicator-size: 48px;
|
|
7
10
|
display: inline-flex;
|
|
8
11
|
align-items: center;
|
|
9
12
|
justify-content: center;
|
|
10
|
-
width:
|
|
11
|
-
height:
|
|
13
|
+
width: var(--se-loading-indicator-size);
|
|
14
|
+
height: var(--se-loading-indicator-size);
|
|
12
15
|
position: relative;
|
|
13
16
|
color: var(--md-sys-color-primary);
|
|
14
17
|
}
|
|
15
18
|
|
|
16
|
-
/* SVG shape morph element */
|
|
19
|
+
/* SVG shape morph element — 79.2% of container (38/48 ratio) */
|
|
17
20
|
.se-loading-indicator__shapes {
|
|
18
21
|
display: block;
|
|
19
|
-
width:
|
|
20
|
-
height:
|
|
22
|
+
width: calc(var(--se-loading-indicator-size) * 0.792);
|
|
23
|
+
height: calc(var(--se-loading-indicator-size) * 0.792);
|
|
21
24
|
}
|
|
22
25
|
|
|
23
26
|
/* ── Contained variant ── */
|
|
27
|
+
/* Use when placed over other content for extra contrast.
|
|
28
|
+
Not needed on a plain surface. Always use with pull-to-refresh. */
|
|
24
29
|
.se-loading-indicator--contained {
|
|
25
30
|
background-color: var(--md-sys-color-primary-container);
|
|
26
31
|
border-radius: 50%;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@skagerakenergi/design",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.6.1",
|
|
4
4
|
"author": "Chris Aurora Neumann Ruud <chrisauroraneumann.ruud@skagerakenergi.no>",
|
|
5
5
|
"description": "Skagerak Energi design system — M3 component library (CSS only)",
|
|
6
6
|
"type": "module",
|
|
@@ -41,6 +41,8 @@
|
|
|
41
41
|
"./text-field.css": "./dist/text-field.css",
|
|
42
42
|
"./list.css": "./dist/list.css",
|
|
43
43
|
"./loading-indicator.css": "./dist/loading-indicator.css",
|
|
44
|
+
"./loading-indicator-shapes.svg": "./dist/loading-indicator-shapes.svg",
|
|
45
|
+
"./loading-indicator-shapes.js": "./dist/loading-indicator-shapes.js",
|
|
44
46
|
"./layout.css": "./dist/layout.css",
|
|
45
47
|
"./index.css": "./dist/index.css"
|
|
46
48
|
},
|
|
@@ -85,6 +87,7 @@
|
|
|
85
87
|
"test:spec": "playwright test --config tests/playwright.config.ts",
|
|
86
88
|
"test:storybook": "vitest --run",
|
|
87
89
|
"test": "pnpm test:spec && pnpm test:storybook",
|
|
90
|
+
"audit:docs": "node --import tsx scripts/audit-docs.ts",
|
|
88
91
|
"figma:publish": "figma connect publish",
|
|
89
92
|
"figma:unpublish": "figma connect unpublish"
|
|
90
93
|
}
|