@crisp-ui-kit/crisp 0.57.3 → 0.57.4

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.
Files changed (169) hide show
  1. package/dist/assigneepicker.css +13 -0
  2. package/dist/assigneepicker.d.ts +7 -0
  3. package/dist/assigneepicker.layered.css +15 -0
  4. package/dist/button.css +1 -1
  5. package/dist/button.layered.css +1 -1
  6. package/dist/cjs/components/button/button.recipe.js +15 -10
  7. package/dist/cjs/components/datatable/datatable.js +6 -3
  8. package/dist/cjs/components/datatable/datatable.recipe.js +35 -2
  9. package/dist/cjs/components/menu/menu.js +48 -8
  10. package/dist/cjs/components/multiselect/multiselect.js +3 -0
  11. package/dist/cjs/components/multiselect/multiselect.recipe.js +18 -0
  12. package/dist/cjs/components/select/select.js +2 -2
  13. package/dist/cjs/components/select/select.recipe.js +19 -0
  14. package/dist/cjs/core/index.js +2 -1
  15. package/dist/cjs/core/place-floating.js +38 -0
  16. package/dist/cjs/index.js +8 -0
  17. package/dist/cjs/product/assigneepicker/assigneepicker.js +127 -0
  18. package/dist/cjs/product/assigneepicker/assigneepicker.recipe.js +36 -0
  19. package/dist/cjs/product/assigneepicker/index.js +7 -0
  20. package/dist/cjs/product/notesgallery/index.js +7 -0
  21. package/dist/cjs/product/notesgallery/notesgallery.js +80 -0
  22. package/dist/cjs/product/notesgallery/notesgallery.recipe.js +46 -0
  23. package/dist/cjs/product/objectpagemenu/index.js +17 -0
  24. package/dist/cjs/product/objectpagemenu/objectpagemenu.js +26 -0
  25. package/dist/cjs/product/objectpagemenu/objectpagemenu.recipe.js +30 -0
  26. package/dist/cjs/product/objectsettings/objectsettings.js +107 -14
  27. package/dist/cjs/product/recordpage/recordpage.js +64 -5
  28. package/dist/cjs/product/recordpage/recordpage.recipe.js +38 -0
  29. package/dist/cjs/product/recordpicker/index.js +7 -0
  30. package/dist/cjs/product/recordpicker/recordpicker.js +100 -0
  31. package/dist/cjs/product/recordpicker/recordpicker.recipe.js +36 -0
  32. package/dist/cjs/product/savedviews/index.js +2 -1
  33. package/dist/cjs/product/savedviews/savedviews.js +22 -0
  34. package/dist/cjs/product/savedviews/savedviews.recipe.js +47 -0
  35. package/dist/cjs/product/share/index.js +7 -0
  36. package/dist/cjs/product/share/share.js +179 -0
  37. package/dist/cjs/product/share/share.recipe.js +114 -0
  38. package/dist/cjs/product/shortcutssheet/index.js +17 -0
  39. package/dist/cjs/product/shortcutssheet/shortcutssheet.js +125 -0
  40. package/dist/cjs/product/shortcutssheet/shortcutssheet.recipe.js +50 -0
  41. package/dist/cjs/product/taskeditpopover/index.js +7 -0
  42. package/dist/cjs/product/taskeditpopover/taskeditpopover.js +159 -0
  43. package/dist/cjs/product/taskeditpopover/taskeditpopover.recipe.js +68 -0
  44. package/dist/cjs/product/workspaceswitchermenu/index.js +17 -0
  45. package/dist/cjs/product/workspaceswitchermenu/workspaceswitchermenu.js +38 -0
  46. package/dist/cjs/product/workspaceswitchermenu/workspaceswitchermenu.recipe.js +34 -0
  47. package/dist/cjs/tokens/palette.js +27 -0
  48. package/dist/cjs/tokens/semantic.js +20 -0
  49. package/dist/datatable.css +40 -7
  50. package/dist/datatable.layered.css +40 -7
  51. package/dist/esm/components/button/button.recipe.js +15 -10
  52. package/dist/esm/components/datatable/datatable.js +6 -3
  53. package/dist/esm/components/datatable/datatable.recipe.js +35 -2
  54. package/dist/esm/components/menu/menu.js +47 -7
  55. package/dist/esm/components/multiselect/multiselect.js +3 -0
  56. package/dist/esm/components/multiselect/multiselect.recipe.js +18 -0
  57. package/dist/esm/components/select/select.js +2 -2
  58. package/dist/esm/components/select/select.recipe.js +19 -0
  59. package/dist/esm/core/index.js +1 -1
  60. package/dist/esm/core/place-floating.js +37 -0
  61. package/dist/esm/index.js +8 -0
  62. package/dist/esm/product/assigneepicker/assigneepicker.js +91 -0
  63. package/dist/esm/product/assigneepicker/assigneepicker.recipe.js +33 -0
  64. package/dist/esm/product/assigneepicker/index.js +2 -0
  65. package/dist/esm/product/notesgallery/index.js +2 -0
  66. package/dist/esm/product/notesgallery/notesgallery.js +44 -0
  67. package/dist/esm/product/notesgallery/notesgallery.recipe.js +43 -0
  68. package/dist/esm/product/objectpagemenu/index.js +1 -0
  69. package/dist/esm/product/objectpagemenu/objectpagemenu.js +23 -0
  70. package/dist/esm/product/objectpagemenu/objectpagemenu.recipe.js +27 -0
  71. package/dist/esm/product/objectsettings/objectsettings.js +106 -13
  72. package/dist/esm/product/recordpage/recordpage.js +64 -5
  73. package/dist/esm/product/recordpage/recordpage.recipe.js +38 -0
  74. package/dist/esm/product/recordpicker/index.js +2 -0
  75. package/dist/esm/product/recordpicker/recordpicker.js +64 -0
  76. package/dist/esm/product/recordpicker/recordpicker.recipe.js +33 -0
  77. package/dist/esm/product/savedviews/index.js +1 -1
  78. package/dist/esm/product/savedviews/savedviews.js +22 -1
  79. package/dist/esm/product/savedviews/savedviews.recipe.js +47 -0
  80. package/dist/esm/product/share/index.js +2 -0
  81. package/dist/esm/product/share/share.js +143 -0
  82. package/dist/esm/product/share/share.recipe.js +111 -0
  83. package/dist/esm/product/shortcutssheet/index.js +1 -0
  84. package/dist/esm/product/shortcutssheet/shortcutssheet.js +88 -0
  85. package/dist/esm/product/shortcutssheet/shortcutssheet.recipe.js +47 -0
  86. package/dist/esm/product/taskeditpopover/index.js +2 -0
  87. package/dist/esm/product/taskeditpopover/taskeditpopover.js +123 -0
  88. package/dist/esm/product/taskeditpopover/taskeditpopover.recipe.js +65 -0
  89. package/dist/esm/product/workspaceswitchermenu/index.js +1 -0
  90. package/dist/esm/product/workspaceswitchermenu/workspaceswitchermenu.js +35 -0
  91. package/dist/esm/product/workspaceswitchermenu/workspaceswitchermenu.recipe.js +31 -0
  92. package/dist/esm/tokens/palette.js +27 -0
  93. package/dist/esm/tokens/semantic.js +20 -0
  94. package/dist/multiselect.css +18 -0
  95. package/dist/multiselect.layered.css +18 -0
  96. package/dist/native/tokens.d.ts +1 -1
  97. package/dist/native/tokens.js +56 -4
  98. package/dist/notesgallery.css +15 -0
  99. package/dist/notesgallery.d.ts +7 -0
  100. package/dist/notesgallery.layered.css +17 -0
  101. package/dist/objectpagemenu.css +3 -0
  102. package/dist/objectpagemenu.d.ts +7 -0
  103. package/dist/objectpagemenu.layered.css +5 -0
  104. package/dist/recordpage.css +36 -0
  105. package/dist/recordpage.layered.css +36 -0
  106. package/dist/recordpicker.css +13 -0
  107. package/dist/recordpicker.d.ts +7 -0
  108. package/dist/recordpicker.layered.css +15 -0
  109. package/dist/savedviews.css +47 -0
  110. package/dist/savedviews.layered.css +47 -0
  111. package/dist/select.css +19 -0
  112. package/dist/select.layered.css +19 -0
  113. package/dist/share.css +84 -0
  114. package/dist/share.d.ts +7 -0
  115. package/dist/share.layered.css +86 -0
  116. package/dist/shortcutssheet.css +24 -0
  117. package/dist/shortcutssheet.d.ts +7 -0
  118. package/dist/shortcutssheet.layered.css +26 -0
  119. package/dist/styles.css +387 -8
  120. package/dist/styles.layered.css +387 -8
  121. package/dist/taskeditpopover.css +36 -0
  122. package/dist/taskeditpopover.d.ts +7 -0
  123. package/dist/taskeditpopover.layered.css +38 -0
  124. package/dist/tokens.css +26 -0
  125. package/dist/tokens.json +56 -4
  126. package/dist/types/components/button/button.recipe.d.ts +2 -3
  127. package/dist/types/components/datatable/datatable.d.ts +8 -0
  128. package/dist/types/components/menu/menu.d.ts +50 -7
  129. package/dist/types/components/multiselect/multiselect.d.ts +9 -0
  130. package/dist/types/components/select/select.d.ts +10 -0
  131. package/dist/types/core/index.d.ts +1 -1
  132. package/dist/types/core/place-floating.d.ts +37 -0
  133. package/dist/types/index.d.ts +8 -0
  134. package/dist/types/product/assigneepicker/assigneepicker.d.ts +36 -0
  135. package/dist/types/product/assigneepicker/assigneepicker.recipe.d.ts +3 -0
  136. package/dist/types/product/assigneepicker/index.d.ts +2 -0
  137. package/dist/types/product/notesgallery/index.d.ts +2 -0
  138. package/dist/types/product/notesgallery/notesgallery.d.ts +54 -0
  139. package/dist/types/product/notesgallery/notesgallery.recipe.d.ts +3 -0
  140. package/dist/types/product/objectpagemenu/index.d.ts +1 -0
  141. package/dist/types/product/objectpagemenu/objectpagemenu.d.ts +40 -0
  142. package/dist/types/product/objectpagemenu/objectpagemenu.recipe.d.ts +17 -0
  143. package/dist/types/product/objectsettings/objectsettings.d.ts +71 -15
  144. package/dist/types/product/recordpage/index.d.ts +1 -1
  145. package/dist/types/product/recordpage/recordpage.d.ts +96 -1
  146. package/dist/types/product/recordpicker/index.d.ts +2 -0
  147. package/dist/types/product/recordpicker/recordpicker.d.ts +38 -0
  148. package/dist/types/product/recordpicker/recordpicker.recipe.d.ts +3 -0
  149. package/dist/types/product/savedviews/index.d.ts +1 -1
  150. package/dist/types/product/savedviews/savedviews.d.ts +36 -0
  151. package/dist/types/product/share/index.d.ts +2 -0
  152. package/dist/types/product/share/share.d.ts +85 -0
  153. package/dist/types/product/share/share.recipe.d.ts +3 -0
  154. package/dist/types/product/shortcutssheet/index.d.ts +1 -0
  155. package/dist/types/product/shortcutssheet/shortcutssheet.d.ts +49 -0
  156. package/dist/types/product/shortcutssheet/shortcutssheet.recipe.d.ts +3 -0
  157. package/dist/types/product/taskeditpopover/index.d.ts +2 -0
  158. package/dist/types/product/taskeditpopover/taskeditpopover.d.ts +67 -0
  159. package/dist/types/product/taskeditpopover/taskeditpopover.recipe.d.ts +3 -0
  160. package/dist/types/product/workspaceswitchermenu/index.d.ts +1 -0
  161. package/dist/types/product/workspaceswitchermenu/workspaceswitchermenu.d.ts +54 -0
  162. package/dist/types/product/workspaceswitchermenu/workspaceswitchermenu.recipe.d.ts +19 -0
  163. package/dist/types/tokens/contract.d.ts +13 -0
  164. package/dist/types/tokens/palette.d.ts +52 -0
  165. package/dist/types/tokens/semantic.d.ts +20 -0
  166. package/dist/workspaceswitchermenu.css +4 -0
  167. package/dist/workspaceswitchermenu.d.ts +7 -0
  168. package/dist/workspaceswitchermenu.layered.css +6 -0
  169. package/package.json +41 -1
