@crisp-ui-kit/crisp 0.52.3 → 0.52.5
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/board.css +6 -6
- package/dist/board.layered.css +6 -6
- package/dist/cjs/components/datatable/datatable.recipe.js +4 -1
- package/dist/cjs/components/input/input.recipe.js +6 -1
- package/dist/cjs/components/switch/switch.recipe.js +4 -0
- package/dist/cjs/components/table/table.recipe.js +5 -1
- package/dist/cjs/components/textarea/textarea.recipe.js +6 -1
- package/dist/cjs/product/board/board.recipe.js +16 -6
- package/dist/cjs/product/inbox/inbox.recipe.js +6 -1
- package/dist/cjs/tokens/elevation.js +17 -2
- package/dist/cjs/tokens/palette.js +17 -0
- package/dist/cjs/tokens/semantic.js +2 -0
- package/dist/datatable.css +30 -24
- package/dist/datatable.layered.css +30 -24
- package/dist/esm/components/datatable/datatable.recipe.js +4 -1
- package/dist/esm/components/input/input.recipe.js +6 -1
- package/dist/esm/components/switch/switch.recipe.js +4 -0
- package/dist/esm/components/table/table.recipe.js +5 -1
- package/dist/esm/components/textarea/textarea.recipe.js +6 -1
- package/dist/esm/product/board/board.recipe.js +16 -6
- package/dist/esm/product/inbox/inbox.recipe.js +7 -2
- package/dist/esm/tokens/elevation.js +17 -2
- package/dist/esm/tokens/palette.js +17 -0
- package/dist/esm/tokens/semantic.js +2 -0
- package/dist/inbox.css +1 -1
- package/dist/inbox.layered.css +1 -1
- package/dist/input.css +1 -1
- package/dist/input.layered.css +1 -1
- package/dist/native/tokens.d.ts +1 -1
- package/dist/native/tokens.js +8 -0
- package/dist/styles.css +47 -35
- package/dist/styles.layered.css +47 -35
- package/dist/switch.css +1 -1
- package/dist/switch.layered.css +1 -1
- package/dist/table.css +3 -1
- package/dist/table.layered.css +3 -1
- package/dist/textarea.css +1 -1
- package/dist/textarea.layered.css +1 -1
- package/dist/tokens.css +4 -0
- package/dist/tokens.json +8 -0
- package/dist/types/components/switch/switch.recipe.d.ts +1 -0
- package/dist/types/tokens/contract.d.ts +2 -0
- package/dist/types/tokens/elevation.d.ts +17 -2
- package/dist/types/tokens/palette.d.ts +8 -0
- package/dist/types/tokens/semantic.d.ts +2 -0
- package/package.json +1 -1
package/dist/styles.layered.css
CHANGED
|
@@ -8,6 +8,8 @@
|
|
|
8
8
|
--crisp-border-default: #e4e4e7;
|
|
9
9
|
--crisp-border-subtle: #eeeff1;
|
|
10
10
|
--crisp-ring-neutral: transparent;
|
|
11
|
+
--crisp-ring-field: rgba(0,0,0,0.06);
|
|
12
|
+
--crisp-ring-switch: #d9dade;
|
|
11
13
|
--crisp-bg-tile-active: #ffffff;
|
|
12
14
|
--crisp-shadow-tile-active: rgba(0,0,0,0.04);
|
|
13
15
|
--crisp-bg-overlay-frost: #ffffff;
|
|
@@ -55,6 +57,8 @@
|
|
|
55
57
|
--crisp-border-default: #212224;
|
|
56
58
|
--crisp-border-subtle: #1c1d1f;
|
|
57
59
|
--crisp-ring-neutral: #212224;
|
|
60
|
+
--crisp-ring-field: #212224;
|
|
61
|
+
--crisp-ring-switch: #212224;
|
|
58
62
|
--crisp-bg-tile-active: #101112;
|
|
59
63
|
--crisp-shadow-tile-active: rgba(0,0,0,0);
|
|
60
64
|
--crisp-bg-overlay-frost: #1c1d1f;
|
|
@@ -573,13 +577,15 @@
|
|
|
573
577
|
& .crisp-datatable-th-rename { width: 100%; min-width: 0; height: var(--crisp-size-row); margin: 0; padding: 0 var(--crisp-space-1); border: none; border-radius: var(--crisp-radius-md); background: var(--crisp-bg-surface); box-shadow: inset 0 0 0 1px var(--crisp-bg-brand-solid); font-family: inherit; font-size: var(--crisp-text-lg); font-weight: var(--crisp-weight-medium); color: var(--crisp-fg-primary); outline: none; }
|
|
574
578
|
& .crisp-datatable-th-rename:focus { box-shadow: inset 0 0 0 1px var(--crisp-bg-brand-solid); }
|
|
575
579
|
& .crisp-datatable-th-label { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; min-width: 0; }
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
580
|
+
/* #465: 12px per the comment above (and Attio's measured header cell
|
|
581
|
+
padding: 0 12px) -- was still c.space["2"] (8px), drifted from its
|
|
582
|
+
own documented value. */
|
|
583
|
+
& .crisp-datatable-sort { display: flex; align-items: center; gap: var(--crisp-space-1-5); width: 100%; min-width: 0; height: 100%; margin: 0; padding: 0 var(--crisp-space-3); border: none; background: none; font: inherit; letter-spacing: inherit; color: inherit; text-align: start; cursor: pointer; }
|
|
584
|
+
/* A right-aligned column's header keeps its field-icon + label packed at the START, matching its own values only in that the VALUES right-align -- Attio's own right-aligned header (measured live: "Twitter follower
|
|
585
|
+
count") keeps the icon+label left and only the trailing column-menu
|
|
586
|
+
icon sits pinned to the right edge, independent of the label's width (#406, reversing #393's own justify-content: flex-end here). The
|
|
587
|
+
chevron's own margin-inline-start: auto below already pins IT to the end of a flex-start row with no override needed -- that's what pins
|
|
588
|
+
the trailing icon on Attio too. */
|
|
583
589
|
& .crisp-datatable-chevron { margin-inline-start: auto; flex-shrink: 0; color: var(--crisp-fg-muted); opacity: 0; transition: opacity .12s; }
|
|
584
590
|
& .crisp-datatable-sort:hover .crisp-datatable-chevron { opacity: 0.6; }
|
|
585
591
|
& .crisp-datatable-sort[data-sorted] .crisp-datatable-chevron { opacity: 1; color: var(--crisp-fg-primary); }
|
|
@@ -603,25 +609,23 @@
|
|
|
603
609
|
& .crisp-datatable-editable:hover { background: color-mix(in srgb, var(--crisp-fg-primary) 4%, var(--crisp-bg-surface)); cursor: text; }
|
|
604
610
|
& .crisp-datatable-edit { width: 100%; height: 28px; margin: 0; padding: 0 var(--crisp-space-1-5); border: none; border-radius: var(--crisp-radius-sm); background: var(--crisp-bg-surface); box-shadow: inset 0 0 0 1px var(--crisp-bg-brand-solid); font-family: inherit; font-size: var(--crisp-text-lg); color: var(--crisp-fg-primary); outline: none; vertical-align: middle; }
|
|
605
611
|
& .crisp-datatable-edit:focus { box-shadow: inset 0 0 0 1px var(--crisp-bg-brand-solid); }
|
|
606
|
-
/* An async onEdit's in-flight state (#385) -- the field/picker dims and
|
|
607
|
-
stops accepting input rather than disappearing, so the just-typed or
|
|
608
|
-
just-chosen value stays visible while its commit is pending. Same
|
|
609
|
-
treatment Input already gives its own disabled state. */
|
|
612
|
+
/* An async onEdit's in-flight state (#385) -- the field/picker dims and stops accepting input rather than disappearing, so the just-typed or just-chosen value stays visible while its commit is pending. Same treatment Input already gives its own disabled state. */
|
|
610
613
|
& .crisp-datatable-edit:disabled { opacity: 0.5; cursor: not-allowed; }
|
|
611
614
|
& .crisp-datatable-edit-pending { flex-shrink: 0; margin-inline-start: var(--crisp-space-1); color: var(--crisp-fg-muted); vertical-align: middle; }
|
|
612
|
-
/* The rejection's message, beside the cell's own content -- a sibling in
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
the row below, so it can never end up clipped by the scroll
|
|
616
|
-
container's overflow the way a position:fixed escape would need guarding against. */
|
|
615
|
+
/* The rejection's message, beside the cell's own content -- a sibling in the TableCell, never nested inside a column's own render output, so a
|
|
616
|
+
hover-only wrapper (a Tooltip, say) around a custom render can't hide it. Block-level: the row grows to fit it rather than floating over the row below, so it can never end up clipped by the scroll container's overflow the way a position:fixed escape would need
|
|
617
|
+
guarding against. */
|
|
617
618
|
& .crisp-datatable-edit-error { display: block; padding: var(--crisp-space-0-5) 0 0; font-size: var(--crisp-text-sm); color: var(--crisp-bg-danger); }
|
|
618
|
-
/* editor: "select"/"switch" -- always live, no separate edit mode, so
|
|
619
|
-
|
|
619
|
+
/* editor: "select"/"switch" -- always live, no separate edit mode, so
|
|
620
|
+
the cell IS the picker: same chromeless-fill treatment as
|
|
621
|
+
RecordsTable's own --picker cells (measured there already; DataTable shares RecordsTable's grid, Golden Rule 0). */
|
|
620
622
|
& .crisp-datatable-td--picker { padding: 0; }
|
|
621
623
|
& .crisp-datatable-edit-picker { display: flex; align-items: center; gap: var(--crisp-space-1); height: var(--crisp-size-tableRow); padding: 0 var(--crisp-space-2); }
|
|
622
624
|
& .crisp-datatable-edit-picker .crisp-select-trigger { flex: 1; min-width: 0; height: 100%; min-height: 0; border-radius: 0; box-shadow: none; padding: 0; }
|
|
623
625
|
& .crisp-datatable-td--picker .crisp-datatable-edit-error { padding-inline-start: var(--crisp-space-2); }
|
|
624
|
-
/* reference picker: a leading 16px avatar per option, plus a trailing
|
|
626
|
+
/* reference picker: a leading 16px avatar per option, plus a trailing
|
|
627
|
+
"Create X" row when the consumer supplies one (#449) -- same measured
|
|
628
|
+
values as RecordsTable's own .crisp-recordstable-refoption*. */
|
|
625
629
|
& .crisp-datatable-refoption { display: flex; align-items: center; gap: var(--crisp-space-2); min-width: 0; overflow: hidden; text-overflow: ellipsis; }
|
|
626
630
|
& .crisp-datatable-refoption-avatar { flex-shrink: 0; }
|
|
627
631
|
& .crisp-datatable-refoption--create { color: var(--crisp-fg-muted); }
|
|
@@ -636,7 +640,12 @@
|
|
|
636
640
|
& .crisp-datatable-entity { display: flex; align-items: center; gap: var(--crisp-space-1-5); min-width: 0; color: var(--crisp-fg-primary); font-weight: var(--crisp-weight-medium); }
|
|
637
641
|
& .crisp-datatable-entity-name { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
|
|
638
642
|
& .crisp-datatable-avatar { width: var(--crisp-size-icon); height: var(--crisp-size-icon); border-radius: var(--crisp-radius-sm); flex-shrink: 0; display: inline-flex; align-items: center; justify-content: center; font-size: 10px; line-height: 1; font-weight: var(--crisp-weight-semibold); text-transform: uppercase; color: var(--crisp-fg-on-brand); background: var(--crisp-bg-brand-solid); }
|
|
639
|
-
& .crisp-datatable-avatar[data-tone="success"] { background: var(--crisp-bg-success); }
|
|
643
|
+
& .crisp-datatable-avatar[data-tone="success"] { background: var(--crisp-bg-success); }
|
|
644
|
+
& .crisp-datatable-avatar[data-tone="warning"] { background: var(--crisp-bg-warning); }
|
|
645
|
+
& .crisp-datatable-avatar[data-tone="danger"] { background: var(--crisp-bg-danger); }
|
|
646
|
+
& .crisp-datatable-avatar[data-tone="purple"] { background: var(--crisp-bg-purple); }
|
|
647
|
+
& .crisp-datatable-avatar[data-tone="cyan"] { background: var(--crisp-bg-cyan); }
|
|
648
|
+
& .crisp-datatable-avatar[data-tone="orange"] { background: var(--crisp-bg-orange); }
|
|
640
649
|
& .crisp-datatable-avatar img { width: 100%; height: 100%; border-radius: inherit; object-fit: cover; }
|
|
641
650
|
& .crisp-datatable-tags { display: flex; align-items: center; gap: var(--crisp-space-1); overflow: hidden; }
|
|
642
651
|
& .crisp-datatable-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; background: color-mix(in srgb, var(--crisp-fg-primary) 6%, transparent); color: color-mix(in srgb, var(--crisp-fg-primary) 82%, transparent); }
|
|
@@ -649,10 +658,11 @@
|
|
|
649
658
|
& .crisp-datatable-tag[data-tone="orange"] { background: color-mix(in srgb, var(--crisp-bg-orange) 16%, transparent); color: color-mix(in srgb, var(--crisp-bg-orange) 82%, var(--crisp-fg-primary)); }
|
|
650
659
|
& .crisp-datatable-num { font-variant-numeric: tabular-nums; }
|
|
651
660
|
& .crisp-datatable-muted { color: var(--crisp-fg-muted); }
|
|
652
|
-
/* row drag-to-reorder -- a Settings > Objects > Attributes screen measures
|
|
653
|
-
|
|
654
|
-
|
|
655
|
-
(RecordsTable's reorderColumn) -- not a proprietary
|
|
661
|
+
/* row drag-to-reorder -- a Settings > Objects > Attributes screen measures a leading 20px grip column, a 16px grip icon, and the row's own
|
|
662
|
+
hairline doubling as the drop indicator (it tints toward the brand
|
|
663
|
+
colour as the active drop target). The affordance + geometry are
|
|
664
|
+
measured; the drag MECHANISM is crisp's existing house idiom -- HTML5 draggable + dataTransfer, the same one column reorder already uses (RecordsTable's reorderColumn) -- not a proprietary
|
|
665
|
+
pointer-events implementation. */
|
|
656
666
|
& .crisp-datatable-col-grip { width: 20px; padding: 0; text-align: center; }
|
|
657
667
|
& .crisp-datatable-grip { display: inline-flex; align-items: center; justify-content: center; width: 100%; height: 100%; margin: 0; border: none; border-radius: 0; background: none; font-family: inherit; color: var(--crisp-fg-muted); cursor: grab; }
|
|
658
668
|
& .crisp-datatable-grip:active { cursor: grabbing; }
|
|
@@ -1017,7 +1027,7 @@
|
|
|
1017
1027
|
}
|
|
1018
1028
|
|
|
1019
1029
|
.crisp-input {
|
|
1020
|
-
position: relative; box-sizing: border-box; display: inline-flex; align-items: center; width: 100%; background: var(--crisp-bg-surface); box-shadow: inset 0 0 0 1px var(--crisp-ring-
|
|
1030
|
+
position: relative; box-sizing: border-box; display: inline-flex; align-items: center; width: 100%; background: var(--crisp-bg-surface); box-shadow: inset 0 0 0 1px var(--crisp-ring-field); font-family: var(--crisp-font-sans); font-size: var(--crisp-text-lg); line-height: 20px;
|
|
1021
1031
|
&::after { content: ""; position: absolute; inset: 0; border-radius: inherit; border: 2px solid transparent; transition: border-color .1s ease; pointer-events: none; }
|
|
1022
1032
|
&:focus-within::after { border-color: var(--crisp-stroke-field-focus); }
|
|
1023
1033
|
& .crisp-input-value { box-sizing: border-box; flex: 1 1 auto; min-width: 0; width: 100%; align-self: stretch; margin: 0; border: none; background: none; outline: none; font: inherit; color: var(--crisp-fg-primary); }
|
|
@@ -1547,7 +1557,7 @@
|
|
|
1547
1557
|
|
|
1548
1558
|
.crisp-switch {
|
|
1549
1559
|
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;
|
|
1550
|
-
& .crisp-switch-thumb { width: 12px; height: 12px; margin: 0 2px; border-radius: var(--crisp-radius-full); background: #fff; transition: transform .2s ease; }
|
|
1560
|
+
& .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; }
|
|
1551
1561
|
&[data-checked] { background: var(--crisp-bg-brand-solid); }
|
|
1552
1562
|
&[data-checked] .crisp-switch-thumb { transform: translateX(8px); }
|
|
1553
1563
|
&:focus-visible { outline: 2px solid var(--crisp-bg-brand-solid); outline-offset: 2px; }
|
|
@@ -1566,7 +1576,9 @@
|
|
|
1566
1576
|
display: block; box-sizing: border-box; background: var(--crisp-bg-surface);
|
|
1567
1577
|
& .crisp-table-scroll { overflow-x: auto; }
|
|
1568
1578
|
& table { width: 100%; border-collapse: separate; border-spacing: 0; font-family: var(--crisp-font-sans); font-size: var(--crisp-text-lg); color: var(--crisp-fg-primary); }
|
|
1569
|
-
|
|
1579
|
+
/* #465: 12px, not crisp's old 8px -- measured on a live header cell
|
|
1580
|
+
(padding: 0 12px) and independently on a body cell's text inset (getBoundingClientRect delta from the cell edge). Matches ColumnCalc's own already-correct 12px trigger inset. */
|
|
1581
|
+
& th, & td { position: relative; height: var(--crisp-size-tableRow); padding: 0 var(--crisp-space-3); border-bottom: 1px solid var(--crisp-border-subtle); border-inline-end: 1px solid var(--crisp-border-subtle); text-align: start; vertical-align: middle; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
|
|
1570
1582
|
& th { height: var(--crisp-size-tableHeader); background: var(--crisp-bg-surface); border-top: 1px solid var(--crisp-border-subtle); font-size: var(--crisp-text-lg); font-weight: var(--crisp-weight-medium); letter-spacing: -0.14px; color: color-mix(in srgb, var(--crisp-fg-primary) 63%, transparent); user-select: none; }
|
|
1571
1583
|
& td { color: var(--crisp-fg-primary); background: var(--crisp-bg-surface); }
|
|
1572
1584
|
& th:last-child, & td:last-child { border-inline-end: none; }
|
|
@@ -1705,7 +1717,7 @@
|
|
|
1705
1717
|
|
|
1706
1718
|
.crisp-textarea {
|
|
1707
1719
|
position: relative; display: block; width: 100%; font-family: var(--crisp-font-sans);
|
|
1708
|
-
& .crisp-textarea-field { box-sizing: border-box; display: block; width: 100%; min-height: 80px; resize: vertical; margin: 0; padding: var(--crisp-space-2-5) 14px; border: none; border-radius: var(--crisp-radius-md); background: var(--crisp-bg-surface); box-shadow: inset 0 0 0 1px var(--crisp-ring-
|
|
1720
|
+
& .crisp-textarea-field { box-sizing: border-box; display: block; width: 100%; min-height: 80px; resize: vertical; margin: 0; padding: var(--crisp-space-2-5) 14px; border: none; border-radius: var(--crisp-radius-md); background: var(--crisp-bg-surface); box-shadow: inset 0 0 0 1px var(--crisp-ring-field); font-family: inherit; font-size: var(--crisp-text-lg); line-height: 20px; color: var(--crisp-fg-primary); outline: none; transition: box-shadow .15s ease; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; }
|
|
1709
1721
|
& .crisp-textarea-field::placeholder { color: var(--crisp-fg-muted); }
|
|
1710
1722
|
& .crisp-textarea-field:disabled { opacity: 0.5; cursor: not-allowed; }
|
|
1711
1723
|
/* seed-design's focus treatment, same as Input: a 2px ring on an ::after
|
|
@@ -1861,19 +1873,19 @@
|
|
|
1861
1873
|
}
|
|
1862
1874
|
|
|
1863
1875
|
.crisp-board {
|
|
1864
|
-
display: flex; gap: var(--crisp-space-
|
|
1865
|
-
& .crisp-board-col { display: flex; flex-direction: column; width:
|
|
1876
|
+
display: flex; gap: var(--crisp-space-2); height: 100%; box-sizing: border-box; padding: var(--crisp-space-3); overflow-x: auto; align-items: flex-start; font-family: var(--crisp-font-sans);
|
|
1877
|
+
& .crisp-board-col { display: flex; flex-direction: column; width: 268px; flex-shrink: 0; max-height: 100%; box-sizing: border-box; }
|
|
1866
1878
|
& .crisp-board-col-header { display: flex; align-items: center; gap: var(--crisp-space-2); height: 36px; padding: 0 var(--crisp-space-1); flex-shrink: 0; }
|
|
1867
|
-
& .crisp-board-col-dot { width:
|
|
1879
|
+
& .crisp-board-col-dot { width: 12px; height: 12px; border-radius: var(--crisp-radius-full); flex-shrink: 0; }
|
|
1868
1880
|
& .crisp-board-col-title { font-size: var(--crisp-text-lg); font-weight: var(--crisp-weight-semibold); color: var(--crisp-fg-primary); }
|
|
1869
|
-
& .crisp-board-col-count { font-size: var(--crisp-text-
|
|
1870
|
-
& .crisp-board-col-add { display: inline-flex; align-items: center; justify-content: center; width:
|
|
1881
|
+
& .crisp-board-col-count { display: inline-flex; align-items: center; justify-content: center; min-width: 16px; height: 16px; padding: 0 var(--crisp-space-1); border-radius: var(--crisp-radius-sm); background: color-mix(in srgb, var(--crisp-fg-primary) 4%, transparent); font-size: var(--crisp-text-sm); font-weight: var(--crisp-weight-medium); color: color-mix(in srgb, var(--crisp-fg-primary) 63%, transparent); }
|
|
1882
|
+
& .crisp-board-col-add { display: inline-flex; align-items: center; justify-content: center; width: 20px; height: 20px; margin-inline-start: auto; padding: 0; border: none; border-radius: var(--crisp-radius-sm); background: none; color: var(--crisp-fg-muted); font-family: inherit; cursor: pointer; }
|
|
1871
1883
|
& .crisp-board-col-add:hover { background: color-mix(in srgb, var(--crisp-fg-primary) 6%, transparent); color: var(--crisp-fg-primary); }
|
|
1872
1884
|
& .crisp-board-col-body { display: flex; flex-direction: column; gap: var(--crisp-space-2); flex: 1; min-height: 48px; padding: var(--crisp-space-1); border-radius: var(--crisp-radius-lg); overflow-y: auto; transition: background 0.12s; }
|
|
1873
1885
|
& .crisp-board-col[data-over] .crisp-board-col-body { background: color-mix(in srgb, var(--crisp-bg-brand-solid) 7%, transparent); box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--crisp-bg-brand-solid) 30%, transparent); }
|
|
1874
1886
|
& .crisp-board-newcard { display: flex; align-items: center; justify-content: center; gap: var(--crisp-space-1-5); height: 32px; flex-shrink: 0; border: none; border-radius: var(--crisp-radius-md); background: color-mix(in srgb, var(--crisp-fg-primary) 4%, transparent); color: var(--crisp-fg-muted); font-family: inherit; font-size: var(--crisp-text-md); font-weight: var(--crisp-weight-medium); cursor: pointer; }
|
|
1875
1887
|
& .crisp-board-newcard:hover { background: color-mix(in srgb, var(--crisp-fg-primary) 7%, transparent); color: var(--crisp-fg-primary); }
|
|
1876
|
-
& .crisp-board-card { display: flex; flex-direction: column; gap: var(--crisp-space-2); box-sizing: border-box; padding: var(--crisp-space-2-5) var(--crisp-space-3); border-radius: var(--crisp-radius-
|
|
1888
|
+
& .crisp-board-card { display: flex; flex-direction: column; gap: var(--crisp-space-2); box-sizing: border-box; padding: var(--crisp-space-2-5) var(--crisp-space-3); border-radius: var(--crisp-radius-xl); background: var(--crisp-bg-surface); box-shadow: inset 0 0 0 1px var(--crisp-border-subtle); cursor: grab; }
|
|
1877
1889
|
& .crisp-board-card:active { cursor: grabbing; }
|
|
1878
1890
|
& .crisp-board-card[data-dragging] { opacity: 0.4; }
|
|
1879
1891
|
& .crisp-board-card:focus { outline: none; }
|
|
@@ -1969,7 +1981,7 @@
|
|
|
1969
1981
|
}
|
|
1970
1982
|
|
|
1971
1983
|
.crisp-inbox {
|
|
1972
|
-
display: flex; flex-direction: column; box-sizing: border-box; width: 380px; max-height: 588px; border-radius: var(--crisp-radius-xl); background: var(--crisp-bg-surface); font-family: var(--crisp-font-sans); overflow: hidden; box-shadow: inset 0 0 0 1px
|
|
1984
|
+
display: flex; flex-direction: column; box-sizing: border-box; width: 380px; max-height: 588px; border-radius: var(--crisp-radius-xl); background: var(--crisp-bg-surface); font-family: var(--crisp-font-sans); overflow: hidden; box-shadow: inset 0 0 0 1px var(--crisp-ring-popover), 0 0 0 1px var(--crisp-shadow-popover1), 0 4px 8px -4px var(--crisp-shadow-popover2), 0 4px 12px -2px var(--crisp-shadow-popover3); -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale;
|
|
1973
1985
|
& .crisp-inbox-head { padding: var(--crisp-space-3) var(--crisp-space-3) 0; }
|
|
1974
1986
|
& .crisp-inbox-title { font-size: var(--crisp-text-xl); line-height: 28px; font-weight: var(--crisp-weight-semibold); letter-spacing: -0.3px; color: var(--crisp-fg-primary); }
|
|
1975
1987
|
& .crisp-inbox-tabs { display: flex; gap: var(--crisp-space-3); margin-top: var(--crisp-space-2); box-shadow: inset 0 -1px 0 var(--crisp-border-subtle); }
|
package/dist/switch.css
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
.crisp-switch {
|
|
2
2
|
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;
|
|
3
|
-
& .crisp-switch-thumb { width: 12px; height: 12px; margin: 0 2px; border-radius: var(--crisp-radius-full); background: #fff; transition: transform .2s ease; }
|
|
3
|
+
& .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; }
|
|
4
4
|
&[data-checked] { background: var(--crisp-bg-brand-solid); }
|
|
5
5
|
&[data-checked] .crisp-switch-thumb { transform: translateX(8px); }
|
|
6
6
|
&:focus-visible { outline: 2px solid var(--crisp-bg-brand-solid); outline-offset: 2px; }
|
package/dist/switch.layered.css
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
@layer crisp-components {
|
|
2
2
|
.crisp-switch {
|
|
3
3
|
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;
|
|
4
|
-
& .crisp-switch-thumb { width: 12px; height: 12px; margin: 0 2px; border-radius: var(--crisp-radius-full); background: #fff; transition: transform .2s ease; }
|
|
4
|
+
& .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; }
|
|
5
5
|
&[data-checked] { background: var(--crisp-bg-brand-solid); }
|
|
6
6
|
&[data-checked] .crisp-switch-thumb { transform: translateX(8px); }
|
|
7
7
|
&:focus-visible { outline: 2px solid var(--crisp-bg-brand-solid); outline-offset: 2px; }
|
package/dist/table.css
CHANGED
|
@@ -2,7 +2,9 @@
|
|
|
2
2
|
display: block; box-sizing: border-box; background: var(--crisp-bg-surface);
|
|
3
3
|
& .crisp-table-scroll { overflow-x: auto; }
|
|
4
4
|
& table { width: 100%; border-collapse: separate; border-spacing: 0; font-family: var(--crisp-font-sans); font-size: var(--crisp-text-lg); color: var(--crisp-fg-primary); }
|
|
5
|
-
|
|
5
|
+
/* #465: 12px, not crisp's old 8px -- measured on a live header cell
|
|
6
|
+
(padding: 0 12px) and independently on a body cell's text inset (getBoundingClientRect delta from the cell edge). Matches ColumnCalc's own already-correct 12px trigger inset. */
|
|
7
|
+
& th, & td { position: relative; height: var(--crisp-size-tableRow); padding: 0 var(--crisp-space-3); border-bottom: 1px solid var(--crisp-border-subtle); border-inline-end: 1px solid var(--crisp-border-subtle); text-align: start; vertical-align: middle; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
|
|
6
8
|
& th { height: var(--crisp-size-tableHeader); background: var(--crisp-bg-surface); border-top: 1px solid var(--crisp-border-subtle); font-size: var(--crisp-text-lg); font-weight: var(--crisp-weight-medium); letter-spacing: -0.14px; color: color-mix(in srgb, var(--crisp-fg-primary) 63%, transparent); user-select: none; }
|
|
7
9
|
& td { color: var(--crisp-fg-primary); background: var(--crisp-bg-surface); }
|
|
8
10
|
& th:last-child, & td:last-child { border-inline-end: none; }
|
package/dist/table.layered.css
CHANGED
|
@@ -3,7 +3,9 @@
|
|
|
3
3
|
display: block; box-sizing: border-box; background: var(--crisp-bg-surface);
|
|
4
4
|
& .crisp-table-scroll { overflow-x: auto; }
|
|
5
5
|
& table { width: 100%; border-collapse: separate; border-spacing: 0; font-family: var(--crisp-font-sans); font-size: var(--crisp-text-lg); color: var(--crisp-fg-primary); }
|
|
6
|
-
|
|
6
|
+
/* #465: 12px, not crisp's old 8px -- measured on a live header cell
|
|
7
|
+
(padding: 0 12px) and independently on a body cell's text inset (getBoundingClientRect delta from the cell edge). Matches ColumnCalc's own already-correct 12px trigger inset. */
|
|
8
|
+
& th, & td { position: relative; height: var(--crisp-size-tableRow); padding: 0 var(--crisp-space-3); border-bottom: 1px solid var(--crisp-border-subtle); border-inline-end: 1px solid var(--crisp-border-subtle); text-align: start; vertical-align: middle; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
|
|
7
9
|
& th { height: var(--crisp-size-tableHeader); background: var(--crisp-bg-surface); border-top: 1px solid var(--crisp-border-subtle); font-size: var(--crisp-text-lg); font-weight: var(--crisp-weight-medium); letter-spacing: -0.14px; color: color-mix(in srgb, var(--crisp-fg-primary) 63%, transparent); user-select: none; }
|
|
8
10
|
& td { color: var(--crisp-fg-primary); background: var(--crisp-bg-surface); }
|
|
9
11
|
& th:last-child, & td:last-child { border-inline-end: none; }
|
package/dist/textarea.css
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
.crisp-textarea {
|
|
2
2
|
position: relative; display: block; width: 100%; font-family: var(--crisp-font-sans);
|
|
3
|
-
& .crisp-textarea-field { box-sizing: border-box; display: block; width: 100%; min-height: 80px; resize: vertical; margin: 0; padding: var(--crisp-space-2-5) 14px; border: none; border-radius: var(--crisp-radius-md); background: var(--crisp-bg-surface); box-shadow: inset 0 0 0 1px var(--crisp-ring-
|
|
3
|
+
& .crisp-textarea-field { box-sizing: border-box; display: block; width: 100%; min-height: 80px; resize: vertical; margin: 0; padding: var(--crisp-space-2-5) 14px; border: none; border-radius: var(--crisp-radius-md); background: var(--crisp-bg-surface); box-shadow: inset 0 0 0 1px var(--crisp-ring-field); font-family: inherit; font-size: var(--crisp-text-lg); line-height: 20px; color: var(--crisp-fg-primary); outline: none; transition: box-shadow .15s ease; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; }
|
|
4
4
|
& .crisp-textarea-field::placeholder { color: var(--crisp-fg-muted); }
|
|
5
5
|
& .crisp-textarea-field:disabled { opacity: 0.5; cursor: not-allowed; }
|
|
6
6
|
/* seed-design's focus treatment, same as Input: a 2px ring on an ::after
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
@layer crisp-components {
|
|
2
2
|
.crisp-textarea {
|
|
3
3
|
position: relative; display: block; width: 100%; font-family: var(--crisp-font-sans);
|
|
4
|
-
& .crisp-textarea-field { box-sizing: border-box; display: block; width: 100%; min-height: 80px; resize: vertical; margin: 0; padding: var(--crisp-space-2-5) 14px; border: none; border-radius: var(--crisp-radius-md); background: var(--crisp-bg-surface); box-shadow: inset 0 0 0 1px var(--crisp-ring-
|
|
4
|
+
& .crisp-textarea-field { box-sizing: border-box; display: block; width: 100%; min-height: 80px; resize: vertical; margin: 0; padding: var(--crisp-space-2-5) 14px; border: none; border-radius: var(--crisp-radius-md); background: var(--crisp-bg-surface); box-shadow: inset 0 0 0 1px var(--crisp-ring-field); font-family: inherit; font-size: var(--crisp-text-lg); line-height: 20px; color: var(--crisp-fg-primary); outline: none; transition: box-shadow .15s ease; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; }
|
|
5
5
|
& .crisp-textarea-field::placeholder { color: var(--crisp-fg-muted); }
|
|
6
6
|
& .crisp-textarea-field:disabled { opacity: 0.5; cursor: not-allowed; }
|
|
7
7
|
/* seed-design's focus treatment, same as Input: a 2px ring on an ::after
|
package/dist/tokens.css
CHANGED
|
@@ -8,6 +8,8 @@
|
|
|
8
8
|
--crisp-border-default: #e4e4e7;
|
|
9
9
|
--crisp-border-subtle: #eeeff1;
|
|
10
10
|
--crisp-ring-neutral: transparent;
|
|
11
|
+
--crisp-ring-field: rgba(0,0,0,0.06);
|
|
12
|
+
--crisp-ring-switch: #d9dade;
|
|
11
13
|
--crisp-bg-tile-active: #ffffff;
|
|
12
14
|
--crisp-shadow-tile-active: rgba(0,0,0,0.04);
|
|
13
15
|
--crisp-bg-overlay-frost: #ffffff;
|
|
@@ -55,6 +57,8 @@
|
|
|
55
57
|
--crisp-border-default: #212224;
|
|
56
58
|
--crisp-border-subtle: #1c1d1f;
|
|
57
59
|
--crisp-ring-neutral: #212224;
|
|
60
|
+
--crisp-ring-field: #212224;
|
|
61
|
+
--crisp-ring-switch: #212224;
|
|
58
62
|
--crisp-bg-tile-active: #101112;
|
|
59
63
|
--crisp-shadow-tile-active: rgba(0,0,0,0);
|
|
60
64
|
--crisp-bg-overlay-frost: #1c1d1f;
|
package/dist/tokens.json
CHANGED
|
@@ -10,6 +10,8 @@
|
|
|
10
10
|
"borderDefault": "#e4e4e7",
|
|
11
11
|
"borderSubtle": "#eeeff1",
|
|
12
12
|
"ringNeutral": "transparent",
|
|
13
|
+
"ringField": "rgba(0,0,0,0.06)",
|
|
14
|
+
"ringSwitch": "#d9dade",
|
|
13
15
|
"bgTileActive": "#ffffff",
|
|
14
16
|
"shadowTileActive": "rgba(0,0,0,0.04)",
|
|
15
17
|
"bgOverlayFrost": "#ffffff",
|
|
@@ -56,6 +58,8 @@
|
|
|
56
58
|
"borderDefault": "#212224",
|
|
57
59
|
"borderSubtle": "#1c1d1f",
|
|
58
60
|
"ringNeutral": "#212224",
|
|
61
|
+
"ringField": "#212224",
|
|
62
|
+
"ringSwitch": "#212224",
|
|
59
63
|
"bgTileActive": "#101112",
|
|
60
64
|
"shadowTileActive": "rgba(0,0,0,0)",
|
|
61
65
|
"bgOverlayFrost": "#1c1d1f",
|
|
@@ -103,6 +107,8 @@
|
|
|
103
107
|
"line200": "#e4e4e7",
|
|
104
108
|
"line100": "#eeeff1",
|
|
105
109
|
"ringNeutral": "transparent",
|
|
110
|
+
"ringField": "rgba(0,0,0,0.06)",
|
|
111
|
+
"ringSwitch": "#d9dade",
|
|
106
112
|
"tileActive": "#ffffff",
|
|
107
113
|
"tileActiveShadow": "rgba(0,0,0,0.04)",
|
|
108
114
|
"overlayFrost": "#ffffff",
|
|
@@ -148,6 +154,8 @@
|
|
|
148
154
|
"line200": "#212224",
|
|
149
155
|
"line100": "#1c1d1f",
|
|
150
156
|
"ringNeutral": "#212224",
|
|
157
|
+
"ringField": "#212224",
|
|
158
|
+
"ringSwitch": "#212224",
|
|
151
159
|
"tileActive": "#101112",
|
|
152
160
|
"tileActiveShadow": "rgba(0,0,0,0)",
|
|
153
161
|
"overlayFrost": "#1c1d1f",
|
|
@@ -10,6 +10,8 @@ export declare const contract: MapLeafNodes<{
|
|
|
10
10
|
borderDefault: "line200";
|
|
11
11
|
borderSubtle: "line100";
|
|
12
12
|
ringNeutral: "ringNeutral";
|
|
13
|
+
ringField: "ringField";
|
|
14
|
+
ringSwitch: "ringSwitch";
|
|
13
15
|
bgTileActive: "tileActive";
|
|
14
16
|
shadowTileActive: "tileActiveShadow";
|
|
15
17
|
bgOverlayFrost: "overlayFrost";
|
|
@@ -23,8 +23,16 @@ export declare const elevation: {
|
|
|
23
23
|
*/
|
|
24
24
|
readonly modal: `0 8px 28px -6px var(--${string}), 0 18px 88px -4px var(--${string}), 0 0 1px var(--${string})`;
|
|
25
25
|
/**
|
|
26
|
-
* The neutral/outlined
|
|
27
|
-
* sidebar search, record-page
|
|
26
|
+
* The neutral/outlined BUTTON-CHROME shadow — real buttons only: the
|
|
27
|
+
* sidebar search trigger, record-page action buttons, table toolbar
|
|
28
|
+
* buttons. #466 corrects this doc comment's own former claim that it
|
|
29
|
+
* covers "inputs, textareas" too — it doesn't: a live Attio text field
|
|
30
|
+
* (Settings page, a real typed input) measures a single 1px ring, none of
|
|
31
|
+
* this token's glow/drop-shadow layers. Confirmed the other direction
|
|
32
|
+
* too — Attio's own white-filled chrome buttons ("Inbox", "Ask Attio",
|
|
33
|
+
* "All Companies" view chip) match this three-layer value exactly, so the
|
|
34
|
+
* token itself was right; only Input/Textarea's use of it was wrong. See
|
|
35
|
+
* `textField` below for the real field shadow.
|
|
28
36
|
*
|
|
29
37
|
* The two raw values **are** the measured value (Lessons 22 and 29) and
|
|
30
38
|
* must stay raw. `rgba(0,0,0,0.04)` equals `tileActiveShadow`'s light value by
|
|
@@ -32,6 +40,13 @@ export declare const elevation: {
|
|
|
32
40
|
* dark mode. Only the ring is theme-aware, via `ringNeutral`.
|
|
33
41
|
*/
|
|
34
42
|
readonly field: `inset 0 0 0 1px var(--${string}), 0 0 2px rgba(28,40,64,0.18), 0 1px 3px rgba(0,0,0,0.04)`;
|
|
43
|
+
/**
|
|
44
|
+
* A real text-entry field (Input, Textarea) — measured live on Attio's
|
|
45
|
+
* Settings page: one 1px inset ring, nothing else (#466). Distinct from
|
|
46
|
+
* `field` above, which is button chrome and carries two extra shadow
|
|
47
|
+
* layers a typed field never has.
|
|
48
|
+
*/
|
|
49
|
+
readonly textField: `inset 0 0 0 1px var(--${string})`;
|
|
35
50
|
/**
|
|
36
51
|
* The same control shadow **without** the theme-aware ring. Lesson 29 added
|
|
37
52
|
* the ring to the neutral-button family but deliberately left `trialbanner`
|
|
@@ -31,6 +31,14 @@ export declare const palette: {
|
|
|
31
31
|
readonly light: "transparent";
|
|
32
32
|
readonly dark: "#212224";
|
|
33
33
|
};
|
|
34
|
+
readonly ringField: {
|
|
35
|
+
readonly light: "rgba(0,0,0,0.06)";
|
|
36
|
+
readonly dark: "#212224";
|
|
37
|
+
};
|
|
38
|
+
readonly ringSwitch: {
|
|
39
|
+
readonly light: "#d9dade";
|
|
40
|
+
readonly dark: "#212224";
|
|
41
|
+
};
|
|
34
42
|
readonly tileActive: {
|
|
35
43
|
readonly light: "#ffffff";
|
|
36
44
|
readonly dark: "#101112";
|
|
@@ -8,6 +8,8 @@ export declare const semantic: {
|
|
|
8
8
|
borderDefault: "line200";
|
|
9
9
|
borderSubtle: "line100";
|
|
10
10
|
ringNeutral: "ringNeutral";
|
|
11
|
+
ringField: "ringField";
|
|
12
|
+
ringSwitch: "ringSwitch";
|
|
11
13
|
bgTileActive: "tileActive";
|
|
12
14
|
shadowTileActive: "tileActiveShadow";
|
|
13
15
|
bgOverlayFrost: "overlayFrost";
|