@mieweb/ui 0.11.0-dev.33 → 0.11.0-dev.34

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 (88) hide show
  1. package/dist/{chunk-PJN4HM2X.cjs → chunk-3O3Q3DX7.cjs} +21 -21
  2. package/dist/{chunk-PJN4HM2X.cjs.map → chunk-3O3Q3DX7.cjs.map} +1 -1
  3. package/dist/{chunk-M42FTWY2.cjs → chunk-46RYJYN2.cjs} +6 -6
  4. package/dist/{chunk-M42FTWY2.cjs.map → chunk-46RYJYN2.cjs.map} +1 -1
  5. package/dist/{chunk-JMAZ2GKT.js → chunk-4GSFVD5V.js} +3 -3
  6. package/dist/{chunk-JMAZ2GKT.js.map → chunk-4GSFVD5V.js.map} +1 -1
  7. package/dist/{chunk-2R3ILG4Y.cjs → chunk-4M2KE4O5.cjs} +7 -7
  8. package/dist/{chunk-2R3ILG4Y.cjs.map → chunk-4M2KE4O5.cjs.map} +1 -1
  9. package/dist/{chunk-NAQMIFUF.js → chunk-4SUEBKTY.js} +3 -3
  10. package/dist/{chunk-NAQMIFUF.js.map → chunk-4SUEBKTY.js.map} +1 -1
  11. package/dist/{chunk-X6HEWIYP.cjs → chunk-6O6EYKOG.cjs} +130 -874
  12. package/dist/chunk-6O6EYKOG.cjs.map +1 -0
  13. package/dist/{chunk-ZNYBLM4O.cjs → chunk-DXNVQQYN.cjs} +4 -4
  14. package/dist/{chunk-ZNYBLM4O.cjs.map → chunk-DXNVQQYN.cjs.map} +1 -1
  15. package/dist/{chunk-WEGKY2LY.js → chunk-EWPNM6OO.js} +5 -3
  16. package/dist/chunk-EWPNM6OO.js.map +1 -0
  17. package/dist/{chunk-IBEQ54XW.js → chunk-EX7Q5545.js} +4 -4
  18. package/dist/{chunk-IBEQ54XW.js.map → chunk-EX7Q5545.js.map} +1 -1
  19. package/dist/{chunk-VV2U36T6.cjs → chunk-MZR634HI.cjs} +9 -9
  20. package/dist/{chunk-VV2U36T6.cjs.map → chunk-MZR634HI.cjs.map} +1 -1
  21. package/dist/{chunk-JCO62XMU.cjs → chunk-NCPDUJKJ.cjs} +43 -26
  22. package/dist/chunk-NCPDUJKJ.cjs.map +1 -0
  23. package/dist/{chunk-PYAK7XXD.js → chunk-NW6D6AFL.js} +80 -819
  24. package/dist/chunk-NW6D6AFL.js.map +1 -0
  25. package/dist/{chunk-ZPPMEUGR.cjs → chunk-PGJLW2NO.cjs} +7 -7
  26. package/dist/{chunk-ZPPMEUGR.cjs.map → chunk-PGJLW2NO.cjs.map} +1 -1
  27. package/dist/{chunk-ZFJJMDV3.js → chunk-RTADGBBN.js} +3 -3
  28. package/dist/{chunk-ZFJJMDV3.js.map → chunk-RTADGBBN.js.map} +1 -1
  29. package/dist/{chunk-LJ4CCM3V.cjs → chunk-S2CJ57BX.cjs} +5 -3
  30. package/dist/chunk-S2CJ57BX.cjs.map +1 -0
  31. package/dist/{chunk-KSQQBFDQ.js → chunk-SPGP252Q.js} +43 -26
  32. package/dist/chunk-SPGP252Q.js.map +1 -0
  33. package/dist/{chunk-67SD6VPF.cjs → chunk-SVC7NPQ6.cjs} +6 -6
  34. package/dist/{chunk-67SD6VPF.cjs.map → chunk-SVC7NPQ6.cjs.map} +1 -1
  35. package/dist/{chunk-TWQSMUE6.js → chunk-VMEVLBI3.js} +46 -38
  36. package/dist/chunk-VMEVLBI3.js.map +1 -0
  37. package/dist/{chunk-QNJEDBIN.js → chunk-X5HLVACK.js} +4 -4
  38. package/dist/{chunk-QNJEDBIN.js.map → chunk-X5HLVACK.js.map} +1 -1
  39. package/dist/{chunk-LC3JL2HB.cjs → chunk-XEHD2HA5.cjs} +46 -38
  40. package/dist/chunk-XEHD2HA5.cjs.map +1 -0
  41. package/dist/{chunk-R3MJKY63.js → chunk-YGSPIDE4.js} +3 -3
  42. package/dist/{chunk-R3MJKY63.js.map → chunk-YGSPIDE4.js.map} +1 -1
  43. package/dist/{chunk-7LKTIZLR.js → chunk-YR45POH2.js} +3 -3
  44. package/dist/{chunk-7LKTIZLR.js.map → chunk-YR45POH2.js.map} +1 -1
  45. package/dist/components/AlertDialog/index.cjs +6 -6
  46. package/dist/components/AlertDialog/index.js +2 -2
  47. package/dist/components/EmailEditor/index.cjs +12 -12
  48. package/dist/components/EmailEditor/index.js +3 -3
  49. package/dist/components/KeyboardShortcutsOverlay/index.cjs +4 -4
  50. package/dist/components/KeyboardShortcutsOverlay/index.js +2 -2
  51. package/dist/components/MediaEditor/index.cjs +7 -7
  52. package/dist/components/MediaEditor/index.js +2 -2
  53. package/dist/components/MediaFeed/index.cjs +3 -3
  54. package/dist/components/MediaFeed/index.js +2 -2
  55. package/dist/components/Modal/index.cjs +9 -9
  56. package/dist/components/Modal/index.js +1 -1
  57. package/dist/components/RichTextEditor/index.cjs +4 -4
  58. package/dist/components/RichTextEditor/index.js +1 -1
  59. package/dist/components/SuperChat/index.cjs +3 -3
  60. package/dist/components/SuperChat/index.js +2 -2
  61. package/dist/components/Textarea/index.cjs +5 -5
  62. package/dist/components/Textarea/index.js +2 -2
  63. package/dist/esheet.cjs +462 -1233
  64. package/dist/esheet.cjs.map +1 -1
  65. package/dist/esheet.d.cts +2 -2
  66. package/dist/esheet.d.ts +2 -2
  67. package/dist/esheet.js +375 -1146
  68. package/dist/esheet.js.map +1 -1
  69. package/dist/index.cjs +1011 -239
  70. package/dist/index.cjs.map +1 -1
  71. package/dist/index.d.cts +6 -2
  72. package/dist/index.d.ts +6 -2
  73. package/dist/index.js +804 -17
  74. package/dist/index.js.map +1 -1
  75. package/dist/{model-NPW2JMHZ.cjs → model-EFXX5JZN.cjs} +18 -18
  76. package/dist/{model-NPW2JMHZ.cjs.map → model-EFXX5JZN.cjs.map} +1 -1
  77. package/dist/{model-SG5H3TCJ.js → model-TAARSYDY.js} +4 -4
  78. package/dist/{model-SG5H3TCJ.js.map → model-TAARSYDY.js.map} +1 -1
  79. package/dist/styles.css +1 -1
  80. package/package.json +1 -1
  81. package/dist/chunk-JCO62XMU.cjs.map +0 -1
  82. package/dist/chunk-KSQQBFDQ.js.map +0 -1
  83. package/dist/chunk-LC3JL2HB.cjs.map +0 -1
  84. package/dist/chunk-LJ4CCM3V.cjs.map +0 -1
  85. package/dist/chunk-PYAK7XXD.js.map +0 -1
  86. package/dist/chunk-TWQSMUE6.js.map +0 -1
  87. package/dist/chunk-WEGKY2LY.js.map +0 -1
  88. package/dist/chunk-X6HEWIYP.cjs.map +0 -1
package/dist/index.js CHANGED
@@ -66,10 +66,10 @@ export { ReadingProgressBar } from './chunk-WKSUL2ZN.js';
66
66
  export { DictationButton, defaultDictationLabels, useDictation } from './chunk-MZA2LDS4.js';
67
67
  import { RecordButton } from './chunk-MQOYDQTF.js';
68
68
  export { RecordButton, formatDuration, recordButtonVariants } from './chunk-MQOYDQTF.js';
69
- export { FillerWordsModal, MediaEditor, SilenceSettingsModal, SpeedMarkerMenu, WordEditorModal } from './chunk-R3MJKY63.js';
69
+ export { FillerWordsModal, MediaEditor, SilenceSettingsModal, SpeedMarkerMenu, WordEditorModal } from './chunk-YGSPIDE4.js';
70
70
  import { Slider } from './chunk-V5VPECJI.js';
