@cimplify/sdk 0.100.6 → 0.102.0

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 (70) hide show
  1. package/dist/advanced.d.mts +3 -3
  2. package/dist/advanced.d.ts +3 -3
  3. package/dist/advanced.js +20 -20
  4. package/dist/advanced.mjs +1 -1
  5. package/dist/{chunk-QPRI2NII.js → chunk-2P4KXFB6.js} +6 -0
  6. package/dist/{chunk-4G5UWFC3.mjs → chunk-3V4DVXV3.mjs} +6 -1
  7. package/dist/{chunk-KLJLKT6C.mjs → chunk-4KNFBPV2.mjs} +10 -3
  8. package/dist/{chunk-RQPXLXB2.mjs → chunk-DCMXUKDQ.mjs} +30 -0
  9. package/dist/{chunk-BMFWQNYZ.mjs → chunk-DKLHCZ5M.mjs} +4 -1
  10. package/dist/{chunk-PNTINRAU.js → chunk-EAZGA7LD.js} +30 -0
  11. package/dist/{chunk-BSZJSR62.js → chunk-LOWSMGRT.js} +12 -4
  12. package/dist/{chunk-D3FWJB7Y.js → chunk-YDA46OZ6.js} +50 -47
  13. package/dist/{chunk-3HU5I5VG.js → chunk-YER7DIOM.js} +15 -0
  14. package/dist/{chunk-Z7M6GAHS.mjs → chunk-Z3K2D3TE.mjs} +15 -0
  15. package/dist/{client-BwRAAk4y.d.mts → client-B40KFazg.d.ts} +15 -2
  16. package/dist/{client-DGrvLiJv.d.mts → client-BdErclfU.d.mts} +2 -2
  17. package/dist/{client-CrPglBBz.d.ts → client-BizGfqB7.d.mts} +15 -2
  18. package/dist/{client-CPcZIrjC.d.ts → client-nsiMwuC1.d.ts} +2 -2
  19. package/dist/{index-D-LUYk1Y.d.mts → index-DpmnI__D.d.mts} +3 -3
  20. package/dist/{index-B_RYmvlF.d.ts → index-nEyXWIyR.d.ts} +3 -3
  21. package/dist/index.d.mts +19 -8
  22. package/dist/index.d.ts +19 -8
  23. package/dist/index.js +92 -88
  24. package/dist/index.mjs +4 -4
  25. package/dist/mock/cli.mjs +30 -0
  26. package/dist/mock/library.js +30 -0
  27. package/dist/mock/library.mjs +30 -0
  28. package/dist/mock/msw.js +30 -0
  29. package/dist/mock/msw.mjs +30 -0
  30. package/dist/{payment-BSzy7sly.d.mts → payment-l0rkieEQ.d.mts} +1 -1
  31. package/dist/{payment-jK8ztICx.d.ts → payment-vzNnIi1n.d.ts} +1 -1
  32. package/dist/{price-CJLfcYKd.d.ts → price-BstChV9a.d.ts} +1 -1
  33. package/dist/{price-D96h6c6L.d.mts → price-CS4E5zLS.d.mts} +1 -1
  34. package/dist/{product-CeV8euw4.d.mts → product-Byf0unSy.d.mts} +745 -625
  35. package/dist/{product-CeV8euw4.d.ts → product-Byf0unSy.d.ts} +745 -625
  36. package/dist/react.d.mts +9 -4
  37. package/dist/react.d.ts +9 -4
  38. package/dist/react.js +137 -92
  39. package/dist/react.mjs +58 -13
  40. package/dist/server/evict.d.mts +12 -8
  41. package/dist/server/evict.d.ts +12 -8
  42. package/dist/server/evict.js +53 -7
  43. package/dist/server/evict.mjs +53 -7
  44. package/dist/server/tanstack.d.mts +4 -2
  45. package/dist/server/tanstack.d.ts +4 -2
  46. package/dist/server/tanstack.js +53 -14
  47. package/dist/server/tanstack.mjs +53 -14
  48. package/dist/{server-zyrpzJVn.d.ts → server-Cj40R2ZD.d.ts} +13 -1
  49. package/dist/{server-DRAW2OOX.d.mts → server-DqbZh8Bk.d.mts} +13 -1
  50. package/dist/server.d.mts +4 -4
  51. package/dist/server.d.ts +4 -4
  52. package/dist/server.js +7 -7
  53. package/dist/server.mjs +2 -2
  54. package/dist/testing/msw.d.mts +2 -2
  55. package/dist/testing/msw.d.ts +2 -2
  56. package/dist/testing/msw.js +2 -2
  57. package/dist/testing/msw.mjs +1 -1
  58. package/dist/testing/suite.d.mts +6 -6
  59. package/dist/testing/suite.d.ts +6 -6
  60. package/dist/testing/suite.js +23 -23
  61. package/dist/testing/suite.mjs +4 -4
  62. package/dist/testing.d.mts +52 -21
  63. package/dist/testing.d.ts +52 -21
  64. package/dist/testing.js +83 -79
  65. package/dist/testing.mjs +5 -5
  66. package/dist/utils.d.mts +4 -4
  67. package/dist/utils.d.ts +4 -4
  68. package/package.json +1 -1
  69. package/registry/cart-summary.json +1 -1
  70. package/registry/chat-widget.json +1 -1
package/dist/react.js CHANGED
@@ -2,9 +2,9 @@
2
2
  'use strict';
3
3
 
4
4
  var chunkXREIZ56K_js = require('./chunk-XREIZ56K.js');
5
- var chunkQPRI2NII_js = require('./chunk-QPRI2NII.js');
6
- var chunkD3FWJB7Y_js = require('./chunk-D3FWJB7Y.js');
7
- var chunk3HU5I5VG_js = require('./chunk-3HU5I5VG.js');
5
+ var chunk2P4KXFB6_js = require('./chunk-2P4KXFB6.js');
6
+ var chunkYDA46OZ6_js = require('./chunk-YDA46OZ6.js');
7
+ var chunkYER7DIOM_js = require('./chunk-YER7DIOM.js');
8
8
  var chunkWMEC5JWN_js = require('./chunk-WMEC5JWN.js');
9
9
  var chunkNIOUSKQQ_js = require('./chunk-NIOUSKQQ.js');
10
10
  require('./chunk-OWW5GUSB.js');
