@crisp-ui-kit/crisp 0.57.0 → 0.57.2
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/authshell.css +9 -4
- package/dist/authshell.layered.css +9 -4
- package/dist/avatar.css +1 -1
- package/dist/avatar.layered.css +1 -1
- package/dist/badge.css +5 -5
- package/dist/badge.layered.css +5 -5
- package/dist/board.css +28 -8
- package/dist/board.layered.css +28 -8
- package/dist/bottomsheet.css +26 -0
- package/dist/bottomsheet.d.ts +7 -0
- package/dist/bottomsheet.layered.css +28 -0
- package/dist/button.css +9 -8
- package/dist/button.layered.css +9 -8
- package/dist/checkbox.css +7 -3
- package/dist/checkbox.layered.css +7 -3
- package/dist/chip.css +15 -0
- package/dist/chip.d.ts +3 -1
- package/dist/chip.layered.css +15 -0
- package/dist/chipgroup.css +5 -0
- package/dist/chipgroup.d.ts +7 -0
- package/dist/chipgroup.layered.css +7 -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 +38 -10
- package/dist/cjs/components/bottomsheet/bottomsheet.js +90 -0
- package/dist/cjs/components/bottomsheet/bottomsheet.recipe.js +77 -0
- package/dist/cjs/components/bottomsheet/index.js +9 -0
- package/dist/cjs/components/button/button.recipe.js +55 -21
- package/dist/cjs/components/checkbox/checkbox.recipe.js +61 -9
- package/dist/cjs/components/chip/chip.js +14 -2
- package/dist/cjs/components/chip/chip.recipe.js +69 -1
- package/dist/cjs/components/chipgroup/chipgroup.js +51 -0
- package/dist/cjs/components/chipgroup/chipgroup.recipe.js +36 -0
- package/dist/cjs/components/chipgroup/index.js +7 -0
- package/dist/cjs/components/datatable/datatable.js +5 -1
- package/dist/cjs/components/datatable/datatable.recipe.js +11 -2
- package/dist/cjs/components/dialog/dialog.recipe.js +21 -10
- package/dist/cjs/components/emptystate/emptystate.recipe.js +7 -2
- package/dist/cjs/components/fileupload/fileupload.js +21 -4
- package/dist/cjs/components/input/index.js +2 -1
- package/dist/cjs/components/input/input.js +33 -3
- package/dist/cjs/components/input/input.recipe.js +22 -7
- package/dist/cjs/components/menu/menu.recipe.js +21 -7
- package/dist/cjs/components/menusheet/index.js +9 -0
- package/dist/cjs/components/menusheet/menusheet.js +133 -0
- package/dist/cjs/components/menusheet/menusheet.recipe.js +103 -0
- package/dist/cjs/components/multiselect/multiselect.js +2 -2
- package/dist/cjs/components/multiselect/multiselect.recipe.js +45 -12
- package/dist/cjs/components/progress/progress.js +21 -4
- package/dist/cjs/components/progress/progress.recipe.js +30 -0
- package/dist/cjs/components/select/select.js +3 -3
- package/dist/cjs/components/select/select.recipe.js +63 -10
- package/dist/cjs/components/snackbar/index.js +8 -0
- package/dist/cjs/components/snackbar/snackbar.js +121 -0
- package/dist/cjs/components/snackbar/snackbar.recipe.js +71 -0
- package/dist/cjs/components/tabletoolbar/tabletoolbar.chrome.js +7 -2
- package/dist/cjs/components/tabletoolbar/tabletoolbar.js +37 -12
- package/dist/cjs/components/tabs/tabs.js +10 -4
- package/dist/cjs/components/tabs/tabs.recipe.js +23 -6
- 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 +13 -9
- package/dist/cjs/components/textlink/textlink.recipe.js +6 -3
- package/dist/cjs/index.js +8 -0
- package/dist/cjs/product/authshell/authshell.recipe.js +5 -1
- package/dist/cjs/product/command/command.recipe.js +4 -1
- package/dist/cjs/product/comments/comments.js +7 -2
- package/dist/cjs/product/comments/comments.recipe.js +25 -7
- package/dist/cjs/product/memberssettings/index.js +6 -0
- package/dist/cjs/product/memberssettings/memberssettings.js +99 -0
- package/dist/cjs/product/memberssettings/memberssettings.recipe.js +83 -0
- package/dist/cjs/product/notificationssettings/index.js +5 -0
- package/dist/cjs/product/notificationssettings/notificationssettings.js +19 -0
- package/dist/cjs/product/notificationssettings/notificationssettings.recipe.js +44 -0
- package/dist/cjs/product/recordpage/recordpage.js +101 -9
- package/dist/cjs/product/recordpage/recordpage.recipe.js +43 -6
- package/dist/cjs/product/workspacegeneralsettings/index.js +5 -0
- package/dist/cjs/product/workspacegeneralsettings/workspacegeneralsettings.js +21 -0
- package/dist/cjs/product/workspacegeneralsettings/workspacegeneralsettings.recipe.js +51 -0
- package/dist/cjs/tokens/contract.js +1 -0
- package/dist/cjs/tokens/elevation.js +8 -5
- package/dist/cjs/tokens/palette.js +107 -33
- package/dist/cjs/tokens/scale.js +45 -2
- package/dist/cjs/tokens/semantic.js +26 -0
- package/dist/columncalc.css +15 -7
- package/dist/columncalc.layered.css +15 -7
- package/dist/command.css +23 -19
- package/dist/command.layered.css +23 -19
- package/dist/comments.css +28 -19
- package/dist/comments.d.ts +2 -2
- package/dist/comments.layered.css +28 -19
- package/dist/datatable.css +161 -67
- package/dist/datatable.layered.css +161 -67
- package/dist/datepicker.css +13 -41
- package/dist/datepicker.layered.css +13 -41
- package/dist/datepickerfield.css +4 -1
- package/dist/datepickerfield.layered.css +4 -1
- package/dist/dialog.css +12 -7
- package/dist/dialog.layered.css +12 -7
- package/dist/emptystate.css +5 -3
- package/dist/emptystate.layered.css +5 -3
- 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 +38 -10
- package/dist/esm/components/bottomsheet/bottomsheet.js +52 -0
- package/dist/esm/components/bottomsheet/bottomsheet.recipe.js +74 -0
- package/dist/esm/components/bottomsheet/index.js +2 -0
- package/dist/esm/components/button/button.recipe.js +56 -22
- package/dist/esm/components/checkbox/checkbox.recipe.js +61 -9
- package/dist/esm/components/chip/chip.js +14 -2
- package/dist/esm/components/chip/chip.recipe.js +69 -1
- package/dist/esm/components/chipgroup/chipgroup.js +15 -0
- package/dist/esm/components/chipgroup/chipgroup.recipe.js +33 -0
- package/dist/esm/components/chipgroup/index.js +2 -0
- package/dist/esm/components/datatable/datatable.js +5 -1
- package/dist/esm/components/datatable/datatable.recipe.js +11 -2
- package/dist/esm/components/dialog/dialog.recipe.js +22 -11
- package/dist/esm/components/emptystate/emptystate.recipe.js +7 -2
- package/dist/esm/components/fileupload/fileupload.js +20 -5
- package/dist/esm/components/input/index.js +1 -1
- package/dist/esm/components/input/input.js +33 -3
- package/dist/esm/components/input/input.recipe.js +23 -8
- package/dist/esm/components/menu/menu.recipe.js +21 -7
- package/dist/esm/components/menusheet/index.js +2 -0
- package/dist/esm/components/menusheet/menusheet.js +95 -0
- package/dist/esm/components/menusheet/menusheet.recipe.js +100 -0
- package/dist/esm/components/multiselect/multiselect.js +2 -2
- package/dist/esm/components/multiselect/multiselect.recipe.js +45 -12
- package/dist/esm/components/progress/progress.js +22 -5
- package/dist/esm/components/progress/progress.recipe.js +30 -0
- package/dist/esm/components/select/select.js +3 -3
- package/dist/esm/components/select/select.recipe.js +63 -10
- package/dist/esm/components/snackbar/index.js +2 -0
- package/dist/esm/components/snackbar/snackbar.js +84 -0
- package/dist/esm/components/snackbar/snackbar.recipe.js +68 -0
- package/dist/esm/components/tabletoolbar/tabletoolbar.chrome.js +7 -2
- package/dist/esm/components/tabletoolbar/tabletoolbar.js +37 -12
- package/dist/esm/components/tabs/tabs.js +10 -4
- package/dist/esm/components/tabs/tabs.recipe.js +23 -6
- 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 +14 -10
- package/dist/esm/components/textlink/textlink.recipe.js +6 -3
- package/dist/esm/index.js +8 -0
- package/dist/esm/product/authshell/authshell.recipe.js +5 -1
- package/dist/esm/product/command/command.recipe.js +4 -1
- package/dist/esm/product/comments/comments.js +7 -2
- package/dist/esm/product/comments/comments.recipe.js +25 -7
- package/dist/esm/product/memberssettings/index.js +1 -0
- package/dist/esm/product/memberssettings/memberssettings.js +62 -0
- package/dist/esm/product/memberssettings/memberssettings.recipe.js +80 -0
- package/dist/esm/product/notificationssettings/index.js +1 -0
- package/dist/esm/product/notificationssettings/notificationssettings.js +16 -0
- package/dist/esm/product/notificationssettings/notificationssettings.recipe.js +41 -0
- package/dist/esm/product/recordpage/recordpage.js +102 -10
- package/dist/esm/product/recordpage/recordpage.recipe.js +43 -6
- package/dist/esm/product/workspacegeneralsettings/index.js +1 -0
- package/dist/esm/product/workspacegeneralsettings/workspacegeneralsettings.js +18 -0
- package/dist/esm/product/workspacegeneralsettings/workspacegeneralsettings.recipe.js +48 -0
- package/dist/esm/tokens/contract.js +2 -1
- package/dist/esm/tokens/elevation.js +8 -5
- package/dist/esm/tokens/palette.js +107 -33
- package/dist/esm/tokens/scale.js +44 -1
- package/dist/esm/tokens/semantic.js +26 -0
- package/dist/fileupload.css +3 -1
- package/dist/fileupload.layered.css +3 -1
- package/dist/input.css +11 -2
- package/dist/input.layered.css +11 -2
- package/dist/listpage.css +3 -1
- package/dist/listpage.layered.css +3 -1
- package/dist/memberssettings.css +67 -0
- package/dist/memberssettings.d.ts +7 -0
- package/dist/memberssettings.layered.css +69 -0
- package/dist/menu.css +2 -2
- package/dist/menu.layered.css +2 -2
- package/dist/menusheet.css +36 -0
- package/dist/menusheet.d.ts +7 -0
- package/dist/menusheet.layered.css +38 -0
- package/dist/multiselect.css +17 -6
- package/dist/multiselect.d.ts +2 -2
- package/dist/multiselect.layered.css +17 -6
- package/dist/native/tokens.d.ts +2 -1
- package/dist/native/tokens.js +53 -25
- package/dist/notificationssettings.css +22 -0
- package/dist/notificationssettings.d.ts +7 -0
- package/dist/notificationssettings.layered.css +24 -0
- package/dist/objectsettings.css +4 -4
- package/dist/objectsettings.layered.css +4 -4
- package/dist/progress.css +3 -0
- package/dist/progress.layered.css +3 -0
- package/dist/recordpage.css +67 -23
- package/dist/recordpage.layered.css +67 -23
- package/dist/recordpanel.css +35 -16
- package/dist/recordpanel.layered.css +35 -16
- package/dist/resizablepanel.css +8 -5
- package/dist/resizablepanel.layered.css +8 -5
- package/dist/richtext.css +24 -8
- package/dist/richtext.layered.css +24 -8
- package/dist/savedviews.css +9 -2
- package/dist/savedviews.layered.css +9 -2
- package/dist/select.css +47 -7
- package/dist/select.d.ts +2 -2
- package/dist/select.layered.css +47 -7
- package/dist/settingsshell.css +2 -3
- package/dist/settingsshell.layered.css +2 -3
- package/dist/slider.css +6 -27
- package/dist/slider.layered.css +6 -27
- package/dist/snackbar.css +24 -0
- package/dist/snackbar.d.ts +7 -0
- package/dist/snackbar.layered.css +26 -0
- package/dist/statcard.css +3 -1
- package/dist/statcard.layered.css +3 -1
- package/dist/styles.css +927 -365
- package/dist/styles.layered.css +927 -365
- package/dist/table.css +28 -10
- package/dist/table.layered.css +28 -10
- package/dist/tabletoolbar.css +35 -24
- package/dist/tabletoolbar.layered.css +35 -24
- package/dist/tabs.css +18 -4
- package/dist/tabs.layered.css +18 -4
- package/dist/text.css +1 -1
- package/dist/text.layered.css +1 -1
- package/dist/textarea.css +4 -7
- package/dist/textarea.layered.css +4 -7
- package/dist/textlink.css +2 -2
- package/dist/textlink.layered.css +2 -2
- package/dist/themepicker.css +2 -1
- package/dist/themepicker.layered.css +2 -1
- package/dist/tokens.css +31 -13
- package/dist/tokens.json +53 -25
- 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/bottomsheet/bottomsheet.d.ts +35 -0
- package/dist/types/components/bottomsheet/bottomsheet.recipe.d.ts +3 -0
- package/dist/types/components/bottomsheet/index.d.ts +2 -0
- package/dist/types/components/button/button.recipe.d.ts +13 -8
- package/dist/types/components/checkbox/checkbox.recipe.d.ts +28 -5
- package/dist/types/components/chip/chip.d.ts +22 -0
- package/dist/types/components/chip/chip.recipe.d.ts +48 -0
- package/dist/types/components/chipgroup/chipgroup.d.ts +14 -0
- package/dist/types/components/chipgroup/chipgroup.recipe.d.ts +5 -0
- package/dist/types/components/chipgroup/index.d.ts +2 -0
- package/dist/types/components/datatable/datatable.d.ts +19 -0
- package/dist/types/components/fileupload/fileupload.d.ts +26 -0
- package/dist/types/components/input/index.d.ts +1 -1
- package/dist/types/components/input/input.d.ts +84 -0
- package/dist/types/components/menusheet/index.d.ts +2 -0
- package/dist/types/components/menusheet/menusheet.d.ts +42 -0
- package/dist/types/components/menusheet/menusheet.recipe.d.ts +3 -0
- package/dist/types/components/multiselect/multiselect.d.ts +4 -3
- package/dist/types/components/multiselect/multiselect.recipe.d.ts +3 -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/select.d.ts +6 -5
- package/dist/types/components/select/select.recipe.d.ts +3 -0
- package/dist/types/components/snackbar/index.d.ts +2 -0
- package/dist/types/components/snackbar/snackbar.d.ts +36 -0
- package/dist/types/components/snackbar/snackbar.recipe.d.ts +5 -0
- package/dist/types/components/tabletoolbar/tabletoolbar.d.ts +28 -1
- package/dist/types/components/tabs/tabs.d.ts +11 -1
- package/dist/types/components/textarea/textarea.d.ts +16 -0
- package/dist/types/index.d.ts +8 -0
- package/dist/types/product/comments/comments.d.ts +9 -3
- package/dist/types/product/comments/comments.recipe.d.ts +12 -2
- package/dist/types/product/memberssettings/index.d.ts +1 -0
- package/dist/types/product/memberssettings/memberssettings.d.ts +85 -0
- package/dist/types/product/memberssettings/memberssettings.recipe.d.ts +3 -0
- package/dist/types/product/notificationssettings/index.d.ts +1 -0
- package/dist/types/product/notificationssettings/notificationssettings.d.ts +37 -0
- package/dist/types/product/notificationssettings/notificationssettings.recipe.d.ts +3 -0
- package/dist/types/product/recordpage/recordpage.d.ts +89 -2
- package/dist/types/product/workspacegeneralsettings/index.d.ts +1 -0
- package/dist/types/product/workspacegeneralsettings/workspacegeneralsettings.d.ts +48 -0
- package/dist/types/product/workspacegeneralsettings/workspacegeneralsettings.recipe.d.ts +3 -0
- package/dist/types/tokens/contract.d.ts +7 -1
- package/dist/types/tokens/elevation.d.ts +8 -5
- package/dist/types/tokens/palette.d.ts +28 -12
- package/dist/types/tokens/scale.d.ts +12 -1
- package/dist/types/tokens/semantic.d.ts +17 -0
- package/dist/wheelpicker.css +4 -2
- package/dist/wheelpicker.layered.css +4 -2
- package/dist/workspacegeneralsettings.css +30 -0
- package/dist/workspacegeneralsettings.d.ts +7 -0
- package/dist/workspacegeneralsettings.layered.css +32 -0
- package/package.json +41 -1
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
@layer crisp-components {
|
|
2
|
+
.crisp-memberssettings {
|
|
3
|
+
& .crisp-memberssettings-page { display: flex; flex-direction: column; gap: var(--crisp-space-6); font-family: var(--crisp-font-sans); }
|
|
4
|
+
& .crisp-memberssettings-heading { display: flex; flex-direction: column; gap: var(--crisp-space-0-5); }
|
|
5
|
+
& .crisp-memberssettings-title { font-size: 24px; line-height: 28px; font-weight: var(--crisp-weight-semibold); letter-spacing: -0.48px; color: var(--crisp-fg-primary); margin: 0; }
|
|
6
|
+
& .crisp-memberssettings-desc { font-size: var(--crisp-text-lg); line-height: 20px; color: var(--crisp-fg-muted); margin: 0; }
|
|
7
|
+
/* Segmented Members/Teams switcher -- measured: 28px pills, radius 8,
|
|
8
|
+
4px gap, 6px icon-label gap, 14/500 label, selected bg bgSubtle +
|
|
9
|
+
inset borderSubtle ring, unselected transparent + a flat 63%-opacity
|
|
10
|
+
fgPrimary mix (measured rgba(0,0,0,.63) on the live page, not the
|
|
11
|
+
solid fgMuted token — same alpha technique this file's table header
|
|
12
|
+
already uses). */
|
|
13
|
+
& .crisp-memberssettings-tabpair { display: inline-flex; align-items: center; gap: 4px; }
|
|
14
|
+
& .crisp-memberssettings-tab { display: inline-flex; align-items: center; gap: var(--crisp-space-1-5); height: 28px; padding: 0 var(--crisp-space-2); border: none; border-radius: var(--crisp-radius-md); background: none; box-shadow: inset 0 0 0 1px transparent; font-family: inherit; font-size: var(--crisp-text-lg); font-weight: var(--crisp-weight-medium); color: color-mix(in srgb, var(--crisp-fg-primary) 63%, transparent); cursor: pointer; white-space: nowrap; transition: color .12s ease, background-color .12s ease, box-shadow .12s ease; }
|
|
15
|
+
& .crisp-memberssettings-tab svg { flex-shrink: 0; }
|
|
16
|
+
& .crisp-memberssettings-tab:hover:not([data-selected]) { color: var(--crisp-fg-primary); }
|
|
17
|
+
& .crisp-memberssettings-tab[data-selected] { color: var(--crisp-fg-primary); background: var(--crisp-bg-subtle); box-shadow: inset 0 0 0 1px var(--crisp-border-subtle); }
|
|
18
|
+
& .crisp-memberssettings-tab:focus-visible { outline: 2px solid var(--crisp-bg-brand-solid); outline-offset: 1px; }
|
|
19
|
+
/* Toolbar row: search grows, Filter + Invite sit trailing -- measured
|
|
20
|
+
32px height on all three, search radius 9 with a 6% ink ring,
|
|
21
|
+
Filter/Invite radius 9 with the button drop-shadow pairing. */
|
|
22
|
+
& .crisp-memberssettings-toolbar { display: flex; align-items: center; gap: var(--crisp-space-2); }
|
|
23
|
+
& .crisp-memberssettings-search { display: flex; align-items: center; flex: 1; min-width: 0; gap: var(--crisp-space-1-5); height: 32px; padding: 0 var(--crisp-space-2-5) 0 var(--crisp-space-2); border-radius: 9px; background: var(--crisp-bg-surface); box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--crisp-fg-primary) 6%, transparent); color: var(--crisp-fg-muted); }
|
|
24
|
+
& .crisp-memberssettings-search:focus-within { box-shadow: inset 0 0 0 1px var(--crisp-bg-brand-solid); }
|
|
25
|
+
& .crisp-memberssettings-search input { flex: 1; min-width: 0; border: none; outline: none; background: none; font-family: inherit; font-size: var(--crisp-text-lg); font-weight: var(--crisp-weight-medium); color: var(--crisp-fg-primary); }
|
|
26
|
+
& .crisp-memberssettings-search input::placeholder { color: var(--crisp-fg-muted); }
|
|
27
|
+
& .crisp-memberssettings-filterbtn { display: inline-flex; align-items: center; gap: var(--crisp-space-1-5); height: 32px; padding: 6px 10px 6px 8px; border: none; border-radius: 9px; background: var(--crisp-bg-surface); box-shadow: inset 0 0 0 1px transparent, 0 0 2px 0 rgba(28,40,64,.18), 0 1px 3px 0 rgba(0,0,0,.04); color: var(--crisp-fg-primary); font-family: inherit; font-size: var(--crisp-text-lg); font-weight: var(--crisp-weight-medium); cursor: pointer; white-space: nowrap; }
|
|
28
|
+
& .crisp-memberssettings-filterbtn:hover { background: var(--crisp-bg-raised); }
|
|
29
|
+
/* your-moon/crisp#979: bgBrandContrast, not bgBrandSolid -- the accent
|
|
30
|
+
(#0298d9) only clears 3.23:1 with white; the darker sibling clears
|
|
31
|
+
4.5:1+, same fix already applied to Button/Badge/Avatar (#897) and
|
|
32
|
+
TableToolbar/Dialog/Command/Comments/AuthShell (#953/#961), which
|
|
33
|
+
explicitly flagged this button as found-not-fixed. */
|
|
34
|
+
& .crisp-memberssettings-invitebtn { display: inline-flex; align-items: center; gap: var(--crisp-space-1-5); height: 32px; padding: 6px 10px 6px 8px; border: none; border-radius: 9px; background: var(--crisp-bg-brand-contrast); box-shadow: inset 0 0 0 1px rgba(0,0,0,.06), 0 2px 4px -2px color-mix(in srgb, var(--crisp-bg-brand-contrast) 12%, transparent), 0 3px 6px -2px color-mix(in srgb, var(--crisp-bg-brand-contrast) 8%, transparent); color: var(--crisp-fg-on-brand); font-family: inherit; font-size: var(--crisp-text-lg); font-weight: var(--crisp-weight-medium); cursor: pointer; white-space: nowrap; }
|
|
35
|
+
& .crisp-memberssettings-invitebtn:hover { filter: brightness(0.95); }
|
|
36
|
+
/* Table wrapper -- measured card: radius 12, 1px borderSubtle, 40px
|
|
37
|
+
rows, header label 12/500/63%-opacity fgPrimary. */
|
|
38
|
+
& .crisp-memberssettings-table-wrap { border-radius: 12px; border: 1px solid var(--crisp-border-subtle); overflow: hidden; }
|
|
39
|
+
& .crisp-memberssettings-table { width: 100%; border-collapse: collapse; font-family: inherit; }
|
|
40
|
+
& .crisp-memberssettings-table th { height: 32px; padding: 0 var(--crisp-space-4); text-align: start; font-size: var(--crisp-text-sm); font-weight: var(--crisp-weight-medium); color: color-mix(in srgb, var(--crisp-fg-primary) 63%, transparent); border-bottom: 1px solid var(--crisp-border-subtle); background: var(--crisp-bg-surface); }
|
|
41
|
+
& .crisp-memberssettings-table td { height: 40px; padding: 0 var(--crisp-space-4); font-size: var(--crisp-text-lg); font-weight: var(--crisp-weight-medium); color: var(--crisp-fg-primary); border-bottom: 1px solid var(--crisp-border-subtle); }
|
|
42
|
+
& .crisp-memberssettings-table tr:last-child td { border-bottom: none; }
|
|
43
|
+
& .crisp-memberssettings-user { display: flex; align-items: center; gap: var(--crisp-space-2); }
|
|
44
|
+
& .crisp-memberssettings-avatarimg { width: 24px; height: 24px; border-radius: var(--crisp-radius-full); object-fit: cover; }
|
|
45
|
+
/* Name + email sit on ONE line, not stacked -- confirmed live: both spans
|
|
46
|
+
share the same y and the same 14px size, only the email's colour
|
|
47
|
+
differs (a flat 63%-opacity fgPrimary mix, not a smaller muted font). */
|
|
48
|
+
& .crisp-memberssettings-usermeta { display: flex; align-items: baseline; gap: var(--crisp-space-2); min-width: 0; }
|
|
49
|
+
& .crisp-memberssettings-usermeta > span:first-child { flex-shrink: 0; }
|
|
50
|
+
& .crisp-memberssettings-useremail { font-size: var(--crisp-text-lg); font-weight: var(--crisp-weight-regular); color: color-mix(in srgb, var(--crisp-fg-primary) 63%, transparent); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
|
|
51
|
+
& .crisp-memberssettings-kebab { display: inline-flex; align-items: center; justify-content: center; width: 24px; height: 24px; margin-inline-start: auto; border: none; border-radius: var(--crisp-radius-sm); background: none; font-family: inherit; color: var(--crisp-fg-muted); cursor: pointer; }
|
|
52
|
+
& .crisp-memberssettings-kebab:hover { background: var(--crisp-bg-raised); color: var(--crisp-fg-primary); }
|
|
53
|
+
& .crisp-memberssettings-teamspanel { display: flex; align-items: center; justify-content: center; padding: var(--crisp-space-8) 0; color: var(--crisp-fg-muted); font-size: var(--crisp-text-lg); }
|
|
54
|
+
/* Invite dialog fields -- measured 708x386 dialog, radius 16; the
|
|
55
|
+
"Invite as"/"Add to team" selects are 32/34px with a flat 1px
|
|
56
|
+
6%-ink border and 9/10px radius respectively (Attio's own two
|
|
57
|
+
selects don't share one radius). */
|
|
58
|
+
& .crisp-memberssettings-invitefield { display: flex; flex-direction: column; gap: var(--crisp-space-1-5); }
|
|
59
|
+
& .crisp-memberssettings-invitelabel { font-size: var(--crisp-text-sm); font-weight: var(--crisp-weight-medium); color: var(--crisp-fg-muted); }
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
@media (prefers-reduced-motion: reduce) {
|
|
63
|
+
.crisp-memberssettings, .crisp-memberssettings * {
|
|
64
|
+
animation-duration: 0.01ms !important;
|
|
65
|
+
animation-iteration-count: 1 !important;
|
|
66
|
+
transition-duration: 0.01ms !important;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
}
|
package/dist/menu.css
CHANGED
|
@@ -8,8 +8,8 @@
|
|
|
8
8
|
font-family: var(--crisp-font-sans); -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale;
|
|
9
9
|
position: fixed; z-index: 70; pointer-events: auto; box-sizing: border-box; display: flex; flex-direction: column; gap: var(--crisp-space-px);
|
|
10
10
|
min-width: 200px; max-height: 360px; overflow-y: auto; padding: var(--crisp-space-1);
|
|
11
|
-
border-radius: var(--crisp-radius-
|
|
12
|
-
box-shadow:
|
|
11
|
+
border-radius: var(--crisp-radius-3xl); background: var(--crisp-bg-popover);
|
|
12
|
+
box-shadow: 0 4px 16px var(--crisp-shadow-select);
|
|
13
13
|
transform-origin: top left; opacity: 1; transform: none; transition: opacity .08s ease, transform .08s ease;
|
|
14
14
|
}
|
|
15
15
|
.crisp-menu-content[data-align="end"] { transform-origin: top right; }
|
package/dist/menu.layered.css
CHANGED
|
@@ -9,8 +9,8 @@
|
|
|
9
9
|
font-family: var(--crisp-font-sans); -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale;
|
|
10
10
|
position: fixed; z-index: 70; pointer-events: auto; box-sizing: border-box; display: flex; flex-direction: column; gap: var(--crisp-space-px);
|
|
11
11
|
min-width: 200px; max-height: 360px; overflow-y: auto; padding: var(--crisp-space-1);
|
|
12
|
-
border-radius: var(--crisp-radius-
|
|
13
|
-
box-shadow:
|
|
12
|
+
border-radius: var(--crisp-radius-3xl); background: var(--crisp-bg-popover);
|
|
13
|
+
box-shadow: 0 4px 16px var(--crisp-shadow-select);
|
|
14
14
|
transform-origin: top left; opacity: 1; transform: none; transition: opacity .08s ease, transform .08s ease;
|
|
15
15
|
}
|
|
16
16
|
.crisp-menu-content[data-align="end"] { transform-origin: top right; }
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
.crisp-menusheet {
|
|
2
|
+
display: contents; font-family: var(--crisp-font-sans);
|
|
3
|
+
& .crisp-menusheet-backdrop { position: fixed; inset: 0; z-index: 60; background: var(--crisp-bg-overlay-strong); /* menu-sheet.yaml:95 backdrop.color = $color.bg.overlay */ opacity: 1; transition: opacity 100ms cubic-bezier(0,0,.15,1); /* menu-sheet.yaml:96-98 enterDuration/enterTimingFunction = $duration.d2/$timing-function.enter */ @starting-style { opacity: 0; } }
|
|
4
|
+
& .crisp-menusheet-positioner { position: fixed; inset: 0; z-index: 61; display: flex; align-items: flex-end; justify-content: center; }
|
|
5
|
+
& .crisp-menusheet-content { -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; position: relative; box-sizing: border-box; display: flex; flex-direction: column; overflow: hidden; width: 100%; max-width: 480px; /* menu-sheet.yaml:104 content.maxWidth */ max-height: 85vh; background: var(--crisp-bg-surface); /* menu-sheet.yaml:103 content.color = $color.bg.layer-floating */ padding: var(--crisp-space-6) var(--crisp-space-4) var(--crisp-space-4); /* menu-sheet.yaml:105-107 content.paddingX/paddingTop/paddingBottom = global-gutter/x6/x4 (16px/24px/16px) */ border-radius: var(--crisp-radius-3xl) var(--crisp-radius-3xl) 0 0; /* menu-sheet.yaml:108 content.topCornerRadius = $radius.r5 (20px) */ transform: translateY(0); transition: transform 300ms cubic-bezier(.03,.4,.1,1); /* menu-sheet.yaml:109-110 content.enterDuration/enterTimingFunction (enter-expressive) */ @starting-style { transform: translateY(100%); } }
|
|
6
|
+
& .crisp-menusheet-header { display: flex; flex-direction: column; gap: var(--crisp-space-1); /* menu-sheet.yaml:115 header.gap = $dimension.x1 (4px) */ padding-bottom: var(--crisp-space-4); /* menu-sheet.yaml:116 header.paddingBottom = $dimension.x4 (16px) */ flex-shrink: 0; }
|
|
7
|
+
& .crisp-menusheet-title { color: var(--crisp-fg-primary); /* menu-sheet.yaml:121 title.color = $color.fg.neutral */ font-size: 18px; line-height: 24px; font-weight: var(--crisp-weight-bold); /* menu-sheet.yaml:118-120 title.fontSize/lineHeight/fontWeight = $font-size.t6/$line-height.t6/bold */ }
|
|
8
|
+
& .crisp-menusheet-description { color: var(--crisp-fg-muted); /* menu-sheet.yaml:126 description.color = $color.fg.neutral-muted */ font-size: var(--crisp-text-lg); line-height: 19px; font-weight: var(--crisp-weight-regular); /* menu-sheet.yaml:123-125 description.fontSize/lineHeight/fontWeight = $font-size.t4/$line-height.t4/regular */ }
|
|
9
|
+
& .crisp-menusheet-list { display: flex; flex-direction: column; gap: var(--crisp-space-2-5); /* menu-sheet.yaml:129 list.gap = $dimension.x2_5 (10px) */ overflow-y: auto; min-height: 0; }
|
|
10
|
+
& .crisp-menusheet-group { display: flex; flex-direction: column; border-radius: var(--crisp-radius-2xl); overflow: hidden; /* menu-sheet.yaml:131 group.cornerRadius = $radius.r4 (16px) */ }
|
|
11
|
+
& .crisp-menusheet-group > * + * { border-top: 1px solid var(--crisp-stroke-group-divider); }
|
|
12
|
+
/* menu-sheet.yaml:132-134 divider.strokeBottomWidth/strokeColor = 1px/$color.stroke.neutral-muted */
|
|
13
|
+
& .crisp-menusheet-footer { flex-shrink: 0; padding-top: var(--crisp-space-2-5); /* menu-sheet.yaml:136 footer.paddingTop = $dimension.x2_5 (10px) */ }
|
|
14
|
+
& .crisp-menusheet-item { position: relative; box-sizing: border-box; display: flex; align-items: center; width: 100%; min-height: 52px; /* menu-sheet-item.yaml:72 root.minHeight */ padding: var(--crisp-space-3-5) var(--crisp-space-4); gap: var(--crisp-space-3-5); /* menu-sheet-item.yaml:73-75 root.paddingX/paddingY/gap = x4/x3_5/x3_5 (16px/14px/14px) */ border: none; margin: 0; cursor: pointer; text-align: start; background: var(--crisp-bg-neutral-weak); /* menu-sheet-item.yaml:71 root.color = $color.bg.neutral-weak */ font-family: inherit; }
|
|
15
|
+
& .crisp-menusheet-item:hover, & .crisp-menusheet-item:active { background: color-mix(in srgb, var(--crisp-fg-primary) 6%, var(--crisp-bg-neutral-weak)); }
|
|
16
|
+
/* menu-sheet-item.yaml:90-91 pressed.root.color = $color.bg.neutral-weak-pressed, approximated as a tint over the base fill */
|
|
17
|
+
& .crisp-menusheet-item:active .crisp-menusheet-item-content { transform: scale(0.98); }
|
|
18
|
+
/* menu-sheet-item.yaml:92 pressed.root.scaleScope = content */
|
|
19
|
+
& .crisp-menusheet-item-icon { flex-shrink: 0; display: inline-flex; width: 22px; height: 22px; }
|
|
20
|
+
/* menu-sheet-item.yaml:77 prefixIcon.size */
|
|
21
|
+
& .crisp-menusheet-item-content { flex: 1 1 auto; min-width: 0; display: flex; flex-direction: column; gap: var(--crisp-space-0-5); /* menu-sheet-item.yaml:79 content.gap = $dimension.x0_5 (2px) */ transition: transform 150ms cubic-bezier(0,0,.15,1); }
|
|
22
|
+
& .crisp-menusheet-item-label { font-size: var(--crisp-text-xl); line-height: 22px; font-weight: var(--crisp-weight-regular); /* menu-sheet-item.yaml:81-83 label.fontSize/lineHeight/fontWeight = $font-size.t5/$line-height.t5/regular */ }
|
|
23
|
+
& .crisp-menusheet-item-description { color: var(--crisp-fg-neutral-subtle); /* menu-sheet-item.yaml:88 description.color = $color.fg.neutral-subtle */ font-size: var(--crisp-text-md); line-height: 18px; font-weight: var(--crisp-weight-medium); /* menu-sheet-item.yaml:85-87 description.fontSize/lineHeight/fontWeight = $font-size.t3/$line-height.t3/medium */ }
|
|
24
|
+
& .crisp-menusheet-item[data-tone="neutral"] .crisp-menusheet-item-icon, & .crisp-menusheet-item[data-tone="neutral"] .crisp-menusheet-item-label { color: var(--crisp-fg-primary); }
|
|
25
|
+
/* menu-sheet-item.yaml:93-98 tone=neutral */
|
|
26
|
+
& .crisp-menusheet-item[data-tone="critical"] .crisp-menusheet-item-icon, & .crisp-menusheet-item[data-tone="critical"] .crisp-menusheet-item-label { color: var(--crisp-fg-danger); }
|
|
27
|
+
/* menu-sheet-item.yaml:99-104 tone=critical */
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
@media (prefers-reduced-motion: reduce) {
|
|
31
|
+
.crisp-menusheet, .crisp-menusheet * {
|
|
32
|
+
animation-duration: 0.01ms !important;
|
|
33
|
+
animation-iteration-count: 1 !important;
|
|
34
|
+
transition-duration: 0.01ms !important;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
@layer crisp-components {
|
|
2
|
+
.crisp-menusheet {
|
|
3
|
+
display: contents; font-family: var(--crisp-font-sans);
|
|
4
|
+
& .crisp-menusheet-backdrop { position: fixed; inset: 0; z-index: 60; background: var(--crisp-bg-overlay-strong); /* menu-sheet.yaml:95 backdrop.color = $color.bg.overlay */ opacity: 1; transition: opacity 100ms cubic-bezier(0,0,.15,1); /* menu-sheet.yaml:96-98 enterDuration/enterTimingFunction = $duration.d2/$timing-function.enter */ @starting-style { opacity: 0; } }
|
|
5
|
+
& .crisp-menusheet-positioner { position: fixed; inset: 0; z-index: 61; display: flex; align-items: flex-end; justify-content: center; }
|
|
6
|
+
& .crisp-menusheet-content { -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; position: relative; box-sizing: border-box; display: flex; flex-direction: column; overflow: hidden; width: 100%; max-width: 480px; /* menu-sheet.yaml:104 content.maxWidth */ max-height: 85vh; background: var(--crisp-bg-surface); /* menu-sheet.yaml:103 content.color = $color.bg.layer-floating */ padding: var(--crisp-space-6) var(--crisp-space-4) var(--crisp-space-4); /* menu-sheet.yaml:105-107 content.paddingX/paddingTop/paddingBottom = global-gutter/x6/x4 (16px/24px/16px) */ border-radius: var(--crisp-radius-3xl) var(--crisp-radius-3xl) 0 0; /* menu-sheet.yaml:108 content.topCornerRadius = $radius.r5 (20px) */ transform: translateY(0); transition: transform 300ms cubic-bezier(.03,.4,.1,1); /* menu-sheet.yaml:109-110 content.enterDuration/enterTimingFunction (enter-expressive) */ @starting-style { transform: translateY(100%); } }
|
|
7
|
+
& .crisp-menusheet-header { display: flex; flex-direction: column; gap: var(--crisp-space-1); /* menu-sheet.yaml:115 header.gap = $dimension.x1 (4px) */ padding-bottom: var(--crisp-space-4); /* menu-sheet.yaml:116 header.paddingBottom = $dimension.x4 (16px) */ flex-shrink: 0; }
|
|
8
|
+
& .crisp-menusheet-title { color: var(--crisp-fg-primary); /* menu-sheet.yaml:121 title.color = $color.fg.neutral */ font-size: 18px; line-height: 24px; font-weight: var(--crisp-weight-bold); /* menu-sheet.yaml:118-120 title.fontSize/lineHeight/fontWeight = $font-size.t6/$line-height.t6/bold */ }
|
|
9
|
+
& .crisp-menusheet-description { color: var(--crisp-fg-muted); /* menu-sheet.yaml:126 description.color = $color.fg.neutral-muted */ font-size: var(--crisp-text-lg); line-height: 19px; font-weight: var(--crisp-weight-regular); /* menu-sheet.yaml:123-125 description.fontSize/lineHeight/fontWeight = $font-size.t4/$line-height.t4/regular */ }
|
|
10
|
+
& .crisp-menusheet-list { display: flex; flex-direction: column; gap: var(--crisp-space-2-5); /* menu-sheet.yaml:129 list.gap = $dimension.x2_5 (10px) */ overflow-y: auto; min-height: 0; }
|
|
11
|
+
& .crisp-menusheet-group { display: flex; flex-direction: column; border-radius: var(--crisp-radius-2xl); overflow: hidden; /* menu-sheet.yaml:131 group.cornerRadius = $radius.r4 (16px) */ }
|
|
12
|
+
& .crisp-menusheet-group > * + * { border-top: 1px solid var(--crisp-stroke-group-divider); }
|
|
13
|
+
/* menu-sheet.yaml:132-134 divider.strokeBottomWidth/strokeColor = 1px/$color.stroke.neutral-muted */
|
|
14
|
+
& .crisp-menusheet-footer { flex-shrink: 0; padding-top: var(--crisp-space-2-5); /* menu-sheet.yaml:136 footer.paddingTop = $dimension.x2_5 (10px) */ }
|
|
15
|
+
& .crisp-menusheet-item { position: relative; box-sizing: border-box; display: flex; align-items: center; width: 100%; min-height: 52px; /* menu-sheet-item.yaml:72 root.minHeight */ padding: var(--crisp-space-3-5) var(--crisp-space-4); gap: var(--crisp-space-3-5); /* menu-sheet-item.yaml:73-75 root.paddingX/paddingY/gap = x4/x3_5/x3_5 (16px/14px/14px) */ border: none; margin: 0; cursor: pointer; text-align: start; background: var(--crisp-bg-neutral-weak); /* menu-sheet-item.yaml:71 root.color = $color.bg.neutral-weak */ font-family: inherit; }
|
|
16
|
+
& .crisp-menusheet-item:hover, & .crisp-menusheet-item:active { background: color-mix(in srgb, var(--crisp-fg-primary) 6%, var(--crisp-bg-neutral-weak)); }
|
|
17
|
+
/* menu-sheet-item.yaml:90-91 pressed.root.color = $color.bg.neutral-weak-pressed, approximated as a tint over the base fill */
|
|
18
|
+
& .crisp-menusheet-item:active .crisp-menusheet-item-content { transform: scale(0.98); }
|
|
19
|
+
/* menu-sheet-item.yaml:92 pressed.root.scaleScope = content */
|
|
20
|
+
& .crisp-menusheet-item-icon { flex-shrink: 0; display: inline-flex; width: 22px; height: 22px; }
|
|
21
|
+
/* menu-sheet-item.yaml:77 prefixIcon.size */
|
|
22
|
+
& .crisp-menusheet-item-content { flex: 1 1 auto; min-width: 0; display: flex; flex-direction: column; gap: var(--crisp-space-0-5); /* menu-sheet-item.yaml:79 content.gap = $dimension.x0_5 (2px) */ transition: transform 150ms cubic-bezier(0,0,.15,1); }
|
|
23
|
+
& .crisp-menusheet-item-label { font-size: var(--crisp-text-xl); line-height: 22px; font-weight: var(--crisp-weight-regular); /* menu-sheet-item.yaml:81-83 label.fontSize/lineHeight/fontWeight = $font-size.t5/$line-height.t5/regular */ }
|
|
24
|
+
& .crisp-menusheet-item-description { color: var(--crisp-fg-neutral-subtle); /* menu-sheet-item.yaml:88 description.color = $color.fg.neutral-subtle */ font-size: var(--crisp-text-md); line-height: 18px; font-weight: var(--crisp-weight-medium); /* menu-sheet-item.yaml:85-87 description.fontSize/lineHeight/fontWeight = $font-size.t3/$line-height.t3/medium */ }
|
|
25
|
+
& .crisp-menusheet-item[data-tone="neutral"] .crisp-menusheet-item-icon, & .crisp-menusheet-item[data-tone="neutral"] .crisp-menusheet-item-label { color: var(--crisp-fg-primary); }
|
|
26
|
+
/* menu-sheet-item.yaml:93-98 tone=neutral */
|
|
27
|
+
& .crisp-menusheet-item[data-tone="critical"] .crisp-menusheet-item-icon, & .crisp-menusheet-item[data-tone="critical"] .crisp-menusheet-item-label { color: var(--crisp-fg-danger); }
|
|
28
|
+
/* menu-sheet-item.yaml:99-104 tone=critical */
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
@media (prefers-reduced-motion: reduce) {
|
|
32
|
+
.crisp-menusheet, .crisp-menusheet * {
|
|
33
|
+
animation-duration: 0.01ms !important;
|
|
34
|
+
animation-iteration-count: 1 !important;
|
|
35
|
+
transition-duration: 0.01ms !important;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
}
|
package/dist/multiselect.css
CHANGED
|
@@ -11,13 +11,19 @@
|
|
|
11
11
|
}
|
|
12
12
|
.crisp-multiselect-listbox[data-up] { transform-origin: bottom left; }
|
|
13
13
|
.crisp-multiselect-listbox { @starting-style { opacity: 0; transform: scale(0.95); } }
|
|
14
|
-
/*
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
14
|
+
/* Seed geometry (build/spec-check.mjs guards these four properties
|
|
15
|
+
directly), superseding #481's old Attio lock -- see this file's
|
|
16
|
+
header comment and Select's matching .crisp-select-search comment
|
|
17
|
+
for the full citation. An ordinary flex child of the listbox, so its
|
|
18
|
+
own 8px gap provides the inset/seam on every side, same as Select. */
|
|
19
|
+
.crisp-multiselect-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); }
|
|
18
20
|
.crisp-multiselect-search svg { flex-shrink: 0; }
|
|
19
|
-
.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); }
|
|
21
|
+
.crisp-multiselect-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); }
|
|
20
22
|
.crisp-multiselect-search input::placeholder { color: var(--crisp-fg-select-placeholder); }
|
|
23
|
+
/* Same header/body seam as Select's own .crisp-select-divider -- see
|
|
24
|
+
that recipe's comment for the seed source (select.yaml's divider
|
|
25
|
+
slot, stroke.neutral-muted). */
|
|
26
|
+
.crisp-multiselect-divider { flex-shrink: 0; height: 1px; margin-inline: var(--crisp-space-4); background: var(--crisp-stroke-select-divider); }
|
|
21
27
|
/* Same groupLabel treatment as Select's (13px/regular/neutral-subtle). */
|
|
22
28
|
.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); }
|
|
23
29
|
.crisp-multiselect-option {
|
|
@@ -57,10 +63,15 @@
|
|
|
57
63
|
& .crisp-multiselect-trigger[aria-readonly="true"] { background: var(--crisp-bg-select-disabled); cursor: default; }
|
|
58
64
|
& .crisp-multiselect-chips { flex: 1; min-width: 0; display: flex; flex-wrap: wrap; align-items: center; gap: var(--crisp-space-1); }
|
|
59
65
|
& .crisp-multiselect-placeholder { color: var(--crisp-fg-select-placeholder); }
|
|
60
|
-
/* closeRotateDuration/openRotateDuration, same asymmetric timing as
|
|
66
|
+
/* closeRotateDuration/openRotateDuration, same asymmetric timing as
|
|
67
|
+
Select's own chevron (see that recipe's comment). */
|
|
61
68
|
& .crisp-multiselect-chevron { flex-shrink: 0; color: var(--crisp-fg-neutral-muted); transition: transform .1s cubic-bezier(.35,0,.35,1); }
|
|
62
69
|
& .crisp-multiselect-trigger[data-open] .crisp-multiselect-chevron { transform: rotate(180deg); transition-duration: .15s; }
|
|
63
70
|
}
|
|
71
|
+
.crisp-multiselect--size_small {
|
|
72
|
+
& .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); }
|
|
73
|
+
& .crisp-multiselect-chevron { width: var(--crisp-size-icon); height: var(--crisp-size-icon); }
|
|
74
|
+
}
|
|
64
75
|
.crisp-multiselect--size_medium {
|
|
65
76
|
& .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); }
|
|
66
77
|
& .crisp-multiselect-chevron { width: var(--crisp-size-icon); height: var(--crisp-size-icon); }
|
package/dist/multiselect.d.ts
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import type { RecipeFn } from "../core/types";
|
|
2
2
|
|
|
3
3
|
export interface MultiselectVariants {
|
|
4
|
-
size?: "medium" | "large";
|
|
4
|
+
size?: "small" | "medium" | "large";
|
|
5
5
|
invalid?: boolean;
|
|
6
6
|
variant?: "default" | "ghost";
|
|
7
7
|
}
|
|
8
8
|
|
|
9
|
-
export declare const multiselectRecipe: RecipeFn<{ size: { medium: string; large: string }; invalid: { true: string; false: string }; variant: { default: string; ghost: string } }>;
|
|
9
|
+
export declare const multiselectRecipe: RecipeFn<{ size: { small: string; medium: string; large: string }; invalid: { true: string; false: string }; variant: { default: string; ghost: string } }>;
|
|
@@ -12,13 +12,19 @@
|
|
|
12
12
|
}
|
|
13
13
|
.crisp-multiselect-listbox[data-up] { transform-origin: bottom left; }
|
|
14
14
|
.crisp-multiselect-listbox { @starting-style { opacity: 0; transform: scale(0.95); } }
|
|
15
|
-
/*
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
15
|
+
/* Seed geometry (build/spec-check.mjs guards these four properties
|
|
16
|
+
directly), superseding #481's old Attio lock -- see this file's
|
|
17
|
+
header comment and Select's matching .crisp-select-search comment
|
|
18
|
+
for the full citation. An ordinary flex child of the listbox, so its
|
|
19
|
+
own 8px gap provides the inset/seam on every side, same as Select. */
|
|
20
|
+
.crisp-multiselect-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); }
|
|
19
21
|
.crisp-multiselect-search svg { flex-shrink: 0; }
|
|
20
|
-
.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); }
|
|
22
|
+
.crisp-multiselect-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); }
|
|
21
23
|
.crisp-multiselect-search input::placeholder { color: var(--crisp-fg-select-placeholder); }
|
|
24
|
+
/* Same header/body seam as Select's own .crisp-select-divider -- see
|
|
25
|
+
that recipe's comment for the seed source (select.yaml's divider
|
|
26
|
+
slot, stroke.neutral-muted). */
|
|
27
|
+
.crisp-multiselect-divider { flex-shrink: 0; height: 1px; margin-inline: var(--crisp-space-4); background: var(--crisp-stroke-select-divider); }
|
|
22
28
|
/* Same groupLabel treatment as Select's (13px/regular/neutral-subtle). */
|
|
23
29
|
.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); }
|
|
24
30
|
.crisp-multiselect-option {
|
|
@@ -58,10 +64,15 @@
|
|
|
58
64
|
& .crisp-multiselect-trigger[aria-readonly="true"] { background: var(--crisp-bg-select-disabled); cursor: default; }
|
|
59
65
|
& .crisp-multiselect-chips { flex: 1; min-width: 0; display: flex; flex-wrap: wrap; align-items: center; gap: var(--crisp-space-1); }
|
|
60
66
|
& .crisp-multiselect-placeholder { color: var(--crisp-fg-select-placeholder); }
|
|
61
|
-
/* closeRotateDuration/openRotateDuration, same asymmetric timing as
|
|
67
|
+
/* closeRotateDuration/openRotateDuration, same asymmetric timing as
|
|
68
|
+
Select's own chevron (see that recipe's comment). */
|
|
62
69
|
& .crisp-multiselect-chevron { flex-shrink: 0; color: var(--crisp-fg-neutral-muted); transition: transform .1s cubic-bezier(.35,0,.35,1); }
|
|
63
70
|
& .crisp-multiselect-trigger[data-open] .crisp-multiselect-chevron { transform: rotate(180deg); transition-duration: .15s; }
|
|
64
71
|
}
|
|
72
|
+
.crisp-multiselect--size_small {
|
|
73
|
+
& .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); }
|
|
74
|
+
& .crisp-multiselect-chevron { width: var(--crisp-size-icon); height: var(--crisp-size-icon); }
|
|
75
|
+
}
|
|
65
76
|
.crisp-multiselect--size_medium {
|
|
66
77
|
& .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); }
|
|
67
78
|
& .crisp-multiselect-chevron { width: var(--crisp-size-icon); height: var(--crisp-size-icon); }
|
package/dist/native/tokens.d.ts
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
// The same tokens the CSS custom properties carry, resolved per theme, with
|
|
3
3
|
// dimensions as numbers for React Native and Lynx style objects.
|
|
4
4
|
export type Theme = "light" | "dark";
|
|
5
|
-
export type ColorTokens = Record<"bgBrandSolid" | "bgBrandSolidPressed" | "fgOnBrand" | "fgOnTone" | "bgSurface" | "bgRaised" | "bgSurfaceMuted" | "borderDefault" | "borderSubtle" | "borderDropzone" | "borderDivider" | "ringNeutral" | "ringField" | "ringSwitch" | "bgTileActive" | "shadowTileActive" | "bgScrim" | "fgAlertDescription" | "bgOverlayFrost" | "shadowOverlay1" | "shadowOverlay2" | "shadowOverlay3" | "bgPopover" | "ringPopover" | "shadowPopover1" | "shadowPopover2" | "shadowPopover3" | "fgPrimary" | "fgMuted" | "bgDanger" | "bgDangerSolid" | "fgDanger" | "strokeFieldFocus" | "fgDisabled" | "bgNeutralWeak" | "bgNeutralInverted" | "fgOnNeutralInverted" | "fgNeutralSubtle" | "fgNeutralMuted" | "strokeFocusRing" | "bgSuccess" | "bgWarning" | "bgOrange" | "bgCyan" | "bgPurple" | "bgSidebar" | "bgSubtle" | "fgBrandSoft" | "fgSuccessSoft" | "fgWarningSoft" | "fgDangerSoft" | "fgNeutralSoft" | "bgPurpleSoft" | "fgPurpleSoft" | "ringPurpleSoft" | "ringBrandSoft" | "fgSelectNeutral" | "bgSelectListbox" | "strokeSelectTrigger" | "bgSelectPressed" | "bgSelectDisabled" | "strokeSelectInvalid" | "strokeSelectDivider" | "fgSelectPlaceholder" | "shadowSelect", string>;
|
|
5
|
+
export type ColorTokens = Record<"bgBrandSolid" | "bgBrandSolidPressed" | "bgBrandContrast" | "fgBrandContrast" | "fgOnBrand" | "fgOnTone" | "bgSurface" | "bgRaised" | "bgSurfaceMuted" | "borderDefault" | "borderSubtle" | "borderDropzone" | "borderDivider" | "ringNeutral" | "ringField" | "ringSwitch" | "bgTileActive" | "shadowTileActive" | "bgScrim" | "bgOverlayStrong" | "strokeGroupDivider" | "fgAlertDescription" | "bgOverlayFrost" | "shadowOverlay1" | "shadowOverlay2" | "shadowOverlay3" | "bgPopover" | "ringPopover" | "shadowPopover1" | "shadowPopover2" | "shadowPopover3" | "fgPrimary" | "fgMuted" | "bgDanger" | "bgDangerSolid" | "fgDanger" | "strokeFieldFocus" | "fgDisabled" | "bgNeutralWeak" | "bgNeutralInverted" | "fgOnNeutralInverted" | "fgNeutralSubtle" | "fgNeutralMuted" | "strokeFocusRing" | "bgSuccess" | "bgWarning" | "bgWarningSolid" | "bgOrange" | "bgCyan" | "bgPurple" | "bgSidebar" | "bgSubtle" | "fgBrandSoft" | "fgSuccessSoft" | "fgWarningSoft" | "fgDangerSoft" | "fgNeutralSoft" | "bgPurpleSoft" | "fgPurpleSoft" | "ringPurpleSoft" | "ringBrandSoft" | "fgSelectNeutral" | "bgSelectListbox" | "strokeSelectTrigger" | "bgSelectPressed" | "bgSelectDisabled" | "strokeSelectInvalid" | "strokeSelectDivider" | "fgSelectPlaceholder" | "shadowSelect", string>;
|
|
6
6
|
export declare const tokens: {
|
|
7
7
|
color: Record<Theme, ColorTokens>;
|
|
8
8
|
palette: Record<Theme, Record<string, string>>;
|
|
@@ -10,6 +10,7 @@ export declare const tokens: {
|
|
|
10
10
|
radius: Record<string, number>;
|
|
11
11
|
size: Record<string, number>;
|
|
12
12
|
text: Record<string, number>;
|
|
13
|
+
tracking: Record<string, number>;
|
|
13
14
|
font: Record<string, string>;
|
|
14
15
|
weight: Record<string, string>;
|
|
15
16
|
};
|
package/dist/native/tokens.js
CHANGED
|
@@ -4,14 +4,16 @@
|
|
|
4
4
|
export const tokens = {
|
|
5
5
|
"color": {
|
|
6
6
|
"light": {
|
|
7
|
-
"bgBrandSolid": "#
|
|
8
|
-
"bgBrandSolidPressed": "#
|
|
7
|
+
"bgBrandSolid": "#0298d9",
|
|
8
|
+
"bgBrandSolidPressed": "#0283bb",
|
|
9
|
+
"bgBrandContrast": "#0278ac",
|
|
10
|
+
"fgBrandContrast": "#0278ac",
|
|
9
11
|
"fgOnBrand": "#ffffff",
|
|
10
12
|
"fgOnTone": "#101112",
|
|
11
13
|
"bgSurface": "#ffffff",
|
|
12
|
-
"bgRaised": "#
|
|
14
|
+
"bgRaised": "#f7f8f9",
|
|
13
15
|
"bgSurfaceMuted": "#f6f7f7",
|
|
14
|
-
"borderDefault": "#
|
|
16
|
+
"borderDefault": "#dcdee3",
|
|
15
17
|
"borderSubtle": "#eeeff1",
|
|
16
18
|
"borderDropzone": "#e6e7ea",
|
|
17
19
|
"borderDivider": "#e6e7ea",
|
|
@@ -20,7 +22,9 @@ export const tokens = {
|
|
|
20
22
|
"ringSwitch": "#d9dade",
|
|
21
23
|
"bgTileActive": "#ffffff",
|
|
22
24
|
"shadowTileActive": "rgba(0,0,0,0.04)",
|
|
23
|
-
"bgScrim": "rgba(0,0,0,0.
|
|
25
|
+
"bgScrim": "rgba(0,0,0,0.45)",
|
|
26
|
+
"bgOverlayStrong": "#00000074",
|
|
27
|
+
"strokeGroupDivider": "#00000010",
|
|
24
28
|
"fgAlertDescription": "rgba(0,0,0,0.63)",
|
|
25
29
|
"bgOverlayFrost": "#ffffff",
|
|
26
30
|
"shadowOverlay1": "rgba(28,40,64,0.12)",
|
|
@@ -33,9 +37,9 @@ export const tokens = {
|
|
|
33
37
|
"shadowPopover3": "rgba(24,41,75,0.16)",
|
|
34
38
|
"fgPrimary": "#101112",
|
|
35
39
|
"fgMuted": "#71717a",
|
|
36
|
-
"bgDanger": "#
|
|
37
|
-
"bgDangerSolid": "#
|
|
38
|
-
"fgDanger": "#
|
|
40
|
+
"bgDanger": "#fa342c",
|
|
41
|
+
"bgDangerSolid": "#ca1d13",
|
|
42
|
+
"fgDanger": "#fa342c",
|
|
39
43
|
"strokeFieldFocus": "#1a1c20",
|
|
40
44
|
"fgDisabled": "#d1d3d8",
|
|
41
45
|
"bgNeutralWeak": "#f3f4f5",
|
|
@@ -44,8 +48,9 @@ export const tokens = {
|
|
|
44
48
|
"fgNeutralSubtle": "#868b94",
|
|
45
49
|
"fgNeutralMuted": "#555d6d",
|
|
46
50
|
"strokeFocusRing": "#1e82eb",
|
|
47
|
-
"bgSuccess": "#
|
|
48
|
-
"bgWarning": "#
|
|
51
|
+
"bgSuccess": "#079171",
|
|
52
|
+
"bgWarning": "#9b7821",
|
|
53
|
+
"bgWarningSolid": "#fbdc65",
|
|
49
54
|
"bgOrange": "#f97514",
|
|
50
55
|
"bgCyan": "#00b9eb",
|
|
51
56
|
"bgPurple": "#9b69ff",
|
|
@@ -71,8 +76,10 @@ export const tokens = {
|
|
|
71
76
|
"shadowSelect": "#0000001f"
|
|
72
77
|
},
|
|
73
78
|
"dark": {
|
|
74
|
-
"bgBrandSolid": "#
|
|
75
|
-
"bgBrandSolidPressed": "#
|
|
79
|
+
"bgBrandSolid": "#0298d9",
|
|
80
|
+
"bgBrandSolidPressed": "#0283bb",
|
|
81
|
+
"bgBrandContrast": "#0278ac",
|
|
82
|
+
"fgBrandContrast": "#0278ac",
|
|
76
83
|
"fgOnBrand": "#ffffff",
|
|
77
84
|
"fgOnTone": "#101112",
|
|
78
85
|
"bgSurface": "#0a0a0a",
|
|
@@ -88,6 +95,8 @@ export const tokens = {
|
|
|
88
95
|
"bgTileActive": "#101112",
|
|
89
96
|
"shadowTileActive": "rgba(0,0,0,0)",
|
|
90
97
|
"bgScrim": "rgba(0,0,0,0.55)",
|
|
98
|
+
"bgOverlayStrong": "#00000074",
|
|
99
|
+
"strokeGroupDivider": "#ffffff17",
|
|
91
100
|
"fgAlertDescription": "rgba(255,255,255,0.6)",
|
|
92
101
|
"bgOverlayFrost": "#1c1d1f",
|
|
93
102
|
"shadowOverlay1": "rgba(0,0,0,0.48)",
|
|
@@ -113,6 +122,7 @@ export const tokens = {
|
|
|
113
122
|
"strokeFocusRing": "#5e98fe",
|
|
114
123
|
"bgSuccess": "#2ea968",
|
|
115
124
|
"bgWarning": "#e0982a",
|
|
125
|
+
"bgWarningSolid": "#e0982a",
|
|
116
126
|
"bgOrange": "#f97514",
|
|
117
127
|
"bgCyan": "#00b9eb",
|
|
118
128
|
"bgPurple": "#9b69ff",
|
|
@@ -143,9 +153,9 @@ export const tokens = {
|
|
|
143
153
|
"gray00": "#ffffff",
|
|
144
154
|
"white": "#ffffff",
|
|
145
155
|
"ink": "#101112",
|
|
146
|
-
"gray50": "#
|
|
156
|
+
"gray50": "#f7f8f9",
|
|
147
157
|
"gray900": "#101112",
|
|
148
|
-
"line200": "#
|
|
158
|
+
"line200": "#dcdee3",
|
|
149
159
|
"line100": "#eeeff1",
|
|
150
160
|
"line150": "#e6e7ea",
|
|
151
161
|
"gray25": "#f6f7f7",
|
|
@@ -155,7 +165,9 @@ export const tokens = {
|
|
|
155
165
|
"ringBrandSoft": "#d6e5ff",
|
|
156
166
|
"tileActive": "#ffffff",
|
|
157
167
|
"tileActiveShadow": "rgba(0,0,0,0.04)",
|
|
158
|
-
"bgScrim": "rgba(0,0,0,0.
|
|
168
|
+
"bgScrim": "rgba(0,0,0,0.45)",
|
|
169
|
+
"bgOverlayStrong": "#00000074",
|
|
170
|
+
"strokeGroupDivider": "#00000010",
|
|
159
171
|
"fgAlertDescription": "rgba(0,0,0,0.63)",
|
|
160
172
|
"overlayFrost": "#ffffff",
|
|
161
173
|
"shadowOverlay1": "rgba(28,40,64,0.12)",
|
|
@@ -167,11 +179,12 @@ export const tokens = {
|
|
|
167
179
|
"shadowPopover2": "rgba(28,40,64,0.12)",
|
|
168
180
|
"shadowPopover3": "rgba(24,41,75,0.16)",
|
|
169
181
|
"gray400": "#71717a",
|
|
170
|
-
"brand600": "#
|
|
171
|
-
"brand700": "#
|
|
172
|
-
"
|
|
173
|
-
"
|
|
174
|
-
"
|
|
182
|
+
"brand600": "#0298d9",
|
|
183
|
+
"brand700": "#0283bb",
|
|
184
|
+
"brandContrast": "#0278ac",
|
|
185
|
+
"red600": "#fa342c",
|
|
186
|
+
"red700": "#ca1d13",
|
|
187
|
+
"red500": "#fa342c",
|
|
175
188
|
"fieldFocus": "#1a1c20",
|
|
176
189
|
"disabledFg": "#d1d3d8",
|
|
177
190
|
"neutralWeak": "#f3f4f5",
|
|
@@ -180,8 +193,9 @@ export const tokens = {
|
|
|
180
193
|
"neutralSubtle": "#868b94",
|
|
181
194
|
"neutralMuted": "#555d6d",
|
|
182
195
|
"focusRing": "#1e82eb",
|
|
183
|
-
"green600": "#
|
|
184
|
-
"amber600": "#
|
|
196
|
+
"green600": "#079171",
|
|
197
|
+
"amber600": "#9b7821",
|
|
198
|
+
"amberSolid": "#fbdc65",
|
|
185
199
|
"orange600": "#f97514",
|
|
186
200
|
"cyan600": "#00b9eb",
|
|
187
201
|
"purple600": "#9b69ff",
|
|
@@ -220,6 +234,8 @@ export const tokens = {
|
|
|
220
234
|
"tileActive": "#101112",
|
|
221
235
|
"tileActiveShadow": "rgba(0,0,0,0)",
|
|
222
236
|
"bgScrim": "rgba(0,0,0,0.55)",
|
|
237
|
+
"bgOverlayStrong": "#00000074",
|
|
238
|
+
"strokeGroupDivider": "#ffffff17",
|
|
223
239
|
"fgAlertDescription": "rgba(255,255,255,0.6)",
|
|
224
240
|
"overlayFrost": "#1c1d1f",
|
|
225
241
|
"shadowOverlay1": "rgba(0,0,0,0.48)",
|
|
@@ -231,8 +247,9 @@ export const tokens = {
|
|
|
231
247
|
"shadowPopover2": "rgba(0,0,0,0.24)",
|
|
232
248
|
"shadowPopover3": "rgba(0,0,0,0.32)",
|
|
233
249
|
"gray400": "#9a9aa2",
|
|
234
|
-
"brand600": "#
|
|
235
|
-
"brand700": "#
|
|
250
|
+
"brand600": "#0298d9",
|
|
251
|
+
"brand700": "#0283bb",
|
|
252
|
+
"brandContrast": "#0278ac",
|
|
236
253
|
"red600": "#ff5a5f",
|
|
237
254
|
"red700": "#ba2525",
|
|
238
255
|
"red500": "#ff5a5f",
|
|
@@ -246,6 +263,7 @@ export const tokens = {
|
|
|
246
263
|
"focusRing": "#5e98fe",
|
|
247
264
|
"green600": "#2ea968",
|
|
248
265
|
"amber600": "#e0982a",
|
|
266
|
+
"amberSolid": "#e0982a",
|
|
249
267
|
"orange600": "#f97514",
|
|
250
268
|
"cyan600": "#00b9eb",
|
|
251
269
|
"purple600": "#9b69ff",
|
|
@@ -283,13 +301,15 @@ export const tokens = {
|
|
|
283
301
|
"3.5": 14
|
|
284
302
|
},
|
|
285
303
|
"radius": {
|
|
286
|
-
"
|
|
304
|
+
"xs": 4,
|
|
305
|
+
"chip": 999,
|
|
287
306
|
"sm": 6,
|
|
288
307
|
"md": 8,
|
|
289
308
|
"lg": 9,
|
|
290
309
|
"xl": 12,
|
|
291
310
|
"2xl": 16,
|
|
292
311
|
"3xl": 20,
|
|
312
|
+
"4xl": 24,
|
|
293
313
|
"full": 999
|
|
294
314
|
},
|
|
295
315
|
"size": {
|
|
@@ -313,6 +333,14 @@ export const tokens = {
|
|
|
313
333
|
"lg": 14,
|
|
314
334
|
"xl": 16
|
|
315
335
|
},
|
|
336
|
+
"tracking": {
|
|
337
|
+
"18": -0.36,
|
|
338
|
+
"20": -0.4,
|
|
339
|
+
"24": -0.48,
|
|
340
|
+
"26": -0.52,
|
|
341
|
+
"28": -0.56,
|
|
342
|
+
"32": -0.64
|
|
343
|
+
},
|
|
316
344
|
"font": {
|
|
317
345
|
"sans": "\"VK Sans Display\", \"Inter\", system-ui, -apple-system, \"Segoe UI\", sans-serif"
|
|
318
346
|
},
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
.crisp-notificationssettings {
|
|
2
|
+
& .crisp-notificationssettings-page { display: flex; flex-direction: column; gap: var(--crisp-space-6); font-family: var(--crisp-font-sans); }
|
|
3
|
+
& .crisp-notificationssettings-heading { display: flex; flex-direction: column; gap: var(--crisp-space-0-5); }
|
|
4
|
+
& .crisp-notificationssettings-title { font-size: 24px; line-height: 28px; font-weight: var(--crisp-weight-semibold); letter-spacing: -0.48px; color: var(--crisp-fg-primary); margin: 0; }
|
|
5
|
+
& .crisp-notificationssettings-desc { font-size: var(--crisp-text-lg); line-height: 20px; color: var(--crisp-fg-muted); margin: 0; }
|
|
6
|
+
& .crisp-notificationssettings-section { display: flex; flex-direction: column; gap: var(--crisp-space-4); }
|
|
7
|
+
& .crisp-notificationssettings-sectiontitle { font-size: 16px; line-height: 20px; font-weight: var(--crisp-weight-semibold); color: var(--crisp-fg-primary); margin: 0; }
|
|
8
|
+
/* Daily digest card: one bordered 12px-radius row. */
|
|
9
|
+
& .crisp-notificationssettings-digestcard { display: flex; align-items: center; justify-content: space-between; gap: var(--crisp-space-6); padding: var(--crisp-space-2) var(--crisp-space-3); border: 1px solid var(--crisp-border-subtle); border-radius: 12px; background: var(--crisp-bg-surface); }
|
|
10
|
+
& .crisp-notificationssettings-digesttext { display: flex; flex-direction: column; gap: var(--crisp-space-1); }
|
|
11
|
+
& .crisp-notificationssettings-rowtitle { font-size: var(--crisp-text-lg); font-weight: var(--crisp-weight-medium); color: var(--crisp-fg-primary); }
|
|
12
|
+
& .crisp-notificationssettings-rowdesc { font-size: var(--crisp-text-sm); font-weight: var(--crisp-weight-medium); color: color-mix(in srgb, var(--crisp-fg-primary) 63%, transparent); }
|
|
13
|
+
/* Collaboration matrix: a bordered card, header row + N body rows. */
|
|
14
|
+
& .crisp-notificationssettings-matrix { border: 1px solid var(--crisp-border-subtle); border-radius: 12px; overflow: hidden; background: var(--crisp-bg-surface); }
|
|
15
|
+
& .crisp-notificationssettings-matrixhead { display: flex; align-items: center; gap: var(--crisp-space-3); padding: 0 var(--crisp-space-4); height: 40px; border-bottom: 1px solid var(--crisp-border-subtle); }
|
|
16
|
+
& .crisp-notificationssettings-matrixhead-about { display: flex; align-items: center; gap: var(--crisp-space-1-5); flex: 1; min-width: 0; font-size: var(--crisp-text-sm); font-weight: var(--crisp-weight-medium); color: color-mix(in srgb, var(--crisp-fg-primary) 63%, transparent); }
|
|
17
|
+
& .crisp-notificationssettings-matrixhead-col { display: flex; align-items: center; justify-content: center; gap: var(--crisp-space-1-5); width: 64px; flex-shrink: 0; font-size: var(--crisp-text-sm); font-weight: var(--crisp-weight-medium); color: color-mix(in srgb, var(--crisp-fg-primary) 63%, transparent); }
|
|
18
|
+
& .crisp-notificationssettings-matrixrow { display: flex; align-items: center; gap: var(--crisp-space-3); padding: var(--crisp-space-2) var(--crisp-space-4); min-height: 52px; }
|
|
19
|
+
& .crisp-notificationssettings-matrixrow + .crisp-notificationssettings-matrixrow { border-top: 1px solid var(--crisp-border-subtle); }
|
|
20
|
+
& .crisp-notificationssettings-matrixrow-about { display: flex; flex-direction: column; gap: var(--crisp-space-1); flex: 1; min-width: 0; }
|
|
21
|
+
& .crisp-notificationssettings-matrixrow-col { display: flex; align-items: center; justify-content: center; width: 64px; flex-shrink: 0; }
|
|
22
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
@layer crisp-components {
|
|
2
|
+
.crisp-notificationssettings {
|
|
3
|
+
& .crisp-notificationssettings-page { display: flex; flex-direction: column; gap: var(--crisp-space-6); font-family: var(--crisp-font-sans); }
|
|
4
|
+
& .crisp-notificationssettings-heading { display: flex; flex-direction: column; gap: var(--crisp-space-0-5); }
|
|
5
|
+
& .crisp-notificationssettings-title { font-size: 24px; line-height: 28px; font-weight: var(--crisp-weight-semibold); letter-spacing: -0.48px; color: var(--crisp-fg-primary); margin: 0; }
|
|
6
|
+
& .crisp-notificationssettings-desc { font-size: var(--crisp-text-lg); line-height: 20px; color: var(--crisp-fg-muted); margin: 0; }
|
|
7
|
+
& .crisp-notificationssettings-section { display: flex; flex-direction: column; gap: var(--crisp-space-4); }
|
|
8
|
+
& .crisp-notificationssettings-sectiontitle { font-size: 16px; line-height: 20px; font-weight: var(--crisp-weight-semibold); color: var(--crisp-fg-primary); margin: 0; }
|
|
9
|
+
/* Daily digest card: one bordered 12px-radius row. */
|
|
10
|
+
& .crisp-notificationssettings-digestcard { display: flex; align-items: center; justify-content: space-between; gap: var(--crisp-space-6); padding: var(--crisp-space-2) var(--crisp-space-3); border: 1px solid var(--crisp-border-subtle); border-radius: 12px; background: var(--crisp-bg-surface); }
|
|
11
|
+
& .crisp-notificationssettings-digesttext { display: flex; flex-direction: column; gap: var(--crisp-space-1); }
|
|
12
|
+
& .crisp-notificationssettings-rowtitle { font-size: var(--crisp-text-lg); font-weight: var(--crisp-weight-medium); color: var(--crisp-fg-primary); }
|
|
13
|
+
& .crisp-notificationssettings-rowdesc { font-size: var(--crisp-text-sm); font-weight: var(--crisp-weight-medium); color: color-mix(in srgb, var(--crisp-fg-primary) 63%, transparent); }
|
|
14
|
+
/* Collaboration matrix: a bordered card, header row + N body rows. */
|
|
15
|
+
& .crisp-notificationssettings-matrix { border: 1px solid var(--crisp-border-subtle); border-radius: 12px; overflow: hidden; background: var(--crisp-bg-surface); }
|
|
16
|
+
& .crisp-notificationssettings-matrixhead { display: flex; align-items: center; gap: var(--crisp-space-3); padding: 0 var(--crisp-space-4); height: 40px; border-bottom: 1px solid var(--crisp-border-subtle); }
|
|
17
|
+
& .crisp-notificationssettings-matrixhead-about { display: flex; align-items: center; gap: var(--crisp-space-1-5); flex: 1; min-width: 0; font-size: var(--crisp-text-sm); font-weight: var(--crisp-weight-medium); color: color-mix(in srgb, var(--crisp-fg-primary) 63%, transparent); }
|
|
18
|
+
& .crisp-notificationssettings-matrixhead-col { display: flex; align-items: center; justify-content: center; gap: var(--crisp-space-1-5); width: 64px; flex-shrink: 0; font-size: var(--crisp-text-sm); font-weight: var(--crisp-weight-medium); color: color-mix(in srgb, var(--crisp-fg-primary) 63%, transparent); }
|
|
19
|
+
& .crisp-notificationssettings-matrixrow { display: flex; align-items: center; gap: var(--crisp-space-3); padding: var(--crisp-space-2) var(--crisp-space-4); min-height: 52px; }
|
|
20
|
+
& .crisp-notificationssettings-matrixrow + .crisp-notificationssettings-matrixrow { border-top: 1px solid var(--crisp-border-subtle); }
|
|
21
|
+
& .crisp-notificationssettings-matrixrow-about { display: flex; flex-direction: column; gap: var(--crisp-space-1); flex: 1; min-width: 0; }
|
|
22
|
+
& .crisp-notificationssettings-matrixrow-col { display: flex; align-items: center; justify-content: center; width: 64px; flex-shrink: 0; }
|
|
23
|
+
}
|
|
24
|
+
}
|
package/dist/objectsettings.css
CHANGED
|
@@ -12,22 +12,22 @@
|
|
|
12
12
|
& .crisp-objectsettings-filterbtn { display: inline-flex; align-items: center; gap: var(--crisp-space-1-5); height: var(--crisp-size-menuRow); padding: 0 var(--crisp-space-2-5) 0 var(--crisp-space-2); border: none; border-radius: var(--crisp-radius-lg); background: var(--crisp-bg-surface); box-shadow: inset 0 0 0 1px var(--crisp-border-default); color: var(--crisp-fg-primary); font-family: inherit; font-size: var(--crisp-text-lg); font-weight: var(--crisp-weight-medium); cursor: pointer; white-space: nowrap; }
|
|
13
13
|
& .crisp-objectsettings-filterbtn:hover { background: var(--crisp-bg-raised); }
|
|
14
14
|
/* Object / attribute icon tile — Attio's own squircle (measured
|
|
15
|
-
border-radius: 30%, not a scale token: it's a proportional radius
|
|
15
|
+
border-radius: 30%, not a scale token: it's a proportional radius
|
|
16
|
+
tied to the tile's own size, unlike every other radius crisp uses,
|
|
16
17
|
which is a fixed px). */
|
|
17
18
|
& .crisp-objectsettings-icon { display: inline-flex; align-items: center; justify-content: center; flex-shrink: 0; width: 16px; height: 16px; border-radius: 30%; color: var(--crisp-fg-on-brand); }
|
|
18
19
|
& .crisp-objectsettings-icon--lg { width: 48px; height: 48px; border-radius: 16px; }
|
|
19
|
-
|
|
20
20
|
/* "Standard"/"Custom" type badge and the muted "No records" cell —
|
|
21
21
|
plain text, not a Badge pill (measured: transparent background). */
|
|
22
22
|
& .crisp-objectsettings-typebadge { font-size: var(--crisp-text-sm); font-weight: var(--crisp-weight-medium); color: var(--crisp-fg-neutral-soft); }
|
|
23
23
|
& .crisp-objectsettings-muted { color: var(--crisp-fg-muted); }
|
|
24
|
-
|
|
25
24
|
/* Attribute-type option row (icon + label + optional trailing badge),
|
|
26
25
|
composed as a Select option's `label` ReactNode. */
|
|
27
26
|
& .crisp-objectsettings-typeoption { display: flex; align-items: center; gap: var(--crisp-space-2); width: 100%; min-width: 0; }
|
|
28
27
|
& .crisp-objectsettings-typeoption-label { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; }
|
|
29
28
|
& .crisp-objectsettings-typeoption-badge { flex-shrink: 0; font-size: var(--crisp-text-sm); font-weight: var(--crisp-weight-medium); color: var(--crisp-fg-brand-soft); }
|
|
30
|
-
/* Create-attribute dialog's AI-autofill row and the submit button's
|
|
29
|
+
/* Create-attribute dialog's AI-autofill row and the submit button's
|
|
30
|
+
⌘↵ hint (measured off the same dialog, same shape as Dialog's own
|
|
31
31
|
.crisp-dialog-submit-key, kept local rather than reaching into
|
|
32
32
|
another component's scoped classes). */
|
|
33
33
|
& .crisp-objectsettings-aiautofill { display: flex; flex-direction: column; gap: var(--crisp-space-1-5); }
|