71
71
  export { Slider, sliderRangeVariants, sliderThumbVariants, sliderTrackVariants } from './chunk-V5VPECJI.js';
72
- export { MediaFeed } from './chunk-ZFJJMDV3.js';
72
+ export { MediaFeed } from './chunk-RTADGBBN.js';
73
73
  import './chunk-RISZWWEQ.js';
74
74
  export { MediaPlayer, inferMediaKind, mediaPlayerVariants } from './chunk-R5P7NAJQ.js';
75
75
  import { normalizePath, MegaMenuBar } from './chunk-GLRKXJCR.js';
@@ -80,7 +80,7 @@ export { Pagination, SimplePagination, paginationButtonVariants } from './chunk-
80
80
  export { FreshnessBadge, FreshnessDot, daysSince, freshnessLevel } from './chunk-HQ3XPCHG.js';
81
81
  export { GanttView, defaultGanttLabels } from './chunk-Y4QNLW7W.js';
82
82
  export { GlossaryTooltip } from './chunk-SRMTRD7F.js';
83
- export { Kbd, KeyboardShortcutsOverlay } from './chunk-JMAZ2GKT.js';
83
+ export { Kbd, KeyboardShortcutsOverlay } from './chunk-4GSFVD5V.js';
84
84
  export { ListView, itemVariants as listViewItemVariants } from './chunk-CLNTWFEB.js';
85
85
  export { CodeBlock, MarkdownRenderer, highlightCode, useMarkdown } from './chunk-YSIFPHLX.js';
86
86
  export { SurveyBlock } from './chunk-OYLZ5PF2.js';
@@ -93,7 +93,7 @@ import { CountryDropdownBase } from './chunk-OTIKWEFZ.js';
93
93
  export { CountryCodeDropdown, formatE164, validatePhoneNumber } from './chunk-OTIKWEFZ.js';
94
94
  export { CustomizableDashboard, DashboardCustomizePanel, consolidateColumns, mergeColumnOrder, moveAcrossColumns, reorderOnDrop, requiredColumns } from './chunk-OWYWRBED.js';
95
95
  export { Sheet, SheetBody, SheetClose, SheetDescription, SheetFooter, SheetHeader, SheetTitle, sheetContentVariants, sheetOverlayVariants } from './chunk-LMBXJZLG.js';
96
- export { EMAIL_BLOCK_TYPES, EmailEditor, createDefaultDesignSettings, createEmailBlock, createEmailHtmlSanitizer, createEmptyEmailContentTree, defaultEmailEditorLabels, generateEmailBlockId, renderEmailMjml } from './chunk-IBEQ54XW.js';
96
+ export { EMAIL_BLOCK_TYPES, EmailEditor, createDefaultDesignSettings, createEmailBlock, createEmailHtmlSanitizer, createEmptyEmailContentTree, defaultEmailEditorLabels, generateEmailBlockId, renderEmailMjml } from './chunk-EX7Q5545.js';
97
97
  import './chunk-XBAAHOCP.js';
98
98
  import { Tabs, TabsList, TabsTrigger, TabsContent } from './chunk-ME7EVT6F.js';
99
99
  export { Tabs, TabsContent, TabsList, TabsTrigger, tabsListVariants, tabsTriggerVariants } from './chunk-ME7EVT6F.js';
@@ -110,8 +110,8 @@ export { CollabStatus, defaultCollabStatusLabels, useYjsCollabStatus } from './c
110
110
  export { Collapsible, CollapsibleContent, CollapsibleTrigger } from './chunk-VSRO4PAI.js';
111
111
  import { Alert, AlertTitle, AlertDescription } from './chunk-3JWAABYI.js';
112
112
  export { Alert, AlertDescription, AlertTitle, alertVariants } from './chunk-3JWAABYI.js';
113
- import { AlertDialog } from './chunk-7LKTIZLR.js';
114
- export { AlertDialog, ConfirmDialogProvider, defaultAlertDialogLabels, useConfirm } from './chunk-7LKTIZLR.js';
113
+ import { AlertDialog } from './chunk-YR45POH2.js';
114
+ export { AlertDialog, ConfirmDialogProvider, defaultAlertDialogLabels, useConfirm } from './chunk-YR45POH2.js';
115
115
  export { AudioPlayer, ProgressBar, audioPlayerVariants, formatTime as formatAudioTime, playButtonVariants } from './chunk-C4GEPUE7.js';
116
116
  export { AudioRecorder, audioRecorderVariants, controlButtonVariants, formatTime, waveformContainerVariants } from './chunk-2DW4PUJD.js';
117
117
  export { Autocomplete } from './chunk-UBOVDAD7.js';
@@ -146,10 +146,10 @@ import { Spinner, SpinnerWithLabel } from './chunk-UA7E7PDS.js';
146
146
  export { FullPageSpinner, Spinner, SpinnerWithLabel, spinnerVariants } from './chunk-UA7E7PDS.js';
147
147
  import { evaluateDue, completedKeys, normalizeOrders } from './chunk-Y5KEFV5O.js';
148
148
  export { buildChartOrderRows, buildEncounterOrderRows, dueForOrder, evaluateDue, evaluateProgram, isApplicable } from './chunk-Y5KEFV5O.js';
149
- import { parseSig, labelToMedicationFields, MedicationEditor, useCodeLookupConfig } from './chunk-PYAK7XXD.js';
150
- export { ALLERGY_TYPE_LABELS, AllergyList, AllergyManager, Assessment, CodeLookupProvider, ConditionEditor, DateRangeFilter, DateRangePicker, MEDICATION_STATUS_LABELS, MedicationEditor, MedicationList, MedicationReconciliation, ORDER_TYPE_META, ORDER_TYPE_SEARCH_DOMAINS, calculateDateRange, doseFormToQuantityUnit, getDefaultPresets, getExtendedPresets, isConditionCodetype, labelToMedicationFields, lookupToMedicationFields, normalizeConditionCodingSystem, orderTypeForCodetype, parseMedicationLabel, parseSig, useCodeLookupConfig } from './chunk-PYAK7XXD.js';
151
- import { currentAssertion, CodingChips, toolbarKeyNav } from './chunk-KSQQBFDQ.js';
152
- export { CHANGE_TYPE_LABELS, CONCERN_STATUS_LABELS, CodingChips, ProblemList, RowActionToolbar, RowIconButton, UncertaintyBadge, concernGroupKey, concernHistoryContent, currentAssertion, toolbarKeyNav } from './chunk-KSQQBFDQ.js';
149
+ import { parseSig, labelToMedicationFields, MedicationEditor, useCodeLookupConfig } from './chunk-NW6D6AFL.js';
150
+ export { ALLERGY_TYPE_LABELS, AllergyList, AllergyManager, Assessment, CodeLookupProvider, ConditionEditor, MEDICATION_STATUS_LABELS, MedicationEditor, MedicationList, MedicationReconciliation, ORDER_TYPE_META, ORDER_TYPE_SEARCH_DOMAINS, doseFormToQuantityUnit, isConditionCodetype, labelToMedicationFields, lookupToMedicationFields, normalizeConditionCodingSystem, orderTypeForCodetype, parseMedicationLabel, parseSig, useCodeLookupConfig } from './chunk-NW6D6AFL.js';
151
+ import { currentAssertion, CodingChips, toolbarKeyNav } from './chunk-SPGP252Q.js';
152
+ export { CHANGE_TYPE_LABELS, CONCERN_STATUS_LABELS, CodingChips, ProblemList, RowActionToolbar, RowIconButton, UncertaintyBadge, concernGroupKey, concernHistoryContent, currentAssertion, toolbarKeyNav } from './chunk-SPGP252Q.js';
153
153
  import { Tooltip } from './chunk-YFWDS6MX.js';
154
154
  export { Tooltip } from './chunk-YFWDS6MX.js';
155
155
  import { ButtonGroup } from './chunk-BBLEGF5L.js';
@@ -160,9 +160,9 @@ import { Label } from './chunk-I3WGZPI6.js';
160
160
  export { Label, labelVariants } from './chunk-I3WGZPI6.js';
161
161
  import { DateInput } from './chunk-I6Y2KLTZ.js';
162
162
  export { DateInput } from './chunk-I6Y2KLTZ.js';
163
- import { Textarea } from './chunk-NAQMIFUF.js';
164
- export { TextAreaRich as RichTextArea, TextAreaPlain, TextAreaRich, Textarea, htmlToPlain, plainToHtml, textareaVariants } from './chunk-NAQMIFUF.js';
165
- export { MacroLibrary, RichTextEditor, convertAngleBracketsToMustache, processDictation } from './chunk-WEGKY2LY.js';
163
+ import { Textarea } from './chunk-4SUEBKTY.js';
164
+ export { TextAreaRich as RichTextArea, TextAreaPlain, TextAreaRich, Textarea, htmlToPlain, plainToHtml, textareaVariants } from './chunk-4SUEBKTY.js';
165
+ export { MacroLibrary, RichTextEditor, convertAngleBracketsToMustache, processDictation } from './chunk-EWPNM6OO.js';
166
166
  import './chunk-5YOT4DVH.js';
