@wealthx/shadcn 1.5.18 → 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 (121) hide show
  1. package/.turbo/turbo-build.log +148 -148
  2. package/CHANGELOG.md +12 -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-ZAXZBOWI.mjs → chunk-EHQ35FYA.mjs} +4 -1
  16. package/dist/{chunk-WZFBLRNP.mjs → chunk-ETT5JAXF.mjs} +2 -2
  17. package/dist/{chunk-L7IZ3YHI.mjs → chunk-F3MIRXRF.mjs} +2 -2
  18. package/dist/{chunk-G7YCLJ53.mjs → chunk-G6RCC2SF.mjs} +2 -2
  19. package/dist/{chunk-NCMV3LTP.mjs → chunk-H3PTREG6.mjs} +4 -1
  20. package/dist/{chunk-7II6QRCZ.mjs → chunk-H5NI6ZIU.mjs} +1 -1
  21. package/dist/{chunk-TUC2BNUR.mjs → chunk-IG7JBQZO.mjs} +2 -2
  22. package/dist/{chunk-GAXNO4JB.mjs → chunk-INGYBZGU.mjs} +1 -1
  23. package/dist/{chunk-UXWNUMQA.mjs → chunk-IT3QJF3D.mjs} +1 -1
  24. package/dist/{chunk-45V7X563.mjs → chunk-JGUC3KCA.mjs} +2 -2
  25. package/dist/{chunk-C4ESZLGT.mjs → chunk-K4GJTP6N.mjs} +1 -1
  26. package/dist/{chunk-USOVLDGS.mjs → chunk-K6VCC2MK.mjs} +13 -1
  27. package/dist/{chunk-5BU7TNB4.mjs → chunk-NEMWMXGL.mjs} +2 -2
  28. package/dist/{chunk-B3CTBLIY.mjs → chunk-NTIFG5A7.mjs} +2 -2
  29. package/dist/{chunk-33VT74R4.mjs → chunk-OFQFD2E2.mjs} +1 -1
  30. package/dist/{chunk-LI2CTS5O.mjs → chunk-OIETBBXQ.mjs} +4 -2
  31. package/dist/{chunk-TLLD5IU6.mjs → chunk-PSBQ4I3M.mjs} +1 -1
  32. package/dist/{chunk-XNX3XJ2F.mjs → chunk-QJ3RSZF4.mjs} +1 -1
  33. package/dist/{chunk-3NJPNSJG.mjs → chunk-RGHKARAK.mjs} +1 -1
  34. package/dist/{chunk-RFWP2325.mjs → chunk-RJHE3V4M.mjs} +1 -1
  35. package/dist/{chunk-SH5L5VG6.mjs → chunk-RVDBYV2B.mjs} +1 -1
  36. package/dist/{chunk-SU6TPDEU.mjs → chunk-SET6GFGL.mjs} +1 -1
  37. package/dist/{chunk-JJSA772M.mjs → chunk-WIDZVCH3.mjs} +1 -1
  38. package/dist/components/ui/add-column-modal.js +4 -2
  39. package/dist/components/ui/add-column-modal.mjs +2 -2
  40. package/dist/components/ui/add-lead-modal.js +13 -6
  41. package/dist/components/ui/add-lead-modal.mjs +4 -4
  42. package/dist/components/ui/ai-assistant-drawer.mjs +2 -2
  43. package/dist/components/ui/ai-builder.js +4 -2
  44. package/dist/components/ui/ai-builder.mjs +2 -2
  45. package/dist/components/ui/ai-conversations.js +4 -2
  46. package/dist/components/ui/ai-conversations.mjs +2 -2
  47. package/dist/components/ui/appointment-action-dialogs.js +4 -2
  48. package/dist/components/ui/appointment-action-dialogs.mjs +2 -2
  49. package/dist/components/ui/appointment-availability-settings.js +10 -3
  50. package/dist/components/ui/appointment-availability-settings.mjs +3 -3
  51. package/dist/components/ui/appointment-book-dialog.js +10 -3
  52. package/dist/components/ui/appointment-book-dialog.mjs +3 -3
  53. package/dist/components/ui/appointment-detail-sheet.js +4 -2
  54. package/dist/components/ui/appointment-detail-sheet.mjs +4 -4
  55. package/dist/components/ui/appointment-upcoming-card.js +4 -2
  56. package/dist/components/ui/appointment-upcoming-card.mjs +2 -2
  57. package/dist/components/ui/backoffice-signup-steps.js +6 -1
  58. package/dist/components/ui/backoffice-signup-steps.mjs +3 -3
  59. package/dist/components/ui/bank-statement-generate-dialog.js +13 -6
  60. package/dist/components/ui/bank-statement-generate-dialog.mjs +4 -4
  61. package/dist/components/ui/bank-statement-pdf-viewer.js +4 -2
  62. package/dist/components/ui/bank-statement-pdf-viewer.mjs +2 -2
  63. package/dist/components/ui/category-edit-dialog.js +4 -2
  64. package/dist/components/ui/category-edit-dialog.mjs +2 -2
  65. package/dist/components/ui/contact-alert-dialog/index.js +22 -15
  66. package/dist/components/ui/contact-alert-dialog/index.mjs +3 -3
  67. package/dist/components/ui/create-contact-modal.js +25 -18
  68. package/dist/components/ui/create-contact-modal.mjs +3 -3
  69. package/dist/components/ui/csv-import-modal.js +4 -2
  70. package/dist/components/ui/csv-import-modal.mjs +2 -2
  71. package/dist/components/ui/dashboard-transactions-table.js +4 -2
  72. package/dist/components/ui/dashboard-transactions-table.mjs +2 -2
  73. package/dist/components/ui/data-table.js +13 -8
  74. package/dist/components/ui/data-table.mjs +3 -3
  75. package/dist/components/ui/dialog.js +4 -2
  76. package/dist/components/ui/dialog.mjs +1 -1
  77. package/dist/components/ui/document-checklist-template.js +6 -1
  78. package/dist/components/ui/document-checklist-template.mjs +2 -2
  79. package/dist/components/ui/drawer.js +4 -1
  80. package/dist/components/ui/drawer.mjs +1 -1
  81. package/dist/components/ui/file-preview-dialog.js +13 -6
  82. package/dist/components/ui/file-preview-dialog.mjs +3 -3
  83. package/dist/components/ui/financial-drawers.mjs +2 -2
  84. package/dist/components/ui/frontend-signup-steps.js +4 -0
  85. package/dist/components/ui/frontend-signup-steps.mjs +3 -3
  86. package/dist/components/ui/opportunity-edit-modals.js +54 -47
  87. package/dist/components/ui/opportunity-edit-modals.mjs +3 -3
  88. package/dist/components/ui/opportunity-summary-tab.js +59 -52
  89. package/dist/components/ui/opportunity-summary-tab.mjs +4 -4
  90. package/dist/components/ui/pagination.js +6 -1
  91. package/dist/components/ui/pagination.mjs +2 -2
  92. package/dist/components/ui/pipeline-dialogs.js +24 -17
  93. package/dist/components/ui/pipeline-dialogs.mjs +3 -3
  94. package/dist/components/ui/property-report-dialog.js +4 -2
  95. package/dist/components/ui/property-report-dialog.mjs +2 -2
  96. package/dist/components/ui/resource-center/index.js +4 -2
  97. package/dist/components/ui/resource-center/index.mjs +2 -2
  98. package/dist/components/ui/review-alerts-dialog.js +4 -2
  99. package/dist/components/ui/review-alerts-dialog.mjs +2 -2
  100. package/dist/components/ui/savings-goal-modal.js +4 -2
  101. package/dist/components/ui/savings-goal-modal.mjs +1 -1
  102. package/dist/components/ui/scenario-drawer.mjs +1 -1
  103. package/dist/components/ui/select.js +24 -1
  104. package/dist/components/ui/select.mjs +3 -1
  105. package/dist/components/ui/share-details-dialog.js +4 -2
  106. package/dist/components/ui/share-details-dialog.mjs +2 -2
  107. package/dist/components/ui/sheet.js +4 -1
  108. package/dist/components/ui/sheet.mjs +1 -1
  109. package/dist/components/ui/signup-form-primitives.js +6 -1
  110. package/dist/components/ui/signup-form-primitives.mjs +2 -2
  111. package/dist/index.js +168 -147
  112. package/dist/index.mjs +36 -34
  113. package/dist/styles.css +1 -1
  114. package/package.json +1 -1
  115. package/src/components/index.tsx +2 -0
  116. package/src/components/ui/dialog.tsx +4 -2
  117. package/src/components/ui/drawer.tsx +4 -1
  118. package/src/components/ui/select.tsx +34 -1
  119. package/src/components/ui/sheet.tsx +4 -1
  120. package/src/styles/globals.css +6 -0
  121. 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
