@mastra/playground-ui 68.0.0-alpha.1 → 68.0.0-alpha.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (212) hide show
  1. package/dist/{DataCodeSection-CcPmJPTp.cjs → DataCodeSection-CFxXsQWH.cjs} +3 -3
  2. package/dist/DataCodeSection-CFxXsQWH.cjs.map +1 -0
  3. package/dist/{DataCodeSection-KJRyRD1Q.js → DataCodeSection-PY9XEg2C.js} +3 -3
  4. package/dist/DataCodeSection-PY9XEg2C.js.map +1 -0
  5. package/dist/{DataPanel-BwB1Oifd.cjs → DataPanel-Coc9h35I.cjs} +2 -2
  6. package/dist/{DataPanel-BwB1Oifd.cjs.map → DataPanel-Coc9h35I.cjs.map} +1 -1
  7. package/dist/{DataPanel-Bv4M17xO.js → DataPanel-IgB9D5PO.js} +2 -2
  8. package/dist/{DataPanel-Bv4M17xO.js.map → DataPanel-IgB9D5PO.js.map} +1 -1
  9. package/dist/{FilterBar-BO-vvvyq.js → FilterBar-BgW2dqRQ.js} +7 -7
  10. package/dist/FilterBar-BgW2dqRQ.js.map +1 -0
  11. package/dist/{FilterBar-Buw0tv51.cjs → FilterBar-CQl04O6t.cjs} +7 -7
  12. package/dist/FilterBar-CQl04O6t.cjs.map +1 -0
  13. package/dist/{MetricsTable-D-aZf3dk.cjs → MetricsTable-BSl81oNe.cjs} +44 -9
  14. package/dist/MetricsTable-BSl81oNe.cjs.map +1 -0
  15. package/dist/{MetricsTable-CRPeLHe1.js → MetricsTable-DID6LRoP.js} +44 -9
  16. package/dist/MetricsTable-DID6LRoP.js.map +1 -0
  17. package/dist/{ask-user-DdYz56qH.cjs → ask-user-C1p2PEYe.cjs} +2 -2
  18. package/dist/ask-user-C1p2PEYe.cjs.map +1 -0
  19. package/dist/{ask-user-B225wzWc.js → ask-user-DPznrqGO.js} +2 -2
  20. package/dist/ask-user-DPznrqGO.js.map +1 -0
  21. package/dist/chart-plot.css +5 -4
  22. package/dist/{combobox-CtCK0mNx.js → combobox-D21no8t5.js} +4 -4
  23. package/dist/{combobox-CtCK0mNx.js.map → combobox-D21no8t5.js.map} +1 -1
  24. package/dist/{combobox-CMx2ayFN.cjs → combobox-DIT_6xiG.cjs} +4 -4
  25. package/dist/combobox-DIT_6xiG.cjs.map +1 -0
  26. package/dist/{combobox-parts-ScKcYjMR.cjs → combobox-parts-C4phOq4t.cjs} +2 -2
  27. package/dist/combobox-parts-C4phOq4t.cjs.map +1 -0
  28. package/dist/{combobox-parts-C1CugUAU.js → combobox-parts-D90ir0Py.js} +3 -3
  29. package/dist/combobox-parts-D90ir0Py.js.map +1 -0
  30. package/dist/components/Combobox.cjs.js +2 -2
  31. package/dist/components/Combobox.es.js +2 -2
  32. package/dist/components/Command.cjs.js +1 -1
  33. package/dist/components/Command.cjs.js.map +1 -1
  34. package/dist/components/Command.es.js +1 -1
  35. package/dist/components/Command.es.js.map +1 -1
  36. package/dist/components/DataCodeSection.cjs.js +1 -1
  37. package/dist/components/DataCodeSection.es.js +1 -1
  38. package/dist/components/DataList.cjs.js +1 -1
  39. package/dist/components/DataList.es.js +1 -1
  40. package/dist/components/DataPanel.cjs.js +1 -1
  41. package/dist/components/DataPanel.es.js +1 -1
  42. package/dist/components/DateTimePicker.cjs.js +1 -1
  43. package/dist/components/DateTimePicker.cjs.js.map +1 -1
  44. package/dist/components/DateTimePicker.es.js +1 -1
  45. package/dist/components/DateTimePicker.es.js.map +1 -1
  46. package/dist/components/FilterBar.cjs.js +3 -3
  47. package/dist/components/FilterBar.es.js +3 -3
  48. package/dist/components/FormFieldBlocks.cjs.js +1 -1
  49. package/dist/components/FormFieldBlocks.cjs.js.map +1 -1
  50. package/dist/components/FormFieldBlocks.es.js +1 -1
  51. package/dist/components/FormFieldBlocks.es.js.map +1 -1
  52. package/dist/components/MetricsTable.cjs.js +1 -1
  53. package/dist/components/MetricsTable.es.js +1 -1
  54. package/dist/components/PropertyFilter.cjs.js +3 -3
  55. package/dist/components/PropertyFilter.cjs.js.map +1 -1
  56. package/dist/components/PropertyFilter.es.js +3 -3
  57. package/dist/components/PropertyFilter.es.js.map +1 -1
  58. package/dist/components/SavedViews.cjs.js +1 -1
  59. package/dist/components/SavedViews.es.js +1 -1
  60. package/dist/components/Sidebar.cjs.js +8 -8
  61. package/dist/components/Sidebar.cjs.js.map +1 -1
  62. package/dist/components/Sidebar.es.js +9 -9
  63. package/dist/components/Sidebar.es.js.map +1 -1
  64. package/dist/components/ai/ask-user.cjs.js +1 -1
  65. package/dist/components/ai/ask-user.es.js +1 -1
  66. package/dist/domains/chat/tools/badges/ask-user-badge.cjs.js +1 -1
  67. package/dist/domains/chat/tools/badges/ask-user-badge.es.js +1 -1
  68. package/dist/domains/dashboards/kinds/table/table-view.cjs.js +1 -1
  69. package/dist/domains/dashboards/kinds/table/table-view.es.js +1 -1
  70. package/dist/domains/dashboards/metrics-dashboard.cjs.js +1 -1
  71. package/dist/domains/dashboards/metrics-dashboard.cjs.js.map +1 -1
  72. package/dist/domains/dashboards/metrics-dashboard.es.js +1 -1
  73. package/dist/domains/dashboards/metrics-dashboard.es.js.map +1 -1
  74. package/dist/domains/datasets/components/save-as-dataset-item-dialog.cjs.js +1 -1
  75. package/dist/domains/datasets/components/save-as-dataset-item-dialog.es.js +1 -1
  76. package/dist/domains/logs/components/log-data-panel.cjs.js +1 -1
  77. package/dist/domains/logs/components/log-data-panel.es.js +1 -1
  78. package/dist/domains/logs/components/logs-saved-views.cjs.js +1 -1
  79. package/dist/domains/logs/components/logs-saved-views.es.js +1 -1
  80. package/dist/domains/logs/components/logs-toolbar.cjs.js +1 -1
  81. package/dist/domains/logs/components/logs-toolbar.es.js +1 -1
  82. package/dist/domains/metrics/components/breakdown/breakdown-table.cjs.js +2 -2
  83. package/dist/domains/metrics/components/breakdown/breakdown-table.cjs.js.map +1 -1
  84. package/dist/domains/metrics/components/breakdown/breakdown-table.es.js +2 -2
  85. package/dist/domains/metrics/components/breakdown/breakdown-table.es.js.map +1 -1
  86. package/dist/domains/metrics/components/metrics-time-range-chip.cjs.js +1 -1
  87. package/dist/domains/metrics/components/metrics-time-range-chip.es.js +1 -1
  88. package/dist/domains/observability/saved-views/observability-saved-views.cjs.js +1 -1
  89. package/dist/domains/observability/saved-views/observability-saved-views.es.js +1 -1
  90. package/dist/domains/observability/saved-views.cjs.js +1 -1
  91. package/dist/domains/observability/saved-views.es.js +1 -1
  92. package/dist/domains/observability.cjs.js +1 -1
  93. package/dist/domains/observability.es.js +1 -1
  94. package/dist/domains/scores/components/score-data-panel.cjs.js +1 -1
  95. package/dist/domains/scores/components/score-data-panel.es.js +1 -1
  96. package/dist/domains/scores/components/span-scoring.cjs.js +3 -3
  97. package/dist/domains/scores/components/span-scoring.cjs.js.map +1 -1
  98. package/dist/domains/scores/components/span-scoring.es.js +3 -3
  99. package/dist/domains/scores/components/span-scoring.es.js.map +1 -1
  100. package/dist/domains/skills/skill-simple-form.cjs.js +1 -1
  101. package/dist/domains/skills/skill-simple-form.cjs.js.map +1 -1
  102. package/dist/domains/skills/skill-simple-form.es.js +1 -1
  103. package/dist/domains/skills/skill-simple-form.es.js.map +1 -1
  104. package/dist/domains/spans/components/spans-explorer-body.cjs.js +1 -1
  105. package/dist/domains/spans/components/spans-explorer-body.es.js +1 -1
  106. package/dist/domains/spans/components/spans-filter-bar.cjs.js +3 -3
  107. package/dist/domains/spans/components/spans-filter-bar.cjs.js.map +1 -1
  108. package/dist/domains/spans/components/spans-filter-bar.es.js +3 -3
  109. package/dist/domains/spans/components/spans-filter-bar.es.js.map +1 -1
  110. package/dist/domains/spans/hooks/use-spans-filter-bar.cjs.js +1 -1
  111. package/dist/domains/spans/hooks/use-spans-filter-bar.es.js +1 -1
  112. package/dist/domains/threads/components/threads-explorer-body.cjs.js +1 -1
  113. package/dist/domains/threads/components/threads-explorer-body.es.js +1 -1
  114. package/dist/domains/threads/components/threads-filter-bar.cjs.js +3 -3
  115. package/dist/domains/threads/components/threads-filter-bar.cjs.js.map +1 -1
  116. package/dist/domains/threads/components/threads-filter-bar.es.js +3 -3
  117. package/dist/domains/threads/components/threads-filter-bar.es.js.map +1 -1
  118. package/dist/domains/threads/hooks/use-threads-filter-bar.cjs.js +1 -1
  119. package/dist/domains/threads/hooks/use-threads-filter-bar.es.js +1 -1
  120. package/dist/domains/traces/components/feedback-thread.cjs.js +1 -1
  121. package/dist/domains/traces/components/feedback-thread.cjs.js.map +1 -1
  122. package/dist/domains/traces/components/feedback-thread.es.js +1 -1
  123. package/dist/domains/traces/components/feedback-thread.es.js.map +1 -1
  124. package/dist/domains/traces/components/span-data-panel-view.cjs.js +1 -1
  125. package/dist/domains/traces/components/span-data-panel-view.es.js +1 -1
  126. package/dist/domains/traces/components/span-summary-description.cjs.js +1 -1
  127. package/dist/domains/traces/components/span-summary-description.es.js +1 -1
  128. package/dist/domains/traces/components/thread-trace/thread-trace-details.cjs.js +1 -1
  129. package/dist/domains/traces/components/thread-trace/thread-trace-details.es.js +1 -1
  130. package/dist/domains/traces/components/trace-columns-menu.cjs.js +3 -3
  131. package/dist/domains/traces/components/trace-columns-menu.cjs.js.map +1 -1
  132. package/dist/domains/traces/components/trace-columns-menu.es.js +3 -3
  133. package/dist/domains/traces/components/trace-columns-menu.es.js.map +1 -1
  134. package/dist/domains/traces/components/trace-data-panel-view.cjs.js +2 -2
  135. package/dist/domains/traces/components/trace-data-panel-view.cjs.js.map +1 -1
  136. package/dist/domains/traces/components/trace-data-panel-view.es.js +2 -2
  137. package/dist/domains/traces/components/trace-data-panel-view.es.js.map +1 -1
  138. package/dist/domains/traces/components/trace-id-button.cjs.js +1 -1
  139. package/dist/domains/traces/components/trace-id-button.es.js +1 -1
  140. package/dist/domains/traces/components/trace-summary-description.cjs.js +1 -1
  141. package/dist/domains/traces/components/trace-summary-description.es.js +1 -1
  142. package/dist/domains/traces/components/trace-thread-panel.cjs.js +1 -1
  143. package/dist/domains/traces/components/trace-thread-panel.es.js +1 -1
  144. package/dist/domains/traces/components/traces-explorer/traces-explorer-filter-bar.cjs.js +3 -3
  145. package/dist/domains/traces/components/traces-explorer/traces-explorer-filter-bar.cjs.js.map +1 -1
  146. package/dist/domains/traces/components/traces-explorer/traces-explorer-filter-bar.es.js +3 -3
  147. package/dist/domains/traces/components/traces-explorer/traces-explorer-filter-bar.es.js.map +1 -1
  148. package/dist/domains/traces/components/traces-explorer/traces-explorer-saved-views.cjs.js +1 -1
  149. package/dist/domains/traces/components/traces-explorer/traces-explorer-saved-views.es.js +1 -1
  150. package/dist/domains/traces/components/traces-explorer/use-traces-filter-bar.cjs.js +1 -1
  151. package/dist/domains/traces/components/traces-explorer/use-traces-filter-bar.es.js +1 -1
  152. package/dist/domains/workflows/components/workflow-combobox.cjs.js +2 -2
  153. package/dist/domains/workflows/components/workflow-combobox.cjs.js.map +1 -1
  154. package/dist/domains/workflows/components/workflow-combobox.es.js +2 -2
  155. package/dist/domains/workflows/components/workflow-combobox.es.js.map +1 -1
  156. package/dist/domains/workflows/workflow/input/workflow-processor-input.cjs.js +1 -1
  157. package/dist/domains/workflows/workflow/input/workflow-processor-input.cjs.js.map +1 -1
  158. package/dist/domains/workflows/workflow/input/workflow-processor-input.es.js +1 -1
  159. package/dist/domains/workflows/workflow/input/workflow-processor-input.es.js.map +1 -1
  160. package/dist/domains/workspace/components/workspace-add-skill-dialog.cjs.js +1 -1
  161. package/dist/domains/workspace/components/workspace-add-skill-dialog.cjs.js.map +1 -1
  162. package/dist/domains/workspace/components/workspace-add-skill-dialog.es.js +1 -1
  163. package/dist/domains/workspace/components/workspace-add-skill-dialog.es.js.map +1 -1
  164. package/dist/{filter-bar-chip-B4sV4gDm.js → filter-bar-chip-CABeKrtf.js} +4 -4
  165. package/dist/{filter-bar-chip-B4sV4gDm.js.map → filter-bar-chip-CABeKrtf.js.map} +1 -1
  166. package/dist/{filter-bar-chip-CIEsWcEw.cjs → filter-bar-chip-Cg-UbIwP.cjs} +4 -4
  167. package/dist/{filter-bar-chip-CIEsWcEw.cjs.map → filter-bar-chip-Cg-UbIwP.cjs.map} +1 -1
  168. package/dist/{filter-bar-time-range-DvuaFnkI.cjs → filter-bar-time-range-BA-pXMlo.cjs} +2 -2
  169. package/dist/{filter-bar-time-range-DvuaFnkI.cjs.map → filter-bar-time-range-BA-pXMlo.cjs.map} +1 -1
  170. package/dist/{filter-bar-time-range-CXQMBgpz.js → filter-bar-time-range-mg9JeYue.js} +2 -2
  171. package/dist/{filter-bar-time-range-CXQMBgpz.js.map → filter-bar-time-range-mg9JeYue.js.map} +1 -1
  172. package/dist/layout/tabbed-container.cjs.js +1 -1
  173. package/dist/layout/tabbed-container.es.js +1 -1
  174. package/dist/{observability-saved-views-BBam8Fr5.js → observability-saved-views-CjKTEp1V.js} +3 -3
  175. package/dist/observability-saved-views-CjKTEp1V.js.map +1 -0
  176. package/dist/{observability-saved-views-BAzxxoAr.cjs → observability-saved-views-Daizz4tU.cjs} +3 -3
  177. package/dist/observability-saved-views-Daizz4tU.cjs.map +1 -0
  178. package/dist/primitives/chart-plot.cjs.js +8 -6
  179. package/dist/primitives/chart-plot.cjs.js.map +1 -1
  180. package/dist/primitives/chart-plot.es.js +8 -6
  181. package/dist/primitives/chart-plot.es.js.map +1 -1
  182. package/dist/primitives/control-icon.cjs.js.map +1 -1
  183. package/dist/primitives/control-icon.es.js.map +1 -1
  184. package/dist/{property-filter-applied-p3dTTDdb.js → property-filter-applied--U5EZdaA.js} +2 -2
  185. package/dist/property-filter-applied--U5EZdaA.js.map +1 -0
  186. package/dist/{property-filter-applied-BCeRLcXb.cjs → property-filter-applied-BkkIObRq.cjs} +2 -2
  187. package/dist/property-filter-applied-BkkIObRq.cjs.map +1 -0
  188. package/dist/src/ds/components/MetricsTable/metrics-table-rows.d.ts +10 -3
  189. package/dist/src/ds/components/MetricsTable/metrics-table.d.ts +1 -1
  190. package/dist/style.css +14 -1
  191. package/dist/{tabbed-container-DQU7pVio.cjs → tabbed-container-B4lCBgRP.cjs} +2 -2
  192. package/dist/{tabbed-container-DQU7pVio.cjs.map → tabbed-container-B4lCBgRP.cjs.map} +1 -1
  193. package/dist/{tabbed-container-5j6dhoRX.js → tabbed-container-DI1GI1Qv.js} +2 -2
  194. package/dist/{tabbed-container-5j6dhoRX.js.map → tabbed-container-DI1GI1Qv.js.map} +1 -1
  195. package/oxlint/index.js +90 -0
  196. package/package.json +8 -8
  197. package/theme.css +4 -3
  198. package/dist/DataCodeSection-CcPmJPTp.cjs.map +0 -1
  199. package/dist/DataCodeSection-KJRyRD1Q.js.map +0 -1
  200. package/dist/FilterBar-BO-vvvyq.js.map +0 -1
  201. package/dist/FilterBar-Buw0tv51.cjs.map +0 -1
  202. package/dist/MetricsTable-CRPeLHe1.js.map +0 -1
  203. package/dist/MetricsTable-D-aZf3dk.cjs.map +0 -1
  204. package/dist/ask-user-B225wzWc.js.map +0 -1
  205. package/dist/ask-user-DdYz56qH.cjs.map +0 -1
  206. package/dist/combobox-CMx2ayFN.cjs.map +0 -1
  207. package/dist/combobox-parts-C1CugUAU.js.map +0 -1
  208. package/dist/combobox-parts-ScKcYjMR.cjs.map +0 -1
  209. package/dist/observability-saved-views-BAzxxoAr.cjs.map +0 -1
  210. package/dist/observability-saved-views-BBam8Fr5.js.map +0 -1
  211. package/dist/property-filter-applied-BCeRLcXb.cjs.map +0 -1
  212. package/dist/property-filter-applied-p3dTTDdb.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"DateTimePicker.cjs.js","names":["DayPicker","cn","quietTextHover","useState","cn","Select","SelectTrigger","SelectValue","SelectContent","SelectItem","React","Popover","PopoverTrigger","PopoverContent","isValid","format","useDebouncedCallback","cn","Field","FieldLabel","Input","FieldError","formatDate","Button","X","Check","controlTriggerOpenStateFor","CalendarIcon"],"sources":["../../src/ds/components/DateTimePicker/date-picker.tsx","../../src/ds/components/DateTimePicker/time-picker.tsx","../../src/ds/components/DateTimePicker/date-time-picker.tsx"],"sourcesContent":["import * as React from 'react';\nimport { DayPicker } from 'react-day-picker';\nimport { quietTextHover } from '@/ds/primitives/typography';\nimport { cn } from '@/lib/utils';\n\nexport type CalendarProps = React.ComponentProps<typeof DayPicker>;\n\nexport function DatePicker({ className, classNames, showOutsideDays = true, ...props }: CalendarProps) {\n return (\n <DayPicker\n showOutsideDays={showOutsideDays}\n className={cn('p-3', className)}\n classNames={{\n months: 'flex flex-col space-y-4 sm:space-y-0 ',\n month: 'space-y-4 text-caption',\n caption: 'flex justify-between pt-1 items-center pl-2',\n caption_label: 'text-label text-foreground',\n nav: 'flex items-center',\n nav_button_previous: cn(\n quietTextHover,\n 'flex size-7 items-center justify-center rounded-md bg-transparent p-0 hover:bg-fill-subtle',\n ),\n nav_button_next: cn(\n quietTextHover,\n 'flex size-7 items-center justify-center rounded-md bg-transparent p-0 hover:bg-fill-subtle',\n ),\n dropdown_month: 'w-full border-collapse space-y-1',\n weeknumber: 'flex',\n day: cn(\n 'relative p-0 text-center focus-within:relative focus-within:z-20 [&:has([aria-selected])]:bg-fill [&:has([aria-selected].day-outside)]:bg-fill-subtle [&:has([aria-selected].day-range-end)]:rounded-r-md',\n props.mode === 'range'\n ? '[&:has(>.day-range-end)]:rounded-r-md [&:has(>.day-range-start)]:rounded-l-md first:[&:has([aria-selected])]:rounded-l-md last:[&:has([aria-selected])]:rounded-r-md'\n : '[&:has([aria-selected])]:rounded-md',\n 'size-8 p-0 text-caption hover:bg-fill-subtle aria-selected:opacity-100',\n ),\n day_range_start: 'day-range-start rounded-l-md',\n day_range_end: 'day-range-end rounded-r-md',\n day_selected: cn(\n 'bg-foreground! text-sidebar! hover:bg-foreground/90! focus:bg-foreground/90! focus:text-sidebar!',\n props.mode !== 'range' && 'rounded-md',\n ),\n day_today: 'bg-fill text-foreground',\n day_outside:\n 'day-outside text-muted-foreground opacity-50 aria-selected:bg-fill-subtle aria-selected:text-muted-foreground aria-selected:opacity-30',\n day_disabled: 'text-muted-foreground opacity-50',\n day_range_middle: 'aria-selected:bg-fill aria-selected:text-foreground',\n day_hidden: 'invisible',\n head_cell: 'text-meta text-muted-foreground',\n ...classNames,\n }}\n {...props}\n />\n );\n}\n","import { useEffect, useState } from 'react';\nimport { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/ds/components/Select';\nimport { cn } from '@/lib/utils';\n\nexport type TimePickerProps = {\n defaultValue?: string;\n onValueChange: (value: string) => void;\n className?: string;\n label?: string;\n};\n\nconst hourOptions = ['12', '1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11'];\nconst minuteOptions = ['00', '15', '30', '45', '59'];\nconst timePeriodOptions = ['AM', 'PM'];\n\nexport function TimePicker({ defaultValue, onValueChange, className, label = 'Time' }: TimePickerProps) {\n const [hour, setHour] = useState<string>('12');\n const [minute, setMinute] = useState<string>('00');\n const [timePeriod, setTimePeriod] = useState('AM');\n\n useEffect(() => {\n if (defaultValue) {\n const timeRegex = /^(\\d{1,2}):(\\d{2})(?::\\d{2})?\\s*(AM|PM|am|pm)?$/;\n const match = defaultValue.match(timeRegex);\n\n if (match) {\n const rawHour = match[1];\n const rawMinute = match[2];\n if (rawHour === undefined || rawMinute === undefined) return;\n\n let parsedHour = parseInt(rawHour, 10);\n const parsedMinute = parseInt(rawMinute, 10);\n const period = match[3]?.toUpperCase();\n\n if (parsedHour >= 1 && parsedHour <= 12 && parsedMinute >= 0 && parsedMinute <= 59) {\n setHour(parsedHour.toString());\n setMinute(parsedMinute === 0 ? '00' : parsedMinute.toString());\n setTimePeriod(period || 'AM');\n }\n }\n }\n }, [defaultValue]);\n\n const handleHourChange = (val: string) => {\n const nextHour = hourOptions[+val];\n if (nextHour === undefined) return;\n setHour(nextHour);\n onValueChange(`${nextHour}:${minute} ${timePeriod}`.trim());\n };\n\n const handleMinuteChange = (val: string) => {\n const nextMinute = minuteOptions[+val];\n if (nextMinute === undefined) return;\n setMinute(nextMinute);\n onValueChange(`${hour}:${nextMinute} ${timePeriod}`.trim());\n };\n\n const handleTimePeriodChange = (val: string) => {\n const nextPeriod = timePeriodOptions[+val];\n if (nextPeriod === undefined) return;\n setTimePeriod(nextPeriod);\n onValueChange(`${hour}:${minute} ${nextPeriod}`.trim());\n };\n\n return (\n <div role=\"group\" aria-label={label} className={cn('flex items-center gap-2', className)}>\n <TimePartSelect label=\"Hour\" options={hourOptions} value={hour} onValueChange={handleHourChange} />\n :\n <TimePartSelect label=\"Minute\" options={minuteOptions} value={minute} onValueChange={handleMinuteChange} />\n <TimePartSelect\n label=\"AM or PM\"\n options={timePeriodOptions}\n value={timePeriod}\n onValueChange={handleTimePeriodChange}\n />\n </div>\n );\n}\n\ntype TimePartSelectProps = {\n label: string;\n options: readonly string[];\n value: string;\n onValueChange: (index: string) => void;\n};\n\nfunction TimePartSelect({ label, options, value, onValueChange }: TimePartSelectProps) {\n return (\n <Select value={options.indexOf(value).toString()} onValueChange={onValueChange}>\n <SelectTrigger size=\"sm\" aria-label={label}>\n <SelectValue placeholder=\"Select...\" />\n </SelectTrigger>\n <SelectContent>\n {options.map((option, idx) => (\n <SelectItem key={option} value={`${idx}`}>\n {option}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n );\n}\n","import { format, formatDate, isValid } from 'date-fns';\nimport { CalendarIcon, Check, X } from 'lucide-react';\nimport * as React from 'react';\nimport type { DayPickerSingleProps } from 'react-day-picker';\nimport { useDebouncedCallback } from 'use-debounce';\n\nimport { DatePicker } from './date-picker';\nimport { TimePicker } from './time-picker';\nimport { Button } from '@/ds/components/Button';\nimport type { ButtonProps } from '@/ds/components/Button';\nimport { Field, FieldError, FieldLabel } from '@/ds/components/Field';\nimport { Input } from '@/ds/components/Input';\nimport { Popover, PopoverContent, PopoverTrigger } from '@/ds/components/Popover';\nimport { controlTriggerOpenStateFor } from '@/ds/primitives/control-size';\nimport { fieldTriggerStyle } from '@/ds/primitives/form-element';\nimport { cn } from '@/lib/utils';\n\ntype CommonProps = Omit<DayPickerSingleProps, 'mode' | 'selected' | 'onSelect'> & {\n value: Date | undefined | null;\n minValue?: Date | null;\n maxValue?: Date | null;\n defaultTimeStrValue?: string;\n onValueChange: (date: Date | undefined) => void;\n};\n\ntype DefaultTriggerLook = Pick<ButtonProps, 'variant' | 'size'>;\n\nexport type DateTimePickerProps =\n | (CommonProps & DefaultTriggerLook & { children?: never; className?: string; placeholder?: string })\n | (CommonProps & {\n children: React.ReactNode;\n className?: never;\n placeholder?: string;\n variant?: never;\n size?: never;\n });\n\nexport const DateTimePicker: React.FC<DateTimePickerProps> = ({\n value,\n minValue,\n maxValue,\n defaultTimeStrValue,\n onValueChange,\n children,\n className,\n placeholder,\n variant,\n size,\n ...props\n}) => {\n const [openPopover, setOpenPopover] = React.useState(false);\n\n return (\n <Popover open={openPopover} onOpenChange={setOpenPopover}>\n <PopoverTrigger asChild>\n {children ? (\n children\n ) : (\n <DefaultTrigger\n value={value}\n placeholder={placeholder}\n variant={variant}\n size={size}\n className={className}\n data-testid=\"datepicker-button\"\n />\n )}\n </PopoverTrigger>\n <PopoverContent\n className=\"backdrop-blur-4xl w-auto max-w-66 bg-muted p-0!\"\n align=\"start\"\n data-testid=\"datepicker-calendar\"\n >\n <DateTimePickerContent\n value={value}\n minValue={minValue}\n maxValue={maxValue}\n onValueChange={onValueChange}\n setOpenPopover={setOpenPopover}\n defaultTimeStrValue={defaultTimeStrValue}\n {...props}\n />\n </PopoverContent>\n </Popover>\n );\n};\n\nfunction getCompoundDate({ date, timeStr = '' }: { date: Date; timeStr?: string }): Date | null {\n if (!isValid(date)) {\n return null;\n }\n\n if (timeStr) {\n const dateStr = format(date, 'yyyy-MM-dd');\n const newDate = new Date(`${dateStr} ${timeStr}`);\n if (isValid(newDate)) {\n return newDate;\n }\n }\n\n return date;\n}\n\nexport const DateTimePickerContent = ({\n value,\n minValue,\n maxValue,\n onValueChange,\n setOpenPopover,\n placeholder,\n className,\n defaultTimeStrValue,\n ...props\n}: CommonProps & {\n setOpenPopover?: (open: boolean) => void;\n placeholder?: string;\n className?: string;\n}) => {\n const [localErrorMsg, setLocalErrorMsg] = React.useState<string | null>(null);\n const [dateInputValue, setDateInputValue] = React.useState<string>(\n value ? format(getCompoundDate({ date: value, timeStr: defaultTimeStrValue }) || '', 'PP p') : '',\n );\n const [timeStrValue, setTimeStrValue] = React.useState<string>(defaultTimeStrValue || '');\n const [selected, setSelected] = React.useState<Date | undefined>(value ? new Date(value) : undefined);\n\n const debouncedDateUpdate = useDebouncedCallback((date: Date) => {\n if (isValid(date)) {\n setSelected(date);\n onValueChange?.(date);\n setOpenPopover?.(false);\n }\n }, 500);\n\n const handleInputChange: React.ChangeEventHandler<HTMLInputElement> = e => {\n setDateInputValue(e.currentTarget.value);\n const date = new Date(e.currentTarget.value);\n debouncedDateUpdate(date);\n };\n\n const updateInputValue = (date: Date | string) => {\n if (isValid(date)) {\n if (maxValue && date > maxValue) {\n setLocalErrorMsg(`The selected date should be before ${format(maxValue, 'PP p')}`);\n setDateInputValue('');\n } else if (minValue && date < minValue) {\n setLocalErrorMsg(`The selected date should be after ${format(minValue, 'PP p')}`);\n setDateInputValue('');\n } else {\n setDateInputValue(format(date, 'PP p'));\n setLocalErrorMsg('');\n }\n } else {\n setDateInputValue('');\n setLocalErrorMsg('');\n }\n };\n\n const dateInputValueDate = new Date(dateInputValue);\n const dateInputValueIsValid = isValid(dateInputValueDate);\n const newValueDefined = dateInputValueIsValid && dateInputValueDate.getTime() !== value?.getTime();\n\n const handleDaySelect = (date: Date | undefined) => {\n setSelected(date);\n if (date) {\n const newDate = getCompoundDate({ date, timeStr: timeStrValue });\n updateInputValue(newDate || '');\n } else {\n updateInputValue('');\n }\n };\n\n const handleMonthSelect = (date: Date | undefined) => {\n setSelected(date);\n if (date) {\n const newDate = getCompoundDate({ date, timeStr: timeStrValue });\n updateInputValue(newDate || '');\n } else {\n updateInputValue('');\n }\n };\n\n const handleTimeStrChange = (val: string) => {\n setTimeStrValue(val);\n\n if (dateInputValueIsValid) {\n const newDate = getCompoundDate({ date: dateInputValueDate, timeStr: val });\n updateInputValue(newDate || '');\n }\n };\n\n const handleCancel = () => {\n setOpenPopover?.(false);\n };\n\n const handleApply = () => {\n if (isValid(dateInputValueDate)) {\n onValueChange(dateInputValueDate);\n }\n setOpenPopover?.(false);\n };\n\n const handleClear = () => {\n onValueChange(undefined);\n setSelected(undefined);\n setDateInputValue('');\n setTimeStrValue('');\n setOpenPopover?.(false);\n };\n\n return (\n <div\n aria-label=\"Choose date\"\n className={cn('relative flex flex-col', className)}\n onKeyDown={e => {\n e.stopPropagation();\n if (e.key === 'Escape') {\n setOpenPopover?.(false);\n }\n }}\n >\n <Field invalid={Boolean(localErrorMsg)} className=\"m-4 mb-0 w-auto!\">\n <FieldLabel className=\"sr-only\">Date</FieldLabel>\n <Input type=\"text\" value={dateInputValue} onChange={handleInputChange} placeholder={placeholder} />\n <FieldError>{localErrorMsg}</FieldError>\n </Field>\n\n <DatePicker\n mode=\"single\"\n month={selected}\n selected={selected}\n onMonthChange={handleMonthSelect}\n onSelect={handleDaySelect}\n {...props}\n />\n\n <TimePicker\n onValueChange={handleTimeStrChange}\n className=\"m-4 mt-0 w-auto\"\n defaultValue={value ? formatDate(new Date(value), 'hh:mm a') : defaultTimeStrValue}\n />\n\n <div className=\"m-4 mt-0 grid grid-cols-[1fr_2fr] gap-2\">\n {newValueDefined && (\n <Button icon={<X />} tabIndex={0} size=\"md\" onClick={handleClear} type=\"button\">\n Clear\n </Button>\n )}\n <Button\n icon={newValueDefined ? <Check /> : <X />}\n tabIndex={0}\n type=\"button\"\n size=\"md\"\n variant={newValueDefined ? 'primary' : 'default'}\n onClick={() => {\n dateInputValueIsValid ? handleApply() : handleCancel();\n }}\n >\n {newValueDefined ? `Apply` : `Cancel`}\n </Button>\n </div>\n </div>\n );\n};\n\ntype DefaultButtonProps = Pick<ButtonProps, 'variant' | 'size' | 'tooltip' | 'disabled'> & {\n className?: string;\n placeholder?: string;\n value: Date | undefined | null;\n};\n\nexport const DefaultTrigger = React.forwardRef<HTMLButtonElement, DefaultButtonProps>(\n ({ value, placeholder, variant = 'default', size, className, ...props }, ref) => {\n return (\n <Button\n ref={ref}\n variant={variant}\n size={size}\n className={cn(\n 'justify-start',\n variant === 'default' && fieldTriggerStyle,\n controlTriggerOpenStateFor(variant),\n className,\n )}\n icon={<CalendarIcon />}\n {...props}\n >\n {value ? (\n <span className=\"text-foreground\">{format(value, 'PP p')}</span>\n ) : (\n <span className=\"text-muted-foreground\">{placeholder ?? 'Pick a date'}</span>\n )}\n </Button>\n );\n },\n);\n"],"mappings":"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"}
