@webority/theme 0.53.1 → 0.55.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.
- package/dist/purge-safelist.json +354 -3
- package/dist/webority-theme.css +1 -1
- package/package.json +2 -1
- package/scss/_components.scss +27 -4
- package/scss/_marketing.scss +5 -0
- package/scss/_variables.scss +5 -4
- package/scss/_wui-aliases.scss +14 -0
- package/scss/_wui-components.scss +29 -0
- package/scss/wui/_avatar-picker.scss +1 -1
- package/scss/wui/_calendar.scss +5 -5
- package/scss/wui/_card.scss +2 -2
- package/scss/wui/_carousel.scss +182 -0
- package/scss/wui/_chart.scss +2 -2
- package/scss/wui/_choice.scss +88 -8
- package/scss/wui/_code-block.scss +138 -0
- package/scss/wui/_command-palette.scss +99 -1
- package/scss/wui/_comment-thread.scss +268 -0
- package/scss/wui/_context-menu.scss +2 -2
- package/scss/wui/_controls.scss +14 -12
- package/scss/wui/_data.scss +407 -14
- package/scss/wui/_disclosure.scss +2 -2
- package/scss/wui/_display.scss +13 -9
- package/scss/wui/_dock.scss +2 -2
- package/scss/wui/_drawer.scss +198 -0
- package/scss/wui/_file-viewer.scss +6 -6
- package/scss/wui/_groups.scss +111 -0
- package/scss/wui/_hover-card.scss +55 -0
- package/scss/wui/_illustration.scss +76 -0
- package/scss/wui/_image-crop.scss +6 -6
- package/scss/wui/_inline-edit.scss +131 -0
- package/scss/wui/_interaction.scss +286 -0
- package/scss/wui/_kanban.scss +6 -6
- package/scss/wui/_lightbox.scss +169 -0
- package/scss/wui/_media.scss +8 -5
- package/scss/wui/_mention-input.scss +88 -0
- package/scss/wui/_menubar.scss +110 -0
- package/scss/wui/_navigation-menu.scss +172 -0
- package/scss/wui/_navigation.scss +109 -6
- package/scss/wui/_notification-center.scss +251 -0
- package/scss/wui/_onboarding-checklist.scss +199 -0
- package/scss/wui/_overlays.scss +7 -11
- package/scss/wui/_rating.scss +87 -0
- package/scss/wui/_record-pager.scss +27 -0
- package/scss/wui/_relative-time.scss +10 -0
- package/scss/wui/_resizable.scss +98 -0
- package/scss/wui/_rich-text.scss +2 -2
- package/scss/wui/_rolling-number.scss +60 -0
- package/scss/wui/_sections.scss +315 -0
- package/scss/wui/_shell-parts.scss +12 -3
- package/scss/wui/_shell.scss +6 -6
- package/scss/wui/_shortcuts.scss +143 -0
- package/scss/wui/_show-more.scss +30 -0
- package/scss/wui/_sortable.scss +2 -2
- package/scss/wui/_split-view.scss +321 -0
- package/scss/wui/_toolbar.scss +4 -4
- package/scss/wui/_tour.scss +14 -93
- package/scss/wui/_tree.scss +2 -2
- package/scss/wui/_truncate.scss +32 -0
- package/scss/wui/_typography.scss +14 -0
- package/scss/wui/_utilities.scss +8 -8
- package/scss/wui/_whats-new.scss +147 -0
- package/scss/wui/_workspace.scss +2 -2
- package/scss/wui/tour/_advance.scss +67 -0
- package/scss/wui/tour/_base.scss +82 -0
- package/scss/wui/tour/_end.scss +82 -0
- package/scss/wui/tour/_media.scss +54 -0
- package/scss/wui/tour/_motion.scss +133 -0
- package/scss/wui/tour/_placement.scss +65 -0
- package/scss/wui/tour/_progress.scss +26 -0
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
// ── Onboarding checklist ──
|
|
2
|
+
// AppOnboardingChecklist / <app-onboarding-checklist> / <wui-onboarding-checklist>: a first-run
|
|
3
|
+
// setup card. A heading that collapses the steps, a close icon, a bar of one segment per step and
|
|
4
|
+
// the steps, each `.is-done`, `.is-current`, `.is-skipped` or `.is-todo`. A dismissed checklist
|
|
5
|
+
// shows only `.wui-onboarding-restore`; the element toggles `hidden` on the card, the steps and
|
|
6
|
+
// that button.
|
|
7
|
+
//
|
|
8
|
+
// Part of the wui-components layer, see _wui-components.scss for load order.
|
|
9
|
+
|
|
10
|
+
.wui-onboarding {
|
|
11
|
+
display: block;
|
|
12
|
+
}
|
|
13
|
+
.wui-onboarding-card[hidden],
|
|
14
|
+
.wui-onboarding-steps[hidden],
|
|
15
|
+
.wui-onboarding-restore[hidden] {
|
|
16
|
+
display: none;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
.wui-onboarding-card {
|
|
20
|
+
padding: 12px 16px 8px;
|
|
21
|
+
border: 1px solid var(--color-border);
|
|
22
|
+
border-radius: var(--wui-radius);
|
|
23
|
+
corner-shape: squircle;
|
|
24
|
+
background: var(--color-surface);
|
|
25
|
+
color: var(--color-text);
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
.wui-onboarding-head {
|
|
29
|
+
display: flex;
|
|
30
|
+
align-items: center;
|
|
31
|
+
gap: 8px;
|
|
32
|
+
}
|
|
33
|
+
.wui-onboarding-toggle {
|
|
34
|
+
display: flex;
|
|
35
|
+
flex: 1 1 auto;
|
|
36
|
+
flex-wrap: wrap;
|
|
37
|
+
align-items: center;
|
|
38
|
+
gap: 2px 12px;
|
|
39
|
+
min-width: 0;
|
|
40
|
+
min-height: 44px;
|
|
41
|
+
margin-inline: -8px;
|
|
42
|
+
padding: 4px 8px;
|
|
43
|
+
border: 0;
|
|
44
|
+
border-radius: var(--wui-radius-sm);
|
|
45
|
+
background: transparent;
|
|
46
|
+
color: inherit;
|
|
47
|
+
font: inherit;
|
|
48
|
+
text-align: start;
|
|
49
|
+
cursor: pointer;
|
|
50
|
+
}
|
|
51
|
+
.wui-onboarding-toggle:hover {
|
|
52
|
+
background: var(--color-bg-muted);
|
|
53
|
+
}
|
|
54
|
+
.wui-onboarding-toggle:focus-visible,
|
|
55
|
+
.wui-onboarding-restore:focus-visible,
|
|
56
|
+
.wui-onboarding-label:focus-visible {
|
|
57
|
+
outline: var(--wui-focus-ring-width) solid var(--color-focus-ring);
|
|
58
|
+
outline-offset: var(--wui-focus-ring-offset);
|
|
59
|
+
}
|
|
60
|
+
.wui-onboarding-title {
|
|
61
|
+
font-weight: 600;
|
|
62
|
+
}
|
|
63
|
+
.wui-onboarding-count {
|
|
64
|
+
color: var(--color-text-muted);
|
|
65
|
+
font-size: 13px;
|
|
66
|
+
font-variant-numeric: tabular-nums;
|
|
67
|
+
}
|
|
68
|
+
.wui-onboarding-chevron {
|
|
69
|
+
display: inline-flex;
|
|
70
|
+
margin-inline-start: auto;
|
|
71
|
+
color: var(--color-text-muted);
|
|
72
|
+
}
|
|
73
|
+
.wui-onboarding-toggle[aria-expanded="false"] .wui-onboarding-chevron {
|
|
74
|
+
transform: rotate(-90deg);
|
|
75
|
+
}
|
|
76
|
+
.wui-onboarding-dismiss {
|
|
77
|
+
flex: none;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
.wui-onboarding-bar {
|
|
81
|
+
display: flex;
|
|
82
|
+
gap: 4px;
|
|
83
|
+
margin: 4px 0 12px;
|
|
84
|
+
}
|
|
85
|
+
.wui-onboarding-seg {
|
|
86
|
+
flex: 1 1 0;
|
|
87
|
+
height: 4px;
|
|
88
|
+
border-radius: 2px;
|
|
89
|
+
background: var(--color-border);
|
|
90
|
+
}
|
|
91
|
+
.wui-onboarding-seg.is-done {
|
|
92
|
+
background: var(--color-success);
|
|
93
|
+
}
|
|
94
|
+
.wui-onboarding-seg.is-current {
|
|
95
|
+
background: var(--color-primary);
|
|
96
|
+
}
|
|
97
|
+
.wui-onboarding-seg.is-skipped {
|
|
98
|
+
background: var(--color-text-muted);
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
.wui-onboarding-steps {
|
|
102
|
+
margin: 0;
|
|
103
|
+
padding: 0;
|
|
104
|
+
list-style: none;
|
|
105
|
+
}
|
|
106
|
+
.wui-onboarding-step {
|
|
107
|
+
display: flex;
|
|
108
|
+
align-items: flex-start;
|
|
109
|
+
gap: 12px;
|
|
110
|
+
padding: 8px 0;
|
|
111
|
+
}
|
|
112
|
+
.wui-onboarding-step + .wui-onboarding-step {
|
|
113
|
+
border-top: 1px solid var(--color-border);
|
|
114
|
+
}
|
|
115
|
+
.wui-onboarding-mark {
|
|
116
|
+
display: inline-flex;
|
|
117
|
+
flex: none;
|
|
118
|
+
align-items: center;
|
|
119
|
+
justify-content: center;
|
|
120
|
+
width: 24px;
|
|
121
|
+
height: 24px;
|
|
122
|
+
border: 1.5px solid var(--color-border);
|
|
123
|
+
border-radius: 50%;
|
|
124
|
+
color: var(--color-text-muted);
|
|
125
|
+
font-size: 12px;
|
|
126
|
+
font-variant-numeric: tabular-nums;
|
|
127
|
+
line-height: 1;
|
|
128
|
+
}
|
|
129
|
+
.wui-onboarding-step.is-current .wui-onboarding-mark {
|
|
130
|
+
border-color: var(--color-primary);
|
|
131
|
+
background: var(--color-primary-soft);
|
|
132
|
+
color: var(--color-primary-ink);
|
|
133
|
+
}
|
|
134
|
+
.wui-onboarding-step.is-done .wui-onboarding-mark {
|
|
135
|
+
border-color: transparent;
|
|
136
|
+
background: var(--color-success-soft);
|
|
137
|
+
color: var(--color-success-text);
|
|
138
|
+
}
|
|
139
|
+
.wui-onboarding-step.is-skipped .wui-onboarding-mark {
|
|
140
|
+
border-style: dashed;
|
|
141
|
+
}
|
|
142
|
+
.wui-onboarding-body {
|
|
143
|
+
display: flex;
|
|
144
|
+
flex-direction: column;
|
|
145
|
+
gap: 2px;
|
|
146
|
+
min-width: 0;
|
|
147
|
+
padding-top: 2px;
|
|
148
|
+
}
|
|
149
|
+
.wui-onboarding-label {
|
|
150
|
+
color: inherit;
|
|
151
|
+
overflow-wrap: anywhere;
|
|
152
|
+
text-decoration: none;
|
|
153
|
+
}
|
|
154
|
+
a.wui-onboarding-label {
|
|
155
|
+
text-decoration: underline;
|
|
156
|
+
text-decoration-color: var(--color-border);
|
|
157
|
+
text-underline-offset: 3px;
|
|
158
|
+
}
|
|
159
|
+
a.wui-onboarding-label:hover {
|
|
160
|
+
color: var(--color-primary-ink);
|
|
161
|
+
text-decoration-color: currentColor;
|
|
162
|
+
}
|
|
163
|
+
.wui-onboarding-step.is-current .wui-onboarding-label {
|
|
164
|
+
font-weight: 600;
|
|
165
|
+
}
|
|
166
|
+
.wui-onboarding-step.is-done .wui-onboarding-label,
|
|
167
|
+
.wui-onboarding-step.is-skipped .wui-onboarding-label {
|
|
168
|
+
color: var(--color-text-muted);
|
|
169
|
+
}
|
|
170
|
+
.wui-onboarding-step.is-skipped .wui-onboarding-label {
|
|
171
|
+
text-decoration: line-through;
|
|
172
|
+
}
|
|
173
|
+
.wui-onboarding-desc {
|
|
174
|
+
color: var(--color-text-muted);
|
|
175
|
+
font-size: 13px;
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
.wui-onboarding-restore {
|
|
179
|
+
display: inline-flex;
|
|
180
|
+
align-items: center;
|
|
181
|
+
gap: 8px;
|
|
182
|
+
min-height: 44px;
|
|
183
|
+
padding: 6px 14px;
|
|
184
|
+
border: 1px solid var(--color-border);
|
|
185
|
+
border-radius: var(--wui-radius-sm);
|
|
186
|
+
background: var(--color-surface);
|
|
187
|
+
color: var(--color-text);
|
|
188
|
+
font: inherit;
|
|
189
|
+
cursor: pointer;
|
|
190
|
+
}
|
|
191
|
+
.wui-onboarding-restore:hover {
|
|
192
|
+
background: var(--color-bg-muted);
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
@media (prefers-reduced-motion: no-preference) {
|
|
196
|
+
.wui-onboarding-chevron {
|
|
197
|
+
transition: transform 160ms var(--wui-ease-ui);
|
|
198
|
+
}
|
|
199
|
+
}
|
package/scss/wui/_overlays.scss
CHANGED
|
@@ -285,8 +285,8 @@
|
|
|
285
285
|
}
|
|
286
286
|
.wui-modal-close:focus-visible,
|
|
287
287
|
.wui-drawer-close:focus-visible {
|
|
288
|
-
outline:
|
|
289
|
-
outline-offset:
|
|
288
|
+
outline: var(--wui-focus-ring-width) solid var(--color-focus-ring);
|
|
289
|
+
outline-offset: var(--wui-focus-ring-offset);
|
|
290
290
|
}
|
|
291
291
|
@media (prefers-reduced-motion: reduce) {
|
|
292
292
|
.wui-modal-close,
|
|
@@ -745,20 +745,16 @@
|
|
|
745
745
|
background: color-mix(in srgb, var(--wui-toast-accent) 14%, transparent);
|
|
746
746
|
color: var(--wui-toast-accent);
|
|
747
747
|
}
|
|
748
|
-
.wui-toast-action:focus-visible {
|
|
749
|
-
outline: 2px solid var(--wui-toast-accent);
|
|
750
|
-
outline-offset: 1px;
|
|
751
|
-
}
|
|
752
|
-
|
|
753
748
|
// Geometry: optical space above the action = message half-leading (3.5px) + column gap
|
|
754
749
|
// (2px) + 2px margin + action half-leading (2px) ≈ 9.5px; below = action half-leading
|
|
755
750
|
// (2px) + this padding (7px) ≈ 9px. Equal by construction — don't re-balance one side alone.
|
|
756
751
|
.wui-toast:has(.wui-toast-action) {
|
|
757
752
|
padding-bottom: 7px;
|
|
758
753
|
}
|
|
754
|
+
// The shared ring, not the tone accent: the success and warning fills fall under 3:1 on the toast.
|
|
759
755
|
.wui-toast-action:focus-visible {
|
|
760
|
-
outline:
|
|
761
|
-
outline-offset:
|
|
756
|
+
outline: var(--wui-focus-ring-width) solid var(--color-focus-ring);
|
|
757
|
+
outline-offset: var(--wui-focus-ring-offset);
|
|
762
758
|
}
|
|
763
759
|
|
|
764
760
|
.wui-toast-close {
|
|
@@ -772,8 +768,8 @@
|
|
|
772
768
|
box-shadow: none;
|
|
773
769
|
}
|
|
774
770
|
.wui-toast-close:focus-visible {
|
|
775
|
-
outline:
|
|
776
|
-
outline-offset:
|
|
771
|
+
outline: var(--wui-focus-ring-width) solid var(--color-focus-ring);
|
|
772
|
+
outline-offset: var(--wui-focus-ring-offset);
|
|
777
773
|
}
|
|
778
774
|
|
|
779
775
|
// The auto-dismiss TIMER, deliberately invisible (height 0): the element still runs the
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
// ── Rating ──
|
|
2
|
+
// AppRating / <app-rating>: a 1 to N star input (a <wui-rating> radiogroup) or a read-only display.
|
|
3
|
+
// Each star is an outline glyph with a bold copy on top, clipped to the filled share of its width.
|
|
4
|
+
//
|
|
5
|
+
// Part of the wui-components layer, see _wui-components.scss for load order.
|
|
6
|
+
|
|
7
|
+
.wui-rating {
|
|
8
|
+
display: inline-flex;
|
|
9
|
+
align-items: center;
|
|
10
|
+
gap: 2px;
|
|
11
|
+
color: var(--color-warning);
|
|
12
|
+
}
|
|
13
|
+
.wui-rating-stars {
|
|
14
|
+
display: inline-flex;
|
|
15
|
+
gap: 2px;
|
|
16
|
+
}
|
|
17
|
+
.wui-rating-star {
|
|
18
|
+
position: relative;
|
|
19
|
+
display: inline-flex;
|
|
20
|
+
margin: 0;
|
|
21
|
+
line-height: 0;
|
|
22
|
+
}
|
|
23
|
+
.wui-rating-glyphs {
|
|
24
|
+
position: relative;
|
|
25
|
+
display: inline-flex;
|
|
26
|
+
color: var(--color-text-muted);
|
|
27
|
+
}
|
|
28
|
+
.wui-rating-fill {
|
|
29
|
+
position: absolute;
|
|
30
|
+
inset: 0 auto 0 0;
|
|
31
|
+
width: 0;
|
|
32
|
+
overflow: hidden;
|
|
33
|
+
color: var(--color-warning);
|
|
34
|
+
transition: width 0.12s ease;
|
|
35
|
+
}
|
|
36
|
+
.wui-rating-fill .wui-icon {
|
|
37
|
+
flex: none;
|
|
38
|
+
}
|
|
39
|
+
.wui-rating-star-full .wui-rating-fill {
|
|
40
|
+
width: 100%;
|
|
41
|
+
}
|
|
42
|
+
.wui-rating-star-half .wui-rating-fill {
|
|
43
|
+
width: 50%;
|
|
44
|
+
}
|
|
45
|
+
.wui-rating-value {
|
|
46
|
+
margin-left: 6px;
|
|
47
|
+
color: var(--color-text-muted);
|
|
48
|
+
font-size: 13px;
|
|
49
|
+
font-variant-numeric: tabular-nums;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
.wui-rating-lg .wui-rating-value {
|
|
53
|
+
font-size: 15px;
|
|
54
|
+
}
|
|
55
|
+
.wui-rating-sm .wui-rating-value {
|
|
56
|
+
font-size: 12px;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
.wui-rating-input .wui-rating-star {
|
|
60
|
+
cursor: pointer;
|
|
61
|
+
border-radius: var(--wui-radius-sm);
|
|
62
|
+
}
|
|
63
|
+
.wui-rating-input .wui-rating-star:has(input:focus-visible) {
|
|
64
|
+
outline: var(--wui-focus-ring-width) solid var(--color-focus-ring);
|
|
65
|
+
outline-offset: var(--wui-focus-ring-offset);
|
|
66
|
+
}
|
|
67
|
+
.wui-rating-previewing .wui-rating-star .wui-rating-fill {
|
|
68
|
+
width: 0;
|
|
69
|
+
}
|
|
70
|
+
.wui-rating-previewing .wui-rating-star-preview .wui-rating-fill {
|
|
71
|
+
width: 100%;
|
|
72
|
+
}
|
|
73
|
+
.wui-rating-input[disabled] {
|
|
74
|
+
opacity: 0.55;
|
|
75
|
+
}
|
|
76
|
+
.wui-rating-input[disabled] .wui-rating-star {
|
|
77
|
+
cursor: not-allowed;
|
|
78
|
+
}
|
|
79
|
+
.field > .wui-rating-input {
|
|
80
|
+
align-self: flex-start;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
@media (prefers-reduced-motion: reduce) {
|
|
84
|
+
.wui-rating-fill {
|
|
85
|
+
transition: none;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
// ── Record pager ──
|
|
2
|
+
// AppRecordPager / <app-record-pager> (a <wui-record-pager> element): "12 of 47" and the
|
|
3
|
+
// previous and next action icons, in a detail page's header actions or a split view's pane header.
|
|
4
|
+
//
|
|
5
|
+
// Part of the wui-components layer, see _wui-components.scss for load order.
|
|
6
|
+
|
|
7
|
+
.wui-record-pager {
|
|
8
|
+
display: inline-flex;
|
|
9
|
+
flex: none;
|
|
10
|
+
align-items: center;
|
|
11
|
+
gap: 2px;
|
|
12
|
+
}
|
|
13
|
+
.wui-record-pager-position {
|
|
14
|
+
margin-right: 6px;
|
|
15
|
+
color: var(--color-text-muted);
|
|
16
|
+
font-size: 13px;
|
|
17
|
+
font-variant-numeric: tabular-nums;
|
|
18
|
+
white-space: nowrap;
|
|
19
|
+
}
|
|
20
|
+
.wui-record-pager-position:empty {
|
|
21
|
+
display: none;
|
|
22
|
+
}
|
|
23
|
+
// The <wui-record-pager> element finds its controls by these classes (J presses next, K previous).
|
|
24
|
+
.wui-record-pager-prev,
|
|
25
|
+
.wui-record-pager-next {
|
|
26
|
+
flex: none;
|
|
27
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
// ── Relative time ──
|
|
2
|
+
// AppRelativeTime / <app-relative-time> (a <wui-relative-time> element): "5 minutes ago" with the
|
|
3
|
+
// exact IST time as the tooltip.
|
|
4
|
+
//
|
|
5
|
+
// Part of the wui-components layer, see _wui-components.scss for load order.
|
|
6
|
+
|
|
7
|
+
.wui-relative-time {
|
|
8
|
+
white-space: nowrap;
|
|
9
|
+
font-variant-numeric: tabular-nums;
|
|
10
|
+
}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
// ── Resizable panels ──
|
|
2
|
+
// AppResizable / <app-resizable> (a <wui-resizable> element): panels side by side or stacked with a
|
|
3
|
+
// handle between each pair. The element writes each panel's `flex` (a share of the room the panels
|
|
4
|
+
// split) and the handle's aria-value*; the handle is a thin line with a wider invisible hit area so a
|
|
5
|
+
// finger can find it. `direction="vertical"` stacks the panels and needs a height: set
|
|
6
|
+
// `--wui-resizable-height` on the group, or give its parent one.
|
|
7
|
+
//
|
|
8
|
+
// Part of the wui-components layer, see _wui-components.scss for load order.
|
|
9
|
+
|
|
10
|
+
.wui-resizable {
|
|
11
|
+
display: flex;
|
|
12
|
+
flex-direction: row;
|
|
13
|
+
width: 100%;
|
|
14
|
+
height: var(--wui-resizable-height, auto);
|
|
15
|
+
min-width: 0;
|
|
16
|
+
min-height: 0;
|
|
17
|
+
}
|
|
18
|
+
.wui-resizable[direction="vertical"] {
|
|
19
|
+
flex-direction: column;
|
|
20
|
+
height: var(--wui-resizable-height, 100%);
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
.wui-resizable-panel {
|
|
24
|
+
flex: 1 1 0;
|
|
25
|
+
min-width: 0;
|
|
26
|
+
min-height: 0;
|
|
27
|
+
overflow: auto;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
.wui-resizable-handle {
|
|
31
|
+
position: relative;
|
|
32
|
+
flex: none;
|
|
33
|
+
width: 9px;
|
|
34
|
+
cursor: col-resize;
|
|
35
|
+
touch-action: none;
|
|
36
|
+
user-select: none;
|
|
37
|
+
outline: none;
|
|
38
|
+
}
|
|
39
|
+
.wui-resizable[direction="vertical"] > .wui-resizable-handle {
|
|
40
|
+
width: auto;
|
|
41
|
+
height: 9px;
|
|
42
|
+
cursor: row-resize;
|
|
43
|
+
}
|
|
44
|
+
// The visible line, centred in the handle.
|
|
45
|
+
.wui-resizable-handle::after {
|
|
46
|
+
content: "";
|
|
47
|
+
position: absolute;
|
|
48
|
+
inset-block: 0;
|
|
49
|
+
inset-inline: 4px;
|
|
50
|
+
background: var(--color-border);
|
|
51
|
+
border-radius: 2px;
|
|
52
|
+
}
|
|
53
|
+
.wui-resizable[direction="vertical"] > .wui-resizable-handle::after {
|
|
54
|
+
inset-block: 4px;
|
|
55
|
+
inset-inline: 0;
|
|
56
|
+
}
|
|
57
|
+
// A wider hit area for touch than the line shows.
|
|
58
|
+
.wui-resizable-handle::before {
|
|
59
|
+
content: "";
|
|
60
|
+
position: absolute;
|
|
61
|
+
inset-block: 0;
|
|
62
|
+
inset-inline: -6px;
|
|
63
|
+
}
|
|
64
|
+
.wui-resizable[direction="vertical"] > .wui-resizable-handle::before {
|
|
65
|
+
inset-block: -6px;
|
|
66
|
+
inset-inline: 0;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
.wui-resizable-handle:hover::after,
|
|
70
|
+
.wui-resizable-handle.is-active::after {
|
|
71
|
+
background: var(--color-primary);
|
|
72
|
+
}
|
|
73
|
+
.wui-resizable-handle:focus-visible::after {
|
|
74
|
+
background: var(--color-primary);
|
|
75
|
+
outline: var(--wui-focus-ring-width) solid var(--color-focus-ring);
|
|
76
|
+
outline-offset: var(--wui-focus-ring-offset);
|
|
77
|
+
}
|
|
78
|
+
.wui-resizable-handle:focus-visible {
|
|
79
|
+
z-index: 1;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
// While dragging, the whole group keeps the resize cursor and text under the pointer is not selected.
|
|
83
|
+
.wui-resizable.is-dragging {
|
|
84
|
+
cursor: col-resize;
|
|
85
|
+
user-select: none;
|
|
86
|
+
}
|
|
87
|
+
.wui-resizable.is-dragging[direction="vertical"] {
|
|
88
|
+
cursor: row-resize;
|
|
89
|
+
}
|
|
90
|
+
.wui-resizable.is-dragging > .wui-resizable-panel {
|
|
91
|
+
pointer-events: none;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
@media (prefers-reduced-motion: no-preference) {
|
|
95
|
+
.wui-resizable-handle::after {
|
|
96
|
+
transition: background-color 120ms var(--wui-ease-ui);
|
|
97
|
+
}
|
|
98
|
+
}
|
package/scss/wui/_rich-text.scss
CHANGED
|
@@ -101,7 +101,7 @@ wui-rich-text[readonly] .wui-rich-text-shell {
|
|
|
101
101
|
color: var(--color-text);
|
|
102
102
|
}
|
|
103
103
|
.wui-rich-text-button:focus-visible {
|
|
104
|
-
outline:
|
|
104
|
+
outline: var(--wui-focus-ring-width) solid var(--color-focus-ring);
|
|
105
105
|
outline-offset: 1px;
|
|
106
106
|
}
|
|
107
107
|
.wui-rich-text-button:disabled {
|
|
@@ -177,7 +177,7 @@ wui-rich-text[readonly] .wui-rich-text-shell {
|
|
|
177
177
|
.wui-rich-text-link-apply:focus-visible,
|
|
178
178
|
.wui-rich-text-link-remove:focus-visible,
|
|
179
179
|
.wui-rich-text-link-cancel:focus-visible {
|
|
180
|
-
outline:
|
|
180
|
+
outline: var(--wui-focus-ring-width) solid var(--color-focus-ring);
|
|
181
181
|
outline-offset: 1px;
|
|
182
182
|
}
|
|
183
183
|
.wui-rich-text-link-error {
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
// ── Rolling number ──
|
|
2
|
+
// AppRollingNumber / <app-rolling-number> (a <wui-rolling-number> element): a figure whose digits
|
|
3
|
+
// roll to a new value. The element draws one reel (digits 0 to 9, stacked) per digit in the
|
|
4
|
+
// aria-hidden roll and moves it with --wui-roll-digit; the plain text beside it is what a screen
|
|
5
|
+
// reader reads, shown on its own until the element is ready or when motion is reduced.
|
|
6
|
+
//
|
|
7
|
+
// Part of the wui-components layer, see _wui-components.scss for load order.
|
|
8
|
+
|
|
9
|
+
$wui-roll-cell: 1.2em;
|
|
10
|
+
|
|
11
|
+
.wui-rolling-number {
|
|
12
|
+
position: relative;
|
|
13
|
+
display: inline-block;
|
|
14
|
+
vertical-align: bottom;
|
|
15
|
+
line-height: $wui-roll-cell;
|
|
16
|
+
font-variant-numeric: tabular-nums;
|
|
17
|
+
white-space: nowrap;
|
|
18
|
+
}
|
|
19
|
+
.wui-rolling-number-roll {
|
|
20
|
+
display: none;
|
|
21
|
+
}
|
|
22
|
+
.wui-rolling-number[data-ready] > .wui-rolling-number-roll {
|
|
23
|
+
display: inline-flex;
|
|
24
|
+
}
|
|
25
|
+
// The text stays for assistive technology while the roll is drawn.
|
|
26
|
+
.wui-rolling-number[data-ready] > .wui-rolling-number-text {
|
|
27
|
+
position: absolute;
|
|
28
|
+
width: 1px;
|
|
29
|
+
height: 1px;
|
|
30
|
+
margin: -1px;
|
|
31
|
+
padding: 0;
|
|
32
|
+
overflow: hidden;
|
|
33
|
+
clip-path: inset(50%);
|
|
34
|
+
white-space: nowrap;
|
|
35
|
+
}
|
|
36
|
+
.wui-rolling-number-char {
|
|
37
|
+
display: inline-block;
|
|
38
|
+
height: $wui-roll-cell;
|
|
39
|
+
}
|
|
40
|
+
.wui-rolling-number-digit {
|
|
41
|
+
display: inline-block;
|
|
42
|
+
height: $wui-roll-cell;
|
|
43
|
+
overflow: hidden;
|
|
44
|
+
}
|
|
45
|
+
.wui-rolling-number-reel {
|
|
46
|
+
display: flex;
|
|
47
|
+
flex-direction: column;
|
|
48
|
+
transform: translateY(calc(var(--wui-roll-digit, 0) * -#{$wui-roll-cell}));
|
|
49
|
+
transition: transform var(--wui-roll-duration, 600ms) var(--wui-ease-out-quart);
|
|
50
|
+
> span {
|
|
51
|
+
display: block;
|
|
52
|
+
height: $wui-roll-cell;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
@media (prefers-reduced-motion: reduce) {
|
|
57
|
+
.wui-rolling-number-reel {
|
|
58
|
+
transition: none;
|
|
59
|
+
}
|
|
60
|
+
}
|