@crisp-ui-kit/crisp 0.31.5 → 0.32.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 (403) hide show
  1. package/NOTICE +88 -0
  2. package/README.md +22 -0
  3. package/dist/accordion.css +13 -13
  4. package/dist/accordion.layered.css +23 -0
  5. package/dist/appshell.css +11 -11
  6. package/dist/appshell.layered.css +25 -0
  7. package/dist/authshell.css +23 -23
  8. package/dist/authshell.layered.css +59 -0
  9. package/dist/avatar.css +23 -23
  10. package/dist/avatar.layered.css +41 -0
  11. package/dist/avatargroup.css +2 -2
  12. package/dist/avatargroup.layered.css +7 -0
  13. package/dist/badge.css +31 -31
  14. package/dist/badge.layered.css +51 -0
  15. package/dist/barchart.css +15 -15
  16. package/dist/barchart.layered.css +25 -0
  17. package/dist/base.css +4 -4
  18. package/dist/board.css +20 -20
  19. package/dist/board.layered.css +34 -0
  20. package/dist/breadcrumb.css +8 -8
  21. package/dist/breadcrumb.layered.css +13 -0
  22. package/dist/bulkbar.css +13 -13
  23. package/dist/bulkbar.layered.css +23 -0
  24. package/dist/button.css +21 -21
  25. package/dist/button.layered.css +46 -0
  26. package/dist/callout.css +15 -15
  27. package/dist/callout.layered.css +18 -0
  28. package/dist/card.css +14 -14
  29. package/dist/card.layered.css +30 -0
  30. package/dist/checkbox.css +9 -9
  31. package/dist/checkbox.layered.css +21 -0
  32. package/dist/cjs/components/accordion/accordion.js +1 -1
  33. package/dist/cjs/components/accordion/accordion.recipe.js +10 -10
  34. package/dist/cjs/components/badge/badge.js +1 -1
  35. package/dist/cjs/components/badge/badge.recipe.js +1 -1
  36. package/dist/cjs/components/barchart/barchart.js +3 -3
  37. package/dist/cjs/components/barchart/barchart.recipe.js +14 -14
  38. package/dist/cjs/components/breadcrumb/breadcrumb.js +1 -1
  39. package/dist/cjs/components/breadcrumb/breadcrumb.recipe.js +6 -6
  40. package/dist/cjs/components/bulkbar/bulkbar.js +2 -2
  41. package/dist/cjs/components/bulkbar/bulkbar.recipe.js +10 -10
  42. package/dist/cjs/components/callout/callout.js +1 -1
  43. package/dist/cjs/components/callout/callout.recipe.js +9 -9
  44. package/dist/cjs/components/card/card.js +3 -3
  45. package/dist/cjs/components/card/card.recipe.js +5 -5
  46. package/dist/cjs/components/columncalc/columncalc.js +1 -1
  47. package/dist/cjs/components/columncalc/columncalc.recipe.js +16 -9
  48. package/dist/cjs/components/contextmenu/contextmenu.js +4 -4
  49. package/dist/cjs/components/contextmenu/contextmenu.recipe.js +9 -9
  50. package/dist/cjs/components/datatable/datatable.js +21 -19
  51. package/dist/cjs/components/datatable/datatable.recipe.js +57 -57
  52. package/dist/cjs/components/datepicker/datepicker.js +12 -12
  53. package/dist/cjs/components/datepicker/datepicker.recipe.js +45 -45
  54. package/dist/cjs/components/datepickerfield/datepickerfield.js +2 -2
  55. package/dist/cjs/components/datepickerfield/datepickerfield.recipe.js +9 -9
  56. package/dist/cjs/components/dialog/dialog.js +5 -5
  57. package/dist/cjs/components/dialog/dialog.recipe.js +16 -16
  58. package/dist/cjs/components/donutchart/donutchart.js +1 -1
  59. package/dist/cjs/components/donutchart/donutchart.recipe.js +12 -12
  60. package/dist/cjs/components/drawer/drawer.js +3 -3
  61. package/dist/cjs/components/drawer/drawer.recipe.js +14 -14
  62. package/dist/cjs/components/emptystate/emptystate.js +1 -1
  63. package/dist/cjs/components/emptystate/emptystate.recipe.js +9 -9
  64. package/dist/cjs/components/fileupload/fileupload.js +3 -3
  65. package/dist/cjs/components/fileupload/fileupload.recipe.js +23 -23
  66. package/dist/cjs/components/formfield/formfield.js +1 -1
  67. package/dist/cjs/components/formfield/formfield.recipe.js +5 -5
  68. package/dist/cjs/components/input/input.js +1 -1
  69. package/dist/cjs/components/input/input.recipe.js +6 -6
  70. package/dist/cjs/components/linechart/linechart.js +4 -4
  71. package/dist/cjs/components/linechart/linechart.recipe.js +14 -14
  72. package/dist/cjs/components/menu/menu.js +6 -6
  73. package/dist/cjs/components/menu/menu.recipe.js +19 -19
  74. package/dist/cjs/components/multiselect/multiselect.js +5 -5
  75. package/dist/cjs/components/multiselect/multiselect.recipe.js +29 -29
  76. package/dist/cjs/components/popover/popover.js +1 -1
  77. package/dist/cjs/components/popover/popover.recipe.js +3 -3
  78. package/dist/cjs/components/progress/progress.js +2 -2
  79. package/dist/cjs/components/progress/progress.recipe.js +3 -3
  80. package/dist/cjs/components/quantitypicker/quantitypicker.js +2 -2
  81. package/dist/cjs/components/quantitypicker/quantitypicker.recipe.js +16 -16
  82. package/dist/cjs/components/radiogroup/radiogroup.js +1 -1
  83. package/dist/cjs/components/radiogroup/radiogroup.recipe.js +14 -14
  84. package/dist/cjs/components/resizablepanel/resizablepanel.js +3 -3
  85. package/dist/cjs/components/resizablepanel/resizablepanel.recipe.js +24 -24
  86. package/dist/cjs/components/segmented/segmented.js +4 -4
  87. package/dist/cjs/components/segmented/segmented.recipe.js +7 -7
  88. package/dist/cjs/components/select/select.js +3 -3
  89. package/dist/cjs/components/select/select.recipe.js +25 -25
  90. package/dist/cjs/components/slider/slider.js +2 -2
  91. package/dist/cjs/components/slider/slider.recipe.js +15 -15
  92. package/dist/cjs/components/stagebar/stagebar.js +1 -1
  93. package/dist/cjs/components/stagebar/stagebar.recipe.js +1 -1
  94. package/dist/cjs/components/statcard/statcard.js +1 -1
  95. package/dist/cjs/components/statcard/statcard.recipe.js +9 -9
  96. package/dist/cjs/components/switch/switch.js +1 -1
  97. package/dist/cjs/components/switch/switch.recipe.js +2 -2
  98. package/dist/cjs/components/table/table.js +1 -1
  99. package/dist/cjs/components/table/table.recipe.js +1 -1
  100. package/dist/cjs/components/tabletoolbar/tabletoolbar.chrome.js +65 -64
  101. package/dist/cjs/components/tabletoolbar/tabletoolbar.js +13 -13
  102. package/dist/cjs/components/tabs/tabs.js +4 -4
  103. package/dist/cjs/components/tabs/tabs.recipe.js +12 -12
  104. package/dist/cjs/components/textarea/textarea.js +2 -2
  105. package/dist/cjs/components/textarea/textarea.recipe.js +11 -11
  106. package/dist/cjs/components/toast/toast.js +4 -4
  107. package/dist/cjs/components/toast/toast.recipe.js +14 -14
  108. package/dist/cjs/components/wheelpicker/wheelpicker.js +2 -2
  109. package/dist/cjs/components/wheelpicker/wheelpicker.recipe.js +19 -19
  110. package/dist/cjs/core/dialog-description.js +1 -1
  111. package/dist/cjs/core/namespace.js +17 -0
  112. package/dist/cjs/core/resolve.js +5 -3
  113. package/dist/cjs/index.js +1 -1
  114. package/dist/cjs/product/appshell/appshell.js +2 -2
  115. package/dist/cjs/product/appshell/appshell.recipe.js +8 -8
  116. package/dist/cjs/product/authshell/authshell.js +1 -1
  117. package/dist/cjs/product/authshell/authshell.recipe.js +20 -20
  118. package/dist/cjs/product/board/board.js +3 -3
  119. package/dist/cjs/product/board/board.recipe.js +17 -17
  120. package/dist/cjs/product/command/command.js +3 -3
  121. package/dist/cjs/product/command/command.recipe.js +25 -25
  122. package/dist/cjs/product/entitycard/entitycard.js +1 -1
  123. package/dist/cjs/product/entitycard/entitycard.recipe.js +7 -7
  124. package/dist/cjs/product/flowcanvas/flowcanvas.js +5 -5
  125. package/dist/cjs/product/flowcanvas/flowcanvas.recipe.js +11 -11
  126. package/dist/cjs/product/inbox/inbox.js +1 -1
  127. package/dist/cjs/product/inbox/inbox.recipe.js +22 -22
  128. package/dist/cjs/product/listpage/listpage.js +3 -3
  129. package/dist/cjs/product/listpage/listpage.recipe.js +18 -18
  130. package/dist/cjs/product/navitem/navitem.js +1 -1
  131. package/dist/cjs/product/navitem/navitem.recipe.js +2 -2
  132. package/dist/cjs/product/onboarding/onboarding.js +1 -1
  133. package/dist/cjs/product/onboarding/onboarding.recipe.js +19 -19
  134. package/dist/cjs/product/recordpage/recordpage.js +24 -24
  135. package/dist/cjs/product/recordpage/recordpage.recipe.js +117 -117
  136. package/dist/cjs/product/recordpanel/recordpanel.js +4 -4
  137. package/dist/cjs/product/recordpanel/recordpanel.recipe.js +15 -15
  138. package/dist/cjs/product/recordstable/recordstable.js +48 -48
  139. package/dist/cjs/product/recordstable/recordstable.recipe.js +87 -87
  140. package/dist/cjs/product/recordstable/recordstable.tag.js +8 -8
  141. package/dist/cjs/product/richtext/richtext.js +4 -4
  142. package/dist/cjs/product/richtext/richtext.recipe.js +21 -21
  143. package/dist/cjs/product/settingssection/settingssection.js +1 -1
  144. package/dist/cjs/product/settingssection/settingssection.recipe.js +6 -6
  145. package/dist/cjs/product/settingsshell/settingsshell.js +1 -1
  146. package/dist/cjs/product/settingsshell/settingsshell.recipe.js +20 -20
  147. package/dist/cjs/product/sidebar/sidebar.js +2 -2
  148. package/dist/cjs/product/sidebar/sidebar.recipe.js +21 -21
  149. package/dist/cjs/product/tasklist/tasklist.js +2 -2
  150. package/dist/cjs/product/tasklist/tasklist.recipe.js +14 -14
  151. package/dist/cjs/product/trialbanner/trialbanner.js +1 -1
  152. package/dist/cjs/product/trialbanner/trialbanner.recipe.js +6 -6
  153. package/dist/cjs/product/viewtoggle/viewtoggle.js +1 -1
  154. package/dist/cjs/product/viewtoggle/viewtoggle.recipe.js +4 -4
  155. package/dist/cjs/tokens/contract.js +3 -2
  156. package/dist/cjs/tokens/elevation.js +4 -4
  157. package/dist/cjs/tokens/palette.js +2 -2
  158. package/dist/cjs/tokens/scale.js +6 -6
  159. package/dist/cjs/tokens/semantic.js +1 -1
  160. package/dist/columncalc.css +19 -12
  161. package/dist/columncalc.layered.css +35 -0
  162. package/dist/command.css +28 -28
  163. package/dist/command.layered.css +44 -0
  164. package/dist/contextmenu.css +12 -12
  165. package/dist/contextmenu.layered.css +22 -0
  166. package/dist/datatable.css +66 -66
  167. package/dist/datatable.layered.css +108 -0
  168. package/dist/datepicker.css +86 -86
  169. package/dist/datepicker.layered.css +179 -0
  170. package/dist/datepickerfield.css +19 -19
  171. package/dist/datepickerfield.layered.css +29 -0
  172. package/dist/dialog.css +19 -19
  173. package/dist/dialog.layered.css +29 -0
  174. package/dist/divider.css +2 -2
  175. package/dist/divider.layered.css +7 -0
  176. package/dist/donutchart.css +15 -15
  177. package/dist/donutchart.layered.css +26 -0
  178. package/dist/drawer.css +17 -17
  179. package/dist/drawer.layered.css +27 -0
  180. package/dist/emptystate.css +15 -15
  181. package/dist/emptystate.layered.css +22 -0
  182. package/dist/entitycard.css +14 -14
  183. package/dist/entitycard.layered.css +28 -0
  184. package/dist/esm/components/accordion/accordion.js +1 -1
  185. package/dist/esm/components/accordion/accordion.recipe.js +10 -10
  186. package/dist/esm/components/badge/badge.js +1 -1
  187. package/dist/esm/components/badge/badge.recipe.js +1 -1
  188. package/dist/esm/components/barchart/barchart.js +3 -3
  189. package/dist/esm/components/barchart/barchart.recipe.js +14 -14
  190. package/dist/esm/components/breadcrumb/breadcrumb.js +1 -1
  191. package/dist/esm/components/breadcrumb/breadcrumb.recipe.js +6 -6
  192. package/dist/esm/components/bulkbar/bulkbar.js +2 -2
  193. package/dist/esm/components/bulkbar/bulkbar.recipe.js +10 -10
  194. package/dist/esm/components/callout/callout.js +1 -1
  195. package/dist/esm/components/callout/callout.recipe.js +9 -9
  196. package/dist/esm/components/card/card.js +3 -3
  197. package/dist/esm/components/card/card.recipe.js +5 -5
  198. package/dist/esm/components/columncalc/columncalc.js +1 -1
  199. package/dist/esm/components/columncalc/columncalc.recipe.js +16 -9
  200. package/dist/esm/components/contextmenu/contextmenu.js +4 -4
  201. package/dist/esm/components/contextmenu/contextmenu.recipe.js +9 -9
  202. package/dist/esm/components/datatable/datatable.js +21 -19
  203. package/dist/esm/components/datatable/datatable.recipe.js +57 -57
  204. package/dist/esm/components/datepicker/datepicker.js +12 -12
  205. package/dist/esm/components/datepicker/datepicker.recipe.js +45 -45
  206. package/dist/esm/components/datepickerfield/datepickerfield.js +2 -2
  207. package/dist/esm/components/datepickerfield/datepickerfield.recipe.js +9 -9
  208. package/dist/esm/components/dialog/dialog.js +5 -5
  209. package/dist/esm/components/dialog/dialog.recipe.js +16 -16
  210. package/dist/esm/components/donutchart/donutchart.js +1 -1
  211. package/dist/esm/components/donutchart/donutchart.recipe.js +12 -12
  212. package/dist/esm/components/drawer/drawer.js +3 -3
  213. package/dist/esm/components/drawer/drawer.recipe.js +14 -14
  214. package/dist/esm/components/emptystate/emptystate.js +1 -1
  215. package/dist/esm/components/emptystate/emptystate.recipe.js +9 -9
  216. package/dist/esm/components/fileupload/fileupload.js +3 -3
  217. package/dist/esm/components/fileupload/fileupload.recipe.js +23 -23
  218. package/dist/esm/components/formfield/formfield.js +1 -1
  219. package/dist/esm/components/formfield/formfield.recipe.js +5 -5
  220. package/dist/esm/components/input/input.js +1 -1
  221. package/dist/esm/components/input/input.recipe.js +6 -6
  222. package/dist/esm/components/linechart/linechart.js +4 -4
  223. package/dist/esm/components/linechart/linechart.recipe.js +14 -14
  224. package/dist/esm/components/menu/menu.js +6 -6
  225. package/dist/esm/components/menu/menu.recipe.js +19 -19
  226. package/dist/esm/components/multiselect/multiselect.js +5 -5
  227. package/dist/esm/components/multiselect/multiselect.recipe.js +29 -29
  228. package/dist/esm/components/popover/popover.js +1 -1
  229. package/dist/esm/components/popover/popover.recipe.js +3 -3
  230. package/dist/esm/components/progress/progress.js +2 -2
  231. package/dist/esm/components/progress/progress.recipe.js +3 -3
  232. package/dist/esm/components/quantitypicker/quantitypicker.js +2 -2
  233. package/dist/esm/components/quantitypicker/quantitypicker.recipe.js +16 -16
  234. package/dist/esm/components/radiogroup/radiogroup.js +1 -1
  235. package/dist/esm/components/radiogroup/radiogroup.recipe.js +14 -14
  236. package/dist/esm/components/resizablepanel/resizablepanel.js +3 -3
  237. package/dist/esm/components/resizablepanel/resizablepanel.recipe.js +24 -24
  238. package/dist/esm/components/segmented/segmented.js +4 -4
  239. package/dist/esm/components/segmented/segmented.recipe.js +7 -7
  240. package/dist/esm/components/select/select.js +3 -3
  241. package/dist/esm/components/select/select.recipe.js +25 -25
  242. package/dist/esm/components/slider/slider.js +2 -2
  243. package/dist/esm/components/slider/slider.recipe.js +15 -15
  244. package/dist/esm/components/stagebar/stagebar.js +1 -1
  245. package/dist/esm/components/stagebar/stagebar.recipe.js +1 -1
  246. package/dist/esm/components/statcard/statcard.js +1 -1
  247. package/dist/esm/components/statcard/statcard.recipe.js +9 -9
  248. package/dist/esm/components/switch/switch.js +1 -1
  249. package/dist/esm/components/switch/switch.recipe.js +2 -2
  250. package/dist/esm/components/table/table.js +1 -1
  251. package/dist/esm/components/table/table.recipe.js +1 -1
  252. package/dist/esm/components/tabletoolbar/tabletoolbar.chrome.js +65 -64
  253. package/dist/esm/components/tabletoolbar/tabletoolbar.js +13 -13
  254. package/dist/esm/components/tabs/tabs.js +4 -4
  255. package/dist/esm/components/tabs/tabs.recipe.js +12 -12
  256. package/dist/esm/components/textarea/textarea.js +2 -2
  257. package/dist/esm/components/textarea/textarea.recipe.js +11 -11
  258. package/dist/esm/components/toast/toast.js +4 -4
  259. package/dist/esm/components/toast/toast.recipe.js +14 -14
  260. package/dist/esm/components/wheelpicker/wheelpicker.js +2 -2
  261. package/dist/esm/components/wheelpicker/wheelpicker.recipe.js +19 -19
  262. package/dist/esm/core/dialog-description.js +1 -1
  263. package/dist/esm/core/namespace.js +14 -0
  264. package/dist/esm/core/resolve.js +5 -3
  265. package/dist/esm/index.js +1 -1
  266. package/dist/esm/product/appshell/appshell.js +2 -2
  267. package/dist/esm/product/appshell/appshell.recipe.js +8 -8
  268. package/dist/esm/product/authshell/authshell.js +1 -1
  269. package/dist/esm/product/authshell/authshell.recipe.js +20 -20
  270. package/dist/esm/product/board/board.js +3 -3
  271. package/dist/esm/product/board/board.recipe.js +17 -17
  272. package/dist/esm/product/command/command.js +3 -3
  273. package/dist/esm/product/command/command.recipe.js +25 -25
  274. package/dist/esm/product/entitycard/entitycard.js +1 -1
  275. package/dist/esm/product/entitycard/entitycard.recipe.js +7 -7
  276. package/dist/esm/product/flowcanvas/flowcanvas.js +5 -5
  277. package/dist/esm/product/flowcanvas/flowcanvas.recipe.js +11 -11
  278. package/dist/esm/product/inbox/inbox.js +1 -1
  279. package/dist/esm/product/inbox/inbox.recipe.js +22 -22
  280. package/dist/esm/product/listpage/listpage.js +3 -3
  281. package/dist/esm/product/listpage/listpage.recipe.js +18 -18
  282. package/dist/esm/product/navitem/navitem.js +1 -1
  283. package/dist/esm/product/navitem/navitem.recipe.js +2 -2
  284. package/dist/esm/product/onboarding/onboarding.js +1 -1
  285. package/dist/esm/product/onboarding/onboarding.recipe.js +19 -19
  286. package/dist/esm/product/recordpage/recordpage.js +24 -24
  287. package/dist/esm/product/recordpage/recordpage.recipe.js +117 -117
  288. package/dist/esm/product/recordpanel/recordpanel.js +4 -4
  289. package/dist/esm/product/recordpanel/recordpanel.recipe.js +15 -15
  290. package/dist/esm/product/recordstable/recordstable.js +48 -48
  291. package/dist/esm/product/recordstable/recordstable.recipe.js +87 -87
  292. package/dist/esm/product/recordstable/recordstable.tag.js +8 -8
  293. package/dist/esm/product/richtext/richtext.js +4 -4
  294. package/dist/esm/product/richtext/richtext.recipe.js +21 -21
  295. package/dist/esm/product/settingssection/settingssection.js +1 -1
  296. package/dist/esm/product/settingssection/settingssection.recipe.js +6 -6
  297. package/dist/esm/product/settingsshell/settingsshell.js +1 -1
  298. package/dist/esm/product/settingsshell/settingsshell.recipe.js +20 -20
  299. package/dist/esm/product/sidebar/sidebar.js +2 -2
  300. package/dist/esm/product/sidebar/sidebar.recipe.js +21 -21
  301. package/dist/esm/product/tasklist/tasklist.js +2 -2
  302. package/dist/esm/product/tasklist/tasklist.recipe.js +14 -14
  303. package/dist/esm/product/trialbanner/trialbanner.js +1 -1
  304. package/dist/esm/product/trialbanner/trialbanner.recipe.js +6 -6
  305. package/dist/esm/product/viewtoggle/viewtoggle.js +1 -1
  306. package/dist/esm/product/viewtoggle/viewtoggle.recipe.js +4 -4
  307. package/dist/esm/tokens/contract.js +3 -2
  308. package/dist/esm/tokens/elevation.js +4 -4
  309. package/dist/esm/tokens/palette.js +2 -2
  310. package/dist/esm/tokens/scale.js +6 -6
  311. package/dist/esm/tokens/semantic.js +1 -1
  312. package/dist/fileupload.css +46 -46
  313. package/dist/fileupload.layered.css +91 -0
  314. package/dist/flowcanvas.css +13 -13
  315. package/dist/flowcanvas.layered.css +17 -0
  316. package/dist/formfield.css +7 -7
  317. package/dist/formfield.layered.css +10 -0
  318. package/dist/inbox.css +26 -26
  319. package/dist/inbox.layered.css +41 -0
  320. package/dist/input.css +17 -17
  321. package/dist/input.layered.css +45 -0
  322. package/dist/kbd.css +2 -2
  323. package/dist/kbd.layered.css +5 -0
  324. package/dist/linechart.css +14 -14
  325. package/dist/linechart.layered.css +17 -0
  326. package/dist/listpage.css +22 -22
  327. package/dist/listpage.layered.css +41 -0
  328. package/dist/menu.css +29 -29
  329. package/dist/menu.layered.css +48 -0
  330. package/dist/multiselect.css +42 -42
  331. package/dist/multiselect.layered.css +63 -0
  332. package/dist/navitem.css +14 -14
  333. package/dist/navitem.layered.css +25 -0
  334. package/dist/onboarding.css +24 -24
  335. package/dist/onboarding.layered.css +39 -0
  336. package/dist/popover.css +6 -6
  337. package/dist/popover.layered.css +16 -0
  338. package/dist/progress.css +7 -7
  339. package/dist/progress.layered.css +17 -0
  340. package/dist/quantitypicker.css +34 -34
  341. package/dist/quantitypicker.layered.css +80 -0
  342. package/dist/radiogroup.css +18 -18
  343. package/dist/radiogroup.layered.css +33 -0
  344. package/dist/recordpage.css +122 -122
  345. package/dist/recordpage.layered.css +153 -0
  346. package/dist/recordpanel.css +31 -31
  347. package/dist/recordpanel.layered.css +50 -0
  348. package/dist/recordstable.css +162 -162
  349. package/dist/recordstable.layered.css +222 -0
  350. package/dist/resizablepanel.css +26 -26
  351. package/dist/resizablepanel.layered.css +55 -0
  352. package/dist/richtext.css +24 -24
  353. package/dist/richtext.layered.css +38 -0
  354. package/dist/segmented.css +10 -10
  355. package/dist/segmented.layered.css +20 -0
  356. package/dist/select.css +43 -43
  357. package/dist/select.layered.css +72 -0
  358. package/dist/settingssection.css +8 -8
  359. package/dist/settingssection.layered.css +11 -0
  360. package/dist/settingsshell.css +23 -23
  361. package/dist/settingsshell.layered.css +44 -0
  362. package/dist/sidebar.css +27 -27
  363. package/dist/sidebar.layered.css +40 -0
  364. package/dist/skeleton.css +4 -4
  365. package/dist/skeleton.layered.css +15 -0
  366. package/dist/slider.css +23 -23
  367. package/dist/slider.layered.css +58 -0
  368. package/dist/spinner.css +3 -3
  369. package/dist/spinner.layered.css +14 -0
  370. package/dist/stagebar.css +4 -4
  371. package/dist/stagebar.layered.css +14 -0
  372. package/dist/statcard.css +14 -14
  373. package/dist/statcard.layered.css +21 -0
  374. package/dist/styles.css +1816 -1725
  375. package/dist/styles.layered.css +2932 -0
  376. package/dist/switch.css +7 -7
  377. package/dist/switch.layered.css +22 -0
  378. package/dist/table.css +16 -16
  379. package/dist/table.layered.css +36 -0
  380. package/dist/tabletoolbar.css +67 -67
  381. package/dist/tabletoolbar.layered.css +80 -0
  382. package/dist/tabs.css +15 -15
  383. package/dist/tabs.layered.css +29 -0
  384. package/dist/tasklist.css +17 -17
  385. package/dist/tasklist.layered.css +34 -0
  386. package/dist/textarea.css +18 -18
  387. package/dist/textarea.layered.css +42 -0
  388. package/dist/toast.css +17 -17
  389. package/dist/toast.layered.css +27 -0
  390. package/dist/tokens.css +199 -115
  391. package/dist/tooltip.css +3 -3
  392. package/dist/tooltip.layered.css +13 -0
  393. package/dist/trialbanner.css +13 -13
  394. package/dist/trialbanner.layered.css +28 -0
  395. package/dist/types/core/dialog-description.d.ts +1 -1
  396. package/dist/types/core/namespace.d.ts +2 -0
  397. package/dist/types/tokens/elevation.d.ts +4 -4
  398. package/dist/viewtoggle.css +10 -10
  399. package/dist/viewtoggle.layered.css +23 -0
  400. package/dist/wheelpicker.css +29 -29
  401. package/dist/wheelpicker.layered.css +70 -0
  402. package/licenses/Apache-2.0.txt +201 -0
  403. package/package.json +5 -2
