@mieweb/ui 0.11.0-dev.7 → 0.11.0-dev.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (65) hide show
  1. package/dist/brands/index.cjs +12 -12
  2. package/dist/brands/index.js +3 -3
  3. package/dist/{chunk-WGXJNCRG.cjs → chunk-2GBVJHWN.cjs} +47 -28
  4. package/dist/{chunk-WGXJNCRG.cjs.map → chunk-2GBVJHWN.cjs.map} +1 -1
  5. package/dist/chunk-3TUULOTW.cjs +333 -0
  6. package/dist/chunk-3TUULOTW.cjs.map +1 -0
  7. package/dist/{chunk-OODVC2UD.cjs → chunk-AWSSWNJY.cjs} +2 -2
  8. package/dist/{chunk-OODVC2UD.cjs.map → chunk-AWSSWNJY.cjs.map} +1 -1
  9. package/dist/{chunk-GJPCWR4C.js → chunk-DAAJ3B2T.js} +47 -29
  10. package/dist/chunk-DAAJ3B2T.js.map +1 -0
  11. package/dist/{chunk-QJ2L5RU6.js → chunk-DSQCYX7L.js} +2 -2
  12. package/dist/{chunk-QJ2L5RU6.js.map → chunk-DSQCYX7L.js.map} +1 -1
  13. package/dist/{chunk-JTSKPDPH.cjs → chunk-HIYQ3M5V.cjs} +4 -3
  14. package/dist/chunk-HIYQ3M5V.cjs.map +1 -0
  15. package/dist/chunk-IZY4CMOO.js +715 -0
  16. package/dist/chunk-IZY4CMOO.js.map +1 -0
  17. package/dist/{chunk-753ENNB6.js → chunk-J3QEMZCH.js} +2 -2
  18. package/dist/{chunk-753ENNB6.js.map → chunk-J3QEMZCH.js.map} +1 -1
  19. package/dist/{chunk-VNWJTCBQ.js → chunk-MQOYDQTF.js} +4 -3
  20. package/dist/chunk-MQOYDQTF.js.map +1 -0
  21. package/dist/{chunk-NKG2UNXE.js → chunk-OZKJYLN6.js} +3 -3
  22. package/dist/{chunk-NKG2UNXE.js.map → chunk-OZKJYLN6.js.map} +1 -1
  23. package/dist/{chunk-C66JR43M.cjs → chunk-Q6QLGCL7.cjs} +9 -9
  24. package/dist/{chunk-C66JR43M.cjs.map → chunk-Q6QLGCL7.cjs.map} +1 -1
  25. package/dist/{chunk-NAH65KPK.cjs → chunk-TOJ56HKQ.cjs} +2 -2
  26. package/dist/{chunk-NAH65KPK.cjs.map → chunk-TOJ56HKQ.cjs.map} +1 -1
  27. package/dist/chunk-TRZLN32I.cjs +740 -0
  28. package/dist/chunk-TRZLN32I.cjs.map +1 -0
  29. package/dist/chunk-XQIQX5OB.js +309 -0
  30. package/dist/chunk-XQIQX5OB.js.map +1 -0
  31. package/dist/components/DictationButton/index.cjs +23 -0
  32. package/dist/components/DictationButton/index.cjs.map +1 -0
  33. package/dist/components/DictationButton/index.d.cts +67 -0
  34. package/dist/components/DictationButton/index.d.ts +67 -0
  35. package/dist/components/DictationButton/index.js +6 -0
  36. package/dist/components/DictationButton/index.js.map +1 -0
  37. package/dist/components/Markdown/index.cjs +10 -10
  38. package/dist/components/Markdown/index.js +2 -2
  39. package/dist/components/RecordButton/index.cjs +4 -4
  40. package/dist/components/RecordButton/index.js +1 -1
  41. package/dist/components/SuperChat/index.cjs +3 -3
  42. package/dist/components/SuperChat/index.d.cts +2 -2
  43. package/dist/components/SuperChat/index.d.ts +2 -2
  44. package/dist/components/SuperChat/index.js +1 -1
  45. package/dist/components/SuperChat/plugins/index.cjs +3 -3
  46. package/dist/components/SuperChat/plugins/index.d.cts +2 -2
  47. package/dist/components/SuperChat/plugins/index.d.ts +2 -2
  48. package/dist/components/SuperChat/plugins/index.js +2 -2
  49. package/dist/index.cjs +363 -899
  50. package/dist/index.cjs.map +1 -1
  51. package/dist/index.d.cts +102 -1
  52. package/dist/index.d.ts +102 -1
  53. package/dist/index.js +124 -730
  54. package/dist/index.js.map +1 -1
  55. package/dist/styles.css +1 -1
  56. package/dist/{types-Cx1FHLq2.d.cts → types-DSWbrVkM.d.cts} +1 -1
  57. package/dist/{types-Cx1FHLq2.d.ts → types-DSWbrVkM.d.ts} +1 -1
  58. package/dist/whisperTranscribe-AV752TZI.cjs +81 -0
  59. package/dist/whisperTranscribe-AV752TZI.cjs.map +1 -0
  60. package/dist/whisperTranscribe-UBNUWXUQ.js +4 -0
  61. package/dist/whisperTranscribe-UBNUWXUQ.js.map +1 -0
  62. package/package.json +1 -1
  63. package/dist/chunk-GJPCWR4C.js.map +0 -1
  64. package/dist/chunk-JTSKPDPH.cjs.map +0 -1
  65. package/dist/chunk-VNWJTCBQ.js.map +0 -1
package/dist/index.js CHANGED
@@ -1,20 +1,24 @@
1
1
  import { getModelBytes } from './chunk-6I7IDZ4A.js';
2
+ import { registerModelServiceWorker, warmWhisper, transcribeSegments, decodeTo16kMono, isOzwellConfigured, askOzwell, subscribeDictationLoad, getDictationLoad, toOzwellMessages, askOzwellStream, transcribeSamples, trimTrailingStopPhrase, stripStopPhrase, transcribeBlob, transcribeServer } from './chunk-IZY4CMOO.js';
3
+ export { askOzwell, askOzwellStream, decodeTo16kMono, endsWithDone, getDictationLoad, getOzwellConfig, isOzwellConfigured, isWhisperLoaded, stripStopPhrase, subscribeDictationLoad, toOzwellMessages, transcribeBlob, transcribeGate, transcribeSamples, transcribeSegments, transcribeServer, trimTrailingStopPhrase, warmStopGate, warmWhisper } from './chunk-IZY4CMOO.js';
2
4
  import { loadWhatPrints, saveWhatPrints, clearWhatPrints } from './chunk-74ENCTIK.js';
3
5
  export { clearVoiceprints, clearWhatPrints, getVoiceprints, loadWhatPrints, saveWhatPrints, setVoiceprints } from './chunk-74ENCTIK.js';
6
+ export { Rating, ReviewCard, defaultRatingLabels, defaultReviewCardLabels } from './chunk-CBBKWRLG.js';
4
7
  export { RecordHeader, defaultRecordHeaderLabels } from './chunk-DXFP53KF.js';
5
8
  export { RecordLayout, defaultRecordLayoutLabels } from './chunk-EGPDT7SM.js';
6
9
  export { TagEditor, defaultTagEditorLabels } from './chunk-DGHS5IVD.js';
7
10
  export { UserPicker, defaultUserPickerLabels } from './chunk-SZSRGUVO.js';
8
- export { brands } from './chunk-753ENNB6.js';
11
+ export { brands } from './chunk-J3QEMZCH.js';
12
+ export { defaultBrand } from './chunk-PSTGFXQG.js';
9
13
  export { enterpriseHealthBrand } from './chunk-Q77TE5DZ.js';
10
14
  export { miewebBrand } from './chunk-NERS5ZT6.js';
11
15
  export { wagglelineBrand } from './chunk-2NTYAALC.js';
12
16
  export { webchartBrand } from './chunk-CW66SO5O.js';
17
+ export { ccmeBrand } from './chunk-SCQRJPSV.js';
13
18
  export { ozwellBrand } from './chunk-5YUBQIC7.js';
14
- export { defaultBrand } from './chunk-PSTGFXQG.js';
15
19
  export { createBrandPreset, generateBrandCSS, generateTailwindTheme } from './chunk-5GOWFNQ6.js';
16
20
  export { bluehiveBrand } from './chunk-PJEL5ZZV.js';
17
- export { ccmeBrand } from './chunk-SCQRJPSV.js';
21
+ import './chunk-GY5SP4ST.js';
18
22
  export { CalendarHeatmap, defaultCalendarHeatmapLabels } from './chunk-EPCUPHEO.js';
19
23
  export { CompletenessMeter, defaultCompletenessMeterLabels, getCompleteness } from './chunk-RLVYWUXG.js';
20
24
  export { FieldHistory, defaultFieldHistoryLabels } from './chunk-6N7NMOSV.js';
@@ -22,7 +26,7 @@ export { LogoUploader, defaultLogoUploaderLabels } from './chunk-WQHBMZSC.js';
22
26
  export { PhiMask, defaultPhiMaskLabels } from './chunk-DHGCLPFZ.js';
23
27
  export { PropertyList, defaultPropertyListLabels } from './chunk-7HUTR6RX.js';
24
28
  export { InlineEdit, defaultInlineEditLabels } from './chunk-M3VPGJMV.js';
25
- export { Rating, ReviewCard, defaultRatingLabels, defaultReviewCardLabels } from './chunk-CBBKWRLG.js';
29
+ export { ViewSet } from './chunk-4RI3CQGE.js';
26
30
  export { TranscriptView, formatTimestampMs } from './chunk-LAEIVOIY.js';
27
31
  export { PlayButton, VideoCard } from './chunk-43K7OQ3E.js';
28
32
  export { VisuallyHidden } from './chunk-H2CIKJQI.js';
@@ -33,36 +37,35 @@ import './chunk-YGS2TRMP.js';
33
37
  export { AssociationList, defaultAssociationListLabels } from './chunk-5HKZR6UG.js';
34
38
  import './chunk-FTEZNCRI.js';
35
39
  import './chunk-Y424YL55.js';
36
- import './chunk-GY5SP4ST.js';
40
+ import { Table, TableHeader, TableRow, TableHead, TableBody, TableCell } from './chunk-5ILCNY74.js';
41
+ export { Table, TableBody, TableCaption, TableCell, TableFooter, TableHead, TableHeader, TableRow } from './chunk-5ILCNY74.js';
37
42
  import { Text } from './chunk-3YSIZ2CK.js';
38
43
  export { SmallMuted, Text, textVariants } from './chunk-3YSIZ2CK.js';