@@ -454,6 +454,8 @@ function transformToCheckoutCart(cart, fx, checkout) {
454
454
  total: amt(cart.pricing.total_price),
455
455
  currency: fx?.displayCurrency ?? cart.pricing.currency,
456
456
  tax_inclusive: cart.pricing.tax_inclusive ?? false,
457
+ tax_rate: cart.pricing.tax_rate,
458
+ price_display_mode: cart.pricing.price_display_mode,
457
459
  deposit_required: cart.pricing.deposit_required ?? false,
458
460
  deposit_amount: cart.pricing.deposit_amount != null ? amt(cart.pricing.deposit_amount) : void 0,
459
461
  requires_delivery: cart.requires_delivery
@@ -706,7 +708,18 @@ function clearAllCartStores() {
706
708
  cartStores.clear();
707
709
  }
708
710
  function emptyBase(currency, isLoading = true) {
709
- return { items: [], subtotal: 0, tax: 0, total: 0, currency, isLoading };
711
+ return {
712
+ items: [],
713
+ subtotal: 0,
714
+ tax: 0,
715
+ taxRate: null,
716
+ taxInclusive: false,
717
+ displayGross: false,
718
+ taxJurisdictionLabel: null,
719
+ total: 0,
720
+ currency,
721
+ isLoading
722
+ };
710
723
  }
711
724
  function buildStoreKey(client, locationId) {
712
725
  return [client.getPublicKey() || "__no_public_key__", locationId || "__no_location__"].join(":");
@@ -799,6 +812,10 @@ function mapServerCart(serverCart, fallbackCurrency) {
799
812
  items,
800
813
  subtotal: roundMoney(toNumber(serverCart.pricing.subtotal)),
801
814
  tax: roundMoney(toNumber(serverCart.pricing.tax_amount)),
815
+ taxRate: serverCart.pricing.tax_rate != null ? toNumber(serverCart.pricing.tax_rate) : null,
816
+ taxInclusive: serverCart.pricing.tax_inclusive,
817
+ displayGross: chunk2P4KXFB6_js.displaysGrossPrices(serverCart.pricing),
818
+ taxJurisdictionLabel: serverCart.pricing.tax_jurisdiction_label ?? null,
802
819
  total: roundMoney(toNumber(serverCart.pricing.total_price)),
803
820
  currency: serverCart.pricing.currency || fallbackCurrency,
804
821
  isLoading: false
@@ -845,7 +862,7 @@ async function syncFromServer(entry) {
845
862
  return next;
846
863
  }
847
864
  function emitMutationError(entry, operation, opId, idempotencyKey, error) {
848
- entry.client.events.emit(chunkD3FWJB7Y_js.MUTATION_ERROR, {
865
+ entry.client.events.emit(chunkYDA46OZ6_js.MUTATION_ERROR, {
849
866
  service: "cart",
850
867
  operation,
851
868
  opId,
@@ -885,10 +902,10 @@ function getOrCreateStore(params) {
885
902
  syncTail: Promise.resolve(),
886
903
  failedOpRemovers: /* @__PURE__ */ new Set()
887
904
  };
888
- client.events.on(chunkD3FWJB7Y_js.SESSION_CLAIMED, () => {
905
+ client.events.on(chunkYDA46OZ6_js.SESSION_CLAIMED, () => {
889
906
  if (entry.initialized) void syncFromServer(entry);
890
907
  });
891
- client.events.on(chunkD3FWJB7Y_js.SESSION_CLEARED, () => {
908
+ client.events.on(chunkYDA46OZ6_js.SESSION_CLEARED, () => {
892
909
  if (entry.initialized) void syncFromServer(entry);
893
910
  });
894
911
  cartStores.set(storeKey, entry);
@@ -1130,6 +1147,10 @@ function useCart(options = {}) {
1130
1147
  itemCount,
1131
1148
  subtotal: view.subtotal,
1132
1149
  tax: view.tax,
1150
+ taxRate: view.taxRate,
1151
+ taxInclusive: view.taxInclusive,
1152
+ displayGross: view.displayGross,
1153
+ taxJurisdictionLabel: view.taxJurisdictionLabel,
1133
1154
  total: view.total,
1134
1155
  currency: view.currency,
1135
1156
  isEmpty: itemCount === 0,
@@ -1192,7 +1213,7 @@ var DEFAULT_COUNTRY = "US";
1192
1213
  function createDefaultClient() {
1193
1214
  const processRef = globalThis.process;
1194
1215
  const envPublicKey = processRef?.env?.NEXT_PUBLIC_CIMPLIFY_PUBLIC_KEY || "";
1195
- return chunkD3FWJB7Y_js.createCimplifyClient({ publicKey: envPublicKey });
1216
+ return chunkYDA46OZ6_js.createCimplifyClient({ publicKey: envPublicKey });
1196
1217
  }
1197
1218
  function getStoredLocationId() {
1198
1219
  if (typeof window === "undefined" || !window.localStorage) {
@@ -1345,7 +1366,7 @@ function CimplifyProvider({
1345
1366
  const apiCredentials = resolvedClient.getCredentialsMode() === "include" ? "use-credentials" : "anonymous";
1346
1367
  preconnectOrigin(resolvedClient.getBaseUrl(), apiCredentials);
1347
1368
  preconnectOrigin(resolvedClient.getLinkApiUrl(), apiCredentials);
1348
- preconnectOrigin(chunkQPRI2NII_js.DEFAULT_CDN_BASE_URL);
1369
+ preconnectOrigin(chunk2P4KXFB6_js.DEFAULT_CDN_BASE_URL);
1349
1370
  }
1350
1371
  const setCurrentLocation = React14.useCallback(
1351
1372
  (location) => {
@@ -3504,7 +3525,7 @@ function CimplifySignInButton({
3504
3525
  const onClick = async () => {
3505
3526
  if (busy || disabled || !signInOpts.clientId) return;
3506
3527
  setBusy(true);
3507
- await chunk3HU5I5VG_js.startSignIn({
3528
+ await chunkYER7DIOM_js.startSignIn({
3508
3529
  ...signInOpts,
3509
3530
  onSuccess: () => {
3510
3531
  setBusy(false);
@@ -4972,9 +4993,9 @@ function useClientSessionEpoch(client) {
4972
4993
  const subscribe = React14.useCallback(
4973
4994
  (notify) => {
4974
4995
  const unsubscribe = [
4975
- client.events.on(chunkD3FWJB7Y_js.AUTH_TOKEN_CHANGED, notify),
4976
- client.events.on(chunkD3FWJB7Y_js.SESSION_CLAIMED, notify),
4977
- client.events.on(chunkD3FWJB7Y_js.SESSION_CLEARED, notify)
4996
+ client.events.on(chunkYDA46OZ6_js.AUTH_TOKEN_CHANGED, notify),
4997
+ client.events.on(chunkYDA46OZ6_js.SESSION_CLAIMED, notify),
4998
+ client.events.on(chunkYDA46OZ6_js.SESSION_CLEARED, notify)
4978
4999
  ];
4979
5000
  return () => {
4980
5001
  for (const stopListening of unsubscribe) {
@@ -6304,7 +6325,7 @@ function useChat(options = {}) {
6304
6325
  const watchSessionClaims = React14.useCallback(() => {
6305
6326
  const c = clientRef.current;
6306
6327
  if (!c || claimUnsubRef.current) return;
6307
- const unsubClaimed = c.events.on(chunkD3FWJB7Y_js.SESSION_CLAIMED, (event) => {
6328
+ const unsubClaimed = c.events.on(chunkYDA46OZ6_js.SESSION_CLAIMED, (event) => {
6308
6329
  setClaimedAs(event.customerName || c.support.claimedCustomerName || null);
6309
6330
  if (!openedRef.current) {
6310
6331
  void openIfExisting();
@@ -6313,7 +6334,7 @@ function useChat(options = {}) {
6313
6334
  connectWebSocket();
6314
6335
  void resyncConversation();
6315
6336
  });
6316
- const unsubCleared = c.events.on(chunkD3FWJB7Y_js.SESSION_CLEARED, resetConversation);
6337
+ const unsubCleared = c.events.on(chunkYDA46OZ6_js.SESSION_CLEARED, resetConversation);
6317
6338
  claimUnsubRef.current = () => {
6318
6339
  unsubClaimed();
6319
6340
  unsubCleared();
@@ -6365,7 +6386,7 @@ function useChat(options = {}) {
6365
6386
  if (!openedRef.current) return false;
6366
6387
  }
6367
6388
  const replyTo = opts?.replyTo;
6368
- const clientId = chunk3HU5I5VG_js.generateIdempotencyKey();
6389
+ const clientId = chunkYER7DIOM_js.generateIdempotencyKey();
6369
6390
  const localId = optimisticId(clientId);
6370
6391
  const optimistic = {
6371
6392
  id: localId,
@@ -6554,15 +6575,15 @@ function AuthElement({
6554
6575
  }, [onReady, onAuthenticated, onError]);
6555
6576
  React14.useEffect(() => {
6556
6577
  if (!elements || !containerRef.current) return;
6557
- const element = elements.create(chunk3HU5I5VG_js.ELEMENT_TYPES.AUTH, { prefillEmail });
6578
+ const element = elements.create(chunkYER7DIOM_js.ELEMENT_TYPES.AUTH, { prefillEmail });
6558
6579
  elementRef.current = element;
6559
- element.on(chunk3HU5I5VG_js.EVENT_TYPES.READY, () => onReadyRef.current?.());
6580
+ element.on(chunkYER7DIOM_js.EVENT_TYPES.READY, () => onReadyRef.current?.());
6560
6581
  element.on(
6561
- chunk3HU5I5VG_js.EVENT_TYPES.AUTHENTICATED,
6582
+ chunkYER7DIOM_js.EVENT_TYPES.AUTHENTICATED,
6562
6583
  (data) => onAuthenticatedRef.current?.(data)
6563
6584
  );
6564
6585
  element.on(
6565
- chunk3HU5I5VG_js.EVENT_TYPES.ERROR,
6586
+ chunkYER7DIOM_js.EVENT_TYPES.ERROR,
6566
6587
  (data) => onErrorRef.current?.(data)
6567
6588
  );
6568
6589
  element.mount(containerRef.current);
@@ -6591,15 +6612,15 @@ function AddressElement({
6591
6612
  }, [onReady, onChange, onError]);
6592
6613
  React14.useEffect(() => {
6593
6614
  if (!elements || !containerRef.current) return;
6594
- const element = elements.create(chunk3HU5I5VG_js.ELEMENT_TYPES.ADDRESS, { mode });
6615
+ const element = elements.create(chunkYER7DIOM_js.ELEMENT_TYPES.ADDRESS, { mode });
6595
6616
  elementRef.current = element;
6596
- element.on(chunk3HU5I5VG_js.EVENT_TYPES.READY, () => onReadyRef.current?.());
6617
+ element.on(chunkYER7DIOM_js.EVENT_TYPES.READY, () => onReadyRef.current?.());
6597
6618
  element.on(
6598
- chunk3HU5I5VG_js.EVENT_TYPES.CHANGE,
6619
+ chunkYER7DIOM_js.EVENT_TYPES.CHANGE,
6599
6620
  (data) => onChangeRef.current?.(data)
6600
6621
  );
6601
6622
  element.on(
6602
- chunk3HU5I5VG_js.EVENT_TYPES.ERROR,
6623
+ chunkYER7DIOM_js.EVENT_TYPES.ERROR,
6603
6624
  (data) => onErrorRef.current?.(data)
6604
6625
  );
6605
6626
  element.mount(containerRef.current);
@@ -6629,15 +6650,15 @@ function PaymentElement({
6629
6650
  }, [onReady, onChange, onError]);
6630
6651
  React14.useEffect(() => {
6631
6652
  if (!elements || !containerRef.current) return;
6632
- const element = elements.create(chunk3HU5I5VG_js.ELEMENT_TYPES.PAYMENT, { amount, currency });
6653
+ const element = elements.create(chunkYER7DIOM_js.ELEMENT_TYPES.PAYMENT, { amount, currency });
6633
6654
  elementRef.current = element;
6634
- element.on(chunk3HU5I5VG_js.EVENT_TYPES.READY, () => onReadyRef.current?.());
6655
+ element.on(chunkYER7DIOM_js.EVENT_TYPES.READY, () => onReadyRef.current?.());
6635
6656
  element.on(
6636
- chunk3HU5I5VG_js.EVENT_TYPES.CHANGE,
6657
+ chunkYER7DIOM_js.EVENT_TYPES.CHANGE,
6637
6658
  (data) => onChangeRef.current?.(data)
6638
6659
  );
6639
6660
  element.on(
6640
- chunk3HU5I5VG_js.EVENT_TYPES.ERROR,
6661
+ chunkYER7DIOM_js.EVENT_TYPES.ERROR,
6641
6662
  (data) => onErrorRef.current?.(data)
6642
6663
  );
6643
6664
  element.mount(containerRef.current);
@@ -6928,7 +6949,7 @@ function VariantSelector({
6928
6949
  {
6929
6950
  "data-cimplify-variant-name": true,
6930
6951
  className: cn("flex-1 min-w-0 text-sm", classNames?.name),
6931
- children: chunkQPRI2NII_js.getVariantDisplayName(variant, productName)
6952
+ children: chunk2P4KXFB6_js.getVariantDisplayName(variant, productName)
6932
6953
  }
6933
6954
  ),
6934
6955
  /* @__PURE__ */ jsxRuntime.jsxs("span", { "data-cimplify-variant-pricing": true, className: cn("text-sm text-muted-foreground", classNames?.pricing), children: [
@@ -8726,12 +8747,12 @@ function FieldInput({
8726
8747
  classNames?.input
8727
8748
  );
8728
8749
  switch (field.field_type) {
8729
- case chunkQPRI2NII_js.INPUT_FIELD_TYPE.Text:
8730
- case chunkQPRI2NII_js.INPUT_FIELD_TYPE.Url:
8750
+ case chunk2P4KXFB6_js.INPUT_FIELD_TYPE.Text:
8751
+ case chunk2P4KXFB6_js.INPUT_FIELD_TYPE.Url:
8731
8752
  return /* @__PURE__ */ jsxRuntime.jsx(
8732
8753
  "input",
8733
8754
  {
8734
- type: field.field_type === chunkQPRI2NII_js.INPUT_FIELD_TYPE.Url ? "url" : "text",
8755
+ type: field.field_type === chunk2P4KXFB6_js.INPUT_FIELD_TYPE.Url ? "url" : "text",
8735
8756
  value: typeof value === "string" ? value : "",
8736
8757
  onChange: (e) => onValueChange(e.target.value),
8737
8758
  placeholder: field.placeholder,
@@ -8740,7 +8761,7 @@ function FieldInput({
8740
8761
  className: inputClass
8741
8762
  }
8742
8763
  );
8743
- case chunkQPRI2NII_js.INPUT_FIELD_TYPE.Textarea:
8764
+ case chunk2P4KXFB6_js.INPUT_FIELD_TYPE.Textarea:
8744
8765
  return /* @__PURE__ */ jsxRuntime.jsx(
8745
8766
  "textarea",
8746
8767
  {
@@ -8753,7 +8774,7 @@ function FieldInput({
8753
8774
  className: cn(inputClass, "resize-none", classNames?.textarea)
8754
8775
  }
8755
8776
  );
8756
- case chunkQPRI2NII_js.INPUT_FIELD_TYPE.Number:
8777
+ case chunk2P4KXFB6_js.INPUT_FIELD_TYPE.Number:
8757
8778
  return /* @__PURE__ */ jsxRuntime.jsx(
8758
8779
  "input",
8759
8780
  {
@@ -8767,7 +8788,7 @@ function FieldInput({
8767
8788
  className: inputClass
8768
8789
  }
8769
8790
  );
8770
- case chunkQPRI2NII_js.INPUT_FIELD_TYPE.Select:
8791
+ case chunk2P4KXFB6_js.INPUT_FIELD_TYPE.Select:
8771
8792
  return /* @__PURE__ */ jsxRuntime.jsxs(
8772
8793
  "select",
8773
8794
  {
@@ -8781,7 +8802,7 @@ function FieldInput({
8781
8802
  ]
8782
8803
  }
8783
8804
  );
8784
- case chunkQPRI2NII_js.INPUT_FIELD_TYPE.Radio:
8805
+ case chunk2P4KXFB6_js.INPUT_FIELD_TYPE.Radio:
8785
8806
  return /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("space-y-2", classNames?.radioGroup), children: (field.options || []).map((opt) => /* @__PURE__ */ jsxRuntime.jsxs(
8786
8807
  "label",
8787
8808
  {
@@ -8806,7 +8827,7 @@ function FieldInput({
8806
8827
  },
8807
8828
  opt
8808
8829
  )) });
8809
- case chunkQPRI2NII_js.INPUT_FIELD_TYPE.Checkbox:
8830
+ case chunk2P4KXFB6_js.INPUT_FIELD_TYPE.Checkbox:
8810
8831
  return /* @__PURE__ */ jsxRuntime.jsxs("label", { className: cn("flex items-center gap-2 text-sm cursor-pointer", classNames?.checkboxLabel), children: [
8811
8832
  /* @__PURE__ */ jsxRuntime.jsx(
8812
8833
  "input",
@@ -8819,7 +8840,7 @@ function FieldInput({
8819
8840
  ),
8820
8841
  field.placeholder || field.name
8821
8842
  ] });
8822
- case chunkQPRI2NII_js.INPUT_FIELD_TYPE.Color:
8843
+ case chunk2P4KXFB6_js.INPUT_FIELD_TYPE.Color:
8823
8844
  return /* @__PURE__ */ jsxRuntime.jsx(
8824
8845
  "input",
8825
8846
  {
@@ -8829,7 +8850,7 @@ function FieldInput({
8829
8850
  className: cn("w-12 h-10 rounded-md border border-input cursor-pointer", classNames?.colorInput)
8830
8851
  }
8831
8852
  );
8832
- case chunkQPRI2NII_js.INPUT_FIELD_TYPE.Date:
8853
+ case chunk2P4KXFB6_js.INPUT_FIELD_TYPE.Date:
8833
8854
  return /* @__PURE__ */ jsxRuntime.jsx(
8834
8855
  DatePicker,
8835
8856
  {
@@ -8840,8 +8861,8 @@ function FieldInput({
8840
8861
  "aria-label": field.name
8841
8862
  }
8842
8863
  );
8843
- case chunkQPRI2NII_js.INPUT_FIELD_TYPE.File:
8844
- case chunkQPRI2NII_js.INPUT_FIELD_TYPE.Image:
8864
+ case chunk2P4KXFB6_js.INPUT_FIELD_TYPE.File:
8865
+ case chunk2P4KXFB6_js.INPUT_FIELD_TYPE.Image:
8845
8866
  return /* @__PURE__ */ jsxRuntime.jsx(
8846
8867
  FileUploadInput,
8847
8868
  {
@@ -8852,7 +8873,7 @@ function FieldInput({
8852
8873
  classNames
8853
8874
  }
8854
8875
  );
8855
- case chunkQPRI2NII_js.INPUT_FIELD_TYPE.Email:
8876
+ case chunk2P4KXFB6_js.INPUT_FIELD_TYPE.Email:
8856
8877
  return /* @__PURE__ */ jsxRuntime.jsx(
8857
8878
  "input",
8858
8879
  {
@@ -8864,7 +8885,7 @@ function FieldInput({
8864
8885
  className: inputClass
8865
8886
  }
8866
8887
  );
8867
- case chunkQPRI2NII_js.INPUT_FIELD_TYPE.DateTime: {
8888
+ case chunk2P4KXFB6_js.INPUT_FIELD_TYPE.DateTime: {
8868
8889
  const stringValue = typeof value === "string" ? value : "";
8869
8890
  const [datePart, timePartRaw] = stringValue.includes("T") ? stringValue.split("T", 2) : [stringValue, ""];
8870
8891
  const timePart = (timePartRaw ?? "").slice(0, 5);
@@ -8903,7 +8924,7 @@ function FieldInput({
8903
8924
  )
8904
8925
  ] });
8905
8926
  }
8906
- case chunkQPRI2NII_js.INPUT_FIELD_TYPE.Time:
8927
+ case chunk2P4KXFB6_js.INPUT_FIELD_TYPE.Time:
8907
8928
  return /* @__PURE__ */ jsxRuntime.jsx(
8908
8929
  TimePicker,
8909
8930
  {
@@ -8914,7 +8935,7 @@ function FieldInput({
8914
8935
  "aria-label": field.name
8915
8936
  }
8916
8937
  );
8917
- case chunkQPRI2NII_js.INPUT_FIELD_TYPE.MultiSelect:
8938
+ case chunk2P4KXFB6_js.INPUT_FIELD_TYPE.MultiSelect:
8918
8939
  return /* @__PURE__ */ jsxRuntime.jsx(
8919
8940
  MultiSelectInput,
8920
8941
  {
@@ -8924,7 +8945,7 @@ function FieldInput({
8924
8945
  classNames
8925
8946
  }
8926
8947
  );
8927
- case chunkQPRI2NII_js.INPUT_FIELD_TYPE.DateRange:
8948
+ case chunk2P4KXFB6_js.INPUT_FIELD_TYPE.DateRange:
8928
8949
  return /* @__PURE__ */ jsxRuntime.jsx(
8929
8950
  DateRangeInput,
8930
8951
  {
@@ -8934,7 +8955,7 @@ function FieldInput({
8934
8955
  classNames
8935
8956
  }
8936
8957
  );
8937
- case chunkQPRI2NII_js.INPUT_FIELD_TYPE.Address:
8958
+ case chunk2P4KXFB6_js.INPUT_FIELD_TYPE.Address:
8938
8959
  return /* @__PURE__ */ jsxRuntime.jsx(
8939
8960
  AddressInput,
8940
8961
  {
@@ -8945,7 +8966,7 @@ function FieldInput({
8945
8966
  inputClass
8946
8967
  }
8947
8968
  );
8948
- case chunkQPRI2NII_js.INPUT_FIELD_TYPE.Location:
8969
+ case chunk2P4KXFB6_js.INPUT_FIELD_TYPE.Location:
8949
8970
  return /* @__PURE__ */ jsxRuntime.jsx(
8950
8971
  LocationInput,
8951
8972
  {
@@ -8956,7 +8977,7 @@ function FieldInput({
8956
8977
  inputClass
8957
8978
  }
8958
8979
  );
8959
- case chunkQPRI2NII_js.INPUT_FIELD_TYPE.Phone:
8980
+ case chunk2P4KXFB6_js.INPUT_FIELD_TYPE.Phone:
8960
8981
  return /* @__PURE__ */ jsxRuntime.jsx(
8961
8982
  PhoneInput,
8962
8983
  {
@@ -8967,7 +8988,7 @@ function FieldInput({
8967
8988
  inputClass
8968
8989
  }
8969
8990
  );
8970
- case chunkQPRI2NII_js.INPUT_FIELD_TYPE.Signature:
8991
+ case chunk2P4KXFB6_js.INPUT_FIELD_TYPE.Signature:
8971
8992
  return /* @__PURE__ */ jsxRuntime.jsx(
8972
8993
  SignatureInput,
8973
8994
  {
@@ -9000,7 +9021,7 @@ function FileUploadInput({
9000
9021
  const [isUploading, setIsUploading] = React14__default.default.useState(false);
9001
9022
  const fileUrl = typeof value === "string" ? value : void 0;
9002
9023
  const acceptedFormats = field.validation?.accepted_formats;
9003
- const accept = acceptedFormats ? acceptedFormats.map((f) => `.${f}`).join(",") : field.field_type === chunkQPRI2NII_js.INPUT_FIELD_TYPE.Image ? "image/*" : void 0;
9024
+ const accept = acceptedFormats ? acceptedFormats.map((f) => `.${f}`).join(",") : field.field_type === chunk2P4KXFB6_js.INPUT_FIELD_TYPE.Image ? "image/*" : void 0;
9004
9025
  const handleFile = async (file) => {
9005
9026
  if (!onFileUpload) return;
9006
9027
  if (field.validation?.max_size_mb) {
@@ -9018,7 +9039,7 @@ function FileUploadInput({
9018
9039
  }
9019
9040
  };
9020
9041
  return /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("space-y-2", classNames?.fileInput), children: fileUrl ? /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-3", children: [
9021
- field.field_type === chunkQPRI2NII_js.INPUT_FIELD_TYPE.Image && /* @__PURE__ */ jsxRuntime.jsx("img", { src: fileUrl, alt: "Uploaded", className: "w-16 h-16 object-cover rounded-md border border-border" }),
9042
+ field.field_type === chunk2P4KXFB6_js.INPUT_FIELD_TYPE.Image && /* @__PURE__ */ jsxRuntime.jsx("img", { src: fileUrl, alt: "Uploaded", className: "w-16 h-16 object-cover rounded-md border border-border" }),
9022
9043
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex-1 min-w-0", children: /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm text-foreground truncate", children: fileUrl.split("/").pop() }) }),
9023
9044
  /* @__PURE__ */ jsxRuntime.jsx(
9024
9045
  "button",
@@ -9044,7 +9065,7 @@ function FileUploadInput({
9044
9065
  }
9045
9066
  ),
9046
9067
  isUploading ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm text-muted-foreground", children: "Uploading..." }) : /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
9047
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm text-muted-foreground", children: field.placeholder || `Upload ${field.field_type === chunkQPRI2NII_js.INPUT_FIELD_TYPE.Image ? "image" : "file"}` }),
9068
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm text-muted-foreground", children: field.placeholder || `Upload ${field.field_type === chunk2P4KXFB6_js.INPUT_FIELD_TYPE.Image ? "image" : "file"}` }),
9048
9069
  acceptedFormats && /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-xs text-muted-foreground/60 mt-1", children: [
9049
9070
  acceptedFormats.map((f) => f.toUpperCase()).join(", "),
9050
9071
  field.validation?.max_size_mb && ` \xB7 Max ${field.validation.max_size_mb}MB`
@@ -9791,7 +9812,7 @@ function ProductCustomizerContent({
9791
9812
  const isBundle = productType === "bundle";
9792
9813
  const isDigital = productType === "digital";
9793
9814
  const isService = productType === "service";
9794
- const offersUnits = isService && chunkQPRI2NII_js.isMultiDayService(product);
9815
+ const offersUnits = isService && chunk2P4KXFB6_js.isMultiDayService(product);
9795
9816
  const isStandard = !isComposite && !isBundle;
9796
9817
  const hasVariants = isStandard && product.variants && product.variants.length > 0;
9797
9818
  const hasAddOns = isStandard && product.add_ons && product.add_ons.length > 0;
@@ -9908,7 +9929,7 @@ function ProductCustomizerContent({
9908
9929
  const validationMessage = !quoteEnabled ? REQUIRED_OPTIONS_MESSAGE : quoteError ? QUOTE_UNAVAILABLE_MESSAGE : !quoteIsReady ? QUOTE_LOADING_MESSAGE : null;
9909
9930
  const displayTotalPrice = React14.useMemo(() => {
9910
9931
  const total = quotedTotalPrice ?? localTotalPrice;
9911
- const multiplier = chunkQPRI2NII_js.serviceBillingMultiplier(product, {
9932
+ const multiplier = chunk2P4KXFB6_js.serviceBillingMultiplier(product, {
9912
9933
  quantity,
9913
9934
  units: unitsCount,
9914
9935
  scheduledStart: selectedSlot?.start_time,
@@ -10709,7 +10730,7 @@ function CartLineItemRow({
10709
10730
  const isOptimistic2 = item.isOptimistic === true;
10710
10731
  const lineTotal = chunkWMEC5JWN_js.parsePrice(unitPrice) * item.quantity;
10711
10732
  const imageUrl = item.product.image_url;
10712
- const variantLabel2 = item.variant ? chunkQPRI2NII_js.getVariantDisplayName(item.variant, item.product.name) : null;
10733
+ const variantLabel2 = item.variant ? chunk2P4KXFB6_js.getVariantDisplayName(item.variant, item.product.name) : null;
10713
10734
  return /* @__PURE__ */ jsxRuntime.jsxs(
10714
10735
  "div",
10715
10736
  {
@@ -10835,7 +10856,7 @@ function CartLineItemRow({
10835
10856
  input.field_name,
10836
10857
  ":"
10837
10858
  ] }),
10838
- /* @__PURE__ */ jsxRuntime.jsx("dd", { "data-cimplify-cart-input-value": true, className: "text-foreground m-0 truncate", children: input.field_type === chunkQPRI2NII_js.INPUT_FIELD_TYPE.File || input.field_type === chunkQPRI2NII_js.INPUT_FIELD_TYPE.Image ? String(input.value).split("/").pop() || "Uploaded file" : String(input.value) })
10859
+ /* @__PURE__ */ jsxRuntime.jsx("dd", { "data-cimplify-cart-input-value": true, className: "text-foreground m-0 truncate", children: input.field_type === chunk2P4KXFB6_js.INPUT_FIELD_TYPE.File || input.field_type === chunk2P4KXFB6_js.INPUT_FIELD_TYPE.Image ? String(input.value).split("/").pop() || "Uploaded file" : String(input.value) })
10839
10860
  ] }, input.field_id))
10840
10861
  }
10841
10862
  ),
@@ -10985,6 +11006,9 @@ function CartSummary({
10985
11006
  itemCount,
10986
11007
  subtotal,
10987
11008
  tax,
11009
+ taxRate,
11010
+ taxInclusive,
11011
+ taxJurisdictionLabel,
10988
11012
  total,
10989
11013
  isEmpty,
10990
11014
  isOptimistic: isOptimistic2,
@@ -11117,7 +11141,13 @@ function CartSummary({
11117
11141
  "data-cimplify-cart-tax": true,
11118
11142
  className: cn("flex items-baseline justify-between", classNames?.tax),
11119
11143
  children: [
11120
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground", children: "Tax" }),
11144
+ /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "flex items-baseline gap-1.5 text-muted-foreground", children: [
11145
+ taxInclusive ? "Tax, included in prices" : taxJurisdictionLabel ? `Sales tax, ${taxJurisdictionLabel}` : "Sales tax",
11146
+ taxRate != null && taxRate > 0 && /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "rounded-full bg-muted px-1.5 py-0.5 text-[11px] font-medium", children: [
11147
+ taxRate,
11148
+ "%"
11149
+ ] })
11150
+ ] }),
11121
11151
  /* @__PURE__ */ jsxRuntime.jsx(Price, { amount: tax, currency: displayCurrency, className: "tabular-nums" })
11122
11152
  ]
11123
11153
  }
@@ -11879,7 +11909,7 @@ function FoodProductCard({
11879
11909
  const tags = product.tags || [];
11880
11910
  const isSignature = product.metadata?.is_signature === true;
11881
11911
  const isNew = product.metadata?.is_new === true;
11882
- const isComposite = product.type === chunkQPRI2NII_js.PRODUCT_TYPE.Composite;
11912
+ const isComposite = product.type === chunk2P4KXFB6_js.PRODUCT_TYPE.Composite;
11883
11913
  return /* @__PURE__ */ jsxRuntime.jsxs(CardShell, { product, renderLink, className, children: [
11884
11914
  /* @__PURE__ */ jsxRuntime.jsxs(CardImage, { src: image, alt: product.name, aspectRatio: "square", renderImage, children: [
11885
11915
  isSignature && /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "absolute top-3 left-3 inline-flex items-center gap-1 text-[11px] font-semibold tracking-wide bg-amber-50 text-amber-700 border border-amber-200/60 px-2 py-0.5 rounded-md", children: [
@@ -12646,36 +12676,36 @@ var BUILT_IN_CARDS = {
12646
12676
  ["composite" /* Composite */]: CompositeProductCard,
12647
12677
  ["subscription" /* Subscription */]: SubscriptionCard
12648
12678
  };
12649
- var RENTAL_UNITS = /* @__PURE__ */ new Set([chunkQPRI2NII_js.DURATION_UNIT.Days, chunkQPRI2NII_js.DURATION_UNIT.Hours]);
12650
- var LEASE_UNITS = /* @__PURE__ */ new Set([chunkQPRI2NII_js.DURATION_UNIT.Weeks, chunkQPRI2NII_js.DURATION_UNIT.Months, chunkQPRI2NII_js.DURATION_UNIT.Years]);
12679
+ var RENTAL_UNITS = /* @__PURE__ */ new Set([chunk2P4KXFB6_js.DURATION_UNIT.Days, chunk2P4KXFB6_js.DURATION_UNIT.Hours]);
12680
+ var LEASE_UNITS = /* @__PURE__ */ new Set([chunk2P4KXFB6_js.DURATION_UNIT.Weeks, chunk2P4KXFB6_js.DURATION_UNIT.Months, chunk2P4KXFB6_js.DURATION_UNIT.Years]);
12651
12681
  function resolveCardVariant(product) {
12652
- if (product.type === chunkQPRI2NII_js.PRODUCT_TYPE.Bundle) {
12682
+ if (product.type === chunk2P4KXFB6_js.PRODUCT_TYPE.Bundle) {
12653
12683
  return "bundle" /* Bundle */;
12654
12684
  }
12655
- if (product.type === chunkQPRI2NII_js.PRODUCT_TYPE.Composite) {
12685
+ if (product.type === chunk2P4KXFB6_js.PRODUCT_TYPE.Composite) {
12656
12686
  return "composite" /* Composite */;
12657
12687
  }
12658
12688
  if (product.quantity_pricing && product.quantity_pricing.length > 1) {
12659
12689
  return "wholesale" /* Wholesale */;
12660
12690
  }
12661
- if (product.type === chunkQPRI2NII_js.PRODUCT_TYPE.Digital) {
12691
+ if (product.type === chunk2P4KXFB6_js.PRODUCT_TYPE.Digital) {
12662
12692
  return "digital" /* Digital */;
12663
12693
  }
12664
- if (product.type === chunkQPRI2NII_js.PRODUCT_TYPE.Service) {
12694
+ if (product.type === chunk2P4KXFB6_js.PRODUCT_TYPE.Service) {
12665
12695
  switch (product.boundary_kind) {
12666
- case chunkQPRI2NII_js.BOUNDARY_KIND.CheckInOut:
12696
+ case chunk2P4KXFB6_js.BOUNDARY_KIND.CheckInOut:
12667
12697
  return "accommodation" /* Accommodation */;
12668
- case chunkQPRI2NII_js.BOUNDARY_KIND.MoveInOut:
12698
+ case chunk2P4KXFB6_js.BOUNDARY_KIND.MoveInOut:
12669
12699
  return "lease" /* Lease */;
12670
- case chunkQPRI2NII_js.BOUNDARY_KIND.PickupReturn:
12671
- case chunkQPRI2NII_js.BOUNDARY_KIND.DeliveryCollection:
12672
- case chunkQPRI2NII_js.BOUNDARY_KIND.AccessVacate:
12700
+ case chunk2P4KXFB6_js.BOUNDARY_KIND.PickupReturn:
12701
+ case chunk2P4KXFB6_js.BOUNDARY_KIND.DeliveryCollection:
12702
+ case chunk2P4KXFB6_js.BOUNDARY_KIND.AccessVacate:
12673
12703
  return "rental" /* Rental */;
12674
12704
  }
12675
12705
  if (product.duration_unit && RENTAL_UNITS.has(product.duration_unit)) {
12676
12706
  return "rental" /* Rental */;
12677
12707
  }
12678
- if (product.duration_unit === chunkQPRI2NII_js.DURATION_UNIT.Nights) {
12708
+ if (product.duration_unit === chunk2P4KXFB6_js.DURATION_UNIT.Nights) {
12679
12709
  return "accommodation" /* Accommodation */;
12680
12710
  }
12681
12711
  if (product.duration_unit && LEASE_UNITS.has(product.duration_unit)) {
@@ -12686,10 +12716,10 @@ function resolveCardVariant(product) {
12686
12716
  }
12687
12717
  return "standard" /* Standard */;
12688
12718
  }
12689
- if (product.render_hint === chunkQPRI2NII_js.RENDER_HINT.Food) {
12719
+ if (product.render_hint === chunk2P4KXFB6_js.RENDER_HINT.Food) {
12690
12720
  return "food" /* Food */;
12691
12721
  }
12692
- if (product.render_hint === chunkQPRI2NII_js.RENDER_HINT.Physical) {
12722
+ if (product.render_hint === chunk2P4KXFB6_js.RENDER_HINT.Physical) {
12693
12723
  return "retail" /* Retail */;
12694
12724
  }
12695
12725
  return "retail" /* Retail */;
@@ -12969,14 +12999,14 @@ var PRESET_LABELS = {
12969
12999
  move_in_out: { start: "Move-in", end: "Move-out" }
12970
13000
  };
12971
13001
  function defaultBoundaryKind(unit) {
12972
- return unit === chunkQPRI2NII_js.DURATION_UNIT.Nights ? chunkQPRI2NII_js.BOUNDARY_KIND.CheckInOut : chunkQPRI2NII_js.BOUNDARY_KIND.PickupReturn;
13002
+ return unit === chunk2P4KXFB6_js.DURATION_UNIT.Nights ? chunk2P4KXFB6_js.BOUNDARY_KIND.CheckInOut : chunk2P4KXFB6_js.BOUNDARY_KIND.PickupReturn;
12973
13003
  }
12974
13004
  function resolveBoundaryKind(product) {
12975
13005
  return product.boundary_kind ?? defaultBoundaryKind(product.duration_unit);
12976
13006
  }
12977
13007
  function getBoundaryLabels(product) {
12978
13008
  const kind = resolveBoundaryKind(product);
12979
- if (kind === chunkQPRI2NII_js.BOUNDARY_KIND.Custom) {
13009
+ if (kind === chunk2P4KXFB6_js.BOUNDARY_KIND.Custom) {
12980
13010
  return {
12981
13011
  start: product.boundary_start_label?.trim() || "Start",
12982
13012
  end: product.boundary_end_label?.trim() || "End"
@@ -15064,7 +15094,7 @@ function DefaultProductLayout({
15064
15094
  className
15065
15095
  }) {
15066
15096
  const [selectedVariantId, setSelectedVariantId] = React14__default.default.useState();
15067
- const images = chunkQPRI2NII_js.resolveGallery(product, selectedVariantId);
15097
+ const images = chunk2P4KXFB6_js.resolveGallery(product, selectedVariantId);
15068
15098
  const currency = chunkWMEC5JWN_js.getProductCurrency(product);
15069
15099
  const hasRange = product.quantity_pricing && product.quantity_pricing.length > 1 || product.variants && product.variants.length > 1;
15070
15100
  const onSale = chunkWMEC5JWN_js.isOnSale(product);
@@ -15711,25 +15741,25 @@ function resolveTemplateKey(product) {
15711
15741
  if (typeof metaTemplate === "string" && metaTemplate.trim()) {
15712
15742
  return metaTemplate.trim();
15713
15743
  }
15714
- if (product.type === chunkQPRI2NII_js.PRODUCT_TYPE.Bundle) {
15744
+ if (product.type === chunk2P4KXFB6_js.PRODUCT_TYPE.Bundle) {
15715
15745
  return "bundle" /* Bundle */;
15716
15746
  }
15717
- if (product.type === chunkQPRI2NII_js.PRODUCT_TYPE.Composite) {
15747
+ if (product.type === chunk2P4KXFB6_js.PRODUCT_TYPE.Composite) {
15718
15748
  return "composite" /* Composite */;
15719
15749
  }
15720
15750
  if (product.quantity_pricing && product.quantity_pricing.length > 1) {
15721
15751
  return "wholesale" /* Wholesale */;
15722
15752
  }
15723
- if (product.type === chunkQPRI2NII_js.PRODUCT_TYPE.Service) {
15753
+ if (product.type === chunk2P4KXFB6_js.PRODUCT_TYPE.Service) {
15724
15754
  return "service" /* Service */;
15725
15755
  }
15726
- if (product.type === chunkQPRI2NII_js.PRODUCT_TYPE.Digital) {
15756
+ if (product.type === chunk2P4KXFB6_js.PRODUCT_TYPE.Digital) {
15727
15757
  return "digital" /* Digital */;
15728
15758
  }
15729
- if (product.render_hint === chunkQPRI2NII_js.RENDER_HINT.Food) {
15759
+ if (product.render_hint === chunk2P4KXFB6_js.RENDER_HINT.Food) {
15730
15760
  return "food" /* Food */;
15731
15761
  }
15732
- if (product.render_hint === chunkQPRI2NII_js.RENDER_HINT.Physical) {
15762
+ if (product.render_hint === chunk2P4KXFB6_js.RENDER_HINT.Physical) {
15733
15763
  return "physical" /* Physical */;
15734
15764
  }
15735
15765
  return "default" /* Default */;
@@ -18115,7 +18145,7 @@ function chatTimeline(messages, options = {}) {
18115
18145
  const { readAt = null, rendersPrograms = false } = options;
18116
18146
  const partitioned = partitionMessages(messages);
18117
18147
  const bubbles = partitioned.bubbles.filter(
18118
- (message) => message.sender_type === "system" || message.attachments.length > 0 || chunkQPRI2NII_js.chatMessageCards(message).length > 0 || rendersPrograms && hasProgram(message.content) || (message.sender_type === "customer" ? message.content.trim() !== "" : proseOf(message.content) !== "")
18148
+ (message) => message.sender_type === "system" || message.attachments.length > 0 || chunk2P4KXFB6_js.chatMessageCards(message).length > 0 || rendersPrograms && hasProgram(message.content) || (message.sender_type === "customer" ? message.content.trim() !== "" : proseOf(message.content) !== "")
18119
18149
  );
18120
18150
  let firstUnreadId;
18121
18151
  let unreadOnOpen = 0;
@@ -20201,7 +20231,7 @@ function ChatKitProgram({ source, onAction }) {
20201
20231
  return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "w-full max-w-[290px]", children: /* @__PURE__ */ jsxRuntime.jsx(GenUIView, { root: parsed.root, components: CHAT_GENUI_COMPONENTS, onAction }) });
20202
20232
  }
20203
20233
  function ChatReplyCards({ message, currency, onAction }) {
20204
- const cards = chunkQPRI2NII_js.chatMessageCards(message);
20234
+ const cards = chunk2P4KXFB6_js.chatMessageCards(message);
20205
20235
  if (cards.length === 0) return null;
20206
20236
  return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "scrollbar-hide flex max-w-full gap-2 overflow-x-auto pl-[30px]", children: cards.map((card, index) => /* @__PURE__ */ jsxRuntime.jsx(ReplyCardView, { card, currency, onAction }, index)) });
20207
20237
  }
@@ -20258,7 +20288,20 @@ function ReplyCardView({
20258
20288
  }
20259
20289
  );
20260
20290
  }
20261
- var MAX_ATTACHMENT_BYTES = 5 * 1024 * 1024;
20291
+ var MAX_ATTACHMENT_BYTES = 25 * 1024 * 1024;
20292
+ var DOCUMENT_MIME_TYPES = /* @__PURE__ */ new Set([
20293
+ "application/pdf",
20294
+ "text/plain",
20295
+ "text/csv",
20296
+ "application/msword",
20297
+ "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
20298
+ "application/vnd.ms-excel",
20299
+ "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
20300
+ ]);
20301
+ var ATTACHMENT_ACCEPT = ["image/*", ...DOCUMENT_MIME_TYPES].join(",");
20302
+ function isAllowedAttachment(file) {
20303
+ return file.type.startsWith("image/") || DOCUMENT_MIME_TYPES.has(file.type);
20304
+ }
20262
20305
  var KEEP_DISMISSED_KEY = "cimplify_keep_chat_dismissed";
20263
20306
  var AT_BOTTOM_SLACK_PX = 48;
20264
20307
  function ChatWidget({
@@ -20304,16 +20347,18 @@ function ChatWidget({
20304
20347
  openIfExisting
20305
20348
  } = useChat({ client, pollInterval });
20306
20349
  const showTyping = isSending || awaitingReply;
20307
- const attachPhoto = React14.useCallback(
20350
+ const attachFile = React14.useCallback(
20308
20351
  async (file) => {
20309
20352
  if (!client) return;
20310
20353
  setAttachError(null);
20311
- if (!file.type.startsWith("image/")) {
20312
- setAttachError(new chunkNIOUSKQQ_js.CimplifyError("invalid_attachment", "Only photos can be attached."));
20354
+ if (!isAllowedAttachment(file)) {
20355
+ setAttachError(
20356
+ new chunkNIOUSKQQ_js.CimplifyError("invalid_attachment", "Only photos and documents can be attached.")
20357
+ );
20313
20358
  return;
20314
20359
  }
20315
20360
  if (file.size > MAX_ATTACHMENT_BYTES) {
20316
- setAttachError(new chunkNIOUSKQQ_js.CimplifyError("attachment_too_large", "Photos must be under 5MB."));
20361
+ setAttachError(new chunkNIOUSKQQ_js.CimplifyError("attachment_too_large", "Files must be under 25MB."));
20317
20362
  return;
20318
20363
  }
20319
20364
  const uploaded = await client.uploads.upload(file);
@@ -20405,7 +20450,7 @@ function ChatWidget({
20405
20450
  onCancelReply: () => setReplyTo(null),
20406
20451
  onRequestHuman: () => void requestHuman(),
20407
20452
  onLoadOlder: () => void loadOlder(),
20408
- onAttach: attachPhoto,
20453
+ onAttach: attachFile,
20409
20454
  onStartConversation: startConversation,
20410
20455
  currency,
20411
20456
  onGenUIAction,
@@ -21029,7 +21074,7 @@ function ChatInput({
21029
21074
  {
21030
21075
  ref: fileRef,
21031
21076
  type: "file",
21032
- accept: "image/*",
21077
+ accept: ATTACHMENT_ACCEPT,
21033
21078
  className: "hidden",
21034
21079
  "aria-hidden": "true",
21035
21080
  tabIndex: -1,
@@ -21256,7 +21301,7 @@ Object.defineProperty(exports, "splitGenUIContent", {
21256
21301
  });
21257
21302
  Object.defineProperty(exports, "getVariantDisplayName", {
21258
21303
  enumerable: true,
21259
- get: function () { return chunkQPRI2NII_js.getVariantDisplayName; }
21304
+ get: function () { return chunk2P4KXFB6_js.getVariantDisplayName; }
21260
21305
  });
21261
21306
  exports.AccommodationCard = AccommodationCard;
21262
21307
  exports.AccountContent = AccountContent;