@datum-cloud/datum-ui 0.6.1 → 0.8.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 (257) hide show
  1. package/README.md +10 -0
  2. package/dist/action-row-DnhBhMtt.mjs +22 -0
  3. package/dist/app-navigation/index.mjs +2 -2
  4. package/dist/{app-navigation-84ro28PU.mjs → app-navigation-rSOfo1KV.mjs} +169 -106
  5. package/dist/autocomplete/index.mjs +1 -1
  6. package/dist/autocomplete-DdbTQe6u.mjs +141 -0
  7. package/dist/autosearch/index.mjs +100 -92
  8. package/dist/avatar-stack/index.mjs +1 -1
  9. package/dist/{avatar-stack-oVr8tsU7.mjs → avatar-stack-CDhlA1Nm.mjs} +1 -1
  10. package/dist/calendar/index.mjs +1 -1
  11. package/dist/{calendar-DEkCw7I1.mjs → calendar-C-Hbf74r.mjs} +4 -4
  12. package/dist/{calendar-date-picker-CDT-8Ha8.mjs → calendar-date-picker-BaykEs6j.mjs} +324 -240
  13. package/dist/code-editor/index.mjs +1 -1
  14. package/dist/components/base/date-picker/index.d.ts +4 -0
  15. package/dist/components/base/date-picker/index.d.ts.map +1 -0
  16. package/dist/components/base/date-picker/types.d.ts +7 -0
  17. package/dist/components/base/date-picker/types.d.ts.map +1 -0
  18. package/dist/components/base/date-picker/use-date-constraints.d.ts +8 -0
  19. package/dist/components/base/date-picker/use-date-constraints.d.ts.map +1 -0
  20. package/dist/components/base/index.d.ts +3 -0
  21. package/dist/components/base/index.d.ts.map +1 -1
  22. package/dist/components/base/mobile-sheet/context.d.ts +13 -0
  23. package/dist/components/base/mobile-sheet/context.d.ts.map +1 -0
  24. package/dist/components/base/mobile-sheet/index.d.ts +3 -0
  25. package/dist/components/base/mobile-sheet/index.d.ts.map +1 -0
  26. package/dist/components/base/mobile-sheet/mobile-sheet.d.ts +14 -0
  27. package/dist/components/base/mobile-sheet/mobile-sheet.d.ts.map +1 -0
  28. package/dist/components/base/option-picker/index.d.ts +5 -0
  29. package/dist/components/base/option-picker/index.d.ts.map +1 -0
  30. package/dist/components/base/option-picker/option-list.d.ts +3 -0
  31. package/dist/components/base/option-picker/option-list.d.ts.map +1 -0
  32. package/dist/components/base/option-picker/types.d.ts +71 -0
  33. package/dist/components/base/option-picker/types.d.ts.map +1 -0
  34. package/dist/components/base/option-picker/use-option-picker.d.ts +4 -0
  35. package/dist/components/base/option-picker/use-option-picker.d.ts.map +1 -0
  36. package/dist/components/base/responsive-dropdown/index.d.ts +2 -0
  37. package/dist/components/base/responsive-dropdown/index.d.ts.map +1 -0
  38. package/dist/components/base/responsive-dropdown/responsive-dropdown.d.ts +25 -0
  39. package/dist/components/base/responsive-dropdown/responsive-dropdown.d.ts.map +1 -0
  40. package/dist/components/base/responsive-popover/index.d.ts +2 -0
  41. package/dist/components/base/responsive-popover/index.d.ts.map +1 -0
  42. package/dist/components/base/responsive-popover/responsive-popover.d.ts +46 -0
  43. package/dist/components/base/responsive-popover/responsive-popover.d.ts.map +1 -0
  44. package/dist/components/base/tooltip/tooltip.d.ts.map +1 -1
  45. package/dist/components/features/app-navigation/app-navigation.d.ts +5 -3
  46. package/dist/components/features/app-navigation/app-navigation.d.ts.map +1 -1
  47. package/dist/components/features/autocomplete/autocomplete.d.ts +2 -2
  48. package/dist/components/features/autocomplete/autocomplete.d.ts.map +1 -1
  49. package/dist/components/features/autocomplete/autocomplete.types.d.ts +7 -16
  50. package/dist/components/features/autocomplete/autocomplete.types.d.ts.map +1 -1
  51. package/dist/components/features/autocomplete/trigger.d.ts +20 -0
  52. package/dist/components/features/autocomplete/trigger.d.ts.map +1 -0
  53. package/dist/components/features/autosearch/autosearch.d.ts +1 -1
  54. package/dist/components/features/autosearch/autosearch.d.ts.map +1 -1
  55. package/dist/components/features/autosearch/autosearch.types.d.ts +4 -0
  56. package/dist/components/features/autosearch/autosearch.types.d.ts.map +1 -1
  57. package/dist/components/features/calendar-date-picker/calendar-date-picker.d.ts +3 -37
  58. package/dist/components/features/calendar-date-picker/calendar-date-picker.d.ts.map +1 -1
  59. package/dist/components/features/calendar-date-picker/calendar-header.d.ts +13 -0
  60. package/dist/components/features/calendar-date-picker/calendar-header.d.ts.map +1 -0
  61. package/dist/components/features/calendar-date-picker/calendar-presets.d.ts +9 -0
  62. package/dist/components/features/calendar-date-picker/calendar-presets.d.ts.map +1 -0
  63. package/dist/components/features/calendar-date-picker/date-trigger.d.ts +24 -0
  64. package/dist/components/features/calendar-date-picker/date-trigger.d.ts.map +1 -0
  65. package/dist/components/features/calendar-date-picker/index.d.ts +2 -1
  66. package/dist/components/features/calendar-date-picker/index.d.ts.map +1 -1
  67. package/dist/components/features/calendar-date-picker/types.d.ts +42 -0
  68. package/dist/components/features/calendar-date-picker/types.d.ts.map +1 -0
  69. package/dist/components/features/calendar-date-picker/use-calendar-date-picker.d.ts +48 -0
  70. package/dist/components/features/calendar-date-picker/use-calendar-date-picker.d.ts.map +1 -0
  71. package/dist/components/features/data-table/components/row-actions.d.ts +1 -1
  72. package/dist/components/features/data-table/components/row-actions.d.ts.map +1 -1
  73. package/dist/components/features/data-table/filters/checkbox-filter.d.ts +1 -1
  74. package/dist/components/features/data-table/filters/checkbox-filter.d.ts.map +1 -1
  75. package/dist/components/features/data-table/filters/select-filter.d.ts +1 -1
  76. package/dist/components/features/data-table/filters/select-filter.d.ts.map +1 -1
  77. package/dist/components/features/data-table/types.d.ts +11 -12
  78. package/dist/components/features/data-table/types.d.ts.map +1 -1
  79. package/dist/components/features/date-time-picker/date-time-picker.d.ts +1 -1
  80. package/dist/components/features/date-time-picker/date-time-picker.d.ts.map +1 -1
  81. package/dist/components/features/date-time-picker/types.d.ts +23 -0
  82. package/dist/components/features/date-time-picker/types.d.ts.map +1 -1
  83. package/dist/components/features/form/components/form-combobox.d.ts +7 -44
  84. package/dist/components/features/form/components/form-combobox.d.ts.map +1 -1
  85. package/dist/components/features/form/components/form-dialog.d.ts +2 -1
  86. package/dist/components/features/form/components/form-dialog.d.ts.map +1 -1
  87. package/dist/components/features/form/components/form-field.d.ts +1 -1
  88. package/dist/components/features/form/components/form-field.d.ts.map +1 -1
  89. package/dist/components/features/form/types/index.d.ts +4 -0
  90. package/dist/components/features/form/types/index.d.ts.map +1 -1
  91. package/dist/components/features/index.d.ts +2 -0
  92. package/dist/components/features/index.d.ts.map +1 -1
  93. package/dist/components/features/more-actions/action-row.d.ts +9 -0
  94. package/dist/components/features/more-actions/action-row.d.ts.map +1 -0
  95. package/dist/components/features/more-actions/index.d.ts +3 -1
  96. package/dist/components/features/more-actions/index.d.ts.map +1 -1
  97. package/dist/components/features/more-actions/more-actions.d.ts +8 -14
  98. package/dist/components/features/more-actions/more-actions.d.ts.map +1 -1
  99. package/dist/components/features/more-actions/types.d.ts +24 -0
  100. package/dist/components/features/more-actions/types.d.ts.map +1 -0
  101. package/dist/components/features/multi-select/index.d.ts +3 -0
  102. package/dist/components/features/multi-select/index.d.ts.map +1 -0
  103. package/dist/components/features/multi-select/multi-select.d.ts +147 -0
  104. package/dist/components/features/multi-select/multi-select.d.ts.map +1 -0
  105. package/dist/components/features/page-title/page-title.d.ts.map +1 -1
  106. package/dist/components/features/rich-text-editor/index.d.ts +4 -0
  107. package/dist/components/features/rich-text-editor/index.d.ts.map +1 -0
  108. package/dist/components/features/rich-text-editor/rich-text-content.d.ts +3 -0
  109. package/dist/components/features/rich-text-editor/rich-text-content.d.ts.map +1 -0
  110. package/dist/components/features/rich-text-editor/rich-text-editor.d.ts +28 -0
  111. package/dist/components/features/rich-text-editor/rich-text-editor.d.ts.map +1 -0
  112. package/dist/components/features/rich-text-editor/toolbar/bold-toolbar.d.ts +2 -0
  113. package/dist/components/features/rich-text-editor/toolbar/bold-toolbar.d.ts.map +1 -0
  114. package/dist/components/features/rich-text-editor/toolbar/italic-toolbar.d.ts +2 -0
  115. package/dist/components/features/rich-text-editor/toolbar/italic-toolbar.d.ts.map +1 -0
  116. package/dist/components/features/rich-text-editor/toolbar/link-toolbar.d.ts +2 -0
  117. package/dist/components/features/rich-text-editor/toolbar/link-toolbar.d.ts.map +1 -0
  118. package/dist/components/features/rich-text-editor/toolbar/strike-toolbar.d.ts +2 -0
  119. package/dist/components/features/rich-text-editor/toolbar/strike-toolbar.d.ts.map +1 -0
  120. package/dist/components/features/rich-text-editor/toolbar/toolbar-button.d.ts +17 -0
  121. package/dist/components/features/rich-text-editor/toolbar/toolbar-button.d.ts.map +1 -0
  122. package/dist/components/features/rich-text-editor/toolbar/toolbar.d.ts +6 -0
  123. package/dist/components/features/rich-text-editor/toolbar/toolbar.d.ts.map +1 -0
  124. package/dist/components/features/rich-text-editor/toolbar/underline-toolbar.d.ts +2 -0
  125. package/dist/components/features/rich-text-editor/toolbar/underline-toolbar.d.ts.map +1 -0
  126. package/dist/components/features/rich-text-editor/types.d.ts +20 -0
  127. package/dist/components/features/rich-text-editor/types.d.ts.map +1 -0
  128. package/dist/components/features/tag-input/tag-input.d.ts +12 -1
  129. package/dist/components/features/tag-input/tag-input.d.ts.map +1 -1
  130. package/dist/components/features/task-queue/core/task-queue-dropdown.d.ts.map +1 -1
  131. package/dist/components/features/time-picker/time-picker.d.ts +1 -17
  132. package/dist/components/features/time-picker/time-picker.d.ts.map +1 -1
  133. package/dist/components/features/time-picker/types.d.ts +20 -18
  134. package/dist/components/features/time-picker/types.d.ts.map +1 -1
  135. package/dist/components/features/time-picker/use-time-slots.d.ts +10 -0
  136. package/dist/components/features/time-picker/use-time-slots.d.ts.map +1 -0
  137. package/dist/components/features/time-range-picker/components/absolute-range-panel.d.ts.map +1 -1
  138. package/dist/components/features/time-range-picker/time-range-picker.d.ts.map +1 -1
  139. package/dist/data-table/index.mjs +60 -175
  140. package/dist/date-picker/index.mjs +2 -2
  141. package/dist/date-time-picker/index.mjs +1 -1
  142. package/dist/{date-time-picker-BomrW07W.mjs → date-time-picker-DKOxrhmc.mjs} +64 -49
  143. package/dist/dropdown/index.mjs +109 -1
  144. package/dist/dropzone/index.mjs +1 -1
  145. package/dist/empty-content/index.mjs +1 -1
  146. package/dist/form/adapters/conform/index.mjs +2 -2
  147. package/dist/form/adapters/rhf/index.mjs +2 -2
  148. package/dist/form/index.mjs +2 -2
  149. package/dist/form/stepper/index.mjs +3 -3
  150. package/dist/{form-B3rQ4CH9.mjs → form-CCNN9VtJ.mjs} +27 -30
  151. package/dist/grid/index.mjs +1 -1
  152. package/dist/hooks/index.d.ts +1 -0
  153. package/dist/hooks/index.d.ts.map +1 -1
  154. package/dist/hooks/index.mjs +4 -3
  155. package/dist/hooks/use-breakpoint.d.ts +9 -0
  156. package/dist/hooks/use-breakpoint.d.ts.map +1 -0
  157. package/dist/index.mjs +49 -42
  158. package/dist/input-number/index.mjs +1 -1
  159. package/dist/loader-overlay/index.mjs +1 -1
  160. package/dist/map/index.mjs +1 -1
  161. package/dist/{map-CWIQ-eql.mjs → map-qo7bY_g_.mjs} +83 -4
  162. package/dist/mobile-sheet/index.mjs +2 -0
  163. package/dist/mobile-sheet-BxMvkzAj.mjs +61 -0
  164. package/dist/more-actions/index.mjs +3 -2
  165. package/dist/more-actions-Ca5qqd0H.mjs +49 -0
  166. package/dist/multi-select/index.mjs +2 -0
  167. package/dist/multi-select-DM_dxnSV.mjs +235 -0
  168. package/dist/page-title/index.mjs +1 -1
  169. package/dist/{page-title-ChsnpBiH.mjs → page-title-ChLiv6gB.mjs} +3 -2
  170. package/dist/popover/index.mjs +1 -1
  171. package/dist/radio-group/index.mjs +1 -1
  172. package/dist/responsive-dropdown/index.mjs +2 -0
  173. package/dist/responsive-dropdown-IFroDgKn.mjs +53 -0
  174. package/dist/responsive-popover/index.mjs +2 -0
  175. package/dist/responsive-popover-D-t9bxSN.mjs +61 -0
  176. package/dist/rich-text-editor/index.mjs +2 -0
  177. package/dist/rich-text-editor-CQH_U4T5.mjs +293 -0
  178. package/dist/select/index.mjs +1 -1
  179. package/dist/sheet/index.mjs +2 -2
  180. package/dist/{sheet-BzXksqYY.mjs → sheet-LhUgozvg.mjs} +1 -1
  181. package/dist/sidebar/index.mjs +1 -1
  182. package/dist/{sidebar-BnhnjvfO.mjs → sidebar-B8LQJiNI.mjs} +3 -3
  183. package/dist/skeleton/index.mjs +1 -1
  184. package/dist/{skeleton-D1MUhAVo.mjs → skeleton-D4HOEiOZ.mjs} +1 -1
  185. package/dist/spinner/index.mjs +1 -1
  186. package/dist/stepper/index.mjs +1 -1
  187. package/dist/styles/canela.css +23 -0
  188. package/dist/styles/fonts/CanelaText-Regular.ttf +0 -0
  189. package/dist/styles/tokens/figma-tokens.css +4 -0
  190. package/dist/switch/index.mjs +1 -1
  191. package/dist/table/index.mjs +1 -1
  192. package/dist/tag-input/index.mjs +1 -1
  193. package/dist/{tag-input-T9cUX9-G.mjs → tag-input-Bf4GMptp.mjs} +29 -14
  194. package/dist/task-queue/index.mjs +1 -1
  195. package/dist/{task-queue-dropdown-Wcbj-f0V.mjs → task-queue-dropdown-D-LncEWm.mjs} +39 -39
  196. package/dist/textarea/index.mjs +1 -1
  197. package/dist/theme/index.mjs +1 -1
  198. package/dist/time-picker/index.mjs +1 -1
  199. package/dist/time-picker-BZF5jbF6.mjs +99 -0
  200. package/dist/{to-api-format-Bh3c01gr.mjs → to-api-format-CgKcC9SK.mjs} +144 -119
  201. package/dist/toast/index.mjs +2 -2
  202. package/dist/{toast-DpxlFNNx.mjs → toast-DDdLgY53.mjs} +1 -1
  203. package/dist/tooltip/index.mjs +1 -1
  204. package/dist/{tooltip-Cruvl5F6.mjs → tooltip-a7NTDCWw.mjs} +74 -17
  205. package/dist/transfer/index.mjs +1 -1
  206. package/dist/{types-BZNk3q65.mjs → types-CKIe2WlV.mjs} +2 -2
  207. package/dist/typography/index.mjs +1 -1
  208. package/dist/use-breakpoint-DGcVmB3c.mjs +36 -0
  209. package/dist/{use-copy-to-clipboard-uNeeVHC4.mjs → use-copy-to-clipboard-D7KyLIAt.mjs} +1 -1
  210. package/dist/use-date-constraints-R3H4lIoT.mjs +41 -0
  211. package/dist/use-option-picker-BXQOfyrK.mjs +215 -0
  212. package/dist/utils/index.d.ts +1 -0
  213. package/dist/utils/index.d.ts.map +1 -1
  214. package/dist/utils/index.mjs +2 -1
  215. package/dist/utils/timezone.d.ts +19 -0
  216. package/dist/utils/timezone.d.ts.map +1 -0
  217. package/dist/utils-BwB1mIdZ.mjs +35 -0
  218. package/dist/visually-hidden/index.mjs +1 -1
  219. package/package.json +61 -6
  220. package/dist/autocomplete-CkYJueBL.mjs +0 -293
  221. package/dist/combobox/index.mjs +0 -2
  222. package/dist/combobox-B-C9lJeD.mjs +0 -97
  223. package/dist/components/features/combobox/combobox.d.ts +0 -27
  224. package/dist/components/features/combobox/combobox.d.ts.map +0 -1
  225. package/dist/components/features/combobox/index.d.ts +0 -3
  226. package/dist/components/features/combobox/index.d.ts.map +0 -1
  227. package/dist/components/features/combobox/types.d.ts +0 -84
  228. package/dist/components/features/combobox/types.d.ts.map +0 -1
  229. package/dist/dropdown-DZiAt-jS.mjs +0 -110
  230. package/dist/dropdown-menu-lALvDnab.mjs +0 -85
  231. package/dist/more-actions-ILnEZq_E.mjs +0 -52
  232. package/dist/time-picker-BoF7pZZ2.mjs +0 -43
  233. /package/dist/{adapter-context-rWveHhDd.mjs → adapter-context-NyGTDZYq.mjs} +0 -0
  234. /package/dist/{col-1T0Q3SlH.mjs → col-DISdGlqY.mjs} +0 -0
  235. /package/dist/{dropzone-ogtpQ4fy.mjs → dropzone-Bt0plEuw.mjs} +0 -0
  236. /package/dist/{empty-content-C63GPJ5d.mjs → empty-content-CBh5bbtJ.mjs} +0 -0
  237. /package/dist/{form-context-Ccxm-wqL.mjs → form-context-CeKyvO-A.mjs} +0 -0
  238. /package/dist/{hooks-D8r2M2U6.mjs → hooks-DQXVwbrs.mjs} +0 -0
  239. /package/dist/{input-number-a7uydAsw.mjs → input-number-Diu-C6d5.mjs} +0 -0
  240. /package/dist/{loader-overlay-BTFdkp7W.mjs → loader-overlay-C2WDla6V.mjs} +0 -0
  241. /package/dist/{map-leaflet-imports-CRSKA79m.mjs → map-leaflet-imports-yWwH4CHB.mjs} +0 -0
  242. /package/dist/{popover-FJAcbYoH.mjs → popover-JOuXJOZ2.mjs} +0 -0
  243. /package/dist/{radio-group-CiITR0LO.mjs → radio-group-70UjJBb5.mjs} +0 -0
  244. /package/dist/{select-CiLR_DiQ.mjs → select-zxwykvQn.mjs} +0 -0
  245. /package/dist/{sheet-Di3b-oPu.mjs → sheet-DVEToCVY.mjs} +0 -0
  246. /package/dist/{skeleton-BKl4mfJt.mjs → skeleton-D2xuJdE1.mjs} +0 -0
  247. /package/dist/{spinner-OyOf9-Yu.mjs → spinner-CgPI3DDi.mjs} +0 -0
  248. /package/dist/{stepper-DvIOp0hh.mjs → stepper-Beb-zbdL.mjs} +0 -0
  249. /package/dist/{switch-DQJQhPIQ.mjs → switch-DcSF42Kc.mjs} +0 -0
  250. /package/dist/{table-Cdsh-39-.mjs → table-DWGT4cqh.mjs} +0 -0
  251. /package/dist/{textarea-BwD-MmTV.mjs → textarea-BoChBcFz.mjs} +0 -0
  252. /package/dist/{themes-DG1md8FI.mjs → themes-CAiN4b6G.mjs} +0 -0
  253. /package/dist/{toast-BWnN5fax.mjs → toast-D5XD7goD.mjs} +0 -0
  254. /package/dist/{transfer-46C-rFFW.mjs → transfer-CoGPwOc6.mjs} +0 -0
  255. /package/dist/{typography-ClB8k55E.mjs → typography-TRKP_CLT.mjs} +0 -0
  256. /package/dist/{use-display-touched-I39aXEBD.mjs → use-display-touched-C-afz17j.mjs} +0 -0
  257. /package/dist/{visuallyhidden-BLUsJpYH.mjs → visuallyhidden-BHOPczmW.mjs} +0 -0
