@crisp-ui-kit/crisp 0.49.0 → 0.51.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (104) hide show
  1. package/dist/cjs/components/composewindow/composewindow.js +144 -0
  2. package/dist/cjs/components/composewindow/composewindow.recipe.js +45 -0
  3. package/dist/cjs/components/composewindow/index.js +8 -0
  4. package/dist/cjs/components/datatable/datatable.js +224 -43
  5. package/dist/cjs/components/datatable/datatable.recipe.js +38 -4
  6. package/dist/cjs/components/datatable/index.js +6 -0
  7. package/dist/cjs/components/datepickerfield/datepickerfield.js +25 -15
  8. package/dist/cjs/components/datepickerfield/datepickerfield.recipe.js +25 -8
  9. package/dist/cjs/components/dialog/dialog.recipe.js +9 -1
  10. package/dist/cjs/components/menu/menu.js +4 -2
  11. package/dist/cjs/components/multiselect/multiselect.recipe.js +14 -8
  12. package/dist/cjs/components/select/select.js +2 -1
  13. package/dist/cjs/components/table/table.recipe.js +12 -3
  14. package/dist/cjs/components/tabletoolbar/tabletoolbar.chrome.js +2 -1
  15. package/dist/cjs/components/tabletoolbar/tabletoolbar.js +39 -8
  16. package/dist/cjs/core/cell-date.js +11 -0
  17. package/dist/cjs/core/index.js +2 -1
  18. package/dist/cjs/index.js +1 -0
  19. package/dist/cjs/product/recordpage/recordpage.js +88 -10
  20. package/dist/cjs/product/recordpage/recordpage.recipe.js +30 -0
  21. package/dist/cjs/product/recordpanel/recordpanel.js +54 -4
  22. package/dist/cjs/product/recordpanel/recordpanel.recipe.js +29 -0
  23. package/dist/cjs/product/recordstable/editable-field.js +110 -0
  24. package/dist/cjs/product/recordstable/index.js +4 -1
  25. package/dist/cjs/product/recordstable/recordstable.js +67 -11
  26. package/dist/cjs/product/recordstable/recordstable.recipe.js +9 -1
  27. package/dist/cjs/product/settingsshell/settingsshell.recipe.js +13 -4
  28. package/dist/cjs/product/sidebar/sidebar.js +15 -3
  29. package/dist/cjs/product/sidebar/sidebar.recipe.js +21 -2
  30. package/dist/composewindow.css +24 -0
  31. package/dist/composewindow.d.ts +7 -0
  32. package/dist/composewindow.layered.css +26 -0
  33. package/dist/datatable.css +34 -15
  34. package/dist/datatable.layered.css +34 -15
  35. package/dist/datepickerfield.css +9 -4
  36. package/dist/datepickerfield.layered.css +9 -4
  37. package/dist/dialog.css +2 -1
  38. package/dist/dialog.layered.css +2 -1
  39. package/dist/esm/components/composewindow/composewindow.js +107 -0
  40. package/dist/esm/components/composewindow/composewindow.recipe.js +42 -0
  41. package/dist/esm/components/composewindow/index.js +2 -0
  42. package/dist/esm/components/datatable/datatable.js +226 -45
  43. package/dist/esm/components/datatable/datatable.recipe.js +38 -4
  44. package/dist/esm/components/datatable/index.js +6 -0
  45. package/dist/esm/components/datepickerfield/datepickerfield.js +26 -16
  46. package/dist/esm/components/datepickerfield/datepickerfield.recipe.js +25 -8
  47. package/dist/esm/components/dialog/dialog.recipe.js +9 -1
  48. package/dist/esm/components/menu/menu.js +4 -2
  49. package/dist/esm/components/multiselect/multiselect.recipe.js +14 -8
  50. package/dist/esm/components/select/select.js +2 -1
  51. package/dist/esm/components/table/table.recipe.js +12 -3
  52. package/dist/esm/components/tabletoolbar/tabletoolbar.chrome.js +2 -1
  53. package/dist/esm/components/tabletoolbar/tabletoolbar.js +38 -8
  54. package/dist/esm/core/cell-date.js +10 -0
  55. package/dist/esm/core/index.js +1 -1
  56. package/dist/esm/index.js +1 -0
  57. package/dist/esm/product/recordpage/recordpage.js +89 -11
  58. package/dist/esm/product/recordpage/recordpage.recipe.js +30 -0
  59. package/dist/esm/product/recordpanel/recordpanel.js +55 -5
  60. package/dist/esm/product/recordpanel/recordpanel.recipe.js +29 -0
  61. package/dist/esm/product/recordstable/editable-field.js +73 -0
  62. package/dist/esm/product/recordstable/index.js +1 -0
  63. package/dist/esm/product/recordstable/recordstable.js +69 -13
  64. package/dist/esm/product/recordstable/recordstable.recipe.js +9 -1
  65. package/dist/esm/product/settingsshell/settingsshell.recipe.js +13 -4
  66. package/dist/esm/product/sidebar/sidebar.js +15 -3
  67. package/dist/esm/product/sidebar/sidebar.recipe.js +21 -2
  68. package/dist/multiselect.css +8 -8
  69. package/dist/multiselect.layered.css +8 -8
  70. package/dist/recordpage.css +25 -13
  71. package/dist/recordpage.layered.css +25 -13
  72. package/dist/recordpanel.css +22 -5
  73. package/dist/recordpanel.layered.css +22 -5
  74. package/dist/recordstable.css +10 -2
  75. package/dist/recordstable.layered.css +10 -2
  76. package/dist/settingsshell.css +2 -2
  77. package/dist/settingsshell.layered.css +2 -2
  78. package/dist/sidebar.css +7 -2
  79. package/dist/sidebar.layered.css +7 -2
  80. package/dist/styles.css +150 -55
  81. package/dist/styles.layered.css +150 -55
  82. package/dist/table.css +4 -2
  83. package/dist/table.layered.css +4 -2
  84. package/dist/tabletoolbar.css +2 -1
  85. package/dist/tabletoolbar.layered.css +2 -1
  86. package/dist/types/components/composewindow/composewindow.d.ts +80 -0
  87. package/dist/types/components/composewindow/composewindow.recipe.d.ts +3 -0
  88. package/dist/types/components/composewindow/index.d.ts +2 -0
  89. package/dist/types/components/datatable/datatable.d.ts +58 -4
  90. package/dist/types/components/datatable/index.d.ts +1 -1
  91. package/dist/types/components/datepickerfield/datepickerfield.d.ts +18 -4
  92. package/dist/types/components/menu/menu.d.ts +10 -1
  93. package/dist/types/components/select/select.d.ts +6 -1
  94. package/dist/types/components/tabletoolbar/tabletoolbar.d.ts +62 -5
  95. package/dist/types/core/cell-date.d.ts +17 -0
  96. package/dist/types/core/index.d.ts +1 -1
  97. package/dist/types/index.d.ts +1 -0
  98. package/dist/types/product/recordpage/recordpage.d.ts +59 -1
  99. package/dist/types/product/recordpanel/recordpanel.d.ts +11 -1
  100. package/dist/types/product/recordstable/editable-field.d.ts +45 -0
  101. package/dist/types/product/recordstable/index.d.ts +1 -0
  102. package/dist/types/product/recordstable/recordstable.d.ts +29 -0
  103. package/dist/types/product/sidebar/sidebar.d.ts +60 -4
  104. package/package.json +6 -1