@@ -6075,7 +6089,10 @@ function SheetFooter(_a) {
6075
6089
  return /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(
6076
6090
  "div",
6077
6091
  __spreadValues({
6078
- className: cn("mt-auto flex flex-col gap-2 p-4", className),
6092
+ className: cn(
6093
+ "mt-auto flex flex-row justify-end gap-2 border-t border-border p-4",
6094
+ className
6095
+ ),
6079
6096
  "data-slot": "sheet-footer"
6080
6097
  }, props)
6081
6098
  );
@@ -6195,26 +6212,26 @@ function AiAssistantDrawer({
6195
6212
  className
6196
6213
  }) {
6197
6214
  var _a;
6198
- const [inputValue, setInputValue] = React11.useState("");
6199
- const messagesEndRef = React11.useRef(null);
6200
- const textareaRef = React11.useRef(null);
6215
+ const [inputValue, setInputValue] = React12.useState("");
6216
+ const messagesEndRef = React12.useRef(null);
6217
+ const textareaRef = React12.useRef(null);
6201
6218
  const suggestions = taskSuggestions != null ? taskSuggestions : DEFAULT_SUGGESTIONS;
6202
6219
  const hasMessages = messages.length > 0;
6203
6220
  const canSend = inputValue.trim().length > 0 && !isStreaming && !isLoading;
6204
- React11.useEffect(() => {
6221
+ React12.useEffect(() => {
6205
6222
  if (!messagesEndRef.current) return;
6206
6223
  messagesEndRef.current.scrollIntoView({
6207
6224
  behavior: "smooth",
6208
6225
  block: "nearest"
6209
6226
  });
6210
6227
  }, [messages.length]);
6211
- React11.useEffect(() => {
6228
+ React12.useEffect(() => {
6212
6229
  const el = textareaRef.current;
6213
6230
  if (!el) return;
6214
6231
  el.style.height = "auto";
6215
6232
  el.style.height = `${Math.min(el.scrollHeight, 120)}px`;
6216
6233
  }, [inputValue]);
6217
- const handleSend = React11.useCallback(() => {
6234
+ const handleSend = React12.useCallback(() => {
6218
6235
  const text = inputValue.trim();
6219
6236
  if (!text || !canSend) return;
6220
6237
  onSendMessage == null ? void 0 : onSendMessage(text);
@@ -7648,7 +7665,7 @@ function AlertDialogCancel(_a) {
7648
7665
  var import_react12 = __toESM(require("react"));
7649
7666
 
7650
7667
  // src/components/ui/date-picker.tsx
7651
- var React13 = __toESM(require("react"));
7668
+ var React14 = __toESM(require("react"));
7652
7669
  var import_date_fns2 = require("date-fns");
7653
7670
  var import_lucide_react21 = require("lucide-react");
7654
7671
  var import_jsx_runtime40 = require("react/jsx-runtime");
@@ -7661,7 +7678,7 @@ function DatePicker({
7661
7678
  className,
7662
7679
  calendarProps
7663
7680
  }) {
7664
- const [open, setOpen] = React13.useState(false);
7681
+ const [open, setOpen] = React14.useState(false);
7665
7682
  function handleDaySelect(day) {
7666
7683
  if (!day) {
7667
7684
  onChange == null ? void 0 : onChange(void 0);
@@ -8502,14 +8519,14 @@ function AppointmentRescheduleDialog({
8502
8519
  var import_react14 = __toESM(require("react"));
8503
8520
 
8504
8521
  // src/components/ui/form-primitives.tsx
8505
- var React17 = __toESM(require("react"));
8522
+ var React18 = __toESM(require("react"));
8506
8523
  var import_lucide_react24 = require("lucide-react");
8507
8524
 
8508
8525
  // src/components/ui/slider.tsx
8509
- var React16 = __toESM(require("react"));
8526
+ var React17 = __toESM(require("react"));
8510
8527
  var import_slider = require("@base-ui/react/slider");
8511
8528
  var import_jsx_runtime43 = require("react/jsx-runtime");
8512
- var Slider = React16.forwardRef(
8529
+ var Slider = React17.forwardRef(
8513
8530
  ({
8514
8531
  className,
8515
8532
  value,
@@ -8597,13 +8614,13 @@ function CurrencyInputWithSlider({
8597
8614
  onValueChange,
8598
8615
  className
8599
8616
  }) {
8600
- const [internalValue, setInternalValue] = React17.useState(defaultValue);
8617
+ const [internalValue, setInternalValue] = React18.useState(defaultValue);
8601
8618
  const numericValue = controlledValue !== void 0 ? controlledValue : internalValue;
8602
- const [inputText, setInputText] = React17.useState(
8619
+ const [inputText, setInputText] = React18.useState(
8603
8620
  formatNumberToCurrency(numericValue)
8604
8621
  );
8605
- const [isFocused, setIsFocused] = React17.useState(false);
8606
- React17.useEffect(() => {
8622
+ const [isFocused, setIsFocused] = React18.useState(false);
8623
+ React18.useEffect(() => {
8607
8624
  if (!isFocused) {
8608
8625
  setInputText(formatNumberToCurrency(numericValue));
8609
8626
  }
@@ -8673,7 +8690,7 @@ function ConcernScale({
8673
8690
  className
8674
8691
  }) {
8675
8692
  var _a;
8676
- const [internalValue, setInternalValue] = React17.useState(defaultValue);
8693
+ const [internalValue, setInternalValue] = React18.useState(defaultValue);
8677
8694
  const selected = controlledValue !== void 0 ? controlledValue : internalValue;
8678
8695
  const handleValueChange = (val) => {
8679
8696
  const n = val ? Number(val) : 0;
@@ -8759,13 +8776,13 @@ function AddressAutocomplete({
8759
8776
  onSelect,
8760
8777
  className
8761
8778
  }) {
8762
- const [internalValue, setInternalValue] = React17.useState("");
8779
+ const [internalValue, setInternalValue] = React18.useState("");
8763
8780
  const inputValue = controlledValue !== void 0 ? controlledValue : internalValue;
8764
- const [open, setOpen] = React17.useState(false);
8765
- const [activeIndex, setActiveIndex] = React17.useState(-1);
8766
- const containerRef = React17.useRef(null);
8767
- const listRef = React17.useRef(null);
8768
- 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(() => {
8769
8786
  if (!inputValue.trim()) return suggestions.slice(0, 5);
8770
8787
  const q = inputValue.toLowerCase();
8771
8788
  return suggestions.filter((s) => s.label.toLowerCase().includes(q)).slice(0, 5);
@@ -8795,7 +8812,7 @@ function AddressAutocomplete({
8795
8812
  setOpen(false);
8796
8813
  }
8797
8814
  };
8798
- React17.useEffect(() => {
8815
+ React18.useEffect(() => {
8799
8816
  const handler = (e) => {
8800
8817
  if (containerRef.current && !containerRef.current.contains(e.target)) {
8801
8818
  setOpen(false);
@@ -8872,7 +8889,7 @@ function OwnershipSplit({
8872
8889
  onOwnersChange,
8873
8890
  className
8874
8891
  }) {
8875
- const [internalOwners, setInternalOwners] = React17.useState(DEFAULT_OWNERS);
8892
+ const [internalOwners, setInternalOwners] = React18.useState(DEFAULT_OWNERS);
8876
8893
  const owners = controlledOwners !== void 0 ? controlledOwners : internalOwners;
8877
8894
  const setOwners = (updated) => {
8878
8895
  if (controlledOwners === void 0) setInternalOwners(updated);
@@ -13502,7 +13519,7 @@ function Chip(_a) {
13502
13519
  }
13503
13520
 
13504
13521
  // src/components/ui/color-picker.tsx
13505
- var React29 = __toESM(require("react"));
13522
+ var React30 = __toESM(require("react"));
13506
13523
  var import_jsx_runtime68 = require("react/jsx-runtime");
13507
13524
  var COLOR_PICKER_PRESETS = [
13508
13525
  // Blues
@@ -13580,8 +13597,8 @@ function ColorPickerContent({
13580
13597
  onChange,
13581
13598
  presets = COLOR_PICKER_PRESETS
13582
13599
  }) {
13583
- const [hexInput, setHexInput] = React29.useState(value);
13584
- React29.useEffect(() => {
13600
+ const [hexInput, setHexInput] = React30.useState(value);
13601
+ React30.useEffect(() => {
13585
13602
  setHexInput(value);
13586
13603
  }, [value]);
13587
13604
  function handleHexInputChange(e) {
@@ -13668,10 +13685,10 @@ function ColorPicker({
13668
13685
  className
13669
13686
  }) {
13670
13687
  const isControlled = controlledValue !== void 0;
13671
- const [internalValue, setInternalValue] = React29.useState(defaultValue);
13688
+ const [internalValue, setInternalValue] = React30.useState(defaultValue);
13672
13689
  const color = isControlled ? controlledValue : internalValue;
13673
- const [open, setOpen] = React29.useState(false);
13674
- React29.useEffect(() => {
13690
+ const [open, setOpen] = React30.useState(false);
13691
+ React30.useEffect(() => {
13675
13692
  if (disabled) setOpen(false);
13676
13693
  }, [disabled]);
13677
13694
  function handleChange(newColor) {
@@ -14078,7 +14095,7 @@ function SelectedFile({
14078
14095
  }
14079
14096
 
14080
14097
  // src/components/ui/create-contact-modal.tsx
14081
- var React30 = __toESM(require("react"));
14098
+ var React31 = __toESM(require("react"));
14082
14099
  var import_jsx_runtime72 = require("react/jsx-runtime");
14083
14100
  function Field2({
14084
14101
  id,
@@ -14110,8 +14127,8 @@ function CreateContactModal({
14110
14127
  className
14111
14128
  }) {
14112
14129
  var _a, _b;
14113
- const [form, setForm] = React30.useState(EMPTY_FORM);
14114
- React30.useEffect(() => {
14130
+ const [form, setForm] = React31.useState(EMPTY_FORM);
14131
+ React31.useEffect(() => {
14115
14132
  if (open) setForm(EMPTY_FORM);
14116
14133
  }, [open]);
14117
14134
  function set(field, value) {
@@ -14267,7 +14284,7 @@ function DeleteContactComponent({
14267
14284
  }
14268
14285
 
14269
14286
  // src/components/ui/review-alerts-dialog.tsx
14270
- var React31 = __toESM(require("react"));
14287
+ var React32 = __toESM(require("react"));
14271
14288
  var import_jsx_runtime74 = require("react/jsx-runtime");
14272
14289
  var SEVERITY_CONFIG = {
14273
14290
  NEED_ACTION: { dot: "bg-destructive", text: "text-destructive" },
@@ -14281,10 +14298,10 @@ function ReviewAlertsDialog({
14281
14298
  onSave,
14282
14299
  className
14283
14300
  }) {
14284
- const [markDone, setMarkDone] = React31.useState(false);
14285
- const [snooze, setSnooze] = React31.useState(false);
14301
+ const [markDone, setMarkDone] = React32.useState(false);
14302
+ const [snooze, setSnooze] = React32.useState(false);
14286
14303
  const activeAlert = alerts.find((a) => !a.dismissed && !a.snoozedUntil);
14287
- React31.useEffect(() => {
14304
+ React32.useEffect(() => {
14288
14305
  if (open) {
14289
14306
  setMarkDone(false);
14290
14307
  setSnooze(false);
@@ -14373,7 +14390,7 @@ function ReviewAlertsDialog({
14373
14390
  }
14374
14391
 
14375
14392
  // src/components/ui/contact-alert-dialog/contact-alert-dialog.tsx
14376
- var React33 = __toESM(require("react"));
14393
+ var React34 = __toESM(require("react"));
14377
14394
  var import_lucide_react42 = require("lucide-react");
14378
14395
  var import_ui4 = require("@react-awesome-query-builder/ui");
14379
14396
 
@@ -14625,7 +14642,7 @@ function isTreeValid(tree) {
14625
14642
  }
14626
14643
 
14627
14644
  // src/components/ui/contact-alert-dialog/builder-ui.tsx
14628
- var React32 = __toESM(require("react"));
14645
+ var React33 = __toESM(require("react"));
14629
14646
  var import_lucide_react41 = require("lucide-react");
14630
14647
  var import_accordion2 = require("@base-ui/react/accordion");
14631
14648
  var import_ui3 = require("@react-awesome-query-builder/ui");
@@ -15117,11 +15134,11 @@ function CustomBuilderUI({
15117
15134
  const rootId = (_a = treeJson == null ? void 0 : treeJson.id) != null ? _a : "root";
15118
15135
  const conjunction = (_c = (_b = treeJson == null ? void 0 : treeJson.properties) == null ? void 0 : _b.conjunction) != null ? _c : "AND";
15119
15136
  const children = (_d = treeJson == null ? void 0 : treeJson.children1) != null ? _d : [];
15120
- const longestFieldLabel = React32.useMemo(
15137
+ const longestFieldLabel = React33.useMemo(
15121
15138
  () => longestOf(fields.map((f) => f.label)),
15122
15139
  [fields]
15123
15140
  );
15124
- const longestOperatorLabel = React32.useMemo(
15141
+ const longestOperatorLabel = React33.useMemo(
15125
15142
  () => longestOf(allOperatorLabels(fields)),
15126
15143
  [fields]
15127
15144
  );
@@ -15231,7 +15248,7 @@ function ContactAlertQueryBuilder({
15231
15248
  fields = ALERT_QUERY_FIELDS,
15232
15249
  className
15233
15250
  }) {
15234
- const defaultOpenItems = React33.useMemo(() => {
15251
+ const defaultOpenItems = React34.useMemo(() => {
15235
15252
  var _a;
15236
15253
  const json = import_ui4.Utils.getTree(value);
15237
15254
  return ((_a = json == null ? void 0 : json.children1) != null ? _a : []).map((c) => {
@@ -15239,7 +15256,7 @@ function ContactAlertQueryBuilder({
15239
15256
  return (_a2 = c.id) != null ? _a2 : "";
15240
15257
  }).filter(Boolean);
15241
15258
  }, []);
15242
- const renderBuilder = React33.useCallback(
15259
+ const renderBuilder = React34.useCallback(
15243
15260
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
15244
15261
  (props) => /* @__PURE__ */ (0, import_jsx_runtime77.jsx)(
15245
15262
  CustomBuilderUI,
@@ -15276,15 +15293,15 @@ function ContactAlertDialog({
15276
15293
  isLoading = false,
15277
15294
  className
15278
15295
  }) {
15279
- const [name, setName] = React33.useState(initialName);
15280
- const [severity, setSeverity] = React33.useState(initialSeverity);
15281
- 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(
15282
15299
  () => createAlertTree(initialQuery)
15283
15300
  );
15284
- const [shareAcrossCompany, setShareAcrossCompany] = React33.useState(
15301
+ const [shareAcrossCompany, setShareAcrossCompany] = React34.useState(
15285
15302
  initialShareAcrossCompany
15286
15303
  );
15287
- React33.useEffect(() => {
15304
+ React34.useEffect(() => {
15288
15305
  if (open) {
15289
15306
  setName(initialName);
15290
15307
  setSeverity(initialSeverity);
@@ -15292,7 +15309,7 @@ function ContactAlertDialog({
15292
15309
  setShareAcrossCompany(initialShareAcrossCompany);
15293
15310
  }
15294
15311
  }, [open]);
15295
- const hasValidRule = React33.useMemo(() => isTreeValid(tree), [tree]);
15312
+ const hasValidRule = React34.useMemo(() => isTreeValid(tree), [tree]);
15296
15313
  const canSave = name.trim().length > 0 && hasValidRule && !isLoading;
15297
15314
  function handleSave() {
15298
15315
  if (!canSave) return;
@@ -15392,7 +15409,7 @@ function ContactAlertDialog({
15392
15409
  }
15393
15410
 
15394
15411
  // src/components/ui/share-details-dialog.tsx
15395
- var React34 = __toESM(require("react"));
15412
+ var React35 = __toESM(require("react"));
15396
15413
  var import_lucide_react43 = require("lucide-react");
15397
15414
  var import_jsx_runtime78 = require("react/jsx-runtime");
15398
15415
  function Field3({
@@ -15418,7 +15435,7 @@ function ShareDetailsDialog({
15418
15435
  isSendingEmail = false,
15419
15436
  className
15420
15437
  }) {
15421
- const [copied, setCopied] = React34.useState(false);
15438
+ const [copied, setCopied] = React35.useState(false);
15422
15439
  function handleCopy() {
15423
15440
  navigator.clipboard.writeText(shareUrl).catch(() => {
15424
15441
  });
@@ -15478,9 +15495,9 @@ function EmailTemplateDialog({
15478
15495
  isSending = false,
15479
15496
  className
15480
15497
  }) {
15481
- const [subject, setSubject] = React34.useState(defaultSubject);
15482
- const [body, setBody] = React34.useState(defaultBody);
15483
- React34.useEffect(() => {
15498
+ const [subject, setSubject] = React35.useState(defaultSubject);
15499
+ const [body, setBody] = React35.useState(defaultBody);
15500
+ React35.useEffect(() => {
15484
15501
  if (open) {
15485
15502
  setSubject(defaultSubject);
15486
15503
  setBody(defaultBody);
@@ -15547,14 +15564,14 @@ function ShareContactDialog({
15547
15564
  isSending = false,
15548
15565
  className
15549
15566
  }) {
15550
- const [tab, setTab] = React34.useState("internal");
15551
- const [search, setSearch] = React34.useState("");
15552
- const [selectedId, setSelectedId] = React34.useState(null);
15553
- const [internalNotes, setInternalNotes] = React34.useState("");
15554
- const [firstName, setFirstName] = React34.useState("");
15555
- const [lastName, setLastName] = React34.useState("");
15556
- const [email, setEmail] = React34.useState("");
15557
- 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("");
15558
15575
  function reset() {
15559
15576
  setTab("internal");
15560
15577
  setSearch("");
@@ -15730,7 +15747,7 @@ function ShareContactDialog({
15730
15747
  }
15731
15748
 
15732
15749
  // src/components/ui/file-preview-dialog.tsx
15733
- var React35 = __toESM(require("react"));
15750
+ var React36 = __toESM(require("react"));
15734
15751
  var import_lucide_react44 = require("lucide-react");
15735
15752
 
15736
15753
  // src/components/ui/progress.tsx
@@ -15848,8 +15865,8 @@ function FilePreviewDialog({
15848
15865
  staffSelector,
15849
15866
  className
15850
15867
  }) {
15851
- const [page, setPage] = React35.useState(0);
15852
- React35.useEffect(() => {
15868
+ const [page, setPage] = React36.useState(0);
15869
+ React36.useEffect(() => {
15853
15870
  setPage(0);
15854
15871
  }, [rows.length]);
15855
15872
  const totalPages = Math.ceil(rows.length / pageSize);
@@ -16014,7 +16031,7 @@ function FilePreviewDialog({
16014
16031
  }
16015
16032
 
16016
16033
  // src/components/ui/data-table.tsx
16017
- var React36 = __toESM(require("react"));
16034
+ var React37 = __toESM(require("react"));
16018
16035
  var import_react_table = require("@tanstack/react-table");
16019
16036
  var import_lucide_react45 = require("lucide-react");
16020
16037
  var import_jsx_runtime81 = require("react/jsx-runtime");
@@ -16253,20 +16270,20 @@ function DataTable({
16253
16270
  onColumnFiltersChange: onColumnFiltersChangeProp
16254
16271
  }) {
16255
16272
  var _a;
16256
- const [internalSorting, setInternalSorting] = React36.useState(
16273
+ const [internalSorting, setInternalSorting] = React37.useState(
16257
16274
  []
16258
16275
  );
16259
- const [internalColumnFilters, setInternalColumnFilters] = React36.useState([]);
16260
- const [internalPagination, setInternalPagination] = React36.useState({
16276
+ const [internalColumnFilters, setInternalColumnFilters] = React37.useState([]);
16277
+ const [internalPagination, setInternalPagination] = React37.useState({
16261
16278
  pageIndex: 0,
16262
16279
  pageSize: (_a = pageSizeOptions[0]) != null ? _a : 10
16263
16280
  });
16264
- const [columnVisibility, setColumnVisibility] = React36.useState({});
16265
- const [rowSelection, setRowSelection] = React36.useState({});
16281
+ const [columnVisibility, setColumnVisibility] = React37.useState({});
16282
+ const [rowSelection, setRowSelection] = React37.useState({});
16266
16283
  const sorting = controlledSorting != null ? controlledSorting : internalSorting;
16267
16284
  const columnFilters = controlledColumnFilters != null ? controlledColumnFilters : internalColumnFilters;
16268
16285
  const pagination = controlledPagination != null ? controlledPagination : internalPagination;
16269
- const resolvedColumns = React36.useMemo(() => {
16286
+ const resolvedColumns = React37.useMemo(() => {
16270
16287
  if (!enableRowSelection) return userColumns;
16271
16288
  return [getSelectionColumn(), ...userColumns];
16272
16289
  }, [userColumns, enableRowSelection]);
@@ -16356,7 +16373,7 @@ function DataTable({
16356
16373
  }
16357
16374
 
16358
16375
  // src/components/ui/applicant-document-checklist.tsx
16359
- var React37 = __toESM(require("react"));
16376
+ var React38 = __toESM(require("react"));
16360
16377
  var import_lucide_react46 = require("lucide-react");
16361
16378
  var import_jsx_runtime82 = require("react/jsx-runtime");
16362
16379
  function StatusIcon({ status }) {
@@ -16372,14 +16389,14 @@ function ApplicantDocumentChecklist({
16372
16389
  onRemove,
16373
16390
  className
16374
16391
  }) {
16375
- const inputRefs = React37.useRef({});
16392
+ const inputRefs = React38.useRef({});
16376
16393
  function handleFileChange(itemId, e) {
16377
16394
  var _a;
16378
16395
  const file = (_a = e.target.files) == null ? void 0 : _a[0];
16379
16396
  if (file) onUpload == null ? void 0 : onUpload(itemId, file);
16380
16397
  e.target.value = "";
16381
16398
  }
16382
- const { uploadedCount, totalRequired } = React37.useMemo(() => {
16399
+ const { uploadedCount, totalRequired } = React38.useMemo(() => {
16383
16400
  let uploaded = 0;
16384
16401
  let required = 0;
16385
16402
  for (const i of items) {
@@ -16740,7 +16757,10 @@ function DrawerFooter(_a) {
16740
16757
  return /* @__PURE__ */ (0, import_jsx_runtime84.jsx)(
16741
16758
  "div",
16742
16759
  __spreadValues({
16743
- className: cn("mt-auto flex flex-col gap-2 p-4", className),
16760
+ className: cn(
16761
+ "mt-auto flex flex-row justify-end gap-2 border-t border-border p-4",
16762
+ className
16763
+ ),
16744
16764
  "data-slot": "drawer-footer"
16745
16765
  }, props)
16746
16766
  );
@@ -16966,7 +16986,7 @@ function ExpenseBarChart({
16966
16986
  }
16967
16987
 
16968
16988
  // src/components/ui/financial-cards.tsx
16969
- var React39 = __toESM(require("react"));
16989
+ var React40 = __toESM(require("react"));
16970
16990
  var import_lucide_react48 = require("lucide-react");
16971
16991
 
16972
16992
  // src/components/ui/financial-primitives.tsx
@@ -17129,7 +17149,7 @@ function PropertyCard({
17129
17149
  interestCharged,
17130
17150
  principlePaidOff
17131
17151
  }) {
17132
- const [expanded, setExpanded] = React39.useState(false);
17152
+ const [expanded, setExpanded] = React40.useState(false);
17133
17153
  return /* @__PURE__ */ (0, import_jsx_runtime87.jsxs)(
17134
17154
  "div",
17135
17155
  {
@@ -18604,7 +18624,7 @@ function IncomeBarChart({
18604
18624
  }
18605
18625
 
18606
18626
  // src/components/ui/input-otp.tsx
18607
- var React42 = __toESM(require("react"));
18627
+ var React43 = __toESM(require("react"));
18608
18628
  var import_input_otp = require("input-otp");
18609
18629
  var import_lucide_react50 = require("lucide-react");
18610
18630
  var import_jsx_runtime91 = require("react/jsx-runtime");
@@ -18651,7 +18671,7 @@ function InputOTPSlot(_a) {
18651
18671
  "className"
18652
18672
  ]);
18653
18673
  var _a2;
18654
- const inputOTPContext = React42.useContext(import_input_otp.OTPInputContext);
18674
+ const inputOTPContext = React43.useContext(import_input_otp.OTPInputContext);
18655
18675
  const { char, hasFakeCaret, isActive } = (_a2 = inputOTPContext.slots[index]) != null ? _a2 : {};
18656
18676
  return /* @__PURE__ */ (0, import_jsx_runtime91.jsxs)(
18657
18677
  "div",
@@ -18748,7 +18768,7 @@ function SelectableCard({
18748
18768
  }
18749
18769
 
18750
18770
  // src/components/ui/kanban-column.tsx
18751
- var React43 = __toESM(require("react"));
18771
+ var React44 = __toESM(require("react"));
18752
18772
  var import_lucide_react53 = require("lucide-react");
18753
18773
 
18754
18774
  // src/components/ui/opportunity-card.tsx
@@ -19505,7 +19525,7 @@ function KanbanColumn({
19505
19525
  const themeVars = useThemeVars();
19506
19526
  const accentColor = (_a = stage.accentColor) != null ? _a : "var(--color-border)";
19507
19527
  const hasMenu = onEditColumn || !isDefault && onDeleteColumn;
19508
- const [isDragOver, setIsDragOver] = React43.useState(false);
19528
+ const [isDragOver, setIsDragOver] = React44.useState(false);
19509
19529
  function handleDragOver(e) {
19510
19530
  if (!onCardDrop) return;
19511
19531
  e.preventDefault();
@@ -19681,15 +19701,15 @@ function KanbanColumn({
19681
19701
  }
19682
19702
 
19683
19703
  // src/components/ui/stepper.tsx
19684
- var React44 = __toESM(require("react"));
19704
+ var React45 = __toESM(require("react"));
19685
19705
  var import_lucide_react54 = require("lucide-react");
19686
19706
  var import_jsx_runtime97 = require("react/jsx-runtime");
19687
- var StepperContext = React44.createContext({
19707
+ var StepperContext = React45.createContext({
19688
19708
  activeStep: 0,
19689
19709
  orientation: "horizontal",
19690
19710
  totalSteps: 0
19691
19711
  });
19692
- var StepContext = React44.createContext({
19712
+ var StepContext = React45.createContext({
19693
19713
  index: 0,
19694
19714
  isActive: false,
19695
19715
  isCompleted: false,
@@ -19702,7 +19722,7 @@ function Stepper({
19702
19722
  className,
19703
19723
  children
19704
19724
  }) {
19705
- const totalSteps = React44.Children.count(children);
19725
+ const totalSteps = React45.Children.count(children);
19706
19726
  return /* @__PURE__ */ (0, import_jsx_runtime97.jsx)(StepperContext.Provider, { value: { activeStep, orientation, totalSteps }, children: /* @__PURE__ */ (0, import_jsx_runtime97.jsx)(
19707
19727
  "div",
19708
19728
  {
@@ -19712,9 +19732,9 @@ function Stepper({
19712
19732
  orientation === "horizontal" ? "flex w-full items-start" : "flex flex-col",
19713
19733
  className
19714
19734
  ),
19715
- children: React44.Children.map(
19735
+ children: React45.Children.map(
19716
19736
  children,
19717
- (step, index) => React44.isValidElement(step) ? React44.cloneElement(
19737
+ (step, index) => React45.isValidElement(step) ? React45.cloneElement(
19718
19738
  step,
19719
19739
  { _index: index }
19720
19740
  ) : step
@@ -19723,7 +19743,7 @@ function Stepper({
19723
19743
  ) });
19724
19744
  }
19725
19745
  function Step({ _index = 0, error, className, children }) {
19726
- const { activeStep, orientation, totalSteps } = React44.useContext(StepperContext);
19746
+ const { activeStep, orientation, totalSteps } = React45.useContext(StepperContext);
19727
19747
  const isActive = _index === activeStep;
19728
19748
  const isCompleted = _index < activeStep;
19729
19749
  const isFirst = _index === 0;
@@ -19751,8 +19771,8 @@ function Step({ _index = 0, error, className, children }) {
19751
19771
  );
19752
19772
  }
19753
19773
  function StepIndicator({ error, className }) {
19754
- const { orientation } = React44.useContext(StepperContext);
19755
- 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);
19756
19776
  const filled = isActive || isCompleted;
19757
19777
  const circle = /* @__PURE__ */ (0, import_jsx_runtime97.jsx)(
19758
19778
  "div",
@@ -19824,8 +19844,8 @@ function StepLabel({
19824
19844
  error,
19825
19845
  className
19826
19846
  }) {
19827
- const { orientation } = React44.useContext(StepperContext);
19828
- const { isActive, isCompleted, isLast } = React44.useContext(StepContext);
19847
+ const { orientation } = React45.useContext(StepperContext);
19848
+ const { isActive, isCompleted, isLast } = React45.useContext(StepContext);
19829
19849
  const subtext = typeof error === "string" ? error : description;
19830
19850
  return /* @__PURE__ */ (0, import_jsx_runtime97.jsxs)(
19831
19851
  "div",
@@ -19865,7 +19885,7 @@ function StepLabel({
19865
19885
  );
19866
19886
  }
19867
19887
  function StepContent({ className, children }) {
19868
- const { isActive } = React44.useContext(StepContext);
19888
+ const { isActive } = React45.useContext(StepContext);
19869
19889
  if (!isActive) return null;
19870
19890
  return /* @__PURE__ */ (0, import_jsx_runtime97.jsx)("div", { "data-slot": "step-content", className: cn("pb-4 pt-2", className), children });
19871
19891
  }
@@ -19988,7 +20008,7 @@ function OnboardingLayout({
19988
20008
  }
19989
20009
 
19990
20010
  // src/components/ui/opportunity-edit-modals.tsx
19991
- var React45 = __toESM(require("react"));
20011
+ var React46 = __toESM(require("react"));
19992
20012
  var import_lucide_react55 = require("lucide-react");
19993
20013
 
19994
20014
  // src/lib/opportunity-constants.ts
@@ -20351,9 +20371,9 @@ function EditLoanScenarioModal({
20351
20371
  container,
20352
20372
  className
20353
20373
  }) {
20354
- const [form, setForm] = React45.useState(__spreadValues(__spreadValues({}, LOAN_SCENARIO_DEFAULTS), initialData));
20355
- const initialSnapshot = React45.useRef("");
20356
- React45.useEffect(() => {
20374
+ const [form, setForm] = React46.useState(__spreadValues(__spreadValues({}, LOAN_SCENARIO_DEFAULTS), initialData));
20375
+ const initialSnapshot = React46.useRef("");
20376
+ React46.useEffect(() => {
20357
20377
  if (open) {
20358
20378
  const data = __spreadValues(__spreadValues({}, LOAN_SCENARIO_DEFAULTS), initialData);
20359
20379
  setForm(data);
@@ -20613,11 +20633,11 @@ function EditAssetsModal({
20613
20633
  container,
20614
20634
  className
20615
20635
  }) {
20616
- const [items, setItems] = React45.useState(
20636
+ const [items, setItems] = React46.useState(
20617
20637
  initialItems.length > 0 ? initialItems : [makeDefaultAssetItem()]
20618
20638
  );
20619
- const initialSnapshot = React45.useRef("");
20620
- React45.useEffect(() => {
20639
+ const initialSnapshot = React46.useRef("");
20640
+ React46.useEffect(() => {
20621
20641
  if (open) {
20622
20642
  const data = initialItems.length > 0 ? initialItems : [makeDefaultAssetItem()];
20623
20643
  setItems(data);
@@ -20910,11 +20930,11 @@ function EditDebtsModal({
20910
20930
  container,
20911
20931
  className
20912
20932
  }) {
20913
- const [items, setItems] = React45.useState(
20933
+ const [items, setItems] = React46.useState(
20914
20934
  initialItems.length > 0 ? initialItems : [makeDefaultDebtItem()]
20915
20935
  );
20916
- const initialSnapshot = React45.useRef("");
20917
- React45.useEffect(() => {
20936
+ const initialSnapshot = React46.useRef("");
20937
+ React46.useEffect(() => {
20918
20938
  if (open) {
20919
20939
  const data = initialItems.length > 0 ? initialItems : [makeDefaultDebtItem()];
20920
20940
  setItems(data);
@@ -21236,9 +21256,9 @@ function EditAboutApplicantModal({
21236
21256
  container,
21237
21257
  className
21238
21258
  }) {
21239
- const [form, setForm] = React45.useState(__spreadValues(__spreadValues({}, ABOUT_APPLICANT_DEFAULTS), initialData));
21240
- const initialSnapshot = React45.useRef("");
21241
- React45.useEffect(() => {
21259
+ const [form, setForm] = React46.useState(__spreadValues(__spreadValues({}, ABOUT_APPLICANT_DEFAULTS), initialData));
21260
+ const initialSnapshot = React46.useRef("");
21261
+ React46.useEffect(() => {
21242
21262
  if (open) {
21243
21263
  const data = __spreadValues(__spreadValues({}, ABOUT_APPLICANT_DEFAULTS), initialData);
21244
21264
  setForm(data);
@@ -21510,7 +21530,7 @@ function EditIncomeModal({
21510
21530
  container,
21511
21531
  className
21512
21532
  }) {
21513
- const defaultItems = React45.useMemo(
21533
+ const defaultItems = React46.useMemo(
21514
21534
  () => {
21515
21535
  var _a;
21516
21536
  return ((_a = initialData == null ? void 0 : initialData.items) == null ? void 0 : _a.length) ? initialData.items : [makeDefaultIncomeItem()];
@@ -21518,9 +21538,9 @@ function EditIncomeModal({
21518
21538
  []
21519
21539
  // eslint-disable-line react-hooks/exhaustive-deps
21520
21540
  );
21521
- const [items, setItems] = React45.useState(defaultItems);
21522
- const initialSnapshot = React45.useRef("");
21523
- React45.useEffect(() => {
21541
+ const [items, setItems] = React46.useState(defaultItems);
21542
+ const initialSnapshot = React46.useRef("");
21543
+ React46.useEffect(() => {
21524
21544
  var _a;
21525
21545
  if (open) {
21526
21546
  const data = ((_a = initialData == null ? void 0 : initialData.items) == null ? void 0 : _a.length) ? initialData.items : [makeDefaultIncomeItem()];
@@ -21737,7 +21757,7 @@ function EditExpensesModal({
21737
21757
  container,
21738
21758
  className
21739
21759
  }) {
21740
- const defaultItems = React45.useMemo(
21760
+ const defaultItems = React46.useMemo(
21741
21761
  () => {
21742
21762
  var _a;
21743
21763
  return ((_a = initialData == null ? void 0 : initialData.items) == null ? void 0 : _a.length) ? initialData.items : [makeDefaultExpenseItem()];
@@ -21745,9 +21765,9 @@ function EditExpensesModal({
21745
21765
  []
21746
21766
  // eslint-disable-line react-hooks/exhaustive-deps
21747
21767
  );
21748
- const [items, setItems] = React45.useState(defaultItems);
21749
- const initialSnapshot = React45.useRef("");
21750
- React45.useEffect(() => {
21768
+ const [items, setItems] = React46.useState(defaultItems);
21769
+ const initialSnapshot = React46.useRef("");
21770
+ React46.useEffect(() => {
21751
21771
  var _a;
21752
21772
  if (open) {
21753
21773
  const data = ((_a = initialData == null ? void 0 : initialData.items) == null ? void 0 : _a.length) ? initialData.items : [makeDefaultExpenseItem()];
@@ -21880,7 +21900,7 @@ function EditExpensesModal({
21880
21900
  }
21881
21901
 
21882
21902
  // src/components/ui/opportunity-summary-tab.tsx
21883
- var React46 = __toESM(require("react"));
21903
+ var React47 = __toESM(require("react"));
21884
21904
  var import_react33 = require("react");
21885
21905
  var import_lucide_react56 = require("lucide-react");
21886
21906
  var import_jsx_runtime100 = require("react/jsx-runtime");
@@ -22267,7 +22287,7 @@ function OpportunitySummaryTab({
22267
22287
  var _a2;
22268
22288
  return (_a2 = docStatusOverrides[doc.id]) != null ? _a2 : doc.status;
22269
22289
  }
22270
- const checklistProgress = React46.useMemo(() => {
22290
+ const checklistProgress = React47.useMemo(() => {
22271
22291
  var _a2, _b2;
22272
22292
  const map = /* @__PURE__ */ new Map();
22273
22293
  for (const doc of documents) {
@@ -22285,7 +22305,7 @@ function OpportunitySummaryTab({
22285
22305
  }
22286
22306
  return Array.from(map.entries()).map(([name, data]) => __spreadValues({ name }, data));
22287
22307
  }, [documents, docStatusOverrides]);
22288
- const groupedDocs = React46.useMemo(() => {
22308
+ const groupedDocs = React47.useMemo(() => {
22289
22309
  var _a2;
22290
22310
  if (documents.length <= 5 || !documents.some((d) => d.checklistItem))
22291
22311
  return null;
@@ -22761,7 +22781,7 @@ function OpportunitySummaryTab({
22761
22781
  }
22762
22782
 
22763
22783
  // src/components/ui/sidebar-nav.tsx
22764
- var React47 = __toESM(require("react"));
22784
+ var React48 = __toESM(require("react"));
22765
22785
  var import_lucide_react57 = require("lucide-react");
22766
22786
  var import_accordion8 = require("@base-ui/react/accordion");
22767
22787
  var import_jsx_runtime101 = require("react/jsx-runtime");
@@ -22862,8 +22882,8 @@ function CollapsibleNavItem({
22862
22882
  var _a, _b;
22863
22883
  const Icon = item.icon;
22864
22884
  const hasActiveChild = (_b = (_a = item.subItems) == null ? void 0 : _a.some((sub) => sub.isActive)) != null ? _b : false;
22865
- const [open, setOpen] = React47.useState(hasActiveChild);
22866
- React47.useEffect(() => {
22885
+ const [open, setOpen] = React48.useState(hasActiveChild);
22886
+ React48.useEffect(() => {
22867
22887
  if (hasActiveChild) setOpen(true);
22868
22888
  }, [hasActiveChild]);
22869
22889
  if (collapsed) {
@@ -22972,13 +22992,13 @@ function SidebarNav({
22972
22992
  onCollapsedChange,
22973
22993
  className
22974
22994
  }) {
22975
- const [userMenuOpen, setUserMenuOpen] = React47.useState(false);
22976
- const navScrollRef = React47.useRef(null);
22977
- const expandedScrollRef = React47.useRef(0);
22978
- React47.useEffect(() => {
22995
+ const [userMenuOpen, setUserMenuOpen] = React48.useState(false);
22996
+ const navScrollRef = React48.useRef(null);
22997
+ const expandedScrollRef = React48.useRef(0);
22998
+ React48.useEffect(() => {
22979
22999
  if (collapsed) setUserMenuOpen(false);
22980
23000
  }, [collapsed]);
22981
- React47.useLayoutEffect(() => {
23001
+ React48.useLayoutEffect(() => {
22982
23002
  const nav = navScrollRef.current;
22983
23003
  if (!nav) return;
22984
23004
  if (!collapsed) {
@@ -23357,7 +23377,7 @@ function PipelineBoard({
23357
23377
  }
23358
23378
 
23359
23379
  // src/components/ui/pipeline-chart.tsx
23360
- var React48 = __toESM(require("react"));
23380
+ var React49 = __toESM(require("react"));
23361
23381
  var import_jsx_runtime104 = require("react/jsx-runtime");
23362
23382
  function formatValue(v) {
23363
23383
  return formatCurrencyAbbrev(v);
@@ -23375,7 +23395,7 @@ function PipelineChart({
23375
23395
  className
23376
23396
  }) {
23377
23397
  const themeVars = useThemeVars();
23378
- const [activeId, setActiveId] = React48.useState(null);
23398
+ const [activeId, setActiveId] = React49.useState(null);
23379
23399
  const nonEmpty = stages.filter((s) => s.value > 0);
23380
23400
  const total = nonEmpty.reduce((sum, s) => sum + s.value, 0);
23381
23401
  if (total === 0 || stages.length === 0) {
@@ -23468,7 +23488,7 @@ function PipelineChart({
23468
23488
  }
23469
23489
 
23470
23490
  // src/components/ui/pipeline-dialogs.tsx
23471
- var React49 = __toESM(require("react"));
23491
+ var React50 = __toESM(require("react"));
23472
23492
  var import_date_fns4 = require("date-fns");
23473
23493
  var import_jsx_runtime105 = require("react/jsx-runtime");
23474
23494
  function DeleteOpportunityDialog({
@@ -23582,10 +23602,10 @@ function PutOnHoldDialog({
23582
23602
  onSave,
23583
23603
  className
23584
23604
  }) {
23585
- const [duration, setDuration] = React49.useState("90");
23586
- const [customDate, setCustomDate] = React49.useState();
23587
- const today = React49.useMemo(() => (0, import_date_fns4.startOfDay)(/* @__PURE__ */ new Date()), []);
23588
- 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(() => {
23589
23609
  if (duration === "custom") return customDate;
23590
23610
  return (0, import_date_fns4.addDays)(today, parseInt(duration, 10));
23591
23611
  }, [duration, customDate, today]);
@@ -23594,7 +23614,7 @@ function PutOnHoldDialog({
23594
23614
  if (!resolvedDate) return;
23595
23615
  onSave((0, import_date_fns4.format)(resolvedDate, "yyyy-MM-dd"));
23596
23616
  }
23597
- React49.useEffect(() => {
23617
+ React50.useEffect(() => {
23598
23618
  if (open) {
23599
23619
  setDuration("90");
23600
23620
  setCustomDate(void 0);
@@ -26208,7 +26228,7 @@ function ApplicationMobileLayout({
26208
26228
  }
26209
26229
 
26210
26230
  // src/components/ui/income-work-details.tsx
26211
- var React59 = __toESM(require("react"));
26231
+ var React60 = __toESM(require("react"));
26212
26232
 
26213
26233
  // src/components/ui/loan-option-group.tsx
26214
26234
  var import_jsx_runtime126 = require("react/jsx-runtime");
@@ -26500,10 +26520,10 @@ function IncomeWorkDetails({
26500
26520
  onConnectMore,
26501
26521
  className
26502
26522
  }) {
26503
- const [openItems, setOpenItems] = React59.useState(
26523
+ const [openItems, setOpenItems] = React60.useState(
26504
26524
  sources.length > 0 ? [sources[0].id] : []
26505
26525
  );
26506
- React59.useEffect(() => {
26526
+ React60.useEffect(() => {
26507
26527
  setOpenItems((current) => {
26508
26528
  const currentSet = new Set(current);
26509
26529
  const newIds = sources.map((s) => s.id).filter((id) => !currentSet.has(id));
@@ -26674,7 +26694,7 @@ function LoanEntryShell({
26674
26694
  }
26675
26695
 
26676
26696
  // src/components/ui/loan-wizard-shell.tsx
26677
- var React60 = __toESM(require("react"));
26697
+ var React61 = __toESM(require("react"));
26678
26698
  var import_jsx_runtime130 = require("react/jsx-runtime");
26679
26699
  function LoanWizardShell({
26680
26700
  logo,
@@ -26714,7 +26734,7 @@ function LoanWizardShell({
26714
26734
  ] }),
26715
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: [
26716
26736
  /* @__PURE__ */ (0, import_jsx_runtime130.jsxs)("div", { className: "flex flex-col gap-2", children: [
26717
- /* @__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: [
26718
26738
  line,
26719
26739
  i < heroTitle.split("\n").length - 1 && /* @__PURE__ */ (0, import_jsx_runtime130.jsx)("br", {})
26720
26740
  ] }, i)) }),
@@ -27573,6 +27593,7 @@ function EditorPlaceholder() {
27573
27593
  SelectGroup,
27574
27594
  SelectItem,
27575
27595
  SelectLabel,
27596
+ SelectPortalProvider,
27576
27597
  SelectScrollDownButton,
27577
27598
  SelectScrollUpButton,
27578
27599
  SelectSeparator,