@wealthx/shadcn 1.5.19 → 1.5.20

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (107) hide show
  1. package/.turbo/turbo-build.log +148 -148
  2. package/CHANGELOG.md +6 -0
  3. package/dist/{chunk-PUGQVHQL.mjs → chunk-2SDEURIQ.mjs} +2 -2
  4. package/dist/{chunk-STDCXTUU.mjs → chunk-3S4XQTAL.mjs} +2 -2
  5. package/dist/{chunk-ANERULZS.mjs → chunk-4UCRTTVL.mjs} +1 -1
  6. package/dist/{chunk-6LWCFAB4.mjs → chunk-57QES5LX.mjs} +1 -1
  7. package/dist/{chunk-KICT4VQL.mjs → chunk-5G2M45CA.mjs} +1 -1
  8. package/dist/{chunk-K3XP5ETH.mjs → chunk-66NM4AX2.mjs} +2 -2
  9. package/dist/{chunk-LWYMZHN7.mjs → chunk-6HTE24TP.mjs} +3 -3
  10. package/dist/{chunk-SSUK6C2K.mjs → chunk-6WRDXE7A.mjs} +1 -1
  11. package/dist/{chunk-RPOIXMHW.mjs → chunk-AADJ5IT6.mjs} +1 -1
  12. package/dist/{chunk-DKH35J4U.mjs → chunk-BWG7AX6X.mjs} +2 -2
  13. package/dist/{chunk-UBHBIWIA.mjs → chunk-DK55HZPN.mjs} +2 -2
  14. package/dist/{chunk-2UA4CPE5.mjs → chunk-DWJHPNFL.mjs} +1 -1
  15. package/dist/{chunk-WZFBLRNP.mjs → chunk-ETT5JAXF.mjs} +2 -2
  16. package/dist/{chunk-GDBM2GL5.mjs → chunk-F3MIRXRF.mjs} +1 -1
  17. package/dist/{chunk-G7YCLJ53.mjs → chunk-G6RCC2SF.mjs} +2 -2
  18. package/dist/{chunk-TUC2BNUR.mjs → chunk-IG7JBQZO.mjs} +2 -2
  19. package/dist/{chunk-GAXNO4JB.mjs → chunk-INGYBZGU.mjs} +1 -1
  20. package/dist/{chunk-UXWNUMQA.mjs → chunk-IT3QJF3D.mjs} +1 -1
  21. package/dist/{chunk-45V7X563.mjs → chunk-JGUC3KCA.mjs} +2 -2
  22. package/dist/{chunk-C4ESZLGT.mjs → chunk-K4GJTP6N.mjs} +1 -1
  23. package/dist/{chunk-USOVLDGS.mjs → chunk-K6VCC2MK.mjs} +13 -1
  24. package/dist/{chunk-5BU7TNB4.mjs → chunk-NEMWMXGL.mjs} +2 -2
  25. package/dist/{chunk-B3CTBLIY.mjs → chunk-NTIFG5A7.mjs} +2 -2
  26. package/dist/{chunk-33VT74R4.mjs → chunk-OFQFD2E2.mjs} +1 -1
  27. package/dist/{chunk-LI2CTS5O.mjs → chunk-OIETBBXQ.mjs} +4 -2
  28. package/dist/{chunk-XNX3XJ2F.mjs → chunk-QJ3RSZF4.mjs} +1 -1
  29. package/dist/{chunk-3NJPNSJG.mjs → chunk-RGHKARAK.mjs} +1 -1
  30. package/dist/{chunk-RFWP2325.mjs → chunk-RJHE3V4M.mjs} +1 -1
  31. package/dist/{chunk-SH5L5VG6.mjs → chunk-RVDBYV2B.mjs} +1 -1
  32. package/dist/{chunk-SU6TPDEU.mjs → chunk-SET6GFGL.mjs} +1 -1
  33. package/dist/{chunk-JJSA772M.mjs → chunk-WIDZVCH3.mjs} +1 -1
  34. package/dist/components/ui/add-column-modal.js +4 -2
  35. package/dist/components/ui/add-column-modal.mjs +2 -2
  36. package/dist/components/ui/add-lead-modal.js +13 -6
  37. package/dist/components/ui/add-lead-modal.mjs +4 -4
  38. package/dist/components/ui/ai-builder.js +4 -2
  39. package/dist/components/ui/ai-builder.mjs +2 -2
  40. package/dist/components/ui/ai-conversations.js +4 -2
  41. package/dist/components/ui/ai-conversations.mjs +2 -2
  42. package/dist/components/ui/appointment-action-dialogs.js +4 -2
  43. package/dist/components/ui/appointment-action-dialogs.mjs +2 -2
  44. package/dist/components/ui/appointment-availability-settings.js +10 -3
  45. package/dist/components/ui/appointment-availability-settings.mjs +3 -3
  46. package/dist/components/ui/appointment-book-dialog.js +10 -3
  47. package/dist/components/ui/appointment-book-dialog.mjs +3 -3
  48. package/dist/components/ui/appointment-detail-sheet.js +4 -2
  49. package/dist/components/ui/appointment-detail-sheet.mjs +3 -3
  50. package/dist/components/ui/appointment-upcoming-card.js +4 -2
  51. package/dist/components/ui/appointment-upcoming-card.mjs +2 -2
  52. package/dist/components/ui/backoffice-signup-steps.js +6 -1
  53. package/dist/components/ui/backoffice-signup-steps.mjs +3 -3
  54. package/dist/components/ui/bank-statement-generate-dialog.js +13 -6
  55. package/dist/components/ui/bank-statement-generate-dialog.mjs +4 -4
  56. package/dist/components/ui/bank-statement-pdf-viewer.js +4 -2
  57. package/dist/components/ui/bank-statement-pdf-viewer.mjs +2 -2
  58. package/dist/components/ui/category-edit-dialog.js +4 -2
  59. package/dist/components/ui/category-edit-dialog.mjs +2 -2
  60. package/dist/components/ui/contact-alert-dialog/index.js +22 -15
  61. package/dist/components/ui/contact-alert-dialog/index.mjs +3 -3
  62. package/dist/components/ui/create-contact-modal.js +25 -18
  63. package/dist/components/ui/create-contact-modal.mjs +3 -3
  64. package/dist/components/ui/csv-import-modal.js +4 -2
  65. package/dist/components/ui/csv-import-modal.mjs +2 -2
  66. package/dist/components/ui/dashboard-transactions-table.js +4 -2
  67. package/dist/components/ui/dashboard-transactions-table.mjs +2 -2
  68. package/dist/components/ui/data-table.js +13 -8
  69. package/dist/components/ui/data-table.mjs +3 -3
  70. package/dist/components/ui/dialog.js +4 -2
  71. package/dist/components/ui/dialog.mjs +1 -1
  72. package/dist/components/ui/document-checklist-template.js +6 -1
  73. package/dist/components/ui/document-checklist-template.mjs +2 -2
  74. package/dist/components/ui/file-preview-dialog.js +13 -6
  75. package/dist/components/ui/file-preview-dialog.mjs +3 -3
  76. package/dist/components/ui/frontend-signup-steps.js +4 -0
  77. package/dist/components/ui/frontend-signup-steps.mjs +3 -3
  78. package/dist/components/ui/opportunity-edit-modals.js +54 -47
  79. package/dist/components/ui/opportunity-edit-modals.mjs +3 -3
  80. package/dist/components/ui/opportunity-summary-tab.js +59 -52
  81. package/dist/components/ui/opportunity-summary-tab.mjs +4 -4
  82. package/dist/components/ui/pagination.js +6 -1
  83. package/dist/components/ui/pagination.mjs +2 -2
  84. package/dist/components/ui/pipeline-dialogs.js +24 -17
  85. package/dist/components/ui/pipeline-dialogs.mjs +3 -3
  86. package/dist/components/ui/property-report-dialog.js +4 -2
  87. package/dist/components/ui/property-report-dialog.mjs +2 -2
  88. package/dist/components/ui/resource-center/index.js +4 -2
  89. package/dist/components/ui/resource-center/index.mjs +2 -2
  90. package/dist/components/ui/review-alerts-dialog.js +4 -2
  91. package/dist/components/ui/review-alerts-dialog.mjs +2 -2
  92. package/dist/components/ui/savings-goal-modal.js +4 -2
  93. package/dist/components/ui/savings-goal-modal.mjs +1 -1
  94. package/dist/components/ui/select.js +24 -1
  95. package/dist/components/ui/select.mjs +3 -1
  96. package/dist/components/ui/share-details-dialog.js +4 -2
  97. package/dist/components/ui/share-details-dialog.mjs +2 -2
  98. package/dist/components/ui/signup-form-primitives.js +6 -1
  99. package/dist/components/ui/signup-form-primitives.mjs +2 -2
  100. package/dist/index.js +160 -145
  101. package/dist/index.mjs +32 -30
  102. package/dist/styles.css +1 -1
  103. package/package.json +1 -1
  104. package/src/components/index.tsx +2 -0
  105. package/src/components/ui/dialog.tsx +4 -2
  106. package/src/components/ui/select.tsx +34 -1
  107. package/src/styles/styles-css.ts +1 -1
