@ethlete/core 5.0.0-next.7 → 5.0.0-next.70

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 (54) hide show
  1. package/CHANGELOG.md +843 -0
  2. package/README.md +28 -4
  3. package/design/interactive-styles.ts +5 -0
  4. package/design/theme-css.js +392 -0
  5. package/design/theme-css.ts +547 -0
  6. package/fesm2022/ethlete-core.mjs +9338 -5667
  7. package/fesm2022/ethlete-core.mjs.map +1 -1
  8. package/generators/devtools-about/generator.js +122 -0
  9. package/generators/devtools-about/schema.json +25 -0
  10. package/generators/generators.json +41 -5
  11. package/generators/migrate-color-theme-variants/color-theme-variants.js +136 -0
  12. package/generators/migrate-color-theme-variants/migration.js +46 -0
  13. package/generators/migrate-color-theme-variants/schema.json +26 -0
  14. package/generators/migrate-create-destroy/create-destroy.js +317 -0
  15. package/generators/migrate-create-destroy/migration.js +46 -0
  16. package/generators/migrate-create-destroy/schema.json +26 -0
  17. package/generators/migrate-legacy-color-themes/legacy-color-themes.js +123 -0
  18. package/generators/migrate-legacy-color-themes/migration.js +93 -0
  19. package/generators/migrate-legacy-color-themes/schema.json +26 -0
  20. package/generators/migrate-provider-shape/migration-scope.js +35 -0
  21. package/generators/migrate-provider-shape/migration.js +50 -0
  22. package/generators/migrate-provider-shape/provider-shape.js +284 -0
  23. package/generators/migrate-provider-shape/schema.json +26 -0
  24. package/generators/migrate-surface-interaction-swatch/interaction-swatch.js +63 -0
  25. package/generators/migrate-surface-interaction-swatch/migration.js +36 -0
  26. package/generators/migrate-surface-interaction-swatch/schema.json +26 -0
  27. package/generators/migrate-to-v5/apply-replacements.js +14 -0
  28. package/generators/migrate-to-v5/color-naming.js +124 -0
  29. package/generators/migrate-to-v5/create-provider.js +67 -55
  30. package/generators/migrate-to-v5/migration-files.js +13 -0
  31. package/generators/migrate-to-v5/migration.js +33 -19
  32. package/generators/migrate-to-v5/removed-exports.js +161 -0
  33. package/generators/migrate-to-v5/router-state-service.js +125 -330
  34. package/generators/migrate-to-v5/schema.json +22 -0
  35. package/generators/migrate-to-v5/service-classes.js +108 -0
  36. package/generators/migrate-to-v5/sync-observable-consumers.js +80 -0
  37. package/generators/migrate-to-v5/viewport-service.js +226 -491
  38. package/generators/tailwind-4-color-theme/generator.js +411 -0
  39. package/generators/tailwind-4-color-theme/schema.json +44 -0
  40. package/generators/tailwind-4-surface-theme/generator.js +379 -0
  41. package/generators/tailwind-4-surface-theme/schema.json +48 -0
  42. package/migrations/legacy-color-themes.md +38 -0
  43. package/migrations/seo-directive-removed.md +81 -0
  44. package/migrations/surface-theme-regenerate.md +20 -0
  45. package/migrations.json +59 -0
  46. package/package.json +38 -21
  47. package/src/lib/animations/easing-tokens-styles.component.css +155 -0
  48. package/src/lib/providers/visually-hidden-styles.component.css +13 -0
  49. package/src/lib/resize-handles/resize-handles.component.css +137 -0
  50. package/src/lib/theming/color-interactive-styles.component.css +147 -0
  51. package/src/lib/theming/surface-interactive-styles.component.css +42 -0
  52. package/types/ethlete-core.d.ts +3842 -2205
  53. package/generators/tailwind-4-theme/generator.js +0 -514
  54. package/generators/tailwind-4-theme/schema.json +0 -32