1
+ {"version":3,"file":"DateTimePicker.cjs.js","names":["DayPicker","cn","quietTextHover","useState","cn","Select","SelectTrigger","SelectValue","SelectContent","SelectItem","React","Popover","PopoverTrigger","PopoverContent","isValid","format","useDebouncedCallback","cn","Field","FieldLabel","Input","FieldError","formatDate","Button","X","Check","controlTriggerOpenStateFor","CalendarIcon"],"sources":["../../src/ds/components/DateTimePicker/date-picker.tsx","../../src/ds/components/DateTimePicker/time-picker.tsx","../../src/ds/components/DateTimePicker/date-time-picker.tsx"],"sourcesContent":["import * as React from 'react';\nimport { DayPicker } from 'react-day-picker';\nimport { quietTextHover } from '@/ds/primitives/typography';\nimport { cn } from '@/lib/utils';\n\nexport type CalendarProps = React.ComponentProps<typeof DayPicker>;\n\nexport function DatePicker({ className, classNames, showOutsideDays = true, ...props }: CalendarProps) {\n return (\n <DayPicker\n showOutsideDays={showOutsideDays}\n className={cn('p-3', className)}\n classNames={{\n months: 'flex flex-col space-y-4 sm:space-y-0 ',\n month: 'space-y-4 text-caption',\n caption: 'flex justify-between pt-1 items-center pl-2',\n caption_label: 'text-label text-foreground',\n nav: 'flex items-center',\n nav_button_previous: cn(\n quietTextHover,\n 'flex size-7 items-center justify-center rounded-md bg-transparent p-0 hover:bg-fill-subtle',\n ),\n nav_button_next: cn(\n quietTextHover,\n 'flex size-7 items-center justify-center rounded-md bg-transparent p-0 hover:bg-fill-subtle',\n ),\n dropdown_month: 'w-full border-collapse space-y-1',\n weeknumber: 'flex',\n day: cn(\n 'relative p-0 text-center focus-within:relative focus-within:z-20 [&:has([aria-selected])]:bg-fill [&:has([aria-selected].day-outside)]:bg-fill-subtle [&:has([aria-selected].day-range-end)]:rounded-r-md',\n props.mode === 'range'\n ? '[&:has(>.day-range-end)]:rounded-r-md [&:has(>.day-range-start)]:rounded-l-md first:[&:has([aria-selected])]:rounded-l-md last:[&:has([aria-selected])]:rounded-r-md'\n : '[&:has([aria-selected])]:rounded-md',\n 'size-8 p-0 text-caption hover:bg-fill-subtle aria-selected:opacity-100',\n ),\n day_range_start: 'day-range-start rounded-l-md',\n day_range_end: 'day-range-end rounded-r-md',\n day_selected: cn(\n 'bg-foreground! text-sidebar! hover:bg-foreground/90! focus:bg-foreground/90! focus:text-sidebar!',\n props.mode !== 'range' && 'rounded-md',\n ),\n day_today: 'bg-fill text-foreground',\n day_outside:\n 'day-outside text-muted-foreground opacity-50 aria-selected:bg-fill-subtle aria-selected:text-muted-foreground aria-selected:opacity-30',\n day_disabled: 'text-muted-foreground opacity-50',\n day_range_middle: 'aria-selected:bg-fill aria-selected:text-foreground',\n day_hidden: 'invisible',\n head_cell: 'text-meta text-muted-foreground',\n ...classNames,\n }}\n {...props}\n />\n );\n}\n","import { useEffect, useState } from 'react';\nimport { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/ds/components/Select';\nimport { cn } from '@/lib/utils';\n\nexport type TimePickerProps = {\n defaultValue?: string;\n onValueChange: (value: string) => void;\n className?: string;\n label?: string;\n};\n\nconst hourOptions = ['12', '1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11'];\nconst minuteOptions = ['00', '15', '30', '45', '59'];\nconst timePeriodOptions = ['AM', 'PM'];\n\nexport function TimePicker({ defaultValue, onValueChange, className, label = 'Time' }: TimePickerProps) {\n const [hour, setHour] = useState<string>('12');\n const [minute, setMinute] = useState<string>('00');\n const [timePeriod, setTimePeriod] = useState('AM');\n\n useEffect(() => {\n if (defaultValue) {\n const timeRegex = /^(\\d{1,2}):(\\d{2})(?::\\d{2})?\\s*(AM|PM|am|pm)?$/;\n const match = defaultValue.match(timeRegex);\n\n if (match) {\n const rawHour = match[1];\n const rawMinute = match[2];\n if (rawHour === undefined || rawMinute === undefined) return;\n\n let parsedHour = parseInt(rawHour, 10);\n const parsedMinute = parseInt(rawMinute, 10);\n const period = match[3]?.toUpperCase();\n\n if (parsedHour >= 1 && parsedHour <= 12 && parsedMinute >= 0 && parsedMinute <= 59) {\n setHour(parsedHour.toString());\n setMinute(parsedMinute === 0 ? '00' : parsedMinute.toString());\n setTimePeriod(period || 'AM');\n }\n }\n }\n }, [defaultValue]);\n\n const handleHourChange = (val: string) => {\n const nextHour = hourOptions[+val];\n if (nextHour === undefined) return;\n setHour(nextHour);\n onValueChange(`${nextHour}:${minute} ${timePeriod}`.trim());\n };\n\n const handleMinuteChange = (val: string) => {\n const nextMinute = minuteOptions[+val];\n if (nextMinute === undefined) return;\n setMinute(nextMinute);\n onValueChange(`${hour}:${nextMinute} ${timePeriod}`.trim());\n };\n\n const handleTimePeriodChange = (val: string) => {\n const nextPeriod = timePeriodOptions[+val];\n if (nextPeriod === undefined) return;\n setTimePeriod(nextPeriod);\n onValueChange(`${hour}:${minute} ${nextPeriod}`.trim());\n };\n\n return (\n <div role=\"group\" aria-label={label} className={cn('flex items-center gap-2', className)}>\n <TimePartSelect label=\"Hour\" options={hourOptions} value={hour} onValueChange={handleHourChange} />\n :\n <TimePartSelect label=\"Minute\" options={minuteOptions} value={minute} onValueChange={handleMinuteChange} />\n <TimePartSelect\n label=\"AM or PM\"\n options={timePeriodOptions}\n value={timePeriod}\n onValueChange={handleTimePeriodChange}\n />\n </div>\n );\n}\n\ntype TimePartSelectProps = {\n label: string;\n options: readonly string[];\n value: string;\n onValueChange: (index: string) => void;\n};\n\nfunction TimePartSelect({ label, options, value, onValueChange }: TimePartSelectProps) {\n return (\n <Select value={options.indexOf(value).toString()} onValueChange={onValueChange}>\n <SelectTrigger size=\"sm\" aria-label={label}>\n <SelectValue placeholder=\"Select\" />\n </SelectTrigger>\n <SelectContent>\n {options.map((option, idx) => (\n <SelectItem key={option} value={`${idx}`}>\n {option}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n );\n}\n","import { format, formatDate, isValid } from 'date-fns';\nimport { CalendarIcon, Check, X } from 'lucide-react';\nimport * as React from 'react';\nimport type { DayPickerSingleProps } from 'react-day-picker';\nimport { useDebouncedCallback } from 'use-debounce';\n\nimport { DatePicker } from './date-picker';\nimport { TimePicker } from './time-picker';\nimport { Button } from '@/ds/components/Button';\nimport type { ButtonProps } from '@/ds/components/Button';\nimport { Field, FieldError, FieldLabel } from '@/ds/components/Field';\nimport { Input } from '@/ds/components/Input';\nimport { Popover, PopoverContent, PopoverTrigger } from '@/ds/components/Popover';\nimport { controlTriggerOpenStateFor } from '@/ds/primitives/control-size';\nimport { fieldTriggerStyle } from '@/ds/primitives/form-element';\nimport { cn } from '@/lib/utils';\n\ntype CommonProps = Omit<DayPickerSingleProps, 'mode' | 'selected' | 'onSelect'> & {\n value: Date | undefined | null;\n minValue?: Date | null;\n maxValue?: Date | null;\n defaultTimeStrValue?: string;\n onValueChange: (date: Date | undefined) => void;\n};\n\ntype DefaultTriggerLook = Pick<ButtonProps, 'variant' | 'size'>;\n\nexport type DateTimePickerProps =\n | (CommonProps & DefaultTriggerLook & { children?: never; className?: string; placeholder?: string })\n | (CommonProps & {\n children: React.ReactNode;\n className?: never;\n placeholder?: string;\n variant?: never;\n size?: never;\n });\n\nexport const DateTimePicker: React.FC<DateTimePickerProps> = ({\n value,\n minValue,\n maxValue,\n defaultTimeStrValue,\n onValueChange,\n children,\n className,\n placeholder,\n variant,\n size,\n ...props\n}) => {\n const [openPopover, setOpenPopover] = React.useState(false);\n\n return (\n <Popover open={openPopover} onOpenChange={setOpenPopover}>\n <PopoverTrigger asChild>\n {children ? (\n children\n ) : (\n <DefaultTrigger\n value={value}\n placeholder={placeholder}\n variant={variant}\n size={size}\n className={className}\n data-testid=\"datepicker-button\"\n />\n )}\n </PopoverTrigger>\n <PopoverContent\n className=\"backdrop-blur-4xl w-auto max-w-66 bg-muted p-0!\"\n align=\"start\"\n data-testid=\"datepicker-calendar\"\n >\n <DateTimePickerContent\n value={value}\n minValue={minValue}\n maxValue={maxValue}\n onValueChange={onValueChange}\n setOpenPopover={setOpenPopover}\n defaultTimeStrValue={defaultTimeStrValue}\n {...props}\n />\n </PopoverContent>\n </Popover>\n );\n};\n\nfunction getCompoundDate({ date, timeStr = '' }: { date: Date; timeStr?: string }): Date | null {\n if (!isValid(date)) {\n return null;\n }\n\n if (timeStr) {\n const dateStr = format(date, 'yyyy-MM-dd');\n const newDate = new Date(`${dateStr} ${timeStr}`);\n if (isValid(newDate)) {\n return newDate;\n }\n }\n\n return date;\n}\n\nexport const DateTimePickerContent = ({\n value,\n minValue,\n maxValue,\n onValueChange,\n setOpenPopover,\n placeholder,\n className,\n defaultTimeStrValue,\n ...props\n}: CommonProps & {\n setOpenPopover?: (open: boolean) => void;\n placeholder?: string;\n className?: string;\n}) => {\n const [localErrorMsg, setLocalErrorMsg] = React.useState<string | null>(null);\n const [dateInputValue, setDateInputValue] = React.useState<string>(\n value ? format(getCompoundDate({ date: value, timeStr: defaultTimeStrValue }) || '', 'PP p') : '',\n );\n const [timeStrValue, setTimeStrValue] = React.useState<string>(defaultTimeStrValue || '');\n const [selected, setSelected] = React.useState<Date | undefined>(value ? new Date(value) : undefined);\n\n const debouncedDateUpdate = useDebouncedCallback((date: Date) => {\n if (isValid(date)) {\n setSelected(date);\n onValueChange?.(date);\n setOpenPopover?.(false);\n }\n }, 500);\n\n const handleInputChange: React.ChangeEventHandler<HTMLInputElement> = e => {\n setDateInputValue(e.currentTarget.value);\n const date = new Date(e.currentTarget.value);\n debouncedDateUpdate(date);\n };\n\n const updateInputValue = (date: Date | string) => {\n if (isValid(date)) {\n if (maxValue && date > maxValue) {\n setLocalErrorMsg(`The selected date should be before ${format(maxValue, 'PP p')}`);\n setDateInputValue('');\n } else if (minValue && date < minValue) {\n setLocalErrorMsg(`The selected date should be after ${format(minValue, 'PP p')}`);\n setDateInputValue('');\n } else {\n setDateInputValue(format(date, 'PP p'));\n setLocalErrorMsg('');\n }\n } else {\n setDateInputValue('');\n setLocalErrorMsg('');\n }\n };\n\n const dateInputValueDate = new Date(dateInputValue);\n const dateInputValueIsValid = isValid(dateInputValueDate);\n const newValueDefined = dateInputValueIsValid && dateInputValueDate.getTime() !== value?.getTime();\n\n const handleDaySelect = (date: Date | undefined) => {\n setSelected(date);\n if (date) {\n const newDate = getCompoundDate({ date, timeStr: timeStrValue });\n updateInputValue(newDate || '');\n } else {\n updateInputValue('');\n }\n };\n\n const handleMonthSelect = (date: Date | undefined) => {\n setSelected(date);\n if (date) {\n const newDate = getCompoundDate({ date, timeStr: timeStrValue });\n updateInputValue(newDate || '');\n } else {\n updateInputValue('');\n }\n };\n\n const handleTimeStrChange = (val: string) => {\n setTimeStrValue(val);\n\n if (dateInputValueIsValid) {\n const newDate = getCompoundDate({ date: dateInputValueDate, timeStr: val });\n updateInputValue(newDate || '');\n }\n };\n\n const handleCancel = () => {\n setOpenPopover?.(false);\n };\n\n const handleApply = () => {\n if (isValid(dateInputValueDate)) {\n onValueChange(dateInputValueDate);\n }\n setOpenPopover?.(false);\n };\n\n const handleClear = () => {\n onValueChange(undefined);\n setSelected(undefined);\n setDateInputValue('');\n setTimeStrValue('');\n setOpenPopover?.(false);\n };\n\n return (\n <div\n aria-label=\"Choose date\"\n className={cn('relative flex flex-col', className)}\n onKeyDown={e => {\n e.stopPropagation();\n if (e.key === 'Escape') {\n setOpenPopover?.(false);\n }\n }}\n >\n <Field invalid={Boolean(localErrorMsg)} className=\"m-4 mb-0 w-auto!\">\n <FieldLabel className=\"sr-only\">Date</FieldLabel>\n <Input type=\"text\" value={dateInputValue} onChange={handleInputChange} placeholder={placeholder} />\n <FieldError>{localErrorMsg}</FieldError>\n </Field>\n\n <DatePicker\n mode=\"single\"\n month={selected}\n selected={selected}\n onMonthChange={handleMonthSelect}\n onSelect={handleDaySelect}\n {...props}\n />\n\n <TimePicker\n onValueChange={handleTimeStrChange}\n className=\"m-4 mt-0 w-auto\"\n defaultValue={value ? formatDate(new Date(value), 'hh:mm a') : defaultTimeStrValue}\n />\n\n <div className=\"m-4 mt-0 grid grid-cols-[1fr_2fr] gap-2\">\n {newValueDefined && (\n <Button icon={<X />} tabIndex={0} size=\"md\" onClick={handleClear} type=\"button\">\n Clear\n </Button>\n )}\n <Button\n icon={newValueDefined ? <Check /> : <X />}\n tabIndex={0}\n type=\"button\"\n size=\"md\"\n variant={newValueDefined ? 'primary' : 'default'}\n onClick={() => {\n dateInputValueIsValid ? handleApply() : handleCancel();\n }}\n >\n {newValueDefined ? `Apply` : `Cancel`}\n </Button>\n </div>\n </div>\n );\n};\n\ntype DefaultButtonProps = Pick<ButtonProps, 'variant' | 'size' | 'tooltip' | 'disabled'> & {\n className?: string;\n placeholder?: string;\n value: Date | undefined | null;\n};\n\nexport const DefaultTrigger = React.forwardRef<HTMLButtonElement, DefaultButtonProps>(\n ({ value, placeholder, variant = 'default', size, className, ...props }, ref) => {\n return (\n <Button\n ref={ref}\n variant={variant}\n size={size}\n className={cn(\n 'justify-start',\n variant === 'default' && fieldTriggerStyle,\n controlTriggerOpenStateFor(variant),\n className,\n )}\n icon={<CalendarIcon />}\n {...props}\n >\n {value ? (\n <span className=\"text-foreground\">{format(value, 'PP p')}</span>\n ) : (\n <span className=\"text-muted-foreground\">{placeholder ?? 'Pick a date'}</span>\n )}\n </Button>\n );\n },\n);\n"],"mappings":"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"}
@@ -141,7 +141,7 @@ function TimePartSelect({ label, options, value, onValueChange }) {
141
141
  children: [/* @__PURE__ */ jsx(SelectTrigger, {
142
142
  size: "sm",
143
143
  "aria-label": label,
144
- children: /* @__PURE__ */ jsx(SelectValue, { placeholder: "Select..." })
144
+ children: /* @__PURE__ */ jsx(SelectValue, { placeholder: "Select" })
145
145
  }), /* @__PURE__ */ jsx(SelectContent, { children: options.map((option, idx) => /* @__PURE__ */ jsx(SelectItem, {
146
146
  value: `${idx}`,
147
147
  children: option
@@ -1 +1 @@
1
- {"version":3,"file":"DateTimePicker.es.js","names":["React"],"sources":["../../src/ds/components/DateTimePicker/date-picker.tsx","../../src/ds/components/DateTimePicker/time-picker.tsx","../../src/ds/components/DateTimePicker/date-time-picker.tsx"],"sourcesContent":["import * as React from 'react';\nimport { DayPicker } from 'react-day-picker';\nimport { quietTextHover } from '@/ds/primitives/typography';\nimport { cn } from '@/lib/utils';\n\nexport type CalendarProps = React.ComponentProps<typeof DayPicker>;\n\nexport function DatePicker({ className, classNames, showOutsideDays = true, ...props }: CalendarProps) {\n return (\n <DayPicker\n showOutsideDays={showOutsideDays}\n className={cn('p-3', className)}\n classNames={{\n months: 'flex flex-col space-y-4 sm:space-y-0 ',\n month: 'space-y-4 text-caption',\n caption: 'flex justify-between pt-1 items-center pl-2',\n caption_label: 'text-label text-foreground',\n nav: 'flex items-center',\n nav_button_previous: cn(\n quietTextHover,\n 'flex size-7 items-center justify-center rounded-md bg-transparent p-0 hover:bg-fill-subtle',\n ),\n nav_button_next: cn(\n quietTextHover,\n 'flex size-7 items-center justify-center rounded-md bg-transparent p-0 hover:bg-fill-subtle',\n ),\n dropdown_month: 'w-full border-collapse space-y-1',\n weeknumber: 'flex',\n day: cn(\n 'relative p-0 text-center focus-within:relative focus-within:z-20 [&:has([aria-selected])]:bg-fill [&:has([aria-selected].day-outside)]:bg-fill-subtle [&:has([aria-selected].day-range-end)]:rounded-r-md',\n props.mode === 'range'\n ? '[&:has(>.day-range-end)]:rounded-r-md [&:has(>.day-range-start)]:rounded-l-md first:[&:has([aria-selected])]:rounded-l-md last:[&:has([aria-selected])]:rounded-r-md'\n : '[&:has([aria-selected])]:rounded-md',\n 'size-8 p-0 text-caption hover:bg-fill-subtle aria-selected:opacity-100',\n ),\n day_range_start: 'day-range-start rounded-l-md',\n day_range_end: 'day-range-end rounded-r-md',\n day_selected: cn(\n 'bg-foreground! text-sidebar! hover:bg-foreground/90! focus:bg-foreground/90! focus:text-sidebar!',\n props.mode !== 'range' && 'rounded-md',\n ),\n day_today: 'bg-fill text-foreground',\n day_outside:\n 'day-outside text-muted-foreground opacity-50 aria-selected:bg-fill-subtle aria-selected:text-muted-foreground aria-selected:opacity-30',\n day_disabled: 'text-muted-foreground opacity-50',\n day_range_middle: 'aria-selected:bg-fill aria-selected:text-foreground',\n day_hidden: 'invisible',\n head_cell: 'text-meta text-muted-foreground',\n ...classNames,\n }}\n {...props}\n />\n );\n}\n","import { useEffect, useState } from 'react';\nimport { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/ds/components/Select';\nimport { cn } from '@/lib/utils';\n\nexport type TimePickerProps = {\n defaultValue?: string;\n onValueChange: (value: string) => void;\n className?: string;\n label?: string;\n};\n\nconst hourOptions = ['12', '1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11'];\nconst minuteOptions = ['00', '15', '30', '45', '59'];\nconst timePeriodOptions = ['AM', 'PM'];\n\nexport function TimePicker({ defaultValue, onValueChange, className, label = 'Time' }: TimePickerProps) {\n const [hour, setHour] = useState<string>('12');\n const [minute, setMinute] = useState<string>('00');\n const [timePeriod, setTimePeriod] = useState('AM');\n\n useEffect(() => {\n if (defaultValue) {\n const timeRegex = /^(\\d{1,2}):(\\d{2})(?::\\d{2})?\\s*(AM|PM|am|pm)?$/;\n const match = defaultValue.match(timeRegex);\n\n if (match) {\n const rawHour = match[1];\n const rawMinute = match[2];\n if (rawHour === undefined || rawMinute === undefined) return;\n\n let parsedHour = parseInt(rawHour, 10);\n const parsedMinute = parseInt(rawMinute, 10);\n const period = match[3]?.toUpperCase();\n\n if (parsedHour >= 1 && parsedHour <= 12 && parsedMinute >= 0 && parsedMinute <= 59) {\n setHour(parsedHour.toString());\n setMinute(parsedMinute === 0 ? '00' : parsedMinute.toString());\n setTimePeriod(period || 'AM');\n }\n }\n }\n }, [defaultValue]);\n\n const handleHourChange = (val: string) => {\n const nextHour = hourOptions[+val];\n if (nextHour === undefined) return;\n setHour(nextHour);\n onValueChange(`${nextHour}:${minute} ${timePeriod}`.trim());\n };\n\n const handleMinuteChange = (val: string) => {\n const nextMinute = minuteOptions[+val];\n if (nextMinute === undefined) return;\n setMinute(nextMinute);\n onValueChange(`${hour}:${nextMinute} ${timePeriod}`.trim());\n };\n\n const handleTimePeriodChange = (val: string) => {\n const nextPeriod = timePeriodOptions[+val];\n if (nextPeriod === undefined) return;\n setTimePeriod(nextPeriod);\n onValueChange(`${hour}:${minute} ${nextPeriod}`.trim());\n };\n\n return (\n <div role=\"group\" aria-label={label} className={cn('flex items-center gap-2', className)}>\n <TimePartSelect label=\"Hour\" options={hourOptions} value={hour} onValueChange={handleHourChange} />\n :\n <TimePartSelect label=\"Minute\" options={minuteOptions} value={minute} onValueChange={handleMinuteChange} />\n <TimePartSelect\n label=\"AM or PM\"\n options={timePeriodOptions}\n value={timePeriod}\n onValueChange={handleTimePeriodChange}\n />\n </div>\n );\n}\n\ntype TimePartSelectProps = {\n label: string;\n options: readonly string[];\n value: string;\n onValueChange: (index: string) => void;\n};\n\nfunction TimePartSelect({ label, options, value, onValueChange }: TimePartSelectProps) {\n return (\n <Select value={options.indexOf(value).toString()} onValueChange={onValueChange}>\n <SelectTrigger size=\"sm\" aria-label={label}>\n <SelectValue placeholder=\"Select...\" />\n </SelectTrigger>\n <SelectContent>\n {options.map((option, idx) => (\n <SelectItem key={option} value={`${idx}`}>\n {option}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n );\n}\n","import { format, formatDate, isValid } from 'date-fns';\nimport { CalendarIcon, Check, X } from 'lucide-react';\nimport * as React from 'react';\nimport type { DayPickerSingleProps } from 'react-day-picker';\nimport { useDebouncedCallback } from 'use-debounce';\n\nimport { DatePicker } from './date-picker';\nimport { TimePicker } from './time-picker';\nimport { Button } from '@/ds/components/Button';\nimport type { ButtonProps } from '@/ds/components/Button';\nimport { Field, FieldError, FieldLabel } from '@/ds/components/Field';\nimport { Input } from '@/ds/components/Input';\nimport { Popover, PopoverContent, PopoverTrigger } from '@/ds/components/Popover';\nimport { controlTriggerOpenStateFor } from '@/ds/primitives/control-size';\nimport { fieldTriggerStyle } from '@/ds/primitives/form-element';\nimport { cn } from '@/lib/utils';\n\ntype CommonProps = Omit<DayPickerSingleProps, 'mode' | 'selected' | 'onSelect'> & {\n value: Date | undefined | null;\n minValue?: Date | null;\n maxValue?: Date | null;\n defaultTimeStrValue?: string;\n onValueChange: (date: Date | undefined) => void;\n};\n\ntype DefaultTriggerLook = Pick<ButtonProps, 'variant' | 'size'>;\n\nexport type DateTimePickerProps =\n | (CommonProps & DefaultTriggerLook & { children?: never; className?: string; placeholder?: string })\n | (CommonProps & {\n children: React.ReactNode;\n className?: never;\n placeholder?: string;\n variant?: never;\n size?: never;\n });\n\nexport const DateTimePicker: React.FC<DateTimePickerProps> = ({\n value,\n minValue,\n maxValue,\n defaultTimeStrValue,\n onValueChange,\n children,\n className,\n placeholder,\n variant,\n size,\n ...props\n}) => {\n const [openPopover, setOpenPopover] = React.useState(false);\n\n return (\n <Popover open={openPopover} onOpenChange={setOpenPopover}>\n <PopoverTrigger asChild>\n {children ? (\n children\n ) : (\n <DefaultTrigger\n value={value}\n placeholder={placeholder}\n variant={variant}\n size={size}\n className={className}\n data-testid=\"datepicker-button\"\n />\n )}\n </PopoverTrigger>\n <PopoverContent\n className=\"backdrop-blur-4xl w-auto max-w-66 bg-muted p-0!\"\n align=\"start\"\n data-testid=\"datepicker-calendar\"\n >\n <DateTimePickerContent\n value={value}\n minValue={minValue}\n maxValue={maxValue}\n onValueChange={onValueChange}\n setOpenPopover={setOpenPopover}\n defaultTimeStrValue={defaultTimeStrValue}\n {...props}\n />\n </PopoverContent>\n </Popover>\n );\n};\n\nfunction getCompoundDate({ date, timeStr = '' }: { date: Date; timeStr?: string }): Date | null {\n if (!isValid(date)) {\n return null;\n }\n\n if (timeStr) {\n const dateStr = format(date, 'yyyy-MM-dd');\n const newDate = new Date(`${dateStr} ${timeStr}`);\n if (isValid(newDate)) {\n return newDate;\n }\n }\n\n return date;\n}\n\nexport const DateTimePickerContent = ({\n value,\n minValue,\n maxValue,\n onValueChange,\n setOpenPopover,\n placeholder,\n className,\n defaultTimeStrValue,\n ...props\n}: CommonProps & {\n setOpenPopover?: (open: boolean) => void;\n placeholder?: string;\n className?: string;\n}) => {\n const [localErrorMsg, setLocalErrorMsg] = React.useState<string | null>(null);\n const [dateInputValue, setDateInputValue] = React.useState<string>(\n value ? format(getCompoundDate({ date: value, timeStr: defaultTimeStrValue }) || '', 'PP p') : '',\n );\n const [timeStrValue, setTimeStrValue] = React.useState<string>(defaultTimeStrValue || '');\n const [selected, setSelected] = React.useState<Date | undefined>(value ? new Date(value) : undefined);\n\n const debouncedDateUpdate = useDebouncedCallback((date: Date) => {\n if (isValid(date)) {\n setSelected(date);\n onValueChange?.(date);\n setOpenPopover?.(false);\n }\n }, 500);\n\n const handleInputChange: React.ChangeEventHandler<HTMLInputElement> = e => {\n setDateInputValue(e.currentTarget.value);\n const date = new Date(e.currentTarget.value);\n debouncedDateUpdate(date);\n };\n\n const updateInputValue = (date: Date | string) => {\n if (isValid(date)) {\n if (maxValue && date > maxValue) {\n setLocalErrorMsg(`The selected date should be before ${format(maxValue, 'PP p')}`);\n setDateInputValue('');\n } else if (minValue && date < minValue) {\n setLocalErrorMsg(`The selected date should be after ${format(minValue, 'PP p')}`);\n setDateInputValue('');\n } else {\n setDateInputValue(format(date, 'PP p'));\n setLocalErrorMsg('');\n }\n } else {\n setDateInputValue('');\n setLocalErrorMsg('');\n }\n };\n\n const dateInputValueDate = new Date(dateInputValue);\n const dateInputValueIsValid = isValid(dateInputValueDate);\n const newValueDefined = dateInputValueIsValid && dateInputValueDate.getTime() !== value?.getTime();\n\n const handleDaySelect = (date: Date | undefined) => {\n setSelected(date);\n if (date) {\n const newDate = getCompoundDate({ date, timeStr: timeStrValue });\n updateInputValue(newDate || '');\n } else {\n updateInputValue('');\n }\n };\n\n const handleMonthSelect = (date: Date | undefined) => {\n setSelected(date);\n if (date) {\n const newDate = getCompoundDate({ date, timeStr: timeStrValue });\n updateInputValue(newDate || '');\n } else {\n updateInputValue('');\n }\n };\n\n const handleTimeStrChange = (val: string) => {\n setTimeStrValue(val);\n\n if (dateInputValueIsValid) {\n const newDate = getCompoundDate({ date: dateInputValueDate, timeStr: val });\n updateInputValue(newDate || '');\n }\n };\n\n const handleCancel = () => {\n setOpenPopover?.(false);\n };\n\n const handleApply = () => {\n if (isValid(dateInputValueDate)) {\n onValueChange(dateInputValueDate);\n }\n setOpenPopover?.(false);\n };\n\n const handleClear = () => {\n onValueChange(undefined);\n setSelected(undefined);\n setDateInputValue('');\n setTimeStrValue('');\n setOpenPopover?.(false);\n };\n\n return (\n <div\n aria-label=\"Choose date\"\n className={cn('relative flex flex-col', className)}\n onKeyDown={e => {\n e.stopPropagation();\n if (e.key === 'Escape') {\n setOpenPopover?.(false);\n }\n }}\n >\n <Field invalid={Boolean(localErrorMsg)} className=\"m-4 mb-0 w-auto!\">\n <FieldLabel className=\"sr-only\">Date</FieldLabel>\n <Input type=\"text\" value={dateInputValue} onChange={handleInputChange} placeholder={placeholder} />\n <FieldError>{localErrorMsg}</FieldError>\n </Field>\n\n <DatePicker\n mode=\"single\"\n month={selected}\n selected={selected}\n onMonthChange={handleMonthSelect}\n onSelect={handleDaySelect}\n {...props}\n />\n\n <TimePicker\n onValueChange={handleTimeStrChange}\n className=\"m-4 mt-0 w-auto\"\n defaultValue={value ? formatDate(new Date(value), 'hh:mm a') : defaultTimeStrValue}\n />\n\n <div className=\"m-4 mt-0 grid grid-cols-[1fr_2fr] gap-2\">\n {newValueDefined && (\n <Button icon={<X />} tabIndex={0} size=\"md\" onClick={handleClear} type=\"button\">\n Clear\n </Button>\n )}\n <Button\n icon={newValueDefined ? <Check /> : <X />}\n tabIndex={0}\n type=\"button\"\n size=\"md\"\n variant={newValueDefined ? 'primary' : 'default'}\n onClick={() => {\n dateInputValueIsValid ? handleApply() : handleCancel();\n }}\n >\n {newValueDefined ? `Apply` : `Cancel`}\n </Button>\n </div>\n </div>\n );\n};\n\ntype DefaultButtonProps = Pick<ButtonProps, 'variant' | 'size' | 'tooltip' | 'disabled'> & {\n className?: string;\n placeholder?: string;\n value: Date | undefined | null;\n};\n\nexport const DefaultTrigger = React.forwardRef<HTMLButtonElement, DefaultButtonProps>(\n ({ value, placeholder, variant = 'default', size, className, ...props }, ref) => {\n return (\n <Button\n ref={ref}\n variant={variant}\n size={size}\n className={cn(\n 'justify-start',\n variant === 'default' && fieldTriggerStyle,\n controlTriggerOpenStateFor(variant),\n className,\n )}\n icon={<CalendarIcon />}\n {...props}\n >\n {value ? (\n <span className=\"text-foreground\">{format(value, 'PP p')}</span>\n ) : (\n <span className=\"text-muted-foreground\">{placeholder ?? 'Pick a date'}</span>\n )}\n </Button>\n );\n },\n);\n"],"mappings":";;;;;;;;;;;;;;;;;AAOA,SAAgB,WAAW,EAAE,WAAW,YAAY,kBAAkB,MAAM,GAAG,SAAwB;CACrG,OACE,oBAAC,WAAD;EACmB;EACjB,WAAW,GAAG,OAAO,SAAS;EAC9B,YAAY;GACV,QAAQ;GACR,OAAO;GACP,SAAS;GACT,eAAe;GACf,KAAK;GACL,qBAAqB,GACnB,gBACA,4FACF;GACA,iBAAiB,GACf,gBACA,4FACF;GACA,gBAAgB;GAChB,YAAY;GACZ,KAAK,GACH,6MACA,MAAM,SAAS,UACX,yKACA,uCACJ,wEACF;GACA,iBAAiB;GACjB,eAAe;GACf,cAAc,GACZ,oGACA,MAAM,SAAS,WAAW,YAC5B;GACA,WAAW;GACX,aACE;GACF,cAAc;GACd,kBAAkB;GAClB,YAAY;GACZ,WAAW;GACX,GAAG;EACL;EACA,GAAI;CACL,CAAA;AAEL;;AC1CA,IAAM,cAAc;CAAC;CAAM;CAAK;CAAK;CAAK;CAAK;CAAK;CAAK;CAAK;CAAK;CAAK;CAAM;AAAI;AAClF,IAAM,gBAAgB;CAAC;CAAM;CAAM;CAAM;CAAM;AAAI;AACnD,IAAM,oBAAoB,CAAC,MAAM,IAAI;AAErC,SAAgB,WAAW,EAAE,cAAc,eAAe,WAAW,QAAQ,UAA2B;CACtG,MAAM,CAAC,MAAM,WAAW,SAAiB,IAAI;CAC7C,MAAM,CAAC,QAAQ,aAAa,SAAiB,IAAI;CACjD,MAAM,CAAC,YAAY,iBAAiB,SAAS,IAAI;CAEjD,gBAAgB;EACd,IAAI,cAAc;GAEhB,MAAM,QAAQ,aAAa,MAAM,iDAAS;GAE1C,IAAI,OAAO;IACT,MAAM,UAAU,MAAM;IACtB,MAAM,YAAY,MAAM;IACxB,IAAI,YAAY,KAAA,KAAa,cAAc,KAAA,GAAW;IAEtD,IAAI,aAAa,SAAS,SAAS,EAAE;IACrC,MAAM,eAAe,SAAS,WAAW,EAAE;IAC3C,MAAM,SAAS,MAAM,EAAE,EAAE,YAAY;IAErC,IAAI,cAAc,KAAK,cAAc,MAAM,gBAAgB,KAAK,gBAAgB,IAAI;KAClF,QAAQ,WAAW,SAAS,CAAC;KAC7B,UAAU,iBAAiB,IAAI,OAAO,aAAa,SAAS,CAAC;KAC7D,cAAc,UAAU,IAAI;IAC9B;GACF;EACF;CACF,GAAG,CAAC,YAAY,CAAC;CAEjB,MAAM,oBAAoB,QAAgB;EACxC,MAAM,WAAW,YAAY,CAAC;EAC9B,IAAI,aAAa,KAAA,GAAW;EAC5B,QAAQ,QAAQ;EAChB,cAAc,GAAG,SAAS,GAAG,OAAO,GAAG,aAAa,KAAK,CAAC;CAC5D;CAEA,MAAM,sBAAsB,QAAgB;EAC1C,MAAM,aAAa,cAAc,CAAC;EAClC,IAAI,eAAe,KAAA,GAAW;EAC9B,UAAU,UAAU;EACpB,cAAc,GAAG,KAAK,GAAG,WAAW,GAAG,aAAa,KAAK,CAAC;CAC5D;CAEA,MAAM,0BAA0B,QAAgB;EAC9C,MAAM,aAAa,kBAAkB,CAAC;EACtC,IAAI,eAAe,KAAA,GAAW;EAC9B,cAAc,UAAU;EACxB,cAAc,GAAG,KAAK,GAAG,OAAO,GAAG,aAAa,KAAK,CAAC;CACxD;CAEA,OACE,qBAAC,OAAD;EAAK,MAAK;EAAQ,cAAY;EAAO,WAAW,GAAG,2BAA2B,SAAS;EAAvF,UAAA;GACE,oBAAC,gBAAD;IAAgB,OAAM;IAAO,SAAS;IAAa,OAAO;IAAM,eAAe;GAAmB,CAAA;GAAC;GAEnG,oBAAC,gBAAD;IAAgB,OAAM;IAAS,SAAS;IAAe,OAAO;IAAQ,eAAe;GAAqB,CAAA;GAC1G,oBAAC,gBAAD;IACE,OAAM;IACN,SAAS;IACT,OAAO;IACP,eAAe;GAChB,CAAA;EACE;;AAET;AASA,SAAS,eAAe,EAAE,OAAO,SAAS,OAAO,iBAAsC;CACrF,OACE,qBAAC,QAAD;EAAQ,OAAO,QAAQ,QAAQ,KAAK,CAAC,CAAC,SAAS;EAAkB;EAAjE,UAAA,CACE,oBAAC,eAAD;GAAe,MAAK;GAAK,cAAY;GACnC,UAAA,oBAAC,aAAD,EAAa,aAAY,YAAa,CAAA;EACzB,CAAA,GACf,oBAAC,eAAD,EAAA,UACG,QAAQ,KAAK,QAAQ,QACpB,oBAAC,YAAD;GAAyB,OAAO,GAAG;GAChC,UAAA;EACS,GAFK,MAEL,CACb,EACY,CAAA,CACT;;AAEZ;;AChEA,IAAa,kBAAiD,EAC5D,OACA,UACA,UACA,qBACA,eACA,UACA,WACA,aACA,SACA,MACA,GAAG,YACC;CACJ,MAAM,CAAC,aAAa,kBAAkBA,QAAM,SAAS,KAAK;CAE1D,OACE,qBAAC,SAAD;EAAS,MAAM;EAAa,cAAc;EAA1C,UAAA,CACE,oBAAC,gBAAD;GAAgB,SAAA;GACb,UAAA,WACC,WAEA,oBAAC,gBAAD;IACS;IACM;IACJ;IACH;IACK;IACX,eAAY;GACb,CAAA;EAEW,CAAA,GAChB,oBAAC,gBAAD;GACE,WAAU;GACV,OAAM;GACN,eAAY;GAEZ,UAAA,oBAAC,uBAAD;IACS;IACG;IACA;IACK;IACC;IACK;IACrB,GAAI;GACL,CAAA;EACa,CAAA,CACT;;AAEb;AAEA,SAAS,gBAAgB,EAAE,MAAM,UAAU,MAAqD;CAC9F,IAAI,CAAC,QAAQ,IAAI,GACf,OAAO;CAGT,IAAI,SAAS;EACX,MAAM,UAAU,OAAO,MAAM,YAAY;EACzC,MAAM,0BAAU,IAAI,KAAK,GAAG,QAAQ,GAAG,SAAS;EAChD,IAAI,QAAQ,OAAO,GACjB,OAAO;CAEX;CAEA,OAAO;AACT;AAEA,IAAa,yBAAyB,EACpC,OACA,UACA,UACA,eACA,gBACA,aACA,WACA,qBACA,GAAG,YAKC;CACJ,MAAM,CAAC,eAAe,oBAAoBA,QAAM,SAAwB,IAAI;CAC5E,MAAM,CAAC,gBAAgB,qBAAqBA,QAAM,SAChD,QAAQ,OAAO,gBAAgB;EAAE,MAAM;EAAO,SAAS;CAAoB,CAAC,KAAK,IAAI,MAAM,IAAI,EACjG;CACA,MAAM,CAAC,cAAc,mBAAmBA,QAAM,SAAiB,uBAAuB,EAAE;CACxF,MAAM,CAAC,UAAU,eAAeA,QAAM,SAA2B,QAAQ,IAAI,KAAK,KAAK,IAAI,KAAA,CAAS;CAEpG,MAAM,sBAAsB,sBAAsB,SAAe;EAC/D,IAAI,QAAQ,IAAI,GAAG;GACjB,YAAY,IAAI;GAChB,gBAAgB,IAAI;GACpB,iBAAiB,KAAK;EACxB;CACF,GAAG,GAAG;CAEN,MAAM,qBAAgE,MAAK;EACzE,kBAAkB,EAAE,cAAc,KAAK;EACvC,MAAM,OAAO,IAAI,KAAK,EAAE,cAAc,KAAK;EAC3C,oBAAoB,IAAI;CAC1B;CAEA,MAAM,oBAAoB,SAAwB;EAChD,IAAI,QAAQ,IAAI,GAAG;GACjB,IAAI,YAAY,OAAO,UAAU;IAC/B,iBAAiB,sCAAsC,OAAO,UAAU,MAAM,GAAG;IACjF,kBAAkB,EAAE;GACtB,OAAO,IAAI,YAAY,OAAO,UAAU;IACtC,iBAAiB,qCAAqC,OAAO,UAAU,MAAM,GAAG;IAChF,kBAAkB,EAAE;GACtB,OAAO;IACL,kBAAkB,OAAO,MAAM,MAAM,CAAC;IACtC,iBAAiB,EAAE;GACrB;EACF,OAAO;GACL,kBAAkB,EAAE;GACpB,iBAAiB,EAAE;EACrB;CACF;CAEA,MAAM,qBAAqB,IAAI,KAAK,cAAc;CAClD,MAAM,wBAAwB,QAAQ,kBAAkB;CACxD,MAAM,kBAAkB,yBAAyB,mBAAmB,QAAQ,MAAM,OAAO,QAAQ;CAEjG,MAAM,mBAAmB,SAA2B;EAClD,YAAY,IAAI;EAChB,IAAI,MAAM;GACR,MAAM,UAAU,gBAAgB;IAAE;IAAM,SAAS;GAAa,CAAC;GAC/D,iBAAiB,WAAW,EAAE;EAChC,OACE,iBAAiB,EAAE;CAEvB;CAEA,MAAM,qBAAqB,SAA2B;EACpD,YAAY,IAAI;EAChB,IAAI,MAAM;GACR,MAAM,UAAU,gBAAgB;IAAE;IAAM,SAAS;GAAa,CAAC;GAC/D,iBAAiB,WAAW,EAAE;EAChC,OACE,iBAAiB,EAAE;CAEvB;CAEA,MAAM,uBAAuB,QAAgB;EAC3C,gBAAgB,GAAG;EAEnB,IAAI,uBAAuB;GACzB,MAAM,UAAU,gBAAgB;IAAE,MAAM;IAAoB,SAAS;GAAI,CAAC;GAC1E,iBAAiB,WAAW,EAAE;EAChC;CACF;CAEA,MAAM,qBAAqB;EACzB,iBAAiB,KAAK;CACxB;CAEA,MAAM,oBAAoB;EACxB,IAAI,QAAQ,kBAAkB,GAC5B,cAAc,kBAAkB;EAElC,iBAAiB,KAAK;CACxB;CAEA,MAAM,oBAAoB;EACxB,cAAc,KAAA,CAAS;EACvB,YAAY,KAAA,CAAS;EACrB,kBAAkB,EAAE;EACpB,gBAAgB,EAAE;EAClB,iBAAiB,KAAK;CACxB;CAEA,OACE,qBAAC,OAAD;EACE,cAAW;EACX,WAAW,GAAG,0BAA0B,SAAS;EACjD,YAAW,MAAK;GACd,EAAE,gBAAgB;GAClB,IAAI,EAAE,QAAQ,UACZ,iBAAiB,KAAK;EAE1B;EARF,UAAA;GAUE,qBAAC,OAAD;IAAO,SAAS,QAAQ,aAAa;IAAG,WAAU;IAAlD,UAAA;KACE,oBAAC,YAAD;MAAY,WAAU;MAAU,UAAA;KAAgB,CAAA;KAChD,oBAAC,OAAD;MAAO,MAAK;MAAO,OAAO;MAAgB,UAAU;MAAgC;KAAc,CAAA;KAClG,oBAAC,YAAD,EAAA,UAAa,cAA0B,CAAA;IAClC;;GAEP,oBAAC,YAAD;IACE,MAAK;IACL,OAAO;IACG;IACV,eAAe;IACf,UAAU;IACV,GAAI;GACL,CAAA;GAED,oBAAC,YAAD;IACE,eAAe;IACf,WAAU;IACV,cAAc,QAAQ,WAAW,IAAI,KAAK,KAAK,GAAG,SAAS,IAAI;GAChE,CAAA;GAED,qBAAC,OAAD;IAAK,WAAU;IAAf,UAAA,CACG,mBACC,oBAAC,QAAD;KAAQ,MAAM,oBAAC,GAAD,CAAI,CAAA;KAAG,UAAU;KAAG,MAAK;KAAK,SAAS;KAAa,MAAK;KAAS,UAAA;IAExE,CAAA,GAEV,oBAAC,QAAD;KACE,MAAM,kBAAkB,oBAAC,OAAD,CAAQ,CAAA,IAAI,oBAAC,GAAD,CAAI,CAAA;KACxC,UAAU;KACV,MAAK;KACL,MAAK;KACL,SAAS,kBAAkB,YAAY;KACvC,eAAe;MACb,wBAAwB,YAAY,IAAI,aAAa;KACvD;KAEC,UAAA,kBAAkB,UAAU;IACvB,CAAA,CACL;;EACF;;AAET;AAQA,IAAa,iBAAiBA,QAAM,YACjC,EAAE,OAAO,aAAa,UAAU,WAAW,MAAM,WAAW,GAAG,SAAS,QAAQ;CAC/E,OACE,oBAAC,QAAD;EACO;EACI;EACH;EACN,WAAW,GACT,iBACA,YAAY,aAAA,8TACZ,2BAA2B,OAAO,GAClC,SACF;EACA,MAAM,oBAAC,cAAD,CAAe,CAAA;EACrB,GAAI;EAEH,UAAA,QACC,oBAAC,QAAD;GAAM,WAAU;GAAmB,UAAA,OAAO,OAAO,MAAM;EAAQ,CAAA,IAE/D,oBAAC,QAAD;GAAM,WAAU;GAAyB,UAAA,eAAe;EAAoB,CAAA;CAExE,CAAA;AAEZ,CACF"}
1
+ {"version":3,"file":"DateTimePicker.es.js","names":["React"],"sources":["../../src/ds/components/DateTimePicker/date-picker.tsx","../../src/ds/components/DateTimePicker/time-picker.tsx","../../src/ds/components/DateTimePicker/date-time-picker.tsx"],"sourcesContent":["import * as React from 'react';\nimport { DayPicker } from 'react-day-picker';\nimport { quietTextHover } from '@/ds/primitives/typography';\nimport { cn } from '@/lib/utils';\n\nexport type CalendarProps = React.ComponentProps<typeof DayPicker>;\n\nexport function DatePicker({ className, classNames, showOutsideDays = true, ...props }: CalendarProps) {\n return (\n <DayPicker\n showOutsideDays={showOutsideDays}\n className={cn('p-3', className)}\n classNames={{\n months: 'flex flex-col space-y-4 sm:space-y-0 ',\n month: 'space-y-4 text-caption',\n caption: 'flex justify-between pt-1 items-center pl-2',\n caption_label: 'text-label text-foreground',\n nav: 'flex items-center',\n nav_button_previous: cn(\n quietTextHover,\n 'flex size-7 items-center justify-center rounded-md bg-transparent p-0 hover:bg-fill-subtle',\n ),\n nav_button_next: cn(\n quietTextHover,\n 'flex size-7 items-center justify-center rounded-md bg-transparent p-0 hover:bg-fill-subtle',\n ),\n dropdown_month: 'w-full border-collapse space-y-1',\n weeknumber: 'flex',\n day: cn(\n 'relative p-0 text-center focus-within:relative focus-within:z-20 [&:has([aria-selected])]:bg-fill [&:has([aria-selected].day-outside)]:bg-fill-subtle [&:has([aria-selected].day-range-end)]:rounded-r-md',\n props.mode === 'range'\n ? '[&:has(>.day-range-end)]:rounded-r-md [&:has(>.day-range-start)]:rounded-l-md first:[&:has([aria-selected])]:rounded-l-md last:[&:has([aria-selected])]:rounded-r-md'\n : '[&:has([aria-selected])]:rounded-md',\n 'size-8 p-0 text-caption hover:bg-fill-subtle aria-selected:opacity-100',\n ),\n day_range_start: 'day-range-start rounded-l-md',\n day_range_end: 'day-range-end rounded-r-md',\n day_selected: cn(\n 'bg-foreground! text-sidebar! hover:bg-foreground/90! focus:bg-foreground/90! focus:text-sidebar!',\n props.mode !== 'range' && 'rounded-md',\n ),\n day_today: 'bg-fill text-foreground',\n day_outside:\n 'day-outside text-muted-foreground opacity-50 aria-selected:bg-fill-subtle aria-selected:text-muted-foreground aria-selected:opacity-30',\n day_disabled: 'text-muted-foreground opacity-50',\n day_range_middle: 'aria-selected:bg-fill aria-selected:text-foreground',\n day_hidden: 'invisible',\n head_cell: 'text-meta text-muted-foreground',\n ...classNames,\n }}\n {...props}\n />\n );\n}\n","import { useEffect, useState } from 'react';\nimport { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/ds/components/Select';\nimport { cn } from '@/lib/utils';\n\nexport type TimePickerProps = {\n defaultValue?: string;\n onValueChange: (value: string) => void;\n className?: string;\n label?: string;\n};\n\nconst hourOptions = ['12', '1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11'];\nconst minuteOptions = ['00', '15', '30', '45', '59'];\nconst timePeriodOptions = ['AM', 'PM'];\n\nexport function TimePicker({ defaultValue, onValueChange, className, label = 'Time' }: TimePickerProps) {\n const [hour, setHour] = useState<string>('12');\n const [minute, setMinute] = useState<string>('00');\n const [timePeriod, setTimePeriod] = useState('AM');\n\n useEffect(() => {\n if (defaultValue) {\n const timeRegex = /^(\\d{1,2}):(\\d{2})(?::\\d{2})?\\s*(AM|PM|am|pm)?$/;\n const match = defaultValue.match(timeRegex);\n\n if (match) {\n const rawHour = match[1];\n const rawMinute = match[2];\n if (rawHour === undefined || rawMinute === undefined) return;\n\n let parsedHour = parseInt(rawHour, 10);\n const parsedMinute = parseInt(rawMinute, 10);\n const period = match[3]?.toUpperCase();\n\n if (parsedHour >= 1 && parsedHour <= 12 && parsedMinute >= 0 && parsedMinute <= 59) {\n setHour(parsedHour.toString());\n setMinute(parsedMinute === 0 ? '00' : parsedMinute.toString());\n setTimePeriod(period || 'AM');\n }\n }\n }\n }, [defaultValue]);\n\n const handleHourChange = (val: string) => {\n const nextHour = hourOptions[+val];\n if (nextHour === undefined) return;\n setHour(nextHour);\n onValueChange(`${nextHour}:${minute} ${timePeriod}`.trim());\n };\n\n const handleMinuteChange = (val: string) => {\n const nextMinute = minuteOptions[+val];\n if (nextMinute === undefined) return;\n setMinute(nextMinute);\n onValueChange(`${hour}:${nextMinute} ${timePeriod}`.trim());\n };\n\n const handleTimePeriodChange = (val: string) => {\n const nextPeriod = timePeriodOptions[+val];\n if (nextPeriod === undefined) return;\n setTimePeriod(nextPeriod);\n onValueChange(`${hour}:${minute} ${nextPeriod}`.trim());\n };\n\n return (\n <div role=\"group\" aria-label={label} className={cn('flex items-center gap-2', className)}>\n <TimePartSelect label=\"Hour\" options={hourOptions} value={hour} onValueChange={handleHourChange} />\n :\n <TimePartSelect label=\"Minute\" options={minuteOptions} value={minute} onValueChange={handleMinuteChange} />\n <TimePartSelect\n label=\"AM or PM\"\n options={timePeriodOptions}\n value={timePeriod}\n onValueChange={handleTimePeriodChange}\n />\n </div>\n );\n}\n\ntype TimePartSelectProps = {\n label: string;\n options: readonly string[];\n value: string;\n onValueChange: (index: string) => void;\n};\n\nfunction TimePartSelect({ label, options, value, onValueChange }: TimePartSelectProps) {\n return (\n <Select value={options.indexOf(value).toString()} onValueChange={onValueChange}>\n <SelectTrigger size=\"sm\" aria-label={label}>\n <SelectValue placeholder=\"Select\" />\n </SelectTrigger>\n <SelectContent>\n {options.map((option, idx) => (\n <SelectItem key={option} value={`${idx}`}>\n {option}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n );\n}\n","import { format, formatDate, isValid } from 'date-fns';\nimport { CalendarIcon, Check, X } from 'lucide-react';\nimport * as React from 'react';\nimport type { DayPickerSingleProps } from 'react-day-picker';\nimport { useDebouncedCallback } from 'use-debounce';\n\nimport { DatePicker } from './date-picker';\nimport { TimePicker } from './time-picker';\nimport { Button } from '@/ds/components/Button';\nimport type { ButtonProps } from '@/ds/components/Button';\nimport { Field, FieldError, FieldLabel } from '@/ds/components/Field';\nimport { Input } from '@/ds/components/Input';\nimport { Popover, PopoverContent, PopoverTrigger } from '@/ds/components/Popover';\nimport { controlTriggerOpenStateFor } from '@/ds/primitives/control-size';\nimport { fieldTriggerStyle } from '@/ds/primitives/form-element';\nimport { cn } from '@/lib/utils';\n\ntype CommonProps = Omit<DayPickerSingleProps, 'mode' | 'selected' | 'onSelect'> & {\n value: Date | undefined | null;\n minValue?: Date | null;\n maxValue?: Date | null;\n defaultTimeStrValue?: string;\n onValueChange: (date: Date | undefined) => void;\n};\n\ntype DefaultTriggerLook = Pick<ButtonProps, 'variant' | 'size'>;\n\nexport type DateTimePickerProps =\n | (CommonProps & DefaultTriggerLook & { children?: never; className?: string; placeholder?: string })\n | (CommonProps & {\n children: React.ReactNode;\n className?: never;\n placeholder?: string;\n variant?: never;\n size?: never;\n });\n\nexport const DateTimePicker: React.FC<DateTimePickerProps> = ({\n value,\n minValue,\n maxValue,\n defaultTimeStrValue,\n onValueChange,\n children,\n className,\n placeholder,\n variant,\n size,\n ...props\n}) => {\n const [openPopover, setOpenPopover] = React.useState(false);\n\n return (\n <Popover open={openPopover} onOpenChange={setOpenPopover}>\n <PopoverTrigger asChild>\n {children ? (\n children\n ) : (\n <DefaultTrigger\n value={value}\n placeholder={placeholder}\n variant={variant}\n size={size}\n className={className}\n data-testid=\"datepicker-button\"\n />\n )}\n </PopoverTrigger>\n <PopoverContent\n className=\"backdrop-blur-4xl w-auto max-w-66 bg-muted p-0!\"\n align=\"start\"\n data-testid=\"datepicker-calendar\"\n >\n <DateTimePickerContent\n value={value}\n minValue={minValue}\n maxValue={maxValue}\n onValueChange={onValueChange}\n setOpenPopover={setOpenPopover}\n defaultTimeStrValue={defaultTimeStrValue}\n {...props}\n />\n </PopoverContent>\n </Popover>\n );\n};\n\nfunction getCompoundDate({ date, timeStr = '' }: { date: Date; timeStr?: string }): Date | null {\n if (!isValid(date)) {\n return null;\n }\n\n if (timeStr) {\n const dateStr = format(date, 'yyyy-MM-dd');\n const newDate = new Date(`${dateStr} ${timeStr}`);\n if (isValid(newDate)) {\n return newDate;\n }\n }\n\n return date;\n}\n\nexport const DateTimePickerContent = ({\n value,\n minValue,\n maxValue,\n onValueChange,\n setOpenPopover,\n placeholder,\n className,\n defaultTimeStrValue,\n ...props\n}: CommonProps & {\n setOpenPopover?: (open: boolean) => void;\n placeholder?: string;\n className?: string;\n}) => {\n const [localErrorMsg, setLocalErrorMsg] = React.useState<string | null>(null);\n const [dateInputValue, setDateInputValue] = React.useState<string>(\n value ? format(getCompoundDate({ date: value, timeStr: defaultTimeStrValue }) || '', 'PP p') : '',\n );\n const [timeStrValue, setTimeStrValue] = React.useState<string>(defaultTimeStrValue || '');\n const [selected, setSelected] = React.useState<Date | undefined>(value ? new Date(value) : undefined);\n\n const debouncedDateUpdate = useDebouncedCallback((date: Date) => {\n if (isValid(date)) {\n setSelected(date);\n onValueChange?.(date);\n setOpenPopover?.(false);\n }\n }, 500);\n\n const handleInputChange: React.ChangeEventHandler<HTMLInputElement> = e => {\n setDateInputValue(e.currentTarget.value);\n const date = new Date(e.currentTarget.value);\n debouncedDateUpdate(date);\n };\n\n const updateInputValue = (date: Date | string) => {\n if (isValid(date)) {\n if (maxValue && date > maxValue) {\n setLocalErrorMsg(`The selected date should be before ${format(maxValue, 'PP p')}`);\n setDateInputValue('');\n } else if (minValue && date < minValue) {\n setLocalErrorMsg(`The selected date should be after ${format(minValue, 'PP p')}`);\n setDateInputValue('');\n } else {\n setDateInputValue(format(date, 'PP p'));\n setLocalErrorMsg('');\n }\n } else {\n setDateInputValue('');\n setLocalErrorMsg('');\n }\n };\n\n const dateInputValueDate = new Date(dateInputValue);\n const dateInputValueIsValid = isValid(dateInputValueDate);\n const newValueDefined = dateInputValueIsValid && dateInputValueDate.getTime() !== value?.getTime();\n\n const handleDaySelect = (date: Date | undefined) => {\n setSelected(date);\n if (date) {\n const newDate = getCompoundDate({ date, timeStr: timeStrValue });\n updateInputValue(newDate || '');\n } else {\n updateInputValue('');\n }\n };\n\n const handleMonthSelect = (date: Date | undefined) => {\n setSelected(date);\n if (date) {\n const newDate = getCompoundDate({ date, timeStr: timeStrValue });\n updateInputValue(newDate || '');\n } else {\n updateInputValue('');\n }\n };\n\n const handleTimeStrChange = (val: string) => {\n setTimeStrValue(val);\n\n if (dateInputValueIsValid) {\n const newDate = getCompoundDate({ date: dateInputValueDate, timeStr: val });\n updateInputValue(newDate || '');\n }\n };\n\n const handleCancel = () => {\n setOpenPopover?.(false);\n };\n\n const handleApply = () => {\n if (isValid(dateInputValueDate)) {\n onValueChange(dateInputValueDate);\n }\n setOpenPopover?.(false);\n };\n\n const handleClear = () => {\n onValueChange(undefined);\n setSelected(undefined);\n setDateInputValue('');\n setTimeStrValue('');\n setOpenPopover?.(false);\n };\n\n return (\n <div\n aria-label=\"Choose date\"\n className={cn('relative flex flex-col', className)}\n onKeyDown={e => {\n e.stopPropagation();\n if (e.key === 'Escape') {\n setOpenPopover?.(false);\n }\n }}\n >\n <Field invalid={Boolean(localErrorMsg)} className=\"m-4 mb-0 w-auto!\">\n <FieldLabel className=\"sr-only\">Date</FieldLabel>\n <Input type=\"text\" value={dateInputValue} onChange={handleInputChange} placeholder={placeholder} />\n <FieldError>{localErrorMsg}</FieldError>\n </Field>\n\n <DatePicker\n mode=\"single\"\n month={selected}\n selected={selected}\n onMonthChange={handleMonthSelect}\n onSelect={handleDaySelect}\n {...props}\n />\n\n <TimePicker\n onValueChange={handleTimeStrChange}\n className=\"m-4 mt-0 w-auto\"\n defaultValue={value ? formatDate(new Date(value), 'hh:mm a') : defaultTimeStrValue}\n />\n\n <div className=\"m-4 mt-0 grid grid-cols-[1fr_2fr] gap-2\">\n {newValueDefined && (\n <Button icon={<X />} tabIndex={0} size=\"md\" onClick={handleClear} type=\"button\">\n Clear\n </Button>\n )}\n <Button\n icon={newValueDefined ? <Check /> : <X />}\n tabIndex={0}\n type=\"button\"\n size=\"md\"\n variant={newValueDefined ? 'primary' : 'default'}\n onClick={() => {\n dateInputValueIsValid ? handleApply() : handleCancel();\n }}\n >\n {newValueDefined ? `Apply` : `Cancel`}\n </Button>\n </div>\n </div>\n );\n};\n\ntype DefaultButtonProps = Pick<ButtonProps, 'variant' | 'size' | 'tooltip' | 'disabled'> & {\n className?: string;\n placeholder?: string;\n value: Date | undefined | null;\n};\n\nexport const DefaultTrigger = React.forwardRef<HTMLButtonElement, DefaultButtonProps>(\n ({ value, placeholder, variant = 'default', size, className, ...props }, ref) => {\n return (\n <Button\n ref={ref}\n variant={variant}\n size={size}\n className={cn(\n 'justify-start',\n variant === 'default' && fieldTriggerStyle,\n controlTriggerOpenStateFor(variant),\n className,\n )}\n icon={<CalendarIcon />}\n {...props}\n >\n {value ? (\n <span className=\"text-foreground\">{format(value, 'PP p')}</span>\n ) : (\n <span className=\"text-muted-foreground\">{placeholder ?? 'Pick a date'}</span>\n )}\n </Button>\n );\n },\n);\n"],"mappings":"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"}
@@ -1,8 +1,8 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
2
  const require_types = require("../types-CP7wbYua.cjs");
3
- const require_filter_bar_chip = require("../filter-bar-chip-CIEsWcEw.cjs");
4
- const require_filter_bar_time_range = require("../filter-bar-time-range-DvuaFnkI.cjs");
5
- const require_FilterBar = require("../FilterBar-Buw0tv51.cjs");
3
+ const require_filter_bar_chip = require("../filter-bar-chip-Cg-UbIwP.cjs");
4
+ const require_filter_bar_time_range = require("../filter-bar-time-range-BA-pXMlo.cjs");
5
+ const require_FilterBar = require("../FilterBar-CQl04O6t.cjs");
6
6
  exports.DEFAULT_FILTER_OPERATORS = require_FilterBar.DEFAULT_FILTER_OPERATORS;
7
7
  exports.FILTER_BAR_TIME_RANGE_FIELD = require_filter_bar_time_range.FILTER_BAR_TIME_RANGE_FIELD;
8
8
  exports.FILTER_BAR_TIME_RANGE_FIELD_ID = require_filter_bar_time_range.FILTER_BAR_TIME_RANGE_FIELD_ID;
@@ -1,5 +1,5 @@
1
1
  import { t as isFilterBarGroup } from "../types-DiiL5mTO.js";
2
- import { a as FilterBarChipValue, i as FilterBarChipRemove, n as FilterBarChipField, r as FilterBarChipOperator, t as FilterBarChip } from "../filter-bar-chip-B4sV4gDm.js";
3
- import { i as FilterBarTimeRange, n as FILTER_BAR_TIME_RANGE_FIELD_ID, r as FILTER_BAR_TIME_RANGE_ITEM, t as FILTER_BAR_TIME_RANGE_FIELD } from "../filter-bar-time-range-CXQMBgpz.js";
4
- import { a as FilterBarGroupEditor, i as FilterBarAdvancedChip, n as FilterBar, o as FilterBarLogicToggle, r as FilterBarChips, s as FilterBarInput, t as DEFAULT_FILTER_OPERATORS } from "../FilterBar-BO-vvvyq.js";
2
+ import { a as FilterBarChipValue, i as FilterBarChipRemove, n as FilterBarChipField, r as FilterBarChipOperator, t as FilterBarChip } from "../filter-bar-chip-CABeKrtf.js";
3
+ import { i as FilterBarTimeRange, n as FILTER_BAR_TIME_RANGE_FIELD_ID, r as FILTER_BAR_TIME_RANGE_ITEM, t as FILTER_BAR_TIME_RANGE_FIELD } from "../filter-bar-time-range-mg9JeYue.js";
4
+ import { a as FilterBarGroupEditor, i as FilterBarAdvancedChip, n as FilterBar, o as FilterBarLogicToggle, r as FilterBarChips, s as FilterBarInput, t as DEFAULT_FILTER_OPERATORS } from "../FilterBar-BgW2dqRQ.js";
5
5
  export { DEFAULT_FILTER_OPERATORS, FILTER_BAR_TIME_RANGE_FIELD, FILTER_BAR_TIME_RANGE_FIELD_ID, FILTER_BAR_TIME_RANGE_ITEM, FilterBar, FilterBarAdvancedChip, FilterBarChip, FilterBarChipField, FilterBarChipOperator, FilterBarChipRemove, FilterBarChipValue, FilterBarChips, FilterBarGroupEditor, FilterBarInput, FilterBarLogicToggle, FilterBarTimeRange, isFilterBarGroup };
@@ -114,7 +114,7 @@ function TextareaFieldBlock({ name, label, labelIsHidden = false, labelColumnWid
114
114
  }
115
115
  // src/ds/components/FormFieldBlocks/fields/search-field-block.tsx
116
116
  /** @deprecated Use `SearchInput`. */
117
- function SearchFieldBlock({ name, helpText, error, errorMsg, required = false, disabled = false, value, label, labelIsHidden = false, layout = "vertical", placeholder = "Search...", onChange, onReset, className, size, isMinimized, onMinimizedChange, inputRef: externalInputRef }) {
117
+ function SearchFieldBlock({ name, helpText, error, errorMsg, required = false, disabled = false, value, label, labelIsHidden = false, layout = "vertical", placeholder = "Search", onChange, onReset, className, size, isMinimized, onMinimizedChange, inputRef: externalInputRef }) {
118
118
  const inputRef = (0, react.useRef)(null);
119
119
  const setInputRef = (element) => {
120
120
  inputRef.current = element;
@@ -1 +1 @@
1
- {"version":3,"file":"FormFieldBlocks.cjs.js","names":["cn","cn","fieldErrorId","FieldBlock","VisuallyHidden","Input","fieldErrorId","FieldBlock","VisuallyHidden","Textarea","useRef","Tooltip","TooltipTrigger","Button","SearchIcon","TooltipContent","FieldBlock","Input","fieldErrorId","cn","XIcon","FieldBlock","VisuallyHidden","Select","SelectTrigger","fieldErrorId","SelectValue","SelectContent","SelectItem"],"sources":["../../src/ds/components/FormFieldBlocks/layout/field-blocks-layout-column.tsx","../../src/ds/components/FormFieldBlocks/layout/field-blocks-layout-root.tsx","../../src/ds/components/FormFieldBlocks/layout/field-blocks-layout.tsx","../../src/ds/components/FormFieldBlocks/fields/text-field-block.tsx","../../src/ds/components/FormFieldBlocks/fields/textarea-field-block.tsx","../../src/ds/components/FormFieldBlocks/fields/search-field-block.tsx","../../src/ds/components/FormFieldBlocks/fields/select-field-block.tsx"],"sourcesContent":["import { cn } from '@/lib/utils';\n\nexport type FieldBlocksLayoutColumnProps = {\n children: React.ReactNode;\n className?: string;\n};\n\nexport function FieldBlocksLayoutColumn({ children, className }: FieldBlocksLayoutColumnProps) {\n return <div className={cn('grid content-start gap-6', className)}>{children}</div>;\n}\n","import { cn } from '@/lib/utils';\n\nexport type FieldBlocksLayoutRootProps = {\n children: React.ReactNode;\n className?: string;\n columns?: 1 | 2;\n gap?: string;\n};\n\nexport function FieldBlocksLayoutRoot({ children, className, columns = 1, gap }: FieldBlocksLayoutRootProps) {\n return (\n <div\n className={cn(\n 'grid',\n {\n 'grid-cols-1': columns === 1,\n 'grid-cols-2': columns === 2,\n },\n gap ?? 'gap-6',\n className,\n )}\n >\n {children}\n </div>\n );\n}\n","import { FieldBlocksLayoutColumn } from './field-blocks-layout-column';\nimport { FieldBlocksLayoutRoot } from './field-blocks-layout-root';\n\n/** @deprecated Lay fields out with plain grid or flex classes; `FieldGroup` stacks related fields. */\nexport const FieldBlocksLayout = Object.assign(FieldBlocksLayoutRoot, {\n Column: FieldBlocksLayoutColumn,\n});\n","import { Input } from '../../Input';\nimport type { InputProps } from '../../Input';\nimport { FieldBlock } from '../block/field-block';\nimport type { FieldBlockErrorMsgProps } from '../block/field-block-error-msg';\nimport type { FieldBlockHelpTextProps } from '../block/field-block-help-text';\nimport type { FieldBlockLabelProps } from '../block/field-block-label';\nimport type { FieldBlockLayoutProps } from '../block/field-block-layout';\nimport { fieldErrorId } from '../block/field-error-id';\nimport { VisuallyHidden } from '@/ds/primitives/visually-hidden';\n\nexport type TextFieldBlockProps = Pick<FieldBlockLayoutProps, 'layout' | 'labelColumnWidth'> &\n Omit<InputProps, 'name' | 'size'> & {\n name: string;\n labelIsHidden?: boolean;\n label?: FieldBlockLabelProps['children'];\n labelSize?: FieldBlockLabelProps['size'];\n helpText?: FieldBlockHelpTextProps['children'];\n errorMsg?: FieldBlockErrorMsgProps['children'];\n size?: InputProps['size'];\n };\n\n/** @deprecated Use `Field` + `FieldLabel` + `Input`. */\nexport function TextFieldBlock({\n name,\n value,\n label,\n labelIsHidden = false,\n labelColumnWidth,\n helpText,\n error,\n errorMsg,\n required = false,\n disabled = false,\n labelSize,\n layout = 'vertical',\n placeholder,\n size = 'md',\n testId,\n className,\n 'aria-describedby': ariaDescribedBy,\n ...props\n}: TextFieldBlockProps) {\n const describedBy =\n [ariaDescribedBy, errorMsg ? fieldErrorId(name) : undefined].filter(Boolean).join(' ') || undefined;\n\n return (\n <FieldBlock.Layout layout={layout} labelColumnWidth={labelColumnWidth} className={className}>\n {layout === 'horizontal' ? (\n <FieldBlock.Column>\n <FieldBlock.Label name={name} required={required} disabled={disabled} size={labelSize || 'bigger'}>\n {labelIsHidden ? <VisuallyHidden>{label}</VisuallyHidden> : label}\n </FieldBlock.Label>\n </FieldBlock.Column>\n ) : null}\n <FieldBlock.Column>\n {!labelIsHidden && layout === 'vertical' ? (\n <FieldBlock.Label name={name} required={required} disabled={disabled} size={labelSize || 'default'}>\n {label}\n </FieldBlock.Label>\n ) : null}\n <FieldBlock.Column className=\"gap-1\">\n <Input\n id={`input-${name}`}\n name={name}\n disabled={disabled}\n required={required}\n value={value}\n placeholder={placeholder}\n data-testid={testId}\n size={size}\n error={error || Boolean(errorMsg)}\n aria-describedby={describedBy}\n {...props}\n />\n {helpText || errorMsg ? <FieldBlock.Message name={name} helpText={helpText} errorMsg={errorMsg} /> : null}\n </FieldBlock.Column>\n </FieldBlock.Column>\n </FieldBlock.Layout>\n );\n}\n","import { Textarea } from '../../Textarea';\nimport type { TextareaProps } from '../../Textarea';\nimport { FieldBlock } from '../block/field-block';\nimport type { FieldBlockErrorMsgProps } from '../block/field-block-error-msg';\nimport type { FieldBlockHelpTextProps } from '../block/field-block-help-text';\nimport type { FieldBlockLabelProps } from '../block/field-block-label';\nimport type { FieldBlockLayoutProps } from '../block/field-block-layout';\nimport { fieldErrorId } from '../block/field-error-id';\nimport { VisuallyHidden } from '@/ds/primitives/visually-hidden';\n\nexport type TextareaFieldBlockProps = Pick<FieldBlockLayoutProps, 'layout' | 'labelColumnWidth'> &\n Omit<TextareaProps, 'name' | 'size'> & {\n name: string;\n labelIsHidden?: boolean;\n label?: FieldBlockLabelProps['children'];\n labelSize?: FieldBlockLabelProps['size'];\n helpText?: FieldBlockHelpTextProps['children'];\n errorMsg?: FieldBlockErrorMsgProps['children'];\n size?: TextareaProps['size'];\n };\n\n/** @deprecated Use `Field` + `FieldLabel` + `Textarea`. */\nexport function TextareaFieldBlock({\n name,\n label,\n labelIsHidden = false,\n labelColumnWidth,\n helpText,\n error,\n errorMsg,\n required = false,\n disabled = false,\n labelSize,\n layout = 'vertical',\n size = 'md',\n testId,\n className,\n 'aria-describedby': ariaDescribedBy,\n ...props\n}: TextareaFieldBlockProps) {\n const describedBy =\n [ariaDescribedBy, errorMsg ? fieldErrorId(name) : undefined].filter(Boolean).join(' ') || undefined;\n\n return (\n <FieldBlock.Layout layout={layout} labelColumnWidth={labelColumnWidth} className={className}>\n {layout === 'horizontal' ? (\n <FieldBlock.Column>\n <FieldBlock.Label name={name} required={required} disabled={disabled} size={labelSize || 'bigger'}>\n {labelIsHidden ? <VisuallyHidden>{label}</VisuallyHidden> : label}\n </FieldBlock.Label>\n </FieldBlock.Column>\n ) : null}\n <FieldBlock.Column>\n {!labelIsHidden && layout === 'vertical' ? (\n <FieldBlock.Label name={name} required={required} disabled={disabled} size={labelSize || 'default'}>\n {label}\n </FieldBlock.Label>\n ) : null}\n <FieldBlock.Column className=\"gap-1\">\n <Textarea\n id={`input-${name}`}\n name={name}\n disabled={disabled}\n required={required}\n size={size}\n data-testid={testId}\n error={error || Boolean(errorMsg)}\n aria-describedby={describedBy}\n {...props}\n />\n {helpText || errorMsg ? <FieldBlock.Message name={name} helpText={helpText} errorMsg={errorMsg} /> : null}\n </FieldBlock.Column>\n </FieldBlock.Column>\n </FieldBlock.Layout>\n );\n}\n","import { SearchIcon, XIcon } from 'lucide-react';\nimport { useEffect, useRef } from 'react';\nimport type { RefObject } from 'react';\nimport { Button } from '../../Button';\nimport { Input } from '../../Input';\nimport type { InputProps } from '../../Input';\nimport { Tooltip, TooltipContent, TooltipTrigger } from '../../Tooltip';\nimport { FieldBlock } from '../block/field-block';\nimport { fieldErrorId } from '../block/field-error-id';\nimport { cn } from '@/lib/utils';\n\nexport type SearchFieldBlockProps = {\n name: string;\n testId?: string;\n label?: string;\n labelIsHidden?: boolean;\n required?: boolean;\n disabled?: boolean;\n value?: string;\n placeholder?: string;\n onChange?: (e: React.ChangeEvent<HTMLInputElement>) => void;\n onReset?: () => void;\n helpText?: string;\n error?: boolean;\n errorMsg?: string;\n layout?: 'horizontal' | 'vertical';\n className?: string;\n size?: InputProps['size'];\n isMinimized?: boolean;\n onMinimizedChange?: (minimized: boolean) => void;\n /** Gives the caller access to the underlying input, e.g. to focus it from a keyboard shortcut. */\n inputRef?: RefObject<HTMLInputElement | null>;\n};\n\n/** @deprecated Use `SearchInput`. */\nexport function SearchFieldBlock({\n name,\n helpText,\n error,\n errorMsg,\n required = false,\n disabled = false,\n value,\n label,\n labelIsHidden = false,\n layout = 'vertical',\n placeholder = 'Search...',\n onChange,\n onReset,\n className,\n size,\n isMinimized,\n onMinimizedChange,\n inputRef: externalInputRef,\n}: SearchFieldBlockProps) {\n const inputRef = useRef<HTMLInputElement>(null);\n\n const setInputRef = (element: HTMLInputElement | null) => {\n inputRef.current = element;\n if (externalInputRef) externalInputRef.current = element;\n };\n useEffect(() => {\n if (isMinimized === false) {\n inputRef.current?.focus();\n }\n }, [isMinimized]);\n\n if (isMinimized) {\n return (\n <Tooltip>\n <TooltipTrigger asChild>\n <Button\n size={`icon-${size || 'sm'}`}\n aria-label={label || 'Search'}\n disabled={disabled}\n onClick={() => onMinimizedChange?.(false)}\n >\n <SearchIcon />\n </Button>\n </TooltipTrigger>\n <TooltipContent>{label || 'Search'}</TooltipContent>\n </Tooltip>\n );\n }\n\n return (\n <FieldBlock.Layout layout={layout} className={className}>\n {layout === 'horizontal' ? (\n <FieldBlock.Column className={labelIsHidden ? 'sr-only' : undefined}>\n <FieldBlock.Label name={name} required={required} disabled={disabled}>\n {label}\n </FieldBlock.Label>\n </FieldBlock.Column>\n ) : null}\n <FieldBlock.Column className={layout === 'horizontal' && labelIsHidden ? 'col-span-full' : undefined}>\n {layout === 'vertical' && label ? (\n <FieldBlock.Label\n name={name}\n required={required}\n disabled={disabled}\n className={labelIsHidden ? 'sr-only' : undefined}\n >\n {label}\n </FieldBlock.Label>\n ) : null}\n <FieldBlock.Column className=\"gap-1\">\n <div className=\"group relative\">\n <Input\n ref={setInputRef}\n id={`input-${name}`}\n name={name}\n disabled={disabled}\n value={value}\n placeholder={placeholder}\n onChange={onChange}\n size={size}\n error={error || Boolean(errorMsg)}\n aria-describedby={errorMsg ? fieldErrorId(name) : undefined}\n className={cn(size === 'sm' && 'px-8', (!size || size === 'md') && 'px-9', size === 'lg' && 'px-10')}\n />\n <SearchIcon\n aria-hidden=\"true\"\n className={cn(\n 'absolute top-1/2 left-3 -translate-y-1/2 text-muted-foreground',\n size === 'sm' && 'size-3.5',\n (!size || size === 'md') && 'size-4',\n size === 'lg' && 'size-[1.125rem]',\n )}\n />\n {onReset && (value || isMinimized === false) && (\n <Button\n variant=\"ghost\"\n size={`icon-${size || 'md'}`}\n aria-label=\"Clear search\"\n onClick={() => {\n if (value) {\n onReset();\n }\n if (isMinimized === false) {\n onMinimizedChange?.(true);\n }\n }}\n className=\"absolute top-1/2 right-0 -translate-y-1/2\"\n >\n <XIcon />\n </Button>\n )}\n </div>\n {helpText || errorMsg ? <FieldBlock.Message name={name} helpText={helpText} errorMsg={errorMsg} /> : null}\n </FieldBlock.Column>\n </FieldBlock.Column>\n </FieldBlock.Layout>\n );\n}\n","import type { SelectTriggerProps } from '../../Select/select';\nimport { FieldBlock } from '../block/field-block';\nimport type { FieldBlockErrorMsgProps } from '../block/field-block-error-msg';\nimport type { FieldBlockHelpTextProps } from '../block/field-block-help-text';\nimport type { FieldBlockLabelProps } from '../block/field-block-label';\nimport type { FieldBlockLayoutProps } from '../block/field-block-layout';\nimport { fieldErrorId } from '../block/field-error-id';\nimport { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/ds/components/Select';\nimport { VisuallyHidden } from '@/ds/primitives/visually-hidden';\n\nexport type SelectFieldBlockProps = Pick<FieldBlockLayoutProps, 'layout' | 'labelColumnWidth'> &\n Pick<FieldBlockLabelProps, 'name' | 'required'> & {\n testId?: string;\n label?: string | null;\n labelIsHidden?: boolean;\n labelSize?: FieldBlockLabelProps['size'];\n disabled?: boolean;\n value?: string;\n options: { value: string; label: string }[];\n placeholder?: string;\n onValueChange: (value: string) => void;\n helpText?: FieldBlockHelpTextProps['children'];\n errorMsg?: FieldBlockErrorMsgProps['children'];\n error?: boolean;\n className?: string;\n size?: SelectTriggerProps['size'];\n };\n\n/** @deprecated Use `Field` + `FieldLabel` + `Select`. */\nexport function SelectFieldBlock({\n name,\n helpText,\n errorMsg,\n required = false,\n disabled = false,\n size = 'md',\n value,\n label,\n labelIsHidden = false,\n layout = 'vertical',\n labelColumnWidth,\n options,\n placeholder = 'Select an option',\n onValueChange,\n className,\n}: SelectFieldBlockProps) {\n return (\n <FieldBlock.Layout layout={layout} labelColumnWidth={labelColumnWidth} className={className}>\n {layout === 'horizontal' ? (\n <FieldBlock.Column>\n <FieldBlock.Label name={name} required={required} disabled={disabled}>\n {labelIsHidden ? <VisuallyHidden>{label}</VisuallyHidden> : label}\n </FieldBlock.Label>\n </FieldBlock.Column>\n ) : null}\n <FieldBlock.Column>\n {layout === 'vertical' && label && !labelIsHidden ? (\n <FieldBlock.Label name={name} required={required} disabled={disabled}>\n {label}\n </FieldBlock.Label>\n ) : null}\n <FieldBlock.Column className=\"gap-1\">\n <Select\n aria-label={labelIsHidden ? label : undefined}\n name={name}\n value={value}\n onValueChange={onValueChange}\n disabled={disabled}\n >\n <SelectTrigger\n id={`input-${name}`}\n size={size}\n aria-invalid={errorMsg ? true : undefined}\n aria-describedby={errorMsg ? fieldErrorId(name) : undefined}\n >\n <SelectValue placeholder={placeholder} />\n </SelectTrigger>\n <SelectContent>\n {options.map(option => (\n <SelectItem key={option.value} value={option.value}>\n {option.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n {helpText || errorMsg ? <FieldBlock.Message name={name} helpText={helpText} errorMsg={errorMsg} /> : null}\n </FieldBlock.Column>\n </FieldBlock.Column>\n </FieldBlock.Layout>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"FormFieldBlocks.cjs.js","names":["cn","cn","fieldErrorId","FieldBlock","VisuallyHidden","Input","fieldErrorId","FieldBlock","VisuallyHidden","Textarea","useRef","Tooltip","TooltipTrigger","Button","SearchIcon","TooltipContent","FieldBlock","Input","fieldErrorId","cn","XIcon","FieldBlock","VisuallyHidden","Select","SelectTrigger","fieldErrorId","SelectValue","SelectContent","SelectItem"],"sources":["../../src/ds/components/FormFieldBlocks/layout/field-blocks-layout-column.tsx","../../src/ds/components/FormFieldBlocks/layout/field-blocks-layout-root.tsx","../../src/ds/components/FormFieldBlocks/layout/field-blocks-layout.tsx","../../src/ds/components/FormFieldBlocks/fields/text-field-block.tsx","../../src/ds/components/FormFieldBlocks/fields/textarea-field-block.tsx","../../src/ds/components/FormFieldBlocks/fields/search-field-block.tsx","../../src/ds/components/FormFieldBlocks/fields/select-field-block.tsx"],"sourcesContent":["import { cn } from '@/lib/utils';\n\nexport type FieldBlocksLayoutColumnProps = {\n children: React.ReactNode;\n className?: string;\n};\n\nexport function FieldBlocksLayoutColumn({ children, className }: FieldBlocksLayoutColumnProps) {\n return <div className={cn('grid content-start gap-6', className)}>{children}</div>;\n}\n","import { cn } from '@/lib/utils';\n\nexport type FieldBlocksLayoutRootProps = {\n children: React.ReactNode;\n className?: string;\n columns?: 1 | 2;\n gap?: string;\n};\n\nexport function FieldBlocksLayoutRoot({ children, className, columns = 1, gap }: FieldBlocksLayoutRootProps) {\n return (\n <div\n className={cn(\n 'grid',\n {\n 'grid-cols-1': columns === 1,\n 'grid-cols-2': columns === 2,\n },\n gap ?? 'gap-6',\n className,\n )}\n >\n {children}\n </div>\n );\n}\n","import { FieldBlocksLayoutColumn } from './field-blocks-layout-column';\nimport { FieldBlocksLayoutRoot } from './field-blocks-layout-root';\n\n/** @deprecated Lay fields out with plain grid or flex classes; `FieldGroup` stacks related fields. */\nexport const FieldBlocksLayout = Object.assign(FieldBlocksLayoutRoot, {\n Column: FieldBlocksLayoutColumn,\n});\n","import { Input } from '../../Input';\nimport type { InputProps } from '../../Input';\nimport { FieldBlock } from '../block/field-block';\nimport type { FieldBlockErrorMsgProps } from '../block/field-block-error-msg';\nimport type { FieldBlockHelpTextProps } from '../block/field-block-help-text';\nimport type { FieldBlockLabelProps } from '../block/field-block-label';\nimport type { FieldBlockLayoutProps } from '../block/field-block-layout';\nimport { fieldErrorId } from '../block/field-error-id';\nimport { VisuallyHidden } from '@/ds/primitives/visually-hidden';\n\nexport type TextFieldBlockProps = Pick<FieldBlockLayoutProps, 'layout' | 'labelColumnWidth'> &\n Omit<InputProps, 'name' | 'size'> & {\n name: string;\n labelIsHidden?: boolean;\n label?: FieldBlockLabelProps['children'];\n labelSize?: FieldBlockLabelProps['size'];\n helpText?: FieldBlockHelpTextProps['children'];\n errorMsg?: FieldBlockErrorMsgProps['children'];\n size?: InputProps['size'];\n };\n\n/** @deprecated Use `Field` + `FieldLabel` + `Input`. */\nexport function TextFieldBlock({\n name,\n value,\n label,\n labelIsHidden = false,\n labelColumnWidth,\n helpText,\n error,\n errorMsg,\n required = false,\n disabled = false,\n labelSize,\n layout = 'vertical',\n placeholder,\n size = 'md',\n testId,\n className,\n 'aria-describedby': ariaDescribedBy,\n ...props\n}: TextFieldBlockProps) {\n const describedBy =\n [ariaDescribedBy, errorMsg ? fieldErrorId(name) : undefined].filter(Boolean).join(' ') || undefined;\n\n return (\n <FieldBlock.Layout layout={layout} labelColumnWidth={labelColumnWidth} className={className}>\n {layout === 'horizontal' ? (\n <FieldBlock.Column>\n <FieldBlock.Label name={name} required={required} disabled={disabled} size={labelSize || 'bigger'}>\n {labelIsHidden ? <VisuallyHidden>{label}</VisuallyHidden> : label}\n </FieldBlock.Label>\n </FieldBlock.Column>\n ) : null}\n <FieldBlock.Column>\n {!labelIsHidden && layout === 'vertical' ? (\n <FieldBlock.Label name={name} required={required} disabled={disabled} size={labelSize || 'default'}>\n {label}\n </FieldBlock.Label>\n ) : null}\n <FieldBlock.Column className=\"gap-1\">\n <Input\n id={`input-${name}`}\n name={name}\n disabled={disabled}\n required={required}\n value={value}\n placeholder={placeholder}\n data-testid={testId}\n size={size}\n error={error || Boolean(errorMsg)}\n aria-describedby={describedBy}\n {...props}\n />\n {helpText || errorMsg ? <FieldBlock.Message name={name} helpText={helpText} errorMsg={errorMsg} /> : null}\n </FieldBlock.Column>\n </FieldBlock.Column>\n </FieldBlock.Layout>\n );\n}\n","import { Textarea } from '../../Textarea';\nimport type { TextareaProps } from '../../Textarea';\nimport { FieldBlock } from '../block/field-block';\nimport type { FieldBlockErrorMsgProps } from '../block/field-block-error-msg';\nimport type { FieldBlockHelpTextProps } from '../block/field-block-help-text';\nimport type { FieldBlockLabelProps } from '../block/field-block-label';\nimport type { FieldBlockLayoutProps } from '../block/field-block-layout';\nimport { fieldErrorId } from '../block/field-error-id';\nimport { VisuallyHidden } from '@/ds/primitives/visually-hidden';\n\nexport type TextareaFieldBlockProps = Pick<FieldBlockLayoutProps, 'layout' | 'labelColumnWidth'> &\n Omit<TextareaProps, 'name' | 'size'> & {\n name: string;\n labelIsHidden?: boolean;\n label?: FieldBlockLabelProps['children'];\n labelSize?: FieldBlockLabelProps['size'];\n helpText?: FieldBlockHelpTextProps['children'];\n errorMsg?: FieldBlockErrorMsgProps['children'];\n size?: TextareaProps['size'];\n };\n\n/** @deprecated Use `Field` + `FieldLabel` + `Textarea`. */\nexport function TextareaFieldBlock({\n name,\n label,\n labelIsHidden = false,\n labelColumnWidth,\n helpText,\n error,\n errorMsg,\n required = false,\n disabled = false,\n labelSize,\n layout = 'vertical',\n size = 'md',\n testId,\n className,\n 'aria-describedby': ariaDescribedBy,\n ...props\n}: TextareaFieldBlockProps) {\n const describedBy =\n [ariaDescribedBy, errorMsg ? fieldErrorId(name) : undefined].filter(Boolean).join(' ') || undefined;\n\n return (\n <FieldBlock.Layout layout={layout} labelColumnWidth={labelColumnWidth} className={className}>\n {layout === 'horizontal' ? (\n <FieldBlock.Column>\n <FieldBlock.Label name={name} required={required} disabled={disabled} size={labelSize || 'bigger'}>\n {labelIsHidden ? <VisuallyHidden>{label}</VisuallyHidden> : label}\n </FieldBlock.Label>\n </FieldBlock.Column>\n ) : null}\n <FieldBlock.Column>\n {!labelIsHidden && layout === 'vertical' ? (\n <FieldBlock.Label name={name} required={required} disabled={disabled} size={labelSize || 'default'}>\n {label}\n </FieldBlock.Label>\n ) : null}\n <FieldBlock.Column className=\"gap-1\">\n <Textarea\n id={`input-${name}`}\n name={name}\n disabled={disabled}\n required={required}\n size={size}\n data-testid={testId}\n error={error || Boolean(errorMsg)}\n aria-describedby={describedBy}\n {...props}\n />\n {helpText || errorMsg ? <FieldBlock.Message name={name} helpText={helpText} errorMsg={errorMsg} /> : null}\n </FieldBlock.Column>\n </FieldBlock.Column>\n </FieldBlock.Layout>\n );\n}\n","import { SearchIcon, XIcon } from 'lucide-react';\nimport { useEffect, useRef } from 'react';\nimport type { RefObject } from 'react';\nimport { Button } from '../../Button';\nimport { Input } from '../../Input';\nimport type { InputProps } from '../../Input';\nimport { Tooltip, TooltipContent, TooltipTrigger } from '../../Tooltip';\nimport { FieldBlock } from '../block/field-block';\nimport { fieldErrorId } from '../block/field-error-id';\nimport { cn } from '@/lib/utils';\n\nexport type SearchFieldBlockProps = {\n name: string;\n testId?: string;\n label?: string;\n labelIsHidden?: boolean;\n required?: boolean;\n disabled?: boolean;\n value?: string;\n placeholder?: string;\n onChange?: (e: React.ChangeEvent<HTMLInputElement>) => void;\n onReset?: () => void;\n helpText?: string;\n error?: boolean;\n errorMsg?: string;\n layout?: 'horizontal' | 'vertical';\n className?: string;\n size?: InputProps['size'];\n isMinimized?: boolean;\n onMinimizedChange?: (minimized: boolean) => void;\n /** Gives the caller access to the underlying input, e.g. to focus it from a keyboard shortcut. */\n inputRef?: RefObject<HTMLInputElement | null>;\n};\n\n/** @deprecated Use `SearchInput`. */\nexport function SearchFieldBlock({\n name,\n helpText,\n error,\n errorMsg,\n required = false,\n disabled = false,\n value,\n label,\n labelIsHidden = false,\n layout = 'vertical',\n placeholder = 'Search',\n onChange,\n onReset,\n className,\n size,\n isMinimized,\n onMinimizedChange,\n inputRef: externalInputRef,\n}: SearchFieldBlockProps) {\n const inputRef = useRef<HTMLInputElement>(null);\n\n const setInputRef = (element: HTMLInputElement | null) => {\n inputRef.current = element;\n if (externalInputRef) externalInputRef.current = element;\n };\n useEffect(() => {\n if (isMinimized === false) {\n inputRef.current?.focus();\n }\n }, [isMinimized]);\n\n if (isMinimized) {\n return (\n <Tooltip>\n <TooltipTrigger asChild>\n <Button\n size={`icon-${size || 'sm'}`}\n aria-label={label || 'Search'}\n disabled={disabled}\n onClick={() => onMinimizedChange?.(false)}\n >\n <SearchIcon />\n </Button>\n </TooltipTrigger>\n <TooltipContent>{label || 'Search'}</TooltipContent>\n </Tooltip>\n );\n }\n\n return (\n <FieldBlock.Layout layout={layout} className={className}>\n {layout === 'horizontal' ? (\n <FieldBlock.Column className={labelIsHidden ? 'sr-only' : undefined}>\n <FieldBlock.Label name={name} required={required} disabled={disabled}>\n {label}\n </FieldBlock.Label>\n </FieldBlock.Column>\n ) : null}\n <FieldBlock.Column className={layout === 'horizontal' && labelIsHidden ? 'col-span-full' : undefined}>\n {layout === 'vertical' && label ? (\n <FieldBlock.Label\n name={name}\n required={required}\n disabled={disabled}\n className={labelIsHidden ? 'sr-only' : undefined}\n >\n {label}\n </FieldBlock.Label>\n ) : null}\n <FieldBlock.Column className=\"gap-1\">\n <div className=\"group relative\">\n <Input\n ref={setInputRef}\n id={`input-${name}`}\n name={name}\n disabled={disabled}\n value={value}\n placeholder={placeholder}\n onChange={onChange}\n size={size}\n error={error || Boolean(errorMsg)}\n aria-describedby={errorMsg ? fieldErrorId(name) : undefined}\n className={cn(size === 'sm' && 'px-8', (!size || size === 'md') && 'px-9', size === 'lg' && 'px-10')}\n />\n <SearchIcon\n aria-hidden=\"true\"\n className={cn(\n 'absolute top-1/2 left-3 -translate-y-1/2 text-muted-foreground',\n size === 'sm' && 'size-3.5',\n (!size || size === 'md') && 'size-4',\n size === 'lg' && 'size-[1.125rem]',\n )}\n />\n {onReset && (value || isMinimized === false) && (\n <Button\n variant=\"ghost\"\n size={`icon-${size || 'md'}`}\n aria-label=\"Clear search\"\n onClick={() => {\n if (value) {\n onReset();\n }\n if (isMinimized === false) {\n onMinimizedChange?.(true);\n }\n }}\n className=\"absolute top-1/2 right-0 -translate-y-1/2\"\n >\n <XIcon />\n </Button>\n )}\n </div>\n {helpText || errorMsg ? <FieldBlock.Message name={name} helpText={helpText} errorMsg={errorMsg} /> : null}\n </FieldBlock.Column>\n </FieldBlock.Column>\n </FieldBlock.Layout>\n );\n}\n","import type { SelectTriggerProps } from '../../Select/select';\nimport { FieldBlock } from '../block/field-block';\nimport type { FieldBlockErrorMsgProps } from '../block/field-block-error-msg';\nimport type { FieldBlockHelpTextProps } from '../block/field-block-help-text';\nimport type { FieldBlockLabelProps } from '../block/field-block-label';\nimport type { FieldBlockLayoutProps } from '../block/field-block-layout';\nimport { fieldErrorId } from '../block/field-error-id';\nimport { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/ds/components/Select';\nimport { VisuallyHidden } from '@/ds/primitives/visually-hidden';\n\nexport type SelectFieldBlockProps = Pick<FieldBlockLayoutProps, 'layout' | 'labelColumnWidth'> &\n Pick<FieldBlockLabelProps, 'name' | 'required'> & {\n testId?: string;\n label?: string | null;\n labelIsHidden?: boolean;\n labelSize?: FieldBlockLabelProps['size'];\n disabled?: boolean;\n value?: string;\n options: { value: string; label: string }[];\n placeholder?: string;\n onValueChange: (value: string) => void;\n helpText?: FieldBlockHelpTextProps['children'];\n errorMsg?: FieldBlockErrorMsgProps['children'];\n error?: boolean;\n className?: string;\n size?: SelectTriggerProps['size'];\n };\n\n/** @deprecated Use `Field` + `FieldLabel` + `Select`. */\nexport function SelectFieldBlock({\n name,\n helpText,\n errorMsg,\n required = false,\n disabled = false,\n size = 'md',\n value,\n label,\n labelIsHidden = false,\n layout = 'vertical',\n labelColumnWidth,\n options,\n placeholder = 'Select an option',\n onValueChange,\n className,\n}: SelectFieldBlockProps) {\n return (\n <FieldBlock.Layout layout={layout} labelColumnWidth={labelColumnWidth} className={className}>\n {layout === 'horizontal' ? (\n <FieldBlock.Column>\n <FieldBlock.Label name={name} required={required} disabled={disabled}>\n {labelIsHidden ? <VisuallyHidden>{label}</VisuallyHidden> : label}\n </FieldBlock.Label>\n </FieldBlock.Column>\n ) : null}\n <FieldBlock.Column>\n {layout === 'vertical' && label && !labelIsHidden ? (\n <FieldBlock.Label name={name} required={required} disabled={disabled}>\n {label}\n </FieldBlock.Label>\n ) : null}\n <FieldBlock.Column className=\"gap-1\">\n <Select\n aria-label={labelIsHidden ? label : undefined}\n name={name}\n value={value}\n onValueChange={onValueChange}\n disabled={disabled}\n >\n <SelectTrigger\n id={`input-${name}`}\n size={size}\n aria-invalid={errorMsg ? true : undefined}\n aria-describedby={errorMsg ? fieldErrorId(name) : undefined}\n >\n <SelectValue placeholder={placeholder} />\n </SelectTrigger>\n <SelectContent>\n {options.map(option => (\n <SelectItem key={option.value} value={option.value}>\n {option.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n {helpText || errorMsg ? <FieldBlock.Message name={name} helpText={helpText} errorMsg={errorMsg} /> : null}\n </FieldBlock.Column>\n </FieldBlock.Column>\n </FieldBlock.Layout>\n );\n}\n"],"mappings":";;;;;;;;;;;;;AAOA,SAAgB,wBAAwB,EAAE,UAAU,aAA2C;CAC7F,OAAO,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;EAAK,WAAWA,cAAAA,GAAG,4BAA4B,SAAS;EAAI;CAAc,CAAA;AACnF;;ACAA,SAAgB,sBAAsB,EAAE,UAAU,WAAW,UAAU,GAAG,OAAmC;CAC3G,OACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;EACE,WAAWC,cAAAA,GACT,QACA;GACE,eAAe,YAAY;GAC3B,eAAe,YAAY;EAC7B,GACA,OAAO,SACP,SACF;EAEC;CACE,CAAA;AAET;;;ACrBA,IAAa,oBAAoB,OAAO,OAAO,uBAAuB,EACpE,QAAQ,wBACV,CAAC;;;ACgBD,SAAgB,eAAe,EAC7B,MACA,OACA,OACA,gBAAgB,OAChB,kBACA,UACA,OACA,UACA,WAAW,OACX,WAAW,OACX,WACA,SAAS,YACT,aACA,OAAO,MACP,QACA,WACA,oBAAoB,iBACpB,GAAG,SACmB;CACtB,MAAM,cACJ,CAAC,iBAAiB,WAAWC,uBAAAA,aAAa,IAAI,IAAI,KAAA,CAAS,CAAC,CAAC,OAAO,OAAO,CAAC,CAAC,KAAK,GAAG,KAAK,KAAA;CAE5F,OACE,iBAAA,GAAA,kBAAA,KAAA,CAACC,uBAAAA,WAAW,QAAZ;EAA2B;EAA0B;EAA6B;EAAlF,UAAA,CACG,WAAW,eACV,iBAAA,GAAA,kBAAA,IAAA,CAACA,uBAAAA,WAAW,QAAZ,EAAA,UACE,iBAAA,GAAA,kBAAA,IAAA,CAACA,uBAAAA,WAAW,OAAZ;GAAwB;GAAgB;GAAoB;GAAU,MAAM,aAAa;GACtF,UAAA,gBAAgB,iBAAA,GAAA,kBAAA,IAAA,CAACC,gCAAAA,gBAAD,EAAA,UAAiB,MAAsB,CAAA,IAAI;EAC5C,CAAA,EACD,CAAA,IACjB,MACJ,iBAAA,GAAA,kBAAA,KAAA,CAACD,uBAAAA,WAAW,QAAZ,EAAA,UAAA,CACG,CAAC,iBAAiB,WAAW,aAC5B,iBAAA,GAAA,kBAAA,IAAA,CAACA,uBAAAA,WAAW,OAAZ;GAAwB;GAAgB;GAAoB;GAAU,MAAM,aAAa;GACtF,UAAA;EACe,CAAA,IAChB,MACJ,iBAAA,GAAA,kBAAA,KAAA,CAACA,uBAAAA,WAAW,QAAZ;GAAmB,WAAU;GAA7B,UAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAACE,cAAAA,OAAD;IACE,IAAI,SAAS;IACP;IACI;IACA;IACH;IACM;IACb,eAAa;IACP;IACN,OAAO,SAAS,QAAQ,QAAQ;IAChC,oBAAkB;IAClB,GAAI;GACL,CAAA,GACA,YAAY,WAAW,iBAAA,GAAA,kBAAA,IAAA,CAACF,uBAAAA,WAAW,SAAZ;IAA0B;IAAgB;IAAoB;GAAW,CAAA,IAAI,IACpF;EACF,CAAA,CAAA,EAAA,CAAA,CACF;;AAEvB;;;ACzDA,SAAgB,mBAAmB,EACjC,MACA,OACA,gBAAgB,OAChB,kBACA,UACA,OACA,UACA,WAAW,OACX,WAAW,OACX,WACA,SAAS,YACT,OAAO,MACP,QACA,WACA,oBAAoB,iBACpB,GAAG,SACuB;CAC1B,MAAM,cACJ,CAAC,iBAAiB,WAAWG,uBAAAA,aAAa,IAAI,IAAI,KAAA,CAAS,CAAC,CAAC,OAAO,OAAO,CAAC,CAAC,KAAK,GAAG,KAAK,KAAA;CAE5F,OACE,iBAAA,GAAA,kBAAA,KAAA,CAACC,uBAAAA,WAAW,QAAZ;EAA2B;EAA0B;EAA6B;EAAlF,UAAA,CACG,WAAW,eACV,iBAAA,GAAA,kBAAA,IAAA,CAACA,uBAAAA,WAAW,QAAZ,EAAA,UACE,iBAAA,GAAA,kBAAA,IAAA,CAACA,uBAAAA,WAAW,OAAZ;GAAwB;GAAgB;GAAoB;GAAU,MAAM,aAAa;GACtF,UAAA,gBAAgB,iBAAA,GAAA,kBAAA,IAAA,CAACC,gCAAAA,gBAAD,EAAA,UAAiB,MAAsB,CAAA,IAAI;EAC5C,CAAA,EACD,CAAA,IACjB,MACJ,iBAAA,GAAA,kBAAA,KAAA,CAACD,uBAAAA,WAAW,QAAZ,EAAA,UAAA,CACG,CAAC,iBAAiB,WAAW,aAC5B,iBAAA,GAAA,kBAAA,IAAA,CAACA,uBAAAA,WAAW,OAAZ;GAAwB;GAAgB;GAAoB;GAAU,MAAM,aAAa;GACtF,UAAA;EACe,CAAA,IAChB,MACJ,iBAAA,GAAA,kBAAA,KAAA,CAACA,uBAAAA,WAAW,QAAZ;GAAmB,WAAU;GAA7B,UAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAACE,4BAAAA,UAAD;IACE,IAAI,SAAS;IACP;IACI;IACA;IACJ;IACN,eAAa;IACb,OAAO,SAAS,QAAQ,QAAQ;IAChC,oBAAkB;IAClB,GAAI;GACL,CAAA,GACA,YAAY,WAAW,iBAAA,GAAA,kBAAA,IAAA,CAACF,uBAAAA,WAAW,SAAZ;IAA0B;IAAgB;IAAoB;GAAW,CAAA,IAAI,IACpF;EACF,CAAA,CAAA,EAAA,CAAA,CACF;;AAEvB;;;ACxCA,SAAgB,iBAAiB,EAC/B,MACA,UACA,OACA,UACA,WAAW,OACX,WAAW,OACX,OACA,OACA,gBAAgB,OAChB,SAAS,YACT,cAAc,UACd,UACA,SACA,WACA,MACA,aACA,mBACA,UAAU,oBACc;CACxB,MAAM,YAAA,GAAWG,MAAAA,OAAAA,CAAyB,IAAI;CAE9C,MAAM,eAAe,YAAqC;EACxD,SAAS,UAAU;EACnB,IAAI,kBAAkB,iBAAiB,UAAU;CACnD;CACA,CAAA,GAAA,MAAA,UAAA,OAAgB;EACd,IAAI,gBAAgB,OAClB,SAAS,SAAS,MAAM;CAE5B,GAAG,CAAC,WAAW,CAAC;CAEhB,IAAI,aACF,OACE,iBAAA,GAAA,kBAAA,KAAA,CAACC,gBAAAA,SAAD,EAAA,UAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAACC,gBAAAA,gBAAD;EAAgB,SAAA;EACd,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAACC,eAAAA,QAAD;GACE,MAAM,QAAQ,QAAQ;GACtB,cAAY,SAAS;GACX;GACV,eAAe,oBAAoB,KAAK;GAExC,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAACC,aAAAA,YAAD,CAAa,CAAA;EACP,CAAA;CACM,CAAA,GAChB,iBAAA,GAAA,kBAAA,IAAA,CAACC,gBAAAA,gBAAD,EAAA,UAAiB,SAAS,SAAyB,CAAA,CAC5C,EAAA,CAAA;CAIb,OACE,iBAAA,GAAA,kBAAA,KAAA,CAACC,uBAAAA,WAAW,QAAZ;EAA2B;EAAmB;EAA9C,UAAA,CACG,WAAW,eACV,iBAAA,GAAA,kBAAA,IAAA,CAACA,uBAAAA,WAAW,QAAZ;GAAmB,WAAW,gBAAgB,YAAY,KAAA;GACxD,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAACA,uBAAAA,WAAW,OAAZ;IAAwB;IAAgB;IAAoB;IACzD,UAAA;GACe,CAAA;EACD,CAAA,IACjB,MACJ,iBAAA,GAAA,kBAAA,KAAA,CAACA,uBAAAA,WAAW,QAAZ;GAAmB,WAAW,WAAW,gBAAgB,gBAAgB,kBAAkB,KAAA;GAA3F,UAAA,CACG,WAAW,cAAc,QACxB,iBAAA,GAAA,kBAAA,IAAA,CAACA,uBAAAA,WAAW,OAAZ;IACQ;IACI;IACA;IACV,WAAW,gBAAgB,YAAY,KAAA;IAEtC,UAAA;GACe,CAAA,IAChB,MACJ,iBAAA,GAAA,kBAAA,KAAA,CAACA,uBAAAA,WAAW,QAAZ;IAAmB,WAAU;IAA7B,UAAA,CACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;KAAK,WAAU;KAAf,UAAA;MACE,iBAAA,GAAA,kBAAA,IAAA,CAACC,cAAAA,OAAD;OACE,KAAK;OACL,IAAI,SAAS;OACP;OACI;OACH;OACM;OACH;OACJ;OACN,OAAO,SAAS,QAAQ,QAAQ;OAChC,oBAAkB,WAAWC,uBAAAA,aAAa,IAAI,IAAI,KAAA;OAClD,WAAWC,cAAAA,GAAG,SAAS,QAAQ,SAAS,CAAC,QAAQ,SAAS,SAAS,QAAQ,SAAS,QAAQ,OAAO;MACpG,CAAA;MACD,iBAAA,GAAA,kBAAA,IAAA,CAACL,aAAAA,YAAD;OACE,eAAY;OACZ,WAAWK,cAAAA,GACT,kEACA,SAAS,QAAQ,aAChB,CAAC,QAAQ,SAAS,SAAS,UAC5B,SAAS,QAAQ,iBACnB;MACD,CAAA;MACA,YAAY,SAAS,gBAAgB,UACpC,iBAAA,GAAA,kBAAA,IAAA,CAACN,eAAAA,QAAD;OACE,SAAQ;OACR,MAAM,QAAQ,QAAQ;OACtB,cAAW;OACX,eAAe;QACb,IAAI,OACF,QAAQ;QAEV,IAAI,gBAAgB,OAClB,oBAAoB,IAAI;OAE5B;OACA,WAAU;OAEV,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAACO,aAAAA,OAAD,CAAQ,CAAA;MACF,CAAA;KAEP;IACJ,CAAA,GAAA,YAAY,WAAW,iBAAA,GAAA,kBAAA,IAAA,CAACJ,uBAAAA,WAAW,SAAZ;KAA0B;KAAgB;KAAoB;IAAW,CAAA,IAAI,IACpF;GACF,CAAA,CAAA;EACF,CAAA,CAAA;;AAEvB;;;AC5HA,SAAgB,iBAAiB,EAC/B,MACA,UACA,UACA,WAAW,OACX,WAAW,OACX,OAAO,MACP,OACA,OACA,gBAAgB,OAChB,SAAS,YACT,kBACA,SACA,cAAc,oBACd,eACA,aACwB;CACxB,OACE,iBAAA,GAAA,kBAAA,KAAA,CAACK,uBAAAA,WAAW,QAAZ;EAA2B;EAA0B;EAA6B;EAAlF,UAAA,CACG,WAAW,eACV,iBAAA,GAAA,kBAAA,IAAA,CAACA,uBAAAA,WAAW,QAAZ,EAAA,UACE,iBAAA,GAAA,kBAAA,IAAA,CAACA,uBAAAA,WAAW,OAAZ;GAAwB;GAAgB;GAAoB;GACzD,UAAA,gBAAgB,iBAAA,GAAA,kBAAA,IAAA,CAACC,gCAAAA,gBAAD,EAAA,UAAiB,MAAsB,CAAA,IAAI;EAC5C,CAAA,EACD,CAAA,IACjB,MACJ,iBAAA,GAAA,kBAAA,KAAA,CAACD,uBAAAA,WAAW,QAAZ,EAAA,UAAA,CACG,WAAW,cAAc,SAAS,CAAC,gBAClC,iBAAA,GAAA,kBAAA,IAAA,CAACA,uBAAAA,WAAW,OAAZ;GAAwB;GAAgB;GAAoB;GACzD,UAAA;EACe,CAAA,IAChB,MACJ,iBAAA,GAAA,kBAAA,KAAA,CAACA,uBAAAA,WAAW,QAAZ;GAAmB,WAAU;GAA7B,UAAA,CACE,iBAAA,GAAA,kBAAA,KAAA,CAACE,eAAAA,QAAD;IACE,cAAY,gBAAgB,QAAQ,KAAA;IAC9B;IACC;IACQ;IACL;IALZ,UAAA,CAOE,iBAAA,GAAA,kBAAA,IAAA,CAACC,eAAAA,eAAD;KACE,IAAI,SAAS;KACP;KACN,gBAAc,WAAW,OAAO,KAAA;KAChC,oBAAkB,WAAWC,uBAAAA,aAAa,IAAI,IAAI,KAAA;KAElD,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAACC,eAAAA,aAAD,EAA0B,YAAc,CAAA;IAC3B,CAAA,GACf,iBAAA,GAAA,kBAAA,IAAA,CAACC,eAAAA,eAAD,EAAA,UACG,QAAQ,KAAI,WACX,iBAAA,GAAA,kBAAA,IAAA,CAACC,eAAAA,YAAD;KAA+B,OAAO,OAAO;KAC1C,UAAA,OAAO;IACE,GAFK,OAAO,KAEZ,CACb,EACY,CAAA,CACT;GACP,CAAA,GAAA,YAAY,WAAW,iBAAA,GAAA,kBAAA,IAAA,CAACP,uBAAAA,WAAW,SAAZ;IAA0B;IAAgB;IAAoB;GAAW,CAAA,IAAI,IACpF;EACF,CAAA,CAAA,EAAA,CAAA,CACF;;AAEvB"}
@@ -113,7 +113,7 @@ function TextareaFieldBlock({ name, label, labelIsHidden = false, labelColumnWid
113
113
  }
114
114
  // src/ds/components/FormFieldBlocks/fields/search-field-block.tsx
115
115
  /** @deprecated Use `SearchInput`. */
116
- function SearchFieldBlock({ name, helpText, error, errorMsg, required = false, disabled = false, value, label, labelIsHidden = false, layout = "vertical", placeholder = "Search...", onChange, onReset, className, size, isMinimized, onMinimizedChange, inputRef: externalInputRef }) {
116
+ function SearchFieldBlock({ name, helpText, error, errorMsg, required = false, disabled = false, value, label, labelIsHidden = false, layout = "vertical", placeholder = "Search", onChange, onReset, className, size, isMinimized, onMinimizedChange, inputRef: externalInputRef }) {
117
117
  const inputRef = useRef(null);
118
118
  const setInputRef = (element) => {
119
119
  inputRef.current = element;
@@ -1 +1 @@
1
- {"version":3,"file":"FormFieldBlocks.es.js","names":[],"sources":["../../src/ds/components/FormFieldBlocks/layout/field-blocks-layout-column.tsx","../../src/ds/components/FormFieldBlocks/layout/field-blocks-layout-root.tsx","../../src/ds/components/FormFieldBlocks/layout/field-blocks-layout.tsx","../../src/ds/components/FormFieldBlocks/fields/text-field-block.tsx","../../src/ds/components/FormFieldBlocks/fields/textarea-field-block.tsx","../../src/ds/components/FormFieldBlocks/fields/search-field-block.tsx","../../src/ds/components/FormFieldBlocks/fields/select-field-block.tsx"],"sourcesContent":["import { cn } from '@/lib/utils';\n\nexport type FieldBlocksLayoutColumnProps = {\n children: React.ReactNode;\n className?: string;\n};\n\nexport function FieldBlocksLayoutColumn({ children, className }: FieldBlocksLayoutColumnProps) {\n return <div className={cn('grid content-start gap-6', className)}>{children}</div>;\n}\n","import { cn } from '@/lib/utils';\n\nexport type FieldBlocksLayoutRootProps = {\n children: React.ReactNode;\n className?: string;\n columns?: 1 | 2;\n gap?: string;\n};\n\nexport function FieldBlocksLayoutRoot({ children, className, columns = 1, gap }: FieldBlocksLayoutRootProps) {\n return (\n <div\n className={cn(\n 'grid',\n {\n 'grid-cols-1': columns === 1,\n 'grid-cols-2': columns === 2,\n },\n gap ?? 'gap-6',\n className,\n )}\n >\n {children}\n </div>\n );\n}\n","import { FieldBlocksLayoutColumn } from './field-blocks-layout-column';\nimport { FieldBlocksLayoutRoot } from './field-blocks-layout-root';\n\n/** @deprecated Lay fields out with plain grid or flex classes; `FieldGroup` stacks related fields. */\nexport const FieldBlocksLayout = Object.assign(FieldBlocksLayoutRoot, {\n Column: FieldBlocksLayoutColumn,\n});\n","import { Input } from '../../Input';\nimport type { InputProps } from '../../Input';\nimport { FieldBlock } from '../block/field-block';\nimport type { FieldBlockErrorMsgProps } from '../block/field-block-error-msg';\nimport type { FieldBlockHelpTextProps } from '../block/field-block-help-text';\nimport type { FieldBlockLabelProps } from '../block/field-block-label';\nimport type { FieldBlockLayoutProps } from '../block/field-block-layout';\nimport { fieldErrorId } from '../block/field-error-id';\nimport { VisuallyHidden } from '@/ds/primitives/visually-hidden';\n\nexport type TextFieldBlockProps = Pick<FieldBlockLayoutProps, 'layout' | 'labelColumnWidth'> &\n Omit<InputProps, 'name' | 'size'> & {\n name: string;\n labelIsHidden?: boolean;\n label?: FieldBlockLabelProps['children'];\n labelSize?: FieldBlockLabelProps['size'];\n helpText?: FieldBlockHelpTextProps['children'];\n errorMsg?: FieldBlockErrorMsgProps['children'];\n size?: InputProps['size'];\n };\n\n/** @deprecated Use `Field` + `FieldLabel` + `Input`. */\nexport function TextFieldBlock({\n name,\n value,\n label,\n labelIsHidden = false,\n labelColumnWidth,\n helpText,\n error,\n errorMsg,\n required = false,\n disabled = false,\n labelSize,\n layout = 'vertical',\n placeholder,\n size = 'md',\n testId,\n className,\n 'aria-describedby': ariaDescribedBy,\n ...props\n}: TextFieldBlockProps) {\n const describedBy =\n [ariaDescribedBy, errorMsg ? fieldErrorId(name) : undefined].filter(Boolean).join(' ') || undefined;\n\n return (\n <FieldBlock.Layout layout={layout} labelColumnWidth={labelColumnWidth} className={className}>\n {layout === 'horizontal' ? (\n <FieldBlock.Column>\n <FieldBlock.Label name={name} required={required} disabled={disabled} size={labelSize || 'bigger'}>\n {labelIsHidden ? <VisuallyHidden>{label}</VisuallyHidden> : label}\n </FieldBlock.Label>\n </FieldBlock.Column>\n ) : null}\n <FieldBlock.Column>\n {!labelIsHidden && layout === 'vertical' ? (\n <FieldBlock.Label name={name} required={required} disabled={disabled} size={labelSize || 'default'}>\n {label}\n </FieldBlock.Label>\n ) : null}\n <FieldBlock.Column className=\"gap-1\">\n <Input\n id={`input-${name}`}\n name={name}\n disabled={disabled}\n required={required}\n value={value}\n placeholder={placeholder}\n data-testid={testId}\n size={size}\n error={error || Boolean(errorMsg)}\n aria-describedby={describedBy}\n {...props}\n />\n {helpText || errorMsg ? <FieldBlock.Message name={name} helpText={helpText} errorMsg={errorMsg} /> : null}\n </FieldBlock.Column>\n </FieldBlock.Column>\n </FieldBlock.Layout>\n );\n}\n","import { Textarea } from '../../Textarea';\nimport type { TextareaProps } from '../../Textarea';\nimport { FieldBlock } from '../block/field-block';\nimport type { FieldBlockErrorMsgProps } from '../block/field-block-error-msg';\nimport type { FieldBlockHelpTextProps } from '../block/field-block-help-text';\nimport type { FieldBlockLabelProps } from '../block/field-block-label';\nimport type { FieldBlockLayoutProps } from '../block/field-block-layout';\nimport { fieldErrorId } from '../block/field-error-id';\nimport { VisuallyHidden } from '@/ds/primitives/visually-hidden';\n\nexport type TextareaFieldBlockProps = Pick<FieldBlockLayoutProps, 'layout' | 'labelColumnWidth'> &\n Omit<TextareaProps, 'name' | 'size'> & {\n name: string;\n labelIsHidden?: boolean;\n label?: FieldBlockLabelProps['children'];\n labelSize?: FieldBlockLabelProps['size'];\n helpText?: FieldBlockHelpTextProps['children'];\n errorMsg?: FieldBlockErrorMsgProps['children'];\n size?: TextareaProps['size'];\n };\n\n/** @deprecated Use `Field` + `FieldLabel` + `Textarea`. */\nexport function TextareaFieldBlock({\n name,\n label,\n labelIsHidden = false,\n labelColumnWidth,\n helpText,\n error,\n errorMsg,\n required = false,\n disabled = false,\n labelSize,\n layout = 'vertical',\n size = 'md',\n testId,\n className,\n 'aria-describedby': ariaDescribedBy,\n ...props\n}: TextareaFieldBlockProps) {\n const describedBy =\n [ariaDescribedBy, errorMsg ? fieldErrorId(name) : undefined].filter(Boolean).join(' ') || undefined;\n\n return (\n <FieldBlock.Layout layout={layout} labelColumnWidth={labelColumnWidth} className={className}>\n {layout === 'horizontal' ? (\n <FieldBlock.Column>\n <FieldBlock.Label name={name} required={required} disabled={disabled} size={labelSize || 'bigger'}>\n {labelIsHidden ? <VisuallyHidden>{label}</VisuallyHidden> : label}\n </FieldBlock.Label>\n </FieldBlock.Column>\n ) : null}\n <FieldBlock.Column>\n {!labelIsHidden && layout === 'vertical' ? (\n <FieldBlock.Label name={name} required={required} disabled={disabled} size={labelSize || 'default'}>\n {label}\n </FieldBlock.Label>\n ) : null}\n <FieldBlock.Column className=\"gap-1\">\n <Textarea\n id={`input-${name}`}\n name={name}\n disabled={disabled}\n required={required}\n size={size}\n data-testid={testId}\n error={error || Boolean(errorMsg)}\n aria-describedby={describedBy}\n {...props}\n />\n {helpText || errorMsg ? <FieldBlock.Message name={name} helpText={helpText} errorMsg={errorMsg} /> : null}\n </FieldBlock.Column>\n </FieldBlock.Column>\n </FieldBlock.Layout>\n );\n}\n","import { SearchIcon, XIcon } from 'lucide-react';\nimport { useEffect, useRef } from 'react';\nimport type { RefObject } from 'react';\nimport { Button } from '../../Button';\nimport { Input } from '../../Input';\nimport type { InputProps } from '../../Input';\nimport { Tooltip, TooltipContent, TooltipTrigger } from '../../Tooltip';\nimport { FieldBlock } from '../block/field-block';\nimport { fieldErrorId } from '../block/field-error-id';\nimport { cn } from '@/lib/utils';\n\nexport type SearchFieldBlockProps = {\n name: string;\n testId?: string;\n label?: string;\n labelIsHidden?: boolean;\n required?: boolean;\n disabled?: boolean;\n value?: string;\n placeholder?: string;\n onChange?: (e: React.ChangeEvent<HTMLInputElement>) => void;\n onReset?: () => void;\n helpText?: string;\n error?: boolean;\n errorMsg?: string;\n layout?: 'horizontal' | 'vertical';\n className?: string;\n size?: InputProps['size'];\n isMinimized?: boolean;\n onMinimizedChange?: (minimized: boolean) => void;\n /** Gives the caller access to the underlying input, e.g. to focus it from a keyboard shortcut. */\n inputRef?: RefObject<HTMLInputElement | null>;\n};\n\n/** @deprecated Use `SearchInput`. */\nexport function SearchFieldBlock({\n name,\n helpText,\n error,\n errorMsg,\n required = false,\n disabled = false,\n value,\n label,\n labelIsHidden = false,\n layout = 'vertical',\n placeholder = 'Search...',\n onChange,\n onReset,\n className,\n size,\n isMinimized,\n onMinimizedChange,\n inputRef: externalInputRef,\n}: SearchFieldBlockProps) {\n const inputRef = useRef<HTMLInputElement>(null);\n\n const setInputRef = (element: HTMLInputElement | null) => {\n inputRef.current = element;\n if (externalInputRef) externalInputRef.current = element;\n };\n useEffect(() => {\n if (isMinimized === false) {\n inputRef.current?.focus();\n }\n }, [isMinimized]);\n\n if (isMinimized) {\n return (\n <Tooltip>\n <TooltipTrigger asChild>\n <Button\n size={`icon-${size || 'sm'}`}\n aria-label={label || 'Search'}\n disabled={disabled}\n onClick={() => onMinimizedChange?.(false)}\n >\n <SearchIcon />\n </Button>\n </TooltipTrigger>\n <TooltipContent>{label || 'Search'}</TooltipContent>\n </Tooltip>\n );\n }\n\n return (\n <FieldBlock.Layout layout={layout} className={className}>\n {layout === 'horizontal' ? (\n <FieldBlock.Column className={labelIsHidden ? 'sr-only' : undefined}>\n <FieldBlock.Label name={name} required={required} disabled={disabled}>\n {label}\n </FieldBlock.Label>\n </FieldBlock.Column>\n ) : null}\n <FieldBlock.Column className={layout === 'horizontal' && labelIsHidden ? 'col-span-full' : undefined}>\n {layout === 'vertical' && label ? (\n <FieldBlock.Label\n name={name}\n required={required}\n disabled={disabled}\n className={labelIsHidden ? 'sr-only' : undefined}\n >\n {label}\n </FieldBlock.Label>\n ) : null}\n <FieldBlock.Column className=\"gap-1\">\n <div className=\"group relative\">\n <Input\n ref={setInputRef}\n id={`input-${name}`}\n name={name}\n disabled={disabled}\n value={value}\n placeholder={placeholder}\n onChange={onChange}\n size={size}\n error={error || Boolean(errorMsg)}\n aria-describedby={errorMsg ? fieldErrorId(name) : undefined}\n className={cn(size === 'sm' && 'px-8', (!size || size === 'md') && 'px-9', size === 'lg' && 'px-10')}\n />\n <SearchIcon\n aria-hidden=\"true\"\n className={cn(\n 'absolute top-1/2 left-3 -translate-y-1/2 text-muted-foreground',\n size === 'sm' && 'size-3.5',\n (!size || size === 'md') && 'size-4',\n size === 'lg' && 'size-[1.125rem]',\n )}\n />\n {onReset && (value || isMinimized === false) && (\n <Button\n variant=\"ghost\"\n size={`icon-${size || 'md'}`}\n aria-label=\"Clear search\"\n onClick={() => {\n if (value) {\n onReset();\n }\n if (isMinimized === false) {\n onMinimizedChange?.(true);\n }\n }}\n className=\"absolute top-1/2 right-0 -translate-y-1/2\"\n >\n <XIcon />\n </Button>\n )}\n </div>\n {helpText || errorMsg ? <FieldBlock.Message name={name} helpText={helpText} errorMsg={errorMsg} /> : null}\n </FieldBlock.Column>\n </FieldBlock.Column>\n </FieldBlock.Layout>\n );\n}\n","import type { SelectTriggerProps } from '../../Select/select';\nimport { FieldBlock } from '../block/field-block';\nimport type { FieldBlockErrorMsgProps } from '../block/field-block-error-msg';\nimport type { FieldBlockHelpTextProps } from '../block/field-block-help-text';\nimport type { FieldBlockLabelProps } from '../block/field-block-label';\nimport type { FieldBlockLayoutProps } from '../block/field-block-layout';\nimport { fieldErrorId } from '../block/field-error-id';\nimport { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/ds/components/Select';\nimport { VisuallyHidden } from '@/ds/primitives/visually-hidden';\n\nexport type SelectFieldBlockProps = Pick<FieldBlockLayoutProps, 'layout' | 'labelColumnWidth'> &\n Pick<FieldBlockLabelProps, 'name' | 'required'> & {\n testId?: string;\n label?: string | null;\n labelIsHidden?: boolean;\n labelSize?: FieldBlockLabelProps['size'];\n disabled?: boolean;\n value?: string;\n options: { value: string; label: string }[];\n placeholder?: string;\n onValueChange: (value: string) => void;\n helpText?: FieldBlockHelpTextProps['children'];\n errorMsg?: FieldBlockErrorMsgProps['children'];\n error?: boolean;\n className?: string;\n size?: SelectTriggerProps['size'];\n };\n\n/** @deprecated Use `Field` + `FieldLabel` + `Select`. */\nexport function SelectFieldBlock({\n name,\n helpText,\n errorMsg,\n required = false,\n disabled = false,\n size = 'md',\n value,\n label,\n labelIsHidden = false,\n layout = 'vertical',\n labelColumnWidth,\n options,\n placeholder = 'Select an option',\n onValueChange,\n className,\n}: SelectFieldBlockProps) {\n return (\n <FieldBlock.Layout layout={layout} labelColumnWidth={labelColumnWidth} className={className}>\n {layout === 'horizontal' ? (\n <FieldBlock.Column>\n <FieldBlock.Label name={name} required={required} disabled={disabled}>\n {labelIsHidden ? <VisuallyHidden>{label}</VisuallyHidden> : label}\n </FieldBlock.Label>\n </FieldBlock.Column>\n ) : null}\n <FieldBlock.Column>\n {layout === 'vertical' && label && !labelIsHidden ? (\n <FieldBlock.Label name={name} required={required} disabled={disabled}>\n {label}\n </FieldBlock.Label>\n ) : null}\n <FieldBlock.Column className=\"gap-1\">\n <Select\n aria-label={labelIsHidden ? label : undefined}\n name={name}\n value={value}\n onValueChange={onValueChange}\n disabled={disabled}\n >\n <SelectTrigger\n id={`input-${name}`}\n size={size}\n aria-invalid={errorMsg ? true : undefined}\n aria-describedby={errorMsg ? fieldErrorId(name) : undefined}\n >\n <SelectValue placeholder={placeholder} />\n </SelectTrigger>\n <SelectContent>\n {options.map(option => (\n <SelectItem key={option.value} value={option.value}>\n {option.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n {helpText || errorMsg ? <FieldBlock.Message name={name} helpText={helpText} errorMsg={errorMsg} /> : null}\n </FieldBlock.Column>\n </FieldBlock.Column>\n </FieldBlock.Layout>\n );\n}\n"],"mappings":";;;;;;;;;;;;AAOA,SAAgB,wBAAwB,EAAE,UAAU,aAA2C;CAC7F,OAAO,oBAAC,OAAD;EAAK,WAAW,GAAG,4BAA4B,SAAS;EAAI;CAAc,CAAA;AACnF;;ACAA,SAAgB,sBAAsB,EAAE,UAAU,WAAW,UAAU,GAAG,OAAmC;CAC3G,OACE,oBAAC,OAAD;EACE,WAAW,GACT,QACA;GACE,eAAe,YAAY;GAC3B,eAAe,YAAY;EAC7B,GACA,OAAO,SACP,SACF;EAEC;CACE,CAAA;AAET;;;ACrBA,IAAa,oBAAoB,OAAO,OAAO,uBAAuB,EACpE,QAAQ,wBACV,CAAC;;;ACgBD,SAAgB,eAAe,EAC7B,MACA,OACA,OACA,gBAAgB,OAChB,kBACA,UACA,OACA,UACA,WAAW,OACX,WAAW,OACX,WACA,SAAS,YACT,aACA,OAAO,MACP,QACA,WACA,oBAAoB,iBACpB,GAAG,SACmB;CACtB,MAAM,cACJ,CAAC,iBAAiB,WAAW,aAAa,IAAI,IAAI,KAAA,CAAS,CAAC,CAAC,OAAO,OAAO,CAAC,CAAC,KAAK,GAAG,KAAK,KAAA;CAE5F,OACE,qBAAC,WAAW,QAAZ;EAA2B;EAA0B;EAA6B;EAAlF,UAAA,CACG,WAAW,eACV,oBAAC,WAAW,QAAZ,EAAA,UACE,oBAAC,WAAW,OAAZ;GAAwB;GAAgB;GAAoB;GAAU,MAAM,aAAa;GACtF,UAAA,gBAAgB,oBAAC,gBAAD,EAAA,UAAiB,MAAsB,CAAA,IAAI;EAC5C,CAAA,EACD,CAAA,IACjB,MACJ,qBAAC,WAAW,QAAZ,EAAA,UAAA,CACG,CAAC,iBAAiB,WAAW,aAC5B,oBAAC,WAAW,OAAZ;GAAwB;GAAgB;GAAoB;GAAU,MAAM,aAAa;GACtF,UAAA;EACe,CAAA,IAChB,MACJ,qBAAC,WAAW,QAAZ;GAAmB,WAAU;GAA7B,UAAA,CACE,oBAAC,OAAD;IACE,IAAI,SAAS;IACP;IACI;IACA;IACH;IACM;IACb,eAAa;IACP;IACN,OAAO,SAAS,QAAQ,QAAQ;IAChC,oBAAkB;IAClB,GAAI;GACL,CAAA,GACA,YAAY,WAAW,oBAAC,WAAW,SAAZ;IAA0B;IAAgB;IAAoB;GAAW,CAAA,IAAI,IACpF;EACF,CAAA,CAAA,EAAA,CAAA,CACF;;AAEvB;;;ACzDA,SAAgB,mBAAmB,EACjC,MACA,OACA,gBAAgB,OAChB,kBACA,UACA,OACA,UACA,WAAW,OACX,WAAW,OACX,WACA,SAAS,YACT,OAAO,MACP,QACA,WACA,oBAAoB,iBACpB,GAAG,SACuB;CAC1B,MAAM,cACJ,CAAC,iBAAiB,WAAW,aAAa,IAAI,IAAI,KAAA,CAAS,CAAC,CAAC,OAAO,OAAO,CAAC,CAAC,KAAK,GAAG,KAAK,KAAA;CAE5F,OACE,qBAAC,WAAW,QAAZ;EAA2B;EAA0B;EAA6B;EAAlF,UAAA,CACG,WAAW,eACV,oBAAC,WAAW,QAAZ,EAAA,UACE,oBAAC,WAAW,OAAZ;GAAwB;GAAgB;GAAoB;GAAU,MAAM,aAAa;GACtF,UAAA,gBAAgB,oBAAC,gBAAD,EAAA,UAAiB,MAAsB,CAAA,IAAI;EAC5C,CAAA,EACD,CAAA,IACjB,MACJ,qBAAC,WAAW,QAAZ,EAAA,UAAA,CACG,CAAC,iBAAiB,WAAW,aAC5B,oBAAC,WAAW,OAAZ;GAAwB;GAAgB;GAAoB;GAAU,MAAM,aAAa;GACtF,UAAA;EACe,CAAA,IAChB,MACJ,qBAAC,WAAW,QAAZ;GAAmB,WAAU;GAA7B,UAAA,CACE,oBAAC,UAAD;IACE,IAAI,SAAS;IACP;IACI;IACA;IACJ;IACN,eAAa;IACb,OAAO,SAAS,QAAQ,QAAQ;IAChC,oBAAkB;IAClB,GAAI;GACL,CAAA,GACA,YAAY,WAAW,oBAAC,WAAW,SAAZ;IAA0B;IAAgB;IAAoB;GAAW,CAAA,IAAI,IACpF;EACF,CAAA,CAAA,EAAA,CAAA,CACF;;AAEvB;;;ACxCA,SAAgB,iBAAiB,EAC/B,MACA,UACA,OACA,UACA,WAAW,OACX,WAAW,OACX,OACA,OACA,gBAAgB,OAChB,SAAS,YACT,cAAc,aACd,UACA,SACA,WACA,MACA,aACA,mBACA,UAAU,oBACc;CACxB,MAAM,WAAW,OAAyB,IAAI;CAE9C,MAAM,eAAe,YAAqC;EACxD,SAAS,UAAU;EACnB,IAAI,kBAAkB,iBAAiB,UAAU;CACnD;CACA,gBAAgB;EACd,IAAI,gBAAgB,OAClB,SAAS,SAAS,MAAM;CAE5B,GAAG,CAAC,WAAW,CAAC;CAEhB,IAAI,aACF,OACE,qBAAC,SAAD,EAAA,UAAA,CACE,oBAAC,gBAAD;EAAgB,SAAA;EACd,UAAA,oBAAC,QAAD;GACE,MAAM,QAAQ,QAAQ;GACtB,cAAY,SAAS;GACX;GACV,eAAe,oBAAoB,KAAK;GAExC,UAAA,oBAAC,YAAD,CAAa,CAAA;EACP,CAAA;CACM,CAAA,GAChB,oBAAC,gBAAD,EAAA,UAAiB,SAAS,SAAyB,CAAA,CAC5C,EAAA,CAAA;CAIb,OACE,qBAAC,WAAW,QAAZ;EAA2B;EAAmB;EAA9C,UAAA,CACG,WAAW,eACV,oBAAC,WAAW,QAAZ;GAAmB,WAAW,gBAAgB,YAAY,KAAA;GACxD,UAAA,oBAAC,WAAW,OAAZ;IAAwB;IAAgB;IAAoB;IACzD,UAAA;GACe,CAAA;EACD,CAAA,IACjB,MACJ,qBAAC,WAAW,QAAZ;GAAmB,WAAW,WAAW,gBAAgB,gBAAgB,kBAAkB,KAAA;GAA3F,UAAA,CACG,WAAW,cAAc,QACxB,oBAAC,WAAW,OAAZ;IACQ;IACI;IACA;IACV,WAAW,gBAAgB,YAAY,KAAA;IAEtC,UAAA;GACe,CAAA,IAChB,MACJ,qBAAC,WAAW,QAAZ;IAAmB,WAAU;IAA7B,UAAA,CACE,qBAAC,OAAD;KAAK,WAAU;KAAf,UAAA;MACE,oBAAC,OAAD;OACE,KAAK;OACL,IAAI,SAAS;OACP;OACI;OACH;OACM;OACH;OACJ;OACN,OAAO,SAAS,QAAQ,QAAQ;OAChC,oBAAkB,WAAW,aAAa,IAAI,IAAI,KAAA;OAClD,WAAW,GAAG,SAAS,QAAQ,SAAS,CAAC,QAAQ,SAAS,SAAS,QAAQ,SAAS,QAAQ,OAAO;MACpG,CAAA;MACD,oBAAC,YAAD;OACE,eAAY;OACZ,WAAW,GACT,kEACA,SAAS,QAAQ,aAChB,CAAC,QAAQ,SAAS,SAAS,UAC5B,SAAS,QAAQ,iBACnB;MACD,CAAA;MACA,YAAY,SAAS,gBAAgB,UACpC,oBAAC,QAAD;OACE,SAAQ;OACR,MAAM,QAAQ,QAAQ;OACtB,cAAW;OACX,eAAe;QACb,IAAI,OACF,QAAQ;QAEV,IAAI,gBAAgB,OAClB,oBAAoB,IAAI;OAE5B;OACA,WAAU;OAEV,UAAA,oBAAC,OAAD,CAAQ,CAAA;MACF,CAAA;KAEP;IACJ,CAAA,GAAA,YAAY,WAAW,oBAAC,WAAW,SAAZ;KAA0B;KAAgB;KAAoB;IAAW,CAAA,IAAI,IACpF;GACF,CAAA,CAAA;EACF,CAAA,CAAA;;AAEvB;;;AC5HA,SAAgB,iBAAiB,EAC/B,MACA,UACA,UACA,WAAW,OACX,WAAW,OACX,OAAO,MACP,OACA,OACA,gBAAgB,OAChB,SAAS,YACT,kBACA,SACA,cAAc,oBACd,eACA,aACwB;CACxB,OACE,qBAAC,WAAW,QAAZ;EAA2B;EAA0B;EAA6B;EAAlF,UAAA,CACG,WAAW,eACV,oBAAC,WAAW,QAAZ,EAAA,UACE,oBAAC,WAAW,OAAZ;GAAwB;GAAgB;GAAoB;GACzD,UAAA,gBAAgB,oBAAC,gBAAD,EAAA,UAAiB,MAAsB,CAAA,IAAI;EAC5C,CAAA,EACD,CAAA,IACjB,MACJ,qBAAC,WAAW,QAAZ,EAAA,UAAA,CACG,WAAW,cAAc,SAAS,CAAC,gBAClC,oBAAC,WAAW,OAAZ;GAAwB;GAAgB;GAAoB;GACzD,UAAA;EACe,CAAA,IAChB,MACJ,qBAAC,WAAW,QAAZ;GAAmB,WAAU;GAA7B,UAAA,CACE,qBAAC,QAAD;IACE,cAAY,gBAAgB,QAAQ,KAAA;IAC9B;IACC;IACQ;IACL;IALZ,UAAA,CAOE,oBAAC,eAAD;KACE,IAAI,SAAS;KACP;KACN,gBAAc,WAAW,OAAO,KAAA;KAChC,oBAAkB,WAAW,aAAa,IAAI,IAAI,KAAA;KAElD,UAAA,oBAAC,aAAD,EAA0B,YAAc,CAAA;IAC3B,CAAA,GACf,oBAAC,eAAD,EAAA,UACG,QAAQ,KAAI,WACX,oBAAC,YAAD;KAA+B,OAAO,OAAO;KAC1C,UAAA,OAAO;IACE,GAFK,OAAO,KAEZ,CACb,EACY,CAAA,CACT;GACP,CAAA,GAAA,YAAY,WAAW,oBAAC,WAAW,SAAZ;IAA0B;IAAgB;IAAoB;GAAW,CAAA,IAAI,IACpF;EACF,CAAA,CAAA,EAAA,CAAA,CACF;;AAEvB"}
1
+ {"version":3,"file":"FormFieldBlocks.es.js","names":[],"sources":["../../src/ds/components/FormFieldBlocks/layout/field-blocks-layout-column.tsx","../../src/ds/components/FormFieldBlocks/layout/field-blocks-layout-root.tsx","../../src/ds/components/FormFieldBlocks/layout/field-blocks-layout.tsx","../../src/ds/components/FormFieldBlocks/fields/text-field-block.tsx","../../src/ds/components/FormFieldBlocks/fields/textarea-field-block.tsx","../../src/ds/components/FormFieldBlocks/fields/search-field-block.tsx","../../src/ds/components/FormFieldBlocks/fields/select-field-block.tsx"],"sourcesContent":["import { cn } from '@/lib/utils';\n\nexport type FieldBlocksLayoutColumnProps = {\n children: React.ReactNode;\n className?: string;\n};\n\nexport function FieldBlocksLayoutColumn({ children, className }: FieldBlocksLayoutColumnProps) {\n return <div className={cn('grid content-start gap-6', className)}>{children}</div>;\n}\n","import { cn } from '@/lib/utils';\n\nexport type FieldBlocksLayoutRootProps = {\n children: React.ReactNode;\n className?: string;\n columns?: 1 | 2;\n gap?: string;\n};\n\nexport function FieldBlocksLayoutRoot({ children, className, columns = 1, gap }: FieldBlocksLayoutRootProps) {\n return (\n <div\n className={cn(\n 'grid',\n {\n 'grid-cols-1': columns === 1,\n 'grid-cols-2': columns === 2,\n },\n gap ?? 'gap-6',\n className,\n )}\n >\n {children}\n </div>\n );\n}\n","import { FieldBlocksLayoutColumn } from './field-blocks-layout-column';\nimport { FieldBlocksLayoutRoot } from './field-blocks-layout-root';\n\n/** @deprecated Lay fields out with plain grid or flex classes; `FieldGroup` stacks related fields. */\nexport const FieldBlocksLayout = Object.assign(FieldBlocksLayoutRoot, {\n Column: FieldBlocksLayoutColumn,\n});\n","import { Input } from '../../Input';\nimport type { InputProps } from '../../Input';\nimport { FieldBlock } from '../block/field-block';\nimport type { FieldBlockErrorMsgProps } from '../block/field-block-error-msg';\nimport type { FieldBlockHelpTextProps } from '../block/field-block-help-text';\nimport type { FieldBlockLabelProps } from '../block/field-block-label';\nimport type { FieldBlockLayoutProps } from '../block/field-block-layout';\nimport { fieldErrorId } from '../block/field-error-id';\nimport { VisuallyHidden } from '@/ds/primitives/visually-hidden';\n\nexport type TextFieldBlockProps = Pick<FieldBlockLayoutProps, 'layout' | 'labelColumnWidth'> &\n Omit<InputProps, 'name' | 'size'> & {\n name: string;\n labelIsHidden?: boolean;\n label?: FieldBlockLabelProps['children'];\n labelSize?: FieldBlockLabelProps['size'];\n helpText?: FieldBlockHelpTextProps['children'];\n errorMsg?: FieldBlockErrorMsgProps['children'];\n size?: InputProps['size'];\n };\n\n/** @deprecated Use `Field` + `FieldLabel` + `Input`. */\nexport function TextFieldBlock({\n name,\n value,\n label,\n labelIsHidden = false,\n labelColumnWidth,\n helpText,\n error,\n errorMsg,\n required = false,\n disabled = false,\n labelSize,\n layout = 'vertical',\n placeholder,\n size = 'md',\n testId,\n className,\n 'aria-describedby': ariaDescribedBy,\n ...props\n}: TextFieldBlockProps) {\n const describedBy =\n [ariaDescribedBy, errorMsg ? fieldErrorId(name) : undefined].filter(Boolean).join(' ') || undefined;\n\n return (\n <FieldBlock.Layout layout={layout} labelColumnWidth={labelColumnWidth} className={className}>\n {layout === 'horizontal' ? (\n <FieldBlock.Column>\n <FieldBlock.Label name={name} required={required} disabled={disabled} size={labelSize || 'bigger'}>\n {labelIsHidden ? <VisuallyHidden>{label}</VisuallyHidden> : label}\n </FieldBlock.Label>\n </FieldBlock.Column>\n ) : null}\n <FieldBlock.Column>\n {!labelIsHidden && layout === 'vertical' ? (\n <FieldBlock.Label name={name} required={required} disabled={disabled} size={labelSize || 'default'}>\n {label}\n </FieldBlock.Label>\n ) : null}\n <FieldBlock.Column className=\"gap-1\">\n <Input\n id={`input-${name}`}\n name={name}\n disabled={disabled}\n required={required}\n value={value}\n placeholder={placeholder}\n data-testid={testId}\n size={size}\n error={error || Boolean(errorMsg)}\n aria-describedby={describedBy}\n {...props}\n />\n {helpText || errorMsg ? <FieldBlock.Message name={name} helpText={helpText} errorMsg={errorMsg} /> : null}\n </FieldBlock.Column>\n </FieldBlock.Column>\n </FieldBlock.Layout>\n );\n}\n","import { Textarea } from '../../Textarea';\nimport type { TextareaProps } from '../../Textarea';\nimport { FieldBlock } from '../block/field-block';\nimport type { FieldBlockErrorMsgProps } from '../block/field-block-error-msg';\nimport type { FieldBlockHelpTextProps } from '../block/field-block-help-text';\nimport type { FieldBlockLabelProps } from '../block/field-block-label';\nimport type { FieldBlockLayoutProps } from '../block/field-block-layout';\nimport { fieldErrorId } from '../block/field-error-id';\nimport { VisuallyHidden } from '@/ds/primitives/visually-hidden';\n\nexport type TextareaFieldBlockProps = Pick<FieldBlockLayoutProps, 'layout' | 'labelColumnWidth'> &\n Omit<TextareaProps, 'name' | 'size'> & {\n name: string;\n labelIsHidden?: boolean;\n label?: FieldBlockLabelProps['children'];\n labelSize?: FieldBlockLabelProps['size'];\n helpText?: FieldBlockHelpTextProps['children'];\n errorMsg?: FieldBlockErrorMsgProps['children'];\n size?: TextareaProps['size'];\n };\n\n/** @deprecated Use `Field` + `FieldLabel` + `Textarea`. */\nexport function TextareaFieldBlock({\n name,\n label,\n labelIsHidden = false,\n labelColumnWidth,\n helpText,\n error,\n errorMsg,\n required = false,\n disabled = false,\n labelSize,\n layout = 'vertical',\n size = 'md',\n testId,\n className,\n 'aria-describedby': ariaDescribedBy,\n ...props\n}: TextareaFieldBlockProps) {\n const describedBy =\n [ariaDescribedBy, errorMsg ? fieldErrorId(name) : undefined].filter(Boolean).join(' ') || undefined;\n\n return (\n <FieldBlock.Layout layout={layout} labelColumnWidth={labelColumnWidth} className={className}>\n {layout === 'horizontal' ? (\n <FieldBlock.Column>\n <FieldBlock.Label name={name} required={required} disabled={disabled} size={labelSize || 'bigger'}>\n {labelIsHidden ? <VisuallyHidden>{label}</VisuallyHidden> : label}\n </FieldBlock.Label>\n </FieldBlock.Column>\n ) : null}\n <FieldBlock.Column>\n {!labelIsHidden && layout === 'vertical' ? (\n <FieldBlock.Label name={name} required={required} disabled={disabled} size={labelSize || 'default'}>\n {label}\n </FieldBlock.Label>\n ) : null}\n <FieldBlock.Column className=\"gap-1\">\n <Textarea\n id={`input-${name}`}\n name={name}\n disabled={disabled}\n required={required}\n size={size}\n data-testid={testId}\n error={error || Boolean(errorMsg)}\n aria-describedby={describedBy}\n {...props}\n />\n {helpText || errorMsg ? <FieldBlock.Message name={name} helpText={helpText} errorMsg={errorMsg} /> : null}\n </FieldBlock.Column>\n </FieldBlock.Column>\n </FieldBlock.Layout>\n );\n}\n","import { SearchIcon, XIcon } from 'lucide-react';\nimport { useEffect, useRef } from 'react';\nimport type { RefObject } from 'react';\nimport { Button } from '../../Button';\nimport { Input } from '../../Input';\nimport type { InputProps } from '../../Input';\nimport { Tooltip, TooltipContent, TooltipTrigger } from '../../Tooltip';\nimport { FieldBlock } from '../block/field-block';\nimport { fieldErrorId } from '../block/field-error-id';\nimport { cn } from '@/lib/utils';\n\nexport type SearchFieldBlockProps = {\n name: string;\n testId?: string;\n label?: string;\n labelIsHidden?: boolean;\n required?: boolean;\n disabled?: boolean;\n value?: string;\n placeholder?: string;\n onChange?: (e: React.ChangeEvent<HTMLInputElement>) => void;\n onReset?: () => void;\n helpText?: string;\n error?: boolean;\n errorMsg?: string;\n layout?: 'horizontal' | 'vertical';\n className?: string;\n size?: InputProps['size'];\n isMinimized?: boolean;\n onMinimizedChange?: (minimized: boolean) => void;\n /** Gives the caller access to the underlying input, e.g. to focus it from a keyboard shortcut. */\n inputRef?: RefObject<HTMLInputElement | null>;\n};\n\n/** @deprecated Use `SearchInput`. */\nexport function SearchFieldBlock({\n name,\n helpText,\n error,\n errorMsg,\n required = false,\n disabled = false,\n value,\n label,\n labelIsHidden = false,\n layout = 'vertical',\n placeholder = 'Search',\n onChange,\n onReset,\n className,\n size,\n isMinimized,\n onMinimizedChange,\n inputRef: externalInputRef,\n}: SearchFieldBlockProps) {\n const inputRef = useRef<HTMLInputElement>(null);\n\n const setInputRef = (element: HTMLInputElement | null) => {\n inputRef.current = element;\n if (externalInputRef) externalInputRef.current = element;\n };\n useEffect(() => {\n if (isMinimized === false) {\n inputRef.current?.focus();\n }\n }, [isMinimized]);\n\n if (isMinimized) {\n return (\n <Tooltip>\n <TooltipTrigger asChild>\n <Button\n size={`icon-${size || 'sm'}`}\n aria-label={label || 'Search'}\n disabled={disabled}\n onClick={() => onMinimizedChange?.(false)}\n >\n <SearchIcon />\n </Button>\n </TooltipTrigger>\n <TooltipContent>{label || 'Search'}</TooltipContent>\n </Tooltip>\n );\n }\n\n return (\n <FieldBlock.Layout layout={layout} className={className}>\n {layout === 'horizontal' ? (\n <FieldBlock.Column className={labelIsHidden ? 'sr-only' : undefined}>\n <FieldBlock.Label name={name} required={required} disabled={disabled}>\n {label}\n </FieldBlock.Label>\n </FieldBlock.Column>\n ) : null}\n <FieldBlock.Column className={layout === 'horizontal' && labelIsHidden ? 'col-span-full' : undefined}>\n {layout === 'vertical' && label ? (\n <FieldBlock.Label\n name={name}\n required={required}\n disabled={disabled}\n className={labelIsHidden ? 'sr-only' : undefined}\n >\n {label}\n </FieldBlock.Label>\n ) : null}\n <FieldBlock.Column className=\"gap-1\">\n <div className=\"group relative\">\n <Input\n ref={setInputRef}\n id={`input-${name}`}\n name={name}\n disabled={disabled}\n value={value}\n placeholder={placeholder}\n onChange={onChange}\n size={size}\n error={error || Boolean(errorMsg)}\n aria-describedby={errorMsg ? fieldErrorId(name) : undefined}\n className={cn(size === 'sm' && 'px-8', (!size || size === 'md') && 'px-9', size === 'lg' && 'px-10')}\n />\n <SearchIcon\n aria-hidden=\"true\"\n className={cn(\n 'absolute top-1/2 left-3 -translate-y-1/2 text-muted-foreground',\n size === 'sm' && 'size-3.5',\n (!size || size === 'md') && 'size-4',\n size === 'lg' && 'size-[1.125rem]',\n )}\n />\n {onReset && (value || isMinimized === false) && (\n <Button\n variant=\"ghost\"\n size={`icon-${size || 'md'}`}\n aria-label=\"Clear search\"\n onClick={() => {\n if (value) {\n onReset();\n }\n if (isMinimized === false) {\n onMinimizedChange?.(true);\n }\n }}\n className=\"absolute top-1/2 right-0 -translate-y-1/2\"\n >\n <XIcon />\n </Button>\n )}\n </div>\n {helpText || errorMsg ? <FieldBlock.Message name={name} helpText={helpText} errorMsg={errorMsg} /> : null}\n </FieldBlock.Column>\n </FieldBlock.Column>\n </FieldBlock.Layout>\n );\n}\n","import type { SelectTriggerProps } from '../../Select/select';\nimport { FieldBlock } from '../block/field-block';\nimport type { FieldBlockErrorMsgProps } from '../block/field-block-error-msg';\nimport type { FieldBlockHelpTextProps } from '../block/field-block-help-text';\nimport type { FieldBlockLabelProps } from '../block/field-block-label';\nimport type { FieldBlockLayoutProps } from '../block/field-block-layout';\nimport { fieldErrorId } from '../block/field-error-id';\nimport { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/ds/components/Select';\nimport { VisuallyHidden } from '@/ds/primitives/visually-hidden';\n\nexport type SelectFieldBlockProps = Pick<FieldBlockLayoutProps, 'layout' | 'labelColumnWidth'> &\n Pick<FieldBlockLabelProps, 'name' | 'required'> & {\n testId?: string;\n label?: string | null;\n labelIsHidden?: boolean;\n labelSize?: FieldBlockLabelProps['size'];\n disabled?: boolean;\n value?: string;\n options: { value: string; label: string }[];\n placeholder?: string;\n onValueChange: (value: string) => void;\n helpText?: FieldBlockHelpTextProps['children'];\n errorMsg?: FieldBlockErrorMsgProps['children'];\n error?: boolean;\n className?: string;\n size?: SelectTriggerProps['size'];\n };\n\n/** @deprecated Use `Field` + `FieldLabel` + `Select`. */\nexport function SelectFieldBlock({\n name,\n helpText,\n errorMsg,\n required = false,\n disabled = false,\n size = 'md',\n value,\n label,\n labelIsHidden = false,\n layout = 'vertical',\n labelColumnWidth,\n options,\n placeholder = 'Select an option',\n onValueChange,\n className,\n}: SelectFieldBlockProps) {\n return (\n <FieldBlock.Layout layout={layout} labelColumnWidth={labelColumnWidth} className={className}>\n {layout === 'horizontal' ? (\n <FieldBlock.Column>\n <FieldBlock.Label name={name} required={required} disabled={disabled}>\n {labelIsHidden ? <VisuallyHidden>{label}</VisuallyHidden> : label}\n </FieldBlock.Label>\n </FieldBlock.Column>\n ) : null}\n <FieldBlock.Column>\n {layout === 'vertical' && label && !labelIsHidden ? (\n <FieldBlock.Label name={name} required={required} disabled={disabled}>\n {label}\n </FieldBlock.Label>\n ) : null}\n <FieldBlock.Column className=\"gap-1\">\n <Select\n aria-label={labelIsHidden ? label : undefined}\n name={name}\n value={value}\n onValueChange={onValueChange}\n disabled={disabled}\n >\n <SelectTrigger\n id={`input-${name}`}\n size={size}\n aria-invalid={errorMsg ? true : undefined}\n aria-describedby={errorMsg ? fieldErrorId(name) : undefined}\n >\n <SelectValue placeholder={placeholder} />\n </SelectTrigger>\n <SelectContent>\n {options.map(option => (\n <SelectItem key={option.value} value={option.value}>\n {option.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n {helpText || errorMsg ? <FieldBlock.Message name={name} helpText={helpText} errorMsg={errorMsg} /> : null}\n </FieldBlock.Column>\n </FieldBlock.Column>\n </FieldBlock.Layout>\n );\n}\n"],"mappings":"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"}
@@ -1,3 +1,3 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- const require_MetricsTable = require("../MetricsTable-D-aZf3dk.cjs");
2
+ const require_MetricsTable = require("../MetricsTable-BSl81oNe.cjs");
3
3
  exports.MetricsTable = require_MetricsTable.MetricsTable;
@@ -1 +1 @@
1
- export { t as MetricsTable } from "../MetricsTable-CRPeLHe1.js";
1
+ export { t as MetricsTable } from "../MetricsTable-DID6LRoP.js";
@@ -7,8 +7,8 @@ require("../primitives/typography.cjs.js");
7
7
  const require_Txt = require("../Txt-BnoSqxKE.cjs");
8
8
  const require_components_Field = require("./Field.cjs.js");
9
9
  const require_popover = require("../popover-BJqa6Hz6.cjs");
10
- const require_combobox = require("../combobox-CMx2ayFN.cjs");
11
- const require_property_filter_applied = require("../property-filter-applied-BCeRLcXb.cjs");
10
+ const require_combobox = require("../combobox-DIT_6xiG.cjs");
11
+ const require_property_filter_applied = require("../property-filter-applied-BkkIObRq.cjs");
12
12
  let react = require("react");
13
13
  let react_jsx_runtime = require("react/jsx-runtime");
14
14
  let lucide_react = require("lucide-react");
@@ -233,7 +233,7 @@ function PropertyFilterCreator({ fields, tokens, onTokensChange, label = "Add fi
233
233
  setError(void 0);
234
234
  },
235
235
  placeholder: selectedField.placeholder ?? `Choose ${selectedField.label}`,
236
- searchPlaceholder: `Search ${selectedField.label.toLowerCase()}...`,
236
+ searchPlaceholder: `Search ${selectedField.label.toLowerCase()}`,
237
237
  emptyText: selectedField.emptyText ?? "No option found.",
238
238
  size: "md",
239
239
  "aria-label": selectedField.label