@mieweb/ui 0.6.1-dev.131 → 0.6.1-dev.133
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/README.md +46 -10
- package/dist/{chunk-IBZXDX4L.cjs → chunk-3CFB4TVQ.cjs} +33 -3
- package/dist/chunk-3CFB4TVQ.cjs.map +1 -0
- package/dist/{chunk-2DS3RJ2D.js → chunk-Q577IUE5.js} +33 -3
- package/dist/chunk-Q577IUE5.js.map +1 -0
- package/dist/index.cjs +1161 -529
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +136 -1
- package/dist/index.d.ts +136 -1
- package/dist/index.js +1078 -449
- package/dist/index.js.map +1 -1
- package/dist/styles.css +1 -1
- package/dist/tailwind-preset.cjs +4 -4
- package/dist/tailwind-preset.js +1 -1
- package/package.json +28 -5
- package/dist/chunk-2DS3RJ2D.js.map +0 -1
- package/dist/chunk-IBZXDX4L.cjs.map +0 -1
package/dist/index.js
CHANGED
|
@@ -89,13 +89,13 @@ import { dateToDisplayFormat, isValidDate, displayFormatToDateString } from './c
|
|
|
89
89
|
export { calculateAge, dateToDisplayFormat, displayFormatToDateString, formatDateValue, isDateEmpty, isDateInFuture, isDateInPast, isValidDate, isValidDrivingAge, parseDateValue } from './chunk-RC2YMOMS.js';
|
|
90
90
|
import { isStorybookDocsMode } from './chunk-VSQF22GL.js';
|
|
91
91
|
export { isStorybookDocsMode } from './chunk-VSQF22GL.js';
|
|
92
|
-
export { miewebUIPreset, miewebUISafelist } from './chunk-
|
|
92
|
+
export { miewebUIPreset, miewebUISafelist } from './chunk-Q577IUE5.js';
|
|
93
93
|
import { Alert, AlertTitle, AlertDescription } from './chunk-MV3MTHWQ.js';
|
|
94
94
|
export { Alert, AlertDescription, AlertTitle, alertVariants } from './chunk-MV3MTHWQ.js';
|
|
95
95
|
import { cn } from './chunk-F3SOEIN2.js';
|
|
96
96
|
export { cn } from './chunk-F3SOEIN2.js';
|
|
97
|
-
import * as
|
|
98
|
-
import
|
|
97
|
+
import * as React49 from 'react';
|
|
98
|
+
import React49__default, { createContext, useState, useEffect, useCallback, useMemo, useContext, useRef } from 'react';
|
|
99
99
|
import { jsxs, Fragment, jsx } from 'react/jsx-runtime';
|
|
100
100
|
import { cva } from 'class-variance-authority';
|
|
101
101
|
import * as ReactDOM from 'react-dom';
|
|
@@ -569,8 +569,8 @@ function AdditionalFields({
|
|
|
569
569
|
className,
|
|
570
570
|
collapsible = true
|
|
571
571
|
}) {
|
|
572
|
-
const [isExpanded, setIsExpanded] =
|
|
573
|
-
const contentId =
|
|
572
|
+
const [isExpanded, setIsExpanded] = React49.useState(defaultExpanded);
|
|
573
|
+
const contentId = React49.useId();
|
|
574
574
|
const handleNameChange = (id, name) => {
|
|
575
575
|
const updated = value.map(
|
|
576
576
|
(entry) => entry.id === id ? { ...entry, name } : entry
|
|
@@ -1008,10 +1008,10 @@ function AddressForm({
|
|
|
1008
1008
|
className,
|
|
1009
1009
|
googlePlaces
|
|
1010
1010
|
}) {
|
|
1011
|
-
const generatedId =
|
|
1011
|
+
const generatedId = React49.useId();
|
|
1012
1012
|
const idPrefix = id || generatedId;
|
|
1013
|
-
const autocompleteRef =
|
|
1014
|
-
const inputRef =
|
|
1013
|
+
const autocompleteRef = React49.useRef(null);
|
|
1014
|
+
const inputRef = React49.useRef(null);
|
|
1015
1015
|
const mergedLabels = { ...DEFAULT_LABELS, ...labels };
|
|
1016
1016
|
const mergedPlaceholders = { ...DEFAULT_PLACEHOLDERS, ...placeholders };
|
|
1017
1017
|
const handleChange = (field, fieldValue) => {
|
|
@@ -1020,7 +1020,7 @@ function AddressForm({
|
|
|
1020
1020
|
[field]: fieldValue
|
|
1021
1021
|
});
|
|
1022
1022
|
};
|
|
1023
|
-
|
|
1023
|
+
React49.useEffect(() => {
|
|
1024
1024
|
if (!googlePlaces?.enabled || !inputRef.current) return;
|
|
1025
1025
|
const googleMaps = globalThis.window?.google;
|
|
1026
1026
|
if (!googleMaps?.maps?.places?.Autocomplete) {
|
|
@@ -1881,7 +1881,7 @@ function ToolResultDisplay({
|
|
|
1881
1881
|
showRawData = false,
|
|
1882
1882
|
className
|
|
1883
1883
|
}) {
|
|
1884
|
-
const [showJson, setShowJson] =
|
|
1884
|
+
const [showJson, setShowJson] = React49.useState(false);
|
|
1885
1885
|
if (result.type === "error") {
|
|
1886
1886
|
return /* @__PURE__ */ jsx(
|
|
1887
1887
|
"div",
|
|
@@ -2043,7 +2043,7 @@ function MCPToolCallDisplay({
|
|
|
2043
2043
|
onLinkClick,
|
|
2044
2044
|
className
|
|
2045
2045
|
}) {
|
|
2046
|
-
const [showDetails, setShowDetails] =
|
|
2046
|
+
const [showDetails, setShowDetails] = React49.useState(!defaultCollapsed);
|
|
2047
2047
|
const formatDuration2 = (ms) => {
|
|
2048
2048
|
if (!ms) return null;
|
|
2049
2049
|
if (ms < 1e3) return `${ms}ms`;
|
|
@@ -2290,7 +2290,7 @@ function ContentBlock({
|
|
|
2290
2290
|
role,
|
|
2291
2291
|
renderTextContent
|
|
2292
2292
|
}) {
|
|
2293
|
-
const [isCollapsed, setIsCollapsed] =
|
|
2293
|
+
const [isCollapsed, setIsCollapsed] = React49.useState(
|
|
2294
2294
|
content.collapsed ?? false
|
|
2295
2295
|
);
|
|
2296
2296
|
if (content.type === "text" && content.text) {
|
|
@@ -2725,7 +2725,7 @@ function AttachmentPreviewItem({
|
|
|
2725
2725
|
);
|
|
2726
2726
|
}
|
|
2727
2727
|
AttachmentPreviewItem.displayName = "AttachmentPreviewItem";
|
|
2728
|
-
var AttachmentPicker =
|
|
2728
|
+
var AttachmentPicker = React49.forwardRef(
|
|
2729
2729
|
({
|
|
2730
2730
|
onFilesSelected,
|
|
2731
2731
|
acceptedTypes = ["image/*", "video/*", ".pdf", ".doc", ".docx"],
|
|
@@ -2738,8 +2738,8 @@ var AttachmentPicker = React48.forwardRef(
|
|
|
2738
2738
|
className,
|
|
2739
2739
|
children
|
|
2740
2740
|
}, ref) => {
|
|
2741
|
-
const inputRef =
|
|
2742
|
-
|
|
2741
|
+
const inputRef = React49.useRef(null);
|
|
2742
|
+
React49.useImperativeHandle(ref, () => inputRef.current);
|
|
2743
2743
|
const handleClick = () => {
|
|
2744
2744
|
inputRef.current?.click();
|
|
2745
2745
|
};
|
|
@@ -2831,8 +2831,8 @@ function DragDropZone({
|
|
|
2831
2831
|
children,
|
|
2832
2832
|
className
|
|
2833
2833
|
}) {
|
|
2834
|
-
const [isDragging, setIsDragging] =
|
|
2835
|
-
const dragCounterRef =
|
|
2834
|
+
const [isDragging, setIsDragging] = React49.useState(false);
|
|
2835
|
+
const dragCounterRef = React49.useRef(0);
|
|
2836
2836
|
const handleDragEnter = (event) => {
|
|
2837
2837
|
event.preventDefault();
|
|
2838
2838
|
event.stopPropagation();
|
|
@@ -2934,7 +2934,7 @@ function CameraButton({
|
|
|
2934
2934
|
disabled = false,
|
|
2935
2935
|
className
|
|
2936
2936
|
}) {
|
|
2937
|
-
const inputRef =
|
|
2937
|
+
const inputRef = React49.useRef(null);
|
|
2938
2938
|
const handleClick = () => {
|
|
2939
2939
|
inputRef.current?.click();
|
|
2940
2940
|
};
|
|
@@ -3072,7 +3072,7 @@ var sendButtonVariants = cva(
|
|
|
3072
3072
|
}
|
|
3073
3073
|
}
|
|
3074
3074
|
);
|
|
3075
|
-
var SendButton =
|
|
3075
|
+
var SendButton = React49.forwardRef(
|
|
3076
3076
|
({ className, variant, canSend, isLoading, disabled, ...props }, ref) => {
|
|
3077
3077
|
return /* @__PURE__ */ jsx(
|
|
3078
3078
|
"button",
|
|
@@ -3137,7 +3137,7 @@ var SendButton = React48.forwardRef(
|
|
|
3137
3137
|
}
|
|
3138
3138
|
);
|
|
3139
3139
|
SendButton.displayName = "SendButton";
|
|
3140
|
-
var MessageComposer =
|
|
3140
|
+
var MessageComposer = React49.forwardRef(
|
|
3141
3141
|
({
|
|
3142
3142
|
onSend,
|
|
3143
3143
|
onTypingStart,
|
|
@@ -3162,11 +3162,11 @@ var MessageComposer = React48.forwardRef(
|
|
|
3162
3162
|
inputTrailing,
|
|
3163
3163
|
className
|
|
3164
3164
|
}, ref) => {
|
|
3165
|
-
const textareaRef =
|
|
3166
|
-
const [internalContent, setInternalContent] =
|
|
3165
|
+
const textareaRef = React49.useRef(null);
|
|
3166
|
+
const [internalContent, setInternalContent] = React49.useState("");
|
|
3167
3167
|
const isControlled = controlledValue !== void 0;
|
|
3168
3168
|
const content = isControlled ? controlledValue : internalContent;
|
|
3169
|
-
const setContent =
|
|
3169
|
+
const setContent = React49.useCallback(
|
|
3170
3170
|
(val) => {
|
|
3171
3171
|
if (isControlled) {
|
|
3172
3172
|
const newVal = typeof val === "function" ? val(controlledValue) : val;
|
|
@@ -3177,20 +3177,20 @@ var MessageComposer = React48.forwardRef(
|
|
|
3177
3177
|
},
|
|
3178
3178
|
[isControlled, controlledValue, onValueChange]
|
|
3179
3179
|
);
|
|
3180
|
-
const [attachments, setAttachments] =
|
|
3180
|
+
const [attachments, setAttachments] = React49.useState(
|
|
3181
3181
|
[]
|
|
3182
3182
|
);
|
|
3183
|
-
const [isTyping, setIsTyping] =
|
|
3184
|
-
const typingTimeoutRef =
|
|
3185
|
-
|
|
3186
|
-
|
|
3183
|
+
const [isTyping, setIsTyping] = React49.useState(false);
|
|
3184
|
+
const typingTimeoutRef = React49.useRef(null);
|
|
3185
|
+
React49.useImperativeHandle(ref, () => textareaRef.current);
|
|
3186
|
+
React49.useEffect(() => {
|
|
3187
3187
|
const textarea = textareaRef.current;
|
|
3188
3188
|
if (textarea) {
|
|
3189
3189
|
textarea.style.height = "auto";
|
|
3190
3190
|
textarea.style.height = `${Math.min(textarea.scrollHeight, 150)}px`;
|
|
3191
3191
|
}
|
|
3192
3192
|
}, [content]);
|
|
3193
|
-
|
|
3193
|
+
React49.useEffect(() => {
|
|
3194
3194
|
if (content.length > 0 && !isTyping) {
|
|
3195
3195
|
setIsTyping(true);
|
|
3196
3196
|
onTypingStart?.();
|
|
@@ -3210,12 +3210,12 @@ var MessageComposer = React48.forwardRef(
|
|
|
3210
3210
|
}
|
|
3211
3211
|
};
|
|
3212
3212
|
}, [content, isTyping, onTypingStart, onTypingStop]);
|
|
3213
|
-
|
|
3213
|
+
React49.useEffect(() => {
|
|
3214
3214
|
if (autoFocus) {
|
|
3215
3215
|
textareaRef.current?.focus();
|
|
3216
3216
|
}
|
|
3217
3217
|
}, [autoFocus]);
|
|
3218
|
-
|
|
3218
|
+
React49.useEffect(() => {
|
|
3219
3219
|
if (replyTo) {
|
|
3220
3220
|
textareaRef.current?.focus();
|
|
3221
3221
|
}
|
|
@@ -3279,7 +3279,7 @@ var MessageComposer = React48.forwardRef(
|
|
|
3279
3279
|
return prev.filter((a) => a.id !== attachmentId);
|
|
3280
3280
|
});
|
|
3281
3281
|
};
|
|
3282
|
-
|
|
3282
|
+
React49.useEffect(() => {
|
|
3283
3283
|
const currentAttachments = attachments;
|
|
3284
3284
|
return () => {
|
|
3285
3285
|
currentAttachments.forEach((a) => {
|
|
@@ -3846,7 +3846,7 @@ function defaultFormatTimestamp(timestamp) {
|
|
|
3846
3846
|
minute: "2-digit"
|
|
3847
3847
|
});
|
|
3848
3848
|
}
|
|
3849
|
-
var MessageBubble =
|
|
3849
|
+
var MessageBubble = React49.forwardRef(
|
|
3850
3850
|
({
|
|
3851
3851
|
className,
|
|
3852
3852
|
message,
|
|
@@ -4321,7 +4321,7 @@ function LoadMoreButton({
|
|
|
4321
4321
|
);
|
|
4322
4322
|
}
|
|
4323
4323
|
LoadMoreButton.displayName = "LoadMoreButton";
|
|
4324
|
-
var MessageList =
|
|
4324
|
+
var MessageList = React49.forwardRef(
|
|
4325
4325
|
({
|
|
4326
4326
|
messages,
|
|
4327
4327
|
currentUser,
|
|
@@ -4340,19 +4340,19 @@ var MessageList = React48.forwardRef(
|
|
|
4340
4340
|
className,
|
|
4341
4341
|
autoScroll = "onNewMessage"
|
|
4342
4342
|
}, ref) => {
|
|
4343
|
-
const scrollContainerRef =
|
|
4344
|
-
const bottomRef =
|
|
4345
|
-
const [isUserScrolled, setIsUserScrolled] =
|
|
4346
|
-
const prevMessageCountRef =
|
|
4347
|
-
|
|
4348
|
-
const handleScroll =
|
|
4343
|
+
const scrollContainerRef = React49.useRef(null);
|
|
4344
|
+
const bottomRef = React49.useRef(null);
|
|
4345
|
+
const [isUserScrolled, setIsUserScrolled] = React49.useState(false);
|
|
4346
|
+
const prevMessageCountRef = React49.useRef(messages.length);
|
|
4347
|
+
React49.useImperativeHandle(ref, () => scrollContainerRef.current);
|
|
4348
|
+
const handleScroll = React49.useCallback(() => {
|
|
4349
4349
|
const container = scrollContainerRef.current;
|
|
4350
4350
|
if (!container) return;
|
|
4351
4351
|
const { scrollTop, scrollHeight, clientHeight } = container;
|
|
4352
4352
|
const isAtBottom = scrollHeight - scrollTop - clientHeight < 100;
|
|
4353
4353
|
setIsUserScrolled(!isAtBottom);
|
|
4354
4354
|
}, []);
|
|
4355
|
-
|
|
4355
|
+
React49.useEffect(() => {
|
|
4356
4356
|
const container = scrollContainerRef.current;
|
|
4357
4357
|
const bottom = bottomRef.current;
|
|
4358
4358
|
if (!container || !bottom) return;
|
|
@@ -4368,7 +4368,7 @@ var MessageList = React48.forwardRef(
|
|
|
4368
4368
|
}
|
|
4369
4369
|
}
|
|
4370
4370
|
}, [messages, currentUser.id, autoScroll, isUserScrolled]);
|
|
4371
|
-
|
|
4371
|
+
React49.useEffect(() => {
|
|
4372
4372
|
const bottom = bottomRef.current;
|
|
4373
4373
|
if (bottom && !isLoading) {
|
|
4374
4374
|
bottom.scrollIntoView();
|
|
@@ -4421,7 +4421,7 @@ var MessageList = React48.forwardRef(
|
|
|
4421
4421
|
{
|
|
4422
4422
|
"data-slot": "message-list-content",
|
|
4423
4423
|
className: "flex flex-col gap-1 p-4",
|
|
4424
|
-
children: messageGroups.map((group) => /* @__PURE__ */ jsxs(
|
|
4424
|
+
children: messageGroups.map((group) => /* @__PURE__ */ jsxs(React49.Fragment, { children: [
|
|
4425
4425
|
groupByDate && group.label && /* @__PURE__ */ jsx(DateSeparator, { label: group.label }),
|
|
4426
4426
|
group.messages.map((message, index) => {
|
|
4427
4427
|
const prevMessage = group.messages[index - 1];
|
|
@@ -4728,13 +4728,13 @@ function AIChat({
|
|
|
4728
4728
|
onClose,
|
|
4729
4729
|
renderTextContent
|
|
4730
4730
|
}) {
|
|
4731
|
-
const messagesEndRef =
|
|
4732
|
-
const messages =
|
|
4731
|
+
const messagesEndRef = React49.useRef(null);
|
|
4732
|
+
const messages = React49.useMemo(
|
|
4733
4733
|
() => session?.messages || messagesProp || [],
|
|
4734
4734
|
[session?.messages, messagesProp]
|
|
4735
4735
|
);
|
|
4736
4736
|
const isGenerating = session?.isGenerating || isGeneratingProp || false;
|
|
4737
|
-
|
|
4737
|
+
React49.useEffect(() => {
|
|
4738
4738
|
messagesEndRef.current?.scrollIntoView({ behavior: "smooth" });
|
|
4739
4739
|
}, [messages]);
|
|
4740
4740
|
const handleSend = async (message) => {
|
|
@@ -5014,7 +5014,7 @@ function FloatingAIChat({
|
|
|
5014
5014
|
pulse = false,
|
|
5015
5015
|
...chatProps
|
|
5016
5016
|
}) {
|
|
5017
|
-
const [internalOpen, setInternalOpen] =
|
|
5017
|
+
const [internalOpen, setInternalOpen] = React49.useState(defaultOpen);
|
|
5018
5018
|
const isControlled = controlledOpen !== void 0;
|
|
5019
5019
|
const isOpen = isControlled ? controlledOpen : internalOpen;
|
|
5020
5020
|
const handleOpenChange = (open) => {
|
|
@@ -5044,6 +5044,635 @@ function FloatingAIChat({
|
|
|
5044
5044
|
)
|
|
5045
5045
|
] });
|
|
5046
5046
|
}
|
|
5047
|
+
function normalizeString(value) {
|
|
5048
|
+
return value.trim().replace(/\s+/g, " ").toLowerCase();
|
|
5049
|
+
}
|
|
5050
|
+
function stableStringify(value, seen = /* @__PURE__ */ new WeakSet()) {
|
|
5051
|
+
if (value === null || typeof value !== "object") return JSON.stringify(value);
|
|
5052
|
+
if (seen.has(value)) return '"[Circular]"';
|
|
5053
|
+
seen.add(value);
|
|
5054
|
+
if (Array.isArray(value))
|
|
5055
|
+
return "[" + value.map((v) => stableStringify(v, seen)).join(",") + "]";
|
|
5056
|
+
const keys = Object.keys(value).sort();
|
|
5057
|
+
return "{" + keys.map(
|
|
5058
|
+
(k) => JSON.stringify(k) + ":" + stableStringify(value[k], seen)
|
|
5059
|
+
).join(",") + "}";
|
|
5060
|
+
}
|
|
5061
|
+
function safeStableStringify(value) {
|
|
5062
|
+
try {
|
|
5063
|
+
return stableStringify(value);
|
|
5064
|
+
} catch {
|
|
5065
|
+
return '"[Unserializable]"';
|
|
5066
|
+
}
|
|
5067
|
+
}
|
|
5068
|
+
function defaultReconciliationIsEqual(current, proposed) {
|
|
5069
|
+
const a = current ?? "";
|
|
5070
|
+
const b = proposed ?? "";
|
|
5071
|
+
if (a === b) return true;
|
|
5072
|
+
if (typeof a === "string" && typeof b === "string") {
|
|
5073
|
+
return normalizeString(a) === normalizeString(b);
|
|
5074
|
+
}
|
|
5075
|
+
if (a instanceof Date && b instanceof Date) {
|
|
5076
|
+
return a.getTime() === b.getTime();
|
|
5077
|
+
}
|
|
5078
|
+
if (typeof a === "object" && typeof b === "object" && a && b) {
|
|
5079
|
+
try {
|
|
5080
|
+
return stableStringify(a) === stableStringify(b);
|
|
5081
|
+
} catch {
|
|
5082
|
+
return false;
|
|
5083
|
+
}
|
|
5084
|
+
}
|
|
5085
|
+
return false;
|
|
5086
|
+
}
|
|
5087
|
+
function resolveConfidenceLevel(p) {
|
|
5088
|
+
if (p.confidenceLevel) return p.confidenceLevel;
|
|
5089
|
+
if (typeof p.confidence !== "number") return void 0;
|
|
5090
|
+
if (p.confidence >= 0.85) return "high";
|
|
5091
|
+
if (p.confidence >= 0.6) return "medium";
|
|
5092
|
+
return "low";
|
|
5093
|
+
}
|
|
5094
|
+
function defaultAcceptedFor(p) {
|
|
5095
|
+
if (typeof p.defaultAccepted === "boolean") return p.defaultAccepted;
|
|
5096
|
+
if (p.required) return true;
|
|
5097
|
+
return resolveConfidenceLevel(p) !== "low";
|
|
5098
|
+
}
|
|
5099
|
+
var panelVariants = cva(
|
|
5100
|
+
[
|
|
5101
|
+
"rounded-xl bg-card text-card-foreground",
|
|
5102
|
+
"border border-border shadow-sm",
|
|
5103
|
+
"flex flex-col overflow-hidden"
|
|
5104
|
+
],
|
|
5105
|
+
{
|
|
5106
|
+
variants: {
|
|
5107
|
+
tone: {
|
|
5108
|
+
default: "",
|
|
5109
|
+
accent: "ring-1 ring-primary-200 dark:ring-primary-900"
|
|
5110
|
+
}
|
|
5111
|
+
},
|
|
5112
|
+
defaultVariants: {
|
|
5113
|
+
tone: "default"
|
|
5114
|
+
}
|
|
5115
|
+
}
|
|
5116
|
+
);
|
|
5117
|
+
var confidenceBadgeVariants = cva(
|
|
5118
|
+
"inline-flex items-center gap-1 rounded-full px-2 py-0.5 text-xs font-medium",
|
|
5119
|
+
{
|
|
5120
|
+
variants: {
|
|
5121
|
+
level: {
|
|
5122
|
+
high: "bg-success-100 text-success dark:bg-success-900/30 dark:text-success-300",
|
|
5123
|
+
medium: "bg-amber-100 text-amber-700 dark:bg-amber-900/30 dark:text-amber-300",
|
|
5124
|
+
low: "bg-amber-200 text-amber-800 dark:bg-amber-900/40 dark:text-amber-200"
|
|
5125
|
+
}
|
|
5126
|
+
},
|
|
5127
|
+
defaultVariants: { level: "high" }
|
|
5128
|
+
}
|
|
5129
|
+
);
|
|
5130
|
+
function formatValueDefault(value) {
|
|
5131
|
+
if (value === null || value === void 0 || value === "") {
|
|
5132
|
+
return /* @__PURE__ */ jsx("span", { className: "text-muted-foreground italic", "aria-label": "empty", children: "\u2014" });
|
|
5133
|
+
}
|
|
5134
|
+
if (value instanceof Date) return value.toLocaleDateString();
|
|
5135
|
+
if (typeof value === "object") {
|
|
5136
|
+
try {
|
|
5137
|
+
return JSON.stringify(value);
|
|
5138
|
+
} catch {
|
|
5139
|
+
return String(value);
|
|
5140
|
+
}
|
|
5141
|
+
}
|
|
5142
|
+
return String(value);
|
|
5143
|
+
}
|
|
5144
|
+
function ConfidenceBadge({ level }) {
|
|
5145
|
+
const labels = {
|
|
5146
|
+
high: "High confidence",
|
|
5147
|
+
medium: "Medium confidence",
|
|
5148
|
+
low: "Low confidence"
|
|
5149
|
+
};
|
|
5150
|
+
return /* @__PURE__ */ jsx(
|
|
5151
|
+
"span",
|
|
5152
|
+
{
|
|
5153
|
+
className: cn(confidenceBadgeVariants({ level })),
|
|
5154
|
+
"data-slot": "reconciliation-confidence",
|
|
5155
|
+
children: labels[level]
|
|
5156
|
+
}
|
|
5157
|
+
);
|
|
5158
|
+
}
|
|
5159
|
+
function ReconciliationProposalRow({
|
|
5160
|
+
proposal,
|
|
5161
|
+
state,
|
|
5162
|
+
onAcceptedChange,
|
|
5163
|
+
onValueChange,
|
|
5164
|
+
onToggleEditing
|
|
5165
|
+
}) {
|
|
5166
|
+
const safeState = state ?? {
|
|
5167
|
+
accepted: defaultAcceptedFor(proposal),
|
|
5168
|
+
editing: false,
|
|
5169
|
+
value: proposal.proposed
|
|
5170
|
+
};
|
|
5171
|
+
const rowId = React49.useId();
|
|
5172
|
+
const checkboxId = `${rowId}-accept`;
|
|
5173
|
+
const level = resolveConfidenceLevel(proposal);
|
|
5174
|
+
const render = proposal.renderValue ?? formatValueDefault;
|
|
5175
|
+
const canEdit = Boolean(proposal.renderEditor);
|
|
5176
|
+
return /* @__PURE__ */ jsxs(
|
|
5177
|
+
"li",
|
|
5178
|
+
{
|
|
5179
|
+
"data-slot": "reconciliation-row",
|
|
5180
|
+
"data-accepted": safeState.accepted,
|
|
5181
|
+
className: cn(
|
|
5182
|
+
"flex gap-3 px-4 py-3 transition-colors",
|
|
5183
|
+
safeState.accepted ? "bg-background" : "bg-muted/40",
|
|
5184
|
+
"border-border border-b last:border-b-0"
|
|
5185
|
+
),
|
|
5186
|
+
children: [
|
|
5187
|
+
/* @__PURE__ */ jsx("div", { className: "pt-0.5", children: /* @__PURE__ */ jsx(
|
|
5188
|
+
Checkbox,
|
|
5189
|
+
{
|
|
5190
|
+
id: checkboxId,
|
|
5191
|
+
checked: safeState.accepted,
|
|
5192
|
+
onChange: (e) => onAcceptedChange(e.target.checked),
|
|
5193
|
+
disabled: proposal.required,
|
|
5194
|
+
"aria-label": `Apply update for ${proposal.label}`
|
|
5195
|
+
}
|
|
5196
|
+
) }),
|
|
5197
|
+
/* @__PURE__ */ jsxs("div", { className: "min-w-0 flex-1", children: [
|
|
5198
|
+
/* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between gap-3", children: [
|
|
5199
|
+
/* @__PURE__ */ jsxs(
|
|
5200
|
+
"label",
|
|
5201
|
+
{
|
|
5202
|
+
htmlFor: checkboxId,
|
|
5203
|
+
className: cn(
|
|
5204
|
+
"text-foreground cursor-pointer text-sm font-medium",
|
|
5205
|
+
proposal.required && "cursor-default"
|
|
5206
|
+
),
|
|
5207
|
+
children: [
|
|
5208
|
+
proposal.label,
|
|
5209
|
+
proposal.required && /* @__PURE__ */ jsx(
|
|
5210
|
+
"span",
|
|
5211
|
+
{
|
|
5212
|
+
className: "text-muted-foreground ml-1 text-xs font-normal",
|
|
5213
|
+
"aria-label": "required",
|
|
5214
|
+
children: "(required)"
|
|
5215
|
+
}
|
|
5216
|
+
)
|
|
5217
|
+
]
|
|
5218
|
+
}
|
|
5219
|
+
),
|
|
5220
|
+
/* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
|
|
5221
|
+
level && /* @__PURE__ */ jsx(ConfidenceBadge, { level }),
|
|
5222
|
+
canEdit && /* @__PURE__ */ jsx(
|
|
5223
|
+
"button",
|
|
5224
|
+
{
|
|
5225
|
+
type: "button",
|
|
5226
|
+
onClick: onToggleEditing,
|
|
5227
|
+
className: cn(
|
|
5228
|
+
"text-muted-foreground hover:text-foreground text-xs",
|
|
5229
|
+
"focus-visible:ring-ring rounded focus-visible:ring-2 focus-visible:outline-none",
|
|
5230
|
+
"hover:underline"
|
|
5231
|
+
),
|
|
5232
|
+
"aria-expanded": safeState.editing,
|
|
5233
|
+
"aria-controls": `${rowId}-editor`,
|
|
5234
|
+
children: safeState.editing ? "Done" : "Edit"
|
|
5235
|
+
}
|
|
5236
|
+
)
|
|
5237
|
+
] })
|
|
5238
|
+
] }),
|
|
5239
|
+
proposal.description && /* @__PURE__ */ jsx("p", { className: "text-muted-foreground mt-0.5 text-xs", children: proposal.description }),
|
|
5240
|
+
/* @__PURE__ */ jsxs("dl", { className: "mt-2 grid grid-cols-1 gap-2 text-sm sm:grid-cols-2", children: [
|
|
5241
|
+
/* @__PURE__ */ jsxs("div", { className: "border-border/60 rounded-md border border-dashed px-3 py-2", children: [
|
|
5242
|
+
/* @__PURE__ */ jsx("dt", { className: "text-muted-foreground text-[11px] tracking-wide uppercase", children: "On file" }),
|
|
5243
|
+
/* @__PURE__ */ jsx("dd", { className: "text-foreground mt-0.5 break-words", children: render(proposal.current) })
|
|
5244
|
+
] }),
|
|
5245
|
+
/* @__PURE__ */ jsxs(
|
|
5246
|
+
"div",
|
|
5247
|
+
{
|
|
5248
|
+
className: cn(
|
|
5249
|
+
"rounded-md border px-3 py-2",
|
|
5250
|
+
safeState.accepted ? "border-primary-300 bg-primary-50/60 dark:border-primary-700 dark:bg-primary-950/30" : "border-border bg-background"
|
|
5251
|
+
),
|
|
5252
|
+
children: [
|
|
5253
|
+
/* @__PURE__ */ jsxs("dt", { className: "text-muted-foreground flex items-center gap-1 text-[11px] tracking-wide uppercase", children: [
|
|
5254
|
+
/* @__PURE__ */ jsx(
|
|
5255
|
+
SparklesIcon,
|
|
5256
|
+
{
|
|
5257
|
+
size: "sm",
|
|
5258
|
+
className: "text-primary-700 dark:text-primary-400"
|
|
5259
|
+
}
|
|
5260
|
+
),
|
|
5261
|
+
"From AI",
|
|
5262
|
+
/* @__PURE__ */ jsx("span", { className: "sr-only", children: "(AI-suggested value)" })
|
|
5263
|
+
] }),
|
|
5264
|
+
/* @__PURE__ */ jsx(
|
|
5265
|
+
"dd",
|
|
5266
|
+
{
|
|
5267
|
+
id: `${rowId}-editor`,
|
|
5268
|
+
className: "text-foreground mt-0.5 break-words",
|
|
5269
|
+
children: safeState.editing && proposal.renderEditor ? proposal.renderEditor(safeState.value, onValueChange) : render(safeState.value)
|
|
5270
|
+
}
|
|
5271
|
+
)
|
|
5272
|
+
]
|
|
5273
|
+
}
|
|
5274
|
+
)
|
|
5275
|
+
] }),
|
|
5276
|
+
proposal.hint && /* @__PURE__ */ jsx(
|
|
5277
|
+
"p",
|
|
5278
|
+
{
|
|
5279
|
+
className: cn(
|
|
5280
|
+
"mt-2 text-xs",
|
|
5281
|
+
level === "low" ? "text-amber-700 dark:text-amber-300" : "text-muted-foreground"
|
|
5282
|
+
),
|
|
5283
|
+
children: proposal.hint
|
|
5284
|
+
}
|
|
5285
|
+
)
|
|
5286
|
+
] })
|
|
5287
|
+
]
|
|
5288
|
+
}
|
|
5289
|
+
);
|
|
5290
|
+
}
|
|
5291
|
+
function relativeTimeLabel(date) {
|
|
5292
|
+
const seconds = Math.max(0, Math.round((Date.now() - date.getTime()) / 1e3));
|
|
5293
|
+
if (seconds < 45) return "just now";
|
|
5294
|
+
if (seconds < 90) return "1 minute ago";
|
|
5295
|
+
if (seconds < 3600) return `${Math.round(seconds / 60)} minutes ago`;
|
|
5296
|
+
if (seconds < 5400) return "1 hour ago";
|
|
5297
|
+
if (seconds < 86400) return `${Math.round(seconds / 3600)} hours ago`;
|
|
5298
|
+
return date.toLocaleString();
|
|
5299
|
+
}
|
|
5300
|
+
function SourcePill({ source }) {
|
|
5301
|
+
return /* @__PURE__ */ jsxs(
|
|
5302
|
+
"div",
|
|
5303
|
+
{
|
|
5304
|
+
"data-slot": "reconciliation-source",
|
|
5305
|
+
className: cn(
|
|
5306
|
+
"inline-flex items-center gap-2 rounded-full",
|
|
5307
|
+
"border-border bg-muted/60 border px-3 py-1 text-xs font-medium",
|
|
5308
|
+
"text-muted-foreground"
|
|
5309
|
+
),
|
|
5310
|
+
children: [
|
|
5311
|
+
/* @__PURE__ */ jsx("span", { className: "text-primary-700 dark:text-primary-400 flex items-center", children: source.icon ?? /* @__PURE__ */ jsx(SparklesIcon, { size: "sm" }) }),
|
|
5312
|
+
source.thumbnailUrl && /* @__PURE__ */ jsx(
|
|
5313
|
+
"img",
|
|
5314
|
+
{
|
|
5315
|
+
src: source.thumbnailUrl,
|
|
5316
|
+
alt: "",
|
|
5317
|
+
className: "h-5 w-5 rounded object-cover",
|
|
5318
|
+
"aria-hidden": "true"
|
|
5319
|
+
}
|
|
5320
|
+
),
|
|
5321
|
+
/* @__PURE__ */ jsx("span", { className: "text-foreground", children: source.label }),
|
|
5322
|
+
source.generatedAt && /* @__PURE__ */ jsxs("span", { className: "text-muted-foreground", children: [
|
|
5323
|
+
"\xB7 ",
|
|
5324
|
+
relativeTimeLabel(source.generatedAt)
|
|
5325
|
+
] })
|
|
5326
|
+
]
|
|
5327
|
+
}
|
|
5328
|
+
);
|
|
5329
|
+
}
|
|
5330
|
+
function AIReconciliationPanel({
|
|
5331
|
+
title,
|
|
5332
|
+
description,
|
|
5333
|
+
source,
|
|
5334
|
+
proposals,
|
|
5335
|
+
onApply,
|
|
5336
|
+
onSkip,
|
|
5337
|
+
variant = "panel",
|
|
5338
|
+
open,
|
|
5339
|
+
onOpenChange,
|
|
5340
|
+
tone,
|
|
5341
|
+
applyLabel,
|
|
5342
|
+
skipLabel = "Skip for now",
|
|
5343
|
+
acceptAllLabel = "Accept all",
|
|
5344
|
+
rejectAllLabel = "Reject all",
|
|
5345
|
+
hideBulkActions,
|
|
5346
|
+
isEqual = defaultReconciliationIsEqual,
|
|
5347
|
+
onNothingToReconcile,
|
|
5348
|
+
className
|
|
5349
|
+
}) {
|
|
5350
|
+
const effective = React49.useMemo(
|
|
5351
|
+
() => proposals.filter((p) => !isEqual(p.current, p.proposed)),
|
|
5352
|
+
[proposals, isEqual]
|
|
5353
|
+
);
|
|
5354
|
+
const stateSignature = React49.useMemo(
|
|
5355
|
+
() => effective.map(
|
|
5356
|
+
(p) => `${p.id}\u241F${safeStableStringify(p.proposed)}\u241F${p.defaultAccepted ?? ""}\u241F${p.required ?? ""}\u241F${p.confidence ?? ""}\u241F${p.confidenceLevel ?? ""}`
|
|
5357
|
+
).join("|"),
|
|
5358
|
+
[effective]
|
|
5359
|
+
);
|
|
5360
|
+
const [rowStates, setRowStates] = React49.useState(
|
|
5361
|
+
() => Object.fromEntries(
|
|
5362
|
+
effective.map((p) => [
|
|
5363
|
+
p.id,
|
|
5364
|
+
{
|
|
5365
|
+
accepted: defaultAcceptedFor(p),
|
|
5366
|
+
editing: false,
|
|
5367
|
+
value: p.proposed
|
|
5368
|
+
}
|
|
5369
|
+
])
|
|
5370
|
+
)
|
|
5371
|
+
);
|
|
5372
|
+
React49.useEffect(() => {
|
|
5373
|
+
setRowStates(
|
|
5374
|
+
Object.fromEntries(
|
|
5375
|
+
effective.map((p) => [
|
|
5376
|
+
p.id,
|
|
5377
|
+
{
|
|
5378
|
+
accepted: defaultAcceptedFor(p),
|
|
5379
|
+
editing: false,
|
|
5380
|
+
value: p.proposed
|
|
5381
|
+
}
|
|
5382
|
+
])
|
|
5383
|
+
)
|
|
5384
|
+
);
|
|
5385
|
+
}, [stateSignature]);
|
|
5386
|
+
const reportedEmpty = React49.useRef(false);
|
|
5387
|
+
React49.useEffect(() => {
|
|
5388
|
+
if (effective.length === 0 && !reportedEmpty.current) {
|
|
5389
|
+
reportedEmpty.current = true;
|
|
5390
|
+
onNothingToReconcile?.();
|
|
5391
|
+
}
|
|
5392
|
+
if (effective.length > 0) reportedEmpty.current = false;
|
|
5393
|
+
}, [effective.length, onNothingToReconcile]);
|
|
5394
|
+
const acceptedCount = React49.useMemo(
|
|
5395
|
+
() => Object.values(rowStates).filter((s) => s.accepted).length,
|
|
5396
|
+
[rowStates]
|
|
5397
|
+
);
|
|
5398
|
+
const [submitting, setSubmitting] = React49.useState(false);
|
|
5399
|
+
const setAllAccepted = React49.useCallback(
|
|
5400
|
+
(accepted) => {
|
|
5401
|
+
setRowStates((prev) => {
|
|
5402
|
+
const next = { ...prev };
|
|
5403
|
+
for (const p of effective) {
|
|
5404
|
+
if (p.required && !accepted) continue;
|
|
5405
|
+
const base = prev[p.id] ?? {
|
|
5406
|
+
accepted: defaultAcceptedFor(p),
|
|
5407
|
+
editing: false,
|
|
5408
|
+
value: p.proposed
|
|
5409
|
+
};
|
|
5410
|
+
next[p.id] = { ...base, accepted };
|
|
5411
|
+
}
|
|
5412
|
+
return next;
|
|
5413
|
+
});
|
|
5414
|
+
},
|
|
5415
|
+
[effective]
|
|
5416
|
+
);
|
|
5417
|
+
const setRowAccepted = React49.useCallback(
|
|
5418
|
+
(id, accepted) => {
|
|
5419
|
+
const proposal = effective.find((p) => p.id === id);
|
|
5420
|
+
setRowStates((prev) => {
|
|
5421
|
+
const base = prev[id] ?? {
|
|
5422
|
+
accepted: proposal ? defaultAcceptedFor(proposal) : false,
|
|
5423
|
+
editing: false,
|
|
5424
|
+
value: proposal?.proposed
|
|
5425
|
+
};
|
|
5426
|
+
return { ...prev, [id]: { ...base, accepted } };
|
|
5427
|
+
});
|
|
5428
|
+
},
|
|
5429
|
+
[effective]
|
|
5430
|
+
);
|
|
5431
|
+
const setRowValue = React49.useCallback(
|
|
5432
|
+
(id, value) => {
|
|
5433
|
+
const proposal = effective.find((p) => p.id === id);
|
|
5434
|
+
setRowStates((prev) => {
|
|
5435
|
+
const base = prev[id] ?? {
|
|
5436
|
+
accepted: proposal ? defaultAcceptedFor(proposal) : false,
|
|
5437
|
+
editing: false,
|
|
5438
|
+
value: proposal?.proposed
|
|
5439
|
+
};
|
|
5440
|
+
return { ...prev, [id]: { ...base, value } };
|
|
5441
|
+
});
|
|
5442
|
+
},
|
|
5443
|
+
[effective]
|
|
5444
|
+
);
|
|
5445
|
+
const toggleRowEditing = React49.useCallback(
|
|
5446
|
+
(id) => {
|
|
5447
|
+
const proposal = effective.find((p) => p.id === id);
|
|
5448
|
+
setRowStates((prev) => {
|
|
5449
|
+
const base = prev[id] ?? {
|
|
5450
|
+
accepted: proposal ? defaultAcceptedFor(proposal) : false,
|
|
5451
|
+
editing: false,
|
|
5452
|
+
value: proposal?.proposed
|
|
5453
|
+
};
|
|
5454
|
+
return { ...prev, [id]: { ...base, editing: !base.editing } };
|
|
5455
|
+
});
|
|
5456
|
+
},
|
|
5457
|
+
[effective]
|
|
5458
|
+
);
|
|
5459
|
+
const handleApply = React49.useCallback(async () => {
|
|
5460
|
+
const accepted = effective.filter((p) => rowStates[p.id]?.accepted).map((p) => ({
|
|
5461
|
+
id: p.id,
|
|
5462
|
+
value: rowStates[p.id]?.value ?? p.proposed
|
|
5463
|
+
}));
|
|
5464
|
+
if (accepted.length === 0) return;
|
|
5465
|
+
try {
|
|
5466
|
+
setSubmitting(true);
|
|
5467
|
+
await onApply(accepted);
|
|
5468
|
+
} finally {
|
|
5469
|
+
setSubmitting(false);
|
|
5470
|
+
}
|
|
5471
|
+
}, [effective, rowStates, onApply]);
|
|
5472
|
+
const containerRef = React49.useRef(null);
|
|
5473
|
+
React49.useEffect(() => {
|
|
5474
|
+
const el = containerRef.current;
|
|
5475
|
+
if (!el) return void 0;
|
|
5476
|
+
const handler = (e) => {
|
|
5477
|
+
if (e.key === "Enter" && (e.metaKey || e.ctrlKey)) {
|
|
5478
|
+
if (acceptedCount === 0 || submitting) return;
|
|
5479
|
+
e.preventDefault();
|
|
5480
|
+
void handleApply();
|
|
5481
|
+
return;
|
|
5482
|
+
}
|
|
5483
|
+
if (e.key !== "a" && e.key !== "A") return;
|
|
5484
|
+
if (e.metaKey || e.ctrlKey || e.altKey) return;
|
|
5485
|
+
const target = e.target;
|
|
5486
|
+
const tag = target?.tagName?.toLowerCase();
|
|
5487
|
+
if (tag === "input" || tag === "textarea" || target?.isContentEditable) {
|
|
5488
|
+
return;
|
|
5489
|
+
}
|
|
5490
|
+
e.preventDefault();
|
|
5491
|
+
setAllAccepted(acceptedCount !== effective.length);
|
|
5492
|
+
};
|
|
5493
|
+
el.addEventListener("keydown", handler);
|
|
5494
|
+
return () => el.removeEventListener("keydown", handler);
|
|
5495
|
+
}, [
|
|
5496
|
+
acceptedCount,
|
|
5497
|
+
effective.length,
|
|
5498
|
+
setAllAccepted,
|
|
5499
|
+
handleApply,
|
|
5500
|
+
submitting
|
|
5501
|
+
]);
|
|
5502
|
+
const allAccepted = effective.length > 0 && acceptedCount === effective.length;
|
|
5503
|
+
const someAccepted = acceptedCount > 0 && !allAccepted;
|
|
5504
|
+
const resolvedApplyLabel = applyLabel ?? (acceptedCount === 1 ? "Apply 1 update" : `Apply ${acceptedCount} updates`);
|
|
5505
|
+
const grouped = React49.useMemo(() => {
|
|
5506
|
+
const map = /* @__PURE__ */ new Map();
|
|
5507
|
+
for (const p of effective) {
|
|
5508
|
+
const key = p.group;
|
|
5509
|
+
const arr = map.get(key) ?? [];
|
|
5510
|
+
arr.push(p);
|
|
5511
|
+
map.set(key, arr);
|
|
5512
|
+
}
|
|
5513
|
+
return Array.from(map.entries());
|
|
5514
|
+
}, [effective]);
|
|
5515
|
+
const bulkBar = !hideBulkActions && effective.length > 1 ? /* @__PURE__ */ jsxs(
|
|
5516
|
+
"div",
|
|
5517
|
+
{
|
|
5518
|
+
className: cn(
|
|
5519
|
+
"border-border flex items-center justify-between gap-2 border-b",
|
|
5520
|
+
"bg-muted/40 px-4 py-2"
|
|
5521
|
+
),
|
|
5522
|
+
"data-slot": "reconciliation-bulk",
|
|
5523
|
+
children: [
|
|
5524
|
+
/* @__PURE__ */ jsx(
|
|
5525
|
+
Checkbox,
|
|
5526
|
+
{
|
|
5527
|
+
checked: allAccepted,
|
|
5528
|
+
indeterminate: someAccepted,
|
|
5529
|
+
onChange: (e) => setAllAccepted(e.target.checked),
|
|
5530
|
+
"aria-label": allAccepted ? rejectAllLabel : acceptAllLabel,
|
|
5531
|
+
label: allAccepted ? rejectAllLabel : acceptAllLabel
|
|
5532
|
+
}
|
|
5533
|
+
),
|
|
5534
|
+
/* @__PURE__ */ jsxs(
|
|
5535
|
+
"p",
|
|
5536
|
+
{
|
|
5537
|
+
className: "text-muted-foreground text-xs",
|
|
5538
|
+
role: "status",
|
|
5539
|
+
"aria-live": "polite",
|
|
5540
|
+
children: [
|
|
5541
|
+
acceptedCount,
|
|
5542
|
+
" of ",
|
|
5543
|
+
effective.length,
|
|
5544
|
+
" selected"
|
|
5545
|
+
]
|
|
5546
|
+
}
|
|
5547
|
+
)
|
|
5548
|
+
]
|
|
5549
|
+
}
|
|
5550
|
+
) : null;
|
|
5551
|
+
const rowList = /* @__PURE__ */ jsx(
|
|
5552
|
+
"ul",
|
|
5553
|
+
{
|
|
5554
|
+
"data-slot": "reconciliation-rows",
|
|
5555
|
+
className: "divide-border max-h-[60vh] overflow-y-auto",
|
|
5556
|
+
children: grouped.map(([groupKey, items]) => /* @__PURE__ */ jsxs(React49.Fragment, { children: [
|
|
5557
|
+
groupKey && /* @__PURE__ */ jsx(
|
|
5558
|
+
"li",
|
|
5559
|
+
{
|
|
5560
|
+
"aria-hidden": "true",
|
|
5561
|
+
className: cn(
|
|
5562
|
+
"bg-muted/30 text-muted-foreground border-border",
|
|
5563
|
+
"border-b px-4 py-1.5 text-[11px] font-medium tracking-wide uppercase"
|
|
5564
|
+
),
|
|
5565
|
+
children: groupKey
|
|
5566
|
+
}
|
|
5567
|
+
),
|
|
5568
|
+
items.map((p) => /* @__PURE__ */ jsx(
|
|
5569
|
+
ReconciliationProposalRow,
|
|
5570
|
+
{
|
|
5571
|
+
proposal: p,
|
|
5572
|
+
state: rowStates[p.id],
|
|
5573
|
+
onAcceptedChange: (a) => setRowAccepted(p.id, a),
|
|
5574
|
+
onValueChange: (v) => setRowValue(p.id, v),
|
|
5575
|
+
onToggleEditing: () => toggleRowEditing(p.id)
|
|
5576
|
+
},
|
|
5577
|
+
p.id
|
|
5578
|
+
))
|
|
5579
|
+
] }, groupKey ?? "__nogroup"))
|
|
5580
|
+
}
|
|
5581
|
+
);
|
|
5582
|
+
const footerButtons = /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
5583
|
+
onSkip && /* @__PURE__ */ jsx(
|
|
5584
|
+
Button,
|
|
5585
|
+
{
|
|
5586
|
+
type: "button",
|
|
5587
|
+
variant: "ghost",
|
|
5588
|
+
onClick: onSkip,
|
|
5589
|
+
disabled: submitting,
|
|
5590
|
+
children: skipLabel
|
|
5591
|
+
}
|
|
5592
|
+
),
|
|
5593
|
+
/* @__PURE__ */ jsx(
|
|
5594
|
+
Button,
|
|
5595
|
+
{
|
|
5596
|
+
type: "button",
|
|
5597
|
+
onClick: handleApply,
|
|
5598
|
+
disabled: acceptedCount === 0 || submitting,
|
|
5599
|
+
isLoading: submitting,
|
|
5600
|
+
loadingText: "Applying\u2026",
|
|
5601
|
+
children: resolvedApplyLabel
|
|
5602
|
+
}
|
|
5603
|
+
)
|
|
5604
|
+
] });
|
|
5605
|
+
if (variant === "modal") {
|
|
5606
|
+
if (!onOpenChange) {
|
|
5607
|
+
throw new Error(
|
|
5608
|
+
'AIReconciliationPanel: `onOpenChange` is required when `variant="modal"`.'
|
|
5609
|
+
);
|
|
5610
|
+
}
|
|
5611
|
+
return /* @__PURE__ */ jsxs(Modal, { open: Boolean(open), onOpenChange, size: "2xl", children: [
|
|
5612
|
+
/* @__PURE__ */ jsxs(ModalHeader, { children: [
|
|
5613
|
+
/* @__PURE__ */ jsx(ModalTitle, { children: title }),
|
|
5614
|
+
/* @__PURE__ */ jsx(ModalClose, {})
|
|
5615
|
+
] }),
|
|
5616
|
+
/* @__PURE__ */ jsx(ModalBody, { className: "px-0 py-0", children: /* @__PURE__ */ jsxs(
|
|
5617
|
+
"div",
|
|
5618
|
+
{
|
|
5619
|
+
ref: containerRef,
|
|
5620
|
+
"data-slot": "reconciliation-panel",
|
|
5621
|
+
"data-variant": "modal",
|
|
5622
|
+
className: cn("flex flex-col", className),
|
|
5623
|
+
role: "group",
|
|
5624
|
+
"aria-label": title,
|
|
5625
|
+
children: [
|
|
5626
|
+
/* @__PURE__ */ jsxs("div", { className: "border-border border-b px-6 py-3", children: [
|
|
5627
|
+
description && /* @__PURE__ */ jsx("p", { className: "text-muted-foreground text-sm", children: description }),
|
|
5628
|
+
/* @__PURE__ */ jsx("div", { className: cn(description && "mt-3"), children: /* @__PURE__ */ jsx(SourcePill, { source }) })
|
|
5629
|
+
] }),
|
|
5630
|
+
effective.length === 0 ? /* @__PURE__ */ jsx("p", { className: "text-muted-foreground px-6 py-6 text-sm", children: "No updates to review \u2014 your profile already matches the scan." }) : /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
5631
|
+
bulkBar,
|
|
5632
|
+
rowList
|
|
5633
|
+
] })
|
|
5634
|
+
]
|
|
5635
|
+
}
|
|
5636
|
+
) }),
|
|
5637
|
+
/* @__PURE__ */ jsx(ModalFooter, { children: effective.length === 0 ? /* @__PURE__ */ jsx(Button, { onClick: () => onOpenChange(false), children: "Close" }) : footerButtons })
|
|
5638
|
+
] });
|
|
5639
|
+
}
|
|
5640
|
+
if (effective.length === 0) return null;
|
|
5641
|
+
return /* @__PURE__ */ jsxs(
|
|
5642
|
+
"div",
|
|
5643
|
+
{
|
|
5644
|
+
ref: containerRef,
|
|
5645
|
+
"data-slot": "reconciliation-panel",
|
|
5646
|
+
"data-variant": "panel",
|
|
5647
|
+
className: cn(panelVariants({ tone }), className),
|
|
5648
|
+
role: "group",
|
|
5649
|
+
"aria-label": title,
|
|
5650
|
+
children: [
|
|
5651
|
+
/* @__PURE__ */ jsx("div", { className: "border-border border-b px-4 pt-4 pb-3", children: /* @__PURE__ */ jsxs("div", { className: "flex items-start justify-between gap-3", children: [
|
|
5652
|
+
/* @__PURE__ */ jsxs("div", { className: "min-w-0 flex-1", children: [
|
|
5653
|
+
/* @__PURE__ */ jsx("h2", { className: "text-foreground text-base font-semibold", children: title }),
|
|
5654
|
+
description && /* @__PURE__ */ jsx("p", { className: "text-muted-foreground mt-1 text-sm", children: description })
|
|
5655
|
+
] }),
|
|
5656
|
+
/* @__PURE__ */ jsx(SourcePill, { source })
|
|
5657
|
+
] }) }),
|
|
5658
|
+
bulkBar,
|
|
5659
|
+
rowList,
|
|
5660
|
+
/* @__PURE__ */ jsx(
|
|
5661
|
+
"div",
|
|
5662
|
+
{
|
|
5663
|
+
className: cn(
|
|
5664
|
+
"border-border flex flex-col-reverse gap-2 border-t px-4 py-3",
|
|
5665
|
+
"sm:flex-row sm:items-center sm:justify-end sm:gap-3"
|
|
5666
|
+
),
|
|
5667
|
+
"data-slot": "reconciliation-footer",
|
|
5668
|
+
children: footerButtons
|
|
5669
|
+
}
|
|
5670
|
+
)
|
|
5671
|
+
]
|
|
5672
|
+
}
|
|
5673
|
+
);
|
|
5674
|
+
}
|
|
5675
|
+
AIReconciliationPanel.displayName = "AIReconciliationPanel";
|
|
5047
5676
|
function AppHeader({
|
|
5048
5677
|
children,
|
|
5049
5678
|
className,
|
|
@@ -5360,10 +5989,10 @@ function AuthDialog({
|
|
|
5360
5989
|
requireEmailVerification = false,
|
|
5361
5990
|
className
|
|
5362
5991
|
}) {
|
|
5363
|
-
const [internalMode, setInternalMode] =
|
|
5364
|
-
const [isLoading, setIsLoading] =
|
|
5365
|
-
const [error, setError] =
|
|
5366
|
-
const [success, setSuccess] =
|
|
5992
|
+
const [internalMode, setInternalMode] = React49.useState("login");
|
|
5993
|
+
const [isLoading, setIsLoading] = React49.useState(false);
|
|
5994
|
+
const [error, setError] = React49.useState(null);
|
|
5995
|
+
const [success, setSuccess] = React49.useState(null);
|
|
5367
5996
|
const mode = controlledMode ?? internalMode;
|
|
5368
5997
|
const setMode = (newMode) => {
|
|
5369
5998
|
setError(null);
|
|
@@ -5374,14 +6003,14 @@ function AuthDialog({
|
|
|
5374
6003
|
setInternalMode(newMode);
|
|
5375
6004
|
}
|
|
5376
6005
|
};
|
|
5377
|
-
|
|
6006
|
+
React49.useEffect(() => {
|
|
5378
6007
|
const handleEscape = (e) => {
|
|
5379
6008
|
if (e.key === "Escape" && isOpen) onClose();
|
|
5380
6009
|
};
|
|
5381
6010
|
document.addEventListener("keydown", handleEscape);
|
|
5382
6011
|
return () => document.removeEventListener("keydown", handleEscape);
|
|
5383
6012
|
}, [isOpen, onClose]);
|
|
5384
|
-
|
|
6013
|
+
React49.useEffect(() => {
|
|
5385
6014
|
if (isOpen) {
|
|
5386
6015
|
document.body.style.overflow = "hidden";
|
|
5387
6016
|
} else {
|
|
@@ -5607,9 +6236,9 @@ function AuthDialog({
|
|
|
5607
6236
|
);
|
|
5608
6237
|
}
|
|
5609
6238
|
function LoginForm({ onSubmit, isLoading, onForgotPassword }) {
|
|
5610
|
-
const [email, setEmail] =
|
|
5611
|
-
const [password, setPassword] =
|
|
5612
|
-
const [showPassword, setShowPassword] =
|
|
6239
|
+
const [email, setEmail] = React49.useState("");
|
|
6240
|
+
const [password, setPassword] = React49.useState("");
|
|
6241
|
+
const [showPassword, setShowPassword] = React49.useState(false);
|
|
5613
6242
|
const handleSubmit = (e) => {
|
|
5614
6243
|
e.preventDefault();
|
|
5615
6244
|
onSubmit(email, password);
|
|
@@ -5711,11 +6340,11 @@ function SignupForm({
|
|
|
5711
6340
|
termsUrl,
|
|
5712
6341
|
privacyUrl
|
|
5713
6342
|
}) {
|
|
5714
|
-
const [email, setEmail] =
|
|
5715
|
-
const [password, setPassword] =
|
|
5716
|
-
const [confirmPassword, setConfirmPassword] =
|
|
5717
|
-
const [acceptedTerms, setAcceptedTerms] =
|
|
5718
|
-
const [showPassword, setShowPassword] =
|
|
6343
|
+
const [email, setEmail] = React49.useState("");
|
|
6344
|
+
const [password, setPassword] = React49.useState("");
|
|
6345
|
+
const [confirmPassword, setConfirmPassword] = React49.useState("");
|
|
6346
|
+
const [acceptedTerms, setAcceptedTerms] = React49.useState(false);
|
|
6347
|
+
const [showPassword, setShowPassword] = React49.useState(false);
|
|
5719
6348
|
const passwordsMatch = password === confirmPassword;
|
|
5720
6349
|
const handleSubmit = (e) => {
|
|
5721
6350
|
e.preventDefault();
|
|
@@ -5864,7 +6493,7 @@ function ForgotPasswordForm({
|
|
|
5864
6493
|
isLoading,
|
|
5865
6494
|
onBack
|
|
5866
6495
|
}) {
|
|
5867
|
-
const [email, setEmail] =
|
|
6496
|
+
const [email, setEmail] = React49.useState("");
|
|
5868
6497
|
const handleSubmit = (e) => {
|
|
5869
6498
|
e.preventDefault();
|
|
5870
6499
|
onSubmit(email);
|
|
@@ -5915,9 +6544,9 @@ function ForgotPasswordForm({
|
|
|
5915
6544
|
] });
|
|
5916
6545
|
}
|
|
5917
6546
|
function ResetPasswordForm({ onSubmit, isLoading }) {
|
|
5918
|
-
const [password, setPassword] =
|
|
5919
|
-
const [confirmPassword, setConfirmPassword] =
|
|
5920
|
-
const [showPassword, setShowPassword] =
|
|
6547
|
+
const [password, setPassword] = React49.useState("");
|
|
6548
|
+
const [confirmPassword, setConfirmPassword] = React49.useState("");
|
|
6549
|
+
const [showPassword, setShowPassword] = React49.useState(false);
|
|
5921
6550
|
const passwordsMatch = password === confirmPassword;
|
|
5922
6551
|
const handleSubmit = (e) => {
|
|
5923
6552
|
e.preventDefault();
|
|
@@ -6283,9 +6912,9 @@ function ServiceSelect({
|
|
|
6283
6912
|
error,
|
|
6284
6913
|
className
|
|
6285
6914
|
}) {
|
|
6286
|
-
const [isOpen, setIsOpen] =
|
|
6287
|
-
const dropdownRef =
|
|
6288
|
-
|
|
6915
|
+
const [isOpen, setIsOpen] = React49.useState(false);
|
|
6916
|
+
const dropdownRef = React49.useRef(null);
|
|
6917
|
+
React49.useEffect(() => {
|
|
6289
6918
|
function handleClickOutside(event) {
|
|
6290
6919
|
if (dropdownRef.current && !dropdownRef.current.contains(event.target)) {
|
|
6291
6920
|
setIsOpen(false);
|
|
@@ -6460,7 +7089,7 @@ function DialogOverlay({
|
|
|
6460
7089
|
className,
|
|
6461
7090
|
titleId
|
|
6462
7091
|
}) {
|
|
6463
|
-
|
|
7092
|
+
React49.useEffect(() => {
|
|
6464
7093
|
if (!isOpen || isStorybookDocsMode()) {
|
|
6465
7094
|
return void 0;
|
|
6466
7095
|
}
|
|
@@ -6514,8 +7143,8 @@ function BookingDialog({
|
|
|
6514
7143
|
isLoading = false,
|
|
6515
7144
|
className
|
|
6516
7145
|
}) {
|
|
6517
|
-
const titleId =
|
|
6518
|
-
const [formData, setFormData] =
|
|
7146
|
+
const titleId = React49.useId();
|
|
7147
|
+
const [formData, setFormData] = React49.useState({
|
|
6519
7148
|
firstName: defaultValues?.firstName || "",
|
|
6520
7149
|
lastName: defaultValues?.lastName || "",
|
|
6521
7150
|
phoneNumber: defaultValues?.phoneNumber || "",
|
|
@@ -6524,7 +7153,7 @@ function BookingDialog({
|
|
|
6524
7153
|
consentEmail: defaultValues?.consentEmail ?? false,
|
|
6525
7154
|
consentSms: defaultValues?.consentSms ?? false
|
|
6526
7155
|
});
|
|
6527
|
-
const [errors, setErrors] =
|
|
7156
|
+
const [errors, setErrors] = React49.useState({});
|
|
6528
7157
|
const validate = () => {
|
|
6529
7158
|
const newErrors = {};
|
|
6530
7159
|
if (!formData.firstName.trim()) {
|
|
@@ -6792,7 +7421,7 @@ function InlineBookingForm({
|
|
|
6792
7421
|
isLoading = false,
|
|
6793
7422
|
className
|
|
6794
7423
|
}) {
|
|
6795
|
-
const [formData, setFormData] =
|
|
7424
|
+
const [formData, setFormData] = React49.useState({
|
|
6796
7425
|
firstName: defaultValues?.firstName || "",
|
|
6797
7426
|
lastName: defaultValues?.lastName || "",
|
|
6798
7427
|
phoneNumber: defaultValues?.phoneNumber || "",
|
|
@@ -6801,7 +7430,7 @@ function InlineBookingForm({
|
|
|
6801
7430
|
consentEmail: defaultValues?.consentEmail ?? false,
|
|
6802
7431
|
consentSms: defaultValues?.consentSms ?? false
|
|
6803
7432
|
});
|
|
6804
|
-
const [errors, setErrors] =
|
|
7433
|
+
const [errors, setErrors] = React49.useState({});
|
|
6805
7434
|
const validate = () => {
|
|
6806
7435
|
const newErrors = {};
|
|
6807
7436
|
if (!formData.firstName.trim()) {
|
|
@@ -7530,7 +8159,7 @@ function HoursSummary({
|
|
|
7530
8159
|
defaultExpanded = false,
|
|
7531
8160
|
className
|
|
7532
8161
|
}) {
|
|
7533
|
-
const [isExpanded, setIsExpanded] =
|
|
8162
|
+
const [isExpanded, setIsExpanded] = React49.useState(defaultExpanded);
|
|
7534
8163
|
const isOpen = isCurrentlyOpen(schedule.officeHours);
|
|
7535
8164
|
const todayHours = getTodayHours(schedule.officeHours, use24Hour);
|
|
7536
8165
|
const hasStructuredHours = schedule.officeHours && schedule.officeHours.length > 0;
|
|
@@ -8005,17 +8634,17 @@ function CheckrIntegration({
|
|
|
8005
8634
|
viewDetails = "View Details",
|
|
8006
8635
|
noReportsSelected = "No reports selected"
|
|
8007
8636
|
} = labels;
|
|
8008
|
-
const [showInviteModal, setShowInviteModal] =
|
|
8009
|
-
const [candidateName, setCandidateName] =
|
|
8010
|
-
const [candidateEmail, setCandidateEmail] =
|
|
8011
|
-
const [candidatePhone, setCandidatePhone] =
|
|
8012
|
-
const [selectedPackage, setSelectedPackage] =
|
|
8637
|
+
const [showInviteModal, setShowInviteModal] = React49.useState(false);
|
|
8638
|
+
const [candidateName, setCandidateName] = React49.useState("");
|
|
8639
|
+
const [candidateEmail, setCandidateEmail] = React49.useState("");
|
|
8640
|
+
const [candidatePhone, setCandidatePhone] = React49.useState("");
|
|
8641
|
+
const [selectedPackage, setSelectedPackage] = React49.useState(
|
|
8013
8642
|
packages[0]?.id || ""
|
|
8014
8643
|
);
|
|
8015
|
-
const [selectedReports, setSelectedReports] =
|
|
8644
|
+
const [selectedReports, setSelectedReports] = React49.useState(
|
|
8016
8645
|
/* @__PURE__ */ new Set()
|
|
8017
8646
|
);
|
|
8018
|
-
|
|
8647
|
+
React49.useEffect(() => {
|
|
8019
8648
|
setSelectedReports((prev) => prev.size > 0 ? /* @__PURE__ */ new Set() : prev);
|
|
8020
8649
|
}, [reports, connected]);
|
|
8021
8650
|
const statusLabels = {
|
|
@@ -8049,7 +8678,7 @@ function CheckrIntegration({
|
|
|
8049
8678
|
failed: "bg-destructive",
|
|
8050
8679
|
expired: "bg-muted-foreground"
|
|
8051
8680
|
};
|
|
8052
|
-
const statusCounts =
|
|
8681
|
+
const statusCounts = React49.useMemo(() => {
|
|
8053
8682
|
const counts = {
|
|
8054
8683
|
pending: 0,
|
|
8055
8684
|
running: 0,
|
|
@@ -8588,7 +9217,7 @@ function CommandPaletteProvider({
|
|
|
8588
9217
|
}
|
|
8589
9218
|
}, [isOpen, open, close]);
|
|
8590
9219
|
useCommandK(toggle, enableShortcut);
|
|
8591
|
-
|
|
9220
|
+
React49__default.useEffect(() => {
|
|
8592
9221
|
if (!customEventName) return;
|
|
8593
9222
|
const handler = () => open();
|
|
8594
9223
|
document.addEventListener(customEventName, handler);
|
|
@@ -9500,11 +10129,11 @@ function formatRetryTime(time) {
|
|
|
9500
10129
|
}
|
|
9501
10130
|
function useConnectionStatus(options = {}) {
|
|
9502
10131
|
const { onDisconnect, onReconnect } = options;
|
|
9503
|
-
const [isOnline, setIsOnline] =
|
|
10132
|
+
const [isOnline, setIsOnline] = React49.useState(() => {
|
|
9504
10133
|
if (typeof window === "undefined") return true;
|
|
9505
10134
|
return navigator.onLine;
|
|
9506
10135
|
});
|
|
9507
|
-
|
|
10136
|
+
React49.useEffect(() => {
|
|
9508
10137
|
const handleOnline = () => {
|
|
9509
10138
|
setIsOnline(true);
|
|
9510
10139
|
onReconnect?.();
|
|
@@ -9623,10 +10252,10 @@ function RowActionMenu({
|
|
|
9623
10252
|
item,
|
|
9624
10253
|
actions
|
|
9625
10254
|
}) {
|
|
9626
|
-
const [open, setOpen] =
|
|
9627
|
-
const menuRef =
|
|
9628
|
-
const buttonRef =
|
|
9629
|
-
|
|
10255
|
+
const [open, setOpen] = React49.useState(false);
|
|
10256
|
+
const menuRef = React49.useRef(null);
|
|
10257
|
+
const buttonRef = React49.useRef(null);
|
|
10258
|
+
React49.useEffect(() => {
|
|
9630
10259
|
if (!open) return;
|
|
9631
10260
|
function handleClick(e) {
|
|
9632
10261
|
if (menuRef.current && !menuRef.current.contains(e.target) && buttonRef.current && !buttonRef.current.contains(e.target)) {
|
|
@@ -9636,7 +10265,7 @@ function RowActionMenu({
|
|
|
9636
10265
|
document.addEventListener("mousedown", handleClick);
|
|
9637
10266
|
return () => document.removeEventListener("mousedown", handleClick);
|
|
9638
10267
|
}, [open]);
|
|
9639
|
-
|
|
10268
|
+
React49.useEffect(() => {
|
|
9640
10269
|
if (!open) return;
|
|
9641
10270
|
function handleKey(e) {
|
|
9642
10271
|
if (e.key === "Escape") setOpen(false);
|
|
@@ -9644,8 +10273,8 @@ function RowActionMenu({
|
|
|
9644
10273
|
document.addEventListener("keydown", handleKey);
|
|
9645
10274
|
return () => document.removeEventListener("keydown", handleKey);
|
|
9646
10275
|
}, [open]);
|
|
9647
|
-
const [menuPos, setMenuPos] =
|
|
9648
|
-
|
|
10276
|
+
const [menuPos, setMenuPos] = React49.useState(null);
|
|
10277
|
+
React49.useLayoutEffect(() => {
|
|
9649
10278
|
if (!open || !buttonRef.current) return;
|
|
9650
10279
|
const rect = buttonRef.current.getBoundingClientRect();
|
|
9651
10280
|
setMenuPos({
|
|
@@ -9828,9 +10457,9 @@ function buildDefaultActions(onView, onEdit, onDelete) {
|
|
|
9828
10457
|
function ViewModalActions({
|
|
9829
10458
|
viewTarget
|
|
9830
10459
|
}) {
|
|
9831
|
-
const [shareOpen, setShareOpen] =
|
|
9832
|
-
const shareRef =
|
|
9833
|
-
|
|
10460
|
+
const [shareOpen, setShareOpen] = React49.useState(false);
|
|
10461
|
+
const shareRef = React49.useRef(null);
|
|
10462
|
+
React49.useEffect(() => {
|
|
9834
10463
|
if (!shareOpen) return;
|
|
9835
10464
|
const handleClick = (e) => {
|
|
9836
10465
|
if (shareRef.current && !shareRef.current.contains(e.target)) {
|
|
@@ -9967,7 +10596,7 @@ function ViewModalActions({
|
|
|
9967
10596
|
)
|
|
9968
10597
|
] });
|
|
9969
10598
|
}
|
|
9970
|
-
var CountBadge =
|
|
10599
|
+
var CountBadge = React49.forwardRef(
|
|
9971
10600
|
({
|
|
9972
10601
|
className,
|
|
9973
10602
|
variant,
|
|
@@ -9983,18 +10612,18 @@ var CountBadge = React48.forwardRef(
|
|
|
9983
10612
|
countVariant,
|
|
9984
10613
|
...props
|
|
9985
10614
|
}, ref) => {
|
|
9986
|
-
const [open, setOpen] =
|
|
9987
|
-
const containerRef =
|
|
9988
|
-
const [deleteTarget, setDeleteTarget] =
|
|
9989
|
-
const [editTarget, setEditTarget] =
|
|
10615
|
+
const [open, setOpen] = React49.useState(false);
|
|
10616
|
+
const containerRef = React49.useRef(null);
|
|
10617
|
+
const [deleteTarget, setDeleteTarget] = React49.useState(null);
|
|
10618
|
+
const [editTarget, setEditTarget] = React49.useState(
|
|
9990
10619
|
null
|
|
9991
10620
|
);
|
|
9992
|
-
const [editForm, setEditForm] =
|
|
9993
|
-
const [viewTarget, setViewTarget] =
|
|
10621
|
+
const [editForm, setEditForm] = React49.useState({});
|
|
10622
|
+
const [viewTarget, setViewTarget] = React49.useState(
|
|
9994
10623
|
null
|
|
9995
10624
|
);
|
|
9996
10625
|
const showMenu = items && items.length > 0;
|
|
9997
|
-
|
|
10626
|
+
React49.useEffect(() => {
|
|
9998
10627
|
if (!open) return;
|
|
9999
10628
|
const handleClickOutside = (e) => {
|
|
10000
10629
|
if (containerRef.current && !containerRef.current.contains(e.target)) {
|
|
@@ -10004,7 +10633,7 @@ var CountBadge = React48.forwardRef(
|
|
|
10004
10633
|
document.addEventListener("mousedown", handleClickOutside);
|
|
10005
10634
|
return () => document.removeEventListener("mousedown", handleClickOutside);
|
|
10006
10635
|
}, [open]);
|
|
10007
|
-
|
|
10636
|
+
React49.useEffect(() => {
|
|
10008
10637
|
if (!open) return;
|
|
10009
10638
|
const handleEscape = (e) => {
|
|
10010
10639
|
if (e.key === "Escape") setOpen(false);
|
|
@@ -10012,13 +10641,13 @@ var CountBadge = React48.forwardRef(
|
|
|
10012
10641
|
document.addEventListener("keydown", handleEscape);
|
|
10013
10642
|
return () => document.removeEventListener("keydown", handleEscape);
|
|
10014
10643
|
}, [open]);
|
|
10015
|
-
const handleDeleteRequest =
|
|
10644
|
+
const handleDeleteRequest = React49.useCallback((item) => {
|
|
10016
10645
|
setDeleteTarget(item);
|
|
10017
10646
|
}, []);
|
|
10018
|
-
const handleViewRequest =
|
|
10647
|
+
const handleViewRequest = React49.useCallback((item) => {
|
|
10019
10648
|
setViewTarget(item);
|
|
10020
10649
|
}, []);
|
|
10021
|
-
const handleEditRequest =
|
|
10650
|
+
const handleEditRequest = React49.useCallback((item) => {
|
|
10022
10651
|
setEditTarget(item);
|
|
10023
10652
|
setEditForm({
|
|
10024
10653
|
label: item.label,
|
|
@@ -10441,7 +11070,7 @@ function CookieConsentBanner({
|
|
|
10441
11070
|
isMobileApp = false,
|
|
10442
11071
|
className
|
|
10443
11072
|
}) {
|
|
10444
|
-
const [isAnimating, setIsAnimating] =
|
|
11073
|
+
const [isAnimating, setIsAnimating] = React49.useState(false);
|
|
10445
11074
|
const handleAccept = () => {
|
|
10446
11075
|
setIsAnimating(true);
|
|
10447
11076
|
setTimeout(() => {
|
|
@@ -10500,7 +11129,7 @@ function CookieConsentBanner({
|
|
|
10500
11129
|
appName,
|
|
10501
11130
|
" you are agreeing to our",
|
|
10502
11131
|
" ",
|
|
10503
|
-
legalLinks.map((link, index) => /* @__PURE__ */ jsxs(
|
|
11132
|
+
legalLinks.map((link, index) => /* @__PURE__ */ jsxs(React49.Fragment, { children: [
|
|
10504
11133
|
index > 0 && (index === legalLinks.length - 1 ? " and " : ", "),
|
|
10505
11134
|
/* @__PURE__ */ jsx(
|
|
10506
11135
|
"a",
|
|
@@ -10624,20 +11253,20 @@ function CompactCookieBanner({
|
|
|
10624
11253
|
var COOKIE_CONSENT_KEY = "cookie-consent-accepted";
|
|
10625
11254
|
function useCookieConsent(options = {}) {
|
|
10626
11255
|
const { storageKey = COOKIE_CONSENT_KEY, onConsent } = options;
|
|
10627
|
-
const [hasConsented, setHasConsented] =
|
|
11256
|
+
const [hasConsented, setHasConsented] = React49.useState(() => {
|
|
10628
11257
|
if (typeof window === "undefined") return false;
|
|
10629
11258
|
return localStorage.getItem(storageKey) === "true";
|
|
10630
11259
|
});
|
|
10631
|
-
const acceptCookies =
|
|
11260
|
+
const acceptCookies = React49.useCallback(() => {
|
|
10632
11261
|
localStorage.setItem(storageKey, "true");
|
|
10633
11262
|
setHasConsented(true);
|
|
10634
11263
|
onConsent?.();
|
|
10635
11264
|
}, [storageKey, onConsent]);
|
|
10636
|
-
const declineCookies =
|
|
11265
|
+
const declineCookies = React49.useCallback(() => {
|
|
10637
11266
|
localStorage.setItem(storageKey, "declined");
|
|
10638
11267
|
setHasConsented(true);
|
|
10639
11268
|
}, [storageKey]);
|
|
10640
|
-
const resetConsent =
|
|
11269
|
+
const resetConsent = React49.useCallback(() => {
|
|
10641
11270
|
localStorage.removeItem(storageKey);
|
|
10642
11271
|
setHasConsented(false);
|
|
10643
11272
|
}, [storageKey]);
|
|
@@ -11024,9 +11653,9 @@ function CSVFileUpload({
|
|
|
11024
11653
|
selectFile = "Select a file to upload or drag and drop",
|
|
11025
11654
|
selectButton = "Select File to Upload"
|
|
11026
11655
|
} = labels;
|
|
11027
|
-
const inputRef =
|
|
11028
|
-
const [isDragging, setIsDragging] =
|
|
11029
|
-
const handleDrop =
|
|
11656
|
+
const inputRef = React49.useRef(null);
|
|
11657
|
+
const [isDragging, setIsDragging] = React49.useState(false);
|
|
11658
|
+
const handleDrop = React49.useCallback(
|
|
11030
11659
|
(e) => {
|
|
11031
11660
|
e.preventDefault();
|
|
11032
11661
|
setIsDragging(false);
|
|
@@ -11037,14 +11666,14 @@ function CSVFileUpload({
|
|
|
11037
11666
|
},
|
|
11038
11667
|
[onFileSelect]
|
|
11039
11668
|
);
|
|
11040
|
-
const handleDragOver =
|
|
11669
|
+
const handleDragOver = React49.useCallback((e) => {
|
|
11041
11670
|
e.preventDefault();
|
|
11042
11671
|
setIsDragging(true);
|
|
11043
11672
|
}, []);
|
|
11044
|
-
const handleDragLeave =
|
|
11673
|
+
const handleDragLeave = React49.useCallback(() => {
|
|
11045
11674
|
setIsDragging(false);
|
|
11046
11675
|
}, []);
|
|
11047
|
-
const handleFileChange =
|
|
11676
|
+
const handleFileChange = React49.useCallback(
|
|
11048
11677
|
(e) => {
|
|
11049
11678
|
const file = e.target.files?.[0];
|
|
11050
11679
|
if (file) {
|
|
@@ -11109,7 +11738,7 @@ var widgetVariants = cva("", {
|
|
|
11109
11738
|
size: "md"
|
|
11110
11739
|
}
|
|
11111
11740
|
});
|
|
11112
|
-
var DashboardWidget =
|
|
11741
|
+
var DashboardWidget = React49.forwardRef(
|
|
11113
11742
|
({
|
|
11114
11743
|
className,
|
|
11115
11744
|
size,
|
|
@@ -11204,7 +11833,7 @@ var DashboardWidget = React48.forwardRef(
|
|
|
11204
11833
|
}
|
|
11205
11834
|
);
|
|
11206
11835
|
DashboardWidget.displayName = "DashboardWidget";
|
|
11207
|
-
var DashboardWidgetInfo =
|
|
11836
|
+
var DashboardWidgetInfo = React49.forwardRef(({ className, items, columns = 2, layout = "stacked", ...props }, ref) => {
|
|
11208
11837
|
const gridCols = {
|
|
11209
11838
|
1: "grid-cols-1",
|
|
11210
11839
|
2: "grid-cols-2",
|
|
@@ -11338,10 +11967,10 @@ function WidgetRowActionMenu({
|
|
|
11338
11967
|
rowIndex,
|
|
11339
11968
|
actions
|
|
11340
11969
|
}) {
|
|
11341
|
-
const [open, setOpen] =
|
|
11342
|
-
const menuRef =
|
|
11343
|
-
const buttonRef =
|
|
11344
|
-
|
|
11970
|
+
const [open, setOpen] = React49.useState(false);
|
|
11971
|
+
const menuRef = React49.useRef(null);
|
|
11972
|
+
const buttonRef = React49.useRef(null);
|
|
11973
|
+
React49.useEffect(() => {
|
|
11345
11974
|
if (!open) return;
|
|
11346
11975
|
function handleClick(e) {
|
|
11347
11976
|
if (menuRef.current && !menuRef.current.contains(e.target) && buttonRef.current && !buttonRef.current.contains(e.target)) {
|
|
@@ -11351,7 +11980,7 @@ function WidgetRowActionMenu({
|
|
|
11351
11980
|
document.addEventListener("mousedown", handleClick);
|
|
11352
11981
|
return () => document.removeEventListener("mousedown", handleClick);
|
|
11353
11982
|
}, [open]);
|
|
11354
|
-
|
|
11983
|
+
React49.useEffect(() => {
|
|
11355
11984
|
if (!open) return;
|
|
11356
11985
|
function handleKey(e) {
|
|
11357
11986
|
if (e.key === "Escape") setOpen(false);
|
|
@@ -11359,8 +11988,8 @@ function WidgetRowActionMenu({
|
|
|
11359
11988
|
document.addEventListener("keydown", handleKey);
|
|
11360
11989
|
return () => document.removeEventListener("keydown", handleKey);
|
|
11361
11990
|
}, [open]);
|
|
11362
|
-
const [menuPos, setMenuPos] =
|
|
11363
|
-
|
|
11991
|
+
const [menuPos, setMenuPos] = React49.useState(null);
|
|
11992
|
+
React49.useLayoutEffect(() => {
|
|
11364
11993
|
if (!open || !buttonRef.current) return;
|
|
11365
11994
|
const rect = buttonRef.current.getBoundingClientRect();
|
|
11366
11995
|
setMenuPos({
|
|
@@ -11441,7 +12070,7 @@ function WidgetRowActionMenu({
|
|
|
11441
12070
|
)
|
|
11442
12071
|
] });
|
|
11443
12072
|
}
|
|
11444
|
-
var DashboardWidgetTable =
|
|
12073
|
+
var DashboardWidgetTable = React49.forwardRef(DashboardWidgetTableInner);
|
|
11445
12074
|
var actionColorMap = {
|
|
11446
12075
|
primary: "bg-primary-100 text-primary-900 dark:bg-primary-900/40 dark:text-primary-300",
|
|
11447
12076
|
green: "bg-emerald-100 text-emerald-700 dark:bg-emerald-900/40 dark:text-emerald-300",
|
|
@@ -11452,7 +12081,7 @@ var actionColorMap = {
|
|
|
11452
12081
|
amber: "bg-amber-100 text-amber-700 dark:bg-amber-900/40 dark:text-amber-300",
|
|
11453
12082
|
neutral: "bg-neutral-100 text-neutral-700 dark:bg-neutral-800 dark:text-neutral-300"
|
|
11454
12083
|
};
|
|
11455
|
-
var DashboardWidgetActions =
|
|
12084
|
+
var DashboardWidgetActions = React49.forwardRef(({ className, actions, columns = 2, ...props }, ref) => {
|
|
11456
12085
|
const gridCols = {
|
|
11457
12086
|
1: "grid-cols-1",
|
|
11458
12087
|
2: "grid-cols-2",
|
|
@@ -11505,7 +12134,7 @@ var DashboardWidgetActions = React48.forwardRef(({ className, actions, columns =
|
|
|
11505
12134
|
);
|
|
11506
12135
|
});
|
|
11507
12136
|
DashboardWidgetActions.displayName = "DashboardWidgetActions";
|
|
11508
|
-
var DashboardWidgetDataCards =
|
|
12137
|
+
var DashboardWidgetDataCards = React49.forwardRef(({ className, items, columns = 2, footer, ...props }, ref) => {
|
|
11509
12138
|
const gridCols = {
|
|
11510
12139
|
2: "grid-cols-2",
|
|
11511
12140
|
3: "grid-cols-3",
|
|
@@ -11707,24 +12336,24 @@ function DateRangePicker({
|
|
|
11707
12336
|
labels = {}
|
|
11708
12337
|
}) {
|
|
11709
12338
|
const finalPresets = presets || getDefaultPresets(labels);
|
|
11710
|
-
const [isCalendarOpen, setIsCalendarOpen] =
|
|
11711
|
-
const [leftMonth, setLeftMonth] =
|
|
12339
|
+
const [isCalendarOpen, setIsCalendarOpen] = React49.useState(false);
|
|
12340
|
+
const [leftMonth, setLeftMonth] = React49.useState(
|
|
11712
12341
|
() => value?.start?.getMonth() ?? (/* @__PURE__ */ new Date()).getMonth()
|
|
11713
12342
|
);
|
|
11714
|
-
const [leftYear, setLeftYear] =
|
|
12343
|
+
const [leftYear, setLeftYear] = React49.useState(
|
|
11715
12344
|
() => value?.start?.getFullYear() ?? (/* @__PURE__ */ new Date()).getFullYear()
|
|
11716
12345
|
);
|
|
11717
|
-
const [rangeStart, setRangeStart] =
|
|
12346
|
+
const [rangeStart, setRangeStart] = React49.useState(
|
|
11718
12347
|
value?.start ?? null
|
|
11719
12348
|
);
|
|
11720
|
-
const [rangeEnd, setRangeEnd] =
|
|
12349
|
+
const [rangeEnd, setRangeEnd] = React49.useState(
|
|
11721
12350
|
value?.end ?? null
|
|
11722
12351
|
);
|
|
11723
|
-
const [selectingEnd, setSelectingEnd] =
|
|
11724
|
-
const [hoverDate, setHoverDate] =
|
|
11725
|
-
const calendarRef =
|
|
11726
|
-
const triggerRef =
|
|
11727
|
-
const [resolvedAlign, setResolvedAlign] =
|
|
12352
|
+
const [selectingEnd, setSelectingEnd] = React49.useState(false);
|
|
12353
|
+
const [hoverDate, setHoverDate] = React49.useState(null);
|
|
12354
|
+
const calendarRef = React49.useRef(null);
|
|
12355
|
+
const triggerRef = React49.useRef(null);
|
|
12356
|
+
const [resolvedAlign, setResolvedAlign] = React49.useState(
|
|
11728
12357
|
align === "end" ? "end" : "start"
|
|
11729
12358
|
);
|
|
11730
12359
|
const isMobileVariant = variant === "mobile";
|
|
@@ -11734,7 +12363,7 @@ function DateRangePicker({
|
|
|
11734
12363
|
);
|
|
11735
12364
|
const rightMonth = leftMonth === 11 ? 0 : leftMonth + 1;
|
|
11736
12365
|
const rightYear = leftMonth === 11 ? leftYear + 1 : leftYear;
|
|
11737
|
-
|
|
12366
|
+
React49.useEffect(() => {
|
|
11738
12367
|
if (!value) {
|
|
11739
12368
|
setRangeStart(null);
|
|
11740
12369
|
setRangeEnd(null);
|
|
@@ -11743,7 +12372,7 @@ function DateRangePicker({
|
|
|
11743
12372
|
setRangeStart(value.start ?? null);
|
|
11744
12373
|
setRangeEnd(value.end ?? null);
|
|
11745
12374
|
}, [value]);
|
|
11746
|
-
const wrapperRef =
|
|
12375
|
+
const wrapperRef = React49.useRef(null);
|
|
11747
12376
|
useClickOutside(wrapperRef, () => {
|
|
11748
12377
|
if (isCalendarOpen) {
|
|
11749
12378
|
setIsCalendarOpen(false);
|
|
@@ -11755,7 +12384,7 @@ function DateRangePicker({
|
|
|
11755
12384
|
setSelectingEnd(false);
|
|
11756
12385
|
triggerRef.current?.focus();
|
|
11757
12386
|
}, isCalendarOpen);
|
|
11758
|
-
|
|
12387
|
+
React49.useEffect(() => {
|
|
11759
12388
|
if (isStorybookDocsMode()) return;
|
|
11760
12389
|
if (isMobileVariant && isCalendarOpen) {
|
|
11761
12390
|
const prev = document.body.style.overflow;
|
|
@@ -11765,7 +12394,7 @@ function DateRangePicker({
|
|
|
11765
12394
|
};
|
|
11766
12395
|
}
|
|
11767
12396
|
}, [isMobileVariant, isCalendarOpen]);
|
|
11768
|
-
|
|
12397
|
+
React49.useLayoutEffect(() => {
|
|
11769
12398
|
if (isMobileVariant || !isCalendarOpen) return;
|
|
11770
12399
|
if (align === "start" || align === "end") {
|
|
11771
12400
|
setResolvedAlign(align);
|
|
@@ -11870,7 +12499,7 @@ function DateRangePicker({
|
|
|
11870
12499
|
return isSameDay(date, today);
|
|
11871
12500
|
};
|
|
11872
12501
|
const displayValue = value ? formatDateRange(value) : "";
|
|
11873
|
-
const monthNames =
|
|
12502
|
+
const monthNames = React49.useMemo(
|
|
11874
12503
|
() => Array.from(
|
|
11875
12504
|
{ length: 12 },
|
|
11876
12505
|
(_, i) => new Intl.DateTimeFormat(void 0, { month: "long" }).format(
|
|
@@ -11879,7 +12508,7 @@ function DateRangePicker({
|
|
|
11879
12508
|
),
|
|
11880
12509
|
[]
|
|
11881
12510
|
);
|
|
11882
|
-
const weekdayNames =
|
|
12511
|
+
const weekdayNames = React49.useMemo(
|
|
11883
12512
|
() => Array.from(
|
|
11884
12513
|
{ length: 7 },
|
|
11885
12514
|
(_, i) => new Intl.DateTimeFormat(void 0, { weekday: "short" }).format(
|
|
@@ -12308,11 +12937,11 @@ function DropZone({
|
|
|
12308
12937
|
className,
|
|
12309
12938
|
children
|
|
12310
12939
|
}) {
|
|
12311
|
-
const [isDragging, setIsDragging] =
|
|
12312
|
-
const inputRef =
|
|
12313
|
-
const dropZoneRef =
|
|
12314
|
-
const dragCounter =
|
|
12315
|
-
const handleDragEnter =
|
|
12940
|
+
const [isDragging, setIsDragging] = React49.useState(false);
|
|
12941
|
+
const inputRef = React49.useRef(null);
|
|
12942
|
+
const dropZoneRef = React49.useRef(null);
|
|
12943
|
+
const dragCounter = React49.useRef(0);
|
|
12944
|
+
const handleDragEnter = React49.useCallback(
|
|
12316
12945
|
(e) => {
|
|
12317
12946
|
e.preventDefault();
|
|
12318
12947
|
e.stopPropagation();
|
|
@@ -12324,7 +12953,7 @@ function DropZone({
|
|
|
12324
12953
|
},
|
|
12325
12954
|
[disabled]
|
|
12326
12955
|
);
|
|
12327
|
-
const handleDragLeave =
|
|
12956
|
+
const handleDragLeave = React49.useCallback(
|
|
12328
12957
|
(e) => {
|
|
12329
12958
|
e.preventDefault();
|
|
12330
12959
|
e.stopPropagation();
|
|
@@ -12336,11 +12965,11 @@ function DropZone({
|
|
|
12336
12965
|
},
|
|
12337
12966
|
[disabled]
|
|
12338
12967
|
);
|
|
12339
|
-
const handleDragOver =
|
|
12968
|
+
const handleDragOver = React49.useCallback((e) => {
|
|
12340
12969
|
e.preventDefault();
|
|
12341
12970
|
e.stopPropagation();
|
|
12342
12971
|
}, []);
|
|
12343
|
-
const handleDrop =
|
|
12972
|
+
const handleDrop = React49.useCallback(
|
|
12344
12973
|
(e) => {
|
|
12345
12974
|
e.preventDefault();
|
|
12346
12975
|
e.stopPropagation();
|
|
@@ -12353,12 +12982,12 @@ function DropZone({
|
|
|
12353
12982
|
},
|
|
12354
12983
|
[disabled, onFilesSelected]
|
|
12355
12984
|
);
|
|
12356
|
-
const handleClick =
|
|
12985
|
+
const handleClick = React49.useCallback(() => {
|
|
12357
12986
|
if (!disabled) {
|
|
12358
12987
|
inputRef.current?.click();
|
|
12359
12988
|
}
|
|
12360
12989
|
}, [disabled]);
|
|
12361
|
-
const handleKeyDown =
|
|
12990
|
+
const handleKeyDown = React49.useCallback(
|
|
12362
12991
|
(e) => {
|
|
12363
12992
|
if ((e.key === "Enter" || e.key === " ") && !disabled) {
|
|
12364
12993
|
e.preventDefault();
|
|
@@ -12367,7 +12996,7 @@ function DropZone({
|
|
|
12367
12996
|
},
|
|
12368
12997
|
[disabled]
|
|
12369
12998
|
);
|
|
12370
|
-
const handleInputChange =
|
|
12999
|
+
const handleInputChange = React49.useCallback(
|
|
12371
13000
|
(e) => {
|
|
12372
13001
|
if (e.target.files && e.target.files.length > 0) {
|
|
12373
13002
|
onFilesSelected(e.target.files);
|
|
@@ -12458,7 +13087,7 @@ DropZone.displayName = "DropZone";
|
|
|
12458
13087
|
function FilePreviewItem({ file, onRemove, disabled }) {
|
|
12459
13088
|
const isPdf = file.file.type === "application/pdf";
|
|
12460
13089
|
const isImage = file.file.type.startsWith("image/");
|
|
12461
|
-
const handleRemove =
|
|
13090
|
+
const handleRemove = React49.useCallback(() => {
|
|
12462
13091
|
onRemove(file.id);
|
|
12463
13092
|
}, [file.id, onRemove]);
|
|
12464
13093
|
return /* @__PURE__ */ jsxs(
|
|
@@ -12604,24 +13233,24 @@ function useCamera({
|
|
|
12604
13233
|
width = 1920,
|
|
12605
13234
|
height = 1080
|
|
12606
13235
|
} = {}) {
|
|
12607
|
-
const [permission, setPermission] =
|
|
12608
|
-
const [stream, setStream] =
|
|
12609
|
-
const [isReady, setIsReady] =
|
|
12610
|
-
const [error, setError] =
|
|
12611
|
-
const [currentFacingMode, setCurrentFacingMode] =
|
|
12612
|
-
const videoRef =
|
|
12613
|
-
const canvasRef =
|
|
12614
|
-
|
|
13236
|
+
const [permission, setPermission] = React49.useState("prompt");
|
|
13237
|
+
const [stream, setStream] = React49.useState(null);
|
|
13238
|
+
const [isReady, setIsReady] = React49.useState(false);
|
|
13239
|
+
const [error, setError] = React49.useState(null);
|
|
13240
|
+
const [currentFacingMode, setCurrentFacingMode] = React49.useState(initialFacingMode);
|
|
13241
|
+
const videoRef = React49.useRef(null);
|
|
13242
|
+
const canvasRef = React49.useRef(null);
|
|
13243
|
+
React49.useEffect(() => {
|
|
12615
13244
|
checkCameraPermission().then(setPermission);
|
|
12616
13245
|
}, []);
|
|
12617
|
-
|
|
13246
|
+
React49.useEffect(() => {
|
|
12618
13247
|
return () => {
|
|
12619
13248
|
if (stream) {
|
|
12620
13249
|
stream.getTracks().forEach((track) => track.stop());
|
|
12621
13250
|
}
|
|
12622
13251
|
};
|
|
12623
13252
|
}, [stream]);
|
|
12624
|
-
const startCamera =
|
|
13253
|
+
const startCamera = React49.useCallback(async () => {
|
|
12625
13254
|
if (!hasCameraSupport()) {
|
|
12626
13255
|
setPermission("unavailable");
|
|
12627
13256
|
setError(new Error("Camera is not supported on this device"));
|
|
@@ -12655,7 +13284,7 @@ function useCamera({
|
|
|
12655
13284
|
}
|
|
12656
13285
|
}
|
|
12657
13286
|
}, [currentFacingMode, width, height]);
|
|
12658
|
-
const stopCamera =
|
|
13287
|
+
const stopCamera = React49.useCallback(() => {
|
|
12659
13288
|
if (stream) {
|
|
12660
13289
|
stream.getTracks().forEach((track) => track.stop());
|
|
12661
13290
|
setStream(null);
|
|
@@ -12665,8 +13294,8 @@ function useCamera({
|
|
|
12665
13294
|
videoRef.current.srcObject = null;
|
|
12666
13295
|
}
|
|
12667
13296
|
}, [stream]);
|
|
12668
|
-
const shouldRestartRef =
|
|
12669
|
-
const switchCamera =
|
|
13297
|
+
const shouldRestartRef = React49.useRef(false);
|
|
13298
|
+
const switchCamera = React49.useCallback(() => {
|
|
12670
13299
|
const newFacingMode = currentFacingMode === "user" ? "environment" : "user";
|
|
12671
13300
|
if (stream) {
|
|
12672
13301
|
stream.getTracks().forEach((track) => track.stop());
|
|
@@ -12679,13 +13308,13 @@ function useCamera({
|
|
|
12679
13308
|
}
|
|
12680
13309
|
setCurrentFacingMode(newFacingMode);
|
|
12681
13310
|
}, [currentFacingMode, stream]);
|
|
12682
|
-
|
|
13311
|
+
React49.useEffect(() => {
|
|
12683
13312
|
if (shouldRestartRef.current && !stream) {
|
|
12684
13313
|
shouldRestartRef.current = false;
|
|
12685
13314
|
startCamera();
|
|
12686
13315
|
}
|
|
12687
13316
|
}, [currentFacingMode, stream, startCamera]);
|
|
12688
|
-
const capturePhoto =
|
|
13317
|
+
const capturePhoto = React49.useCallback(() => {
|
|
12689
13318
|
if (!videoRef.current || !isReady) {
|
|
12690
13319
|
return null;
|
|
12691
13320
|
}
|
|
@@ -13232,14 +13861,14 @@ function WebcamModal({
|
|
|
13232
13861
|
width: 1920,
|
|
13233
13862
|
height: 1080
|
|
13234
13863
|
});
|
|
13235
|
-
const [capturedFile, setCapturedFile] =
|
|
13236
|
-
const [previewUrl, setPreviewUrl] =
|
|
13237
|
-
const [autoDetectEnabled, setAutoDetectEnabled] =
|
|
13238
|
-
const [videoDimensions, setVideoDimensions] =
|
|
13864
|
+
const [capturedFile, setCapturedFile] = React49.useState(null);
|
|
13865
|
+
const [previewUrl, setPreviewUrl] = React49.useState(null);
|
|
13866
|
+
const [autoDetectEnabled, setAutoDetectEnabled] = React49.useState(enableAutoCapture);
|
|
13867
|
+
const [videoDimensions, setVideoDimensions] = React49.useState({
|
|
13239
13868
|
width: 0,
|
|
13240
13869
|
height: 0
|
|
13241
13870
|
});
|
|
13242
|
-
const handleAutoCapture =
|
|
13871
|
+
const handleAutoCapture = React49.useCallback(() => {
|
|
13243
13872
|
const file = capturePhoto();
|
|
13244
13873
|
if (file) {
|
|
13245
13874
|
setCapturedFile(file);
|
|
@@ -13260,8 +13889,8 @@ function WebcamModal({
|
|
|
13260
13889
|
},
|
|
13261
13890
|
handleAutoCapture
|
|
13262
13891
|
);
|
|
13263
|
-
const hasStartedRef =
|
|
13264
|
-
|
|
13892
|
+
const hasStartedRef = React49.useRef(false);
|
|
13893
|
+
React49.useEffect(() => {
|
|
13265
13894
|
const video = videoRef.current;
|
|
13266
13895
|
if (video && isReady) {
|
|
13267
13896
|
const updateDimensions = () => {
|
|
@@ -13275,7 +13904,7 @@ function WebcamModal({
|
|
|
13275
13904
|
return () => video.removeEventListener("resize", updateDimensions);
|
|
13276
13905
|
}
|
|
13277
13906
|
}, [isReady, videoRef]);
|
|
13278
|
-
|
|
13907
|
+
React49.useEffect(() => {
|
|
13279
13908
|
if (open && permission !== "denied" && permission !== "unavailable") {
|
|
13280
13909
|
if (!hasStartedRef.current) {
|
|
13281
13910
|
hasStartedRef.current = true;
|
|
@@ -13294,7 +13923,7 @@ function WebcamModal({
|
|
|
13294
13923
|
});
|
|
13295
13924
|
}
|
|
13296
13925
|
}, [open, permission]);
|
|
13297
|
-
|
|
13926
|
+
React49.useEffect(() => {
|
|
13298
13927
|
if (isReady && autoDetectEnabled && !capturedFile) {
|
|
13299
13928
|
detection.startDetection();
|
|
13300
13929
|
}
|
|
@@ -13302,7 +13931,7 @@ function WebcamModal({
|
|
|
13302
13931
|
detection.stopDetection();
|
|
13303
13932
|
};
|
|
13304
13933
|
}, [isReady, autoDetectEnabled, capturedFile]);
|
|
13305
|
-
const handleCapture =
|
|
13934
|
+
const handleCapture = React49.useCallback(() => {
|
|
13306
13935
|
const file = capturePhoto();
|
|
13307
13936
|
if (file) {
|
|
13308
13937
|
setCapturedFile(file);
|
|
@@ -13310,7 +13939,7 @@ function WebcamModal({
|
|
|
13310
13939
|
stopCamera();
|
|
13311
13940
|
}
|
|
13312
13941
|
}, [capturePhoto, stopCamera]);
|
|
13313
|
-
const handleRetake =
|
|
13942
|
+
const handleRetake = React49.useCallback(() => {
|
|
13314
13943
|
if (previewUrl) {
|
|
13315
13944
|
URL.revokeObjectURL(previewUrl);
|
|
13316
13945
|
}
|
|
@@ -13319,13 +13948,13 @@ function WebcamModal({
|
|
|
13319
13948
|
detection.resetDetection();
|
|
13320
13949
|
startCamera();
|
|
13321
13950
|
}, [previewUrl, startCamera, detection]);
|
|
13322
|
-
const handleConfirm =
|
|
13951
|
+
const handleConfirm = React49.useCallback(() => {
|
|
13323
13952
|
if (capturedFile) {
|
|
13324
13953
|
onCapture(capturedFile);
|
|
13325
13954
|
onOpenChange(false);
|
|
13326
13955
|
}
|
|
13327
13956
|
}, [capturedFile, onCapture, onOpenChange]);
|
|
13328
|
-
const handleClose =
|
|
13957
|
+
const handleClose = React49.useCallback(() => {
|
|
13329
13958
|
stopCamera();
|
|
13330
13959
|
detection.stopDetection();
|
|
13331
13960
|
if (previewUrl) {
|
|
@@ -13477,13 +14106,13 @@ function useFileUpload({
|
|
|
13477
14106
|
multiple = false,
|
|
13478
14107
|
onValidationError
|
|
13479
14108
|
} = {}) {
|
|
13480
|
-
const [files, setFiles] =
|
|
13481
|
-
|
|
14109
|
+
const [files, setFiles] = React49.useState([]);
|
|
14110
|
+
React49.useEffect(() => {
|
|
13482
14111
|
return () => {
|
|
13483
14112
|
files.forEach((f) => URL.revokeObjectURL(f.previewUrl));
|
|
13484
14113
|
};
|
|
13485
14114
|
}, []);
|
|
13486
|
-
const addFiles =
|
|
14115
|
+
const addFiles = React49.useCallback(
|
|
13487
14116
|
(fileList, source = "upload") => {
|
|
13488
14117
|
const newFiles = [];
|
|
13489
14118
|
const errors = [];
|
|
@@ -13515,7 +14144,7 @@ function useFileUpload({
|
|
|
13515
14144
|
},
|
|
13516
14145
|
[acceptedFileTypes, maxFileSizeMb, multiple, onValidationError]
|
|
13517
14146
|
);
|
|
13518
|
-
const addFile =
|
|
14147
|
+
const addFile = React49.useCallback(
|
|
13519
14148
|
(file, source = "upload") => {
|
|
13520
14149
|
const dataTransfer = new DataTransfer();
|
|
13521
14150
|
dataTransfer.items.add(file);
|
|
@@ -13523,7 +14152,7 @@ function useFileUpload({
|
|
|
13523
14152
|
},
|
|
13524
14153
|
[addFiles]
|
|
13525
14154
|
);
|
|
13526
|
-
const removeFile =
|
|
14155
|
+
const removeFile = React49.useCallback((id) => {
|
|
13527
14156
|
setFiles((prev) => {
|
|
13528
14157
|
const fileToRemove = prev.find((f) => f.id === id);
|
|
13529
14158
|
if (fileToRemove) {
|
|
@@ -13532,13 +14161,13 @@ function useFileUpload({
|
|
|
13532
14161
|
return prev.filter((f) => f.id !== id);
|
|
13533
14162
|
});
|
|
13534
14163
|
}, []);
|
|
13535
|
-
const clearFiles =
|
|
14164
|
+
const clearFiles = React49.useCallback(() => {
|
|
13536
14165
|
setFiles((prev) => {
|
|
13537
14166
|
prev.forEach((f) => URL.revokeObjectURL(f.previewUrl));
|
|
13538
14167
|
return [];
|
|
13539
14168
|
});
|
|
13540
14169
|
}, []);
|
|
13541
|
-
const getFiles =
|
|
14170
|
+
const getFiles = React49.useCallback(() => {
|
|
13542
14171
|
return files.map((f) => f.file);
|
|
13543
14172
|
}, [files]);
|
|
13544
14173
|
return {
|
|
@@ -13566,12 +14195,12 @@ function DocumentScanner({
|
|
|
13566
14195
|
onValidationError,
|
|
13567
14196
|
onStateChange
|
|
13568
14197
|
}) {
|
|
13569
|
-
const [state, setState] =
|
|
13570
|
-
const [error, setError] =
|
|
13571
|
-
const [isWebcamOpen, setIsWebcamOpen] =
|
|
13572
|
-
const [validationErrors, setValidationErrors] =
|
|
14198
|
+
const [state, setState] = React49.useState("idle");
|
|
14199
|
+
const [error, setError] = React49.useState(null);
|
|
14200
|
+
const [isWebcamOpen, setIsWebcamOpen] = React49.useState(false);
|
|
14201
|
+
const [validationErrors, setValidationErrors] = React49.useState([]);
|
|
13573
14202
|
const isMobile = useIsMobile();
|
|
13574
|
-
const cameraInputRef =
|
|
14203
|
+
const cameraInputRef = React49.useRef(null);
|
|
13575
14204
|
const {
|
|
13576
14205
|
files,
|
|
13577
14206
|
addFiles,
|
|
@@ -13589,17 +14218,17 @@ function DocumentScanner({
|
|
|
13589
14218
|
onValidationError?.(errors);
|
|
13590
14219
|
}
|
|
13591
14220
|
});
|
|
13592
|
-
|
|
14221
|
+
React49.useEffect(() => {
|
|
13593
14222
|
onStateChange?.(state);
|
|
13594
14223
|
}, [state, onStateChange]);
|
|
13595
|
-
|
|
14224
|
+
React49.useEffect(() => {
|
|
13596
14225
|
if (hasFiles && state === "idle") {
|
|
13597
14226
|
setState("preview");
|
|
13598
14227
|
} else if (!hasFiles && state === "preview") {
|
|
13599
14228
|
setState("idle");
|
|
13600
14229
|
}
|
|
13601
14230
|
}, [hasFiles, state]);
|
|
13602
|
-
const handleFilesSelected =
|
|
14231
|
+
const handleFilesSelected = React49.useCallback(
|
|
13603
14232
|
(fileList) => {
|
|
13604
14233
|
setError(null);
|
|
13605
14234
|
setValidationErrors([]);
|
|
@@ -13607,10 +14236,10 @@ function DocumentScanner({
|
|
|
13607
14236
|
},
|
|
13608
14237
|
[addFiles]
|
|
13609
14238
|
);
|
|
13610
|
-
const handleCameraCapture =
|
|
14239
|
+
const handleCameraCapture = React49.useCallback(() => {
|
|
13611
14240
|
cameraInputRef.current?.click();
|
|
13612
14241
|
}, []);
|
|
13613
|
-
const handleCameraInputChange =
|
|
14242
|
+
const handleCameraInputChange = React49.useCallback(
|
|
13614
14243
|
(e) => {
|
|
13615
14244
|
if (e.target.files && e.target.files.length > 0) {
|
|
13616
14245
|
setError(null);
|
|
@@ -13621,7 +14250,7 @@ function DocumentScanner({
|
|
|
13621
14250
|
},
|
|
13622
14251
|
[addFiles]
|
|
13623
14252
|
);
|
|
13624
|
-
const handleWebcamCapture =
|
|
14253
|
+
const handleWebcamCapture = React49.useCallback(
|
|
13625
14254
|
(file) => {
|
|
13626
14255
|
setError(null);
|
|
13627
14256
|
setValidationErrors([]);
|
|
@@ -13629,7 +14258,7 @@ function DocumentScanner({
|
|
|
13629
14258
|
},
|
|
13630
14259
|
[addFile]
|
|
13631
14260
|
);
|
|
13632
|
-
const handleScan =
|
|
14261
|
+
const handleScan = React49.useCallback(async () => {
|
|
13633
14262
|
if (!hasFiles) return;
|
|
13634
14263
|
try {
|
|
13635
14264
|
setState("processing");
|
|
@@ -13648,11 +14277,11 @@ function DocumentScanner({
|
|
|
13648
14277
|
setError(errorMessage);
|
|
13649
14278
|
}
|
|
13650
14279
|
}, [hasFiles, getFiles, onScan, onResult, clearFiles]);
|
|
13651
|
-
const handleRetry =
|
|
14280
|
+
const handleRetry = React49.useCallback(() => {
|
|
13652
14281
|
setState("preview");
|
|
13653
14282
|
setError(null);
|
|
13654
14283
|
}, []);
|
|
13655
|
-
const handleClearAll =
|
|
14284
|
+
const handleClearAll = React49.useCallback(() => {
|
|
13656
14285
|
clearFiles();
|
|
13657
14286
|
setError(null);
|
|
13658
14287
|
setValidationErrors([]);
|
|
@@ -13965,10 +14594,10 @@ function useDropzone({
|
|
|
13965
14594
|
multiple = false,
|
|
13966
14595
|
disabled = false
|
|
13967
14596
|
}) {
|
|
13968
|
-
const [isDragging, setIsDragging] =
|
|
13969
|
-
const inputRef =
|
|
13970
|
-
const dragCounter =
|
|
13971
|
-
const handleDragEnter =
|
|
14597
|
+
const [isDragging, setIsDragging] = React49.useState(false);
|
|
14598
|
+
const inputRef = React49.useRef(null);
|
|
14599
|
+
const dragCounter = React49.useRef(0);
|
|
14600
|
+
const handleDragEnter = React49.useCallback(
|
|
13972
14601
|
(e) => {
|
|
13973
14602
|
e.preventDefault();
|
|
13974
14603
|
e.stopPropagation();
|
|
@@ -13980,11 +14609,11 @@ function useDropzone({
|
|
|
13980
14609
|
},
|
|
13981
14610
|
[disabled]
|
|
13982
14611
|
);
|
|
13983
|
-
const handleDragOver =
|
|
14612
|
+
const handleDragOver = React49.useCallback((e) => {
|
|
13984
14613
|
e.preventDefault();
|
|
13985
14614
|
e.stopPropagation();
|
|
13986
14615
|
}, []);
|
|
13987
|
-
const handleDragLeave =
|
|
14616
|
+
const handleDragLeave = React49.useCallback((e) => {
|
|
13988
14617
|
e.preventDefault();
|
|
13989
14618
|
e.stopPropagation();
|
|
13990
14619
|
dragCounter.current--;
|
|
@@ -13992,7 +14621,7 @@ function useDropzone({
|
|
|
13992
14621
|
setIsDragging(false);
|
|
13993
14622
|
}
|
|
13994
14623
|
}, []);
|
|
13995
|
-
const handleDrop =
|
|
14624
|
+
const handleDrop = React49.useCallback(
|
|
13996
14625
|
(e) => {
|
|
13997
14626
|
e.preventDefault();
|
|
13998
14627
|
e.stopPropagation();
|
|
@@ -14006,7 +14635,7 @@ function useDropzone({
|
|
|
14006
14635
|
},
|
|
14007
14636
|
[disabled, multiple, onDrop]
|
|
14008
14637
|
);
|
|
14009
|
-
const handleInputChange =
|
|
14638
|
+
const handleInputChange = React49.useCallback(
|
|
14010
14639
|
(e) => {
|
|
14011
14640
|
const files = e.target.files ? Array.from(e.target.files) : [];
|
|
14012
14641
|
if (files.length > 0) {
|
|
@@ -14016,7 +14645,7 @@ function useDropzone({
|
|
|
14016
14645
|
},
|
|
14017
14646
|
[onDrop]
|
|
14018
14647
|
);
|
|
14019
|
-
const open =
|
|
14648
|
+
const open = React49.useCallback(() => {
|
|
14020
14649
|
if (!disabled) {
|
|
14021
14650
|
inputRef.current?.click();
|
|
14022
14651
|
}
|
|
@@ -14066,7 +14695,7 @@ function ClaimProviderForm({
|
|
|
14066
14695
|
termsUrl = "/terms",
|
|
14067
14696
|
className = ""
|
|
14068
14697
|
}) {
|
|
14069
|
-
const [formData, setFormData] =
|
|
14698
|
+
const [formData, setFormData] = React49.useState({
|
|
14070
14699
|
firstName: "",
|
|
14071
14700
|
lastName: "",
|
|
14072
14701
|
email: "",
|
|
@@ -14369,14 +14998,14 @@ function CreateInvoiceModal({
|
|
|
14369
14998
|
initialStep = 1,
|
|
14370
14999
|
initialEmployerId = ""
|
|
14371
15000
|
}) {
|
|
14372
|
-
const [step, setStep] =
|
|
14373
|
-
const [employerId, setEmployerId] =
|
|
14374
|
-
const [selectedOrders, setSelectedOrders] =
|
|
15001
|
+
const [step, setStep] = React49.useState(initialStep);
|
|
15002
|
+
const [employerId, setEmployerId] = React49.useState(initialEmployerId);
|
|
15003
|
+
const [selectedOrders, setSelectedOrders] = React49.useState(
|
|
14375
15004
|
/* @__PURE__ */ new Set()
|
|
14376
15005
|
);
|
|
14377
|
-
const [dueDate, setDueDate] =
|
|
14378
|
-
const [notes, setNotes] =
|
|
14379
|
-
|
|
15006
|
+
const [dueDate, setDueDate] = React49.useState("");
|
|
15007
|
+
const [notes, setNotes] = React49.useState("");
|
|
15008
|
+
React49.useEffect(() => {
|
|
14380
15009
|
if (!open) {
|
|
14381
15010
|
setStep(initialStep);
|
|
14382
15011
|
setEmployerId(initialEmployerId);
|
|
@@ -14385,7 +15014,7 @@ function CreateInvoiceModal({
|
|
|
14385
15014
|
setNotes("");
|
|
14386
15015
|
}
|
|
14387
15016
|
}, [open, initialStep, initialEmployerId]);
|
|
14388
|
-
|
|
15017
|
+
React49.useEffect(() => {
|
|
14389
15018
|
if (!dueDate && open) {
|
|
14390
15019
|
const date = /* @__PURE__ */ new Date();
|
|
14391
15020
|
date.setDate(date.getDate() + defaultDueDays);
|
|
@@ -14808,14 +15437,14 @@ function CreateReferralModal({
|
|
|
14808
15437
|
errorMessage,
|
|
14809
15438
|
currency = "$"
|
|
14810
15439
|
}) {
|
|
14811
|
-
const [selectedServices, setSelectedServices] =
|
|
15440
|
+
const [selectedServices, setSelectedServices] = React49.useState(
|
|
14812
15441
|
/* @__PURE__ */ new Set()
|
|
14813
15442
|
);
|
|
14814
|
-
const [notes, setNotes] =
|
|
14815
|
-
const [priority, setPriority] =
|
|
15443
|
+
const [notes, setNotes] = React49.useState("");
|
|
15444
|
+
const [priority, setPriority] = React49.useState(
|
|
14816
15445
|
"normal"
|
|
14817
15446
|
);
|
|
14818
|
-
|
|
15447
|
+
React49.useEffect(() => {
|
|
14819
15448
|
if (!open) {
|
|
14820
15449
|
setSelectedServices(/* @__PURE__ */ new Set());
|
|
14821
15450
|
setNotes("");
|
|
@@ -15116,15 +15745,15 @@ function EditUserRoleModal({
|
|
|
15116
15745
|
isSubmitting = false,
|
|
15117
15746
|
errorMessage
|
|
15118
15747
|
}) {
|
|
15119
|
-
const [selectedRoleId, setSelectedRoleId] =
|
|
15748
|
+
const [selectedRoleId, setSelectedRoleId] = React49.useState(
|
|
15120
15749
|
user?.currentRoleId || ""
|
|
15121
15750
|
);
|
|
15122
|
-
|
|
15751
|
+
React49.useEffect(() => {
|
|
15123
15752
|
if (user?.currentRoleId) {
|
|
15124
15753
|
setSelectedRoleId(user.currentRoleId);
|
|
15125
15754
|
}
|
|
15126
15755
|
}, [user?.currentRoleId]);
|
|
15127
|
-
|
|
15756
|
+
React49.useEffect(() => {
|
|
15128
15757
|
if (!open && user?.currentRoleId) {
|
|
15129
15758
|
setSelectedRoleId(user.currentRoleId);
|
|
15130
15759
|
}
|
|
@@ -15295,24 +15924,24 @@ function EmployeeForm({
|
|
|
15295
15924
|
emailRequired = "Email is required",
|
|
15296
15925
|
dobRequired = "Date of birth is required"
|
|
15297
15926
|
} = labels;
|
|
15298
|
-
const [firstName, setFirstName] =
|
|
15299
|
-
const [lastName, setLastName] =
|
|
15300
|
-
const [email, setEmail] =
|
|
15301
|
-
const [dob, setDob] =
|
|
15302
|
-
const [selectedDepartments, setSelectedDepartments] =
|
|
15303
|
-
const [title, setTitle] =
|
|
15304
|
-
const [address, setAddress] =
|
|
15927
|
+
const [firstName, setFirstName] = React49.useState(initialData.firstName ?? "");
|
|
15928
|
+
const [lastName, setLastName] = React49.useState(initialData.lastName ?? "");
|
|
15929
|
+
const [email, setEmail] = React49.useState(initialData.email ?? "");
|
|
15930
|
+
const [dob, setDob] = React49.useState(initialData.dob ?? "");
|
|
15931
|
+
const [selectedDepartments, setSelectedDepartments] = React49.useState(initialData.departments ?? []);
|
|
15932
|
+
const [title, setTitle] = React49.useState(initialData.title ?? "");
|
|
15933
|
+
const [address, setAddress] = React49.useState(
|
|
15305
15934
|
initialData.address ?? {}
|
|
15306
15935
|
);
|
|
15307
|
-
const [phones, setPhones] =
|
|
15936
|
+
const [phones, setPhones] = React49.useState(
|
|
15308
15937
|
initialData.phones ?? [{ number: "", type: "cell" }]
|
|
15309
15938
|
);
|
|
15310
|
-
const [isActive, setIsActive] =
|
|
15311
|
-
const [additionalInfo, setAdditionalInfo] =
|
|
15939
|
+
const [isActive, setIsActive] = React49.useState(initialData.isActive ?? true);
|
|
15940
|
+
const [additionalInfo, setAdditionalInfo] = React49.useState(
|
|
15312
15941
|
initialData.additionalInfo ?? ""
|
|
15313
15942
|
);
|
|
15314
|
-
const [sendInvite, setSendInvite] =
|
|
15315
|
-
const [errors, setErrors] =
|
|
15943
|
+
const [sendInvite, setSendInvite] = React49.useState(false);
|
|
15944
|
+
const [errors, setErrors] = React49.useState({});
|
|
15316
15945
|
const validate = () => {
|
|
15317
15946
|
const newErrors = {};
|
|
15318
15947
|
if (!firstName.trim()) newErrors.firstName = firstNameRequired;
|
|
@@ -15731,8 +16360,8 @@ function EmployeeProfileCard({
|
|
|
15731
16360
|
className,
|
|
15732
16361
|
labels = {}
|
|
15733
16362
|
}) {
|
|
15734
|
-
const [isExpanded, setIsExpanded] =
|
|
15735
|
-
const fileInputRef =
|
|
16363
|
+
const [isExpanded, setIsExpanded] = React49.useState(defaultExpanded);
|
|
16364
|
+
const fileInputRef = React49.useRef(null);
|
|
15736
16365
|
const {
|
|
15737
16366
|
moreDetails = "more details",
|
|
15738
16367
|
lessDetails = "less details",
|
|
@@ -16265,13 +16894,13 @@ function EmployerList({
|
|
|
16265
16894
|
emptyMessage = "No employers linked yet",
|
|
16266
16895
|
className = ""
|
|
16267
16896
|
}) {
|
|
16268
|
-
const [searchQuery, setSearchQuery] =
|
|
16897
|
+
const [searchQuery, setSearchQuery] = React49.useState("");
|
|
16269
16898
|
const handleSearch = (e) => {
|
|
16270
16899
|
const query = e.target.value;
|
|
16271
16900
|
setSearchQuery(query);
|
|
16272
16901
|
onSearch?.(query);
|
|
16273
16902
|
};
|
|
16274
|
-
const filteredEmployers =
|
|
16903
|
+
const filteredEmployers = React49.useMemo(() => {
|
|
16275
16904
|
if (!searchQuery.trim()) return employers;
|
|
16276
16905
|
const q = searchQuery.toLowerCase();
|
|
16277
16906
|
return employers.filter(
|
|
@@ -16920,7 +17549,7 @@ function EmployerServiceModal({
|
|
|
16920
17549
|
isSubmitting = false,
|
|
16921
17550
|
errorMessage
|
|
16922
17551
|
}) {
|
|
16923
|
-
const [config, setConfig] =
|
|
17552
|
+
const [config, setConfig] = React49.useState({
|
|
16924
17553
|
serviceId: service?.id || "",
|
|
16925
17554
|
employerId: employer?.id || "",
|
|
16926
17555
|
customPrice: existingConfig?.customPrice,
|
|
@@ -16932,7 +17561,7 @@ function EmployerServiceModal({
|
|
|
16932
17561
|
notes: existingConfig?.notes,
|
|
16933
17562
|
billingCode: existingConfig?.billingCode
|
|
16934
17563
|
});
|
|
16935
|
-
|
|
17564
|
+
React49.useEffect(() => {
|
|
16936
17565
|
setConfig({
|
|
16937
17566
|
serviceId: service?.id || "",
|
|
16938
17567
|
employerId: employer?.id || "",
|
|
@@ -17809,8 +18438,8 @@ function FileManager({
|
|
|
17809
18438
|
errorMessage,
|
|
17810
18439
|
className = ""
|
|
17811
18440
|
}) {
|
|
17812
|
-
const [isDragging, setIsDragging] =
|
|
17813
|
-
const fileInputRef =
|
|
18441
|
+
const [isDragging, setIsDragging] = React49.useState(false);
|
|
18442
|
+
const fileInputRef = React49.useRef(null);
|
|
17814
18443
|
const hasActions = !!(onPreview || onDownload || onDelete);
|
|
17815
18444
|
const handleDragOver = (e) => {
|
|
17816
18445
|
e.preventDefault();
|
|
@@ -17995,10 +18624,10 @@ function FileRowActionMenu({
|
|
|
17995
18624
|
onDownload,
|
|
17996
18625
|
onDelete
|
|
17997
18626
|
}) {
|
|
17998
|
-
const [open, setOpen] =
|
|
17999
|
-
const menuRef =
|
|
18000
|
-
const buttonRef =
|
|
18001
|
-
|
|
18627
|
+
const [open, setOpen] = React49.useState(false);
|
|
18628
|
+
const menuRef = React49.useRef(null);
|
|
18629
|
+
const buttonRef = React49.useRef(null);
|
|
18630
|
+
React49.useEffect(() => {
|
|
18002
18631
|
if (!open) return;
|
|
18003
18632
|
function handleClick(e) {
|
|
18004
18633
|
if (menuRef.current && !menuRef.current.contains(e.target) && buttonRef.current && !buttonRef.current.contains(e.target)) {
|
|
@@ -18008,7 +18637,7 @@ function FileRowActionMenu({
|
|
|
18008
18637
|
document.addEventListener("mousedown", handleClick);
|
|
18009
18638
|
return () => document.removeEventListener("mousedown", handleClick);
|
|
18010
18639
|
}, [open]);
|
|
18011
|
-
|
|
18640
|
+
React49.useEffect(() => {
|
|
18012
18641
|
if (!open) return;
|
|
18013
18642
|
function handleKey(e) {
|
|
18014
18643
|
if (e.key === "Escape") setOpen(false);
|
|
@@ -18016,8 +18645,8 @@ function FileRowActionMenu({
|
|
|
18016
18645
|
document.addEventListener("keydown", handleKey);
|
|
18017
18646
|
return () => document.removeEventListener("keydown", handleKey);
|
|
18018
18647
|
}, [open]);
|
|
18019
|
-
const [menuPos, setMenuPos] =
|
|
18020
|
-
|
|
18648
|
+
const [menuPos, setMenuPos] = React49.useState(null);
|
|
18649
|
+
React49.useLayoutEffect(() => {
|
|
18021
18650
|
if (!open || !buttonRef.current) return;
|
|
18022
18651
|
function updatePosition() {
|
|
18023
18652
|
if (!buttonRef.current) return;
|
|
@@ -18137,14 +18766,14 @@ function HelpSupportPanel({
|
|
|
18137
18766
|
successMessage,
|
|
18138
18767
|
className = ""
|
|
18139
18768
|
}) {
|
|
18140
|
-
const [searchTerm, setSearchTerm] =
|
|
18141
|
-
const [expandedFaq, setExpandedFaq] =
|
|
18142
|
-
const [formData, setFormData] =
|
|
18769
|
+
const [searchTerm, setSearchTerm] = React49.useState("");
|
|
18770
|
+
const [expandedFaq, setExpandedFaq] = React49.useState(null);
|
|
18771
|
+
const [formData, setFormData] = React49.useState({
|
|
18143
18772
|
subject: "",
|
|
18144
18773
|
message: "",
|
|
18145
18774
|
email: ""
|
|
18146
18775
|
});
|
|
18147
|
-
const [showSuccess, setShowSuccess] =
|
|
18776
|
+
const [showSuccess, setShowSuccess] = React49.useState(false);
|
|
18148
18777
|
const filteredFaqs = faqs.filter(
|
|
18149
18778
|
(faq) => faq.question.toLowerCase().includes(searchTerm.toLowerCase()) || faq.answer.toLowerCase().includes(searchTerm.toLowerCase())
|
|
18150
18779
|
);
|
|
@@ -18616,7 +19245,7 @@ function HRISProviderSelector({
|
|
|
18616
19245
|
syncPending = "We are still waiting on data from your HRIS Provider. Please check back later.",
|
|
18617
19246
|
supportEmail = "support@bluehive.com"
|
|
18618
19247
|
} = labels;
|
|
18619
|
-
const filteredProviders =
|
|
19248
|
+
const filteredProviders = React49.useMemo(() => {
|
|
18620
19249
|
if (!searchQuery.trim()) return providers;
|
|
18621
19250
|
const query = searchQuery.toLowerCase();
|
|
18622
19251
|
return providers.filter((p) => p.displayName.toLowerCase().includes(query));
|
|
@@ -18903,11 +19532,11 @@ function InventoryManager({
|
|
|
18903
19532
|
isLoading = false,
|
|
18904
19533
|
className = ""
|
|
18905
19534
|
}) {
|
|
18906
|
-
const [updateType, setUpdateType] =
|
|
19535
|
+
const [updateType, setUpdateType] = React49.useState(
|
|
18907
19536
|
"credit"
|
|
18908
19537
|
);
|
|
18909
|
-
const [updateAmount, setUpdateAmount] =
|
|
18910
|
-
const [updateMemo, setUpdateMemo] =
|
|
19538
|
+
const [updateAmount, setUpdateAmount] = React49.useState("");
|
|
19539
|
+
const [updateMemo, setUpdateMemo] = React49.useState("");
|
|
18911
19540
|
const handleSubmit = () => {
|
|
18912
19541
|
if (!updateAmount || !onUpdateSubmit) return;
|
|
18913
19542
|
const amount = parseInt(updateAmount, 10);
|
|
@@ -18973,7 +19602,7 @@ function InventoryManager({
|
|
|
18973
19602
|
/* @__PURE__ */ jsx("th", { className: "text-muted-foreground py-2 text-left text-xs font-medium tracking-wider uppercase", children: "Change" }),
|
|
18974
19603
|
/* @__PURE__ */ jsx("th", { className: "text-muted-foreground py-2 text-right text-xs font-medium tracking-wider uppercase", children: "Quantity" })
|
|
18975
19604
|
] }) }),
|
|
18976
|
-
/* @__PURE__ */ jsx("tbody", { className: "divide-border/50 divide-y", children: logEntries.map((entry) => /* @__PURE__ */ jsxs(
|
|
19605
|
+
/* @__PURE__ */ jsx("tbody", { className: "divide-border/50 divide-y", children: logEntries.map((entry) => /* @__PURE__ */ jsxs(React49.Fragment, { children: [
|
|
18977
19606
|
/* @__PURE__ */ jsxs("tr", { children: [
|
|
18978
19607
|
/* @__PURE__ */ jsx(
|
|
18979
19608
|
"td",
|
|
@@ -19207,12 +19836,12 @@ function InviteUserModal({
|
|
|
19207
19836
|
errorMessage,
|
|
19208
19837
|
successMessage
|
|
19209
19838
|
}) {
|
|
19210
|
-
const [email, setEmail] =
|
|
19211
|
-
const [firstName, setFirstName] =
|
|
19212
|
-
const [lastName, setLastName] =
|
|
19213
|
-
const [roleId, setRoleId] =
|
|
19214
|
-
const [message, setMessage] =
|
|
19215
|
-
|
|
19839
|
+
const [email, setEmail] = React49.useState("");
|
|
19840
|
+
const [firstName, setFirstName] = React49.useState("");
|
|
19841
|
+
const [lastName, setLastName] = React49.useState("");
|
|
19842
|
+
const [roleId, setRoleId] = React49.useState(defaultRoleId || "");
|
|
19843
|
+
const [message, setMessage] = React49.useState("");
|
|
19844
|
+
React49.useEffect(() => {
|
|
19216
19845
|
if (!open) {
|
|
19217
19846
|
setEmail("");
|
|
19218
19847
|
setFirstName("");
|
|
@@ -19452,7 +20081,7 @@ function InvoiceList({
|
|
|
19452
20081
|
currency = "$",
|
|
19453
20082
|
className = ""
|
|
19454
20083
|
}) {
|
|
19455
|
-
const [searchQuery, setSearchQuery] =
|
|
20084
|
+
const [searchQuery, setSearchQuery] = React49.useState("");
|
|
19456
20085
|
const handleSearch = (e) => {
|
|
19457
20086
|
const query = e.target.value;
|
|
19458
20087
|
setSearchQuery(query);
|
|
@@ -19489,7 +20118,7 @@ function InvoiceList({
|
|
|
19489
20118
|
{ value: "overdue", label: "Overdue" },
|
|
19490
20119
|
{ value: "cancelled", label: "Cancelled" }
|
|
19491
20120
|
];
|
|
19492
|
-
const filteredInvoices =
|
|
20121
|
+
const filteredInvoices = React49.useMemo(() => {
|
|
19493
20122
|
let result = invoices;
|
|
19494
20123
|
if (statusFilter !== "all") {
|
|
19495
20124
|
result = result.filter((inv) => inv.status === statusFilter);
|
|
@@ -19502,7 +20131,7 @@ function InvoiceList({
|
|
|
19502
20131
|
}
|
|
19503
20132
|
return result;
|
|
19504
20133
|
}, [invoices, statusFilter, searchQuery]);
|
|
19505
|
-
const totals =
|
|
20134
|
+
const totals = React49.useMemo(() => {
|
|
19506
20135
|
return {
|
|
19507
20136
|
total: filteredInvoices.reduce((sum, inv) => sum + inv.amount, 0),
|
|
19508
20137
|
paid: filteredInvoices.filter((inv) => inv.status === "paid").reduce((sum, inv) => sum + inv.amount, 0),
|
|
@@ -19726,16 +20355,16 @@ function InvoicePaymentPage({
|
|
|
19726
20355
|
showStripeBranding = true,
|
|
19727
20356
|
className = ""
|
|
19728
20357
|
}) {
|
|
19729
|
-
const [paymentMethod, setPaymentMethod] =
|
|
20358
|
+
const [paymentMethod, setPaymentMethod] = React49.useState(
|
|
19730
20359
|
acceptedMethods[0] || "card"
|
|
19731
20360
|
);
|
|
19732
|
-
const [name, setName] =
|
|
19733
|
-
const [email, setEmail] =
|
|
19734
|
-
const [cardNumber, setCardNumber] =
|
|
19735
|
-
const [expiry, setExpiry] =
|
|
19736
|
-
const [cvc, setCvc] =
|
|
19737
|
-
const [routingNumber, setRoutingNumber] =
|
|
19738
|
-
const [accountNumber, setAccountNumber] =
|
|
20361
|
+
const [name, setName] = React49.useState("");
|
|
20362
|
+
const [email, setEmail] = React49.useState("");
|
|
20363
|
+
const [cardNumber, setCardNumber] = React49.useState("");
|
|
20364
|
+
const [expiry, setExpiry] = React49.useState("");
|
|
20365
|
+
const [cvc, setCvc] = React49.useState("");
|
|
20366
|
+
const [routingNumber, setRoutingNumber] = React49.useState("");
|
|
20367
|
+
const [accountNumber, setAccountNumber] = React49.useState("");
|
|
19739
20368
|
const formatCurrency3 = (amount) => {
|
|
19740
20369
|
return `${currency}${amount.toLocaleString(void 0, { minimumFractionDigits: 2, maximumFractionDigits: 2 })}`;
|
|
19741
20370
|
};
|
|
@@ -20540,10 +21169,10 @@ function LanguageSelector({
|
|
|
20540
21169
|
disabled = false,
|
|
20541
21170
|
className
|
|
20542
21171
|
}) {
|
|
20543
|
-
const [isOpen, setIsOpen] =
|
|
20544
|
-
const containerRef =
|
|
21172
|
+
const [isOpen, setIsOpen] = React49.useState(false);
|
|
21173
|
+
const containerRef = React49.useRef(null);
|
|
20545
21174
|
const selectedLanguage = languages.find((l) => l.code === value);
|
|
20546
|
-
|
|
21175
|
+
React49.useEffect(() => {
|
|
20547
21176
|
const handleClickOutside = (e) => {
|
|
20548
21177
|
if (containerRef.current && !containerRef.current.contains(e.target)) {
|
|
20549
21178
|
setIsOpen(false);
|
|
@@ -20552,7 +21181,7 @@ function LanguageSelector({
|
|
|
20552
21181
|
document.addEventListener("mousedown", handleClickOutside);
|
|
20553
21182
|
return () => document.removeEventListener("mousedown", handleClickOutside);
|
|
20554
21183
|
}, []);
|
|
20555
|
-
|
|
21184
|
+
React49.useEffect(() => {
|
|
20556
21185
|
const handleEscape = (e) => {
|
|
20557
21186
|
if (e.key === "Escape") setIsOpen(false);
|
|
20558
21187
|
};
|
|
@@ -21084,7 +21713,7 @@ function formatLastSeen(date) {
|
|
|
21084
21713
|
if (diffDays < 7) return `${diffDays}d ago`;
|
|
21085
21714
|
return date.toLocaleDateString();
|
|
21086
21715
|
}
|
|
21087
|
-
var ConversationHeader =
|
|
21716
|
+
var ConversationHeader = React49.forwardRef(
|
|
21088
21717
|
({
|
|
21089
21718
|
className,
|
|
21090
21719
|
size,
|
|
@@ -21206,7 +21835,7 @@ var ConversationHeader = React48.forwardRef(
|
|
|
21206
21835
|
}
|
|
21207
21836
|
);
|
|
21208
21837
|
ConversationHeader.displayName = "ConversationHeader";
|
|
21209
|
-
var ConversationListItem =
|
|
21838
|
+
var ConversationListItem = React49.forwardRef(({ className, conversation, isSelected, onSelect, ...props }, ref) => {
|
|
21210
21839
|
const participant = conversation.participants.find((p) => !p.isCurrentUser);
|
|
21211
21840
|
const title = getConversationTitle(conversation, participant);
|
|
21212
21841
|
const avatarUrl = conversation.avatarUrl || participant?.avatarUrl;
|
|
@@ -21414,7 +22043,7 @@ function ConversationListSkeleton({
|
|
|
21414
22043
|
}
|
|
21415
22044
|
ConversationListSkeleton.displayName = "ConversationListSkeleton";
|
|
21416
22045
|
function LightboxModal({ attachment, onClose }) {
|
|
21417
|
-
|
|
22046
|
+
React49.useEffect(() => {
|
|
21418
22047
|
const handleKeyDown = (event) => {
|
|
21419
22048
|
if (event.key === "Escape") {
|
|
21420
22049
|
onClose();
|
|
@@ -21511,7 +22140,7 @@ function LightboxModal({ attachment, onClose }) {
|
|
|
21511
22140
|
);
|
|
21512
22141
|
}
|
|
21513
22142
|
LightboxModal.displayName = "LightboxModal";
|
|
21514
|
-
var MessageThread =
|
|
22143
|
+
var MessageThread = React49.forwardRef(
|
|
21515
22144
|
({
|
|
21516
22145
|
conversation,
|
|
21517
22146
|
messages,
|
|
@@ -21542,8 +22171,8 @@ var MessageThread = React48.forwardRef(
|
|
|
21542
22171
|
onError,
|
|
21543
22172
|
className
|
|
21544
22173
|
}, ref) => {
|
|
21545
|
-
const [lightboxAttachment, setLightboxAttachment] =
|
|
21546
|
-
const [replyTo, setReplyTo] =
|
|
22174
|
+
const [lightboxAttachment, setLightboxAttachment] = React49.useState(null);
|
|
22175
|
+
const [replyTo, setReplyTo] = React49.useState(null);
|
|
21547
22176
|
const participant = conversation?.type === "direct" ? conversation.participants.find((p) => p.id !== currentUser.id) : void 0;
|
|
21548
22177
|
const handleAttachmentClick = (attachment, message) => {
|
|
21549
22178
|
if (attachment.type === "image" || attachment.type === "video") {
|
|
@@ -21715,13 +22344,13 @@ function useMessages(options) {
|
|
|
21715
22344
|
onRetry,
|
|
21716
22345
|
onLoadMore
|
|
21717
22346
|
} = options;
|
|
21718
|
-
const [messages, setMessages] =
|
|
21719
|
-
const [isSending, setIsSending] =
|
|
21720
|
-
const [isLoadingMore, setIsLoadingMore] =
|
|
21721
|
-
|
|
22347
|
+
const [messages, setMessages] = React49.useState(initialMessages);
|
|
22348
|
+
const [isSending, setIsSending] = React49.useState(false);
|
|
22349
|
+
const [isLoadingMore, setIsLoadingMore] = React49.useState(false);
|
|
22350
|
+
React49.useEffect(() => {
|
|
21722
22351
|
setMessages(initialMessages);
|
|
21723
22352
|
}, [initialMessages]);
|
|
21724
|
-
const addMessage =
|
|
22353
|
+
const addMessage = React49.useCallback((message) => {
|
|
21725
22354
|
setMessages((prev) => {
|
|
21726
22355
|
if (prev.some((m) => m.id === message.id)) {
|
|
21727
22356
|
return prev;
|
|
@@ -21729,7 +22358,7 @@ function useMessages(options) {
|
|
|
21729
22358
|
return [...prev, message];
|
|
21730
22359
|
});
|
|
21731
22360
|
}, []);
|
|
21732
|
-
const updateMessage =
|
|
22361
|
+
const updateMessage = React49.useCallback(
|
|
21733
22362
|
(messageId, updates) => {
|
|
21734
22363
|
setMessages(
|
|
21735
22364
|
(prev) => prev.map((m) => m.id === messageId ? { ...m, ...updates } : m)
|
|
@@ -21737,22 +22366,22 @@ function useMessages(options) {
|
|
|
21737
22366
|
},
|
|
21738
22367
|
[]
|
|
21739
22368
|
);
|
|
21740
|
-
const removeMessage =
|
|
22369
|
+
const removeMessage = React49.useCallback((messageId) => {
|
|
21741
22370
|
setMessages((prev) => prev.filter((m) => m.id !== messageId));
|
|
21742
22371
|
}, []);
|
|
21743
|
-
const updateStatus =
|
|
22372
|
+
const updateStatus = React49.useCallback(
|
|
21744
22373
|
(messageId, status) => {
|
|
21745
22374
|
updateMessage(messageId, { status });
|
|
21746
22375
|
},
|
|
21747
22376
|
[updateMessage]
|
|
21748
22377
|
);
|
|
21749
|
-
const markAsRead =
|
|
22378
|
+
const markAsRead = React49.useCallback(
|
|
21750
22379
|
(messageId) => {
|
|
21751
22380
|
updateStatus(messageId, "read");
|
|
21752
22381
|
},
|
|
21753
22382
|
[updateStatus]
|
|
21754
22383
|
);
|
|
21755
|
-
const sendMessage =
|
|
22384
|
+
const sendMessage = React49.useCallback(
|
|
21756
22385
|
async (newMessage) => {
|
|
21757
22386
|
const optimisticId = `optimistic-${Date.now()}`;
|
|
21758
22387
|
const optimisticMessage = {
|
|
@@ -21784,7 +22413,7 @@ function useMessages(options) {
|
|
|
21784
22413
|
},
|
|
21785
22414
|
[currentUser, onSend, addMessage, updateStatus]
|
|
21786
22415
|
);
|
|
21787
|
-
const retryMessage =
|
|
22416
|
+
const retryMessage = React49.useCallback(
|
|
21788
22417
|
async (messageId) => {
|
|
21789
22418
|
updateStatus(messageId, "sending");
|
|
21790
22419
|
try {
|
|
@@ -21798,7 +22427,7 @@ function useMessages(options) {
|
|
|
21798
22427
|
},
|
|
21799
22428
|
[onRetry, updateStatus]
|
|
21800
22429
|
);
|
|
21801
|
-
const loadMore =
|
|
22430
|
+
const loadMore = React49.useCallback(async () => {
|
|
21802
22431
|
if (isLoadingMore || !onLoadMore) return;
|
|
21803
22432
|
setIsLoadingMore(true);
|
|
21804
22433
|
try {
|
|
@@ -21829,13 +22458,13 @@ function useTypingIndicator(options = {}) {
|
|
|
21829
22458
|
onTypingStart,
|
|
21830
22459
|
onTypingStop
|
|
21831
22460
|
} = options;
|
|
21832
|
-
const [participants, setParticipants] =
|
|
21833
|
-
const [isLocalTyping, setIsLocalTyping] =
|
|
21834
|
-
const typingTimeoutRef =
|
|
21835
|
-
|
|
22461
|
+
const [participants, setParticipants] = React49.useState(initialParticipants);
|
|
22462
|
+
const [isLocalTyping, setIsLocalTyping] = React49.useState(false);
|
|
22463
|
+
const typingTimeoutRef = React49.useRef(null);
|
|
22464
|
+
React49.useEffect(() => {
|
|
21836
22465
|
setParticipants(initialParticipants);
|
|
21837
22466
|
}, [initialParticipants]);
|
|
21838
|
-
const startTyping =
|
|
22467
|
+
const startTyping = React49.useCallback(() => {
|
|
21839
22468
|
if (!isLocalTyping) {
|
|
21840
22469
|
setIsLocalTyping(true);
|
|
21841
22470
|
onTypingStart?.();
|
|
@@ -21848,21 +22477,21 @@ function useTypingIndicator(options = {}) {
|
|
|
21848
22477
|
onTypingStop?.();
|
|
21849
22478
|
}, debounceTime);
|
|
21850
22479
|
}, [isLocalTyping, debounceTime, onTypingStart, onTypingStop]);
|
|
21851
|
-
const stopTyping =
|
|
22480
|
+
const stopTyping = React49.useCallback(() => {
|
|
21852
22481
|
if (typingTimeoutRef.current) {
|
|
21853
22482
|
clearTimeout(typingTimeoutRef.current);
|
|
21854
22483
|
}
|
|
21855
22484
|
setIsLocalTyping(false);
|
|
21856
22485
|
onTypingStop?.();
|
|
21857
22486
|
}, [onTypingStop]);
|
|
21858
|
-
|
|
22487
|
+
React49.useEffect(() => {
|
|
21859
22488
|
return () => {
|
|
21860
22489
|
if (typingTimeoutRef.current) {
|
|
21861
22490
|
clearTimeout(typingTimeoutRef.current);
|
|
21862
22491
|
}
|
|
21863
22492
|
};
|
|
21864
22493
|
}, []);
|
|
21865
|
-
const typingState =
|
|
22494
|
+
const typingState = React49.useMemo(
|
|
21866
22495
|
() => ({
|
|
21867
22496
|
participants,
|
|
21868
22497
|
lastUpdated: /* @__PURE__ */ new Date()
|
|
@@ -21878,11 +22507,11 @@ function useTypingIndicator(options = {}) {
|
|
|
21878
22507
|
}
|
|
21879
22508
|
function useMessageScroll(options) {
|
|
21880
22509
|
const { messages, currentUserId, threshold = 100 } = options;
|
|
21881
|
-
const scrollContainerRef =
|
|
21882
|
-
const bottomRef =
|
|
21883
|
-
const [isScrolledUp, setIsScrolledUp] =
|
|
21884
|
-
const prevMessageCountRef =
|
|
21885
|
-
|
|
22510
|
+
const scrollContainerRef = React49.useRef(null);
|
|
22511
|
+
const bottomRef = React49.useRef(null);
|
|
22512
|
+
const [isScrolledUp, setIsScrolledUp] = React49.useState(false);
|
|
22513
|
+
const prevMessageCountRef = React49.useRef(messages.length);
|
|
22514
|
+
React49.useEffect(() => {
|
|
21886
22515
|
const container = scrollContainerRef.current;
|
|
21887
22516
|
if (!container) return;
|
|
21888
22517
|
const handleScroll = () => {
|
|
@@ -21893,12 +22522,12 @@ function useMessageScroll(options) {
|
|
|
21893
22522
|
container.addEventListener("scroll", handleScroll);
|
|
21894
22523
|
return () => container.removeEventListener("scroll", handleScroll);
|
|
21895
22524
|
}, [threshold]);
|
|
21896
|
-
const scrollToBottom =
|
|
22525
|
+
const scrollToBottom = React49.useCallback((smooth = true) => {
|
|
21897
22526
|
bottomRef.current?.scrollIntoView({
|
|
21898
22527
|
behavior: smooth ? "smooth" : "auto"
|
|
21899
22528
|
});
|
|
21900
22529
|
}, []);
|
|
21901
|
-
|
|
22530
|
+
React49.useEffect(() => {
|
|
21902
22531
|
const messageCountChanged = messages.length !== prevMessageCountRef.current;
|
|
21903
22532
|
prevMessageCountRef.current = messages.length;
|
|
21904
22533
|
if (!messageCountChanged) return;
|
|
@@ -21917,9 +22546,9 @@ function useMessageScroll(options) {
|
|
|
21917
22546
|
}
|
|
21918
22547
|
function useReadReceipts(options) {
|
|
21919
22548
|
const { currentUserId, onMarkRead, threshold = 0.5 } = options;
|
|
21920
|
-
const observerRef =
|
|
21921
|
-
const observedMessagesRef =
|
|
21922
|
-
|
|
22549
|
+
const observerRef = React49.useRef(null);
|
|
22550
|
+
const observedMessagesRef = React49.useRef(/* @__PURE__ */ new Set());
|
|
22551
|
+
React49.useEffect(() => {
|
|
21923
22552
|
observerRef.current = new IntersectionObserver(
|
|
21924
22553
|
(entries) => {
|
|
21925
22554
|
entries.forEach((entry) => {
|
|
@@ -21938,7 +22567,7 @@ function useReadReceipts(options) {
|
|
|
21938
22567
|
observerRef.current?.disconnect();
|
|
21939
22568
|
};
|
|
21940
22569
|
}, [onMarkRead, threshold]);
|
|
21941
|
-
const observeMessage =
|
|
22570
|
+
const observeMessage = React49.useCallback(
|
|
21942
22571
|
(element, message) => {
|
|
21943
22572
|
if (!element || !observerRef.current) return;
|
|
21944
22573
|
if (message.sender.id !== currentUserId && message.status !== "read" && !observedMessagesRef.current.has(message.id)) {
|
|
@@ -22893,13 +23522,13 @@ function OrderConfirmationWizard({
|
|
|
22893
23522
|
stepTitles = ["Verify Employee", "Consent & ID", "Confirmation"],
|
|
22894
23523
|
className = ""
|
|
22895
23524
|
}) {
|
|
22896
|
-
const [step, setStep] =
|
|
22897
|
-
const [employeeVerified, setEmployeeVerified] =
|
|
22898
|
-
const [verificationNotes, setVerificationNotes] =
|
|
22899
|
-
const [consentObtained, setConsentObtained] =
|
|
22900
|
-
const [idVerified, setIdVerified] =
|
|
22901
|
-
const [idType, setIdType] =
|
|
22902
|
-
const [confirmationNotes, setConfirmationNotes] =
|
|
23525
|
+
const [step, setStep] = React49.useState(initialStep);
|
|
23526
|
+
const [employeeVerified, setEmployeeVerified] = React49.useState(false);
|
|
23527
|
+
const [verificationNotes, setVerificationNotes] = React49.useState("");
|
|
23528
|
+
const [consentObtained, setConsentObtained] = React49.useState(false);
|
|
23529
|
+
const [idVerified, setIdVerified] = React49.useState(false);
|
|
23530
|
+
const [idType, setIdType] = React49.useState("");
|
|
23531
|
+
const [confirmationNotes, setConfirmationNotes] = React49.useState("");
|
|
22903
23532
|
const handleStepChange = (newStep) => {
|
|
22904
23533
|
setStep(newStep);
|
|
22905
23534
|
onStepChange?.(newStep);
|
|
@@ -22927,7 +23556,7 @@ function OrderConfirmationWizard({
|
|
|
22927
23556
|
const stepNum = index + 1;
|
|
22928
23557
|
const isActive = step === stepNum;
|
|
22929
23558
|
const isComplete = step > stepNum;
|
|
22930
|
-
return /* @__PURE__ */ jsxs(
|
|
23559
|
+
return /* @__PURE__ */ jsxs(React49.Fragment, { children: [
|
|
22931
23560
|
/* @__PURE__ */ jsxs("div", { className: "flex flex-col items-center", children: [
|
|
22932
23561
|
/* @__PURE__ */ jsx(
|
|
22933
23562
|
"div",
|
|
@@ -23512,7 +24141,7 @@ function OrderList({
|
|
|
23512
24141
|
actions,
|
|
23513
24142
|
className
|
|
23514
24143
|
}) {
|
|
23515
|
-
const filteredOrders =
|
|
24144
|
+
const filteredOrders = React49.useMemo(() => {
|
|
23516
24145
|
const activeTabConfig = tabs.find((t) => t.id === activeTab);
|
|
23517
24146
|
if (!activeTabConfig?.statuses || !getOrderStatus) {
|
|
23518
24147
|
return orders;
|
|
@@ -23521,7 +24150,7 @@ function OrderList({
|
|
|
23521
24150
|
(order) => activeTabConfig.statuses.includes(getOrderStatus(order))
|
|
23522
24151
|
);
|
|
23523
24152
|
}, [orders, activeTab, tabs, getOrderStatus]);
|
|
23524
|
-
const tabCounts =
|
|
24153
|
+
const tabCounts = React49.useMemo(() => {
|
|
23525
24154
|
if (!getOrderStatus) return {};
|
|
23526
24155
|
const counts = {};
|
|
23527
24156
|
tabs.forEach((tab) => {
|
|
@@ -23745,7 +24374,7 @@ function OrderLookupForm({
|
|
|
23745
24374
|
welcomeMessage = "Look up your order by entering the information below.",
|
|
23746
24375
|
className = ""
|
|
23747
24376
|
}) {
|
|
23748
|
-
const [formData, setFormData] =
|
|
24377
|
+
const [formData, setFormData] = React49.useState({
|
|
23749
24378
|
orderNumber: "",
|
|
23750
24379
|
dateOfBirth: "",
|
|
23751
24380
|
lastName: ""
|
|
@@ -24279,14 +24908,14 @@ function OverflowMenuItem({
|
|
|
24279
24908
|
function PatientOverflowMenu({
|
|
24280
24909
|
onAction
|
|
24281
24910
|
}) {
|
|
24282
|
-
const [open, setOpen] =
|
|
24283
|
-
const menuRef =
|
|
24911
|
+
const [open, setOpen] = React49.useState(false);
|
|
24912
|
+
const menuRef = React49.useRef(null);
|
|
24284
24913
|
useClickOutside(
|
|
24285
24914
|
menuRef,
|
|
24286
|
-
|
|
24915
|
+
React49.useCallback(() => setOpen(false), [])
|
|
24287
24916
|
);
|
|
24288
24917
|
useEscapeKey(
|
|
24289
|
-
|
|
24918
|
+
React49.useCallback(() => setOpen(false), []),
|
|
24290
24919
|
open
|
|
24291
24920
|
);
|
|
24292
24921
|
const handleAction = (action) => {
|
|
@@ -24471,7 +25100,7 @@ function AlertRow({ comments }) {
|
|
|
24471
25100
|
/* @__PURE__ */ jsx("span", { className: "text-foreground text-sm", children: comments.join("; ") })
|
|
24472
25101
|
] });
|
|
24473
25102
|
}
|
|
24474
|
-
var PatientHeader =
|
|
25103
|
+
var PatientHeader = React49.forwardRef(
|
|
24475
25104
|
({
|
|
24476
25105
|
patient,
|
|
24477
25106
|
allergies = [],
|
|
@@ -24500,13 +25129,13 @@ var PatientHeader = React48.forwardRef(
|
|
|
24500
25129
|
const hasComments = showCommentsBanner && comments.length > 0;
|
|
24501
25130
|
const hasProviders = showProviderBanner && !!(patient.attendingProvider || patient.familyProvider);
|
|
24502
25131
|
const hasInfoRows = hasAllergies || hasMedications || hasComments || hasProviders;
|
|
24503
|
-
const [addModalType, setAddModalType] =
|
|
24504
|
-
const [addForm, setAddForm] =
|
|
25132
|
+
const [addModalType, setAddModalType] = React49.useState(null);
|
|
25133
|
+
const [addForm, setAddForm] = React49.useState({});
|
|
24505
25134
|
const addEntityLabel = addModalType ? ADD_ENTITY_LABELS[addModalType] ?? "" : "";
|
|
24506
|
-
const [contactModalOpen, setContactModalOpen] =
|
|
24507
|
-
const [editPatientOpen, setEditPatientOpen] =
|
|
24508
|
-
const [editPatientForm, setEditPatientForm] =
|
|
24509
|
-
const handleOverflowAction =
|
|
25135
|
+
const [contactModalOpen, setContactModalOpen] = React49.useState(false);
|
|
25136
|
+
const [editPatientOpen, setEditPatientOpen] = React49.useState(false);
|
|
25137
|
+
const [editPatientForm, setEditPatientForm] = React49.useState({});
|
|
25138
|
+
const handleOverflowAction = React49.useCallback(
|
|
24510
25139
|
(action) => {
|
|
24511
25140
|
if (action === "contact") {
|
|
24512
25141
|
setContactModalOpen(true);
|
|
@@ -25987,7 +26616,7 @@ function PermissionItem({
|
|
|
25987
26616
|
parentChecked
|
|
25988
26617
|
}) {
|
|
25989
26618
|
const hasChildren = permission.children && permission.children.length > 0;
|
|
25990
|
-
const [isExpanded, setIsExpanded] =
|
|
26619
|
+
const [isExpanded, setIsExpanded] = React49.useState(true);
|
|
25991
26620
|
const handleChange = (checked) => {
|
|
25992
26621
|
onToggle(permission.id, checked);
|
|
25993
26622
|
if (!checked && hasChildren) {
|
|
@@ -26069,12 +26698,12 @@ function PermissionsEditor({
|
|
|
26069
26698
|
summary = "Summary",
|
|
26070
26699
|
all = "All"
|
|
26071
26700
|
} = labels;
|
|
26072
|
-
const [expandedGroups, setExpandedGroups] =
|
|
26701
|
+
const [expandedGroups, setExpandedGroups] = React49.useState(
|
|
26073
26702
|
() => new Set(
|
|
26074
26703
|
groups.filter((g) => g.defaultExpanded !== false).map((g) => g.id)
|
|
26075
26704
|
)
|
|
26076
26705
|
);
|
|
26077
|
-
const permissionMap =
|
|
26706
|
+
const permissionMap = React49.useMemo(() => {
|
|
26078
26707
|
const map = /* @__PURE__ */ new Map();
|
|
26079
26708
|
const processPermissions = (permissions) => {
|
|
26080
26709
|
permissions.forEach((perm) => {
|
|
@@ -26118,7 +26747,7 @@ function PermissionsEditor({
|
|
|
26118
26747
|
onEmployersChange([...selectedEmployers, employerId]);
|
|
26119
26748
|
}
|
|
26120
26749
|
};
|
|
26121
|
-
const assignedPermissionNames =
|
|
26750
|
+
const assignedPermissionNames = React49.useMemo(() => {
|
|
26122
26751
|
return assignedPermissions.map((id) => permissionMap.get(id)?.name).filter(Boolean);
|
|
26123
26752
|
}, [assignedPermissions, permissionMap]);
|
|
26124
26753
|
return /* @__PURE__ */ jsxs("div", { className: cn("space-y-6", className), "data-slot": "perm-editor", children: [
|
|
@@ -26535,7 +27164,7 @@ var logoContainerVariants = cva(
|
|
|
26535
27164
|
}
|
|
26536
27165
|
);
|
|
26537
27166
|
var ProviderLogo = ({ logoURL, name, variant }) => {
|
|
26538
|
-
const [hasError, setHasError] =
|
|
27167
|
+
const [hasError, setHasError] = React49.useState(false);
|
|
26539
27168
|
if (!logoURL || hasError) {
|
|
26540
27169
|
return /* @__PURE__ */ jsx(
|
|
26541
27170
|
"div",
|
|
@@ -26670,7 +27299,7 @@ function formatAddressSingleLine2(address) {
|
|
|
26670
27299
|
parts.push(`${address.city}, ${address.state} ${address.postalCode}`);
|
|
26671
27300
|
return parts.join(", ");
|
|
26672
27301
|
}
|
|
26673
|
-
var ProviderCard =
|
|
27302
|
+
var ProviderCard = React49.forwardRef(
|
|
26674
27303
|
({
|
|
26675
27304
|
provider,
|
|
26676
27305
|
variant = "compact",
|
|
@@ -27155,7 +27784,7 @@ function ProviderLogo2({
|
|
|
27155
27784
|
size = "md",
|
|
27156
27785
|
className
|
|
27157
27786
|
}) {
|
|
27158
|
-
const [hasError, setHasError] =
|
|
27787
|
+
const [hasError, setHasError] = React49.useState(false);
|
|
27159
27788
|
const initials = name.split(" ").map((word) => word[0]).join("").toUpperCase().slice(0, 2);
|
|
27160
27789
|
if (!src || hasError) {
|
|
27161
27790
|
return /* @__PURE__ */ jsx(
|
|
@@ -27593,7 +28222,7 @@ function ProviderDetailHeaderSkeleton({
|
|
|
27593
28222
|
/* @__PURE__ */ jsx("div", { className: "h-3 w-12 rounded bg-gray-200 dark:bg-gray-700" })
|
|
27594
28223
|
] }, i)) }),
|
|
27595
28224
|
/* @__PURE__ */ jsxs("div", { className: "container mx-auto px-4 py-6", children: [
|
|
27596
|
-
/* @__PURE__ */ jsx("div", { className: "mb-4 hidden items-center gap-2 sm:flex", children: [1, 2, 3, 4].map((i) => /* @__PURE__ */ jsxs(
|
|
28225
|
+
/* @__PURE__ */ jsx("div", { className: "mb-4 hidden items-center gap-2 sm:flex", children: [1, 2, 3, 4].map((i) => /* @__PURE__ */ jsxs(React49.Fragment, { children: [
|
|
27597
28226
|
i > 1 && /* @__PURE__ */ jsx("div", { className: "h-4 w-4 rounded-full bg-gray-200 dark:bg-gray-700" }),
|
|
27598
28227
|
/* @__PURE__ */ jsx("div", { className: "h-4 w-16 rounded bg-gray-200 dark:bg-gray-700" })
|
|
27599
28228
|
] }, i)) }),
|
|
@@ -28519,7 +29148,7 @@ var SearchResultsMessage = ({
|
|
|
28519
29148
|
}
|
|
28520
29149
|
);
|
|
28521
29150
|
};
|
|
28522
|
-
var ProviderSearchBar =
|
|
29151
|
+
var ProviderSearchBar = React49.forwardRef(
|
|
28523
29152
|
({
|
|
28524
29153
|
onSearch,
|
|
28525
29154
|
onGeolocate,
|
|
@@ -28540,10 +29169,10 @@ var ProviderSearchBar = React48.forwardRef(
|
|
|
28540
29169
|
className,
|
|
28541
29170
|
...props
|
|
28542
29171
|
}, ref) => {
|
|
28543
|
-
const [internalValue, setInternalValue] =
|
|
29172
|
+
const [internalValue, setInternalValue] = React49.useState(
|
|
28544
29173
|
defaultValue || ""
|
|
28545
29174
|
);
|
|
28546
|
-
const [validationError, setValidationError] =
|
|
29175
|
+
const [validationError, setValidationError] = React49.useState(
|
|
28547
29176
|
null
|
|
28548
29177
|
);
|
|
28549
29178
|
const zipValue = value ?? internalValue;
|
|
@@ -28824,7 +29453,7 @@ function XMarkIcon({ className }) {
|
|
|
28824
29453
|
);
|
|
28825
29454
|
}
|
|
28826
29455
|
function InputField({ label, icon, className, id, ...props }) {
|
|
28827
|
-
const generatedId =
|
|
29456
|
+
const generatedId = React49.useId();
|
|
28828
29457
|
const inputId = id || generatedId;
|
|
28829
29458
|
return /* @__PURE__ */ jsxs("div", { className: "relative", children: [
|
|
28830
29459
|
label && /* @__PURE__ */ jsx("label", { htmlFor: inputId, className: labelVariants2(), children: label }),
|
|
@@ -28848,7 +29477,7 @@ function SelectField({
|
|
|
28848
29477
|
id,
|
|
28849
29478
|
...props
|
|
28850
29479
|
}) {
|
|
28851
|
-
const generatedId =
|
|
29480
|
+
const generatedId = React49.useId();
|
|
28852
29481
|
const selectId = id || generatedId;
|
|
28853
29482
|
return /* @__PURE__ */ jsxs("div", { children: [
|
|
28854
29483
|
label && /* @__PURE__ */ jsx("label", { htmlFor: selectId, className: labelVariants2(), children: label }),
|
|
@@ -28901,12 +29530,12 @@ function ServiceMultiSelect({
|
|
|
28901
29530
|
disabled = false,
|
|
28902
29531
|
showCounts = false
|
|
28903
29532
|
}) {
|
|
28904
|
-
const [isOpen, setIsOpen] =
|
|
28905
|
-
const [searchTerm, setSearchTerm] =
|
|
28906
|
-
const containerRef =
|
|
28907
|
-
const inputRef =
|
|
28908
|
-
const listboxId =
|
|
28909
|
-
|
|
29533
|
+
const [isOpen, setIsOpen] = React49.useState(false);
|
|
29534
|
+
const [searchTerm, setSearchTerm] = React49.useState("");
|
|
29535
|
+
const containerRef = React49.useRef(null);
|
|
29536
|
+
const inputRef = React49.useRef(null);
|
|
29537
|
+
const listboxId = React49.useId();
|
|
29538
|
+
React49.useEffect(() => {
|
|
28910
29539
|
function handleClickOutside(event) {
|
|
28911
29540
|
if (containerRef.current && !containerRef.current.contains(event.target)) {
|
|
28912
29541
|
setIsOpen(false);
|
|
@@ -28915,14 +29544,14 @@ function ServiceMultiSelect({
|
|
|
28915
29544
|
document.addEventListener("mousedown", handleClickOutside);
|
|
28916
29545
|
return () => document.removeEventListener("mousedown", handleClickOutside);
|
|
28917
29546
|
}, []);
|
|
28918
|
-
const filteredServices =
|
|
29547
|
+
const filteredServices = React49.useMemo(() => {
|
|
28919
29548
|
if (!searchTerm) return services;
|
|
28920
29549
|
const lowerSearch = searchTerm.toLowerCase();
|
|
28921
29550
|
return services.filter(
|
|
28922
29551
|
(service) => service.label.toLowerCase().includes(lowerSearch) || service.category?.toLowerCase().includes(lowerSearch)
|
|
28923
29552
|
);
|
|
28924
29553
|
}, [services, searchTerm]);
|
|
28925
|
-
const groupedServices =
|
|
29554
|
+
const groupedServices = React49.useMemo(() => {
|
|
28926
29555
|
const groups = {};
|
|
28927
29556
|
filteredServices.forEach((service) => {
|
|
28928
29557
|
const category = service.category || "Other";
|
|
@@ -28931,7 +29560,7 @@ function ServiceMultiSelect({
|
|
|
28931
29560
|
});
|
|
28932
29561
|
return groups;
|
|
28933
29562
|
}, [filteredServices]);
|
|
28934
|
-
const selectedServiceObjects =
|
|
29563
|
+
const selectedServiceObjects = React49.useMemo(
|
|
28935
29564
|
() => services.filter((s) => selectedServices.includes(s.value)),
|
|
28936
29565
|
[services, selectedServices]
|
|
28937
29566
|
);
|
|
@@ -29437,10 +30066,10 @@ function ProviderSelector({
|
|
|
29437
30066
|
size = "md",
|
|
29438
30067
|
className
|
|
29439
30068
|
}) {
|
|
29440
|
-
const [isOpen, setIsOpen] =
|
|
29441
|
-
const [searchQuery, setSearchQuery] =
|
|
29442
|
-
const containerRef =
|
|
29443
|
-
|
|
30069
|
+
const [isOpen, setIsOpen] = React49.useState(false);
|
|
30070
|
+
const [searchQuery, setSearchQuery] = React49.useState("");
|
|
30071
|
+
const containerRef = React49.useRef(null);
|
|
30072
|
+
React49.useEffect(() => {
|
|
29444
30073
|
function handleClickOutside(event) {
|
|
29445
30074
|
if (containerRef.current && !containerRef.current.contains(event.target)) {
|
|
29446
30075
|
setIsOpen(false);
|
|
@@ -29449,7 +30078,7 @@ function ProviderSelector({
|
|
|
29449
30078
|
document.addEventListener("mousedown", handleClickOutside);
|
|
29450
30079
|
return () => document.removeEventListener("mousedown", handleClickOutside);
|
|
29451
30080
|
}, []);
|
|
29452
|
-
|
|
30081
|
+
React49.useEffect(() => {
|
|
29453
30082
|
function handleEscape(event) {
|
|
29454
30083
|
if (event.key === "Escape") {
|
|
29455
30084
|
setIsOpen(false);
|
|
@@ -29458,12 +30087,12 @@ function ProviderSelector({
|
|
|
29458
30087
|
document.addEventListener("keydown", handleEscape);
|
|
29459
30088
|
return () => document.removeEventListener("keydown", handleEscape);
|
|
29460
30089
|
}, []);
|
|
29461
|
-
|
|
30090
|
+
React49.useEffect(() => {
|
|
29462
30091
|
if (!isOpen) {
|
|
29463
30092
|
setSearchQuery("");
|
|
29464
30093
|
}
|
|
29465
30094
|
}, [isOpen]);
|
|
29466
|
-
const filteredProviders =
|
|
30095
|
+
const filteredProviders = React49.useMemo(() => {
|
|
29467
30096
|
if (!searchQuery) return providers;
|
|
29468
30097
|
const query = searchQuery.toLowerCase();
|
|
29469
30098
|
return providers.filter(
|
|
@@ -29753,9 +30382,9 @@ function ProviderSettings({
|
|
|
29753
30382
|
defaultTab = "general",
|
|
29754
30383
|
className = ""
|
|
29755
30384
|
}) {
|
|
29756
|
-
const [settings, setSettings] =
|
|
29757
|
-
const [hasChanges, setHasChanges] =
|
|
29758
|
-
|
|
30385
|
+
const [settings, setSettings] = React49.useState(initialSettings);
|
|
30386
|
+
const [hasChanges, setHasChanges] = React49.useState(false);
|
|
30387
|
+
React49.useEffect(() => {
|
|
29759
30388
|
setSettings(initialSettings);
|
|
29760
30389
|
setHasChanges(false);
|
|
29761
30390
|
}, [initialSettings]);
|
|
@@ -30987,11 +31616,11 @@ function RecurringServiceSetupModal({
|
|
|
30987
31616
|
cancel = "Cancel",
|
|
30988
31617
|
save = "Save"
|
|
30989
31618
|
} = labels;
|
|
30990
|
-
const instanceId =
|
|
31619
|
+
const instanceId = React49.useId();
|
|
30991
31620
|
const providerSelectId = `${instanceId}-provider`;
|
|
30992
31621
|
const serviceSelectId = `${instanceId}-service`;
|
|
30993
31622
|
const occurrenceSelectId = `${instanceId}-occurrence`;
|
|
30994
|
-
const [formData, setFormData] =
|
|
31623
|
+
const [formData, setFormData] = React49.useState(
|
|
30995
31624
|
initialData || {
|
|
30996
31625
|
providerId: "",
|
|
30997
31626
|
serviceId: "",
|
|
@@ -30999,7 +31628,7 @@ function RecurringServiceSetupModal({
|
|
|
30999
31628
|
overrideConsent: false
|
|
31000
31629
|
}
|
|
31001
31630
|
);
|
|
31002
|
-
|
|
31631
|
+
React49.useEffect(() => {
|
|
31003
31632
|
if (initialData) {
|
|
31004
31633
|
setFormData(initialData);
|
|
31005
31634
|
} else {
|
|
@@ -31212,9 +31841,9 @@ function RejectionModal({
|
|
|
31212
31841
|
isSubmitting = false,
|
|
31213
31842
|
variant = "danger"
|
|
31214
31843
|
}) {
|
|
31215
|
-
const [selectedReasonId, setSelectedReasonId] =
|
|
31216
|
-
const [details, setDetails] =
|
|
31217
|
-
|
|
31844
|
+
const [selectedReasonId, setSelectedReasonId] = React49.useState("");
|
|
31845
|
+
const [details, setDetails] = React49.useState("");
|
|
31846
|
+
React49.useEffect(() => {
|
|
31218
31847
|
if (!open) {
|
|
31219
31848
|
setSelectedReasonId("");
|
|
31220
31849
|
setDetails("");
|
|
@@ -31671,7 +32300,7 @@ function ReportDashboard({
|
|
|
31671
32300
|
)
|
|
31672
32301
|
] });
|
|
31673
32302
|
}
|
|
31674
|
-
var ResultsEntryForm =
|
|
32303
|
+
var ResultsEntryForm = React49.forwardRef(function ResultsEntryForm2({
|
|
31675
32304
|
employeeFirstName,
|
|
31676
32305
|
employeeLastName,
|
|
31677
32306
|
initialData = {},
|
|
@@ -31699,30 +32328,30 @@ var ResultsEntryForm = React48.forwardRef(function ResultsEntryForm2({
|
|
|
31699
32328
|
addProviderContact = "Click here to add a provider contact",
|
|
31700
32329
|
pleaseSelectResult = "Please select a result"
|
|
31701
32330
|
} = labels;
|
|
31702
|
-
const [result, setResult] =
|
|
32331
|
+
const [result, setResult] = React49.useState(
|
|
31703
32332
|
initialData.result ?? null
|
|
31704
32333
|
);
|
|
31705
|
-
const [alternateText, setAlternateText] =
|
|
32334
|
+
const [alternateText, setAlternateText] = React49.useState(
|
|
31706
32335
|
initialData.alternateText ?? ""
|
|
31707
32336
|
);
|
|
31708
|
-
const [dateDrawnValue, setDateDrawnValue] =
|
|
32337
|
+
const [dateDrawnValue, setDateDrawnValue] = React49.useState(
|
|
31709
32338
|
initialData.dateDrawn ?? ""
|
|
31710
32339
|
);
|
|
31711
|
-
const [dateCompletedValue, setDateCompletedValue] =
|
|
32340
|
+
const [dateCompletedValue, setDateCompletedValue] = React49.useState(
|
|
31712
32341
|
initialData.dateCompleted ?? ""
|
|
31713
32342
|
);
|
|
31714
|
-
const [recommendations, setRecommendations] =
|
|
32343
|
+
const [recommendations, setRecommendations] = React49.useState(
|
|
31715
32344
|
initialData.recommendations ?? ""
|
|
31716
32345
|
);
|
|
31717
|
-
const [files, setFiles] =
|
|
31718
|
-
const [selectedContacts, setSelectedContacts] =
|
|
32346
|
+
const [files, setFiles] = React49.useState(initialData.files ?? []);
|
|
32347
|
+
const [selectedContacts, setSelectedContacts] = React49.useState(
|
|
31719
32348
|
initialData.providerContacts ?? []
|
|
31720
32349
|
);
|
|
31721
|
-
const [applyToAll, setApplyToAll] =
|
|
32350
|
+
const [applyToAll, setApplyToAll] = React49.useState(
|
|
31722
32351
|
initialData.applyToAllServices ?? false
|
|
31723
32352
|
);
|
|
31724
|
-
const [showError, setShowError] =
|
|
31725
|
-
const fileInputRef =
|
|
32353
|
+
const [showError, setShowError] = React49.useState(false);
|
|
32354
|
+
const fileInputRef = React49.useRef(null);
|
|
31726
32355
|
const handleFileSelect = (e) => {
|
|
31727
32356
|
const selectedFiles = Array.from(e.target.files || []);
|
|
31728
32357
|
setFiles((prev) => [...prev, ...selectedFiles]);
|
|
@@ -31738,7 +32367,7 @@ var ResultsEntryForm = React48.forwardRef(function ResultsEntryForm2({
|
|
|
31738
32367
|
(prev) => prev.includes(contactId) ? prev.filter((id) => id !== contactId) : [...prev, contactId]
|
|
31739
32368
|
);
|
|
31740
32369
|
};
|
|
31741
|
-
const validateAndSubmit =
|
|
32370
|
+
const validateAndSubmit = React49.useCallback(() => {
|
|
31742
32371
|
if (!result) {
|
|
31743
32372
|
setShowError(true);
|
|
31744
32373
|
return;
|
|
@@ -31765,7 +32394,7 @@ var ResultsEntryForm = React48.forwardRef(function ResultsEntryForm2({
|
|
|
31765
32394
|
applyToAll,
|
|
31766
32395
|
onSubmit
|
|
31767
32396
|
]);
|
|
31768
|
-
|
|
32397
|
+
React49.useImperativeHandle(
|
|
31769
32398
|
ref,
|
|
31770
32399
|
() => ({
|
|
31771
32400
|
submit: validateAndSubmit
|
|
@@ -32041,7 +32670,7 @@ function ResultsEntryModal({
|
|
|
32041
32670
|
...props
|
|
32042
32671
|
}) {
|
|
32043
32672
|
const { submit = "Submit", close = "Close" } = labels;
|
|
32044
|
-
const formRef =
|
|
32673
|
+
const formRef = React49.useRef(null);
|
|
32045
32674
|
const employeeName = employeeFirstName || employeeLastName ? `${employeeFirstName ?? ""} ${employeeLastName ?? ""}`.trim() : void 0;
|
|
32046
32675
|
const handleSubmitClick = () => {
|
|
32047
32676
|
formRef.current?.submit();
|
|
@@ -32171,7 +32800,7 @@ function ScheduleCalendar({
|
|
|
32171
32800
|
isLoading = false,
|
|
32172
32801
|
className = ""
|
|
32173
32802
|
}) {
|
|
32174
|
-
const [currentDate, setCurrentDate] =
|
|
32803
|
+
const [currentDate, setCurrentDate] = React49.useState(selectedDate);
|
|
32175
32804
|
const formatTime4 = (date) => {
|
|
32176
32805
|
const d = typeof date === "string" ? new Date(date) : date;
|
|
32177
32806
|
return d.toLocaleTimeString("en-US", {
|
|
@@ -32643,7 +33272,7 @@ function SubCategoryAccordion({
|
|
|
32643
33272
|
onServiceClick,
|
|
32644
33273
|
index
|
|
32645
33274
|
}) {
|
|
32646
|
-
const [isExpanded, setIsExpanded] =
|
|
33275
|
+
const [isExpanded, setIsExpanded] = React49.useState(
|
|
32647
33276
|
subCategory.defaultExpanded ?? false
|
|
32648
33277
|
);
|
|
32649
33278
|
const contentId = `sub-content-${index}`;
|
|
@@ -32710,7 +33339,7 @@ function CategoryAccordionItem({
|
|
|
32710
33339
|
onExpandChange
|
|
32711
33340
|
}) {
|
|
32712
33341
|
const isControlled = expandedCategories !== void 0;
|
|
32713
|
-
const [internalExpanded, setInternalExpanded] =
|
|
33342
|
+
const [internalExpanded, setInternalExpanded] = React49.useState(
|
|
32714
33343
|
category.defaultExpanded ?? false
|
|
32715
33344
|
);
|
|
32716
33345
|
const isExpanded = isControlled ? expandedCategories.includes(category.name) : internalExpanded;
|
|
@@ -32808,7 +33437,7 @@ function ServiceAccordion({
|
|
|
32808
33437
|
className,
|
|
32809
33438
|
"aria-label": ariaLabel = "Service categories"
|
|
32810
33439
|
}) {
|
|
32811
|
-
const [internalExpanded, setInternalExpanded] =
|
|
33440
|
+
const [internalExpanded, setInternalExpanded] = React49.useState([]);
|
|
32812
33441
|
const isControlled = controlledExpanded !== void 0;
|
|
32813
33442
|
const expanded = isControlled ? controlledExpanded : internalExpanded;
|
|
32814
33443
|
const handleExpandChange = (categoryName, isExpanded) => {
|
|
@@ -33100,7 +33729,7 @@ function ServiceBadgeGroup({
|
|
|
33100
33729
|
size = "md",
|
|
33101
33730
|
onShowMore
|
|
33102
33731
|
}) {
|
|
33103
|
-
const badges =
|
|
33732
|
+
const badges = React49.Children.toArray(children);
|
|
33104
33733
|
const visibleBadges = maxVisible ? badges.slice(0, maxVisible) : badges;
|
|
33105
33734
|
const hiddenCount = maxVisible ? badges.length - maxVisible : 0;
|
|
33106
33735
|
return /* @__PURE__ */ jsxs(
|
|
@@ -33953,15 +34582,15 @@ function ServicePicker({
|
|
|
33953
34582
|
fullWidth = false,
|
|
33954
34583
|
className
|
|
33955
34584
|
}) {
|
|
33956
|
-
const [searchQuery, setSearchQuery] =
|
|
33957
|
-
const [expandedGroups, setExpandedGroups] =
|
|
34585
|
+
const [searchQuery, setSearchQuery] = React49.useState("");
|
|
34586
|
+
const [expandedGroups, setExpandedGroups] = React49.useState(
|
|
33958
34587
|
/* @__PURE__ */ new Set()
|
|
33959
34588
|
);
|
|
33960
|
-
const filteredGroups =
|
|
34589
|
+
const filteredGroups = React49.useMemo(
|
|
33961
34590
|
() => filterServices(groups, searchQuery),
|
|
33962
34591
|
[groups, searchQuery]
|
|
33963
34592
|
);
|
|
33964
|
-
const searchResults =
|
|
34593
|
+
const searchResults = React49.useMemo(
|
|
33965
34594
|
() => searchQuery ? flattenServices(filteredGroups) : [],
|
|
33966
34595
|
[filteredGroups, searchQuery]
|
|
33967
34596
|
);
|
|
@@ -34410,16 +35039,16 @@ function ServicePricingManager({
|
|
|
34410
35039
|
categories: _categories = [],
|
|
34411
35040
|
className = ""
|
|
34412
35041
|
}) {
|
|
34413
|
-
const [searchTerm, setSearchTerm] =
|
|
34414
|
-
const [selectedCategory, setSelectedCategory] =
|
|
35042
|
+
const [searchTerm, setSearchTerm] = React49.useState("");
|
|
35043
|
+
const [selectedCategory, setSelectedCategory] = React49.useState(
|
|
34415
35044
|
null
|
|
34416
35045
|
);
|
|
34417
|
-
const [editingService, setEditingService] =
|
|
34418
|
-
const [editPrice, setEditPrice] =
|
|
34419
|
-
const [editEmployerPrice, setEditEmployerPrice] =
|
|
34420
|
-
const [showBulkModal, setShowBulkModal] =
|
|
34421
|
-
const [bulkAdjustment, setBulkAdjustment] =
|
|
34422
|
-
const [bulkAdjustmentType, setBulkAdjustmentType] =
|
|
35046
|
+
const [editingService, setEditingService] = React49.useState(null);
|
|
35047
|
+
const [editPrice, setEditPrice] = React49.useState("");
|
|
35048
|
+
const [editEmployerPrice, setEditEmployerPrice] = React49.useState("");
|
|
35049
|
+
const [showBulkModal, setShowBulkModal] = React49.useState(false);
|
|
35050
|
+
const [bulkAdjustment, setBulkAdjustment] = React49.useState("");
|
|
35051
|
+
const [bulkAdjustmentType, setBulkAdjustmentType] = React49.useState("percent");
|
|
34423
35052
|
const formatCurrency3 = (amount) => {
|
|
34424
35053
|
return new Intl.NumberFormat("en-US", {
|
|
34425
35054
|
style: "currency",
|
|
@@ -34810,7 +35439,7 @@ function ServiceShippingSettings({
|
|
|
34810
35439
|
isSaving = false,
|
|
34811
35440
|
className = ""
|
|
34812
35441
|
}) {
|
|
34813
|
-
const [address, setAddress] =
|
|
35442
|
+
const [address, setAddress] = React49.useState(
|
|
34814
35443
|
defaultAddress || {
|
|
34815
35444
|
name: "",
|
|
34816
35445
|
street1: "",
|
|
@@ -35012,7 +35641,7 @@ function SetupServiceModal({
|
|
|
35012
35641
|
errorMessage,
|
|
35013
35642
|
title = "Add New Service"
|
|
35014
35643
|
}) {
|
|
35015
|
-
const [formData, setFormData] =
|
|
35644
|
+
const [formData, setFormData] = React49.useState({
|
|
35016
35645
|
name: "",
|
|
35017
35646
|
description: "",
|
|
35018
35647
|
price: 0,
|
|
@@ -35022,7 +35651,7 @@ function SetupServiceModal({
|
|
|
35022
35651
|
initialInventory: void 0,
|
|
35023
35652
|
autoAcceptReferrals: false
|
|
35024
35653
|
});
|
|
35025
|
-
|
|
35654
|
+
React49.useEffect(() => {
|
|
35026
35655
|
if (!open) {
|
|
35027
35656
|
setFormData({
|
|
35028
35657
|
name: "",
|
|
@@ -36014,7 +36643,7 @@ function NewsletterForm({
|
|
|
36014
36643
|
isLoading = false,
|
|
36015
36644
|
className
|
|
36016
36645
|
}) {
|
|
36017
|
-
const [email, setEmail] =
|
|
36646
|
+
const [email, setEmail] = React49.useState("");
|
|
36018
36647
|
function handleSubmit(e) {
|
|
36019
36648
|
e.preventDefault();
|
|
36020
36649
|
if (email.trim()) {
|
|
@@ -36139,7 +36768,7 @@ function LegalLinks({
|
|
|
36139
36768
|
{
|
|
36140
36769
|
"data-slot": "site-footer-legal",
|
|
36141
36770
|
className: cn("flex flex-wrap items-center gap-x-4 gap-y-1", className),
|
|
36142
|
-
children: links.map((link, index) => /* @__PURE__ */ jsxs(
|
|
36771
|
+
children: links.map((link, index) => /* @__PURE__ */ jsxs(React49.Fragment, { children: [
|
|
36143
36772
|
index > 0 && /* @__PURE__ */ jsx(
|
|
36144
36773
|
"span",
|
|
36145
36774
|
{
|
|
@@ -36630,9 +37259,9 @@ function UserMenu({
|
|
|
36630
37259
|
menuItems = [],
|
|
36631
37260
|
className
|
|
36632
37261
|
}) {
|
|
36633
|
-
const [isOpen, setIsOpen] =
|
|
36634
|
-
const menuRef =
|
|
36635
|
-
|
|
37262
|
+
const [isOpen, setIsOpen] = React49.useState(false);
|
|
37263
|
+
const menuRef = React49.useRef(null);
|
|
37264
|
+
React49.useEffect(() => {
|
|
36636
37265
|
function handleClickOutside(event) {
|
|
36637
37266
|
if (menuRef.current && !menuRef.current.contains(event.target)) {
|
|
36638
37267
|
setIsOpen(false);
|
|
@@ -36928,7 +37557,7 @@ function SiteHeader({
|
|
|
36928
37557
|
userMenuItems,
|
|
36929
37558
|
className
|
|
36930
37559
|
}) {
|
|
36931
|
-
const [mobileMenuOpen, setMobileMenuOpen] =
|
|
37560
|
+
const [mobileMenuOpen, setMobileMenuOpen] = React49.useState(false);
|
|
36932
37561
|
const colorVariant = variant === "primary" || variant === "transparent" ? "light" : "dark";
|
|
36933
37562
|
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
36934
37563
|
/* @__PURE__ */ jsx("div", { "data-slot": "site-header-spacer", className: "h-16", "aria-hidden": "true" }),
|
|
@@ -37300,29 +37929,29 @@ function SSOConfigForm({
|
|
|
37300
37929
|
delete: deleteLabel = "Delete SSO",
|
|
37301
37930
|
cancel = "Cancel"
|
|
37302
37931
|
} = labels;
|
|
37303
|
-
const [clientDomain, setClientDomain] =
|
|
37932
|
+
const [clientDomain, setClientDomain] = React49.useState(
|
|
37304
37933
|
initialData.clientDomain ?? ""
|
|
37305
37934
|
);
|
|
37306
|
-
const [ssoLoginUrl, setSsoLoginUrl] =
|
|
37935
|
+
const [ssoLoginUrl, setSsoLoginUrl] = React49.useState(
|
|
37307
37936
|
initialData.ssoLoginUrl ?? ""
|
|
37308
37937
|
);
|
|
37309
|
-
const [ssoLogoutUrl, setSsoLogoutUrl] =
|
|
37938
|
+
const [ssoLogoutUrl, setSsoLogoutUrl] = React49.useState(
|
|
37310
37939
|
initialData.ssoLogoutUrl ?? ""
|
|
37311
37940
|
);
|
|
37312
|
-
const [forceReauth, setForceReauth] =
|
|
37941
|
+
const [forceReauth, setForceReauth] = React49.useState(
|
|
37313
37942
|
initialData.forceReauthentication ?? false
|
|
37314
37943
|
);
|
|
37315
|
-
const [idpSigns, setIdpSigns] =
|
|
37944
|
+
const [idpSigns, setIdpSigns] = React49.useState(
|
|
37316
37945
|
initialData.idpSignsRequest ?? false
|
|
37317
37946
|
);
|
|
37318
|
-
const [allowUnencrypted, setAllowUnencrypted] =
|
|
37947
|
+
const [allowUnencrypted, setAllowUnencrypted] = React49.useState(
|
|
37319
37948
|
initialData.allowUnencryptedAssertion ?? false
|
|
37320
37949
|
);
|
|
37321
|
-
const [certificateFile, setCertificateFile] =
|
|
37950
|
+
const [certificateFile, setCertificateFile] = React49.useState(
|
|
37322
37951
|
null
|
|
37323
37952
|
);
|
|
37324
|
-
const fileInputRef =
|
|
37325
|
-
const [errors, setErrors] =
|
|
37953
|
+
const fileInputRef = React49.useRef(null);
|
|
37954
|
+
const [errors, setErrors] = React49.useState({});
|
|
37326
37955
|
const validate = () => {
|
|
37327
37956
|
const newErrors = {};
|
|
37328
37957
|
if (!clientDomain.trim()) {
|
|
@@ -37680,7 +38309,7 @@ function StepIndicator({
|
|
|
37680
38309
|
const status = getStepStatus(index);
|
|
37681
38310
|
const isLast = index === steps.length - 1;
|
|
37682
38311
|
const clickable = isClickable(index);
|
|
37683
|
-
return /* @__PURE__ */ jsxs(
|
|
38312
|
+
return /* @__PURE__ */ jsxs(React49.Fragment, { children: [
|
|
37684
38313
|
/* @__PURE__ */ jsxs("div", { className: `flex flex-row items-center ${sizes.gap}`, children: [
|
|
37685
38314
|
circleButton(step, index, status, clickable),
|
|
37686
38315
|
stepLabel(step, status, false)
|
|
@@ -37897,10 +38526,10 @@ function TableOfContents({
|
|
|
37897
38526
|
scrollSpyOptions,
|
|
37898
38527
|
className
|
|
37899
38528
|
}) {
|
|
37900
|
-
const [discoveredItems, setDiscoveredItems] =
|
|
38529
|
+
const [discoveredItems, setDiscoveredItems] = React49.useState([]);
|
|
37901
38530
|
const flatItems = manualItems ?? discoveredItems;
|
|
37902
38531
|
const contentEl = contentRef?.current ?? null;
|
|
37903
|
-
|
|
38532
|
+
React49.useEffect(() => {
|
|
37904
38533
|
if (manualItems) return;
|
|
37905
38534
|
const container = contentEl ?? document;
|
|
37906
38535
|
let frameId = null;
|
|
@@ -37931,7 +38560,7 @@ function TableOfContents({
|
|
|
37931
38560
|
if (frameId !== null) cancelAnimationFrame(frameId);
|
|
37932
38561
|
};
|
|
37933
38562
|
}, [manualItems, selector, maxDepth, contentEl]);
|
|
37934
|
-
const ids =
|
|
38563
|
+
const ids = React49.useMemo(() => flatItems.map((i) => i.id), [flatItems]);
|
|
37935
38564
|
const isControlled = controlledActiveId !== void 0;
|
|
37936
38565
|
const { activeId: spyActiveId } = useScrollSpy({
|
|
37937
38566
|
ids,
|
|
@@ -37940,12 +38569,12 @@ function TableOfContents({
|
|
|
37940
38569
|
...scrollSpyOptions
|
|
37941
38570
|
});
|
|
37942
38571
|
const activeId = isControlled ? controlledActiveId : spyActiveId;
|
|
37943
|
-
|
|
38572
|
+
React49.useEffect(() => {
|
|
37944
38573
|
if (!isControlled && onActiveChange) {
|
|
37945
38574
|
onActiveChange(spyActiveId);
|
|
37946
38575
|
}
|
|
37947
38576
|
}, [spyActiveId, isControlled, onActiveChange]);
|
|
37948
|
-
const handleClick =
|
|
38577
|
+
const handleClick = React49.useCallback(
|
|
37949
38578
|
(e, id) => {
|
|
37950
38579
|
if (e.button !== 0 || e.metaKey || e.ctrlKey || e.shiftKey || e.altKey) {
|
|
37951
38580
|
return;
|
|
@@ -37966,7 +38595,7 @@ function TableOfContents({
|
|
|
37966
38595
|
},
|
|
37967
38596
|
[contentEl, scrollOffset, smooth]
|
|
37968
38597
|
);
|
|
37969
|
-
const tree =
|
|
38598
|
+
const tree = React49.useMemo(() => nestItems(flatItems), [flatItems]);
|
|
37970
38599
|
if (hideWhenEmpty && tree.length === 0) return null;
|
|
37971
38600
|
return /* @__PURE__ */ jsxs("nav", { "aria-label": "Table of contents", className: cn("text-sm", className), children: [
|
|
37972
38601
|
title && /* @__PURE__ */ jsx("p", { className: "text-foreground mb-3 font-semibold", children: title }),
|
|
@@ -38867,7 +39496,7 @@ function WebChartReportViewer({
|
|
|
38867
39496
|
dateFrom = "From",
|
|
38868
39497
|
dateTo = "To"
|
|
38869
39498
|
} = labels;
|
|
38870
|
-
const [modalOpen, setModalOpen] =
|
|
39499
|
+
const [modalOpen, setModalOpen] = React49.useState(false);
|
|
38871
39500
|
const handleReportClick = (report) => {
|
|
38872
39501
|
onReportSelect?.(report);
|
|
38873
39502
|
setModalOpen(true);
|
|
@@ -39105,7 +39734,7 @@ function ReportTimeRange({
|
|
|
39105
39734
|
],
|
|
39106
39735
|
className
|
|
39107
39736
|
}) {
|
|
39108
|
-
const [preset, setPreset] =
|
|
39737
|
+
const [preset, setPreset] = React49.useState("this-month");
|
|
39109
39738
|
const handlePresetChange = (value) => {
|
|
39110
39739
|
setPreset(value);
|
|
39111
39740
|
const now = /* @__PURE__ */ new Date();
|
|
@@ -39207,7 +39836,7 @@ function isValidUrl(url) {
|
|
|
39207
39836
|
}
|
|
39208
39837
|
}
|
|
39209
39838
|
}
|
|
39210
|
-
var WebsiteInput =
|
|
39839
|
+
var WebsiteInput = React49.forwardRef(
|
|
39211
39840
|
({
|
|
39212
39841
|
value = "",
|
|
39213
39842
|
onChange,
|
|
@@ -39218,7 +39847,7 @@ var WebsiteInput = React48.forwardRef(
|
|
|
39218
39847
|
error,
|
|
39219
39848
|
...props
|
|
39220
39849
|
}, ref) => {
|
|
39221
|
-
const [localError, setLocalError] =
|
|
39850
|
+
const [localError, setLocalError] = React49.useState();
|
|
39222
39851
|
const handleChange = (e) => {
|
|
39223
39852
|
onChange?.(e.target.value);
|
|
39224
39853
|
if (localError) {
|
|
@@ -39300,7 +39929,7 @@ function WebsiteInputGroup({
|
|
|
39300
39929
|
typeLabels,
|
|
39301
39930
|
className
|
|
39302
39931
|
}) {
|
|
39303
|
-
const websites =
|
|
39932
|
+
const websites = React49.useMemo(() => {
|
|
39304
39933
|
if (value.length >= minEntries) return value;
|
|
39305
39934
|
const padding = Array(minEntries - value.length).fill(null).map(() => ({ url: "", type: "website" }));
|
|
39306
39935
|
return [...value, ...padding];
|
|
@@ -39448,6 +40077,6 @@ function WebsiteInputGroup({
|
|
|
39448
40077
|
}
|
|
39449
40078
|
WebsiteInputGroup.displayName = "WebsiteInputGroup";
|
|
39450
40079
|
|
|
39451
|
-
export { AIChat, AIChatModal, AIChatTrigger, AILogoIcon, AIMessageDisplay, AITypingIndicator, AccessDeniedPage, ActionButton2 as ActionButton, ActionButtonsBar, ActiveFilters, AddContactModal, AddServiceCard, AdditionalFields, Address, AddressCard, AddressCompact, AddressDisplay, AddressForm, AddressInline, AppHeader, AppHeaderActions, AppHeaderBrand, AppHeaderDivider, AppHeaderIconButton, AppHeaderSearch, AppHeaderSection, AppHeaderTitle, AppHeaderUserMenu, AttachmentPicker, AttachmentPreview, AttachmentPreviewItem, AuthButtons, AuthDialog, BookAppointmentButton, BookingDialog, BusinessHours, BusinessHoursEditor, CSVColumnMapper, CSVFileUpload, CameraButton, CardSkeleton, CharacterCounter, CheckrIntegration, ChevronIcon, ClaimListingButton, ClaimProviderForm, CloseIcon, CommandPalette, CommandPaletteProvider, CommandPaletteTrigger, CompactCookieBanner, CompactFilterBar, CompactHeader, CompactHours, CompactProviderHeader, ConnectionStatusBadge, ConnectionStatusBar, ConnectionStatusOverlay, ConsentSwitch, ConversationHeader, ConversationListItem, ConversationListSkeleton, CookieConsentBanner, CopyrightText, CountBadge, CreateInvoiceModal, CreateReferralModal, DEFAULT_ERROR_CONFIGS, DEFAULT_LANGUAGES, DEFAULT_RADIUS_OPTIONS, DEFAULT_SOCIAL_PROVIDERS, DOTBadge, DashboardWidget, DashboardWidgetActions, DashboardWidgetDataCards, DashboardWidgetInfo, DashboardWidgetTable, DateRangeFilter, DateRangePicker, DateSeparator, DialogOverlay, DisclaimerText, DocumentDetectionOverlay, DocumentScanner, DragDropZone, DropZone, DropzoneOverlay, EditUserRoleModal, EmployeeForm, EmployeeProfileCard, EmployerContactCard, EmployerList, EmployerPricingCard, EmployerServiceModal, EmployerView, EmptyState, ErrorPage, FileManager, FilePreview, FloatingAIChat, FloatingInput, FooterLinkSection, SocialMediaLinks2 as FooterSocialLinks, HRISProviderSelector, HelpSupportPanel, HeroSearchBar, HoursSummary, InlineBookingForm, InventoryManager, InviteUserModal, InvoiceList, InvoicePaymentPage, InvoiceView, LanguageSelector, LanguageSelectorInline, LanguageSelectorNative, LegalLinks, LightboxModal, LoadMoreButton, LoadingBar, LoadingDots, LoadingOverlay, LoadingPage, LoadingSkeleton, MCPToolCallDisplay, MaintenancePage, MessageAvatar, MessageBubble, MessageComposer, MessageList, MessageStatusIcon, MessageThread, MessagingSplitView, MobileBackButton, MobileMenuButton, MobileMenuPanel, NavLinks, NewsletterForm, NotFoundPage, NotificationCenter, OfflinePage, OnboardingCompletion, OnboardingStepQuestion, OnboardingWizard, OpenStatusBadge, OrderCard, OrderConfirmation, OrderConfirmationWizard, OrderDetailSidebar, OrderList, OrderLookupForm, OrderSidebar, OrderSidebarTabs, PageHeader, PatientHeader, PaymentHistoryTable, PaymentMethodBank, PaymentMethodCard, PaymentMethodList, PendingClaimsTable, PermissionsEditor, ProductVersion, ProductVersionBadge, Breadcrumb2 as ProviderBreadcrumb, ProviderCard, ProviderCardGrid, ProviderCardSkeleton, ProviderDetailHeader, ProviderDetailHeaderSkeleton, ProviderLogo2 as ProviderLogo, ProviderOverview, ProviderSearchBar, ProviderSearchFilters, ProviderSelector, ProviderSettings, SocialMediaLinks as ProviderSocialLinks, ProviderUsersTable, QuickBookCard, QuickLinksCard, ReadReceiptIndicator, RecurringServiceAddCard, RecurringServiceCard, RecurringServiceGrid, RecurringServiceSetupModal, RefreshIcon, RejectionModal, ReportDashboard, ReportDatePicker, ReportLink, ReportTimeRange, ResourceLink, ResultsEntryCard, ResultsEntryForm, ResultsEntryModal, SSOConfigForm, ScheduleCalendar, SearchResultsMessage, SelectedServicesBadges, SendButton, SendIcon, 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, SkeletonMessage, SparklesIcon, SpinnerIcon2 as SpinnerIcon, StepIndicator, StripeBadge, StripeSecureBadge, SuggestedActions, TableOfContents, TimelineEventList, TimelineProgress, Toast, ToastContainer, ToastProvider, ToolStatusIcon, TypingIndicator, UpdateAvailableOverlay, UserMenu, VerifiedBadge2 as VerifiedBadge, WEBSITE_TYPES, WebChartReportViewer, WebcamModal, WebsiteInput, WebsiteInputGroup, bubbleVariants2 as bubbleVariants, calculateDateRange, countBadgeVariants, countChipVariants, create24HourSchedule, createDefaultSchedule, createWeekdaySchedule, defaultOrderTabs, formatAddressLines, formatAddressSingleLine, formatCityState, formatCityStateZip, formatDateLabel, formatFileSize2 as formatFileSize, formatLastSeen, generateAttachmentId, generateId, getConversationSubtitle, getConversationTitle, getDefaultPresets, getExtendedPresets, getFileType, getGoogleMapsSearchUrl, getGoogleMapsUrl, getToolIcon, groupMessagesByDate, headerVariants, isSameSenderGroup, isValidUrl, sendButtonVariants, useCamera, useCommandPalette, useConnectionStatus, useCookieConsent, useDocumentDetection, useDropzone, useFileUpload, useMessageScroll, useMessages, useReadReceipts, useSidebar, useToast, useTypingIndicator, validateFile, widgetVariants };
|
|
40080
|
+
export { AIChat, AIChatModal, AIChatTrigger, AILogoIcon, AIMessageDisplay, AIReconciliationPanel, AITypingIndicator, AccessDeniedPage, ActionButton2 as ActionButton, ActionButtonsBar, ActiveFilters, AddContactModal, AddServiceCard, AdditionalFields, Address, AddressCard, AddressCompact, AddressDisplay, AddressForm, AddressInline, AppHeader, AppHeaderActions, AppHeaderBrand, AppHeaderDivider, AppHeaderIconButton, AppHeaderSearch, AppHeaderSection, AppHeaderTitle, AppHeaderUserMenu, AttachmentPicker, AttachmentPreview, AttachmentPreviewItem, AuthButtons, AuthDialog, BookAppointmentButton, BookingDialog, BusinessHours, BusinessHoursEditor, CSVColumnMapper, CSVFileUpload, CameraButton, CardSkeleton, CharacterCounter, CheckrIntegration, ChevronIcon, ClaimListingButton, ClaimProviderForm, CloseIcon, CommandPalette, CommandPaletteProvider, CommandPaletteTrigger, CompactCookieBanner, CompactFilterBar, CompactHeader, CompactHours, CompactProviderHeader, ConnectionStatusBadge, ConnectionStatusBar, ConnectionStatusOverlay, ConsentSwitch, ConversationHeader, ConversationListItem, ConversationListSkeleton, CookieConsentBanner, CopyrightText, CountBadge, CreateInvoiceModal, CreateReferralModal, DEFAULT_ERROR_CONFIGS, DEFAULT_LANGUAGES, DEFAULT_RADIUS_OPTIONS, DEFAULT_SOCIAL_PROVIDERS, DOTBadge, DashboardWidget, DashboardWidgetActions, DashboardWidgetDataCards, DashboardWidgetInfo, DashboardWidgetTable, DateRangeFilter, DateRangePicker, DateSeparator, DialogOverlay, DisclaimerText, DocumentDetectionOverlay, DocumentScanner, DragDropZone, DropZone, DropzoneOverlay, EditUserRoleModal, EmployeeForm, EmployeeProfileCard, EmployerContactCard, EmployerList, EmployerPricingCard, EmployerServiceModal, EmployerView, EmptyState, ErrorPage, FileManager, FilePreview, FloatingAIChat, FloatingInput, FooterLinkSection, SocialMediaLinks2 as FooterSocialLinks, HRISProviderSelector, HelpSupportPanel, HeroSearchBar, HoursSummary, InlineBookingForm, InventoryManager, InviteUserModal, InvoiceList, InvoicePaymentPage, InvoiceView, LanguageSelector, LanguageSelectorInline, LanguageSelectorNative, LegalLinks, LightboxModal, LoadMoreButton, LoadingBar, LoadingDots, LoadingOverlay, LoadingPage, LoadingSkeleton, MCPToolCallDisplay, MaintenancePage, MessageAvatar, MessageBubble, MessageComposer, MessageList, MessageStatusIcon, MessageThread, MessagingSplitView, MobileBackButton, MobileMenuButton, MobileMenuPanel, NavLinks, NewsletterForm, NotFoundPage, NotificationCenter, OfflinePage, OnboardingCompletion, OnboardingStepQuestion, OnboardingWizard, OpenStatusBadge, OrderCard, OrderConfirmation, OrderConfirmationWizard, OrderDetailSidebar, OrderList, OrderLookupForm, OrderSidebar, OrderSidebarTabs, PageHeader, PatientHeader, PaymentHistoryTable, PaymentMethodBank, PaymentMethodCard, PaymentMethodList, PendingClaimsTable, PermissionsEditor, ProductVersion, ProductVersionBadge, Breadcrumb2 as ProviderBreadcrumb, ProviderCard, ProviderCardGrid, ProviderCardSkeleton, ProviderDetailHeader, ProviderDetailHeaderSkeleton, ProviderLogo2 as ProviderLogo, ProviderOverview, ProviderSearchBar, ProviderSearchFilters, ProviderSelector, ProviderSettings, SocialMediaLinks as ProviderSocialLinks, ProviderUsersTable, QuickBookCard, QuickLinksCard, ReadReceiptIndicator, RecurringServiceAddCard, RecurringServiceCard, RecurringServiceGrid, RecurringServiceSetupModal, RefreshIcon, RejectionModal, ReportDashboard, ReportDatePicker, ReportLink, ReportTimeRange, ResourceLink, ResultsEntryCard, ResultsEntryForm, ResultsEntryModal, SSOConfigForm, ScheduleCalendar, SearchResultsMessage, SelectedServicesBadges, SendButton, SendIcon, 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, SkeletonMessage, SparklesIcon, SpinnerIcon2 as SpinnerIcon, StepIndicator, StripeBadge, StripeSecureBadge, SuggestedActions, TableOfContents, TimelineEventList, TimelineProgress, Toast, ToastContainer, ToastProvider, ToolStatusIcon, TypingIndicator, UpdateAvailableOverlay, UserMenu, VerifiedBadge2 as VerifiedBadge, WEBSITE_TYPES, WebChartReportViewer, WebcamModal, WebsiteInput, WebsiteInputGroup, bubbleVariants2 as bubbleVariants, calculateDateRange, countBadgeVariants, countChipVariants, create24HourSchedule, createDefaultSchedule, createWeekdaySchedule, defaultOrderTabs, defaultReconciliationIsEqual, formatAddressLines, formatAddressSingleLine, formatCityState, formatCityStateZip, formatDateLabel, formatFileSize2 as formatFileSize, formatLastSeen, generateAttachmentId, generateId, getConversationSubtitle, getConversationTitle, getDefaultPresets, getExtendedPresets, getFileType, getGoogleMapsSearchUrl, getGoogleMapsUrl, getToolIcon, groupMessagesByDate, headerVariants, isSameSenderGroup, isValidUrl, panelVariants as reconciliationPanelVariants, sendButtonVariants, useCamera, useCommandPalette, useConnectionStatus, useCookieConsent, useDocumentDetection, useDropzone, useFileUpload, useMessageScroll, useMessages, useReadReceipts, useSidebar, useToast, useTypingIndicator, validateFile, widgetVariants };
|
|
39452
40081
|
//# sourceMappingURL=index.js.map
|
|
39453
40082
|
//# sourceMappingURL=index.js.map
|