package/package.json CHANGED
@@ -1,29 +1,15 @@
1
1
  {
2
2
  "name": "@ethlete/core",
3
- "version": "5.0.0-next.7",
3
+ "version": "5.0.0-next.70",
4
+ "repository": {
5
+ "type": "git",
6
+ "url": "https://github.com/ethlete-io/ethdk",
7
+ "directory": "libs/core"
8
+ },
4
9
  "license": "MIT",
5
10
  "sideEffects": false,
6
- "peerDependencies": {
7
- "@analogjs/vite-plugin-angular": "2.3.1",
8
- "@angular/cdk": "21.2.1",
9
- "@angular/common": "21.2.1",
10
- "@angular/core": "21.2.1",
11
- "@angular/forms": "21.2.1",
12
- "@angular/platform-browser": "21.2.1",
13
- "@angular/router": "21.2.1",
14
- "@ethlete/types": "^2.0.0-next.0",
15
- "@floating-ui/dom": "1.7.6",
16
- "@nx/devkit": "22.5.4",
17
- "@nx/vite": "22.5.4",
18
- "rxjs": "7.8.2",
19
- "ts-morph": "21.0.1",
20
- "typescript": "5.9.3",
21
- "vite": "^7.0.0"
22
- },
23
- "generators": "./generators/generators.json",
24
- "module": "fesm2022/ethlete-core.mjs",
25
- "typings": "types/ethlete-core.d.ts",
26
11
  "exports": {
12
+ "./design/*": "./design/*.ts",
27
13
  "./package.json": {
28
14
  "default": "./package.json"
29
15
  },
@@ -32,6 +18,37 @@
32
18
  "default": "./fesm2022/ethlete-core.mjs"
33
19
  }
34
20
  },
21
+ "peerDependencies": {
22
+ "@angular/common": "^22.1.0",
23
+ "@angular/core": "^22.1.0",
24
+ "@angular/forms": "^22.1.0",
25
+ "@angular/platform-browser": "^22.1.0",
26
+ "@angular/router": "^22.1.0",
27
+ "@ethlete/types": "^2.0.0-beta.4",
28
+ "@floating-ui/dom": "^1.6.0",
29
+ "@nx/devkit": ">=23.0.0",
30
+ "rxjs": "^7.8.0",
31
+ "ts-morph": "^28.0.0",
32
+ "typescript": "^6.0.0"
33
+ },
34
+ "peerDependenciesMeta": {
35
+ "@nx/devkit": {
36
+ "optional": true
37
+ },
38
+ "ts-morph": {
39
+ "optional": true
40
+ },
41
+ "typescript": {
42
+ "optional": true
43
+ }
44
+ },
45
+ "ethlete": {
46
+ "migrations": "./migrations.json"
47
+ },
48
+ "generators": "./generators/generators.json",
49
+ "module": "fesm2022/ethlete-core.mjs",
50
+ "typings": "types/ethlete-core.d.ts",
51
+ "type": "module",
35
52
  "dependencies": {
36
53
  "tslib": "^2.3.0"
37
54
  }