@@ -0,0 +1,235 @@
1
+ import { t as cn } from "./cn-D2KYQ917.mjs";
2
+ import { t as Badge } from "./badge-DJR33ftJ.mjs";
3
+ import { t as Separator } from "./separator-DXVTncCK.mjs";
4
+ import { t as ResponsivePopover } from "./responsive-popover-D-t9bxSN.mjs";
5
+ import { t as LoaderOverlay } from "./loader-overlay-C2WDla6V.mjs";
6
+ import { n as OptionList, t as useOptionPicker } from "./use-option-picker-BXQOfyrK.mjs";
7
+ import { cva } from "class-variance-authority";
8
+ import { CheckIcon, ChevronDown, WandSparkles, XCircle, XIcon } from "lucide-react";
9
+ import * as React$1 from "react";
10
+ import { useEffect } from "react";
11
+ import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
12
+ //#region src/components/features/multi-select/multi-select.tsx
13
+ /**
14
+ * Variants for the multi-select component to handle different styles.
15
+ * Uses class-variance-authority (cva) to define different styles based on "variant" prop.
16
+ */
17
+ const multiSelectVariants = cva("flex items-center gap-1 rounded-md border px-2 py-1 text-xs transition-colors whitespace-nowrap", {
18
+ variants: { variant: {
19
+ default: "border-input-border bg-input-background/80 text-input-foreground",
20
+ secondary: "border-secondary/40 bg-secondary/20 text-secondary-foreground",
21
+ destructive: "border-destructive/60 bg-destructive/20 text-destructive",
22
+ inverted: "border-transparent bg-foreground text-background"
23
+ } },
24
+ defaultVariants: { variant: "default" }
25
+ });
26
+ const EMPTY_ARRAY = [];
27
+ function MultiSelect({ options, onValueChange, variant, defaultValue = EMPTY_ARRAY, value, placeholder = "Select options", animation = 0, maxCount = 3, modalPopover = false, className, boxClassName, actions, onBadgeClick, badgeClassName, clickableBadges = false, showCloseButton = true, showClearButton = true, showSelectAll = false, disabled = false, id, name, isLoading = false, emptyContent = "No results found.", responsive = true, sheetTitle }) {
28
+ const [isPopoverOpen, setIsPopoverOpen] = React$1.useState(false);
29
+ const [isAnimating, setIsAnimating] = React$1.useState(false);
30
+ const [internalValues, setInternalValues] = React$1.useState(defaultValue);
31
+ useEffect(() => {
32
+ if (value === void 0 && defaultValue) setInternalValues(defaultValue);
33
+ }, [defaultValue]);
34
+ const picker = useOptionPicker({
35
+ multiple: true,
36
+ options,
37
+ value,
38
+ defaultValue,
39
+ onValueChange: (next) => {
40
+ if (value === void 0) setInternalValues(next);
41
+ onValueChange(next);
42
+ },
43
+ open: isPopoverOpen,
44
+ onOpenChange: setIsPopoverOpen
45
+ });
46
+ const currentSelectedValues = value !== void 0 ? value : internalValues;
47
+ const handleClear = () => {
48
+ picker.clear();
49
+ if (value === void 0) setInternalValues([]);
50
+ };
51
+ const clearExtraOptions = () => {
52
+ const next = currentSelectedValues.slice(0, maxCount);
53
+ if (value === void 0) setInternalValues(next);
54
+ onValueChange(next);
55
+ };
56
+ const allSelected = options.length > 0 && currentSelectedValues.length === options.length;
57
+ const toggleAll = () => {
58
+ if (allSelected) handleClear();
59
+ else {
60
+ const allValues = options.map((o) => o.value);
61
+ if (value === void 0) setInternalValues(allValues);
62
+ onValueChange(allValues);
63
+ }
64
+ };
65
+ const header = showSelectAll ? /* @__PURE__ */ jsxs("div", {
66
+ role: "button",
67
+ tabIndex: 0,
68
+ className: "flex cursor-pointer items-center gap-2 px-3 py-2 text-sm",
69
+ onClick: toggleAll,
70
+ onKeyDown: (e) => {
71
+ if (e.key === "Enter" || e.key === " ") toggleAll();
72
+ },
73
+ children: [/* @__PURE__ */ jsx("div", {
74
+ className: cn("border-primary mr-2 flex size-4 items-center justify-center rounded-sm border", allSelected ? "bg-primary text-primary-foreground" : "opacity-50 [&_svg]:invisible"),
75
+ children: /* @__PURE__ */ jsx(CheckIcon, { className: "size-4" })
76
+ }), /* @__PURE__ */ jsx("span", { children: "(Select All)" })]
77
+ }) : void 0;
78
+ const footer = showClearButton && currentSelectedValues.length > 0 || showCloseButton || actions && actions.length > 0 ? /* @__PURE__ */ jsxs(Fragment$1, { children: [/* @__PURE__ */ jsx(Separator, {}), /* @__PURE__ */ jsxs("div", {
79
+ className: "flex items-center justify-between px-1 py-1",
80
+ children: [actions && actions.length > 0 && /* @__PURE__ */ jsx("div", {
81
+ className: "flex items-center gap-1",
82
+ children: actions.map((action) => /* @__PURE__ */ jsxs("button", {
83
+ type: "button",
84
+ onClick: action.onClick,
85
+ className: cn("flex cursor-pointer items-center gap-1 rounded px-2 py-1 text-sm", action.className),
86
+ children: [action.icon && /* @__PURE__ */ jsx(action.icon, { className: "text-muted-foreground mr-1 size-4" }), action.label]
87
+ }, action.label))
88
+ }), /* @__PURE__ */ jsxs("div", {
89
+ className: "flex flex-1 items-center justify-between",
90
+ children: [
91
+ showClearButton && currentSelectedValues.length > 0 && /* @__PURE__ */ jsx("button", {
92
+ type: "button",
93
+ onClick: handleClear,
94
+ className: "flex-1 cursor-pointer rounded px-2 py-1 text-sm",
95
+ children: "Clear"
96
+ }),
97
+ showClearButton && currentSelectedValues.length > 0 && showCloseButton && /* @__PURE__ */ jsx(Separator, {
98
+ orientation: "vertical",
99
+ className: "flex h-full min-h-6"
100
+ }),
101
+ showCloseButton && /* @__PURE__ */ jsx("button", {
102
+ type: "button",
103
+ onClick: () => setIsPopoverOpen(false),
104
+ className: "max-w-full flex-1 cursor-pointer rounded px-2 py-1 text-sm",
105
+ children: "Close"
106
+ })
107
+ ]
108
+ })]
109
+ })] }) : void 0;
110
+ const triggerJSX = /* @__PURE__ */ jsxs("button", {
111
+ type: "button",
112
+ disabled: disabled || isLoading,
113
+ "data-slot": "multi-select-trigger",
114
+ onClick: () => setIsPopoverOpen((prev) => !prev),
115
+ className: cn("text-input-foreground placeholder:text-input-placeholder", "border-input-border bg-input-background/50 relative flex min-h-10 w-full items-center justify-between rounded-lg border px-2 py-1 text-left text-sm transition-all", "focus-visible:border-input-focus-border focus-visible:shadow-(--input-focus-shadow)", "focus-visible:ring-0 focus-visible:ring-offset-0 focus-visible:outline-hidden", (disabled || isLoading) && "cursor-not-allowed opacity-50", className),
116
+ children: [currentSelectedValues.length > 0 && !isLoading && options.length > 0 ? /* @__PURE__ */ jsxs("div", {
117
+ className: "flex w-full items-center justify-between",
118
+ children: [/* @__PURE__ */ jsxs("div", {
119
+ className: "flex flex-wrap items-center gap-2",
120
+ children: [currentSelectedValues.slice(0, maxCount === -1 ? void 0 : maxCount).map((val) => {
121
+ const option = options.find((o) => o.value === val);
122
+ const IconComponent = option?.icon;
123
+ return /* @__PURE__ */ jsxs(Badge, {
124
+ className: cn(multiSelectVariants({ variant }), "truncate", isAnimating && "animate-bounce", clickableBadges && "cursor-pointer", badgeClassName),
125
+ style: { animationDuration: `${animation}s` },
126
+ onClick: (event) => {
127
+ if (clickableBadges) {
128
+ event.stopPropagation();
129
+ event.preventDefault();
130
+ onBadgeClick?.(option ?? {
131
+ label: "",
132
+ value: ""
133
+ });
134
+ }
135
+ },
136
+ children: [
137
+ IconComponent && /* @__PURE__ */ jsx(IconComponent, { className: "text-muted-foreground size-3" }),
138
+ /* @__PURE__ */ jsx("span", {
139
+ className: "max-w-[120px] truncate",
140
+ children: option?.label
141
+ }),
142
+ /* @__PURE__ */ jsx(XCircle, {
143
+ className: "text-muted-foreground ml-1 size-3 cursor-pointer",
144
+ onClick: (event) => {
145
+ event.stopPropagation();
146
+ event.preventDefault();
147
+ picker.toggle(val);
148
+ }
149
+ })
150
+ ]
151
+ }, val);
152
+ }), currentSelectedValues.length > maxCount && maxCount !== -1 && /* @__PURE__ */ jsxs(Badge, {
153
+ className: cn(multiSelectVariants({ variant }), "text-muted-foreground", isAnimating && "animate-bounce"),
154
+ style: { animationDuration: `${animation}s` },
155
+ children: [`+ ${currentSelectedValues.length - maxCount} more`, /* @__PURE__ */ jsx(XCircle, {
156
+ className: "text-muted-foreground ml-1 size-3 cursor-pointer",
157
+ onClick: (event) => {
158
+ event.stopPropagation();
159
+ clearExtraOptions();
160
+ }
161
+ })]
162
+ })]
163
+ }), /* @__PURE__ */ jsxs("div", {
164
+ className: "flex items-center justify-between",
165
+ children: [
166
+ /* @__PURE__ */ jsx(XIcon, {
167
+ className: "text-muted-foreground mx-2 h-4 cursor-pointer",
168
+ onClick: (event) => {
169
+ event.stopPropagation();
170
+ handleClear();
171
+ }
172
+ }),
173
+ /* @__PURE__ */ jsx(Separator, {
174
+ orientation: "vertical",
175
+ className: "flex h-full min-h-6"
176
+ }),
177
+ /* @__PURE__ */ jsx(ChevronDown, { className: "text-muted-foreground mx-2 h-4 cursor-pointer" })
178
+ ]
179
+ })]
180
+ }) : /* @__PURE__ */ jsxs("div", {
181
+ className: "flex w-full items-center justify-between px-2",
182
+ children: [/* @__PURE__ */ jsx("span", {
183
+ className: "text-muted-foreground text-sm",
184
+ children: placeholder
185
+ }), /* @__PURE__ */ jsx(ChevronDown, { className: "text-muted-foreground mx-1 h-4 cursor-pointer" })]
186
+ }), isLoading && /* @__PURE__ */ jsx(LoaderOverlay, { className: "rounded-lg" })]
187
+ });
188
+ return /* @__PURE__ */ jsxs(Fragment$1, { children: [
189
+ /* @__PURE__ */ jsx(ResponsivePopover, {
190
+ open: isPopoverOpen,
191
+ onOpenChange: setIsPopoverOpen,
192
+ responsive,
193
+ sheetTitle: sheetTitle ?? placeholder ?? "Select options",
194
+ trigger: triggerJSX,
195
+ align: "start",
196
+ contentClassName: cn("popover-content-width-full min-w-[300px] p-0", boxClassName),
197
+ modal: modalPopover,
198
+ onEscapeKeyDown: () => setIsPopoverOpen(false),
199
+ children: /* @__PURE__ */ jsx(OptionList, {
200
+ picker,
201
+ searchPlaceholder: `Search ${(placeholder ?? "options").toLowerCase()}...`,
202
+ emptyContent,
203
+ header,
204
+ footer,
205
+ loading: isLoading,
206
+ listClassName: cn("min-h-[200px] max-h-[50svh]", !responsive && "max-h-[250px]"),
207
+ renderOption: (opt, isSelected) => /* @__PURE__ */ jsxs(Fragment$1, { children: [
208
+ /* @__PURE__ */ jsx("div", {
209
+ className: cn("border-primary mr-2 flex size-4 items-center justify-center rounded-sm border", isSelected ? "bg-primary text-primary-foreground" : "opacity-50 [&_svg]:invisible"),
210
+ children: /* @__PURE__ */ jsx(CheckIcon, { className: "text-background size-4" })
211
+ }),
212
+ opt.icon && /* @__PURE__ */ jsx(opt.icon, { className: "text-muted-foreground mr-2 size-4" }),
213
+ /* @__PURE__ */ jsx("span", { children: opt.label })
214
+ ] })
215
+ })
216
+ }),
217
+ animation > 0 && currentSelectedValues.length > 0 && /* @__PURE__ */ jsx(WandSparkles, {
218
+ className: cn("bg-background text-foreground my-2 h-3 w-3 cursor-pointer", isAnimating ? "" : "text-muted-foreground"),
219
+ onClick: () => setIsAnimating(!isAnimating)
220
+ }),
221
+ /* @__PURE__ */ jsxs("select", {
222
+ name,
223
+ id,
224
+ multiple: true,
225
+ value: currentSelectedValues ?? [],
226
+ defaultValue: void 0,
227
+ className: "absolute top-0 left-0 h-0 w-0",
228
+ onChange: () => void 0,
229
+ children: [/* @__PURE__ */ jsx("option", { value: "" }), options.map((option, idx) => /* @__PURE__ */ jsx("option", { value: option.value }, `${option.value}-${idx}`))]
230
+ })
231
+ ] });
232
+ }
233
+ MultiSelect.displayName = "MultiSelect";
234
+ //#endregion
235
+ export { MultiSelect as t };
@@ -1,2 +1,2 @@
1
- import { t as PageTitle } from "../page-title-ChsnpBiH.mjs";
1
+ import { t as PageTitle } from "../page-title-ChLiv6gB.mjs";
2
2
  export { PageTitle };
