@vectoriox/iox-ui 5.82.2 → 5.83.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/design-core/index.d.ts +200 -0
- package/fesm2022/vectoriox-iox-ui-design-core.mjs +215 -1
- package/fesm2022/vectoriox-iox-ui-design-core.mjs.map +1 -1
- package/fesm2022/vectoriox-iox-ui-forms-core.mjs +733 -56
- package/fesm2022/vectoriox-iox-ui-forms-core.mjs.map +1 -1
- package/fesm2022/vectoriox-iox-ui-generation-core.mjs +40 -4
- package/fesm2022/vectoriox-iox-ui-generation-core.mjs.map +1 -1
- package/fesm2022/vectoriox-iox-ui.mjs +1559 -135
- package/fesm2022/vectoriox-iox-ui.mjs.map +1 -1
- package/forms-core/index.d.ts +366 -18
- package/generation-core/index.d.ts +3 -0
- package/index.d.ts +307 -25
- package/package.json +1 -1
- package/src/design-core/contrast-audit.ts +4 -0
- package/src/design-core/flavor-spec.generated.ts +209 -1
- package/src/forms-core/channel.ts +85 -0
- package/src/forms-core/collect.ts +63 -30
- package/src/forms-core/dates.ts +299 -0
- package/src/forms-core/field-markup.ts +159 -0
- package/src/forms-core/form-presets.ts +51 -2
- package/src/forms-core/form.model.ts +34 -2
- package/src/forms-core/messages.ts +31 -0
- package/src/forms-core/public-api.ts +3 -0
- package/src/forms-core/rule-catalog.ts +3 -2
- package/src/forms-core/submit-lifecycle.ts +42 -12
- package/src/forms-core/validate.ts +90 -4
- package/src/generation-core/audit-site.ts +9 -1
- package/src/generation-core/compose-site.ts +22 -3
- package/src/generation-core/node-baselines.generated.ts +10 -0
- package/src/generation-core/plan-wire.ts +2 -2
- package/styles/iox-design.css +10 -0
- package/styles/iox-forms.css +358 -10
package/styles/iox-forms.css
CHANGED
|
@@ -33,10 +33,27 @@
|
|
|
33
33
|
|
|
34
34
|
/* A submitted form hides its inputs: the success message REPLACES them, rather than sitting under a
|
|
35
35
|
form the visitor might fill in and send a second time. An error leaves them alone — the visitor
|
|
36
|
-
has to be able to fix and retry.
|
|
36
|
+
has to be able to fix and retry. The submit button STAYS (premium N2: it reads "Sent" with its check,
|
|
37
|
+
disabled — the success in place), and so does the row holding it or the second channel (the WhatsApp
|
|
38
|
+
button beside Send is how a visitor reaches you AFTER sending too). */
|
|
37
39
|
.iox-form[data-iox-state="success"] .iox-field,
|
|
38
|
-
.iox-form[data-iox-state="success"] .iox-field-group,
|
|
39
|
-
|
|
40
|
+
.iox-form[data-iox-state="success"] .iox-field-group:not(:has(.iox-submit, .iox-role-form-channel)) { display: none !important; }
|
|
41
|
+
|
|
42
|
+
/* The Success and Error blocks ENTER (premium N2 — Emil 139/30): opacity and a 4px rise over 200ms, out in 120ms,
|
|
43
|
+
transitions (a fast retry interrupts from the live value, never a restart). `display` is discrete, so the exit
|
|
44
|
+
keeps the block in the flow until it has faded. Reduced motion: opacity only. */
|
|
45
|
+
.iox-form-success,
|
|
46
|
+
.iox-form-error {
|
|
47
|
+
transition: opacity 120ms cubic-bezier(0.23, 1, 0.32, 1), translate 120ms cubic-bezier(0.23, 1, 0.32, 1), display 120ms allow-discrete;
|
|
48
|
+
}
|
|
49
|
+
.iox-form:not([data-iox-state="success"]) .iox-form-success,
|
|
50
|
+
.iox-form:not([data-iox-state="error"]) .iox-form-error { opacity: 0; translate: 0 4px; }
|
|
51
|
+
.iox-form[data-iox-state="success"] .iox-form-success,
|
|
52
|
+
.iox-form[data-iox-state="error"] .iox-form-error { transition-duration: 200ms; }
|
|
53
|
+
@starting-style {
|
|
54
|
+
.iox-form[data-iox-state="success"] .iox-form-success,
|
|
55
|
+
.iox-form[data-iox-state="error"] .iox-form-error { opacity: 0; translate: 0 4px; }
|
|
56
|
+
}
|
|
40
57
|
|
|
41
58
|
/* Structural base styles, shared by the string-rendered markup and both component paths. */
|
|
42
59
|
.iox-form { box-sizing: border-box; }
|
|
@@ -49,16 +66,230 @@
|
|
|
49
66
|
.iox-field__error { margin: 4px 0 0; }
|
|
50
67
|
.iox-submit { font: inherit; border: none; cursor: pointer; }
|
|
51
68
|
|
|
52
|
-
/*
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
69
|
+
/* ── Choices (premium N1): a fieldset whose legend is the label; chips or the look's radio / checkbox rows ── */
|
|
70
|
+
.iox-field__choices { border: 0; margin: 0; padding: 0; min-inline-size: 0; }
|
|
71
|
+
.iox-field__choices > legend { padding: 0; }
|
|
72
|
+
.iox-field__chips { display: flex; flex-wrap: wrap; gap: 8px; }
|
|
73
|
+
/* A chip IS the label of its native input: tapped anywhere, it toggles; arrow keys move between one-answer chips
|
|
74
|
+
(a radio group) with no script. 44px tall (Apple's target — M2), never selectable as text (M8), the input inside
|
|
75
|
+
visually hidden, never removed (it carries the value, the keyboard and the screen reader). Its colours change by
|
|
76
|
+
TRANSITIONS on the properties that change (Emil 52/137 — never keyframes, never the catch-all `all`). */
|
|
77
|
+
.iox-field__chip {
|
|
78
|
+
position: relative;
|
|
79
|
+
display: inline-flex;
|
|
80
|
+
align-items: center;
|
|
81
|
+
min-block-size: 44px;
|
|
82
|
+
box-sizing: border-box;
|
|
83
|
+
cursor: pointer;
|
|
84
|
+
-webkit-user-select: none;
|
|
85
|
+
user-select: none;
|
|
86
|
+
-webkit-tap-highlight-color: transparent;
|
|
87
|
+
padding: 6px 14px;
|
|
88
|
+
border: 1px solid #c9c4bf;
|
|
89
|
+
border-radius: 999px;
|
|
90
|
+
color: #1f1d1b;
|
|
91
|
+
transition: background-color 150ms cubic-bezier(0.23, 1, 0.32, 1), border-color 150ms cubic-bezier(0.23, 1, 0.32, 1), color 150ms cubic-bezier(0.23, 1, 0.32, 1), transform 120ms cubic-bezier(0.23, 1, 0.32, 1);
|
|
92
|
+
}
|
|
93
|
+
.iox-field__chip:has(:checked) { background-color: #1f1d1b; border-color: #1f1d1b; color: #ffffff; }
|
|
94
|
+
.iox-field__chip:has(:focus-visible) { outline: 2px solid #1f1d1b; outline-offset: 2px; }
|
|
95
|
+
.iox-field__chip:has(:disabled) { opacity: 0.55; cursor: not-allowed; }
|
|
96
|
+
/* Press on pointer-down (Emil 84/85, G7). */
|
|
97
|
+
.iox-field__chip:active:not(:has(:disabled)) { transform: scale(0.97); }
|
|
98
|
+
@media (hover: hover) and (pointer: fine) {
|
|
99
|
+
.iox-field__chip:hover:not(:has(:checked)) { border-color: #1f1d1b; }
|
|
100
|
+
}
|
|
101
|
+
.iox-field__control.iox-field__control--chip {
|
|
102
|
+
position: absolute;
|
|
103
|
+
inset: 0;
|
|
104
|
+
inline-size: 100%;
|
|
105
|
+
block-size: 100%;
|
|
106
|
+
margin: 0;
|
|
107
|
+
opacity: 0;
|
|
108
|
+
cursor: pointer;
|
|
109
|
+
appearance: none;
|
|
110
|
+
-webkit-appearance: none;
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
/* ── Date (premium N8): the field is a BUTTON saying the date in words; the browser's date box is never shown (it
|
|
114
|
+
cannot take the look — its icon was black on a dark flavor — and on an iPhone it is an empty box until tapped). ── */
|
|
115
|
+
/* As wide as a text box beside it (the browser's own ~20 characters), wider for longer words — never the whole row
|
|
116
|
+
while its neighbours are not; an author's part width still wins (the node's rule out-specifies this one). */
|
|
117
|
+
.iox-field__control--date {
|
|
118
|
+
display: inline-flex;
|
|
119
|
+
align-items: center;
|
|
120
|
+
justify-content: space-between;
|
|
121
|
+
gap: 10px;
|
|
122
|
+
min-inline-size: 15em;
|
|
123
|
+
max-inline-size: 100%;
|
|
124
|
+
text-align: start;
|
|
125
|
+
cursor: pointer;
|
|
126
|
+
-webkit-tap-highlight-color: transparent;
|
|
127
|
+
}
|
|
128
|
+
.iox-field__date-value { min-inline-size: 0; overflow-wrap: anywhere; }
|
|
129
|
+
.iox-field__date-value[data-iox-empty] { color: #6b6661; }
|
|
130
|
+
.iox-field__date-icon { flex: none; }
|
|
131
|
+
|
|
132
|
+
/* ── The calendar (N8). Its sizes are here; its colours are the look's (the contract's `calendar` and `calendar-day`,
|
|
133
|
+
below the marker) — these literals only dress a Field saved before element styles. Six rows always: the panel never
|
|
134
|
+
changes size between months, and changing month is instant (no motion on rapid UI — Emil 2/65). ── */
|
|
135
|
+
.iox-cal {
|
|
136
|
+
box-sizing: border-box;
|
|
137
|
+
inline-size: 328px;
|
|
138
|
+
max-inline-size: calc(100vw - 24px);
|
|
139
|
+
padding: 14px;
|
|
140
|
+
color: #1f1d1b;
|
|
141
|
+
background: #ffffff;
|
|
142
|
+
border: 0;
|
|
143
|
+
border-radius: 16px;
|
|
144
|
+
box-shadow: 0 10px 30px rgba(0, 0, 0, 0.18), 0 0 0 1px rgba(0, 0, 0, 0.08);
|
|
145
|
+
overscroll-behavior: contain;
|
|
146
|
+
}
|
|
147
|
+
.iox-cal:focus { outline: none; }
|
|
148
|
+
.iox-cal[data-iox-cal-design] { margin-block-start: 8px; }
|
|
149
|
+
.iox-cal__grab { display: none; }
|
|
150
|
+
.iox-cal__head { display: flex; align-items: center; justify-content: space-between; gap: 8px; margin: 0 2px 6px; }
|
|
151
|
+
.iox-cal__title { margin: 0; font-size: 1.125em; line-height: 1.2; font-weight: 600; }
|
|
152
|
+
.iox-cal__nav { display: flex; gap: 2px; }
|
|
153
|
+
.iox-cal__nav button {
|
|
154
|
+
display: inline-flex;
|
|
155
|
+
align-items: center;
|
|
156
|
+
justify-content: center;
|
|
157
|
+
inline-size: 40px;
|
|
158
|
+
block-size: 40px;
|
|
159
|
+
padding: 0;
|
|
160
|
+
border: 0;
|
|
161
|
+
border-radius: 999px;
|
|
162
|
+
background: transparent;
|
|
163
|
+
color: inherit;
|
|
164
|
+
font: inherit;
|
|
165
|
+
cursor: pointer;
|
|
166
|
+
-webkit-tap-highlight-color: transparent;
|
|
167
|
+
transition: background-color 120ms cubic-bezier(0.23, 1, 0.32, 1), transform 120ms cubic-bezier(0.23, 1, 0.32, 1), opacity 120ms cubic-bezier(0.23, 1, 0.32, 1);
|
|
168
|
+
}
|
|
169
|
+
.iox-cal__nav button:disabled { opacity: 0.35; cursor: default; }
|
|
170
|
+
.iox-cal__nav button:not(:disabled):active { transform: scale(0.97); }
|
|
171
|
+
[dir='rtl'] .iox-cal__nav svg, .iox-cal[dir='rtl'] .iox-cal__nav svg { transform: scaleX(-1); }
|
|
172
|
+
.iox-cal__grid { inline-size: 100%; border-collapse: collapse; table-layout: fixed; }
|
|
173
|
+
.iox-cal__weekday { padding: 6px 0; text-align: center; font-size: 0.75em; font-weight: 500; color: #6b6661; }
|
|
174
|
+
.iox-cal__cell { padding: 2px; text-align: center; }
|
|
175
|
+
.iox-cal__day {
|
|
176
|
+
display: inline-flex;
|
|
177
|
+
align-items: center;
|
|
178
|
+
justify-content: center;
|
|
179
|
+
inline-size: 100%;
|
|
180
|
+
max-inline-size: 42px;
|
|
181
|
+
block-size: 40px;
|
|
182
|
+
padding: 0;
|
|
183
|
+
border: 0;
|
|
184
|
+
border-radius: 999px;
|
|
185
|
+
background: transparent;
|
|
186
|
+
color: inherit;
|
|
187
|
+
font: inherit;
|
|
188
|
+
font-variant-numeric: tabular-nums;
|
|
189
|
+
cursor: pointer;
|
|
190
|
+
-webkit-tap-highlight-color: transparent;
|
|
191
|
+
-webkit-user-select: none;
|
|
192
|
+
user-select: none;
|
|
193
|
+
transition: background-color 120ms cubic-bezier(0.23, 1, 0.32, 1), color 120ms cubic-bezier(0.23, 1, 0.32, 1), transform 120ms cubic-bezier(0.23, 1, 0.32, 1);
|
|
194
|
+
}
|
|
195
|
+
.iox-cal__day[aria-current="date"] { box-shadow: inset 0 0 0 1px #8a847e; }
|
|
196
|
+
.iox-cal__cell[aria-selected="true"] > .iox-cal__day { background: #1f1d1b; color: #ffffff; box-shadow: none; }
|
|
197
|
+
.iox-cal__day[aria-disabled="true"] { opacity: 0.4; cursor: default; }
|
|
198
|
+
.iox-cal__day:not([aria-disabled="true"]):active { transform: scale(0.97); }
|
|
199
|
+
.iox-cal__day:focus-visible, .iox-cal__nav button:focus-visible { outline: 2px solid #1f1d1b; outline-offset: 2px; }
|
|
200
|
+
@media (hover: hover) and (pointer: fine) {
|
|
201
|
+
.iox-cal__cell:not([aria-selected="true"]) > .iox-cal__day:not([aria-disabled="true"]):hover,
|
|
202
|
+
.iox-cal__nav button:not(:disabled):hover { background: rgba(0, 0, 0, 0.06); }
|
|
203
|
+
}
|
|
204
|
+
/* LIVE, on a laptop: a popover under the field (placeFloating writes top / left / transform-origin), growing from it —
|
|
205
|
+
scale .96 → 1 with the fade over 160ms, out in 120ms (Emil 123/30/47); the backdrop is clear. */
|
|
206
|
+
dialog.iox-cal {
|
|
207
|
+
position: fixed;
|
|
208
|
+
inset: auto;
|
|
209
|
+
margin: 0;
|
|
210
|
+
transition: opacity 160ms cubic-bezier(0.23, 1, 0.32, 1), transform 160ms cubic-bezier(0.23, 1, 0.32, 1);
|
|
211
|
+
}
|
|
212
|
+
@starting-style { dialog.iox-cal[open] { opacity: 0; transform: scale(0.96); } }
|
|
213
|
+
dialog.iox-cal[data-iox-closing] { opacity: 0; transform: scale(0.96); transition-duration: 120ms; }
|
|
214
|
+
dialog.iox-cal::backdrop { background: transparent; }
|
|
215
|
+
/* On a phone: a bottom sheet on the drawer curve (Emil 107 — 500ms in, 280ms out), the page dimmed behind it, the
|
|
216
|
+
home indicator's safe area kept (M7), 44px targets (M2). */
|
|
217
|
+
@media (max-width: 767px) {
|
|
218
|
+
dialog.iox-cal {
|
|
219
|
+
inset: auto 0 0 0;
|
|
220
|
+
inline-size: 100%;
|
|
221
|
+
max-inline-size: none;
|
|
222
|
+
border-end-start-radius: 0;
|
|
223
|
+
border-end-end-radius: 0;
|
|
224
|
+
padding: 10px 16px calc(16px + env(safe-area-inset-bottom, 0px));
|
|
225
|
+
transform: none;
|
|
226
|
+
transition: transform 500ms cubic-bezier(0.32, 0.72, 0, 1);
|
|
227
|
+
}
|
|
228
|
+
@starting-style { dialog.iox-cal[open] { opacity: 1; transform: translateY(100%); } }
|
|
229
|
+
dialog.iox-cal[data-iox-closing] { opacity: 1; transform: translateY(100%); transition-duration: 280ms; transition-timing-function: cubic-bezier(0.23, 1, 0.32, 1); }
|
|
230
|
+
dialog.iox-cal::backdrop { background: rgba(0, 0, 0, 0.45); transition: opacity 500ms cubic-bezier(0.32, 0.72, 0, 1); }
|
|
231
|
+
@starting-style { dialog.iox-cal[open]::backdrop { opacity: 0; } }
|
|
232
|
+
dialog.iox-cal[data-iox-closing]::backdrop { opacity: 0; transition-duration: 280ms; }
|
|
233
|
+
.iox-cal__grab { display: block; inline-size: 36px; block-size: 4px; border-radius: 999px; background: #c9c4bf; margin: 0 auto 12px; }
|
|
234
|
+
.iox-cal__day { max-inline-size: 48px; block-size: 44px; }
|
|
235
|
+
.iox-cal__nav button { inline-size: 44px; block-size: 44px; }
|
|
236
|
+
}
|
|
237
|
+
/* Reduced motion: it fades — gentler, not zero (Emil 192); nothing scales or slides. */
|
|
238
|
+
@media (prefers-reduced-motion: reduce) {
|
|
239
|
+
dialog.iox-cal, dialog.iox-cal[data-iox-closing] { transform: none !important; transition: opacity 160ms cubic-bezier(0.23, 1, 0.32, 1); }
|
|
240
|
+
@starting-style { dialog.iox-cal[open] { opacity: 0; transform: none; } }
|
|
241
|
+
dialog.iox-cal[data-iox-closing] { opacity: 0; transition-duration: 120ms; }
|
|
242
|
+
}
|
|
243
|
+
/* Opened from the KEYBOARD (Enter / Space on the date button): it simply appears, and Esc or Enter on a day closes it
|
|
244
|
+
at once — keyboard-initiated actions never animate (Emil 2). The pointer gets the motion above. */
|
|
245
|
+
dialog.iox-cal[data-iox-instant],
|
|
246
|
+
dialog.iox-cal[data-iox-instant]::backdrop { transition: none !important; }
|
|
247
|
+
|
|
248
|
+
/* The submit button follows its FORM's state (vectoriox/iox-ui#42, premium N2). Its three labels (forms-core
|
|
249
|
+
submitButtonLabelsHtml / IoxSubmitButtonComponent) share one grid cell, so the button keeps the longest one's width
|
|
250
|
+
and never jumps; the form's data-iox-state picks the one that shows — the canvas's states, the component path and
|
|
251
|
+
the string path alike. The swap is an in-place CROSSFADE masked by a 2px blur (Emil 87/139): the label that comes
|
|
252
|
+
in takes 160ms, the one that leaves 120ms (exits faster — Emil 30), both ease-out (Emil 18). Transitions, not
|
|
253
|
+
keyframes: a quick second submit turns from the live value (Emil 52). `visibility` follows so a hidden label leaves
|
|
254
|
+
the accessible name. Busy and disabled are written by syncSubmitButtons. */
|
|
57
255
|
.iox-submit__labels { display: inline-grid; }
|
|
58
256
|
.iox-submit__labels > * { grid-area: 1 / 1; }
|
|
59
|
-
.iox-
|
|
60
|
-
|
|
257
|
+
.iox-submit__labels > * {
|
|
258
|
+
display: inline-flex;
|
|
259
|
+
align-items: center;
|
|
260
|
+
justify-content: center;
|
|
261
|
+
gap: 0.4em;
|
|
262
|
+
transition: opacity 120ms cubic-bezier(0.23, 1, 0.32, 1), filter 120ms cubic-bezier(0.23, 1, 0.32, 1), visibility 0s linear 120ms;
|
|
263
|
+
}
|
|
264
|
+
.iox-submit__busy,
|
|
265
|
+
.iox-submit__sent,
|
|
266
|
+
.iox-form[data-iox-state="submitting"] .iox-submit__idle,
|
|
267
|
+
.iox-form[data-iox-state="success"] .iox-submit__idle { visibility: hidden; opacity: 0; filter: blur(2px); }
|
|
268
|
+
.iox-form[data-iox-state="submitting"] .iox-submit__busy,
|
|
269
|
+
.iox-form[data-iox-state="success"] .iox-submit__sent {
|
|
270
|
+
visibility: visible;
|
|
271
|
+
opacity: 1;
|
|
272
|
+
filter: none;
|
|
273
|
+
transition: opacity 160ms cubic-bezier(0.23, 1, 0.32, 1), filter 160ms cubic-bezier(0.23, 1, 0.32, 1), visibility 0s;
|
|
274
|
+
}
|
|
61
275
|
.iox-submit[aria-busy="true"] { cursor: progress; }
|
|
276
|
+
/* Sent is final: the button stays as the confirmation, and no longer says it can be pressed. */
|
|
277
|
+
.iox-form[data-iox-state="success"] .iox-submit { cursor: default; }
|
|
278
|
+
/* Sent draws its check ONCE (the rare-tier beat — Emil 135/136: stroke-dashoffset over 400ms on the check-draw
|
|
279
|
+
curve), a beat after the label arrives. Leaving Sent resets it at once, so the next success draws it again. */
|
|
280
|
+
.iox-submit__check { flex: none; }
|
|
281
|
+
.iox-submit__check path { stroke-dasharray: 100; stroke-dashoffset: 100; transition: stroke-dashoffset 0s; }
|
|
282
|
+
.iox-form[data-iox-state="success"] .iox-submit__check path {
|
|
283
|
+
stroke-dashoffset: 0;
|
|
284
|
+
transition: stroke-dashoffset 400ms cubic-bezier(0.645, 0.045, 0.355, 1) 80ms;
|
|
285
|
+
}
|
|
286
|
+
/* Reduced motion: gentler, not zero (Emil 192) — the labels still cross by opacity, without the blur; the check is
|
|
287
|
+
simply there; the blocks fade without rising. */
|
|
288
|
+
@media (prefers-reduced-motion: reduce) {
|
|
289
|
+
.iox-submit__labels > * { filter: none !important; }
|
|
290
|
+
.iox-submit__check path { stroke-dashoffset: 0; transition: none !important; }
|
|
291
|
+
.iox-form-success, .iox-form-error { translate: none !important; }
|
|
292
|
+
}
|
|
62
293
|
|
|
63
294
|
/* The honeypot and the failure announcer (forms-core `formChromeHtml`, IoxFormComponent's template): off-screen
|
|
64
295
|
rather than display:none — some bots skip hidden inputs, and a live region must stay in the tree. */
|
|
@@ -314,3 +545,120 @@
|
|
|
314
545
|
.iox-es-field .iox-field__control--switch:checked {
|
|
315
546
|
background: var(--iox-accent-text);
|
|
316
547
|
}
|
|
548
|
+
|
|
549
|
+
/* ── Premium M3, under the field marker: a Choices field's chips wear the `chip` element style (N1); a Date's words,
|
|
550
|
+
glyph and open box, its calendar the `calendar` style and every day `calendar-day` (N8). These rules ARE the
|
|
551
|
+
contract's fieldClassBaseline entries, verbatim (generated from the element styles by build-spec.mjs; pinned by
|
|
552
|
+
token-names.spec). Hover is gated to hover devices (G1). ── */
|
|
553
|
+
.iox-es-field .iox-field__chip {
|
|
554
|
+
background-color: transparent;
|
|
555
|
+
color: var(--iox-text);
|
|
556
|
+
border-style: solid;
|
|
557
|
+
border-width: var(--iox-border-width);
|
|
558
|
+
border-color: var(--iox-chip-border);
|
|
559
|
+
border-radius: var(--iox-badge-radius);
|
|
560
|
+
padding: var(--iox-badge-pad);
|
|
561
|
+
font-family: var(--iox-font-label);
|
|
562
|
+
font-size: var(--iox-badge-size);
|
|
563
|
+
font-weight: var(--iox-weight-label);
|
|
564
|
+
transition: border-color var(--iox-dur-fast) var(--iox-ease-standard), background-color var(--iox-dur-fast) var(--iox-ease-standard), color var(--iox-dur-fast) var(--iox-ease-standard), box-shadow var(--iox-dur-fast) var(--iox-ease-standard), opacity var(--iox-dur-fast) var(--iox-ease-standard), transform var(--iox-dur-fast) var(--iox-ease-standard);
|
|
565
|
+
}
|
|
566
|
+
.iox-es-field .iox-field__chip:active:not(:has(:disabled)) {
|
|
567
|
+
transform: scale(var(--iox-press-scale));
|
|
568
|
+
}
|
|
569
|
+
@media (hover: hover) and (pointer: fine) {
|
|
570
|
+
.iox-es-field .iox-field__chip:hover:not(:has(:disabled)) {
|
|
571
|
+
border-color: var(--iox-text);
|
|
572
|
+
}
|
|
573
|
+
}
|
|
574
|
+
.iox-es-field .iox-field__chip:has(:checked) {
|
|
575
|
+
background-color: var(--iox-accent-text);
|
|
576
|
+
color: var(--iox-bg);
|
|
577
|
+
border-color: var(--iox-accent-text);
|
|
578
|
+
}
|
|
579
|
+
.iox-es-field .iox-field__chip:has(:focus-visible) {
|
|
580
|
+
box-shadow: var(--iox-focus-ring);
|
|
581
|
+
outline: 2px solid transparent;
|
|
582
|
+
outline-offset: 2px;
|
|
583
|
+
}
|
|
584
|
+
.iox-es-field .iox-field__chip:has(:disabled) {
|
|
585
|
+
opacity: 0.55;
|
|
586
|
+
}
|
|
587
|
+
.iox-es-field .iox-field__date-value[data-iox-empty] {
|
|
588
|
+
color: var(--iox-text-muted);
|
|
589
|
+
}
|
|
590
|
+
.iox-es-field .iox-field__date-icon {
|
|
591
|
+
color: var(--iox-text-muted);
|
|
592
|
+
}
|
|
593
|
+
.iox-es-field .iox-field__control--date[aria-expanded='true'] {
|
|
594
|
+
border-color: var(--iox-accent-text);
|
|
595
|
+
box-shadow: var(--iox-field-focus);
|
|
596
|
+
}
|
|
597
|
+
.iox-es-field .iox-cal {
|
|
598
|
+
background-color: var(--iox-surface);
|
|
599
|
+
color: var(--iox-text);
|
|
600
|
+
border-radius: var(--iox-dialog-radius);
|
|
601
|
+
box-shadow: var(--iox-dialog-shadow), 0 0 0 var(--iox-border-width) var(--iox-line);
|
|
602
|
+
font-family: var(--iox-font-body);
|
|
603
|
+
}
|
|
604
|
+
.iox-es-field .iox-cal .iox-cal__title {
|
|
605
|
+
font-family: var(--iox-font-display);
|
|
606
|
+
font-weight: var(--iox-weight-heading);
|
|
607
|
+
color: var(--iox-text);
|
|
608
|
+
}
|
|
609
|
+
.iox-es-field .iox-cal .iox-cal__weekday {
|
|
610
|
+
font-family: var(--iox-font-label);
|
|
611
|
+
font-size: var(--iox-size-label);
|
|
612
|
+
font-weight: var(--iox-weight-label);
|
|
613
|
+
color: var(--iox-text-muted);
|
|
614
|
+
}
|
|
615
|
+
.iox-es-field .iox-cal .iox-cal__grab {
|
|
616
|
+
background: var(--iox-line-strong);
|
|
617
|
+
}
|
|
618
|
+
@media (hover: hover) and (pointer: fine) {
|
|
619
|
+
.iox-es-field .iox-cal .iox-cal__nav button:hover:not(:disabled) {
|
|
620
|
+
background-color: var(--iox-surface-2);
|
|
621
|
+
}
|
|
622
|
+
}
|
|
623
|
+
.iox-es-field .iox-cal .iox-cal__nav button:focus-visible {
|
|
624
|
+
box-shadow: var(--iox-focus-ring);
|
|
625
|
+
outline: 2px solid transparent;
|
|
626
|
+
outline-offset: 2px;
|
|
627
|
+
}
|
|
628
|
+
.iox-es-field .iox-cal .iox-cal__day {
|
|
629
|
+
background-color: transparent;
|
|
630
|
+
color: var(--iox-text);
|
|
631
|
+
border-style: solid;
|
|
632
|
+
border-width: var(--iox-border-width);
|
|
633
|
+
border-color: transparent;
|
|
634
|
+
border-radius: var(--iox-radius-pill);
|
|
635
|
+
font-family: var(--iox-font-body);
|
|
636
|
+
font-size: var(--iox-size-body);
|
|
637
|
+
font-variant-numeric: tabular-nums;
|
|
638
|
+
transition: background-color var(--iox-dur-fast) var(--iox-ease-standard), color var(--iox-dur-fast) var(--iox-ease-standard), border-color var(--iox-dur-fast) var(--iox-ease-standard), box-shadow var(--iox-dur-fast) var(--iox-ease-standard), opacity var(--iox-dur-fast) var(--iox-ease-standard), transform var(--iox-dur-fast) var(--iox-ease-standard);
|
|
639
|
+
}
|
|
640
|
+
.iox-es-field .iox-cal .iox-cal__day:active:not([aria-disabled='true']) {
|
|
641
|
+
transform: scale(var(--iox-press-scale));
|
|
642
|
+
}
|
|
643
|
+
@media (hover: hover) and (pointer: fine) {
|
|
644
|
+
.iox-es-field .iox-cal .iox-cal__day:hover:not([aria-disabled='true']) {
|
|
645
|
+
background-color: var(--iox-surface-2);
|
|
646
|
+
}
|
|
647
|
+
}
|
|
648
|
+
.iox-es-field .iox-cal .iox-cal__day[aria-current='date'] {
|
|
649
|
+
border-color: var(--iox-line-strong);
|
|
650
|
+
}
|
|
651
|
+
.iox-es-field .iox-cal .iox-cal__cell[aria-selected='true'] > .iox-cal__day {
|
|
652
|
+
background-color: var(--iox-accent-text);
|
|
653
|
+
color: var(--iox-bg);
|
|
654
|
+
border-color: var(--iox-accent-text);
|
|
655
|
+
}
|
|
656
|
+
.iox-es-field .iox-cal .iox-cal__day[aria-disabled='true'] {
|
|
657
|
+
color: var(--iox-text-muted);
|
|
658
|
+
opacity: 0.4;
|
|
659
|
+
}
|
|
660
|
+
.iox-es-field .iox-cal .iox-cal__day:focus-visible {
|
|
661
|
+
box-shadow: var(--iox-focus-ring);
|
|
662
|
+
outline: 2px solid transparent;
|
|
663
|
+
outline-offset: 2px;
|
|
664
|
+
}
|