39
44
  export { ThemeProvider, ThemeProviderContext, ThemeToggle, themeToggleIconVariants, themeToggleVariants, useThemeContext } from './chunk-EI4JU5JF.js';
40
45
  export { Toggle, toggleVariants } from './chunk-PTZB2GKL.js';
41
- export { ViewSet } from './chunk-4RI3CQGE.js';
42
46
  export { ViewSwitcher, viewSwitcherVariants } from './chunk-2W73UQ3T.js';
47
+ import { Skeleton } from './chunk-ZIUADGAR.js';
48
+ export { Skeleton, SkeletonCard, SkeletonTable, SkeletonText, skeletonVariants } from './chunk-ZIUADGAR.js';
43
49
  export { SourceTip } from './chunk-KFEN2SRZ.js';
44
50
  export { Sparkline } from './chunk-CG4ZKJLE.js';
45
51
  import { ButtonGroup, SparklesIcon, RefreshIcon, CloseIcon, JumpToBottomButton, AIMessageDisplay } from './chunk-MQ5WJ3NO.js';
46
52
  export { AILogoIcon, AIMessageDisplay, AITypingIndicator, ButtonGroup, ChatBubble, ChevronIcon, CloseIcon, CollapsiblePill, MCPToolCallDisplay, MessageAvatar, RefreshIcon, ResourceLink, SendIcon, SparklesIcon, SpinnerIcon, ToolStatusIcon, getToolIcon } from './chunk-MQ5WJ3NO.js';
47
- import { useTypingEmulation, EmptyState } from './chunk-NKG2UNXE.js';
48
- export { AttachmentPreview, ConversationHeader, ConversationListItem, ConversationListSkeleton, DateSeparator, EmptyState, LightboxModal, LoadMoreButton, MessageBubble, MessageList, MessageStatusIcon, MessageThread, MessagingSplitView, ReadReceiptIndicator, SkeletonMessage, TypingIndicator, bubbleVariants, formatDateLabel, formatFileSize, formatLastSeen, getConversationSubtitle, getConversationTitle, groupMessagesByDate, headerVariants, isSameSenderGroup, useMessageScroll, useMessages, useReadReceipts, useTypingEmulation, useTypingIndicator } from './chunk-NKG2UNXE.js';
49
- import { notifyComposerMigrationOnce, ChatComposer, DEFAULT_MAX_FILE_SIZE, DEFAULT_ACCEPTED_FILE_TYPES } from './chunk-GJPCWR4C.js';
50
- export { AttachmentPicker, AttachmentPreviewItem, CameraButton, ChatComposer, ComposerModelSelector, DragDropZone, generateAttachmentId, getFileType, validateFile } from './chunk-GJPCWR4C.js';
51
- import { Table, TableHeader, TableRow, TableHead, TableBody, TableCell } from './chunk-5ILCNY74.js';
52
- export { Table, TableBody, TableCaption, TableCell, TableFooter, TableHead, TableHeader, TableRow } from './chunk-5ILCNY74.js';
53
+ import { useTypingEmulation, EmptyState } from './chunk-OZKJYLN6.js';
54
+ export { AttachmentPreview, ConversationHeader, ConversationListItem, ConversationListSkeleton, DateSeparator, EmptyState, LightboxModal, LoadMoreButton, MessageBubble, MessageList, MessageStatusIcon, MessageThread, MessagingSplitView, ReadReceiptIndicator, SkeletonMessage, TypingIndicator, bubbleVariants, formatDateLabel, formatFileSize, formatLastSeen, getConversationSubtitle, getConversationTitle, groupMessagesByDate, headerVariants, isSameSenderGroup, useMessageScroll, useMessages, useReadReceipts, useTypingEmulation, useTypingIndicator } from './chunk-OZKJYLN6.js';
55
+ import { notifyComposerMigrationOnce, ChatComposer, DEFAULT_MAX_FILE_SIZE, DEFAULT_ACCEPTED_FILE_TYPES, ComposerSelector } from './chunk-DAAJ3B2T.js';
56
+ export { AttachmentPicker, AttachmentPreviewItem, CameraButton, ChatComposer, ComposerModelSelector, DragDropZone, generateAttachmentId, getFileType, validateFile } from './chunk-DAAJ3B2T.js';
53
57
  export { DateButton, DatePicker, RadioOption, SchedulePicker, TimeButton, TimePicker, dateButtonVariants, radioOptionVariants, timeButtonVariants } from './chunk-23AYDOCH.js';
54
58
  export { ScrollArea, scrollAreaVariants } from './chunk-HS25RPDW.js';
55
59
  export { SectionSpyNav } from './chunk-FIKO4WR6.js';
56
60
  export { AnimatedNumber, SliderCalculator } from './chunk-DT3X3RBM.js';
57
- import { Skeleton } from './chunk-ZIUADGAR.js';
58
- export { Skeleton, SkeletonCard, SkeletonTable, SkeletonText, skeletonVariants } from './chunk-ZIUADGAR.js';
59
61
  export { PhoneInput, PhoneInputGroup } from './chunk-QDNHN7R2.js';
60
62
  import { Progress } from './chunk-P4E3K3ND.js';
61
63
  export { CircularProgress, Progress, circularProgressVariants, progressBarFillVariants, progressBarTrackVariants } from './chunk-P4E3K3ND.js';
62
64
  export { QuickAction, QuickActionGroup, QuickActionIcons, quickActionIconVariants, quickActionVariants } from './chunk-TQDZLRIE.js';
63
65
  export { ReadingProgressBar } from './chunk-WKSUL2ZN.js';
64
- import { RecordButton } from './chunk-VNWJTCBQ.js';
65
- export { RecordButton, formatDuration, recordButtonVariants } from './chunk-VNWJTCBQ.js';
66
+ export { DictationButton, defaultDictationLabels, useDictation } from './chunk-XQIQX5OB.js';
67
+ import { RecordButton } from './chunk-MQOYDQTF.js';
68
+ export { RecordButton, formatDuration, recordButtonVariants } from './chunk-MQOYDQTF.js';
66
69
  export { FillerWordsModal, MediaEditor, SilenceSettingsModal, SpeedMarkerMenu, WordEditorModal } from './chunk-JM4YFLO4.js';
67
70
  export { Slider, sliderRangeVariants, sliderThumbVariants, sliderTrackVariants } from './chunk-V5VPECJI.js';
68
71
  export { MediaFeed } from './chunk-2X54ZLT6.js';
@@ -78,11 +81,11 @@ export { GanttView, defaultGanttLabels } from './chunk-Y4QNLW7W.js';
78
81
  export { GlossaryTooltip } from './chunk-SRMTRD7F.js';
79
82
  export { Kbd, KeyboardShortcutsOverlay } from './chunk-JMAZ2GKT.js';
80
83
  export { ListView, itemVariants as listViewItemVariants } from './chunk-UNFDIBKJ.js';
81
- export { CodeBlock, MarkdownRenderer, highlightCode, useMarkdown } from './chunk-QJ2L5RU6.js';
84
+ export { CodeBlock, MarkdownRenderer, highlightCode, useMarkdown } from './chunk-DSQCYX7L.js';
85
+ export { SurveyBlock } from './chunk-RSJGTWLM.js';
82
86
  export { CsvBlock } from './chunk-P7D7BYFE.js';
83
87
  export { HtmlPreviewBlock } from './chunk-FGLIP6YR.js';
84
88
  export { MermaidBlock } from './chunk-7QW6TU4X.js';
85
- export { SurveyBlock } from './chunk-RSJGTWLM.js';
86
89
  export { FenceBlock } from './chunk-HDY7YQFX.js';
87
90
  export { CopyButton } from './chunk-5QZ73PZC.js';
88
91
  import { CountryDropdownBase } from './chunk-OTIKWEFZ.js';
@@ -185,7 +188,7 @@ import { dateToDisplayFormat, isValidDate, displayFormatToDateString } from './c
185
188
  export { calculateAge, dateToDisplayFormat, displayFormatToDateString, formatDateValue, isDateEmpty, isDateInFuture, isDateInPast, isValidDate, isValidDrivingAge, parseDateValue } from './chunk-RC2YMOMS.js';
186
189
  import { isStorybookDocsMode } from './chunk-VSQF22GL.js';
187
190
  export { isStorybookDocsMode } from './chunk-VSQF22GL.js';
