@webority/theme 0.16.0 → 0.17.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/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@webority/theme",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.17.1",
|
|
4
4
|
"description": "Webority shared design system — Bootstrap 5.3 SCSS overrides, --wui-* tokens, and shared component CSS. The single source of brand chrome for React portals and Razor sites.",
|
|
5
5
|
"license": "SEE LICENSE IN LICENSE",
|
|
6
6
|
"publishConfig": {
|
package/scss/wui/_controls.scss
CHANGED
|
@@ -188,7 +188,9 @@
|
|
|
188
188
|
background-size: 12px 12px;
|
|
189
189
|
}
|
|
190
190
|
|
|
191
|
-
// Switch
|
|
191
|
+
// Switch: pill track + sliding knob (Bootstrap .form-switch only). The default track has
|
|
192
|
+
// truly circular ends: the switch is a type="checkbox", which carries the checkbox's
|
|
193
|
+
// `corner-shape: squircle`, so it is reset to `round` here.
|
|
192
194
|
.form-switch {
|
|
193
195
|
padding-left: 0;
|
|
194
196
|
}
|
|
@@ -196,6 +198,7 @@
|
|
|
196
198
|
width: 40px;
|
|
197
199
|
height: 22px;
|
|
198
200
|
border-radius: 999px;
|
|
201
|
+
corner-shape: round;
|
|
199
202
|
border-color: transparent;
|
|
200
203
|
background-color: var(--color-border-strong);
|
|
201
204
|
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3E%3Ccircle cx='10' cy='10' r='7' fill='white'/%3E%3C/svg%3E");
|
|
@@ -227,10 +230,6 @@
|
|
|
227
230
|
.form-switch-circle .form-check-input {
|
|
228
231
|
width: 24px;
|
|
229
232
|
height: 24px;
|
|
230
|
-
// The switch is a type="checkbox", which carries `corner-shape: squircle` — on a square
|
|
231
|
-
// that renders a rounded square, not a circle. Reset to a true round corner.
|
|
232
|
-
corner-shape: round;
|
|
233
|
-
border-radius: 999px;
|
|
234
233
|
background-position: center;
|
|
235
234
|
background-size: 10px 10px;
|
|
236
235
|
}
|
|
@@ -238,13 +237,11 @@
|
|
|
238
237
|
background-position: center;
|
|
239
238
|
}
|
|
240
239
|
|
|
241
|
-
//
|
|
242
|
-
//
|
|
243
|
-
//
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
.form-switch-round .form-check-input {
|
|
247
|
-
corner-shape: round;
|
|
240
|
+
// Squircle-pill variant (shape="pill"): the same sliding pill with superellipse ends, the
|
|
241
|
+
// checkbox's own corner shape. Only the corner shape changes; size, knob and slide are the
|
|
242
|
+
// base switch's.
|
|
243
|
+
.form-switch-pill .form-check-input {
|
|
244
|
+
corner-shape: squircle;
|
|
248
245
|
}
|
|
249
246
|
@media (prefers-reduced-motion: reduce) {
|
|
250
247
|
.form-check-input,
|
package/scss/wui/_display.scss
CHANGED
|
@@ -550,8 +550,8 @@ a.info-row:hover .info-value {
|
|
|
550
550
|
}
|
|
551
551
|
// Borderless (bordered={false} / bordered="false") — the selected pill keeps its tint and primary
|
|
552
552
|
// label but drops the ring, on both the sliding thumb and the no-JS per-option pill.
|
|
553
|
-
.segmented-borderless .segmented-thumb,
|
|
554
|
-
.segmented-borderless .segmented-option:has(.segmented-input:checked) {
|
|
553
|
+
.wui-segmented-borderless .segmented-thumb,
|
|
554
|
+
.wui-segmented-borderless .segmented-option:has(.segmented-input:checked) {
|
|
555
555
|
box-shadow: none;
|
|
556
556
|
}
|
|
557
557
|
// Icon pop — the selected segment's glyph springs up a touch as it becomes active.
|
|
@@ -561,7 +561,7 @@ a.info-row:hover .info-value {
|
|
|
561
561
|
}
|
|
562
562
|
.segmented-sm .segmented-thumb,
|
|
563
563
|
.segmented-lg .segmented-thumb,
|
|
564
|
-
.segmented-xl .segmented-thumb {
|
|
564
|
+
.wui-segmented-xl .segmented-thumb {
|
|
565
565
|
top: 3px;
|
|
566
566
|
bottom: 3px;
|
|
567
567
|
}
|
|
@@ -574,7 +574,7 @@ a.info-row:hover .info-value {
|
|
|
574
574
|
--segmented-icon: 15px;
|
|
575
575
|
--segmented-note: 11px;
|
|
576
576
|
}
|
|
577
|
-
.segmented-xl {
|
|
577
|
+
.wui-segmented-xl {
|
|
578
578
|
--segmented-option-h: 36px;
|
|
579
579
|
--segmented-icon: 17px;
|
|
580
580
|
--segmented-note: 12px;
|
|
@@ -588,7 +588,7 @@ a.info-row:hover .info-value {
|
|
|
588
588
|
padding: 4px 16px;
|
|
589
589
|
font-size: 13px;
|
|
590
590
|
}
|
|
591
|
-
.segmented-xl .segmented-option {
|
|
591
|
+
.wui-segmented-xl .segmented-option {
|
|
592
592
|
gap: 7px;
|
|
593
593
|
padding: 4px 20px;
|
|
594
594
|
font-size: 15px;
|
|
@@ -9,17 +9,26 @@
|
|
|
9
9
|
// AppSidebarMenu — react-bootstrap Offcanvas mapped onto the app tokens plus
|
|
10
10
|
// a flex column layout for the header / scrolling body / sticky footer.
|
|
11
11
|
.app-sidebar-menu.offcanvas {
|
|
12
|
-
|
|
12
|
+
// Phone first: a side panel fills the screen, because a 420px panel on a 430px phone leaves a
|
|
13
|
+
// sliver of page that reads as a rendering fault. From sm up it takes its own width (below).
|
|
14
|
+
--bs-offcanvas-width: 100vw;
|
|
13
15
|
--bs-offcanvas-bg: var(--color-surface);
|
|
14
16
|
--bs-offcanvas-color: var(--color-text);
|
|
15
17
|
--bs-offcanvas-border-color: var(--color-border);
|
|
16
18
|
--bs-offcanvas-border-width: 1px;
|
|
17
19
|
--bs-offcanvas-padding-x: 0;
|
|
18
20
|
--bs-offcanvas-padding-y: 0;
|
|
19
|
-
|
|
21
|
+
// A caller's own maxWidth still caps the panel on a phone.
|
|
22
|
+
max-width: var(--asm-max-width, 100vw);
|
|
20
23
|
display: flex;
|
|
21
24
|
flex-direction: column;
|
|
22
25
|
}
|
|
26
|
+
@include media-breakpoint-up(sm) {
|
|
27
|
+
.app-sidebar-menu.offcanvas {
|
|
28
|
+
--bs-offcanvas-width: var(--asm-width, 420px);
|
|
29
|
+
max-width: var(--asm-max-width, 92vw);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
23
32
|
.app-sidebar-menu .offcanvas-body {
|
|
24
33
|
// Inset the content to the same 20px gutter as the header/footer so plain body
|
|
25
34
|
// content doesn't stick to the panel edge. Full-bleed content (edge-to-edge nav
|
package/scss/wui/_overlays.scss
CHANGED
|
@@ -249,7 +249,11 @@
|
|
|
249
249
|
// hover, so dismissing reads as the destructive-ish gesture it is. The corner is
|
|
250
250
|
// fixed across states: only the tint animates, so the button never morphs into a
|
|
251
251
|
// circle. Slower on the way in than the way out.
|
|
252
|
-
|
|
252
|
+
//
|
|
253
|
+
// The drawer (AppSidebarMenu) header close shares the rule, so the two overlays dismiss with
|
|
254
|
+
// the same control.
|
|
255
|
+
.wui-modal-close,
|
|
256
|
+
.wui-drawer-close {
|
|
253
257
|
margin-left: auto;
|
|
254
258
|
display: grid;
|
|
255
259
|
place-items: center;
|
|
@@ -268,20 +272,24 @@
|
|
|
268
272
|
background 180ms cubic-bezier(0.4, 0, 0.2, 1),
|
|
269
273
|
color 180ms cubic-bezier(0.4, 0, 0.2, 1);
|
|
270
274
|
}
|
|
271
|
-
.wui-modal-close:hover
|
|
275
|
+
.wui-modal-close:hover,
|
|
276
|
+
.wui-drawer-close:hover {
|
|
272
277
|
background: var(--color-danger-soft);
|
|
273
278
|
color: var(--color-danger-text);
|
|
274
279
|
transition:
|
|
275
280
|
background 280ms cubic-bezier(0.16, 1, 0.3, 1),
|
|
276
281
|
color 280ms cubic-bezier(0.16, 1, 0.3, 1);
|
|
277
282
|
}
|
|
278
|
-
.wui-modal-close:focus-visible
|
|
283
|
+
.wui-modal-close:focus-visible,
|
|
284
|
+
.wui-drawer-close:focus-visible {
|
|
279
285
|
outline: 2px solid var(--color-primary);
|
|
280
286
|
outline-offset: 2px;
|
|
281
287
|
}
|
|
282
288
|
@media (prefers-reduced-motion: reduce) {
|
|
283
289
|
.wui-modal-close,
|
|
284
|
-
.wui-modal-close:hover
|
|
290
|
+
.wui-modal-close:hover,
|
|
291
|
+
.wui-drawer-close,
|
|
292
|
+
.wui-drawer-close:hover {
|
|
285
293
|
transition:
|
|
286
294
|
background 1ms linear,
|
|
287
295
|
color 1ms linear;
|