@zeyos/zx 4.1.0 → 4.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/zx.css CHANGED
@@ -143,6 +143,8 @@
143
143
  --zx-color-text-muted: var(--zx-gray-500);
144
144
  --zx-color-text-placeholder: var(--zx-gray-400);
145
145
  --zx-color-text-invert: var(--zx-gray-50);
146
+ --zx-color-app-icon-glyph: var(--zx-gray-0);
147
+ --zx-color-app-icon-shade: var(--zx-gray-950);
146
148
  --zx-color-accent: var(--zx-accent-600);
147
149
  --zx-color-accent-hover: var(--zx-accent-700);
148
150
  --zx-color-accent-active: var(--zx-accent-700);
@@ -168,15 +170,24 @@
168
170
  --zx-color-glass-border: color-mix(in srgb, var(--zx-gray-0) 24%, transparent);
169
171
  --zx-color-glass-highlight: color-mix(in srgb, var(--zx-gray-0) 24%, transparent);
170
172
  --zx-color-glass-highlight-strong: color-mix(in srgb, var(--zx-gray-0) 38%, transparent);
173
+ --zx-color-app-icon-depth: color-mix(in srgb, var(--zx-color-app-icon-shade) 26%, transparent);
171
174
  --zx-color-glass-surface: color-mix(in srgb, var(--zx-color-bg-raised) 78%, transparent);
175
+ --zx-color-glass-control: color-mix(in srgb, var(--zx-color-bg-control) 88%, transparent);
176
+ --zx-color-glass-control-hover: color-mix(in srgb, var(--zx-color-bg-hover) 76%, var(--zx-color-glass-surface));
172
177
  --zx-glass-blur: 8px;
173
178
  --zx-glass-saturation: 130%;
174
179
  --zx-glass-color-strength: 82%;
175
180
  --zx-app-icon-shadow:
176
181
  inset 0 1px 0 color-mix(in srgb, var(--zx-gray-0) 28%, transparent),
177
182
  inset 0 -1px 0 color-mix(in srgb, var(--zx-gray-950) 16%, transparent),
178
- 0 5px 14px color-mix(in srgb, var(--zx-app-icon-color) 28%, transparent);
179
- --zx-glass-glyph-shadow: 0 1px 1px color-mix(in srgb, var(--zx-gray-950) 22%, transparent);
183
+ 0 5px 14px color-mix(in srgb, var(--zx-color-app-icon-shade) 28%, transparent);
184
+ --zx-app-icon-shadow-hover:
185
+ inset 0 1px 0 color-mix(in srgb, var(--zx-gray-0) 40%, transparent),
186
+ inset 0 -1px 0 color-mix(in srgb, var(--zx-gray-950) 20%, transparent),
187
+ 0 9px 22px color-mix(in srgb, var(--zx-color-app-icon-shade) 36%, transparent);
188
+ --zx-glass-control-shadow: inset 0 1px 0 color-mix(in srgb, var(--zx-gray-0) 18%, transparent), var(--zx-shadow-1);
189
+ --zx-glass-raised-shadow: inset 0 1px 0 color-mix(in srgb, var(--zx-gray-0) 18%, transparent), var(--zx-overlay-shadow);
190
+ --zx-glass-glyph-shadow: 0 1px 2px color-mix(in srgb, var(--zx-gray-950) 58%, transparent);
180
191
  --zx-header-bg: var(--zx-gray-900);
181
192
  --zx-header-text: var(--zx-gray-50);
182
193
  }