188
- import { Plus, RefreshCw, Pencil, GripVertical, Trash2, AlertCircle, ArrowLeft, Users, FilePlus, CheckCircle, ChevronDown, Clock, FileText, ClipboardList, Stethoscope, Mail, Phone, ClipboardCheck, Eye, Info, Link, ChevronUp, History, StickyNote, ExternalLink, MoreVertical, Send, Scan, TestTube2, Pill, Share, User, Download, ChevronRight, Calendar, Printer, ClipboardPlus, FileCheck, Wheat, Bell, FileHeart, HeartPulse, Paperclip, HelpCircle, MoreHorizontal, AlertTriangle, Upload as Upload$1, Camera, Check as Check$1, X as X$1, ScanLine, Image } from './chunk-BKSPDTX4.js';
191
+ import { AlertTriangle, Loader2, Plus, RefreshCw, Pencil, GripVertical, Trash2, AlertCircle, ArrowLeft, Users, FilePlus, CheckCircle, ChevronDown, Clock, FileText, ClipboardList, Stethoscope, Mail, Phone, ClipboardCheck, Eye, Info, Link, ChevronUp, History, StickyNote, ExternalLink, MoreVertical, Send, Scan, TestTube2, Pill, Share, User, Download, ChevronRight, Calendar, Printer, ClipboardPlus, FileCheck, Wheat, Bell, FileHeart, HeartPulse, Paperclip, HelpCircle, MoreHorizontal, Settings, Upload as Upload$1, Camera, Check as Check$1, X as X$1, ScanLine, Image } from './chunk-BKSPDTX4.js';
189
192
  export { Accessibility as AccessibilityIcon, Activity as ActivityIcon, AlertCircle as AlertCircleIcon, AlertTriangle as AlertTriangleIcon, Wheat as AllergyIcon, WheatOff as AllergyOffIcon, Ambulance as AmbulanceIcon, ArrowLeft as ArrowLeftIcon, ArrowRight as ArrowRightIcon, ArrowUpDown as ArrowUpDownIcon, ArrowUp as ArrowUpIcon, AtSign as AtSignIcon, Baby as BabyIcon, BadgeAlert as BadgeAlertIcon, BadgeCheck as BadgeCheckIcon, BadgeMinus as BadgeMinusIcon, BadgePlus as BadgePlusIcon, BadgeX as BadgeXIcon, Ban as BanIcon, Bandage as BandageIcon, BedDouble as BedDoubleIcon, Bed as BedIcon, BedSingle as BedSingleIcon, Bell as BellIcon, BellOff as BellOffIcon, Biohazard as BiohazardIcon, Bone as BoneIcon, BookOpenCheck as BookOpenCheckIcon, BookOpen as BookOpenIcon, Bookmark as BookmarkIcon, Bot as BotIcon, Brain as BrainIcon, Briefcase as BriefcaseIcon, BriefcaseMedical as BriefcaseMedicalIcon, Building as BuildingIcon, CalendarCheck as CalendarCheckIcon, Calendar as CalendarIcon, Camera as CameraIcon, Cannabis as CannabisIcon, BarChart3 as ChartIcon, CheckCircle as CheckCircleIcon, Check as CheckIcon, ChevronDown as ChevronDownIcon, ChevronLeft as ChevronLeftIcon, ChevronRight as ChevronRightIcon, ChevronUp as ChevronUpIcon, Cigarette as CigaretteIcon, CigaretteOff as CigaretteOffIcon, CircleDotDashed as CircleDotDashedIcon, CircleDot as CircleDotIcon, CircleUser as CircleUserIcon, ClipboardCheck as ClipboardCheckIcon, Clipboard as ClipboardIcon, ClipboardList as ClipboardListIcon, ClipboardPlus as ClipboardPlusIcon, Clock as ClockIcon, Cog as CogIcon, Columns as ColumnsIcon, Copy as CopyIcon, CreditCard as CreditCardIcon, Cross as CrossIcon, Dna as DnaIcon, DollarSign as DollarSignIcon, Download as DownloadIcon, Droplet as DropletIcon, Droplets as DropletsIcon, Ear as EarIcon, ExternalLink as ExternalLinkIcon, Eye as EyeIcon, EyeOff as EyeOffIcon, FileCheck2 as FileCheck2Icon, FileCheck as FileCheckIcon, FileHeart as FileHeartIcon, File as FileIcon, FilePlus2 as FilePlus2Icon, FilePlus as FilePlusIcon, FileText as FileTextIcon, Filter as FilterIcon, Fingerprint as FingerprintIcon, Flag as FlagIcon, FlaskConical as FlaskIcon, FlaskRound as FlaskRoundIcon, Folder as FolderIcon, FolderOpen as FolderOpenIcon, Footprints as FootprintsIcon, Glasses as GlassesIcon, Globe as GlobeIcon, LayoutGrid as GridIcon, GripVertical as GripVerticalIcon, Hand as HandIcon, HandMetal as HandMetalIcon, Hash as HashIcon, Heart as HeartIcon, HeartOff as HeartOffIcon, HeartPulse as HeartPulseIcon, HelpCircle as HelpCircleIcon, History as HistoryIcon, Home as HomeIcon, Hospital as HospitalIcon, Image as ImageIcon, Info as InfoIcon, Key as KeyIcon, Link as LinkIcon, List as ListIcon, Loader2 as LoaderIcon, Lock as LockIcon, LogIn as LogInIcon, LogOut as LogOutIcon, Mail as MailIcon, MapPin as MapPinIcon, Maximize as MaximizeIcon, Menu as MenuIcon, MessageSquare as MessageIcon, Mic as MicIcon, Microscope as MicroscopeIcon, Minimize as MinimizeIcon, Minus as MinusIcon, Monitor as MonitorIcon, Moon as MoonIcon, MoreHorizontal as MoreHorizontalIcon, MoreVertical as MoreVerticalIcon, NotebookPen as NotebookPenIcon, Palette as PaletteIcon, Paperclip as PaperclipIcon, CircleUserRound as PatientIcon, Pencil as PencilIcon, UserRound as PersonIcon, Phone as PhoneIcon, PieChart as PieChartIcon, Pill as PillIcon, Plus as PlusIcon, Printer as PrinterIcon, Radiation as RadiationIcon, Ruler as RulerIcon, Save as SaveIcon, Scale as ScaleIcon, Scaling as ScalingIcon, ScanEye as ScanEyeIcon, Scan as ScanIcon, ScanLine as ScanLineIcon, Search as SearchIcon, Settings as SettingsIcon, Share as ShareIcon, ShieldCheck as ShieldCheckIcon, Shield as ShieldIcon, ShieldPlus as ShieldPlusIcon, Sliders as SlidersIcon, Sparkle as SparkleIcon, Star as StarIcon, Stethoscope as StethoscopeIcon, StickyNote as StickyNoteIcon, Square as StopIcon, Sun as SunIcon, Syringe as SyringeIcon, Table as TableIcon, Tablets as TabletsIcon, Tag as TagIcon, TestTube2 as TestTubeIcon, TestTubes as TestTubesIcon, Thermometer as ThermometerIcon, ThermometerSun as ThermometerSunIcon, ThumbsDown as ThumbsDownIcon, ThumbsUp as ThumbsUpIcon, Timer as TimerIcon, Trash2 as TrashIcon, TrendingDown as TrendingDownIcon, TrendingUp as TrendingUpIcon, Truck as TruckIcon, Unlock as UnlockIcon, Upload as UploadIcon, UserCheck as UserCheckIcon, User as UserIcon, UserMinus as UserMinusIcon, UserPlus as UserPlusIcon, UserRoundCheck as UserRoundCheckIcon, UserRoundMinus as UserRoundMinusIcon, UserRoundPlus as UserRoundPlusIcon, UserRoundX as UserRoundXIcon, Users as UsersIcon, Weight as WeightIcon, Wrench as WrenchIcon, XCircle as XCircleIcon, X2 as XIcon, Zap as ZapIcon } from './chunk-BKSPDTX4.js';
190
193
  import { usePrefersReducedMotion } from './chunk-XDU65GLW.js';
191
194
  export { usePrefersReducedMotion } from './chunk-XDU65GLW.js';
@@ -206,11 +209,11 @@ export { cn, miewebUITwMergeConflicts } from './chunk-TQONQSJO.js';
206
209
  import './chunk-PX6F3LHL.js';
207
210
  import * as React13 from 'react';
208
211
  import React13__default, { createContext, useState, useEffect, useCallback, useMemo, useContext, useRef, useId } from 'react';
209
- import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
212
+ import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
210
213
  import { cva } from 'class-variance-authority';
214
+ import { AudioWaveform, FileUp, X, AlertCircle as AlertCircle$1, Calendar as Calendar$1, ChevronLeft, ChevronRight as ChevronRight$1, ChevronDown as ChevronDown$1, Maximize2, Minimize2, FolderUp, Upload, Edit2, Check, ChevronUp as ChevronUp$1, Phone as Phone$1, Mail as Mail$1, Clock as Clock$1, MapPin, Shield, Building2, SlidersHorizontal, Trash2 as Trash2$1, Pencil as Pencil$1, Plus as Plus$1, ExternalLink as ExternalLink$1, Link as Link$1, AlertTriangle as AlertTriangle$1, RefreshCw as RefreshCw$1 } from 'lucide-react';
211
215
  import * as ReactDOM from 'react-dom';
212
216
  import { createPortal } from 'react-dom';
213
- import { FileUp, X, AlertCircle as AlertCircle$1, Calendar as Calendar$1, ChevronLeft, ChevronRight as ChevronRight$1, ChevronDown as ChevronDown$1, Maximize2, Minimize2, FolderUp, Upload, Edit2, Check, ChevronUp as ChevronUp$1, Phone as Phone$1, Mail as Mail$1, Clock as Clock$1, MapPin, Shield, Building2, SlidersHorizontal, Trash2 as Trash2$1, Pencil as Pencil$1, Plus as Plus$1, ExternalLink as ExternalLink$1, Link as Link$1, AlertTriangle as AlertTriangle$1, RefreshCw as RefreshCw$1 } from 'lucide-react';
214
217
 
215
218
  var SEX_OPTIONS = [
216
219
  { value: "F", label: "Female" },
@@ -2917,6 +2920,91 @@ function HeyOzwellToggle({
2917
2920
  }
2918
2921
  );
2919
2922
  }
2923
+ var defaultHeyOzwellSelectorLabels = {
2924
+ name: "Hey Ozwell",
2925
+ activate: "Activate",
2926
+ activateDescription: 'Listen for "Hey Ozwell"',
2927
+ disable: "Disable",
2928
+ disableDescription: "Wake word off",
2929
+ settings: "Voice settings\u2026",
2930
+ off: "Hey Ozwell is off",
2931
+ loading: "Hey Ozwell is starting",
2932
+ listening: 'Listening for "Hey Ozwell"',
2933
+ error: "Hey Ozwell could not start"
2934
+ };
2935
+ var iconClasses = "h-3.5 w-3.5 shrink-0";
2936
+ var phaseIcons = {
2937
+ off: /* @__PURE__ */ jsx(AudioWaveform, { className: iconClasses, "aria-hidden": "true" }),
2938
+ loading: /* @__PURE__ */ jsx(
2939
+ Loader2,
2940
+ {
2941
+ className: cn(iconClasses, "animate-spin"),
2942
+ "aria-hidden": "true"
2943
+ }
2944
+ ),
2945
+ listening: /* @__PURE__ */ jsx(
2946
+ AudioWaveform,
2947
+ {
2948
+ className: cn(iconClasses, "text-success"),
2949
+ "aria-hidden": "true"
2950
+ }
2951
+ ),
2952
+ error: /* @__PURE__ */ jsx(
2953
+ AlertTriangle,
2954
+ {
2955
+ className: cn(iconClasses, "text-destructive"),
2956
+ "aria-hidden": "true"
2957
+ }
2958
+ )
2959
+ };
2960
+ function HeyOzwellSelector({
2961
+ phase,
2962
+ onChange,
2963
+ onOpenSettings,
2964
+ error,
2965
+ disabled,
2966
+ labels: labelOverrides
2967
+ }) {
2968
+ const labels = { ...defaultHeyOzwellSelectorLabels, ...labelOverrides };
2969
+ const active = phase !== "off";
2970
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
2971
+ /* @__PURE__ */ jsx(
2972
+ ComposerSelector,
2973
+ {
2974
+ options: [
2975
+ {
2976
+ id: "on",
2977
+ label: labels.activate,
2978
+ description: phase === "error" ? error ?? labels.error : labels.activateDescription
2979
+ },
2980
+ {
2981
+ id: "off",
2982
+ label: labels.disable,
2983
+ description: labels.disableDescription
2984
+ }
2985
+ ],
2986
+ value: active ? "on" : "off",
2987
+ onChange: (id) => {
2988
+ const next = id === "on";
2989
+ if (next !== active || phase === "error") onChange(next);
2990
+ },
2991
+ actions: onOpenSettings && [
2992
+ {
2993
+ id: "settings",
2994
+ label: labels.settings,
2995
+ icon: /* @__PURE__ */ jsx(Settings, { className: "h-4 w-4", "aria-hidden": "true" }),
2996
+ onSelect: onOpenSettings
2997
+ }
2998
+ ],
2999
+ label: labels.name,
3000
+ triggerLabel: labels.name,
3001
+ icon: phaseIcons[phase],
3002
+ disabled
3003
+ }
3004
+ ),
3005
+ /* @__PURE__ */ jsx("span", { role: "status", className: "sr-only", children: labels[phase] })
3006
+ ] });
3007
+ }
2920
3008
 
