@mieweb/ui 0.9.0-dev.2 → 0.9.0-dev.3
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.
- package/dist/{Animated-Cs-naa2g.d.cts → Animated-XmH6k8pZ.d.cts} +16 -3
- package/dist/{Animated-Cs-naa2g.d.ts → Animated-XmH6k8pZ.d.ts} +16 -3
- package/dist/{chunk-XUVEF2RQ.js → chunk-24SEAAOH.js} +2 -2
- package/dist/{chunk-XUVEF2RQ.js.map → chunk-24SEAAOH.js.map} +1 -1
- package/dist/{chunk-FUFBRKOG.cjs → chunk-2WBPNXO2.cjs} +21 -21
- package/dist/{chunk-FUFBRKOG.cjs.map → chunk-2WBPNXO2.cjs.map} +1 -1
- package/dist/{chunk-IUDY6S7I.cjs → chunk-37UZHCLM.cjs} +35 -14
- package/dist/chunk-37UZHCLM.cjs.map +1 -0
- package/dist/{chunk-L52N6BEN.cjs → chunk-AUOTJQGO.cjs} +7 -7
- package/dist/{chunk-L52N6BEN.cjs.map → chunk-AUOTJQGO.cjs.map} +1 -1
- package/dist/{chunk-2A2FLQJC.cjs → chunk-B67VPJCZ.cjs} +9 -9
- package/dist/{chunk-2A2FLQJC.cjs.map → chunk-B67VPJCZ.cjs.map} +1 -1
- package/dist/{chunk-ADUEASXF.cjs → chunk-E7G22IQM.cjs} +27 -27
- package/dist/{chunk-ADUEASXF.cjs.map → chunk-E7G22IQM.cjs.map} +1 -1
- package/dist/{chunk-ONNY7UO4.js → chunk-JDJQTKTX.js} +3 -3
- package/dist/{chunk-ONNY7UO4.js.map → chunk-JDJQTKTX.js.map} +1 -1
- package/dist/{chunk-BJKAVWED.js → chunk-MBWF36DJ.js} +35 -14
- package/dist/chunk-MBWF36DJ.js.map +1 -0
- package/dist/{chunk-XRKBHECB.cjs → chunk-NPHZUCF3.cjs} +10 -2
- package/dist/chunk-NPHZUCF3.cjs.map +1 -0
- package/dist/chunk-NV2CWBI2.cjs +290 -0
- package/dist/chunk-NV2CWBI2.cjs.map +1 -0
- package/dist/{chunk-7KN6J7XV.cjs → chunk-OMAACCFW.cjs} +7 -7
- package/dist/{chunk-7KN6J7XV.cjs.map → chunk-OMAACCFW.cjs.map} +1 -1
- package/dist/{chunk-YJP6DUFO.cjs → chunk-PKD3JLS2.cjs} +6 -6
- package/dist/{chunk-YJP6DUFO.cjs.map → chunk-PKD3JLS2.cjs.map} +1 -1
- package/dist/{chunk-5H7SAEQO.js → chunk-QKFJDQEK.js} +3 -3
- package/dist/{chunk-5H7SAEQO.js.map → chunk-QKFJDQEK.js.map} +1 -1
- package/dist/{chunk-XJTFZLWH.cjs → chunk-QO6PRHDX.cjs} +2 -2
- package/dist/{chunk-XJTFZLWH.cjs.map → chunk-QO6PRHDX.cjs.map} +1 -1
- package/dist/{chunk-OHDIJOGG.js → chunk-RD3JDFYJ.js} +3 -3
- package/dist/{chunk-OHDIJOGG.js.map → chunk-RD3JDFYJ.js.map} +1 -1
- package/dist/{chunk-4SM3I7WE.cjs → chunk-RXPEZXAB.cjs} +67 -38
- package/dist/chunk-RXPEZXAB.cjs.map +1 -0
- package/dist/{chunk-VTR2KGLY.cjs → chunk-S3BCHPXT.cjs} +9 -9
- package/dist/{chunk-VTR2KGLY.cjs.map → chunk-S3BCHPXT.cjs.map} +1 -1
- package/dist/{chunk-KU3XRHWA.js → chunk-TZX76ZNZ.js} +67 -38
- package/dist/chunk-TZX76ZNZ.js.map +1 -0
- package/dist/{chunk-KI5ES4GR.js → chunk-UHHYJ42E.js} +10 -2
- package/dist/chunk-UHHYJ42E.js.map +1 -0
- package/dist/{chunk-KATEJG2F.js → chunk-VMQZAOFM.js} +3 -3
- package/dist/{chunk-KATEJG2F.js.map → chunk-VMQZAOFM.js.map} +1 -1
- package/dist/{chunk-Q7G56ZIO.js → chunk-WUBMDOTG.js} +3 -3
- package/dist/{chunk-Q7G56ZIO.js.map → chunk-WUBMDOTG.js.map} +1 -1
- package/dist/chunk-XCP454Q6.js +263 -0
- package/dist/chunk-XCP454Q6.js.map +1 -0
- package/dist/{chunk-I3DQXUSC.js → chunk-Y6DFMDMH.js} +3 -3
- package/dist/{chunk-I3DQXUSC.js.map → chunk-Y6DFMDMH.js.map} +1 -1
- package/dist/{chunk-2KQWEROH.js → chunk-YSEMAI4I.js} +3 -3
- package/dist/{chunk-2KQWEROH.js.map → chunk-YSEMAI4I.js.map} +1 -1
- package/dist/components/AlertDialog/index.cjs +4 -4
- package/dist/components/AlertDialog/index.js +3 -3
- package/dist/components/Collapsible/index.cjs +6 -4
- package/dist/components/Collapsible/index.js +3 -1
- package/dist/components/Dropdown/index.cjs +9 -8
- package/dist/components/Dropdown/index.js +2 -1
- package/dist/components/KeyboardShortcutsOverlay/index.cjs +5 -5
- package/dist/components/KeyboardShortcutsOverlay/index.js +3 -3
- package/dist/components/MediaEditor/index.cjs +8 -8
- package/dist/components/MediaEditor/index.js +3 -3
- package/dist/components/Modal/index.cjs +10 -10
- package/dist/components/Modal/index.js +2 -2
- package/dist/components/RichTextEditor/index.cjs +6 -5
- package/dist/components/RichTextEditor/index.js +3 -2
- package/dist/components/SuperChat/index.cjs +14 -13
- package/dist/components/SuperChat/index.cjs.map +1 -1
- package/dist/components/SuperChat/index.js +3 -2
- package/dist/components/SuperChat/index.js.map +1 -1
- package/dist/esheet.cjs +6 -6
- package/dist/esheet.js +3 -3
- package/dist/hooks/index.cjs +13 -13
- package/dist/hooks/index.js +1 -1
- package/dist/index.cjs +1032 -1012
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +10 -2
- package/dist/index.d.ts +10 -2
- package/dist/index.js +687 -667
- package/dist/index.js.map +1 -1
- package/dist/motion.cjs +7 -7
- package/dist/motion.d.cts +1 -1
- package/dist/motion.d.ts +1 -1
- package/dist/motion.js +2 -2
- package/dist/styles.css +1 -1
- package/dist/tailwind-preset.cjs +4 -4
- package/dist/tailwind-preset.js +1 -1
- package/package.json +1 -1
- package/dist/chunk-4SM3I7WE.cjs.map +0 -1
- package/dist/chunk-BJKAVWED.js.map +0 -1
- package/dist/chunk-BN75TLUN.cjs +0 -163
- package/dist/chunk-BN75TLUN.cjs.map +0 -1
- package/dist/chunk-IUDY6S7I.cjs.map +0 -1
- package/dist/chunk-KI5ES4GR.js.map +0 -1
- package/dist/chunk-KU3XRHWA.js.map +0 -1
- package/dist/chunk-WYMO3IIK.js +0 -136
- package/dist/chunk-WYMO3IIK.js.map +0 -1
- package/dist/chunk-XRKBHECB.cjs.map +0 -1
package/dist/index.js
CHANGED
|
@@ -25,14 +25,14 @@ export { SourceTip } from './chunk-PHK4XBO5.js';
|
|
|
25
25
|
export { Sparkline } from './chunk-CG4ZKJLE.js';
|
|
26
26
|
import { Spinner, SpinnerWithLabel } from './chunk-UA7E7PDS.js';
|
|
27
27
|
export { FullPageSpinner, Spinner, SpinnerWithLabel, spinnerVariants } from './chunk-UA7E7PDS.js';
|
|
28
|
-
import { SparklesIcon, RefreshIcon, CloseIcon, AIMessageDisplay, ComposerModelSelector } from './chunk-
|
|
29
|
-
export { AILogoIcon, AIMessageDisplay, AITypingIndicator, ChatBubble, ChatComposer, ChevronIcon, CloseIcon, CollapsiblePill, ComposerModelSelector, MCPToolCallDisplay, MessageAvatar, RefreshIcon, ResourceLink, SendIcon, SparklesIcon, SpinnerIcon, ToolStatusIcon, getToolIcon } from './chunk-
|
|
28
|
+
import { SparklesIcon, RefreshIcon, CloseIcon, AIMessageDisplay, ComposerModelSelector } from './chunk-VMQZAOFM.js';
|
|
29
|
+
export { AILogoIcon, AIMessageDisplay, AITypingIndicator, ChatBubble, ChatComposer, ChevronIcon, CloseIcon, CollapsiblePill, ComposerModelSelector, MCPToolCallDisplay, MessageAvatar, RefreshIcon, ResourceLink, SendIcon, SparklesIcon, SpinnerIcon, ToolStatusIcon, getToolIcon } from './chunk-VMQZAOFM.js';
|
|
30
30
|
import { MessageComposer, EmptyState } from './chunk-RPG2ZP2T.js';
|
|
31
31
|
export { AttachmentPreview, CharacterCounter, ConversationHeader, ConversationListItem, ConversationListSkeleton, DateSeparator, EmptyState, LightboxModal, LoadMoreButton, MessageBubble, MessageComposer, MessageList, MessageStatusIcon, MessageThread, MessagingSplitView, ReadReceiptIndicator, SendButton, SkeletonMessage, TypingIndicator, bubbleVariants, formatDateLabel, formatFileSize, formatLastSeen, getConversationSubtitle, getConversationTitle, groupMessagesByDate, headerVariants, isSameSenderGroup, sendButtonVariants, useMessageScroll, useMessages, useReadReceipts, useTypingIndicator } from './chunk-RPG2ZP2T.js';
|
|
32
32
|
export { AttachmentPicker, AttachmentPreviewItem, CameraButton, DragDropZone, generateAttachmentId, getFileType, validateFile } from './chunk-IF3X2WZP.js';
|
|
33
33
|
import { RecordButton } from './chunk-VNWJTCBQ.js';
|
|
34
34
|
export { RecordButton, formatDuration, recordButtonVariants } from './chunk-VNWJTCBQ.js';
|
|
35
|
-
export { RichTextEditor, convertAngleBracketsToMustache, processDictation } from './chunk-
|
|
35
|
+
export { RichTextEditor, convertAngleBracketsToMustache, processDictation } from './chunk-QKFJDQEK.js';
|
|
36
36
|
export { DateButton, DatePicker, RadioOption, SchedulePicker, TimeButton, TimePicker, dateButtonVariants, radioOptionVariants, timeButtonVariants } from './chunk-23AYDOCH.js';
|
|
37
37
|
export { ScrollArea, scrollAreaVariants } from './chunk-HS25RPDW.js';
|
|
38
38
|
export { SectionSpyNav } from './chunk-3RB35GYK.js';
|
|
@@ -45,18 +45,18 @@ export { QuickAction, QuickActionGroup, QuickActionIcons, quickActionIconVariant
|
|
|
45
45
|
export { ReadingProgressBar } from './chunk-WKSUL2ZN.js';
|
|
46
46
|
export { FreshnessBadge, FreshnessDot, daysSince, freshnessLevel } from './chunk-HQ3XPCHG.js';
|
|
47
47
|
export { GlossaryTooltip } from './chunk-L5W7TJQ5.js';
|
|
48
|
-
export { Kbd, KeyboardShortcutsOverlay } from './chunk-
|
|
48
|
+
export { Kbd, KeyboardShortcutsOverlay } from './chunk-Y6DFMDMH.js';
|
|
49
49
|
export { CodeBlock, MarkdownRenderer, highlightCode, useMarkdown } from './chunk-D25WH7MH.js';
|
|
50
50
|
export { CsvBlock } from './chunk-NHN6A3ZO.js';
|
|
51
51
|
export { HtmlPreviewBlock } from './chunk-EG7XFZ3W.js';
|
|
52
52
|
export { MermaidBlock } from './chunk-ZB54MTMQ.js';
|
|
53
53
|
export { SurveyBlock } from './chunk-OSPTA4UR.js';
|
|
54
54
|
export { FenceBlock } from './chunk-CK3KLRNF.js';
|
|
55
|
-
export { FillerWordsModal, MediaEditor, SilenceSettingsModal, SpeedMarkerMenu, WordEditorModal } from './chunk-
|
|
55
|
+
export { FillerWordsModal, MediaEditor, SilenceSettingsModal, SpeedMarkerMenu, WordEditorModal } from './chunk-JDJQTKTX.js';
|
|
56
56
|
export { Slider, sliderRangeVariants, sliderThumbVariants, sliderTrackVariants } from './chunk-2BPIVWAK.js';
|
|
57
57
|
import './chunk-RISZWWEQ.js';
|
|
58
58
|
export { MediaPlayer, inferMediaKind, mediaPlayerVariants } from './chunk-5WOB4UBD.js';
|
|
59
|
-
export { Collapsible, CollapsibleContent, CollapsibleTrigger } from './chunk-
|
|
59
|
+
export { Collapsible, CollapsibleContent, CollapsibleTrigger } from './chunk-MBWF36DJ.js';
|
|
60
60
|
export { CopyButton } from './chunk-5QZ73PZC.js';
|
|
61
61
|
import { CountryDropdownBase } from './chunk-QAKASRE6.js';
|
|
62
62
|
export { CountryCodeDropdown, formatE164, validatePhoneNumber } from './chunk-QAKASRE6.js';
|
|
@@ -64,8 +64,8 @@ export { CustomizableDashboard, DashboardCustomizePanel, consolidateColumns, mer
|
|
|
64
64
|
import { Switch, switchThumbVariants, switchTrackVariants } from './chunk-AQ564XO7.js';
|
|
65
65
|
export { Switch, switchThumbVariants, switchTrackVariants } from './chunk-AQ564XO7.js';
|
|
66
66
|
export { Sheet, SheetBody, SheetClose, SheetDescription, SheetFooter, SheetHeader, SheetTitle, sheetContentVariants, sheetOverlayVariants } from './chunk-ON4JULCA.js';
|
|
67
|
-
import { Dropdown, DropdownItem, DropdownSeparator, DropdownContent, DropdownHeader } from './chunk-
|
|
68
|
-
export { Dropdown, DropdownContent, DropdownHeader, DropdownItem, DropdownLabel, DropdownSeparator, DropdownSubmenu } from './chunk-
|
|
67
|
+
import { Dropdown, DropdownItem, DropdownSeparator, DropdownContent, DropdownHeader } from './chunk-TZX76ZNZ.js';
|
|
68
|
+
export { Dropdown, DropdownContent, DropdownHeader, DropdownItem, DropdownLabel, DropdownSeparator, DropdownSubmenu } from './chunk-TZX76ZNZ.js';
|
|
69
69
|
export { FilterSummaryBar } from './chunk-6SCQ7FKT.js';
|
|
70
70
|
export { FloatingWindow, MinimizedWindow } from './chunk-PYHFVYVZ.js';
|
|
71
71
|
import { Avatar } from './chunk-HZ4MBUC3.js';
|
|
@@ -80,19 +80,19 @@ export { CollabStatus, defaultCollabStatusLabels, useYjsCollabStatus } from './c
|
|
|
80
80
|
import './chunk-7XUN3OQT.js';
|
|
81
81
|
export { isHtmlEmpty, stripHtmlTags } from './chunk-ERLPVXOV.js';
|
|
82
82
|
export { formatPhoneNumber, isPhoneNumberEmpty, isValidPhoneNumber, unformatPhoneNumber } from './chunk-ZVPJ2MH6.js';
|
|
83
|
-
export { miewebUIPreset, miewebUISafelist } from './chunk-
|
|
83
|
+
export { miewebUIPreset, miewebUISafelist } from './chunk-UHHYJ42E.js';
|
|
84
84
|
export { Accordion } from './chunk-KRU6IGV7.js';
|
|
85
85
|
import { Alert, AlertTitle, AlertDescription } from './chunk-3JWAABYI.js';
|
|
86
86
|
export { Alert, AlertDescription, AlertTitle, alertVariants } from './chunk-3JWAABYI.js';
|
|
87
|
-
import { AlertDialog } from './chunk-
|
|
88
|
-
export { AlertDialog } from './chunk-
|
|
87
|
+
import { AlertDialog } from './chunk-RD3JDFYJ.js';
|
|
88
|
+
export { AlertDialog } from './chunk-RD3JDFYJ.js';
|
|
89
89
|
export { AudioPlayer, ProgressBar, audioPlayerVariants, formatTime as formatAudioTime, playButtonVariants } from './chunk-VVDE4CHU.js';
|
|
90
90
|
export { AudioRecorder, audioRecorderVariants, controlButtonVariants, formatTime, waveformContainerVariants } from './chunk-2DW4PUJD.js';
|
|
91
91
|
export { Autocomplete } from './chunk-QAQOCS2J.js';
|
|
92
92
|
import { evaluateDue, completedKeys, normalizeOrders } from './chunk-Y5KEFV5O.js';
|
|
93
93
|
export { buildChartOrderRows, buildEncounterOrderRows, dueForOrder, evaluateDue, evaluateProgram, isApplicable } from './chunk-Y5KEFV5O.js';
|
|
94
|
-
import { useCodeLookupConfig, RowActionToolbar, RowIconButton, toolbarKeyNav, parseSig, labelToMedicationFields, MedicationEditor } from './chunk-
|
|
95
|
-
export { ALLERGY_TYPE_LABELS, AllergyList, AllergyManager, CodeLookupProvider, MEDICATION_STATUS_LABELS, MedicationEditor, MedicationList, MedicationReconciliation, RowActionToolbar, RowIconButton, labelToMedicationFields, lookupToMedicationFields, parseMedicationLabel, parseSig, toolbarKeyNav, useCodeLookupConfig } from './chunk-
|
|
94
|
+
import { useCodeLookupConfig, RowActionToolbar, RowIconButton, toolbarKeyNav, parseSig, labelToMedicationFields, MedicationEditor } from './chunk-YSEMAI4I.js';
|
|
95
|
+
export { ALLERGY_TYPE_LABELS, AllergyList, AllergyManager, CodeLookupProvider, MEDICATION_STATUS_LABELS, MedicationEditor, MedicationList, MedicationReconciliation, RowActionToolbar, RowIconButton, labelToMedicationFields, lookupToMedicationFields, parseMedicationLabel, parseSig, toolbarKeyNav, useCodeLookupConfig } from './chunk-YSEMAI4I.js';
|
|
96
96
|
import { Textarea } from './chunk-H3YO5GBM.js';
|
|
97
97
|
export { Textarea, textareaVariants } from './chunk-H3YO5GBM.js';
|
|
98
98
|
import { Tooltip } from './chunk-MUIDWFYJ.js';
|
|
@@ -109,8 +109,8 @@ import { Card, CardHeader, CardContent, CardTitle } from './chunk-QYSUYB3S.js';
|
|
|
109
109
|
export { Card, CardActions, CardBadge, CardCollapsible, CardContent, CardDescription, CardDivider, CardFooter, CardHeader, CardMedia, CardStat, CardTitle, cardAccentVariants, cardVariants } from './chunk-QYSUYB3S.js';
|
|
110
110
|
import { dateToDisplayFormat, isValidDate, displayFormatToDateString } from './chunk-RC2YMOMS.js';
|
|
111
111
|
export { calculateAge, dateToDisplayFormat, displayFormatToDateString, formatDateValue, isDateEmpty, isDateInFuture, isDateInPast, isValidDate, isValidDrivingAge, parseDateValue } from './chunk-RC2YMOMS.js';
|
|
112
|
-
import { Modal, ModalHeader, ModalTitle, ModalClose, ModalBody, ModalFooter } from './chunk-
|
|
113
|
-
export { Modal, ModalBody, ModalClose, ModalFooter, ModalHeader, ModalTitle, modalContentVariants, modalOverlayVariants } from './chunk-
|
|
112
|
+
import { Modal, ModalHeader, ModalTitle, ModalClose, ModalBody, ModalFooter } from './chunk-WUBMDOTG.js';
|
|
113
|
+
export { Modal, ModalBody, ModalClose, ModalFooter, ModalHeader, ModalTitle, modalContentVariants, modalOverlayVariants } from './chunk-WUBMDOTG.js';
|
|
114
114
|
import './chunk-6NZXWKUE.js';
|
|
115
115
|
import { Input, inputVariants } from './chunk-3IMM2PM4.js';
|
|
116
116
|
export { Input, RequiredMark, floatingGroupLabelVariants, floatingGroupVariants, floatingLabelVariants, inputVariants } from './chunk-3IMM2PM4.js';
|
|
@@ -120,12 +120,12 @@ import { Badge } from './chunk-BMSG4NBH.js';
|
|
|
120
120
|
export { Badge, badgeVariants } from './chunk-BMSG4NBH.js';
|
|
121
121
|
import { Button, buttonVariants } from './chunk-KREUYVMZ.js';
|
|
122
122
|
export { Button, buttonVariants } from './chunk-KREUYVMZ.js';
|
|
123
|
-
import { AnimatedPresence, Animated } from './chunk-
|
|
124
|
-
export { Animated, AnimatedPresence, motionPresets, useMotionRuntime } from './chunk-
|
|
123
|
+
import { AnimatedPresence, Animated } from './chunk-XCP454Q6.js';
|
|
124
|
+
export { Animated, AnimatedPresence, motionPresets, useMotionRuntime } from './chunk-XCP454Q6.js';
|
|
125
125
|
import { cn } from './chunk-TQONQSJO.js';
|
|
126
126
|
export { cn, miewebUITwMergeConflicts } from './chunk-TQONQSJO.js';
|
|
127
|
-
import { useCommandK, useIsMobile, useMediaQuery
|
|
128
|
-
export { RTL_LOCALES, isRtlLocale, useCommandK, useDirection, useIsDesktop, useIsLargeDesktop, useIsMobile, useIsMobileOrTablet, useIsSmallTablet, useIsTablet, useKeyboardShortcut, useMediaQuery } from './chunk-
|
|
127
|
+
import { useDirection, useCommandK, useIsMobile, useMediaQuery } from './chunk-24SEAAOH.js';
|
|
128
|
+
export { RTL_LOCALES, isRtlLocale, useCommandK, useDirection, useIsDesktop, useIsLargeDesktop, useIsMobile, useIsMobileOrTablet, useIsSmallTablet, useIsTablet, useKeyboardShortcut, useMediaQuery } from './chunk-24SEAAOH.js';
|
|
129
129
|
export { useTheme } from './chunk-KJZNEVYM.js';
|
|
130
130
|
import { useScrollSpy } from './chunk-WBGUYSWY.js';
|
|
131
131
|
export { useScrollSpy } from './chunk-WBGUYSWY.js';
|
|
@@ -146,8 +146,8 @@ export { useClickOutside } from './chunk-62ZOA6PX.js';
|
|
|
146
146
|
import { useAnchoredPosition } from './chunk-WSNMQQ4P.js';
|
|
147
147
|
export { useAnchoredPosition } from './chunk-WSNMQQ4P.js';
|
|
148
148
|
export { isDarkMode, useIsDarkMode } from './chunk-RUGHNFQG.js';
|
|
149
|
-
import * as
|
|
150
|
-
import
|
|
149
|
+
import * as React13 from 'react';
|
|
150
|
+
import React13__default, { createContext, useState, useEffect, useCallback, useMemo, useContext, useRef } from 'react';
|
|
151
151
|
import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
|
|
152
152
|
import { cva } from 'class-variance-authority';
|
|
153
153
|
import * as ReactDOM from 'react-dom';
|
|
@@ -621,8 +621,8 @@ function AdditionalFields({
|
|
|
621
621
|
className,
|
|
622
622
|
collapsible = true
|
|
623
623
|
}) {
|
|
624
|
-
const [isExpanded, setIsExpanded] =
|
|
625
|
-
const contentId =
|
|
624
|
+
const [isExpanded, setIsExpanded] = React13.useState(defaultExpanded);
|
|
625
|
+
const contentId = React13.useId();
|
|
626
626
|
const handleNameChange = (id, name) => {
|
|
627
627
|
const updated = value.map(
|
|
628
628
|
(entry) => entry.id === id ? { ...entry, name } : entry
|
|
@@ -1060,10 +1060,10 @@ function AddressForm({
|
|
|
1060
1060
|
className,
|
|
1061
1061
|
googlePlaces
|
|
1062
1062
|
}) {
|
|
1063
|
-
const generatedId =
|
|
1063
|
+
const generatedId = React13.useId();
|
|
1064
1064
|
const idPrefix = id || generatedId;
|
|
1065
|
-
const autocompleteRef =
|
|
1066
|
-
const inputRef =
|
|
1065
|
+
const autocompleteRef = React13.useRef(null);
|
|
1066
|
+
const inputRef = React13.useRef(null);
|
|
1067
1067
|
const mergedLabels = { ...DEFAULT_LABELS, ...labels };
|
|
1068
1068
|
const mergedPlaceholders = { ...DEFAULT_PLACEHOLDERS, ...placeholders };
|
|
1069
1069
|
const handleChange = (field, fieldValue) => {
|
|
@@ -1072,7 +1072,7 @@ function AddressForm({
|
|
|
1072
1072
|
[field]: fieldValue
|
|
1073
1073
|
});
|
|
1074
1074
|
};
|
|
1075
|
-
|
|
1075
|
+
React13.useEffect(() => {
|
|
1076
1076
|
if (!googlePlaces?.enabled || !inputRef.current) return;
|
|
1077
1077
|
const googleMaps = globalThis.window?.google;
|
|
1078
1078
|
if (!googleMaps?.maps?.places?.Autocomplete) {
|
|
@@ -1491,13 +1491,13 @@ function AIChat({
|
|
|
1491
1491
|
renderTextContent,
|
|
1492
1492
|
renderMessageFooter
|
|
1493
1493
|
}) {
|
|
1494
|
-
const messagesContainerRef =
|
|
1495
|
-
const messages =
|
|
1494
|
+
const messagesContainerRef = React13.useRef(null);
|
|
1495
|
+
const messages = React13.useMemo(
|
|
1496
1496
|
() => session?.messages || messagesProp || [],
|
|
1497
1497
|
[session?.messages, messagesProp]
|
|
1498
1498
|
);
|
|
1499
1499
|
const isGenerating = session?.isGenerating || isGeneratingProp || false;
|
|
1500
|
-
|
|
1500
|
+
React13.useEffect(() => {
|
|
1501
1501
|
const container = messagesContainerRef.current;
|
|
1502
1502
|
if (container) container.scrollTop = container.scrollHeight;
|
|
1503
1503
|
}, [messages]);
|
|
@@ -1908,7 +1908,6 @@ function Toast({
|
|
|
1908
1908
|
className: cn(
|
|
1909
1909
|
"flex items-start gap-3 rounded-lg border p-4 shadow-lg",
|
|
1910
1910
|
"max-w-[420px] min-w-[300px]",
|
|
1911
|
-
"animate-slide-in-right rtl:animate-slide-in-left",
|
|
1912
1911
|
styles.container
|
|
1913
1912
|
),
|
|
1914
1913
|
children: [
|
|
@@ -1953,17 +1952,27 @@ var positionStyles = {
|
|
|
1953
1952
|
"bottom-left": "bottom-4 start-4 items-start",
|
|
1954
1953
|
"bottom-right": "bottom-4 end-4 items-end"
|
|
1955
1954
|
};
|
|
1955
|
+
function toastEdge(position, isRtl) {
|
|
1956
|
+
if (position === "top-center") return "top";
|
|
1957
|
+
if (position === "bottom-center") return "bottom";
|
|
1958
|
+
const isStart = position.endsWith("-start") || position.endsWith("-left");
|
|
1959
|
+
return isStart === isRtl ? "right" : "left";
|
|
1960
|
+
}
|
|
1961
|
+
var TOAST_FALLBACK_ANIMATION = "animate-slide-in-right rtl:animate-slide-in-left";
|
|
1956
1962
|
function ToastContainer({
|
|
1957
1963
|
toasts,
|
|
1958
1964
|
position,
|
|
1959
1965
|
onDismiss
|
|
1960
1966
|
}) {
|
|
1961
1967
|
const context = useOptionalToast();
|
|
1968
|
+
const containerRef = React13__default.useRef(null);
|
|
1969
|
+
const isRtl = useDirection(containerRef) === "rtl";
|
|
1962
1970
|
const resolvedPosition = position ?? context?.position ?? "bottom-end";
|
|
1963
|
-
|
|
1971
|
+
const edge = toastEdge(resolvedPosition, isRtl);
|
|
1964
1972
|
return /* @__PURE__ */ jsx(
|
|
1965
1973
|
"div",
|
|
1966
1974
|
{
|
|
1975
|
+
ref: containerRef,
|
|
1967
1976
|
"data-slot": "toast-container",
|
|
1968
1977
|
className: cn(
|
|
1969
1978
|
"pointer-events-none fixed z-50 flex flex-col gap-2",
|
|
@@ -1971,7 +1980,18 @@ function ToastContainer({
|
|
|
1971
1980
|
),
|
|
1972
1981
|
"aria-live": "polite",
|
|
1973
1982
|
"aria-atomic": "true",
|
|
1974
|
-
children:
|
|
1983
|
+
children: /* @__PURE__ */ jsx(AnimatedPresence, { children: toasts.map((toast) => /* @__PURE__ */ jsx(
|
|
1984
|
+
Animated,
|
|
1985
|
+
{
|
|
1986
|
+
preset: "toast",
|
|
1987
|
+
mode: "presence",
|
|
1988
|
+
custom: edge,
|
|
1989
|
+
className: "pointer-events-auto",
|
|
1990
|
+
fallbackClassName: TOAST_FALLBACK_ANIMATION,
|
|
1991
|
+
children: /* @__PURE__ */ jsx(Toast, { ...toast, onClose: () => onDismiss(toast.id) })
|
|
1992
|
+
},
|
|
1993
|
+
toast.id
|
|
1994
|
+
)) })
|
|
1975
1995
|
}
|
|
1976
1996
|
);
|
|
1977
1997
|
}
|
|
@@ -2031,19 +2051,19 @@ function OzwellChat({
|
|
|
2031
2051
|
footer = "Powered by Ozwell",
|
|
2032
2052
|
className
|
|
2033
2053
|
}) {
|
|
2034
|
-
const shellRef =
|
|
2035
|
-
const [thinkingMenuOpen, setThinkingMenuOpen] =
|
|
2036
|
-
const [messagesMenuOpen, setMessagesMenuOpen] =
|
|
2037
|
-
const [messagesButtonFlare, setMessagesButtonFlare] =
|
|
2038
|
-
const [isEditingQueuedMessage, setIsEditingQueuedMessage] =
|
|
2039
|
-
const [queuedMessageDraft, setQueuedMessageDraft] =
|
|
2040
|
-
const hasFlaredRef =
|
|
2041
|
-
const queuedMessageEditorRef =
|
|
2042
|
-
const displayedMessages =
|
|
2054
|
+
const shellRef = React13.useRef(null);
|
|
2055
|
+
const [thinkingMenuOpen, setThinkingMenuOpen] = React13.useState(false);
|
|
2056
|
+
const [messagesMenuOpen, setMessagesMenuOpen] = React13.useState(false);
|
|
2057
|
+
const [messagesButtonFlare, setMessagesButtonFlare] = React13.useState(false);
|
|
2058
|
+
const [isEditingQueuedMessage, setIsEditingQueuedMessage] = React13.useState(false);
|
|
2059
|
+
const [queuedMessageDraft, setQueuedMessageDraft] = React13.useState("");
|
|
2060
|
+
const hasFlaredRef = React13.useRef(false);
|
|
2061
|
+
const queuedMessageEditorRef = React13.useRef(null);
|
|
2062
|
+
const displayedMessages = React13.useMemo(
|
|
2043
2063
|
() => applyThinkingMode(messages, thinking?.mode ?? "auto"),
|
|
2044
2064
|
[messages, thinking?.mode]
|
|
2045
2065
|
);
|
|
2046
|
-
const userMessageItems =
|
|
2066
|
+
const userMessageItems = React13.useMemo(
|
|
2047
2067
|
() => displayedMessages.flatMap((message, chatIndex) => {
|
|
2048
2068
|
if (message.role !== "user") return [];
|
|
2049
2069
|
const text = message.content.filter((block) => block.type === "text" && block.text).map((block) => block.text).join(" ").trim();
|
|
@@ -2052,7 +2072,7 @@ function OzwellChat({
|
|
|
2052
2072
|
[displayedMessages]
|
|
2053
2073
|
);
|
|
2054
2074
|
const showMessagesNav = userMessageItems.length >= 3;
|
|
2055
|
-
const chatMessages =
|
|
2075
|
+
const chatMessages = React13.useMemo(
|
|
2056
2076
|
() => queuedMessage ? [
|
|
2057
2077
|
...displayedMessages,
|
|
2058
2078
|
{
|
|
@@ -2069,13 +2089,13 @@ function OzwellChat({
|
|
|
2069
2089
|
(option) => option.value === thinking?.mode
|
|
2070
2090
|
);
|
|
2071
2091
|
const showModelSelector = Boolean(models?.value && models.options.length > 1);
|
|
2072
|
-
|
|
2092
|
+
React13.useEffect(() => {
|
|
2073
2093
|
if (!queuedMessage) setIsEditingQueuedMessage(false);
|
|
2074
2094
|
}, [queuedMessage]);
|
|
2075
|
-
|
|
2095
|
+
React13.useEffect(() => {
|
|
2076
2096
|
if (isEditingQueuedMessage) queuedMessageEditorRef.current?.focus();
|
|
2077
2097
|
}, [isEditingQueuedMessage]);
|
|
2078
|
-
|
|
2098
|
+
React13.useEffect(() => {
|
|
2079
2099
|
if (!showMessagesNav || hasFlaredRef.current) return;
|
|
2080
2100
|
hasFlaredRef.current = true;
|
|
2081
2101
|
setMessagesButtonFlare(true);
|
|
@@ -2351,8 +2371,8 @@ function OzwellLogo({
|
|
|
2351
2371
|
style,
|
|
2352
2372
|
className
|
|
2353
2373
|
}) {
|
|
2354
|
-
const [failed, setFailed] =
|
|
2355
|
-
|
|
2374
|
+
const [failed, setFailed] = React13.useState(false);
|
|
2375
|
+
React13.useEffect(() => setFailed(false), [src]);
|
|
2356
2376
|
if (failed) {
|
|
2357
2377
|
return /* @__PURE__ */ jsx(
|
|
2358
2378
|
"span",
|
|
@@ -2409,9 +2429,9 @@ function HeyOzwellToggle({
|
|
|
2409
2429
|
const octoScale = 1 + Math.min(0.28, lv * 2.2);
|
|
2410
2430
|
const glowOpacity = active ? 0.4 + Math.min(0.55, lv * 4) : 0;
|
|
2411
2431
|
const glowScale = 1 + Math.min(0.7, lv * 3);
|
|
2412
|
-
const [doneFlash, setDoneFlash] =
|
|
2413
|
-
const wasLoading =
|
|
2414
|
-
|
|
2432
|
+
const [doneFlash, setDoneFlash] = React13.useState(false);
|
|
2433
|
+
const wasLoading = React13.useRef(loading);
|
|
2434
|
+
React13.useEffect(() => {
|
|
2415
2435
|
if (wasLoading.current && !loading) {
|
|
2416
2436
|
setDoneFlash(true);
|
|
2417
2437
|
const t = window.setTimeout(() => setDoneFlash(false), 700);
|
|
@@ -2420,9 +2440,9 @@ function HeyOzwellToggle({
|
|
|
2420
2440
|
}
|
|
2421
2441
|
wasLoading.current = loading;
|
|
2422
2442
|
}, [loading]);
|
|
2423
|
-
const [warmFade, setWarmFade] =
|
|
2424
|
-
const wasWarm =
|
|
2425
|
-
|
|
2443
|
+
const [warmFade, setWarmFade] = React13.useState(false);
|
|
2444
|
+
const wasWarm = React13.useRef(warmActive);
|
|
2445
|
+
React13.useEffect(() => {
|
|
2426
2446
|
if (wasWarm.current && !warmActive) {
|
|
2427
2447
|
setWarmFade(true);
|
|
2428
2448
|
const t = window.setTimeout(() => setWarmFade(false), 500);
|
|
@@ -2437,8 +2457,8 @@ function HeyOzwellToggle({
|
|
|
2437
2457
|
const ringC = 2 * Math.PI * ringR;
|
|
2438
2458
|
const hasProgress = typeof loadProgress === "number";
|
|
2439
2459
|
const p = hasProgress ? Math.max(0, Math.min(1, loadProgress)) : 0;
|
|
2440
|
-
const [synthP, setSynthP] =
|
|
2441
|
-
|
|
2460
|
+
const [synthP, setSynthP] = React13.useState(0);
|
|
2461
|
+
React13.useEffect(() => {
|
|
2442
2462
|
if (!(loading && !hasProgress)) {
|
|
2443
2463
|
setSynthP(0);
|
|
2444
2464
|
return;
|
|
@@ -2456,9 +2476,9 @@ function HeyOzwellToggle({
|
|
|
2456
2476
|
const warmR = (warmBox - warmStroke) / 2;
|
|
2457
2477
|
const warmC = 2 * Math.PI * warmR;
|
|
2458
2478
|
const wp = typeof warmProgress === "number" ? Math.max(0, Math.min(1, warmProgress)) : 0;
|
|
2459
|
-
const pressTimer =
|
|
2460
|
-
const longFiredRef =
|
|
2461
|
-
|
|
2479
|
+
const pressTimer = React13.useRef(void 0);
|
|
2480
|
+
const longFiredRef = React13.useRef(false);
|
|
2481
|
+
React13.useEffect(
|
|
2462
2482
|
() => () => {
|
|
2463
2483
|
if (pressTimer.current) window.clearTimeout(pressTimer.current);
|
|
2464
2484
|
},
|
|
@@ -2787,18 +2807,18 @@ function OzwellSettingsMenu({
|
|
|
2787
2807
|
modelStatus,
|
|
2788
2808
|
onManageVoices
|
|
2789
2809
|
}) {
|
|
2790
|
-
const [modelsOpen, setModelsOpen] =
|
|
2791
|
-
const modelsRegionId =
|
|
2792
|
-
const scrollRef =
|
|
2793
|
-
const [hasMore, setHasMore] =
|
|
2794
|
-
const updateHasMore =
|
|
2810
|
+
const [modelsOpen, setModelsOpen] = React13.useState(false);
|
|
2811
|
+
const modelsRegionId = React13.useId();
|
|
2812
|
+
const scrollRef = React13.useRef(null);
|
|
2813
|
+
const [hasMore, setHasMore] = React13.useState(false);
|
|
2814
|
+
const updateHasMore = React13.useCallback(() => {
|
|
2795
2815
|
const el = scrollRef.current;
|
|
2796
2816
|
if (el) setHasMore(el.scrollTop + el.clientHeight < el.scrollHeight - 4);
|
|
2797
2817
|
}, []);
|
|
2798
|
-
|
|
2818
|
+
React13.useEffect(() => {
|
|
2799
2819
|
updateHasMore();
|
|
2800
2820
|
}, [modelsOpen, open, modelStatus, updateHasMore]);
|
|
2801
|
-
|
|
2821
|
+
React13.useEffect(() => {
|
|
2802
2822
|
if (!open) setModelsOpen(false);
|
|
2803
2823
|
}, [open]);
|
|
2804
2824
|
const act = (fn) => () => {
|
|
@@ -3008,19 +3028,19 @@ function useWakeWord(opts = {}) {
|
|
|
3008
3028
|
assetBase,
|
|
3009
3029
|
registerServiceWorker = true
|
|
3010
3030
|
} = opts;
|
|
3011
|
-
const [state, setState] =
|
|
3031
|
+
const [state, setState] = React13.useState({
|
|
3012
3032
|
ready: false,
|
|
3013
3033
|
error: null,
|
|
3014
3034
|
speech: 0,
|
|
3015
3035
|
probs: {}
|
|
3016
3036
|
});
|
|
3017
|
-
const onWakeRef =
|
|
3037
|
+
const onWakeRef = React13.useRef(onWake);
|
|
3018
3038
|
onWakeRef.current = onWake;
|
|
3019
|
-
const onUtteranceRef =
|
|
3039
|
+
const onUtteranceRef = React13.useRef(onUtterance);
|
|
3020
3040
|
onUtteranceRef.current = onUtterance;
|
|
3021
|
-
const lastFiredRef =
|
|
3022
|
-
const hbRef =
|
|
3023
|
-
|
|
3041
|
+
const lastFiredRef = React13.useRef(null);
|
|
3042
|
+
const hbRef = React13.useRef(null);
|
|
3043
|
+
React13.useEffect(() => {
|
|
3024
3044
|
if (!enabled) {
|
|
3025
3045
|
setState(
|
|
3026
3046
|
(s) => s.ready || s.error || s.speech ? { ready: false, error: null, speech: 0, probs: {} } : s
|
|
@@ -3132,7 +3152,7 @@ function useWakeWord(opts = {}) {
|
|
|
3132
3152
|
}
|
|
3133
3153
|
};
|
|
3134
3154
|
}, [enabled, assetBase]);
|
|
3135
|
-
|
|
3155
|
+
React13.useEffect(() => {
|
|
3136
3156
|
const hb = hbRef.current;
|
|
3137
3157
|
if (!hb) return;
|
|
3138
3158
|
if (thresholds) hb.wakeWordThresholds = { ...thresholds };
|
|
@@ -3853,10 +3873,10 @@ function endsWithDone(text) {
|
|
|
3853
3873
|
}
|
|
3854
3874
|
function useSpeakerVerify(opts = {}) {
|
|
3855
3875
|
const { enabled = true } = opts;
|
|
3856
|
-
const [ready, setReady] =
|
|
3857
|
-
const [error, setError] =
|
|
3858
|
-
const svRef =
|
|
3859
|
-
|
|
3876
|
+
const [ready, setReady] = React13.useState(false);
|
|
3877
|
+
const [error, setError] = React13.useState(null);
|
|
3878
|
+
const svRef = React13.useRef(null);
|
|
3879
|
+
React13.useEffect(() => {
|
|
3860
3880
|
if (!enabled) return;
|
|
3861
3881
|
let cancelled = false;
|
|
3862
3882
|
(async () => {
|
|
@@ -4076,15 +4096,15 @@ function useDiarization(options = {}) {
|
|
|
4076
4096
|
minSegmentSeconds = 1
|
|
4077
4097
|
} = options;
|
|
4078
4098
|
const sv = useSpeakerVerify({ enabled });
|
|
4079
|
-
const svRef =
|
|
4099
|
+
const svRef = React13.useRef(sv);
|
|
4080
4100
|
svRef.current = sv;
|
|
4081
|
-
const [busy, setBusy] =
|
|
4082
|
-
const [error, setError] =
|
|
4083
|
-
const [result, setResult] =
|
|
4084
|
-
|
|
4101
|
+
const [busy, setBusy] = React13.useState(false);
|
|
4102
|
+
const [error, setError] = React13.useState(null);
|
|
4103
|
+
const [result, setResult] = React13.useState(null);
|
|
4104
|
+
React13.useEffect(() => {
|
|
4085
4105
|
if (enabled) warmWhisper();
|
|
4086
4106
|
}, [enabled]);
|
|
4087
|
-
const diarize =
|
|
4107
|
+
const diarize = React13.useCallback(
|
|
4088
4108
|
async (blob) => {
|
|
4089
4109
|
setBusy(true);
|
|
4090
4110
|
setError(null);
|
|
@@ -4432,11 +4452,11 @@ function stopTrimLeadIn() {
|
|
|
4432
4452
|
return typeof v === "number" ? v : 0.35;
|
|
4433
4453
|
}
|
|
4434
4454
|
function useRoomLevel(getStream, ready) {
|
|
4435
|
-
const [level, setLevel] =
|
|
4436
|
-
const [listening, setListening] =
|
|
4437
|
-
const getStreamRef =
|
|
4455
|
+
const [level, setLevel] = React13.useState(0);
|
|
4456
|
+
const [listening, setListening] = React13.useState(false);
|
|
4457
|
+
const getStreamRef = React13.useRef(getStream);
|
|
4438
4458
|
getStreamRef.current = getStream;
|
|
4439
|
-
|
|
4459
|
+
React13.useEffect(() => {
|
|
4440
4460
|
if (!ready) {
|
|
4441
4461
|
setLevel(0);
|
|
4442
4462
|
setListening(false);
|
|
@@ -4501,20 +4521,20 @@ function useHeyOzwell(options = {}) {
|
|
|
4501
4521
|
reviewBeforeSend = false,
|
|
4502
4522
|
diarizationOptions
|
|
4503
4523
|
} = options;
|
|
4504
|
-
const [active, setActive] =
|
|
4505
|
-
const [chatOpen, setChatOpen] =
|
|
4506
|
-
const [settingsOpen, setSettingsOpen] =
|
|
4507
|
-
const [messages, setMessages] =
|
|
4508
|
-
const [generating, setGenerating] =
|
|
4509
|
-
const [phase, setPhase] =
|
|
4510
|
-
const [typed, setTyped] =
|
|
4511
|
-
const dictLoad =
|
|
4524
|
+
const [active, setActive] = React13.useState(autoStart);
|
|
4525
|
+
const [chatOpen, setChatOpen] = React13.useState(false);
|
|
4526
|
+
const [settingsOpen, setSettingsOpen] = React13.useState(false);
|
|
4527
|
+
const [messages, setMessages] = React13.useState([]);
|
|
4528
|
+
const [generating, setGenerating] = React13.useState(false);
|
|
4529
|
+
const [phase, setPhase] = React13.useState("listening");
|
|
4530
|
+
const [typed, setTyped] = React13.useState("");
|
|
4531
|
+
const dictLoad = React13.useSyncExternalStore(
|
|
4512
4532
|
subscribeDictationLoad,
|
|
4513
4533
|
getDictationLoad
|
|
4514
4534
|
);
|
|
4515
|
-
const wakeWarm2 =
|
|
4516
|
-
const counterRef =
|
|
4517
|
-
const mkMsg =
|
|
4535
|
+
const wakeWarm2 = React13.useSyncExternalStore(subscribeWakeWarm, getWakeWarm);
|
|
4536
|
+
const counterRef = React13.useRef(0);
|
|
4537
|
+
const mkMsg = React13.useCallback(
|
|
4518
4538
|
(role, text) => ({
|
|
4519
4539
|
id: `${role}-${++counterRef.current}`,
|
|
4520
4540
|
role,
|
|
@@ -4524,20 +4544,20 @@ function useHeyOzwell(options = {}) {
|
|
|
4524
4544
|
}),
|
|
4525
4545
|
[]
|
|
4526
4546
|
);
|
|
4527
|
-
const messagesRef =
|
|
4547
|
+
const messagesRef = React13.useRef(messages);
|
|
4528
4548
|
messagesRef.current = messages;
|
|
4529
|
-
const phaseRef =
|
|
4549
|
+
const phaseRef = React13.useRef(phase);
|
|
4530
4550
|
phaseRef.current = phase;
|
|
4531
|
-
const recRef =
|
|
4532
|
-
const chunksRef =
|
|
4533
|
-
const streamAbortRef =
|
|
4534
|
-
const [liveText, setLiveText] =
|
|
4535
|
-
const liveRecRef =
|
|
4536
|
-
const liveTimerRef =
|
|
4537
|
-
const liveCommittedRef =
|
|
4538
|
-
const liveCursorRef =
|
|
4539
|
-
const liveBusyRef =
|
|
4540
|
-
const stopLive =
|
|
4551
|
+
const recRef = React13.useRef(null);
|
|
4552
|
+
const chunksRef = React13.useRef([]);
|
|
4553
|
+
const streamAbortRef = React13.useRef(null);
|
|
4554
|
+
const [liveText, setLiveText] = React13.useState("");
|
|
4555
|
+
const liveRecRef = React13.useRef(null);
|
|
4556
|
+
const liveTimerRef = React13.useRef(null);
|
|
4557
|
+
const liveCommittedRef = React13.useRef("");
|
|
4558
|
+
const liveCursorRef = React13.useRef(0);
|
|
4559
|
+
const liveBusyRef = React13.useRef(false);
|
|
4560
|
+
const stopLive = React13.useCallback(() => {
|
|
4541
4561
|
if (liveTimerRef.current) window.clearInterval(liveTimerRef.current);
|
|
4542
4562
|
liveTimerRef.current = null;
|
|
4543
4563
|
liveRecRef.current?.close();
|
|
@@ -4547,18 +4567,18 @@ function useHeyOzwell(options = {}) {
|
|
|
4547
4567
|
liveBusyRef.current = false;
|
|
4548
4568
|
setLiveText("");
|
|
4549
4569
|
}, []);
|
|
4550
|
-
const wakeRef =
|
|
4570
|
+
const wakeRef = React13.useRef(null);
|
|
4551
4571
|
const sv = useSpeakerVerify({ enabled: requireDoctor });
|
|
4552
|
-
const svRef =
|
|
4572
|
+
const svRef = React13.useRef(sv);
|
|
4553
4573
|
svRef.current = sv;
|
|
4554
|
-
const rollRef =
|
|
4574
|
+
const rollRef = React13.useRef(null);
|
|
4555
4575
|
const diar = useDiarization({
|
|
4556
4576
|
...diarizationOptions,
|
|
4557
4577
|
enabled: conversationMode
|
|
4558
4578
|
});
|
|
4559
|
-
const diarRef =
|
|
4579
|
+
const diarRef = React13.useRef(diar);
|
|
4560
4580
|
diarRef.current = diar;
|
|
4561
|
-
const verified =
|
|
4581
|
+
const verified = React13.useCallback(
|
|
4562
4582
|
(name) => {
|
|
4563
4583
|
if (!requireDoctor) return true;
|
|
4564
4584
|
const svh = svRef.current;
|
|
@@ -4580,9 +4600,9 @@ function useHeyOzwell(options = {}) {
|
|
|
4580
4600
|
},
|
|
4581
4601
|
[requireDoctor]
|
|
4582
4602
|
);
|
|
4583
|
-
const onSendRef =
|
|
4603
|
+
const onSendRef = React13.useRef(onSend);
|
|
4584
4604
|
onSendRef.current = onSend;
|
|
4585
|
-
const send =
|
|
4605
|
+
const send = React13.useCallback(
|
|
4586
4606
|
(text) => {
|
|
4587
4607
|
const t = text.trim();
|
|
4588
4608
|
if (!t) return;
|
|
@@ -4640,7 +4660,7 @@ function useHeyOzwell(options = {}) {
|
|
|
4640
4660
|
},
|
|
4641
4661
|
[mkMsg]
|
|
4642
4662
|
);
|
|
4643
|
-
const startDictation =
|
|
4663
|
+
const startDictation = React13.useCallback(() => {
|
|
4644
4664
|
const stream = wakeRef.current?.getStream();
|
|
4645
4665
|
if (!stream) return;
|
|
4646
4666
|
chunksRef.current = [];
|
|
@@ -4686,7 +4706,7 @@ function useHeyOzwell(options = {}) {
|
|
|
4686
4706
|
}, 800);
|
|
4687
4707
|
}
|
|
4688
4708
|
}, [liveTranscript, transcription]);
|
|
4689
|
-
const stopDictation =
|
|
4709
|
+
const stopDictation = React13.useCallback(
|
|
4690
4710
|
(viaPhrase = false) => {
|
|
4691
4711
|
const rec = recRef.current;
|
|
4692
4712
|
if (!rec) return;
|
|
@@ -4762,7 +4782,7 @@ function useHeyOzwell(options = {}) {
|
|
|
4762
4782
|
});
|
|
4763
4783
|
wakeRef.current = wake;
|
|
4764
4784
|
const { level, listening } = useRoomLevel(wake.getStream, wake.ready);
|
|
4765
|
-
|
|
4785
|
+
React13.useEffect(() => {
|
|
4766
4786
|
if (!requireDoctor || !active || !wake.ready) return;
|
|
4767
4787
|
let cancelled = false;
|
|
4768
4788
|
let tries = 0;
|
|
@@ -4783,11 +4803,11 @@ function useHeyOzwell(options = {}) {
|
|
|
4783
4803
|
rollRef.current = null;
|
|
4784
4804
|
};
|
|
4785
4805
|
}, [requireDoctor, active, wake.ready]);
|
|
4786
|
-
const hasListenedRef =
|
|
4787
|
-
|
|
4806
|
+
const hasListenedRef = React13.useRef(false);
|
|
4807
|
+
React13.useEffect(() => {
|
|
4788
4808
|
if (listening) hasListenedRef.current = true;
|
|
4789
4809
|
}, [listening]);
|
|
4790
|
-
|
|
4810
|
+
React13.useEffect(() => {
|
|
4791
4811
|
if (!active) hasListenedRef.current = false;
|
|
4792
4812
|
}, [active]);
|
|
4793
4813
|
const coldStarting = active && !listening && !hasListenedRef.current;
|
|
@@ -4801,13 +4821,13 @@ function useHeyOzwell(options = {}) {
|
|
|
4801
4821
|
wake: wakeWarm2.done || wake.ready ? "ready" : ozLoading ? "loading" : "idle",
|
|
4802
4822
|
transcription: dictLoad.done ? "ready" : dictLoad.active ? "loading" : "idle"
|
|
4803
4823
|
};
|
|
4804
|
-
|
|
4824
|
+
React13.useEffect(() => {
|
|
4805
4825
|
void warmWakeModels(assetBase);
|
|
4806
4826
|
}, [assetBase]);
|
|
4807
|
-
|
|
4827
|
+
React13.useEffect(() => {
|
|
4808
4828
|
if (active) warmWhisper();
|
|
4809
4829
|
}, [active]);
|
|
4810
|
-
const toggle =
|
|
4830
|
+
const toggle = React13.useCallback(
|
|
4811
4831
|
(next) => {
|
|
4812
4832
|
setActive(next);
|
|
4813
4833
|
if (!next) {
|
|
@@ -5002,7 +5022,7 @@ function FloatingAIChat({
|
|
|
5002
5022
|
pulse = false,
|
|
5003
5023
|
...chatProps
|
|
5004
5024
|
}) {
|
|
5005
|
-
const [internalOpen, setInternalOpen] =
|
|
5025
|
+
const [internalOpen, setInternalOpen] = React13.useState(defaultOpen);
|
|
5006
5026
|
const isControlled = controlledOpen !== void 0;
|
|
5007
5027
|
const isOpen = isControlled ? controlledOpen : internalOpen;
|
|
5008
5028
|
const handleOpenChange = (open) => {
|
|
@@ -5075,36 +5095,36 @@ var TIMEOUT_MS = 5e3;
|
|
|
5075
5095
|
var delay = (ms) => new Promise((r) => setTimeout(r, ms));
|
|
5076
5096
|
function useVoiceSetup(options = {}) {
|
|
5077
5097
|
const { startAdding = false, voiceId, label } = options;
|
|
5078
|
-
const [enrollVoiceId] =
|
|
5098
|
+
const [enrollVoiceId] = React13.useState(
|
|
5079
5099
|
() => voiceId || (startAdding ? `voice-${Date.now()}-${Math.floor(Math.random() * 1e4)}` : "you")
|
|
5080
5100
|
);
|
|
5081
5101
|
const sv = useSpeakerVerify();
|
|
5082
|
-
const expectRef =
|
|
5083
|
-
const resolveRef =
|
|
5084
|
-
const whatRef =
|
|
5085
|
-
const recRef =
|
|
5086
|
-
const abortRef =
|
|
5087
|
-
const [level, setLevel] =
|
|
5102
|
+
const expectRef = React13.useRef(null);
|
|
5103
|
+
const resolveRef = React13.useRef(null);
|
|
5104
|
+
const whatRef = React13.useRef({});
|
|
5105
|
+
const recRef = React13.useRef(null);
|
|
5106
|
+
const abortRef = React13.useRef(false);
|
|
5107
|
+
const [level, setLevel] = React13.useState(0);
|
|
5088
5108
|
const wake = useWakeWord({
|
|
5089
5109
|
onWake: (name) => {
|
|
5090
5110
|
if (expectRef.current && resolveRef.current) resolveRef.current(name);
|
|
5091
5111
|
}
|
|
5092
5112
|
});
|
|
5093
|
-
const wakeRef =
|
|
5113
|
+
const wakeRef = React13.useRef(wake);
|
|
5094
5114
|
wakeRef.current = wake;
|
|
5095
5115
|
const bothReady = sv.ready && wake.ready;
|
|
5096
|
-
const [phase, setPhase] =
|
|
5097
|
-
const [phrase, setPhrase] =
|
|
5098
|
-
const [step, setStep] =
|
|
5099
|
-
const [adding, setAdding] =
|
|
5116
|
+
const [phase, setPhase] = React13.useState("intro");
|
|
5117
|
+
const [phrase, setPhrase] = React13.useState("hey ozwell");
|
|
5118
|
+
const [step, setStep] = React13.useState(0);
|
|
5119
|
+
const [adding, setAdding] = React13.useState(startAdding);
|
|
5100
5120
|
const total = PHRASES2.length * REPS;
|
|
5101
|
-
|
|
5121
|
+
React13.useEffect(() => {
|
|
5102
5122
|
warmWhisper();
|
|
5103
5123
|
void loadWhatPrints().then((w) => {
|
|
5104
5124
|
whatRef.current = w;
|
|
5105
5125
|
});
|
|
5106
5126
|
}, []);
|
|
5107
|
-
|
|
5127
|
+
React13.useEffect(() => {
|
|
5108
5128
|
if (!wake.ready) {
|
|
5109
5129
|
setLevel(0);
|
|
5110
5130
|
return;
|
|
@@ -5171,7 +5191,7 @@ function useVoiceSetup(options = {}) {
|
|
|
5171
5191
|
};
|
|
5172
5192
|
});
|
|
5173
5193
|
};
|
|
5174
|
-
const start =
|
|
5194
|
+
const start = React13.useCallback(async () => {
|
|
5175
5195
|
if (!bothReady || phase !== "intro") return;
|
|
5176
5196
|
for (let i = 0; i < 20 && !recRef.current; i++) await delay(50);
|
|
5177
5197
|
if (!recRef.current) return;
|
|
@@ -5219,11 +5239,11 @@ function useVoiceSetup(options = {}) {
|
|
|
5219
5239
|
setAdding(false);
|
|
5220
5240
|
setPhase("done");
|
|
5221
5241
|
}, [bothReady, phase, adding, sv, enrollVoiceId, label]);
|
|
5222
|
-
const addAnotherSpot =
|
|
5242
|
+
const addAnotherSpot = React13.useCallback(() => {
|
|
5223
5243
|
setAdding(true);
|
|
5224
5244
|
setPhase("intro");
|
|
5225
5245
|
}, []);
|
|
5226
|
-
const cancel =
|
|
5246
|
+
const cancel = React13.useCallback(() => {
|
|
5227
5247
|
abortRef.current = true;
|
|
5228
5248
|
resolveRef.current?.("__cancelled__");
|
|
5229
5249
|
setPhase("intro");
|
|
@@ -5471,12 +5491,12 @@ var ozBtn2 = "bg-ozwell hover:bg-ozwell active:bg-ozwell text-ozwell-foreground
|
|
|
5471
5491
|
var dangerOutline = "border-destructive text-destructive hover:bg-destructive/10 hover:text-destructive";
|
|
5472
5492
|
function VoiceManager({ logoSrc }) {
|
|
5473
5493
|
const sv = useSpeakerVerify();
|
|
5474
|
-
const [inSetup, setInSetup] =
|
|
5475
|
-
const [, setTick] =
|
|
5476
|
-
const [addName, setAddName] =
|
|
5477
|
-
const [editingId, setEditingId] =
|
|
5478
|
-
const [editLabel, setEditLabel] =
|
|
5479
|
-
const [confirm, setConfirm] =
|
|
5494
|
+
const [inSetup, setInSetup] = React13.useState(null);
|
|
5495
|
+
const [, setTick] = React13.useState(0);
|
|
5496
|
+
const [addName, setAddName] = React13.useState("");
|
|
5497
|
+
const [editingId, setEditingId] = React13.useState(null);
|
|
5498
|
+
const [editLabel, setEditLabel] = React13.useState("");
|
|
5499
|
+
const [confirm, setConfirm] = React13.useState(null);
|
|
5480
5500
|
const voices = sv.ready ? sv.listVoices() : [];
|
|
5481
5501
|
if (inSetup) {
|
|
5482
5502
|
return /* @__PURE__ */ jsx(
|
|
@@ -5685,7 +5705,7 @@ function HandsFreeChat({
|
|
|
5685
5705
|
reviewBeforeSend
|
|
5686
5706
|
});
|
|
5687
5707
|
const { phase, ready, error } = oz;
|
|
5688
|
-
const [voicesOpen, setVoicesOpen] =
|
|
5708
|
+
const [voicesOpen, setVoicesOpen] = React13.useState(false);
|
|
5689
5709
|
const placeholder = !oz.active ? "Ozwell is off \u2014 tap the octopus to listen" : phase === "listening" ? ready ? "Say \u201Chey ozwell\u201D, or type\u2026" : error ? `\u26A0\uFE0F ${error}` : "\u2026 loading models" : oz.chatProps.inputPlaceholder;
|
|
5690
5710
|
return /* @__PURE__ */ jsxs("div", { style: { height: "100vh", display: "flex", flexDirection: "column" }, children: [
|
|
5691
5711
|
/* @__PURE__ */ jsxs("div", { style: { flex: 1, minHeight: 0, position: "relative" }, children: [
|
|
@@ -5761,30 +5781,30 @@ var LIVE_CHUNK_SECONDS = 7;
|
|
|
5761
5781
|
function useVisitScribe(options = {}) {
|
|
5762
5782
|
const { liveTranscript = false, ...diarOptions } = options;
|
|
5763
5783
|
const diar = useDiarization(diarOptions);
|
|
5764
|
-
const diarRef =
|
|
5784
|
+
const diarRef = React13.useRef(diar);
|
|
5765
5785
|
diarRef.current = diar;
|
|
5766
|
-
const liveOnRef =
|
|
5786
|
+
const liveOnRef = React13.useRef(liveTranscript);
|
|
5767
5787
|
liveOnRef.current = liveTranscript;
|
|
5768
|
-
const [recording, setRecording] =
|
|
5769
|
-
const [elapsedMs, setElapsedMs] =
|
|
5770
|
-
const [liveText, setLiveText] =
|
|
5771
|
-
const [startError, setStartError] =
|
|
5772
|
-
const recRef =
|
|
5773
|
-
const streamRef =
|
|
5774
|
-
const chunksRef =
|
|
5775
|
-
const startedAtRef =
|
|
5776
|
-
const timerRef =
|
|
5777
|
-
const lastBlobRef =
|
|
5778
|
-
const [canReanalyze, setCanReanalyze] =
|
|
5779
|
-
const liveRecRef =
|
|
5780
|
-
const liveTimerRef =
|
|
5781
|
-
const liveCursorRef =
|
|
5782
|
-
const liveBusyRef =
|
|
5783
|
-
const clearTimer =
|
|
5788
|
+
const [recording, setRecording] = React13.useState(false);
|
|
5789
|
+
const [elapsedMs, setElapsedMs] = React13.useState(0);
|
|
5790
|
+
const [liveText, setLiveText] = React13.useState("");
|
|
5791
|
+
const [startError, setStartError] = React13.useState(null);
|
|
5792
|
+
const recRef = React13.useRef(null);
|
|
5793
|
+
const streamRef = React13.useRef(null);
|
|
5794
|
+
const chunksRef = React13.useRef([]);
|
|
5795
|
+
const startedAtRef = React13.useRef(0);
|
|
5796
|
+
const timerRef = React13.useRef(null);
|
|
5797
|
+
const lastBlobRef = React13.useRef(null);
|
|
5798
|
+
const [canReanalyze, setCanReanalyze] = React13.useState(false);
|
|
5799
|
+
const liveRecRef = React13.useRef(null);
|
|
5800
|
+
const liveTimerRef = React13.useRef(null);
|
|
5801
|
+
const liveCursorRef = React13.useRef(0);
|
|
5802
|
+
const liveBusyRef = React13.useRef(false);
|
|
5803
|
+
const clearTimer = React13.useCallback(() => {
|
|
5784
5804
|
if (timerRef.current) window.clearInterval(timerRef.current);
|
|
5785
5805
|
timerRef.current = null;
|
|
5786
5806
|
}, []);
|
|
5787
|
-
const stopLive =
|
|
5807
|
+
const stopLive = React13.useCallback(() => {
|
|
5788
5808
|
if (liveTimerRef.current) window.clearInterval(liveTimerRef.current);
|
|
5789
5809
|
liveTimerRef.current = null;
|
|
5790
5810
|
liveRecRef.current?.close();
|
|
@@ -5792,8 +5812,8 @@ function useVisitScribe(options = {}) {
|
|
|
5792
5812
|
liveCursorRef.current = 0;
|
|
5793
5813
|
liveBusyRef.current = false;
|
|
5794
5814
|
}, []);
|
|
5795
|
-
const startingRef =
|
|
5796
|
-
const start =
|
|
5815
|
+
const startingRef = React13.useRef(false);
|
|
5816
|
+
const start = React13.useCallback(async () => {
|
|
5797
5817
|
if (startingRef.current || recRef.current) return;
|
|
5798
5818
|
startingRef.current = true;
|
|
5799
5819
|
setStartError(null);
|
|
@@ -5886,7 +5906,7 @@ function useVisitScribe(options = {}) {
|
|
|
5886
5906
|
setRecording(true);
|
|
5887
5907
|
startingRef.current = false;
|
|
5888
5908
|
}, [clearTimer]);
|
|
5889
|
-
const stop =
|
|
5909
|
+
const stop = React13.useCallback(() => {
|
|
5890
5910
|
clearTimer();
|
|
5891
5911
|
stopLive();
|
|
5892
5912
|
setRecording(false);
|
|
@@ -5898,19 +5918,19 @@ function useVisitScribe(options = {}) {
|
|
|
5898
5918
|
streamRef.current?.getTracks().forEach((t) => t.stop());
|
|
5899
5919
|
streamRef.current = null;
|
|
5900
5920
|
}, [clearTimer, stopLive]);
|
|
5901
|
-
const reanalyze =
|
|
5921
|
+
const reanalyze = React13.useCallback(() => {
|
|
5902
5922
|
const blob = lastBlobRef.current;
|
|
5903
5923
|
if (blob) void diarRef.current.diarize(blob).catch(() => {
|
|
5904
5924
|
});
|
|
5905
5925
|
}, []);
|
|
5906
|
-
const reset =
|
|
5926
|
+
const reset = React13.useCallback(() => {
|
|
5907
5927
|
setElapsedMs(0);
|
|
5908
5928
|
setLiveText("");
|
|
5909
5929
|
setStartError(null);
|
|
5910
5930
|
lastBlobRef.current = null;
|
|
5911
5931
|
setCanReanalyze(false);
|
|
5912
5932
|
}, []);
|
|
5913
|
-
|
|
5933
|
+
React13.useEffect(() => {
|
|
5914
5934
|
return () => {
|
|
5915
5935
|
clearTimer();
|
|
5916
5936
|
stopLive();
|
|
@@ -5992,13 +6012,13 @@ function VisitScribe({
|
|
|
5992
6012
|
diarizationOptions,
|
|
5993
6013
|
className
|
|
5994
6014
|
}) {
|
|
5995
|
-
const [inferRoles, setInferRoles] =
|
|
5996
|
-
const [live, setLive] =
|
|
5997
|
-
const [showAdvanced, setShowAdvanced] =
|
|
5998
|
-
const [threshold, setThreshold] =
|
|
6015
|
+
const [inferRoles, setInferRoles] = React13.useState(inferRolesProp);
|
|
6016
|
+
const [live, setLive] = React13.useState(liveTranscriptProp);
|
|
6017
|
+
const [showAdvanced, setShowAdvanced] = React13.useState(false);
|
|
6018
|
+
const [threshold, setThreshold] = React13.useState(
|
|
5999
6019
|
diarizationOptions?.threshold ?? 0.65
|
|
6000
6020
|
);
|
|
6001
|
-
const [maxSpeakers, setMaxSpeakers] =
|
|
6021
|
+
const [maxSpeakers, setMaxSpeakers] = React13.useState(
|
|
6002
6022
|
diarizationOptions?.maxSpeakers
|
|
6003
6023
|
);
|
|
6004
6024
|
const scribe = useVisitScribe({
|
|
@@ -6018,43 +6038,43 @@ function VisitScribe({
|
|
|
6018
6038
|
elapsedMs,
|
|
6019
6039
|
canReanalyze
|
|
6020
6040
|
} = scribe;
|
|
6021
|
-
const [labels, setLabels] =
|
|
6022
|
-
const [turnSpeaker, setTurnSpeaker] =
|
|
6041
|
+
const [labels, setLabels] = React13.useState({});
|
|
6042
|
+
const [turnSpeaker, setTurnSpeaker] = React13.useState(
|
|
6023
6043
|
{}
|
|
6024
6044
|
);
|
|
6025
|
-
const [editing, setEditing] =
|
|
6026
|
-
|
|
6045
|
+
const [editing, setEditing] = React13.useState(false);
|
|
6046
|
+
React13.useEffect(() => {
|
|
6027
6047
|
setLabels({});
|
|
6028
6048
|
setTurnSpeaker({});
|
|
6029
6049
|
setEditing(false);
|
|
6030
6050
|
}, [result]);
|
|
6031
|
-
const effective =
|
|
6051
|
+
const effective = React13.useCallback(
|
|
6032
6052
|
(sp) => labels[sp]?.trim() || sp,
|
|
6033
6053
|
[labels]
|
|
6034
6054
|
);
|
|
6035
|
-
const speakers =
|
|
6055
|
+
const speakers = React13.useMemo(() => {
|
|
6036
6056
|
const seen = [];
|
|
6037
6057
|
result?.forEach((t) => {
|
|
6038
6058
|
if (!seen.includes(t.speaker)) seen.push(t.speaker);
|
|
6039
6059
|
});
|
|
6040
6060
|
return seen;
|
|
6041
6061
|
}, [result]);
|
|
6042
|
-
const origOf =
|
|
6062
|
+
const origOf = React13.useCallback(
|
|
6043
6063
|
(i) => turnSpeaker[i] ?? result?.[i]?.speaker ?? "",
|
|
6044
6064
|
[turnSpeaker, result]
|
|
6045
6065
|
);
|
|
6046
|
-
const resolved =
|
|
6066
|
+
const resolved = React13.useMemo(
|
|
6047
6067
|
() => (result ?? []).map((t, i) => effective(turnSpeaker[i] ?? t.speaker)),
|
|
6048
6068
|
[result, turnSpeaker, effective]
|
|
6049
6069
|
);
|
|
6050
|
-
const distinctLabels =
|
|
6070
|
+
const distinctLabels = React13.useMemo(() => {
|
|
6051
6071
|
const seen = [];
|
|
6052
6072
|
resolved.forEach((l) => {
|
|
6053
6073
|
if (!seen.includes(l)) seen.push(l);
|
|
6054
6074
|
});
|
|
6055
6075
|
return seen;
|
|
6056
6076
|
}, [resolved]);
|
|
6057
|
-
const colorByLabel =
|
|
6077
|
+
const colorByLabel = React13.useMemo(() => {
|
|
6058
6078
|
const m = /* @__PURE__ */ new Map();
|
|
6059
6079
|
distinctLabels.forEach(
|
|
6060
6080
|
(l, idx) => m.set(l, SPEAKER_COLORS[idx % SPEAKER_COLORS.length])
|
|
@@ -6413,7 +6433,7 @@ function ReconciliationProposalRow({
|
|
|
6413
6433
|
editing: false,
|
|
6414
6434
|
value: proposal.proposed
|
|
6415
6435
|
};
|
|
6416
|
-
const rowId =
|
|
6436
|
+
const rowId = React13.useId();
|
|
6417
6437
|
const checkboxId = `${rowId}-accept`;
|
|
6418
6438
|
const level = resolveConfidenceLevel(proposal);
|
|
6419
6439
|
const render = proposal.renderValue ?? formatValueDefault;
|
|
@@ -6592,17 +6612,17 @@ function AIReconciliationPanel({
|
|
|
6592
6612
|
onNothingToReconcile,
|
|
6593
6613
|
className
|
|
6594
6614
|
}) {
|
|
6595
|
-
const effective =
|
|
6615
|
+
const effective = React13.useMemo(
|
|
6596
6616
|
() => proposals.filter((p) => !isEqual(p.current, p.proposed)),
|
|
6597
6617
|
[proposals, isEqual]
|
|
6598
6618
|
);
|
|
6599
|
-
const stateSignature =
|
|
6619
|
+
const stateSignature = React13.useMemo(
|
|
6600
6620
|
() => effective.map(
|
|
6601
6621
|
(p) => `${p.id}\u241F${safeStableStringify(p.proposed)}\u241F${p.defaultAccepted ?? ""}\u241F${p.required ?? ""}\u241F${p.confidence ?? ""}\u241F${p.confidenceLevel ?? ""}`
|
|
6602
6622
|
).join("|"),
|
|
6603
6623
|
[effective]
|
|
6604
6624
|
);
|
|
6605
|
-
const [rowStates, setRowStates] =
|
|
6625
|
+
const [rowStates, setRowStates] = React13.useState(
|
|
6606
6626
|
() => Object.fromEntries(
|
|
6607
6627
|
effective.map((p) => [
|
|
6608
6628
|
p.id,
|
|
@@ -6614,7 +6634,7 @@ function AIReconciliationPanel({
|
|
|
6614
6634
|
])
|
|
6615
6635
|
)
|
|
6616
6636
|
);
|
|
6617
|
-
|
|
6637
|
+
React13.useEffect(() => {
|
|
6618
6638
|
setRowStates(
|
|
6619
6639
|
Object.fromEntries(
|
|
6620
6640
|
effective.map((p) => [
|
|
@@ -6628,20 +6648,20 @@ function AIReconciliationPanel({
|
|
|
6628
6648
|
)
|
|
6629
6649
|
);
|
|
6630
6650
|
}, [stateSignature]);
|
|
6631
|
-
const reportedEmpty =
|
|
6632
|
-
|
|
6651
|
+
const reportedEmpty = React13.useRef(false);
|
|
6652
|
+
React13.useEffect(() => {
|
|
6633
6653
|
if (effective.length === 0 && !reportedEmpty.current) {
|
|
6634
6654
|
reportedEmpty.current = true;
|
|
6635
6655
|
onNothingToReconcile?.();
|
|
6636
6656
|
}
|
|
6637
6657
|
if (effective.length > 0) reportedEmpty.current = false;
|
|
6638
6658
|
}, [effective.length, onNothingToReconcile]);
|
|
6639
|
-
const acceptedCount =
|
|
6659
|
+
const acceptedCount = React13.useMemo(
|
|
6640
6660
|
() => Object.values(rowStates).filter((s) => s.accepted).length,
|
|
6641
6661
|
[rowStates]
|
|
6642
6662
|
);
|
|
6643
|
-
const [submitting, setSubmitting] =
|
|
6644
|
-
const setAllAccepted =
|
|
6663
|
+
const [submitting, setSubmitting] = React13.useState(false);
|
|
6664
|
+
const setAllAccepted = React13.useCallback(
|
|
6645
6665
|
(accepted) => {
|
|
6646
6666
|
setRowStates((prev) => {
|
|
6647
6667
|
const next = { ...prev };
|
|
@@ -6659,7 +6679,7 @@ function AIReconciliationPanel({
|
|
|
6659
6679
|
},
|
|
6660
6680
|
[effective]
|
|
6661
6681
|
);
|
|
6662
|
-
const setRowAccepted =
|
|
6682
|
+
const setRowAccepted = React13.useCallback(
|
|
6663
6683
|
(id, accepted) => {
|
|
6664
6684
|
const proposal = effective.find((p) => p.id === id);
|
|
6665
6685
|
setRowStates((prev) => {
|
|
@@ -6673,7 +6693,7 @@ function AIReconciliationPanel({
|
|
|
6673
6693
|
},
|
|
6674
6694
|
[effective]
|
|
6675
6695
|
);
|
|
6676
|
-
const setRowValue =
|
|
6696
|
+
const setRowValue = React13.useCallback(
|
|
6677
6697
|
(id, value) => {
|
|
6678
6698
|
const proposal = effective.find((p) => p.id === id);
|
|
6679
6699
|
setRowStates((prev) => {
|
|
@@ -6687,7 +6707,7 @@ function AIReconciliationPanel({
|
|
|
6687
6707
|
},
|
|
6688
6708
|
[effective]
|
|
6689
6709
|
);
|
|
6690
|
-
const toggleRowEditing =
|
|
6710
|
+
const toggleRowEditing = React13.useCallback(
|
|
6691
6711
|
(id) => {
|
|
6692
6712
|
const proposal = effective.find((p) => p.id === id);
|
|
6693
6713
|
setRowStates((prev) => {
|
|
@@ -6701,7 +6721,7 @@ function AIReconciliationPanel({
|
|
|
6701
6721
|
},
|
|
6702
6722
|
[effective]
|
|
6703
6723
|
);
|
|
6704
|
-
const handleApply =
|
|
6724
|
+
const handleApply = React13.useCallback(async () => {
|
|
6705
6725
|
const accepted = effective.filter((p) => rowStates[p.id]?.accepted).map((p) => ({
|
|
6706
6726
|
id: p.id,
|
|
6707
6727
|
value: rowStates[p.id]?.value ?? p.proposed
|
|
@@ -6714,8 +6734,8 @@ function AIReconciliationPanel({
|
|
|
6714
6734
|
setSubmitting(false);
|
|
6715
6735
|
}
|
|
6716
6736
|
}, [effective, rowStates, onApply]);
|
|
6717
|
-
const containerRef =
|
|
6718
|
-
|
|
6737
|
+
const containerRef = React13.useRef(null);
|
|
6738
|
+
React13.useEffect(() => {
|
|
6719
6739
|
const el = containerRef.current;
|
|
6720
6740
|
if (!el) return void 0;
|
|
6721
6741
|
const handler = (e) => {
|
|
@@ -6747,7 +6767,7 @@ function AIReconciliationPanel({
|
|
|
6747
6767
|
const allAccepted = effective.length > 0 && acceptedCount === effective.length;
|
|
6748
6768
|
const someAccepted = acceptedCount > 0 && !allAccepted;
|
|
6749
6769
|
const resolvedApplyLabel = applyLabel ?? (acceptedCount === 1 ? "Apply 1 update" : `Apply ${acceptedCount} updates`);
|
|
6750
|
-
const grouped =
|
|
6770
|
+
const grouped = React13.useMemo(() => {
|
|
6751
6771
|
const map = /* @__PURE__ */ new Map();
|
|
6752
6772
|
for (const p of effective) {
|
|
6753
6773
|
const key = p.group;
|
|
@@ -6798,7 +6818,7 @@ function AIReconciliationPanel({
|
|
|
6798
6818
|
{
|
|
6799
6819
|
"data-slot": "reconciliation-rows",
|
|
6800
6820
|
className: "divide-border max-h-[60vh] overflow-y-auto",
|
|
6801
|
-
children: grouped.map(([groupKey, items]) => /* @__PURE__ */ jsxs(
|
|
6821
|
+
children: grouped.map(([groupKey, items]) => /* @__PURE__ */ jsxs(React13.Fragment, { children: [
|
|
6802
6822
|
groupKey && /* @__PURE__ */ jsx(
|
|
6803
6823
|
"li",
|
|
6804
6824
|
{
|
|
@@ -7416,7 +7436,7 @@ function ConcernRow({
|
|
|
7416
7436
|
drag,
|
|
7417
7437
|
onAction
|
|
7418
7438
|
}) {
|
|
7419
|
-
const [expanded, setExpanded] =
|
|
7439
|
+
const [expanded, setExpanded] = React13.useState(false);
|
|
7420
7440
|
const current = currentAssertion(concern);
|
|
7421
7441
|
const hasHistory = concern.assertions.length > 1;
|
|
7422
7442
|
const visibleActions = actions.filter(
|
|
@@ -7534,7 +7554,7 @@ function ConcernRow({
|
|
|
7534
7554
|
)
|
|
7535
7555
|
);
|
|
7536
7556
|
}
|
|
7537
|
-
var ProblemList =
|
|
7557
|
+
var ProblemList = React13.forwardRef(
|
|
7538
7558
|
({
|
|
7539
7559
|
concerns,
|
|
7540
7560
|
title = "Problem list",
|
|
@@ -7548,7 +7568,7 @@ var ProblemList = React12.forwardRef(
|
|
|
7548
7568
|
"data-testid": dataTestId,
|
|
7549
7569
|
...props
|
|
7550
7570
|
}, ref) => {
|
|
7551
|
-
const [draft, setDraft] =
|
|
7571
|
+
const [draft, setDraft] = React13.useState("");
|
|
7552
7572
|
const [announcement, setAnnouncement] = useLiveAnnouncement();
|
|
7553
7573
|
const submitDraft = () => {
|
|
7554
7574
|
const text = draft.trim();
|
|
@@ -7556,7 +7576,7 @@ var ProblemList = React12.forwardRef(
|
|
|
7556
7576
|
onAddProblem?.(text);
|
|
7557
7577
|
setDraft("");
|
|
7558
7578
|
};
|
|
7559
|
-
const moveConcern =
|
|
7579
|
+
const moveConcern = React13.useCallback(
|
|
7560
7580
|
(concern, dir) => {
|
|
7561
7581
|
if (!onReorder || readOnly) return;
|
|
7562
7582
|
const groupKey = concernGroupKey(concern);
|
|
@@ -7576,7 +7596,7 @@ var ProblemList = React12.forwardRef(
|
|
|
7576
7596
|
},
|
|
7577
7597
|
[concerns, onReorder, readOnly, setAnnouncement]
|
|
7578
7598
|
);
|
|
7579
|
-
const handleAction =
|
|
7599
|
+
const handleAction = React13.useCallback(
|
|
7580
7600
|
(concern, action) => {
|
|
7581
7601
|
if (action === "move-up") moveConcern(concern, -1);
|
|
7582
7602
|
else if (action === "move-down") moveConcern(concern, 1);
|
|
@@ -7584,13 +7604,13 @@ var ProblemList = React12.forwardRef(
|
|
|
7584
7604
|
},
|
|
7585
7605
|
[moveConcern, onAction]
|
|
7586
7606
|
);
|
|
7587
|
-
const groupById =
|
|
7607
|
+
const groupById = React13.useMemo(
|
|
7588
7608
|
() => new Map(
|
|
7589
7609
|
concerns.map((c) => [c.concernId, concernGroupKey(c)])
|
|
7590
7610
|
),
|
|
7591
7611
|
[concerns]
|
|
7592
7612
|
);
|
|
7593
|
-
const groupOf =
|
|
7613
|
+
const groupOf = React13.useCallback(
|
|
7594
7614
|
(id) => groupById.get(id),
|
|
7595
7615
|
[groupById]
|
|
7596
7616
|
);
|
|
@@ -7795,8 +7815,8 @@ function OrderRow({
|
|
|
7795
7815
|
controls?.moveWithin || controls?.moveToProblem || controls?.edit || controls?.editStart || controls?.remove
|
|
7796
7816
|
);
|
|
7797
7817
|
const canEdit = Boolean(controls?.edit || controls?.editStart);
|
|
7798
|
-
const [editing, setEditing] =
|
|
7799
|
-
const [menuOpen, setMenuOpen] =
|
|
7818
|
+
const [editing, setEditing] = React13.useState(null);
|
|
7819
|
+
const [menuOpen, setMenuOpen] = React13.useState(false);
|
|
7800
7820
|
const pick = (fn) => () => {
|
|
7801
7821
|
setMenuOpen(false);
|
|
7802
7822
|
fn();
|
|
@@ -8033,12 +8053,12 @@ function AddOrderForm({
|
|
|
8033
8053
|
onCancel,
|
|
8034
8054
|
renderSearch
|
|
8035
8055
|
}) {
|
|
8036
|
-
const [type, setType] =
|
|
8056
|
+
const [type, setType] = React13.useState(
|
|
8037
8057
|
renderSearch ? "auto" : "medication"
|
|
8038
8058
|
);
|
|
8039
|
-
const [display, setDisplay] =
|
|
8040
|
-
const inputRef =
|
|
8041
|
-
|
|
8059
|
+
const [display, setDisplay] = React13.useState("");
|
|
8060
|
+
const inputRef = React13.useRef(null);
|
|
8061
|
+
React13.useEffect(() => {
|
|
8042
8062
|
inputRef.current?.focus();
|
|
8043
8063
|
}, []);
|
|
8044
8064
|
const submit = () => {
|
|
@@ -8143,7 +8163,7 @@ function AddOrderForm({
|
|
|
8143
8163
|
}
|
|
8144
8164
|
);
|
|
8145
8165
|
}
|
|
8146
|
-
var Assessment =
|
|
8166
|
+
var Assessment = React13.forwardRef(
|
|
8147
8167
|
({
|
|
8148
8168
|
concerns,
|
|
8149
8169
|
items,
|
|
@@ -8169,18 +8189,18 @@ var Assessment = React12.forwardRef(
|
|
|
8169
8189
|
"data-testid": dataTestId,
|
|
8170
8190
|
...props
|
|
8171
8191
|
}, ref) => {
|
|
8172
|
-
const instanceId =
|
|
8173
|
-
const [addingFor, setAddingFor] =
|
|
8174
|
-
const [addMode, setAddMode] =
|
|
8192
|
+
const instanceId = React13.useId();
|
|
8193
|
+
const [addingFor, setAddingFor] = React13.useState(null);
|
|
8194
|
+
const [addMode, setAddMode] = React13.useState(
|
|
8175
8195
|
defaultAddMode
|
|
8176
8196
|
);
|
|
8177
|
-
const [pendingFreeText, setPendingFreeText] =
|
|
8197
|
+
const [pendingFreeText, setPendingFreeText] = React13.useState(
|
|
8178
8198
|
null
|
|
8179
8199
|
);
|
|
8180
8200
|
const [announcement, setAnnouncement] = useLiveAnnouncement();
|
|
8181
8201
|
const ambientCodeLookup = useCodeLookupConfig();
|
|
8182
8202
|
const effectiveRenderOrderSearch = renderOrderSearch === false ? void 0 : renderOrderSearch ?? (ambientCodeLookup ? contextOrderSearch(ambientCodeLookup) : void 0);
|
|
8183
|
-
const concernById =
|
|
8203
|
+
const concernById = React13.useMemo(
|
|
8184
8204
|
() => new Map(concerns.map((c) => [c.concernId, c])),
|
|
8185
8205
|
[concerns]
|
|
8186
8206
|
);
|
|
@@ -8195,7 +8215,7 @@ var Assessment = React12.forwardRef(
|
|
|
8195
8215
|
onReorderItems(ids);
|
|
8196
8216
|
}
|
|
8197
8217
|
});
|
|
8198
|
-
const problemLabel =
|
|
8218
|
+
const problemLabel = React13.useCallback(
|
|
8199
8219
|
(concernId) => concernById.get(concernId)?.assertions.find(
|
|
8200
8220
|
(a) => items.some(
|
|
8201
8221
|
(i) => i.concernId === concernId && i.assertionId === a.id
|
|
@@ -8247,11 +8267,11 @@ var Assessment = React12.forwardRef(
|
|
|
8247
8267
|
}))
|
|
8248
8268
|
};
|
|
8249
8269
|
const orderDragEnabled = !readOnly && Boolean(onReorderOrders || onLinkOrder);
|
|
8250
|
-
const [draggingOrderId, setDraggingOrderId] =
|
|
8270
|
+
const [draggingOrderId, setDraggingOrderId] = React13.useState(
|
|
8251
8271
|
null
|
|
8252
8272
|
);
|
|
8253
|
-
const draggingOrderRef =
|
|
8254
|
-
const [orderOver, setOrderOver] =
|
|
8273
|
+
const draggingOrderRef = React13.useRef(null);
|
|
8274
|
+
const [orderOver, setOrderOver] = React13.useState(null);
|
|
8255
8275
|
const resetOrderDrag = () => {
|
|
8256
8276
|
draggingOrderRef.current = null;
|
|
8257
8277
|
setDraggingOrderId(null);
|
|
@@ -8727,10 +8747,10 @@ function AuthDialog({
|
|
|
8727
8747
|
requireEmailVerification = false,
|
|
8728
8748
|
className
|
|
8729
8749
|
}) {
|
|
8730
|
-
const [internalMode, setInternalMode] =
|
|
8731
|
-
const [isLoading, setIsLoading] =
|
|
8732
|
-
const [error, setError] =
|
|
8733
|
-
const [success, setSuccess] =
|
|
8750
|
+
const [internalMode, setInternalMode] = React13.useState("login");
|
|
8751
|
+
const [isLoading, setIsLoading] = React13.useState(false);
|
|
8752
|
+
const [error, setError] = React13.useState(null);
|
|
8753
|
+
const [success, setSuccess] = React13.useState(null);
|
|
8734
8754
|
const mode = controlledMode ?? internalMode;
|
|
8735
8755
|
const setMode = (newMode) => {
|
|
8736
8756
|
setError(null);
|
|
@@ -8741,14 +8761,14 @@ function AuthDialog({
|
|
|
8741
8761
|
setInternalMode(newMode);
|
|
8742
8762
|
}
|
|
8743
8763
|
};
|
|
8744
|
-
|
|
8764
|
+
React13.useEffect(() => {
|
|
8745
8765
|
const handleEscape = (e) => {
|
|
8746
8766
|
if (e.key === "Escape" && isOpen) onClose();
|
|
8747
8767
|
};
|
|
8748
8768
|
document.addEventListener("keydown", handleEscape);
|
|
8749
8769
|
return () => document.removeEventListener("keydown", handleEscape);
|
|
8750
8770
|
}, [isOpen, onClose]);
|
|
8751
|
-
|
|
8771
|
+
React13.useEffect(() => {
|
|
8752
8772
|
if (isOpen) {
|
|
8753
8773
|
document.body.style.overflow = "hidden";
|
|
8754
8774
|
} else {
|
|
@@ -8974,9 +8994,9 @@ function AuthDialog({
|
|
|
8974
8994
|
);
|
|
8975
8995
|
}
|
|
8976
8996
|
function LoginForm({ onSubmit, isLoading, onForgotPassword }) {
|
|
8977
|
-
const [email, setEmail] =
|
|
8978
|
-
const [password, setPassword] =
|
|
8979
|
-
const [showPassword, setShowPassword] =
|
|
8997
|
+
const [email, setEmail] = React13.useState("");
|
|
8998
|
+
const [password, setPassword] = React13.useState("");
|
|
8999
|
+
const [showPassword, setShowPassword] = React13.useState(false);
|
|
8980
9000
|
const handleSubmit = (e) => {
|
|
8981
9001
|
e.preventDefault();
|
|
8982
9002
|
onSubmit(email, password);
|
|
@@ -9078,11 +9098,11 @@ function SignupForm({
|
|
|
9078
9098
|
termsUrl,
|
|
9079
9099
|
privacyUrl
|
|
9080
9100
|
}) {
|
|
9081
|
-
const [email, setEmail] =
|
|
9082
|
-
const [password, setPassword] =
|
|
9083
|
-
const [confirmPassword, setConfirmPassword] =
|
|
9084
|
-
const [acceptedTerms, setAcceptedTerms] =
|
|
9085
|
-
const [showPassword, setShowPassword] =
|
|
9101
|
+
const [email, setEmail] = React13.useState("");
|
|
9102
|
+
const [password, setPassword] = React13.useState("");
|
|
9103
|
+
const [confirmPassword, setConfirmPassword] = React13.useState("");
|
|
9104
|
+
const [acceptedTerms, setAcceptedTerms] = React13.useState(false);
|
|
9105
|
+
const [showPassword, setShowPassword] = React13.useState(false);
|
|
9086
9106
|
const passwordsMatch = password === confirmPassword;
|
|
9087
9107
|
const handleSubmit = (e) => {
|
|
9088
9108
|
e.preventDefault();
|
|
@@ -9231,7 +9251,7 @@ function ForgotPasswordForm({
|
|
|
9231
9251
|
isLoading,
|
|
9232
9252
|
onBack
|
|
9233
9253
|
}) {
|
|
9234
|
-
const [email, setEmail] =
|
|
9254
|
+
const [email, setEmail] = React13.useState("");
|
|
9235
9255
|
const handleSubmit = (e) => {
|
|
9236
9256
|
e.preventDefault();
|
|
9237
9257
|
onSubmit(email);
|
|
@@ -9282,9 +9302,9 @@ function ForgotPasswordForm({
|
|
|
9282
9302
|
] });
|
|
9283
9303
|
}
|
|
9284
9304
|
function ResetPasswordForm({ onSubmit, isLoading }) {
|
|
9285
|
-
const [password, setPassword] =
|
|
9286
|
-
const [confirmPassword, setConfirmPassword] =
|
|
9287
|
-
const [showPassword, setShowPassword] =
|
|
9305
|
+
const [password, setPassword] = React13.useState("");
|
|
9306
|
+
const [confirmPassword, setConfirmPassword] = React13.useState("");
|
|
9307
|
+
const [showPassword, setShowPassword] = React13.useState(false);
|
|
9288
9308
|
const passwordsMatch = password === confirmPassword;
|
|
9289
9309
|
const handleSubmit = (e) => {
|
|
9290
9310
|
e.preventDefault();
|
|
@@ -9650,10 +9670,10 @@ function ServiceSelect({
|
|
|
9650
9670
|
error,
|
|
9651
9671
|
className
|
|
9652
9672
|
}) {
|
|
9653
|
-
const [isOpen, setIsOpen] =
|
|
9654
|
-
const dropdownRef =
|
|
9673
|
+
const [isOpen, setIsOpen] = React13.useState(false);
|
|
9674
|
+
const dropdownRef = React13.useRef(null);
|
|
9655
9675
|
const { anchorRef, floatingRef, style } = useAnchoredPosition({ open: isOpen, matchWidth: true, maxHeight: 240 });
|
|
9656
|
-
const outsideRefs =
|
|
9676
|
+
const outsideRefs = React13.useMemo(
|
|
9657
9677
|
() => [dropdownRef, floatingRef],
|
|
9658
9678
|
[floatingRef]
|
|
9659
9679
|
);
|
|
@@ -9832,7 +9852,7 @@ function DialogOverlay({
|
|
|
9832
9852
|
className,
|
|
9833
9853
|
titleId
|
|
9834
9854
|
}) {
|
|
9835
|
-
|
|
9855
|
+
React13.useEffect(() => {
|
|
9836
9856
|
if (!isOpen || isStorybookDocsMode()) {
|
|
9837
9857
|
return void 0;
|
|
9838
9858
|
}
|
|
@@ -9886,8 +9906,8 @@ function BookingDialog({
|
|
|
9886
9906
|
isLoading = false,
|
|
9887
9907
|
className
|
|
9888
9908
|
}) {
|
|
9889
|
-
const titleId =
|
|
9890
|
-
const [formData, setFormData] =
|
|
9909
|
+
const titleId = React13.useId();
|
|
9910
|
+
const [formData, setFormData] = React13.useState({
|
|
9891
9911
|
firstName: defaultValues?.firstName || "",
|
|
9892
9912
|
lastName: defaultValues?.lastName || "",
|
|
9893
9913
|
phoneNumber: defaultValues?.phoneNumber || "",
|
|
@@ -9896,7 +9916,7 @@ function BookingDialog({
|
|
|
9896
9916
|
consentEmail: defaultValues?.consentEmail ?? false,
|
|
9897
9917
|
consentSms: defaultValues?.consentSms ?? false
|
|
9898
9918
|
});
|
|
9899
|
-
const [errors, setErrors] =
|
|
9919
|
+
const [errors, setErrors] = React13.useState({});
|
|
9900
9920
|
const validate = () => {
|
|
9901
9921
|
const newErrors = {};
|
|
9902
9922
|
if (!formData.firstName.trim()) {
|
|
@@ -10164,7 +10184,7 @@ function InlineBookingForm({
|
|
|
10164
10184
|
isLoading = false,
|
|
10165
10185
|
className
|
|
10166
10186
|
}) {
|
|
10167
|
-
const [formData, setFormData] =
|
|
10187
|
+
const [formData, setFormData] = React13.useState({
|
|
10168
10188
|
firstName: defaultValues?.firstName || "",
|
|
10169
10189
|
lastName: defaultValues?.lastName || "",
|
|
10170
10190
|
phoneNumber: defaultValues?.phoneNumber || "",
|
|
@@ -10173,7 +10193,7 @@ function InlineBookingForm({
|
|
|
10173
10193
|
consentEmail: defaultValues?.consentEmail ?? false,
|
|
10174
10194
|
consentSms: defaultValues?.consentSms ?? false
|
|
10175
10195
|
});
|
|
10176
|
-
const [errors, setErrors] =
|
|
10196
|
+
const [errors, setErrors] = React13.useState({});
|
|
10177
10197
|
const validate = () => {
|
|
10178
10198
|
const newErrors = {};
|
|
10179
10199
|
if (!formData.firstName.trim()) {
|
|
@@ -11011,7 +11031,7 @@ function HoursSummary({
|
|
|
11011
11031
|
defaultExpanded = false,
|
|
11012
11032
|
className
|
|
11013
11033
|
}) {
|
|
11014
|
-
const [isExpanded, setIsExpanded] =
|
|
11034
|
+
const [isExpanded, setIsExpanded] = React13.useState(defaultExpanded);
|
|
11015
11035
|
const isOpen = isCurrentlyOpen(schedule.officeHours);
|
|
11016
11036
|
const todayHours = getTodayHours(schedule.officeHours, use24Hour);
|
|
11017
11037
|
const hasStructuredHours = schedule.officeHours && schedule.officeHours.length > 0;
|
|
@@ -11405,12 +11425,12 @@ function BusinessHoursRulesEditor({
|
|
|
11405
11425
|
className,
|
|
11406
11426
|
addHoursLabel = "Add Hours"
|
|
11407
11427
|
}) {
|
|
11408
|
-
const [rules, setRules] =
|
|
11428
|
+
const [rules, setRules] = React13.useState(
|
|
11409
11429
|
() => scheduleToRules(value)
|
|
11410
11430
|
);
|
|
11411
11431
|
const timeFormat = use24Hour ? "24-hour" : "12-hour";
|
|
11412
|
-
const lastScheduleRef =
|
|
11413
|
-
|
|
11432
|
+
const lastScheduleRef = React13.useRef(normalizeSchedule(value));
|
|
11433
|
+
React13.useEffect(() => {
|
|
11414
11434
|
const incoming = normalizeSchedule(value);
|
|
11415
11435
|
if (incoming !== lastScheduleRef.current) {
|
|
11416
11436
|
lastScheduleRef.current = incoming;
|
|
@@ -11652,13 +11672,13 @@ function CopyIcon({ className }) {
|
|
|
11652
11672
|
}
|
|
11653
11673
|
);
|
|
11654
11674
|
}
|
|
11655
|
-
var ButtonGroup =
|
|
11675
|
+
var ButtonGroup = React13.forwardRef(
|
|
11656
11676
|
({ orientation = "auto", split, className, children, ...props }, ref) => {
|
|
11657
|
-
const innerRef =
|
|
11658
|
-
|
|
11659
|
-
const [stacked, setStacked] =
|
|
11660
|
-
const requiredWidth =
|
|
11661
|
-
|
|
11677
|
+
const innerRef = React13.useRef(null);
|
|
11678
|
+
React13.useImperativeHandle(ref, () => innerRef.current);
|
|
11679
|
+
const [stacked, setStacked] = React13.useState(false);
|
|
11680
|
+
const requiredWidth = React13.useRef(0);
|
|
11681
|
+
React13.useLayoutEffect(() => {
|
|
11662
11682
|
if (orientation !== "auto") return;
|
|
11663
11683
|
const el = innerRef.current;
|
|
11664
11684
|
if (!el) return;
|
|
@@ -11685,7 +11705,7 @@ var ButtonGroup = React12.forwardRef(
|
|
|
11685
11705
|
return () => observer.disconnect();
|
|
11686
11706
|
}, [orientation, stacked, children]);
|
|
11687
11707
|
const isStacked = orientation === "vertical" || orientation === "auto" && stacked;
|
|
11688
|
-
const items =
|
|
11708
|
+
const items = React13.Children.toArray(children);
|
|
11689
11709
|
const splitCount = split === true ? 1 : typeof split === "number" ? split : 0;
|
|
11690
11710
|
const splitIndex = !isStacked && splitCount > 0 && splitCount < items.length ? splitCount : 0;
|
|
11691
11711
|
return /* @__PURE__ */ jsx(
|
|
@@ -11765,7 +11785,7 @@ function HeaderActionButton({
|
|
|
11765
11785
|
)
|
|
11766
11786
|
] });
|
|
11767
11787
|
}
|
|
11768
|
-
var CaseContextBar =
|
|
11788
|
+
var CaseContextBar = React13.forwardRef(
|
|
11769
11789
|
({
|
|
11770
11790
|
caseInfo,
|
|
11771
11791
|
showBackButton = false,
|
|
@@ -11832,7 +11852,7 @@ var CaseContextBar = React12.forwardRef(
|
|
|
11832
11852
|
}
|
|
11833
11853
|
);
|
|
11834
11854
|
CaseContextBar.displayName = "CaseContextBar";
|
|
11835
|
-
var CaseManagementHeader =
|
|
11855
|
+
var CaseManagementHeader = React13.forwardRef(
|
|
11836
11856
|
({
|
|
11837
11857
|
caseInfo,
|
|
11838
11858
|
patient,
|
|
@@ -11856,9 +11876,9 @@ var CaseManagementHeader = React12.forwardRef(
|
|
|
11856
11876
|
...props
|
|
11857
11877
|
}, ref) => {
|
|
11858
11878
|
const l = { ...defaultCaseManagementHeaderLabels, ...labels };
|
|
11859
|
-
const [internalExpanded, setInternalExpanded] =
|
|
11879
|
+
const [internalExpanded, setInternalExpanded] = React13.useState(defaultExpanded);
|
|
11860
11880
|
const isExpanded = expanded ?? internalExpanded;
|
|
11861
|
-
const detailsId =
|
|
11881
|
+
const detailsId = React13.useId();
|
|
11862
11882
|
const days = caseInfo.daysOpen ?? computeDaysOpen(caseInfo.openedDate);
|
|
11863
11883
|
const allDetails = days != null ? [...details, { label: l.daysOpenTerm, value: days }] : details;
|
|
11864
11884
|
const hasDetails = allDetails.length > 0;
|
|
@@ -12147,19 +12167,19 @@ function ConditionEditor({
|
|
|
12147
12167
|
const prior = concern ? currentAssertion(concern) : void 0;
|
|
12148
12168
|
const ambientCodeLookup = useCodeLookupConfig();
|
|
12149
12169
|
const effectiveRenderCodeSearch = renderCodeSearch === false ? void 0 : renderCodeSearch ?? (ambientCodeLookup ? contextConditionCodeSearch(ambientCodeLookup) : void 0);
|
|
12150
|
-
const [text, setText] =
|
|
12151
|
-
const [coding, setCoding] =
|
|
12152
|
-
const [verification, setVerification] =
|
|
12153
|
-
const [severity, setSeverity] =
|
|
12154
|
-
const [onsetDate, setOnsetDate] =
|
|
12155
|
-
const [onsetFuzzy, setOnsetFuzzy] =
|
|
12156
|
-
const [note, setNote] =
|
|
12157
|
-
const [progression, setProgression] =
|
|
12158
|
-
const [fields, setFields] =
|
|
12159
|
-
const [relType, setRelType] =
|
|
12160
|
-
const [relTarget, setRelTarget] =
|
|
12161
|
-
const [observation, setObservation] =
|
|
12162
|
-
|
|
12170
|
+
const [text, setText] = React13.useState("");
|
|
12171
|
+
const [coding, setCoding] = React13.useState([]);
|
|
12172
|
+
const [verification, setVerification] = React13.useState("confirmed");
|
|
12173
|
+
const [severity, setSeverity] = React13.useState();
|
|
12174
|
+
const [onsetDate, setOnsetDate] = React13.useState("");
|
|
12175
|
+
const [onsetFuzzy, setOnsetFuzzy] = React13.useState("");
|
|
12176
|
+
const [note, setNote] = React13.useState("");
|
|
12177
|
+
const [progression, setProgression] = React13.useState(false);
|
|
12178
|
+
const [fields, setFields] = React13.useState({});
|
|
12179
|
+
const [relType, setRelType] = React13.useState("caused-by");
|
|
12180
|
+
const [relTarget, setRelTarget] = React13.useState("");
|
|
12181
|
+
const [observation, setObservation] = React13.useState("");
|
|
12182
|
+
React13.useEffect(() => {
|
|
12163
12183
|
if (!open) return;
|
|
12164
12184
|
setText(prior?.text ?? "");
|
|
12165
12185
|
setCoding(withSinglePrimary(prior?.coding ?? []));
|
|
@@ -12677,17 +12697,17 @@ function CheckrIntegration({
|
|
|
12677
12697
|
viewDetails = "View Details",
|
|
12678
12698
|
noReportsSelected = "No reports selected"
|
|
12679
12699
|
} = labels;
|
|
12680
|
-
const [showInviteModal, setShowInviteModal] =
|
|
12681
|
-
const [candidateName, setCandidateName] =
|
|
12682
|
-
const [candidateEmail, setCandidateEmail] =
|
|
12683
|
-
const [candidatePhone, setCandidatePhone] =
|
|
12684
|
-
const [selectedPackage, setSelectedPackage] =
|
|
12700
|
+
const [showInviteModal, setShowInviteModal] = React13.useState(false);
|
|
12701
|
+
const [candidateName, setCandidateName] = React13.useState("");
|
|
12702
|
+
const [candidateEmail, setCandidateEmail] = React13.useState("");
|
|
12703
|
+
const [candidatePhone, setCandidatePhone] = React13.useState("");
|
|
12704
|
+
const [selectedPackage, setSelectedPackage] = React13.useState(
|
|
12685
12705
|
packages[0]?.id || ""
|
|
12686
12706
|
);
|
|
12687
|
-
const [selectedReports, setSelectedReports] =
|
|
12707
|
+
const [selectedReports, setSelectedReports] = React13.useState(
|
|
12688
12708
|
/* @__PURE__ */ new Set()
|
|
12689
12709
|
);
|
|
12690
|
-
|
|
12710
|
+
React13.useEffect(() => {
|
|
12691
12711
|
setSelectedReports((prev) => prev.size > 0 ? /* @__PURE__ */ new Set() : prev);
|
|
12692
12712
|
}, [reports, connected]);
|
|
12693
12713
|
const statusLabels = {
|
|
@@ -12721,7 +12741,7 @@ function CheckrIntegration({
|
|
|
12721
12741
|
failed: "bg-destructive",
|
|
12722
12742
|
expired: "bg-muted-foreground"
|
|
12723
12743
|
};
|
|
12724
|
-
const statusCounts =
|
|
12744
|
+
const statusCounts = React13.useMemo(() => {
|
|
12725
12745
|
const counts = {
|
|
12726
12746
|
pending: 0,
|
|
12727
12747
|
running: 0,
|
|
@@ -13260,7 +13280,7 @@ function CommandPaletteProvider({
|
|
|
13260
13280
|
}
|
|
13261
13281
|
}, [isOpen, open, close]);
|
|
13262
13282
|
useCommandK(toggle, enableShortcut);
|
|
13263
|
-
|
|
13283
|
+
React13__default.useEffect(() => {
|
|
13264
13284
|
if (!customEventName) return;
|
|
13265
13285
|
const handler = () => open();
|
|
13266
13286
|
document.addEventListener(customEventName, handler);
|
|
@@ -14172,11 +14192,11 @@ function formatRetryTime(time) {
|
|
|
14172
14192
|
}
|
|
14173
14193
|
function useConnectionStatus(options = {}) {
|
|
14174
14194
|
const { onDisconnect, onReconnect } = options;
|
|
14175
|
-
const [isOnline, setIsOnline] =
|
|
14195
|
+
const [isOnline, setIsOnline] = React13.useState(() => {
|
|
14176
14196
|
if (typeof window === "undefined") return true;
|
|
14177
14197
|
return navigator.onLine;
|
|
14178
14198
|
});
|
|
14179
|
-
|
|
14199
|
+
React13.useEffect(() => {
|
|
14180
14200
|
const handleOnline = () => {
|
|
14181
14201
|
setIsOnline(true);
|
|
14182
14202
|
onReconnect?.();
|
|
@@ -14295,12 +14315,12 @@ function RowActionMenu({
|
|
|
14295
14315
|
item,
|
|
14296
14316
|
actions
|
|
14297
14317
|
}) {
|
|
14298
|
-
const [open, setOpen] =
|
|
14299
|
-
const menuRef =
|
|
14300
|
-
const buttonRef =
|
|
14301
|
-
const outsideRefs =
|
|
14318
|
+
const [open, setOpen] = React13.useState(false);
|
|
14319
|
+
const menuRef = React13.useRef(null);
|
|
14320
|
+
const buttonRef = React13.useRef(null);
|
|
14321
|
+
const outsideRefs = React13.useMemo(() => [menuRef, buttonRef], []);
|
|
14302
14322
|
useClickOutside(outsideRefs, () => setOpen(false), open);
|
|
14303
|
-
|
|
14323
|
+
React13.useEffect(() => {
|
|
14304
14324
|
if (!open) return;
|
|
14305
14325
|
function handleKey(e) {
|
|
14306
14326
|
if (e.key === "Escape") setOpen(false);
|
|
@@ -14308,8 +14328,8 @@ function RowActionMenu({
|
|
|
14308
14328
|
document.addEventListener("keydown", handleKey);
|
|
14309
14329
|
return () => document.removeEventListener("keydown", handleKey);
|
|
14310
14330
|
}, [open]);
|
|
14311
|
-
const [menuPos, setMenuPos] =
|
|
14312
|
-
|
|
14331
|
+
const [menuPos, setMenuPos] = React13.useState(null);
|
|
14332
|
+
React13.useLayoutEffect(() => {
|
|
14313
14333
|
if (!open || !buttonRef.current) return;
|
|
14314
14334
|
const rect = buttonRef.current.getBoundingClientRect();
|
|
14315
14335
|
setMenuPos({
|
|
@@ -14496,8 +14516,8 @@ function buildDefaultActions(onView, onEdit, onDelete) {
|
|
|
14496
14516
|
function ViewModalActions({
|
|
14497
14517
|
viewTarget
|
|
14498
14518
|
}) {
|
|
14499
|
-
const [shareOpen, setShareOpen] =
|
|
14500
|
-
const shareRef =
|
|
14519
|
+
const [shareOpen, setShareOpen] = React13.useState(false);
|
|
14520
|
+
const shareRef = React13.useRef(null);
|
|
14501
14521
|
const {
|
|
14502
14522
|
anchorRef: shareAnchorRef,
|
|
14503
14523
|
floatingRef: shareFloatingRef,
|
|
@@ -14505,7 +14525,7 @@ function ViewModalActions({
|
|
|
14505
14525
|
} = useAnchoredPosition({
|
|
14506
14526
|
open: shareOpen
|
|
14507
14527
|
});
|
|
14508
|
-
const shareOutsideRefs =
|
|
14528
|
+
const shareOutsideRefs = React13.useMemo(
|
|
14509
14529
|
() => [shareRef, shareFloatingRef],
|
|
14510
14530
|
[shareFloatingRef]
|
|
14511
14531
|
);
|
|
@@ -14651,7 +14671,7 @@ function ViewModalActions({
|
|
|
14651
14671
|
)
|
|
14652
14672
|
] });
|
|
14653
14673
|
}
|
|
14654
|
-
var CountBadge =
|
|
14674
|
+
var CountBadge = React13.forwardRef(
|
|
14655
14675
|
({
|
|
14656
14676
|
className,
|
|
14657
14677
|
variant,
|
|
@@ -14668,19 +14688,19 @@ var CountBadge = React12.forwardRef(
|
|
|
14668
14688
|
showZero = false,
|
|
14669
14689
|
...props
|
|
14670
14690
|
}, ref) => {
|
|
14671
|
-
const [open, setOpen] =
|
|
14672
|
-
const containerRef =
|
|
14673
|
-
const [deleteTarget, setDeleteTarget] =
|
|
14674
|
-
const [editTarget, setEditTarget] =
|
|
14691
|
+
const [open, setOpen] = React13.useState(false);
|
|
14692
|
+
const containerRef = React13.useRef(null);
|
|
14693
|
+
const [deleteTarget, setDeleteTarget] = React13.useState(null);
|
|
14694
|
+
const [editTarget, setEditTarget] = React13.useState(
|
|
14675
14695
|
null
|
|
14676
14696
|
);
|
|
14677
|
-
const [editForm, setEditForm] =
|
|
14678
|
-
const [viewTarget, setViewTarget] =
|
|
14697
|
+
const [editForm, setEditForm] = React13.useState({});
|
|
14698
|
+
const [viewTarget, setViewTarget] = React13.useState(
|
|
14679
14699
|
null
|
|
14680
14700
|
);
|
|
14681
14701
|
const showMenu = items && items.length > 0;
|
|
14682
14702
|
const hidden = count === 0 && !showZero;
|
|
14683
|
-
|
|
14703
|
+
React13.useEffect(() => {
|
|
14684
14704
|
if (hidden) setOpen(false);
|
|
14685
14705
|
}, [hidden]);
|
|
14686
14706
|
const {
|
|
@@ -14692,12 +14712,12 @@ var CountBadge = React12.forwardRef(
|
|
|
14692
14712
|
placement: "bottom-end",
|
|
14693
14713
|
offset: 8
|
|
14694
14714
|
});
|
|
14695
|
-
const outsideRefs =
|
|
14715
|
+
const outsideRefs = React13.useMemo(
|
|
14696
14716
|
() => [containerRef, floatingRef],
|
|
14697
14717
|
[floatingRef]
|
|
14698
14718
|
);
|
|
14699
14719
|
useClickOutside(outsideRefs, () => setOpen(false), open);
|
|
14700
|
-
|
|
14720
|
+
React13.useEffect(() => {
|
|
14701
14721
|
if (!open) return;
|
|
14702
14722
|
const handleEscape = (e) => {
|
|
14703
14723
|
if (e.key === "Escape") setOpen(false);
|
|
@@ -14705,13 +14725,13 @@ var CountBadge = React12.forwardRef(
|
|
|
14705
14725
|
document.addEventListener("keydown", handleEscape);
|
|
14706
14726
|
return () => document.removeEventListener("keydown", handleEscape);
|
|
14707
14727
|
}, [open]);
|
|
14708
|
-
const handleDeleteRequest =
|
|
14728
|
+
const handleDeleteRequest = React13.useCallback((item) => {
|
|
14709
14729
|
setDeleteTarget(item);
|
|
14710
14730
|
}, []);
|
|
14711
|
-
const handleViewRequest =
|
|
14731
|
+
const handleViewRequest = React13.useCallback((item) => {
|
|
14712
14732
|
setViewTarget(item);
|
|
14713
14733
|
}, []);
|
|
14714
|
-
const handleEditRequest =
|
|
14734
|
+
const handleEditRequest = React13.useCallback((item) => {
|
|
14715
14735
|
setEditTarget(item);
|
|
14716
14736
|
setEditForm({
|
|
14717
14737
|
label: item.label,
|
|
@@ -15170,7 +15190,7 @@ function CookieConsentBanner({
|
|
|
15170
15190
|
isMobileApp = false,
|
|
15171
15191
|
className
|
|
15172
15192
|
}) {
|
|
15173
|
-
const [isAnimating, setIsAnimating] =
|
|
15193
|
+
const [isAnimating, setIsAnimating] = React13.useState(false);
|
|
15174
15194
|
const handleAccept = () => {
|
|
15175
15195
|
setIsAnimating(true);
|
|
15176
15196
|
setTimeout(() => {
|
|
@@ -15229,7 +15249,7 @@ function CookieConsentBanner({
|
|
|
15229
15249
|
appName,
|
|
15230
15250
|
" you are agreeing to our",
|
|
15231
15251
|
" ",
|
|
15232
|
-
legalLinks.map((link, index) => /* @__PURE__ */ jsxs(
|
|
15252
|
+
legalLinks.map((link, index) => /* @__PURE__ */ jsxs(React13.Fragment, { children: [
|
|
15233
15253
|
index > 0 && (index === legalLinks.length - 1 ? " and " : ", "),
|
|
15234
15254
|
/* @__PURE__ */ jsx(
|
|
15235
15255
|
"a",
|
|
@@ -15353,20 +15373,20 @@ function CompactCookieBanner({
|
|
|
15353
15373
|
var COOKIE_CONSENT_KEY = "cookie-consent-accepted";
|
|
15354
15374
|
function useCookieConsent(options = {}) {
|
|
15355
15375
|
const { storageKey = COOKIE_CONSENT_KEY, onConsent } = options;
|
|
15356
|
-
const [hasConsented, setHasConsented] =
|
|
15376
|
+
const [hasConsented, setHasConsented] = React13.useState(() => {
|
|
15357
15377
|
if (typeof window === "undefined") return false;
|
|
15358
15378
|
return localStorage.getItem(storageKey) === "true";
|
|
15359
15379
|
});
|
|
15360
|
-
const acceptCookies =
|
|
15380
|
+
const acceptCookies = React13.useCallback(() => {
|
|
15361
15381
|
localStorage.setItem(storageKey, "true");
|
|
15362
15382
|
setHasConsented(true);
|
|
15363
15383
|
onConsent?.();
|
|
15364
15384
|
}, [storageKey, onConsent]);
|
|
15365
|
-
const declineCookies =
|
|
15385
|
+
const declineCookies = React13.useCallback(() => {
|
|
15366
15386
|
localStorage.setItem(storageKey, "declined");
|
|
15367
15387
|
setHasConsented(true);
|
|
15368
15388
|
}, [storageKey]);
|
|
15369
|
-
const resetConsent =
|
|
15389
|
+
const resetConsent = React13.useCallback(() => {
|
|
15370
15390
|
localStorage.removeItem(storageKey);
|
|
15371
15391
|
setHasConsented(false);
|
|
15372
15392
|
}, [storageKey]);
|
|
@@ -15753,9 +15773,9 @@ function CSVFileUpload({
|
|
|
15753
15773
|
selectFile = "Select a file to upload or drag and drop",
|
|
15754
15774
|
selectButton = "Select File to Upload"
|
|
15755
15775
|
} = labels;
|
|
15756
|
-
const inputRef =
|
|
15757
|
-
const [isDragging, setIsDragging] =
|
|
15758
|
-
const handleDrop =
|
|
15776
|
+
const inputRef = React13.useRef(null);
|
|
15777
|
+
const [isDragging, setIsDragging] = React13.useState(false);
|
|
15778
|
+
const handleDrop = React13.useCallback(
|
|
15759
15779
|
(e) => {
|
|
15760
15780
|
e.preventDefault();
|
|
15761
15781
|
setIsDragging(false);
|
|
@@ -15766,14 +15786,14 @@ function CSVFileUpload({
|
|
|
15766
15786
|
},
|
|
15767
15787
|
[onFileSelect]
|
|
15768
15788
|
);
|
|
15769
|
-
const handleDragOver =
|
|
15789
|
+
const handleDragOver = React13.useCallback((e) => {
|
|
15770
15790
|
e.preventDefault();
|
|
15771
15791
|
setIsDragging(true);
|
|
15772
15792
|
}, []);
|
|
15773
|
-
const handleDragLeave =
|
|
15793
|
+
const handleDragLeave = React13.useCallback(() => {
|
|
15774
15794
|
setIsDragging(false);
|
|
15775
15795
|
}, []);
|
|
15776
|
-
const handleFileChange =
|
|
15796
|
+
const handleFileChange = React13.useCallback(
|
|
15777
15797
|
(e) => {
|
|
15778
15798
|
const file = e.target.files?.[0];
|
|
15779
15799
|
if (file) {
|
|
@@ -15838,7 +15858,7 @@ var widgetVariants = cva("", {
|
|
|
15838
15858
|
size: "md"
|
|
15839
15859
|
}
|
|
15840
15860
|
});
|
|
15841
|
-
var DashboardWidget =
|
|
15861
|
+
var DashboardWidget = React13.forwardRef(
|
|
15842
15862
|
({
|
|
15843
15863
|
className,
|
|
15844
15864
|
size,
|
|
@@ -15933,7 +15953,7 @@ var DashboardWidget = React12.forwardRef(
|
|
|
15933
15953
|
}
|
|
15934
15954
|
);
|
|
15935
15955
|
DashboardWidget.displayName = "DashboardWidget";
|
|
15936
|
-
var DashboardWidgetInfo =
|
|
15956
|
+
var DashboardWidgetInfo = React13.forwardRef(({ className, items, columns = 2, layout = "stacked", ...props }, ref) => {
|
|
15937
15957
|
const gridCols = {
|
|
15938
15958
|
1: "grid-cols-1",
|
|
15939
15959
|
2: "grid-cols-2",
|
|
@@ -16067,10 +16087,10 @@ function WidgetRowActionMenu({
|
|
|
16067
16087
|
rowIndex,
|
|
16068
16088
|
actions
|
|
16069
16089
|
}) {
|
|
16070
|
-
const [open, setOpen] =
|
|
16071
|
-
const menuRef =
|
|
16072
|
-
const buttonRef =
|
|
16073
|
-
|
|
16090
|
+
const [open, setOpen] = React13.useState(false);
|
|
16091
|
+
const menuRef = React13.useRef(null);
|
|
16092
|
+
const buttonRef = React13.useRef(null);
|
|
16093
|
+
React13.useEffect(() => {
|
|
16074
16094
|
if (!open) return;
|
|
16075
16095
|
function handleClick(e) {
|
|
16076
16096
|
if (menuRef.current && !menuRef.current.contains(e.target) && buttonRef.current && !buttonRef.current.contains(e.target)) {
|
|
@@ -16080,7 +16100,7 @@ function WidgetRowActionMenu({
|
|
|
16080
16100
|
document.addEventListener("mousedown", handleClick);
|
|
16081
16101
|
return () => document.removeEventListener("mousedown", handleClick);
|
|
16082
16102
|
}, [open]);
|
|
16083
|
-
|
|
16103
|
+
React13.useEffect(() => {
|
|
16084
16104
|
if (!open) return;
|
|
16085
16105
|
function handleKey(e) {
|
|
16086
16106
|
if (e.key === "Escape") setOpen(false);
|
|
@@ -16088,8 +16108,8 @@ function WidgetRowActionMenu({
|
|
|
16088
16108
|
document.addEventListener("keydown", handleKey);
|
|
16089
16109
|
return () => document.removeEventListener("keydown", handleKey);
|
|
16090
16110
|
}, [open]);
|
|
16091
|
-
const [menuPos, setMenuPos] =
|
|
16092
|
-
|
|
16111
|
+
const [menuPos, setMenuPos] = React13.useState(null);
|
|
16112
|
+
React13.useLayoutEffect(() => {
|
|
16093
16113
|
if (!open || !buttonRef.current) return;
|
|
16094
16114
|
const rect = buttonRef.current.getBoundingClientRect();
|
|
16095
16115
|
setMenuPos({
|
|
@@ -16170,7 +16190,7 @@ function WidgetRowActionMenu({
|
|
|
16170
16190
|
)
|
|
16171
16191
|
] });
|
|
16172
16192
|
}
|
|
16173
|
-
var DashboardWidgetTable =
|
|
16193
|
+
var DashboardWidgetTable = React13.forwardRef(DashboardWidgetTableInner);
|
|
16174
16194
|
var actionColorMap = {
|
|
16175
16195
|
primary: "bg-primary-100 text-primary-900 dark:bg-primary-900/40 dark:text-primary-300",
|
|
16176
16196
|
green: "bg-emerald-100 text-emerald-700 dark:bg-emerald-900/40 dark:text-emerald-300",
|
|
@@ -16181,7 +16201,7 @@ var actionColorMap = {
|
|
|
16181
16201
|
amber: "bg-amber-100 text-amber-700 dark:bg-amber-900/40 dark:text-amber-300",
|
|
16182
16202
|
neutral: "bg-neutral-100 text-neutral-700 dark:bg-neutral-800 dark:text-neutral-300"
|
|
16183
16203
|
};
|
|
16184
|
-
var DashboardWidgetActions =
|
|
16204
|
+
var DashboardWidgetActions = React13.forwardRef(({ className, actions, columns = 2, ...props }, ref) => {
|
|
16185
16205
|
const gridCols = {
|
|
16186
16206
|
1: "grid-cols-1",
|
|
16187
16207
|
2: "grid-cols-2",
|
|
@@ -16234,7 +16254,7 @@ var DashboardWidgetActions = React12.forwardRef(({ className, actions, columns =
|
|
|
16234
16254
|
);
|
|
16235
16255
|
});
|
|
16236
16256
|
DashboardWidgetActions.displayName = "DashboardWidgetActions";
|
|
16237
|
-
var DashboardWidgetDataCards =
|
|
16257
|
+
var DashboardWidgetDataCards = React13.forwardRef(({ className, items, columns = 2, footer, ...props }, ref) => {
|
|
16238
16258
|
const gridCols = {
|
|
16239
16259
|
2: "grid-cols-2",
|
|
16240
16260
|
3: "grid-cols-3",
|
|
@@ -16436,24 +16456,24 @@ function DateRangePicker({
|
|
|
16436
16456
|
labels = {}
|
|
16437
16457
|
}) {
|
|
16438
16458
|
const finalPresets = presets || getDefaultPresets(labels);
|
|
16439
|
-
const [isCalendarOpen, setIsCalendarOpen] =
|
|
16440
|
-
const [leftMonth, setLeftMonth] =
|
|
16459
|
+
const [isCalendarOpen, setIsCalendarOpen] = React13.useState(false);
|
|
16460
|
+
const [leftMonth, setLeftMonth] = React13.useState(
|
|
16441
16461
|
() => value?.start?.getMonth() ?? (/* @__PURE__ */ new Date()).getMonth()
|
|
16442
16462
|
);
|
|
16443
|
-
const [leftYear, setLeftYear] =
|
|
16463
|
+
const [leftYear, setLeftYear] = React13.useState(
|
|
16444
16464
|
() => value?.start?.getFullYear() ?? (/* @__PURE__ */ new Date()).getFullYear()
|
|
16445
16465
|
);
|
|
16446
|
-
const [rangeStart, setRangeStart] =
|
|
16466
|
+
const [rangeStart, setRangeStart] = React13.useState(
|
|
16447
16467
|
value?.start ?? null
|
|
16448
16468
|
);
|
|
16449
|
-
const [rangeEnd, setRangeEnd] =
|
|
16469
|
+
const [rangeEnd, setRangeEnd] = React13.useState(
|
|
16450
16470
|
value?.end ?? null
|
|
16451
16471
|
);
|
|
16452
|
-
const [selectingEnd, setSelectingEnd] =
|
|
16453
|
-
const [hoverDate, setHoverDate] =
|
|
16454
|
-
const calendarRef =
|
|
16455
|
-
const triggerRef =
|
|
16456
|
-
const [resolvedAlign, setResolvedAlign] =
|
|
16472
|
+
const [selectingEnd, setSelectingEnd] = React13.useState(false);
|
|
16473
|
+
const [hoverDate, setHoverDate] = React13.useState(null);
|
|
16474
|
+
const calendarRef = React13.useRef(null);
|
|
16475
|
+
const triggerRef = React13.useRef(null);
|
|
16476
|
+
const [resolvedAlign, setResolvedAlign] = React13.useState(
|
|
16457
16477
|
align === "end" ? "end" : "start"
|
|
16458
16478
|
);
|
|
16459
16479
|
const isMobileVariant = variant === "mobile";
|
|
@@ -16463,7 +16483,7 @@ function DateRangePicker({
|
|
|
16463
16483
|
);
|
|
16464
16484
|
const rightMonth = leftMonth === 11 ? 0 : leftMonth + 1;
|
|
16465
16485
|
const rightYear = leftMonth === 11 ? leftYear + 1 : leftYear;
|
|
16466
|
-
|
|
16486
|
+
React13.useEffect(() => {
|
|
16467
16487
|
if (!value) {
|
|
16468
16488
|
setRangeStart(null);
|
|
16469
16489
|
setRangeEnd(null);
|
|
@@ -16472,8 +16492,8 @@ function DateRangePicker({
|
|
|
16472
16492
|
setRangeStart(value.start ?? null);
|
|
16473
16493
|
setRangeEnd(value.end ?? null);
|
|
16474
16494
|
}, [value]);
|
|
16475
|
-
const wrapperRef =
|
|
16476
|
-
const outsideRefs =
|
|
16495
|
+
const wrapperRef = React13.useRef(null);
|
|
16496
|
+
const outsideRefs = React13.useMemo(
|
|
16477
16497
|
() => [wrapperRef, calendarRef],
|
|
16478
16498
|
[calendarRef]
|
|
16479
16499
|
);
|
|
@@ -16494,7 +16514,7 @@ function DateRangePicker({
|
|
|
16494
16514
|
setSelectingEnd(false);
|
|
16495
16515
|
triggerRef.current?.focus();
|
|
16496
16516
|
}, isCalendarOpen);
|
|
16497
|
-
|
|
16517
|
+
React13.useEffect(() => {
|
|
16498
16518
|
if (isStorybookDocsMode()) return;
|
|
16499
16519
|
if (isMobileVariant && isCalendarOpen) {
|
|
16500
16520
|
const prev = document.body.style.overflow;
|
|
@@ -16504,7 +16524,7 @@ function DateRangePicker({
|
|
|
16504
16524
|
};
|
|
16505
16525
|
}
|
|
16506
16526
|
}, [isMobileVariant, isCalendarOpen]);
|
|
16507
|
-
|
|
16527
|
+
React13.useLayoutEffect(() => {
|
|
16508
16528
|
if (isMobileVariant || !isCalendarOpen) return;
|
|
16509
16529
|
if (align === "start" || align === "end") {
|
|
16510
16530
|
setResolvedAlign(align);
|
|
@@ -16609,7 +16629,7 @@ function DateRangePicker({
|
|
|
16609
16629
|
return isSameDay(date, today);
|
|
16610
16630
|
};
|
|
16611
16631
|
const displayValue = value ? formatDateRange(value) : "";
|
|
16612
|
-
const monthNames =
|
|
16632
|
+
const monthNames = React13.useMemo(
|
|
16613
16633
|
() => Array.from(
|
|
16614
16634
|
{ length: 12 },
|
|
16615
16635
|
(_, i) => new Intl.DateTimeFormat(void 0, { month: "long" }).format(
|
|
@@ -16618,7 +16638,7 @@ function DateRangePicker({
|
|
|
16618
16638
|
),
|
|
16619
16639
|
[]
|
|
16620
16640
|
);
|
|
16621
|
-
const weekdayNames =
|
|
16641
|
+
const weekdayNames = React13.useMemo(
|
|
16622
16642
|
() => Array.from(
|
|
16623
16643
|
{ length: 7 },
|
|
16624
16644
|
(_, i) => new Intl.DateTimeFormat(void 0, { weekday: "short" }).format(
|
|
@@ -17056,11 +17076,11 @@ function DropZone({
|
|
|
17056
17076
|
className,
|
|
17057
17077
|
children
|
|
17058
17078
|
}) {
|
|
17059
|
-
const [isDragging, setIsDragging] =
|
|
17060
|
-
const inputRef =
|
|
17061
|
-
const dropZoneRef =
|
|
17062
|
-
const dragCounter =
|
|
17063
|
-
const handleDragEnter =
|
|
17079
|
+
const [isDragging, setIsDragging] = React13.useState(false);
|
|
17080
|
+
const inputRef = React13.useRef(null);
|
|
17081
|
+
const dropZoneRef = React13.useRef(null);
|
|
17082
|
+
const dragCounter = React13.useRef(0);
|
|
17083
|
+
const handleDragEnter = React13.useCallback(
|
|
17064
17084
|
(e) => {
|
|
17065
17085
|
e.preventDefault();
|
|
17066
17086
|
e.stopPropagation();
|
|
@@ -17072,7 +17092,7 @@ function DropZone({
|
|
|
17072
17092
|
},
|
|
17073
17093
|
[disabled]
|
|
17074
17094
|
);
|
|
17075
|
-
const handleDragLeave =
|
|
17095
|
+
const handleDragLeave = React13.useCallback(
|
|
17076
17096
|
(e) => {
|
|
17077
17097
|
e.preventDefault();
|
|
17078
17098
|
e.stopPropagation();
|
|
@@ -17084,11 +17104,11 @@ function DropZone({
|
|
|
17084
17104
|
},
|
|
17085
17105
|
[disabled]
|
|
17086
17106
|
);
|
|
17087
|
-
const handleDragOver =
|
|
17107
|
+
const handleDragOver = React13.useCallback((e) => {
|
|
17088
17108
|
e.preventDefault();
|
|
17089
17109
|
e.stopPropagation();
|
|
17090
17110
|
}, []);
|
|
17091
|
-
const handleDrop =
|
|
17111
|
+
const handleDrop = React13.useCallback(
|
|
17092
17112
|
(e) => {
|
|
17093
17113
|
e.preventDefault();
|
|
17094
17114
|
e.stopPropagation();
|
|
@@ -17101,12 +17121,12 @@ function DropZone({
|
|
|
17101
17121
|
},
|
|
17102
17122
|
[disabled, onFilesSelected]
|
|
17103
17123
|
);
|
|
17104
|
-
const handleClick =
|
|
17124
|
+
const handleClick = React13.useCallback(() => {
|
|
17105
17125
|
if (!disabled) {
|
|
17106
17126
|
inputRef.current?.click();
|
|
17107
17127
|
}
|
|
17108
17128
|
}, [disabled]);
|
|
17109
|
-
const handleKeyDown =
|
|
17129
|
+
const handleKeyDown = React13.useCallback(
|
|
17110
17130
|
(e) => {
|
|
17111
17131
|
if ((e.key === "Enter" || e.key === " ") && !disabled) {
|
|
17112
17132
|
e.preventDefault();
|
|
@@ -17115,7 +17135,7 @@ function DropZone({
|
|
|
17115
17135
|
},
|
|
17116
17136
|
[disabled]
|
|
17117
17137
|
);
|
|
17118
|
-
const handleInputChange =
|
|
17138
|
+
const handleInputChange = React13.useCallback(
|
|
17119
17139
|
(e) => {
|
|
17120
17140
|
if (e.target.files && e.target.files.length > 0) {
|
|
17121
17141
|
onFilesSelected(e.target.files);
|
|
@@ -17206,7 +17226,7 @@ DropZone.displayName = "DropZone";
|
|
|
17206
17226
|
function FilePreviewItem({ file, onRemove, disabled }) {
|
|
17207
17227
|
const isPdf = file.file.type === "application/pdf";
|
|
17208
17228
|
const isImage = file.file.type.startsWith("image/");
|
|
17209
|
-
const handleRemove =
|
|
17229
|
+
const handleRemove = React13.useCallback(() => {
|
|
17210
17230
|
onRemove(file.id);
|
|
17211
17231
|
}, [file.id, onRemove]);
|
|
17212
17232
|
return /* @__PURE__ */ jsxs(
|
|
@@ -17352,24 +17372,24 @@ function useCamera({
|
|
|
17352
17372
|
width = 1920,
|
|
17353
17373
|
height = 1080
|
|
17354
17374
|
} = {}) {
|
|
17355
|
-
const [permission, setPermission] =
|
|
17356
|
-
const [stream, setStream] =
|
|
17357
|
-
const [isReady, setIsReady] =
|
|
17358
|
-
const [error, setError] =
|
|
17359
|
-
const [currentFacingMode, setCurrentFacingMode] =
|
|
17360
|
-
const videoRef =
|
|
17361
|
-
const canvasRef =
|
|
17362
|
-
|
|
17375
|
+
const [permission, setPermission] = React13.useState("prompt");
|
|
17376
|
+
const [stream, setStream] = React13.useState(null);
|
|
17377
|
+
const [isReady, setIsReady] = React13.useState(false);
|
|
17378
|
+
const [error, setError] = React13.useState(null);
|
|
17379
|
+
const [currentFacingMode, setCurrentFacingMode] = React13.useState(initialFacingMode);
|
|
17380
|
+
const videoRef = React13.useRef(null);
|
|
17381
|
+
const canvasRef = React13.useRef(null);
|
|
17382
|
+
React13.useEffect(() => {
|
|
17363
17383
|
checkCameraPermission().then(setPermission);
|
|
17364
17384
|
}, []);
|
|
17365
|
-
|
|
17385
|
+
React13.useEffect(() => {
|
|
17366
17386
|
return () => {
|
|
17367
17387
|
if (stream) {
|
|
17368
17388
|
stream.getTracks().forEach((track) => track.stop());
|
|
17369
17389
|
}
|
|
17370
17390
|
};
|
|
17371
17391
|
}, [stream]);
|
|
17372
|
-
const startCamera =
|
|
17392
|
+
const startCamera = React13.useCallback(async () => {
|
|
17373
17393
|
if (!hasCameraSupport()) {
|
|
17374
17394
|
setPermission("unavailable");
|
|
17375
17395
|
setError(new Error("Camera is not supported on this device"));
|
|
@@ -17403,7 +17423,7 @@ function useCamera({
|
|
|
17403
17423
|
}
|
|
17404
17424
|
}
|
|
17405
17425
|
}, [currentFacingMode, width, height]);
|
|
17406
|
-
const stopCamera =
|
|
17426
|
+
const stopCamera = React13.useCallback(() => {
|
|
17407
17427
|
if (stream) {
|
|
17408
17428
|
stream.getTracks().forEach((track) => track.stop());
|
|
17409
17429
|
setStream(null);
|
|
@@ -17413,8 +17433,8 @@ function useCamera({
|
|
|
17413
17433
|
videoRef.current.srcObject = null;
|
|
17414
17434
|
}
|
|
17415
17435
|
}, [stream]);
|
|
17416
|
-
const shouldRestartRef =
|
|
17417
|
-
const switchCamera =
|
|
17436
|
+
const shouldRestartRef = React13.useRef(false);
|
|
17437
|
+
const switchCamera = React13.useCallback(() => {
|
|
17418
17438
|
const newFacingMode = currentFacingMode === "user" ? "environment" : "user";
|
|
17419
17439
|
if (stream) {
|
|
17420
17440
|
stream.getTracks().forEach((track) => track.stop());
|
|
@@ -17427,13 +17447,13 @@ function useCamera({
|
|
|
17427
17447
|
}
|
|
17428
17448
|
setCurrentFacingMode(newFacingMode);
|
|
17429
17449
|
}, [currentFacingMode, stream]);
|
|
17430
|
-
|
|
17450
|
+
React13.useEffect(() => {
|
|
17431
17451
|
if (shouldRestartRef.current && !stream) {
|
|
17432
17452
|
shouldRestartRef.current = false;
|
|
17433
17453
|
startCamera();
|
|
17434
17454
|
}
|
|
17435
17455
|
}, [currentFacingMode, stream, startCamera]);
|
|
17436
|
-
const capturePhoto =
|
|
17456
|
+
const capturePhoto = React13.useCallback(() => {
|
|
17437
17457
|
if (!videoRef.current || !isReady) {
|
|
17438
17458
|
return null;
|
|
17439
17459
|
}
|
|
@@ -17980,14 +18000,14 @@ function WebcamModal({
|
|
|
17980
18000
|
width: 1920,
|
|
17981
18001
|
height: 1080
|
|
17982
18002
|
});
|
|
17983
|
-
const [capturedFile, setCapturedFile] =
|
|
17984
|
-
const [previewUrl, setPreviewUrl] =
|
|
17985
|
-
const [autoDetectEnabled, setAutoDetectEnabled] =
|
|
17986
|
-
const [videoDimensions, setVideoDimensions] =
|
|
18003
|
+
const [capturedFile, setCapturedFile] = React13.useState(null);
|
|
18004
|
+
const [previewUrl, setPreviewUrl] = React13.useState(null);
|
|
18005
|
+
const [autoDetectEnabled, setAutoDetectEnabled] = React13.useState(enableAutoCapture);
|
|
18006
|
+
const [videoDimensions, setVideoDimensions] = React13.useState({
|
|
17987
18007
|
width: 0,
|
|
17988
18008
|
height: 0
|
|
17989
18009
|
});
|
|
17990
|
-
const handleAutoCapture =
|
|
18010
|
+
const handleAutoCapture = React13.useCallback(() => {
|
|
17991
18011
|
const file = capturePhoto();
|
|
17992
18012
|
if (file) {
|
|
17993
18013
|
setCapturedFile(file);
|
|
@@ -18008,8 +18028,8 @@ function WebcamModal({
|
|
|
18008
18028
|
},
|
|
18009
18029
|
handleAutoCapture
|
|
18010
18030
|
);
|
|
18011
|
-
const hasStartedRef =
|
|
18012
|
-
|
|
18031
|
+
const hasStartedRef = React13.useRef(false);
|
|
18032
|
+
React13.useEffect(() => {
|
|
18013
18033
|
const video = videoRef.current;
|
|
18014
18034
|
if (video && isReady) {
|
|
18015
18035
|
const updateDimensions = () => {
|
|
@@ -18023,7 +18043,7 @@ function WebcamModal({
|
|
|
18023
18043
|
return () => video.removeEventListener("resize", updateDimensions);
|
|
18024
18044
|
}
|
|
18025
18045
|
}, [isReady, videoRef]);
|
|
18026
|
-
|
|
18046
|
+
React13.useEffect(() => {
|
|
18027
18047
|
if (open && permission !== "denied" && permission !== "unavailable") {
|
|
18028
18048
|
if (!hasStartedRef.current) {
|
|
18029
18049
|
hasStartedRef.current = true;
|
|
@@ -18042,7 +18062,7 @@ function WebcamModal({
|
|
|
18042
18062
|
});
|
|
18043
18063
|
}
|
|
18044
18064
|
}, [open, permission]);
|
|
18045
|
-
|
|
18065
|
+
React13.useEffect(() => {
|
|
18046
18066
|
if (isReady && autoDetectEnabled && !capturedFile) {
|
|
18047
18067
|
detection.startDetection();
|
|
18048
18068
|
}
|
|
@@ -18050,7 +18070,7 @@ function WebcamModal({
|
|
|
18050
18070
|
detection.stopDetection();
|
|
18051
18071
|
};
|
|
18052
18072
|
}, [isReady, autoDetectEnabled, capturedFile]);
|
|
18053
|
-
const handleCapture =
|
|
18073
|
+
const handleCapture = React13.useCallback(() => {
|
|
18054
18074
|
const file = capturePhoto();
|
|
18055
18075
|
if (file) {
|
|
18056
18076
|
setCapturedFile(file);
|
|
@@ -18058,7 +18078,7 @@ function WebcamModal({
|
|
|
18058
18078
|
stopCamera();
|
|
18059
18079
|
}
|
|
18060
18080
|
}, [capturePhoto, stopCamera]);
|
|
18061
|
-
const handleRetake =
|
|
18081
|
+
const handleRetake = React13.useCallback(() => {
|
|
18062
18082
|
if (previewUrl) {
|
|
18063
18083
|
URL.revokeObjectURL(previewUrl);
|
|
18064
18084
|
}
|
|
@@ -18067,13 +18087,13 @@ function WebcamModal({
|
|
|
18067
18087
|
detection.resetDetection();
|
|
18068
18088
|
startCamera();
|
|
18069
18089
|
}, [previewUrl, startCamera, detection]);
|
|
18070
|
-
const handleConfirm =
|
|
18090
|
+
const handleConfirm = React13.useCallback(() => {
|
|
18071
18091
|
if (capturedFile) {
|
|
18072
18092
|
onCapture(capturedFile);
|
|
18073
18093
|
onOpenChange(false);
|
|
18074
18094
|
}
|
|
18075
18095
|
}, [capturedFile, onCapture, onOpenChange]);
|
|
18076
|
-
const handleClose =
|
|
18096
|
+
const handleClose = React13.useCallback(() => {
|
|
18077
18097
|
stopCamera();
|
|
18078
18098
|
detection.stopDetection();
|
|
18079
18099
|
if (previewUrl) {
|
|
@@ -18225,13 +18245,13 @@ function useFileUpload({
|
|
|
18225
18245
|
multiple = false,
|
|
18226
18246
|
onValidationError
|
|
18227
18247
|
} = {}) {
|
|
18228
|
-
const [files, setFiles] =
|
|
18229
|
-
|
|
18248
|
+
const [files, setFiles] = React13.useState([]);
|
|
18249
|
+
React13.useEffect(() => {
|
|
18230
18250
|
return () => {
|
|
18231
18251
|
files.forEach((f) => URL.revokeObjectURL(f.previewUrl));
|
|
18232
18252
|
};
|
|
18233
18253
|
}, []);
|
|
18234
|
-
const addFiles =
|
|
18254
|
+
const addFiles = React13.useCallback(
|
|
18235
18255
|
(fileList, source = "upload") => {
|
|
18236
18256
|
const newFiles = [];
|
|
18237
18257
|
const errors = [];
|
|
@@ -18263,7 +18283,7 @@ function useFileUpload({
|
|
|
18263
18283
|
},
|
|
18264
18284
|
[acceptedFileTypes, maxFileSizeMb, multiple, onValidationError]
|
|
18265
18285
|
);
|
|
18266
|
-
const addFile =
|
|
18286
|
+
const addFile = React13.useCallback(
|
|
18267
18287
|
(file, source = "upload") => {
|
|
18268
18288
|
const dataTransfer = new DataTransfer();
|
|
18269
18289
|
dataTransfer.items.add(file);
|
|
@@ -18271,7 +18291,7 @@ function useFileUpload({
|
|
|
18271
18291
|
},
|
|
18272
18292
|
[addFiles]
|
|
18273
18293
|
);
|
|
18274
|
-
const removeFile =
|
|
18294
|
+
const removeFile = React13.useCallback((id) => {
|
|
18275
18295
|
setFiles((prev) => {
|
|
18276
18296
|
const fileToRemove = prev.find((f) => f.id === id);
|
|
18277
18297
|
if (fileToRemove) {
|
|
@@ -18280,13 +18300,13 @@ function useFileUpload({
|
|
|
18280
18300
|
return prev.filter((f) => f.id !== id);
|
|
18281
18301
|
});
|
|
18282
18302
|
}, []);
|
|
18283
|
-
const clearFiles =
|
|
18303
|
+
const clearFiles = React13.useCallback(() => {
|
|
18284
18304
|
setFiles((prev) => {
|
|
18285
18305
|
prev.forEach((f) => URL.revokeObjectURL(f.previewUrl));
|
|
18286
18306
|
return [];
|
|
18287
18307
|
});
|
|
18288
18308
|
}, []);
|
|
18289
|
-
const getFiles =
|
|
18309
|
+
const getFiles = React13.useCallback(() => {
|
|
18290
18310
|
return files.map((f) => f.file);
|
|
18291
18311
|
}, [files]);
|
|
18292
18312
|
return {
|
|
@@ -18314,12 +18334,12 @@ function DocumentScanner({
|
|
|
18314
18334
|
onValidationError,
|
|
18315
18335
|
onStateChange
|
|
18316
18336
|
}) {
|
|
18317
|
-
const [state, setState] =
|
|
18318
|
-
const [error, setError] =
|
|
18319
|
-
const [isWebcamOpen, setIsWebcamOpen] =
|
|
18320
|
-
const [validationErrors, setValidationErrors] =
|
|
18337
|
+
const [state, setState] = React13.useState("idle");
|
|
18338
|
+
const [error, setError] = React13.useState(null);
|
|
18339
|
+
const [isWebcamOpen, setIsWebcamOpen] = React13.useState(false);
|
|
18340
|
+
const [validationErrors, setValidationErrors] = React13.useState([]);
|
|
18321
18341
|
const isMobile = useIsMobile();
|
|
18322
|
-
const cameraInputRef =
|
|
18342
|
+
const cameraInputRef = React13.useRef(null);
|
|
18323
18343
|
const {
|
|
18324
18344
|
files,
|
|
18325
18345
|
addFiles,
|
|
@@ -18337,17 +18357,17 @@ function DocumentScanner({
|
|
|
18337
18357
|
onValidationError?.(errors);
|
|
18338
18358
|
}
|
|
18339
18359
|
});
|
|
18340
|
-
|
|
18360
|
+
React13.useEffect(() => {
|
|
18341
18361
|
onStateChange?.(state);
|
|
18342
18362
|
}, [state, onStateChange]);
|
|
18343
|
-
|
|
18363
|
+
React13.useEffect(() => {
|
|
18344
18364
|
if (hasFiles && state === "idle") {
|
|
18345
18365
|
setState("preview");
|
|
18346
18366
|
} else if (!hasFiles && state === "preview") {
|
|
18347
18367
|
setState("idle");
|
|
18348
18368
|
}
|
|
18349
18369
|
}, [hasFiles, state]);
|
|
18350
|
-
const handleFilesSelected =
|
|
18370
|
+
const handleFilesSelected = React13.useCallback(
|
|
18351
18371
|
(fileList) => {
|
|
18352
18372
|
setError(null);
|
|
18353
18373
|
setValidationErrors([]);
|
|
@@ -18355,10 +18375,10 @@ function DocumentScanner({
|
|
|
18355
18375
|
},
|
|
18356
18376
|
[addFiles]
|
|
18357
18377
|
);
|
|
18358
|
-
const handleCameraCapture =
|
|
18378
|
+
const handleCameraCapture = React13.useCallback(() => {
|
|
18359
18379
|
cameraInputRef.current?.click();
|
|
18360
18380
|
}, []);
|
|
18361
|
-
const handleCameraInputChange =
|
|
18381
|
+
const handleCameraInputChange = React13.useCallback(
|
|
18362
18382
|
(e) => {
|
|
18363
18383
|
if (e.target.files && e.target.files.length > 0) {
|
|
18364
18384
|
setError(null);
|
|
@@ -18369,7 +18389,7 @@ function DocumentScanner({
|
|
|
18369
18389
|
},
|
|
18370
18390
|
[addFiles]
|
|
18371
18391
|
);
|
|
18372
|
-
const handleWebcamCapture =
|
|
18392
|
+
const handleWebcamCapture = React13.useCallback(
|
|
18373
18393
|
(file) => {
|
|
18374
18394
|
setError(null);
|
|
18375
18395
|
setValidationErrors([]);
|
|
@@ -18377,7 +18397,7 @@ function DocumentScanner({
|
|
|
18377
18397
|
},
|
|
18378
18398
|
[addFile]
|
|
18379
18399
|
);
|
|
18380
|
-
const handleScan =
|
|
18400
|
+
const handleScan = React13.useCallback(async () => {
|
|
18381
18401
|
if (!hasFiles) return;
|
|
18382
18402
|
try {
|
|
18383
18403
|
setState("processing");
|
|
@@ -18396,11 +18416,11 @@ function DocumentScanner({
|
|
|
18396
18416
|
setError(errorMessage);
|
|
18397
18417
|
}
|
|
18398
18418
|
}, [hasFiles, getFiles, onScan, onResult, clearFiles]);
|
|
18399
|
-
const handleRetry =
|
|
18419
|
+
const handleRetry = React13.useCallback(() => {
|
|
18400
18420
|
setState("preview");
|
|
18401
18421
|
setError(null);
|
|
18402
18422
|
}, []);
|
|
18403
|
-
const handleClearAll =
|
|
18423
|
+
const handleClearAll = React13.useCallback(() => {
|
|
18404
18424
|
clearFiles();
|
|
18405
18425
|
setError(null);
|
|
18406
18426
|
setValidationErrors([]);
|
|
@@ -18692,30 +18712,30 @@ function DockablePanel({
|
|
|
18692
18712
|
container,
|
|
18693
18713
|
className
|
|
18694
18714
|
}) {
|
|
18695
|
-
const panelRef =
|
|
18696
|
-
const contentRef =
|
|
18697
|
-
const onCloseRef =
|
|
18715
|
+
const panelRef = React13.useRef(null);
|
|
18716
|
+
const contentRef = React13.useRef(null);
|
|
18717
|
+
const onCloseRef = React13.useRef(onClose);
|
|
18698
18718
|
onCloseRef.current = onClose;
|
|
18699
|
-
const onModeChangeRef =
|
|
18719
|
+
const onModeChangeRef = React13.useRef(onModeChange);
|
|
18700
18720
|
onModeChangeRef.current = onModeChange;
|
|
18701
|
-
const dirtyRef =
|
|
18721
|
+
const dirtyRef = React13.useRef(dirty);
|
|
18702
18722
|
dirtyRef.current = dirty;
|
|
18703
|
-
const modeRef =
|
|
18723
|
+
const modeRef = React13.useRef(mode);
|
|
18704
18724
|
modeRef.current = mode;
|
|
18705
|
-
const discardRef =
|
|
18725
|
+
const discardRef = React13.useRef(discardMessage);
|
|
18706
18726
|
discardRef.current = discardMessage;
|
|
18707
18727
|
const dockable = Boolean(onModeChange);
|
|
18708
18728
|
const docked = dockable && mode === "docked";
|
|
18709
|
-
const contentId =
|
|
18729
|
+
const contentId = React13.useId();
|
|
18710
18730
|
const [announcement, announce] = useLiveAnnouncement();
|
|
18711
|
-
const requestClose =
|
|
18731
|
+
const requestClose = React13.useCallback(() => {
|
|
18712
18732
|
const view = panelRef.current?.ownerDocument.defaultView;
|
|
18713
18733
|
if (dirtyRef.current && view?.confirm && !view.confirm(discardRef.current ?? `Discard ${title}?`)) {
|
|
18714
18734
|
return;
|
|
18715
18735
|
}
|
|
18716
18736
|
onCloseRef.current();
|
|
18717
18737
|
}, [title]);
|
|
18718
|
-
|
|
18738
|
+
React13.useEffect(() => {
|
|
18719
18739
|
const handleKeyDown = (event) => {
|
|
18720
18740
|
if (event.key !== "Escape") return;
|
|
18721
18741
|
if (modeRef.current === "docked" && !panelRef.current?.contains(event.target)) {
|
|
@@ -18731,7 +18751,7 @@ function DockablePanel({
|
|
|
18731
18751
|
doc.addEventListener("keydown", handleKeyDown);
|
|
18732
18752
|
return () => doc.removeEventListener("keydown", handleKeyDown);
|
|
18733
18753
|
}, [dockable, requestClose]);
|
|
18734
|
-
|
|
18754
|
+
React13.useEffect(() => {
|
|
18735
18755
|
if (!dirty || typeof window === "undefined") return;
|
|
18736
18756
|
const handleBeforeUnload = (event) => {
|
|
18737
18757
|
event.preventDefault();
|
|
@@ -18740,7 +18760,7 @@ function DockablePanel({
|
|
|
18740
18760
|
window.addEventListener("beforeunload", handleBeforeUnload);
|
|
18741
18761
|
return () => window.removeEventListener("beforeunload", handleBeforeUnload);
|
|
18742
18762
|
}, [dirty]);
|
|
18743
|
-
|
|
18763
|
+
React13.useEffect(() => {
|
|
18744
18764
|
const panel2 = panelRef.current;
|
|
18745
18765
|
if (!panel2 || mode !== "full") return;
|
|
18746
18766
|
const root = panel2.closest('[data-slot="dockable-panel-dock"]') ?? panel2;
|
|
@@ -18754,15 +18774,15 @@ function DockablePanel({
|
|
|
18754
18774
|
for (const element of inerted) releaseInert(element);
|
|
18755
18775
|
};
|
|
18756
18776
|
}, [mode]);
|
|
18757
|
-
|
|
18777
|
+
React13.useEffect(() => {
|
|
18758
18778
|
contentRef.current?.toggleAttribute("inert", docked);
|
|
18759
18779
|
}, [docked]);
|
|
18760
|
-
|
|
18780
|
+
React13.useEffect(() => {
|
|
18761
18781
|
if (docked) return;
|
|
18762
18782
|
const target2 = contentRef.current?.querySelector(FOCUSABLE_SELECTOR) ?? panelRef.current;
|
|
18763
18783
|
target2?.focus();
|
|
18764
18784
|
}, [docked]);
|
|
18765
|
-
|
|
18785
|
+
React13.useEffect(() => {
|
|
18766
18786
|
if (!docked) return;
|
|
18767
18787
|
announce(`${title} collapsed to dock`);
|
|
18768
18788
|
panelRef.current?.querySelector('[data-slot="dockable-panel-restore"]')?.focus();
|
|
@@ -18959,10 +18979,10 @@ function useDropzone({
|
|
|
18959
18979
|
multiple = false,
|
|
18960
18980
|
disabled = false
|
|
18961
18981
|
}) {
|
|
18962
|
-
const [isDragging, setIsDragging] =
|
|
18963
|
-
const inputRef =
|
|
18964
|
-
const dragCounter =
|
|
18965
|
-
const handleDragEnter =
|
|
18982
|
+
const [isDragging, setIsDragging] = React13.useState(false);
|
|
18983
|
+
const inputRef = React13.useRef(null);
|
|
18984
|
+
const dragCounter = React13.useRef(0);
|
|
18985
|
+
const handleDragEnter = React13.useCallback(
|
|
18966
18986
|
(e) => {
|
|
18967
18987
|
e.preventDefault();
|
|
18968
18988
|
e.stopPropagation();
|
|
@@ -18974,11 +18994,11 @@ function useDropzone({
|
|
|
18974
18994
|
},
|
|
18975
18995
|
[disabled]
|
|
18976
18996
|
);
|
|
18977
|
-
const handleDragOver =
|
|
18997
|
+
const handleDragOver = React13.useCallback((e) => {
|
|
18978
18998
|
e.preventDefault();
|
|
18979
18999
|
e.stopPropagation();
|
|
18980
19000
|
}, []);
|
|
18981
|
-
const handleDragLeave =
|
|
19001
|
+
const handleDragLeave = React13.useCallback((e) => {
|
|
18982
19002
|
e.preventDefault();
|
|
18983
19003
|
e.stopPropagation();
|
|
18984
19004
|
dragCounter.current--;
|
|
@@ -18986,7 +19006,7 @@ function useDropzone({
|
|
|
18986
19006
|
setIsDragging(false);
|
|
18987
19007
|
}
|
|
18988
19008
|
}, []);
|
|
18989
|
-
const handleDrop =
|
|
19009
|
+
const handleDrop = React13.useCallback(
|
|
18990
19010
|
(e) => {
|
|
18991
19011
|
e.preventDefault();
|
|
18992
19012
|
e.stopPropagation();
|
|
@@ -19000,7 +19020,7 @@ function useDropzone({
|
|
|
19000
19020
|
},
|
|
19001
19021
|
[disabled, multiple, onDrop]
|
|
19002
19022
|
);
|
|
19003
|
-
const handleInputChange =
|
|
19023
|
+
const handleInputChange = React13.useCallback(
|
|
19004
19024
|
(e) => {
|
|
19005
19025
|
const files = e.target.files ? Array.from(e.target.files) : [];
|
|
19006
19026
|
if (files.length > 0) {
|
|
@@ -19010,7 +19030,7 @@ function useDropzone({
|
|
|
19010
19030
|
},
|
|
19011
19031
|
[onDrop]
|
|
19012
19032
|
);
|
|
19013
|
-
const open =
|
|
19033
|
+
const open = React13.useCallback(() => {
|
|
19014
19034
|
if (!disabled) {
|
|
19015
19035
|
inputRef.current?.click();
|
|
19016
19036
|
}
|
|
@@ -19060,7 +19080,7 @@ function ClaimProviderForm({
|
|
|
19060
19080
|
termsUrl = "/terms",
|
|
19061
19081
|
className = ""
|
|
19062
19082
|
}) {
|
|
19063
|
-
const [formData, setFormData] =
|
|
19083
|
+
const [formData, setFormData] = React13.useState({
|
|
19064
19084
|
firstName: "",
|
|
19065
19085
|
lastName: "",
|
|
19066
19086
|
email: "",
|
|
@@ -19363,14 +19383,14 @@ function CreateInvoiceModal({
|
|
|
19363
19383
|
initialStep = 1,
|
|
19364
19384
|
initialEmployerId = ""
|
|
19365
19385
|
}) {
|
|
19366
|
-
const [step, setStep] =
|
|
19367
|
-
const [employerId, setEmployerId] =
|
|
19368
|
-
const [selectedOrders, setSelectedOrders] =
|
|
19386
|
+
const [step, setStep] = React13.useState(initialStep);
|
|
19387
|
+
const [employerId, setEmployerId] = React13.useState(initialEmployerId);
|
|
19388
|
+
const [selectedOrders, setSelectedOrders] = React13.useState(
|
|
19369
19389
|
/* @__PURE__ */ new Set()
|
|
19370
19390
|
);
|
|
19371
|
-
const [dueDate, setDueDate] =
|
|
19372
|
-
const [notes, setNotes] =
|
|
19373
|
-
|
|
19391
|
+
const [dueDate, setDueDate] = React13.useState("");
|
|
19392
|
+
const [notes, setNotes] = React13.useState("");
|
|
19393
|
+
React13.useEffect(() => {
|
|
19374
19394
|
if (!open) {
|
|
19375
19395
|
setStep(initialStep);
|
|
19376
19396
|
setEmployerId(initialEmployerId);
|
|
@@ -19379,7 +19399,7 @@ function CreateInvoiceModal({
|
|
|
19379
19399
|
setNotes("");
|
|
19380
19400
|
}
|
|
19381
19401
|
}, [open, initialStep, initialEmployerId]);
|
|
19382
|
-
|
|
19402
|
+
React13.useEffect(() => {
|
|
19383
19403
|
if (!dueDate && open) {
|
|
19384
19404
|
const date = /* @__PURE__ */ new Date();
|
|
19385
19405
|
date.setDate(date.getDate() + defaultDueDays);
|
|
@@ -19802,14 +19822,14 @@ function CreateReferralModal({
|
|
|
19802
19822
|
errorMessage,
|
|
19803
19823
|
currency = "$"
|
|
19804
19824
|
}) {
|
|
19805
|
-
const [selectedServices, setSelectedServices] =
|
|
19825
|
+
const [selectedServices, setSelectedServices] = React13.useState(
|
|
19806
19826
|
/* @__PURE__ */ new Set()
|
|
19807
19827
|
);
|
|
19808
|
-
const [notes, setNotes] =
|
|
19809
|
-
const [priority, setPriority] =
|
|
19828
|
+
const [notes, setNotes] = React13.useState("");
|
|
19829
|
+
const [priority, setPriority] = React13.useState(
|
|
19810
19830
|
"normal"
|
|
19811
19831
|
);
|
|
19812
|
-
|
|
19832
|
+
React13.useEffect(() => {
|
|
19813
19833
|
if (!open) {
|
|
19814
19834
|
setSelectedServices(/* @__PURE__ */ new Set());
|
|
19815
19835
|
setNotes("");
|
|
@@ -20110,15 +20130,15 @@ function EditUserRoleModal({
|
|
|
20110
20130
|
isSubmitting = false,
|
|
20111
20131
|
errorMessage
|
|
20112
20132
|
}) {
|
|
20113
|
-
const [selectedRoleId, setSelectedRoleId] =
|
|
20133
|
+
const [selectedRoleId, setSelectedRoleId] = React13.useState(
|
|
20114
20134
|
user?.currentRoleId || ""
|
|
20115
20135
|
);
|
|
20116
|
-
|
|
20136
|
+
React13.useEffect(() => {
|
|
20117
20137
|
if (user?.currentRoleId) {
|
|
20118
20138
|
setSelectedRoleId(user.currentRoleId);
|
|
20119
20139
|
}
|
|
20120
20140
|
}, [user?.currentRoleId]);
|
|
20121
|
-
|
|
20141
|
+
React13.useEffect(() => {
|
|
20122
20142
|
if (!open && user?.currentRoleId) {
|
|
20123
20143
|
setSelectedRoleId(user.currentRoleId);
|
|
20124
20144
|
}
|
|
@@ -20289,24 +20309,24 @@ function EmployeeForm({
|
|
|
20289
20309
|
emailRequired = "Email is required",
|
|
20290
20310
|
dobRequired = "Date of birth is required"
|
|
20291
20311
|
} = labels;
|
|
20292
|
-
const [firstName, setFirstName] =
|
|
20293
|
-
const [lastName, setLastName] =
|
|
20294
|
-
const [email, setEmail] =
|
|
20295
|
-
const [dob, setDob] =
|
|
20296
|
-
const [selectedDepartments, setSelectedDepartments] =
|
|
20297
|
-
const [title, setTitle] =
|
|
20298
|
-
const [address, setAddress] =
|
|
20312
|
+
const [firstName, setFirstName] = React13.useState(initialData.firstName ?? "");
|
|
20313
|
+
const [lastName, setLastName] = React13.useState(initialData.lastName ?? "");
|
|
20314
|
+
const [email, setEmail] = React13.useState(initialData.email ?? "");
|
|
20315
|
+
const [dob, setDob] = React13.useState(initialData.dob ?? "");
|
|
20316
|
+
const [selectedDepartments, setSelectedDepartments] = React13.useState(initialData.departments ?? []);
|
|
20317
|
+
const [title, setTitle] = React13.useState(initialData.title ?? "");
|
|
20318
|
+
const [address, setAddress] = React13.useState(
|
|
20299
20319
|
initialData.address ?? {}
|
|
20300
20320
|
);
|
|
20301
|
-
const [phones, setPhones] =
|
|
20321
|
+
const [phones, setPhones] = React13.useState(
|
|
20302
20322
|
initialData.phones ?? [{ number: "", type: "cell" }]
|
|
20303
20323
|
);
|
|
20304
|
-
const [isActive, setIsActive] =
|
|
20305
|
-
const [additionalInfo, setAdditionalInfo] =
|
|
20324
|
+
const [isActive, setIsActive] = React13.useState(initialData.isActive ?? true);
|
|
20325
|
+
const [additionalInfo, setAdditionalInfo] = React13.useState(
|
|
20306
20326
|
initialData.additionalInfo ?? ""
|
|
20307
20327
|
);
|
|
20308
|
-
const [sendInvite, setSendInvite] =
|
|
20309
|
-
const [errors, setErrors] =
|
|
20328
|
+
const [sendInvite, setSendInvite] = React13.useState(false);
|
|
20329
|
+
const [errors, setErrors] = React13.useState({});
|
|
20310
20330
|
const validate = () => {
|
|
20311
20331
|
const newErrors = {};
|
|
20312
20332
|
if (!firstName.trim()) newErrors.firstName = firstNameRequired;
|
|
@@ -20725,8 +20745,8 @@ function EmployeeProfileCard({
|
|
|
20725
20745
|
className,
|
|
20726
20746
|
labels = {}
|
|
20727
20747
|
}) {
|
|
20728
|
-
const [isExpanded, setIsExpanded] =
|
|
20729
|
-
const fileInputRef =
|
|
20748
|
+
const [isExpanded, setIsExpanded] = React13.useState(defaultExpanded);
|
|
20749
|
+
const fileInputRef = React13.useRef(null);
|
|
20730
20750
|
const {
|
|
20731
20751
|
moreDetails = "more details",
|
|
20732
20752
|
lessDetails = "less details",
|
|
@@ -21259,13 +21279,13 @@ function EmployerList({
|
|
|
21259
21279
|
emptyMessage = "No employers linked yet",
|
|
21260
21280
|
className = ""
|
|
21261
21281
|
}) {
|
|
21262
|
-
const [searchQuery, setSearchQuery] =
|
|
21282
|
+
const [searchQuery, setSearchQuery] = React13.useState("");
|
|
21263
21283
|
const handleSearch = (e) => {
|
|
21264
21284
|
const query = e.target.value;
|
|
21265
21285
|
setSearchQuery(query);
|
|
21266
21286
|
onSearch?.(query);
|
|
21267
21287
|
};
|
|
21268
|
-
const filteredEmployers =
|
|
21288
|
+
const filteredEmployers = React13.useMemo(() => {
|
|
21269
21289
|
if (!searchQuery.trim()) return employers;
|
|
21270
21290
|
const q = searchQuery.toLowerCase();
|
|
21271
21291
|
return employers.filter(
|
|
@@ -21914,7 +21934,7 @@ function EmployerServiceModal({
|
|
|
21914
21934
|
isSubmitting = false,
|
|
21915
21935
|
errorMessage
|
|
21916
21936
|
}) {
|
|
21917
|
-
const [config, setConfig] =
|
|
21937
|
+
const [config, setConfig] = React13.useState({
|
|
21918
21938
|
serviceId: service?.id || "",
|
|
21919
21939
|
employerId: employer?.id || "",
|
|
21920
21940
|
customPrice: existingConfig?.customPrice,
|
|
@@ -21926,7 +21946,7 @@ function EmployerServiceModal({
|
|
|
21926
21946
|
notes: existingConfig?.notes,
|
|
21927
21947
|
billingCode: existingConfig?.billingCode
|
|
21928
21948
|
});
|
|
21929
|
-
|
|
21949
|
+
React13.useEffect(() => {
|
|
21930
21950
|
setConfig({
|
|
21931
21951
|
serviceId: service?.id || "",
|
|
21932
21952
|
employerId: employer?.id || "",
|
|
@@ -22803,8 +22823,8 @@ function FileManager({
|
|
|
22803
22823
|
errorMessage,
|
|
22804
22824
|
className = ""
|
|
22805
22825
|
}) {
|
|
22806
|
-
const [isDragging, setIsDragging] =
|
|
22807
|
-
const fileInputRef =
|
|
22826
|
+
const [isDragging, setIsDragging] = React13.useState(false);
|
|
22827
|
+
const fileInputRef = React13.useRef(null);
|
|
22808
22828
|
const hasActions = !!(onPreview || onDownload || onDelete);
|
|
22809
22829
|
const handleDragOver = (e) => {
|
|
22810
22830
|
e.preventDefault();
|
|
@@ -22989,10 +23009,10 @@ function FileRowActionMenu({
|
|
|
22989
23009
|
onDownload,
|
|
22990
23010
|
onDelete
|
|
22991
23011
|
}) {
|
|
22992
|
-
const [open, setOpen] =
|
|
22993
|
-
const menuRef =
|
|
22994
|
-
const buttonRef =
|
|
22995
|
-
|
|
23012
|
+
const [open, setOpen] = React13.useState(false);
|
|
23013
|
+
const menuRef = React13.useRef(null);
|
|
23014
|
+
const buttonRef = React13.useRef(null);
|
|
23015
|
+
React13.useEffect(() => {
|
|
22996
23016
|
if (!open) return;
|
|
22997
23017
|
function handleClick(e) {
|
|
22998
23018
|
if (menuRef.current && !menuRef.current.contains(e.target) && buttonRef.current && !buttonRef.current.contains(e.target)) {
|
|
@@ -23002,7 +23022,7 @@ function FileRowActionMenu({
|
|
|
23002
23022
|
document.addEventListener("mousedown", handleClick);
|
|
23003
23023
|
return () => document.removeEventListener("mousedown", handleClick);
|
|
23004
23024
|
}, [open]);
|
|
23005
|
-
|
|
23025
|
+
React13.useEffect(() => {
|
|
23006
23026
|
if (!open) return;
|
|
23007
23027
|
function handleKey(e) {
|
|
23008
23028
|
if (e.key === "Escape") setOpen(false);
|
|
@@ -23010,8 +23030,8 @@ function FileRowActionMenu({
|
|
|
23010
23030
|
document.addEventListener("keydown", handleKey);
|
|
23011
23031
|
return () => document.removeEventListener("keydown", handleKey);
|
|
23012
23032
|
}, [open]);
|
|
23013
|
-
const [menuPos, setMenuPos] =
|
|
23014
|
-
|
|
23033
|
+
const [menuPos, setMenuPos] = React13.useState(null);
|
|
23034
|
+
React13.useLayoutEffect(() => {
|
|
23015
23035
|
if (!open || !buttonRef.current) return;
|
|
23016
23036
|
function updatePosition() {
|
|
23017
23037
|
if (!buttonRef.current) return;
|
|
@@ -23137,7 +23157,7 @@ function fmtDate(iso) {
|
|
|
23137
23157
|
if (!iso) return null;
|
|
23138
23158
|
return iso.slice(0, 10);
|
|
23139
23159
|
}
|
|
23140
|
-
var HealthSurveillance =
|
|
23160
|
+
var HealthSurveillance = React13.forwardRef(
|
|
23141
23161
|
({
|
|
23142
23162
|
history,
|
|
23143
23163
|
programs,
|
|
@@ -23151,13 +23171,13 @@ var HealthSurveillance = React12.forwardRef(
|
|
|
23151
23171
|
"data-testid": dataTestId,
|
|
23152
23172
|
...props
|
|
23153
23173
|
}, ref) => {
|
|
23154
|
-
const items =
|
|
23174
|
+
const items = React13.useMemo(
|
|
23155
23175
|
() => evaluateDue(history, programs, { enrolledKeys, now }),
|
|
23156
23176
|
[history, programs, enrolledKeys, now]
|
|
23157
23177
|
);
|
|
23158
23178
|
const actionable = items.filter((i) => i.status !== "satisfied");
|
|
23159
23179
|
const done = items.filter((i) => i.status === "satisfied");
|
|
23160
|
-
const historyLabels =
|
|
23180
|
+
const historyLabels = React13.useMemo(() => {
|
|
23161
23181
|
const m = /* @__PURE__ */ new Map();
|
|
23162
23182
|
const scan = (list) => {
|
|
23163
23183
|
for (const e of list ?? []) {
|
|
@@ -23172,9 +23192,9 @@ var HealthSurveillance = React12.forwardRef(
|
|
|
23172
23192
|
}, [history]);
|
|
23173
23193
|
const orderLabel = (key) => orderLabels?.[key] ?? historyLabels.get(key) ?? key;
|
|
23174
23194
|
const programLabel = (key) => programLabels?.[key] ?? key;
|
|
23175
|
-
const [expanded, setExpanded] =
|
|
23176
|
-
const [checked, setChecked] =
|
|
23177
|
-
const completedSet =
|
|
23195
|
+
const [expanded, setExpanded] = React13.useState(null);
|
|
23196
|
+
const [checked, setChecked] = React13.useState(/* @__PURE__ */ new Set());
|
|
23197
|
+
const completedSet = React13.useMemo(() => completedKeys(history), [history]);
|
|
23178
23198
|
const specLevel = (spec, specs) => {
|
|
23179
23199
|
let level = 0;
|
|
23180
23200
|
let cur = spec.after;
|
|
@@ -23361,14 +23381,14 @@ function HelpSupportPanel({
|
|
|
23361
23381
|
successMessage,
|
|
23362
23382
|
className = ""
|
|
23363
23383
|
}) {
|
|
23364
|
-
const [searchTerm, setSearchTerm] =
|
|
23365
|
-
const [expandedFaq, setExpandedFaq] =
|
|
23366
|
-
const [formData, setFormData] =
|
|
23384
|
+
const [searchTerm, setSearchTerm] = React13.useState("");
|
|
23385
|
+
const [expandedFaq, setExpandedFaq] = React13.useState(null);
|
|
23386
|
+
const [formData, setFormData] = React13.useState({
|
|
23367
23387
|
subject: "",
|
|
23368
23388
|
message: "",
|
|
23369
23389
|
email: ""
|
|
23370
23390
|
});
|
|
23371
|
-
const [showSuccess, setShowSuccess] =
|
|
23391
|
+
const [showSuccess, setShowSuccess] = React13.useState(false);
|
|
23372
23392
|
const filteredFaqs = faqs.filter(
|
|
23373
23393
|
(faq) => faq.question.toLowerCase().includes(searchTerm.toLowerCase()) || faq.answer.toLowerCase().includes(searchTerm.toLowerCase())
|
|
23374
23394
|
);
|
|
@@ -23840,7 +23860,7 @@ function HRISProviderSelector({
|
|
|
23840
23860
|
syncPending = "We are still waiting on data from your HRIS Provider. Please check back later.",
|
|
23841
23861
|
supportEmail = "support@bluehive.com"
|
|
23842
23862
|
} = labels;
|
|
23843
|
-
const filteredProviders =
|
|
23863
|
+
const filteredProviders = React13.useMemo(() => {
|
|
23844
23864
|
if (!searchQuery.trim()) return providers;
|
|
23845
23865
|
const query = searchQuery.toLowerCase();
|
|
23846
23866
|
return providers.filter((p) => p.displayName.toLowerCase().includes(query));
|
|
@@ -24127,11 +24147,11 @@ function InventoryManager({
|
|
|
24127
24147
|
isLoading = false,
|
|
24128
24148
|
className = ""
|
|
24129
24149
|
}) {
|
|
24130
|
-
const [updateType, setUpdateType] =
|
|
24150
|
+
const [updateType, setUpdateType] = React13.useState(
|
|
24131
24151
|
"credit"
|
|
24132
24152
|
);
|
|
24133
|
-
const [updateAmount, setUpdateAmount] =
|
|
24134
|
-
const [updateMemo, setUpdateMemo] =
|
|
24153
|
+
const [updateAmount, setUpdateAmount] = React13.useState("");
|
|
24154
|
+
const [updateMemo, setUpdateMemo] = React13.useState("");
|
|
24135
24155
|
const handleSubmit = () => {
|
|
24136
24156
|
if (!updateAmount || !onUpdateSubmit) return;
|
|
24137
24157
|
const amount = parseInt(updateAmount, 10);
|
|
@@ -24197,7 +24217,7 @@ function InventoryManager({
|
|
|
24197
24217
|
/* @__PURE__ */ jsx("th", { className: "text-muted-foreground py-2 text-start text-xs font-medium tracking-wider uppercase", children: "Change" }),
|
|
24198
24218
|
/* @__PURE__ */ jsx("th", { className: "text-muted-foreground py-2 text-end text-xs font-medium tracking-wider uppercase", children: "Quantity" })
|
|
24199
24219
|
] }) }),
|
|
24200
|
-
/* @__PURE__ */ jsx("tbody", { className: "divide-border/50 divide-y", children: logEntries.map((entry) => /* @__PURE__ */ jsxs(
|
|
24220
|
+
/* @__PURE__ */ jsx("tbody", { className: "divide-border/50 divide-y", children: logEntries.map((entry) => /* @__PURE__ */ jsxs(React13.Fragment, { children: [
|
|
24201
24221
|
/* @__PURE__ */ jsxs("tr", { children: [
|
|
24202
24222
|
/* @__PURE__ */ jsx(
|
|
24203
24223
|
"td",
|
|
@@ -24431,12 +24451,12 @@ function InviteUserModal({
|
|
|
24431
24451
|
errorMessage,
|
|
24432
24452
|
successMessage
|
|
24433
24453
|
}) {
|
|
24434
|
-
const [email, setEmail] =
|
|
24435
|
-
const [firstName, setFirstName] =
|
|
24436
|
-
const [lastName, setLastName] =
|
|
24437
|
-
const [roleId, setRoleId] =
|
|
24438
|
-
const [message, setMessage] =
|
|
24439
|
-
|
|
24454
|
+
const [email, setEmail] = React13.useState("");
|
|
24455
|
+
const [firstName, setFirstName] = React13.useState("");
|
|
24456
|
+
const [lastName, setLastName] = React13.useState("");
|
|
24457
|
+
const [roleId, setRoleId] = React13.useState(defaultRoleId || "");
|
|
24458
|
+
const [message, setMessage] = React13.useState("");
|
|
24459
|
+
React13.useEffect(() => {
|
|
24440
24460
|
if (!open) {
|
|
24441
24461
|
setEmail("");
|
|
24442
24462
|
setFirstName("");
|
|
@@ -24676,7 +24696,7 @@ function InvoiceList({
|
|
|
24676
24696
|
currency = "$",
|
|
24677
24697
|
className = ""
|
|
24678
24698
|
}) {
|
|
24679
|
-
const [searchQuery, setSearchQuery] =
|
|
24699
|
+
const [searchQuery, setSearchQuery] = React13.useState("");
|
|
24680
24700
|
const handleSearch = (e) => {
|
|
24681
24701
|
const query = e.target.value;
|
|
24682
24702
|
setSearchQuery(query);
|
|
@@ -24713,7 +24733,7 @@ function InvoiceList({
|
|
|
24713
24733
|
{ value: "overdue", label: "Overdue" },
|
|
24714
24734
|
{ value: "cancelled", label: "Cancelled" }
|
|
24715
24735
|
];
|
|
24716
|
-
const filteredInvoices =
|
|
24736
|
+
const filteredInvoices = React13.useMemo(() => {
|
|
24717
24737
|
let result = invoices;
|
|
24718
24738
|
if (statusFilter !== "all") {
|
|
24719
24739
|
result = result.filter((inv) => inv.status === statusFilter);
|
|
@@ -24726,7 +24746,7 @@ function InvoiceList({
|
|
|
24726
24746
|
}
|
|
24727
24747
|
return result;
|
|
24728
24748
|
}, [invoices, statusFilter, searchQuery]);
|
|
24729
|
-
const totals =
|
|
24749
|
+
const totals = React13.useMemo(() => {
|
|
24730
24750
|
return {
|
|
24731
24751
|
total: filteredInvoices.reduce((sum, inv) => sum + inv.amount, 0),
|
|
24732
24752
|
paid: filteredInvoices.filter((inv) => inv.status === "paid").reduce((sum, inv) => sum + inv.amount, 0),
|
|
@@ -24950,16 +24970,16 @@ function InvoicePaymentPage({
|
|
|
24950
24970
|
showStripeBranding = true,
|
|
24951
24971
|
className = ""
|
|
24952
24972
|
}) {
|
|
24953
|
-
const [paymentMethod, setPaymentMethod] =
|
|
24973
|
+
const [paymentMethod, setPaymentMethod] = React13.useState(
|
|
24954
24974
|
acceptedMethods[0] || "card"
|
|
24955
24975
|
);
|
|
24956
|
-
const [name, setName] =
|
|
24957
|
-
const [email, setEmail] =
|
|
24958
|
-
const [cardNumber, setCardNumber] =
|
|
24959
|
-
const [expiry, setExpiry] =
|
|
24960
|
-
const [cvc, setCvc] =
|
|
24961
|
-
const [routingNumber, setRoutingNumber] =
|
|
24962
|
-
const [accountNumber, setAccountNumber] =
|
|
24976
|
+
const [name, setName] = React13.useState("");
|
|
24977
|
+
const [email, setEmail] = React13.useState("");
|
|
24978
|
+
const [cardNumber, setCardNumber] = React13.useState("");
|
|
24979
|
+
const [expiry, setExpiry] = React13.useState("");
|
|
24980
|
+
const [cvc, setCvc] = React13.useState("");
|
|
24981
|
+
const [routingNumber, setRoutingNumber] = React13.useState("");
|
|
24982
|
+
const [accountNumber, setAccountNumber] = React13.useState("");
|
|
24963
24983
|
const formatCurrency3 = (amount) => {
|
|
24964
24984
|
return `${currency}${amount.toLocaleString(void 0, { minimumFractionDigits: 2, maximumFractionDigits: 2 })}`;
|
|
24965
24985
|
};
|
|
@@ -25764,16 +25784,16 @@ function LanguageSelector({
|
|
|
25764
25784
|
disabled = false,
|
|
25765
25785
|
className
|
|
25766
25786
|
}) {
|
|
25767
|
-
const [isOpen, setIsOpen] =
|
|
25768
|
-
const containerRef =
|
|
25787
|
+
const [isOpen, setIsOpen] = React13.useState(false);
|
|
25788
|
+
const containerRef = React13.useRef(null);
|
|
25769
25789
|
const { anchorRef, floatingRef, style } = useAnchoredPosition({ open: isOpen, matchMinWidth: true, maxHeight: 240 });
|
|
25770
25790
|
const selectedLanguage = languages.find((l) => l.code === value);
|
|
25771
|
-
const outsideRefs =
|
|
25791
|
+
const outsideRefs = React13.useMemo(
|
|
25772
25792
|
() => [containerRef, floatingRef],
|
|
25773
25793
|
[floatingRef]
|
|
25774
25794
|
);
|
|
25775
25795
|
useClickOutside(outsideRefs, () => setIsOpen(false), isOpen);
|
|
25776
|
-
|
|
25796
|
+
React13.useEffect(() => {
|
|
25777
25797
|
const handleEscape = (e) => {
|
|
25778
25798
|
if (e.key === "Escape") setIsOpen(false);
|
|
25779
25799
|
};
|
|
@@ -27189,13 +27209,13 @@ function OrderConfirmationWizard({
|
|
|
27189
27209
|
stepTitles = ["Verify Employee", "Consent & ID", "Confirmation"],
|
|
27190
27210
|
className = ""
|
|
27191
27211
|
}) {
|
|
27192
|
-
const [step, setStep] =
|
|
27193
|
-
const [employeeVerified, setEmployeeVerified] =
|
|
27194
|
-
const [verificationNotes, setVerificationNotes] =
|
|
27195
|
-
const [consentObtained, setConsentObtained] =
|
|
27196
|
-
const [idVerified, setIdVerified] =
|
|
27197
|
-
const [idType, setIdType] =
|
|
27198
|
-
const [confirmationNotes, setConfirmationNotes] =
|
|
27212
|
+
const [step, setStep] = React13.useState(initialStep);
|
|
27213
|
+
const [employeeVerified, setEmployeeVerified] = React13.useState(false);
|
|
27214
|
+
const [verificationNotes, setVerificationNotes] = React13.useState("");
|
|
27215
|
+
const [consentObtained, setConsentObtained] = React13.useState(false);
|
|
27216
|
+
const [idVerified, setIdVerified] = React13.useState(false);
|
|
27217
|
+
const [idType, setIdType] = React13.useState("");
|
|
27218
|
+
const [confirmationNotes, setConfirmationNotes] = React13.useState("");
|
|
27199
27219
|
const handleStepChange = (newStep) => {
|
|
27200
27220
|
setStep(newStep);
|
|
27201
27221
|
onStepChange?.(newStep);
|
|
@@ -27223,7 +27243,7 @@ function OrderConfirmationWizard({
|
|
|
27223
27243
|
const stepNum = index + 1;
|
|
27224
27244
|
const isActive = step === stepNum;
|
|
27225
27245
|
const isComplete = step > stepNum;
|
|
27226
|
-
return /* @__PURE__ */ jsxs(
|
|
27246
|
+
return /* @__PURE__ */ jsxs(React13.Fragment, { children: [
|
|
27227
27247
|
/* @__PURE__ */ jsxs("div", { className: "flex flex-col items-center", children: [
|
|
27228
27248
|
/* @__PURE__ */ jsx(
|
|
27229
27249
|
"div",
|
|
@@ -27808,7 +27828,7 @@ function OrderList({
|
|
|
27808
27828
|
actions,
|
|
27809
27829
|
className
|
|
27810
27830
|
}) {
|
|
27811
|
-
const filteredOrders =
|
|
27831
|
+
const filteredOrders = React13.useMemo(() => {
|
|
27812
27832
|
const activeTabConfig = tabs.find((t) => t.id === activeTab);
|
|
27813
27833
|
if (!activeTabConfig?.statuses || !getOrderStatus) {
|
|
27814
27834
|
return orders;
|
|
@@ -27817,7 +27837,7 @@ function OrderList({
|
|
|
27817
27837
|
(order) => activeTabConfig.statuses.includes(getOrderStatus(order))
|
|
27818
27838
|
);
|
|
27819
27839
|
}, [orders, activeTab, tabs, getOrderStatus]);
|
|
27820
|
-
const tabCounts =
|
|
27840
|
+
const tabCounts = React13.useMemo(() => {
|
|
27821
27841
|
if (!getOrderStatus) return {};
|
|
27822
27842
|
const counts = {};
|
|
27823
27843
|
tabs.forEach((tab) => {
|
|
@@ -28113,15 +28133,15 @@ function BaseOrderEditor({
|
|
|
28113
28133
|
const config = TYPE_CONFIG[type];
|
|
28114
28134
|
const ambientCodeLookup = useCodeLookupConfig();
|
|
28115
28135
|
const effectiveCodeLookup = codeLookup === false ? void 0 : codeLookup ?? ambientCodeLookup ?? void 0;
|
|
28116
|
-
const [draft, setDraft] =
|
|
28136
|
+
const [draft, setDraft] = React13.useState(
|
|
28117
28137
|
() => order ?? {
|
|
28118
28138
|
orderId: newId(),
|
|
28119
28139
|
type,
|
|
28120
28140
|
display: ""
|
|
28121
28141
|
}
|
|
28122
28142
|
);
|
|
28123
|
-
const bodyRef =
|
|
28124
|
-
|
|
28143
|
+
const bodyRef = React13.useRef(null);
|
|
28144
|
+
React13.useEffect(() => {
|
|
28125
28145
|
const input = bodyRef.current?.querySelector("input");
|
|
28126
28146
|
input?.focus();
|
|
28127
28147
|
}, []);
|
|
@@ -28349,7 +28369,7 @@ function OrderLookupForm({
|
|
|
28349
28369
|
welcomeMessage = "Look up your order by entering the information below.",
|
|
28350
28370
|
className = ""
|
|
28351
28371
|
}) {
|
|
28352
|
-
const [formData, setFormData] =
|
|
28372
|
+
const [formData, setFormData] = React13.useState({
|
|
28353
28373
|
orderNumber: "",
|
|
28354
28374
|
dateOfBirth: "",
|
|
28355
28375
|
lastName: ""
|
|
@@ -28883,20 +28903,20 @@ function OverflowMenuItem({
|
|
|
28883
28903
|
function PatientOverflowMenu({
|
|
28884
28904
|
onAction
|
|
28885
28905
|
}) {
|
|
28886
|
-
const [open, setOpen] =
|
|
28887
|
-
const menuRef =
|
|
28906
|
+
const [open, setOpen] = React13.useState(false);
|
|
28907
|
+
const menuRef = React13.useRef(null);
|
|
28888
28908
|
const { anchorRef, floatingRef, style } = useAnchoredPosition({ open, placement: "bottom-end" });
|
|
28889
|
-
const outsideRefs =
|
|
28909
|
+
const outsideRefs = React13.useMemo(
|
|
28890
28910
|
() => [menuRef, floatingRef],
|
|
28891
28911
|
[floatingRef]
|
|
28892
28912
|
);
|
|
28893
28913
|
useClickOutside(
|
|
28894
28914
|
outsideRefs,
|
|
28895
|
-
|
|
28915
|
+
React13.useCallback(() => setOpen(false), []),
|
|
28896
28916
|
open
|
|
28897
28917
|
);
|
|
28898
28918
|
useEscapeKey(
|
|
28899
|
-
|
|
28919
|
+
React13.useCallback(() => setOpen(false), []),
|
|
28900
28920
|
open
|
|
28901
28921
|
);
|
|
28902
28922
|
const handleAction = (action) => {
|
|
@@ -29095,7 +29115,7 @@ function AlertRow({ comments }) {
|
|
|
29095
29115
|
/* @__PURE__ */ jsx("span", { className: "text-foreground text-sm", children: comments.join("; ") })
|
|
29096
29116
|
] });
|
|
29097
29117
|
}
|
|
29098
|
-
var PatientHeader =
|
|
29118
|
+
var PatientHeader = React13.forwardRef(
|
|
29099
29119
|
({
|
|
29100
29120
|
patient,
|
|
29101
29121
|
allergies = [],
|
|
@@ -29125,13 +29145,13 @@ var PatientHeader = React12.forwardRef(
|
|
|
29125
29145
|
const hasComments = showCommentsBanner && comments.length > 0;
|
|
29126
29146
|
const hasProviders = showProviderBanner && !!(patient.attendingProvider || patient.familyProvider);
|
|
29127
29147
|
const hasInfoRows = hasAllergies || hasMedications || hasComments || hasProviders;
|
|
29128
|
-
const [addModalType, setAddModalType] =
|
|
29129
|
-
const [addForm, setAddForm] =
|
|
29148
|
+
const [addModalType, setAddModalType] = React13.useState(null);
|
|
29149
|
+
const [addForm, setAddForm] = React13.useState({});
|
|
29130
29150
|
const addEntityLabel = addModalType ? ADD_ENTITY_LABELS[addModalType] ?? "" : "";
|
|
29131
|
-
const [contactModalOpen, setContactModalOpen] =
|
|
29132
|
-
const [editPatientOpen, setEditPatientOpen] =
|
|
29133
|
-
const [editPatientForm, setEditPatientForm] =
|
|
29134
|
-
const handleOverflowAction =
|
|
29151
|
+
const [contactModalOpen, setContactModalOpen] = React13.useState(false);
|
|
29152
|
+
const [editPatientOpen, setEditPatientOpen] = React13.useState(false);
|
|
29153
|
+
const [editPatientForm, setEditPatientForm] = React13.useState({});
|
|
29154
|
+
const handleOverflowAction = React13.useCallback(
|
|
29135
29155
|
(action) => {
|
|
29136
29156
|
if (action === "contact") {
|
|
29137
29157
|
setContactModalOpen(true);
|
|
@@ -30614,7 +30634,7 @@ function PermissionItem({
|
|
|
30614
30634
|
parentChecked
|
|
30615
30635
|
}) {
|
|
30616
30636
|
const hasChildren = permission.children && permission.children.length > 0;
|
|
30617
|
-
const [isExpanded, setIsExpanded] =
|
|
30637
|
+
const [isExpanded, setIsExpanded] = React13.useState(true);
|
|
30618
30638
|
const handleChange = (checked) => {
|
|
30619
30639
|
onToggle(permission.id, checked);
|
|
30620
30640
|
if (!checked && hasChildren) {
|
|
@@ -30696,12 +30716,12 @@ function PermissionsEditor({
|
|
|
30696
30716
|
summary = "Summary",
|
|
30697
30717
|
all = "All"
|
|
30698
30718
|
} = labels;
|
|
30699
|
-
const [expandedGroups, setExpandedGroups] =
|
|
30719
|
+
const [expandedGroups, setExpandedGroups] = React13.useState(
|
|
30700
30720
|
() => new Set(
|
|
30701
30721
|
groups.filter((g) => g.defaultExpanded !== false).map((g) => g.id)
|
|
30702
30722
|
)
|
|
30703
30723
|
);
|
|
30704
|
-
const permissionMap =
|
|
30724
|
+
const permissionMap = React13.useMemo(() => {
|
|
30705
30725
|
const map = /* @__PURE__ */ new Map();
|
|
30706
30726
|
const processPermissions = (permissions) => {
|
|
30707
30727
|
permissions.forEach((perm) => {
|
|
@@ -30745,7 +30765,7 @@ function PermissionsEditor({
|
|
|
30745
30765
|
onEmployersChange([...selectedEmployers, employerId]);
|
|
30746
30766
|
}
|
|
30747
30767
|
};
|
|
30748
|
-
const assignedPermissionNames =
|
|
30768
|
+
const assignedPermissionNames = React13.useMemo(() => {
|
|
30749
30769
|
return assignedPermissions.map((id) => permissionMap.get(id)?.name).filter(Boolean);
|
|
30750
30770
|
}, [assignedPermissions, permissionMap]);
|
|
30751
30771
|
return /* @__PURE__ */ jsxs("div", { className: cn("space-y-6", className), "data-slot": "perm-editor", children: [
|
|
@@ -30989,7 +31009,7 @@ function RelevanceControl({
|
|
|
30989
31009
|
}
|
|
30990
31010
|
);
|
|
30991
31011
|
}
|
|
30992
|
-
var PresentingProblems =
|
|
31012
|
+
var PresentingProblems = React13.forwardRef(
|
|
30993
31013
|
({
|
|
30994
31014
|
patientConcerns,
|
|
30995
31015
|
presenting,
|
|
@@ -31005,11 +31025,11 @@ var PresentingProblems = React12.forwardRef(
|
|
|
31005
31025
|
"data-testid": dataTestId,
|
|
31006
31026
|
...props
|
|
31007
31027
|
}, ref) => {
|
|
31008
|
-
const [draft, setDraft] =
|
|
31028
|
+
const [draft, setDraft] = React13.useState("");
|
|
31009
31029
|
const [announcement, setAnnouncement] = useLiveAnnouncement();
|
|
31010
31030
|
const scopeMeta = SCOPE_META[scope];
|
|
31011
31031
|
const ScopeIcon = scopeMeta.icon;
|
|
31012
|
-
const relevanceById =
|
|
31032
|
+
const relevanceById = React13.useMemo(
|
|
31013
31033
|
() => new Map(presenting.map((p) => [p.concernId, p.relevance])),
|
|
31014
31034
|
[presenting]
|
|
31015
31035
|
);
|
|
@@ -31468,7 +31488,7 @@ var logoContainerVariants = cva(
|
|
|
31468
31488
|
}
|
|
31469
31489
|
);
|
|
31470
31490
|
var ProviderLogo = ({ logoURL, name, variant }) => {
|
|
31471
|
-
const [hasError, setHasError] =
|
|
31491
|
+
const [hasError, setHasError] = React13.useState(false);
|
|
31472
31492
|
if (!logoURL || hasError) {
|
|
31473
31493
|
return /* @__PURE__ */ jsx(
|
|
31474
31494
|
"div",
|
|
@@ -31603,7 +31623,7 @@ function formatAddressSingleLine2(address) {
|
|
|
31603
31623
|
parts.push(`${address.city}, ${address.state} ${address.postalCode}`);
|
|
31604
31624
|
return parts.join(", ");
|
|
31605
31625
|
}
|
|
31606
|
-
var ProviderCard =
|
|
31626
|
+
var ProviderCard = React13.forwardRef(
|
|
31607
31627
|
({
|
|
31608
31628
|
provider,
|
|
31609
31629
|
variant = "compact",
|
|
@@ -32088,7 +32108,7 @@ function ProviderLogo2({
|
|
|
32088
32108
|
size = "md",
|
|
32089
32109
|
className
|
|
32090
32110
|
}) {
|
|
32091
|
-
const [hasError, setHasError] =
|
|
32111
|
+
const [hasError, setHasError] = React13.useState(false);
|
|
32092
32112
|
const initials = name.split(" ").map((word) => word[0]).join("").toUpperCase().slice(0, 2);
|
|
32093
32113
|
if (!src || hasError) {
|
|
32094
32114
|
return /* @__PURE__ */ jsx(
|
|
@@ -32526,7 +32546,7 @@ function ProviderDetailHeaderSkeleton({
|
|
|
32526
32546
|
/* @__PURE__ */ jsx("div", { className: "h-3 w-12 rounded bg-gray-200 dark:bg-gray-700" })
|
|
32527
32547
|
] }, i)) }),
|
|
32528
32548
|
/* @__PURE__ */ jsxs("div", { className: "container mx-auto px-4 py-6", children: [
|
|
32529
|
-
/* @__PURE__ */ jsx("div", { className: "mb-4 hidden items-center gap-2 sm:flex", children: [1, 2, 3, 4].map((i) => /* @__PURE__ */ jsxs(
|
|
32549
|
+
/* @__PURE__ */ jsx("div", { className: "mb-4 hidden items-center gap-2 sm:flex", children: [1, 2, 3, 4].map((i) => /* @__PURE__ */ jsxs(React13.Fragment, { children: [
|
|
32530
32550
|
i > 1 && /* @__PURE__ */ jsx("div", { className: "h-4 w-4 rounded-full bg-gray-200 dark:bg-gray-700" }),
|
|
32531
32551
|
/* @__PURE__ */ jsx("div", { className: "h-4 w-16 rounded bg-gray-200 dark:bg-gray-700" })
|
|
32532
32552
|
] }, i)) }),
|
|
@@ -33452,7 +33472,7 @@ var SearchResultsMessage = ({
|
|
|
33452
33472
|
}
|
|
33453
33473
|
);
|
|
33454
33474
|
};
|
|
33455
|
-
var ProviderSearchBar =
|
|
33475
|
+
var ProviderSearchBar = React13.forwardRef(
|
|
33456
33476
|
({
|
|
33457
33477
|
onSearch,
|
|
33458
33478
|
onGeolocate,
|
|
@@ -33473,10 +33493,10 @@ var ProviderSearchBar = React12.forwardRef(
|
|
|
33473
33493
|
className,
|
|
33474
33494
|
...props
|
|
33475
33495
|
}, ref) => {
|
|
33476
|
-
const [internalValue, setInternalValue] =
|
|
33496
|
+
const [internalValue, setInternalValue] = React13.useState(
|
|
33477
33497
|
defaultValue || ""
|
|
33478
33498
|
);
|
|
33479
|
-
const [validationError, setValidationError] =
|
|
33499
|
+
const [validationError, setValidationError] = React13.useState(
|
|
33480
33500
|
null
|
|
33481
33501
|
);
|
|
33482
33502
|
const zipValue = value ?? internalValue;
|
|
@@ -33756,7 +33776,7 @@ function XMarkIcon({ className }) {
|
|
|
33756
33776
|
);
|
|
33757
33777
|
}
|
|
33758
33778
|
function InputField({ label, icon, className, id, ...props }) {
|
|
33759
|
-
const generatedId =
|
|
33779
|
+
const generatedId = React13.useId();
|
|
33760
33780
|
const inputId = id || generatedId;
|
|
33761
33781
|
return /* @__PURE__ */ jsxs("div", { className: "relative", children: [
|
|
33762
33782
|
label && /* @__PURE__ */ jsx("label", { htmlFor: inputId, className: labelVariants2(), children: label }),
|
|
@@ -33780,7 +33800,7 @@ function SelectField({
|
|
|
33780
33800
|
id,
|
|
33781
33801
|
...props
|
|
33782
33802
|
}) {
|
|
33783
|
-
const generatedId =
|
|
33803
|
+
const generatedId = React13.useId();
|
|
33784
33804
|
const selectId = id || generatedId;
|
|
33785
33805
|
return /* @__PURE__ */ jsxs("div", { children: [
|
|
33786
33806
|
label && /* @__PURE__ */ jsx("label", { htmlFor: selectId, className: labelVariants2(), children: label }),
|
|
@@ -33833,25 +33853,25 @@ function ServiceMultiSelect({
|
|
|
33833
33853
|
disabled = false,
|
|
33834
33854
|
showCounts = false
|
|
33835
33855
|
}) {
|
|
33836
|
-
const [isOpen, setIsOpen] =
|
|
33837
|
-
const [searchTerm, setSearchTerm] =
|
|
33838
|
-
const containerRef =
|
|
33839
|
-
const inputRef =
|
|
33840
|
-
const listboxId =
|
|
33856
|
+
const [isOpen, setIsOpen] = React13.useState(false);
|
|
33857
|
+
const [searchTerm, setSearchTerm] = React13.useState("");
|
|
33858
|
+
const containerRef = React13.useRef(null);
|
|
33859
|
+
const inputRef = React13.useRef(null);
|
|
33860
|
+
const listboxId = React13.useId();
|
|
33841
33861
|
const { anchorRef, floatingRef, style } = useAnchoredPosition({ open: isOpen, matchWidth: true, maxHeight: 240 });
|
|
33842
|
-
const outsideRefs =
|
|
33862
|
+
const outsideRefs = React13.useMemo(
|
|
33843
33863
|
() => [containerRef, floatingRef],
|
|
33844
33864
|
[floatingRef]
|
|
33845
33865
|
);
|
|
33846
33866
|
useClickOutside(outsideRefs, () => setIsOpen(false), isOpen);
|
|
33847
|
-
const filteredServices =
|
|
33867
|
+
const filteredServices = React13.useMemo(() => {
|
|
33848
33868
|
if (!searchTerm) return services;
|
|
33849
33869
|
const lowerSearch = searchTerm.toLowerCase();
|
|
33850
33870
|
return services.filter(
|
|
33851
33871
|
(service) => service.label.toLowerCase().includes(lowerSearch) || service.category?.toLowerCase().includes(lowerSearch)
|
|
33852
33872
|
);
|
|
33853
33873
|
}, [services, searchTerm]);
|
|
33854
|
-
const groupedServices =
|
|
33874
|
+
const groupedServices = React13.useMemo(() => {
|
|
33855
33875
|
const groups = {};
|
|
33856
33876
|
filteredServices.forEach((service) => {
|
|
33857
33877
|
const category = service.category || "Other";
|
|
@@ -33860,7 +33880,7 @@ function ServiceMultiSelect({
|
|
|
33860
33880
|
});
|
|
33861
33881
|
return groups;
|
|
33862
33882
|
}, [filteredServices]);
|
|
33863
|
-
const selectedServiceObjects =
|
|
33883
|
+
const selectedServiceObjects = React13.useMemo(
|
|
33864
33884
|
() => services.filter((s) => selectedServices.includes(s.value)),
|
|
33865
33885
|
[services, selectedServices]
|
|
33866
33886
|
);
|
|
@@ -34376,16 +34396,16 @@ function ProviderSelector({
|
|
|
34376
34396
|
size = "md",
|
|
34377
34397
|
className
|
|
34378
34398
|
}) {
|
|
34379
|
-
const [isOpen, setIsOpen] =
|
|
34380
|
-
const [searchQuery, setSearchQuery] =
|
|
34381
|
-
const containerRef =
|
|
34399
|
+
const [isOpen, setIsOpen] = React13.useState(false);
|
|
34400
|
+
const [searchQuery, setSearchQuery] = React13.useState("");
|
|
34401
|
+
const containerRef = React13.useRef(null);
|
|
34382
34402
|
const { anchorRef, floatingRef, style } = useAnchoredPosition({ open: isOpen, matchWidth: true });
|
|
34383
|
-
const outsideRefs =
|
|
34403
|
+
const outsideRefs = React13.useMemo(
|
|
34384
34404
|
() => [containerRef, floatingRef],
|
|
34385
34405
|
[floatingRef]
|
|
34386
34406
|
);
|
|
34387
34407
|
useClickOutside(outsideRefs, () => setIsOpen(false), isOpen);
|
|
34388
|
-
|
|
34408
|
+
React13.useEffect(() => {
|
|
34389
34409
|
function handleEscape(event) {
|
|
34390
34410
|
if (event.key === "Escape") {
|
|
34391
34411
|
setIsOpen(false);
|
|
@@ -34394,12 +34414,12 @@ function ProviderSelector({
|
|
|
34394
34414
|
document.addEventListener("keydown", handleEscape);
|
|
34395
34415
|
return () => document.removeEventListener("keydown", handleEscape);
|
|
34396
34416
|
}, []);
|
|
34397
|
-
|
|
34417
|
+
React13.useEffect(() => {
|
|
34398
34418
|
if (!isOpen) {
|
|
34399
34419
|
setSearchQuery("");
|
|
34400
34420
|
}
|
|
34401
34421
|
}, [isOpen]);
|
|
34402
|
-
const filteredProviders =
|
|
34422
|
+
const filteredProviders = React13.useMemo(() => {
|
|
34403
34423
|
if (!searchQuery) return providers;
|
|
34404
34424
|
const query = searchQuery.toLowerCase();
|
|
34405
34425
|
return providers.filter(
|
|
@@ -34697,9 +34717,9 @@ function ProviderSettings({
|
|
|
34697
34717
|
defaultTab = "general",
|
|
34698
34718
|
className = ""
|
|
34699
34719
|
}) {
|
|
34700
|
-
const [settings, setSettings] =
|
|
34701
|
-
const [hasChanges, setHasChanges] =
|
|
34702
|
-
|
|
34720
|
+
const [settings, setSettings] = React13.useState(initialSettings);
|
|
34721
|
+
const [hasChanges, setHasChanges] = React13.useState(false);
|
|
34722
|
+
React13.useEffect(() => {
|
|
34703
34723
|
setSettings(initialSettings);
|
|
34704
34724
|
setHasChanges(false);
|
|
34705
34725
|
}, [initialSettings]);
|
|
@@ -35931,11 +35951,11 @@ function RecurringServiceSetupModal({
|
|
|
35931
35951
|
cancel = "Cancel",
|
|
35932
35952
|
save = "Save"
|
|
35933
35953
|
} = labels;
|
|
35934
|
-
const instanceId =
|
|
35954
|
+
const instanceId = React13.useId();
|
|
35935
35955
|
const providerSelectId = `${instanceId}-provider`;
|
|
35936
35956
|
const serviceSelectId = `${instanceId}-service`;
|
|
35937
35957
|
const occurrenceSelectId = `${instanceId}-occurrence`;
|
|
35938
|
-
const [formData, setFormData] =
|
|
35958
|
+
const [formData, setFormData] = React13.useState(
|
|
35939
35959
|
initialData || {
|
|
35940
35960
|
providerId: "",
|
|
35941
35961
|
serviceId: "",
|
|
@@ -35943,7 +35963,7 @@ function RecurringServiceSetupModal({
|
|
|
35943
35963
|
overrideConsent: false
|
|
35944
35964
|
}
|
|
35945
35965
|
);
|
|
35946
|
-
|
|
35966
|
+
React13.useEffect(() => {
|
|
35947
35967
|
if (initialData) {
|
|
35948
35968
|
setFormData(initialData);
|
|
35949
35969
|
} else {
|
|
@@ -36156,9 +36176,9 @@ function RejectionModal({
|
|
|
36156
36176
|
isSubmitting = false,
|
|
36157
36177
|
variant = "danger"
|
|
36158
36178
|
}) {
|
|
36159
|
-
const [selectedReasonId, setSelectedReasonId] =
|
|
36160
|
-
const [details, setDetails] =
|
|
36161
|
-
|
|
36179
|
+
const [selectedReasonId, setSelectedReasonId] = React13.useState("");
|
|
36180
|
+
const [details, setDetails] = React13.useState("");
|
|
36181
|
+
React13.useEffect(() => {
|
|
36162
36182
|
if (!open) {
|
|
36163
36183
|
setSelectedReasonId("");
|
|
36164
36184
|
setDetails("");
|
|
@@ -36615,7 +36635,7 @@ function ReportDashboard({
|
|
|
36615
36635
|
)
|
|
36616
36636
|
] });
|
|
36617
36637
|
}
|
|
36618
|
-
var ResultsEntryForm =
|
|
36638
|
+
var ResultsEntryForm = React13.forwardRef(function ResultsEntryForm2({
|
|
36619
36639
|
employeeFirstName,
|
|
36620
36640
|
employeeLastName,
|
|
36621
36641
|
initialData = {},
|
|
@@ -36643,30 +36663,30 @@ var ResultsEntryForm = React12.forwardRef(function ResultsEntryForm2({
|
|
|
36643
36663
|
addProviderContact = "Click here to add a provider contact",
|
|
36644
36664
|
pleaseSelectResult = "Please select a result"
|
|
36645
36665
|
} = labels;
|
|
36646
|
-
const [result, setResult] =
|
|
36666
|
+
const [result, setResult] = React13.useState(
|
|
36647
36667
|
initialData.result ?? null
|
|
36648
36668
|
);
|
|
36649
|
-
const [alternateText, setAlternateText] =
|
|
36669
|
+
const [alternateText, setAlternateText] = React13.useState(
|
|
36650
36670
|
initialData.alternateText ?? ""
|
|
36651
36671
|
);
|
|
36652
|
-
const [dateDrawnValue, setDateDrawnValue] =
|
|
36672
|
+
const [dateDrawnValue, setDateDrawnValue] = React13.useState(
|
|
36653
36673
|
initialData.dateDrawn ?? ""
|
|
36654
36674
|
);
|
|
36655
|
-
const [dateCompletedValue, setDateCompletedValue] =
|
|
36675
|
+
const [dateCompletedValue, setDateCompletedValue] = React13.useState(
|
|
36656
36676
|
initialData.dateCompleted ?? ""
|
|
36657
36677
|
);
|
|
36658
|
-
const [recommendations, setRecommendations] =
|
|
36678
|
+
const [recommendations, setRecommendations] = React13.useState(
|
|
36659
36679
|
initialData.recommendations ?? ""
|
|
36660
36680
|
);
|
|
36661
|
-
const [files, setFiles] =
|
|
36662
|
-
const [selectedContacts, setSelectedContacts] =
|
|
36681
|
+
const [files, setFiles] = React13.useState(initialData.files ?? []);
|
|
36682
|
+
const [selectedContacts, setSelectedContacts] = React13.useState(
|
|
36663
36683
|
initialData.providerContacts ?? []
|
|
36664
36684
|
);
|
|
36665
|
-
const [applyToAll, setApplyToAll] =
|
|
36685
|
+
const [applyToAll, setApplyToAll] = React13.useState(
|
|
36666
36686
|
initialData.applyToAllServices ?? false
|
|
36667
36687
|
);
|
|
36668
|
-
const [showError, setShowError] =
|
|
36669
|
-
const fileInputRef =
|
|
36688
|
+
const [showError, setShowError] = React13.useState(false);
|
|
36689
|
+
const fileInputRef = React13.useRef(null);
|
|
36670
36690
|
const handleFileSelect = (e) => {
|
|
36671
36691
|
const selectedFiles = Array.from(e.target.files || []);
|
|
36672
36692
|
setFiles((prev) => [...prev, ...selectedFiles]);
|
|
@@ -36682,7 +36702,7 @@ var ResultsEntryForm = React12.forwardRef(function ResultsEntryForm2({
|
|
|
36682
36702
|
(prev) => prev.includes(contactId) ? prev.filter((id) => id !== contactId) : [...prev, contactId]
|
|
36683
36703
|
);
|
|
36684
36704
|
};
|
|
36685
|
-
const validateAndSubmit =
|
|
36705
|
+
const validateAndSubmit = React13.useCallback(() => {
|
|
36686
36706
|
if (!result) {
|
|
36687
36707
|
setShowError(true);
|
|
36688
36708
|
return;
|
|
@@ -36709,7 +36729,7 @@ var ResultsEntryForm = React12.forwardRef(function ResultsEntryForm2({
|
|
|
36709
36729
|
applyToAll,
|
|
36710
36730
|
onSubmit
|
|
36711
36731
|
]);
|
|
36712
|
-
|
|
36732
|
+
React13.useImperativeHandle(
|
|
36713
36733
|
ref,
|
|
36714
36734
|
() => ({
|
|
36715
36735
|
submit: validateAndSubmit
|
|
@@ -36985,7 +37005,7 @@ function ResultsEntryModal({
|
|
|
36985
37005
|
...props
|
|
36986
37006
|
}) {
|
|
36987
37007
|
const { submit = "Submit", close = "Close" } = labels;
|
|
36988
|
-
const formRef =
|
|
37008
|
+
const formRef = React13.useRef(null);
|
|
36989
37009
|
const employeeName = employeeFirstName || employeeLastName ? `${employeeFirstName ?? ""} ${employeeLastName ?? ""}`.trim() : void 0;
|
|
36990
37010
|
const handleSubmitClick = () => {
|
|
36991
37011
|
formRef.current?.submit();
|
|
@@ -37115,7 +37135,7 @@ function ScheduleCalendar({
|
|
|
37115
37135
|
isLoading = false,
|
|
37116
37136
|
className = ""
|
|
37117
37137
|
}) {
|
|
37118
|
-
const [currentDate, setCurrentDate] =
|
|
37138
|
+
const [currentDate, setCurrentDate] = React13.useState(selectedDate);
|
|
37119
37139
|
const formatTime4 = (date) => {
|
|
37120
37140
|
const d = typeof date === "string" ? new Date(date) : date;
|
|
37121
37141
|
return d.toLocaleTimeString("en-US", {
|
|
@@ -37455,19 +37475,19 @@ function PillSelect({
|
|
|
37455
37475
|
disabled = false,
|
|
37456
37476
|
className
|
|
37457
37477
|
}) {
|
|
37458
|
-
const [internalValue, setInternalValue] =
|
|
37478
|
+
const [internalValue, setInternalValue] = React13.useState(
|
|
37459
37479
|
defaultValue ?? options[0]?.value ?? ""
|
|
37460
37480
|
);
|
|
37461
|
-
const [expanded, setExpanded] =
|
|
37462
|
-
const triggerRef =
|
|
37463
|
-
const menuRef =
|
|
37464
|
-
const selectedOptionRef =
|
|
37465
|
-
const firstEnabledOptionRef =
|
|
37466
|
-
const listboxId =
|
|
37467
|
-
const [menuStyle, setMenuStyle] =
|
|
37481
|
+
const [expanded, setExpanded] = React13.useState(false);
|
|
37482
|
+
const triggerRef = React13.useRef(null);
|
|
37483
|
+
const menuRef = React13.useRef(null);
|
|
37484
|
+
const selectedOptionRef = React13.useRef(null);
|
|
37485
|
+
const firstEnabledOptionRef = React13.useRef(null);
|
|
37486
|
+
const listboxId = React13.useId();
|
|
37487
|
+
const [menuStyle, setMenuStyle] = React13.useState({});
|
|
37468
37488
|
const value = controlledValue !== void 0 ? controlledValue : internalValue;
|
|
37469
37489
|
const selectedOption = options.find((o) => o.value === value);
|
|
37470
|
-
const close =
|
|
37490
|
+
const close = React13.useCallback((restoreFocus = false) => {
|
|
37471
37491
|
setExpanded(false);
|
|
37472
37492
|
if (restoreFocus) {
|
|
37473
37493
|
requestAnimationFrame(
|
|
@@ -37475,7 +37495,7 @@ function PillSelect({
|
|
|
37475
37495
|
);
|
|
37476
37496
|
}
|
|
37477
37497
|
}, []);
|
|
37478
|
-
const updateMenuPosition =
|
|
37498
|
+
const updateMenuPosition = React13.useCallback(() => {
|
|
37479
37499
|
const trigger = triggerRef.current;
|
|
37480
37500
|
if (!trigger) return;
|
|
37481
37501
|
const rect = trigger.getBoundingClientRect();
|
|
@@ -37496,7 +37516,7 @@ function PillSelect({
|
|
|
37496
37516
|
zIndex: 9999
|
|
37497
37517
|
});
|
|
37498
37518
|
}, []);
|
|
37499
|
-
|
|
37519
|
+
React13.useEffect(() => {
|
|
37500
37520
|
if (!expanded) return;
|
|
37501
37521
|
updateMenuPosition();
|
|
37502
37522
|
window.addEventListener("scroll", updateMenuPosition, true);
|
|
@@ -37506,7 +37526,7 @@ function PillSelect({
|
|
|
37506
37526
|
window.removeEventListener("resize", updateMenuPosition);
|
|
37507
37527
|
};
|
|
37508
37528
|
}, [expanded, updateMenuPosition]);
|
|
37509
|
-
|
|
37529
|
+
React13.useEffect(() => {
|
|
37510
37530
|
if (!expanded) return;
|
|
37511
37531
|
const handleClickOutside = (event) => {
|
|
37512
37532
|
const target = event.target;
|
|
@@ -37518,7 +37538,7 @@ function PillSelect({
|
|
|
37518
37538
|
document.addEventListener("mousedown", handleClickOutside);
|
|
37519
37539
|
return () => document.removeEventListener("mousedown", handleClickOutside);
|
|
37520
37540
|
}, [close, expanded]);
|
|
37521
|
-
|
|
37541
|
+
React13.useEffect(() => {
|
|
37522
37542
|
if (!expanded) return;
|
|
37523
37543
|
requestAnimationFrame(() => {
|
|
37524
37544
|
(selectedOptionRef.current ?? firstEnabledOptionRef.current)?.focus({
|
|
@@ -37737,7 +37757,7 @@ function SubCategoryAccordion({
|
|
|
37737
37757
|
onServiceClick,
|
|
37738
37758
|
index
|
|
37739
37759
|
}) {
|
|
37740
|
-
const [isExpanded, setIsExpanded] =
|
|
37760
|
+
const [isExpanded, setIsExpanded] = React13.useState(
|
|
37741
37761
|
subCategory.defaultExpanded ?? false
|
|
37742
37762
|
);
|
|
37743
37763
|
const contentId = `sub-content-${index}`;
|
|
@@ -37804,7 +37824,7 @@ function CategoryAccordionItem({
|
|
|
37804
37824
|
onExpandChange
|
|
37805
37825
|
}) {
|
|
37806
37826
|
const isControlled = expandedCategories !== void 0;
|
|
37807
|
-
const [internalExpanded, setInternalExpanded] =
|
|
37827
|
+
const [internalExpanded, setInternalExpanded] = React13.useState(
|
|
37808
37828
|
category.defaultExpanded ?? false
|
|
37809
37829
|
);
|
|
37810
37830
|
const isExpanded = isControlled ? expandedCategories.includes(category.name) : internalExpanded;
|
|
@@ -37902,7 +37922,7 @@ function ServiceAccordion({
|
|
|
37902
37922
|
className,
|
|
37903
37923
|
"aria-label": ariaLabel = "Service categories"
|
|
37904
37924
|
}) {
|
|
37905
|
-
const [internalExpanded, setInternalExpanded] =
|
|
37925
|
+
const [internalExpanded, setInternalExpanded] = React13.useState([]);
|
|
37906
37926
|
const isControlled = controlledExpanded !== void 0;
|
|
37907
37927
|
const expanded = isControlled ? controlledExpanded : internalExpanded;
|
|
37908
37928
|
const handleExpandChange = (categoryName, isExpanded) => {
|
|
@@ -38194,7 +38214,7 @@ function ServiceBadgeGroup({
|
|
|
38194
38214
|
size = "md",
|
|
38195
38215
|
onShowMore
|
|
38196
38216
|
}) {
|
|
38197
|
-
const badges =
|
|
38217
|
+
const badges = React13.Children.toArray(children);
|
|
38198
38218
|
const visibleBadges = maxVisible ? badges.slice(0, maxVisible) : badges;
|
|
38199
38219
|
const hiddenCount = maxVisible ? badges.length - maxVisible : 0;
|
|
38200
38220
|
return /* @__PURE__ */ jsxs(
|
|
@@ -39047,15 +39067,15 @@ function ServicePicker({
|
|
|
39047
39067
|
fullWidth = false,
|
|
39048
39068
|
className
|
|
39049
39069
|
}) {
|
|
39050
|
-
const [searchQuery, setSearchQuery] =
|
|
39051
|
-
const [expandedGroups, setExpandedGroups] =
|
|
39070
|
+
const [searchQuery, setSearchQuery] = React13.useState("");
|
|
39071
|
+
const [expandedGroups, setExpandedGroups] = React13.useState(
|
|
39052
39072
|
/* @__PURE__ */ new Set()
|
|
39053
39073
|
);
|
|
39054
|
-
const filteredGroups =
|
|
39074
|
+
const filteredGroups = React13.useMemo(
|
|
39055
39075
|
() => filterServices(groups, searchQuery),
|
|
39056
39076
|
[groups, searchQuery]
|
|
39057
39077
|
);
|
|
39058
|
-
const searchResults =
|
|
39078
|
+
const searchResults = React13.useMemo(
|
|
39059
39079
|
() => searchQuery ? flattenServices(filteredGroups) : [],
|
|
39060
39080
|
[filteredGroups, searchQuery]
|
|
39061
39081
|
);
|
|
@@ -39504,16 +39524,16 @@ function ServicePricingManager({
|
|
|
39504
39524
|
categories: _categories = [],
|
|
39505
39525
|
className = ""
|
|
39506
39526
|
}) {
|
|
39507
|
-
const [searchTerm, setSearchTerm] =
|
|
39508
|
-
const [selectedCategory, setSelectedCategory] =
|
|
39527
|
+
const [searchTerm, setSearchTerm] = React13.useState("");
|
|
39528
|
+
const [selectedCategory, setSelectedCategory] = React13.useState(
|
|
39509
39529
|
null
|
|
39510
39530
|
);
|
|
39511
|
-
const [editingService, setEditingService] =
|
|
39512
|
-
const [editPrice, setEditPrice] =
|
|
39513
|
-
const [editEmployerPrice, setEditEmployerPrice] =
|
|
39514
|
-
const [showBulkModal, setShowBulkModal] =
|
|
39515
|
-
const [bulkAdjustment, setBulkAdjustment] =
|
|
39516
|
-
const [bulkAdjustmentType, setBulkAdjustmentType] =
|
|
39531
|
+
const [editingService, setEditingService] = React13.useState(null);
|
|
39532
|
+
const [editPrice, setEditPrice] = React13.useState("");
|
|
39533
|
+
const [editEmployerPrice, setEditEmployerPrice] = React13.useState("");
|
|
39534
|
+
const [showBulkModal, setShowBulkModal] = React13.useState(false);
|
|
39535
|
+
const [bulkAdjustment, setBulkAdjustment] = React13.useState("");
|
|
39536
|
+
const [bulkAdjustmentType, setBulkAdjustmentType] = React13.useState("percent");
|
|
39517
39537
|
const formatCurrency3 = (amount) => {
|
|
39518
39538
|
return new Intl.NumberFormat("en-US", {
|
|
39519
39539
|
style: "currency",
|
|
@@ -39904,7 +39924,7 @@ function ServiceShippingSettings({
|
|
|
39904
39924
|
isSaving = false,
|
|
39905
39925
|
className = ""
|
|
39906
39926
|
}) {
|
|
39907
|
-
const [address, setAddress] =
|
|
39927
|
+
const [address, setAddress] = React13.useState(
|
|
39908
39928
|
defaultAddress || {
|
|
39909
39929
|
name: "",
|
|
39910
39930
|
street1: "",
|
|
@@ -40106,7 +40126,7 @@ function SetupServiceModal({
|
|
|
40106
40126
|
errorMessage,
|
|
40107
40127
|
title = "Add New Service"
|
|
40108
40128
|
}) {
|
|
40109
|
-
const [formData, setFormData] =
|
|
40129
|
+
const [formData, setFormData] = React13.useState({
|
|
40110
40130
|
name: "",
|
|
40111
40131
|
description: "",
|
|
40112
40132
|
price: 0,
|
|
@@ -40116,7 +40136,7 @@ function SetupServiceModal({
|
|
|
40116
40136
|
initialInventory: void 0,
|
|
40117
40137
|
autoAcceptReferrals: false
|
|
40118
40138
|
});
|
|
40119
|
-
|
|
40139
|
+
React13.useEffect(() => {
|
|
40120
40140
|
if (!open) {
|
|
40121
40141
|
setFormData({
|
|
40122
40142
|
name: "",
|
|
@@ -41152,7 +41172,7 @@ function NewsletterForm({
|
|
|
41152
41172
|
isLoading = false,
|
|
41153
41173
|
className
|
|
41154
41174
|
}) {
|
|
41155
|
-
const [email, setEmail] =
|
|
41175
|
+
const [email, setEmail] = React13.useState("");
|
|
41156
41176
|
function handleSubmit(e) {
|
|
41157
41177
|
e.preventDefault();
|
|
41158
41178
|
if (email.trim()) {
|
|
@@ -41277,7 +41297,7 @@ function LegalLinks({
|
|
|
41277
41297
|
{
|
|
41278
41298
|
"data-slot": "site-footer-legal",
|
|
41279
41299
|
className: cn("flex flex-wrap items-center gap-x-4 gap-y-1", className),
|
|
41280
|
-
children: links.map((link, index) => /* @__PURE__ */ jsxs(
|
|
41300
|
+
children: links.map((link, index) => /* @__PURE__ */ jsxs(React13.Fragment, { children: [
|
|
41281
41301
|
index > 0 && /* @__PURE__ */ jsx(
|
|
41282
41302
|
"span",
|
|
41283
41303
|
{
|
|
@@ -41768,9 +41788,9 @@ function UserMenu({
|
|
|
41768
41788
|
menuItems = [],
|
|
41769
41789
|
className
|
|
41770
41790
|
}) {
|
|
41771
|
-
const [isOpen, setIsOpen] =
|
|
41772
|
-
const menuRef =
|
|
41773
|
-
|
|
41791
|
+
const [isOpen, setIsOpen] = React13.useState(false);
|
|
41792
|
+
const menuRef = React13.useRef(null);
|
|
41793
|
+
React13.useEffect(() => {
|
|
41774
41794
|
function handleClickOutside(event) {
|
|
41775
41795
|
if (menuRef.current && !menuRef.current.contains(event.target)) {
|
|
41776
41796
|
setIsOpen(false);
|
|
@@ -42063,7 +42083,7 @@ function SiteHeader({
|
|
|
42063
42083
|
userMenuItems,
|
|
42064
42084
|
className
|
|
42065
42085
|
}) {
|
|
42066
|
-
const [mobileMenuOpen, setMobileMenuOpen] =
|
|
42086
|
+
const [mobileMenuOpen, setMobileMenuOpen] = React13.useState(false);
|
|
42067
42087
|
const colorVariant = variant === "primary" || variant === "transparent" ? "light" : "dark";
|
|
42068
42088
|
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
42069
42089
|
/* @__PURE__ */ jsx("div", { "data-slot": "site-header-spacer", className: "h-16", "aria-hidden": "true" }),
|
|
@@ -42435,29 +42455,29 @@ function SSOConfigForm({
|
|
|
42435
42455
|
delete: deleteLabel = "Delete SSO",
|
|
42436
42456
|
cancel = "Cancel"
|
|
42437
42457
|
} = labels;
|
|
42438
|
-
const [clientDomain, setClientDomain] =
|
|
42458
|
+
const [clientDomain, setClientDomain] = React13.useState(
|
|
42439
42459
|
initialData.clientDomain ?? ""
|
|
42440
42460
|
);
|
|
42441
|
-
const [ssoLoginUrl, setSsoLoginUrl] =
|
|
42461
|
+
const [ssoLoginUrl, setSsoLoginUrl] = React13.useState(
|
|
42442
42462
|
initialData.ssoLoginUrl ?? ""
|
|
42443
42463
|
);
|
|
42444
|
-
const [ssoLogoutUrl, setSsoLogoutUrl] =
|
|
42464
|
+
const [ssoLogoutUrl, setSsoLogoutUrl] = React13.useState(
|
|
42445
42465
|
initialData.ssoLogoutUrl ?? ""
|
|
42446
42466
|
);
|
|
42447
|
-
const [forceReauth, setForceReauth] =
|
|
42467
|
+
const [forceReauth, setForceReauth] = React13.useState(
|
|
42448
42468
|
initialData.forceReauthentication ?? false
|
|
42449
42469
|
);
|
|
42450
|
-
const [idpSigns, setIdpSigns] =
|
|
42470
|
+
const [idpSigns, setIdpSigns] = React13.useState(
|
|
42451
42471
|
initialData.idpSignsRequest ?? false
|
|
42452
42472
|
);
|
|
42453
|
-
const [allowUnencrypted, setAllowUnencrypted] =
|
|
42473
|
+
const [allowUnencrypted, setAllowUnencrypted] = React13.useState(
|
|
42454
42474
|
initialData.allowUnencryptedAssertion ?? false
|
|
42455
42475
|
);
|
|
42456
|
-
const [certificateFile, setCertificateFile] =
|
|
42476
|
+
const [certificateFile, setCertificateFile] = React13.useState(
|
|
42457
42477
|
null
|
|
42458
42478
|
);
|
|
42459
|
-
const fileInputRef =
|
|
42460
|
-
const [errors, setErrors] =
|
|
42479
|
+
const fileInputRef = React13.useRef(null);
|
|
42480
|
+
const [errors, setErrors] = React13.useState({});
|
|
42461
42481
|
const validate = () => {
|
|
42462
42482
|
const newErrors = {};
|
|
42463
42483
|
if (!clientDomain.trim()) {
|
|
@@ -42815,7 +42835,7 @@ function StepIndicator({
|
|
|
42815
42835
|
const status = getStepStatus(index);
|
|
42816
42836
|
const isLast = index === steps.length - 1;
|
|
42817
42837
|
const clickable = isClickable(index);
|
|
42818
|
-
return /* @__PURE__ */ jsxs(
|
|
42838
|
+
return /* @__PURE__ */ jsxs(React13.Fragment, { children: [
|
|
42819
42839
|
/* @__PURE__ */ jsxs("div", { className: `flex flex-row items-center ${sizes.gap}`, children: [
|
|
42820
42840
|
circleButton(step, index, status, clickable),
|
|
42821
42841
|
stepLabel(step, status, false)
|
|
@@ -43032,10 +43052,10 @@ function TableOfContents({
|
|
|
43032
43052
|
scrollSpyOptions,
|
|
43033
43053
|
className
|
|
43034
43054
|
}) {
|
|
43035
|
-
const [discoveredItems, setDiscoveredItems] =
|
|
43055
|
+
const [discoveredItems, setDiscoveredItems] = React13.useState([]);
|
|
43036
43056
|
const flatItems = manualItems ?? discoveredItems;
|
|
43037
43057
|
const contentEl = contentRef?.current ?? null;
|
|
43038
|
-
|
|
43058
|
+
React13.useEffect(() => {
|
|
43039
43059
|
if (manualItems) return;
|
|
43040
43060
|
const container = contentEl ?? document;
|
|
43041
43061
|
let frameId = null;
|
|
@@ -43066,7 +43086,7 @@ function TableOfContents({
|
|
|
43066
43086
|
if (frameId !== null) cancelAnimationFrame(frameId);
|
|
43067
43087
|
};
|
|
43068
43088
|
}, [manualItems, selector, maxDepth, contentEl]);
|
|
43069
|
-
const ids =
|
|
43089
|
+
const ids = React13.useMemo(() => flatItems.map((i) => i.id), [flatItems]);
|
|
43070
43090
|
const isControlled = controlledActiveId !== void 0;
|
|
43071
43091
|
const { activeId: spyActiveId } = useScrollSpy({
|
|
43072
43092
|
ids,
|
|
@@ -43075,12 +43095,12 @@ function TableOfContents({
|
|
|
43075
43095
|
...scrollSpyOptions
|
|
43076
43096
|
});
|
|
43077
43097
|
const activeId = isControlled ? controlledActiveId : spyActiveId;
|
|
43078
|
-
|
|
43098
|
+
React13.useEffect(() => {
|
|
43079
43099
|
if (!isControlled && onActiveChange) {
|
|
43080
43100
|
onActiveChange(spyActiveId);
|
|
43081
43101
|
}
|
|
43082
43102
|
}, [spyActiveId, isControlled, onActiveChange]);
|
|
43083
|
-
const handleClick =
|
|
43103
|
+
const handleClick = React13.useCallback(
|
|
43084
43104
|
(e, id) => {
|
|
43085
43105
|
if (e.button !== 0 || e.metaKey || e.ctrlKey || e.shiftKey || e.altKey) {
|
|
43086
43106
|
return;
|
|
@@ -43101,7 +43121,7 @@ function TableOfContents({
|
|
|
43101
43121
|
},
|
|
43102
43122
|
[contentEl, scrollOffset, smooth]
|
|
43103
43123
|
);
|
|
43104
|
-
const tree =
|
|
43124
|
+
const tree = React13.useMemo(() => nestItems(flatItems), [flatItems]);
|
|
43105
43125
|
if (hideWhenEmpty && tree.length === 0) return null;
|
|
43106
43126
|
return /* @__PURE__ */ jsxs("nav", { "aria-label": "Table of contents", className: cn("text-sm", className), children: [
|
|
43107
43127
|
title && /* @__PURE__ */ jsx("p", { className: "text-foreground mb-3 font-semibold", children: title }),
|
|
@@ -43706,7 +43726,7 @@ function WebChartReportViewer({
|
|
|
43706
43726
|
dateFrom = "From",
|
|
43707
43727
|
dateTo = "To"
|
|
43708
43728
|
} = labels;
|
|
43709
|
-
const [modalOpen, setModalOpen] =
|
|
43729
|
+
const [modalOpen, setModalOpen] = React13.useState(false);
|
|
43710
43730
|
const handleReportClick = (report) => {
|
|
43711
43731
|
onReportSelect?.(report);
|
|
43712
43732
|
setModalOpen(true);
|
|
@@ -43944,7 +43964,7 @@ function ReportTimeRange({
|
|
|
43944
43964
|
],
|
|
43945
43965
|
className
|
|
43946
43966
|
}) {
|
|
43947
|
-
const [preset, setPreset] =
|
|
43967
|
+
const [preset, setPreset] = React13.useState("this-month");
|
|
43948
43968
|
const handlePresetChange = (value) => {
|
|
43949
43969
|
setPreset(value);
|
|
43950
43970
|
const now = /* @__PURE__ */ new Date();
|
|
@@ -44046,7 +44066,7 @@ function isValidUrl(url) {
|
|
|
44046
44066
|
}
|
|
44047
44067
|
}
|
|
44048
44068
|
}
|
|
44049
|
-
var WebsiteInput =
|
|
44069
|
+
var WebsiteInput = React13.forwardRef(
|
|
44050
44070
|
({
|
|
44051
44071
|
value = "",
|
|
44052
44072
|
onChange,
|
|
@@ -44057,7 +44077,7 @@ var WebsiteInput = React12.forwardRef(
|
|
|
44057
44077
|
error,
|
|
44058
44078
|
...props
|
|
44059
44079
|
}, ref) => {
|
|
44060
|
-
const [localError, setLocalError] =
|
|
44080
|
+
const [localError, setLocalError] = React13.useState();
|
|
44061
44081
|
const handleChange = (e) => {
|
|
44062
44082
|
onChange?.(e.target.value);
|
|
44063
44083
|
if (localError) {
|
|
@@ -44139,7 +44159,7 @@ function WebsiteInputGroup({
|
|
|
44139
44159
|
typeLabels,
|
|
44140
44160
|
className
|
|
44141
44161
|
}) {
|
|
44142
|
-
const websites =
|
|
44162
|
+
const websites = React13.useMemo(() => {
|
|
44143
44163
|
if (value.length >= minEntries) return value;
|
|
44144
44164
|
const padding = Array(minEntries - value.length).fill(null).map(() => ({ url: "", type: "website" }));
|
|
44145
44165
|
return [...value, ...padding];
|