@webority/theme 0.39.0 → 0.41.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.
@@ -109,7 +109,7 @@
109
109
  border-radius: var(--radius);
110
110
  corner-shape: squircle;
111
111
  background: var(--color-primary-soft);
112
- color: var(--color-primary);
112
+ color: var(--color-primary-ink);
113
113
  }
114
114
  // Sticky tools zone: search + section meta stay put while the list scrolls.
115
115
  .drawer-tools {
@@ -238,7 +238,7 @@
238
238
  text-decoration: none;
239
239
  }
240
240
  .app-tab.active {
241
- color: var(--color-primary);
241
+ color: var(--color-primary-ink);
242
242
  // The active tab carries weight as well as colour — colour alone is a weak
243
243
  // signal for anyone who reads the strip at a glance or cannot distinguish it.
244
244
  font-weight: 600;
@@ -349,7 +349,7 @@
349
349
  }
350
350
  .app-tab.active .app-tab-count {
351
351
  background: var(--color-primary-soft);
352
- color: var(--color-primary);
352
+ color: var(--color-primary-ink);
353
353
  }
354
354
  // Semantic tone tints — React `tone` / Razor `Tone`, matching the vocabulary
355
355
  // `.status-label` uses (success | warning | danger | info).
@@ -540,7 +540,7 @@
540
540
  transition: color 0.12s ease;
541
541
  }
542
542
  .search-wrap:focus-within > .search-icon {
543
- color: var(--color-primary);
543
+ color: var(--color-primary-ink);
544
544
  }
545
545
  .search-field,
546
546
  .search-input {
@@ -663,7 +663,7 @@
663
663
  text-decoration: none;
664
664
  }
665
665
  .breadcrumb-item a:hover {
666
- color: var(--color-primary);
666
+ color: var(--color-primary-ink);
667
667
  text-decoration: underline;
668
668
  }
669
669
  .breadcrumb-item.active {
@@ -159,7 +159,7 @@
159
159
  corner-shape: squircle;
160
160
  flex: none;
161
161
  background: var(--color-primary-soft);
162
- color: var(--color-primary);
162
+ color: var(--color-primary-ink);
163
163
  }
164
164
 
165
165
  // Break long unbroken names so they wrap within the heading instead of
@@ -183,7 +183,7 @@
183
183
  font-weight: 700;
184
184
  letter-spacing: 0.06em;
185
185
  text-transform: uppercase;
186
- color: var(--color-primary);
186
+ color: var(--color-primary-ink);
187
187
  margin-bottom: 2px;
188
188
  }
189
189
  // `tone` tints the header icon tile and the eyebrow, so a destructive or a success dialog
@@ -65,7 +65,7 @@
65
65
  text-decoration: none;
66
66
  }
67
67
  .wui-tabbar-item.active {
68
- color: var(--color-primary);
68
+ color: var(--color-primary-ink);
69
69
  font-weight: 600;
70
70
  }