package/dist/index.js CHANGED
@@ -381,6 +381,7 @@ __export(index_exports, {
381
381
  SelectGroup: () => SelectGroup,
382
382
  SelectItem: () => SelectItem,
383
383
  SelectLabel: () => SelectLabel,
384
+ SelectPortalProvider: () => SelectPortalProvider,
384
385
  SelectScrollDownButton: () => SelectScrollDownButton,
385
386
  SelectScrollUpButton: () => SelectScrollUpButton,
386
387
  SelectSeparator: () => SelectSeparator,
@@ -1092,7 +1093,7 @@ function DialogOverlay(_a) {
1092
1093
  __spreadValues({
1093
1094
  className: cn(
1094
1095
  // WealthX: foreground/50 scrim (matches Figma — foreground token at 50% opacity)
1095
- "fixed inset-0 z-50 bg-foreground/50 data-ending-style:animate-out data-ending-style:fade-out-0 data-ending-style:fill-mode-forwards data-open:animate-in data-open:fade-in-0",
1096
+ "fixed inset-0 z-50 bg-foreground/50 pointer-events-auto data-ending-style:animate-out data-ending-style:fade-out-0 data-ending-style:fill-mode-forwards data-open:animate-in data-open:fade-in-0",
1096
1097
  className
1097
1098
  ),
1098
1099
  "data-slot": "dialog-overlay"
@@ -1143,7 +1144,9 @@ function DialogContent(_a) {
1143
1144
  // max-w-[calc(100%-2rem)] acts as a viewport-edge guard on all sizes.
1144
1145
  // Fixed max-width is applied via inline style (sizeStyle) to avoid
1145
1146
  // Tailwind v4 class-scanning gaps with dynamic class lookups.
1146
- "fixed left-[50%] z-50 grid max-w-[calc(100%-2rem)] translate-x-[-50%] gap-4 border bg-background p-6 duration-200 outline-none data-ending-style:animate-out data-ending-style:fade-out-0 data-ending-style:zoom-out-95 data-ending-style:fill-mode-forwards data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95",
1147
+ // pointer-events-auto: Vaul Drawer (Radix DismissableLayer) sets body{pointer-events:none}
1148
+ // when open — dialog portals to body and must override that on its own element.
1149
+ "fixed left-[50%] z-50 grid max-w-[calc(100%-2rem)] translate-x-[-50%] gap-4 border bg-background p-6 duration-200 outline-none pointer-events-auto data-ending-style:animate-out data-ending-style:fade-out-0 data-ending-style:zoom-out-95 data-ending-style:fill-mode-forwards data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95",
1147
1150
  // "auto" → hug content (with min-width floor); fixed sizes → fill to max-width
1148
1151
  isAuto ? "w-auto" : "w-full",
1149
1152
  align === "center" ? "top-[50%] translate-y-[-50%]" : "top-4 translate-y-0",
@@ -5133,7 +5136,7 @@ function showAgentEvaluationToast(data) {
5133
5136
  }
5134
5137
 
5135
5138
  // src/components/ui/add-lead-modal.tsx
5136
- var React10 = __toESM(require("react"));
5139
+ var React11 = __toESM(require("react"));
5137
5140
  var import_lucide_react16 = require("lucide-react");
5138
5141
 
5139
5142
  // src/components/ui/checkbox.tsx
@@ -5375,9 +5378,19 @@ function TableCaption(_a) {
5375
5378
  var import_lucide_react15 = require("lucide-react");
5376
5379
 
5377
5380
  // src/components/ui/select.tsx
5381
+ var React10 = __toESM(require("react"));
5378
5382
  var import_lucide_react14 = require("lucide-react");
5379
5383
  var import_select = require("@base-ui/react/select");
5380
5384
  var import_jsx_runtime30 = require("react/jsx-runtime");
5385
+ var SelectPortalContext = React10.createContext(
5386
+ void 0
5387
+ );
5388
+ function SelectPortalProvider({
5389
+ container,
5390
+ children
5391
+ }) {
5392
+ return /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(SelectPortalContext.Provider, { value: container, children });
5393
+ }
5381
5394
  function Select(_a) {
5382
5395
  var props = __objRest(_a, []);
5383
5396
  return /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(import_select.Select.Root, __spreadValues({ "data-slot": "select" }, props));
@@ -5428,7 +5441,8 @@ function SelectContent(_a) {
5428
5441
  "style"
5429
5442
  ]);
5430
5443
  const themeVars = useThemeVars();
5431
- return /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(import_select.Select.Portal, { children: /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
5444
+ const portalContainer = React10.useContext(SelectPortalContext);
5445
+ return /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(import_select.Select.Portal, { container: portalContainer, children: /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
5432
5446
  import_select.Select.Positioner,
5433
5447
  {
5434
5448
  className: "z-[200]",
@@ -5822,8 +5836,8 @@ function AddLeadModal({
5822
5836
  onAdd,
5823
5837
  className
5824
5838
  }) {
5825
- const [selectedIds, setSelectedIds] = React10.useState(/* @__PURE__ */ new Set());
5826
- React10.useEffect(() => {
5839
+ const [selectedIds, setSelectedIds] = React11.useState(/* @__PURE__ */ new Set());
5840
+ React11.useEffect(() => {
5827
5841
  if (open) setSelectedIds(/* @__PURE__ */ new Set());
5828
5842
  }, [open]);
5829
5843
  const allPageSelected = contacts.length > 0 && contacts.every((c) => selectedIds.has(c.id));
@@ -5968,7 +5982,7 @@ function AddLeadModal({
5968
5982
  }
5969
5983
 
5970
5984
  // src/components/ui/ai-assistant-drawer.tsx
5971
- var React11 = __toESM(require("react"));
5985
+ var React12 = __toESM(require("react"));
5972
5986
  var import_lucide_react18 = require("lucide-react");
5973
5987
 
5974
5988
  // src/components/ui/sheet.tsx
@@ -6198,26 +6212,26 @@ function AiAssistantDrawer({
6198
6212
  className
6199
6213
  }) {
6200
6214
  var _a;
6201
- const [inputValue, setInputValue] = React11.useState("");
6202
- const messagesEndRef = React11.useRef(null);
6203
- const textareaRef = React11.useRef(null);
6215
+ const [inputValue, setInputValue] = React12.useState("");
6216
+ const messagesEndRef = React12.useRef(null);
6217
+ const textareaRef = React12.useRef(null);
6204
6218
  const suggestions = taskSuggestions != null ? taskSuggestions : DEFAULT_SUGGESTIONS;
6205
6219
  const hasMessages = messages.length > 0;
6206
6220
  const canSend = inputValue.trim().length > 0 && !isStreaming && !isLoading;
6207
- React11.useEffect(() => {
6221
+ React12.useEffect(() => {
6208
6222
  if (!messagesEndRef.current) return;
6209
6223
  messagesEndRef.current.scrollIntoView({
6210
6224
  behavior: "smooth",
6211
6225
  block: "nearest"
6212
6226
  });
6213
6227
  }, [messages.length]);
6214
- React11.useEffect(() => {
6228
+ React12.useEffect(() => {
6215
6229
  const el = textareaRef.current;
6216
6230
  if (!el) return;
6217
6231
  el.style.height = "auto";
6218
6232
  el.style.height = `${Math.min(el.scrollHeight, 120)}px`;
6219
6233
  }, [inputValue]);
6220
- const handleSend = React11.useCallback(() => {
6234
+ const handleSend = React12.useCallback(() => {
6221
6235
  const text = inputValue.trim();
6222
6236
  if (!text || !canSend) return;
6223
6237
  onSendMessage == null ? void 0 : onSendMessage(text);
@@ -7651,7 +7665,7 @@ function AlertDialogCancel(_a) {
7651
7665
  var import_react12 = __toESM(require("react"));
7652
7666
 
7653
7667
  // src/components/ui/date-picker.tsx
7654
- var React13 = __toESM(require("react"));
7668
+ var React14 = __toESM(require("react"));
7655
7669
  var import_date_fns2 = require("date-fns");
7656
7670
  var import_lucide_react21 = require("lucide-react");
7657
7671
  var import_jsx_runtime40 = require("react/jsx-runtime");
@@ -7664,7 +7678,7 @@ function DatePicker({
7664
7678
  className,
7665
7679
  calendarProps
7666
7680
  }) {
7667
- const [open, setOpen] = React13.useState(false);
7681
+ const [open, setOpen] = React14.useState(false);
7668
7682
  function handleDaySelect(day) {
7669
7683
  if (!day) {
7670
7684
  onChange == null ? void 0 : onChange(void 0);
@@ -8505,14 +8519,14 @@ function AppointmentRescheduleDialog({
8505
8519
  var import_react14 = __toESM(require("react"));
8506
8520
 
8507
8521
  // src/components/ui/form-primitives.tsx
8508
- var React17 = __toESM(require("react"));
8522
+ var React18 = __toESM(require("react"));
8509
8523
  var import_lucide_react24 = require("lucide-react");
8510
8524
 
8511
8525
  // src/components/ui/slider.tsx
8512
- var React16 = __toESM(require("react"));
8526
+ var React17 = __toESM(require("react"));
8513
8527
  var import_slider = require("@base-ui/react/slider");
8514
8528
  var import_jsx_runtime43 = require("react/jsx-runtime");
8515
- var Slider = React16.forwardRef(
8529
+ var Slider = React17.forwardRef(
8516
8530
  ({
8517
8531
  className,
8518
8532
  value,
@@ -8600,13 +8614,13 @@ function CurrencyInputWithSlider({
8600
8614
  onValueChange,
8601
8615
  className
8602
8616
  }) {
8603
- const [internalValue, setInternalValue] = React17.useState(defaultValue);
8617
+ const [internalValue, setInternalValue] = React18.useState(defaultValue);
8604
8618
  const numericValue = controlledValue !== void 0 ? controlledValue : internalValue;
8605
- const [inputText, setInputText] = React17.useState(
8619
+ const [inputText, setInputText] = React18.useState(
8606
8620
  formatNumberToCurrency(numericValue)
8607
8621
  );
8608
- const [isFocused, setIsFocused] = React17.useState(false);
8609
- React17.useEffect(() => {
8622
+ const [isFocused, setIsFocused] = React18.useState(false);
8623
+ React18.useEffect(() => {
8610
8624
  if (!isFocused) {
8611
8625
  setInputText(formatNumberToCurrency(numericValue));
8612
8626
  }
@@ -8676,7 +8690,7 @@ function ConcernScale({
8676
8690
  className
8677
8691
  }) {
8678
8692
  var _a;
8679
- const [internalValue, setInternalValue] = React17.useState(defaultValue);
8693
+ const [internalValue, setInternalValue] = React18.useState(defaultValue);
8680
8694
  const selected = controlledValue !== void 0 ? controlledValue : internalValue;
8681
8695
  const handleValueChange = (val) => {
8682
8696
  const n = val ? Number(val) : 0;
@@ -8762,13 +8776,13 @@ function AddressAutocomplete({
8762
8776
  onSelect,
8763
8777
  className
8764
8778
  }) {
8765
- const [internalValue, setInternalValue] = React17.useState("");
8779
+ const [internalValue, setInternalValue] = React18.useState("");
8766
8780
  const inputValue = controlledValue !== void 0 ? controlledValue : internalValue;
8767
- const [open, setOpen] = React17.useState(false);
8768
- const [activeIndex, setActiveIndex] = React17.useState(-1);
8769
- const containerRef = React17.useRef(null);
8770
- const listRef = React17.useRef(null);
8771
- const filtered = React17.useMemo(() => {
8781
+ const [open, setOpen] = React18.useState(false);
8782
+ const [activeIndex, setActiveIndex] = React18.useState(-1);
8783
+ const containerRef = React18.useRef(null);
8784
+ const listRef = React18.useRef(null);
8785
+ const filtered = React18.useMemo(() => {
8772
8786
  if (!inputValue.trim()) return suggestions.slice(0, 5);
8773
8787
  const q = inputValue.toLowerCase();
8774
8788
  return suggestions.filter((s) => s.label.toLowerCase().includes(q)).slice(0, 5);
@@ -8798,7 +8812,7 @@ function AddressAutocomplete({
8798
8812
  setOpen(false);
8799
8813
  }
8800
8814
  };
8801
- React17.useEffect(() => {
8815
+ React18.useEffect(() => {
8802
8816
  const handler = (e) => {
8803
8817
  if (containerRef.current && !containerRef.current.contains(e.target)) {
8804
8818
  setOpen(false);
@@ -8875,7 +8889,7 @@ function OwnershipSplit({
8875
8889
  onOwnersChange,
8876
8890
  className
8877
8891
  }) {
8878
- const [internalOwners, setInternalOwners] = React17.useState(DEFAULT_OWNERS);
8892
+ const [internalOwners, setInternalOwners] = React18.useState(DEFAULT_OWNERS);
8879
8893
  const owners = controlledOwners !== void 0 ? controlledOwners : internalOwners;
8880
8894
  const setOwners = (updated) => {
8881
8895
  if (controlledOwners === void 0) setInternalOwners(updated);
@@ -13505,7 +13519,7 @@ function Chip(_a) {
13505
13519
  }
13506
13520
 
13507
13521
  // src/components/ui/color-picker.tsx
13508
- var React29 = __toESM(require("react"));
13522
+ var React30 = __toESM(require("react"));
13509
13523
  var import_jsx_runtime68 = require("react/jsx-runtime");
13510
13524
  var COLOR_PICKER_PRESETS = [
13511
13525
  // Blues
@@ -13583,8 +13597,8 @@ function ColorPickerContent({
13583
13597
  onChange,
13584
13598
  presets = COLOR_PICKER_PRESETS
13585
13599
  }) {
13586
- const [hexInput, setHexInput] = React29.useState(value);
13587
- React29.useEffect(() => {
13600
+ const [hexInput, setHexInput] = React30.useState(value);
13601
+ React30.useEffect(() => {
13588
13602
  setHexInput(value);
13589
13603
  }, [value]);
13590
13604
  function handleHexInputChange(e) {
@@ -13671,10 +13685,10 @@ function ColorPicker({
13671
13685
  className
13672
13686
  }) {
13673
13687
  const isControlled = controlledValue !== void 0;
13674
- const [internalValue, setInternalValue] = React29.useState(defaultValue);
13688
+ const [internalValue, setInternalValue] = React30.useState(defaultValue);
13675
13689
  const color = isControlled ? controlledValue : internalValue;
13676
- const [open, setOpen] = React29.useState(false);
13677
- React29.useEffect(() => {
13690
+ const [open, setOpen] = React30.useState(false);
13691
+ React30.useEffect(() => {
13678
13692
  if (disabled) setOpen(false);
13679
13693
  }, [disabled]);
13680
13694
  function handleChange(newColor) {
@@ -14081,7 +14095,7 @@ function SelectedFile({
14081
14095
  }
14082
14096
 
14083
14097
  // src/components/ui/create-contact-modal.tsx
14084
- var React30 = __toESM(require("react"));
14098
+ var React31 = __toESM(require("react"));
14085
14099
  var import_jsx_runtime72 = require("react/jsx-runtime");
14086
14100
  function Field2({
14087
14101
  id,
@@ -14113,8 +14127,8 @@ function CreateContactModal({
14113
14127
  className
14114
14128
  }) {
14115
14129
  var _a, _b;
14116
- const [form, setForm] = React30.useState(EMPTY_FORM);
14117
- React30.useEffect(() => {
14130
+ const [form, setForm] = React31.useState(EMPTY_FORM);
14131
+ React31.useEffect(() => {
14118
14132
  if (open) setForm(EMPTY_FORM);
14119
14133
  }, [open]);
14120
14134
  function set(field, value) {
@@ -14270,7 +14284,7 @@ function DeleteContactComponent({
14270
14284
  }
14271
14285
 
14272
14286
  // src/components/ui/review-alerts-dialog.tsx
14273
- var React31 = __toESM(require("react"));
14287
+ var React32 = __toESM(require("react"));
14274
14288
  var import_jsx_runtime74 = require("react/jsx-runtime");
14275
14289
  var SEVERITY_CONFIG = {
14276
14290
  NEED_ACTION: { dot: "bg-destructive", text: "text-destructive" },
@@ -14284,10 +14298,10 @@ function ReviewAlertsDialog({
14284
14298
  onSave,
14285
14299
  className
14286
14300
  }) {
14287
- const [markDone, setMarkDone] = React31.useState(false);
14288
- const [snooze, setSnooze] = React31.useState(false);
14301
+ const [markDone, setMarkDone] = React32.useState(false);
14302
+ const [snooze, setSnooze] = React32.useState(false);
14289
14303
  const activeAlert = alerts.find((a) => !a.dismissed && !a.snoozedUntil);
14290
- React31.useEffect(() => {
14304
+ React32.useEffect(() => {
14291
14305
  if (open) {
14292
14306
  setMarkDone(false);
14293
14307
  setSnooze(false);
@@ -14376,7 +14390,7 @@ function ReviewAlertsDialog({
14376
14390
  }
14377
14391
 
14378
14392
  // src/components/ui/contact-alert-dialog/contact-alert-dialog.tsx
14379
- var React33 = __toESM(require("react"));
14393
+ var React34 = __toESM(require("react"));
14380
14394
  var import_lucide_react42 = require("lucide-react");
14381
14395
  var import_ui4 = require("@react-awesome-query-builder/ui");
14382
14396
 
@@ -14628,7 +14642,7 @@ function isTreeValid(tree) {
14628
14642
  }
14629
14643
 
14630
14644
  // src/components/ui/contact-alert-dialog/builder-ui.tsx
14631
- var React32 = __toESM(require("react"));
14645
+ var React33 = __toESM(require("react"));
14632
14646
  var import_lucide_react41 = require("lucide-react");
14633
14647
  var import_accordion2 = require("@base-ui/react/accordion");
14634
14648
  var import_ui3 = require("@react-awesome-query-builder/ui");
@@ -15120,11 +15134,11 @@ function CustomBuilderUI({
15120
15134
  const rootId = (_a = treeJson == null ? void 0 : treeJson.id) != null ? _a : "root";
15121
15135
  const conjunction = (_c = (_b = treeJson == null ? void 0 : treeJson.properties) == null ? void 0 : _b.conjunction) != null ? _c : "AND";
15122
15136
  const children = (_d = treeJson == null ? void 0 : treeJson.children1) != null ? _d : [];
15123
- const longestFieldLabel = React32.useMemo(
15137
+ const longestFieldLabel = React33.useMemo(
15124
15138
  () => longestOf(fields.map((f) => f.label)),
15125
15139
  [fields]
15126
15140
  );
15127
- const longestOperatorLabel = React32.useMemo(
15141
+ const longestOperatorLabel = React33.useMemo(
15128
15142
  () => longestOf(allOperatorLabels(fields)),
15129
15143
  [fields]
15130
15144
  );
@@ -15234,7 +15248,7 @@ function ContactAlertQueryBuilder({
15234
15248
  fields = ALERT_QUERY_FIELDS,
15235
15249
  className
15236
15250
  }) {
15237
- const defaultOpenItems = React33.useMemo(() => {
15251
+ const defaultOpenItems = React34.useMemo(() => {
15238
15252
  var _a;
15239
15253
  const json = import_ui4.Utils.getTree(value);
15240
15254
  return ((_a = json == null ? void 0 : json.children1) != null ? _a : []).map((c) => {
@@ -15242,7 +15256,7 @@ function ContactAlertQueryBuilder({
15242
15256
  return (_a2 = c.id) != null ? _a2 : "";
15243
15257
  }).filter(Boolean);
15244
15258
  }, []);
15245
- const renderBuilder = React33.useCallback(
15259
+ const renderBuilder = React34.useCallback(
15246
15260
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
15247
15261
  (props) => /* @__PURE__ */ (0, import_jsx_runtime77.jsx)(
15248
15262
  CustomBuilderUI,
@@ -15279,15 +15293,15 @@ function ContactAlertDialog({
15279
15293
  isLoading = false,
15280
15294
  className
15281
15295
  }) {
15282
- const [name, setName] = React33.useState(initialName);
15283
- const [severity, setSeverity] = React33.useState(initialSeverity);
15284
- const [tree, setTree] = React33.useState(
15296
+ const [name, setName] = React34.useState(initialName);
15297
+ const [severity, setSeverity] = React34.useState(initialSeverity);
15298
+ const [tree, setTree] = React34.useState(
15285
15299
  () => createAlertTree(initialQuery)
15286
15300
  );
15287
- const [shareAcrossCompany, setShareAcrossCompany] = React33.useState(
15301
+ const [shareAcrossCompany, setShareAcrossCompany] = React34.useState(
15288
15302
  initialShareAcrossCompany
15289
15303
  );
15290
- React33.useEffect(() => {
15304
+ React34.useEffect(() => {
15291
15305
  if (open) {
15292
15306
  setName(initialName);
15293
15307
  setSeverity(initialSeverity);
@@ -15295,7 +15309,7 @@ function ContactAlertDialog({
15295
15309
  setShareAcrossCompany(initialShareAcrossCompany);
15296
15310
  }
15297
15311
  }, [open]);
15298
- const hasValidRule = React33.useMemo(() => isTreeValid(tree), [tree]);
15312
+ const hasValidRule = React34.useMemo(() => isTreeValid(tree), [tree]);
15299
15313
  const canSave = name.trim().length > 0 && hasValidRule && !isLoading;
15300
15314
  function handleSave() {
15301
15315
  if (!canSave) return;
@@ -15395,7 +15409,7 @@ function ContactAlertDialog({
15395
15409
  }
15396
15410
 
15397
15411
  // src/components/ui/share-details-dialog.tsx
15398
- var React34 = __toESM(require("react"));
15412
+ var React35 = __toESM(require("react"));
15399
15413
  var import_lucide_react43 = require("lucide-react");
15400
15414
  var import_jsx_runtime78 = require("react/jsx-runtime");
15401
15415
  function Field3({
@@ -15421,7 +15435,7 @@ function ShareDetailsDialog({
15421
15435
  isSendingEmail = false,
15422
15436
  className
15423
15437
  }) {
15424
- const [copied, setCopied] = React34.useState(false);
15438
+ const [copied, setCopied] = React35.useState(false);
15425
15439
  function handleCopy() {
15426
15440
  navigator.clipboard.writeText(shareUrl).catch(() => {
15427
15441
  });
@@ -15481,9 +15495,9 @@ function EmailTemplateDialog({
15481
15495
  isSending = false,
15482
15496
  className
15483
15497
  }) {
15484
- const [subject, setSubject] = React34.useState(defaultSubject);
15485
- const [body, setBody] = React34.useState(defaultBody);
15486
- React34.useEffect(() => {
15498
+ const [subject, setSubject] = React35.useState(defaultSubject);
15499
+ const [body, setBody] = React35.useState(defaultBody);
15500
+ React35.useEffect(() => {
15487
15501
  if (open) {
15488
15502
  setSubject(defaultSubject);
15489
15503
  setBody(defaultBody);
@@ -15550,14 +15564,14 @@ function ShareContactDialog({
15550
15564
  isSending = false,
15551
15565
  className
15552
15566
  }) {
15553
- const [tab, setTab] = React34.useState("internal");
15554
- const [search, setSearch] = React34.useState("");
15555
- const [selectedId, setSelectedId] = React34.useState(null);
15556
- const [internalNotes, setInternalNotes] = React34.useState("");
15557
- const [firstName, setFirstName] = React34.useState("");
15558
- const [lastName, setLastName] = React34.useState("");
15559
- const [email, setEmail] = React34.useState("");
15560
- const [externalNotes, setExternalNotes] = React34.useState("");
15567
+ const [tab, setTab] = React35.useState("internal");
15568
+ const [search, setSearch] = React35.useState("");
15569
+ const [selectedId, setSelectedId] = React35.useState(null);
15570
+ const [internalNotes, setInternalNotes] = React35.useState("");
15571
+ const [firstName, setFirstName] = React35.useState("");
15572
+ const [lastName, setLastName] = React35.useState("");
15573
+ const [email, setEmail] = React35.useState("");
15574
+ const [externalNotes, setExternalNotes] = React35.useState("");
15561
15575
  function reset() {
15562
15576
  setTab("internal");
15563
15577
  setSearch("");
@@ -15733,7 +15747,7 @@ function ShareContactDialog({
15733
15747
  }
15734
15748
 
15735
15749
  // src/components/ui/file-preview-dialog.tsx
15736
- var React35 = __toESM(require("react"));
15750
+ var React36 = __toESM(require("react"));
15737
15751
  var import_lucide_react44 = require("lucide-react");
15738
15752
 
15739
15753
  // src/components/ui/progress.tsx
@@ -15851,8 +15865,8 @@ function FilePreviewDialog({
15851
15865
  staffSelector,
15852
15866
  className
15853
15867
  }) {
15854
- const [page, setPage] = React35.useState(0);
15855
- React35.useEffect(() => {
15868
+ const [page, setPage] = React36.useState(0);
15869
+ React36.useEffect(() => {
15856
15870
  setPage(0);
15857
15871
  }, [rows.length]);
15858
15872
  const totalPages = Math.ceil(rows.length / pageSize);
@@ -16017,7 +16031,7 @@ function FilePreviewDialog({
16017
16031
  }
16018
16032
 
16019
16033
  // src/components/ui/data-table.tsx
16020
- var React36 = __toESM(require("react"));
16034
+ var React37 = __toESM(require("react"));
16021
16035
  var import_react_table = require("@tanstack/react-table");
16022
16036
  var import_lucide_react45 = require("lucide-react");
16023
16037
  var import_jsx_runtime81 = require("react/jsx-runtime");
@@ -16256,20 +16270,20 @@ function DataTable({
16256
16270
  onColumnFiltersChange: onColumnFiltersChangeProp
16257
16271
  }) {
16258
16272
  var _a;
16259
- const [internalSorting, setInternalSorting] = React36.useState(
16273
+ const [internalSorting, setInternalSorting] = React37.useState(
16260
16274
  []
16261
16275
  );
16262
- const [internalColumnFilters, setInternalColumnFilters] = React36.useState([]);
16263
- const [internalPagination, setInternalPagination] = React36.useState({
16276
+ const [internalColumnFilters, setInternalColumnFilters] = React37.useState([]);
16277
+ const [internalPagination, setInternalPagination] = React37.useState({
16264
16278
  pageIndex: 0,
16265
16279
  pageSize: (_a = pageSizeOptions[0]) != null ? _a : 10
16266
16280
  });
16267
- const [columnVisibility, setColumnVisibility] = React36.useState({});
16268
- const [rowSelection, setRowSelection] = React36.useState({});
16281
+ const [columnVisibility, setColumnVisibility] = React37.useState({});
16282
+ const [rowSelection, setRowSelection] = React37.useState({});
16269
16283
  const sorting = controlledSorting != null ? controlledSorting : internalSorting;
16270
16284
  const columnFilters = controlledColumnFilters != null ? controlledColumnFilters : internalColumnFilters;
16271
16285
  const pagination = controlledPagination != null ? controlledPagination : internalPagination;
16272
- const resolvedColumns = React36.useMemo(() => {
16286
+ const resolvedColumns = React37.useMemo(() => {
16273
16287
  if (!enableRowSelection) return userColumns;
16274
16288
  return [getSelectionColumn(), ...userColumns];
16275
16289
  }, [userColumns, enableRowSelection]);
@@ -16359,7 +16373,7 @@ function DataTable({
16359
16373
  }
16360
16374
 
16361
16375
  // src/components/ui/applicant-document-checklist.tsx
16362
- var React37 = __toESM(require("react"));
16376
+ var React38 = __toESM(require("react"));
16363
16377
  var import_lucide_react46 = require("lucide-react");
16364
16378
  var import_jsx_runtime82 = require("react/jsx-runtime");
16365
16379
  function StatusIcon({ status }) {
@@ -16375,14 +16389,14 @@ function ApplicantDocumentChecklist({
16375
16389
  onRemove,
16376
16390
  className
16377
16391
  }) {
16378
- const inputRefs = React37.useRef({});
16392
+ const inputRefs = React38.useRef({});
16379
16393
  function handleFileChange(itemId, e) {
16380
16394
  var _a;
16381
16395
  const file = (_a = e.target.files) == null ? void 0 : _a[0];
16382
16396
  if (file) onUpload == null ? void 0 : onUpload(itemId, file);
16383
16397
  e.target.value = "";
16384
16398
  }
16385
- const { uploadedCount, totalRequired } = React37.useMemo(() => {
16399
+ const { uploadedCount, totalRequired } = React38.useMemo(() => {
16386
16400
  let uploaded = 0;
16387
16401
  let required = 0;
16388
16402
  for (const i of items) {
@@ -16972,7 +16986,7 @@ function ExpenseBarChart({
16972
16986
  }
16973
16987
 
16974
16988
  // src/components/ui/financial-cards.tsx
16975
- var React39 = __toESM(require("react"));
16989
+ var React40 = __toESM(require("react"));
16976
16990
  var import_lucide_react48 = require("lucide-react");
16977
16991
 
16978
16992
  // src/components/ui/financial-primitives.tsx
@@ -17135,7 +17149,7 @@ function PropertyCard({
17135
17149
  interestCharged,
17136
17150
  principlePaidOff
17137
17151
  }) {
17138
- const [expanded, setExpanded] = React39.useState(false);
17152
+ const [expanded, setExpanded] = React40.useState(false);
17139
17153
  return /* @__PURE__ */ (0, import_jsx_runtime87.jsxs)(
17140
17154
  "div",
17141
17155
  {
@@ -18610,7 +18624,7 @@ function IncomeBarChart({
18610
18624
  }
18611
18625
 
18612
18626
  // src/components/ui/input-otp.tsx
18613
- var React42 = __toESM(require("react"));
18627
+ var React43 = __toESM(require("react"));
18614
18628
  var import_input_otp = require("input-otp");
18615
18629
  var import_lucide_react50 = require("lucide-react");
18616
18630
  var import_jsx_runtime91 = require("react/jsx-runtime");
@@ -18657,7 +18671,7 @@ function InputOTPSlot(_a) {
18657
18671
  "className"
18658
18672
  ]);
18659
18673
  var _a2;
18660
- const inputOTPContext = React42.useContext(import_input_otp.OTPInputContext);
18674
+ const inputOTPContext = React43.useContext(import_input_otp.OTPInputContext);
18661
18675
  const { char, hasFakeCaret, isActive } = (_a2 = inputOTPContext.slots[index]) != null ? _a2 : {};
18662
18676
  return /* @__PURE__ */ (0, import_jsx_runtime91.jsxs)(
18663
18677
  "div",
@@ -18754,7 +18768,7 @@ function SelectableCard({
18754
18768
  }
18755
18769
 
18756
18770
  // src/components/ui/kanban-column.tsx
18757
- var React43 = __toESM(require("react"));
18771
+ var React44 = __toESM(require("react"));
18758
18772
  var import_lucide_react53 = require("lucide-react");
18759
18773
 
18760
18774
  // src/components/ui/opportunity-card.tsx
@@ -19511,7 +19525,7 @@ function KanbanColumn({
19511
19525
  const themeVars = useThemeVars();
19512
19526
  const accentColor = (_a = stage.accentColor) != null ? _a : "var(--color-border)";
19513
19527
  const hasMenu = onEditColumn || !isDefault && onDeleteColumn;
19514
- const [isDragOver, setIsDragOver] = React43.useState(false);
19528
+ const [isDragOver, setIsDragOver] = React44.useState(false);
19515
19529
  function handleDragOver(e) {
19516
19530
  if (!onCardDrop) return;
19517
19531
  e.preventDefault();
@@ -19687,15 +19701,15 @@ function KanbanColumn({
19687
19701
  }
19688
19702
 
19689
19703
  // src/components/ui/stepper.tsx
19690
- var React44 = __toESM(require("react"));
19704
+ var React45 = __toESM(require("react"));
19691
19705
  var import_lucide_react54 = require("lucide-react");
19692
19706
  var import_jsx_runtime97 = require("react/jsx-runtime");
19693
- var StepperContext = React44.createContext({
19707
+ var StepperContext = React45.createContext({
19694
19708
  activeStep: 0,
19695
19709
  orientation: "horizontal",
19696
19710
  totalSteps: 0
19697
19711
  });
19698
- var StepContext = React44.createContext({
19712
+ var StepContext = React45.createContext({
19699
19713
  index: 0,
19700
19714
  isActive: false,
19701
19715
  isCompleted: false,
@@ -19708,7 +19722,7 @@ function Stepper({
19708
19722
  className,
19709
19723
  children
19710
19724
  }) {
19711
- const totalSteps = React44.Children.count(children);
19725
+ const totalSteps = React45.Children.count(children);
19712
19726
  return /* @__PURE__ */ (0, import_jsx_runtime97.jsx)(StepperContext.Provider, { value: { activeStep, orientation, totalSteps }, children: /* @__PURE__ */ (0, import_jsx_runtime97.jsx)(
19713
19727
  "div",
19714
19728
  {
@@ -19718,9 +19732,9 @@ function Stepper({
19718
19732
  orientation === "horizontal" ? "flex w-full items-start" : "flex flex-col",
19719
19733
  className
19720
19734
  ),
19721
- children: React44.Children.map(
19735
+ children: React45.Children.map(
19722
19736
  children,
19723
- (step, index) => React44.isValidElement(step) ? React44.cloneElement(
19737
+ (step, index) => React45.isValidElement(step) ? React45.cloneElement(
19724
19738
  step,
19725
19739
  { _index: index }
19726
19740
  ) : step
@@ -19729,7 +19743,7 @@ function Stepper({
19729
19743
  ) });
19730
19744
  }
19731
19745
  function Step({ _index = 0, error, className, children }) {
19732
- const { activeStep, orientation, totalSteps } = React44.useContext(StepperContext);
19746
+ const { activeStep, orientation, totalSteps } = React45.useContext(StepperContext);
19733
19747
  const isActive = _index === activeStep;
19734
19748
  const isCompleted = _index < activeStep;
19735
19749
  const isFirst = _index === 0;
@@ -19757,8 +19771,8 @@ function Step({ _index = 0, error, className, children }) {
19757
19771
  );
19758
19772
  }
19759
19773
  function StepIndicator({ error, className }) {
19760
- const { orientation } = React44.useContext(StepperContext);
19761
- const { index, isActive, isCompleted, isFirst, isLast } = React44.useContext(StepContext);
19774
+ const { orientation } = React45.useContext(StepperContext);
19775
+ const { index, isActive, isCompleted, isFirst, isLast } = React45.useContext(StepContext);
19762
19776
  const filled = isActive || isCompleted;
19763
19777
  const circle = /* @__PURE__ */ (0, import_jsx_runtime97.jsx)(
19764
19778
  "div",
@@ -19830,8 +19844,8 @@ function StepLabel({
19830
19844
  error,
19831
19845
  className
19832
19846
  }) {
19833
- const { orientation } = React44.useContext(StepperContext);
19834
- const { isActive, isCompleted, isLast } = React44.useContext(StepContext);
19847
+ const { orientation } = React45.useContext(StepperContext);
19848
+ const { isActive, isCompleted, isLast } = React45.useContext(StepContext);
19835
19849
  const subtext = typeof error === "string" ? error : description;
19836
19850
  return /* @__PURE__ */ (0, import_jsx_runtime97.jsxs)(
19837
19851
  "div",
@@ -19871,7 +19885,7 @@ function StepLabel({
19871
19885
  );
19872
19886
  }
19873
19887
  function StepContent({ className, children }) {
19874
- const { isActive } = React44.useContext(StepContext);
19888
+ const { isActive } = React45.useContext(StepContext);
19875
19889
  if (!isActive) return null;
19876
19890
  return /* @__PURE__ */ (0, import_jsx_runtime97.jsx)("div", { "data-slot": "step-content", className: cn("pb-4 pt-2", className), children });
19877
19891
  }
@@ -19994,7 +20008,7 @@ function OnboardingLayout({
19994
20008
  }
19995
20009
 
19996
20010
  // src/components/ui/opportunity-edit-modals.tsx
19997
- var React45 = __toESM(require("react"));
20011
+ var React46 = __toESM(require("react"));
19998
20012
  var import_lucide_react55 = require("lucide-react");
19999
20013
 
20000
20014
  // src/lib/opportunity-constants.ts
@@ -20357,9 +20371,9 @@ function EditLoanScenarioModal({
20357
20371
  container,
20358
20372
  className
20359
20373
  }) {
20360
- const [form, setForm] = React45.useState(__spreadValues(__spreadValues({}, LOAN_SCENARIO_DEFAULTS), initialData));
20361
- const initialSnapshot = React45.useRef("");
20362
- React45.useEffect(() => {
20374
+ const [form, setForm] = React46.useState(__spreadValues(__spreadValues({}, LOAN_SCENARIO_DEFAULTS), initialData));
20375
+ const initialSnapshot = React46.useRef("");
20376
+ React46.useEffect(() => {
20363
20377
  if (open) {
20364
20378
  const data = __spreadValues(__spreadValues({}, LOAN_SCENARIO_DEFAULTS), initialData);
20365
20379
  setForm(data);
@@ -20619,11 +20633,11 @@ function EditAssetsModal({
20619
20633
  container,
20620
20634
  className
20621
20635
  }) {
20622
- const [items, setItems] = React45.useState(
20636
+ const [items, setItems] = React46.useState(
20623
20637
  initialItems.length > 0 ? initialItems : [makeDefaultAssetItem()]
20624
20638
  );
20625
- const initialSnapshot = React45.useRef("");
20626
- React45.useEffect(() => {
20639
+ const initialSnapshot = React46.useRef("");
20640
+ React46.useEffect(() => {
20627
20641
  if (open) {
20628
20642
  const data = initialItems.length > 0 ? initialItems : [makeDefaultAssetItem()];
20629
20643
  setItems(data);
@@ -20916,11 +20930,11 @@ function EditDebtsModal({
20916
20930
  container,
20917
20931
  className
20918
20932
  }) {
20919
- const [items, setItems] = React45.useState(
20933
+ const [items, setItems] = React46.useState(
20920
20934
  initialItems.length > 0 ? initialItems : [makeDefaultDebtItem()]
20921
20935
  );
20922
- const initialSnapshot = React45.useRef("");
20923
- React45.useEffect(() => {
20936
+ const initialSnapshot = React46.useRef("");
20937
+ React46.useEffect(() => {
20924
20938
  if (open) {
20925
20939
  const data = initialItems.length > 0 ? initialItems : [makeDefaultDebtItem()];
20926
20940
  setItems(data);
@@ -21242,9 +21256,9 @@ function EditAboutApplicantModal({
21242
21256
  container,
21243
21257
  className
21244
21258
  }) {
21245
- const [form, setForm] = React45.useState(__spreadValues(__spreadValues({}, ABOUT_APPLICANT_DEFAULTS), initialData));
21246
- const initialSnapshot = React45.useRef("");
21247
- React45.useEffect(() => {
21259
+ const [form, setForm] = React46.useState(__spreadValues(__spreadValues({}, ABOUT_APPLICANT_DEFAULTS), initialData));
21260
+ const initialSnapshot = React46.useRef("");
21261
+ React46.useEffect(() => {
21248
21262
  if (open) {
21249
21263
  const data = __spreadValues(__spreadValues({}, ABOUT_APPLICANT_DEFAULTS), initialData);
21250
21264
  setForm(data);
@@ -21516,7 +21530,7 @@ function EditIncomeModal({
21516
21530
  container,
21517
21531
  className
21518
21532
  }) {
21519
- const defaultItems = React45.useMemo(
21533
+ const defaultItems = React46.useMemo(
21520
21534
  () => {
21521
21535
  var _a;
21522
21536
  return ((_a = initialData == null ? void 0 : initialData.items) == null ? void 0 : _a.length) ? initialData.items : [makeDefaultIncomeItem()];
@@ -21524,9 +21538,9 @@ function EditIncomeModal({
21524
21538
  []
21525
21539
  // eslint-disable-line react-hooks/exhaustive-deps
21526
21540
  );
21527
- const [items, setItems] = React45.useState(defaultItems);
21528
- const initialSnapshot = React45.useRef("");
21529
- React45.useEffect(() => {
21541
+ const [items, setItems] = React46.useState(defaultItems);
21542
+ const initialSnapshot = React46.useRef("");
21543
+ React46.useEffect(() => {
21530
21544
  var _a;
21531
21545
  if (open) {
21532
21546
  const data = ((_a = initialData == null ? void 0 : initialData.items) == null ? void 0 : _a.length) ? initialData.items : [makeDefaultIncomeItem()];
@@ -21743,7 +21757,7 @@ function EditExpensesModal({
21743
21757
  container,
21744
21758
  className
21745
21759
  }) {
21746
- const defaultItems = React45.useMemo(
21760
+ const defaultItems = React46.useMemo(
21747
21761
  () => {
21748
21762
  var _a;
21749
21763
  return ((_a = initialData == null ? void 0 : initialData.items) == null ? void 0 : _a.length) ? initialData.items : [makeDefaultExpenseItem()];
@@ -21751,9 +21765,9 @@ function EditExpensesModal({
21751
21765
  []
21752
21766
  // eslint-disable-line react-hooks/exhaustive-deps
21753
21767
  );
21754
- const [items, setItems] = React45.useState(defaultItems);
21755
- const initialSnapshot = React45.useRef("");
21756
- React45.useEffect(() => {
21768
+ const [items, setItems] = React46.useState(defaultItems);
21769
+ const initialSnapshot = React46.useRef("");
21770
+ React46.useEffect(() => {
21757
21771
  var _a;
21758
21772
  if (open) {
21759
21773
  const data = ((_a = initialData == null ? void 0 : initialData.items) == null ? void 0 : _a.length) ? initialData.items : [makeDefaultExpenseItem()];
@@ -21886,7 +21900,7 @@ function EditExpensesModal({
21886
21900
  }
21887
21901
 
21888
21902
  // src/components/ui/opportunity-summary-tab.tsx
21889
- var React46 = __toESM(require("react"));
21903
+ var React47 = __toESM(require("react"));
21890
21904
  var import_react33 = require("react");
21891
21905
  var import_lucide_react56 = require("lucide-react");
21892
21906
  var import_jsx_runtime100 = require("react/jsx-runtime");
@@ -22273,7 +22287,7 @@ function OpportunitySummaryTab({
22273
22287
  var _a2;
22274
22288
  return (_a2 = docStatusOverrides[doc.id]) != null ? _a2 : doc.status;
22275
22289
  }
22276
- const checklistProgress = React46.useMemo(() => {
22290
+ const checklistProgress = React47.useMemo(() => {
22277
22291
  var _a2, _b2;
22278
22292
  const map = /* @__PURE__ */ new Map();
22279
22293
  for (const doc of documents) {
@@ -22291,7 +22305,7 @@ function OpportunitySummaryTab({
22291
22305
  }
22292
22306
  return Array.from(map.entries()).map(([name, data]) => __spreadValues({ name }, data));
22293
22307
  }, [documents, docStatusOverrides]);
22294
- const groupedDocs = React46.useMemo(() => {
22308
+ const groupedDocs = React47.useMemo(() => {
22295
22309
  var _a2;
22296
22310
  if (documents.length <= 5 || !documents.some((d) => d.checklistItem))
22297
22311
  return null;
@@ -22767,7 +22781,7 @@ function OpportunitySummaryTab({
22767
22781
  }
22768
22782
 
22769
22783
  // src/components/ui/sidebar-nav.tsx
22770
- var React47 = __toESM(require("react"));
22784
+ var React48 = __toESM(require("react"));
22771
22785
  var import_lucide_react57 = require("lucide-react");
22772
22786
  var import_accordion8 = require("@base-ui/react/accordion");
22773
22787
  var import_jsx_runtime101 = require("react/jsx-runtime");
@@ -22868,8 +22882,8 @@ function CollapsibleNavItem({
22868
22882
  var _a, _b;
22869
22883
  const Icon = item.icon;
22870
22884
  const hasActiveChild = (_b = (_a = item.subItems) == null ? void 0 : _a.some((sub) => sub.isActive)) != null ? _b : false;
22871
- const [open, setOpen] = React47.useState(hasActiveChild);
22872
- React47.useEffect(() => {
22885
+ const [open, setOpen] = React48.useState(hasActiveChild);
22886
+ React48.useEffect(() => {
22873
22887
  if (hasActiveChild) setOpen(true);
22874
22888
  }, [hasActiveChild]);
22875
22889
  if (collapsed) {
@@ -22978,13 +22992,13 @@ function SidebarNav({
22978
22992
  onCollapsedChange,
22979
22993
  className
22980
22994
  }) {
22981
- const [userMenuOpen, setUserMenuOpen] = React47.useState(false);
22982
- const navScrollRef = React47.useRef(null);
22983
- const expandedScrollRef = React47.useRef(0);
22984
- React47.useEffect(() => {
22995
+ const [userMenuOpen, setUserMenuOpen] = React48.useState(false);
22996
+ const navScrollRef = React48.useRef(null);
22997
+ const expandedScrollRef = React48.useRef(0);
22998
+ React48.useEffect(() => {
22985
22999
  if (collapsed) setUserMenuOpen(false);
22986
23000
  }, [collapsed]);
22987
- React47.useLayoutEffect(() => {
23001
+ React48.useLayoutEffect(() => {
22988
23002
  const nav = navScrollRef.current;
22989
23003
  if (!nav) return;
22990
23004
  if (!collapsed) {
@@ -23363,7 +23377,7 @@ function PipelineBoard({
23363
23377
  }
23364
23378
 
23365
23379
  // src/components/ui/pipeline-chart.tsx
23366
- var React48 = __toESM(require("react"));
23380
+ var React49 = __toESM(require("react"));
23367
23381
  var import_jsx_runtime104 = require("react/jsx-runtime");
23368
23382
  function formatValue(v) {
23369
23383
  return formatCurrencyAbbrev(v);
@@ -23381,7 +23395,7 @@ function PipelineChart({
23381
23395
  className
23382
23396
  }) {
23383
23397
  const themeVars = useThemeVars();
23384
- const [activeId, setActiveId] = React48.useState(null);
23398
+ const [activeId, setActiveId] = React49.useState(null);
23385
23399
  const nonEmpty = stages.filter((s) => s.value > 0);
23386
23400
  const total = nonEmpty.reduce((sum, s) => sum + s.value, 0);
23387
23401
  if (total === 0 || stages.length === 0) {
@@ -23474,7 +23488,7 @@ function PipelineChart({
23474
23488
  }
23475
23489
 
23476
23490
  // src/components/ui/pipeline-dialogs.tsx
23477
- var React49 = __toESM(require("react"));
23491
+ var React50 = __toESM(require("react"));
23478
23492
  var import_date_fns4 = require("date-fns");
23479
23493
  var import_jsx_runtime105 = require("react/jsx-runtime");
23480
23494
  function DeleteOpportunityDialog({
@@ -23588,10 +23602,10 @@ function PutOnHoldDialog({
23588
23602
  onSave,
23589
23603
  className
23590
23604
  }) {
23591
- const [duration, setDuration] = React49.useState("90");
23592
- const [customDate, setCustomDate] = React49.useState();
23593
- const today = React49.useMemo(() => (0, import_date_fns4.startOfDay)(/* @__PURE__ */ new Date()), []);
23594
- const resolvedDate = React49.useMemo(() => {
23605
+ const [duration, setDuration] = React50.useState("90");
23606
+ const [customDate, setCustomDate] = React50.useState();
23607
+ const today = React50.useMemo(() => (0, import_date_fns4.startOfDay)(/* @__PURE__ */ new Date()), []);
23608
+ const resolvedDate = React50.useMemo(() => {
23595
23609
  if (duration === "custom") return customDate;
23596
23610
  return (0, import_date_fns4.addDays)(today, parseInt(duration, 10));
23597
23611
  }, [duration, customDate, today]);
@@ -23600,7 +23614,7 @@ function PutOnHoldDialog({
23600
23614
  if (!resolvedDate) return;
23601
23615
  onSave((0, import_date_fns4.format)(resolvedDate, "yyyy-MM-dd"));
23602
23616
  }
23603
- React49.useEffect(() => {
23617
+ React50.useEffect(() => {
23604
23618
  if (open) {
23605
23619
  setDuration("90");
23606
23620
  setCustomDate(void 0);
@@ -26214,7 +26228,7 @@ function ApplicationMobileLayout({
26214
26228
  }
26215
26229
 
26216
26230
  // src/components/ui/income-work-details.tsx
26217
- var React59 = __toESM(require("react"));
26231
+ var React60 = __toESM(require("react"));
26218
26232
 
26219
26233
  // src/components/ui/loan-option-group.tsx
26220
26234
  var import_jsx_runtime126 = require("react/jsx-runtime");
@@ -26506,10 +26520,10 @@ function IncomeWorkDetails({
26506
26520
  onConnectMore,
26507
26521
  className
26508
26522
  }) {
26509
- const [openItems, setOpenItems] = React59.useState(
26523
+ const [openItems, setOpenItems] = React60.useState(
26510
26524
  sources.length > 0 ? [sources[0].id] : []
26511
26525
  );
26512
- React59.useEffect(() => {
26526
+ React60.useEffect(() => {
26513
26527
  setOpenItems((current) => {
26514
26528
  const currentSet = new Set(current);
26515
26529
  const newIds = sources.map((s) => s.id).filter((id) => !currentSet.has(id));
@@ -26680,7 +26694,7 @@ function LoanEntryShell({
26680
26694
  }
26681
26695
 
26682
26696
  // src/components/ui/loan-wizard-shell.tsx
26683
- var React60 = __toESM(require("react"));
26697
+ var React61 = __toESM(require("react"));
26684
26698
  var import_jsx_runtime130 = require("react/jsx-runtime");
26685
26699
  function LoanWizardShell({
26686
26700
  logo,
@@ -26720,7 +26734,7 @@ function LoanWizardShell({
26720
26734
  ] }),
26721
26735
  /* @__PURE__ */ (0, import_jsx_runtime130.jsxs)("div", { className: "flex shrink-0 items-center justify-between px-4 py-8 sm:px-8 sm:py-12 lg:px-[200px]", children: [
26722
26736
  /* @__PURE__ */ (0, import_jsx_runtime130.jsxs)("div", { className: "flex flex-col gap-2", children: [
26723
- /* @__PURE__ */ (0, import_jsx_runtime130.jsx)("h1", { className: "text-2xl font-bold text-foreground lg:text-[38px] lg:leading-tight", children: heroTitle.split("\n").map((line, i) => /* @__PURE__ */ (0, import_jsx_runtime130.jsxs)(React60.Fragment, { children: [
26737
+ /* @__PURE__ */ (0, import_jsx_runtime130.jsx)("h1", { className: "text-2xl font-bold text-foreground lg:text-[38px] lg:leading-tight", children: heroTitle.split("\n").map((line, i) => /* @__PURE__ */ (0, import_jsx_runtime130.jsxs)(React61.Fragment, { children: [
26724
26738
  line,
26725
26739
  i < heroTitle.split("\n").length - 1 && /* @__PURE__ */ (0, import_jsx_runtime130.jsx)("br", {})
26726
26740
  ] }, i)) }),
@@ -27579,6 +27593,7 @@ function EditorPlaceholder() {
27579
27593
  SelectGroup,
27580
27594
  SelectItem,
27581
27595
  SelectLabel,
27596
+ SelectPortalProvider,
27582
27597
  SelectScrollDownButton,
27583
27598
  SelectScrollUpButton,
27584
27599
  SelectSeparator,