@webority/theme 0.107.0 → 0.108.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/README.md +2 -2
- package/dist/purge-safelist.json +60 -59
- package/dist/webority-theme.css +1 -1
- package/package.json +2 -2
- package/scss/_bootstrap.generated.scss +1 -1
- package/scss/_tokens.generated.scss +1 -1
- package/scss/_wui-components.scss +6 -1
- package/scss/_wui-core.scss +6 -1
- package/scss/wui/_avatar-picker.scss +22 -21
- package/scss/wui/_choice.scss +5 -6
- package/scss/wui/_compare-table.scss +201 -0
- package/scss/wui/_controls.scss +1 -1
- package/scss/wui/_data.scss +2 -302
- package/scss/wui/_dialog-motion.scss +34 -0
- package/scss/wui/_disclosure.scss +27 -27
- package/scss/wui/_display.scss +70 -118
- package/scss/wui/_drawer.scss +97 -64
- package/scss/wui/_empty-state.scss +124 -0
- package/scss/wui/_illustration.scss +3 -3
- package/scss/wui/_image-crop.scss +1 -1
- package/scss/wui/_interaction.scss +2 -4
- package/scss/wui/_media.scss +50 -50
- package/scss/wui/_navigation.scss +0 -45
- package/scss/wui/_notification-center.scss +4 -0
- package/scss/wui/_overlays.scss +4 -5
- package/scss/wui/_pagination.scss +168 -0
- package/scss/wui/_section-lead-capture.scss +31 -0
- package/scss/wui/_shortcuts.scss +10 -1
- package/scss/wui/_table-server.scss +1 -1
- package/scss/wui/_whats-new.scss +17 -0
- package/scss/wui/_menubar.scss +0 -110
package/scss/wui/_media.scss
CHANGED
|
@@ -945,7 +945,7 @@
|
|
|
945
945
|
// ── Logo picker ──
|
|
946
946
|
// Round dropzone uploader (workspace/brand logo) and the settings-page photo
|
|
947
947
|
// ring share this same interactive-uploader pattern.
|
|
948
|
-
.
|
|
948
|
+
.wui-image-picker {
|
|
949
949
|
// The ring diameter (--wui-logo-size) is set on the shell, not here, so the sibling remove
|
|
950
950
|
// control inherits it too; the ring, initials font and icons all derive from it.
|
|
951
951
|
display: inline-flex;
|
|
@@ -956,16 +956,16 @@
|
|
|
956
956
|
color: inherit;
|
|
957
957
|
cursor: pointer;
|
|
958
958
|
}
|
|
959
|
-
.
|
|
959
|
+
.wui-image-picker:disabled {
|
|
960
960
|
cursor: progress;
|
|
961
961
|
}
|
|
962
|
-
.
|
|
962
|
+
.wui-image-picker-img {
|
|
963
963
|
width: 100%;
|
|
964
964
|
height: 100%;
|
|
965
965
|
border-radius: 50%;
|
|
966
966
|
object-fit: cover;
|
|
967
967
|
}
|
|
968
|
-
.
|
|
968
|
+
.wui-image-picker-ring {
|
|
969
969
|
position: relative;
|
|
970
970
|
width: var(--wui-logo-size);
|
|
971
971
|
height: var(--wui-logo-size);
|
|
@@ -975,16 +975,16 @@
|
|
|
975
975
|
cursor: pointer;
|
|
976
976
|
transition: border-color 0.18s;
|
|
977
977
|
// Query container so the overlay can drop its label on a small ring (see the @container
|
|
978
|
-
// rule after .
|
|
978
|
+
// rule after .wui-image-picker-overlay). container-type also makes the ring the containing
|
|
979
979
|
// block for the absolute overlay — same role its position:relative already plays.
|
|
980
980
|
container-type: inline-size;
|
|
981
981
|
}
|
|
982
|
-
.
|
|
983
|
-
.
|
|
984
|
-
.
|
|
982
|
+
.wui-image-picker-ring:hover,
|
|
983
|
+
.wui-image-picker:hover .wui-image-picker-ring,
|
|
984
|
+
.wui-image-picker:focus-visible .wui-image-picker-ring {
|
|
985
985
|
border-color: var(--color-primary);
|
|
986
986
|
}
|
|
987
|
-
.
|
|
987
|
+
.wui-image-picker-logo {
|
|
988
988
|
width: 100%;
|
|
989
989
|
height: 100%;
|
|
990
990
|
border-radius: 50%;
|
|
@@ -999,10 +999,10 @@
|
|
|
999
999
|
}
|
|
1000
1000
|
// Avatar variant — the standard avatar disc (muted fill) instead of the soft-primary
|
|
1001
1001
|
// initials plate; used with a person icon when no initials are given.
|
|
1002
|
-
.
|
|
1002
|
+
.wui-image-picker-avatar .wui-image-picker-logo {
|
|
1003
1003
|
background: color-mix(in srgb, var(--color-primary) 15%, var(--color-surface));
|
|
1004
1004
|
}
|
|
1005
|
-
.
|
|
1005
|
+
.wui-image-picker-overlay {
|
|
1006
1006
|
position: absolute;
|
|
1007
1007
|
inset: 5px;
|
|
1008
1008
|
border-radius: 50%;
|
|
@@ -1023,9 +1023,9 @@
|
|
|
1023
1023
|
opacity: 0;
|
|
1024
1024
|
transition: opacity 0.18s;
|
|
1025
1025
|
}
|
|
1026
|
-
.
|
|
1027
|
-
.
|
|
1028
|
-
.
|
|
1026
|
+
.wui-image-picker-ring:hover .wui-image-picker-overlay,
|
|
1027
|
+
.wui-image-picker:hover .wui-image-picker-overlay,
|
|
1028
|
+
.wui-image-picker:focus-visible .wui-image-picker-overlay {
|
|
1029
1029
|
opacity: 1;
|
|
1030
1030
|
}
|
|
1031
1031
|
// A ring too small to fit "Update photo" without cramping it over the initials (sm = 72px,
|
|
@@ -1033,10 +1033,10 @@
|
|
|
1033
1033
|
// affordance. The lone icon grows a little so it reads as the whole overlay's cue. Driven by a
|
|
1034
1034
|
// container query on the ring, so it works for every size, preset or custom px.
|
|
1035
1035
|
@container (max-width: 95px) {
|
|
1036
|
-
.
|
|
1036
|
+
.wui-image-picker-overlay > span {
|
|
1037
1037
|
display: none;
|
|
1038
1038
|
}
|
|
1039
|
-
.
|
|
1039
|
+
.wui-image-picker-overlay > .wui-icon {
|
|
1040
1040
|
width: calc(var(--wui-logo-size) * 0.34);
|
|
1041
1041
|
height: calc(var(--wui-logo-size) * 0.34);
|
|
1042
1042
|
}
|
|
@@ -1044,7 +1044,7 @@
|
|
|
1044
1044
|
// (reusing the AppTooltip surface look). Text comes from data-overlay-label on the ring — a
|
|
1045
1045
|
// distinct attribute from data-wui-tip so the global tooltip rule never fires this on a large
|
|
1046
1046
|
// ring. Only rendered inside this container query, so md/lg (label visible) never get it.
|
|
1047
|
-
.
|
|
1047
|
+
.wui-image-picker-ring[data-overlay-label]::after {
|
|
1048
1048
|
content: attr(data-overlay-label);
|
|
1049
1049
|
position: absolute;
|
|
1050
1050
|
top: calc(100% + 8px);
|
|
@@ -1073,29 +1073,29 @@
|
|
|
1073
1073
|
}
|
|
1074
1074
|
// :not(:disabled) — a disabled/loading picker can't be updated, so it shows no tooltip
|
|
1075
1075
|
// (mirrors the overlay, which isn't rendered in those states).
|
|
1076
|
-
.
|
|
1077
|
-
.
|
|
1076
|
+
.wui-image-picker:not(:disabled):hover .wui-image-picker-ring[data-overlay-label]::after,
|
|
1077
|
+
.wui-image-picker:not(:disabled):focus-visible .wui-image-picker-ring[data-overlay-label]::after {
|
|
1078
1078
|
opacity: 1;
|
|
1079
1079
|
visibility: visible;
|
|
1080
1080
|
}
|
|
1081
1081
|
@media (prefers-reduced-motion: reduce) {
|
|
1082
|
-
.
|
|
1082
|
+
.wui-image-picker-ring[data-overlay-label]::after {
|
|
1083
1083
|
transition: none;
|
|
1084
1084
|
}
|
|
1085
1085
|
}
|
|
1086
1086
|
}
|
|
1087
1087
|
// While uploading: keep the overlay (spinner) visible and signal it's not
|
|
1088
1088
|
// clickable.
|
|
1089
|
-
.
|
|
1089
|
+
.wui-image-picker-overlay.is-loading {
|
|
1090
1090
|
opacity: 1;
|
|
1091
1091
|
}
|
|
1092
|
-
.
|
|
1092
|
+
.wui-image-picker[aria-busy="true"] {
|
|
1093
1093
|
cursor: progress;
|
|
1094
1094
|
}
|
|
1095
|
-
.
|
|
1095
|
+
.wui-image-picker[aria-busy="true"] .wui-image-picker-logo {
|
|
1096
1096
|
visibility: hidden;
|
|
1097
1097
|
}
|
|
1098
|
-
.
|
|
1098
|
+
.wui-image-picker-hint {
|
|
1099
1099
|
margin: 12px 0 0;
|
|
1100
1100
|
max-width: 240px;
|
|
1101
1101
|
font-size: 12px;
|
|
@@ -1104,7 +1104,7 @@
|
|
|
1104
1104
|
}
|
|
1105
1105
|
// The picker field sizes to its content (the ring) rather than stretching to the
|
|
1106
1106
|
// form width the way a text field does.
|
|
1107
|
-
.
|
|
1107
|
+
.wui-image-picker-field {
|
|
1108
1108
|
gap: 8px;
|
|
1109
1109
|
width: max-content;
|
|
1110
1110
|
max-width: 100%;
|
|
@@ -1112,7 +1112,7 @@
|
|
|
1112
1112
|
// Positioning context for the remove control, which is a sibling of the button. It also owns the
|
|
1113
1113
|
// one sizing knob — the ring diameter — so BOTH children (the button and the remove control)
|
|
1114
1114
|
// inherit it. Presets and the numeric `size` prop set it inline; md (120px) is the default.
|
|
1115
|
-
.
|
|
1115
|
+
.wui-image-picker-shell {
|
|
1116
1116
|
--wui-logo-size: 120px;
|
|
1117
1117
|
position: relative;
|
|
1118
1118
|
display: inline-block;
|
|
@@ -1121,35 +1121,35 @@
|
|
|
1121
1121
|
// ── Inline (profile-row) layout ── ring on the left, a title/subtitle/hint column beside it —
|
|
1122
1122
|
// the account-settings avatar row (name + role + allowed-files hint on one line). The field
|
|
1123
1123
|
// spans its container rather than shrinking to the ring the way the stacked layout does.
|
|
1124
|
-
.
|
|
1124
|
+
.wui-image-picker-field-inline {
|
|
1125
1125
|
width: 100%;
|
|
1126
1126
|
max-width: none;
|
|
1127
1127
|
}
|
|
1128
|
-
.
|
|
1128
|
+
.wui-image-picker-row {
|
|
1129
1129
|
display: flex;
|
|
1130
1130
|
align-items: center;
|
|
1131
1131
|
gap: 20px;
|
|
1132
1132
|
}
|
|
1133
|
-
.
|
|
1133
|
+
.wui-image-picker-meta {
|
|
1134
1134
|
display: flex;
|
|
1135
1135
|
flex-direction: column;
|
|
1136
1136
|
gap: 2px;
|
|
1137
1137
|
min-width: 0;
|
|
1138
1138
|
}
|
|
1139
|
-
.
|
|
1139
|
+
.wui-image-picker-title {
|
|
1140
1140
|
font-size: 15px;
|
|
1141
1141
|
font-weight: 700;
|
|
1142
1142
|
line-height: 1.35;
|
|
1143
1143
|
color: var(--color-text);
|
|
1144
1144
|
}
|
|
1145
|
-
.
|
|
1145
|
+
.wui-image-picker-subtitle {
|
|
1146
1146
|
font-size: 14px;
|
|
1147
1147
|
line-height: 1.4;
|
|
1148
1148
|
color: var(--color-text-muted);
|
|
1149
1149
|
}
|
|
1150
1150
|
// In the row layout the hint sits under the subtitle in the meta column — no top gap to the
|
|
1151
1151
|
// ring and no 240px cap (it reads as a full line beside the avatar, like the reference).
|
|
1152
|
-
.
|
|
1152
|
+
.wui-image-picker-meta .wui-image-picker-hint {
|
|
1153
1153
|
margin-top: 6px;
|
|
1154
1154
|
max-width: none;
|
|
1155
1155
|
}
|
|
@@ -1157,34 +1157,34 @@
|
|
|
1157
1157
|
// ── Profile (vertical identity) layout ── the same title/subtitle/hint block as inline, but
|
|
1158
1158
|
// stacked and centred beneath the ring — an account card / directory tile. The field shrinks to
|
|
1159
1159
|
// its content and centres the ring + text column.
|
|
1160
|
-
.
|
|
1160
|
+
.wui-image-picker-field-profile {
|
|
1161
1161
|
align-items: center;
|
|
1162
1162
|
text-align: center;
|
|
1163
1163
|
width: max-content;
|
|
1164
1164
|
max-width: 100%;
|
|
1165
1165
|
}
|
|
1166
|
-
.
|
|
1166
|
+
.wui-image-picker-field-profile .wui-image-picker-meta {
|
|
1167
1167
|
align-items: center;
|
|
1168
1168
|
margin-top: 12px;
|
|
1169
1169
|
}
|
|
1170
1170
|
// Centred under the ring, the hint reads best with a sensible cap rather than running full width.
|
|
1171
|
-
.
|
|
1171
|
+
.wui-image-picker-field-profile .wui-image-picker-meta .wui-image-picker-hint {
|
|
1172
1172
|
max-width: 240px;
|
|
1173
1173
|
}
|
|
1174
1174
|
// Ring highlights while a file is dragged over it.
|
|
1175
|
-
.
|
|
1175
|
+
.wui-image-picker.is-dragging .wui-image-picker-ring {
|
|
1176
1176
|
border-color: var(--color-primary);
|
|
1177
1177
|
background: var(--color-primary-soft);
|
|
1178
1178
|
}
|
|
1179
1179
|
// A plain disabled (not busy) picker: dim it and drop the pointer affordance.
|
|
1180
|
-
.
|
|
1180
|
+
.wui-image-picker:disabled:not([aria-busy="true"]) {
|
|
1181
1181
|
cursor: not-allowed;
|
|
1182
1182
|
opacity: var(--wui-disabled-opacity);
|
|
1183
1183
|
}
|
|
1184
|
-
.
|
|
1184
|
+
.wui-image-picker:disabled:not([aria-busy="true"]) .wui-image-picker-ring {
|
|
1185
1185
|
border-style: solid;
|
|
1186
1186
|
}
|
|
1187
|
-
.
|
|
1187
|
+
.wui-image-picker-remove {
|
|
1188
1188
|
position: absolute;
|
|
1189
1189
|
top: 2px;
|
|
1190
1190
|
right: 2px;
|
|
@@ -1206,15 +1206,15 @@
|
|
|
1206
1206
|
}
|
|
1207
1207
|
// The × glyph scales with the button (its width/height attributes are set in JS/Razor as a
|
|
1208
1208
|
// baseline; this overrides them, the way the overlay icon is scaled under its container query).
|
|
1209
|
-
.
|
|
1209
|
+
.wui-image-picker-remove > .wui-icon {
|
|
1210
1210
|
width: clamp(11px, calc(var(--wui-logo-size) * 0.115), 17px);
|
|
1211
1211
|
height: clamp(11px, calc(var(--wui-logo-size) * 0.115), 17px);
|
|
1212
1212
|
}
|
|
1213
|
-
.
|
|
1213
|
+
.wui-image-picker-remove:hover {
|
|
1214
1214
|
transform: scale(1.08);
|
|
1215
1215
|
}
|
|
1216
1216
|
// The control's own display would otherwise beat the UA [hidden] rule and keep it visible.
|
|
1217
|
-
.
|
|
1217
|
+
.wui-image-picker-remove[hidden] {
|
|
1218
1218
|
display: none;
|
|
1219
1219
|
}
|
|
1220
1220
|
|
|
@@ -1222,16 +1222,16 @@
|
|
|
1222
1222
|
// `size` prop / preset), so there are no per-size class rules to keep in sync.
|
|
1223
1223
|
|
|
1224
1224
|
// Shape variants — every round face (ring, image, logo, overlay) shares one radius.
|
|
1225
|
-
.
|
|
1226
|
-
.
|
|
1227
|
-
.
|
|
1228
|
-
.
|
|
1225
|
+
.wui-image-picker-rounded .wui-image-picker-ring,
|
|
1226
|
+
.wui-image-picker-rounded .wui-image-picker-img,
|
|
1227
|
+
.wui-image-picker-rounded .wui-image-picker-logo,
|
|
1228
|
+
.wui-image-picker-rounded .wui-image-picker-overlay {
|
|
1229
1229
|
border-radius: 18px;
|
|
1230
1230
|
}
|
|
1231
|
-
.
|
|
1232
|
-
.
|
|
1233
|
-
.
|
|
1234
|
-
.
|
|
1231
|
+
.wui-image-picker-square .wui-image-picker-ring,
|
|
1232
|
+
.wui-image-picker-square .wui-image-picker-img,
|
|
1233
|
+
.wui-image-picker-square .wui-image-picker-logo,
|
|
1234
|
+
.wui-image-picker-square .wui-image-picker-overlay {
|
|
1235
1235
|
border-radius: 8px;
|
|
1236
1236
|
}
|
|
1237
1237
|
|
|
@@ -5,51 +5,6 @@
|
|
|
5
5
|
// partials are a split of one stylesheet, not independent modules, so a rule
|
|
6
6
|
// here may be overridden by a later partial. Never reorder the imports.
|
|
7
7
|
|
|
8
|
-
// ── Drawer / Sidebar menu ──
|
|
9
|
-
// AppSidebarMenu — react-bootstrap Offcanvas mapped onto the app tokens plus
|
|
10
|
-
// a flex column layout for the header / scrolling body / sticky footer.
|
|
11
|
-
.app-sidebar-menu.offcanvas {
|
|
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;
|
|
15
|
-
--bs-offcanvas-bg: var(--color-surface);
|
|
16
|
-
--bs-offcanvas-color: var(--color-text);
|
|
17
|
-
--bs-offcanvas-border-color: var(--color-border);
|
|
18
|
-
--bs-offcanvas-border-width: 1px;
|
|
19
|
-
--bs-offcanvas-padding-x: 0;
|
|
20
|
-
--bs-offcanvas-padding-y: 0;
|
|
21
|
-
// A caller's own maxWidth still caps the panel on a phone.
|
|
22
|
-
max-width: var(--asm-max-width, 100vw);
|
|
23
|
-
display: flex;
|
|
24
|
-
flex-direction: column;
|
|
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
|
-
}
|
|
32
|
-
.app-sidebar-menu .offcanvas-body {
|
|
33
|
-
// Inset the content to the same 20px gutter as the header/footer so plain body
|
|
34
|
-
// content doesn't stick to the panel edge. Full-bleed content (edge-to-edge nav
|
|
35
|
-
// rows) can zero it back out via `bodyClassName="p-0"`.
|
|
36
|
-
padding: 18px 20px;
|
|
37
|
-
display: flex;
|
|
38
|
-
flex-direction: column;
|
|
39
|
-
flex: 1;
|
|
40
|
-
min-height: 0;
|
|
41
|
-
}
|
|
42
|
-
// Let a caller's bodyClassName padding utility actually win over the default above
|
|
43
|
-
// (the descendant selector would otherwise out-specify a single utility class).
|
|
44
|
-
.app-sidebar-menu .offcanvas-body.p-0 {
|
|
45
|
-
padding: 0;
|
|
46
|
-
}
|
|
47
|
-
.app-sidebar-menu .asm-footer {
|
|
48
|
-
padding: 16px 20px;
|
|
49
|
-
border-top: 1px solid var(--color-border);
|
|
50
|
-
background: var(--color-surface);
|
|
51
|
-
}
|
|
52
|
-
|
|
53
8
|
.drawer {
|
|
54
9
|
position: fixed;
|
|
55
10
|
top: 0;
|
|
@@ -86,6 +86,10 @@
|
|
|
86
86
|
padding: 10px 16px;
|
|
87
87
|
border-bottom: 1px solid var(--color-border);
|
|
88
88
|
}
|
|
89
|
+
.wui-notification-center-tabs {
|
|
90
|
+
padding: 0 var(--wui-space-lg);
|
|
91
|
+
border-bottom: 1px solid var(--color-border);
|
|
92
|
+
}
|
|
89
93
|
.wui-notification-center-title {
|
|
90
94
|
margin: 0;
|
|
91
95
|
font-size: 1rem;
|
package/scss/wui/_overlays.scss
CHANGED
|
@@ -95,10 +95,9 @@
|
|
|
95
95
|
flex-direction: column;
|
|
96
96
|
overflow: hidden;
|
|
97
97
|
}
|
|
98
|
-
// The centred card
|
|
99
|
-
//
|
|
100
|
-
//
|
|
101
|
-
// both surfaces resolve to `--wui-modal-max-width` on the shell (it inherits to `.wui-modal`).
|
|
98
|
+
// The centred card opens with the shared dialog motion (wui/_dialog-motion.scss: soft zoom by
|
|
99
|
+
// default). Width comes from `size`, which both surfaces resolve to `--wui-modal-max-width` on
|
|
100
|
+
// the shell (it inherits to `.wui-modal`).
|
|
102
101
|
.wui-modal-header {
|
|
103
102
|
flex: 0 0 auto;
|
|
104
103
|
display: flex;
|
|
@@ -280,7 +279,7 @@
|
|
|
280
279
|
// fixed across states: only the tint animates, so the button never morphs into a
|
|
281
280
|
// circle. Slower on the way in than the way out.
|
|
282
281
|
//
|
|
283
|
-
// The drawer (
|
|
282
|
+
// The drawer (AppDrawer) header close shares the rule, so the two overlays dismiss with
|
|
284
283
|
// the same control.
|
|
285
284
|
.wui-modal-close,
|
|
286
285
|
.wui-drawer-close {
|
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
// Pager: the table-footer and standalone page controls.
|
|
2
|
+
//
|
|
3
|
+
// Part of the wui-components layer; imported right after _data.scss. Order within the layer is load-bearing (see _wui-components.scss).
|
|
4
|
+
|
|
5
|
+
// Pagination footer: a "10 per page" menu beside the page buttons, flush under a table. No row
|
|
6
|
+
// range and no total; the page buttons say where you are.
|
|
7
|
+
.table-pagination {
|
|
8
|
+
display: flex;
|
|
9
|
+
align-items: center;
|
|
10
|
+
justify-content: flex-end;
|
|
11
|
+
gap: var(--wui-space-lg);
|
|
12
|
+
padding: var(--wui-space-md) var(--wui-space-lg);
|
|
13
|
+
border-top: 1px solid var(--color-border);
|
|
14
|
+
font-size: var(--wui-fs-xs);
|
|
15
|
+
color: var(--color-text-muted);
|
|
16
|
+
flex-wrap: wrap;
|
|
17
|
+
}
|
|
18
|
+
.tpg-rows {
|
|
19
|
+
display: inline-flex;
|
|
20
|
+
align-items: center;
|
|
21
|
+
white-space: nowrap;
|
|
22
|
+
}
|
|
23
|
+
.select.tpg-select {
|
|
24
|
+
width: auto;
|
|
25
|
+
min-width: 64px;
|
|
26
|
+
height: var(--wui-control-sm);
|
|
27
|
+
min-height: var(--wui-control-sm);
|
|
28
|
+
padding: 0 var(--wui-space-2xl) 0 var(--wui-space-md);
|
|
29
|
+
font-size: var(--wui-fs-xs);
|
|
30
|
+
font-weight: var(--wui-fw-semibold);
|
|
31
|
+
border-radius: var(--wui-radius-md);
|
|
32
|
+
background-position: right 8px center;
|
|
33
|
+
background-size: 14px;
|
|
34
|
+
}
|
|
35
|
+
.tpg-range {
|
|
36
|
+
font-variant-numeric: tabular-nums;
|
|
37
|
+
white-space: nowrap;
|
|
38
|
+
font-size: var(--wui-fs-sm);
|
|
39
|
+
font-weight: var(--wui-fw-medium);
|
|
40
|
+
color: var(--color-text-muted);
|
|
41
|
+
}
|
|
42
|
+
.tpg-nav {
|
|
43
|
+
display: inline-flex;
|
|
44
|
+
flex-wrap: wrap;
|
|
45
|
+
justify-content: flex-end;
|
|
46
|
+
align-items: center;
|
|
47
|
+
gap: var(--wui-space-xs);
|
|
48
|
+
}
|
|
49
|
+
.tpg-arrow {
|
|
50
|
+
display: grid;
|
|
51
|
+
place-items: center;
|
|
52
|
+
width: var(--wui-control-sm);
|
|
53
|
+
height: var(--wui-control-sm);
|
|
54
|
+
border: none;
|
|
55
|
+
background: transparent;
|
|
56
|
+
color: var(--color-text-muted);
|
|
57
|
+
border-radius: 50%;
|
|
58
|
+
cursor: pointer;
|
|
59
|
+
transition:
|
|
60
|
+
background 0.14s ease,
|
|
61
|
+
color 0.14s ease;
|
|
62
|
+
}
|
|
63
|
+
.tpg-arrow:hover:not(:disabled) {
|
|
64
|
+
background: color-mix(in srgb, var(--color-primary) 10%, transparent);
|
|
65
|
+
color: var(--color-primary-text);
|
|
66
|
+
}
|
|
67
|
+
.tpg-arrow:focus-visible {
|
|
68
|
+
outline: var(--wui-focus-ring-width) solid var(--color-focus-ring);
|
|
69
|
+
outline-offset: var(--wui-focus-ring-offset);
|
|
70
|
+
}
|
|
71
|
+
// Text-5 already reads as "unavailable", so there is no opacity dimming on top of it.
|
|
72
|
+
.tpg-arrow:disabled {
|
|
73
|
+
color: var(--color-border-strong);
|
|
74
|
+
cursor: not-allowed;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
// Numbered mode (mode="numbered"): windowed page buttons sitting between the prev/next
|
|
78
|
+
// arrows in .tpg-nav, same 32px circular hit target as .tpg-arrow.
|
|
79
|
+
.tpg-page {
|
|
80
|
+
display: grid;
|
|
81
|
+
place-items: center;
|
|
82
|
+
min-width: var(--wui-control-sm);
|
|
83
|
+
height: var(--wui-control-sm);
|
|
84
|
+
padding: 0 var(--wui-space-sm);
|
|
85
|
+
border: none;
|
|
86
|
+
background: transparent;
|
|
87
|
+
color: var(--color-text-muted);
|
|
88
|
+
border-radius: 50%;
|
|
89
|
+
font-size: var(--wui-fs-xs);
|
|
90
|
+
font-weight: var(--wui-fw-semibold);
|
|
91
|
+
font-variant-numeric: tabular-nums;
|
|
92
|
+
text-decoration: none;
|
|
93
|
+
cursor: pointer;
|
|
94
|
+
transition:
|
|
95
|
+
background 0.14s ease,
|
|
96
|
+
color 0.14s ease;
|
|
97
|
+
}
|
|
98
|
+
.tpg-page:hover:not(.is-active) {
|
|
99
|
+
background: color-mix(in srgb, var(--color-primary) 10%, transparent);
|
|
100
|
+
color: var(--color-primary-text);
|
|
101
|
+
}
|
|
102
|
+
.tpg-page:focus-visible {
|
|
103
|
+
outline: var(--wui-focus-ring-width) solid var(--color-focus-ring);
|
|
104
|
+
outline-offset: var(--wui-focus-ring-offset);
|
|
105
|
+
}
|
|
106
|
+
.tpg-page.is-active {
|
|
107
|
+
background: var(--color-primary);
|
|
108
|
+
color: var(--color-on-primary);
|
|
109
|
+
cursor: default;
|
|
110
|
+
}
|
|
111
|
+
.tpg-ellipsis {
|
|
112
|
+
display: grid;
|
|
113
|
+
place-items: center;
|
|
114
|
+
min-width: 24px;
|
|
115
|
+
height: var(--wui-control-sm);
|
|
116
|
+
color: var(--color-text-subtle);
|
|
117
|
+
font-size: var(--wui-fs-xs);
|
|
118
|
+
user-select: none;
|
|
119
|
+
}
|
|
120
|
+
// A finger needs a 44px target: the pager's controls grow to the control height on a phone.
|
|
121
|
+
@media (max-width: 575.98px) {
|
|
122
|
+
.select.tpg-select {
|
|
123
|
+
height: var(--wui-control-md);
|
|
124
|
+
min-height: var(--wui-control-md);
|
|
125
|
+
}
|
|
126
|
+
.tpg-arrow {
|
|
127
|
+
width: var(--wui-control-md);
|
|
128
|
+
height: var(--wui-control-md);
|
|
129
|
+
}
|
|
130
|
+
.tpg-page {
|
|
131
|
+
min-width: var(--wui-control-md);
|
|
132
|
+
height: var(--wui-control-md);
|
|
133
|
+
}
|
|
134
|
+
.tpg-ellipsis {
|
|
135
|
+
height: var(--wui-control-md);
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
// Standalone pager: centred under a card or list, no footer rule or padding.
|
|
140
|
+
.wui-table-pagination-standalone {
|
|
141
|
+
justify-content: center;
|
|
142
|
+
padding: 0;
|
|
143
|
+
border-top: none;
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
// The compact pager: 28px page and arrow buttons and 12px text. A phone keeps the 44px target.
|
|
147
|
+
.wui-table-pagination-sm {
|
|
148
|
+
font-size: var(--wui-fs-xs);
|
|
149
|
+
.tpg-arrow,
|
|
150
|
+
.tpg-page {
|
|
151
|
+
width: 28px;
|
|
152
|
+
min-width: 28px;
|
|
153
|
+
height: 28px;
|
|
154
|
+
}
|
|
155
|
+
.tpg-page {
|
|
156
|
+
font-size: var(--wui-fs-xs);
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
@media (max-width: 575.98px) {
|
|
160
|
+
.wui-table-pagination-sm {
|
|
161
|
+
.tpg-arrow,
|
|
162
|
+
.tpg-page {
|
|
163
|
+
width: var(--wui-control-md);
|
|
164
|
+
min-width: var(--wui-control-md);
|
|
165
|
+
height: var(--wui-control-md);
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
// Lead capture section of a marketing page (AppSectionLeadCapture).
|
|
2
|
+
//
|
|
3
|
+
// Part of the wui-components layer; imported after _sections.scss. Order within the layer is load-bearing (see _wui-components.scss).
|
|
4
|
+
|
|
5
|
+
.wui-section-lead-text {
|
|
6
|
+
max-width: 48rem;
|
|
7
|
+
margin: 0;
|
|
8
|
+
color: var(--color-text-muted);
|
|
9
|
+
}
|
|
10
|
+
.wui-section-lead-form,
|
|
11
|
+
.wui-section-lead-success {
|
|
12
|
+
display: flex;
|
|
13
|
+
flex-direction: column;
|
|
14
|
+
gap: var(--wui-space-md);
|
|
15
|
+
width: 100%;
|
|
16
|
+
max-width: 40rem;
|
|
17
|
+
}
|
|
18
|
+
.wui-section-center .wui-section-lead-form,
|
|
19
|
+
.wui-section-center .wui-section-lead-success {
|
|
20
|
+
margin-inline: auto;
|
|
21
|
+
}
|
|
22
|
+
.wui-section-lead-fields {
|
|
23
|
+
display: flex;
|
|
24
|
+
flex-direction: column;
|
|
25
|
+
gap: var(--wui-space-md);
|
|
26
|
+
}
|
|
27
|
+
.wui-section-lead-consent {
|
|
28
|
+
margin: 0;
|
|
29
|
+
color: var(--color-text-muted);
|
|
30
|
+
font-size: var(--wui-fs-sm);
|
|
31
|
+
}
|
package/scss/wui/_shortcuts.scss
CHANGED
|
@@ -134,6 +134,15 @@
|
|
|
134
134
|
background: var(--color-bg-muted);
|
|
135
135
|
color: var(--color-text);
|
|
136
136
|
}
|
|
137
|
+
.wui-shortcut-group + .wui-shortcut-group {
|
|
138
|
+
margin-top: var(--wui-space-lg);
|
|
139
|
+
}
|
|
140
|
+
.wui-shortcut-group-title {
|
|
141
|
+
margin: 0 0 var(--wui-space-sm);
|
|
142
|
+
font-size: var(--wui-fs-sm);
|
|
143
|
+
font-weight: var(--wui-fw-semibold);
|
|
144
|
+
color: var(--color-text-subtle);
|
|
145
|
+
}
|
|
137
146
|
.wui-shortcut-keys {
|
|
138
147
|
display: grid;
|
|
139
148
|
gap: 6px;
|
|
@@ -152,6 +161,6 @@
|
|
|
152
161
|
.wui-shortcut-keys dd {
|
|
153
162
|
margin: 0;
|
|
154
163
|
color: var(--color-text-muted);
|
|
155
|
-
font-size:
|
|
164
|
+
font-size: var(--wui-fs-sm);
|
|
156
165
|
text-align: end;
|
|
157
166
|
}
|
package/scss/wui/_whats-new.scss
CHANGED
|
@@ -45,6 +45,23 @@
|
|
|
45
45
|
.wui-whats-new:not([data-wui-unread]) .wui-whats-new-dot {
|
|
46
46
|
display: none;
|
|
47
47
|
}
|
|
48
|
+
// With indicator="count" the dot holds the unread number, so it widens into a pill around it.
|
|
49
|
+
.wui-whats-new[indicator="count"] .wui-whats-new-dot {
|
|
50
|
+
box-sizing: border-box;
|
|
51
|
+
width: auto;
|
|
52
|
+
min-width: 18px;
|
|
53
|
+
height: 18px;
|
|
54
|
+
padding: 0 var(--wui-space-xs);
|
|
55
|
+
border-radius: var(--wui-radius-pill);
|
|
56
|
+
background: var(--color-primary);
|
|
57
|
+
color: var(--color-on-primary);
|
|
58
|
+
display: flex;
|
|
59
|
+
align-items: center;
|
|
60
|
+
justify-content: center;
|
|
61
|
+
font-size: var(--wui-fs-xs);
|
|
62
|
+
font-weight: var(--wui-fw-semibold);
|
|
63
|
+
line-height: var(--wui-lh-heading);
|
|
64
|
+
}
|
|
48
65
|
|
|
49
66
|
.wui-whats-new-panel {
|
|
50
67
|
display: none;
|