@moni-labs/moni-ui 0.2.0 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +52 -194
- package/custom-elements.json +1636 -350
- package/dist/actions/index.d.ts +6 -0
- package/dist/actions/index.d.ts.map +1 -1
- package/dist/actions/index.js +6 -0
- package/dist/components/_base/field-styles.d.ts +51 -16
- package/dist/components/_base/field-styles.d.ts.map +1 -1
- package/dist/components/_base/field-styles.js +164 -36
- package/dist/components/_base/index.d.ts +25 -0
- package/dist/components/_base/index.d.ts.map +1 -1
- package/dist/components/_base/index.js +25 -0
- package/dist/components/_base/interaction-styles.d.ts +39 -12
- package/dist/components/_base/interaction-styles.d.ts.map +1 -1
- package/dist/components/_base/interaction-styles.js +85 -33
- package/dist/components/_base/moni-element.d.ts +43 -8
- package/dist/components/_base/moni-element.d.ts.map +1 -1
- package/dist/components/_base/moni-element.js +43 -8
- package/dist/components/_base/shared-styles.d.ts +41 -17
- package/dist/components/_base/shared-styles.d.ts.map +1 -1
- package/dist/components/_base/shared-styles.js +113 -21
- package/dist/components/index.d.ts +6 -0
- package/dist/components/index.d.ts.map +1 -1
- package/dist/components/index.js +6 -0
- package/dist/components/loading-shapes.d.ts +6 -0
- package/dist/components/loading-shapes.d.ts.map +1 -1
- package/dist/components/loading-shapes.js +6 -0
- package/dist/components/moni-app-bar.d.ts +128 -33
- package/dist/components/moni-app-bar.d.ts.map +1 -1
- package/dist/components/moni-app-bar.js +121 -26
- package/dist/components/moni-badge.d.ts +122 -14
- package/dist/components/moni-badge.d.ts.map +1 -1
- package/dist/components/moni-badge.js +122 -14
- package/dist/components/moni-bottom-sheet.d.ts +120 -15
- package/dist/components/moni-bottom-sheet.d.ts.map +1 -1
- package/dist/components/moni-bottom-sheet.js +116 -12
- package/dist/components/moni-button-group.d.ts +53 -27
- package/dist/components/moni-button-group.d.ts.map +1 -1
- package/dist/components/moni-button-group.js +49 -23
- package/dist/components/moni-button-segment.d.ts +28 -8
- package/dist/components/moni-button-segment.d.ts.map +1 -1
- package/dist/components/moni-button-segment.js +27 -7
- package/dist/components/moni-button.d.ts +51 -32
- package/dist/components/moni-button.d.ts.map +1 -1
- package/dist/components/moni-button.js +50 -31
- package/dist/components/moni-card.d.ts +91 -31
- package/dist/components/moni-card.d.ts.map +1 -1
- package/dist/components/moni-card.js +86 -26
- package/dist/components/moni-carousel.d.ts +67 -17
- package/dist/components/moni-carousel.d.ts.map +1 -1
- package/dist/components/moni-carousel.js +59 -16
- package/dist/components/moni-checkbox.d.ts +122 -17
- package/dist/components/moni-checkbox.d.ts.map +1 -1
- package/dist/components/moni-checkbox.js +118 -14
- package/dist/components/moni-chip.d.ts +56 -30
- package/dist/components/moni-chip.d.ts.map +1 -1
- package/dist/components/moni-chip.js +51 -25
- package/dist/components/moni-color-field.d.ts +44 -6
- package/dist/components/moni-color-field.d.ts.map +1 -1
- package/dist/components/moni-color-field.js +43 -5
- package/dist/components/moni-context-menu.d.ts +44 -22
- package/dist/components/moni-context-menu.d.ts.map +1 -1
- package/dist/components/moni-context-menu.js +43 -21
- package/dist/components/moni-dialog.d.ts +107 -15
- package/dist/components/moni-dialog.d.ts.map +1 -1
- package/dist/components/moni-dialog.js +105 -14
- package/dist/components/moni-divider.d.ts +50 -15
- package/dist/components/moni-divider.d.ts.map +1 -1
- package/dist/components/moni-divider.js +49 -14
- package/dist/components/moni-expansion.d.ts +44 -8
- package/dist/components/moni-expansion.d.ts.map +1 -1
- package/dist/components/moni-expansion.js +43 -7
- package/dist/components/moni-fab-menu.d.ts +39 -20
- package/dist/components/moni-fab-menu.d.ts.map +1 -1
- package/dist/components/moni-fab-menu.js +38 -19
- package/dist/components/moni-fab.d.ts +49 -23
- package/dist/components/moni-fab.d.ts.map +1 -1
- package/dist/components/moni-fab.js +46 -20
- package/dist/components/moni-file-field.d.ts +54 -14
- package/dist/components/moni-file-field.d.ts.map +1 -1
- package/dist/components/moni-file-field.js +53 -13
- package/dist/components/moni-icon.d.ts +78 -11
- package/dist/components/moni-icon.d.ts.map +1 -1
- package/dist/components/moni-icon.js +77 -10
- package/dist/components/moni-list-item.d.ts +61 -30
- package/dist/components/moni-list-item.d.ts.map +1 -1
- package/dist/components/moni-list-item.js +55 -24
- package/dist/components/moni-list.d.ts +37 -13
- package/dist/components/moni-list.d.ts.map +1 -1
- package/dist/components/moni-list.js +36 -12
- package/dist/components/moni-loading-indicator.d.ts +38 -11
- package/dist/components/moni-loading-indicator.d.ts.map +1 -1
- package/dist/components/moni-loading-indicator.js +37 -10
- package/dist/components/moni-menu-item.d.ts +31 -8
- package/dist/components/moni-menu-item.d.ts.map +1 -1
- package/dist/components/moni-menu-item.js +30 -7
- package/dist/components/moni-menu.d.ts +58 -33
- package/dist/components/moni-menu.d.ts.map +1 -1
- package/dist/components/moni-menu.js +51 -26
- package/dist/components/moni-morph-modal.d.ts +7 -1
- package/dist/components/moni-morph-modal.d.ts.map +1 -1
- package/dist/components/moni-morph-modal.js +46 -24
- package/dist/components/moni-nav-item.d.ts +50 -10
- package/dist/components/moni-nav-item.d.ts.map +1 -1
- package/dist/components/moni-nav-item.js +48 -8
- package/dist/components/moni-nav.d.ts +57 -22
- package/dist/components/moni-nav.d.ts.map +1 -1
- package/dist/components/moni-nav.js +53 -18
- package/dist/components/moni-progress.d.ts +108 -20
- package/dist/components/moni-progress.d.ts.map +1 -1
- package/dist/components/moni-progress.js +104 -16
- package/dist/components/moni-radio.d.ts +106 -14
- package/dist/components/moni-radio.d.ts.map +1 -1
- package/dist/components/moni-radio.js +104 -13
- package/dist/components/moni-ripple.d.ts +121 -10
- package/dist/components/moni-ripple.d.ts.map +1 -1
- package/dist/components/moni-ripple.js +120 -9
- package/dist/components/moni-segmented-button.d.ts +31 -11
- package/dist/components/moni-segmented-button.d.ts.map +1 -1
- package/dist/components/moni-segmented-button.js +30 -10
- package/dist/components/moni-select-option.d.ts +43 -9
- package/dist/components/moni-select-option.d.ts.map +1 -1
- package/dist/components/moni-select-option.js +41 -7
- package/dist/components/moni-select.d.ts +59 -2
- package/dist/components/moni-select.d.ts.map +1 -1
- package/dist/components/moni-select.js +58 -1
- package/dist/components/moni-shape.d.ts +1 -1
- package/dist/components/moni-side-sheet.d.ts +56 -19
- package/dist/components/moni-side-sheet.d.ts.map +1 -1
- package/dist/components/moni-side-sheet.js +53 -16
- package/dist/components/moni-slider.d.ts +56 -25
- package/dist/components/moni-slider.d.ts.map +1 -1
- package/dist/components/moni-slider.js +55 -24
- package/dist/components/moni-snackbar.d.ts +86 -17
- package/dist/components/moni-snackbar.d.ts.map +1 -1
- package/dist/components/moni-snackbar.js +85 -16
- package/dist/components/moni-split-button.d.ts +38 -9
- package/dist/components/moni-split-button.d.ts.map +1 -1
- package/dist/components/moni-split-button.js +37 -8
- package/dist/components/moni-step.d.ts +42 -9
- package/dist/components/moni-step.d.ts.map +1 -1
- package/dist/components/moni-step.js +41 -8
- package/dist/components/moni-stepper.d.ts +43 -6
- package/dist/components/moni-stepper.d.ts.map +1 -1
- package/dist/components/moni-stepper.js +42 -5
- package/dist/components/moni-switch.d.ts +103 -16
- package/dist/components/moni-switch.d.ts.map +1 -1
- package/dist/components/moni-switch.js +99 -13
- package/dist/components/moni-tab.d.ts +35 -8
- package/dist/components/moni-tab.d.ts.map +1 -1
- package/dist/components/moni-tab.js +34 -7
- package/dist/components/moni-tabs.d.ts +51 -13
- package/dist/components/moni-tabs.d.ts.map +1 -1
- package/dist/components/moni-tabs.js +48 -10
- package/dist/components/moni-text-field.d.ts +55 -10
- package/dist/components/moni-text-field.d.ts.map +1 -1
- package/dist/components/moni-text-field.js +54 -9
- package/dist/components/moni-textarea.d.ts +51 -21
- package/dist/components/moni-textarea.d.ts.map +1 -1
- package/dist/components/moni-textarea.js +48 -18
- package/dist/components/moni-time-picker.d.ts +41 -11
- package/dist/components/moni-time-picker.d.ts.map +1 -1
- package/dist/components/moni-time-picker.js +40 -10
- package/dist/components/moni-toolbar.d.ts +43 -15
- package/dist/components/moni-toolbar.d.ts.map +1 -1
- package/dist/components/moni-toolbar.js +42 -14
- package/dist/components/moni-tooltip.d.ts +55 -25
- package/dist/components/moni-tooltip.d.ts.map +1 -1
- package/dist/components/moni-tooltip.js +54 -24
- package/dist/components/moni-typography.d.ts +43 -18
- package/dist/components/moni-typography.d.ts.map +1 -1
- package/dist/components/moni-typography.js +42 -17
- package/dist/index.d.ts +47 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +59 -2
- package/dist/styles/tailwind.css +67 -0
- package/dist/styles/tokens.css +111 -99
- package/dist/utils/color.d.ts +181 -2
- package/dist/utils/color.d.ts.map +1 -1
- package/dist/utils/color.js +182 -4
- package/dist/utils/theme.svelte.d.ts +305 -2
- package/dist/utils/theme.svelte.d.ts.map +1 -1
- package/dist/utils/theme.svelte.js +331 -2
- package/dist/web-components.d.ts +28 -0
- package/dist/web-components.d.ts.map +1 -1
- package/dist/web-components.js +29 -2
- package/package.json +1 -1
- package/src/actions/index.ts +7 -0
- package/src/components/_base/field-styles.ts +165 -37
- package/src/components/_base/index.ts +27 -0
- package/src/components/_base/interaction-styles.ts +86 -33
- package/src/components/_base/moni-element.ts +44 -8
- package/src/components/_base/shared-styles.ts +114 -21
- package/src/components/index.ts +7 -0
- package/src/components/loading-shapes.ts +7 -0
- package/src/components/moni-app-bar.ts +127 -26
- package/src/components/moni-badge.ts +128 -14
- package/src/components/moni-bottom-sheet.ts +125 -13
- package/src/components/moni-button-group.ts +50 -23
- package/src/components/moni-button-segment.ts +28 -7
- package/src/components/moni-button.ts +51 -31
- package/src/components/moni-card.ts +90 -26
- package/src/components/moni-carousel.ts +67 -16
- package/src/components/moni-checkbox.ts +125 -14
- package/src/components/moni-chip.ts +52 -25
- package/src/components/moni-color-field.ts +44 -5
- package/src/components/moni-context-menu.ts +44 -21
- package/src/components/moni-dialog.ts +111 -14
- package/src/components/moni-divider.ts +50 -14
- package/src/components/moni-expansion.ts +44 -7
- package/src/components/moni-fab-menu.ts +39 -19
- package/src/components/moni-fab.ts +47 -20
- package/src/components/moni-file-field.ts +54 -13
- package/src/components/moni-icon.ts +80 -10
- package/src/components/moni-list-item.ts +56 -24
- package/src/components/moni-list.ts +37 -12
- package/src/components/moni-loading-indicator.ts +38 -10
- package/src/components/moni-menu-item.ts +31 -7
- package/src/components/moni-menu.ts +52 -26
- package/src/components/moni-morph-modal.ts +58 -24
- package/src/components/moni-nav-item.ts +49 -8
- package/src/components/moni-nav.ts +54 -18
- package/src/components/moni-progress.ts +109 -16
- package/src/components/moni-radio.ts +111 -13
- package/src/components/moni-ripple.ts +126 -9
- package/src/components/moni-segmented-button.ts +31 -10
- package/src/components/moni-select-option.ts +42 -7
- package/src/components/moni-select.ts +79 -1
- package/src/components/moni-side-sheet.ts +54 -16
- package/src/components/moni-slider.ts +56 -24
- package/src/components/moni-snackbar.ts +90 -16
- package/src/components/moni-split-button.ts +38 -8
- package/src/components/moni-step.ts +42 -8
- package/src/components/moni-stepper.ts +43 -5
- package/src/components/moni-switch.ts +106 -13
- package/src/components/moni-tab.ts +35 -7
- package/src/components/moni-tabs.ts +49 -10
- package/src/components/moni-text-field.ts +55 -9
- package/src/components/moni-textarea.ts +49 -18
- package/src/components/moni-time-picker.ts +41 -10
- package/src/components/moni-toolbar.ts +43 -14
- package/src/components/moni-tooltip.ts +55 -24
- package/src/components/moni-typography.ts +43 -17
- package/src/index.ts +67 -3
- package/src/styles/tailwind.css +67 -0
- package/src/styles/tokens.css +111 -99
- package/src/types/svelte-runes.d.ts +64 -2
- package/src/utils/color.ts +286 -5
- package/src/utils/theme.svelte.ts +411 -2
- package/src/web-components.ts +31 -2
- package/dist/assets/shapes/arch.svg +0 -1
- package/dist/assets/shapes/arrow.svg +0 -1
- package/dist/assets/shapes/boom.svg +0 -1
- package/dist/assets/shapes/burst.svg +0 -1
- package/dist/assets/shapes/circle.svg +0 -1
- package/dist/assets/shapes/clamshell.svg +0 -1
- package/dist/assets/shapes/diamond.svg +0 -1
- package/dist/assets/shapes/fan.svg +0 -1
- package/dist/assets/shapes/flower.svg +0 -1
- package/dist/assets/shapes/gem.svg +0 -1
- package/dist/assets/shapes/ghost-ish.svg +0 -1
- package/dist/assets/shapes/heart.svg +0 -1
- package/dist/assets/shapes/leaf-clover4.svg +0 -1
- package/dist/assets/shapes/leaf-clover8.svg +0 -1
- package/dist/assets/shapes/loading-indicator.svg +0 -1
- package/dist/assets/shapes/oval.svg +0 -1
- package/dist/assets/shapes/pentagon.svg +0 -1
- package/dist/assets/shapes/pill.svg +0 -1
- package/dist/assets/shapes/pixel-circle.svg +0 -1
- package/dist/assets/shapes/pixel-triangle.svg +0 -1
- package/dist/assets/shapes/puffy-diamond.svg +0 -1
- package/dist/assets/shapes/puffy.svg +0 -1
- package/dist/assets/shapes/semicircle.svg +0 -1
- package/dist/assets/shapes/sided-cookie12.svg +0 -1
- package/dist/assets/shapes/sided-cookie4.svg +0 -1
- package/dist/assets/shapes/sided-cookie6.svg +0 -1
- package/dist/assets/shapes/sided-cookie7.svg +0 -1
- package/dist/assets/shapes/sided-cookie9.svg +0 -1
- package/dist/assets/shapes/slanted.svg +0 -1
- package/dist/assets/shapes/soft-boom.svg +0 -1
- package/dist/assets/shapes/soft-burst.svg +0 -1
- package/dist/assets/shapes/square.svg +0 -1
- package/dist/assets/shapes/sunny.svg +0 -1
- package/dist/assets/shapes/triangle.svg +0 -1
- package/dist/assets/shapes/very-sunny.svg +0 -1
- package/dist/assets/shapes/wavy-circle.svg +0 -1
- package/dist/assets/shapes/wavy.svg +0 -1
- package/src/assets/shapes/arch.svg +0 -1
- package/src/assets/shapes/arrow.svg +0 -1
- package/src/assets/shapes/boom.svg +0 -1
- package/src/assets/shapes/burst.svg +0 -1
- package/src/assets/shapes/circle.svg +0 -1
- package/src/assets/shapes/clamshell.svg +0 -1
- package/src/assets/shapes/diamond.svg +0 -1
- package/src/assets/shapes/fan.svg +0 -1
- package/src/assets/shapes/flower.svg +0 -1
- package/src/assets/shapes/gem.svg +0 -1
- package/src/assets/shapes/ghost-ish.svg +0 -1
- package/src/assets/shapes/heart.svg +0 -1
- package/src/assets/shapes/leaf-clover4.svg +0 -1
- package/src/assets/shapes/leaf-clover8.svg +0 -1
- package/src/assets/shapes/loading-indicator.svg +0 -1
- package/src/assets/shapes/oval.svg +0 -1
- package/src/assets/shapes/pentagon.svg +0 -1
- package/src/assets/shapes/pill.svg +0 -1
- package/src/assets/shapes/pixel-circle.svg +0 -1
- package/src/assets/shapes/pixel-triangle.svg +0 -1
- package/src/assets/shapes/puffy-diamond.svg +0 -1
- package/src/assets/shapes/puffy.svg +0 -1
- package/src/assets/shapes/semicircle.svg +0 -1
- package/src/assets/shapes/sided-cookie12.svg +0 -1
- package/src/assets/shapes/sided-cookie4.svg +0 -1
- package/src/assets/shapes/sided-cookie6.svg +0 -1
- package/src/assets/shapes/sided-cookie7.svg +0 -1
- package/src/assets/shapes/sided-cookie9.svg +0 -1
- package/src/assets/shapes/slanted.svg +0 -1
- package/src/assets/shapes/soft-boom.svg +0 -1
- package/src/assets/shapes/soft-burst.svg +0 -1
- package/src/assets/shapes/square.svg +0 -1
- package/src/assets/shapes/sunny.svg +0 -1
- package/src/assets/shapes/triangle.svg +0 -1
- package/src/assets/shapes/very-sunny.svg +0 -1
- package/src/assets/shapes/wavy-circle.svg +0 -1
- package/src/assets/shapes/wavy.svg +0 -1
|
@@ -1,107 +1,158 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file components/_base/interaction-styles.ts
|
|
3
|
+
* @package @moni-labs/moni-ui
|
|
4
|
+
* @license MIT
|
|
5
|
+
* @contributors Moni Labs & Contributors
|
|
6
|
+
*/
|
|
7
|
+
|
|
1
8
|
import { css } from 'lit';
|
|
2
9
|
|
|
3
10
|
/**
|
|
4
|
-
*
|
|
11
|
+
* Material Design 3 State Layer system — CSS-only implementation.
|
|
5
12
|
*
|
|
6
|
-
* Material Design 3 defines
|
|
7
|
-
* communicate interactive state
|
|
8
|
-
*
|
|
13
|
+
* Material Design 3 defines **state layers** as semi-transparent color overlays
|
|
14
|
+
* that communicate interactive state visually to the user. They are applied on
|
|
15
|
+
* top of a component's background without altering its base color, allowing
|
|
16
|
+
* correct rendering across all surface and container colors.
|
|
9
17
|
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
18
|
+
* **M3 state layer opacity values (from the spec):**
|
|
19
|
+
* | State | Opacity |
|
|
20
|
+
* |-----------|---------|
|
|
21
|
+
* | Hover | 8% |
|
|
22
|
+
* | Focus | 12% |
|
|
23
|
+
* | Pressed | 12% |
|
|
24
|
+
* | Dragged | 16% |
|
|
13
25
|
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
26
|
+
* **Implementation strategy:**
|
|
27
|
+
* The state layer is rendered as a `::before` pseudo-element whose `opacity`
|
|
28
|
+
* transitions between states. A second `::after` pseudo-element provides a
|
|
29
|
+
* CSS-only center-origin ripple on press. For pointer-origin ripples
|
|
30
|
+
* (where the ripple starts at the tap/click point), use `<moni-ripple>` instead.
|
|
16
31
|
*
|
|
17
|
-
*
|
|
18
|
-
* element
|
|
32
|
+
* **Host element requirements:**
|
|
33
|
+
* The element bearing the `.interactive` class MUST have:
|
|
34
|
+
* - `position: relative` — so `::before` / `::after` are contained within it.
|
|
35
|
+
* - `overflow: hidden` — so the expanding ripple clips to the element's shape.
|
|
36
|
+
* - `isolation: isolate` — prevents the pseudo-elements from bleeding into
|
|
37
|
+
* stacking contexts created by parent elements.
|
|
19
38
|
*
|
|
20
|
-
*
|
|
39
|
+
* **Usage:**
|
|
40
|
+
* ```ts
|
|
41
|
+
* static override styles = [sharedStyles, interactionStyles, css`...`];
|
|
42
|
+
* ```
|
|
43
|
+
* Then in the template:
|
|
44
|
+
* ```html
|
|
45
|
+
* <button class="interactive">Click me</button>
|
|
46
|
+
* ```
|
|
47
|
+
*
|
|
48
|
+
* @see {@link https://m3.material.io/foundations/interaction/states/overview M3 State overview}
|
|
21
49
|
*/
|
|
22
50
|
export const interactionStyles = css`
|
|
23
|
-
/* ─── State layer opacity tokens (M3 spec)
|
|
51
|
+
/* ─── State layer opacity tokens (M3 spec values) ──────────────────────── */
|
|
24
52
|
:host {
|
|
53
|
+
/** Opacity applied on hover. M3 spec: 8%. */
|
|
25
54
|
--_state-hover: 0.08;
|
|
55
|
+
/** Opacity applied on keyboard focus. M3 spec: 12%. */
|
|
26
56
|
--_state-focus: 0.12;
|
|
57
|
+
/** Opacity applied on press/active. M3 spec: 12%. */
|
|
27
58
|
--_state-pressed: 0.12;
|
|
59
|
+
/** Opacity applied during drag. M3 spec: 16%. */
|
|
28
60
|
--_state-dragged: 0.16;
|
|
61
|
+
/**
|
|
62
|
+
* Color of the state layer overlay.
|
|
63
|
+
* Defaults to currentColor so it adapts to the element's text color.
|
|
64
|
+
* Override with --_state-color: var(--primary) for selected states.
|
|
65
|
+
*/
|
|
29
66
|
--_state-color: currentColor;
|
|
30
67
|
}
|
|
31
68
|
|
|
32
|
-
/* ─── The
|
|
69
|
+
/* ─── The interactive container ─────────────────────────────────────────── */
|
|
33
70
|
.interactive {
|
|
34
71
|
position: relative;
|
|
35
72
|
overflow: hidden;
|
|
36
|
-
/*
|
|
73
|
+
/* isolation: isolate prevents the pseudo-elements from mixing with
|
|
74
|
+
parent stacking contexts that use opacity or transform. */
|
|
37
75
|
isolation: isolate;
|
|
38
76
|
}
|
|
39
77
|
|
|
78
|
+
/* ─── State layer pseudo-element (::before) ─────────────────────────────── */
|
|
79
|
+
/* The layer sits above the element's background but below its content. */
|
|
40
80
|
.interactive::before {
|
|
41
81
|
content: '';
|
|
42
82
|
position: absolute;
|
|
43
83
|
inset: 0;
|
|
84
|
+
/* Inherit the border-radius from the host so the layer clips correctly
|
|
85
|
+
on rounded buttons, chips, and cards. */
|
|
44
86
|
border-radius: inherit;
|
|
45
87
|
background-color: var(--_state-color);
|
|
46
|
-
opacity: 0;
|
|
47
|
-
pointer-events: none;
|
|
48
|
-
/* Use the same transition speed as other properties on the element */
|
|
88
|
+
opacity: 0; /* Hidden by default; transitions in on state change. */
|
|
89
|
+
pointer-events: none; /* Never intercept pointer events. */
|
|
49
90
|
transition: opacity var(--speed2, 200ms) ease;
|
|
50
|
-
/*
|
|
91
|
+
/* z-index 0 places the layer above the background (z=-1 would be behind). */
|
|
51
92
|
z-index: 0;
|
|
52
93
|
}
|
|
53
94
|
|
|
54
|
-
/* Hover */
|
|
95
|
+
/* Hover: slight overlay to signal interactivity. */
|
|
55
96
|
.interactive:hover::before {
|
|
56
97
|
opacity: var(--_state-hover);
|
|
57
98
|
}
|
|
58
99
|
|
|
59
|
-
/* Focus-visible
|
|
100
|
+
/* Focus-visible: stronger overlay for keyboard / programmatic focus.
|
|
101
|
+
:focus-visible is preferred over :focus to avoid showing the indicator
|
|
102
|
+
on mouse clicks (which have their own press state). */
|
|
60
103
|
.interactive:focus-visible::before {
|
|
61
104
|
opacity: var(--_state-focus);
|
|
62
105
|
}
|
|
63
106
|
|
|
64
|
-
/* Pressed / active
|
|
107
|
+
/* Pressed / active: same opacity as focus but instant onset — the transition
|
|
108
|
+
handles the fade-out on pointer-up via the inherited duration. */
|
|
65
109
|
.interactive:active::before {
|
|
66
110
|
opacity: var(--_state-pressed);
|
|
67
|
-
/*
|
|
111
|
+
/* transition-duration: 0s — state layer appears instantaneously on press. */
|
|
68
112
|
transition-duration: 0s;
|
|
69
113
|
}
|
|
70
114
|
|
|
71
|
-
/* Disabled — no state layer at all */
|
|
115
|
+
/* Disabled — no state layer rendered at all (not just hidden). */
|
|
72
116
|
.interactive:disabled::before,
|
|
73
117
|
.interactive[aria-disabled='true']::before,
|
|
74
118
|
:host([disabled]) .interactive::before {
|
|
75
119
|
display: none;
|
|
76
120
|
}
|
|
77
121
|
|
|
78
|
-
/* ─── Selected/active modifier
|
|
79
|
-
/* When
|
|
80
|
-
|
|
122
|
+
/* ─── Selected / active modifier ────────────────────────────────────────── */
|
|
123
|
+
/* When a component is in a "selected" state (active nav item, checked chip,
|
|
124
|
+
current tab), the state layer color switches to the primary color so the
|
|
125
|
+
overlay is visually meaningful even on primary-container backgrounds. */
|
|
81
126
|
.interactive.selected::before,
|
|
82
127
|
.interactive[aria-selected='true']::before,
|
|
83
128
|
.interactive[aria-current]::before {
|
|
84
129
|
--_state-color: var(--primary);
|
|
130
|
+
/* Always show a subtle primary overlay to reinforce the selected state. */
|
|
85
131
|
opacity: var(--_state-hover);
|
|
86
132
|
}
|
|
87
133
|
.interactive.selected:hover::before,
|
|
88
134
|
.interactive[aria-selected='true']:hover::before {
|
|
135
|
+
/* Increase opacity slightly on hover within a selected element. */
|
|
89
136
|
opacity: calc(var(--_state-hover) * 1.5);
|
|
90
137
|
}
|
|
91
138
|
|
|
92
|
-
/* ───
|
|
139
|
+
/* ─── Content z-index ────────────────────────────────────────────────────── */
|
|
140
|
+
/* Ensure all direct children of .interactive render above the state layer
|
|
141
|
+
(z-index: 0) and the ripple pseudo-element (z-index: 0). */
|
|
93
142
|
.interactive > * {
|
|
94
143
|
position: relative;
|
|
95
144
|
z-index: 1;
|
|
96
145
|
}
|
|
97
146
|
|
|
98
|
-
/* ───
|
|
99
|
-
/*
|
|
100
|
-
For a pointer-origin ripple
|
|
147
|
+
/* ─── CSS-only center-origin ripple (::after) ───────────────────────────── */
|
|
148
|
+
/* Provides a basic expanding circle animation on :active. The circle always
|
|
149
|
+
originates from the element's center. For a pointer-origin ripple (where
|
|
150
|
+
the ripple starts at the exact tap/click coordinate), use <moni-ripple>
|
|
151
|
+
with JS activation instead. */
|
|
101
152
|
.interactive::after {
|
|
102
153
|
content: '';
|
|
103
154
|
position: absolute;
|
|
104
|
-
inset: 50%;
|
|
155
|
+
inset: 50%; /* Collapses to a point at the center. */
|
|
105
156
|
border-radius: 50%;
|
|
106
157
|
background-color: var(--_state-color);
|
|
107
158
|
opacity: 0;
|
|
@@ -110,11 +161,13 @@ export const interactionStyles = css`
|
|
|
110
161
|
z-index: 0;
|
|
111
162
|
}
|
|
112
163
|
|
|
164
|
+
/* Trigger the ripple keyframe animation on active/press. */
|
|
113
165
|
.interactive:active::after {
|
|
114
166
|
animation: to-ripple var(--speed3, 300ms) cubic-bezier(0.2, 0, 0, 1) forwards;
|
|
115
167
|
}
|
|
116
168
|
|
|
117
|
-
/*
|
|
169
|
+
/* Respect the user's reduced-motion preference by disabling the ripple.
|
|
170
|
+
The ::before state layer still functions, providing a static visual cue. */
|
|
118
171
|
@media (prefers-reduced-motion: reduce) {
|
|
119
172
|
.interactive::after {
|
|
120
173
|
display: none;
|
|
@@ -1,18 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file components/_base/moni-element.ts
|
|
3
|
+
* @package @moni-labs/moni-ui
|
|
4
|
+
* @license MIT
|
|
5
|
+
* @contributors Moni Labs & Contributors
|
|
6
|
+
*/
|
|
7
|
+
|
|
1
8
|
import { LitElement } from 'lit';
|
|
2
9
|
|
|
3
10
|
/**
|
|
4
|
-
*
|
|
11
|
+
* Abstract base class for every Moni UI Web Component.
|
|
12
|
+
*
|
|
13
|
+
* **Design philosophy — visual shells, no behavior:**
|
|
14
|
+
* All Moni components are intentionally "dumb" — they encapsulate only
|
|
15
|
+
* visual structure, styling, and attribute-to-DOM mapping. Consumers own
|
|
16
|
+
* interaction logic, validation, async data fetching, and state management.
|
|
17
|
+
* This keeps components framework-agnostic and composable with any
|
|
18
|
+
* state management solution (Svelte stores, Vue reactive, vanilla JS, etc.).
|
|
19
|
+
*
|
|
20
|
+
* **Shadow DOM:**
|
|
21
|
+
* The default `LitElement.createRenderRoot()` returns an open shadow root,
|
|
22
|
+
* which is preserved here unchanged. Shadow DOM encapsulation ensures that
|
|
23
|
+
* internal CSS class names (`.button`, `.field`, `.slider`, etc.) do not leak
|
|
24
|
+
* into or collide with the consumer's global stylesheet.
|
|
25
|
+
*
|
|
26
|
+
* **Extension contract:**
|
|
27
|
+
* Every subclass must:
|
|
28
|
+
* 1. Be decorated with `@customElement('moni-<name>')`.
|
|
29
|
+
* 2. Define `static override styles = [sharedStyles, css`...`]`.
|
|
30
|
+
* 3. Implement `override render(): TemplateResult`.
|
|
5
31
|
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
* and state management themselves.
|
|
32
|
+
* Subclasses MUST NOT add behavior (event handling, timers, fetch calls) that
|
|
33
|
+
* is not directly related to rendering the shadow DOM. See CONTRIBUTING.md
|
|
34
|
+
* for the full component authoring guide.
|
|
10
35
|
*
|
|
11
|
-
*
|
|
12
|
-
* root, which is what we want — BeerCSS class names like `.button`, `.field`,
|
|
13
|
-
* `.slider`, etc. live inside the shadow root and stay encapsulated.
|
|
36
|
+
* @see {@link https://lit.dev/docs/components/overview/ Lit component overview}
|
|
14
37
|
*/
|
|
15
38
|
export class MoniElement extends LitElement {
|
|
39
|
+
/**
|
|
40
|
+
* Returns the component's render root.
|
|
41
|
+
*
|
|
42
|
+
* Delegates to `LitElement.createRenderRoot()` which attaches an **open**
|
|
43
|
+
* shadow root (`{ mode: 'open' }`). Open mode allows external tools (browser
|
|
44
|
+
* devtools, testing frameworks) to traverse the shadow tree.
|
|
45
|
+
*
|
|
46
|
+
* This override exists explicitly to document the shadow root mode and to
|
|
47
|
+
* provide a hook for subclasses that may need to change the root in the future
|
|
48
|
+
* (e.g. to support `adoptedStyleSheets` in a specific environment).
|
|
49
|
+
*
|
|
50
|
+
* @returns The shadow root that Lit will render templates into.
|
|
51
|
+
*/
|
|
16
52
|
protected override createRenderRoot() {
|
|
17
53
|
return super.createRenderRoot();
|
|
18
54
|
}
|
|
@@ -1,25 +1,51 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file components/_base/shared-styles.ts
|
|
3
|
+
* @package @moni-labs/moni-ui
|
|
4
|
+
* @license MIT
|
|
5
|
+
* @contributors Moni Labs & Contributors
|
|
6
|
+
*/
|
|
7
|
+
|
|
1
8
|
import { css } from 'lit';
|
|
2
9
|
|
|
3
10
|
/**
|
|
4
|
-
*
|
|
11
|
+
* Baseline CSS injected into the shadow root of **every** Moni Web Component.
|
|
12
|
+
*
|
|
13
|
+
* This stylesheet is the foundational layer of the Moni design system. It serves
|
|
14
|
+
* four distinct responsibilities:
|
|
15
|
+
*
|
|
16
|
+
* **1. Box-sizing reset**
|
|
17
|
+
* Applies `box-sizing: border-box` to `:host`, all descendants, and slotted
|
|
18
|
+
* elements so every component has predictable sizing without override surprises.
|
|
19
|
+
*
|
|
20
|
+
* **2. CSS custom property bridge (Token namespace)**
|
|
21
|
+
* The component library uses short "bare" variable names internally (e.g.
|
|
22
|
+
* `var(--primary)`) for concise CSS. Because shadow DOM isolates custom
|
|
23
|
+
* properties by default, this sheet creates a bridge that resolves these
|
|
24
|
+
* internal names from the global token namespaces in the following priority:
|
|
5
25
|
*
|
|
6
|
-
*
|
|
7
|
-
* 1. Box-sizing reset on the host and its descendants.
|
|
8
|
-
* 2. CSS custom property bridge: exposes the **BeerCSS token namespace**
|
|
9
|
-
* (`--primary`, `--on-primary`, `--surface`, `--elevate1`, …) inside the
|
|
10
|
-
* shadow root, falling back to sensible Material 3 defaults if the host
|
|
11
|
-
* document has not provided the alias yet.
|
|
12
|
-
* 3. The `--md-sys-color-*` and `--color-*` aliases kept for backward
|
|
13
|
-
* compatibility with the MD3 theme engine that the rest of the Moni apps
|
|
14
|
-
* (MoniAuth-Client, MoniAuth-Yo, Moni-Labs) still rely on.
|
|
15
|
-
* 4. Helper utility classes (`.truncate`, `.visually-hidden`).
|
|
26
|
+
* `--moni-*` (Moni namespace) → `--md-sys-color-*` (MD3 spec) → hardcoded M3 default
|
|
16
27
|
*
|
|
17
|
-
*
|
|
18
|
-
*
|
|
19
|
-
*
|
|
20
|
-
*
|
|
28
|
+
* This lets a host document use any of the three namespaces to theme components.
|
|
29
|
+
*
|
|
30
|
+
* **3. MD3 `--color-*` aliases**
|
|
31
|
+
* A second `:host` block maps the older `--color-<role>` prefix to the primary
|
|
32
|
+
* bare tokens. These aliases ensure backward compatibility with Moni apps
|
|
33
|
+
* (MoniAuth-Client, MoniAuth-Yo) that still reference `--color-primary`, etc.
|
|
34
|
+
*
|
|
35
|
+
* **4. Utility classes**
|
|
36
|
+
* Provides `.truncate` (single-line text clipping) and `.visually-hidden`
|
|
37
|
+
* (screen-reader-only content) for use inside component shadow trees.
|
|
38
|
+
*
|
|
39
|
+
* **Usage:**
|
|
40
|
+
* ```ts
|
|
41
|
+
* static override styles = [sharedStyles, css`/* component-specific styles *\/`];
|
|
42
|
+
* ```
|
|
43
|
+
*
|
|
44
|
+
* @see {@link fieldStyles} — Additional styles for input field components.
|
|
45
|
+
* @see {@link interactionStyles} — M3 state layer system for interactive elements.
|
|
21
46
|
*/
|
|
22
47
|
export const sharedStyles = css`
|
|
48
|
+
/* ─── 1. Box-sizing reset ─────────────────────────────────────────────── */
|
|
23
49
|
:host {
|
|
24
50
|
box-sizing: border-box;
|
|
25
51
|
font-family: var(--font);
|
|
@@ -39,15 +65,67 @@ export const sharedStyles = css`
|
|
|
39
65
|
font-style: normal;
|
|
40
66
|
}
|
|
41
67
|
|
|
42
|
-
/* ───
|
|
68
|
+
/* ─── 2. CSS custom property bridge ──────────────────────────────────── */
|
|
69
|
+
/* Each token resolves in order: Moni namespace → MD3 spec → M3 default. */
|
|
43
70
|
:host {
|
|
44
|
-
/* ───
|
|
71
|
+
/* ─── Primary palette ─── */
|
|
72
|
+
--primary: var(--moni-primary, var(--md-sys-color-primary, #6750A4));
|
|
73
|
+
--on-primary: var(--moni-on-primary, var(--md-sys-color-on-primary, #ffffff));
|
|
74
|
+
--primary-container: var(--moni-primary-container, var(--md-sys-color-primary-container, #eaddff));
|
|
75
|
+
--on-primary-container: var(--moni-on-primary-container, var(--md-sys-color-on-primary-container, #21005d));
|
|
76
|
+
|
|
77
|
+
/* ─── Secondary palette ─── */
|
|
78
|
+
--secondary: var(--moni-secondary, var(--md-sys-color-secondary, #625b71));
|
|
79
|
+
--on-secondary: var(--moni-on-secondary, var(--md-sys-color-on-secondary, #ffffff));
|
|
80
|
+
--secondary-container: var(--moni-secondary-container, var(--md-sys-color-secondary-container, #e8def8));
|
|
81
|
+
--on-secondary-container: var(--moni-on-secondary-container, var(--md-sys-color-on-secondary-container, #1d192b));
|
|
82
|
+
|
|
83
|
+
/* ─── Tertiary palette ─── */
|
|
84
|
+
--tertiary: var(--moni-tertiary, var(--md-sys-color-tertiary, #7d5260));
|
|
85
|
+
--on-tertiary: var(--moni-on-tertiary, var(--md-sys-color-on-tertiary, #ffffff));
|
|
86
|
+
--tertiary-container: var(--moni-tertiary-container, var(--md-sys-color-tertiary-container, #ffd8e4));
|
|
87
|
+
--on-tertiary-container: var(--moni-on-tertiary-container, var(--md-sys-color-on-tertiary-container, #31111d));
|
|
88
|
+
|
|
89
|
+
/* ─── Error palette ─── */
|
|
90
|
+
--error: var(--moni-error, var(--md-sys-color-error, #b3261e));
|
|
91
|
+
--on-error: var(--moni-on-error, var(--md-sys-color-on-error, #ffffff));
|
|
92
|
+
--error-container: var(--moni-error-container, var(--md-sys-color-error-container, #f9dedc));
|
|
93
|
+
--on-error-container: var(--moni-on-error-container, var(--md-sys-color-on-error-container, #410e0b));
|
|
94
|
+
|
|
95
|
+
/* ─── Background & surface ─── */
|
|
96
|
+
--background: var(--moni-background, var(--md-sys-color-background, #fef7ff));
|
|
97
|
+
--on-background: var(--moni-on-background, var(--md-sys-color-on-background, #1d1b20));
|
|
98
|
+
--surface: var(--moni-surface, var(--md-sys-color-surface, #fef7ff));
|
|
99
|
+
--on-surface: var(--moni-on-surface, var(--md-sys-color-on-surface, #1d1b20));
|
|
100
|
+
--surface-variant: var(--moni-surface-variant, var(--md-sys-color-surface-variant, #e7e0ec));
|
|
101
|
+
--on-surface-variant: var(--moni-on-surface-variant, var(--md-sys-color-on-surface-variant, #49454f));
|
|
102
|
+
|
|
103
|
+
/* ─── Outline ─── */
|
|
104
|
+
--outline: var(--moni-outline, var(--md-sys-color-outline, #79747e));
|
|
105
|
+
--outline-variant: var(--moni-outline-variant, var(--md-sys-color-outline-variant, #cac4d0));
|
|
106
|
+
|
|
107
|
+
/* ─── Surface container hierarchy (5-level elevation tones) ─── */
|
|
108
|
+
--surface-container-lowest: var(--moni-surface-container-lowest, var(--md-sys-color-surface-container-lowest, #ffffff));
|
|
109
|
+
--surface-container-low: var(--moni-surface-container-low, var(--md-sys-color-surface-container-low, #f7f2fa));
|
|
110
|
+
--surface-container: var(--moni-surface-container, var(--md-sys-color-surface-container, #f3edf7));
|
|
111
|
+
--surface-container-high: var(--moni-surface-container-high, var(--md-sys-color-surface-container-high, #ece6f0));
|
|
112
|
+
--surface-container-highest: var(--moni-surface-container-highest, var(--md-sys-color-surface-container-highest, #e6e1e5));
|
|
113
|
+
|
|
114
|
+
/* ─── Inverse surfaces (snackbar, tooltip) ─── */
|
|
115
|
+
--inverse-surface: var(--moni-inverse-surface, var(--md-sys-color-inverse-surface, #313033));
|
|
116
|
+
--inverse-on-surface: var(--moni-inverse-on-surface, var(--md-sys-color-inverse-on-surface, #f4f0f4));
|
|
117
|
+
--inverse-primary: var(--moni-inverse-primary, var(--md-sys-color-inverse-primary, #d0bcff));
|
|
118
|
+
|
|
119
|
+
/* ─── Structural / non-color tokens ─── */
|
|
120
|
+
/* Scrim overlay used in modals, bottom sheets, dialogs. */
|
|
45
121
|
--shadow: 0 0 0 0 transparent;
|
|
46
122
|
--scrim: rgb(0 0 0 / 0.5);
|
|
123
|
+
/* State layer color for hover/pressed overlays. */
|
|
47
124
|
--active: color-mix(in srgb, currentColor 10%, transparent);
|
|
48
125
|
--overlay: rgb(0 0 0 / 0.5);
|
|
49
126
|
--image: linear-gradient(currentColor 0 0);
|
|
50
127
|
|
|
128
|
+
/* ─── Typography tokens ─── */
|
|
51
129
|
--font: var(--moni-font-sans, 'Geist', system-ui, -apple-system, sans-serif);
|
|
52
130
|
--font-title: var(
|
|
53
131
|
--moni-font-title,
|
|
@@ -56,19 +134,25 @@ export const sharedStyles = css`
|
|
|
56
134
|
serif
|
|
57
135
|
);
|
|
58
136
|
--font-mono: 'Geist Mono', 'Fira Code', monospace;
|
|
137
|
+
/* Icon font: override via --font-icon-override to use a different icon set. */
|
|
59
138
|
--font-icon: var(--font-icon-override, 'Material Symbols Rounded');
|
|
60
139
|
|
|
140
|
+
/* ─── Elevation shadows (MD3 tonal levels 1–3) ─── */
|
|
61
141
|
--elevate1: 0 0.125rem 0.125rem 0 rgb(0 0 0 / 0.32);
|
|
62
142
|
--elevate2: 0 0.25rem 0.5rem 0 rgb(0 0 0 / 0.4);
|
|
63
143
|
--elevate3: 0 0.375rem 0.75rem 0 rgb(0 0 0 / 0.48);
|
|
64
144
|
|
|
145
|
+
/* ─── Transition speed scale ─── */
|
|
146
|
+
/* speed1 = fastest micro-interactions; speed4 = slowest page transitions. */
|
|
65
147
|
--speed1: 100ms;
|
|
66
148
|
--speed2: 200ms;
|
|
67
149
|
--speed3: 300ms;
|
|
68
150
|
--speed4: 400ms;
|
|
69
151
|
}
|
|
70
152
|
|
|
71
|
-
/* ─── MD3
|
|
153
|
+
/* ─── 3. MD3 --color-* backward-compatibility aliases ─────────────── */
|
|
154
|
+
/* These map the older --color-<role> naming convention used in legacy */
|
|
155
|
+
/* Moni apps to the primary bare tokens above. Do not remove. */
|
|
72
156
|
:host {
|
|
73
157
|
--color-primary: var(--primary);
|
|
74
158
|
--color-on-primary: var(--on-primary);
|
|
@@ -110,8 +194,7 @@ export const sharedStyles = css`
|
|
|
110
194
|
--color-inverse-on-surface: var(--inverse-on-surface);
|
|
111
195
|
--color-inverse-primary: var(--inverse-primary);
|
|
112
196
|
|
|
113
|
-
/*
|
|
114
|
-
apps that import them continue to work. */
|
|
197
|
+
/* Named aliases for tokens defined in the legacy tokens.css stylesheet. */
|
|
115
198
|
--font-sans: var(--font);
|
|
116
199
|
--shadow-1: var(--elevate1);
|
|
117
200
|
--shadow-2: var(--elevate2);
|
|
@@ -125,13 +208,23 @@ export const sharedStyles = css`
|
|
|
125
208
|
--duration-normal: 250ms;
|
|
126
209
|
}
|
|
127
210
|
|
|
128
|
-
/* ─── Utility classes
|
|
211
|
+
/* ─── 4. Utility classes ─────────────────────────────────────────────── */
|
|
212
|
+
|
|
213
|
+
/**
|
|
214
|
+
* Clamps text to a single line with an ellipsis when overflow occurs.
|
|
215
|
+
* Apply to any element inside a shadow root where text needs to be truncated.
|
|
216
|
+
*/
|
|
129
217
|
.truncate {
|
|
130
218
|
overflow: hidden;
|
|
131
219
|
white-space: nowrap;
|
|
132
220
|
text-overflow: ellipsis;
|
|
133
221
|
}
|
|
134
222
|
|
|
223
|
+
/**
|
|
224
|
+
* Visually hides an element while keeping it accessible to screen readers
|
|
225
|
+
* and maintaining its position in the DOM and tab order.
|
|
226
|
+
* Use for labeling icon-only buttons, skip links, etc.
|
|
227
|
+
*/
|
|
135
228
|
.visually-hidden {
|
|
136
229
|
position: absolute;
|
|
137
230
|
width: 1px;
|
package/src/components/index.ts
CHANGED
|
@@ -1,3 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file components/loading-shapes.ts
|
|
3
|
+
* @package @moni-labs/moni-ui
|
|
4
|
+
* @license MIT
|
|
5
|
+
* @contributors Moni Labs & Contributors
|
|
6
|
+
*/
|
|
7
|
+
|
|
1
8
|
export const loadingIndicatorPolygons = {
|
|
2
9
|
'4-sided-cookie': '63.83% 2.22%, 65.10% 1.70%, 66.36% 1.26%, 67.62% 0.89%, 68.88% 0.58%, 70.14% 0.34%, 71.39% 0.16%, 72.63% 0.05%, 73.86% 0.00%, 75.08% 0.01%, 76.28% 0.08%, 77.48% 0.21%, 78.66% 0.40%, 79.82% 0.63%, 80.97% 0.93%, 82.09% 1.27%, 83.20% 1.67%, 84.28% 2.11%, 85.34% 2.60%, 86.37% 3.14%, 87.38% 3.72%, 88.36% 4.35%, 89.31% 5.02%, 90.23% 5.73%, 91.12% 6.48%, 91.98% 7.26%, 92.80% 8.09%, 93.58% 8.94%, 94.32% 9.83%, 95.03% 10.76%, 95.70% 11.71%, 96.32% 12.69%, 96.90% 13.70%, 97.43% 14.74%, 97.92% 15.80%, 98.36% 16.88%, 98.76% 17.99%, 99.10% 19.12%, 99.38% 20.26%, 99.62% 21.43%, 99.80% 22.61%, 99.92% 23.80%, 99.99% 25.01%, 100.00% 26.23%, 99.94% 27.47%, 99.83% 28.71%, 99.65% 29.95%, 99.40% 31.21%, 99.09% 32.47%, 98.71% 33.73%, 98.26% 35.00%, 97.75% 36.25%, 97.26% 37.36%, 96.78% 38.47%, 96.30% 39.59%, 95.83% 40.72%, 95.42% 41.87%, 95.06% 43.03%, 94.76% 44.21%, 94.52% 45.40%, 94.33% 46.59%, 94.20% 47.79%, 94.12% 48.99%, 94.11% 50.19%, 94.14% 51.40%, 94.24% 52.60%, 94.39% 53.80%, 94.59% 54.99%, 94.85% 56.17%, 95.17% 57.34%, 95.55% 58.50%, 95.98% 59.65%, 96.45% 60.77%, 96.94% 61.89%, 97.42% 63.00%, 97.92% 64.15%, 98.41% 65.41%, 98.84% 66.68%, 99.20% 67.94%, 99.49% 69.20%, 99.71% 70.45%, 99.87% 71.70%, 99.97% 72.93%, 100.00% 74.16%, 99.97% 75.38%, 99.89% 76.58%, 99.75% 77.78%, 99.55% 78.95%, 99.30% 80.11%, 98.99% 81.25%, 98.63% 82.37%, 98.23% 83.47%, 97.77% 84.55%, 97.27% 85.60%, 96.72% 86.63%, 96.12% 87.63%, 95.49% 88.60%, 94.81% 89.55%, 94.09% 90.46%, 93.33% 91.34%, 92.54% 92.19%, 91.70% 93.00%, 90.84% 93.77%, 89.94% 94.51%, 89.01% 95.20%, 88.05% 95.86%, 87.06% 96.47%, 86.04% 97.04%, 85.00% 97.56%, 83.93% 98.04%, 82.84% 98.47%, 81.73% 98.85%, 80.60% 99.17%, 79.45% 99.45%, 78.28% 99.67%, 77.09% 99.84%, 75.89% 99.95%, 74.68% 100.00%, 73.46% 99.99%, 72.23% 99.92%, 70.98% 99.79%, 69.73% 99.59%, 68.48% 99.33%, 67.22% 99.00%, 65.95% 98.60%, 64.69% 98.14%, 63.47% 97.63%, 62.36% 97.14%, 61.25% 96.66%, 60.13% 96.18%, 58.99% 95.72%, 57.84% 95.32%, 56.67% 94.98%, 55.49% 94.70%, 54.31% 94.47%, 53.11% 94.29%, 51.91% 94.18%, 50.71% 94.11%, 49.50% 94.11%, 48.30% 94.16%, 47.10% 94.27%, 45.90% 94.43%, 44.71% 94.65%, 43.53% 94.93%, 42.36% 95.26%, 41.21% 95.65%, 40.07% 96.09%, 38.95% 96.58%, 37.84% 97.06%, 36.72% 97.54%, 35.54% 98.05%, 34.27% 98.53%, 33.01% 98.94%, 31.74% 99.28%, 30.49% 99.55%, 29.24% 99.76%, 27.99% 99.90%, 26.76% 99.98%, 25.53% 100.00%, 24.32% 99.96%, 23.12% 99.86%, 21.93% 99.70%, 20.76% 99.49%, 19.60% 99.23%, 18.47% 98.91%, 17.35% 98.54%, 16.26% 98.12%, 15.19% 97.65%, 14.14% 97.13%, 13.12% 96.57%, 12.12% 95.97%, 11.16% 95.32%, 10.22% 94.63%, 9.32% 93.90%, 8.45% 93.14%, 7.61% 92.33%, 6.81% 91.49%, 6.04% 90.62%, 5.32% 89.71%, 4.63% 88.77%, 3.99% 87.80%, 3.38% 86.81%, 2.83% 85.78%, 2.31% 84.74%, 1.85% 83.66%, 1.43% 82.57%, 1.07% 81.45%, 0.75% 80.31%, 0.49% 79.16%, 0.28% 77.98%, 0.13% 76.80%, 0.04% 75.59%, 0.00% 74.38%, 0.02% 73.15%, 0.11% 71.92%, 0.26% 70.67%, 0.47% 69.42%, 0.75% 68.16%, 1.09% 66.90%, 1.51% 65.64%, 1.99% 64.37%, 2.49% 63.19%, 2.98% 62.08%, 3.46% 60.97%, 3.94% 59.85%, 4.38% 58.71%, 4.77% 57.55%, 5.09% 56.38%, 5.37% 55.20%, 5.58% 54.01%, 5.74% 52.81%, 5.84% 51.61%, 5.89% 50.41%, 5.88% 49.20%, 5.82% 48.00%, 5.70% 46.80%, 5.52% 45.61%, 5.28% 44.42%, 4.99% 43.24%, 4.65% 42.07%, 4.25% 40.92%, 3.79% 39.78%, 3.30% 38.67%, 2.82% 37.56%, 2.34% 36.45%, 1.82% 35.22%, 1.36% 33.95%, 0.97% 32.69%, 0.65% 31.43%, 0.39% 30.18%, 0.20% 28.93%, 0.07% 27.68%, 0.01% 26.45%, 0.01% 25.23%, 0.06% 24.02%, 0.17% 22.82%, 0.34% 21.64%, 0.57% 20.47%, 0.85% 19.32%, 1.18% 18.19%, 1.56% 17.08%, 2.00% 15.99%, 2.48% 14.92%, 3.00% 13.88%, 3.57% 12.87%, 4.19% 11.88%, 4.85% 10.92%, 5.55% 9.99%, 6.29% 9.10%, 7.06% 8.23%, 7.88% 7.41%, 8.72% 6.61%, 9.61% 5.86%, 10.52% 5.14%, 11.47% 4.47%, 12.44% 3.83%, 13.45% 3.24%, 14.48% 2.69%, 15.53% 2.19%, 16.61% 1.74%, 17.71% 1.34%, 18.83% 0.98%, 19.98% 0.68%, 21.14% 0.43%, 22.31% 0.24%, 23.50% 0.10%, 24.71% 0.02%, 25.93% 0.00%, 27.16% 0.04%, 28.39% 0.14%, 29.64% 0.30%, 30.89% 0.53%, 32.15% 0.83%, 33.41% 1.19%, 34.68% 1.62%, 35.94% 2.12%, 37.08% 2.61%, 38.20% 3.10%, 39.31% 3.58%, 40.43% 4.06%, 41.58% 4.48%, 42.74% 4.85%, 43.91% 5.17%, 45.10% 5.43%, 46.29% 5.63%, 47.49% 5.77%, 48.69% 5.86%, 49.89% 5.90%, 51.10% 5.87%, 52.30% 5.79%, 53.50% 5.66%, 54.69% 5.47%, 55.88% 5.22%, 57.05% 4.91%, 58.21% 4.55%, 59.36% 4.14%, 60.49% 3.67%, 61.61% 3.18%, 62.72% 2.70%, 63.83% 2.22%',
|
|
3
10
|
'9-sided-cookie': '61.39% 5.18%, 62.25% 5.81%, 63.15% 6.37%, 64.08% 6.88%, 65.04% 7.33%, 66.03% 7.71%, 67.04% 8.02%, 68.07% 8.27%, 69.11% 8.45%, 70.17% 8.57%, 71.18% 8.61%, 72.43% 8.63%, 73.38% 8.68%, 74.46% 8.80%, 75.52% 9.00%, 76.56% 9.26%, 77.57% 9.59%, 78.55% 9.98%, 79.50% 10.44%, 80.42% 10.95%, 81.30% 11.52%, 82.14% 12.14%, 82.93% 12.81%, 83.69% 13.54%, 84.39% 14.31%, 85.05% 15.13%, 85.65% 15.99%, 86.20% 16.89%, 86.69% 17.84%, 87.12% 18.81%, 87.49% 19.83%, 87.79% 20.87%, 87.99% 21.78%, 88.22% 23.01%, 88.46% 24.01%, 88.76% 25.02%, 89.14% 26.02%, 89.57% 26.98%, 90.07% 27.91%, 90.63% 28.81%, 91.24% 29.67%, 91.91% 30.49%, 92.64% 31.27%, 93.40% 31.98%, 94.34% 32.79%, 95.02% 33.41%, 95.78% 34.19%, 96.48% 35.02%, 97.12% 35.88%, 97.70% 36.77%, 98.21% 37.69%, 98.66% 38.65%, 99.05% 39.62%, 99.37% 40.62%, 99.63% 41.63%, 99.82% 42.66%, 99.94% 43.70%, 100.00% 44.74%, 99.99% 45.79%, 99.91% 46.84%, 99.76% 47.88%, 99.54% 48.92%, 99.26% 49.95%, 98.90% 50.97%, 98.47% 51.97%, 98.04% 52.81%, 97.43% 53.91%, 96.96% 54.80%, 96.53% 55.77%, 96.16% 56.77%, 95.86% 57.78%, 95.63% 58.81%, 95.46% 59.86%, 95.36% 60.91%, 95.34% 61.97%, 95.38% 63.03%, 95.49% 64.09%, 95.68% 65.27%, 95.82% 66.19%, 95.91% 67.28%, 95.93% 68.36%, 95.88% 69.43%, 95.76% 70.49%, 95.57% 71.53%, 95.32% 72.55%, 95.00% 73.55%, 94.61% 74.53%, 94.17% 75.47%, 93.66% 76.39%, 93.10% 77.27%, 92.48% 78.11%, 91.81% 78.92%, 91.09% 79.68%, 90.31% 80.39%, 89.48% 81.06%, 88.61% 81.68%, 87.69% 82.23%, 86.73% 82.74%, 85.81% 83.14%, 84.74% 83.55%, 83.75% 83.94%, 82.78% 84.40%, 81.85% 84.91%, 80.96% 85.49%, 80.11% 86.11%, 79.30% 86.80%, 78.54% 87.53%, 77.83% 88.31%, 77.17% 89.14%, 76.56% 90.02%, 75.97% 90.98%, 75.43% 91.87%, 74.84% 92.73%, 74.17% 93.59%, 73.45% 94.38%, 72.69% 95.13%, 71.89% 95.82%, 71.04% 96.45%, 70.16% 97.02%, 69.25% 97.53%, 68.30% 97.99%, 67.34% 98.38%, 66.34% 98.71%, 65.33% 98.97%, 64.30% 99.17%, 63.26% 99.30%, 62.21% 99.37%, 61.15% 99.37%, 60.08% 99.29%, 59.02% 99.15%, 57.96% 98.93%, 56.92% 98.65%, 55.99% 98.34%, 54.89% 97.96%, 53.86% 97.67%, 52.82% 97.46%, 51.77% 97.31%, 50.72% 97.23%, 49.66% 97.21%, 48.61% 97.27%, 47.55% 97.39%, 46.51% 97.59%, 45.48% 97.85%, 44.51% 98.16%, 43.35% 98.56%, 42.42% 98.84%, 41.36% 99.08%, 40.30% 99.25%, 39.24% 99.35%, 38.18% 99.38%, 37.12% 99.34%, 36.07% 99.23%, 35.04% 99.05%, 34.02% 98.81%, 33.02% 98.50%, 32.04% 98.13%, 31.09% 97.70%, 30.17% 97.21%, 29.27% 96.66%, 28.42% 96.05%, 27.60% 95.38%, 26.82% 94.66%, 26.08% 93.88%, 25.40% 93.04%, 24.76% 92.16%, 24.27% 91.38%, 23.64% 90.33%, 23.06% 89.45%, 22.42% 88.60%, 21.72% 87.80%, 20.98% 87.05%, 20.19% 86.35%, 19.35% 85.70%, 18.47% 85.11%, 17.56% 84.58%, 16.60% 84.10%, 15.67% 83.70%, 14.49% 83.26%, 13.63% 82.90%, 12.65% 82.42%, 11.72% 81.88%, 10.83% 81.29%, 9.98% 80.64%, 9.19% 79.94%, 8.45% 79.20%, 7.75% 78.41%, 7.12% 77.58%, 6.53% 76.71%, 6.01% 75.81%, 5.54% 74.87%, 5.14% 73.91%, 4.80% 72.92%, 4.52% 71.90%, 4.30% 70.87%, 4.16% 69.82%, 4.08% 68.75%, 4.08% 67.67%, 4.15% 66.59%, 4.26% 65.66%, 4.47% 64.41%, 4.59% 63.41%, 4.66% 62.35%, 4.66% 61.29%, 4.59% 60.23%, 4.44% 59.18%, 4.24% 58.15%, 3.96% 57.13%, 3.62% 56.12%, 3.21% 55.14%, 2.73% 54.19%, 2.14% 53.14%, 1.71% 52.32%, 1.25% 51.33%, 0.87% 50.32%, 0.55% 49.29%, 0.31% 48.25%, 0.14% 47.21%, 0.04% 46.16%, 0.00% 45.11%, 0.03% 44.07%, 0.13% 43.03%, 0.30% 42.00%, 0.53% 40.98%, 0.83% 39.98%, 1.19% 38.99%, 1.62% 38.03%, 2.11% 37.10%, 2.67% 36.19%, 3.28% 35.32%, 3.96% 34.48%, 4.70% 33.69%, 5.41% 33.02%, 6.33% 32.22%, 7.09% 31.54%, 7.84% 30.78%, 8.53% 29.97%, 9.16% 29.12%, 9.74% 28.24%, 10.26% 27.32%, 10.72% 26.37%, 11.11% 25.38%, 11.45% 24.37%, 11.71% 23.34%, 11.94% 22.20%, 12.13% 21.24%, 12.40% 20.20%, 12.75% 19.17%, 13.15% 18.18%, 13.62% 17.23%, 14.15% 16.31%, 14.73% 15.43%, 15.37% 14.60%, 16.06% 13.81%, 16.80% 13.07%, 17.58% 12.37%, 18.40% 11.73%, 19.27% 11.14%, 20.17% 10.61%, 21.11% 10.14%, 22.08% 9.72%, 23.08% 9.37%, 24.11% 9.09%, 25.16% 8.87%, 26.24% 8.72%, 27.27% 8.64%, 28.33% 8.62%, 29.45% 8.59%, 30.51% 8.50%, 31.56% 8.34%, 32.60% 8.12%, 33.62% 7.83%, 34.61% 7.47%, 35.58% 7.05%, 36.52% 6.56%, 37.43% 6.02%, 38.31% 5.41%, 39.15% 4.75%, 39.15% 4.75%, 40.04% 4.03%, 40.85% 3.44%, 41.76% 2.86%, 42.71% 2.35%, 43.68% 1.90%, 44.67% 1.52%, 45.68% 1.21%, 46.70% 0.96%, 47.73% 0.78%, 48.77% 0.67%, 49.81% 0.62%, 50.86% 0.65%, 51.90% 0.73%, 52.94% 0.89%, 53.96% 1.11%, 54.98% 1.40%, 55.97% 1.76%, 56.95% 2.18%, 57.90% 2.67%, 58.83% 3.23%, 59.73% 3.85%, 60.46% 4.43%',
|