@@ -0,0 +1,155 @@
1
+ /** Values from https://github.com/argyleink/open-props (MIT). */
2
+ @layer components {
3
+ :where(html) {
4
+ --ease-1: cubic-bezier(0.25, 0, 0.5, 1);
5
+ --ease-2: cubic-bezier(0.25, 0, 0.4, 1);
6
+ --ease-3: cubic-bezier(0.25, 0, 0.3, 1);
7
+ --ease-4: cubic-bezier(0.25, 0, 0.2, 1);
8
+ --ease-5: cubic-bezier(0.25, 0, 0.1, 1);
9
+ --ease-in-1: cubic-bezier(0.25, 0, 1, 1);
10
+ --ease-in-2: cubic-bezier(0.5, 0, 1, 1);
11
+ --ease-in-3: cubic-bezier(0.7, 0, 1, 1);
12
+ --ease-in-4: cubic-bezier(0.9, 0, 1, 1);
13
+ --ease-in-5: cubic-bezier(1, 0, 1, 1);
14
+ --ease-out-1: cubic-bezier(0, 0, 0.75, 1);
15
+ --ease-out-2: cubic-bezier(0, 0, 0.5, 1);
16
+ --ease-out-3: cubic-bezier(0, 0, 0.3, 1);
17
+ --ease-out-4: cubic-bezier(0, 0, 0.1, 1);
18
+ --ease-out-5: cubic-bezier(0, 0, 0, 1);
19
+ --ease-in-out-1: cubic-bezier(0.1, 0, 0.9, 1);
20
+ --ease-in-out-2: cubic-bezier(0.3, 0, 0.7, 1);
21
+ --ease-in-out-3: cubic-bezier(0.5, 0, 0.5, 1);
22
+ --ease-in-out-4: cubic-bezier(0.7, 0, 0.3, 1);
23
+ --ease-in-out-5: cubic-bezier(0.9, 0, 0.1, 1);
24
+ --ease-elastic-1: cubic-bezier(0.5, 0.75, 0.75, 1.25);
25
+ --ease-elastic-2: cubic-bezier(0.5, 1, 0.75, 1.25);
26
+ --ease-elastic-3: cubic-bezier(0.5, 1.25, 0.75, 1.25);
27
+ --ease-elastic-4: cubic-bezier(0.5, 1.5, 0.75, 1.25);
28
+ --ease-elastic-5: cubic-bezier(0.5, 1.75, 0.75, 1.25);
29
+ --ease-squish-1: cubic-bezier(0.5, -0.1, 0.1, 1.5);
30
+ --ease-squish-2: cubic-bezier(0.5, -0.3, 0.1, 1.5);
31
+ --ease-squish-3: cubic-bezier(0.5, -0.5, 0.1, 1.5);
32
+ --ease-squish-4: cubic-bezier(0.5, -0.7, 0.1, 1.5);
33
+ --ease-squish-5: cubic-bezier(0.5, -0.9, 0.1, 1.5);
34
+ --ease-step-1: steps(2);
35
+ --ease-step-2: steps(3);
36
+ --ease-step-3: steps(4);
37
+ --ease-step-4: steps(7);
38
+ --ease-step-5: steps(10);
39
+ --ease-spring-1: linear(
40
+ 0,
41
+ 0.006,
42
+ 0.025 2.8%,
43
+ 0.101 6.1%,
44
+ 0.539 18.9%,
45
+ 0.721 25.3%,
46
+ 0.849 31.5%,
47
+ 0.937 38.1%,
48
+ 0.968 41.8%,
49
+ 0.991 45.7%,
50
+ 1.006 50.1%,
51
+ 1.015 55%,
52
+ 1.017 63.9%,
53
+ 1.001
54
+ );
55
+ --ease-spring-2: linear(
56
+ 0,
57
+ 0.007,
58
+ 0.029 2.2%,
59
+ 0.118 4.7%,
60
+ 0.625 14.4%,
61
+ 0.826 19%,
62
+ 0.902,
63
+ 0.962,
64
+ 1.008 26.1%,
65
+ 1.041 28.7%,
66
+ 1.064 32.1%,
67
+ 1.07 36%,
68
+ 1.061 40.5%,
69
+ 1.015 53.4%,
70
+ 0.999 61.6%,
71
+ 0.995 71.2%,
72
+ 1
73
+ );
74
+ --ease-spring-3: linear(
75
+ 0,
76
+ 0.009,
77
+ 0.035 2.1%,
78
+ 0.141 4.4%,
79
+ 0.723 12.9%,
80
+ 0.938 16.7%,
81
+ 1.017,
82
+ 1.077,
83
+ 1.121,
84
+ 1.149 24.3%,
85
+ 1.159,
86
+ 1.163,
87
+ 1.161,
88
+ 1.154 29.9%,
89
+ 1.129 32.8%,
90
+ 1.051 39.6%,
91
+ 1.017 43.1%,
92
+ 0.991,
93
+ 0.977 51%,
94
+ 0.974 53.8%,
95
+ 0.975 57.1%,
96
+ 0.997 69.8%,
97
+ 1.003 76.9%,
98
+ 1
99
+ );
100
+ --ease-spring-4: linear(
101
+ 0,
102
+ 0.009,
103
+ 0.037 1.7%,
104
+ 0.153 3.6%,
105
+ 0.776 10.3%,
106
+ 1.001,
107
+ 1.142 16%,
108
+ 1.185,
109
+ 1.209 19%,
110
+ 1.215 19.9% 20.8%,
111
+ 1.199,
112
+ 1.165 25%,
113
+ 1.056 30.3%,
114
+ 1.008 33%,
115
+ 0.973,
116
+ 0.955 39.2%,
117
+ 0.953 41.1%,
118
+ 0.957 43.3%,
119
+ 0.998 53.3%,
120
+ 1.009 59.1% 63.7%,
121
+ 0.998 78.9%,
122
+ 1
123
+ );
124
+ --ease-spring-5: linear(
125
+ 0,
126
+ 0.01,
127
+ 0.04 1.6%,
128
+ 0.161 3.3%,
129
+ 0.816 9.4%,
130
+ 1.046,
131
+ 1.189 14.4%,
132
+ 1.231,
133
+ 1.254 17%,
134
+ 1.259,
135
+ 1.257 18.6%,
136
+ 1.236,
137
+ 1.194 22.3%,
138
+ 1.057 27%,
139
+ 0.999 29.4%,
140
+ 0.955 32.1%,
141
+ 0.942,
142
+ 0.935 34.9%,
143
+ 0.933,
144
+ 0.939 38.4%,
145
+ 1 47.3%,
146
+ 1.011,
147
+ 1.017 52.6%,
148
+ 1.016 56.4%,
149
+ 1 65.2%,
150
+ 0.996 70.2%,
151
+ 1.001 87.2%,
152
+ 1
153
+ );
154
+ }
155
+ }
@@ -0,0 +1,13 @@
1
+ @layer components {
2
+ .et-visually-hidden {
3
+ position: absolute;
4
+ inline-size: 1px;
5
+ block-size: 1px;
6
+ margin: -1px;
7
+ padding: 0;
8
+ overflow: hidden;
9
+ clip-path: inset(50%);
10
+ white-space: nowrap;
11
+ border: 0;
12
+ }
13
+ }
@@ -0,0 +1,137 @@
1
+ @layer components {
2
+ @property --et-resize-handles-z-index {
3
+ syntax: '<integer>';
4
+ inherits: true;
5
+ initial-value: 10;
6
+ }
7
+
8
+ @property --et-resize-handles-edge-size {
9
+ syntax: '<length>';
10
+ inherits: true;
11
+ initial-value: 6px;
12
+ }
13
+
14
+ @property --et-resize-handles-corner-size {
15
+ syntax: '<length>';
16
+ inherits: true;
17
+ initial-value: 12px;
18
+ }
19
+
20
+ @property --et-resize-handles-edge-inset {
21
+ syntax: '<length>';
22
+ inherits: true;
23
+ initial-value: 8px;
24
+ }
25
+
26
+ @property --et-resize-handles-outset {
27
+ syntax: '<length>';
28
+ inherits: true;
29
+ initial-value: 0px;
30
+ }
31
+
32
+ @property --et-resize-handles-side-top {
33
+ syntax: '<length>';
34
+ inherits: true;
35
+ initial-value: 0px;
36
+ }
37
+
38
+ @property --et-resize-handles-side-bottom {
39
+ syntax: '<length>';
40
+ inherits: true;
41
+ initial-value: 8px;
42
+ }
43
+
44
+ @property --et-resize-handles-touch-edge-size {
45
+ syntax: '<length>';
46
+ inherits: true;
47
+ initial-value: 20px;
48
+ }
49
+
50
+ @property --et-resize-handles-touch-corner-size {
51
+ syntax: '<length>';
52
+ inherits: true;
53
+ initial-value: 28px;
54
+ }
55
+
56
+ .et-resize-handles {
57
+ position: absolute;
58
+ inset: calc(-1 * var(--et-resize-handles-outset));
59
+ pointer-events: none;
60
+ }
61
+
62
+ .et-resize-handle {
63
+ --et-resize-handle-thickness: calc(var(--et-resize-handles-edge-size) + var(--et-resize-handles-outset));
64
+ --et-resize-handle-corner: calc(var(--et-resize-handles-corner-size) + var(--et-resize-handles-outset));
65
+
66
+ position: absolute;
67
+ z-index: var(--et-resize-handles-z-index);
68
+ touch-action: none;
69
+ pointer-events: auto;
70
+ }
71
+
72
+ .et-resize-handle--n {
73
+ top: 0;
74
+ right: var(--et-resize-handles-edge-inset);
75
+ left: var(--et-resize-handles-edge-inset);
76
+ height: var(--et-resize-handle-thickness);
77
+ }
78
+
79
+ .et-resize-handle--s {
80
+ right: var(--et-resize-handles-edge-inset);
81
+ bottom: 0;
82
+ left: var(--et-resize-handles-edge-inset);
83
+ height: var(--et-resize-handle-thickness);
84
+ }
85
+
86
+ .et-resize-handle--e,
87
+ .et-resize-handle--w {
88
+ top: var(--et-resize-handles-side-top);
89
+ bottom: var(--et-resize-handles-side-bottom);
90
+ width: var(--et-resize-handle-thickness);
91
+ }
92
+
93
+ .et-resize-handle--e {
94
+ right: 0;
95
+ }
96
+
97
+ .et-resize-handle--w {
98
+ left: 0;
99
+ }
100
+
101
+ .et-resize-handle--ne,
102
+ .et-resize-handle--nw {
103
+ top: 0;
104
+ width: var(--et-resize-handle-corner);
105
+ height: var(--et-resize-handle-corner);
106
+ }
107
+
108
+ .et-resize-handle--ne {
109
+ right: 0;
110
+ }
111
+
112
+ .et-resize-handle--nw {
113
+ left: 0;
114
+ }
115
+
116
+ .et-resize-handle--se,
117
+ .et-resize-handle--sw {
118
+ bottom: 0;
119
+ width: var(--et-resize-handle-corner);
120
+ height: var(--et-resize-handle-corner);
121
+ }
122
+
123
+ .et-resize-handle--se {
124
+ right: 0;
125
+ }
126
+
127
+ .et-resize-handle--sw {
128
+ left: 0;
129
+ }
130
+
131
+ @media (any-pointer: coarse) {
132
+ .et-resize-handle {
133
+ --et-resize-handle-thickness: calc(var(--et-resize-handles-touch-edge-size) + var(--et-resize-handles-outset));
134
+ --et-resize-handle-corner: calc(var(--et-resize-handles-touch-corner-size) + var(--et-resize-handles-outset));
135
+ }
136
+ }
137
+ }
@@ -0,0 +1,147 @@
1
+ @layer components {
2
+ :where(.et-color-interactive) {
3
+ --et-theme-color-primary-rgb: var(--et-color-primary);
4
+ --et-theme-color-primary-solid: rgb(var(--et-theme-color-primary-rgb));
5
+ --et-theme-color-on-primary-rgb: var(--et-color-on-primary);
6
+ --et-theme-color-on-primary-solid: rgb(var(--et-theme-color-on-primary-rgb));
7
+ --et-theme-color-ink-rgb: var(--et-color-primary-ink, var(--et-color-primary));
8
+ --et-theme-color-ink-solid: rgb(var(--et-theme-color-ink-rgb));
9
+ }
10
+
11
+ /* hover-capable pointers only — on touch, :hover sticks after a tap */
12
+ @media (hover: hover) {
13
+ :where(.et-color-interactive:hover:not(:has(.et-color-interactive-exclude:hover))),
14
+ :where(.et-color-interactive-container:hover) :where(.et-color-interactive) {
15
+ --et-theme-color-primary-rgb: var(--et-color-primary-hover, var(--et-color-primary));
16
+ --et-theme-color-primary-solid: rgb(var(--et-theme-color-primary-rgb));
17
+ --et-theme-color-on-primary-rgb: var(--et-color-on-primary-hover, var(--et-color-on-primary));
18
+ --et-theme-color-on-primary-solid: rgb(var(--et-theme-color-on-primary-rgb));
19
+ --et-theme-color-ink-rgb: var(
20
+ --et-color-primary-ink-hover,
21
+ var(--et-color-primary-ink, var(--et-color-primary-hover, var(--et-color-primary)))
22
+ );
23
+ --et-theme-color-ink-solid: rgb(var(--et-theme-color-ink-rgb));
24
+ }
25
+ }
26
+
27
+ :where(.et-color-interactive:focus-visible) {
28
+ --et-theme-color-primary-rgb: var(--et-color-primary-focus, var(--et-color-primary-hover, var(--et-color-primary)));
29
+ --et-theme-color-primary-solid: rgb(var(--et-theme-color-primary-rgb));
30
+ --et-theme-color-on-primary-rgb: var(
31
+ --et-color-on-primary-focus,
32
+ var(--et-color-on-primary-hover, var(--et-color-on-primary))
33
+ );
34
+ --et-theme-color-on-primary-solid: rgb(var(--et-theme-color-on-primary-rgb));
35
+ --et-theme-color-ink-rgb: var(
36
+ --et-color-primary-ink-focus,
37
+ var(
38
+ --et-color-primary-ink-hover,
39
+ var(
40
+ --et-color-primary-ink,
41
+ var(--et-color-primary-focus, var(--et-color-primary-hover, var(--et-color-primary)))
42
+ )
43
+ )
44
+ );
45
+ --et-theme-color-ink-solid: rgb(var(--et-theme-color-ink-rgb));
46
+ }
47
+
48
+ :where(.et-color-interactive:active:not(:has(.et-color-interactive-exclude:hover))),
49
+ :where(.et-color-interactive-container:active) :where(.et-color-interactive) {
50
+ --et-theme-color-primary-rgb: var(
51
+ --et-color-primary-active,
52
+ var(--et-color-primary-focus, var(--et-color-primary-hover, var(--et-color-primary)))
53
+ );
54
+ --et-theme-color-primary-solid: rgb(var(--et-theme-color-primary-rgb));
55
+ --et-theme-color-on-primary-rgb: var(
56
+ --et-color-on-primary-active,
57
+ var(--et-color-on-primary-focus, var(--et-color-on-primary-hover, var(--et-color-on-primary)))
58
+ );
59
+ --et-theme-color-on-primary-solid: rgb(var(--et-theme-color-on-primary-rgb));
60
+ --et-theme-color-ink-rgb: var(
61
+ --et-color-primary-ink-active,
62
+ var(
63
+ --et-color-primary-ink-focus,
64
+ var(
65
+ --et-color-primary-ink-hover,
66
+ var(
67
+ --et-color-primary-ink,
68
+ var(
69
+ --et-color-primary-active,
70
+ var(--et-color-primary-focus, var(--et-color-primary-hover, var(--et-color-primary)))
71
+ )
72
+ )
73
+ )
74
+ )
75
+ );
76
+ --et-theme-color-ink-solid: rgb(var(--et-theme-color-ink-rgb));
77
+ }
78
+
79
+ /* A wrapper reflecting a *descendant's* focus (e.g. a form field's frame while its control is
80
+ focused) uses the BASE color, not the `-focus` variant. The `-focus` variant is the treatment
81
+ for an element that is itself focused (the `:where(.et-color-interactive:focus-visible)` rule
82
+ above) — a container merely mirroring a child's focus should read as the plain accent, so the
83
+ focus affordance is the pure theme color rather than the focus-adjusted shade. */
84
+ :where(.et-color-interactive--has-focus:has(:focus-visible)) {
85
+ --et-theme-color-primary-rgb: var(--et-color-primary);
86
+ --et-theme-color-primary-solid: rgb(var(--et-theme-color-primary-rgb));
87
+ --et-theme-color-on-primary-rgb: var(--et-color-on-primary);
88
+ --et-theme-color-on-primary-solid: rgb(var(--et-theme-color-on-primary-rgb));
89
+ --et-theme-color-ink-rgb: var(--et-color-primary-ink, var(--et-color-primary));
90
+ --et-theme-color-ink-solid: rgb(var(--et-theme-color-ink-rgb));
91
+ }
92
+
93
+ /* view-only controls (readonly) keep the resting accent — they stay focusable but must not
94
+ react to hover/active/focus the way an editable control does. Placed after the interaction
95
+ rules above so, at equal :where() specificity, source order lets it win them back to rest. */
96
+ :where(.et-color-interactive[aria-readonly='true']) {
97
+ --et-theme-color-primary-rgb: var(--et-color-primary);
98
+ --et-theme-color-primary-solid: rgb(var(--et-theme-color-primary-rgb));
99
+ --et-theme-color-on-primary-rgb: var(--et-color-on-primary);
100
+ --et-theme-color-on-primary-solid: rgb(var(--et-theme-color-on-primary-rgb));
101
+ --et-theme-color-ink-rgb: var(--et-color-primary-ink, var(--et-color-primary));
102
+ --et-theme-color-ink-solid: rgb(var(--et-theme-color-ink-rgb));
103
+ }
104
+
105
+ :where(.et-color-interactive[disabled]),
106
+ :where(.et-color-interactive[aria-disabled='true']) {
107
+ --et-theme-color-primary-rgb: var(
108
+ --et-color-primary-disabled,
109
+ var(
110
+ --et-color-primary-active,
111
+ var(--et-color-primary-focus, var(--et-color-primary-hover, var(--et-color-primary)))
112
+ )
113
+ );
114
+ --et-theme-color-primary-solid: rgb(var(--et-theme-color-primary-rgb));
115
+ --et-theme-color-on-primary-rgb: var(
116
+ --et-color-on-primary-disabled,
117
+ var(
118
+ --et-color-on-primary-active,
119
+ var(--et-color-on-primary-focus, var(--et-color-on-primary-hover, var(--et-color-on-primary)))
120
+ )
121
+ );
122
+ --et-theme-color-on-primary-solid: rgb(var(--et-theme-color-on-primary-rgb));
123
+ --et-theme-color-ink-rgb: var(
124
+ --et-color-primary-ink-disabled,
125
+ var(
126
+ --et-color-primary-ink-active,
127
+ var(
128
+ --et-color-primary-ink-focus,
129
+ var(
130
+ --et-color-primary-ink-hover,
131
+ var(
132
+ --et-color-primary-ink,
133
+ var(
134
+ --et-color-primary-disabled,
135
+ var(
136
+ --et-color-primary-active,
137
+ var(--et-color-primary-focus, var(--et-color-primary-hover, var(--et-color-primary)))
138
+ )
139
+ )
140
+ )
141
+ )
142
+ )
143
+ )
144
+ );
145
+ --et-theme-color-ink-solid: rgb(var(--et-theme-color-ink-rgb));
146
+ }
147
+ }
@@ -0,0 +1,42 @@
1
+ @layer components {
2
+ :where(.et-surface-interactive) {
3
+ --et-surface-interaction-rgb: var(--et-surface-interaction);
4
+ --et-surface-interaction-solid: rgb(var(--et-surface-interaction-rgb));
5
+ }
6
+
7
+ /* hover-capable pointers only — on touch, :hover sticks after a tap */
8
+ @media (hover: hover) {
9
+ :where(.et-surface-interactive:hover) {
10
+ --et-surface-interaction-rgb: var(--et-surface-interaction-hover, var(--et-surface-interaction));
11
+ --et-surface-interaction-solid: rgb(var(--et-surface-interaction-rgb));
12
+ }
13
+ }
14
+
15
+ :where(.et-surface-interactive:focus-visible) {
16
+ --et-surface-interaction-rgb: var(
17
+ --et-surface-interaction-focus,
18
+ var(--et-surface-interaction-hover, var(--et-surface-interaction))
19
+ );
20
+ --et-surface-interaction-solid: rgb(var(--et-surface-interaction-rgb));
21
+ }
22
+
23
+ :where(.et-surface-interactive:active) {
24
+ --et-surface-interaction-rgb: var(
25
+ --et-surface-interaction-active,
26
+ var(--et-surface-interaction-focus, var(--et-surface-interaction-hover, var(--et-surface-interaction)))
27
+ );
28
+ --et-surface-interaction-solid: rgb(var(--et-surface-interaction-rgb));
29
+ }
30
+
31
+ :where(.et-surface-interactive[disabled]),
32
+ :where(.et-surface-interactive[aria-disabled='true']) {
33
+ --et-surface-interaction-rgb: var(
34
+ --et-surface-interaction-disabled,
35
+ var(
36
+ --et-surface-interaction-active,
37
+ var(--et-surface-interaction-focus, var(--et-surface-interaction-hover, var(--et-surface-interaction)))
38
+ )
39
+ );
40
+ --et-surface-interaction-solid: rgb(var(--et-surface-interaction-rgb));
41
+ }
42
+ }