@@ -21,24 +21,24 @@ const config = (0, core_1.defineRecipe)({
21
21
  @starting-style { transform: translateX(calc(100% + ${tokens_1.contract.space["2"]})); }
22
22
  & * { box-sizing: border-box; }
23
23
 
24
- & .recordpanel-header { display: flex; align-items: center; gap: ${tokens_1.contract.space["2"]}; height: 52px; flex-shrink: 0; padding: 0 ${tokens_1.contract.space["3"]}; border-bottom: 1px solid ${tokens_1.contract.borderSubtle}; }
25
- & .recordpanel-fav { width: 22px; height: ${tokens_1.contract.size.chip}; border-radius: ${tokens_1.contract.radius.sm}; flex-shrink: 0; object-fit: cover; background: ${tokens_1.contract.bgRaised}; }
26
- & .recordpanel-title { flex: 1; min-width: 0; font-size: ${tokens_1.contract.text.xl}; font-weight: ${tokens_1.contract.weight.semibold}; letter-spacing: -0.2px; color: ${tokens_1.contract.fgPrimary}; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
27
- & .recordpanel-iconbtn { display: inline-flex; align-items: center; justify-content: center; width: 28px; height: 28px; flex-shrink: 0; padding: 0; border: none; border-radius: ${tokens_1.contract.radius.md}; background: transparent; color: ${tokens_1.contract.fgMuted}; font-family: inherit; cursor: pointer; transition: background-color .12s; }
28
- & .recordpanel-iconbtn:hover { background: ${tokens_1.contract.bgRaised}; color: ${tokens_1.contract.fgPrimary}; }
24
+ & .crisp-recordpanel-header { display: flex; align-items: center; gap: ${tokens_1.contract.space["2"]}; height: 52px; flex-shrink: 0; padding: 0 ${tokens_1.contract.space["3"]}; border-bottom: 1px solid ${tokens_1.contract.borderSubtle}; }
25
+ & .crisp-recordpanel-fav { width: 22px; height: ${tokens_1.contract.size.chip}; border-radius: ${tokens_1.contract.radius.sm}; flex-shrink: 0; object-fit: cover; background: ${tokens_1.contract.bgRaised}; }
26
+ & .crisp-recordpanel-title { flex: 1; min-width: 0; font-size: ${tokens_1.contract.text.xl}; font-weight: ${tokens_1.contract.weight.semibold}; letter-spacing: -0.2px; color: ${tokens_1.contract.fgPrimary}; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
27
+ & .crisp-recordpanel-iconbtn { display: inline-flex; align-items: center; justify-content: center; width: 28px; height: 28px; flex-shrink: 0; padding: 0; border: none; border-radius: ${tokens_1.contract.radius.md}; background: transparent; color: ${tokens_1.contract.fgMuted}; font-family: inherit; cursor: pointer; transition: background-color .12s; }
28
+ & .crisp-recordpanel-iconbtn:hover { background: ${tokens_1.contract.bgRaised}; color: ${tokens_1.contract.fgPrimary}; }
29
29
 
30
- & .recordpanel-body { flex: 1; min-height: 0; overflow-y: auto; padding: ${tokens_1.contract.space["2"]} ${tokens_1.contract.space["3"]}; }
31
- & .recordpanel-sectionlabel { font-size: ${tokens_1.contract.text.sm}; font-weight: ${tokens_1.contract.weight.medium}; color: ${tokens_1.contract.fgMuted}; padding: ${tokens_1.contract.space["2"]} ${tokens_1.contract.space["1"]} ${tokens_1.contract.space["1"]}; }
32
- & .recordpanel-field { display: flex; align-items: flex-start; gap: ${tokens_1.contract.space["2"]}; min-height: 32px; padding: ${tokens_1.contract.space["1"]} ${tokens_1.contract.space["1"]}; border-radius: ${tokens_1.contract.radius.md}; }
33
- & .recordpanel-field:hover { background: color-mix(in srgb, ${tokens_1.contract.fgPrimary} 3%, transparent); }
34
- & .recordpanel-field-label { display: flex; align-items: center; gap: ${tokens_1.contract.space["1.5"]}; width: 132px; flex-shrink: 0; padding-top: 3px; color: ${tokens_1.contract.fgMuted}; font-size: ${tokens_1.contract.text.md}; }
35
- & .recordpanel-field-label svg { flex-shrink: 0; }
36
- & .recordpanel-field-value { flex: 1; min-width: 0; display: flex; flex-wrap: wrap; align-items: center; gap: ${tokens_1.contract.space["1"]}; padding-top: 3px; font-size: ${tokens_1.contract.text.lg}; color: ${tokens_1.contract.fgPrimary}; }
37
- & .recordpanel-empty { color: ${tokens_1.contract.fgMuted}; }
30
+ & .crisp-recordpanel-body { flex: 1; min-height: 0; overflow-y: auto; padding: ${tokens_1.contract.space["2"]} ${tokens_1.contract.space["3"]}; }
31
+ & .crisp-recordpanel-sectionlabel { font-size: ${tokens_1.contract.text.sm}; font-weight: ${tokens_1.contract.weight.medium}; color: ${tokens_1.contract.fgMuted}; padding: ${tokens_1.contract.space["2"]} ${tokens_1.contract.space["1"]} ${tokens_1.contract.space["1"]}; }
32
+ & .crisp-recordpanel-field { display: flex; align-items: flex-start; gap: ${tokens_1.contract.space["2"]}; min-height: 32px; padding: ${tokens_1.contract.space["1"]} ${tokens_1.contract.space["1"]}; border-radius: ${tokens_1.contract.radius.md}; }
33
+ & .crisp-recordpanel-field:hover { background: color-mix(in srgb, ${tokens_1.contract.fgPrimary} 3%, transparent); }
34
+ & .crisp-recordpanel-field-label { display: flex; align-items: center; gap: ${tokens_1.contract.space["1.5"]}; width: 132px; flex-shrink: 0; padding-top: 3px; color: ${tokens_1.contract.fgMuted}; font-size: ${tokens_1.contract.text.md}; }
35
+ & .crisp-recordpanel-field-label svg { flex-shrink: 0; }
36
+ & .crisp-recordpanel-field-value { flex: 1; min-width: 0; display: flex; flex-wrap: wrap; align-items: center; gap: ${tokens_1.contract.space["1"]}; padding-top: 3px; font-size: ${tokens_1.contract.text.lg}; color: ${tokens_1.contract.fgPrimary}; }
37
+ & .crisp-recordpanel-empty { color: ${tokens_1.contract.fgMuted}; }
38
38
 
39
39
  ${recordstable_tag_1.recordTagCss}
40
- & .recordpanel-link { color: ${tokens_1.contract.bgBrandSolid}; text-decoration: none; overflow: hidden; text-overflow: ellipsis; }
41
- & .recordpanel-link:hover { text-decoration: underline; }
40
+ & .crisp-recordpanel-link { color: ${tokens_1.contract.bgBrandSolid}; text-decoration: none; overflow: hidden; text-overflow: ellipsis; }
41
+ & .crisp-recordpanel-link:hover { text-decoration: underline; }
42
42
  `,
43
43
  variants: {},
44
44
  defaultVariants: {},
@@ -257,10 +257,10 @@ function EntityCell({ value, pinned, onOpenPage, avatarTone = "brand", labels, }
257
257
  // 404s or the row has no avatar
258
258
  const [imgFailed, setImgFailed] = React.useState(false);
259
259
  const showImg = Boolean(value.avatar) && !imgFailed;
260
- return ((0, jsx_runtime_1.jsxs)("span", { className: "recordstable-entity", children: [showImg ? ((0, jsx_runtime_1.jsx)("img", { className: "recordstable-fav", src: value.avatar, alt: "", onError: () => setImgFailed(true) })) : ((0, jsx_runtime_1.jsx)(avatar_1.Avatar, { size: "sm", shape: "rounded", tone: avatarTone === "hashed" ? avatarToneFor(value.name) : "brand", children: value.name.charAt(0) })), onOpenPage ? ((0, jsx_runtime_1.jsx)("button", { type: "button", className: "recordstable-entity-name recordstable-entity-name--link", onClick: (e) => {
260
+ return ((0, jsx_runtime_1.jsxs)("span", { className: "crisp-recordstable-entity", children: [showImg ? ((0, jsx_runtime_1.jsx)("img", { className: "crisp-recordstable-fav", src: value.avatar, alt: "", onError: () => setImgFailed(true) })) : ((0, jsx_runtime_1.jsx)(avatar_1.Avatar, { size: "sm", shape: "rounded", tone: avatarTone === "hashed" ? avatarToneFor(value.name) : "brand", children: value.name.charAt(0) })), onOpenPage ? ((0, jsx_runtime_1.jsx)("button", { type: "button", className: "crisp-recordstable-entity-name crisp-recordstable-entity-name--link", onClick: (e) => {
261
261
  e.stopPropagation();
262
262
  onOpenPage();
263
- }, children: value.name })) : ((0, jsx_runtime_1.jsx)("span", { className: "recordstable-entity-name", children: value.name })), pinned ? ((0, jsx_runtime_1.jsx)(lucide_react_1.Star, { className: "recordstable-pin", size: 13, strokeWidth: 2, "aria-label": labels.inAList })) : null] }));
263
+ }, children: value.name })) : ((0, jsx_runtime_1.jsx)("span", { className: "crisp-recordstable-entity-name", children: value.name })), pinned ? ((0, jsx_runtime_1.jsx)(lucide_react_1.Star, { className: "crisp-recordstable-pin", size: 13, strokeWidth: 2, "aria-label": labels.inAList })) : null] }));
264
264
  }
265
265
  function CellView({ column, row, pinned, onOpenPage, avatarTone = "brand", labels, }) {
266
266
  const value = row[column.key];
@@ -272,7 +272,7 @@ function CellView({ column, row, pinned, onOpenPage, avatarTone = "brand", label
272
272
  if (value == null ||
273
273
  value === "" ||
274
274
  (Array.isArray(value) && !value.length)) {
275
- return (0, jsx_runtime_1.jsx)("span", { className: "recordstable-muted", children: "\u2014" });
275
+ return (0, jsx_runtime_1.jsx)("span", { className: "crisp-recordstable-muted", children: "\u2014" });
276
276
  }
277
277
  // `format` keeps the type renderer's chrome below and only replaces the
278
278
  // text it displays.
@@ -281,32 +281,32 @@ function CellView({ column, row, pinned, onOpenPage, avatarTone = "brand", label
281
281
  case "entity":
282
282
  return ((0, jsx_runtime_1.jsx)(EntityCell, { labels: labels, value: value, pinned: pinned, onOpenPage: onOpenPage, avatarTone: avatarTone }));
283
283
  case "tags":
284
- return ((0, jsx_runtime_1.jsx)("span", { className: "recordstable-cell recordstable-cell--tags", children: value.map((t) => ((0, jsx_runtime_1.jsx)("span", { className: "recordstable-tag", "data-tone": tagTone(t), children: t }, t))) }));
284
+ return ((0, jsx_runtime_1.jsx)("span", { className: "crisp-recordstable-cell crisp-recordstable-cell--tags", children: value.map((t) => ((0, jsx_runtime_1.jsx)("span", { className: "crisp-recordstable-tag", "data-tone": tagTone(t), children: t }, t))) }));
285
285
  case "number":
286
- return ((0, jsx_runtime_1.jsx)("span", { className: "recordstable-cell recordstable-cell--num", children: display ??
286
+ return ((0, jsx_runtime_1.jsx)("span", { className: "crisp-recordstable-cell crisp-recordstable-cell--num", children: display ??
287
287
  (typeof value === "number" ? value.toLocaleString() : value) }));
288
288
  case "url":
289
- return ((0, jsx_runtime_1.jsx)("a", { className: "recordstable-link", href: `https://${value}`, target: "_blank", rel: "noreferrer", onClick: (e) => e.stopPropagation(), children: display ?? value }));
289
+ return ((0, jsx_runtime_1.jsx)("a", { className: "crisp-recordstable-link", href: `https://${value}`, target: "_blank", rel: "noreferrer", onClick: (e) => e.stopPropagation(), children: display ?? value }));
290
290
  case "date":
291
- return (0, jsx_runtime_1.jsx)("span", { className: "recordstable-muted", children: display ?? value });
291
+ return ((0, jsx_runtime_1.jsx)("span", { className: "crisp-recordstable-muted", children: display ?? value }));
292
292
  case "currency": {
293
293
  const n = typeof value === "number" ? value : Number(value);
294
- return ((0, jsx_runtime_1.jsx)("span", { className: "recordstable-cell recordstable-cell--num", children: display ??
294
+ return ((0, jsx_runtime_1.jsx)("span", { className: "crisp-recordstable-cell crisp-recordstable-cell--num", children: display ??
295
295
  `${column.symbol ?? "$"}${Number.isFinite(n) ? n.toLocaleString() : value}` }));
296
296
  }
297
297
  case "status": {
298
298
  const opt = column.options?.find((o) => o.value === value);
299
299
  if (!opt)
300
- return (0, jsx_runtime_1.jsx)("span", { className: "recordstable-muted", children: "\u2014" });
301
- return ((0, jsx_runtime_1.jsxs)("span", { className: "recordstable-status", children: [(0, jsx_runtime_1.jsx)("span", { className: "recordstable-status-dot", style: { background: opt.color } }), display ?? opt.label] }));
300
+ return (0, jsx_runtime_1.jsx)("span", { className: "crisp-recordstable-muted", children: "\u2014" });
301
+ return ((0, jsx_runtime_1.jsxs)("span", { className: "crisp-recordstable-status", children: [(0, jsx_runtime_1.jsx)("span", { className: "crisp-recordstable-status-dot", style: { background: opt.color } }), display ?? opt.label] }));
302
302
  }
303
303
  case "reference": {
304
304
  const opt = column.refOptions?.find((o) => o.value === value);
305
305
  const label = display ?? opt?.label ?? String(value);
306
- return ((0, jsx_runtime_1.jsxs)("span", { className: "recordstable-entity", children: [(0, jsx_runtime_1.jsx)(avatar_1.Avatar, { size: "sm", shape: "rounded", tone: avatarTone === "hashed" ? avatarToneFor(label) : "brand", children: label.charAt(0) }), (0, jsx_runtime_1.jsx)("span", { className: "recordstable-entity-name", children: label })] }));
306
+ return ((0, jsx_runtime_1.jsxs)("span", { className: "crisp-recordstable-entity", children: [(0, jsx_runtime_1.jsx)(avatar_1.Avatar, { size: "sm", shape: "rounded", tone: avatarTone === "hashed" ? avatarToneFor(label) : "brand", children: label.charAt(0) }), (0, jsx_runtime_1.jsx)("span", { className: "crisp-recordstable-entity-name", children: label })] }));
307
307
  }
308
308
  default:
309
- return ((0, jsx_runtime_1.jsx)("span", { className: "recordstable-entity-name", children: display ?? value }));
309
+ return ((0, jsx_runtime_1.jsx)("span", { className: "crisp-recordstable-entity-name", children: display ?? value }));
310
310
  }
311
311
  }
312
312
  // Always-interactive cell editors for the picker column types (status / date /
@@ -412,10 +412,10 @@ function CreateRecordDialog({ open, onOpenChange, columns, entityLabel, onCreate
412
412
  };
413
413
  const entityCol = columns.find((c) => c.type === "entity");
414
414
  const EntityIcon = entityCol?.icon;
415
- return ((0, jsx_runtime_1.jsxs)(dialog_1.Dialog, { open: open, onOpenChange: onOpenChange, title: labels.newRecordTitle(entityLabel), icon: EntityIcon ? (0, jsx_runtime_1.jsx)(EntityIcon, { size: 16, strokeWidth: 1.75 }) : undefined, width: 720, children: [(0, jsx_runtime_1.jsx)(dialog_1.DialogBody, { children: columns.map((col, i) => ((0, jsx_runtime_1.jsxs)("div", { className: "dialog-field", children: [(0, jsx_runtime_1.jsx)("label", { className: "dialog-field-label", htmlFor: `create-${col.key}`, children: col.label }), (0, jsx_runtime_1.jsx)(input_1.Input, { id: `create-${col.key}`, ref: i === 0 ? firstRef : undefined, value: values[col.key] ?? "", onChange: (e) => set(col.key, e.currentTarget.value), placeholder: labels.setFieldPlaceholder(col.label), onKeyDown: (e) => {
415
+ return ((0, jsx_runtime_1.jsxs)(dialog_1.Dialog, { open: open, onOpenChange: onOpenChange, title: labels.newRecordTitle(entityLabel), icon: EntityIcon ? (0, jsx_runtime_1.jsx)(EntityIcon, { size: 16, strokeWidth: 1.75 }) : undefined, width: 720, children: [(0, jsx_runtime_1.jsx)(dialog_1.DialogBody, { children: columns.map((col, i) => ((0, jsx_runtime_1.jsxs)("div", { className: "crisp-dialog-field", children: [(0, jsx_runtime_1.jsx)("label", { className: "crisp-dialog-field-label", htmlFor: `create-${col.key}`, children: col.label }), (0, jsx_runtime_1.jsx)(input_1.Input, { id: `create-${col.key}`, ref: i === 0 ? firstRef : undefined, value: values[col.key] ?? "", onChange: (e) => set(col.key, e.currentTarget.value), placeholder: labels.setFieldPlaceholder(col.label), onKeyDown: (e) => {
416
416
  if (e.key === "Enter" && (e.metaKey || e.ctrlKey))
417
417
  submit();
418
- } })] }, col.key))) }), (0, jsx_runtime_1.jsxs)(dialog_1.DialogFooter, { children: [(0, jsx_runtime_1.jsxs)("span", { className: "dialog-more", children: [labels.createMore, (0, jsx_runtime_1.jsx)(switch_1.Switch, { checked: createMore, onCheckedChange: setCreateMore, "aria-label": labels.createMore })] }), (0, jsx_runtime_1.jsxs)("button", { type: "button", className: "dialog-submit", onClick: submit, children: [labels.createRecord, (0, jsx_runtime_1.jsx)("span", { className: "dialog-submit-key", children: "\u2318\u21B5" })] })] })] }));
418
+ } })] }, col.key))) }), (0, jsx_runtime_1.jsxs)(dialog_1.DialogFooter, { children: [(0, jsx_runtime_1.jsxs)("span", { className: "crisp-dialog-more", children: [labels.createMore, (0, jsx_runtime_1.jsx)(switch_1.Switch, { checked: createMore, onCheckedChange: setCreateMore, "aria-label": labels.createMore })] }), (0, jsx_runtime_1.jsxs)("button", { type: "button", className: "crisp-dialog-submit", onClick: submit, children: [labels.createRecord, (0, jsx_runtime_1.jsx)("span", { className: "crisp-dialog-submit-key", children: "\u2318\u21B5" })] })] })] }));
419
419
  }
420
420
  /**
421
421
  * A measured-style record grid — fully featured. Toolbar (search / sort status /
@@ -489,7 +489,7 @@ function RecordsTable({ labels, columns: columnsProp = exports.defaultColumns, r
489
489
  const onWheel = (e) => {
490
490
  // don't hijack the wheel when it's over an open cell popover (its own list
491
491
  // scrolls) — only map vertical wheel to horizontal for the table itself
492
- if (e.target?.closest?.(".select-listbox, .multiselect-listbox, .datepicker-cal, .recordstable-menu"))
492
+ if (e.target?.closest?.(".crisp-select-listbox, .crisp-multiselect-listbox, .datepicker-cal, .crisp-recordstable-menu"))
493
493
  return;
494
494
  const canH = el.scrollWidth > el.clientWidth;
495
495
  const canV = el.scrollHeight > el.clientHeight;
@@ -508,7 +508,7 @@ function RecordsTable({ labels, columns: columnsProp = exports.defaultColumns, r
508
508
  return;
509
509
  const onDown = (e) => {
510
510
  const t = e.target;
511
- if (!t.closest(".recordstable-menu, [data-menu-trigger]"))
511
+ if (!t.closest(".crisp-recordstable-menu, [data-menu-trigger]"))
512
512
  setOpenMenu(null);
513
513
  };
514
514
  const onKey = (e) => e.key === "Escape" && setOpenMenu(null);
@@ -524,7 +524,7 @@ function RecordsTable({ labels, columns: columnsProp = exports.defaultColumns, r
524
524
  if (!ctxMenu)
525
525
  return;
526
526
  const onDown = (e) => {
527
- if (!e.target.closest(".recordstable-ctx"))
527
+ if (!e.target.closest(".crisp-recordstable-ctx"))
528
528
  setCtxMenu(null);
529
529
  };
530
530
  const onKey = (e) => e.key === "Escape" && setCtxMenu(null);
@@ -999,47 +999,47 @@ function RecordsTable({ labels, columns: columnsProp = exports.defaultColumns, r
999
999
  window.addEventListener("pointermove", onMove);
1000
1000
  window.addEventListener("pointerup", onUp);
1001
1001
  };
1002
- return ((0, jsx_runtime_1.jsxs)("div", { className: (0, recordstable_recipe_1.recordstableRecipe)({ className }), ref: rootRef, ...rest, children: [(0, jsx_runtime_1.jsxs)("div", { className: "recordstable-toolbar", children: [(0, jsx_runtime_1.jsxs)("span", { className: "recordstable-toolgroup", children: [(0, jsx_runtime_1.jsxs)("button", { type: "button", className: `recordstable-tool${sorts.length ? " recordstable-tool--active" : ""}`, onClick: () => setOpenMenu(openMenu === "sort" ? null : "sort"), "aria-haspopup": "dialog", "aria-expanded": openMenu === "sort", "data-menu-trigger": true, children: [(0, jsx_runtime_1.jsx)(lucide_react_1.ArrowUpDown, { size: 14, strokeWidth: 1.75, "aria-hidden": "true" }), sorts.length
1002
+ return ((0, jsx_runtime_1.jsxs)("div", { className: (0, recordstable_recipe_1.recordstableRecipe)({ className }), ref: rootRef, ...rest, children: [(0, jsx_runtime_1.jsxs)("div", { className: "crisp-recordstable-toolbar", children: [(0, jsx_runtime_1.jsxs)("span", { className: "crisp-recordstable-toolgroup", children: [(0, jsx_runtime_1.jsxs)("button", { type: "button", className: `crisp-recordstable-tool${sorts.length ? " crisp-recordstable-tool--active" : ""}`, onClick: () => setOpenMenu(openMenu === "sort" ? null : "sort"), "aria-haspopup": "dialog", "aria-expanded": openMenu === "sort", "data-menu-trigger": true, children: [(0, jsx_runtime_1.jsx)(lucide_react_1.ArrowUpDown, { size: 14, strokeWidth: 1.75, "aria-hidden": "true" }), sorts.length
1003
1003
  ? t.sortedBy(cols.find((c) => c.key === sorts[0].key)?.label ?? "", sorts.length - 1)
1004
- : t.sort] }), openMenu === "sort" && ((0, jsx_runtime_1.jsxs)("div", { className: "recordstable-menu recordstable-sortpop", role: "dialog", "aria-label": t.sort, children: [sorts.length === 0 ? ((0, jsx_runtime_1.jsx)("div", { className: "recordstable-sort-empty", children: t.noSorts })) : (sorts.map((s, i) => ((0, jsx_runtime_1.jsxs)("div", { className: "recordstable-sort-row", onDragOver: (e) => {
1004
+ : t.sort] }), openMenu === "sort" && ((0, jsx_runtime_1.jsxs)("div", { className: "crisp-recordstable-menu crisp-recordstable-sortpop", role: "dialog", "aria-label": t.sort, children: [sorts.length === 0 ? ((0, jsx_runtime_1.jsx)("div", { className: "crisp-recordstable-sort-empty", children: t.noSorts })) : (sorts.map((s, i) => ((0, jsx_runtime_1.jsxs)("div", { className: "crisp-recordstable-sort-row", onDragOver: (e) => {
1005
1005
  if (dragSort !== null)
1006
1006
  e.preventDefault();
1007
1007
  }, onDrop: () => {
1008
1008
  if (dragSort !== null)
1009
1009
  moveSort(dragSort, i);
1010
1010
  setDragSort(null);
1011
- }, children: [(0, jsx_runtime_1.jsx)("button", { type: "button", className: "recordstable-sort-grip", "aria-label": t.reorderSort, draggable: true, onDragStart: () => setDragSort(i), onDragEnd: () => setDragSort(null), children: (0, jsx_runtime_1.jsx)(lucide_react_1.GripVertical, { size: 15, strokeWidth: 1.75 }) }), (0, jsx_runtime_1.jsx)(select_1.Select, { className: "recordstable-sort-field", searchable: true, value: s.key, onValueChange: (k) => setSortField(i, k), options: cols.map((c) => ({
1011
+ }, children: [(0, jsx_runtime_1.jsx)("button", { type: "button", className: "crisp-recordstable-sort-grip", "aria-label": t.reorderSort, draggable: true, onDragStart: () => setDragSort(i), onDragEnd: () => setDragSort(null), children: (0, jsx_runtime_1.jsx)(lucide_react_1.GripVertical, { size: 15, strokeWidth: 1.75 }) }), (0, jsx_runtime_1.jsx)(select_1.Select, { className: "crisp-recordstable-sort-field", searchable: true, value: s.key, onValueChange: (k) => setSortField(i, k), options: cols.map((c) => ({
1012
1012
  value: c.key,
1013
- label: c.icon ? ((0, jsx_runtime_1.jsxs)("span", { className: "recordstable-sort-optlabel", children: [(0, jsx_runtime_1.jsx)(c.icon, { size: 15, strokeWidth: 1.75 }), c.label] })) : (c.label),
1013
+ label: c.icon ? ((0, jsx_runtime_1.jsxs)("span", { className: "crisp-recordstable-sort-optlabel", children: [(0, jsx_runtime_1.jsx)(c.icon, { size: 15, strokeWidth: 1.75 }), c.label] })) : (c.label),
1014
1014
  keywords: c.label,
1015
- })), "aria-label": t.sortField }), (0, jsx_runtime_1.jsx)(select_1.Select, { className: "recordstable-sort-dir", value: s.dir, onValueChange: (d) => setSortDir(i, d), options: [
1015
+ })), "aria-label": t.sortField }), (0, jsx_runtime_1.jsx)(select_1.Select, { className: "crisp-recordstable-sort-dir", value: s.dir, onValueChange: (d) => setSortDir(i, d), options: [
1016
1016
  {
1017
1017
  value: "asc",
1018
- label: ((0, jsx_runtime_1.jsxs)("span", { className: "recordstable-sort-optlabel", children: [(0, jsx_runtime_1.jsx)(lucide_react_1.ArrowUpNarrowWide, { size: 15, strokeWidth: 1.75 }), t.ascending] })),
1018
+ label: ((0, jsx_runtime_1.jsxs)("span", { className: "crisp-recordstable-sort-optlabel", children: [(0, jsx_runtime_1.jsx)(lucide_react_1.ArrowUpNarrowWide, { size: 15, strokeWidth: 1.75 }), t.ascending] })),
1019
1019
  keywords: t.ascending,
1020
1020
  },
1021
1021
  {
1022
1022
  value: "desc",
1023
- label: ((0, jsx_runtime_1.jsxs)("span", { className: "recordstable-sort-optlabel", children: [(0, jsx_runtime_1.jsx)(lucide_react_1.ArrowDownWideNarrow, { size: 15, strokeWidth: 1.75 }), t.descending] })),
1023
+ label: ((0, jsx_runtime_1.jsxs)("span", { className: "crisp-recordstable-sort-optlabel", children: [(0, jsx_runtime_1.jsx)(lucide_react_1.ArrowDownWideNarrow, { size: 15, strokeWidth: 1.75 }), t.descending] })),
1024
1024
  keywords: t.descending,
1025
1025
  },
1026
- ], "aria-label": t.sortDirection }), (0, jsx_runtime_1.jsx)("button", { type: "button", className: "recordstable-sort-remove", onClick: () => removeSort(i), "aria-label": t.removeSort, children: (0, jsx_runtime_1.jsx)(lucide_react_1.X, { size: 15, strokeWidth: 1.75 }) })] }, s.key)))), (0, jsx_runtime_1.jsx)("div", { className: "recordstable-sort-addrow", children: (0, jsx_runtime_1.jsxs)("button", { type: "button", className: "recordstable-sort-add", onClick: addSort, children: [(0, jsx_runtime_1.jsx)(lucide_react_1.Plus, { size: 15, strokeWidth: 1.75 }), t.addSort] }) }), (0, jsx_runtime_1.jsx)("div", { className: "recordstable-sort-foot", children: t.learnSortingHref ? ((0, jsx_runtime_1.jsxs)("a", { className: "recordstable-sort-learn", href: t.learnSortingHref, target: "_blank", rel: "noreferrer", children: [(0, jsx_runtime_1.jsx)(lucide_react_1.CircleHelp, { size: 14, strokeWidth: 1.75 }), t.learnSorting] })) : ((0, jsx_runtime_1.jsxs)("span", { className: "recordstable-sort-learn", children: [(0, jsx_runtime_1.jsx)(lucide_react_1.CircleHelp, { size: 14, strokeWidth: 1.75 }), t.learnSorting] })) })] }))] }), (0, jsx_runtime_1.jsxs)("span", { className: "recordstable-toolgroup", children: [(0, jsx_runtime_1.jsxs)("button", { type: "button", className: `recordstable-tool recordstable-tool--ghost${activeFilters ? " recordstable-tool--active" : ""}`, onClick: () => setOpenMenu(openMenu === "filter" ? null : "filter"), "aria-haspopup": "dialog", "aria-expanded": openMenu === "filter", "data-menu-trigger": true, children: [(0, jsx_runtime_1.jsx)(lucide_react_1.ListFilter, { size: 14, strokeWidth: 1.75, "aria-hidden": "true" }), t.filterCount(activeFilters)] }), openMenu === "filter" && ((0, jsx_runtime_1.jsxs)("div", { className: "recordstable-menu", role: "dialog", "aria-label": t.addFilter, children: [(0, jsx_runtime_1.jsx)("input", { className: "recordstable-menu-input", placeholder: t.filterByPlaceholder, "aria-label": t.filterByField,
1026
+ ], "aria-label": t.sortDirection }), (0, jsx_runtime_1.jsx)("button", { type: "button", className: "crisp-recordstable-sort-remove", onClick: () => removeSort(i), "aria-label": t.removeSort, children: (0, jsx_runtime_1.jsx)(lucide_react_1.X, { size: 15, strokeWidth: 1.75 }) })] }, s.key)))), (0, jsx_runtime_1.jsx)("div", { className: "crisp-recordstable-sort-addrow", children: (0, jsx_runtime_1.jsxs)("button", { type: "button", className: "crisp-recordstable-sort-add", onClick: addSort, children: [(0, jsx_runtime_1.jsx)(lucide_react_1.Plus, { size: 15, strokeWidth: 1.75 }), t.addSort] }) }), (0, jsx_runtime_1.jsx)("div", { className: "crisp-recordstable-sort-foot", children: t.learnSortingHref ? ((0, jsx_runtime_1.jsxs)("a", { className: "crisp-recordstable-sort-learn", href: t.learnSortingHref, target: "_blank", rel: "noreferrer", children: [(0, jsx_runtime_1.jsx)(lucide_react_1.CircleHelp, { size: 14, strokeWidth: 1.75 }), t.learnSorting] })) : ((0, jsx_runtime_1.jsxs)("span", { className: "crisp-recordstable-sort-learn", children: [(0, jsx_runtime_1.jsx)(lucide_react_1.CircleHelp, { size: 14, strokeWidth: 1.75 }), t.learnSorting] })) })] }))] }), (0, jsx_runtime_1.jsxs)("span", { className: "crisp-recordstable-toolgroup", children: [(0, jsx_runtime_1.jsxs)("button", { type: "button", className: `crisp-recordstable-tool crisp-recordstable-tool--ghost${activeFilters ? " crisp-recordstable-tool--active" : ""}`, onClick: () => setOpenMenu(openMenu === "filter" ? null : "filter"), "aria-haspopup": "dialog", "aria-expanded": openMenu === "filter", "data-menu-trigger": true, children: [(0, jsx_runtime_1.jsx)(lucide_react_1.ListFilter, { size: 14, strokeWidth: 1.75, "aria-hidden": "true" }), t.filterCount(activeFilters)] }), openMenu === "filter" && ((0, jsx_runtime_1.jsxs)("div", { className: "crisp-recordstable-menu", role: "dialog", "aria-label": t.addFilter, children: [(0, jsx_runtime_1.jsx)("input", { className: "crisp-recordstable-menu-input", placeholder: t.filterByPlaceholder, "aria-label": t.filterByField,
1027
1027
  // biome-ignore lint/a11y/noAutofocus: focus the picker on open
1028
1028
  autoFocus: true, value: filterQuery, onChange: (e) => setFilterQuery(e.target.value) }), cols
1029
1029
  .filter((col) => col.label
1030
1030
  .toLowerCase()
1031
1031
  .includes(filterQuery.trim().toLowerCase()))
1032
- .map((col) => ((0, jsx_runtime_1.jsxs)("button", { type: "button", className: "recordstable-menu-item", onClick: () => addFilter(col.key), children: [col.icon ? ((0, jsx_runtime_1.jsx)(col.icon, { size: 15, strokeWidth: 1.75 })) : ((0, jsx_runtime_1.jsx)("span", { style: { width: 15 } })), col.label] }, col.key)))] }))] }), filterConds.map((cond) => {
1032
+ .map((col) => ((0, jsx_runtime_1.jsxs)("button", { type: "button", className: "crisp-recordstable-menu-item", onClick: () => addFilter(col.key), children: [col.icon ? ((0, jsx_runtime_1.jsx)(col.icon, { size: 15, strokeWidth: 1.75 })) : ((0, jsx_runtime_1.jsx)("span", { style: { width: 15 } })), col.label] }, col.key)))] }))] }), filterConds.map((cond) => {
1033
1033
  const col = cols.find((c) => c.key === cond.key);
1034
1034
  const open = openMenu === `fcond:${cond.id}`;
1035
1035
  const hasValue = !opNeedsValue(cond.op) || cond.value.trim();
1036
- return ((0, jsx_runtime_1.jsxs)("span", { className: "recordstable-toolgroup", children: [(0, jsx_runtime_1.jsxs)("span", { className: "recordstable-fchip", children: [(0, jsx_runtime_1.jsxs)("button", { type: "button", className: "recordstable-fchip-main", "data-menu-trigger": true, "aria-haspopup": "dialog", "aria-expanded": open, onClick: () => setOpenMenu(open ? null : `fcond:${cond.id}`), children: [(0, jsx_runtime_1.jsx)("span", { className: "recordstable-fchip-field", children: col?.label }), hasValue ? ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)("span", { className: "recordstable-fchip-op", children: t.op[cond.op] }), opNeedsValue(cond.op) && ((0, jsx_runtime_1.jsx)("span", { className: "recordstable-fchip-val", children: cond.value }))] })) : ((0, jsx_runtime_1.jsx)("span", { className: "recordstable-fchip-op", children: t.selectCondition }))] }), (0, jsx_runtime_1.jsx)("button", { type: "button", className: "recordstable-fchip-x", "aria-label": `Remove ${col?.label} filter`, onClick: () => removeFilter(cond.id), children: (0, jsx_runtime_1.jsx)(lucide_react_1.X, { size: 13, strokeWidth: 2 }) })] }), open && ((0, jsx_runtime_1.jsxs)("div", { className: "recordstable-menu", role: "dialog", "aria-label": `${col?.label} condition`, children: [(0, jsx_runtime_1.jsxs)("div", { className: "recordstable-menu-head", children: [col?.label, " condition"] }), OP_ORDER.map((op) => ((0, jsx_runtime_1.jsxs)("button", { type: "button", className: "recordstable-menu-item", "data-on": cond.op === op ? "" : undefined, onClick: () => patchFilter(cond.id, { op }), children: [t.op[op], cond.op === op ? ((0, jsx_runtime_1.jsx)(lucide_react_1.Check, { className: "recordstable-menu-check", size: 15, strokeWidth: 1.75 })) : null] }, op))), opNeedsValue(cond.op) && ((0, jsx_runtime_1.jsx)("input", { className: "recordstable-menu-input", placeholder: t.filterValuePlaceholder, "aria-label": `${col?.label} filter value`,
1036
+ return ((0, jsx_runtime_1.jsxs)("span", { className: "crisp-recordstable-toolgroup", children: [(0, jsx_runtime_1.jsxs)("span", { className: "crisp-recordstable-fchip", children: [(0, jsx_runtime_1.jsxs)("button", { type: "button", className: "crisp-recordstable-fchip-main", "data-menu-trigger": true, "aria-haspopup": "dialog", "aria-expanded": open, onClick: () => setOpenMenu(open ? null : `fcond:${cond.id}`), children: [(0, jsx_runtime_1.jsx)("span", { className: "crisp-recordstable-fchip-field", children: col?.label }), hasValue ? ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)("span", { className: "crisp-recordstable-fchip-op", children: t.op[cond.op] }), opNeedsValue(cond.op) && ((0, jsx_runtime_1.jsx)("span", { className: "crisp-recordstable-fchip-val", children: cond.value }))] })) : ((0, jsx_runtime_1.jsx)("span", { className: "crisp-recordstable-fchip-op", children: t.selectCondition }))] }), (0, jsx_runtime_1.jsx)("button", { type: "button", className: "crisp-recordstable-fchip-x", "aria-label": `Remove ${col?.label} filter`, onClick: () => removeFilter(cond.id), children: (0, jsx_runtime_1.jsx)(lucide_react_1.X, { size: 13, strokeWidth: 2 }) })] }), open && ((0, jsx_runtime_1.jsxs)("div", { className: "crisp-recordstable-menu", role: "dialog", "aria-label": `${col?.label} condition`, children: [(0, jsx_runtime_1.jsxs)("div", { className: "crisp-recordstable-menu-head", children: [col?.label, " condition"] }), OP_ORDER.map((op) => ((0, jsx_runtime_1.jsxs)("button", { type: "button", className: "crisp-recordstable-menu-item", "data-on": cond.op === op ? "" : undefined, onClick: () => patchFilter(cond.id, { op }), children: [t.op[op], cond.op === op ? ((0, jsx_runtime_1.jsx)(lucide_react_1.Check, { className: "crisp-recordstable-menu-check", size: 15, strokeWidth: 1.75 })) : null] }, op))), opNeedsValue(cond.op) && ((0, jsx_runtime_1.jsx)("input", { className: "crisp-recordstable-menu-input", placeholder: t.filterValuePlaceholder, "aria-label": `${col?.label} filter value`,
1037
1037
  // biome-ignore lint/a11y/noAutofocus: focus the value field
1038
1038
  autoFocus: true, value: cond.value, onChange: (e) => patchFilter(cond.id, { value: e.target.value }) }))] }))] }, cond.id));
1039
- }), (0, jsx_runtime_1.jsx)("span", { className: "recordstable-spacer" }), (0, jsx_runtime_1.jsx)("span", { className: "recordstable-count", children: t.recordCount(visibleRows.length) }), showNew && ((0, jsx_runtime_1.jsxs)("button", { type: "button", className: "recordstable-new", onClick: () => setCreating(true), children: [(0, jsx_runtime_1.jsx)(lucide_react_1.Plus, { size: 15, strokeWidth: 2, "aria-hidden": "true" }), t.newButton] }))] }), (0, jsx_runtime_1.jsxs)("div", { ref: scrollRef, className: "recordstable-scroll", tabIndex: -1, "data-scrolled": scrolledX ? "" : undefined, onKeyDown: onGridKeyDown, onScroll: (e) => {
1039
+ }), (0, jsx_runtime_1.jsx)("span", { className: "crisp-recordstable-spacer" }), (0, jsx_runtime_1.jsx)("span", { className: "crisp-recordstable-count", children: t.recordCount(visibleRows.length) }), showNew && ((0, jsx_runtime_1.jsxs)("button", { type: "button", className: "crisp-recordstable-new", onClick: () => setCreating(true), children: [(0, jsx_runtime_1.jsx)(lucide_react_1.Plus, { size: 15, strokeWidth: 2, "aria-hidden": "true" }), t.newButton] }))] }), (0, jsx_runtime_1.jsxs)("div", { ref: scrollRef, className: "crisp-recordstable-scroll", tabIndex: -1, "data-scrolled": scrolledX ? "" : undefined, onKeyDown: onGridKeyDown, onScroll: (e) => {
1040
1040
  const left = e.currentTarget.scrollLeft > 0;
1041
1041
  setScrolledX((prev) => (prev === left ? prev : left));
1042
- }, children: [(0, jsx_runtime_1.jsxs)("table", { className: "recordstable-table", style: {
1042
+ }, children: [(0, jsx_runtime_1.jsxs)("table", { className: "crisp-recordstable-table", style: {
1043
1043
  // fill the container; the trailing add-column absorbs the slack (a
1044
1044
  // flexible filler). minWidth keeps real column widths and drives the
1045
1045
  // horizontal scroll once the columns outgrow the container.
@@ -1047,10 +1047,10 @@ function RecordsTable({ labels, columns: columnsProp = exports.defaultColumns, r
1047
1047
  minWidth: CHECK_W +
1048
1048
  ADDCOL_W +
1049
1049
  cols.reduce((sum, c) => sum + colWidth(c), 0),
1050
- }, children: [(0, jsx_runtime_1.jsxs)("colgroup", { children: [(0, jsx_runtime_1.jsx)("col", { style: { width: CHECK_W } }), cols.map((col) => ((0, jsx_runtime_1.jsx)("col", { style: { width: colWidth(col) } }, col.key))), (0, jsx_runtime_1.jsx)("col", {})] }), (0, jsx_runtime_1.jsx)("thead", { children: (0, jsx_runtime_1.jsxs)("tr", { children: [(0, jsx_runtime_1.jsx)("th", { className: "recordstable-th recordstable-col-check", children: (0, jsx_runtime_1.jsx)("span", { className: "recordstable-check-inner", children: (0, jsx_runtime_1.jsx)(checkbox_1.Checkbox, { "aria-label": t.selectAll, checked: allSelected, indeterminate: someSelected, onChange: toggleAll }) }) }), cols.map((col, i) => {
1050
+ }, children: [(0, jsx_runtime_1.jsxs)("colgroup", { children: [(0, jsx_runtime_1.jsx)("col", { style: { width: CHECK_W } }), cols.map((col) => ((0, jsx_runtime_1.jsx)("col", { style: { width: colWidth(col) } }, col.key))), (0, jsx_runtime_1.jsx)("col", {})] }), (0, jsx_runtime_1.jsx)("thead", { children: (0, jsx_runtime_1.jsxs)("tr", { children: [(0, jsx_runtime_1.jsx)("th", { className: "crisp-recordstable-th crisp-recordstable-col-check", children: (0, jsx_runtime_1.jsx)("span", { className: "crisp-recordstable-check-inner", children: (0, jsx_runtime_1.jsx)(checkbox_1.Checkbox, { "aria-label": t.selectAll, checked: allSelected, indeterminate: someSelected, onChange: toggleAll }) }) }), cols.map((col, i) => {
1051
1051
  const Icon = col.icon;
1052
1052
  const sc = sorts.find((s) => s.key === col.key);
1053
- return ((0, jsx_runtime_1.jsxs)("th", { className: `recordstable-th${i === 0 ? " recordstable-col-entity" : ""}`, "data-sorted": sc?.dir, "aria-sort": sorts[0]?.key === col.key
1053
+ return ((0, jsx_runtime_1.jsxs)("th", { className: `crisp-recordstable-th${i === 0 ? " crisp-recordstable-col-entity" : ""}`, "data-sorted": sc?.dir, "aria-sort": sorts[0]?.key === col.key
1054
1054
  ? sorts[0].dir === "asc"
1055
1055
  ? "ascending"
1056
1056
  : "descending"
@@ -1059,35 +1059,35 @@ function RecordsTable({ labels, columns: columnsProp = exports.defaultColumns, r
1059
1059
  e.preventDefault();
1060
1060
  reorderColumn(dragCol, col.key);
1061
1061
  }
1062
- : undefined, children: [renamingCol === col.key ? ((0, jsx_runtime_1.jsx)("input", { className: "recordstable-th-rename",
1062
+ : undefined, children: [renamingCol === col.key ? ((0, jsx_runtime_1.jsx)("input", { className: "crisp-recordstable-th-rename",
1063
1063
  // biome-ignore lint/a11y/noAutofocus: focus the rename field the moment it opens
1064
1064
  autoFocus: true, defaultValue: col.label, "aria-label": t.columnLabel, onKeyDown: (e) => {
1065
1065
  if (e.key === "Enter")
1066
1066
  renameColumn(col.key, e.currentTarget.value);
1067
1067
  else if (e.key === "Escape")
1068
1068
  setRenamingCol(null);
1069
- }, onBlur: (e) => renameColumn(col.key, e.currentTarget.value) })) : ((0, jsx_runtime_1.jsxs)("button", { type: "button", className: "recordstable-th-inner", "data-menu-trigger": true, "aria-haspopup": "menu", draggable: i >= 1, onDragStart: i >= 1
1069
+ }, onBlur: (e) => renameColumn(col.key, e.currentTarget.value) })) : ((0, jsx_runtime_1.jsxs)("button", { type: "button", className: "crisp-recordstable-th-inner", "data-menu-trigger": true, "aria-haspopup": "menu", draggable: i >= 1, onDragStart: i >= 1
1070
1070
  ? (e) => {
1071
1071
  setDragCol(col.key);
1072
1072
  e.dataTransfer.effectAllowed = "move";
1073
1073
  }
1074
- : undefined, onDragEnd: () => setDragCol(null), onClick: (e) => openColumnMenu(col.key, e.currentTarget), children: [Icon ? (0, jsx_runtime_1.jsx)(Icon, { size: 14, strokeWidth: 1.75 }) : null, (0, jsx_runtime_1.jsx)("span", { className: "recordstable-th-label", children: col.label }), (0, jsx_runtime_1.jsx)("span", { className: "recordstable-sort", children: (0, jsx_runtime_1.jsx)("svg", { width: "12", height: "12", viewBox: "0 0 16 16", fill: "none", stroke: "currentColor", strokeWidth: "1.5", "aria-hidden": "true", children: (0, jsx_runtime_1.jsx)("path", { d: "m4 6 4 4 4-4" }) }) })] })), openMenu === `col:${col.key}` &&
1074
+ : undefined, onDragEnd: () => setDragCol(null), onClick: (e) => openColumnMenu(col.key, e.currentTarget), children: [Icon ? (0, jsx_runtime_1.jsx)(Icon, { size: 14, strokeWidth: 1.75 }) : null, (0, jsx_runtime_1.jsx)("span", { className: "crisp-recordstable-th-label", children: col.label }), (0, jsx_runtime_1.jsx)("span", { className: "crisp-recordstable-sort", children: (0, jsx_runtime_1.jsx)("svg", { width: "12", height: "12", viewBox: "0 0 16 16", fill: "none", stroke: "currentColor", strokeWidth: "1.5", "aria-hidden": "true", children: (0, jsx_runtime_1.jsx)("path", { d: "m4 6 4 4 4-4" }) }) })] })), openMenu === `col:${col.key}` &&
1075
1075
  rootRef.current &&
1076
- (0, react_dom_1.createPortal)((0, jsx_runtime_1.jsxs)("div", { ref: menuRef, className: "recordstable-menu recordstable-menu--fixed recordstable-menu--hdr", role: "menu", "aria-label": `${col.label} column`, style: menuPos ?? undefined, onKeyDown: onMenuKeyDown, children: [(0, jsx_runtime_1.jsxs)("button", { type: "button", className: "recordstable-menu-item", role: "menuitem", tabIndex: -1, onClick: () => sortBy(col.key, "asc"), children: [(0, jsx_runtime_1.jsx)(lucide_react_1.ArrowUp, { size: 15, strokeWidth: 1.75 }), t.sortAscending] }), (0, jsx_runtime_1.jsxs)("button", { type: "button", className: "recordstable-menu-item", role: "menuitem", tabIndex: -1, onClick: () => sortBy(col.key, "desc"), children: [(0, jsx_runtime_1.jsx)(lucide_react_1.ArrowDown, { size: 15, strokeWidth: 1.75 }), t.sortDescending] }), (0, jsx_runtime_1.jsxs)("button", { type: "button", className: "recordstable-menu-item", role: "menuitem", tabIndex: -1, disabled: i <= 1, onClick: () => moveColumn(col.key, -1), children: [(0, jsx_runtime_1.jsx)(lucide_react_1.ArrowLeft, { "data-rtl-flip": "", size: 15, strokeWidth: 1.75 }), t.moveLeft] }), (0, jsx_runtime_1.jsxs)("button", { type: "button", className: "recordstable-menu-item", role: "menuitem", tabIndex: -1, disabled: i === 0 || i >= cols.length - 1, onClick: () => moveColumn(col.key, 1), children: [(0, jsx_runtime_1.jsx)(lucide_react_1.ArrowRight, { "data-rtl-flip": "", size: 15, strokeWidth: 1.75 }), t.moveRight] }), (0, jsx_runtime_1.jsx)("div", { className: "recordstable-menu-sep" }), (0, jsx_runtime_1.jsxs)("button", { type: "button", className: "recordstable-menu-item", role: "menuitem", tabIndex: -1, onClick: () => {
1076
+ (0, react_dom_1.createPortal)((0, jsx_runtime_1.jsxs)("div", { ref: menuRef, className: "crisp-recordstable-menu crisp-recordstable-menu--fixed crisp-recordstable-menu--hdr", role: "menu", "aria-label": `${col.label} column`, style: menuPos ?? undefined, onKeyDown: onMenuKeyDown, children: [(0, jsx_runtime_1.jsxs)("button", { type: "button", className: "crisp-recordstable-menu-item", role: "menuitem", tabIndex: -1, onClick: () => sortBy(col.key, "asc"), children: [(0, jsx_runtime_1.jsx)(lucide_react_1.ArrowUp, { size: 15, strokeWidth: 1.75 }), t.sortAscending] }), (0, jsx_runtime_1.jsxs)("button", { type: "button", className: "crisp-recordstable-menu-item", role: "menuitem", tabIndex: -1, onClick: () => sortBy(col.key, "desc"), children: [(0, jsx_runtime_1.jsx)(lucide_react_1.ArrowDown, { size: 15, strokeWidth: 1.75 }), t.sortDescending] }), (0, jsx_runtime_1.jsxs)("button", { type: "button", className: "crisp-recordstable-menu-item", role: "menuitem", tabIndex: -1, disabled: i <= 1, onClick: () => moveColumn(col.key, -1), children: [(0, jsx_runtime_1.jsx)(lucide_react_1.ArrowLeft, { "data-rtl-flip": "", size: 15, strokeWidth: 1.75 }), t.moveLeft] }), (0, jsx_runtime_1.jsxs)("button", { type: "button", className: "crisp-recordstable-menu-item", role: "menuitem", tabIndex: -1, disabled: i === 0 || i >= cols.length - 1, onClick: () => moveColumn(col.key, 1), children: [(0, jsx_runtime_1.jsx)(lucide_react_1.ArrowRight, { "data-rtl-flip": "", size: 15, strokeWidth: 1.75 }), t.moveRight] }), (0, jsx_runtime_1.jsx)("div", { className: "crisp-recordstable-menu-sep" }), (0, jsx_runtime_1.jsxs)("button", { type: "button", className: "crisp-recordstable-menu-item", role: "menuitem", tabIndex: -1, onClick: () => {
1077
1077
  setRenamingCol(col.key);
1078
1078
  setOpenMenu(null);
1079
- }, children: [(0, jsx_runtime_1.jsx)(lucide_react_1.Pencil, { size: 15, strokeWidth: 1.75 }), t.editColumnLabel] }), cols.length > 1 && ((0, jsx_runtime_1.jsxs)("button", { type: "button", className: "recordstable-menu-item", role: "menuitem", tabIndex: -1, onClick: () => hideColumn(col.key), children: [(0, jsx_runtime_1.jsx)(lucide_react_1.EyeOff, { size: 15, strokeWidth: 1.75 }), t.hideFromView] }))] }), rootRef.current), (0, jsx_runtime_1.jsx)("span", { className: "recordstable-resize", "aria-hidden": "true", onPointerDown: (e) => {
1079
+ }, children: [(0, jsx_runtime_1.jsx)(lucide_react_1.Pencil, { size: 15, strokeWidth: 1.75 }), t.editColumnLabel] }), cols.length > 1 && ((0, jsx_runtime_1.jsxs)("button", { type: "button", className: "crisp-recordstable-menu-item", role: "menuitem", tabIndex: -1, onClick: () => hideColumn(col.key), children: [(0, jsx_runtime_1.jsx)(lucide_react_1.EyeOff, { size: 15, strokeWidth: 1.75 }), t.hideFromView] }))] }), rootRef.current), (0, jsx_runtime_1.jsx)("span", { className: "crisp-recordstable-resize", "aria-hidden": "true", onPointerDown: (e) => {
1080
1080
  e.preventDefault();
1081
1081
  e.stopPropagation();
1082
1082
  const th = e.currentTarget
1083
1083
  .parentElement;
1084
1084
  resizeCol(col.key, e.clientX, th ? th.getBoundingClientRect().width : 180, e.currentTarget);
1085
1085
  }, onClick: (e) => e.stopPropagation() })] }, col.key));
1086
- }), (0, jsx_runtime_1.jsx)("th", { className: "recordstable-th recordstable-addcol", children: allowAddColumn && ((0, jsx_runtime_1.jsx)("button", { type: "button", onClick: addColumn, "aria-label": t.addColumn, children: (0, jsx_runtime_1.jsx)(lucide_react_1.Plus, { size: 15, strokeWidth: 1.75 }) })) })] }) }), (0, jsx_runtime_1.jsx)("tbody", { children: visibleRows.map((row) => ((0, jsx_runtime_1.jsxs)("tr", { "data-selected": selected.has(row.id) ? "" : undefined, onContextMenu: (e) => {
1086
+ }), (0, jsx_runtime_1.jsx)("th", { className: "crisp-recordstable-th crisp-recordstable-addcol", children: allowAddColumn && ((0, jsx_runtime_1.jsx)("button", { type: "button", onClick: addColumn, "aria-label": t.addColumn, children: (0, jsx_runtime_1.jsx)(lucide_react_1.Plus, { size: 15, strokeWidth: 1.75 }) })) })] }) }), (0, jsx_runtime_1.jsx)("tbody", { children: visibleRows.map((row) => ((0, jsx_runtime_1.jsxs)("tr", { "data-selected": selected.has(row.id) ? "" : undefined, onContextMenu: (e) => {
1087
1087
  e.preventDefault();
1088
1088
  ctxReturn.current = document.activeElement;
1089
1089
  setCtxMenu({ x: e.clientX, y: e.clientY, id: row.id });
1090
- }, children: [(0, jsx_runtime_1.jsx)("td", { className: "recordstable-td recordstable-col-check", children: (0, jsx_runtime_1.jsx)("span", { className: "recordstable-check-inner", children: (0, jsx_runtime_1.jsx)(checkbox_1.Checkbox, { "aria-label": `Select ${row.id}`, checked: selected.has(row.id), onClick: (e) => {
1090
+ }, children: [(0, jsx_runtime_1.jsx)("td", { className: "crisp-recordstable-td crisp-recordstable-col-check", children: (0, jsx_runtime_1.jsx)("span", { className: "crisp-recordstable-check-inner", children: (0, jsx_runtime_1.jsx)(checkbox_1.Checkbox, { "aria-label": `Select ${row.id}`, checked: selected.has(row.id), onClick: (e) => {
1091
1091
  shiftHeld.current = e.shiftKey;
1092
1092
  }, onChange: () => toggleRow(row.id) }) }) }), cols.map((col, i) => {
1093
1093
  const canEdit = canEditCol(col);
@@ -1099,7 +1099,7 @@ function RecordsTable({ labels, columns: columnsProp = exports.defaultColumns, r
1099
1099
  // row instead of a bare "182,000", and the same header is
1100
1100
  // repeated in every cell's context (#231).
1101
1101
  const Cell = (i === 0 ? "th" : "td");
1102
- return ((0, jsx_runtime_1.jsxs)(Cell, { scope: i === 0 ? "row" : undefined, "data-cell": `${row.id}:${col.key}`, className: `recordstable-td${i === 0 ? " recordstable-col-entity" : ""}${canEdit ? " recordstable-td--editable" : ""}${isPicker ? " recordstable-td--picker" : ""}`, "data-enriched": col.enriched ? "" : undefined, "data-selected": selCell?.id === row.id && selCell?.key === col.key
1102
+ return ((0, jsx_runtime_1.jsxs)(Cell, { scope: i === 0 ? "row" : undefined, "data-cell": `${row.id}:${col.key}`, className: `crisp-recordstable-td${i === 0 ? " crisp-recordstable-col-entity" : ""}${canEdit ? " crisp-recordstable-td--editable" : ""}${isPicker ? " crisp-recordstable-td--picker" : ""}`, "data-enriched": col.enriched ? "" : undefined, "data-selected": selCell?.id === row.id && selCell?.key === col.key
1103
1103
  ? ""
1104
1104
  : undefined, onClick: () => {
1105
1105
  if (isPicker)
@@ -1108,7 +1108,7 @@ function RecordsTable({ labels, columns: columnsProp = exports.defaultColumns, r
1108
1108
  scrollRef.current?.focus({ preventScroll: true });
1109
1109
  }, onDoubleClick: canEdit
1110
1110
  ? () => setEditing({ id: row.id, key: col.key })
1111
- : undefined, children: [isPicker ? (col.type === "status" ? ((0, jsx_runtime_1.jsx)(StatusCell, { column: col, row: row, onChange: (v) => setCell(row.id, col.key, v) })) : col.type === "reference" ? ((0, jsx_runtime_1.jsx)(ReferenceCell, { labels: t, column: col, row: row, onChange: (v) => setCell(row.id, col.key, v) })) : col.type === "tags" ? ((0, jsx_runtime_1.jsx)(TagsCell, { labels: t, column: col, row: row, options: tagOptionsFor(col.key), onChange: (v) => setCell(row.id, col.key, v) })) : ((0, jsx_runtime_1.jsx)(DateCell, { column: col, row: row, onChange: (v) => setCell(row.id, col.key, v) }))) : isEditing ? ((0, jsx_runtime_1.jsx)("input", { className: `recordstable-edit${col.type === "number" ? " recordstable-edit--num" : ""}`,
1111
+ : undefined, children: [isPicker ? (col.type === "status" ? ((0, jsx_runtime_1.jsx)(StatusCell, { column: col, row: row, onChange: (v) => setCell(row.id, col.key, v) })) : col.type === "reference" ? ((0, jsx_runtime_1.jsx)(ReferenceCell, { labels: t, column: col, row: row, onChange: (v) => setCell(row.id, col.key, v) })) : col.type === "tags" ? ((0, jsx_runtime_1.jsx)(TagsCell, { labels: t, column: col, row: row, options: tagOptionsFor(col.key), onChange: (v) => setCell(row.id, col.key, v) })) : ((0, jsx_runtime_1.jsx)(DateCell, { column: col, row: row, onChange: (v) => setCell(row.id, col.key, v) }))) : isEditing ? ((0, jsx_runtime_1.jsx)("input", { className: `crisp-recordstable-edit${col.type === "number" ? " crisp-recordstable-edit--num" : ""}`,
1112
1112
  // biome-ignore lint/a11y/noAutofocus: focusing the just-opened editor is the expected behavior
1113
1113
  autoFocus: true, defaultValue: cellText(col, row), onBlur: (e) => commitEdit(row.id, col.key, e.target.value), onKeyDown: (e) => {
1114
1114
  if (e.key === "Enter")
@@ -1117,15 +1117,15 @@ function RecordsTable({ labels, columns: columnsProp = exports.defaultColumns, r
1117
1117
  setEditing(null);
1118
1118
  } })) : ((0, jsx_runtime_1.jsx)(CellView, { labels: t, column: col, row: row, pinned: i === 0 && pinned.has(row.id), onOpenPage: i === 0 && onOpenRecordPage
1119
1119
  ? () => onOpenRecordPage(row)
1120
- : undefined, avatarTone: avatarTone })), i === 0 && onOpenRecord && !isEditing && ((0, jsx_runtime_1.jsx)("button", { type: "button", className: "recordstable-open", "aria-label": `Open ${cellText(col, row)}`, onClick: (e) => {
1120
+ : undefined, avatarTone: avatarTone })), i === 0 && onOpenRecord && !isEditing && ((0, jsx_runtime_1.jsx)("button", { type: "button", className: "crisp-recordstable-open", "aria-label": `Open ${cellText(col, row)}`, onClick: (e) => {
1121
1121
  e.stopPropagation();
1122
1122
  onOpenRecord(row);
1123
1123
  }, children: (0, jsx_runtime_1.jsx)(lucide_react_1.ArrowUpRight, { "data-rtl-flip": "", size: 15, strokeWidth: 1.75 }) }))] }, col.key));
1124
- }), (0, jsx_runtime_1.jsx)("td", { className: "recordstable-td recordstable-addcol" })] }, row.id))) }), (0, jsx_runtime_1.jsx)("tfoot", { children: (0, jsx_runtime_1.jsxs)("tr", { children: [(0, jsx_runtime_1.jsx)("td", { className: "recordstable-sum recordstable-col-check" }), cols.map((col, i) => {
1124
+ }), (0, jsx_runtime_1.jsx)("td", { className: "crisp-recordstable-td crisp-recordstable-addcol" })] }, row.id))) }), (0, jsx_runtime_1.jsx)("tfoot", { children: (0, jsx_runtime_1.jsxs)("tr", { children: [(0, jsx_runtime_1.jsx)("td", { className: "crisp-recordstable-sum crisp-recordstable-col-check" }), cols.map((col, i) => {
1125
1125
  const a = agg[col.key] ?? "none";
1126
1126
  const res = summarize(col, a, visibleRows);
1127
1127
  const sumOpen = openMenu === `sum:${col.key}`;
1128
- return ((0, jsx_runtime_1.jsx)("td", { className: `recordstable-sum${i === 0 ? " recordstable-col-entity" : ""}`, children: (0, jsx_runtime_1.jsxs)("span", { className: "recordstable-toolgroup recordstable-sumgroup", children: [(0, jsx_runtime_1.jsx)("button", { type: "button", className: "recordstable-sum-btn", "data-empty": res ? undefined : "", "data-menu-trigger": true, "aria-haspopup": "menu", onClick: (e) => {
1128
+ return ((0, jsx_runtime_1.jsx)("td", { className: `crisp-recordstable-sum${i === 0 ? " crisp-recordstable-col-entity" : ""}`, children: (0, jsx_runtime_1.jsxs)("span", { className: "crisp-recordstable-toolgroup crisp-recordstable-sumgroup", children: [(0, jsx_runtime_1.jsx)("button", { type: "button", className: "crisp-recordstable-sum-btn", "data-empty": res ? undefined : "", "data-menu-trigger": true, "aria-haspopup": "menu", onClick: (e) => {
1129
1129
  if (sumOpen) {
1130
1130
  setOpenMenu(null);
1131
1131
  return;
@@ -1137,13 +1137,13 @@ function RecordsTable({ labels, columns: columnsProp = exports.defaultColumns, r
1137
1137
  });
1138
1138
  menuReturn.current = e.currentTarget;
1139
1139
  setOpenMenu(`sum:${col.key}`);
1140
- }, children: res ? ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)("span", { className: "recordstable-sum-label", children: t.agg[a] }), (0, jsx_runtime_1.jsx)("span", { className: "recordstable-sum-value", children: res.value })] })) : ((0, jsx_runtime_1.jsx)("span", { className: "recordstable-sum-label", children: t.calculate })) }), sumOpen &&
1140
+ }, children: res ? ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)("span", { className: "crisp-recordstable-sum-label", children: t.agg[a] }), (0, jsx_runtime_1.jsx)("span", { className: "crisp-recordstable-sum-value", children: res.value })] })) : ((0, jsx_runtime_1.jsx)("span", { className: "crisp-recordstable-sum-label", children: t.calculate })) }), sumOpen &&
1141
1141
  rootRef.current &&
1142
- (0, react_dom_1.createPortal)((0, jsx_runtime_1.jsx)("div", { ref: menuRef, className: "recordstable-menu recordstable-menu--fixed recordstable-menu--up", role: "menu", "aria-label": `${col.label} summary`, style: menuPos ?? undefined, onKeyDown: onMenuKeyDown, children: aggOptions(col).map((opt) => ((0, jsx_runtime_1.jsxs)("button", { type: "button", className: "recordstable-menu-item", role: "menuitemradio", tabIndex: -1, "aria-checked": a === opt, "data-on": a === opt ? "" : undefined, onClick: () => setAggValue(col.key, opt), children: [t.agg[opt], a === opt ? ((0, jsx_runtime_1.jsx)(lucide_react_1.Check, { className: "recordstable-menu-check", size: 15, strokeWidth: 1.75 })) : null] }, opt))) }), rootRef.current)] }) }, col.key));
1143
- }), (0, jsx_runtime_1.jsx)("td", { className: "recordstable-sum recordstable-addcol" })] }) })] }), visibleRows.length === 0 ? ((0, jsx_runtime_1.jsx)("div", { className: "recordstable-empty", children: (0, jsx_runtime_1.jsx)(emptystate_1.EmptyState, { variant: "page", icon: activeFilters ? ((0, jsx_runtime_1.jsx)(lucide_react_1.ListFilter, { size: 18, strokeWidth: 1.75, "aria-hidden": "true" })) : ((0, jsx_runtime_1.jsx)(lucide_react_1.Inbox, { size: 18, strokeWidth: 1.75, "aria-hidden": "true" })), title: activeFilters ? "No records match that filter" : t.noRecords, description: activeFilters
1142
+ (0, react_dom_1.createPortal)((0, jsx_runtime_1.jsx)("div", { ref: menuRef, className: "crisp-recordstable-menu crisp-recordstable-menu--fixed crisp-recordstable-menu--up", role: "menu", "aria-label": `${col.label} summary`, style: menuPos ?? undefined, onKeyDown: onMenuKeyDown, children: aggOptions(col).map((opt) => ((0, jsx_runtime_1.jsxs)("button", { type: "button", className: "crisp-recordstable-menu-item", role: "menuitemradio", tabIndex: -1, "aria-checked": a === opt, "data-on": a === opt ? "" : undefined, onClick: () => setAggValue(col.key, opt), children: [t.agg[opt], a === opt ? ((0, jsx_runtime_1.jsx)(lucide_react_1.Check, { className: "crisp-recordstable-menu-check", size: 15, strokeWidth: 1.75 })) : null] }, opt))) }), rootRef.current)] }) }, col.key));
1143
+ }), (0, jsx_runtime_1.jsx)("td", { className: "crisp-recordstable-sum crisp-recordstable-addcol" })] }) })] }), visibleRows.length === 0 ? ((0, jsx_runtime_1.jsx)("div", { className: "crisp-recordstable-empty", children: (0, jsx_runtime_1.jsx)(emptystate_1.EmptyState, { variant: "page", icon: activeFilters ? ((0, jsx_runtime_1.jsx)(lucide_react_1.ListFilter, { size: 18, strokeWidth: 1.75, "aria-hidden": "true" })) : ((0, jsx_runtime_1.jsx)(lucide_react_1.Inbox, { size: 18, strokeWidth: 1.75, "aria-hidden": "true" })), title: activeFilters ? "No records match that filter" : t.noRecords, description: activeFilters
1144
1144
  ? "None of your records match the filters that are set."
1145
- : `Create your first ${cols.find((c) => c.type === "entity")?.label?.toLowerCase() ?? "record"} to get started.`, action: activeFilters ? ((0, jsx_runtime_1.jsxs)(button_1.Button, { intent: "primary", size: "sm", onClick: () => setFilterConds([]), children: [(0, jsx_runtime_1.jsx)(lucide_react_1.ListFilter, { size: 15, strokeWidth: 1.75 }), t.clearFilter] })) : ((0, jsx_runtime_1.jsxs)(button_1.Button, { intent: "primary", size: "sm", onClick: addRow, children: [(0, jsx_runtime_1.jsx)(lucide_react_1.Plus, { size: 15, strokeWidth: 1.75 }), t.newRecord] })) }) })) : ((0, jsx_runtime_1.jsxs)("button", { type: "button", className: "recordstable-addrow", onClick: addRow, children: [(0, jsx_runtime_1.jsx)(lucide_react_1.Plus, { size: 15, strokeWidth: 1.75, "aria-hidden": "true" }), t.newRecord] }))] }), (0, jsx_runtime_1.jsx)("div", { className: "recordstable-live", role: "status", "aria-live": "polite", children: selectionAnnouncement }), selected.size > 0 && ((0, jsx_runtime_1.jsxs)(bulkbar_1.BulkBar, { count: selected.size, countLabel: t.selectedCount, onClear: () => setSelected(new Set()), children: [(0, jsx_runtime_1.jsx)(bulkbar_1.BulkBarButton, { icon: (0, jsx_runtime_1.jsx)(lucide_react_1.ListPlus, { size: 15, strokeWidth: 1.75 }), onClick: addToList, children: t.addToList }), (0, jsx_runtime_1.jsx)(bulkbar_1.BulkBarButton, { icon: (0, jsx_runtime_1.jsx)(lucide_react_1.Mail, { size: 15, strokeWidth: 1.75 }), onClick: sendEmail, children: t.sendEmail }), (0, jsx_runtime_1.jsx)(bulkbar_1.BulkBarButton, { icon: (0, jsx_runtime_1.jsx)(lucide_react_1.Workflow, { size: 15, strokeWidth: 1.75 }), onClick: runWorkflow, children: t.runWorkflow }), (0, jsx_runtime_1.jsxs)(menu_1.Menu, { align: "end", "aria-label": t.moreActions, trigger: (0, jsx_runtime_1.jsx)(bulkbar_1.BulkBarButton, { icon: (0, jsx_runtime_1.jsx)(lucide_react_1.MoreHorizontal, { size: 15, strokeWidth: 1.75 }), children: t.more }), children: [(0, jsx_runtime_1.jsx)(menu_1.MenuItem, { icon: (0, jsx_runtime_1.jsx)(lucide_react_1.Download, { size: 15, strokeWidth: 1.75 }), onSelect: exportSelected, children: t.exportCsv }), (0, jsx_runtime_1.jsx)(menu_1.MenuItem, { icon: (0, jsx_runtime_1.jsx)(lucide_react_1.Trash2, { size: 15, strokeWidth: 1.75 }), danger: true, onSelect: deleteSelected, children: t.delete })] })] })), (0, jsx_runtime_1.jsx)(CreateRecordDialog, { labels: t, open: creating, onOpenChange: setCreating, columns: cols, entityLabel: cols.find((c) => c.type === "entity")?.label ?? "record", onCreate: (row) => setData((prev) => [...prev, row]) }), ctxMenu &&
1146
- (0, react_dom_1.createPortal)((0, jsx_runtime_1.jsxs)("div", { ref: ctxRef, className: "recordstable-menu recordstable-ctx", role: "menu", "aria-label": t.recordActions, style: { position: "fixed", top: ctxMenu.y, left: ctxMenu.x }, onKeyDown: onCtxKeyDown, children: [(0, jsx_runtime_1.jsxs)("button", { type: "button", className: "recordstable-menu-item", role: "menuitem", tabIndex: -1, onClick: () => copyRow(ctxMenu.id), children: [(0, jsx_runtime_1.jsx)(lucide_react_1.Copy, { size: 15, strokeWidth: 1.75 }), t.copy] }), (0, jsx_runtime_1.jsxs)("button", { type: "button", className: "recordstable-menu-item", role: "menuitem", tabIndex: -1, onClick: () => duplicateRow(ctxMenu.id), children: [(0, jsx_runtime_1.jsx)(lucide_react_1.CopyPlus, { size: 15, strokeWidth: 1.75 }), t.duplicate] }), (0, jsx_runtime_1.jsxs)("button", { type: "button", className: "recordstable-menu-item", role: "menuitem", tabIndex: -1, onClick: () => pinRow(ctxMenu.id), children: [(0, jsx_runtime_1.jsx)(lucide_react_1.Star, { size: 15, strokeWidth: 1.75 }), t.addToList] }), (0, jsx_runtime_1.jsxs)("button", { type: "button", className: "recordstable-menu-item recordstable-menu-item--danger", role: "menuitem", tabIndex: -1, onClick: () => deleteRow(ctxMenu.id), children: [(0, jsx_runtime_1.jsx)(lucide_react_1.Trash2, { size: 15, strokeWidth: 1.75 }), t.delete] })] }), rootRef.current ?? document.body)] }));
1145
+ : `Create your first ${cols.find((c) => c.type === "entity")?.label?.toLowerCase() ?? "record"} to get started.`, action: activeFilters ? ((0, jsx_runtime_1.jsxs)(button_1.Button, { intent: "primary", size: "sm", onClick: () => setFilterConds([]), children: [(0, jsx_runtime_1.jsx)(lucide_react_1.ListFilter, { size: 15, strokeWidth: 1.75 }), t.clearFilter] })) : ((0, jsx_runtime_1.jsxs)(button_1.Button, { intent: "primary", size: "sm", onClick: addRow, children: [(0, jsx_runtime_1.jsx)(lucide_react_1.Plus, { size: 15, strokeWidth: 1.75 }), t.newRecord] })) }) })) : ((0, jsx_runtime_1.jsxs)("button", { type: "button", className: "crisp-recordstable-addrow", onClick: addRow, children: [(0, jsx_runtime_1.jsx)(lucide_react_1.Plus, { size: 15, strokeWidth: 1.75, "aria-hidden": "true" }), t.newRecord] }))] }), (0, jsx_runtime_1.jsx)("div", { className: "crisp-recordstable-live", role: "status", "aria-live": "polite", children: selectionAnnouncement }), selected.size > 0 && ((0, jsx_runtime_1.jsxs)(bulkbar_1.BulkBar, { count: selected.size, countLabel: t.selectedCount, onClear: () => setSelected(new Set()), children: [(0, jsx_runtime_1.jsx)(bulkbar_1.BulkBarButton, { icon: (0, jsx_runtime_1.jsx)(lucide_react_1.ListPlus, { size: 15, strokeWidth: 1.75 }), onClick: addToList, children: t.addToList }), (0, jsx_runtime_1.jsx)(bulkbar_1.BulkBarButton, { icon: (0, jsx_runtime_1.jsx)(lucide_react_1.Mail, { size: 15, strokeWidth: 1.75 }), onClick: sendEmail, children: t.sendEmail }), (0, jsx_runtime_1.jsx)(bulkbar_1.BulkBarButton, { icon: (0, jsx_runtime_1.jsx)(lucide_react_1.Workflow, { size: 15, strokeWidth: 1.75 }), onClick: runWorkflow, children: t.runWorkflow }), (0, jsx_runtime_1.jsxs)(menu_1.Menu, { align: "end", "aria-label": t.moreActions, trigger: (0, jsx_runtime_1.jsx)(bulkbar_1.BulkBarButton, { icon: (0, jsx_runtime_1.jsx)(lucide_react_1.MoreHorizontal, { size: 15, strokeWidth: 1.75 }), children: t.more }), children: [(0, jsx_runtime_1.jsx)(menu_1.MenuItem, { icon: (0, jsx_runtime_1.jsx)(lucide_react_1.Download, { size: 15, strokeWidth: 1.75 }), onSelect: exportSelected, children: t.exportCsv }), (0, jsx_runtime_1.jsx)(menu_1.MenuItem, { icon: (0, jsx_runtime_1.jsx)(lucide_react_1.Trash2, { size: 15, strokeWidth: 1.75 }), danger: true, onSelect: deleteSelected, children: t.delete })] })] })), (0, jsx_runtime_1.jsx)(CreateRecordDialog, { labels: t, open: creating, onOpenChange: setCreating, columns: cols, entityLabel: cols.find((c) => c.type === "entity")?.label ?? "record", onCreate: (row) => setData((prev) => [...prev, row]) }), ctxMenu &&
1146
+ (0, react_dom_1.createPortal)((0, jsx_runtime_1.jsxs)("div", { ref: ctxRef, className: "crisp-recordstable-menu crisp-recordstable-ctx", role: "menu", "aria-label": t.recordActions, style: { position: "fixed", top: ctxMenu.y, left: ctxMenu.x }, onKeyDown: onCtxKeyDown, children: [(0, jsx_runtime_1.jsxs)("button", { type: "button", className: "crisp-recordstable-menu-item", role: "menuitem", tabIndex: -1, onClick: () => copyRow(ctxMenu.id), children: [(0, jsx_runtime_1.jsx)(lucide_react_1.Copy, { size: 15, strokeWidth: 1.75 }), t.copy] }), (0, jsx_runtime_1.jsxs)("button", { type: "button", className: "crisp-recordstable-menu-item", role: "menuitem", tabIndex: -1, onClick: () => duplicateRow(ctxMenu.id), children: [(0, jsx_runtime_1.jsx)(lucide_react_1.CopyPlus, { size: 15, strokeWidth: 1.75 }), t.duplicate] }), (0, jsx_runtime_1.jsxs)("button", { type: "button", className: "crisp-recordstable-menu-item", role: "menuitem", tabIndex: -1, onClick: () => pinRow(ctxMenu.id), children: [(0, jsx_runtime_1.jsx)(lucide_react_1.Star, { size: 15, strokeWidth: 1.75 }), t.addToList] }), (0, jsx_runtime_1.jsxs)("button", { type: "button", className: "crisp-recordstable-menu-item crisp-recordstable-menu-item--danger", role: "menuitem", tabIndex: -1, onClick: () => deleteRow(ctxMenu.id), children: [(0, jsx_runtime_1.jsx)(lucide_react_1.Trash2, { size: 15, strokeWidth: 1.75 }), t.delete] })] }), rootRef.current ?? document.body)] }));
1147
1147
  }
1148
1148
  exports.defaultColumns = [
1149
1149
  { key: "company", label: "Company", type: "entity", icon: lucide_react_1.Building2 },