@@ -8,10 +8,11 @@ function PageTitle({ title, description, actions, className, titleClassName, des
8
8
  children: [/* @__PURE__ */ jsxs("div", {
9
9
  className: cn("flex", isInline ? "flex-col justify-start gap-1" : "w-full flex-col gap-1"),
10
10
  children: [title && /* @__PURE__ */ jsx("span", {
11
- className: cn("text-2xl leading-none font-medium", titleClassName),
11
+ "data-e2e": "page-title",
12
+ className: cn("font-title text-3xl leading-none", titleClassName),
12
13
  children: title
13
14
  }), description && /* @__PURE__ */ jsx("div", {
14
- className: cn("text-sm font-normal", descriptionClassName),
15
+ className: cn("max-w-2xl text-sm font-normal", descriptionClassName),
15
16
  children: description
16
17
  })]
17
18
  }), actions && /* @__PURE__ */ jsx("div", {
@@ -1,2 +1,2 @@
1
- import { i as PopoverTrigger, n as PopoverAnchor, r as PopoverContent, t as Popover } from "../popover-FJAcbYoH.mjs";
1
+ import { i as PopoverTrigger, n as PopoverAnchor, r as PopoverContent, t as Popover } from "../popover-JOuXJOZ2.mjs";
2
2
  export { Popover, PopoverAnchor, PopoverContent, PopoverTrigger };
@@ -1,2 +1,2 @@
1
- import { n as RadioGroupItem, t as RadioGroup } from "../radio-group-CiITR0LO.mjs";
1
+ import { n as RadioGroupItem, t as RadioGroup } from "../radio-group-70UjJBb5.mjs";
2
2
  export { RadioGroup, RadioGroupItem };
@@ -0,0 +1,2 @@
1
+ import { t as ResponsiveDropdown } from "../responsive-dropdown-IFroDgKn.mjs";
2
+ export { ResponsiveDropdown };
@@ -0,0 +1,53 @@
1
+ import { t as cn } from "./cn-D2KYQ917.mjs";
2
+ import { r as useInSheet, t as MobileSheet } from "./mobile-sheet-BxMvkzAj.mjs";
3
+ import { t as useBreakpoint } from "./use-breakpoint-DGcVmB3c.mjs";
4
+ import { DropdownMenu, DropdownMenuContent, DropdownMenuTrigger } from "./dropdown/index.mjs";
5
+ import { isValidElement } from "react";
6
+ import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
7
+ import { Slot } from "@radix-ui/react-slot";
8
+ //#region src/components/base/responsive-dropdown/responsive-dropdown.tsx
9
+ function ResponsiveDropdown({ open, onOpenChange, trigger, children, sheetTitle, sheetDescription, sheetFooter, align = "end", contentClassName, onCloseAutoFocus, responsive = true }) {
10
+ const breakpoint = useBreakpoint();
11
+ const inSheet = useInSheet();
12
+ if (responsive && breakpoint === "mobile" && !inSheet) {
13
+ const handleTriggerClick = (e) => {
14
+ if (e && isValidElement(trigger)) trigger.props.onClick?.(e);
15
+ if (!e?.defaultPrevented) onOpenChange(!open);
16
+ };
17
+ const handleTriggerKeyDown = (e) => {
18
+ if (!e) return;
19
+ if (isValidElement(trigger)) trigger.props.onKeyDown?.(e);
20
+ if (!e.defaultPrevented && (e.key === "Enter" || e.key === " ")) {
21
+ e.preventDefault();
22
+ onOpenChange(!open);
23
+ }
24
+ };
25
+ return /* @__PURE__ */ jsxs(Fragment$1, { children: [/* @__PURE__ */ jsx(Slot, {
26
+ onClick: handleTriggerClick,
27
+ onKeyDown: handleTriggerKeyDown,
28
+ children: trigger
29
+ }), /* @__PURE__ */ jsx(MobileSheet, {
30
+ open,
31
+ onOpenChange,
32
+ title: sheetTitle,
33
+ description: sheetDescription,
34
+ footer: sheetFooter,
35
+ children
36
+ })] });
37
+ }
38
+ return /* @__PURE__ */ jsxs(DropdownMenu, {
39
+ open,
40
+ onOpenChange,
41
+ children: [/* @__PURE__ */ jsx(DropdownMenuTrigger, {
42
+ asChild: true,
43
+ children: trigger
44
+ }), /* @__PURE__ */ jsx(DropdownMenuContent, {
45
+ align,
46
+ className: cn("rounded-lg p-0", contentClassName),
47
+ onCloseAutoFocus,
48
+ children
49
+ })]
50
+ });
51
+ }
52
+ //#endregion
53
+ export { ResponsiveDropdown as t };
@@ -0,0 +1,2 @@
1
+ import { t as ResponsivePopover } from "../responsive-popover-D-t9bxSN.mjs";
2
+ export { ResponsivePopover };
@@ -0,0 +1,61 @@
1
+ import { t as cn } from "./cn-D2KYQ917.mjs";
2
+ import { r as useInSheet, t as MobileSheet } from "./mobile-sheet-BxMvkzAj.mjs";
3
+ import { i as PopoverTrigger, r as PopoverContent, t as Popover } from "./popover-JOuXJOZ2.mjs";
4
+ import { t as useBreakpoint } from "./use-breakpoint-DGcVmB3c.mjs";
5
+ import { isValidElement } from "react";
6
+ import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
7
+ import { Slot } from "@radix-ui/react-slot";
8
+ //#region src/components/base/responsive-popover/responsive-popover.tsx
9
+ function ResponsivePopover({ open, onOpenChange, trigger, children, sheetTitle, sheetDescription, sheetFooter, align = "start", side = "bottom", contentClassName, sideOffset, alignOffset, avoidCollisions, onOpenAutoFocus, onCloseAutoFocus, onInteractOutside, onEscapeKeyDown, responsive = true, modal }) {
10
+ const breakpoint = useBreakpoint();
11
+ const inSheet = useInSheet();
12
+ if (responsive && breakpoint === "mobile" && !inSheet) {
13
+ const handleTriggerClick = (e) => {
14
+ if (e && isValidElement(trigger)) trigger.props.onClick?.(e);
15
+ if (!e?.defaultPrevented) onOpenChange(!open);
16
+ };
17
+ const handleTriggerKeyDown = (e) => {
18
+ if (!e) return;
19
+ if (isValidElement(trigger)) trigger.props.onKeyDown?.(e);
20
+ if (!e.defaultPrevented && (e.key === "Enter" || e.key === " ")) {
21
+ e.preventDefault();
22
+ onOpenChange(!open);
23
+ }
24
+ };
25
+ return /* @__PURE__ */ jsxs(Fragment$1, { children: [/* @__PURE__ */ jsx(Slot, {
26
+ onClick: handleTriggerClick,
27
+ onKeyDown: handleTriggerKeyDown,
28
+ children: trigger
29
+ }), /* @__PURE__ */ jsx(MobileSheet, {
30
+ open,
31
+ onOpenChange,
32
+ title: sheetTitle,
33
+ description: sheetDescription,
34
+ footer: sheetFooter,
35
+ children
36
+ })] });
37
+ }
38
+ return /* @__PURE__ */ jsxs(Popover, {
39
+ open,
40
+ onOpenChange,
41
+ modal,
42
+ children: [/* @__PURE__ */ jsx(PopoverTrigger, {
43
+ asChild: true,
44
+ children: trigger
45
+ }), /* @__PURE__ */ jsx(PopoverContent, {
46
+ align,
47
+ side,
48
+ sideOffset,
49
+ alignOffset,
50
+ avoidCollisions,
51
+ className: cn("p-0", contentClassName),
52
+ onOpenAutoFocus,
53
+ onCloseAutoFocus,
54
+ onInteractOutside,
55
+ onEscapeKeyDown,
56
+ children
57
+ })]
58
+ });
59
+ }
60
+ //#endregion
61
+ export { ResponsivePopover as t };
@@ -0,0 +1,2 @@
1
+ import { n as useRichTextEditor, r as RichTextContent, t as RichTextEditor } from "../rich-text-editor-CQH_U4T5.mjs";
2
+ export { RichTextContent, RichTextEditor, useRichTextEditor };