@@ -71,6 +71,53 @@
71
71
  font-size: var(--crisp-text-sm); font-weight: var(--crisp-weight-medium);
72
72
  color: color-mix(in srgb, var(--crisp-fg-primary) 50%, transparent);
73
73
  }
74
+
75
+ /* crisp#568: the "Discard changes" / "Save for everyone ▾" bar a
76
+ consumer swaps into its own toolbar's trailing slot (TableToolbar's
77
+ own children prop already documents "right-aligned actions after the
78
+ count") while the loaded view is dirty -- measured live on
79
+ app.attio.com replacing that exact slot's usual Import/Export + New
80
+ button. Not rendered inside SavedViews' own trigger/panel, which
81
+ stays untouched; this is its own export, SavedViewsSaveBar. */
82
+ .crisp-savedviews-savebar { display: flex; align-items: center; gap: var(--crisp-space-2); }
83
+ /* Rest-state color is a 55% color-mix of fgPrimary -- measured
84
+ identical to recordpanel's own ".crisp-recordpanel-section-action"
85
+ (its own comment: "measured 10px/400, a lighter mix..." -- font size
86
+ there was the SAME outer-vs-inner-div miss #688 corrected; the 55%
87
+ mix itself checks out independently here). Hover repeats crisp's own
88
+ already-measured Button ghost intent exactly (bgRaised + fgPrimary),
89
+ confirmed live (hover bg rgba(0,0,0,.04) + ink text matches bgRaised
90
+ + fgPrimary bit for bit) -- reused, not re-derived. */
91
+ .crisp-savedviews-savebar-discard {
92
+ box-sizing: border-box; display: inline-flex; align-items: center; height: 28px;
93
+ margin: 0; padding-inline: var(--crisp-space-2); border: none; border-radius: var(--crisp-radius-md);
94
+ background: none; font-family: inherit; font-size: var(--crisp-text-lg); font-weight: var(--crisp-weight-medium);
95
+ color: color-mix(in srgb, var(--crisp-fg-primary) 55%, transparent); cursor: pointer;
96
+ transition: background-color .12s ease, color .12s ease;
97
+ }
98
+ .crisp-savedviews-savebar-discard:hover { background: var(--crisp-bg-raised); color: var(--crisp-fg-primary); }
99
+ /* the split "Save for everyone ▾" pill -- two adjacent buttons sharing
100
+ one visual pill (measured: label half rounds only its outer/left
101
+ corners, the chevron half only its outer/right corners, seamless
102
+ between). Fill is crisp's OWN measured bgBrandContrast, not Attio's
103
+ own literal button blue -- the owner's directive is Attio structure/
104
+ sizing, seed-identity color (crisp direction doc). Hover/active reuse
105
+ Button's own already-measured primary-intent brightness filter
106
+ (crisp#910) rather than Attio's own literal darker fill, for the
107
+ same reason. */
108
+ .crisp-savedviews-savebar-save-group { display: flex; }
109
+ .crisp-savedviews-savebar-save, .crisp-savedviews-savebar-save-chevron {
110
+ box-sizing: border-box; display: inline-flex; align-items: center; justify-content: center;
111
+ height: 28px; margin: 0; border: none; background: var(--crisp-bg-brand-contrast); color: var(--crisp-fg-on-brand);
112
+ cursor: pointer; transition: filter .2s;
113
+ }
114
+ .crisp-savedviews-savebar-save:hover, .crisp-savedviews-savebar-save-chevron:hover { filter: brightness(0.96); }
115
+ .crisp-savedviews-savebar-save:active, .crisp-savedviews-savebar-save-chevron:active { filter: brightness(0.92); }
116
+ .crisp-savedviews-savebar-save {
117
+ padding-inline: var(--crisp-space-2) var(--crisp-space-1-5); border-radius: var(--crisp-radius-md) 0 0 var(--crisp-radius-md);
118
+ font-family: inherit; font-size: var(--crisp-text-lg); font-weight: var(--crisp-weight-medium);
119
+ }
120
+ .crisp-savedviews-savebar-save-chevron { width: 28px; padding: 0; border-radius: 0 var(--crisp-radius-md) var(--crisp-radius-md) 0; }
74
121
 