2921
3009
  // src/components/AI/HeyOzwell/modelManifest.ts
2922
3010
  var MODEL_MANIFEST = [
@@ -3128,27 +3216,6 @@ function OzwellSettingsMenu({
3128
3216
  }
3129
3217
  );
3130
3218
  }
3131
-
3132
- // src/components/AI/modelCache.ts
3133
- var registered = /* @__PURE__ */ new Set();
3134
- function registerModelServiceWorker(swUrl = "/ozwell-model-sw.js") {
3135
- if (typeof navigator === "undefined" || !("serviceWorker" in navigator))
3136
- return;
3137
- if (registered.has(swUrl)) return;
3138
- registered.add(swUrl);
3139
- navigator.serviceWorker.register(swUrl).then(
3140
- () => console.log("[modelCache] model service worker registered"),
3141
- (e) => {
3142
- registered.delete(swUrl);
3143
- console.warn(
3144
- "[modelCache] SW registration failed (models will still load, just not cached):",
3145
- e
3146
- );
3147
- }
3148
- );
3149
- }
3150
-
3151
- // src/components/AI/HeyOzwell/WakeWord/useWakeWord.ts
3152
3219
  var DEFAULT_ASSET_BASE = "https://huggingface.co/jlocala/ozwell-voice-assets/resolve/main";
3153
3220
  var DEFAULT_ASSET = `${DEFAULT_ASSET_BASE}/wakeword`;
3154
3221
  var PHRASES = ["hey-ozwell", "ozwell-i'm-done"];
@@ -3427,679 +3494,6 @@ function useWakeWord(opts = {}) {
3427
3494
  }
3428
3495
  };
3429
3496
  }
