@stackific/md3 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (116) hide show
  1. package/LICENSE +201 -0
  2. package/NOTICE +17 -0
  3. package/README.md +316 -0
  4. package/THIRD-PARTY-NOTICES +40 -0
  5. package/dist/fonts/material-symbols-outlined.woff2 +0 -0
  6. package/dist/fonts/material-symbols-rounded.woff2 +0 -0
  7. package/dist/fonts/material-symbols-sharp.woff2 +0 -0
  8. package/dist/fonts/material-symbols-subset.woff2 +0 -0
  9. package/dist/md3.css +1 -0
  10. package/dist/md3.js +621 -0
  11. package/dist/shapes/arch.svg +1 -0
  12. package/dist/shapes/arrow.svg +1 -0
  13. package/dist/shapes/boom.svg +1 -0
  14. package/dist/shapes/bun.svg +1 -0
  15. package/dist/shapes/burst.svg +1 -0
  16. package/dist/shapes/circle.svg +1 -0
  17. package/dist/shapes/clamshell.svg +1 -0
  18. package/dist/shapes/diamond.svg +1 -0
  19. package/dist/shapes/fan.svg +1 -0
  20. package/dist/shapes/flower.svg +1 -0
  21. package/dist/shapes/gem.svg +1 -0
  22. package/dist/shapes/ghost-ish.svg +1 -0
  23. package/dist/shapes/heart.svg +1 -0
  24. package/dist/shapes/leaf-clover4.svg +1 -0
  25. package/dist/shapes/leaf-clover8.svg +1 -0
  26. package/dist/shapes/loading-indicator.svg +1 -0
  27. package/dist/shapes/oval.svg +1 -0
  28. package/dist/shapes/pentagon.svg +1 -0
  29. package/dist/shapes/pill.svg +1 -0
  30. package/dist/shapes/pixel-circle.svg +1 -0
  31. package/dist/shapes/pixel-triangle.svg +1 -0
  32. package/dist/shapes/puffy-diamond.svg +1 -0
  33. package/dist/shapes/puffy.svg +1 -0
  34. package/dist/shapes/semicircle.svg +1 -0
  35. package/dist/shapes/sided-cookie12.svg +1 -0
  36. package/dist/shapes/sided-cookie4.svg +1 -0
  37. package/dist/shapes/sided-cookie6.svg +1 -0
  38. package/dist/shapes/sided-cookie7.svg +1 -0
  39. package/dist/shapes/sided-cookie9.svg +1 -0
  40. package/dist/shapes/slanted.svg +1 -0
  41. package/dist/shapes/soft-boom.svg +1 -0
  42. package/dist/shapes/soft-burst.svg +1 -0
  43. package/dist/shapes/square.svg +1 -0
  44. package/dist/shapes/sunny.svg +1 -0
  45. package/dist/shapes/triangle.svg +1 -0
  46. package/dist/shapes/very-sunny.svg +1 -0
  47. package/dist/shapes/wavy-circle.svg +1 -0
  48. package/dist/shapes/wavy.svg +1 -0
  49. package/package.json +63 -0
  50. package/src/main.js +5 -0
  51. package/src/runtime/elements/dialogs.js +72 -0
  52. package/src/runtime/elements/fields.js +181 -0
  53. package/src/runtime/elements/menus.js +42 -0
  54. package/src/runtime/elements/pages.js +7 -0
  55. package/src/runtime/elements/progress.js +35 -0
  56. package/src/runtime/elements/sliders.js +78 -0
  57. package/src/runtime/elements/snackbars.js +27 -0
  58. package/src/runtime/helpers/ripples.js +46 -0
  59. package/src/runtime/md3.js +141 -0
  60. package/src/runtime/palette.js +64 -0
  61. package/src/runtime/settings/theme.js +194 -0
  62. package/src/runtime/utils.js +165 -0
  63. package/src/styles/_config.scss +142 -0
  64. package/src/styles/_mixins.scss +80 -0
  65. package/src/styles/elements/_badges.scss +65 -0
  66. package/src/styles/elements/_bars.scss +83 -0
  67. package/src/styles/elements/_buttons.scss +119 -0
  68. package/src/styles/elements/_cards.scss +32 -0
  69. package/src/styles/elements/_chips.scss +46 -0
  70. package/src/styles/elements/_dialogs.scss +143 -0
  71. package/src/styles/elements/_dividers.scss +46 -0
  72. package/src/styles/elements/_expansions.scss +19 -0
  73. package/src/styles/elements/_fields.scss +458 -0
  74. package/src/styles/elements/_grids.scss +35 -0
  75. package/src/styles/elements/_icons.scss +70 -0
  76. package/src/styles/elements/_layouts.scss +24 -0
  77. package/src/styles/elements/_lists.scss +76 -0
  78. package/src/styles/elements/_main-layouts.scss +45 -0
  79. package/src/styles/elements/_media.scss +104 -0
  80. package/src/styles/elements/_menus.scss +289 -0
  81. package/src/styles/elements/_navigations.scss +450 -0
  82. package/src/styles/elements/_overlays.scss +34 -0
  83. package/src/styles/elements/_pages.scss +28 -0
  84. package/src/styles/elements/_progress.scss +141 -0
  85. package/src/styles/elements/_selections.scss +248 -0
  86. package/src/styles/elements/_shapes.scss +151 -0
  87. package/src/styles/elements/_sliders.scss +336 -0
  88. package/src/styles/elements/_snackbars.scss +44 -0
  89. package/src/styles/elements/_tables.scss +67 -0
  90. package/src/styles/elements/_tabs.scss +49 -0
  91. package/src/styles/elements/_tooltips.scss +125 -0
  92. package/src/styles/helpers/_alignments.scss +29 -0
  93. package/src/styles/helpers/_blurs.scss +26 -0
  94. package/src/styles/helpers/_colors.scss +39 -0
  95. package/src/styles/helpers/_directions.scss +30 -0
  96. package/src/styles/helpers/_elevates.scss +20 -0
  97. package/src/styles/helpers/_forms.scss +76 -0
  98. package/src/styles/helpers/_margins.scss +39 -0
  99. package/src/styles/helpers/_opacities.scss +18 -0
  100. package/src/styles/helpers/_paddings.scss +35 -0
  101. package/src/styles/helpers/_positions.scss +44 -0
  102. package/src/styles/helpers/_responsive.scss +24 -0
  103. package/src/styles/helpers/_ripples.scss +40 -0
  104. package/src/styles/helpers/_scrolls.scss +7 -0
  105. package/src/styles/helpers/_shadows.scss +22 -0
  106. package/src/styles/helpers/_sizes.scss +34 -0
  107. package/src/styles/helpers/_spaces.scss +22 -0
  108. package/src/styles/helpers/_typography.scss +132 -0
  109. package/src/styles/helpers/_waves.scss +52 -0
  110. package/src/styles/helpers/_zoom.scss +18 -0
  111. package/src/styles/md3.scss +61 -0
  112. package/src/styles/settings/_fonts.scss +42 -0
  113. package/src/styles/settings/_globals.scss +104 -0
  114. package/src/styles/settings/_reset.scss +82 -0
  115. package/src/styles/settings/_theme.scss +126 -0
  116. package/src/styles/settings/_themes.scss +1525 -0