71
71
  .wui-tabbar-item:focus-visible {
@@ -272,7 +272,7 @@
272
272
  padding: 0 4px;
273
273
  border: 0;
274
274
  background: none;
275
- color: var(--color-primary);
275
+ color: var(--color-primary-ink);
276
276
  font: inherit;
277
277
  font-size: 14px;
278
278
  font-weight: 500;
@@ -353,7 +353,7 @@ a.wui-bell-item:hover {
353
353
  justify-content: center;
354
354
  min-height: 44px;
355
355
  border-top: 1px solid var(--color-border);
356
- color: var(--color-primary);
356
+ color: var(--color-primary-ink);
357
357
  font-size: 14px;
358
358
  font-weight: 500;
359
359
  text-decoration: none;
@@ -223,9 +223,12 @@
223
223
  left: 0;
224
224
  }
225
225
 
226
+ // Sticky always makes a stacking context, so without a z-index here the page content after the
227
+ // sidebar paints over anything the sidebar lets out, such as an open workspace switcher menu.
226
228
  .app-sidebar {
227
229
  position: sticky;
228
230
  top: 0;
231
+ z-index: var(--wui-z-shell-sidebar);
229
232
  align-self: start;
230
233
  height: 100vh;
231
234
  display: flex;
@@ -234,7 +237,12 @@
234
237
  // The bottom inset matches the gap between the collapse toggle and the rule above it,
235
238
  // so the toggle row sits evenly spaced between the rule and the sidebar's bottom edge.
236
239
  padding: 20px 16px var(--app-sidebar-toggle-gap);
237
- overflow: hidden;
240
+ // Clipped top to bottom only. The mobile drawer's transform makes it the box a fixed menu
241
+ // is placed in, so a horizontal clip would cut a 300px switcher menu at the drawer's 260px edge.
242
+ overflow: visible clip;
243
+ // A clip, unlike hidden, leaves the grid row free to grow to the whole nav list; this keeps
244
+ // a shell set in a fixed-height box at the box's height, with the nav scrolling inside it.
245
+ min-height: 0;
238
246
  background: var(--color-surface);
239
247
  transition: padding 0.2s var(--wui-ease-ui);
240
248
  }
@@ -318,11 +326,11 @@
318
326
  // the 88px rail, so the collapsed state hides it (the mobile drawer restores it).
319
327
  // The compact twin (`sidebarStartCompact` / `<app-shell-sidebar-start-compact>`) is
320
328
  // the inverse: hidden expanded, shown only on the desktop collapsed rail, sized for
321
- // a 36px monogram control (AppWorkspaceSwitcher compact).
329
+ // a 36px monogram control (AppWorkspaceSwitcher compact). Neither slot clips: a menu opened
330
+ // from it has to reach past the sidebar's edge.
322
331
  .app-sidebar-start {
323
332
  flex: none;
324
333
  margin-bottom: 8px;
325
- overflow: hidden;
326
334
  }
327
335
  .app-sidebar-start-compact {
328
336
  display: none;
@@ -331,11 +339,12 @@
331
339
  // Centre the fixed square in the 88px rail so it lines up with the icon column.
332
340
  justify-content: center;
333
341
  align-items: center;
334
- overflow: hidden;
335
342
  }
343
+ // The sidebar clips only top to bottom, so a footer wider than the 88px rail is clipped here.
336
344
  .app-sidebar-foot {
337
345
  flex: none;
338
346
  padding-top: 12px;
347
+ overflow-x: clip;
339
348
  }
340
349
 
341
350
  .app-nav-group {
@@ -394,7 +403,7 @@
394
403
  }
395
404
  .app-nav-item.active {
396
405
  background: var(--color-primary-soft);
397
- color: var(--color-primary);
406
+ color: var(--color-primary-ink);
398
407
  font-weight: 600;
399
408
  }
400
409
  .app-nav-item:focus-visible {
@@ -408,7 +417,7 @@
408
417
  color: var(--color-text-subtle);
409
418
  }
410
419
  .app-nav-item.active .app-nav-icon {
411
- color: var(--color-primary);
420
+ color: var(--color-primary-ink);
412
421
  }
413
422
  .app-nav-text {
414
423
  // Grows to fill the row so every trailing element — badge, trailing marker,
@@ -433,7 +442,7 @@
433
442
  // tinted badge on top of it would vanish.
434
443
  .app-nav-item.active .app-nav-badge {
435
444
  background: var(--color-surface);
436
- color: var(--color-primary);
445
+ color: var(--color-primary-ink);
437
446
  }
438
447
 
439
448
  // Collapsed rail: icons only, centred. The label is removed from the flow rather
@@ -507,7 +516,7 @@
507
516
  color: var(--color-text-subtle);
508
517
  }
509
518
  .app-nav-item.active .app-nav-trailing {
510
- color: var(--color-primary);
519
+ color: var(--color-primary-ink);
511
520
  }
512
521
 
513
522
  // ── Expandable sub-items ─────────────────────────────────────────────────────
@@ -646,7 +655,7 @@
646
655
  pointer-events: none;
647
656
  }
648
657
  .app-sidebar-toggle:hover {
649
- color: var(--color-primary);
658
+ color: var(--color-primary-ink);
650
659
  background: var(--color-bg-muted);
651
660
  }
