@crisp-ui-kit/crisp 0.56.0 → 0.57.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/dist/accentpicker.css +5 -0
- package/dist/accentpicker.d.ts +7 -0
- package/dist/accentpicker.layered.css +7 -0
- package/dist/avatar.css +1 -1
- package/dist/avatar.layered.css +1 -1
- package/dist/badge.css +2 -2
- package/dist/badge.layered.css +2 -2
- package/dist/button.css +3 -3
- package/dist/button.layered.css +3 -3
- package/dist/callout.css +6 -0
- package/dist/callout.d.ts +2 -2
- package/dist/callout.layered.css +6 -0
- package/dist/cjs/components/accentpicker/accentpicker.js +66 -0
- package/dist/cjs/components/accentpicker/accentpicker.recipe.js +25 -0
- package/dist/cjs/components/accentpicker/index.js +7 -0
- package/dist/cjs/components/avatar/avatar.recipe.js +4 -1
- package/dist/cjs/components/badge/badge.recipe.js +16 -2
- package/dist/cjs/components/button/button.recipe.js +16 -6
- package/dist/cjs/components/callout/callout.js +2 -2
- package/dist/cjs/components/callout/callout.recipe.js +15 -2
- package/dist/cjs/components/input/input.js +2 -2
- package/dist/cjs/components/input/input.recipe.js +14 -0
- package/dist/cjs/components/menu/menu.js +2 -2
- package/dist/cjs/components/menu/menu.recipe.js +8 -0
- package/dist/cjs/components/multiselect/multiselect.js +23 -10
- package/dist/cjs/components/multiselect/multiselect.recipe.js +104 -65
- package/dist/cjs/components/progress/progress.js +21 -4
- package/dist/cjs/components/progress/progress.recipe.js +30 -0
- package/dist/cjs/components/select/listbox-keyboard.js +7 -1
- package/dist/cjs/components/select/select.js +24 -11
- package/dist/cjs/components/select/select.recipe.js +177 -78
- package/dist/cjs/components/tabletoolbar/tabletoolbar.js +3 -3
- package/dist/cjs/components/tabletoolbar/tabletoolbar.recipe.js +26 -1
- package/dist/cjs/components/tabs/tabs.js +63 -4
- package/dist/cjs/components/tabs/tabs.recipe.js +13 -0
- package/dist/cjs/components/text/text.recipe.js +8 -7
- package/dist/cjs/components/textarea/textarea.js +3 -2
- package/dist/cjs/components/textarea/textarea.recipe.js +2 -1
- package/dist/cjs/components/textlink/textlink.js +2 -2
- package/dist/cjs/components/textlink/textlink.recipe.js +24 -3
- package/dist/cjs/index.js +1 -0
- package/dist/cjs/product/recordpage/recordpage.js +61 -7
- package/dist/cjs/tokens/elevation.js +7 -0
- package/dist/cjs/tokens/palette.js +120 -25
- package/dist/cjs/tokens/scale.js +9 -0
- package/dist/cjs/tokens/semantic.js +42 -0
- package/dist/esm/components/accentpicker/accentpicker.js +30 -0
- package/dist/esm/components/accentpicker/accentpicker.recipe.js +22 -0
- package/dist/esm/components/accentpicker/index.js +2 -0
- package/dist/esm/components/avatar/avatar.recipe.js +4 -1
- package/dist/esm/components/badge/badge.recipe.js +16 -2
- package/dist/esm/components/button/button.recipe.js +16 -6
- package/dist/esm/components/callout/callout.js +2 -2
- package/dist/esm/components/callout/callout.recipe.js +15 -2
- package/dist/esm/components/input/input.js +3 -3
- package/dist/esm/components/input/input.recipe.js +14 -0
- package/dist/esm/components/menu/menu.js +2 -2
- package/dist/esm/components/menu/menu.recipe.js +8 -0
- package/dist/esm/components/multiselect/multiselect.js +23 -10
- package/dist/esm/components/multiselect/multiselect.recipe.js +104 -65
- package/dist/esm/components/progress/progress.js +22 -5
- package/dist/esm/components/progress/progress.recipe.js +30 -0
- package/dist/esm/components/select/listbox-keyboard.js +7 -1
- package/dist/esm/components/select/select.js +24 -11
- package/dist/esm/components/select/select.recipe.js +177 -78
- package/dist/esm/components/tabletoolbar/tabletoolbar.js +3 -3
- package/dist/esm/components/tabletoolbar/tabletoolbar.recipe.js +26 -1
- package/dist/esm/components/tabs/tabs.js +63 -4
- package/dist/esm/components/tabs/tabs.recipe.js +13 -0
- package/dist/esm/components/text/text.recipe.js +8 -7
- package/dist/esm/components/textarea/textarea.js +3 -2
- package/dist/esm/components/textarea/textarea.recipe.js +2 -1
- package/dist/esm/components/textlink/textlink.js +2 -2
- package/dist/esm/components/textlink/textlink.recipe.js +24 -3
- package/dist/esm/index.js +1 -0
- package/dist/esm/product/recordpage/recordpage.js +62 -8
- package/dist/esm/tokens/elevation.js +7 -0
- package/dist/esm/tokens/palette.js +120 -25
- package/dist/esm/tokens/scale.js +9 -0
- package/dist/esm/tokens/semantic.js +42 -0
- package/dist/input.css +11 -0
- package/dist/input.d.ts +2 -2
- package/dist/input.layered.css +11 -0
- package/dist/menu.css +8 -0
- package/dist/menu.layered.css +8 -0
- package/dist/multiselect.css +57 -29
- package/dist/multiselect.d.ts +3 -1
- package/dist/multiselect.layered.css +57 -29
- package/dist/native/tokens.d.ts +1 -1
- package/dist/native/tokens.js +82 -28
- package/dist/progress.css +3 -0
- package/dist/progress.layered.css +3 -0
- package/dist/select.css +100 -42
- package/dist/select.d.ts +3 -2
- package/dist/select.layered.css +100 -42
- package/dist/styles.css +268 -93
- package/dist/styles.layered.css +268 -93
- package/dist/tabletoolbar.css +8 -1
- package/dist/tabletoolbar.layered.css +8 -1
- package/dist/tabs.css +6 -0
- package/dist/tabs.layered.css +6 -0
- package/dist/text.css +1 -1
- package/dist/text.layered.css +1 -1
- package/dist/textarea.css +2 -1
- package/dist/textarea.layered.css +2 -1
- package/dist/textlink.css +11 -2
- package/dist/textlink.d.ts +2 -1
- package/dist/textlink.layered.css +11 -2
- package/dist/tokens.css +43 -11
- package/dist/tokens.json +82 -28
- package/dist/types/components/accentpicker/accentpicker.d.ts +23 -0
- package/dist/types/components/accentpicker/accentpicker.recipe.d.ts +3 -0
- package/dist/types/components/accentpicker/index.d.ts +2 -0
- package/dist/types/components/button/button.recipe.d.ts +2 -2
- package/dist/types/components/callout/callout.d.ts +9 -1
- package/dist/types/components/callout/callout.recipe.d.ts +12 -2
- package/dist/types/components/input/input.d.ts +14 -0
- package/dist/types/components/input/input.recipe.d.ts +3 -0
- package/dist/types/components/menu/menu.d.ts +7 -1
- package/dist/types/components/multiselect/multiselect.d.ts +25 -6
- package/dist/types/components/multiselect/multiselect.recipe.d.ts +27 -0
- package/dist/types/components/progress/progress.d.ts +16 -4
- package/dist/types/components/progress/progress.recipe.d.ts +22 -0
- package/dist/types/components/select/listbox-keyboard.d.ts +10 -1
- package/dist/types/components/select/select.d.ts +29 -6
- package/dist/types/components/select/select.recipe.d.ts +25 -10
- package/dist/types/components/tabletoolbar/tabletoolbar.d.ts +14 -0
- package/dist/types/components/tabs/tabs.d.ts +9 -1
- package/dist/types/components/textarea/textarea.d.ts +16 -0
- package/dist/types/components/textlink/textlink.d.ts +8 -1
- package/dist/types/components/textlink/textlink.recipe.d.ts +10 -0
- package/dist/types/index.d.ts +1 -0
- package/dist/types/product/recordpage/recordpage.d.ts +61 -1
- package/dist/types/tokens/contract.d.ts +16 -3
- package/dist/types/tokens/elevation.d.ts +7 -0
- package/dist/types/tokens/palette.d.ts +55 -11
- package/dist/types/tokens/scale.d.ts +6 -0
- package/dist/types/tokens/semantic.d.ts +33 -0
- package/package.json +6 -1
package/dist/styles.layered.css
CHANGED
|
@@ -27,14 +27,16 @@
|
|
|
27
27
|
font-display: swap;
|
|
28
28
|
}
|
|
29
29
|
:root {
|
|
30
|
-
--crisp-bg-brand-solid: #
|
|
31
|
-
--crisp-bg-brand-solid-pressed: #
|
|
30
|
+
--crisp-bg-brand-solid: #0298d9;
|
|
31
|
+
--crisp-bg-brand-solid-pressed: #0283bb;
|
|
32
|
+
--crisp-bg-brand-contrast: #0278ac;
|
|
33
|
+
--crisp-fg-brand-contrast: #0278ac;
|
|
32
34
|
--crisp-fg-on-brand: #ffffff;
|
|
33
35
|
--crisp-fg-on-tone: #101112;
|
|
34
36
|
--crisp-bg-surface: #ffffff;
|
|
35
|
-
--crisp-bg-raised: #
|
|
37
|
+
--crisp-bg-raised: #f7f8f9;
|
|
36
38
|
--crisp-bg-surface-muted: #f6f7f7;
|
|
37
|
-
--crisp-border-default: #
|
|
39
|
+
--crisp-border-default: #dcdee3;
|
|
38
40
|
--crisp-border-subtle: #eeeff1;
|
|
39
41
|
--crisp-border-dropzone: #e6e7ea;
|
|
40
42
|
--crisp-border-divider: #e6e7ea;
|
|
@@ -56,9 +58,9 @@
|
|
|
56
58
|
--crisp-shadow-popover3: rgba(24,41,75,0.16);
|
|
57
59
|
--crisp-fg-primary: #101112;
|
|
58
60
|
--crisp-fg-muted: #71717a;
|
|
59
|
-
--crisp-bg-danger: #
|
|
60
|
-
--crisp-bg-danger-solid: #
|
|
61
|
-
--crisp-fg-danger: #
|
|
61
|
+
--crisp-bg-danger: #fa342c;
|
|
62
|
+
--crisp-bg-danger-solid: #ca1d13;
|
|
63
|
+
--crisp-fg-danger: #fa342c;
|
|
62
64
|
--crisp-stroke-field-focus: #1a1c20;
|
|
63
65
|
--crisp-fg-disabled: #d1d3d8;
|
|
64
66
|
--crisp-bg-neutral-weak: #f3f4f5;
|
|
@@ -67,8 +69,9 @@
|
|
|
67
69
|
--crisp-fg-neutral-subtle: #868b94;
|
|
68
70
|
--crisp-fg-neutral-muted: #555d6d;
|
|
69
71
|
--crisp-stroke-focus-ring: #1e82eb;
|
|
70
|
-
--crisp-bg-success: #
|
|
71
|
-
--crisp-bg-warning: #
|
|
72
|
+
--crisp-bg-success: #079171;
|
|
73
|
+
--crisp-bg-warning: #9b7821;
|
|
74
|
+
--crisp-bg-warning-solid: #fbdc65;
|
|
72
75
|
--crisp-bg-orange: #f97514;
|
|
73
76
|
--crisp-bg-cyan: #00b9eb;
|
|
74
77
|
--crisp-bg-purple: #9b69ff;
|
|
@@ -82,11 +85,23 @@
|
|
|
82
85
|
--crisp-bg-purple-soft: #f5f0ff;
|
|
83
86
|
--crisp-fg-purple-soft: #6238b5;
|
|
84
87
|
--crisp-ring-purple-soft: #e8ddfe;
|
|
88
|
+
--crisp-ring-brand-soft: #d6e5ff;
|
|
89
|
+
--crisp-fg-select-neutral: #1a1c20;
|
|
90
|
+
--crisp-bg-select-listbox: #ffffff;
|
|
91
|
+
--crisp-stroke-select-trigger: #dcdee3;
|
|
92
|
+
--crisp-bg-select-pressed: #00000007;
|
|
93
|
+
--crisp-bg-select-disabled: #f3f4f5;
|
|
94
|
+
--crisp-stroke-select-invalid: #fa342c;
|
|
95
|
+
--crisp-stroke-select-divider: #00000010;
|
|
96
|
+
--crisp-fg-select-placeholder: #b0b3ba;
|
|
97
|
+
--crisp-shadow-select: #0000001f;
|
|
85
98
|
}
|
|
86
99
|
|
|
87
100
|
[data-theme="dark"] {
|
|
88
|
-
--crisp-bg-brand-solid: #
|
|
89
|
-
--crisp-bg-brand-solid-pressed: #
|
|
101
|
+
--crisp-bg-brand-solid: #0298d9;
|
|
102
|
+
--crisp-bg-brand-solid-pressed: #0283bb;
|
|
103
|
+
--crisp-bg-brand-contrast: #0278ac;
|
|
104
|
+
--crisp-fg-brand-contrast: #0278ac;
|
|
90
105
|
--crisp-fg-on-brand: #ffffff;
|
|
91
106
|
--crisp-fg-on-tone: #101112;
|
|
92
107
|
--crisp-bg-surface: #0a0a0a;
|
|
@@ -127,6 +142,7 @@
|
|
|
127
142
|
--crisp-stroke-focus-ring: #5e98fe;
|
|
128
143
|
--crisp-bg-success: #2ea968;
|
|
129
144
|
--crisp-bg-warning: #e0982a;
|
|
145
|
+
--crisp-bg-warning-solid: #e0982a;
|
|
130
146
|
--crisp-bg-orange: #f97514;
|
|
131
147
|
--crisp-bg-cyan: #00b9eb;
|
|
132
148
|
--crisp-bg-purple: #9b69ff;
|
|
@@ -140,6 +156,16 @@
|
|
|
140
156
|
--crisp-bg-purple-soft: #2f1e5a;
|
|
141
157
|
--crisp-fg-purple-soft: #d8c4ff;
|
|
142
158
|
--crisp-ring-purple-soft: #45297d;
|
|
159
|
+
--crisp-ring-brand-soft: #212224;
|
|
160
|
+
--crisp-fg-select-neutral: #f3f4f5;
|
|
161
|
+
--crisp-bg-select-listbox: #1d2025;
|
|
162
|
+
--crisp-stroke-select-trigger: #393d46;
|
|
163
|
+
--crisp-bg-select-pressed: #ffffff0d;
|
|
164
|
+
--crisp-bg-select-disabled: #2b2e35;
|
|
165
|
+
--crisp-stroke-select-invalid: #ff6e60;
|
|
166
|
+
--crisp-stroke-select-divider: #ffffff17;
|
|
167
|
+
--crisp-fg-select-placeholder: #868b94;
|
|
168
|
+
--crisp-shadow-select: #000000cc;
|
|
143
169
|
}
|
|
144
170
|
|
|
145
171
|
:root {
|
|
@@ -154,12 +180,15 @@
|
|
|
154
180
|
--crisp-space-0-5: 2px;
|
|
155
181
|
--crisp-space-1-5: 6px;
|
|
156
182
|
--crisp-space-2-5: 10px;
|
|
183
|
+
--crisp-space-3-5: 14px;
|
|
184
|
+
--crisp-radius-xs: 4px;
|
|
157
185
|
--crisp-radius-chip: 7px;
|
|
158
186
|
--crisp-radius-sm: 6px;
|
|
159
187
|
--crisp-radius-md: 8px;
|
|
160
188
|
--crisp-radius-lg: 9px;
|
|
161
189
|
--crisp-radius-xl: 12px;
|
|
162
190
|
--crisp-radius-2xl: 16px;
|
|
191
|
+
--crisp-radius-3xl: 20px;
|
|
163
192
|
--crisp-radius-full: 999px;
|
|
164
193
|
--crisp-size-icon: 16px;
|
|
165
194
|
--crisp-size-chip: 22px;
|
|
@@ -170,6 +199,9 @@
|
|
|
170
199
|
--crisp-size-header: 48px;
|
|
171
200
|
--crisp-size-calendarCell: 34px;
|
|
172
201
|
--crisp-size-calendarPill: 32px;
|
|
202
|
+
--crisp-size-selectTriggerMd: 40px;
|
|
203
|
+
--crisp-size-selectTriggerLg: 52px;
|
|
204
|
+
--crisp-size-selectIconLg: 20px;
|
|
173
205
|
--crisp-text-xs: 11px;
|
|
174
206
|
--crisp-text-sm: 12px;
|
|
175
207
|
--crisp-text-md: 13px;
|
|
@@ -183,6 +215,12 @@
|
|
|
183
215
|
}
|
|
184
216
|
|
|
185
217
|
@layer crisp-components {
|
|
218
|
+
.crisp-accentpicker {
|
|
219
|
+
display: flex; gap: var(--crisp-space-2);
|
|
220
|
+
& .crisp-accentpicker-swatch { box-sizing: border-box; display: inline-flex; align-items: center; justify-content: center; width: 24px; height: 24px; padding: 0; margin: 0; border-radius: var(--crisp-radius-full); border: 1px solid transparent; background: none; font-family: inherit; cursor: pointer; }
|
|
221
|
+
& .crisp-accentpicker-swatch:focus-visible { outline: 2px solid var(--crisp-bg-brand-solid); outline-offset: 2px; }
|
|
222
|
+
}
|
|
223
|
+
|
|
186
224
|
.crisp-accordion {
|
|
187
225
|
display: flex; flex-direction: column; font-family: var(--crisp-font-sans);
|
|
188
226
|
& .crisp-accordion-item { border-bottom: 1px solid var(--crisp-border-subtle); }
|
|
@@ -231,7 +269,7 @@
|
|
|
231
269
|
background: var(--crisp-bg-raised); color: var(--crisp-fg-neutral-muted); box-shadow: inset 0 0 0 1px var(--crisp-border-default);
|
|
232
270
|
}
|
|
233
271
|
.crisp-avatar--tone_brand {
|
|
234
|
-
background: var(--crisp-bg-brand-
|
|
272
|
+
background: var(--crisp-bg-brand-contrast); color: #fff;
|
|
235
273
|
}
|
|
236
274
|
.crisp-avatar--tone_orange {
|
|
237
275
|
background: var(--crisp-bg-orange); color: #fff;
|
|
@@ -290,13 +328,13 @@
|
|
|
290
328
|
|
|
291
329
|
}
|
|
292
330
|
.crisp-badge--compound_0 {
|
|
293
|
-
background: var(--crisp-bg-brand-
|
|
331
|
+
background: var(--crisp-bg-brand-contrast); color: var(--crisp-fg-on-brand); box-shadow: none;
|
|
294
332
|
}
|
|
295
333
|
.crisp-badge--compound_1 {
|
|
296
334
|
background: var(--crisp-bg-success); color: var(--crisp-fg-on-tone); box-shadow: none;
|
|
297
335
|
}
|
|
298
336
|
.crisp-badge--compound_2 {
|
|
299
|
-
background: var(--crisp-bg-warning); color: var(--crisp-fg-on-tone); box-shadow: none;
|
|
337
|
+
background: var(--crisp-bg-warning-solid); color: var(--crisp-fg-on-tone); box-shadow: none;
|
|
300
338
|
}
|
|
301
339
|
.crisp-badge--compound_3 {
|
|
302
340
|
background: var(--crisp-bg-danger); color: var(--crisp-fg-on-tone); box-shadow: none;
|
|
@@ -371,9 +409,9 @@
|
|
|
371
409
|
&:disabled { opacity: 0.5; cursor: not-allowed; }
|
|
372
410
|
}
|
|
373
411
|
.crisp-button--intent_primary {
|
|
374
|
-
background: var(--crisp-bg-brand-
|
|
375
|
-
&:hover {
|
|
376
|
-
&:active {
|
|
412
|
+
background: var(--crisp-bg-brand-contrast); color: var(--crisp-fg-on-brand); box-shadow: inset 0 0 0 1px rgba(0,0,0,0.06), 0 2px 4px -2px rgba(38,109,240,0.12), 0 3px 6px -2px rgba(38,109,240,0.08);
|
|
413
|
+
&:hover { filter: brightness(0.96); }
|
|
414
|
+
&:active { filter: brightness(0.92); }
|
|
377
415
|
}
|
|
378
416
|
.crisp-button--intent_neutral {
|
|
379
417
|
background: var(--crisp-bg-surface); color: var(--crisp-fg-primary); box-shadow: inset 0 0 0 1px var(--crisp-ring-neutral), 0 0 2px rgba(28,40,64,0.18), 0 1px 3px rgba(0,0,0,0.04);
|
|
@@ -437,6 +475,12 @@
|
|
|
437
475
|
&[data-tone="danger"] { background: color-mix(in srgb, var(--crisp-bg-danger) 10%, transparent); }
|
|
438
476
|
&[data-tone="danger"] .crisp-callout-icon { color: var(--crisp-bg-danger); }
|
|
439
477
|
}
|
|
478
|
+
.crisp-callout--bordered_true {
|
|
479
|
+
border: 1px solid var(--crisp-ring-brand-soft); border-radius: var(--crisp-radius-xl); padding: var(--crisp-space-2) var(--crisp-space-3); background: color-mix(in srgb, var(--crisp-bg-brand-solid) 14%, transparent);
|
|
480
|
+
}
|
|
481
|
+
.crisp-callout--bordered_false {
|
|
482
|
+
|
|
483
|
+
}
|
|
440
484
|
|
|
441
485
|
.crisp-card {
|
|
442
486
|
display: flex; flex-direction: column; box-sizing: border-box; border-radius: var(--crisp-radius-xl); background: var(--crisp-bg-surface); box-shadow: inset 0 0 0 1px var(--crisp-border-subtle); font-family: var(--crisp-font-sans); color: var(--crisp-fg-primary);
|
|
@@ -1355,6 +1399,17 @@
|
|
|
1355
1399
|
& .crisp-input-value::placeholder { color: var(--crisp-fg-muted); }
|
|
1356
1400
|
& .crisp-input-value:disabled { opacity: 0.5; cursor: not-allowed; }
|
|
1357
1401
|
&:has(.crisp-input-value:disabled) { opacity: 1; }
|
|
1402
|
+
/* crisp#634: measured live on Attio's own Settings > Profile read-only
|
|
1403
|
+
primary-email field -- a tinted field, not just muted text, driven off
|
|
1404
|
+
the native `readOnly` attribute. `ringField` (rgba(0,0,0,.06)) is an
|
|
1405
|
+
exact match for the measured ring; the 2%-fgPrimary tint reuses the
|
|
1406
|
+
same color-mix idiom every other soft crisp surface already uses. */
|
|
1407
|
+
&[data-readonly] { background: color-mix(in srgb, var(--crisp-fg-primary) 2%, transparent); box-shadow: inset 0 0 0 1px var(--crisp-ring-field); }
|
|
1408
|
+
& .crisp-input-suffix { flex-shrink: 0; margin-inline-start: var(--crisp-space-1); }
|
|
1409
|
+
}
|
|
1410
|
+
.crisp-input--size_sm {
|
|
1411
|
+
height: var(--crisp-size-row); border-radius: var(--crisp-radius-md);
|
|
1412
|
+
& .crisp-input-value { padding-inline: var(--crisp-space-2-5); }
|
|
1358
1413
|
}
|
|
1359
1414
|
.crisp-input--size_medium {
|
|
1360
1415
|
height: 32px; border-radius: var(--crisp-radius-md);
|
|
@@ -1436,6 +1491,14 @@
|
|
|
1436
1491
|
.crisp-menu-item--danger svg { color: var(--crisp-bg-danger); }
|
|
1437
1492
|
.crisp-menu-item--danger:hover, .crisp-menu-item--danger:focus-visible, .crisp-menu-item--danger[data-highlighted] { background: color-mix(in srgb, var(--crisp-bg-danger) 10%, transparent); }
|
|
1438
1493
|
.crisp-menu-item-label { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; }
|
|
1494
|
+
/* crisp#875: same measured neutral chip TableToolbar's own ToolbarTool
|
|
1495
|
+
count prop uses (re-confirmed on two live Attio surfaces this round:
|
|
1496
|
+
the Sort tool's own "+N" overflow, a Kanban board's stage-column
|
|
1497
|
+
count) -- a small badge, not bare text. */
|
|
1498
|
+
.crisp-menu-item-count { flex-shrink: 0; margin-inline-start: var(--crisp-space-1-5); display: inline-flex; align-items: center; height: 16px; box-sizing: border-box;
|
|
1499
|
+
padding: 0 var(--crisp-space-1); border-radius: var(--crisp-radius-sm); background: color-mix(in srgb, var(--crisp-fg-primary) 4%, transparent);
|
|
1500
|
+
box-shadow: inset 0 0 0 1px var(--crisp-border-subtle); font-size: var(--crisp-text-sm); font-weight: var(--crisp-weight-medium); color: var(--crisp-fg-neutral-soft);
|
|
1501
|
+
font-variant-numeric: tabular-nums; }
|
|
1439
1502
|
.crisp-menu-item-shortcut { flex-shrink: 0; margin-inline-start: var(--crisp-space-3); font-size: var(--crisp-text-sm); color: var(--crisp-fg-muted); letter-spacing: 0.02em; }
|
|
1440
1503
|
.crisp-menu-item-check { flex-shrink: 0; color: var(--crisp-bg-brand-solid); }
|
|
1441
1504
|
.crisp-menu-item-check--placeholder { width: 15px; }
|
|
@@ -1456,38 +1519,42 @@
|
|
|
1456
1519
|
}
|
|
1457
1520
|
|
|
1458
1521
|
|
|
1459
|
-
/* pointer-events: auto (#375)
|
|
1460
|
-
on document.body while open (Zag re-enables it only on layers IT
|
|
1461
|
-
tracks), and the portaled listbox is outside Zag's knowledge -- it
|
|
1462
|
-
inherited the lock, so every option was unclickable, hit-testing
|
|
1463
|
-
right through to whatever real element sat behind it. */
|
|
1522
|
+
/* pointer-events: auto (#375) -- see Select's matching comment. */
|
|
1464
1523
|
.crisp-multiselect-listbox {
|
|
1465
1524
|
font-family: var(--crisp-font-sans); -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale;
|
|
1466
|
-
position: fixed; z-index: 70; pointer-events: auto; box-sizing: border-box; display: flex; flex-direction: column; gap: var(--crisp-space-
|
|
1467
|
-
max-height:
|
|
1468
|
-
border-radius: var(--crisp-radius-
|
|
1469
|
-
box-shadow:
|
|
1470
|
-
transform-origin: top left; opacity: 1; transform: none;
|
|
1525
|
+
position: fixed; z-index: 70; pointer-events: auto; box-sizing: border-box; display: flex; flex-direction: column; gap: var(--crisp-space-2);
|
|
1526
|
+
max-height: 480px; overflow-y: auto; padding: var(--crisp-space-2);
|
|
1527
|
+
border-radius: var(--crisp-radius-3xl); background: var(--crisp-bg-select-listbox);
|
|
1528
|
+
box-shadow: 0 4px 16px var(--crisp-shadow-select);
|
|
1529
|
+
transform-origin: top left; opacity: 1; transform: none;
|
|
1530
|
+
transition: opacity .15s cubic-bezier(0,0,.15,1), transform .15s cubic-bezier(0,0,.15,1);
|
|
1471
1531
|
}
|
|
1472
1532
|
.crisp-multiselect-listbox[data-up] { transform-origin: bottom left; }
|
|
1473
|
-
.crisp-multiselect-listbox { @starting-style { opacity: 0; transform: scale(0.
|
|
1474
|
-
|
|
1533
|
+
.crisp-multiselect-listbox { @starting-style { opacity: 0; transform: scale(0.95); } }
|
|
1534
|
+
/* LOCKED geometry (#481, guarded by build/spec-check.mjs): height 36px,
|
|
1535
|
+
gap space["1.5"] (6px), no border-bottom -- an Attio measurement, not
|
|
1536
|
+
part of this seed-parity pass. Only colours below follow Select. */
|
|
1537
|
+
.crisp-multiselect-search { display: flex; align-items: center; gap: var(--crisp-space-1-5); height: 36px; flex-shrink: 0; margin: calc(-1 * var(--crisp-space-2)) calc(-1 * var(--crisp-space-2)) var(--crisp-space-2); padding: var(--crisp-space-2) var(--crisp-space-3); color: var(--crisp-fg-neutral-muted); }
|
|
1475
1538
|
.crisp-multiselect-search svg { flex-shrink: 0; }
|
|
1476
|
-
.crisp-multiselect-search input { flex: 1; min-width: 0; border: none; outline: none; background: none; font-family: inherit; font-size: var(--crisp-text-lg); color: var(--crisp-fg-
|
|
1477
|
-
.crisp-multiselect-search input::placeholder { color: var(--crisp-fg-
|
|
1478
|
-
/*
|
|
1479
|
-
|
|
1480
|
-
same "small muted heading above a run of rows" treatment. */
|
|
1481
|
-
.crisp-multiselect-label { padding: var(--crisp-space-1-5) var(--crisp-space-2) var(--crisp-space-0-5); font-size: var(--crisp-text-sm); font-weight: var(--crisp-weight-medium); color: var(--crisp-fg-muted); }
|
|
1539
|
+
.crisp-multiselect-search input { flex: 1; min-width: 0; border: none; outline: none; background: none; font-family: inherit; font-size: var(--crisp-text-lg); color: var(--crisp-fg-select-neutral); }
|
|
1540
|
+
.crisp-multiselect-search input::placeholder { color: var(--crisp-fg-select-placeholder); }
|
|
1541
|
+
/* Same groupLabel treatment as Select's (13px/regular/neutral-subtle). */
|
|
1542
|
+
.crisp-multiselect-label { padding: var(--crisp-space-2) var(--crisp-space-4) 0; font-size: var(--crisp-text-md); line-height: 18px; font-weight: var(--crisp-weight-regular); color: var(--crisp-fg-neutral-subtle); }
|
|
1482
1543
|
.crisp-multiselect-option {
|
|
1483
|
-
box-sizing: border-box; display: flex; align-items: center; gap: var(--crisp-space-2);
|
|
1484
|
-
padding:
|
|
1544
|
+
box-sizing: border-box; display: flex; align-items: center; gap: var(--crisp-space-2); flex-shrink: 0;
|
|
1545
|
+
padding: var(--crisp-space-2-5) var(--crisp-space-4); margin: 0; border: none; background: none; border-radius: var(--crisp-radius-xl);
|
|
1546
|
+
font-family: inherit; text-align: start; cursor: pointer;
|
|
1547
|
+
transition: background-color .15s cubic-bezier(.35,0,.35,1);
|
|
1485
1548
|
}
|
|
1549
|
+
/* Keyboard/hover highlight keeps crisp's own visible neutral fill, same
|
|
1550
|
+
reasoning as Select's matching rule (seed's own pressed tint is too
|
|
1551
|
+
faint for a keyboard-navigation indicator). */
|
|
1486
1552
|
.crisp-multiselect-option[data-highlighted] { background: var(--crisp-bg-raised); }
|
|
1553
|
+
.crisp-multiselect-option:active { background: var(--crisp-bg-select-pressed); }
|
|
1487
1554
|
.crisp-multiselect-option-chip { flex: 0 1 auto; min-width: 0; overflow: hidden; }
|
|
1488
1555
|
.crisp-multiselect-check { flex-shrink: 0; margin-inline-start: auto; display: inline-flex; align-items: center; justify-content: center; width: 16px; height: 16px; border-radius: var(--crisp-radius-sm); box-shadow: inset 0 0 0 1.5px var(--crisp-border-default); color: transparent; }
|
|
1489
1556
|
.crisp-multiselect-option[aria-selected="true"] .crisp-multiselect-check { background: var(--crisp-bg-brand-solid); box-shadow: none; color: #fff; }
|
|
1490
|
-
.crisp-multiselect-empty { padding: var(--crisp-space-3) var(--crisp-space-
|
|
1557
|
+
.crisp-multiselect-empty { padding: var(--crisp-space-3) var(--crisp-space-4); text-align: center; font-size: var(--crisp-text-md); color: var(--crisp-fg-neutral-subtle); }
|
|
1491
1558
|
|
|
1492
1559
|
.crisp-recordstable-tag { display: inline-flex; align-items: center; height: var(--crisp-size-chip); padding: 0 var(--crisp-space-1); border-radius: var(--crisp-radius-chip); font-size: var(--crisp-text-lg); line-height: 20px; font-weight: var(--crisp-weight-medium); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; background: color-mix(in srgb, var(--crisp-fg-primary) 6%, transparent); color: color-mix(in srgb, var(--crisp-fg-primary) 82%, transparent); box-shadow: inset 0 0 0 1px var(--crisp-border-subtle); }
|
|
1493
1560
|
.crisp-recordstable-tag[data-tone="brand"] { background: color-mix(in srgb, var(--crisp-bg-brand-solid) 14%, transparent); color: color-mix(in srgb, var(--crisp-bg-brand-solid) 82%, var(--crisp-fg-primary)); box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--crisp-bg-brand-solid) 30%, transparent); }
|
|
@@ -1500,21 +1567,45 @@
|
|
|
1500
1567
|
|
|
1501
1568
|
.crisp-multiselect {
|
|
1502
1569
|
position: relative; display: inline-flex; width: 100%; font-family: var(--crisp-font-sans); -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale;
|
|
1503
|
-
& .crisp-multiselect-trigger { box-sizing: border-box; display: flex; align-items: center;
|
|
1504
|
-
|
|
1505
|
-
|
|
1506
|
-
& .crisp-multiselect-trigger:disabled {
|
|
1570
|
+
& .crisp-multiselect-trigger { box-sizing: border-box; display: flex; align-items: center; width: 100%; min-width: 0; margin: 0; border: 1px solid var(--crisp-stroke-select-trigger); background: transparent; cursor: pointer; text-align: start; font-family: inherit; color: var(--crisp-fg-select-neutral); transition: background-color .15s cubic-bezier(.35,0,.35,1), border-color .1s cubic-bezier(.35,0,.35,1), border-width .1s cubic-bezier(.35,0,.35,1); }
|
|
1571
|
+
/* Same pressed/disabled/readonly/focus model as Select's trigger -- see
|
|
1572
|
+
that recipe's comment for why hover and an open/focus ring are gone. */
|
|
1573
|
+
& .crisp-multiselect-trigger:active:not(:disabled):not([aria-readonly="true"]) { background: var(--crisp-bg-select-pressed); }
|
|
1574
|
+
& .crisp-multiselect-trigger:focus-visible { outline: 2px solid var(--crisp-stroke-focus-ring); outline-offset: -2px; }
|
|
1575
|
+
& .crisp-multiselect-trigger:disabled { background: var(--crisp-bg-select-disabled); cursor: not-allowed; }
|
|
1576
|
+
& .crisp-multiselect-trigger:disabled .crisp-multiselect-placeholder, & .crisp-multiselect-trigger:disabled .crisp-multiselect-chevron { color: var(--crisp-fg-disabled); }
|
|
1577
|
+
& .crisp-multiselect-trigger[aria-readonly="true"] { background: var(--crisp-bg-select-disabled); cursor: default; }
|
|
1507
1578
|
& .crisp-multiselect-chips { flex: 1; min-width: 0; display: flex; flex-wrap: wrap; align-items: center; gap: var(--crisp-space-1); }
|
|
1508
|
-
& .crisp-multiselect-placeholder { color: var(--crisp-fg-
|
|
1509
|
-
|
|
1510
|
-
& .crisp-multiselect-
|
|
1579
|
+
& .crisp-multiselect-placeholder { color: var(--crisp-fg-select-placeholder); }
|
|
1580
|
+
/* closeRotateDuration/openRotateDuration, same asymmetric timing as Select's own chevron (see that recipe's comment). */
|
|
1581
|
+
& .crisp-multiselect-chevron { flex-shrink: 0; color: var(--crisp-fg-neutral-muted); transition: transform .1s cubic-bezier(.35,0,.35,1); }
|
|
1582
|
+
& .crisp-multiselect-trigger[data-open] .crisp-multiselect-chevron { transform: rotate(180deg); transition-duration: .15s; }
|
|
1583
|
+
}
|
|
1584
|
+
.crisp-multiselect--size_small {
|
|
1585
|
+
& .crisp-multiselect-trigger { min-height: var(--crisp-size-menuRow); border-radius: var(--crisp-radius-md); gap: var(--crisp-space-1); padding: var(--crisp-space-0-5) var(--crisp-space-1-5) var(--crisp-space-0-5) var(--crisp-space-2); }
|
|
1586
|
+
& .crisp-multiselect-chevron { width: var(--crisp-size-icon); height: var(--crisp-size-icon); }
|
|
1587
|
+
}
|
|
1588
|
+
.crisp-multiselect--size_medium {
|
|
1589
|
+
& .crisp-multiselect-trigger { min-height: var(--crisp-size-selectTriggerMd); border-radius: var(--crisp-radius-md); gap: var(--crisp-space-2); padding: var(--crisp-space-1) var(--crisp-space-3-5); }
|
|
1590
|
+
& .crisp-multiselect-chevron { width: var(--crisp-size-icon); height: var(--crisp-size-icon); }
|
|
1591
|
+
}
|
|
1592
|
+
.crisp-multiselect--size_large {
|
|
1593
|
+
& .crisp-multiselect-trigger { min-height: var(--crisp-size-selectTriggerLg); border-radius: var(--crisp-radius-xl); gap: var(--crisp-space-2-5); padding: var(--crisp-space-1-5) var(--crisp-space-4); }
|
|
1594
|
+
& .crisp-multiselect-chevron { width: var(--crisp-size-selectIconLg); height: var(--crisp-size-selectIconLg); }
|
|
1511
1595
|
}
|
|
1512
1596
|
.crisp-multiselect--invalid_true {
|
|
1513
|
-
& .crisp-multiselect-trigger
|
|
1597
|
+
& .crisp-multiselect-trigger { border-width: 2px; border-color: var(--crisp-stroke-select-invalid); }
|
|
1514
1598
|
}
|
|
1515
1599
|
.crisp-multiselect--invalid_false {
|
|
1516
1600
|
|
|
1517
1601
|
}
|
|
1602
|
+
.crisp-multiselect--variant_default {
|
|
1603
|
+
|
|
1604
|
+
}
|
|
1605
|
+
.crisp-multiselect--variant_ghost {
|
|
1606
|
+
& .crisp-multiselect-trigger { min-height: 0; height: 100%; border-color: transparent; }
|
|
1607
|
+
& .crisp-multiselect-trigger:hover:not(:disabled) { background: var(--crisp-bg-select-pressed); }
|
|
1608
|
+
}
|
|
1518
1609
|
|
|
1519
1610
|
@media (prefers-reduced-motion: reduce) {
|
|
1520
1611
|
.crisp-multiselect, .crisp-multiselect * {
|
|
@@ -1552,6 +1643,9 @@
|
|
|
1552
1643
|
&[data-segmented] { display: flex; gap: var(--crisp-space-1); background: transparent; overflow: visible; }
|
|
1553
1644
|
&[data-segmented] .crisp-progress-seg { flex: 1; height: 100%; border-radius: var(--crisp-radius-full); background: color-mix(in srgb, var(--crisp-fg-primary) 8%, transparent); transition: background 0.2s; }
|
|
1554
1645
|
&[data-segmented] .crisp-progress-seg[data-filled] { background: var(--crisp-bg-brand-solid); }
|
|
1646
|
+
&[data-variant="circular"] { display: inline-flex; height: auto; border-radius: 0; background: transparent; overflow: visible; }
|
|
1647
|
+
& .crisp-progress-circle-track { stroke: color-mix(in srgb, var(--crisp-bg-brand-solid) 14%, transparent); }
|
|
1648
|
+
& .crisp-progress-circle-fill { stroke: var(--crisp-bg-brand-solid); transition: stroke-dashoffset 0.25s ease; }
|
|
1555
1649
|
}
|
|
1556
1650
|
|
|
1557
1651
|
@media (prefers-reduced-motion: reduce) {
|
|
@@ -1697,58 +1791,79 @@
|
|
|
1697
1791
|
|
|
1698
1792
|
|
|
1699
1793
|
/* pointer-events: auto (#375): a modal Dialog sets pointer-events: none
|
|
1700
|
-
on document.body while open
|
|
1701
|
-
|
|
1702
|
-
inherited the lock, so every option was unclickable, hit-testing
|
|
1703
|
-
right through to whatever real element sat behind it. */
|
|
1794
|
+
on document.body while open, and the portaled listbox is outside its
|
|
1795
|
+
knowledge -- it inherited the lock without this. */
|
|
1704
1796
|
.crisp-select-listbox {
|
|
1705
1797
|
font-family: var(--crisp-font-sans); -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale;
|
|
1706
|
-
position: fixed; z-index: 70; pointer-events: auto; box-sizing: border-box; display: flex; flex-direction: column; gap: var(--crisp-space-
|
|
1707
|
-
max-height:
|
|
1708
|
-
border-radius: var(--crisp-radius-
|
|
1709
|
-
box-shadow:
|
|
1710
|
-
transform-origin: top left; opacity: 1; transform: none;
|
|
1798
|
+
position: fixed; z-index: 70; pointer-events: auto; box-sizing: border-box; display: flex; flex-direction: column; gap: var(--crisp-space-2);
|
|
1799
|
+
max-height: 480px; overflow-y: auto; padding: var(--crisp-space-2);
|
|
1800
|
+
border-radius: var(--crisp-radius-3xl); background: var(--crisp-bg-select-listbox);
|
|
1801
|
+
box-shadow: 0 4px 16px var(--crisp-shadow-select);
|
|
1802
|
+
transform-origin: top left; opacity: 1; transform: none;
|
|
1803
|
+
transition: opacity .15s cubic-bezier(0,0,.15,1), transform .15s cubic-bezier(0,0,.15,1);
|
|
1711
1804
|
}
|
|
1712
|
-
.crisp-select-listbox[data-up] { transform-origin: bottom; }
|
|
1713
|
-
.crisp-select-listbox { @starting-style { opacity: 0; transform: scale(0.
|
|
1714
|
-
|
|
1805
|
+
.crisp-select-listbox[data-up] { transform-origin: bottom left; }
|
|
1806
|
+
.crisp-select-listbox { @starting-style { opacity: 0; transform: scale(0.95); } }
|
|
1807
|
+
/* Composed from @seed-design/rootage's text-input.yaml
|
|
1808
|
+
(variant=outline,size=medium) -- seed's Select has no search field of
|
|
1809
|
+
its own to resolve this from (see the file header), so this reuses
|
|
1810
|
+
the SAME tokens #867 already resolved for the trigger at this size:
|
|
1811
|
+
minHeight x10 (var(--crisp-size-selectTriggerMd)), paddingX x3_5
|
|
1812
|
+
(var(--crisp-space-3-5)), gap x2 (var(--crisp-space-2)), cornerRadius r2
|
|
1813
|
+
(var(--crisp-radius-md)), strokeColor stroke.neutral-weak
|
|
1814
|
+
(var(--crisp-stroke-select-trigger)) -- a real bordered field sitting flush
|
|
1815
|
+
inside the listbox's own 8px padding, replacing the old bare
|
|
1816
|
+
34px/no-border/bleeds-to-the-edge strip (crisp/#904). */
|
|
1817
|
+
.crisp-select-search { display: flex; align-items: center; gap: var(--crisp-space-2); height: var(--crisp-size-selectTriggerMd); flex-shrink: 0; padding: 0 var(--crisp-space-3-5); border: 1px solid var(--crisp-stroke-select-trigger); border-radius: var(--crisp-radius-md); color: var(--crisp-fg-neutral-muted); }
|
|
1715
1818
|
.crisp-select-search svg { flex-shrink: 0; }
|
|
1716
|
-
.crisp-select-search input { flex: 1; min-width: 0; border: none; outline: none; background: none; font-family: inherit; font-size: var(--crisp-text-lg); color: var(--crisp-fg-
|
|
1717
|
-
.crisp-select-search input::placeholder { color: var(--crisp-fg-
|
|
1718
|
-
.crisp-select-empty { padding: var(--crisp-space-3) var(--crisp-space-
|
|
1719
|
-
/*
|
|
1720
|
-
|
|
1721
|
-
|
|
1722
|
-
.crisp-select-label { padding: var(--crisp-space-1-5) var(--crisp-space-2) var(--crisp-space-0-5); font-size: var(--crisp-text-sm); font-weight: var(--crisp-weight-medium); color: var(--crisp-fg-muted); }
|
|
1819
|
+
.crisp-select-search input { flex: 1; min-width: 0; border: none; outline: none; background: none; font-family: inherit; font-size: var(--crisp-text-lg); line-height: 19px; color: var(--crisp-fg-select-neutral); }
|
|
1820
|
+
.crisp-select-search input::placeholder { color: var(--crisp-fg-select-placeholder); }
|
|
1821
|
+
.crisp-select-empty { padding: var(--crisp-space-3) var(--crisp-space-4); text-align: center; font-size: var(--crisp-text-md); color: var(--crisp-fg-neutral-subtle); }
|
|
1822
|
+
/* select.yaml's groupLabel -- font-size/line-height/weight are the same
|
|
1823
|
+
across sizes, only paddingY differs (medium 8px, large 10px). */
|
|
1824
|
+
.crisp-select-label { padding: var(--crisp-space-2) var(--crisp-space-4) 0; font-size: var(--crisp-text-md); line-height: 18px; font-weight: var(--crisp-weight-regular); color: var(--crisp-fg-neutral-subtle); }
|
|
1723
1825
|
.crisp-select-option {
|
|
1724
|
-
box-sizing: border-box; display: flex; align-items: center;
|
|
1725
|
-
padding:
|
|
1726
|
-
font-family: inherit;
|
|
1826
|
+
box-sizing: border-box; display: flex; align-items: center; flex-shrink: 0;
|
|
1827
|
+
padding: var(--crisp-space-2-5) var(--crisp-space-4); margin-inline: 0; border: none; background: none; border-radius: var(--crisp-radius-xl);
|
|
1828
|
+
font-family: inherit; color: var(--crisp-fg-select-neutral); text-align: start; cursor: pointer; white-space: nowrap;
|
|
1829
|
+
transition: background-color .15s cubic-bezier(.35,0,.35,1), margin-inline .15s cubic-bezier(.35,0,.35,1);
|
|
1727
1830
|
}
|
|
1831
|
+
/* Keyboard/hover highlight keeps crisp's own visible neutral fill --
|
|
1832
|
+
seed's spec has no "highlighted" state at all (only pressed/selected/
|
|
1833
|
+
disabled), and its actual pressed tint (below) is a ~3% black hint,
|
|
1834
|
+
too faint to serve as a keyboard-navigation indicator. */
|
|
1728
1835
|
.crisp-select-option[data-highlighted] { background: var(--crisp-bg-raised); }
|
|
1729
|
-
.crisp-select-option[data-disabled] {
|
|
1730
|
-
.crisp-select-option-
|
|
1836
|
+
.crisp-select-option:active:not([data-disabled]) { background: var(--crisp-bg-select-pressed); margin-inline: var(--crisp-space-2); }
|
|
1837
|
+
.crisp-select-option[data-disabled] { cursor: not-allowed; }
|
|
1838
|
+
.crisp-select-option[data-disabled] .crisp-select-option-label,
|
|
1839
|
+
.crisp-select-option[data-disabled] .crisp-select-option-description,
|
|
1840
|
+
.crisp-select-option[data-disabled] .crisp-select-option-check { color: var(--crisp-fg-disabled); }
|
|
1841
|
+
.crisp-select-option-dot { flex-shrink: 0; width: 8px; height: 8px; border-radius: var(--crisp-radius-full); margin-inline-end: var(--crisp-space-2); }
|
|
1842
|
+
.crisp-select-option-body { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: var(--crisp-space-0-5); }
|
|
1731
1843
|
.crisp-select-option-label { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; }
|
|
1732
|
-
.crisp-select-option-
|
|
1844
|
+
.crisp-select-option-description { min-width: 0; overflow: hidden; text-overflow: ellipsis; color: var(--crisp-fg-neutral-subtle); }
|
|
1845
|
+
.crisp-select-option-check { flex-shrink: 0; color: var(--crisp-fg-select-neutral); margin-inline-start: var(--crisp-space-2); }
|
|
1733
1846
|
|
|
1734
1847
|
.crisp-select {
|
|
1735
1848
|
position: relative; display: inline-flex; font-family: var(--crisp-font-sans); -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale;
|
|
1736
|
-
& .crisp-select-trigger { box-sizing: border-box; display: inline-flex; align-items: center;
|
|
1737
|
-
|
|
1738
|
-
|
|
1739
|
-
|
|
1740
|
-
& .crisp-select-
|
|
1741
|
-
& .crisp-select-
|
|
1742
|
-
& .crisp-select-
|
|
1743
|
-
& .crisp-select-trigger
|
|
1744
|
-
}
|
|
1745
|
-
|
|
1746
|
-
|
|
1747
|
-
|
|
1748
|
-
.crisp-select--
|
|
1749
|
-
|
|
1750
|
-
& .crisp-select-
|
|
1751
|
-
|
|
1849
|
+
& .crisp-select-trigger { box-sizing: border-box; display: inline-flex; align-items: center; width: 100%; min-width: 0; margin: 0; border: 1px solid var(--crisp-stroke-select-trigger); background: transparent; cursor: pointer; font-family: inherit; color: var(--crisp-fg-select-neutral); transition: background-color .15s cubic-bezier(.35,0,.35,1), border-color .1s cubic-bezier(.35,0,.35,1), border-width .1s cubic-bezier(.35,0,.35,1); }
|
|
1850
|
+
/* seed defines no hover state for this trigger -- only pressed, invalid, disabled and readonly. The scale-down is scoped to the CONTENT (seed's scaleScope: content), not the button itself, so the border
|
|
1851
|
+
never moves. */
|
|
1852
|
+
/* Only the value scales, not the chevron: the chevron's own transform is its open/close rotation, and a scale would fight it for one shared CSS property when both are true at once (pressing while open). */
|
|
1853
|
+
& .crisp-select-trigger:active:not(:disabled):not([aria-readonly="true"]) { background: var(--crisp-bg-select-pressed); }
|
|
1854
|
+
& .crisp-select-trigger:active:not(:disabled):not([aria-readonly="true"]) .crisp-select-value { transform: scale(0.98); }
|
|
1855
|
+
& .crisp-select-trigger:focus-visible { outline: 2px solid var(--crisp-stroke-focus-ring); outline-offset: -2px; }
|
|
1856
|
+
& .crisp-select-trigger:disabled { background: var(--crisp-bg-select-disabled); cursor: not-allowed; }
|
|
1857
|
+
& .crisp-select-trigger:disabled .crisp-select-value, & .crisp-select-trigger:disabled .crisp-select-placeholder, & .crisp-select-trigger:disabled .crisp-select-chevron { color: var(--crisp-fg-disabled); }
|
|
1858
|
+
/* readonly: same fill as disabled, but the value/placeholder text stays normal ink -- it reads as "answered and locked", not "answered and
|
|
1859
|
+
greyed out" (select-trigger.yaml's readonly state only overrides
|
|
1860
|
+
root.color; value/placeholder keep their enabled colours). */
|
|
1861
|
+
& .crisp-select-trigger[aria-readonly="true"] { background: var(--crisp-bg-select-disabled); cursor: default; }
|
|
1862
|
+
& .crisp-select-value { flex: 1; min-width: 0; display: inline-flex; align-items: center; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; text-align: start; transition: transform .15s cubic-bezier(0,0,.15,1); }
|
|
1863
|
+
& .crisp-select-placeholder { color: var(--crisp-fg-select-placeholder); }
|
|
1864
|
+
/* closeRotateDuration/closeRotateTimingFunction: 100ms, seed's "easing" curve. Overridden to 150ms on open (openRotateDuration) below -- same curve both ways, only the duration differs. */
|
|
1865
|
+
& .crisp-select-chevron { flex-shrink: 0; color: var(--crisp-fg-neutral-muted); transition: transform .1s cubic-bezier(.35,0,.35,1); }
|
|
1866
|
+
& .crisp-select-trigger[data-open] .crisp-select-chevron { transform: rotate(180deg); transition-duration: .15s; }
|
|
1752
1867
|
}
|
|
1753
1868
|
.crisp-select--width_full {
|
|
1754
1869
|
width: 100%;
|
|
@@ -1756,12 +1871,49 @@
|
|
|
1756
1871
|
.crisp-select--width_auto {
|
|
1757
1872
|
width: auto;
|
|
1758
1873
|
}
|
|
1874
|
+
.crisp-select--size_small {
|
|
1875
|
+
& .crisp-select-trigger { height: var(--crisp-size-menuRow); border-radius: var(--crisp-radius-md); gap: var(--crisp-space-1-5); padding-inline: var(--crisp-space-2-5); }
|
|
1876
|
+
& .crisp-select-value, & .crisp-select-placeholder { font-size: var(--crisp-text-lg); line-height: 20px; }
|
|
1877
|
+
& .crisp-select-chevron { width: var(--crisp-size-icon); height: var(--crisp-size-icon); }
|
|
1878
|
+
.crisp-select-option { gap: var(--crisp-space-2); }
|
|
1879
|
+
.crisp-select-option-label { font-size: var(--crisp-text-lg); line-height: 19px; }
|
|
1880
|
+
.crisp-select-option-description { font-size: var(--crisp-text-sm); line-height: 16px; }
|
|
1881
|
+
.crisp-select-option-check { width: var(--crisp-space-3); height: var(--crisp-space-3); }
|
|
1882
|
+
.crisp-select-label { padding-top: var(--crisp-space-2); }
|
|
1883
|
+
}
|
|
1884
|
+
.crisp-select--size_medium {
|
|
1885
|
+
& .crisp-select-trigger { height: var(--crisp-size-selectTriggerMd); border-radius: var(--crisp-radius-md); gap: var(--crisp-space-2); padding-inline: var(--crisp-space-3-5); }
|
|
1886
|
+
& .crisp-select-value, & .crisp-select-placeholder { font-size: var(--crisp-text-lg); line-height: 19px; }
|
|
1887
|
+
& .crisp-select-chevron { width: var(--crisp-size-icon); height: var(--crisp-size-icon); }
|
|
1888
|
+
.crisp-select-option { gap: var(--crisp-space-2); }
|
|
1889
|
+
.crisp-select-option-label { font-size: var(--crisp-text-lg); line-height: 19px; }
|
|
1890
|
+
.crisp-select-option-description { font-size: var(--crisp-text-sm); line-height: 16px; }
|
|
1891
|
+
.crisp-select-option-check { width: var(--crisp-space-3); height: var(--crisp-space-3); }
|
|
1892
|
+
.crisp-select-label { padding-top: var(--crisp-space-2); }
|
|
1893
|
+
}
|
|
1894
|
+
.crisp-select--size_large {
|
|
1895
|
+
& .crisp-select-trigger { height: var(--crisp-size-selectTriggerLg); border-radius: var(--crisp-radius-xl); gap: var(--crisp-space-2-5); padding-inline: var(--crisp-space-4); }
|
|
1896
|
+
& .crisp-select-value, & .crisp-select-placeholder { font-size: var(--crisp-text-xl); line-height: 22px; }
|
|
1897
|
+
& .crisp-select-chevron { width: var(--crisp-size-selectIconLg); height: var(--crisp-size-selectIconLg); }
|
|
1898
|
+
.crisp-select-option { gap: var(--crisp-space-3); }
|
|
1899
|
+
.crisp-select-option-label { font-size: var(--crisp-text-xl); line-height: 22px; }
|
|
1900
|
+
.crisp-select-option-description { font-size: var(--crisp-text-md); line-height: 18px; }
|
|
1901
|
+
.crisp-select-option-check { width: var(--crisp-space-3-5); height: var(--crisp-space-3-5); }
|
|
1902
|
+
.crisp-select-label { padding-top: var(--crisp-space-2-5); }
|
|
1903
|
+
}
|
|
1759
1904
|
.crisp-select--invalid_true {
|
|
1760
|
-
& .crisp-select-trigger
|
|
1905
|
+
& .crisp-select-trigger { border-width: 2px; border-color: var(--crisp-stroke-select-invalid); }
|
|
1761
1906
|
}
|
|
1762
1907
|
.crisp-select--invalid_false {
|
|
1763
1908
|
|
|
1764
1909
|
}
|
|
1910
|
+
.crisp-select--variant_default {
|
|
1911
|
+
|
|
1912
|
+
}
|
|
1913
|
+
.crisp-select--variant_ghost {
|
|
1914
|
+
& .crisp-select-trigger { height: 100%; border-color: transparent; }
|
|
1915
|
+
& .crisp-select-trigger:hover:not(:disabled) { background: var(--crisp-bg-select-pressed); }
|
|
1916
|
+
}
|
|
1765
1917
|
|
|
1766
1918
|
@media (prefers-reduced-motion: reduce) {
|
|
1767
1919
|
.crisp-select, .crisp-select * {
|
|
@@ -2151,7 +2303,14 @@
|
|
|
2151
2303
|
& .crisp-tabletoolbar-tool--raised { border: none; background: var(--crisp-bg-surface); box-shadow: inset 0 0 0 1px var(--crisp-ring-neutral), 0 0 2px rgba(28,40,64,0.18), 0 1px 3px rgba(0,0,0,0.04); font-family: inherit; cursor: pointer; }
|
|
2152
2304
|
|
|
2153
2305
|
& .crisp-tabletoolbar-sorted-prefix { color: color-mix(in srgb, var(--crisp-fg-primary) 63%, transparent); }
|
|
2154
|
-
& .crisp-tabletoolbar-sorted-count {
|
|
2306
|
+
& .crisp-tabletoolbar-sorted-count { display: inline-flex; align-items: center; height: 16px; box-sizing: border-box;
|
|
2307
|
+
padding: 0 var(--crisp-space-1); border-radius: var(--crisp-radius-sm); background: color-mix(in srgb, var(--crisp-fg-primary) 4%, transparent);
|
|
2308
|
+
box-shadow: inset 0 0 0 1px var(--crisp-border-subtle); font-size: var(--crisp-text-sm); font-weight: var(--crisp-weight-medium); color: var(--crisp-fg-neutral-soft); }
|
|
2309
|
+
|
|
2310
|
+
& .crisp-tabletoolbar-tool-count { display: inline-flex; align-items: center; height: 16px; box-sizing: border-box;
|
|
2311
|
+
padding: 0 var(--crisp-space-1); border-radius: var(--crisp-radius-sm); background: color-mix(in srgb, var(--crisp-fg-primary) 4%, transparent);
|
|
2312
|
+
box-shadow: inset 0 0 0 1px var(--crisp-border-subtle); font-size: var(--crisp-text-sm); font-weight: var(--crisp-weight-medium); color: var(--crisp-fg-neutral-soft);
|
|
2313
|
+
font-variant-numeric: tabular-nums; }
|
|
2155
2314
|
[dir="rtl"] & [data-rtl-flip] { transform: scaleX(-1); }
|
|
2156
2315
|
}
|
|
2157
2316
|
|
|
@@ -2176,6 +2335,12 @@
|
|
|
2176
2335
|
& .crisp-tabs-tab-badge { display: inline-flex; align-items: center; justify-content: center; min-width: 14px; height: 14px; padding: 0 var(--crisp-space-1); border-radius: 4px; background: color-mix(in srgb, var(--crisp-fg-primary) 4%, transparent); box-shadow: inset 0 0 0 1px var(--crisp-border-subtle); font-size: 10px; line-height: 14px; font-weight: var(--crisp-weight-medium); color: var(--crisp-fg-neutral-soft); }
|
|
2177
2336
|
& .crisp-tabs-tab[data-selected] .crisp-tabs-tab-badge { color: var(--crisp-fg-primary); }
|
|
2178
2337
|
& .crisp-tabs-indicator { position: absolute; bottom: 0; left: 0; z-index: 1; height: 1px; background: var(--crisp-fg-primary); border-radius: 2px 2px 0 0; transition: transform .2s cubic-bezier(.4,0,.2,1), width .2s cubic-bezier(.4,0,.2,1); pointer-events: none; }
|
|
2338
|
+
/* crisp#863: the "+N more" overflow trigger, measured live -- its computed style is identical to a plain .crisp-tabs-tab (same pill, same 6px icon/label gap the tab class already gives via space["1.5"]), and the dropdown it opens is crisp's own Menu/
|
|
2339
|
+
MenuItem chrome (already matches Attio's popover, nothing new to style there). Only the wrapper needs a rule: an overflowed tab (or the trigger itself, when nothing is hidden) is taken out of the flex row and out of the a11y tree without ever making its own offsetWidth unmeasurable the way display:none would -- that's what
|
|
2340
|
+
lets the tabs.tsx effect recompute the cutoff from cached widths on
|
|
2341
|
+
every resize with no flash of an unclipped row. */
|
|
2342
|
+
& .crisp-tabs-more { display: inline-flex; }
|
|
2343
|
+
& [data-tabs-overflow-hidden] { position: absolute; visibility: hidden; pointer-events: none; }
|
|
2179
2344
|
& .crisp-tabs-panel { display: flex; flex-direction: column; flex: 1; min-height: 0; padding-top: var(--crisp-space-8); }
|
|
2180
2345
|
& .crisp-tabs-panel:focus-visible { outline: none; }
|
|
2181
2346
|
}
|
|
@@ -2204,7 +2369,7 @@
|
|
|
2204
2369
|
color: var(--crisp-fg-neutral-muted);
|
|
2205
2370
|
}
|
|
2206
2371
|
.crisp-text--tone_brand {
|
|
2207
|
-
color: var(--crisp-
|
|
2372
|
+
color: var(--crisp-fg-brand-contrast);
|
|
2208
2373
|
}
|
|
2209
2374
|
.crisp-text--tone_danger {
|
|
2210
2375
|
color: var(--crisp-fg-danger);
|
|
@@ -2228,8 +2393,9 @@
|
|
|
2228
2393
|
&[data-invalid] .crisp-textarea-wrap::after { border-color: var(--crisp-bg-danger); }
|
|
2229
2394
|
&[data-invalid] .crisp-textarea-wrap:focus-within::after { border-color: var(--crisp-bg-danger); }
|
|
2230
2395
|
&[data-counted] .crisp-textarea-field { padding-bottom: var(--crisp-space-5); }
|
|
2231
|
-
& .crisp-textarea-count { position: absolute; inset-inline-end: 14px; bottom: var(--crisp-space-2-5); font-size: var(--crisp-text-sm); color: var(--crisp-fg-muted); pointer-events: none; }
|
|
2396
|
+
& .crisp-textarea-count { position: absolute; inset-inline-end: 14px; bottom: var(--crisp-space-2-5); display: flex; align-items: center; gap: var(--crisp-space-1); font-size: var(--crisp-text-sm); color: var(--crisp-fg-muted); pointer-events: none; }
|
|
2232
2397
|
& .crisp-textarea-count[data-over] { color: var(--crisp-bg-danger); }
|
|
2398
|
+
& .crisp-textarea-progress { flex-shrink: 0; }
|
|
2233
2399
|
}
|
|
2234
2400
|
|
|
2235
2401
|
@media (prefers-reduced-motion: reduce) {
|
|
@@ -2245,11 +2411,20 @@
|
|
|
2245
2411
|
&:hover { text-decoration: underline; }
|
|
2246
2412
|
}
|
|
2247
2413
|
.crisp-textlink--tone_brand {
|
|
2248
|
-
font-size: var(--crisp-text-sm); font-weight: var(--crisp-weight-medium); color: var(--crisp-
|
|
2414
|
+
font-size: var(--crisp-text-sm); font-weight: var(--crisp-weight-medium); color: var(--crisp-fg-brand-contrast);
|
|
2249
2415
|
}
|
|
2250
2416
|
.crisp-textlink--tone_muted {
|
|
2251
2417
|
font-size: var(--crisp-text-md); font-weight: var(--crisp-weight-regular); color: var(--crisp-fg-muted);
|
|
2252
|
-
&:hover { color: var(--crisp-
|
|
2418
|
+
&:hover { color: var(--crisp-fg-brand-contrast); }
|
|
2419
|
+
}
|
|
2420
|
+
.crisp-textlink--size_sm {
|
|
2421
|
+
font-size: var(--crisp-text-sm);
|
|
2422
|
+
}
|
|
2423
|
+
.crisp-textlink--size_md {
|
|
2424
|
+
font-size: var(--crisp-text-md);
|
|
2425
|
+
}
|
|
2426
|
+
.crisp-textlink--size_lg {
|
|
2427
|
+
font-size: var(--crisp-text-lg);
|
|
2253
2428
|
}
|
|
2254
2429
|
|
|
2255
2430
|
.crisp-toast {
|
package/dist/tabletoolbar.css
CHANGED
|
@@ -165,7 +165,14 @@
|
|
|
165
165
|
& .crisp-tabletoolbar-tool--raised { border: none; background: var(--crisp-bg-surface); box-shadow: inset 0 0 0 1px var(--crisp-ring-neutral), 0 0 2px rgba(28,40,64,0.18), 0 1px 3px rgba(0,0,0,0.04); font-family: inherit; cursor: pointer; }
|
|
166
166
|
|
|
167
167
|
& .crisp-tabletoolbar-sorted-prefix { color: color-mix(in srgb, var(--crisp-fg-primary) 63%, transparent); }
|
|
168
|
-
& .crisp-tabletoolbar-sorted-count {
|
|
168
|
+
& .crisp-tabletoolbar-sorted-count { display: inline-flex; align-items: center; height: 16px; box-sizing: border-box;
|
|
169
|
+
padding: 0 var(--crisp-space-1); border-radius: var(--crisp-radius-sm); background: color-mix(in srgb, var(--crisp-fg-primary) 4%, transparent);
|
|
170
|
+
box-shadow: inset 0 0 0 1px var(--crisp-border-subtle); font-size: var(--crisp-text-sm); font-weight: var(--crisp-weight-medium); color: var(--crisp-fg-neutral-soft); }
|
|
171
|
+
|
|
172
|
+
& .crisp-tabletoolbar-tool-count { display: inline-flex; align-items: center; height: 16px; box-sizing: border-box;
|
|
173
|
+
padding: 0 var(--crisp-space-1); border-radius: var(--crisp-radius-sm); background: color-mix(in srgb, var(--crisp-fg-primary) 4%, transparent);
|
|
174
|
+
box-shadow: inset 0 0 0 1px var(--crisp-border-subtle); font-size: var(--crisp-text-sm); font-weight: var(--crisp-weight-medium); color: var(--crisp-fg-neutral-soft);
|
|
175
|
+
font-variant-numeric: tabular-nums; }
|
|
169
176
|
[dir="rtl"] & [data-rtl-flip] { transform: scaleX(-1); }
|
|
170
177
|
}
|
|
171
178
|
|