75
122
  .crisp-savedviews {
76
123
  position: relative; display: inline-flex; font-family: var(--crisp-font-sans); -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; /* crisp/#772 follow-up, re-measured live 2026-09-25 in the trigger's
@@ -72,6 +72,53 @@
72
72
  font-size: var(--crisp-text-sm); font-weight: var(--crisp-weight-medium);
73
73
  color: color-mix(in srgb, var(--crisp-fg-primary) 50%, transparent);
74
74
  }
75
+
76
+ /* crisp#568: the "Discard changes" / "Save for everyone ▾" bar a
77
+ consumer swaps into its own toolbar's trailing slot (TableToolbar's
78
+ own children prop already documents "right-aligned actions after the
79
+ count") while the loaded view is dirty -- measured live on
80
+ app.attio.com replacing that exact slot's usual Import/Export + New
81
+ button. Not rendered inside SavedViews' own trigger/panel, which
82
+ stays untouched; this is its own export, SavedViewsSaveBar. */
83
+ .crisp-savedviews-savebar { display: flex; align-items: center; gap: var(--crisp-space-2); }
84
+ /* Rest-state color is a 55% color-mix of fgPrimary -- measured
85
+ identical to recordpanel's own ".crisp-recordpanel-section-action"
86
+ (its own comment: "measured 10px/400, a lighter mix..." -- font size
87
+ there was the SAME outer-vs-inner-div miss #688 corrected; the 55%
88
+ mix itself checks out independently here). Hover repeats crisp's own
89
+ already-measured Button ghost intent exactly (bgRaised + fgPrimary),
90
+ confirmed live (hover bg rgba(0,0,0,.04) + ink text matches bgRaised
91
+ + fgPrimary bit for bit) -- reused, not re-derived. */
92
+ .crisp-savedviews-savebar-discard {
93
+ box-sizing: border-box; display: inline-flex; align-items: center; height: 28px;
94
+ margin: 0; padding-inline: var(--crisp-space-2); border: none; border-radius: var(--crisp-radius-md);
95
+ background: none; font-family: inherit; font-size: var(--crisp-text-lg); font-weight: var(--crisp-weight-medium);
96
+ color: color-mix(in srgb, var(--crisp-fg-primary) 55%, transparent); cursor: pointer;
97
+ transition: background-color .12s ease, color .12s ease;
98
+ }
99
+ .crisp-savedviews-savebar-discard:hover { background: var(--crisp-bg-raised); color: var(--crisp-fg-primary); }
100
+ /* the split "Save for everyone ▾" pill -- two adjacent buttons sharing
101
+ one visual pill (measured: label half rounds only its outer/left
102
+ corners, the chevron half only its outer/right corners, seamless
103
+ between). Fill is crisp's OWN measured bgBrandContrast, not Attio's
104
+ own literal button blue -- the owner's directive is Attio structure/
105
+ sizing, seed-identity color (crisp direction doc). Hover/active reuse
106
+ Button's own already-measured primary-intent brightness filter
107
+ (crisp#910) rather than Attio's own literal darker fill, for the
108
+ same reason. */
109
+ .crisp-savedviews-savebar-save-group { display: flex; }
110
+ .crisp-savedviews-savebar-save, .crisp-savedviews-savebar-save-chevron {
111
+ box-sizing: border-box; display: inline-flex; align-items: center; justify-content: center;
112
+ height: 28px; margin: 0; border: none; background: var(--crisp-bg-brand-contrast); color: var(--crisp-fg-on-brand);
113
+ cursor: pointer; transition: filter .2s;
114
+ }
115
+ .crisp-savedviews-savebar-save:hover, .crisp-savedviews-savebar-save-chevron:hover { filter: brightness(0.96); }
116
+ .crisp-savedviews-savebar-save:active, .crisp-savedviews-savebar-save-chevron:active { filter: brightness(0.92); }
117
+ .crisp-savedviews-savebar-save {
118
+ padding-inline: var(--crisp-space-2) var(--crisp-space-1-5); border-radius: var(--crisp-radius-md) 0 0 var(--crisp-radius-md);
119
+ font-family: inherit; font-size: var(--crisp-text-lg); font-weight: var(--crisp-weight-medium);
120
+ }
121
+ .crisp-savedviews-savebar-save-chevron { width: 28px; padding: 0; border-radius: 0 var(--crisp-radius-md) var(--crisp-radius-md) 0; }
75
122
 
76
123
  .crisp-savedviews {
77
124
  position: relative; display: inline-flex; font-family: var(--crisp-font-sans); -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; /* crisp/#772 follow-up, re-measured live 2026-09-25 in the trigger's
package/dist/select.css CHANGED
@@ -62,6 +62,25 @@
62
62
  .crisp-select-option[data-disabled] .crisp-select-option-description,
63
63
  .crisp-select-option[data-disabled] .crisp-select-option-check { color: var(--crisp-fg-disabled); }
64
64
  .crisp-select-option-dot { flex-shrink: 0; width: 8px; height: 8px; border-radius: var(--crisp-radius-full); margin-inline-end: var(--crisp-space-2); }
65
+ /* your-moon/crisp#998: Attio's own 12-colour tag palette (measured live,
66
+ see tokens/palette.ts's tagSwatch1 comment) -- the label itself as a
67
+ filled pill, not a dot beside it. 7px radius/10px text have no
68
+ matching step in the shared scale (radius.xs is 4px, .sm is 6px;
69
+ text.xs is 11px), so both are the measured literals, same as
70
+ DataTable's own avatar font-size (#891). */
71
+ .crisp-select-swatch { display: inline-flex; align-items: center; height: var(--crisp-size-chip); padding: 0 var(--crisp-space-1); border-radius: 7px; font-size: 10px; font-weight: var(--crisp-weight-regular); color: var(--crisp-fg-tag-swatch); }
72
+ .crisp-select-swatch[data-swatch="1"] { background: var(--crisp-bg-tag-swatch1); }
73
+ .crisp-select-swatch[data-swatch="2"] { background: var(--crisp-bg-tag-swatch2); }
74
+ .crisp-select-swatch[data-swatch="3"] { background: var(--crisp-bg-tag-swatch3); }
75
+ .crisp-select-swatch[data-swatch="4"] { background: var(--crisp-bg-tag-swatch4); }
76
+ .crisp-select-swatch[data-swatch="5"] { background: var(--crisp-bg-tag-swatch5); }
77
+ .crisp-select-swatch[data-swatch="6"] { background: var(--crisp-bg-tag-swatch6); }
78
+ .crisp-select-swatch[data-swatch="7"] { background: var(--crisp-bg-tag-swatch7); }
79
+ .crisp-select-swatch[data-swatch="8"] { background: var(--crisp-bg-tag-swatch8); }
80
+ .crisp-select-swatch[data-swatch="9"] { background: var(--crisp-bg-tag-swatch9); }
81
+ .crisp-select-swatch[data-swatch="10"] { background: var(--crisp-bg-tag-swatch10); }
82
+ .crisp-select-swatch[data-swatch="11"] { background: var(--crisp-bg-tag-swatch11); }
83
+ .crisp-select-swatch[data-swatch="12"] { background: var(--crisp-bg-tag-swatch12); }
65
84
  .crisp-select-option-body { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: var(--crisp-space-0-5); }
66
85
  .crisp-select-option-label { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; }
67
86
  .crisp-select-option-description { min-width: 0; overflow: hidden; text-overflow: ellipsis; color: var(--crisp-fg-neutral-subtle); }
@@ -63,6 +63,25 @@
63
63
  .crisp-select-option[data-disabled] .crisp-select-option-description,
64
64
  .crisp-select-option[data-disabled] .crisp-select-option-check { color: var(--crisp-fg-disabled); }
65
65
  .crisp-select-option-dot { flex-shrink: 0; width: 8px; height: 8px; border-radius: var(--crisp-radius-full); margin-inline-end: var(--crisp-space-2); }
66
+ /* your-moon/crisp#998: Attio's own 12-colour tag palette (measured live,
67
+ see tokens/palette.ts's tagSwatch1 comment) -- the label itself as a
68
+ filled pill, not a dot beside it. 7px radius/10px text have no
69
+ matching step in the shared scale (radius.xs is 4px, .sm is 6px;
70
+ text.xs is 11px), so both are the measured literals, same as
71
+ DataTable's own avatar font-size (#891). */
72
+ .crisp-select-swatch { display: inline-flex; align-items: center; height: var(--crisp-size-chip); padding: 0 var(--crisp-space-1); border-radius: 7px; font-size: 10px; font-weight: var(--crisp-weight-regular); color: var(--crisp-fg-tag-swatch); }
73
+ .crisp-select-swatch[data-swatch="1"] { background: var(--crisp-bg-tag-swatch1); }
74
+ .crisp-select-swatch[data-swatch="2"] { background: var(--crisp-bg-tag-swatch2); }
75
+ .crisp-select-swatch[data-swatch="3"] { background: var(--crisp-bg-tag-swatch3); }
76
+ .crisp-select-swatch[data-swatch="4"] { background: var(--crisp-bg-tag-swatch4); }
77
+ .crisp-select-swatch[data-swatch="5"] { background: var(--crisp-bg-tag-swatch5); }
78
+ .crisp-select-swatch[data-swatch="6"] { background: var(--crisp-bg-tag-swatch6); }
79
+ .crisp-select-swatch[data-swatch="7"] { background: var(--crisp-bg-tag-swatch7); }
80
+ .crisp-select-swatch[data-swatch="8"] { background: var(--crisp-bg-tag-swatch8); }
81
+ .crisp-select-swatch[data-swatch="9"] { background: var(--crisp-bg-tag-swatch9); }
82
+ .crisp-select-swatch[data-swatch="10"] { background: var(--crisp-bg-tag-swatch10); }
83
+ .crisp-select-swatch[data-swatch="11"] { background: var(--crisp-bg-tag-swatch11); }
84
+ .crisp-select-swatch[data-swatch="12"] { background: var(--crisp-bg-tag-swatch12); }
66
85
  .crisp-select-option-body { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: var(--crisp-space-0-5); }
67
86
  .crisp-select-option-label { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; }
68
87
  .crisp-select-option-description { min-width: 0; overflow: hidden; text-overflow: ellipsis; color: var(--crisp-fg-neutral-subtle); }
package/dist/share.css ADDED
@@ -0,0 +1,84 @@
1
+
2
+ .crisp-share-content {
3
+ font-family: var(--crisp-font-sans); -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale;
4
+ position: fixed; z-index: 70; pointer-events: auto; box-sizing: border-box;
5
+ width: 440px; max-width: 92vw;
6
+ padding: var(--crisp-space-3); display: flex; flex-direction: column; gap: var(--crisp-space-3);
7
+ border-radius: var(--crisp-radius-xl); background: var(--crisp-bg-popover); color: var(--crisp-fg-primary);
8
+ 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);
9
+ opacity: 1; transform: none; transform-origin: top right;
10
+ transition: opacity 0.08s ease, transform 0.08s ease;
11
+ @starting-style { opacity: 0; transform: scale(0.97) translateY(-1px); }
12
+ }
13
+ .crisp-share-content[data-up] { transform-origin: bottom right; }
14
+
15
+ .crisp-share-tabs { display: flex; align-items: center; gap: var(--crisp-space-1); }
16
+ .crisp-share-tab {
17
+ box-sizing: border-box; display: inline-flex; align-items: center; gap: var(--crisp-space-1-5);
18
+ height: var(--crisp-size-row); padding: 0 var(--crisp-space-2); border: none; border-radius: var(--crisp-radius-md);
19
+ background: transparent; color: color-mix(in srgb, var(--crisp-fg-primary) 63%, transparent);
20
+ font-family: inherit; font-size: var(--crisp-text-lg); font-weight: var(--crisp-weight-medium); letter-spacing: -0.07px;
21
+ cursor: pointer; transition: background-color .12s ease, color .12s ease;
22
+ }
23
+ .crisp-share-tab svg { flex-shrink: 0; }
24
+ .crisp-share-tab:hover { color: var(--crisp-fg-primary); }
25
+ .crisp-share-tab[aria-selected="true"] { background: var(--crisp-bg-surface-muted); color: var(--crisp-fg-primary); }
26
+
27
+ .crisp-share-row { display: flex; align-items: center; gap: var(--crisp-space-2); min-height: 34px; }
28
+ .crisp-share-row-label { flex: 1; min-width: 0; font-size: var(--crisp-text-lg); font-weight: var(--crisp-weight-medium); color: var(--crisp-fg-primary); letter-spacing: -0.07px; }
29
+ .crisp-share-row .crisp-select { flex-shrink: 0; }
30
+ .crisp-share-row .crisp-select .crisp-select-value,
31
+ .crisp-share-row .crisp-select .crisp-select-chevron { color: color-mix(in srgb, var(--crisp-fg-primary) 55%, transparent); }
32
+
33
+ .crisp-share-clear {
34
+ align-self: flex-start; margin: 0; padding: 0; border: none; background: none;
35
+ font-family: inherit; font-size: var(--crisp-text-md); font-weight: var(--crisp-weight-medium);
36
+ color: color-mix(in srgb, var(--crisp-fg-primary) 63%, transparent); cursor: pointer;
37
+ }
38
+ .crisp-share-clear:hover { color: var(--crisp-fg-primary); text-decoration: underline; }
39
+
40
+ .crisp-share-section-label {
41
+ margin: 0; font-size: var(--crisp-text-sm); font-weight: var(--crisp-weight-medium); color: color-mix(in srgb, var(--crisp-fg-primary) 50%, transparent);
42
+ }
43
+ .crisp-share-members { display: flex; flex-direction: column; gap: var(--crisp-space-2); }
44
+ .crisp-share-member { display: flex; align-items: center; gap: var(--crisp-space-2); }
45
+ .crisp-share-member-text { flex: 1; min-width: 0; display: flex; align-items: baseline; gap: var(--crisp-space-1-5); overflow: hidden; }
46
+ .crisp-share-member-name { flex-shrink: 0; font-size: var(--crisp-text-lg); font-weight: var(--crisp-weight-medium); color: var(--crisp-fg-primary); letter-spacing: -0.07px; }
47
+ .crisp-share-member-email { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-size: var(--crisp-text-lg); font-weight: var(--crisp-weight-medium); color: color-mix(in srgb, var(--crisp-fg-primary) 55%, transparent); letter-spacing: -0.07px; }
48
+ .crisp-share-member .crisp-select { flex-shrink: 0; }
49
+ .crisp-share-member .crisp-select .crisp-select-value,
50
+ .crisp-share-member .crisp-select .crisp-select-chevron { color: color-mix(in srgb, var(--crisp-fg-primary) 55%, transparent); }
51
+
52
+ .crisp-share-automations-row { display: flex; align-items: center; gap: var(--crisp-space-2); }
53
+ .crisp-share-automations-row .crisp-input { flex: 1; min-width: 0; }
54
+ .crisp-share-automations-row .crisp-select { flex-shrink: 0; }
55
+
56
+ .crisp-share-add {
57
+ flex-shrink: 0; box-sizing: border-box; display: inline-flex; align-items: center; justify-content: center;
58
+ height: 32px; padding: 0 var(--crisp-space-2-5); border: none; border-radius: var(--crisp-radius-lg);
59
+ background: var(--crisp-bg-brand-solid); color: var(--crisp-fg-on-brand);
60
+ font-family: inherit; font-size: var(--crisp-text-lg); font-weight: var(--crisp-weight-medium); letter-spacing: -0.07px;
61
+ cursor: pointer; transition: background-color .12s ease, opacity .12s ease;
62
+ }
63
+ .crisp-share-add:hover:not(:disabled) { background: var(--crisp-bg-brand-solid-pressed); }
64
+ .crisp-share-add:disabled { opacity: 0.4; cursor: not-allowed; }
65
+
66
+ .crisp-share-learnmore {
67
+ display: inline-flex; align-items: center; gap: var(--crisp-space-1-5);
68
+ font-size: var(--crisp-text-lg); font-weight: var(--crisp-weight-medium); color: color-mix(in srgb, var(--crisp-fg-primary) 63%, transparent);
69
+ text-decoration: none;
70
+ }
71
+ .crisp-share-learnmore:hover { color: var(--crisp-fg-primary); }
72
+ .crisp-share-learnmore svg { flex-shrink: 0; }
73
+
74
+ .crisp-share {
75
+ display: contents; font-family: var(--crisp-font-sans);
76
+ }
77
+
78
+ @media (prefers-reduced-motion: reduce) {
79
+ .crisp-share, .crisp-share * {
80
+ animation-duration: 0.01ms !important;
81
+ animation-iteration-count: 1 !important;
82
+ transition-duration: 0.01ms !important;
83
+ }
84
+ }
@@ -0,0 +1,7 @@
1
+ import type { RecipeFn } from "../core/types";
2
+
3
+ export interface ShareVariants {
4
+
5
+ }
6
+
7
+ export declare const shareRecipe: RecipeFn<{ }>;
@@ -0,0 +1,86 @@
1
+ @layer crisp-components {
2
+
3
+ .crisp-share-content {
4
+ font-family: var(--crisp-font-sans); -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale;
5
+ position: fixed; z-index: 70; pointer-events: auto; box-sizing: border-box;
6
+ width: 440px; max-width: 92vw;
7
+ padding: var(--crisp-space-3); display: flex; flex-direction: column; gap: var(--crisp-space-3);
8
+ border-radius: var(--crisp-radius-xl); background: var(--crisp-bg-popover); color: var(--crisp-fg-primary);
9
+ 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);
10
+ opacity: 1; transform: none; transform-origin: top right;
11
+ transition: opacity 0.08s ease, transform 0.08s ease;
12
+ @starting-style { opacity: 0; transform: scale(0.97) translateY(-1px); }
13
+ }
14
+ .crisp-share-content[data-up] { transform-origin: bottom right; }
15
+
16
+ .crisp-share-tabs { display: flex; align-items: center; gap: var(--crisp-space-1); }
17
+ .crisp-share-tab {
18
+ box-sizing: border-box; display: inline-flex; align-items: center; gap: var(--crisp-space-1-5);
19
+ height: var(--crisp-size-row); padding: 0 var(--crisp-space-2); border: none; border-radius: var(--crisp-radius-md);
20
+ background: transparent; color: color-mix(in srgb, var(--crisp-fg-primary) 63%, transparent);
21
+ font-family: inherit; font-size: var(--crisp-text-lg); font-weight: var(--crisp-weight-medium); letter-spacing: -0.07px;
22
+ cursor: pointer; transition: background-color .12s ease, color .12s ease;
23
+ }
24
+ .crisp-share-tab svg { flex-shrink: 0; }
25
+ .crisp-share-tab:hover { color: var(--crisp-fg-primary); }
26
+ .crisp-share-tab[aria-selected="true"] { background: var(--crisp-bg-surface-muted); color: var(--crisp-fg-primary); }
27
+
28
+ .crisp-share-row { display: flex; align-items: center; gap: var(--crisp-space-2); min-height: 34px; }
29
+ .crisp-share-row-label { flex: 1; min-width: 0; font-size: var(--crisp-text-lg); font-weight: var(--crisp-weight-medium); color: var(--crisp-fg-primary); letter-spacing: -0.07px; }
30
+ .crisp-share-row .crisp-select { flex-shrink: 0; }
31
+ .crisp-share-row .crisp-select .crisp-select-value,
32
+ .crisp-share-row .crisp-select .crisp-select-chevron { color: color-mix(in srgb, var(--crisp-fg-primary) 55%, transparent); }
33
+
34
+ .crisp-share-clear {
35
+ align-self: flex-start; margin: 0; padding: 0; border: none; background: none;
36
+ font-family: inherit; font-size: var(--crisp-text-md); font-weight: var(--crisp-weight-medium);
37
+ color: color-mix(in srgb, var(--crisp-fg-primary) 63%, transparent); cursor: pointer;
38
+ }
39
+ .crisp-share-clear:hover { color: var(--crisp-fg-primary); text-decoration: underline; }
40
+
41
+ .crisp-share-section-label {
42
+ margin: 0; font-size: var(--crisp-text-sm); font-weight: var(--crisp-weight-medium); color: color-mix(in srgb, var(--crisp-fg-primary) 50%, transparent);
43
+ }
44
+ .crisp-share-members { display: flex; flex-direction: column; gap: var(--crisp-space-2); }
45
+ .crisp-share-member { display: flex; align-items: center; gap: var(--crisp-space-2); }
46
+ .crisp-share-member-text { flex: 1; min-width: 0; display: flex; align-items: baseline; gap: var(--crisp-space-1-5); overflow: hidden; }
47
+ .crisp-share-member-name { flex-shrink: 0; font-size: var(--crisp-text-lg); font-weight: var(--crisp-weight-medium); color: var(--crisp-fg-primary); letter-spacing: -0.07px; }
48
+ .crisp-share-member-email { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-size: var(--crisp-text-lg); font-weight: var(--crisp-weight-medium); color: color-mix(in srgb, var(--crisp-fg-primary) 55%, transparent); letter-spacing: -0.07px; }
49
+ .crisp-share-member .crisp-select { flex-shrink: 0; }
50
+ .crisp-share-member .crisp-select .crisp-select-value,
51
+ .crisp-share-member .crisp-select .crisp-select-chevron { color: color-mix(in srgb, var(--crisp-fg-primary) 55%, transparent); }
52
+
53
+ .crisp-share-automations-row { display: flex; align-items: center; gap: var(--crisp-space-2); }
54
+ .crisp-share-automations-row .crisp-input { flex: 1; min-width: 0; }
55
+ .crisp-share-automations-row .crisp-select { flex-shrink: 0; }
56
+
57
+ .crisp-share-add {
58
+ flex-shrink: 0; box-sizing: border-box; display: inline-flex; align-items: center; justify-content: center;
59
+ height: 32px; padding: 0 var(--crisp-space-2-5); border: none; border-radius: var(--crisp-radius-lg);
60
+ background: var(--crisp-bg-brand-solid); color: var(--crisp-fg-on-brand);
61
+ font-family: inherit; font-size: var(--crisp-text-lg); font-weight: var(--crisp-weight-medium); letter-spacing: -0.07px;
62
+ cursor: pointer; transition: background-color .12s ease, opacity .12s ease;
63
+ }
64
+ .crisp-share-add:hover:not(:disabled) { background: var(--crisp-bg-brand-solid-pressed); }
65
+ .crisp-share-add:disabled { opacity: 0.4; cursor: not-allowed; }
66
+
67
+ .crisp-share-learnmore {
68
+ display: inline-flex; align-items: center; gap: var(--crisp-space-1-5);
69
+ font-size: var(--crisp-text-lg); font-weight: var(--crisp-weight-medium); color: color-mix(in srgb, var(--crisp-fg-primary) 63%, transparent);
70
+ text-decoration: none;
71
+ }
72
+ .crisp-share-learnmore:hover { color: var(--crisp-fg-primary); }
73
+ .crisp-share-learnmore svg { flex-shrink: 0; }
74
+
75
+ .crisp-share {
76
+ display: contents; font-family: var(--crisp-font-sans);
77
+ }
78
+
79
+ @media (prefers-reduced-motion: reduce) {
80
+ .crisp-share, .crisp-share * {
81
+ animation-duration: 0.01ms !important;
82
+ animation-iteration-count: 1 !important;
83
+ transition-duration: 0.01ms !important;
84
+ }
85
+ }
86
+ }
@@ -0,0 +1,24 @@
1
+
2
+ /* Overrides Drawer's own 420px default (specificity: .crisp-drawer
3
+ .crisp-drawer-content.crisp-shortcutssheet-panel, higher than
4
+ Drawer's .crisp-drawer .crisp-drawer-content regardless of which
5
+ chunk of dist/styles.css concatenates first). */
6
+ .crisp-drawer .crisp-drawer-content.crisp-shortcutssheet-panel { width: 360px; }
7
+
8
+ .crisp-shortcutssheet-body { display: flex; flex-direction: column; gap: var(--crisp-space-2-5); }
9
+ .crisp-shortcutssheet-section-label {
10
+ font-size: var(--crisp-text-sm); font-weight: var(--crisp-weight-medium);
11
+ color: color-mix(in srgb, var(--crisp-fg-primary) 63%, transparent);
12
+ }
13
+ .crisp-shortcutssheet-section-label:not(:first-child) { margin-top: var(--crisp-space-2-5); }
14
+ .crisp-shortcutssheet-row { display: flex; align-items: center; justify-content: space-between; gap: var(--crisp-space-1); }
15
+ .crisp-shortcutssheet-desc {
16
+ font-size: var(--crisp-text-lg); font-weight: var(--crisp-weight-medium);
17
+ color: color-mix(in srgb, var(--crisp-fg-primary) 63%, transparent);
18
+ }
19
+ .crisp-shortcutssheet-keys { display: flex; align-items: center; gap: var(--crisp-space-1); flex-shrink: 0; }
20
+ .crisp-shortcutssheet-then {
21
+ font-size: var(--crisp-text-xs); font-weight: var(--crisp-weight-medium);
22
+ color: color-mix(in srgb, var(--crisp-fg-primary) 50%, transparent);
23
+ }
24
+
@@ -0,0 +1,7 @@
1
+ import type { RecipeFn } from "../core/types";
2
+
3
+ export interface ShortcutssheetVariants {
4
+
5
+ }
6
+
7
+ export declare const shortcutssheetRecipe: RecipeFn<{ }>;
@@ -0,0 +1,26 @@
1
+ @layer crisp-components {
2
+
3
+ /* Overrides Drawer's own 420px default (specificity: .crisp-drawer
4
+ .crisp-drawer-content.crisp-shortcutssheet-panel, higher than
5
+ Drawer's .crisp-drawer .crisp-drawer-content regardless of which
6
+ chunk of dist/styles.css concatenates first). */
7
+ .crisp-drawer .crisp-drawer-content.crisp-shortcutssheet-panel { width: 360px; }
8
+
9
+ .crisp-shortcutssheet-body { display: flex; flex-direction: column; gap: var(--crisp-space-2-5); }
10
+ .crisp-shortcutssheet-section-label {
11
+ font-size: var(--crisp-text-sm); font-weight: var(--crisp-weight-medium);
12
+ color: color-mix(in srgb, var(--crisp-fg-primary) 63%, transparent);
13
+ }
14
+ .crisp-shortcutssheet-section-label:not(:first-child) { margin-top: var(--crisp-space-2-5); }
15
+ .crisp-shortcutssheet-row { display: flex; align-items: center; justify-content: space-between; gap: var(--crisp-space-1); }
16
+ .crisp-shortcutssheet-desc {
17
+ font-size: var(--crisp-text-lg); font-weight: var(--crisp-weight-medium);
18
+ color: color-mix(in srgb, var(--crisp-fg-primary) 63%, transparent);
19
+ }
20
+ .crisp-shortcutssheet-keys { display: flex; align-items: center; gap: var(--crisp-space-1); flex-shrink: 0; }
21
+ .crisp-shortcutssheet-then {
22
+ font-size: var(--crisp-text-xs); font-weight: var(--crisp-weight-medium);
23
+ color: color-mix(in srgb, var(--crisp-fg-primary) 50%, transparent);
24
+ }
25
+
26
+ }