167
167
  export { Separator, separatorVariants } from './chunk-OQWZYKJM.js';
168
168
  import { Select } from './chunk-VCI2Y7ST.js';
@@ -174,8 +174,8 @@ import { Card, CardHeader, CardContent, CardTitle } from './chunk-QYSUYB3S.js';
174
174
  export { Card, CardActions, CardBadge, CardCollapsible, CardContent, CardDescription, CardDivider, CardFooter, CardHeader, CardMedia, CardStat, CardTitle, cardAccentVariants, cardVariants } from './chunk-QYSUYB3S.js';
175
175
  import { Checkbox } from './chunk-753Z3NXL.js';
176
176
  export { Checkbox, CheckboxGroup, checkboxVariants } from './chunk-753Z3NXL.js';
177
- import { Modal, ModalHeader, ModalTitle, ModalClose, ModalBody, ModalFooter } from './chunk-TWQSMUE6.js';
178
- export { Modal, ModalBody, ModalClose, ModalFooter, ModalHeader, ModalTitle, modalContentVariants, modalOverlayVariants } from './chunk-TWQSMUE6.js';
177
+ import { Modal, ModalHeader, ModalTitle, ModalClose, ModalBody, ModalFooter } from './chunk-VMEVLBI3.js';
178
+ export { Modal, ModalBody, ModalClose, ModalFooter, ModalHeader, ModalTitle, modalContentVariants, modalOverlayVariants } from './chunk-VMEVLBI3.js';
179
179
  import './chunk-6NZXWKUE.js';
180
180
  import { Input, inputVariants } from './chunk-3IMM2PM4.js';
181
181
  export { Input, RequiredMark, floatingGroupLabelVariants, floatingGroupVariants, floatingLabelVariants, inputVariants } from './chunk-3IMM2PM4.js';
@@ -221,7 +221,7 @@ import * as React13 from 'react';
221
221
  import React13__default, { createContext, useState, useEffect, useCallback, useMemo, useContext, useRef, useId } from 'react';
222
222
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
223
223
  import { cva } from 'class-variance-authority';
224
- import { AudioWaveform, Play, Pause, FileUp, X, AlertCircle, VolumeX, Volume2, Minimize2, Maximize2, ZoomOut, ZoomIn, LocateFixed, Search, FolderUp, Upload, Edit2, Check, ChevronUp, ChevronDown as ChevronDown$1, Calendar as Calendar$1, Phone as Phone$1, Mail as Mail$1, Clock as Clock$1, MapPin, Shield, ChevronRight as ChevronRight$1, Building2, SlidersHorizontal, Trash2 as Trash2$1, Pencil as Pencil$1, Plus as Plus$1, ExternalLink as ExternalLink$1, Link, AlertTriangle as AlertTriangle$1, RefreshCw, ChevronLeft } from 'lucide-react';
224
+ import { AudioWaveform, Play, Pause, FileUp, X, AlertCircle, VolumeX, Volume2, Minimize2, Maximize2, ZoomOut, ZoomIn, LocateFixed, Search, Calendar as Calendar$1, ChevronLeft, ChevronRight as ChevronRight$1, ChevronDown as ChevronDown$1, FolderUp, Upload, Edit2, Check, ChevronUp, Phone as Phone$1, Mail as Mail$1, Clock as Clock$1, MapPin, Shield, Building2, SlidersHorizontal, Trash2 as Trash2$1, Pencil as Pencil$1, Plus as Plus$1, ExternalLink as ExternalLink$1, Link, AlertTriangle as AlertTriangle$1, RefreshCw } from 'lucide-react';
225
225
  import { useVirtualizer } from '@tanstack/react-virtual';
226
226
  import * as ReactDOM from 'react-dom';
227
227
  import { createPortal } from 'react-dom';
@@ -15421,6 +15421,793 @@ var DashboardWidgetDataCards = React13.forwardRef(({ className, items, columns =
15421
15421
  );
15422
15422
  });
15423
15423
  DashboardWidgetDataCards.displayName = "DashboardWidgetDataCards";