@@ -508,7 +519,7 @@ svg.zx-icon {
508
519
  min-block-size: var(--zx-control-height);
509
520
  border: 1px solid var(--zx-color-border-control);
510
521
  border-radius: var(--zx-button-radius, var(--zx-control-radius));
511
- background: var(--zx-color-bg-control);
522
+ background: var(--zx-color-glass-control);
512
523
  color: var(--zx-color-text);
513
524
  padding-inline: var(--zx-control-pad-x);
514
525
  font: inherit;
@@ -516,6 +527,9 @@ svg.zx-icon {
516
527
  font-weight: var(--zx-control-font-weight);
517
528
  line-height: 1;
518
529
  cursor: pointer;
530
+ -webkit-backdrop-filter: blur(var(--zx-glass-blur)) saturate(var(--zx-glass-saturation));
531
+ backdrop-filter: blur(var(--zx-glass-blur)) saturate(var(--zx-glass-saturation));
532
+ box-shadow: var(--zx-glass-control-shadow);
519
533
  transition:
520
534
  color var(--zx-dur-fast) var(--zx-ease),
521
535
  background-color var(--zx-dur-fast) var(--zx-ease),
@@ -523,7 +537,7 @@ svg.zx-icon {
523
537
  box-shadow var(--zx-dur-fast) var(--zx-ease);
524
538
  }
525
539
  .zx-btn:hover:not(:disabled) {
526
- background: var(--zx-color-bg-hover);
540
+ background: var(--zx-color-glass-control-hover);
527
541
  }
528
542
  .zx-btn:active:not(:disabled) {
529
543
  border-color: var(--zx-color-border-strong);
@@ -559,6 +573,9 @@ svg.zx-icon {
559
573
  .zx-btn[data-kind=ghost] {
560
574
  border-color: transparent;
561
575
  background: none;
576
+ -webkit-backdrop-filter: none;
577
+ backdrop-filter: none;
578
+ box-shadow: none;
562
579
  }
563
580
  .zx-btn[data-kind=ghost]:hover:not(:disabled) {
564
581
  border-color: transparent;
@@ -587,6 +604,29 @@ svg.zx-icon {
587
604
  .zx-btn-group > .zx-btn:focus-visible {
588
605
  z-index: 1;
589
606
  }
607
+ @media (prefers-reduced-transparency: reduce) {
608
+ .zx-btn {
609
+ background: var(--zx-color-bg-control);
610
+ -webkit-backdrop-filter: none;
611
+ backdrop-filter: none;
612
+ box-shadow: none;
613
+ }
614
+ }
615
+ @media (forced-colors: active) {
616
+ .zx-btn {
617
+ border-color: ButtonText;
618
+ background: ButtonFace;
619
+ color: ButtonText;
620
+ box-shadow: none;
621
+ -webkit-backdrop-filter: none;
622
+ backdrop-filter: none;
623
+ }
624
+ .zx-btn[data-kind=primary] {
625
+ border-color: Highlight;
626
+ background: Highlight;
627
+ color: HighlightText;
628
+ }
629
+ }
590
630
 
591
631
  /* src/components/badge/badge.css */
592
632
  .zx-badge {
@@ -1419,14 +1459,34 @@ svg.zx-icon {
1419
1459
  background: var(--zx-color-bg-surface);
1420
1460
  }
1421
1461
  .zx-card[data-variant=raised] {
1422
- border: 1px solid transparent;
1423
- background: var(--zx-color-bg-surface);
1424
- box-shadow: var(--zx-overlay-shadow);
1462
+ border: 1px solid var(--zx-color-glass-border);
1463
+ background: var(--zx-color-glass-surface);
1464
+ -webkit-backdrop-filter: blur(var(--zx-glass-blur)) saturate(var(--zx-glass-saturation));
1465
+ backdrop-filter: blur(var(--zx-glass-blur)) saturate(var(--zx-glass-saturation));
1466
+ box-shadow: var(--zx-glass-raised-shadow);
1425
1467
  }
1426
1468
  .zx-card[data-variant=filled] {
1427
1469
  border: 1px solid transparent;
1428
1470
  background: var(--zx-color-bg-muted);
1429
1471
  }
1472
+ @media (prefers-reduced-transparency: reduce) {
1473
+ .zx-card[data-variant=raised] {
1474
+ border-color: var(--zx-color-border);
1475
+ background: var(--zx-color-bg-surface);
1476
+ -webkit-backdrop-filter: none;
1477
+ backdrop-filter: none;
1478
+ box-shadow: var(--zx-overlay-shadow);
1479
+ }
1480
+ }
1481
+ @media (forced-colors: active) {
1482
+ .zx-card[data-variant=raised] {
1483
+ border-color: ButtonText;
1484
+ background: Canvas;
1485
+ box-shadow: none;
1486
+ -webkit-backdrop-filter: none;
1487
+ backdrop-filter: none;
1488
+ }
1489
+ }
1430
1490
  .zx-card[data-linked=true]:hover {
1431
1491
  background: var(--zx-color-bg-hover);
1432
1492
  }
@@ -2077,23 +2137,31 @@ button.zx-panel__toggle:focus-visible {
2077
2137
  block-size: var(--zx-app-icon-size);
2078
2138
  overflow: hidden;
2079
2139
  border: 1px solid var(--zx-color-glass-border);
2080
- border-radius: max(var(--zx-radius-md), calc(var(--zx-app-icon-size) * .22));
2140
+ border-radius: max(var(--zx-radius-sm), calc(var(--zx-app-icon-size) * .12));
2081
2141
  background: var(--zx-app-icon-color);
2082
2142
  box-shadow: var(--zx-app-icon-shadow);
2083
- color: var(--zx-app-icon-glyph, var(--zx-color-text-invert));
2143
+ color: var(--zx-app-icon-glyph, var(--zx-color-app-icon-glyph));
2084
2144
  font-size: var(--zx-app-icon-size);
2085
2145
  vertical-align: middle;
2146
+ transform: translateZ(0);
2086
2147
  }
2087
2148
  .zx-app-icon[data-glass=subtle],
2088
2149
  .zx-app-icon[data-glass=strong] {
2089
2150
  background:
2090
2151
  linear-gradient(
2091
2152
  145deg,
2092
- var(--zx-color-glass-highlight),
2093
- transparent 44%),
2153
+ var(--zx-color-glass-highlight-strong),
2154
+ transparent 38%),
2155
+ linear-gradient(
2156
+ to bottom right,
2157
+ transparent 42%,
2158
+ var(--zx-color-app-icon-depth)),
2094
2159
  color-mix(in srgb, var(--zx-app-icon-color) var(--zx-glass-color-strength), transparent);
2160
+ -webkit-backdrop-filter: blur(calc(var(--zx-glass-blur) * .55)) saturate(var(--zx-glass-saturation));
2161
+ backdrop-filter: blur(calc(var(--zx-glass-blur) * .55)) saturate(var(--zx-glass-saturation));
2095
2162
  }
2096
2163
  .zx-app-icon[data-glass=strong] {
2164
+ -webkit-backdrop-filter: blur(var(--zx-glass-blur)) saturate(var(--zx-glass-saturation));
2097
2165
  backdrop-filter: blur(var(--zx-glass-blur)) saturate(var(--zx-glass-saturation));
2098
2166
  }
2099
2167
  .zx-app-icon[data-glass=none] {
@@ -2103,41 +2171,79 @@ button.zx-panel__toggle:focus-visible {
2103
2171
  .zx-app-icon[data-glass=none] .zx-app-icon__shine {
2104
2172
  display: none;
2105
2173
  }
2174
+ .zx-app-icon[data-glass=none]::after {
2175
+ display: none;
2176
+ }
2106
2177
  .zx-app-icon[data-selected] {
2107
2178
  outline: 2px solid var(--zx-color-bg-page);
2108
2179
  box-shadow: 0 0 0 3px var(--zx-color-ring), var(--zx-overlay-shadow);
2109
2180
  }
2110
2181
  .zx-app-icon__shine {
2111
2182
  position: absolute;
2112
- z-index: -1;
2113
- inset: 1px 12% auto;
2114
- block-size: 42%;
2183
+ z-index: 1;
2184
+ inset: 1px 13% auto;
2185
+ block-size: 38%;
2115
2186
  border-radius: 999px;
2116
2187
  background:
2117
2188
  linear-gradient(
2118
2189
  to bottom,
2119
2190
  var(--zx-color-glass-highlight-strong),
2120
2191
  transparent);
2121
- filter: blur(2px);
2192
+ filter: blur(1px);
2193
+ pointer-events: none;
2194
+ }
2195
+ .zx-app-icon::after {
2196
+ content: "";
2197
+ position: absolute;
2198
+ z-index: 1;
2199
+ inset: 0;
2200
+ border-radius: inherit;
2201
+ box-shadow: inset 0 0 0 1px var(--zx-color-glass-highlight);
2122
2202
  pointer-events: none;
2123
2203
  }
2124
2204
  .zx-app-icon__glyph {
2125
- display: inline-grid;
2205
+ position: absolute;
2206
+ z-index: 2;
2207
+ inset-block-start: 50%;
2208
+ inset-inline-start: 50%;
2209
+ display: grid;
2126
2210
  place-items: center;
2127
2211
  inline-size: var(--zx-app-icon-glyph-size);
2128
2212
  block-size: var(--zx-app-icon-glyph-size);
2213
+ margin: 0;
2214
+ padding: 0;
2129
2215
  font-size: var(--zx-app-icon-glyph-size);
2130
2216
  line-height: 1;
2131
2217
  filter: drop-shadow(var(--zx-glass-glyph-shadow));
2218
+ transform: translate(-50%, -50%);
2132
2219
  }
2133
2220
  .zx-app-icon__glyph > .zx-icon,
2134
2221
  .zx-app-icon__glyph > svg,
2135
2222
  .zx-app-icon__glyph > i {
2223
+ display: grid;
2224
+ place-items: center;
2136
2225
  inline-size: 1em;
2137
2226
  block-size: 1em;
2227
+ margin: 0;
2228
+ color: inherit;
2229
+ font-size: 1em;
2230
+ line-height: 1;
2231
+ text-align: center;
2232
+ vertical-align: middle;
2233
+ }
2234
+ .zx-app-icon__glyph > i::before {
2235
+ display: block;
2236
+ line-height: 1;
2237
+ }
2238
+ .zx-app-icon__glyph svg [fill]:not([fill=none]) {
2239
+ fill: currentColor;
2240
+ }
2241
+ .zx-app-icon__glyph svg [stroke]:not([stroke=none]) {
2242
+ stroke: currentColor;
2138
2243
  }
2139
2244
  .zx-app-icon__badge {
2140
2245
  position: absolute;
2246
+ z-index: 3;
2141
2247
  inset-block-end: 1px;
2142
2248
  inset-inline-end: 1px;
2143
2249
  display: grid;
@@ -2153,9 +2259,37 @@ button.zx-panel__toggle:focus-visible {
2153
2259
  font-weight: 700;
2154
2260
  line-height: 1;
2155
2261
  }
2262
+ .zx-app-icon:hover {
2263
+ border-color: var(--zx-color-glass-highlight-strong);
2264
+ box-shadow: var(--zx-app-icon-shadow-hover);
2265
+ filter: brightness(1.06) saturate(1.08);
2266
+ }
2267
+ .zx-app-icon:focus-visible,
2268
+ :is(a, button, [role=button]):focus-visible > .zx-app-icon {
2269
+ outline: none;
2270
+ box-shadow: var(--zx-focus-ring), var(--zx-app-icon-shadow-hover);
2271
+ }
2272
+ @media (prefers-reduced-motion: no-preference) {
2273
+ .zx-app-icon {
2274
+ transition:
2275
+ border-color var(--zx-dur-fast) var(--zx-ease),
2276
+ box-shadow var(--zx-dur-fast) var(--zx-ease),
2277
+ filter var(--zx-dur-fast) var(--zx-ease),
2278
+ transform var(--zx-dur-fast) var(--zx-ease);
2279
+ }
2280
+ .zx-app-icon:hover {
2281
+ transform: translateY(-2px) scale(1.035);
2282
+ }
2283
+ }
2156
2284
  @media (prefers-reduced-transparency: reduce) {
2157
2285
  .zx-app-icon[data-glass=strong] {
2158
2286
  background: var(--zx-app-icon-color);
2287
+ -webkit-backdrop-filter: none;
2288
+ backdrop-filter: none;
2289
+ }
2290
+ .zx-app-icon[data-glass=subtle] {
2291
+ background: var(--zx-app-icon-color);
2292
+ -webkit-backdrop-filter: none;
2159
2293
  backdrop-filter: none;
2160
2294
  }
2161
2295
  }
@@ -2165,6 +2299,14 @@ button.zx-panel__toggle:focus-visible {
2165
2299
  background: ButtonFace;
2166
2300
  color: ButtonText;
2167
2301
  box-shadow: none;
2302
+ filter: none;
2303
+ transform: none;
2304
+ -webkit-backdrop-filter: none;
2305
+ backdrop-filter: none;
2306
+ }
2307
+ .zx-app-icon::after,
2308
+ .zx-app-icon__shine {
2309
+ display: none;
2168
2310
  }
2169
2311
  }
2170
2312
 
@@ -2842,8 +2984,9 @@ button.zx-panel__toggle:focus-visible {
2842
2984
  @supports (backdrop-filter: blur(1px)) {
2843
2985
  .zx-message__toast {
2844
2986
  background: color-mix(in srgb, var(--zx-color-info-bg) 38%, var(--zx-color-glass-surface));
2845
- backdrop-filter: blur(var(--zx-overlay-blur)) saturate(var(--zx-glass-saturation));
2846
- box-shadow: inset 0 1px 0 var(--zx-color-glass-highlight), var(--zx-overlay-shadow);
2987
+ -webkit-backdrop-filter: blur(var(--zx-glass-blur)) saturate(var(--zx-glass-saturation));
2988
+ backdrop-filter: blur(var(--zx-glass-blur)) saturate(var(--zx-glass-saturation));
2989
+ box-shadow: var(--zx-glass-raised-shadow);
2847
2990
  }
2848
2991
  .zx-message__toast[data-kind=success] {
2849
2992
  background: color-mix(in srgb, var(--zx-color-success-bg) 38%, var(--zx-color-glass-surface));
@@ -2857,6 +3000,7 @@ button.zx-panel__toggle:focus-visible {
2857
3000
  }
2858
3001
  @media (prefers-reduced-transparency: reduce) {
2859
3002
  .zx-message__toast {
3003
+ -webkit-backdrop-filter: none;
2860
3004
  backdrop-filter: none;
2861
3005
  }
2862
3006
  .zx-message__toast[data-kind=info] {
package/dist/zx.esm.js CHANGED
@@ -19646,11 +19646,12 @@ var AppIcon = class extends Component {
19646
19646
  class: "zx-app-icon__badge",
19647
19647
  ariaHidden: "true"
19648
19648
  }, String(state.badge));
19649
- this.el.replaceChildren(
19649
+ const children = [
19650
19650
  h("span", { class: "zx-app-icon__shine", ariaHidden: "true" }),
19651
- h("span", { class: "zx-app-icon__glyph", ariaHidden: "true" }, visual),
19652
- badge2
19653
- );
19651
+ h("span", { class: "zx-app-icon__glyph", ariaHidden: "true" }, visual)
19652
+ ];
19653
+ if (badge2) children.push(badge2);
19654
+ this.el.replaceChildren(...children);
19654
19655
  }
19655
19656
  };
19656
19657
  function appIcon(options = {}) {