@webority/theme 0.7.5 → 0.7.7
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 +13 -8
- package/scss/_tokens.scss +10 -2
- package/scss/_variables.scss +17 -0
- package/scss/_wui-aliases.scss +11 -3
- package/scss/wui/_card.scss +138 -0
- package/scss/wui/_choice.scss +124 -2
- package/scss/wui/_controls.scss +228 -3
- package/scss/wui/_data.scss +26 -13
- package/scss/wui/_display.scss +160 -1
- package/scss/wui/_flow.scss +216 -7
- package/scss/wui/_media.scss +272 -14
- package/scss/wui/_navigation.scss +5 -3
- package/scss/wui/_overlays.scss +45 -1
- package/scss/wui/_shell.scss +14 -4
- package/scss/wui/_typography.scss +16 -0
- package/scss/wui/_utilities.scss +144 -7
package/scss/wui/_shell.scss
CHANGED
|
@@ -262,6 +262,14 @@
|
|
|
262
262
|
width: 0;
|
|
263
263
|
height: 0;
|
|
264
264
|
}
|
|
265
|
+
// Between the brand row and the nav — a workspace/tenant switcher, an environment
|
|
266
|
+
// badge. It must not shrink when the nav overflows, and it has no place on the
|
|
267
|
+
// 88px rail, so the collapsed state removes it (the mobile drawer restores it).
|
|
268
|
+
.app-sidebar-start {
|
|
269
|
+
flex: none;
|
|
270
|
+
margin-bottom: 8px;
|
|
271
|
+
overflow: hidden;
|
|
272
|
+
}
|
|
265
273
|
.app-sidebar-foot {
|
|
266
274
|
flex: none;
|
|
267
275
|
padding-top: 12px;
|
|
@@ -369,7 +377,8 @@
|
|
|
369
377
|
.app-shell.collapsed .app-nav-text,
|
|
370
378
|
.app-shell.collapsed .app-nav-badge,
|
|
371
379
|
.app-shell.collapsed .app-nav-group-label,
|
|
372
|
-
.app-shell.collapsed .app-sidebar-brand-text
|
|
380
|
+
.app-shell.collapsed .app-sidebar-brand-text,
|
|
381
|
+
.app-shell.collapsed .app-sidebar-start {
|
|
373
382
|
display: none;
|
|
374
383
|
}
|
|
375
384
|
|
|
@@ -492,7 +501,7 @@
|
|
|
492
501
|
// 36px = half the 72px topbar, so the button lines up with the topbar's centre.
|
|
493
502
|
top: 36px;
|
|
494
503
|
left: calc(var(--app-sidebar-w) - 12px);
|
|
495
|
-
z-index:
|
|
504
|
+
z-index: var(--wui-z-fixed);
|
|
496
505
|
width: 24px;
|
|
497
506
|
height: 24px;
|
|
498
507
|
display: inline-grid;
|
|
@@ -597,7 +606,7 @@
|
|
|
597
606
|
right: 0;
|
|
598
607
|
bottom: 0;
|
|
599
608
|
left: var(--app-sidebar-w);
|
|
600
|
-
z-index:
|
|
609
|
+
z-index: var(--wui-z-fixed);
|
|
601
610
|
background: color-mix(in srgb, var(--color-surface) 90%, transparent);
|
|
602
611
|
backdrop-filter: blur(50px);
|
|
603
612
|
-webkit-backdrop-filter: blur(50px);
|
|
@@ -638,7 +647,8 @@
|
|
|
638
647
|
}
|
|
639
648
|
.app-shell.app-shell.collapsed .app-nav-text,
|
|
640
649
|
.app-shell.app-shell.collapsed .app-nav-badge,
|
|
641
|
-
.app-shell.app-shell.collapsed .app-nav-group-label
|
|
650
|
+
.app-shell.app-shell.collapsed .app-nav-group-label,
|
|
651
|
+
.app-shell.app-shell.collapsed .app-sidebar-start {
|
|
642
652
|
display: revert;
|
|
643
653
|
}
|
|
644
654
|
.app-shell.app-shell .app-sidebar-toggle {
|
|
@@ -279,6 +279,22 @@ wui-multiselect[collapse-chips] .ms-chips {
|
|
|
279
279
|
align-items: center;
|
|
280
280
|
gap: 8px;
|
|
281
281
|
}
|
|
282
|
+
.ms-input {
|
|
283
|
+
flex: 1;
|
|
284
|
+
min-width: 60px;
|
|
285
|
+
border: none;
|
|
286
|
+
background: transparent;
|
|
287
|
+
font: inherit;
|
|
288
|
+
color: inherit;
|
|
289
|
+
padding: 0;
|
|
290
|
+
margin: 0;
|
|
291
|
+
}
|
|
292
|
+
.ms-input::placeholder {
|
|
293
|
+
color: var(--color-text-subtle);
|
|
294
|
+
}
|
|
295
|
+
.ms-input:focus {
|
|
296
|
+
outline: none;
|
|
297
|
+
}
|
|
282
298
|
|
|
283
299
|
/* ── Choice card: image / custom-template variant ── */
|
|
284
300
|
.struct-card-img-card {
|
package/scss/wui/_utilities.scss
CHANGED
|
@@ -76,17 +76,22 @@
|
|
|
76
76
|
transform: scaleY(-1);
|
|
77
77
|
transition: color 0.15s;
|
|
78
78
|
}
|
|
79
|
-
.infotip-btn:hover
|
|
79
|
+
.infotip-btn:hover {
|
|
80
|
+
color: var(--color-primary);
|
|
81
|
+
}
|
|
80
82
|
.infotip-btn:focus-visible {
|
|
81
83
|
color: var(--color-primary);
|
|
82
|
-
outline:
|
|
84
|
+
outline: 2px solid var(--color-primary);
|
|
85
|
+
outline-offset: 2px;
|
|
83
86
|
}
|
|
84
87
|
.infotip-pop {
|
|
85
88
|
position: absolute;
|
|
86
89
|
bottom: calc(100% + 8px);
|
|
87
90
|
left: 50%;
|
|
88
91
|
transform: translateX(-50%);
|
|
89
|
-
|
|
92
|
+
// Same rung as the .is-portal variant below — an anchored infotip inside a
|
|
93
|
+
// modal must clear the same modal it was previously trapped under at 220.
|
|
94
|
+
z-index: var(--wui-z-menu);
|
|
90
95
|
display: flex;
|
|
91
96
|
flex-direction: column;
|
|
92
97
|
gap: 4px;
|
|
@@ -141,9 +146,91 @@
|
|
|
141
146
|
}
|
|
142
147
|
|
|
143
148
|
// ── Page header ──
|
|
149
|
+
// `.page-header` stacks an optional breadcrumbs row above `.page-header-bar` — the
|
|
150
|
+
// flex row that holds the title block on the left and the page actions on the right.
|
|
144
151
|
.page-header {
|
|
145
152
|
margin-bottom: 24px;
|
|
146
153
|
}
|
|
154
|
+
.page-header-bar {
|
|
155
|
+
display: flex;
|
|
156
|
+
align-items: flex-end;
|
|
157
|
+
justify-content: space-between;
|
|
158
|
+
gap: 16px;
|
|
159
|
+
}
|
|
160
|
+
// Left block: an optional leading icon tile + the title stack, kept together.
|
|
161
|
+
.page-header-lead {
|
|
162
|
+
display: flex;
|
|
163
|
+
align-items: center;
|
|
164
|
+
gap: 12px;
|
|
165
|
+
min-width: 0;
|
|
166
|
+
}
|
|
167
|
+
// A breadcrumbs row above the masthead row.
|
|
168
|
+
.page-breadcrumbs {
|
|
169
|
+
margin-bottom: 10px;
|
|
170
|
+
}
|
|
171
|
+
// Leading icon tile — tinted by `tone` (default primary), matching the modal head icon.
|
|
172
|
+
.page-header-icon {
|
|
173
|
+
flex: none;
|
|
174
|
+
display: inline-grid;
|
|
175
|
+
place-items: center;
|
|
176
|
+
width: 40px;
|
|
177
|
+
height: 40px;
|
|
178
|
+
border-radius: var(--radius);
|
|
179
|
+
corner-shape: squircle;
|
|
180
|
+
background: var(--color-primary-soft);
|
|
181
|
+
color: var(--color-primary);
|
|
182
|
+
}
|
|
183
|
+
.page-header.tone-success .page-header-icon {
|
|
184
|
+
background: var(--color-success-soft);
|
|
185
|
+
color: var(--color-success-text);
|
|
186
|
+
}
|
|
187
|
+
.page-header.tone-warning .page-header-icon {
|
|
188
|
+
background: var(--color-warning-soft);
|
|
189
|
+
color: var(--color-warning-text);
|
|
190
|
+
}
|
|
191
|
+
.page-header.tone-danger .page-header-icon {
|
|
192
|
+
background: var(--color-danger-soft);
|
|
193
|
+
color: var(--color-danger-text);
|
|
194
|
+
}
|
|
195
|
+
.page-header.tone-info .page-header-icon {
|
|
196
|
+
background: var(--color-info-soft);
|
|
197
|
+
color: var(--color-info-text);
|
|
198
|
+
}
|
|
199
|
+
.page-header-titles {
|
|
200
|
+
min-width: 0;
|
|
201
|
+
}
|
|
202
|
+
// Eyebrow — a small kicker label above the title (a section / category marker).
|
|
203
|
+
.page-eyebrow {
|
|
204
|
+
font-size: 12px;
|
|
205
|
+
font-weight: 700;
|
|
206
|
+
letter-spacing: 0.06em;
|
|
207
|
+
text-transform: uppercase;
|
|
208
|
+
color: var(--color-primary);
|
|
209
|
+
margin-bottom: 3px;
|
|
210
|
+
}
|
|
211
|
+
.page-header.tone-success .page-eyebrow {
|
|
212
|
+
color: var(--color-success-text);
|
|
213
|
+
}
|
|
214
|
+
.page-header.tone-warning .page-eyebrow {
|
|
215
|
+
color: var(--color-warning-text);
|
|
216
|
+
}
|
|
217
|
+
.page-header.tone-danger .page-eyebrow {
|
|
218
|
+
color: var(--color-danger-text);
|
|
219
|
+
}
|
|
220
|
+
.page-header.tone-info .page-eyebrow {
|
|
221
|
+
color: var(--color-info-text);
|
|
222
|
+
}
|
|
223
|
+
// Title + an optional inline status pill, on one baseline.
|
|
224
|
+
.page-titlebar {
|
|
225
|
+
display: flex;
|
|
226
|
+
align-items: center;
|
|
227
|
+
gap: 10px;
|
|
228
|
+
flex-wrap: wrap;
|
|
229
|
+
}
|
|
230
|
+
.page-status {
|
|
231
|
+
display: inline-flex;
|
|
232
|
+
align-items: center;
|
|
233
|
+
}
|
|
147
234
|
.page-title {
|
|
148
235
|
font-size: 24px;
|
|
149
236
|
font-weight: 600;
|
|
@@ -162,17 +249,67 @@
|
|
|
162
249
|
align-items: center;
|
|
163
250
|
}
|
|
164
251
|
|
|
252
|
+
// ── Size scale ── (`size`): the title and the block's rhythm scale together.
|
|
253
|
+
.page-header-sm {
|
|
254
|
+
margin-bottom: 16px;
|
|
255
|
+
}
|
|
256
|
+
.page-header-sm .page-title {
|
|
257
|
+
font-size: 20px;
|
|
258
|
+
}
|
|
259
|
+
.page-header-sm .page-header-icon {
|
|
260
|
+
width: 34px;
|
|
261
|
+
height: 34px;
|
|
262
|
+
}
|
|
263
|
+
.page-header-lg {
|
|
264
|
+
margin-bottom: 32px;
|
|
265
|
+
}
|
|
266
|
+
.page-header-lg .page-title {
|
|
267
|
+
font-size: 30px;
|
|
268
|
+
}
|
|
269
|
+
.page-header-lg .page-header-icon {
|
|
270
|
+
width: 48px;
|
|
271
|
+
height: 48px;
|
|
272
|
+
}
|
|
273
|
+
|
|
274
|
+
// ── Centre alignment ── (`align="center"`): for empty-state and wizard mastheads.
|
|
275
|
+
.page-header-center .page-header-bar {
|
|
276
|
+
justify-content: center;
|
|
277
|
+
text-align: center;
|
|
278
|
+
}
|
|
279
|
+
.page-header-center .page-header-lead {
|
|
280
|
+
flex-direction: column;
|
|
281
|
+
align-items: center;
|
|
282
|
+
}
|
|
283
|
+
.page-header-center .page-titlebar {
|
|
284
|
+
justify-content: center;
|
|
285
|
+
}
|
|
286
|
+
|
|
287
|
+
// ── Divider ── (`divider`): a hairline rule under the masthead.
|
|
288
|
+
.page-header-divider {
|
|
289
|
+
border-bottom: 1px solid var(--color-border);
|
|
290
|
+
padding-bottom: 16px;
|
|
291
|
+
}
|
|
292
|
+
|
|
293
|
+
// ── Sticky ── (`sticky`): pins the masthead to the top of its scroll container.
|
|
294
|
+
.page-header-sticky {
|
|
295
|
+
position: sticky;
|
|
296
|
+
top: 0;
|
|
297
|
+
z-index: 20;
|
|
298
|
+
background: var(--color-surface);
|
|
299
|
+
padding-top: 12px;
|
|
300
|
+
}
|
|
301
|
+
|
|
165
302
|
// Tablet and below: the masthead stops being a single row — the title block and
|
|
166
303
|
// its actions stack, and the actions stretch to the full width rather than
|
|
167
304
|
// crowding the title. Bootstrap's lg tier (991.98px), not an invented breakpoint.
|
|
168
305
|
//
|
|
169
|
-
// Selectors are DOUBLED (`.page-header.page-header`) on purpose. A media
|
|
170
|
-
// adds no specificity, so a consumer's own single-class rule — written later
|
|
171
|
-
// the cascade, as a consuming app's stylesheet always is — silently beats the
|
|
306
|
+
// Selectors are DOUBLED (`.page-header-bar.page-header-bar`) on purpose. A media
|
|
307
|
+
// query adds no specificity, so a consumer's own single-class rule — written later
|
|
308
|
+
// in the cascade, as a consuming app's stylesheet always is — silently beats the
|
|
172
309
|
// responsive rule and the layout never collapses. Doubling puts these at (0,2,0)
|
|
173
310
|
// so they hold, while still leaving a consumer free to override deliberately.
|
|
174
311
|
@media (max-width: 991.98px) {
|
|
175
|
-
.page-header.page-header {
|
|
312
|
+
.page-header-bar.page-header-bar {
|
|
176
313
|
flex-direction: column;
|
|
177
314
|
align-items: stretch;
|
|
178
315
|
gap: 12px;
|