@crisp-ui-kit/crisp 0.55.6 → 0.57.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/callout.css +6 -0
- package/dist/callout.d.ts +2 -2
- package/dist/callout.layered.css +6 -0
- 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.recipe.js +6 -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 +95 -65
- 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 +150 -78
- package/dist/cjs/components/statusdot/index.js +7 -0
- package/dist/cjs/components/statusdot/statusdot.js +15 -0
- package/dist/cjs/components/statusdot/statusdot.recipe.js +34 -0
- 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 +10 -0
- package/dist/cjs/components/textlink/textlink.js +2 -2
- package/dist/cjs/components/textlink/textlink.recipe.js +18 -0
- package/dist/cjs/index.js +1 -0
- package/dist/cjs/product/recordpage/recordpage.js +17 -4
- package/dist/cjs/tokens/elevation.js +7 -0
- package/dist/cjs/tokens/palette.js +41 -0
- package/dist/cjs/tokens/scale.js +16 -1
- package/dist/cjs/tokens/semantic.js +18 -0
- 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.recipe.js +6 -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 +95 -65
- 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 +150 -78
- package/dist/esm/components/statusdot/index.js +2 -0
- package/dist/esm/components/statusdot/statusdot.js +12 -0
- package/dist/esm/components/statusdot/statusdot.recipe.js +31 -0
- 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 +10 -0
- package/dist/esm/components/textlink/textlink.js +2 -2
- package/dist/esm/components/textlink/textlink.recipe.js +18 -0
- package/dist/esm/index.js +1 -0
- package/dist/esm/product/recordpage/recordpage.js +18 -5
- package/dist/esm/tokens/elevation.js +7 -0
- package/dist/esm/tokens/palette.js +41 -0
- package/dist/esm/tokens/scale.js +16 -1
- package/dist/esm/tokens/semantic.js +18 -0
- package/dist/input.css +4 -0
- package/dist/input.d.ts +2 -2
- package/dist/input.layered.css +4 -0
- package/dist/menu.css +8 -0
- package/dist/menu.layered.css +8 -0
- package/dist/multiselect.css +53 -29
- package/dist/multiselect.d.ts +3 -1
- package/dist/multiselect.layered.css +53 -29
- package/dist/native/tokens.d.ts +1 -1
- package/dist/native/tokens.js +50 -7
- package/dist/select.css +80 -42
- package/dist/select.d.ts +3 -2
- package/dist/select.layered.css +80 -42
- package/dist/statusdot.css +3 -0
- package/dist/statusdot.d.ts +7 -0
- package/dist/statusdot.layered.css +5 -0
- package/dist/styles.css +238 -73
- package/dist/styles.layered.css +238 -73
- 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 +6 -0
- package/dist/text.d.ts +2 -2
- package/dist/text.layered.css +6 -0
- package/dist/textlink.css +9 -0
- package/dist/textlink.d.ts +2 -1
- package/dist/textlink.layered.css +9 -0
- package/dist/tokens.css +54 -1
- package/dist/tokens.json +50 -7
- 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 +2 -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 +24 -6
- package/dist/types/components/multiselect/multiselect.recipe.d.ts +24 -0
- package/dist/types/components/select/listbox-keyboard.d.ts +10 -1
- package/dist/types/components/select/select.d.ts +28 -6
- package/dist/types/components/select/select.recipe.d.ts +22 -10
- package/dist/types/components/statusdot/index.d.ts +2 -0
- package/dist/types/components/statusdot/statusdot.d.ts +21 -0
- package/dist/types/components/statusdot/statusdot.recipe.d.ts +15 -0
- package/dist/types/components/tabletoolbar/tabletoolbar.d.ts +14 -0
- package/dist/types/components/tabs/tabs.d.ts +9 -1
- package/dist/types/components/text/text.d.ts +4 -0
- package/dist/types/components/text/text.recipe.d.ts +12 -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 +25 -1
- package/dist/types/tokens/contract.d.ts +13 -3
- package/dist/types/tokens/elevation.d.ts +7 -0
- package/dist/types/tokens/palette.d.ts +36 -0
- package/dist/types/tokens/scale.d.ts +6 -1
- package/dist/types/tokens/semantic.d.ts +18 -0
- package/package.json +6 -1
package/dist/styles.css
CHANGED
|
@@ -1,3 +1,31 @@
|
|
|
1
|
+
@font-face {
|
|
2
|
+
font-family: "VK Sans Display";
|
|
3
|
+
src: local("VK Sans Display Regular");
|
|
4
|
+
font-weight: 400;
|
|
5
|
+
font-style: normal;
|
|
6
|
+
font-display: swap;
|
|
7
|
+
}
|
|
8
|
+
@font-face {
|
|
9
|
+
font-family: "VK Sans Display";
|
|
10
|
+
src: local("VK Sans Display Medium");
|
|
11
|
+
font-weight: 500;
|
|
12
|
+
font-style: normal;
|
|
13
|
+
font-display: swap;
|
|
14
|
+
}
|
|
15
|
+
@font-face {
|
|
16
|
+
font-family: "VK Sans Display";
|
|
17
|
+
src: local("VK Sans Display DemiBold");
|
|
18
|
+
font-weight: 600;
|
|
19
|
+
font-style: normal;
|
|
20
|
+
font-display: swap;
|
|
21
|
+
}
|
|
22
|
+
@font-face {
|
|
23
|
+
font-family: "VK Sans Display";
|
|
24
|
+
src: local("VK Sans Display Bold");
|
|
25
|
+
font-weight: 700;
|
|
26
|
+
font-style: normal;
|
|
27
|
+
font-display: swap;
|
|
28
|
+
}
|
|
1
29
|
:root {
|
|
2
30
|
--crisp-bg-brand-solid: #266df0;
|
|
3
31
|
--crisp-bg-brand-solid-pressed: #1f5fd6;
|
|
@@ -54,6 +82,16 @@
|
|
|
54
82
|
--crisp-bg-purple-soft: #f5f0ff;
|
|
55
83
|
--crisp-fg-purple-soft: #6238b5;
|
|
56
84
|
--crisp-ring-purple-soft: #e8ddfe;
|
|
85
|
+
--crisp-ring-brand-soft: #d6e5ff;
|
|
86
|
+
--crisp-fg-select-neutral: #1a1c20;
|
|
87
|
+
--crisp-bg-select-listbox: #ffffff;
|
|
88
|
+
--crisp-stroke-select-trigger: #dcdee3;
|
|
89
|
+
--crisp-bg-select-pressed: #00000007;
|
|
90
|
+
--crisp-bg-select-disabled: #f3f4f5;
|
|
91
|
+
--crisp-stroke-select-invalid: #fa342c;
|
|
92
|
+
--crisp-stroke-select-divider: #00000010;
|
|
93
|
+
--crisp-fg-select-placeholder: #b0b3ba;
|
|
94
|
+
--crisp-shadow-select: #0000001f;
|
|
57
95
|
}
|
|
58
96
|
|
|
59
97
|
[data-theme="dark"] {
|
|
@@ -112,6 +150,16 @@
|
|
|
112
150
|
--crisp-bg-purple-soft: #2f1e5a;
|
|
113
151
|
--crisp-fg-purple-soft: #d8c4ff;
|
|
114
152
|
--crisp-ring-purple-soft: #45297d;
|
|
153
|
+
--crisp-ring-brand-soft: #212224;
|
|
154
|
+
--crisp-fg-select-neutral: #f3f4f5;
|
|
155
|
+
--crisp-bg-select-listbox: #1d2025;
|
|
156
|
+
--crisp-stroke-select-trigger: #393d46;
|
|
157
|
+
--crisp-bg-select-pressed: #ffffff0d;
|
|
158
|
+
--crisp-bg-select-disabled: #2b2e35;
|
|
159
|
+
--crisp-stroke-select-invalid: #ff6e60;
|
|
160
|
+
--crisp-stroke-select-divider: #ffffff17;
|
|
161
|
+
--crisp-fg-select-placeholder: #868b94;
|
|
162
|
+
--crisp-shadow-select: #000000cc;
|
|
115
163
|
}
|
|
116
164
|
|
|
117
165
|
:root {
|
|
@@ -126,12 +174,14 @@
|
|
|
126
174
|
--crisp-space-0-5: 2px;
|
|
127
175
|
--crisp-space-1-5: 6px;
|
|
128
176
|
--crisp-space-2-5: 10px;
|
|
177
|
+
--crisp-space-3-5: 14px;
|
|
129
178
|
--crisp-radius-chip: 7px;
|
|
130
179
|
--crisp-radius-sm: 6px;
|
|
131
180
|
--crisp-radius-md: 8px;
|
|
132
181
|
--crisp-radius-lg: 9px;
|
|
133
182
|
--crisp-radius-xl: 12px;
|
|
134
183
|
--crisp-radius-2xl: 16px;
|
|
184
|
+
--crisp-radius-3xl: 20px;
|
|
135
185
|
--crisp-radius-full: 999px;
|
|
136
186
|
--crisp-size-icon: 16px;
|
|
137
187
|
--crisp-size-chip: 22px;
|
|
@@ -142,6 +192,9 @@
|
|
|
142
192
|
--crisp-size-header: 48px;
|
|
143
193
|
--crisp-size-calendarCell: 34px;
|
|
144
194
|
--crisp-size-calendarPill: 32px;
|
|
195
|
+
--crisp-size-selectTriggerMd: 40px;
|
|
196
|
+
--crisp-size-selectTriggerLg: 52px;
|
|
197
|
+
--crisp-size-selectIconLg: 20px;
|
|
145
198
|
--crisp-text-xs: 11px;
|
|
146
199
|
--crisp-text-sm: 12px;
|
|
147
200
|
--crisp-text-md: 13px;
|
|
@@ -151,7 +204,7 @@
|
|
|
151
204
|
--crisp-weight-medium: 500;
|
|
152
205
|
--crisp-weight-semibold: 600;
|
|
153
206
|
--crisp-weight-bold: 700;
|
|
154
|
-
--crisp-font-sans: "Inter", system-ui, -apple-system, "Segoe UI", sans-serif;
|
|
207
|
+
--crisp-font-sans: "VK Sans Display", "Inter", system-ui, -apple-system, "Segoe UI", sans-serif;
|
|
155
208
|
}
|
|
156
209
|
|
|
157
210
|
.crisp-accordion {
|
|
@@ -408,6 +461,12 @@
|
|
|
408
461
|
&[data-tone="danger"] { background: color-mix(in srgb, var(--crisp-bg-danger) 10%, transparent); }
|
|
409
462
|
&[data-tone="danger"] .crisp-callout-icon { color: var(--crisp-bg-danger); }
|
|
410
463
|
}
|
|
464
|
+
.crisp-callout--bordered_true {
|
|
465
|
+
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);
|
|
466
|
+
}
|
|
467
|
+
.crisp-callout--bordered_false {
|
|
468
|
+
|
|
469
|
+
}
|
|
411
470
|
|
|
412
471
|
.crisp-card {
|
|
413
472
|
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);
|
|
@@ -1327,6 +1386,10 @@
|
|
|
1327
1386
|
& .crisp-input-value:disabled { opacity: 0.5; cursor: not-allowed; }
|
|
1328
1387
|
&:has(.crisp-input-value:disabled) { opacity: 1; }
|
|
1329
1388
|
}
|
|
1389
|
+
.crisp-input--size_sm {
|
|
1390
|
+
height: var(--crisp-size-row); border-radius: var(--crisp-radius-md);
|
|
1391
|
+
& .crisp-input-value { padding-inline: var(--crisp-space-2-5); }
|
|
1392
|
+
}
|
|
1330
1393
|
.crisp-input--size_medium {
|
|
1331
1394
|
height: 32px; border-radius: var(--crisp-radius-md);
|
|
1332
1395
|
& .crisp-input-value { padding-inline: var(--crisp-space-2-5); }
|
|
@@ -1407,6 +1470,14 @@
|
|
|
1407
1470
|
.crisp-menu-item--danger svg { color: var(--crisp-bg-danger); }
|
|
1408
1471
|
.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); }
|
|
1409
1472
|
.crisp-menu-item-label { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; }
|
|
1473
|
+
/* crisp#875: same measured neutral chip TableToolbar's own ToolbarTool
|
|
1474
|
+
count prop uses (re-confirmed on two live Attio surfaces this round:
|
|
1475
|
+
the Sort tool's own "+N" overflow, a Kanban board's stage-column
|
|
1476
|
+
count) -- a small badge, not bare text. */
|
|
1477
|
+
.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;
|
|
1478
|
+
padding: 0 var(--crisp-space-1); border-radius: var(--crisp-radius-sm); background: color-mix(in srgb, var(--crisp-fg-primary) 4%, transparent);
|
|
1479
|
+
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);
|
|
1480
|
+
font-variant-numeric: tabular-nums; }
|
|
1410
1481
|
.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; }
|
|
1411
1482
|
.crisp-menu-item-check { flex-shrink: 0; color: var(--crisp-bg-brand-solid); }
|
|
1412
1483
|
.crisp-menu-item-check--placeholder { width: 15px; }
|
|
@@ -1427,38 +1498,42 @@
|
|
|
1427
1498
|
}
|
|
1428
1499
|
|
|
1429
1500
|
|
|
1430
|
-
/* pointer-events: auto (#375)
|
|
1431
|
-
on document.body while open (Zag re-enables it only on layers IT
|
|
1432
|
-
tracks), and the portaled listbox is outside Zag's knowledge -- it
|
|
1433
|
-
inherited the lock, so every option was unclickable, hit-testing
|
|
1434
|
-
right through to whatever real element sat behind it. */
|
|
1501
|
+
/* pointer-events: auto (#375) -- see Select's matching comment. */
|
|
1435
1502
|
.crisp-multiselect-listbox {
|
|
1436
1503
|
font-family: var(--crisp-font-sans); -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale;
|
|
1437
|
-
position: fixed; z-index: 70; pointer-events: auto; box-sizing: border-box; display: flex; flex-direction: column; gap: var(--crisp-space-
|
|
1438
|
-
max-height:
|
|
1439
|
-
border-radius: var(--crisp-radius-
|
|
1440
|
-
box-shadow:
|
|
1441
|
-
transform-origin: top left; opacity: 1; transform: none;
|
|
1504
|
+
position: fixed; z-index: 70; pointer-events: auto; box-sizing: border-box; display: flex; flex-direction: column; gap: var(--crisp-space-2);
|
|
1505
|
+
max-height: 480px; overflow-y: auto; padding: var(--crisp-space-2);
|
|
1506
|
+
border-radius: var(--crisp-radius-3xl); background: var(--crisp-bg-select-listbox);
|
|
1507
|
+
box-shadow: 0 4px 16px var(--crisp-shadow-select);
|
|
1508
|
+
transform-origin: top left; opacity: 1; transform: none;
|
|
1509
|
+
transition: opacity .15s cubic-bezier(0,0,.15,1), transform .15s cubic-bezier(0,0,.15,1);
|
|
1442
1510
|
}
|
|
1443
1511
|
.crisp-multiselect-listbox[data-up] { transform-origin: bottom left; }
|
|
1444
|
-
.crisp-multiselect-listbox { @starting-style { opacity: 0; transform: scale(0.
|
|
1445
|
-
|
|
1512
|
+
.crisp-multiselect-listbox { @starting-style { opacity: 0; transform: scale(0.95); } }
|
|
1513
|
+
/* LOCKED geometry (#481, guarded by build/spec-check.mjs): height 36px,
|
|
1514
|
+
gap space["1.5"] (6px), no border-bottom -- an Attio measurement, not
|
|
1515
|
+
part of this seed-parity pass. Only colours below follow Select. */
|
|
1516
|
+
.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); }
|
|
1446
1517
|
.crisp-multiselect-search svg { flex-shrink: 0; }
|
|
1447
|
-
.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-
|
|
1448
|
-
.crisp-multiselect-search input::placeholder { color: var(--crisp-fg-
|
|
1449
|
-
/*
|
|
1450
|
-
|
|
1451
|
-
same "small muted heading above a run of rows" treatment. */
|
|
1452
|
-
.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); }
|
|
1518
|
+
.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); }
|
|
1519
|
+
.crisp-multiselect-search input::placeholder { color: var(--crisp-fg-select-placeholder); }
|
|
1520
|
+
/* Same groupLabel treatment as Select's (13px/regular/neutral-subtle). */
|
|
1521
|
+
.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); }
|
|
1453
1522
|
.crisp-multiselect-option {
|
|
1454
|
-
box-sizing: border-box; display: flex; align-items: center; gap: var(--crisp-space-2);
|
|
1455
|
-
padding:
|
|
1523
|
+
box-sizing: border-box; display: flex; align-items: center; gap: var(--crisp-space-2); flex-shrink: 0;
|
|
1524
|
+
padding: var(--crisp-space-2-5) var(--crisp-space-4); margin: 0; border: none; background: none; border-radius: var(--crisp-radius-xl);
|
|
1525
|
+
font-family: inherit; text-align: start; cursor: pointer;
|
|
1526
|
+
transition: background-color .15s cubic-bezier(.35,0,.35,1);
|
|
1456
1527
|
}
|
|
1528
|
+
/* Keyboard/hover highlight keeps crisp's own visible neutral fill, same
|
|
1529
|
+
reasoning as Select's matching rule (seed's own pressed tint is too
|
|
1530
|
+
faint for a keyboard-navigation indicator). */
|
|
1457
1531
|
.crisp-multiselect-option[data-highlighted] { background: var(--crisp-bg-raised); }
|
|
1532
|
+
.crisp-multiselect-option:active { background: var(--crisp-bg-select-pressed); }
|
|
1458
1533
|
.crisp-multiselect-option-chip { flex: 0 1 auto; min-width: 0; overflow: hidden; }
|
|
1459
1534
|
.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; }
|
|
1460
1535
|
.crisp-multiselect-option[aria-selected="true"] .crisp-multiselect-check { background: var(--crisp-bg-brand-solid); box-shadow: none; color: #fff; }
|
|
1461
|
-
.crisp-multiselect-empty { padding: var(--crisp-space-3) var(--crisp-space-
|
|
1536
|
+
.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); }
|
|
1462
1537
|
|
|
1463
1538
|
.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); }
|
|
1464
1539
|
.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); }
|
|
@@ -1471,21 +1546,41 @@
|
|
|
1471
1546
|
|
|
1472
1547
|
.crisp-multiselect {
|
|
1473
1548
|
position: relative; display: inline-flex; width: 100%; font-family: var(--crisp-font-sans); -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale;
|
|
1474
|
-
& .crisp-multiselect-trigger { box-sizing: border-box; display: flex; align-items: center;
|
|
1475
|
-
|
|
1476
|
-
|
|
1477
|
-
& .crisp-multiselect-trigger:disabled {
|
|
1549
|
+
& .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); }
|
|
1550
|
+
/* Same pressed/disabled/readonly/focus model as Select's trigger -- see
|
|
1551
|
+
that recipe's comment for why hover and an open/focus ring are gone. */
|
|
1552
|
+
& .crisp-multiselect-trigger:active:not(:disabled):not([aria-readonly="true"]) { background: var(--crisp-bg-select-pressed); }
|
|
1553
|
+
& .crisp-multiselect-trigger:focus-visible { outline: 2px solid var(--crisp-stroke-focus-ring); outline-offset: -2px; }
|
|
1554
|
+
& .crisp-multiselect-trigger:disabled { background: var(--crisp-bg-select-disabled); cursor: not-allowed; }
|
|
1555
|
+
& .crisp-multiselect-trigger:disabled .crisp-multiselect-placeholder, & .crisp-multiselect-trigger:disabled .crisp-multiselect-chevron { color: var(--crisp-fg-disabled); }
|
|
1556
|
+
& .crisp-multiselect-trigger[aria-readonly="true"] { background: var(--crisp-bg-select-disabled); cursor: default; }
|
|
1478
1557
|
& .crisp-multiselect-chips { flex: 1; min-width: 0; display: flex; flex-wrap: wrap; align-items: center; gap: var(--crisp-space-1); }
|
|
1479
|
-
& .crisp-multiselect-placeholder { color: var(--crisp-fg-
|
|
1480
|
-
|
|
1481
|
-
& .crisp-multiselect-
|
|
1558
|
+
& .crisp-multiselect-placeholder { color: var(--crisp-fg-select-placeholder); }
|
|
1559
|
+
/* closeRotateDuration/openRotateDuration, same asymmetric timing as Select's own chevron (see that recipe's comment). */
|
|
1560
|
+
& .crisp-multiselect-chevron { flex-shrink: 0; color: var(--crisp-fg-neutral-muted); transition: transform .1s cubic-bezier(.35,0,.35,1); }
|
|
1561
|
+
& .crisp-multiselect-trigger[data-open] .crisp-multiselect-chevron { transform: rotate(180deg); transition-duration: .15s; }
|
|
1562
|
+
}
|
|
1563
|
+
.crisp-multiselect--size_medium {
|
|
1564
|
+
& .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); }
|
|
1565
|
+
& .crisp-multiselect-chevron { width: var(--crisp-size-icon); height: var(--crisp-size-icon); }
|
|
1566
|
+
}
|
|
1567
|
+
.crisp-multiselect--size_large {
|
|
1568
|
+
& .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); }
|
|
1569
|
+
& .crisp-multiselect-chevron { width: var(--crisp-size-selectIconLg); height: var(--crisp-size-selectIconLg); }
|
|
1482
1570
|
}
|
|
1483
1571
|
.crisp-multiselect--invalid_true {
|
|
1484
|
-
& .crisp-multiselect-trigger
|
|
1572
|
+
& .crisp-multiselect-trigger { border-width: 2px; border-color: var(--crisp-stroke-select-invalid); }
|
|
1485
1573
|
}
|
|
1486
1574
|
.crisp-multiselect--invalid_false {
|
|
1487
1575
|
|
|
1488
1576
|
}
|
|
1577
|
+
.crisp-multiselect--variant_default {
|
|
1578
|
+
|
|
1579
|
+
}
|
|
1580
|
+
.crisp-multiselect--variant_ghost {
|
|
1581
|
+
& .crisp-multiselect-trigger { min-height: 0; height: 100%; border-color: transparent; }
|
|
1582
|
+
& .crisp-multiselect-trigger:hover:not(:disabled) { background: var(--crisp-bg-select-pressed); }
|
|
1583
|
+
}
|
|
1489
1584
|
|
|
1490
1585
|
@media (prefers-reduced-motion: reduce) {
|
|
1491
1586
|
.crisp-multiselect, .crisp-multiselect * {
|
|
@@ -1668,58 +1763,69 @@
|
|
|
1668
1763
|
|
|
1669
1764
|
|
|
1670
1765
|
/* pointer-events: auto (#375): a modal Dialog sets pointer-events: none
|
|
1671
|
-
on document.body while open
|
|
1672
|
-
|
|
1673
|
-
inherited the lock, so every option was unclickable, hit-testing
|
|
1674
|
-
right through to whatever real element sat behind it. */
|
|
1766
|
+
on document.body while open, and the portaled listbox is outside its
|
|
1767
|
+
knowledge -- it inherited the lock without this. */
|
|
1675
1768
|
.crisp-select-listbox {
|
|
1676
1769
|
font-family: var(--crisp-font-sans); -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale;
|
|
1677
|
-
position: fixed; z-index: 70; pointer-events: auto; box-sizing: border-box; display: flex; flex-direction: column; gap: var(--crisp-space-
|
|
1678
|
-
max-height:
|
|
1679
|
-
border-radius: var(--crisp-radius-
|
|
1680
|
-
box-shadow:
|
|
1681
|
-
transform-origin: top left; opacity: 1; transform: none;
|
|
1770
|
+
position: fixed; z-index: 70; pointer-events: auto; box-sizing: border-box; display: flex; flex-direction: column; gap: var(--crisp-space-2);
|
|
1771
|
+
max-height: 480px; overflow-y: auto; padding: var(--crisp-space-2);
|
|
1772
|
+
border-radius: var(--crisp-radius-3xl); background: var(--crisp-bg-select-listbox);
|
|
1773
|
+
box-shadow: 0 4px 16px var(--crisp-shadow-select);
|
|
1774
|
+
transform-origin: top left; opacity: 1; transform: none;
|
|
1775
|
+
transition: opacity .15s cubic-bezier(0,0,.15,1), transform .15s cubic-bezier(0,0,.15,1);
|
|
1682
1776
|
}
|
|
1683
|
-
.crisp-select-listbox[data-up] { transform-origin: bottom; }
|
|
1684
|
-
.crisp-select-listbox { @starting-style { opacity: 0; transform: scale(0.
|
|
1685
|
-
.crisp-select-search { display: flex; align-items: center; gap: var(--crisp-space-2); height: 34px; flex-shrink: 0; margin: calc(-1 * var(--crisp-space-
|
|
1777
|
+
.crisp-select-listbox[data-up] { transform-origin: bottom left; }
|
|
1778
|
+
.crisp-select-listbox { @starting-style { opacity: 0; transform: scale(0.95); } }
|
|
1779
|
+
.crisp-select-search { display: flex; align-items: center; gap: var(--crisp-space-2); height: 34px; flex-shrink: 0; margin: calc(-1 * var(--crisp-space-2)) calc(-1 * var(--crisp-space-2)) var(--crisp-space-2); padding: 0 var(--crisp-space-2-5); border-bottom: 1px solid var(--crisp-border-subtle); color: var(--crisp-fg-neutral-muted); }
|
|
1686
1780
|
.crisp-select-search svg { flex-shrink: 0; }
|
|
1687
|
-
.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-
|
|
1688
|
-
.crisp-select-search input::placeholder { color: var(--crisp-fg-
|
|
1689
|
-
.crisp-select-empty { padding: var(--crisp-space-3) var(--crisp-space-
|
|
1690
|
-
/*
|
|
1691
|
-
|
|
1692
|
-
|
|
1693
|
-
.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); }
|
|
1781
|
+
.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-select-neutral); }
|
|
1782
|
+
.crisp-select-search input::placeholder { color: var(--crisp-fg-select-placeholder); }
|
|
1783
|
+
.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); }
|
|
1784
|
+
/* select.yaml's groupLabel -- font-size/line-height/weight are the same
|
|
1785
|
+
across sizes, only paddingY differs (medium 8px, large 10px). */
|
|
1786
|
+
.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); }
|
|
1694
1787
|
.crisp-select-option {
|
|
1695
|
-
box-sizing: border-box; display: flex; align-items: center;
|
|
1696
|
-
padding:
|
|
1697
|
-
font-family: inherit;
|
|
1788
|
+
box-sizing: border-box; display: flex; align-items: center; flex-shrink: 0;
|
|
1789
|
+
padding: var(--crisp-space-2-5) var(--crisp-space-4); margin-inline: 0; border: none; background: none; border-radius: var(--crisp-radius-xl);
|
|
1790
|
+
font-family: inherit; color: var(--crisp-fg-select-neutral); text-align: start; cursor: pointer; white-space: nowrap;
|
|
1791
|
+
transition: background-color .15s cubic-bezier(.35,0,.35,1), margin-inline .15s cubic-bezier(.35,0,.35,1);
|
|
1698
1792
|
}
|
|
1793
|
+
/* Keyboard/hover highlight keeps crisp's own visible neutral fill --
|
|
1794
|
+
seed's spec has no "highlighted" state at all (only pressed/selected/
|
|
1795
|
+
disabled), and its actual pressed tint (below) is a ~3% black hint,
|
|
1796
|
+
too faint to serve as a keyboard-navigation indicator. */
|
|
1699
1797
|
.crisp-select-option[data-highlighted] { background: var(--crisp-bg-raised); }
|
|
1700
|
-
.crisp-select-option[data-disabled] {
|
|
1701
|
-
.crisp-select-option-
|
|
1798
|
+
.crisp-select-option:active:not([data-disabled]) { background: var(--crisp-bg-select-pressed); margin-inline: var(--crisp-space-2); }
|
|
1799
|
+
.crisp-select-option[data-disabled] { cursor: not-allowed; }
|
|
1800
|
+
.crisp-select-option[data-disabled] .crisp-select-option-label,
|
|
1801
|
+
.crisp-select-option[data-disabled] .crisp-select-option-description,
|
|
1802
|
+
.crisp-select-option[data-disabled] .crisp-select-option-check { color: var(--crisp-fg-disabled); }
|
|
1803
|
+
.crisp-select-option-dot { flex-shrink: 0; width: 8px; height: 8px; border-radius: var(--crisp-radius-full); margin-inline-end: var(--crisp-space-2); }
|
|
1804
|
+
.crisp-select-option-body { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: var(--crisp-space-0-5); }
|
|
1702
1805
|
.crisp-select-option-label { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; }
|
|
1703
|
-
.crisp-select-option-
|
|
1806
|
+
.crisp-select-option-description { min-width: 0; overflow: hidden; text-overflow: ellipsis; color: var(--crisp-fg-neutral-subtle); }
|
|
1807
|
+
.crisp-select-option-check { flex-shrink: 0; color: var(--crisp-fg-select-neutral); margin-inline-start: var(--crisp-space-2); }
|
|
1704
1808
|
|
|
1705
1809
|
.crisp-select {
|
|
1706
1810
|
position: relative; display: inline-flex; font-family: var(--crisp-font-sans); -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale;
|
|
1707
|
-
& .crisp-select-trigger { box-sizing: border-box; display: inline-flex; align-items: center;
|
|
1708
|
-
|
|
1709
|
-
|
|
1710
|
-
|
|
1711
|
-
& .crisp-select-
|
|
1712
|
-
& .crisp-select-
|
|
1713
|
-
& .crisp-select-
|
|
1714
|
-
& .crisp-select-trigger
|
|
1715
|
-
}
|
|
1716
|
-
|
|
1717
|
-
|
|
1718
|
-
|
|
1719
|
-
.crisp-select--
|
|
1720
|
-
|
|
1721
|
-
& .crisp-select-
|
|
1722
|
-
|
|
1811
|
+
& .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); }
|
|
1812
|
+
/* 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
|
|
1813
|
+
never moves. */
|
|
1814
|
+
/* 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). */
|
|
1815
|
+
& .crisp-select-trigger:active:not(:disabled):not([aria-readonly="true"]) { background: var(--crisp-bg-select-pressed); }
|
|
1816
|
+
& .crisp-select-trigger:active:not(:disabled):not([aria-readonly="true"]) .crisp-select-value { transform: scale(0.98); }
|
|
1817
|
+
& .crisp-select-trigger:focus-visible { outline: 2px solid var(--crisp-stroke-focus-ring); outline-offset: -2px; }
|
|
1818
|
+
& .crisp-select-trigger:disabled { background: var(--crisp-bg-select-disabled); cursor: not-allowed; }
|
|
1819
|
+
& .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); }
|
|
1820
|
+
/* readonly: same fill as disabled, but the value/placeholder text stays normal ink -- it reads as "answered and locked", not "answered and
|
|
1821
|
+
greyed out" (select-trigger.yaml's readonly state only overrides
|
|
1822
|
+
root.color; value/placeholder keep their enabled colours). */
|
|
1823
|
+
& .crisp-select-trigger[aria-readonly="true"] { background: var(--crisp-bg-select-disabled); cursor: default; }
|
|
1824
|
+
& .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); }
|
|
1825
|
+
& .crisp-select-placeholder { color: var(--crisp-fg-select-placeholder); }
|
|
1826
|
+
/* closeRotateDuration/closeRotateTimingFunction: 100ms, seed's "easing" curve. Overridden to 150ms on open (openRotateDuration) below -- same curve both ways, only the duration differs. */
|
|
1827
|
+
& .crisp-select-chevron { flex-shrink: 0; color: var(--crisp-fg-neutral-muted); transition: transform .1s cubic-bezier(.35,0,.35,1); }
|
|
1828
|
+
& .crisp-select-trigger[data-open] .crisp-select-chevron { transform: rotate(180deg); transition-duration: .15s; }
|
|
1723
1829
|
}
|
|
1724
1830
|
.crisp-select--width_full {
|
|
1725
1831
|
width: 100%;
|
|
@@ -1727,12 +1833,39 @@
|
|
|
1727
1833
|
.crisp-select--width_auto {
|
|
1728
1834
|
width: auto;
|
|
1729
1835
|
}
|
|
1836
|
+
.crisp-select--size_medium {
|
|
1837
|
+
& .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); }
|
|
1838
|
+
& .crisp-select-value, & .crisp-select-placeholder { font-size: var(--crisp-text-lg); line-height: 19px; }
|
|
1839
|
+
& .crisp-select-chevron { width: var(--crisp-size-icon); height: var(--crisp-size-icon); }
|
|
1840
|
+
.crisp-select-option { gap: var(--crisp-space-2); }
|
|
1841
|
+
.crisp-select-option-label { font-size: var(--crisp-text-lg); line-height: 19px; }
|
|
1842
|
+
.crisp-select-option-description { font-size: var(--crisp-text-sm); line-height: 16px; }
|
|
1843
|
+
.crisp-select-option-check { width: var(--crisp-space-3); height: var(--crisp-space-3); }
|
|
1844
|
+
.crisp-select-label { padding-top: var(--crisp-space-2); }
|
|
1845
|
+
}
|
|
1846
|
+
.crisp-select--size_large {
|
|
1847
|
+
& .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); }
|
|
1848
|
+
& .crisp-select-value, & .crisp-select-placeholder { font-size: var(--crisp-text-xl); line-height: 22px; }
|
|
1849
|
+
& .crisp-select-chevron { width: var(--crisp-size-selectIconLg); height: var(--crisp-size-selectIconLg); }
|
|
1850
|
+
.crisp-select-option { gap: var(--crisp-space-3); }
|
|
1851
|
+
.crisp-select-option-label { font-size: var(--crisp-text-xl); line-height: 22px; }
|
|
1852
|
+
.crisp-select-option-description { font-size: var(--crisp-text-md); line-height: 18px; }
|
|
1853
|
+
.crisp-select-option-check { width: var(--crisp-space-3-5); height: var(--crisp-space-3-5); }
|
|
1854
|
+
.crisp-select-label { padding-top: var(--crisp-space-2-5); }
|
|
1855
|
+
}
|
|
1730
1856
|
.crisp-select--invalid_true {
|
|
1731
|
-
& .crisp-select-trigger
|
|
1857
|
+
& .crisp-select-trigger { border-width: 2px; border-color: var(--crisp-stroke-select-invalid); }
|
|
1732
1858
|
}
|
|
1733
1859
|
.crisp-select--invalid_false {
|
|
1734
1860
|
|
|
1735
1861
|
}
|
|
1862
|
+
.crisp-select--variant_default {
|
|
1863
|
+
|
|
1864
|
+
}
|
|
1865
|
+
.crisp-select--variant_ghost {
|
|
1866
|
+
& .crisp-select-trigger { height: 100%; border-color: transparent; }
|
|
1867
|
+
& .crisp-select-trigger:hover:not(:disabled) { background: var(--crisp-bg-select-pressed); }
|
|
1868
|
+
}
|
|
1736
1869
|
|
|
1737
1870
|
@media (prefers-reduced-motion: reduce) {
|
|
1738
1871
|
.crisp-select, .crisp-select * {
|
|
@@ -1865,6 +1998,10 @@
|
|
|
1865
1998
|
|
|
1866
1999
|
}
|
|
1867
2000
|
|
|
2001
|
+
.crisp-statusdot {
|
|
2002
|
+
display: inline-block; box-sizing: border-box; flex-shrink: 0; width: 12px; height: 12px; border-radius: var(--crisp-radius-full);
|
|
2003
|
+
}
|
|
2004
|
+
|
|
1868
2005
|
.crisp-switch {
|
|
1869
2006
|
display: inline-flex; align-items: center; flex-shrink: 0; width: 24px; height: 16px; padding: 0; margin: 0; border: none; border-radius: var(--crisp-radius-full); background: color-mix(in srgb, var(--crisp-fg-primary) 9%, transparent); cursor: pointer; transition: background-color .2s ease; -webkit-tap-highlight-color: transparent;
|
|
1870
2007
|
& .crisp-switch-thumb { width: 12px; height: 12px; margin: 0 2px; border-radius: var(--crisp-radius-full); background: #fff; box-shadow: 0 0 0 1px var(--crisp-ring-switch); transition: transform .2s ease; }
|
|
@@ -2118,7 +2255,14 @@
|
|
|
2118
2255
|
& .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; }
|
|
2119
2256
|
|
|
2120
2257
|
& .crisp-tabletoolbar-sorted-prefix { color: color-mix(in srgb, var(--crisp-fg-primary) 63%, transparent); }
|
|
2121
|
-
& .crisp-tabletoolbar-sorted-count {
|
|
2258
|
+
& .crisp-tabletoolbar-sorted-count { display: inline-flex; align-items: center; height: 16px; box-sizing: border-box;
|
|
2259
|
+
padding: 0 var(--crisp-space-1); border-radius: var(--crisp-radius-sm); background: color-mix(in srgb, var(--crisp-fg-primary) 4%, transparent);
|
|
2260
|
+
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); }
|
|
2261
|
+
|
|
2262
|
+
& .crisp-tabletoolbar-tool-count { display: inline-flex; align-items: center; height: 16px; box-sizing: border-box;
|
|
2263
|
+
padding: 0 var(--crisp-space-1); border-radius: var(--crisp-radius-sm); background: color-mix(in srgb, var(--crisp-fg-primary) 4%, transparent);
|
|
2264
|
+
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);
|
|
2265
|
+
font-variant-numeric: tabular-nums; }
|
|
2122
2266
|
[dir="rtl"] & [data-rtl-flip] { transform: scaleX(-1); }
|
|
2123
2267
|
}
|
|
2124
2268
|
|
|
@@ -2143,6 +2287,12 @@
|
|
|
2143
2287
|
& .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); }
|
|
2144
2288
|
& .crisp-tabs-tab[data-selected] .crisp-tabs-tab-badge { color: var(--crisp-fg-primary); }
|
|
2145
2289
|
& .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; }
|
|
2290
|
+
/* 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/
|
|
2291
|
+
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
|
|
2292
|
+
lets the tabs.tsx effect recompute the cutoff from cached widths on
|
|
2293
|
+
every resize with no flash of an unclipped row. */
|
|
2294
|
+
& .crisp-tabs-more { display: inline-flex; }
|
|
2295
|
+
& [data-tabs-overflow-hidden] { position: absolute; visibility: hidden; pointer-events: none; }
|
|
2146
2296
|
& .crisp-tabs-panel { display: flex; flex-direction: column; flex: 1; min-height: 0; padding-top: var(--crisp-space-8); }
|
|
2147
2297
|
& .crisp-tabs-panel:focus-visible { outline: none; }
|
|
2148
2298
|
}
|
|
@@ -2170,6 +2320,12 @@
|
|
|
2170
2320
|
.crisp-text--tone_muted {
|
|
2171
2321
|
color: var(--crisp-fg-neutral-muted);
|
|
2172
2322
|
}
|
|
2323
|
+
.crisp-text--tone_brand {
|
|
2324
|
+
color: var(--crisp-bg-brand-solid);
|
|
2325
|
+
}
|
|
2326
|
+
.crisp-text--tone_danger {
|
|
2327
|
+
color: var(--crisp-fg-danger);
|
|
2328
|
+
}
|
|
2173
2329
|
|
|
2174
2330
|
.crisp-textarea {
|
|
2175
2331
|
position: relative; display: block; width: 100%; font-family: var(--crisp-font-sans);
|
|
@@ -2212,6 +2368,15 @@
|
|
|
2212
2368
|
font-size: var(--crisp-text-md); font-weight: var(--crisp-weight-regular); color: var(--crisp-fg-muted);
|
|
2213
2369
|
&:hover { color: var(--crisp-bg-brand-solid); }
|
|
2214
2370
|
}
|
|
2371
|
+
.crisp-textlink--size_sm {
|
|
2372
|
+
font-size: var(--crisp-text-sm);
|
|
2373
|
+
}
|
|
2374
|
+
.crisp-textlink--size_md {
|
|
2375
|
+
font-size: var(--crisp-text-md);
|
|
2376
|
+
}
|
|
2377
|
+
.crisp-textlink--size_lg {
|
|
2378
|
+
font-size: var(--crisp-text-lg);
|
|
2379
|
+
}
|
|
2215
2380
|
|
|
2216
2381
|
.crisp-toast {
|
|
2217
2382
|
display: contents; font-family: var(--crisp-font-sans);
|