652
661
  .app-sidebar-toggle:focus-visible {
@@ -70,7 +70,7 @@ wui-sortable[disabled] .wui-sortable-item,
70
70
  // Lifted by the keyboard.
71
71
  .wui-sortable-handle[aria-pressed="true"] {
72
72
  background: var(--color-primary-soft);
73
- color: var(--color-primary);
73
+ color: var(--color-primary-ink);
74
74
  }
75
75
  .wui-sortable-handle:disabled {
76
76
  cursor: not-allowed;
@@ -7,7 +7,7 @@
7
7
  // $text exists because `primary` has no on-tint token: --color-{status}-text-on-soft is the
8
8
  // on-tint hue (equal to -text in light, lifted in dark), but --color-primary-text
9
9
  // is the text-on-SOLID-primary color (near-black in dark mode) and fails AA on the
10
- // soft tint — primary pills pass var(--color-primary) instead.
10
+ // soft tint — primary pills pass var(--color-primary-ink) instead.
11
11
  //
12
12
  // Component-specific overrides (e.g. .badge-primary's colored border) are applied
13
13
  // after the mixin call.
@@ -39,7 +39,7 @@ wui-tree {
39
39
  }
40
40
  .wui-tree-row.wui-tree-row-selected {
41
41
  background: var(--color-primary-soft);
42
- color: var(--color-primary);
42
+ color: var(--color-primary-ink);
43
43
  }
44
44
  .wui-tree-item[aria-disabled="true"] > .wui-tree-row {
45
45
  color: var(--color-text-subtle);
@@ -129,7 +129,7 @@
129
129
 
130
130
  /* Tones — tinted surface + on-tint text; icon/remove inherit the tone colour. */
131
131
  .chip.primary {
132
- @include wui-tone-pill-colors(primary, var(--color-primary));
132
+ @include wui-tone-pill-colors(primary, var(--color-primary-ink));
133
133
  }
134
134
  .chip.success {
135
135
  @include wui-tone-pill-colors(success);
@@ -346,7 +346,7 @@ wui-multiselect[collapse-chips] .ms-chips {
346
346
  flex-shrink: 0;
347
347
  background: var(--color-primary-soft);
348
348
  border-color: transparent;
349
- color: var(--color-primary);
349
+ color: var(--color-primary-ink);
350
350
  font-weight: 600;
351
351
  }
352
352
  .search-select-multi .search-select-caret,
@@ -359,7 +359,7 @@ wui-multiselect[collapse-chips] .ms-chips {
359
359
  justify-content: center;
360
360
  width: 16px;
361
361
  flex: none;
362
- color: var(--color-primary);
362
+ color: var(--color-primary-ink);
363
363
  opacity: 0;
364
364
  }
365
365
  .search-select-option[aria-selected='true'] .ms-check {
@@ -84,10 +84,10 @@
84
84
  transition: color 0.15s;
85
85
  }
86
86
  .infotip-btn:hover {
87
- color: var(--color-primary);
87
+ color: var(--color-primary-ink);
88
88
  }
89
89
  .infotip-btn:focus-visible {
90
- color: var(--color-primary);
90
+ color: var(--color-primary-ink);
91
91
  outline: 2px solid var(--color-primary);
92
92
  outline-offset: 2px;
93
93
  }
@@ -192,7 +192,7 @@
192
192
  border-radius: var(--radius);
193
193
  corner-shape: squircle;
194
194
  background: var(--color-primary-soft);
195
- color: var(--color-primary);
195
+ color: var(--color-primary-ink);
196
196
  }
197
197
  .page-header.tone-success .page-header-icon {
198
198
  background: var(--color-success-soft);
@@ -219,7 +219,7 @@
219
219
  font-weight: 700;
220
220
  letter-spacing: 0.06em;
221
221
  text-transform: uppercase;
222
- color: var(--color-primary);
222
+ color: var(--color-primary-ink);
223
223
  margin-bottom: 3px;
224
224
  }
225
225
  .page-header.tone-success .page-eyebrow {
@@ -392,7 +392,7 @@
392
392
  }
393
393
  .topbar-icon-btn:hover {
394
394
  background: var(--color-primary-soft);
395
- color: var(--color-primary);
395
+ color: var(--color-primary-ink);
396
396
  }
397
397
  .topbar-icon-btn.has-badge::after {
398
398
  content: "";
@@ -436,14 +436,14 @@
436
436
  // passwordRequirements) opens on focus. Rendered identically by React (a JSX <ul>) and Razor
437
437
  // (the same <ul> built in webority-ui.js), so both surfaces read the same. `.pw-popover` is the
438
438
  // custom class both put on Bootstrap's `.popover` panel.
439
- // The card surface — header and body alike — is pure white, lifted off the page with the shared
440
- // overlay shadow (the one ink menus/popovers/modals use; not a hand-rolled per-component shadow).
439
+ // The card surface, header and body alike, is the elevated surface (white in light mode), lifted
440
+ // off the page with the shared overlay shadow (the one ink menus/popovers/modals use; not a hand-rolled per-component shadow).
441
441
  // The field help popover (AppInfoTip, `.infotip-popover`) shares the same card, so the two
442
442
  // help surfaces a form shows read as one family.
443
443
  .pw-popover,
444
444
  .infotip-popover {
445
- --bs-popover-bg: var(--wui-bg-light);
446
- --bs-popover-header-bg: var(--wui-bg-light);
445
+ --bs-popover-bg: var(--color-surface);
446
+ --bs-popover-header-bg: var(--color-surface);
447
447
  // A 14px heading: one step above the 13px body, so the card reads as help, not a dialog.
448
448
  --bs-popover-header-font-size: 14px;
449
449
  box-shadow: var(--wui-shadow-overlay);
@@ -1066,5 +1066,5 @@
1066
1066
  cursor: help;
1067
1067
  }
1068
1068
  .tip-icon:hover {
1069
- color: var(--color-primary);
1069
+ color: var(--color-primary-ink);
1070
1070
  }
@@ -85,7 +85,7 @@
85
85
  border-radius: 50%;
86
86
  background: var(--color-surface);
87
87
  border: 1px solid var(--color-border-light);
88
- color: var(--color-primary);
88
+ color: var(--color-primary-ink);
89
89
  font-size: 11px;
90
90
  font-weight: 700;
91
91
  letter-spacing: 0.02em;
@@ -228,7 +228,7 @@
228
228
  .workspace-switcher .workspace-switcher-option.is-active,
229
229
  .workspace-switcher .workspace-switcher-option.is-active:hover {
230
230
  background: var(--color-primary-soft);
231
- color: var(--color-primary);
231
+ color: var(--color-primary-ink);
232
232
  }
233
233
  .workspace-switcher-option-name {
234
234
  flex: 1 1 auto;
@@ -261,7 +261,7 @@
261
261
  position: relative;
262
262
  justify-content: center;
263
263
  margin-top: 10px;
264
- color: var(--color-primary);
264
+ color: var(--color-primary-ink);
265
265
  font-weight: 600;
266
266
  }
267
267
  // Dashed divider above the create row — the list and the "Add …" action read as two zones,
@@ -284,7 +284,7 @@
284
284
  padding: 6px;
285
285
  border-radius: 50%;
286
286
  background: var(--color-primary-soft);
287
- color: var(--color-primary);
287
+ color: var(--color-primary-ink);
288
288
  }
289
289
 
290
290
  // ── Footer ──
@@ -306,7 +306,7 @@
306
306
  border-radius: var(--radius-lg);
307
307
  corner-shape: squircle;
308
308
  background: transparent;
309
- color: var(--color-primary);
309
+ color: var(--color-primary-ink);
310
310
  font-size: 13px;
311
311
  font-weight: 600;
312
312
  text-align: left;
@@ -315,7 +315,7 @@
315
315
  }
316
316
  .workspace-switcher .workspace-switcher-footer-action:hover {
317
317
  background: var(--color-primary-soft);
318
- color: var(--color-primary);
318
+ color: var(--color-primary-ink);
319
319
  }
320
320
 
321
321
  // ── Menu size tiers ── the panel scales with the trigger's `size`. Placed AFTER the base Menu