@@ -11,6 +11,14 @@ export type SidebarNavItem = {
11
11
  icon: React.ComponentType<IconProps>;
12
12
  active?: boolean;
13
13
  trailing?: React.ReactNode;
14
+ /** Either this or `onSelect` — a plain link, or a handler for anything
15
+ * that isn't real navigation. Both may be set; neither is required to
16
+ * make the row *something* clickable (it still renders as a link,
17
+ * defaulting `href` to "#"). Same shape as a `groups` row's
18
+ * `SidebarNavGroupItem` (#384) — `items` is the only place that used to
19
+ * be missing this wiring. */
20
+ href?: string;
21
+ onSelect?: () => void;
14
22
  };
15
23
  /** A row in the Records section — rendered as a tinted 20px glyph avatar. */
16
24
  export type SidebarRecordItem = {
@@ -96,6 +104,20 @@ export type SidebarProps = React.ComponentPropsWithoutRef<"nav"> & {
96
104
  onToggleCollapse?: () => void;
97
105
  /** Workspace switcher content. Defaults to the measured workspace. */
98
106
  workspace?: SidebarWorkspace;
107
+ /**
108
+ * Menu content for the workspace switcher — `MenuItem`/`MenuSeparator`/
109
+ * `MenuLabel` children, the same as a consumer would give `Menu` directly.
110
+ * Omit to leave the switcher a plain (still real, focusable) button with
111
+ * no popup, as before. When given, the switcher becomes a real menu
112
+ * trigger (`aria-haspopup="menu"`, `aria-expanded`, keyboard-openable —
113
+ * rents `Menu`'s own machine, no new one) that opens it — router-agnostic
114
+ * and consistent with the nav API (#384): a `MenuItem`'s own `onSelect` is
115
+ * how a consumer reaches its own navigation, the same as a nav row's
116
+ * (#415: Attio's switcher opens "Account settings" / "Workspace settings",
117
+ * among others — crisp ships no fixed items of its own, since which
118
+ * settings exist is entirely the consumer's).
119
+ */
120
+ workspaceMenu?: React.ReactNode;
99
121
  /** Main nav rows (Home, Tasks, …). Defaults to the measured nav. */
100
122
  items?: SidebarNavItem[];
101
123
  /** The Records section (label + glyph-avatar rows). */
@@ -114,8 +136,18 @@ export type SidebarProps = React.ComponentPropsWithoutRef<"nav"> & {
114
136
  * renders exactly as before this prop existed.
115
137
  */
116
138
  groups?: SidebarNavGroup[];
117
- /** Footer copy (onboarding pill, invite row, trial banner). */
118
- footer?: SidebarFooter;
139
+ /**
140
+ * The footer slot. Defaults to Attio's own onboarding pill + invite row +
141
+ * trial banner (`ATTIO_SIDEBAR_FOOTER`). Pass a `SidebarFooter` object to
142
+ * override just the strings in that fixed shape (as before), any other
143
+ * `ReactNode` — an account/user menu, say — to replace the slot's content
144
+ * entirely (still pinned to the bottom of the nav), or `false` to render
145
+ * no footer at all so a consumer can compose their own element directly
146
+ * below `<Sidebar>` instead (#408: GRC has no onboarding checklist, no
147
+ * invite flow and no trial banner, so none of the fixed copy had anything
148
+ * real to say, and there was no way to put a real account menu here).
149
+ */
150
+ footer?: SidebarFooter | React.ReactNode;
119
151
  /**
120
152
  * Command-palette items, forwarded to the internal `Command`'s own
121
153
  * `items` prop. Omit for Command's built-in Attio set (#364: GRC's
@@ -162,6 +194,20 @@ export declare const Sidebar: React.ForwardRefExoticComponent<Omit<React.Detaile
162
194
  onToggleCollapse?: () => void;
163
195
  /** Workspace switcher content. Defaults to the measured workspace. */
164
196
  workspace?: SidebarWorkspace;
197
+ /**
198
+ * Menu content for the workspace switcher — `MenuItem`/`MenuSeparator`/
199
+ * `MenuLabel` children, the same as a consumer would give `Menu` directly.
200
+ * Omit to leave the switcher a plain (still real, focusable) button with
201
+ * no popup, as before. When given, the switcher becomes a real menu
202
+ * trigger (`aria-haspopup="menu"`, `aria-expanded`, keyboard-openable —
203
+ * rents `Menu`'s own machine, no new one) that opens it — router-agnostic
204
+ * and consistent with the nav API (#384): a `MenuItem`'s own `onSelect` is
205
+ * how a consumer reaches its own navigation, the same as a nav row's
206
+ * (#415: Attio's switcher opens "Account settings" / "Workspace settings",
207
+ * among others — crisp ships no fixed items of its own, since which
208
+ * settings exist is entirely the consumer's).
209
+ */
210
+ workspaceMenu?: React.ReactNode;
165
211
  /** Main nav rows (Home, Tasks, …). Defaults to the measured nav. */
166
212
  items?: SidebarNavItem[];
167
213
  /** The Records section (label + glyph-avatar rows). */
@@ -180,8 +226,18 @@ export declare const Sidebar: React.ForwardRefExoticComponent<Omit<React.Detaile
180
226
  * renders exactly as before this prop existed.
181
227
  */
182
228
  groups?: SidebarNavGroup[];
183
- /** Footer copy (onboarding pill, invite row, trial banner). */
184
- footer?: SidebarFooter;
229
+ /**
230
+ * The footer slot. Defaults to Attio's own onboarding pill + invite row +
231
+ * trial banner (`ATTIO_SIDEBAR_FOOTER`). Pass a `SidebarFooter` object to
232
+ * override just the strings in that fixed shape (as before), any other
233
+ * `ReactNode` — an account/user menu, say — to replace the slot's content
234
+ * entirely (still pinned to the bottom of the nav), or `false` to render
235
+ * no footer at all so a consumer can compose their own element directly
236
+ * below `<Sidebar>` instead (#408: GRC has no onboarding checklist, no
237
+ * invite flow and no trial banner, so none of the fixed copy had anything
238
+ * real to say, and there was no way to put a real account menu here).
239
+ */
240
+ footer?: SidebarFooter | React.ReactNode;
185
241
  /**
186
242
  * Command-palette items, forwarded to the internal `Command`'s own
187
243
  * `items` prop. Omit for Command's built-in Attio set (#364: GRC's
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@crisp-ui-kit/crisp",
3
- "version": "0.49.0",
3
+ "version": "0.51.0",
4
4
  "description": "A lean React design system, measured pixel-for-pixel from Attio.",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -98,6 +98,11 @@
98
98
  "import": "./dist/esm/components/columncalc/index.js",
99
99
  "require": "./dist/cjs/components/columncalc/index.js"
100
100
  },
101
+ "./composewindow": {
102
+ "types": "./dist/types/components/composewindow/index.d.ts",
103
+ "import": "./dist/esm/components/composewindow/index.js",
104
+ "require": "./dist/cjs/components/composewindow/index.js"
105
+ },
101
106
  "./contextmenu": {
102
107
  "types": "./dist/types/components/contextmenu/index.d.ts",
103
108
  "import": "./dist/esm/components/contextmenu/index.js",