15424
+ function getDefaultPresets(labels = {}) {
15425
+ const {
15426
+ today = "Today",
15427
+ thisWeek = "This Week",
15428
+ thisMonth = "This Month",
15429
+ lastMonth = "Last Month",
15430
+ last24Hours = "Last 24 Hours",
15431
+ last7Days = "Last 7 Days",
15432
+ last30Days = "Last 30 Days"
15433
+ } = labels;
15434
+ return [
15435
+ { key: "today", label: today },
15436
+ { key: "this-week", label: thisWeek },
15437
+ { key: "this-month", label: thisMonth },
15438
+ { key: "last-month", label: lastMonth },
15439
+ { key: "last-24-hours", label: last24Hours },
15440
+ { key: "last-7-days", label: last7Days },
15441
+ { key: "last-30-days", label: last30Days }
15442
+ ];
15443
+ }
15444
+ function getExtendedPresets(labels = {}) {
15445
+ const {
15446
+ today = "Today",
15447
+ yesterday = "Yesterday",
15448
+ thisWeek = "This Week",
15449
+ lastWeek = "Last Week",
15450
+ thisMonth = "This Month",
15451
+ lastMonth = "Last Month",
15452
+ thisQuarter = "This Quarter",
15453
+ lastQuarter = "Last Quarter",
15454
+ thisYear = "This Year",
15455
+ lastYear = "Last Year",
15456
+ last24Hours = "Last 24 Hours",
15457
+ last7Days = "Last 7 Days",
15458
+ last30Days = "Last 30 Days",
15459
+ last90Days = "Last 90 Days",
15460
+ last365Days = "Last 365 Days"
15461
+ } = labels;
15462
+ return [
15463
+ { key: "today", label: today },
15464
+ { key: "yesterday", label: yesterday },
15465
+ { key: "last-24-hours", label: last24Hours },
15466
+ { key: "this-week", label: thisWeek },
15467
+ { key: "last-week", label: lastWeek },
15468
+ { key: "last-7-days", label: last7Days },
15469
+ { key: "this-month", label: thisMonth },
15470
+ { key: "last-month", label: lastMonth },
15471
+ { key: "last-30-days", label: last30Days },
15472
+ { key: "this-quarter", label: thisQuarter },
15473
+ { key: "last-quarter", label: lastQuarter },
15474
+ { key: "last-90-days", label: last90Days },
15475
+ { key: "this-year", label: thisYear },
15476
+ { key: "last-year", label: lastYear },
15477
+ { key: "last-365-days", label: last365Days }
15478
+ ];
15479
+ }
15480
+ function endOfDay(d) {
15481
+ return new Date(d.getFullYear(), d.getMonth(), d.getDate(), 23, 59, 59, 999);
15482
+ }
15483
+ function calculateDateRange(presetKey) {
15484
+ const now = /* @__PURE__ */ new Date();
15485
+ const today = new Date(now.getFullYear(), now.getMonth(), now.getDate());
15486
+ switch (presetKey) {
15487
+ case "today":
15488
+ return { start: today, end: endOfDay(today) };
15489
+ case "yesterday": {
15490
+ const yesterday = new Date(today);
15491
+ yesterday.setDate(today.getDate() - 1);
15492
+ return { start: yesterday, end: endOfDay(yesterday) };
15493
+ }
15494
+ case "this-week": {
15495
+ const dayOfWeek = today.getDay();
15496
+ const sunday = new Date(today);
15497
+ sunday.setDate(today.getDate() - dayOfWeek);
15498
+ const saturday = new Date(sunday);
15499
+ saturday.setDate(sunday.getDate() + 6);
15500
+ return { start: sunday, end: endOfDay(saturday) };
15501
+ }
15502
+ case "last-week": {
15503
+ const dayOfWeek = today.getDay();
15504
+ const lastSunday = new Date(today);
15505
+ lastSunday.setDate(today.getDate() - dayOfWeek - 7);
15506
+ const lastSaturday = new Date(lastSunday);
15507
+ lastSaturday.setDate(lastSunday.getDate() + 6);
15508
+ return { start: lastSunday, end: endOfDay(lastSaturday) };
15509
+ }
15510
+ case "this-month": {
15511
+ const firstDay = new Date(now.getFullYear(), now.getMonth(), 1);
15512
+ const lastDay = new Date(now.getFullYear(), now.getMonth() + 1, 0);
15513
+ return { start: firstDay, end: endOfDay(lastDay) };
15514
+ }
15515
+ case "last-month": {
15516
+ const firstDay = new Date(now.getFullYear(), now.getMonth() - 1, 1);
15517
+ const lastDay = new Date(now.getFullYear(), now.getMonth(), 0);
15518
+ return { start: firstDay, end: endOfDay(lastDay) };
15519
+ }
15520
+ case "this-quarter": {
15521
+ const quarter = Math.floor(now.getMonth() / 3);
15522
+ const firstDay = new Date(now.getFullYear(), quarter * 3, 1);
15523
+ const lastDay = new Date(now.getFullYear(), quarter * 3 + 3, 0);
15524
+ return { start: firstDay, end: endOfDay(lastDay) };
15525
+ }
15526
+ case "last-quarter": {
15527
+ const quarter = Math.floor(now.getMonth() / 3);
15528
+ const firstDay = new Date(now.getFullYear(), (quarter - 1) * 3, 1);
15529
+ const lastDay = new Date(now.getFullYear(), quarter * 3, 0);
15530
+ return { start: firstDay, end: endOfDay(lastDay) };
15531
+ }
15532
+ case "this-year": {
15533
+ const firstDay = new Date(now.getFullYear(), 0, 1);
15534
+ const lastDay = new Date(now.getFullYear(), 11, 31);
15535
+ return { start: firstDay, end: endOfDay(lastDay) };
15536
+ }
15537
+ case "last-year": {
15538
+ const firstDay = new Date(now.getFullYear() - 1, 0, 1);
15539
+ const lastDay = new Date(now.getFullYear() - 1, 11, 31);
15540
+ return { start: firstDay, end: endOfDay(lastDay) };
15541
+ }
15542
+ case "last-24-hours":
15543
+ return {
15544
+ start: new Date(now.getTime() - 24 * 60 * 60 * 1e3),
15545
+ end: now
15546
+ };
15547
+ case "last-7-days":
15548
+ return {
15549
+ start: new Date(now.getTime() - 7 * 24 * 60 * 60 * 1e3),
15550
+ end: now
15551
+ };
15552
+ case "last-30-days":
15553
+ return {
15554
+ start: new Date(now.getTime() - 30 * 24 * 60 * 60 * 1e3),
15555
+ end: now
15556
+ };
15557
+ case "last-90-days":
15558
+ return {
15559
+ start: new Date(now.getTime() - 90 * 24 * 60 * 60 * 1e3),
15560
+ end: now
15561
+ };
15562
+ case "last-365-days":
15563
+ return {
15564
+ start: new Date(now.getTime() - 365 * 24 * 60 * 60 * 1e3),
15565
+ end: now
15566
+ };
15567
+ default:
15568
+ return { start: null, end: null };
15569
+ }
15570
+ }
15571
+ function formatDateRange(range) {
15572
+ if (!range.start && !range.end) return "";
15573
+ const formatDate4 = (d) => {
15574
+ if (!d) return "";
15575
+ return d.toLocaleDateString("en-US", {
15576
+ month: "short",
15577
+ day: "numeric",
15578
+ year: "numeric"
15579
+ });
15580
+ };
15581
+ if (range.start && range.end) {
15582
+ return `${formatDate4(range.start)} - ${formatDate4(range.end)}`;
15583
+ }
15584
+ return formatDate4(range.start || range.end);
15585
+ }
15586
+ function DateRangePicker({
15587
+ value,
15588
+ onChange,
15589
+ presets,
15590
+ activePreset,
15591
+ placeholder = "Pick a date range",
15592
+ className,
15593
+ align = "auto",
15594
+ showPresets = true,
15595
+ variant = "desktop",
15596
+ labels = {}
15597
+ }) {
15598
+ const finalPresets = presets || getDefaultPresets(labels);
15599
+ const [isCalendarOpen, setIsCalendarOpen] = React13.useState(false);
15600
+ const [leftMonth, setLeftMonth] = React13.useState(
15601
+ () => value?.start?.getMonth() ?? (/* @__PURE__ */ new Date()).getMonth()
15602
+ );
15603
+ const [leftYear, setLeftYear] = React13.useState(
15604
+ () => value?.start?.getFullYear() ?? (/* @__PURE__ */ new Date()).getFullYear()
15605
+ );
15606
+ const [rangeStart, setRangeStart] = React13.useState(
15607
+ value?.start ?? null
15608
+ );
15609
+ const [rangeEnd, setRangeEnd] = React13.useState(
15610
+ value?.end ?? null
15611
+ );
15612
+ const [selectingEnd, setSelectingEnd] = React13.useState(false);
15613
+ const [hoverDate, setHoverDate] = React13.useState(null);
15614
+ const calendarRef = React13.useRef(null);
15615
+ const triggerRef = React13.useRef(null);
15616
+ const [resolvedAlign, setResolvedAlign] = React13.useState(
15617
+ align === "end" ? "end" : "start"
15618
+ );
15619
+ const isMobileVariant = variant === "mobile";
15620
+ const isResponsive = variant === "responsive";
15621
+ const focusTrapRef = useFocusTrap(
15622
+ isMobileVariant && isCalendarOpen
15623
+ );
15624
+ const rightMonth = leftMonth === 11 ? 0 : leftMonth + 1;
15625
+ const rightYear = leftMonth === 11 ? leftYear + 1 : leftYear;
15626
+ React13.useEffect(() => {
15627
+ if (!value) {
15628
+ setRangeStart(null);
15629
+ setRangeEnd(null);
15630
+ return;
15631
+ }
15632
+ setRangeStart(value.start ?? null);
15633
+ setRangeEnd(value.end ?? null);
15634
+ }, [value]);
15635
+ const wrapperRef = React13.useRef(null);
15636
+ const outsideRefs = React13.useMemo(
15637
+ () => [wrapperRef, calendarRef],
15638
+ [calendarRef]
15639
+ );
15640
+ useClickOutside(
15641
+ outsideRefs,
15642
+ () => {
15643
+ setIsCalendarOpen(false);
15644
+ setSelectingEnd(false);
15645
+ },
15646
+ isCalendarOpen
15647
+ );
15648
+ const { anchorRef, floatingRef, style } = useAnchoredPosition({
15649
+ open: !isMobileVariant && isCalendarOpen,
15650
+ placement: resolvedAlign === "end" ? "bottom-end" : "bottom-start"
15651
+ });
15652
+ useEscapeKey(() => {
15653
+ setIsCalendarOpen(false);
15654
+ setSelectingEnd(false);
15655
+ triggerRef.current?.focus();
15656
+ }, isCalendarOpen);
15657
+ React13.useEffect(() => {
15658
+ if (isStorybookDocsMode()) return;
15659
+ if (isMobileVariant && isCalendarOpen) {
15660
+ const prev = document.body.style.overflow;
15661
+ document.body.style.overflow = "hidden";
15662
+ return () => {
15663
+ document.body.style.overflow = prev;
15664
+ };
15665
+ }
15666
+ }, [isMobileVariant, isCalendarOpen]);
15667
+ React13.useLayoutEffect(() => {
15668
+ if (isMobileVariant || !isCalendarOpen) return;
15669
+ if (align === "start" || align === "end") {
15670
+ setResolvedAlign(align);
15671
+ return;
15672
+ }
15673
+ if (typeof window === "undefined") return;
15674
+ const trigger = triggerRef.current;
15675
+ if (!trigger) return;
15676
+ const rect = trigger.getBoundingClientRect();
15677
+ const estimatedPopupWidth = showPresets ? 840 : 640;
15678
+ const margin = 8;
15679
+ const overflowsRight = rect.left + estimatedPopupWidth > window.innerWidth - margin;
15680
+ const fitsLeftAligned = rect.right - estimatedPopupWidth >= margin;
15681
+ setResolvedAlign(overflowsRight && fitsLeftAligned ? "end" : "start");
15682
+ }, [align, isCalendarOpen, isMobileVariant, showPresets]);
15683
+ const handlePresetSelect = (presetKey) => {
15684
+ const range = calculateDateRange(presetKey);
15685
+ setRangeStart(range.start);
15686
+ setRangeEnd(range.end);
15687
+ setSelectingEnd(false);
15688
+ setIsCalendarOpen(false);
15689
+ if (range.start) {
15690
+ setLeftMonth(range.start.getMonth());
15691
+ setLeftYear(range.start.getFullYear());
15692
+ }
15693
+ onChange(range, presetKey);
15694
+ };
15695
+ const handleDayClick = (day, month, year) => {
15696
+ const clicked = new Date(year, month, day);
15697
+ if (!selectingEnd) {
15698
+ setRangeStart(clicked);
15699
+ setRangeEnd(null);
15700
+ setSelectingEnd(true);
15701
+ } else {
15702
+ let start = rangeStart;
15703
+ let end = clicked;
15704
+ if (end < start) {
15705
+ [start, end] = [end, start];
15706
+ }
15707
+ setRangeStart(start);
15708
+ setRangeEnd(end);
15709
+ setSelectingEnd(false);
15710
+ if (variant !== "mobile") {
15711
+ setIsCalendarOpen(false);
15712
+ }
15713
+ onChange({ start, end });
15714
+ }
15715
+ };
15716
+ const toggleCalendar = () => {
15717
+ if (!isCalendarOpen) {
15718
+ if (value?.start) {
15719
+ setRangeStart(value.start);
15720
+ setRangeEnd(value.end ?? null);
15721
+ setLeftMonth(value.start.getMonth());
15722
+ setLeftYear(value.start.getFullYear());
15723
+ } else {
15724
+ const now = /* @__PURE__ */ new Date();
15725
+ setLeftMonth(now.getMonth());
15726
+ setLeftYear(now.getFullYear());
15727
+ }
15728
+ setSelectingEnd(false);
15729
+ }
15730
+ setIsCalendarOpen(!isCalendarOpen);
15731
+ };
15732
+ const goToPrevMonth = () => {
15733
+ if (leftMonth === 0) {
15734
+ setLeftMonth(11);
15735
+ setLeftYear(leftYear - 1);
15736
+ } else {
15737
+ setLeftMonth(leftMonth - 1);
15738
+ }
15739
+ };
15740
+ const goToNextMonth = () => {
15741
+ if (leftMonth === 11) {
15742
+ setLeftMonth(0);
15743
+ setLeftYear(leftYear + 1);
15744
+ } else {
15745
+ setLeftMonth(leftMonth + 1);
15746
+ }
15747
+ };
15748
+ const getDaysInMonth = (month, year) => new Date(year, month + 1, 0).getDate();
15749
+ const getFirstDayOfMonth = (month, year) => new Date(year, month, 1).getDay();
15750
+ const isSameDay = (a, b) => a.getFullYear() === b.getFullYear() && a.getMonth() === b.getMonth() && a.getDate() === b.getDate();
15751
+ const isInRange = (date) => {
15752
+ const start = rangeStart;
15753
+ const end = selectingEnd ? hoverDate : rangeEnd;
15754
+ if (!start || !end) return false;
15755
+ const [lo, hi] = start <= end ? [start, end] : [end, start];
15756
+ return date > lo && date < hi;
15757
+ };
15758
+ const isStart = (date) => {
15759
+ if (!rangeStart) return false;
15760
+ return isSameDay(date, rangeStart);
15761
+ };
15762
+ const isEnd = (date) => {
15763
+ const end = selectingEnd ? hoverDate : rangeEnd;
15764
+ if (!end) return false;
15765
+ return isSameDay(date, end);
15766
+ };
15767
+ const isToday = (date) => {
15768
+ const today = /* @__PURE__ */ new Date();
15769
+ return isSameDay(date, today);
15770
+ };
15771
+ const displayValue = value ? formatDateRange(value) : "";
15772
+ const monthNames = React13.useMemo(
15773
+ () => Array.from(
15774
+ { length: 12 },
15775
+ (_, i) => new Intl.DateTimeFormat(void 0, { month: "long" }).format(
15776
+ new Date(2e3, i, 1)
15777
+ )
15778
+ ),
15779
+ []
15780
+ );
15781
+ const weekdayNames = React13.useMemo(
15782
+ () => Array.from(
15783
+ { length: 7 },
15784
+ (_, i) => new Intl.DateTimeFormat(void 0, { weekday: "short" }).format(
15785
+ new Date(1970, 0, 4 + i)
15786
+ )
15787
+ ),
15788
+ []
15789
+ );
15790
+ const renderMonthGrid = (month, year) => {
15791
+ const daysInMonth = getDaysInMonth(month, year);
15792
+ const firstDay = getFirstDayOfMonth(month, year);
15793
+ const prevMonth = month === 0 ? 11 : month - 1;
15794
+ const prevYear = month === 0 ? year - 1 : year;
15795
+ const daysInPrevMonth = getDaysInMonth(prevMonth, prevYear);
15796
+ const cells = [];
15797
+ for (let i = firstDay - 1; i >= 0; i--) {
15798
+ cells.push({
15799
+ day: daysInPrevMonth - i,
15800
+ month: prevMonth,
15801
+ year: prevYear,
15802
+ isCurrentMonth: false
15803
+ });
15804
+ }
15805
+ for (let i = 1; i <= daysInMonth; i++) {
15806
+ cells.push({ day: i, month, year, isCurrentMonth: true });
15807
+ }
15808
+ const nextMonth = month === 11 ? 0 : month + 1;
15809
+ const nextYear = month === 11 ? year + 1 : year;
15810
+ const remaining = 42 - cells.length;
15811
+ for (let i = 1; i <= remaining; i++) {
15812
+ cells.push({
15813
+ day: i,
15814
+ month: nextMonth,
15815
+ year: nextYear,
15816
+ isCurrentMonth: false
15817
+ });
15818
+ }
15819
+ return /* @__PURE__ */ jsxs("div", { className: "w-[280px]", "data-slot": "date-range-grid", children: [
15820
+ /* @__PURE__ */ jsx("div", { className: "mb-1 grid grid-cols-7", "data-slot": "date-range-weekdays", children: weekdayNames.map((dayName) => /* @__PURE__ */ jsx(
15821
+ "div",
15822
+ {
15823
+ className: "text-muted-foreground py-1 text-center text-xs font-medium",
15824
+ "data-slot": "date-range-weekday",
15825
+ children: dayName
15826
+ },
15827
+ dayName
15828
+ )) }),
15829
+ /* @__PURE__ */ jsx("div", { className: "grid grid-cols-7", "data-slot": "date-range-day-grid", children: cells.map((cell, index) => {
15830
+ const date = new Date(cell.year, cell.month, cell.day);
15831
+ const inRange = isInRange(date);
15832
+ const start = isStart(date);
15833
+ const end = isEnd(date);
15834
+ const today = isToday(date);
15835
+ return /* @__PURE__ */ jsx(
15836
+ "button",
15837
+ {
15838
+ type: "button",
15839
+ "data-slot": "date-range-day",
15840
+ onClick: () => handleDayClick(cell.day, cell.month, cell.year),
15841
+ onMouseEnter: () => {
15842
+ if (selectingEnd) {
15843
+ setHoverDate(date);
15844
+ }
15845
+ },
15846
+ className: cn(
15847
+ "relative h-9 w-10 text-center text-sm",
15848
+ "focus:ring-ring focus:z-10 focus:ring-2 focus:outline-none",
15849
+ "transition-colors",
15850
+ // Not current month — dimmed
15851
+ !cell.isCurrentMonth && "text-muted-foreground/50",
15852
+ // Current month — normal
15853
+ cell.isCurrentMonth && "text-foreground",
15854
+ // Hover
15855
+ "hover:bg-muted",
15856
+ // In range background
15857
+ inRange && "bg-muted",
15858
+ // Start date
15859
+ start && "bg-foreground text-background hover:bg-foreground rounded-s-md font-semibold",
15860
+ // End date
15861
+ end && !start && "border-foreground text-foreground rounded-e-md border font-semibold",
15862
+ // Today indicator (only if not start/end)
15863
+ today && !start && !end && "font-semibold"
15864
+ ),
15865
+ children: cell.day
15866
+ },
15867
+ index
15868
+ );
15869
+ }) })
15870
+ ] });
15871
+ };
15872
+ return /* @__PURE__ */ jsxs(
15873
+ "div",
15874
+ {
15875
+ ref: (node) => {
15876
+ wrapperRef.current = node;
15877
+ anchorRef.current = node;
15878
+ },
15879
+ className: cn("relative inline-block", className),
15880
+ "data-slot": "date-range-picker",
15881
+ children: [
15882
+ /* @__PURE__ */ jsxs(
15883
+ "button",
15884
+ {
15885
+ ref: triggerRef,
15886
+ type: "button",
15887
+ onClick: toggleCalendar,
15888
+ "aria-expanded": isCalendarOpen,
15889
+ "aria-haspopup": "dialog",
15890
+ "data-slot": "date-range-trigger",
15891
+ className: cn(
15892
+ "border-input bg-background hover:bg-muted",
15893
+ "inline-flex w-[300px] items-center gap-2 rounded-md border px-4 py-2 text-start text-sm font-normal",
15894
+ "focus:ring-ring focus:ring-2 focus:outline-none",
15895
+ "transition-colors",
15896
+ !displayValue && "text-muted-foreground"
15897
+ ),
15898
+ children: [
15899
+ /* @__PURE__ */ jsx(Calendar$1, { className: "h-4 w-4", "data-slot": "date-range-trigger-icon" }),
15900
+ displayValue || placeholder
15901
+ ]
15902
+ }
15903
+ ),
15904
+ isMobileVariant && isCalendarOpen && // eslint-disable-next-line jsx-a11y/click-events-have-key-events, jsx-a11y/no-static-element-interactions
15905
+ /* @__PURE__ */ jsx(
15906
+ "div",
15907
+ {
15908
+ "data-slot": "date-range-mobile-overlay",
15909
+ className: "fixed inset-0 z-50 flex items-end justify-center bg-black/40",
15910
+ onClick: (event) => {
15911
+ if (event.target !== event.currentTarget) return;
15912
+ setIsCalendarOpen(false);
15913
+ setSelectingEnd(false);
15914
+ setHoverDate(null);
15915
+ if (triggerRef.current instanceof HTMLElement) {
15916
+ triggerRef.current.focus();
15917
+ }
15918
+ },
15919
+ children: /* @__PURE__ */ jsxs(
15920
+ "div",
15921
+ {
15922
+ ref: (node) => {
15923
+ calendarRef.current = node;
15924
+ focusTrapRef.current = node;
15925
+ },
15926
+ className: "bg-background animate-in slide-in-from-bottom max-h-[90vh] w-full max-w-md overflow-y-auto rounded-t-2xl px-6 pt-4 pb-6 shadow-xl",
15927
+ role: "dialog",
15928
+ "aria-modal": "true",
15929
+ "aria-labelledby": "mobile-date-range-title",
15930
+ "data-slot": "date-range-mobile-sheet",
15931
+ children: [
15932
+ /* @__PURE__ */ jsx(
15933
+ "div",
15934
+ {
15935
+ className: "bg-muted mx-auto mb-4 h-1 w-10 rounded-full",
15936
+ "data-slot": "date-range-mobile-handle"
15937
+ }
15938
+ ),
15939
+ /* @__PURE__ */ jsx(
15940
+ "h3",
15941
+ {
15942
+ id: "mobile-date-range-title",
15943
+ className: "mb-4 text-lg font-semibold",
15944
+ "data-slot": "date-range-mobile-title",
15945
+ children: placeholder
15946
+ }
15947
+ ),
15948
+ /* @__PURE__ */ jsxs(
15949
+ "div",
15950
+ {
15951
+ className: "mb-3 flex items-center justify-center gap-4",
15952
+ "data-slot": "date-range-month-header",
15953
+ children: [
15954
+ /* @__PURE__ */ jsx(
15955
+ "button",
15956
+ {
15957
+ type: "button",
15958
+ onClick: goToPrevMonth,
15959
+ className: "hover:bg-muted rounded-md p-1 transition-colors",
15960
+ "aria-label": "Previous month",
15961
+ "data-slot": "date-range-nav",
15962
+ children: /* @__PURE__ */ jsx(ChevronLeft, { className: "h-4 w-4 rtl:-scale-x-100" })
15963
+ }
15964
+ ),
15965
+ /* @__PURE__ */ jsxs(
15966
+ "div",
15967
+ {
15968
+ className: "text-sm font-medium",
15969
+ "data-slot": "date-range-month-label",
15970
+ children: [
15971
+ monthNames[leftMonth],
15972
+ " ",
15973
+ leftYear
15974
+ ]
15975
+ }
15976
+ ),
15977
+ /* @__PURE__ */ jsx(
15978
+ "button",
15979
+ {
15980
+ type: "button",
15981
+ onClick: goToNextMonth,
15982
+ className: "hover:bg-muted rounded-md p-1 transition-colors",
15983
+ "aria-label": "Next month",
15984
+ "data-slot": "date-range-nav",
15985
+ children: /* @__PURE__ */ jsx(ChevronRight$1, { className: "h-4 w-4 rtl:-scale-x-100" })
15986
+ }
15987
+ )
15988
+ ]
15989
+ }
15990
+ ),
15991
+ /* @__PURE__ */ jsx(
15992
+ "div",
15993
+ {
15994
+ className: "flex justify-center",
15995
+ onMouseLeave: () => setHoverDate(null),
15996
+ children: renderMonthGrid(leftMonth, leftYear)
15997
+ }
15998
+ ),
15999
+ /* @__PURE__ */ jsx(
16000
+ "button",
16001
+ {
16002
+ type: "button",
16003
+ "data-slot": "date-range-mobile-done",
16004
+ onClick: () => {
16005
+ setIsCalendarOpen(false);
16006
+ setSelectingEnd(false);
16007
+ if (triggerRef.current instanceof HTMLElement) {
16008
+ triggerRef.current.focus();
16009
+ }
16010
+ },
16011
+ className: "border-input hover:bg-muted mt-6 w-full rounded-lg border py-3 text-sm font-medium transition-colors",
16012
+ children: labels?.done ?? "Done"
16013
+ }
16014
+ )
16015
+ ]
16016
+ }
16017
+ )
16018
+ }
16019
+ ),
16020
+ !isMobileVariant && isCalendarOpen && createPortal(
16021
+ /* @__PURE__ */ jsx(
16022
+ "div",
16023
+ {
16024
+ ref: (node) => {
16025
+ calendarRef.current = node;
16026
+ floatingRef.current = node;
16027
+ },
16028
+ style,
16029
+ className: cn(
16030
+ "overflow-auto",
16031
+ "bg-background border-border rounded-lg border shadow-lg"
16032
+ ),
16033
+ role: "dialog",
16034
+ "aria-label": "Choose date range",
16035
+ "data-slot": "date-range-popup",
16036
+ children: /* @__PURE__ */ jsxs("div", { className: "flex", children: [
16037
+ showPresets && /* @__PURE__ */ jsx(
16038
+ "div",
16039
+ {
16040
+ className: cn(
16041
+ "border-border flex w-[200px] shrink-0 flex-col gap-0.5 border-e p-3",
16042
+ isResponsive && "hidden md:flex"
16043
+ ),
16044
+ "data-slot": "date-range-presets",
16045
+ children: finalPresets.map((preset) => /* @__PURE__ */ jsx(
16046
+ "button",
16047
+ {
16048
+ type: "button",
16049
+ onClick: () => handlePresetSelect(preset.key),
16050
+ "data-slot": "date-range-preset",
16051
+ className: cn(
16052
+ "rounded-md px-3 py-1.5 text-start text-sm transition-colors",
16053
+ "hover:bg-muted",
16054
+ activePreset === preset.key && "bg-primary-800 text-white"
16055
+ ),
16056
+ children: preset.label
16057
+ },
16058
+ preset.key
16059
+ ))
16060
+ }
16061
+ ),
16062
+ /* @__PURE__ */ jsxs("div", { className: "p-4", "data-slot": "date-range-calendar", children: [
16063
+ /* @__PURE__ */ jsx(
16064
+ "p",
16065
+ {
16066
+ className: "text-muted-foreground mb-4 text-sm",
16067
+ "data-slot": "date-range-subtitle",
16068
+ children: "Select a start and end date from the calendar."
16069
+ }
16070
+ ),
16071
+ /* @__PURE__ */ jsxs(
16072
+ "div",
16073
+ {
16074
+ className: "flex gap-8",
16075
+ onMouseLeave: () => setHoverDate(null),
16076
+ "data-slot": "date-range-calendars",
16077
+ children: [
16078
+ /* @__PURE__ */ jsxs("div", { children: [
16079
+ /* @__PURE__ */ jsxs(
16080
+ "div",
16081
+ {
16082
+ className: "mb-3 flex items-center",
16083
+ "data-slot": "date-range-month-header",
16084
+ children: [
16085
+ /* @__PURE__ */ jsx(
16086
+ "button",
16087
+ {
16088
+ type: "button",
16089
+ onClick: goToPrevMonth,
16090
+ className: "hover:bg-muted rounded-md p-1 transition-colors",
16091
+ "aria-label": "Previous month",
16092
+ "data-slot": "date-range-nav",
16093
+ children: /* @__PURE__ */ jsx(ChevronLeft, { className: "h-4 w-4 rtl:-scale-x-100" })
16094
+ }
16095
+ ),
16096
+ /* @__PURE__ */ jsxs(
16097
+ "div",
16098
+ {
16099
+ className: "flex-1 text-center text-sm font-medium",
16100
+ "data-slot": "date-range-month-label",
16101
+ children: [
16102
+ monthNames[leftMonth],
16103
+ " ",
16104
+ leftYear
16105
+ ]
16106
+ }
16107
+ ),
16108
+ isResponsive && /* @__PURE__ */ jsx(
16109
+ "button",
16110
+ {
16111
+ type: "button",
16112
+ onClick: goToNextMonth,
16113
+ className: "hover:bg-muted rounded-md p-1 transition-colors md:hidden",
16114
+ "aria-label": "Next month",
16115
+ "data-slot": "date-range-nav",
16116
+ children: /* @__PURE__ */ jsx(ChevronRight$1, { className: "h-4 w-4 rtl:-scale-x-100" })
16117
+ }
16118
+ )
16119
+ ]
16120
+ }
16121
+ ),
16122
+ renderMonthGrid(leftMonth, leftYear)
16123
+ ] }),
16124
+ /* @__PURE__ */ jsxs("div", { className: cn(isResponsive && "hidden md:block"), children: [
16125
+ /* @__PURE__ */ jsxs(
16126
+ "div",
16127
+ {
16128
+ className: "mb-3 flex items-center",
16129
+ "data-slot": "date-range-month-header",
16130
+ children: [
16131
+ /* @__PURE__ */ jsxs(
16132
+ "div",
16133
+ {
16134
+ className: "flex-1 text-center text-sm font-medium",
16135
+ "data-slot": "date-range-month-label",
16136
+ children: [
16137
+ monthNames[rightMonth],
16138
+ " ",
16139
+ rightYear
16140
+ ]
16141
+ }
16142
+ ),
16143
+ /* @__PURE__ */ jsx(
16144
+ "button",
16145
+ {
16146
+ type: "button",
16147
+ onClick: goToNextMonth,
16148
+ className: "hover:bg-muted rounded-md p-1 transition-colors",
16149
+ "aria-label": "Next month",
16150
+ "data-slot": "date-range-nav",
16151
+ children: /* @__PURE__ */ jsx(ChevronRight$1, { className: "h-4 w-4 rtl:-scale-x-100" })
16152
+ }
16153
+ )
16154
+ ]
16155
+ }
16156
+ ),
16157
+ renderMonthGrid(rightMonth, rightYear)
16158
+ ] })
16159
+ ]
16160
+ }
16161
+ )
16162
+ ] })
16163
+ ] })
16164
+ }
16165
+ ),
16166
+ document.body
16167
+ )
16168
+ ]
16169
+ }
16170
+ );
16171
+ }
16172
+ function DateRangeFilter({
16173
+ value: _value,
16174
+ onChange,
16175
+ presets,
16176
+ activePreset,
16177
+ variant = "outline",
16178
+ className,
16179
+ labels = {}
16180
+ }) {
16181
+ const finalPresets = presets || getDefaultPresets(labels);
16182
+ const activeLabel = finalPresets.find((p) => p.key === activePreset)?.label;
16183
+ const handlePresetSelect = (presetKey) => {
16184
+ const range = calculateDateRange(presetKey);
16185
+ onChange(range, presetKey);
16186
+ };
16187
+ return /* @__PURE__ */ jsx(
16188
+ Dropdown,
16189
+ {
16190
+ trigger: /* @__PURE__ */ jsxs(Button, { variant, size: "md", className, children: [
16191
+ /* @__PURE__ */ jsx(Calendar$1, { className: "me-2 h-4 w-4" }),
16192
+ activeLabel || labels.filter || "Filter by Date",
16193
+ /* @__PURE__ */ jsx(ChevronDown$1, { className: "ms-2 h-3 w-3" })
16194
+ ] }),
16195
+ className: "w-56",
16196
+ "data-slot": "date-range-filter",
16197
+ children: finalPresets.map((preset) => /* @__PURE__ */ jsx(
16198
+ DropdownItem,
16199
+ {
16200
+ onClick: () => handlePresetSelect(preset.key),
16201
+ className: cn(
16202
+ activePreset === preset.key && "bg-primary/10 text-primary"
16203
+ ),
16204
+ children: preset.label
16205
+ },
16206
+ preset.key
16207
+ ))
16208
+ }
16209
+ );
16210
+ }
15424
16211
  function DropZone({
15425
16212
  onFilesSelected,
15426
16213
  acceptedFileTypes,
@@ -42960,6 +43747,6 @@ function WebsiteInputGroup({
42960
43747
  }
42961
43748
  WebsiteInputGroup.displayName = "WebsiteInputGroup";
42962
43749
 
42963
- export { AIChat, AIChatModal, AIChatTrigger, AIReconciliationPanel, AccessDeniedPage, ActionButton2 as ActionButton, ActionButtonsBar, ActiveFilters, AddContactModal, AddServiceCard, AdditionalFields, Address, AddressCard, AddressCompact, AddressDisplay, AddressForm, AddressInline, AppHeader, AppHeaderActions, AppHeaderBrand, AppHeaderDivider, AppHeaderIconButton, AppHeaderSearch, AppHeaderSection, AppHeaderTitle, AppHeaderUserMenu, AuthButtons, AuthDialog, BUSINESS_HOURS_END_OF_DAY, BookAppointmentButton, BookingDialog, BusinessHours, BusinessHoursEditor, CSVColumnMapper, CSVFileUpload, CardSkeleton, CaseContextBar, CaseManagementHeader, CheckrIntegration, ClaimListingButton, ClaimProviderForm, CommandPalette, CommandPaletteProvider, CommandPaletteTrigger, CompactCookieBanner, CompactFilterBar, CompactHeader, CompactHours, CompactProviderHeader, ConnectionStatusBadge, ConnectionStatusBar, ConnectionStatusOverlay, ConsentSwitch, CookieConsentBanner, CopyrightText, CountBadge, CountryDropdown, CreateInvoiceModal, CreateReferralModal, DEFAULT_BUSINESS_HOURS_EDITOR_LABELS, DEFAULT_ERROR_CONFIGS, DEFAULT_LANGUAGES, DEFAULT_RADIUS_OPTIONS, DEFAULT_SERVICE_PRICING_MANAGER_LABELS, DEFAULT_SOCIAL_PROVIDERS, DEFAULT_TRANSCRIPT_PLAYER_LABELS, DOTBadge, DashboardWidget, DashboardWidgetActions, DashboardWidgetDataCards, DashboardWidgetInfo, DashboardWidgetTable, DialogOverlay, DisclaimerText, DockablePanel, DocumentDetectionOverlay, DocumentScanner, DropZone, DropzoneOverlay, EditUserRoleModal, EmployeeForm, EmployeeProfileCard, EmployerContactCard, EmployerList, EmployerPricingCard, EmployerServiceModal, EmployerView, ErrorPage, FileManager, FilePreview, FloatingAIChat, FloatingInput, FooterLinkSection, SocialMediaLinks2 as FooterSocialLinks, HRISProviderSelector, HandsFreeChat, HealthSurveillance, HelpSupportPanel, HeroSearchBar, HeyOzwell, HeyOzwellSelector, HeyOzwellToggle, HoursSummary, ImagingOrderEditor, InlineBookingForm, InventoryManager, InviteUserModal, InvoiceList, InvoicePaymentPage, InvoiceView, LabOrderEditor, LanguageSelector, LanguageSelectorInline, LanguageSelectorNative, LegalLinks, LoadingBar, LoadingDots, LoadingOverlay, LoadingPage, LoadingSkeleton, MODEL_MANIFEST, MaintenancePage, MobileBackButton, MobileMenuButton, MobileMenuPanel, ModelInfoList, NavLinks, NewsletterForm, NotFoundPage, NotificationCenter, OfflinePage, OnboardingCompletion, OnboardingStepQuestion, OnboardingWizard, OpenStatusBadge, OrderCard, OrderConfirmation, OrderConfirmationWizard, OrderDetailSidebar, OrderEditor, OrderList, OrderLookupForm, OrderSidebar, OrderSidebarTabs, OzwellChat, OzwellSettingsMenu, PageHeader, PatientHeader, PaymentHistoryTable, PaymentMethodBank, PaymentMethodCard, PaymentMethodList, PendingClaimsTable, PermissionsEditor, PillSelect, PresentingProblems, ProcedureOrderEditor, ProductVersion, ProductVersionBadge, Breadcrumb2 as ProviderBreadcrumb, ProviderCard, ProviderCardGrid, ProviderCardSkeleton, ProviderDetailHeader, ProviderDetailHeaderSkeleton, ProviderLogo2 as ProviderLogo, ProviderOverview, ProviderSearchBar, ProviderSearchFilters, ProviderSelector, ProviderSettings, SocialMediaLinks as ProviderSocialLinks, ProviderUsersTable, QuickBookCard, QuickLinksCard, RELEVANCE_LABELS, RecurringServiceAddCard, RecurringServiceCard, RecurringServiceGrid, RecurringServiceSetupModal, ReferralEditor, RejectionModal, ReportDashboard, ReportDatePicker, ReportLink, ReportTimeRange, ResultsEntryCard, ResultsEntryForm, ResultsEntryModal, SSOConfigForm, ScheduleCalendar, SearchResultsMessage, SelectedServicesBadges, ServerErrorPage, ServiceAccordion, ServiceBadge, ServiceBadgeGroup, ServiceCard, ServiceCategoryBadge, ServiceGeneralSettings, ServiceGrid, ServiceLink, ServiceList, ServiceMultiSelect, ServicePicker, ServicePricingManager, ServiceSelect, ServiceShippingSettings, ServiceTagCloud, ServiceTagCloudBadges, SetupServiceModal, Sidebar, SidebarContent, SidebarFooter, SidebarHeader, SidebarMobileToggle, SidebarNav, SidebarNavGroup, SidebarNavItem, SidebarProvider, SidebarSearch, SidebarToggle, SimpleFooter, SiteFooter, SiteHeader, SiteLogo, StepIndicator, StripeBadge, StripeSecureBadge, SuggestedActions, TableOfContents, TimelineEventList, TimelineProgress, Toast, ToastContainer, ToastProvider, TranscriptPlayer, UpdateAvailableOverlay, UserMenu, VerifiedBadge2 as VerifiedBadge, VisitScribe, VoiceManager, VoiceSetup, WEBSITE_TYPES, WebChartReportViewer, WebcamModal, WebsiteInput, WebsiteInputGroup, attributeSegments, centroid, chime, clusterEmbeddings, computePeaks, cosine, countBadgeVariants, countChipVariants, create24HourSchedule, createDefaultSchedule, createWeekdaySchedule, defaultCaseManagementHeaderLabels, defaultHeyOzwellSelectorLabels, defaultOrderTabs, defaultReconciliationIsEqual, formatAddressLines, formatAddressSingleLine, formatCityState, formatCityStateZip, generateId, getGoogleMapsSearchUrl, getGoogleMapsUrl, getWakeWarm, inferSpeakerRoles, isValidUrl, labelClusters, medicationToOrder, mergeTurns, normalizeClosingTime, openRollingRecorder, orderToMedication, parseTimeInput, panelVariants as reconciliationPanelVariants, subscribeWakeWarm, useCamera, useCommandPalette, useConnectionStatus, useCookieConsent, useDiarization, useDocumentDetection, useDropzone, useFileUpload, useHeyOzwell, useOptionalToast, useSidebar, useSpeakerVerify, useToast, useVisitScribe, useVoiceSetup, useWakeWord, warmWakeModels, widgetVariants };
43750
+ export { AIChat, AIChatModal, AIChatTrigger, AIReconciliationPanel, AccessDeniedPage, ActionButton2 as ActionButton, ActionButtonsBar, ActiveFilters, AddContactModal, AddServiceCard, AdditionalFields, Address, AddressCard, AddressCompact, AddressDisplay, AddressForm, AddressInline, AppHeader, AppHeaderActions, AppHeaderBrand, AppHeaderDivider, AppHeaderIconButton, AppHeaderSearch, AppHeaderSection, AppHeaderTitle, AppHeaderUserMenu, AuthButtons, AuthDialog, BUSINESS_HOURS_END_OF_DAY, BookAppointmentButton, BookingDialog, BusinessHours, BusinessHoursEditor, CSVColumnMapper, CSVFileUpload, CardSkeleton, CaseContextBar, CaseManagementHeader, CheckrIntegration, ClaimListingButton, ClaimProviderForm, CommandPalette, CommandPaletteProvider, CommandPaletteTrigger, CompactCookieBanner, CompactFilterBar, CompactHeader, CompactHours, CompactProviderHeader, ConnectionStatusBadge, ConnectionStatusBar, ConnectionStatusOverlay, ConsentSwitch, CookieConsentBanner, CopyrightText, CountBadge, CountryDropdown, CreateInvoiceModal, CreateReferralModal, DEFAULT_BUSINESS_HOURS_EDITOR_LABELS, DEFAULT_ERROR_CONFIGS, DEFAULT_LANGUAGES, DEFAULT_RADIUS_OPTIONS, DEFAULT_SERVICE_PRICING_MANAGER_LABELS, DEFAULT_SOCIAL_PROVIDERS, DEFAULT_TRANSCRIPT_PLAYER_LABELS, DOTBadge, DashboardWidget, DashboardWidgetActions, DashboardWidgetDataCards, DashboardWidgetInfo, DashboardWidgetTable, DateRangeFilter, DateRangePicker, DialogOverlay, DisclaimerText, DockablePanel, DocumentDetectionOverlay, DocumentScanner, DropZone, DropzoneOverlay, EditUserRoleModal, EmployeeForm, EmployeeProfileCard, EmployerContactCard, EmployerList, EmployerPricingCard, EmployerServiceModal, EmployerView, ErrorPage, FileManager, FilePreview, FloatingAIChat, FloatingInput, FooterLinkSection, SocialMediaLinks2 as FooterSocialLinks, HRISProviderSelector, HandsFreeChat, HealthSurveillance, HelpSupportPanel, HeroSearchBar, HeyOzwell, HeyOzwellSelector, HeyOzwellToggle, HoursSummary, ImagingOrderEditor, InlineBookingForm, InventoryManager, InviteUserModal, InvoiceList, InvoicePaymentPage, InvoiceView, LabOrderEditor, LanguageSelector, LanguageSelectorInline, LanguageSelectorNative, LegalLinks, LoadingBar, LoadingDots, LoadingOverlay, LoadingPage, LoadingSkeleton, MODEL_MANIFEST, MaintenancePage, MobileBackButton, MobileMenuButton, MobileMenuPanel, ModelInfoList, NavLinks, NewsletterForm, NotFoundPage, NotificationCenter, OfflinePage, OnboardingCompletion, OnboardingStepQuestion, OnboardingWizard, OpenStatusBadge, OrderCard, OrderConfirmation, OrderConfirmationWizard, OrderDetailSidebar, OrderEditor, OrderList, OrderLookupForm, OrderSidebar, OrderSidebarTabs, OzwellChat, OzwellSettingsMenu, PageHeader, PatientHeader, PaymentHistoryTable, PaymentMethodBank, PaymentMethodCard, PaymentMethodList, PendingClaimsTable, PermissionsEditor, PillSelect, PresentingProblems, ProcedureOrderEditor, ProductVersion, ProductVersionBadge, Breadcrumb2 as ProviderBreadcrumb, ProviderCard, ProviderCardGrid, ProviderCardSkeleton, ProviderDetailHeader, ProviderDetailHeaderSkeleton, ProviderLogo2 as ProviderLogo, ProviderOverview, ProviderSearchBar, ProviderSearchFilters, ProviderSelector, ProviderSettings, SocialMediaLinks as ProviderSocialLinks, ProviderUsersTable, QuickBookCard, QuickLinksCard, RELEVANCE_LABELS, RecurringServiceAddCard, RecurringServiceCard, RecurringServiceGrid, RecurringServiceSetupModal, ReferralEditor, RejectionModal, ReportDashboard, ReportDatePicker, ReportLink, ReportTimeRange, ResultsEntryCard, ResultsEntryForm, ResultsEntryModal, SSOConfigForm, ScheduleCalendar, SearchResultsMessage, SelectedServicesBadges, ServerErrorPage, ServiceAccordion, ServiceBadge, ServiceBadgeGroup, ServiceCard, ServiceCategoryBadge, ServiceGeneralSettings, ServiceGrid, ServiceLink, ServiceList, ServiceMultiSelect, ServicePicker, ServicePricingManager, ServiceSelect, ServiceShippingSettings, ServiceTagCloud, ServiceTagCloudBadges, SetupServiceModal, Sidebar, SidebarContent, SidebarFooter, SidebarHeader, SidebarMobileToggle, SidebarNav, SidebarNavGroup, SidebarNavItem, SidebarProvider, SidebarSearch, SidebarToggle, SimpleFooter, SiteFooter, SiteHeader, SiteLogo, StepIndicator, StripeBadge, StripeSecureBadge, SuggestedActions, TableOfContents, TimelineEventList, TimelineProgress, Toast, ToastContainer, ToastProvider, TranscriptPlayer, UpdateAvailableOverlay, UserMenu, VerifiedBadge2 as VerifiedBadge, VisitScribe, VoiceManager, VoiceSetup, WEBSITE_TYPES, WebChartReportViewer, WebcamModal, WebsiteInput, WebsiteInputGroup, attributeSegments, calculateDateRange, centroid, chime, clusterEmbeddings, computePeaks, cosine, countBadgeVariants, countChipVariants, create24HourSchedule, createDefaultSchedule, createWeekdaySchedule, defaultCaseManagementHeaderLabels, defaultHeyOzwellSelectorLabels, defaultOrderTabs, defaultReconciliationIsEqual, formatAddressLines, formatAddressSingleLine, formatCityState, formatCityStateZip, generateId, getDefaultPresets, getExtendedPresets, getGoogleMapsSearchUrl, getGoogleMapsUrl, getWakeWarm, inferSpeakerRoles, isValidUrl, labelClusters, medicationToOrder, mergeTurns, normalizeClosingTime, openRollingRecorder, orderToMedication, parseTimeInput, panelVariants as reconciliationPanelVariants, subscribeWakeWarm, useCamera, useCommandPalette, useConnectionStatus, useCookieConsent, useDiarization, useDocumentDetection, useDropzone, useFileUpload, useHeyOzwell, useOptionalToast, useSidebar, useSpeakerVerify, useToast, useVisitScribe, useVoiceSetup, useWakeWord, warmWakeModels, widgetVariants };
42964
43751
  //# sourceMappingURL=index.js.map
42965
43752
  //# sourceMappingURL=index.js.map