@webority/theme 0.9.13 → 0.9.15
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/webority-theme.css +1 -1
- package/package.json +1 -1
- package/scss/_components.scss +0 -32
- package/scss/wui/_controls.scss +25 -11
- package/scss/wui/_data.scss +11 -4
- package/scss/wui/_disclosure.scss +7 -3
- package/scss/wui/_display.scss +304 -1
- package/scss/wui/_flow.scss +29 -3
- package/scss/wui/_media.scss +17 -7
- package/scss/wui/_navigation.scss +25 -3
- package/scss/wui/_overlays.scss +14 -8
- package/scss/wui/_utilities.scss +34 -18
package/scss/wui/_overlays.scss
CHANGED
|
@@ -404,16 +404,18 @@
|
|
|
404
404
|
// It sits above the element; for a collision-aware / richer tooltip, use AppTooltip /
|
|
405
405
|
// <app-tooltip> instead.
|
|
406
406
|
//
|
|
407
|
-
//
|
|
408
|
-
//
|
|
409
|
-
//
|
|
410
|
-
//
|
|
411
|
-
//
|
|
412
|
-
//
|
|
413
|
-
// and the tab instance is never registered.
|
|
407
|
+
// Sole remaining user: <app-tabs> tab buttons, which CANNOT use a Bootstrap tooltip — the button
|
|
408
|
+
// already owns a `bs.tab` instance and Bootstrap permits only one instance per element, so binding
|
|
409
|
+
// `bs.Tooltip` to it logs "Bootstrap doesn't allow more than one instance per element" and the tab
|
|
410
|
+
// instance is never registered. Everything else with a `tooltip` prop (AppIcon / <app-icon>
|
|
411
|
+
// included) now routes through the shared collision-aware AppTooltip / Bootstrap-tooltip (Popper)
|
|
412
|
+
// engine instead.
|
|
414
413
|
[data-wui-tip] {
|
|
415
414
|
position: relative;
|
|
416
415
|
}
|
|
416
|
+
// The wrapper the `tooltip` prop on AppIcon / <app-icon> puts around a glyph — now just the
|
|
417
|
+
// inline-flex layout; the tooltip itself rides the shared Popper engine (Bootstrap-tooltip
|
|
418
|
+
// data-attributes on this span, AppTooltip on React), not the CSS bubble above.
|
|
417
419
|
.wui-icon-tip {
|
|
418
420
|
display: inline-flex;
|
|
419
421
|
vertical-align: -0.125em;
|
|
@@ -424,7 +426,11 @@
|
|
|
424
426
|
bottom: calc(100% + 8px);
|
|
425
427
|
left: 50%;
|
|
426
428
|
transform: translateX(-50%);
|
|
427
|
-
|
|
429
|
+
// Sits on the dedicated tooltip rung — above menus/popovers/modals, below toasts — so it is
|
|
430
|
+
// never stacked under an overlay it is meant to annotate. This is a fixed-position CSS bubble
|
|
431
|
+
// (always above); for a collision-aware tooltip that flips to stay on-screen, use AppTooltip /
|
|
432
|
+
// <app-tooltip> (Popper), which AppActionIcon wraps for exactly that reason.
|
|
433
|
+
z-index: var(--wui-z-tooltip, 1650);
|
|
428
434
|
width: max-content;
|
|
429
435
|
max-width: 240px;
|
|
430
436
|
padding: 7px 11px;
|
package/scss/wui/_utilities.scss
CHANGED
|
@@ -430,8 +430,16 @@
|
|
|
430
430
|
// passwordRequirements) opens on focus. Rendered identically by React (a JSX <ul>) and Razor
|
|
431
431
|
// (the same <ul> built in webority-ui.js), so both surfaces read the same. `.pw-popover` is the
|
|
432
432
|
// custom class both put on Bootstrap's `.popover` panel.
|
|
433
|
+
// The card surface — header and body alike — is pure white, lifted off the page with the shared
|
|
434
|
+
// overlay shadow (the one ink menus/popovers/modals use; not a hand-rolled per-component shadow).
|
|
435
|
+
.pw-popover {
|
|
436
|
+
--bs-popover-bg: var(--wui-bg-light);
|
|
437
|
+
--bs-popover-header-bg: var(--wui-bg-light);
|
|
438
|
+
box-shadow: var(--wui-shadow-overlay);
|
|
439
|
+
}
|
|
433
440
|
.pw-popover .popover-body {
|
|
434
|
-
padding:
|
|
441
|
+
padding: 14px 16px;
|
|
442
|
+
min-width: 232px;
|
|
435
443
|
}
|
|
436
444
|
.pw-criteria {
|
|
437
445
|
list-style: none;
|
|
@@ -439,37 +447,45 @@
|
|
|
439
447
|
padding: 0;
|
|
440
448
|
display: flex;
|
|
441
449
|
flex-direction: column;
|
|
442
|
-
gap:
|
|
450
|
+
gap: 9px;
|
|
443
451
|
}
|
|
444
452
|
.pw-criteria .pw-rule {
|
|
445
453
|
display: flex;
|
|
446
454
|
align-items: center;
|
|
447
|
-
gap:
|
|
455
|
+
gap: 9px;
|
|
448
456
|
font-size: 13px;
|
|
449
|
-
line-height: 1.
|
|
457
|
+
line-height: 1.35;
|
|
458
|
+
font-weight: 500;
|
|
459
|
+
transition: color 0.15s ease;
|
|
450
460
|
}
|
|
451
|
-
// The state mark is a
|
|
452
|
-
//
|
|
461
|
+
// The state mark is a single mask tinted by the rule's own text colour (`currentColor`), so it
|
|
462
|
+
// tracks the met/unmet colour automatically and stays theme-aware — no baked hex, no light/dark
|
|
463
|
+
// fork. An UNMET rule is a calm hollow circle (a pending step, not an error); it turns into a
|
|
464
|
+
// filled green check the moment the rule is satisfied. Red is deliberately NOT used for "not yet
|
|
465
|
+
// typed" — an empty field should read as a to-do list, not a wall of validation failures.
|
|
453
466
|
.pw-criteria .pw-mark {
|
|
454
467
|
flex: none;
|
|
455
|
-
width:
|
|
456
|
-
height:
|
|
457
|
-
background:
|
|
468
|
+
width: 17px;
|
|
469
|
+
height: 17px;
|
|
470
|
+
background-color: currentColor;
|
|
471
|
+
-webkit-mask: center / contain no-repeat;
|
|
472
|
+
mask: center / contain no-repeat;
|
|
473
|
+
-webkit-mask-image: var(--pw-mark);
|
|
474
|
+
mask-image: var(--pw-mark);
|
|
475
|
+
transition: background-color 0.15s ease;
|
|
458
476
|
}
|
|
459
477
|
.pw-criteria .pw-rule-text {
|
|
460
478
|
min-width: 0;
|
|
461
479
|
}
|
|
462
|
-
|
|
463
|
-
color: var(--color-success-text);
|
|
464
|
-
}
|
|
465
|
-
.pw-criteria .pw-rule.met .pw-mark {
|
|
466
|
-
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%2317C653' stroke-width='1.8' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='9'/%3E%3Cpath d='m8 12 2.5 2.5 5.5-6'/%3E%3C/svg%3E");
|
|
467
|
-
}
|
|
480
|
+
// Unmet: muted, low-emphasis — a hollow ring.
|
|
468
481
|
.pw-criteria .pw-rule.unmet {
|
|
469
|
-
color: var(--color-
|
|
482
|
+
color: var(--color-text-subtle);
|
|
483
|
+
--pw-mark: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.8'%3E%3Ccircle cx='12' cy='12' r='8.25'/%3E%3C/svg%3E");
|
|
470
484
|
}
|
|
471
|
-
|
|
472
|
-
|
|
485
|
+
// Met: success-green — a filled circle with a knocked-out check.
|
|
486
|
+
.pw-criteria .pw-rule.met {
|
|
487
|
+
color: var(--color-success-text);
|
|
488
|
+
--pw-mark: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%23000' fill-rule='evenodd' d='M12 21a9 9 0 1 0 0-18 9 9 0 0 0 0 18Zm4.03-11.28a.9.9 0 0 0-1.32-1.22l-4.02 4.35-1.4-1.5a.9.9 0 1 0-1.32 1.22l2.06 2.22a.9.9 0 0 0 1.32 0l4.68-5.07Z' clip-rule='evenodd'/%3E%3C/svg%3E");
|
|
473
489
|
}
|
|
474
490
|
// The checklist opens with a PLAIN FADE only — no drop / zoom / scale. It opts out of the shared
|
|
475
491
|
// menu-open motion (_menu-motion.scss animates every `.popover.show`) and lets Bootstrap's own
|