3430
-
3431
- // src/components/AI/ozwellChat.ts
3432
- var DEFAULT_BASE = "https://api.ozwell.ai";
3433
- var OLLAMA_BASE = "http://localhost:11434";
3434
- var DEFAULTS = {
3435
- model: "gpt-4o-mini",
3436
- system: "You are Ozwell, a concise and helpful clinical assistant. Answer briefly and clearly.",
3437
- temperature: 0.7
3438
- };
3439
- function readWindowGlobal() {
3440
- if (typeof window === "undefined") return {};
3441
- const get = (w) => {
3442
- try {
3443
- return w?.__ozwell;
3444
- } catch {
3445
- return void 0;
3446
- }
3447
- };
3448
- return get(window) || get(window.parent) || get(window.top) || {};
3449
- }
3450
- function sanitizeConfig(o) {
3451
- if (!o || typeof o !== "object") return {};
3452
- const out = {};
3453
- for (const k of Object.keys(o)) {
3454
- if (k === "__proto__" || k === "constructor" || k === "prototype") continue;
3455
- out[k] = o[k];
3456
- }
3457
- return out;
3458
- }
3459
- function readRaw() {
3460
- let stored = {};
3461
- try {
3462
- stored = sanitizeConfig(
3463
- JSON.parse(localStorage.getItem("ozwellConfig") || "{}")
3464
- );
3465
- } catch {
3466
- }
3467
- return { ...stored, ...sanitizeConfig(readWindowGlobal()) };
3468
- }
3469
- function getOzwellConfig() {
3470
- const c = readRaw();
3471
- const apiKey = c.apiKey || "";
3472
- const baseURL = c.baseURL || (apiKey === "ollama" ? OLLAMA_BASE : DEFAULT_BASE);
3473
- return {
3474
- baseURL,
3475
- apiKey,
3476
- model: c.model || DEFAULTS.model,
3477
- system: c.system ?? DEFAULTS.system,
3478
- // Coerce: temperature set via console/localStorage often arrives as a string; a string in the request
3479
- // body can be rejected by OpenAI-compatible servers. Fall back to the default if it's not a real number —
3480
- // and guard the empty/whitespace string explicitly, since Number('') is 0 (a valid-looking temperature)
3481
- // and would silently pin sampling to 0 instead of using the default.
3482
- temperature: c.temperature != null && String(c.temperature).trim() !== "" && Number.isFinite(Number(c.temperature)) ? Number(c.temperature) : DEFAULTS.temperature
3483
- };
3484
- }
3485
- function isOzwellConfigured() {
3486
- return !!getOzwellConfig().apiKey;
3487
- }
3488
- function toOzwellMessages(msgs) {
3489
- const out = [];
3490
- for (const m of msgs) {
3491
- if (m.role !== "user" && m.role !== "assistant") continue;
3492
- const text = (m.content || []).map((c) => c.text || "").join(" ").trim();
3493
- if (text) out.push({ role: m.role, content: text });
3494
- }
3495
- return out;
3496
- }
3497
- function withSystem(messages, system) {
3498
- if (!system || messages.some((m) => m.role === "system")) return messages;
3499
- return [{ role: "system", content: system }, ...messages];
3500
- }
3501
- function buildRequest(messages, cfg, stream) {
3502
- const msgs = typeof messages === "string" ? [{ role: "user", content: messages }] : messages;
3503
- return {
3504
- url: `${cfg.baseURL.replace(/\/$/, "")}/v1/chat/completions`,
3505
- headers: {
3506
- "Content-Type": "application/json",
3507
- // 'ollama' is a sentinel that points baseURL at the local Ollama server, not a real credential —
3508
- // don't send it as a Bearer token (some local OpenAI-compatible servers reject unexpected auth).
3509
- ...cfg.apiKey && cfg.apiKey !== "ollama" ? { Authorization: `Bearer ${cfg.apiKey}` } : {}
3510
- },
3511
- body: JSON.stringify({
3512
- model: cfg.model,
3513
- messages: withSystem(msgs, cfg.system),
3514
- temperature: cfg.temperature,
3515
- stream
3516
- })
3517
- };
3518
- }
3519
- function resolveConfig(opts) {
3520
- const cfg = { ...getOzwellConfig(), ...opts };
3521
- if (opts.apiKey && !opts.baseURL && !readRaw().baseURL) {
3522
- cfg.baseURL = cfg.apiKey === "ollama" ? OLLAMA_BASE : DEFAULT_BASE;
3523
- }
3524
- return cfg;
3525
- }
3526
- async function askOzwell(messages, opts = {}) {
3527
- const cfg = resolveConfig(opts);
3528
- const req = buildRequest(messages, cfg, false);
3529
- const res = await fetch(req.url, {
3530
- method: "POST",
3531
- headers: req.headers,
3532
- body: req.body,
3533
- signal: opts.signal
3534
- });
3535
- if (!res.ok) throw new Error(`Ozwell API ${res.status}: ${res.statusText}`);
3536
- const data = await res.json();
3537
- return (data?.choices?.[0]?.message?.content ?? "").trim();
3538
- }
3539
- async function askOzwellStream(messages, onToken, opts = {}) {
3540
- const cfg = resolveConfig(opts);
3541
- const req = buildRequest(messages, cfg, true);
3542
- const res = await fetch(req.url, {
3543
- method: "POST",
3544
- headers: req.headers,
3545
- body: req.body,
3546
- signal: opts.signal
3547
- });
3548
- if (!res.ok || !res.body)
3549
- throw new Error(`Ozwell API ${res.status}: ${res.statusText}`);
3550
- const reader = res.body.getReader();
3551
- const decoder = new TextDecoder();
3552
- let buf = "";
3553
- let full = "";
3554
- const processEvent = (ev) => {
3555
- for (const line of ev.split(/\r?\n/)) {
3556
- if (!line.startsWith("data:")) continue;
3557
- const payload = line.slice(5).trim();
3558
- if (payload === "[DONE]") return true;
3559
- try {
3560
- const json = JSON.parse(payload);
3561
- const delta = json?.choices?.[0]?.delta?.content || "";
3562
- if (delta) {
3563
- full += delta;
3564
- onToken(delta, full);
3565
- }
3566
- } catch {
3567
- }
3568
- }
3569
- return false;
3570
- };
3571
- try {
3572
- for (; ; ) {
3573
- const { done, value } = await reader.read();
3574
- if (done) break;
3575
- buf += decoder.decode(value, { stream: true });
3576
- const events = buf.split(/\r?\n\r?\n/);
3577
- buf = events.pop() || "";
3578
- for (const ev of events) if (processEvent(ev)) return full;
3579
- }
3580
- buf += decoder.decode();
3581
- if (buf.trim()) processEvent(buf);
3582
- } finally {
3583
- try {
3584
- await reader.cancel();
3585
- } catch {
3586
- }
3587
- }
3588
- return full;
3589
- }
3590
-
3591
- // src/components/AI/whisperTranscribe.ts
3592
- var HF_HOST = "https://huggingface.co";
3593
- var HF_PATH = "{model}/resolve/{revision}/";
3594
- var R2_HOST = "https://pub-64db68afc2cb4e108ff06e7e583f09d1.r2.dev";
3595
- function whisperHost() {
3596
- if (typeof window === "undefined") return R2_HOST;
3597
- const fromWin = (w) => {
3598
- try {
3599
- return w?.__ozwellWhisperHost;
3600
- } catch {
3601
- return void 0;
3602
- }
3603
- };
3604
- const win = fromWin(window) || fromWin(window.parent) || fromWin(window.top);
3605
- if (win) return win.replace(/\/$/, "");
3606
- try {
3607
- const h = JSON.parse(
3608
- localStorage.getItem("ozwellConfig") || "{}"
3609
- ).whisperHost;
3610
- if (h) return String(h).replace(/\/$/, "");
3611
- } catch {
3612
- }
3613
- return R2_HOST;
3614
- }
3615
- var SMALL_MODELS = {
3616
- tiny: "Xenova/whisper-tiny.en",
3617
- "tiny.en": "Xenova/whisper-tiny.en",
3618
- base: "Xenova/whisper-base.en",
3619
- "base.en": "Xenova/whisper-base.en",
3620
- small: "Xenova/whisper-small.en",
3621
- "small.en": "Xenova/whisper-small.en"
3622
- };
3623
- var GATE_MODEL = "Xenova/whisper-base.en";
3624
- function whisperPref() {
3625
- if (typeof window === "undefined") return null;
3626
- const fromWin = (w) => {
3627
- try {
3628
- return w?.__ozwell?.whisper;
3629
- } catch {
3630
- return void 0;
3631
- }
3632
- };
3633
- const win = fromWin(window) || fromWin(window.parent) || fromWin(window.top);
3634
- if (win) return win;
3635
- try {
3636
- return JSON.parse(localStorage.getItem("ozwellConfig") || "{}").whisper || null;
3637
- } catch {
3638
- return null;
3639
- }
3640
- }
3641
- function whisperDevice() {
3642
- if (typeof window === "undefined") return null;
3643
- const fromWin = (w) => {
3644
- try {
3645
- return w?.__ozwell?.whisperDevice;
3646
- } catch {
3647
- return void 0;
3648
- }
3649
- };
3650
- const win = fromWin(window) || fromWin(window.parent) || fromWin(window.top);
3651
- if (win) return win;
3652
- try {
3653
- return JSON.parse(localStorage.getItem("ozwellConfig") || "{}").whisperDevice || null;
3654
- } catch {
3655
- return null;
3656
- }
3657
- }
3658
- function whisperDtype() {
3659
- if (typeof window === "undefined") return null;
3660
- const fromWin = (w) => {
3661
- try {
3662
- return w?.__ozwell?.whisperDtype;
3663
- } catch {
3664
- return void 0;
3665
- }
3666
- };
3667
- const win = fromWin(window) || fromWin(window.parent) || fromWin(window.top);
3668
- if (win) return win;
3669
- try {
3670
- return JSON.parse(localStorage.getItem("ozwellConfig") || "{}").whisperDtype || null;
3671
- } catch {
3672
- return null;
3673
- }
3674
- }
3675
- var DEFAULT_TRANSFORMERS_URL = "https://cdn.jsdelivr.net/npm/@huggingface/transformers@3.8.1";
3676
- function transformersUrl() {
3677
- try {
3678
- const w = window.__ozwellTransformersUrl;
3679
- if (w) return w;
3680
- const ls = localStorage.getItem("ozwellTransformersUrl");
3681
- if (ls) return ls;
3682
- } catch {
3683
- }
3684
- return DEFAULT_TRANSFORMERS_URL;
3685
- }
3686
- var dictationLoad = {
3687
- active: false,
3688
- progress: 0,
3689
- done: false
3690
- };
3691
- var loadListeners = /* @__PURE__ */ new Set();
3692
- function setDictationLoad(patch) {
3693
- dictationLoad = { ...dictationLoad, ...patch };
3694
- loadListeners.forEach((l) => l());
3695
- }
3696
- function getDictationLoad() {
3697
- return dictationLoad;
3698
- }
3699
- function subscribeDictationLoad(cb) {
3700
- loadListeners.add(cb);
3701
- return () => {
3702
- loadListeners.delete(cb);
3703
- };
3704
- }
3705
- var WORKER_SRC = `
3706
- let cfg = null, modP = null, pipeP = null, gateP = null, isMulti = false;
3707
- let chain = Promise.resolve();
3708
- const serialize = (fn) => { const r = chain.then(fn, fn); chain = r.then(() => {}, () => {}); return r; };
3709
-
3710
- function getMod() {
3711
- if (modP) return modP;
3712
- modP = (async () => {
3713
- const mod = await import(cfg.transformersUrl);
3714
- mod.env.allowLocalModels = false;
3715
- // transformers.js's OWN cache STREAMS the model straight to the Cache API (how whisper-web caches this
3716
- // 1.2GB turbo model). A hand-rolled SW that buffers the whole file chokes (QuotaExceeded).
3717
- mod.env.useBrowserCache = true;
3718
- mod.env.backends.onnx.wasm.numThreads = 1;
3719
- try { if (navigator.storage && navigator.storage.persist) await navigator.storage.persist(); } catch (e) {}
3720
- return mod;
3721
- })();
3722
- return modP;
3723
- }
3724
-
3725
- function progressCb() {
3726
- const frac = {};
3727
- const report = () => {
3728
- const v = Object.values(frac);
3729
- self.postMessage({ type: 'progress', frac: v.length ? v.reduce((a, b) => a + b, 0) / v.length : 0 });
3730
- };
3731
- return (p) => {
3732
- if (!p || !p.file) return;
3733
- if (p.status === 'initiate') { frac[p.file] = frac[p.file] || 0; report(); }
3734
- else if (p.status === 'done') { frac[p.file] = 1; report(); }
3735
- else if (p.status === 'progress' && typeof p.progress === 'number') { frac[p.file] = p.progress / 100; report(); }
3736
- };
3737
- }
3738
-
3739
- async function buildEnglish(modelId) {
3740
- const mod = await getMod();
3741
- mod.env.remoteHost = cfg.hfHost;
3742
- mod.env.remotePathTemplate = cfg.hfPath;
3743
- if ((cfg.whisperDevice || '').toLowerCase() !== 'wasm') {
3744
- try {
3745
- const gpuDtype = cfg.whisperDtype || 'q8';
3746
- const pipe = await mod.pipeline('automatic-speech-recognition', modelId, { device: 'webgpu', dtype: gpuDtype, progress_callback: progressCb() });
3747
- console.log('[whisper] ready (' + modelId + ' / WebGPU ' + gpuDtype + ', worker)');
3748
- return pipe;
3749
- } catch (e) { /* fall through to wasm */ }
3750
- }
3751
- const pipe = await mod.pipeline('automatic-speech-recognition', modelId, { dtype: 'q8', progress_callback: progressCb() });
3752
- console.log('[whisper] ready (' + modelId + ' / wasm, worker)');
3753
- return pipe;
3754
- }
3755
-
3756
- async function buildTurbo() {
3757
- const mod = await getMod();
3758
- mod.env.remoteHost = cfg.whisperHost;
3759
- mod.env.remotePathTemplate = '{model}/';
3760
- const pipe = await mod.pipeline('automatic-speech-recognition', 'whisper-turbo', {
3761
- device: 'webgpu',
3762
- dtype: { encoder_model: 'fp16', decoder_model_merged: 'q4' },
3763
- progress_callback: progressCb(),
3764
- });
3765
- isMulti = true;
3766
- console.log('[whisper] ready (turbo / worker)');
3767
- return pipe;
3768
- }
3769
-
3770
- function loadWhisper() {
3771
- if (pipeP) return pipeP;
3772
- self.postMessage({ type: 'loadState', patch: { active: true, progress: 0, done: false } });
3773
- pipeP = (async () => {
3774
- const pref = (cfg.whisperPref || '').toLowerCase();
3775
- if (pref && pref !== 'turbo' && cfg.smallModels[pref]) {
3776
- console.log('[whisper] loading ' + pref + ' (forced via ozwellConfig.whisper)\u2026');
3777
- return serialize(() => buildEnglish(cfg.smallModels[pref]));
3778
- }
3779
- console.log('[whisper] loading turbo\u2026');
3780
- try { return await serialize(() => buildTurbo()); }
3781
- catch (e) {
3782
- console.log('[whisper] turbo unavailable (' + (e && e.message ? e.message : e) + ') \u2192 base.en fallback');
3783
- return serialize(() => buildEnglish(cfg.gateModel));
3784
- }
3785
- })();
3786
- pipeP.then(
3787
- () => self.postMessage({ type: 'loadState', patch: { active: false, progress: 1, done: true } }),
3788
- () => { pipeP = null; self.postMessage({ type: 'loadState', patch: { active: false } }); }
3789
- );
3790
- return pipeP;
3791
- }
3792
-
3793
- function loadGate() {
3794
- if (gateP) return gateP;
3795
- console.log('[whisper] loading stop-confirm gate (base.en)\u2026');
3796
- gateP = serialize(() => buildEnglish(cfg.gateModel));
3797
- gateP.catch(() => { gateP = null; });
3798
- return gateP;
3799
- }
3800
-
3801
- self.onmessage = async (e) => {
3802
- const m = e.data;
3803
- if (!m) return;
3804
- if (m.type === 'init') { cfg = m.cfg; return; }
3805
- if (m.type === 'warm') { loadWhisper().catch(() => {}); return; }
3806
- if (m.type === 'warmGate') { loadGate().catch(() => {}); return; }
3807
- if (m.type === 'transcribe') {
3808
- try {
3809
- let pipe, opts;
3810
- if (m.want === 'gate') { pipe = await loadGate(); opts = { chunk_length_s: 30 }; }
3811
- else {
3812
- pipe = await loadWhisper();
3813
- if (m.want === 'segments' || m.want === 'words') opts = Object.assign({ chunk_length_s: 30, return_timestamps: m.want === 'words' ? 'word' : true }, isMulti ? { language: 'english', task: 'transcribe' } : {});
3814
- else opts = isMulti ? { chunk_length_s: 30, language: 'english', task: 'transcribe' } : { chunk_length_s: 30 };
3815
- }
3816
- const out = await pipe(m.samples, opts);
3817
- self.postMessage({ type: 'result', id: m.id, text: (out && out.text ? out.text : '').trim(), chunks: (out && out.chunks) || null });
3818
- } catch (err) {
3819
- self.postMessage({ type: 'error', id: m.id, message: err && err.message ? err.message : String(err) });
3820
- }
3821
- }
3822
- };
3823
- `;
3824
- var worker = null;
3825
- var reqId = 0;
3826
- var pending = /* @__PURE__ */ new Map();
3827
- function buildWorkerCfg() {
3828
- return {
3829
- transformersUrl: transformersUrl(),
3830
- whisperHost: whisperHost(),
3831
- whisperPref: whisperPref(),
3832
- whisperDevice: whisperDevice(),
3833
- whisperDtype: whisperDtype(),
3834
- hfHost: HF_HOST,
3835
- hfPath: HF_PATH,
3836
- smallModels: SMALL_MODELS,
3837
- gateModel: GATE_MODEL
3838
- };
3839
- }
3840
- function getWorker() {
3841
- if (worker) return worker;
3842
- registerModelServiceWorker();
3843
- const url = URL.createObjectURL(
3844
- new Blob([WORKER_SRC], { type: "application/javascript" })
3845
- );
3846
- const w = new Worker(url, { type: "module" });
3847
- w.onmessage = (e) => {
3848
- const m = e.data;
3849
- if (!m) return;
3850
- if (m.type === "loadState") {
3851
- setDictationLoad(m.patch);
3852
- return;
3853
- }
3854
- if (m.type === "progress") {
3855
- setDictationLoad({ progress: m.frac });
3856
- return;
3857
- }
3858
- if (m.type === "result") {
3859
- const p = pending.get(m.id);
3860
- if (p) {
3861
- pending.delete(m.id);
3862
- p.resolve({ text: m.text, chunks: m.chunks });
3863
- }
3864
- return;
3865
- }
3866
- if (m.type === "error") {
3867
- const p = pending.get(m.id);
3868
- if (p) {
3869
- pending.delete(m.id);
3870
- p.reject(new Error(m.message));
3871
- }
3872
- return;
3873
- }
3874
- };
3875
- w.onerror = (e) => {
3876
- const err = new Error(
3877
- `whisper worker error: ${e.message || "failed to load"}`
3878
- );
3879
- pending.forEach((p) => p.reject(err));
3880
- pending.clear();
3881
- setDictationLoad({ active: false });
3882
- };
3883
- w.postMessage({ type: "init", cfg: buildWorkerCfg() });
3884
- worker = w;
3885
- return worker;
3886
- }
3887
- function callWorker(want, samples) {
3888
- const w = getWorker();
3889
- const id = ++reqId;
3890
- return new Promise((resolve, reject) => {
3891
- pending.set(id, { resolve, reject });
3892
- w.postMessage({ type: "transcribe", id, want, samples }, [samples.buffer]);
3893
- });
3894
- }
3895
- function isWhisperLoaded() {
3896
- return getDictationLoad().done;
3897
- }
3898
- function warmWhisper() {
3899
- getWorker().postMessage({ type: "warm" });
3900
- }
3901
- function warmStopGate() {
3902
- getWorker().postMessage({ type: "warmGate" });
3903
- }
3904
- function downmixToMono(audio) {
3905
- if (audio.numberOfChannels <= 1) return audio.getChannelData(0);
3906
- const n = audio.length;
3907
- const out = new Float32Array(n);
3908
- for (let ch = 0; ch < audio.numberOfChannels; ch++) {
3909
- const data = audio.getChannelData(ch);
3910
- for (let i = 0; i < n; i++) out[i] += data[i];
3911
- }
3912
- for (let i = 0; i < n; i++) out[i] /= audio.numberOfChannels;
3913
- return out;
3914
- }
3915
- function resampleTo16kMono(src, sampleRate) {
3916
- const ratio = 16e3 / sampleRate;
3917
- const n = Math.round(src.length * ratio);
3918
- const out = new Float32Array(n);
3919
- for (let i = 0; i < n; i++) {
3920
- const t = i / ratio;
3921
- const i0 = Math.floor(t);
3922
- const i1 = Math.min(i0 + 1, src.length - 1);
3923
- out[i] = src[i0] + (src[i1] - src[i0]) * (t - i0);
3924
- }
3925
- return out;
3926
- }
3927
- async function decodeTo16kMono(blob) {
3928
- const Ctx = window.AudioContext || window.webkitAudioContext;
3929
- const ctx = new Ctx();
3930
- try {
3931
- const audio = await ctx.decodeAudioData(await blob.arrayBuffer());
3932
- return resampleTo16kMono(downmixToMono(audio), audio.sampleRate);
3933
- } finally {
3934
- void ctx.close();
3935
- }
3936
- }
3937
- function encodeWav16kMono(samples) {
3938
- const sr = 16e3;
3939
- const buf = new ArrayBuffer(44 + samples.length * 2);
3940
- const view = new DataView(buf);
3941
- const str = (o2, s) => {
3942
- for (let i = 0; i < s.length; i++) view.setUint8(o2 + i, s.charCodeAt(i));
3943
- };
3944
- str(0, "RIFF");
3945
- view.setUint32(4, 36 + samples.length * 2, true);
3946
- str(8, "WAVE");
3947
- str(12, "fmt ");
3948
- view.setUint32(16, 16, true);
3949
- view.setUint16(20, 1, true);
3950
- view.setUint16(22, 1, true);
3951
- view.setUint32(24, sr, true);
3952
- view.setUint32(28, sr * 2, true);
3953
- view.setUint16(32, 2, true);
3954
- view.setUint16(34, 16, true);
3955
- str(36, "data");
3956
- view.setUint32(40, samples.length * 2, true);
3957
- let o = 44;
3958
- for (let i = 0; i < samples.length; i++) {
3959
- const s = Math.max(-1, Math.min(1, samples[i]));
3960
- view.setInt16(o, s < 0 ? s * 32768 : s * 32767, true);
3961
- o += 2;
3962
- }
3963
- return new Blob([buf], { type: "audio/wav" });
3964
- }
3965
- async function trimTrailingStopPhrase(blob, phraseHintSec = 0) {
3966
- let samples;
3967
- try {
3968
- samples = await decodeTo16kMono(blob);
3969
- } catch {
3970
- return blob;
3971
- }
3972
- const SR2 = 16e3;
3973
- const n = samples.length;
3974
- if (n < SR2 * 0.8) return blob;
3975
- const fr = Math.round(SR2 * 0.03);
3976
- const nf = Math.ceil(n / fr);
3977
- const e = new Float32Array(nf);
3978
- let peak = 0;
3979
- for (let f = 0; f < nf; f++) {
3980
- const a = f * fr, b = Math.min(n, a + fr);
3981
- let s = 0;
3982
- for (let i = a; i < b; i++) s += samples[i] * samples[i];
3983
- e[f] = Math.sqrt(s / (b - a));
3984
- if (e[f] > peak) peak = e[f];
3985
- }
3986
- const sil = Math.max(8e-3, peak * 0.15);
3987
- const minGap = Math.max(1, Math.round(0.15 * SR2 / fr));
3988
- const maxTrimFrames = Math.round(2.2 * SR2 / fr);
3989
- const floor = Math.max(0, nf - maxTrimFrames);
3990
- let cutFrame;
3991
- if (phraseHintSec > 0.2) {
3992
- const anchor = Math.max(0, nf - Math.round(phraseHintSec * SR2 / fr));
3993
- const win = Math.round(0.35 * SR2 / fr);
3994
- let best = -1, bestDist = Infinity;
3995
- for (let f = Math.max(0, anchor - win); f <= Math.min(nf - 1, anchor + win); f++) {
3996
- if (e[f] < sil) {
3997
- const dist = Math.abs(f - anchor);
3998
- if (dist < bestDist) {
3999
- bestDist = dist;
4000
- best = f;
4001
- }
4002
- }
4003
- }
4004
- cutFrame = best >= 0 ? best : anchor;
4005
- } else {
4006
- let k = nf - 1;
4007
- while (k >= floor && e[k] < sil) k--;
4008
- cutFrame = -1;
4009
- while (k >= floor) {
4010
- if (e[k] < sil) {
4011
- let m = k;
4012
- while (m >= floor && e[m] < sil) m--;
4013
- if (k - m >= minGap) {
4014
- cutFrame = k + 1;
4015
- break;
4016
- }
4017
- k = m;
4018
- } else k--;
4019
- }
4020
- if (cutFrame < 0) cutFrame = Math.max(0, nf - Math.round(1.1 * SR2 / fr));
4021
- }
4022
- cutFrame = Math.max(cutFrame, floor);
4023
- const cutSample = Math.min(n, cutFrame * fr);
4024
- if (cutSample < SR2 * 0.2) return blob;
4025
- return encodeWav16kMono(samples.subarray(0, cutSample));
4026
- }
4027
- async function transcribeBlob(blob, trimEndSeconds = 0) {
4028
- let samples = await decodeTo16kMono(blob);
4029
- if (trimEndSeconds > 0) {
4030
- const cut = Math.round(trimEndSeconds * 16e3);
4031
- if (samples.length > cut + 16e3)
4032
- samples = samples.slice(0, samples.length - cut);
4033
- }
4034
- const out = await callWorker("text", samples);
4035
- return (out.text ?? "").trim();
4036
- }
4037
- async function transcribeSamples(samples, sampleRate) {
4038
- const out = await callWorker("text", resampleTo16kMono(samples, sampleRate));
4039
- return (out.text ?? "").trim();
4040
- }
4041
- function chunksToSegments(chunks) {
4042
- return (chunks ?? []).map((c) => ({
4043
- start: c.timestamp?.[0] ?? 0,
4044
- end: c.timestamp?.[1] ?? c.timestamp?.[0] ?? 0,
4045
- text: (c.text ?? "").trim()
4046
- })).filter((s) => s.text);
4047
- }
4048
- async function transcribeSegments(blob) {
4049
- const samples = await decodeTo16kMono(blob);
4050
- const out = await callWorker("segments", samples);
4051
- return chunksToSegments(out.chunks);
4052
- }
4053
- function serverAsrModel() {
4054
- try {
4055
- return JSON.parse(localStorage.getItem("ozwellConfig") || "{}").serverWhisper || "whisper-1";
4056
- } catch {
4057
- return "whisper-1";
4058
- }
4059
- }
4060
- async function transcribeServer(blob) {
4061
- const cfg = getOzwellConfig();
4062
- const form = new FormData();
4063
- form.append("file", blob, "audio.webm");
4064
- form.append("model", serverAsrModel());
4065
- const url = `${cfg.baseURL.replace(/\/$/, "")}/v1/audio/transcriptions`;
4066
- const headers = {};
4067
- if (cfg.apiKey && cfg.apiKey !== "ollama")
4068
- headers.Authorization = `Bearer ${cfg.apiKey}`;
4069
- const res = await fetch(url, { method: "POST", headers, body: form });
4070
- if (!res.ok) {
4071
- const body = await res.text().catch(() => "");
4072
- throw new Error(
4073
- `Server ASR ${res.status}: ${res.statusText || body.slice(0, 200) || "request failed"}`
4074
- );
4075
- }
4076
- const data = await res.json();
4077
- return (typeof data?.text === "string" ? data.text : "").trim();
4078
- }
4079
- async function transcribeGate(samples, sampleRate) {
4080
- const out = await callWorker("gate", resampleTo16kMono(samples, sampleRate));
4081
- return (out.text ?? "").trim();
4082
- }
4083
- function stripStopPhrase(text) {
4084
- const tail = /(?:\b(?:oz\s{0,4}well|all(?:['’]?s|\s{1,4}was)?\s{0,4}well|as\s{0,4}well|also|oswald)\b[\s,]{0,6}i(?:['’]?m|\s{1,4}am)\s{1,4}done\b|\b(?:oz\s{0,4}well|all(?:['’]?s|\s{1,4}was)?\s{0,4}well|oswald)\b|\bi(?:['’]?m|\s{1,4}am)\s{1,4}done\b|\b(?:that\s{1,4}was\s{1,4}|was\s{1,4})?well\s{1,4}done\b|\bthat['’]?s?\s{1,4}(?:was\s{1,4})?all\b|\bthank(?:s|\s{1,4}you)(?:\s{1,4}for\s{1,4}watching)?\b|\bbye\b)[\s.,!?-]{0,24}$/i;
4085
- let prev = null;
4086
- let t = text;
4087
- while (t !== prev && t) {
4088
- prev = t;
4089
- t = trimTrailingPunct(t.replace(tail, ""));
4090
- }
4091
- return t.trim();
4092
- }
4093
- function trimTrailingPunct(s) {
4094
- let end = s.length;
4095
- while (end > 0 && /[\s.,!?-]/.test(s[end - 1])) end--;
4096
- return end === s.length ? s : s.slice(0, end);
4097
- }
4098
- function endsWithDone(text) {
4099
- return /\b(?:i(?:['’]?m|\s{1,4}am)\s{1,4}|all\s{1,4}|well\s{1,4})?done\b[\s.,!?-]{0,24}$/i.test(
4100
- text
4101
- );
4102
- }
4103
3497
  function useSpeakerVerify(opts = {}) {
4104
3498
  const { enabled = true, voiceprintNamespace } = opts;
4105
3499
  const [ready, setReady] = React13.useState(false);
@@ -12929,7 +12323,7 @@ function CheckrIntegration({
12929
12323
  viewReports = "View Reports",
12930
12324
  noReports = "No background checks yet",
12931
12325
  refresh = "Refresh",
12932
- pending: pending2 = "Pending",
12326
+ pending = "Pending",
12933
12327
  running = "Running",
12934
12328
  complete = "Complete",
12935
12329
  failed = "Failed",
@@ -12961,7 +12355,7 @@ function CheckrIntegration({
12961
12355
  setSelectedReports((prev) => prev.size > 0 ? /* @__PURE__ */ new Set() : prev);
12962
12356
  }, [reports, connected]);
12963
12357
  const statusLabels = {
12964
- pending: pending2,
12358
+ pending,
12965
12359
  running,
12966
12360
  complete,
12967
12361
  failed,
@@ -22788,21 +22182,21 @@ function ActionButton({ label, onClick, href, variant }) {
22788
22182
  );
22789
22183
  }
22790
22184
  function DefaultIllustration({ type }) {
22791
- const iconClasses = "h-24 w-24 text-muted-foreground";
22185
+ const iconClasses2 = "h-24 w-24 text-muted-foreground";
22792
22186
  switch (type) {
22793
22187
  case "404":
22794
- return /* @__PURE__ */ jsx(Search404Icon, { className: iconClasses });
22188
+ return /* @__PURE__ */ jsx(Search404Icon, { className: iconClasses2 });
22795
22189
  case "500":
22796
- return /* @__PURE__ */ jsx(ServerErrorIcon, { className: iconClasses });
22190
+ return /* @__PURE__ */ jsx(ServerErrorIcon, { className: iconClasses2 });
22797
22191
  case "403":
22798
22192
  case "401":
22799
- return /* @__PURE__ */ jsx(LockIcon, { className: iconClasses });
22193
+ return /* @__PURE__ */ jsx(LockIcon, { className: iconClasses2 });
22800
22194
  case "offline":
22801
- return /* @__PURE__ */ jsx(WifiOffIcon, { className: iconClasses });
22195
+ return /* @__PURE__ */ jsx(WifiOffIcon, { className: iconClasses2 });
22802
22196
  case "maintenance":
22803
- return /* @__PURE__ */ jsx(WrenchIcon, { className: iconClasses });
22197
+ return /* @__PURE__ */ jsx(WrenchIcon, { className: iconClasses2 });
22804
22198
  default:
22805
- return /* @__PURE__ */ jsx(AlertIcon, { className: iconClasses });
22199
+ return /* @__PURE__ */ jsx(AlertIcon, { className: iconClasses2 });
22806
22200
  }
22807
22201
  }
22808
22202
  function Search404Icon({ className }) {
@@ -39751,13 +39145,13 @@ var DEFAULT_SERVICE_PRICING_MANAGER_LABELS = {
39751
39145
  function ServiceNote({ service, onNoteChange, labels }) {
39752
39146
  const [editing, setEditing] = React13.useState(false);
39753
39147
  const [draft, setDraft] = React13.useState("");
39754
- const [pending2, setPending] = React13.useState(null);
39148
+ const [pending, setPending] = React13.useState(null);
39755
39149
  const [failed, setFailed] = React13.useState(false);
39756
39150
  const inputRef = React13.useRef(null);
39757
39151
  const buttonRef = React13.useRef(null);
39758
39152
  const cancelRef = React13.useRef(false);
39759
39153
  const refocusRef = React13.useRef(false);
39760
- const note = pending2 ?? service.note ?? "";
39154
+ const note = pending ?? service.note ?? "";
39761
39155
  React13.useEffect(() => {
39762
39156
  if (editing) inputRef.current?.focus();
39763
39157
  else if (refocusRef.current) {
@@ -39811,12 +39205,12 @@ function ServiceNote({ service, onNoteChange, labels }) {
39811
39205
  ref: buttonRef,
39812
39206
  type: "button",
39813
39207
  onClick: () => {
39814
- if (pending2 !== null) return;
39208
+ if (pending !== null) return;
39815
39209
  setDraft(note);
39816
39210
  setEditing(true);
39817
39211
  },
39818
- "aria-disabled": pending2 !== null,
39819
- "aria-busy": pending2 !== null,
39212
+ "aria-disabled": pending !== null,
39213
+ "aria-busy": pending !== null,
39820
39214
  "aria-label": `${labels.noteLabel(service.serviceName)}: ${note || labels.addNote}`,
39821
39215
  className: cn(
39822
39216
  "w-full truncate rounded text-start text-sm",
@@ -44856,6 +44250,6 @@ function WebsiteInputGroup({
44856
44250
  }
44857
44251
  WebsiteInputGroup.displayName = "WebsiteInputGroup";
44858
44252
 
44859
- export { AIChat, AIChatModal, AIChatTrigger, AIReconciliationPanel, AccessDeniedPage, ActionButton2 as ActionButton, ActionButtonsBar, ActiveFilters, AddContactModal, AddServiceCard, AdditionalFields, Address, AddressCard, AddressCompact, AddressDisplay, AddressForm, AddressInline, AppHeader, AppHeaderActions, AppHeaderBrand, AppHeaderDivider, AppHeaderIconButton, AppHeaderSearch, AppHeaderSection, AppHeaderTitle, AppHeaderUserMenu, Assessment, AuthButtons, AuthDialog, BUSINESS_HOURS_END_OF_DAY, BookAppointmentButton, BookingDialog, BusinessHours, BusinessHoursEditor, CHANGE_TYPE_LABELS, CONCERN_STATUS_LABELS, CSVColumnMapper, CSVFileUpload, CardSkeleton, CaseContextBar, CaseManagementHeader, CheckrIntegration, ClaimListingButton, ClaimProviderForm, CodingChips, CommandPalette, CommandPaletteProvider, CommandPaletteTrigger, CompactCookieBanner, CompactFilterBar, CompactHeader, CompactHours, CompactProviderHeader, ConditionEditor, ConnectionStatusBadge, ConnectionStatusBar, ConnectionStatusOverlay, ConsentSwitch, CookieConsentBanner, CopyrightText, CountBadge, CountryDropdown, CreateInvoiceModal, CreateReferralModal, DEFAULT_BUSINESS_HOURS_EDITOR_LABELS, DEFAULT_ERROR_CONFIGS, DEFAULT_LANGUAGES, DEFAULT_RADIUS_OPTIONS, DEFAULT_SERVICE_PRICING_MANAGER_LABELS, DEFAULT_SOCIAL_PROVIDERS, DOTBadge, DashboardWidget, DashboardWidgetActions, DashboardWidgetDataCards, DashboardWidgetInfo, DashboardWidgetTable, DateRangeFilter, DateRangePicker, DialogOverlay, DisclaimerText, DockablePanel, DocumentDetectionOverlay, DocumentScanner, DropZone, DropzoneOverlay, EditUserRoleModal, EmployeeForm, EmployeeProfileCard, EmployerContactCard, EmployerList, EmployerPricingCard, EmployerServiceModal, EmployerView, ErrorPage, FileManager, FilePreview, FloatingAIChat, FloatingInput, FooterLinkSection, SocialMediaLinks2 as FooterSocialLinks, HRISProviderSelector, HandsFreeChat, HealthSurveillance, HelpSupportPanel, HeroSearchBar, HeyOzwell, HeyOzwellToggle, HoursSummary, ImagingOrderEditor, InlineBookingForm, InventoryManager, InviteUserModal, InvoiceList, InvoicePaymentPage, InvoiceView, LabOrderEditor, LanguageSelector, LanguageSelectorInline, LanguageSelectorNative, LegalLinks, LoadingBar, LoadingDots, LoadingOverlay, LoadingPage, LoadingSkeleton, MODEL_MANIFEST, MaintenancePage, MobileBackButton, MobileMenuButton, MobileMenuPanel, ModelInfoList, NavLinks, NewsletterForm, NotFoundPage, NotificationCenter, ORDER_TYPE_META, ORDER_TYPE_SEARCH_DOMAINS, OfflinePage, OnboardingCompletion, OnboardingStepQuestion, OnboardingWizard, OpenStatusBadge, OrderCard, OrderConfirmation, OrderConfirmationWizard, OrderDetailSidebar, OrderEditor, OrderList, OrderLookupForm, OrderSidebar, OrderSidebarTabs, OzwellChat, OzwellSettingsMenu, PageHeader, PatientHeader, PaymentHistoryTable, PaymentMethodBank, PaymentMethodCard, PaymentMethodList, PendingClaimsTable, PermissionsEditor, PillSelect, PresentingProblems, ProblemList, ProcedureOrderEditor, ProductVersion, ProductVersionBadge, Breadcrumb2 as ProviderBreadcrumb, ProviderCard, ProviderCardGrid, ProviderCardSkeleton, ProviderDetailHeader, ProviderDetailHeaderSkeleton, ProviderLogo2 as ProviderLogo, ProviderOverview, ProviderSearchBar, ProviderSearchFilters, ProviderSelector, ProviderSettings, SocialMediaLinks as ProviderSocialLinks, ProviderUsersTable, QuickBookCard, QuickLinksCard, RELEVANCE_LABELS, RecurringServiceAddCard, RecurringServiceCard, RecurringServiceGrid, RecurringServiceSetupModal, ReferralEditor, RejectionModal, ReportDashboard, ReportDatePicker, ReportLink, ReportTimeRange, ResultsEntryCard, ResultsEntryForm, ResultsEntryModal, SSOConfigForm, ScheduleCalendar, SearchResultsMessage, SelectedServicesBadges, ServerErrorPage, ServiceAccordion, ServiceBadge, ServiceBadgeGroup, ServiceCard, ServiceCategoryBadge, ServiceGeneralSettings, ServiceGrid, ServiceLink, ServiceList, ServiceMultiSelect, ServicePicker, ServicePricingManager, ServiceSelect, ServiceShippingSettings, ServiceTagCloud, ServiceTagCloudBadges, SetupServiceModal, Sidebar, SidebarContent, SidebarFooter, SidebarHeader, SidebarMobileToggle, SidebarNav, SidebarNavGroup, SidebarNavItem, SidebarProvider, SidebarSearch, SidebarToggle, SimpleFooter, SiteFooter, SiteHeader, SiteLogo, StepIndicator, StripeBadge, StripeSecureBadge, SuggestedActions, TableOfContents, TimelineEventList, TimelineProgress, Toast, ToastContainer, ToastProvider, UncertaintyBadge, UpdateAvailableOverlay, UserMenu, VerifiedBadge2 as VerifiedBadge, VisitScribe, VoiceManager, VoiceSetup, WEBSITE_TYPES, WebChartReportViewer, WebcamModal, WebsiteInput, WebsiteInputGroup, askOzwell, askOzwellStream, attributeSegments, calculateDateRange, centroid, chime, clusterEmbeddings, concernGroupKey, concernHistoryContent, cosine, countBadgeVariants, countChipVariants, create24HourSchedule, createDefaultSchedule, createWeekdaySchedule, currentAssertion, decodeTo16kMono, defaultCaseManagementHeaderLabels, defaultOrderTabs, defaultReconciliationIsEqual, endsWithDone, formatAddressLines, formatAddressSingleLine, formatCityState, formatCityStateZip, generateId, getDefaultPresets, getDictationLoad, getExtendedPresets, getGoogleMapsSearchUrl, getGoogleMapsUrl, getOzwellConfig, getWakeWarm, inferSpeakerRoles, isConditionCodetype, isOzwellConfigured, isValidUrl, isWhisperLoaded, labelClusters, medicationToOrder, mergeTurns, normalizeClosingTime, normalizeConditionCodingSystem, openRollingRecorder, orderToMedication, orderTypeForCodetype, parseTimeInput, panelVariants as reconciliationPanelVariants, stripStopPhrase, subscribeDictationLoad, subscribeWakeWarm, toOzwellMessages, transcribeBlob, transcribeGate, transcribeSamples, transcribeSegments, transcribeServer, trimTrailingStopPhrase, useCamera, useCommandPalette, useConnectionStatus, useCookieConsent, useDiarization, useDocumentDetection, useDropzone, useFileUpload, useHeyOzwell, useOptionalToast, useSidebar, useSpeakerVerify, useToast, useVisitScribe, useVoiceSetup, useWakeWord, warmStopGate, warmWakeModels, warmWhisper, widgetVariants };
44253
+ export { AIChat, AIChatModal, AIChatTrigger, AIReconciliationPanel, AccessDeniedPage, ActionButton2 as ActionButton, ActionButtonsBar, ActiveFilters, AddContactModal, AddServiceCard, AdditionalFields, Address, AddressCard, AddressCompact, AddressDisplay, AddressForm, AddressInline, AppHeader, AppHeaderActions, AppHeaderBrand, AppHeaderDivider, AppHeaderIconButton, AppHeaderSearch, AppHeaderSection, AppHeaderTitle, AppHeaderUserMenu, Assessment, AuthButtons, AuthDialog, BUSINESS_HOURS_END_OF_DAY, BookAppointmentButton, BookingDialog, BusinessHours, BusinessHoursEditor, CHANGE_TYPE_LABELS, CONCERN_STATUS_LABELS, CSVColumnMapper, CSVFileUpload, CardSkeleton, CaseContextBar, CaseManagementHeader, CheckrIntegration, ClaimListingButton, ClaimProviderForm, CodingChips, CommandPalette, CommandPaletteProvider, CommandPaletteTrigger, CompactCookieBanner, CompactFilterBar, CompactHeader, CompactHours, CompactProviderHeader, ConditionEditor, ConnectionStatusBadge, ConnectionStatusBar, ConnectionStatusOverlay, ConsentSwitch, CookieConsentBanner, CopyrightText, CountBadge, CountryDropdown, CreateInvoiceModal, CreateReferralModal, DEFAULT_BUSINESS_HOURS_EDITOR_LABELS, DEFAULT_ERROR_CONFIGS, DEFAULT_LANGUAGES, DEFAULT_RADIUS_OPTIONS, DEFAULT_SERVICE_PRICING_MANAGER_LABELS, DEFAULT_SOCIAL_PROVIDERS, DOTBadge, DashboardWidget, DashboardWidgetActions, DashboardWidgetDataCards, DashboardWidgetInfo, DashboardWidgetTable, DateRangeFilter, DateRangePicker, DialogOverlay, DisclaimerText, DockablePanel, DocumentDetectionOverlay, DocumentScanner, DropZone, DropzoneOverlay, EditUserRoleModal, EmployeeForm, EmployeeProfileCard, EmployerContactCard, EmployerList, EmployerPricingCard, EmployerServiceModal, EmployerView, ErrorPage, FileManager, FilePreview, FloatingAIChat, FloatingInput, FooterLinkSection, SocialMediaLinks2 as FooterSocialLinks, HRISProviderSelector, HandsFreeChat, HealthSurveillance, HelpSupportPanel, HeroSearchBar, HeyOzwell, HeyOzwellSelector, HeyOzwellToggle, HoursSummary, ImagingOrderEditor, InlineBookingForm, InventoryManager, InviteUserModal, InvoiceList, InvoicePaymentPage, InvoiceView, LabOrderEditor, LanguageSelector, LanguageSelectorInline, LanguageSelectorNative, LegalLinks, LoadingBar, LoadingDots, LoadingOverlay, LoadingPage, LoadingSkeleton, MODEL_MANIFEST, MaintenancePage, MobileBackButton, MobileMenuButton, MobileMenuPanel, ModelInfoList, NavLinks, NewsletterForm, NotFoundPage, NotificationCenter, ORDER_TYPE_META, ORDER_TYPE_SEARCH_DOMAINS, OfflinePage, OnboardingCompletion, OnboardingStepQuestion, OnboardingWizard, OpenStatusBadge, OrderCard, OrderConfirmation, OrderConfirmationWizard, OrderDetailSidebar, OrderEditor, OrderList, OrderLookupForm, OrderSidebar, OrderSidebarTabs, OzwellChat, OzwellSettingsMenu, PageHeader, PatientHeader, PaymentHistoryTable, PaymentMethodBank, PaymentMethodCard, PaymentMethodList, PendingClaimsTable, PermissionsEditor, PillSelect, PresentingProblems, ProblemList, ProcedureOrderEditor, ProductVersion, ProductVersionBadge, Breadcrumb2 as ProviderBreadcrumb, ProviderCard, ProviderCardGrid, ProviderCardSkeleton, ProviderDetailHeader, ProviderDetailHeaderSkeleton, ProviderLogo2 as ProviderLogo, ProviderOverview, ProviderSearchBar, ProviderSearchFilters, ProviderSelector, ProviderSettings, SocialMediaLinks as ProviderSocialLinks, ProviderUsersTable, QuickBookCard, QuickLinksCard, RELEVANCE_LABELS, RecurringServiceAddCard, RecurringServiceCard, RecurringServiceGrid, RecurringServiceSetupModal, ReferralEditor, RejectionModal, ReportDashboard, ReportDatePicker, ReportLink, ReportTimeRange, ResultsEntryCard, ResultsEntryForm, ResultsEntryModal, SSOConfigForm, ScheduleCalendar, SearchResultsMessage, SelectedServicesBadges, ServerErrorPage, ServiceAccordion, ServiceBadge, ServiceBadgeGroup, ServiceCard, ServiceCategoryBadge, ServiceGeneralSettings, ServiceGrid, ServiceLink, ServiceList, ServiceMultiSelect, ServicePicker, ServicePricingManager, ServiceSelect, ServiceShippingSettings, ServiceTagCloud, ServiceTagCloudBadges, SetupServiceModal, Sidebar, SidebarContent, SidebarFooter, SidebarHeader, SidebarMobileToggle, SidebarNav, SidebarNavGroup, SidebarNavItem, SidebarProvider, SidebarSearch, SidebarToggle, SimpleFooter, SiteFooter, SiteHeader, SiteLogo, StepIndicator, StripeBadge, StripeSecureBadge, SuggestedActions, TableOfContents, TimelineEventList, TimelineProgress, Toast, ToastContainer, ToastProvider, UncertaintyBadge, UpdateAvailableOverlay, UserMenu, VerifiedBadge2 as VerifiedBadge, VisitScribe, VoiceManager, VoiceSetup, WEBSITE_TYPES, WebChartReportViewer, WebcamModal, WebsiteInput, WebsiteInputGroup, attributeSegments, calculateDateRange, centroid, chime, clusterEmbeddings, concernGroupKey, concernHistoryContent, cosine, countBadgeVariants, countChipVariants, create24HourSchedule, createDefaultSchedule, createWeekdaySchedule, currentAssertion, defaultCaseManagementHeaderLabels, defaultHeyOzwellSelectorLabels, defaultOrderTabs, defaultReconciliationIsEqual, formatAddressLines, formatAddressSingleLine, formatCityState, formatCityStateZip, generateId, getDefaultPresets, getExtendedPresets, getGoogleMapsSearchUrl, getGoogleMapsUrl, getWakeWarm, inferSpeakerRoles, isConditionCodetype, isValidUrl, labelClusters, medicationToOrder, mergeTurns, normalizeClosingTime, normalizeConditionCodingSystem, openRollingRecorder, orderToMedication, orderTypeForCodetype, parseTimeInput, panelVariants as reconciliationPanelVariants, subscribeWakeWarm, useCamera, useCommandPalette, useConnectionStatus, useCookieConsent, useDiarization, useDocumentDetection, useDropzone, useFileUpload, useHeyOzwell, useOptionalToast, useSidebar, useSpeakerVerify, useToast, useVisitScribe, useVoiceSetup, useWakeWord, warmWakeModels, widgetVariants };
44860
44254
  //# sourceMappingURL=index.js.map
44861
44255
  //# sourceMappingURL=index.js.map