@@ -0,0 +1,30 @@
1
+ // Horizontal / vertical flow helpers.
2
+
3
+ .horizontal {
4
+ display: inline-flex;
5
+ flex-direction: row !important;
6
+ gap: 1rem;
7
+ inline-size: auto !important;
8
+ max-inline-size: none !important;
9
+
10
+ > * {
11
+ margin-block: 0 !important;
12
+ }
13
+ }
14
+
15
+ .vertical {
16
+ display: flex;
17
+ flex-direction: column !important;
18
+
19
+ > * {
20
+ margin-inline: 0 !important;
21
+ }
22
+ }
23
+
24
+ :is(a, button, .button, .chip).vertical {
25
+ display: inline-flex;
26
+ gap: 0.25rem;
27
+ block-size: auto !important;
28
+ max-block-size: none !important;
29
+ padding-block: 0.5rem;
30
+ }
@@ -0,0 +1,20 @@
1
+ // Box-shadow elevation tiers driven by global --elevateN tokens.
2
+
3
+ .no-elevate {
4
+ box-shadow: none !important;
5
+ }
6
+
7
+ $-elevations: (
8
+ "small": var(--elevate1),
9
+ "": var(--elevate1),
10
+ "medium": var(--elevate2),
11
+ "large": var(--elevate3),
12
+ );
13
+
14
+ @each $name, $value in $-elevations {
15
+ @if $name == "" {
16
+ .elevate { box-shadow: $value !important; }
17
+ } @else {
18
+ .#{$name}-elevate { box-shadow: $value !important; }
19
+ }
20
+ }
@@ -0,0 +1,76 @@
1
+ // Border-radius variants + .border / .circle / .square shape helpers.
2
+
3
+ @use "sass:list";
4
+
5
+ .round,
6
+ [class*="-round"] {
7
+ --_round: 2rem;
8
+ border-radius: var(--_round) !important;
9
+ }
10
+
11
+ $-round-sizes: (
12
+ "small": 0.5rem,
13
+ "large": 3.5rem,
14
+ );
15
+
16
+ @each $name, $value in $-round-sizes {
17
+ .#{$name}-round {
18
+ --_round: #{$value};
19
+ }
20
+ }
21
+
22
+ .no-round,
23
+ .square,
24
+ .top-round,
25
+ .bottom-round,
26
+ .left-round,
27
+ .right-round {
28
+ border-radius: 0.5rem !important;
29
+ }
30
+
31
+ $-sides: (
32
+ "top": (start-start, start-end),
33
+ "bottom": (end-end, end-start),
34
+ "left": (start-start, end-start),
35
+ "right": (start-end, end-end),
36
+ );
37
+
38
+ @each $side, $corners in $-sides {
39
+ .#{$side}-round {
40
+ border-#{list.nth($corners, 1)}-radius: var(--_round) !important;
41
+ border-#{list.nth($corners, 2)}-radius: var(--_round) !important;
42
+ }
43
+ }
44
+
45
+ .circle {
46
+ border-radius: 50%;
47
+ }
48
+
49
+ .circle:is(button, .button, .chip) {
50
+ border-radius: var(--_size);
51
+ }
52
+
53
+ :is(.circle, .square):is(button, .button, .chip) {
54
+ padding: 0;
55
+ block-size: var(--_size);
56
+ inline-size: var(--_size);
57
+ }
58
+
59
+ :is(.circle, .square) > span:not([class]) {
60
+ display: none;
61
+ }
62
+
63
+ :is(.circle, .square).round {
64
+ border-radius: 1rem !important;
65
+ }
66
+
67
+ .border:not(table, .field, .list, menu, article) {
68
+ box-sizing: border-box;
69
+ border: 0.0625rem solid var(--outline);
70
+ background-color: transparent;
71
+ box-shadow: none;
72
+ }
73
+
74
+ .no-border {
75
+ border-color: transparent !important;
76
+ }
@@ -0,0 +1,39 @@
1
+ // Margin scale + directional variants.
2
+ // .margin / .tiny-margin / .small-margin / .large-margin / .no-margin / .auto-margin
3
+ // and .left-/.right-/.top-/.bottom-/.horizontal-/.vertical-margin
4
+
5
+ @use "sass:list";
6
+ @use "../config" as *;
7
+
8
+ .margin,
9
+ [class*="-margin"]:not(.left-margin, .right-margin, .top-margin, .bottom-margin, .horizontal-margin, .vertical-margin) {
10
+ margin: var(--_margin) !important;
11
+ }
12
+
13
+ .margin,
14
+ [class*="-margin"] {
15
+ --_margin: 1rem;
16
+ }
17
+
18
+ .no-margin { --_margin: 0; }
19
+ .auto-margin { --_margin: auto; }
20
+ .tiny-margin { --_margin: 0.25rem; }
21
+ .small-margin { --_margin: 0.5rem; }
22
+ .large-margin { --_margin: 1.5rem; }
23
+
24
+ $-margin-sides: (
25
+ ("left", "horizontal"): margin-inline-start,
26
+ ("right", "horizontal"): margin-inline-end,
27
+ ("top", "vertical"): margin-block-start,
28
+ ("bottom", "vertical"): margin-block-end,
29
+ );
30
+
31
+ @each $names, $prop in $-margin-sides {
32
+ $a: list.nth($names, 1);
33
+ $b: list.nth($names, 2);
34
+
35
+ .#{$a}-margin,
36
+ .#{$b}-margin {
37
+ #{$prop}: var(--_margin) !important;
38
+ }
39
+ }
@@ -0,0 +1,18 @@
1
+ // Opacity utilities.
2
+
3
+ $-opacities: (
4
+ "no": 0,
5
+ "small": 0.25,
6
+ "medium": 0.5,
7
+ "large": 0.75,
8
+ );
9
+
10
+ @each $name, $value in $-opacities {
11
+ .#{$name}-opacity {
12
+ opacity: $value !important;
13
+ }
14
+ }
15
+
16
+ .opacity {
17
+ opacity: 1 !important;
18
+ }
@@ -0,0 +1,35 @@
1
+ // Padding scale + directional variants. Mirrors _margins.scss.
2
+
3
+ @use "sass:list";
4
+
5
+ .padding,
6
+ [class*="-padding"]:not(.left-padding, .right-padding, .top-padding, .bottom-padding, .horizontal-padding, .vertical-padding) {
7
+ padding: var(--_padding) !important;
8
+ }
9
+
10
+ .padding,
11
+ [class*="-padding"] {
12
+ --_padding: 1rem;
13
+ }
14
+
15
+ .no-padding { --_padding: 0 !important; }
16
+ .tiny-padding { --_padding: 0.25rem !important; }
17
+ .small-padding { --_padding: 0.5rem !important; }
18
+ .large-padding { --_padding: 1.5rem !important; }
19
+
20
+ $-padding-sides: (
21
+ ("left", "horizontal"): padding-inline-start,
22
+ ("right", "horizontal"): padding-inline-end,
23
+ ("top", "vertical"): padding-block-start,
24
+ ("bottom", "vertical"): padding-block-end,
25
+ );
26
+
27
+ @each $names, $prop in $-padding-sides {
28
+ $a: list.nth($names, 1);
29
+ $b: list.nth($names, 2);
30
+
31
+ .#{$a}-padding,
32
+ .#{$b}-padding {
33
+ #{$prop}: var(--_padding) !important;
34
+ }
35
+ }
@@ -0,0 +1,44 @@
1
+ // z-index, edge-pin, and center helpers (logical-property based).
2
+
3
+ .front {
4
+ z-index: 10 !important;
5
+ }
6
+
7
+ .back {
8
+ z-index: -10 !important;
9
+ }
10
+
11
+ $-edges: (
12
+ "left": inset-inline-start,
13
+ "right": inset-inline-end,
14
+ "top": inset-block-start,
15
+ "bottom": inset-block-end,
16
+ );
17
+
18
+ @each $name, $prop in $-edges {
19
+ .#{$name} {
20
+ #{$prop}: 0;
21
+ }
22
+ }
23
+
24
+ .center {
25
+ inset-inline-start: 50%;
26
+ transform: translateX(-50%);
27
+ }
28
+
29
+ [dir="rtl"] .center {
30
+ transform: translateX(50%);
31
+ }
32
+
33
+ .middle {
34
+ inset-block-start: 50%;
35
+ transform: translateY(-50%);
36
+ }
37
+
38
+ .middle.center {
39
+ transform: translate(-50%, -50%);
40
+ }
41
+
42
+ [dir="rtl"] .middle.center {
43
+ transform: translate(50%, -50%);
44
+ }
@@ -0,0 +1,24 @@
1
+ // Per-breakpoint show/hide and -webkit-fill-available shim.
2
+
3
+ .responsive {
4
+ inline-size: -webkit-fill-available;
5
+ inline-size: -moz-available;
6
+ }
7
+
8
+ @media only screen and (max-width: 600px) {
9
+ :is(.m, .l):not(.s) {
10
+ display: none !important;
11
+ }
12
+ }
13
+
14
+ @media only screen and (min-width: 601px) and (max-width: 992px) {
15
+ :is(.s, .l):not(.m) {
16
+ display: none !important;
17
+ }
18
+ }
19
+
20
+ @media only screen and (min-width: 993px) {
21
+ :is(.m, .s):not(.l) {
22
+ display: none !important;
23
+ }
24
+ }
@@ -0,0 +1,40 @@
1
+ // Pointer-driven ripple overlay + JS-driven expanding circle.
2
+
3
+ [class*="ripple"]:is(:hover, :focus-visible)::after {
4
+ content: "";
5
+ position: absolute;
6
+ inset: 0;
7
+ background: currentColor;
8
+ opacity: 0.1;
9
+ border-radius: inherit;
10
+ }
11
+
12
+ $-ripple-speeds: (
13
+ "": 600ms,
14
+ "fast": 200ms,
15
+ "slow": 1800ms,
16
+ );
17
+
18
+ @each $name, $value in $-ripple-speeds {
19
+ @if $name == "" {
20
+ .ripple { --_duration: #{$value}; }
21
+ } @else {
22
+ .#{$name}-ripple { --_duration: #{$value}; }
23
+ }
24
+ }
25
+
26
+ .ripple-js {
27
+ position: absolute;
28
+ inset: 0;
29
+ pointer-events: none;
30
+ overflow: hidden;
31
+
32
+ > div {
33
+ position: absolute;
34
+ border-radius: 50%;
35
+ background: currentColor;
36
+ opacity: 0.3;
37
+ transform: scale(0);
38
+ animation: to-ripple var(--_duration) linear;
39
+ }
40
+ }
@@ -0,0 +1,7 @@
1
+ .scroll {
2
+ overflow: auto;
3
+ }
4
+
5
+ .no-scroll {
6
+ overflow: hidden;
7
+ }
@@ -0,0 +1,22 @@
1
+ // Inset / directional gradient shadows.
2
+
3
+ .shadow {
4
+ background-color: #00000050;
5
+ }
6
+
7
+ :is(.left-shadow, .right-shadow, .top-shadow, .bottom-shadow) {
8
+ background-color: transparent !important;
9
+ }
10
+
11
+ $-shadow-directions: (
12
+ "left": to right,
13
+ "right": to left,
14
+ "bottom": to top,
15
+ "top": to bottom,
16
+ );
17
+
18
+ @each $name, $direction in $-shadow-directions {
19
+ .#{$name}-shadow {
20
+ background-image: linear-gradient(#{$direction}, black, transparent) !important;
21
+ }
22
+ }
@@ -0,0 +1,34 @@
1
+ // Width / height scale + wrap behavior.
2
+
3
+ [class*="-width"] {
4
+ max-inline-size: 100%;
5
+ }
6
+
7
+ .auto-width { inline-size: auto; }
8
+ .auto-height { block-size: auto; }
9
+
10
+ $-size-scale: (
11
+ "small": 12rem,
12
+ "medium": 24rem,
13
+ "large": 36rem,
14
+ );
15
+
16
+ @each $name, $value in $-size-scale {
17
+ .#{$name}-width {
18
+ inline-size: $value !important;
19
+ }
20
+
21
+ .#{$name}-height {
22
+ block-size: $value !important;
23
+ }
24
+ }
25
+
26
+ .wrap {
27
+ display: block;
28
+ white-space: normal;
29
+ }
30
+
31
+ .no-wrap:not(menu) {
32
+ display: flex;
33
+ white-space: nowrap;
34
+ }
@@ -0,0 +1,22 @@
1
+ // Vertical spacer blocks. Excludes a tight list of tags where height would clobber layout.
2
+
3
+ $-not: ":not(nav, .row, .grid, table, .tooltip, .list, menu, .shape)";
4
+
5
+ $-spaces: (
6
+ "tiny": 0.5rem,
7
+ "small": 1rem,
8
+ "medium": 2rem,
9
+ "large": 3rem,
10
+ "extra": 4rem,
11
+ );
12
+
13
+ @each $name, $value in $-spaces {
14
+ .#{$name}-space#{$-not} {
15
+ block-size: $value;
16
+ }
17
+ }
18
+
19
+ // .space defaults to small (1rem)
20
+ :is(.space, .small-space)#{$-not} {
21
+ block-size: 1rem;
22
+ }
@@ -0,0 +1,132 @@
1
+ // Headings (h1-h6), sizing modifiers, text-transform, line-height, code/pre/blockquote.
2
+
3
+ @use "sass:list";
4
+ @use "sass:map";
5
+
6
+ $-headings: (h1, h2, h3, h4, h5, h6);
7
+ $-class-headings: (".h1", ".h2", ".h3", ".h4", ".h5", ".h6");
8
+
9
+ #{list.join($-headings, $-class-headings, $separator: comma)} {
10
+ font-weight: 400;
11
+ display: block;
12
+ align-items: center;
13
+ line-height: normal;
14
+ }
15
+
16
+ // Default sizes per heading level (h1 → 3.5625rem … h6 → 1.5rem).
17
+ $-heading-sizes: (
18
+ "default": (3.5625rem, 2.8125rem, 2.25rem, 2rem, 1.75rem, 1.5rem),
19
+ "small": (3.0625rem, 2.3125rem, 1.75rem, 1.5rem, 1.25rem, 1rem),
20
+ "large": (4.0625rem, 3.3125rem, 2.75rem, 2.5rem, 2.25rem, 2rem),
21
+ );
22
+
23
+ @for $i from 1 through 6 {
24
+ $tag: list.nth($-headings, $i);
25
+ $cls: list.nth($-class-headings, $i);
26
+
27
+ #{$tag},
28
+ #{$cls} {
29
+ font-size: list.nth(map.get($-heading-sizes, "default"), $i);
30
+ }
31
+
32
+ :is(#{$tag}, #{$cls}).small {
33
+ font-size: list.nth(map.get($-heading-sizes, "small"), $i);
34
+ }
35
+
36
+ :is(#{$tag}, #{$cls}).large {
37
+ font-size: list.nth(map.get($-heading-sizes, "large"), $i);
38
+ }
39
+ }
40
+
41
+ .link {
42
+ color: var(--primary) !important;
43
+ }
44
+
45
+ .inverse-link {
46
+ color: var(--inverse-primary) !important;
47
+ }
48
+
49
+ .truncate {
50
+ overflow: hidden;
51
+ white-space: nowrap !important;
52
+ text-overflow: ellipsis;
53
+ flex: inherit;
54
+
55
+ > * {
56
+ white-space: nowrap !important;
57
+ }
58
+ }
59
+
60
+ $-text-sizes: (
61
+ "small": 0.75rem,
62
+ "medium": 0.875rem,
63
+ "large": 1rem,
64
+ );
65
+
66
+ @each $name, $value in $-text-sizes {
67
+ .#{$name}-text { font-size: $value; }
68
+ }
69
+
70
+ .upper { text-transform: uppercase; }
71
+ .lower { text-transform: lowercase; }
72
+ .capitalize { text-transform: capitalize; }
73
+ .bold { font-weight: bold; }
74
+ .overline { text-decoration: line-through; }
75
+ .underline { text-decoration: underline; }
76
+ .italic { font-style: italic; }
77
+
78
+ p { margin: 0.5rem 0; }
79
+
80
+ .no-line { line-height: normal; }
81
+
82
+ $-line-heights: (
83
+ "tiny": 1.25rem,
84
+ "small": 1.5rem,
85
+ "medium": 1.75rem,
86
+ "large": 2rem,
87
+ "extra": 2.25rem,
88
+ );
89
+
90
+ @each $name, $value in $-line-heights {
91
+ .#{$name}-line { line-height: $value; }
92
+ }
93
+
94
+ pre {
95
+ border-radius: 0;
96
+ background-color: var(--surface-container);
97
+ white-space: pre-wrap;
98
+ padding: 1rem;
99
+ border-inline-start: 0.25rem solid var(--primary);
100
+ font-family: inherit;
101
+ }
102
+
103
+ blockquote {
104
+ border-radius: 0;
105
+ padding: 1rem;
106
+ border-inline-start: 0.25rem solid var(--primary);
107
+ font-family: inherit;
108
+ }
109
+
110
+ code {
111
+ border-radius: 0;
112
+ background-color: var(--surface-container);
113
+ white-space: pre-wrap;
114
+ padding: 0.25rem;
115
+ }
116
+
117
+ pre > code,
118
+ blockquote > code {
119
+ padding: 0;
120
+ }
121
+
122
+ .scroll > code {
123
+ white-space: pre;
124
+ }
125
+
126
+ pre:has(> code) {
127
+ direction: ltr;
128
+ text-align: start;
129
+ }
130
+
131
+ sub { vertical-align: sub; }
132
+ sup { vertical-align: super; }
@@ -0,0 +1,52 @@
1
+ // Material radial-gradient wave overlay used on buttons / chips / nav items.
2
+ // The selector lists are large by necessity (one shape, three states).
3
+
4
+ $-wave-base: ":is(.wave, .chip, .button, button, nav.tabbed > a, .tabs > a, nav.toolbar > a):not([class*='ripple'])";
5
+ $-nav-max-direct: "nav:is(.left, .right, .bottom, .top).max > a";
6
+ $-nav-max-nested: "nav:is(.left, .right, .bottom, .top).max > :is(ol > li, ul > li, div:not([class]), div[class='active']) > a";
7
+ $-nav-min-direct: "nav:is(.left, .right, .bottom, .top):not(.max) > a";
8
+ $-nav-min-nested: "nav:is(.left, .right, .bottom, .top):not(.max) > :is(ol > li, ul > li, div:not([class]), div[class='active']) a";
9
+
10
+ #{$-wave-base}::after,
11
+ #{$-nav-max-direct}::after,
12
+ #{$-nav-max-nested}::after,
13
+ #{$-nav-min-direct} > i::after,
14
+ #{$-nav-min-nested} > i::after {
15
+ content: "";
16
+ position: absolute;
17
+ inset: 0;
18
+ z-index: 1;
19
+ border-radius: inherit;
20
+ inline-size: 100%;
21
+ block-size: 100%;
22
+ background-position: center;
23
+ background-image: radial-gradient(circle, currentColor 1%, transparent 1%);
24
+ opacity: 0;
25
+ transition: none;
26
+ pointer-events: none;
27
+ }
28
+
29
+ #{$-wave-base}:is(:focus-visible, :hover)::after,
30
+ #{$-nav-max-direct}:not(.button, .chip):is(:focus-visible, :hover)::after,
31
+ #{$-nav-max-nested}:not(.button, .chip):is(:focus-visible, :hover)::after,
32
+ #{$-nav-min-direct}:not(.button, .chip):is(:focus-visible, :hover) > i::after,
33
+ nav:is(.left, .right, .bottom, .top):not(.max) > :is(ol > li, ul > li, div:not([class]), div[class="active"]) > a:not(.button, .chip):is(:focus-visible, :hover) > i::after {
34
+ background-size: 22500%;
35
+ opacity: 0.1;
36
+ transition: background-size var(--speed2) linear;
37
+ }
38
+
39
+ :is(.wave, .chip, .button, button, nav.tabbed > a, .tabs > a, nav.toolbar > a, nav.max > a):not([class*="ripple"]):active::after,
40
+ #{$-nav-max-direct}:active::after,
41
+ #{$-nav-max-nested}:active::after,
42
+ #{$-nav-min-direct}:active > i::after,
43
+ nav:is(.left, .right, .bottom, .top):not(.max) > :is(ol > li, ul > li, div:not([class]), div[class="active"]) > a:active > i::after {
44
+ background-size: 0%;
45
+ opacity: 0;
46
+ transition: none;
47
+ }
48
+
49
+ .no-wave::after,
50
+ .no-wave:is(:hover, :active)::after {
51
+ display: none;
52
+ }
@@ -0,0 +1,18 @@
1
+ // CSS `zoom` scaling. Reuses spacing scale naming.
2
+
3
+ $-zoom-scale: (
4
+ "": 2,
5
+ "tiny": 2,
6
+ "small": 3,
7
+ "medium": 4,
8
+ "large": 5,
9
+ "extra": 6,
10
+ );
11
+
12
+ @each $name, $value in $-zoom-scale {
13
+ @if $name == "" {
14
+ .zoom { zoom: $value; }
15
+ } @else {
16
+ .#{$name}-zoom { zoom: $value; }
17
+ }
18
+ }
@@ -0,0 +1,61 @@
1
+ // Single entry point. Order: settings → reset → helpers → elements →
2
+ // theme overlays → colors.
3
+ //
4
+ // Use @forward for any consumer that wants to re-export; @use is sufficient
5
+ // for the bundle since side-effect rules are emitted once per file.
6
+
7
+ @use "settings/globals";
8
+ @use "settings/themes";
9
+ @use "settings/fonts";
10
+
11
+ @use "settings/reset";
12
+
13
+ @use "helpers/alignments";
14
+ @use "helpers/blurs";
15
+ @use "helpers/directions";
16
+ @use "helpers/elevates";
17
+ @use "helpers/forms";
18
+ @use "helpers/margins";
19
+ @use "helpers/opacities";
20
+ @use "helpers/paddings";
21
+ @use "helpers/positions";
22
+ @use "helpers/ripples";
23
+ @use "helpers/scrolls";
24
+ @use "helpers/shadows";
25
+ @use "helpers/sizes";
26
+ @use "helpers/spaces";
27
+ @use "helpers/responsive";
28
+ @use "helpers/typography";
29
+ @use "helpers/waves";
30
+ @use "helpers/zoom";
31
+
32
+ @use "elements/badges";
33
+ @use "elements/bars";
34
+ @use "elements/buttons";
35
+ @use "elements/cards";
36
+ @use "elements/chips";
37
+ @use "elements/dialogs";
38
+ @use "elements/dividers";
39
+ @use "elements/expansions";
40
+ @use "elements/fields";
41
+ @use "elements/grids";
42
+ @use "elements/icons";
43
+ @use "elements/layouts";
44
+ @use "elements/lists";
45
+ @use "elements/main-layouts";
46
+ @use "elements/media";
47
+ @use "elements/menus";
48
+ @use "elements/navigations";
49
+ @use "elements/overlays";
50
+ @use "elements/pages";
51
+ @use "elements/progress";
52
+ @use "elements/shapes";
53
+ @use "elements/selections";
54
+ @use "elements/sliders";
55
+ @use "elements/snackbars";
56
+ @use "elements/tables";
57
+ @use "elements/tabs";
58
+ @use "elements/tooltips";
59
+
60
+ @use "settings/theme";
61
+ @use "helpers/colors";