@fluid-app/portal-sdk 0.1.113 → 0.1.115

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 (90) hide show
  1. package/dist/{AppDownloadScreen-SmPf0S74.mjs → AppDownloadScreen-85-mmB0D.mjs} +2 -2
  2. package/dist/{AppDownloadScreen-SmPf0S74.mjs.map → AppDownloadScreen-85-mmB0D.mjs.map} +1 -1
  3. package/dist/{AppDownloadScreen-BRM2422D.cjs → AppDownloadScreen-DjeXmc3C.cjs} +2 -2
  4. package/dist/{AppDownloadScreen-CwAEQCXb.cjs → AppDownloadScreen-zvqM2Niu.cjs} +2 -2
  5. package/dist/{AppDownloadScreen-CwAEQCXb.cjs.map → AppDownloadScreen-zvqM2Niu.cjs.map} +1 -1
  6. package/dist/{ContactsScreen-qvJ0gr2D.cjs → ContactsScreen-CBjv2bLC.cjs} +3 -3
  7. package/dist/{ContactsScreen-BTOnIpof.mjs → ContactsScreen-CL6sD1Eb.mjs} +4 -4
  8. package/dist/ContactsScreen-CL6sD1Eb.mjs.map +1 -0
  9. package/dist/{ContactsScreen-BaDlTbEn.cjs → ContactsScreen-CjMFgsml.cjs} +4 -4
  10. package/dist/ContactsScreen-CjMFgsml.cjs.map +1 -0
  11. package/dist/{FluidProvider-CMGu8wbx.mjs → FluidProvider-DV87ZCCY.mjs} +2 -1
  12. package/dist/{FluidProvider-CMGu8wbx.mjs.map → FluidProvider-DV87ZCCY.mjs.map} +1 -1
  13. package/dist/{FluidProvider-DEHDER6T.cjs → FluidProvider-RXzH-KA9.cjs} +2 -1
  14. package/dist/{FluidProvider-DEHDER6T.cjs.map → FluidProvider-RXzH-KA9.cjs.map} +1 -1
  15. package/dist/{MessagingScreen-CgWPOknA.cjs → MessagingScreen-CkXV8WHH.cjs} +3 -3
  16. package/dist/{MessagingScreen-CgWPOknA.cjs.map → MessagingScreen-CkXV8WHH.cjs.map} +1 -1
  17. package/dist/{MessagingScreen-S0UYG7jh.mjs → MessagingScreen-CtH_ycNV.mjs} +3 -3
  18. package/dist/{MessagingScreen-S0UYG7jh.mjs.map → MessagingScreen-CtH_ycNV.mjs.map} +1 -1
  19. package/dist/{MessagingScreen-DJB1wth6.mjs → MessagingScreen-DRcY1N_8.mjs} +3 -2
  20. package/dist/{MessagingScreen-B2c7pNrj.cjs → MessagingScreen-Dj1NK0CP.cjs} +2 -2
  21. package/dist/{MySiteScreen-Bmb7wlMo.mjs → MySiteScreen-BvLsBrYD.mjs} +2 -2
  22. package/dist/{MySiteScreen-Bmb7wlMo.mjs.map → MySiteScreen-BvLsBrYD.mjs.map} +1 -1
  23. package/dist/{MySiteScreen-BqYWp5oM.cjs → MySiteScreen-BzO3lthV.cjs} +2 -2
  24. package/dist/{MySiteScreen-DRJtUSEv.cjs → MySiteScreen-DTW2mzIG.cjs} +2 -2
  25. package/dist/{MySiteScreen-DRJtUSEv.cjs.map → MySiteScreen-DTW2mzIG.cjs.map} +1 -1
  26. package/dist/{OrdersScreen-LvY3Gpit.mjs → OrdersScreen-BJETamou.mjs} +4 -4
  27. package/dist/{OrdersScreen-LvY3Gpit.mjs.map → OrdersScreen-BJETamou.mjs.map} +1 -1
  28. package/dist/{OrdersScreen-nPfPQg5l.cjs → OrdersScreen-C5QnwlAJ.cjs} +3 -3
  29. package/dist/{OrdersScreen-DjWeLpzq.cjs → OrdersScreen-gj1GgflA.cjs} +4 -4
  30. package/dist/{OrdersScreen-DjWeLpzq.cjs.map → OrdersScreen-gj1GgflA.cjs.map} +1 -1
  31. package/dist/{ProductsScreen-DI5oszM3.cjs → ProductsScreen-CJ4c9gD7.cjs} +2 -2
  32. package/dist/{ProductsScreen-84YTdLr4.mjs → ProductsScreen-D21JX2Fi.mjs} +3 -3
  33. package/dist/{ProductsScreen-84YTdLr4.mjs.map → ProductsScreen-D21JX2Fi.mjs.map} +1 -1
  34. package/dist/{ProductsScreen-BF6qZxGW.cjs → ProductsScreen-DFDg4YKH.cjs} +3 -3
  35. package/dist/{ProductsScreen-BF6qZxGW.cjs.map → ProductsScreen-DFDg4YKH.cjs.map} +1 -1
  36. package/dist/{ProductsScreen-Bxb-GTkK.mjs → ProductsScreen-cUnZTQXj.mjs} +5 -2
  37. package/dist/{ProfileScreen-C81VzV0g.cjs → ProfileScreen-6ncejUCd.cjs} +5 -5
  38. package/dist/{ProfileScreen-C81VzV0g.cjs.map → ProfileScreen-6ncejUCd.cjs.map} +1 -1
  39. package/dist/{ProfileScreen-BxfNuK3_.cjs → ProfileScreen-BFOtOkTV.cjs} +2 -2
  40. package/dist/{ProfileScreen-fBv7Z8WI.mjs → ProfileScreen-DtRy_GWa.mjs} +5 -5
  41. package/dist/{ProfileScreen-fBv7Z8WI.mjs.map → ProfileScreen-DtRy_GWa.mjs.map} +1 -1
  42. package/dist/{ShareablesScreen-BA7_bvpL.mjs → ShareablesScreen-BXBZ7Z-9.mjs} +5 -5
  43. package/dist/{ShareablesScreen-BA7_bvpL.mjs.map → ShareablesScreen-BXBZ7Z-9.mjs.map} +1 -1
  44. package/dist/{ShareablesScreen-BZ56t5nh.cjs → ShareablesScreen-C5pk-L4i.cjs} +2 -2
  45. package/dist/{ShareablesScreen-DEq59fgF.mjs → ShareablesScreen-Ci_HfDpD.mjs} +6 -2
  46. package/dist/{ShareablesScreen-yLxHmfcg.cjs → ShareablesScreen-GggsoaXv.cjs} +5 -5
  47. package/dist/{ShareablesScreen-yLxHmfcg.cjs.map → ShareablesScreen-GggsoaXv.cjs.map} +1 -1
  48. package/dist/{ShopScreen-CBMoK7mb.mjs → ShopScreen-DCV6T_CN.mjs} +4 -4
  49. package/dist/{ShopScreen-CBMoK7mb.mjs.map → ShopScreen-DCV6T_CN.mjs.map} +1 -1
  50. package/dist/{ShopScreen-CyzjPqHN.cjs → ShopScreen-DRChaCjS.cjs} +2 -2
  51. package/dist/{ShopScreen-B6xBjA_s.cjs → ShopScreen-DW7BHdjS.cjs} +4 -4
  52. package/dist/{ShopScreen-B6xBjA_s.cjs.map → ShopScreen-DW7BHdjS.cjs.map} +1 -1
  53. package/dist/{SubscriptionsScreen-CWyix7Xl.cjs → SubscriptionsScreen-CSEc917H.cjs} +3 -3
  54. package/dist/{SubscriptionsScreen-CXk8PnZW.mjs → SubscriptionsScreen-DGKW-i80.mjs} +32 -32
  55. package/dist/SubscriptionsScreen-DGKW-i80.mjs.map +1 -0
  56. package/dist/{SubscriptionsScreen-BlVX2TKS.cjs → SubscriptionsScreen-aQBXIOGH.cjs} +31 -31
  57. package/dist/SubscriptionsScreen-aQBXIOGH.cjs.map +1 -0
  58. package/dist/index.cjs +35 -35
  59. package/dist/index.mjs +35 -35
  60. package/dist/{order-detail-Bq7_UZ75.cjs → order-detail-B1lvW7Yr.cjs} +22 -22
  61. package/dist/order-detail-B1lvW7Yr.cjs.map +1 -0
  62. package/dist/{order-detail-B8jb-YB6.mjs → order-detail-B5cxyosZ.mjs} +23 -23
  63. package/dist/order-detail-B5cxyosZ.mjs.map +1 -0
  64. package/dist/{use-account-clients-BinrTgf5.mjs → use-account-clients-DaJbAmJW.mjs} +2 -2
  65. package/dist/{use-account-clients-BinrTgf5.mjs.map → use-account-clients-DaJbAmJW.mjs.map} +1 -1
  66. package/dist/{use-account-clients-DF4kfbkl.cjs → use-account-clients-DsnyF503.cjs} +2 -2
  67. package/dist/{use-account-clients-DF4kfbkl.cjs.map → use-account-clients-DsnyF503.cjs.map} +1 -1
  68. package/dist/{use-current-user-22OsVRVp.cjs → use-current-user-DdOenMYu.cjs} +3 -3
  69. package/dist/{use-current-user-22OsVRVp.cjs.map → use-current-user-DdOenMYu.cjs.map} +1 -1
  70. package/dist/{use-current-user-CpTGZnKd.mjs → use-current-user-YXY2vnPc.mjs} +3 -3
  71. package/dist/{use-current-user-CpTGZnKd.mjs.map → use-current-user-YXY2vnPc.mjs.map} +1 -1
  72. package/dist/{use-customer-account-BF2aDDqh.mjs → use-customer-account-CceDA_tz.mjs} +3 -3
  73. package/dist/{use-customer-account-BF2aDDqh.mjs.map → use-customer-account-CceDA_tz.mjs.map} +1 -1
  74. package/dist/{use-customer-account-CAIi3P-_.cjs → use-customer-account-fM3dyrQa.cjs} +3 -3
  75. package/dist/{use-customer-account-CAIi3P-_.cjs.map → use-customer-account-fM3dyrQa.cjs.map} +1 -1
  76. package/dist/{use-fluid-api-B3ezbAHw.cjs → use-fluid-api-Bv3G906Q.cjs} +2 -2
  77. package/dist/{use-fluid-api-B3ezbAHw.cjs.map → use-fluid-api-Bv3G906Q.cjs.map} +1 -1
  78. package/dist/{use-fluid-api-DxSS-pTC.mjs → use-fluid-api-CvCyT9Qg.mjs} +2 -2
  79. package/dist/{use-fluid-api-DxSS-pTC.mjs.map → use-fluid-api-CvCyT9Qg.mjs.map} +1 -1
  80. package/dist/{use-fluid-auth-DGFYiYO4.cjs → use-fluid-auth-BLFWj2Cx.cjs} +2 -2
  81. package/dist/{use-fluid-auth-DGFYiYO4.cjs.map → use-fluid-auth-BLFWj2Cx.cjs.map} +1 -1
  82. package/dist/{use-fluid-auth--1vh0Jal.mjs → use-fluid-auth-C2pSlmtB.mjs} +2 -2
  83. package/dist/{use-fluid-auth--1vh0Jal.mjs.map → use-fluid-auth-C2pSlmtB.mjs.map} +1 -1
  84. package/package.json +16 -16
  85. package/dist/ContactsScreen-BTOnIpof.mjs.map +0 -1
  86. package/dist/ContactsScreen-BaDlTbEn.cjs.map +0 -1
  87. package/dist/SubscriptionsScreen-BlVX2TKS.cjs.map +0 -1
  88. package/dist/SubscriptionsScreen-CXk8PnZW.mjs.map +0 -1
  89. package/dist/order-detail-B8jb-YB6.mjs.map +0 -1
  90. package/dist/order-detail-Bq7_UZ75.cjs.map +0 -1
@@ -212,8 +212,8 @@ function StatusBadge({ color, dot, size = "md", className, children }) {
212
212
  function TableColumn({ label, sortable = true, className, onSortClick, sortBy, sortData, chevronUpIcon, chevronDownIcon }) {
213
213
  const hideUpIcon = sortData?.column !== sortBy || sortData?.column === sortBy && sortData?.direction === "asc";
214
214
  const hideDownIcon = sortData?.column !== sortBy || sortData?.column === sortBy && sortData?.direction === "desc";
215
- return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("th", {
216
- className: require_src.cn("group cursor-pointer px-3 py-2 text-left text-xs font-medium text-gray-500 transition-colors duration-200", "hover:text-blue-600", className),
215
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_src.TableHead, {
216
+ className: require_src.cn("group text-muted-foreground cursor-pointer px-3 text-xs transition-colors duration-200", "hover:text-primary", className),
217
217
  onClick: () => sortable && onSortClick?.(sortBy ?? ""),
218
218
  children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
219
219
  className: "relative flex items-center",
@@ -226,13 +226,13 @@ function TableColumn({ label, sortable = true, className, onSortClick, sortBy, s
226
226
  alt: "",
227
227
  width: 12,
228
228
  height: 12,
229
- className: require_src.cn("h-2.5 w-2.5 text-gray-400 transition-colors duration-200 group-hover:text-blue-600", hideUpIcon && "opacity-0", sortData?.column !== sortBy && "group-hover:opacity-100")
229
+ className: require_src.cn("text-muted-foreground group-hover:text-primary h-2.5 w-2.5 transition-colors duration-200", hideUpIcon && "opacity-0", sortData?.column !== sortBy && "group-hover:opacity-100")
230
230
  }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("img", {
231
231
  src: chevronDownIcon,
232
232
  alt: "",
233
233
  width: 12,
234
234
  height: 12,
235
- className: require_src.cn("h-2.5 w-2.5 text-gray-400 transition-colors duration-200 group-hover:text-blue-600", hideDownIcon && "opacity-0", sortData?.column !== sortBy && "group-hover:opacity-100")
235
+ className: require_src.cn("text-muted-foreground group-hover:text-primary h-2.5 w-2.5 transition-colors duration-200", hideDownIcon && "opacity-0", sortData?.column !== sortBy && "group-hover:opacity-100")
236
236
  })]
237
237
  })
238
238
  })]
@@ -360,8 +360,8 @@ function OrdersList({ customerId, onOrderClick, onSubscriptionClick, t, pageSize
360
360
  }, order.id))
361
361
  }),
362
362
  /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
363
- className: "hidden overflow-x-auto md:block",
364
- children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("table", {
363
+ className: "hidden md:block",
364
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(require_src.Table, {
365
365
  className: "min-w-full table-fixed",
366
366
  children: [
367
367
  /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("colgroup", { children: [
@@ -369,10 +369,10 @@ function OrdersList({ customerId, onOrderClick, onSubscriptionClick, t, pageSize
369
369
  /* @__PURE__ */ (0, react_jsx_runtime.jsx)("col", { className: "w-1/3 min-w-[100px]" }),
370
370
  /* @__PURE__ */ (0, react_jsx_runtime.jsx)("col", { className: "w-[26.67%] min-w-[100px]" })
371
371
  ] }),
372
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)("thead", {
372
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_src.TableHeader, {
373
373
  className: "bg-muted",
374
- children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("tr", {
375
- className: "h-10",
374
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(require_src.TableRow, {
375
+ className: "hover:bg-muted h-10",
376
376
  children: [
377
377
  /* @__PURE__ */ (0, react_jsx_runtime.jsx)(TableColumn, {
378
378
  label: t("product"),
@@ -389,33 +389,33 @@ function OrdersList({ customerId, onOrderClick, onSubscriptionClick, t, pageSize
389
389
  ]
390
390
  })
391
391
  }),
392
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)("tbody", {
393
- className: "divide-border bg-background divide-y",
394
- children: isLoading ? Array(5).fill(0).map((_, index) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("tr", { children: [
395
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)("td", {
392
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_src.TableBody, {
393
+ className: "bg-background",
394
+ children: isLoading ? Array(5).fill(0).map((_, index) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(require_src.TableRow, { children: [
395
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_src.TableCell, {
396
396
  className: "px-3 py-4",
397
397
  children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
398
398
  className: "flex items-center space-x-2",
399
399
  children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_src.Skeleton, { className: "h-9 w-9 rounded-md" }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_src.Skeleton, { className: "h-4 w-32" })]
400
400
  })
401
401
  }),
402
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)("td", {
402
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_src.TableCell, {
403
403
  className: "px-3 py-4",
404
404
  children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_src.Skeleton, { className: "h-4 w-24" })
405
405
  }),
406
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)("td", {
406
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_src.TableCell, {
407
407
  className: "px-3 py-4",
408
408
  children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_src.Skeleton, { className: "h-4 w-24" })
409
409
  })
410
- ] }, `skeleton-${index}`)) : ordersList.length === 0 ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("tr", { children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("td", {
410
+ ] }, `skeleton-${index}`)) : ordersList.length === 0 ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_src.TableRow, { children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_src.TableCell, {
411
411
  colSpan: 3,
412
412
  className: "text-muted-foreground px-3 py-8 text-center text-sm",
413
413
  children: searchTerm ? t("no_matching_orders") : t("no_orders_found")
414
- }) }) : ordersList.map((order) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("tr", {
415
- className: "hover:bg-accent cursor-pointer transition-colors duration-200 ease-in-out",
414
+ }) }) : ordersList.map((order) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(require_src.TableRow, {
415
+ className: "cursor-pointer",
416
416
  onClick: () => onOrderClick(order),
417
417
  children: [
418
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)("td", {
418
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_src.TableCell, {
419
419
  className: "text-muted-foreground px-3 py-4 text-sm",
420
420
  children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
421
421
  className: "flex max-w-[280px] flex-row items-center space-x-3",
@@ -456,11 +456,11 @@ function OrdersList({ customerId, onOrderClick, onSubscriptionClick, t, pageSize
456
456
  })]
457
457
  })
458
458
  }),
459
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)("td", {
459
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_src.TableCell, {
460
460
  className: "text-muted-foreground px-3 py-4 text-sm whitespace-nowrap",
461
461
  children: new Date(order.created_at).toLocaleDateString()
462
462
  }),
463
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)("td", {
463
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_src.TableCell, {
464
464
  className: "text-foreground px-3 py-4 text-sm whitespace-nowrap",
465
465
  children: formatOrderTotal(order)
466
466
  })
@@ -958,4 +958,4 @@ Object.defineProperty(exports, "TableColumn", {
958
958
  }
959
959
  });
960
960
 
961
- //# sourceMappingURL=order-detail-Bq7_UZ75.cjs.map
961
+ //# sourceMappingURL=order-detail-B1lvW7Yr.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"order-detail-B1lvW7Yr.cjs","names":["Search","Input","cn","ChevronLeft","ChevronRight","cn","TableHead","cn","Skeleton","Table","TableHeader","TableRow","TableBody","TableCell","Skeleton","Truck"],"sources":["../../../orders/core/src/context.ts","../../../orders/core/src/provider.tsx","../../../orders/core/src/query-keys.ts","../../../orders/core/src/hooks/use-order.ts","../../../orders/core/src/hooks/use-customer-orders.ts","../../../orders/core/src/utils/format-order-total.ts","../../../orders/ui/src/components/search-input.tsx","../../../orders/ui/src/components/pagination-footer.tsx","../../../orders/ui/src/components/status-badge.tsx","../../../orders/ui/src/components/table-column.tsx","../../../orders/ui/src/components/orders-list.tsx","../../../orders/ui/src/lib/format.ts","../../../orders/ui/src/components/order-status-badge.tsx","../../../orders/ui/src/components/order-detail.tsx"],"sourcesContent":["import { createContext, useContext } from \"react\";\nimport type { OrdersApi } from \"./orders-api\";\n\nconst OrdersApiContext = createContext<OrdersApi | null>(null);\n\nexport const OrdersApiProvider = OrdersApiContext.Provider;\n\nexport function useOrdersApi(): OrdersApi {\n const api = useContext(OrdersApiContext);\n if (!api) {\n throw new Error(\"useOrdersApi must be used within an OrdersCoreProvider\");\n }\n return api;\n}\n","import type { JSX, ReactNode } from \"react\";\nimport type { OrdersApi } from \"./orders-api\";\nimport { OrdersApiProvider } from \"./context\";\n\nexport interface OrdersCoreProviderProps {\n api: OrdersApi;\n children: ReactNode;\n}\n\nexport function OrdersCoreProvider({\n api,\n children,\n}: OrdersCoreProviderProps): JSX.Element {\n return <OrdersApiProvider value={api}>{children}</OrdersApiProvider>;\n}\n","import type { orders } from \"./types\";\n\nexport const ordersKeys = {\n all: [\"orders\"] as const,\n list: (params?: orders.FetchOrdersParams) =>\n [...ordersKeys.all, \"list\", params] as const,\n detail: (orderToken: string) =>\n [...ordersKeys.all, \"detail\", orderToken] as const,\n} as const;\n","import { useQuery } from \"@tanstack/react-query\";\nimport { ordersKeys } from \"../query-keys\";\nimport { useOrdersApi } from \"../context\";\n\nexport function useOrder(orderToken: string, options?: { enabled?: boolean }) {\n const api = useOrdersApi();\n return useQuery({\n queryKey: ordersKeys.detail(orderToken),\n queryFn: () => api.fetchOrder(orderToken),\n enabled: (options?.enabled ?? true) && !!orderToken,\n });\n}\n","import { useQuery } from \"@tanstack/react-query\";\nimport type { orders } from \"../types\";\nimport { ordersKeys } from \"../query-keys\";\nimport { useOrdersApi } from \"../context\";\n\nexport function useCustomerOrders(\n params: orders.FetchOrdersParams,\n options?: { enabled?: boolean },\n) {\n const api = useOrdersApi();\n return useQuery({\n queryKey: ordersKeys.list(params),\n queryFn: () => api.fetchCustomerOrders(params),\n enabled: options?.enabled ?? true,\n });\n}\n","import type { orders } from \"../types\";\n\nexport function formatOrderTotal(order: orders.ListOrder): string {\n if (order.order_total_after_points_redemption != null) {\n return `${order.currency_symbol || \"$\"}${Number(\n order.order_total_after_points_redemption,\n ).toFixed(2)}`;\n }\n return (\n order.total_display_amount ||\n `${order.currency_symbol || \"$\"}${Number(order.amount).toFixed(2)}`\n );\n}\n","import { Input } from \"@fluid-app/ui-primitives\";\nimport { Search } from \"lucide-react\";\n\ninterface SearchInputProps {\n searchTerm: string;\n onSearchChange: (value: string) => void;\n placeholder?: string;\n}\n\nexport function SearchInput({\n searchTerm,\n onSearchChange,\n placeholder,\n}: SearchInputProps) {\n return (\n <div className=\"relative\">\n <Search className=\"text-muted-foreground absolute top-1/2 left-3 h-4 w-4 -translate-y-1/2\" />\n <Input\n value={searchTerm}\n onChange={(e) => onSearchChange(e.target.value)}\n placeholder={placeholder}\n className=\"pl-9\"\n />\n </div>\n );\n}\n","import { cn } from \"@fluid-app/ui-primitives\";\nimport { ChevronLeft, ChevronRight } from \"lucide-react\";\n\nexport interface PaginationFooterProps {\n currentPage: number;\n totalPages: number;\n pageSize: number;\n totalItems: number;\n /** @deprecated No longer used. Kept for backward compatibility with subscriptions-ui. */\n maxVisiblePages?: number;\n onPageChange?: (page: number) => void;\n cursorPaginationMode?: boolean;\n hasNextPage?: boolean;\n hasPrevPage?: boolean;\n onCursorNext?: () => void;\n onCursorPrev?: () => void;\n /** @deprecated Use lucide icons directly. Kept for backward compatibility with subscriptions-ui. */\n chevronLeftIcon?: string;\n /** @deprecated Use lucide icons directly. Kept for backward compatibility with subscriptions-ui. */\n chevronRightIcon?: string;\n /** @deprecated Pagination labels are now hardcoded in English. Kept for backward compatibility. */\n t?: (key: string) => string;\n}\n\nexport function PaginationFooter({\n currentPage,\n totalPages,\n pageSize,\n totalItems,\n onPageChange,\n cursorPaginationMode,\n hasNextPage,\n hasPrevPage,\n onCursorNext,\n onCursorPrev,\n}: PaginationFooterProps) {\n const isCursor = !!cursorPaginationMode;\n\n const isPrevDisabled = isCursor ? !hasPrevPage : currentPage === 1;\n const isNextDisabled = isCursor\n ? !hasNextPage\n : totalPages === 0 || currentPage === totalPages;\n\n const handlePrevClick = () => {\n if (isCursor) {\n onCursorPrev?.();\n } else {\n onPageChange?.(currentPage - 1);\n }\n };\n\n const handleNextClick = () => {\n if (isCursor) {\n onCursorNext?.();\n } else {\n onPageChange?.(currentPage + 1);\n }\n };\n\n const displayText = (() => {\n if (isCursor) {\n return (\n <>\n Total <span className=\"font-medium\">{totalItems}</span> results\n </>\n );\n }\n const start = totalItems === 0 ? 0 : (currentPage - 1) * pageSize + 1;\n const end = Math.min(currentPage * pageSize, totalItems);\n return (\n <>\n Showing <span className=\"font-medium\">{start}</span> to{\" \"}\n <span className=\"font-medium\">{end}</span> of{\" \"}\n <span className=\"font-medium\">{totalItems}</span> results\n </>\n );\n })();\n\n const buttonBase =\n \"relative inline-flex items-center px-3 py-2 text-sm font-medium transition-colors disabled:pointer-events-none disabled:opacity-50\";\n\n return (\n <div className=\"border-border flex items-center justify-between border-t px-4 py-3 sm:px-6\">\n {/* Mobile prev/next */}\n <div className=\"flex flex-1 justify-between sm:hidden\">\n <button\n type=\"button\"\n onClick={handlePrevClick}\n disabled={isPrevDisabled}\n className={cn(\n buttonBase,\n \"border-border bg-background text-foreground hover:bg-accent rounded-md border\",\n )}\n >\n Previous\n </button>\n <button\n type=\"button\"\n onClick={handleNextClick}\n disabled={isNextDisabled}\n className={cn(\n buttonBase,\n \"border-border bg-background text-foreground hover:bg-accent ml-3 rounded-md border\",\n )}\n >\n Next\n </button>\n </div>\n\n {/* Desktop */}\n <div className=\"hidden sm:flex sm:flex-1 sm:items-center sm:justify-between\">\n <p className=\"text-muted-foreground text-xs\">{displayText}</p>\n <nav\n aria-label=\"Pagination\"\n className=\"isolate inline-flex -space-x-px rounded-md shadow-sm\"\n >\n <button\n type=\"button\"\n onClick={handlePrevClick}\n disabled={isPrevDisabled}\n className={cn(\n buttonBase,\n \"border-border text-muted-foreground hover:bg-accent rounded-l-md border\",\n )}\n >\n <span className=\"sr-only\">Previous</span>\n <ChevronLeft className=\"h-4 w-4\" />\n </button>\n {!isCursor && (\n <span className=\"border-border bg-background text-foreground relative inline-flex items-center border px-4 py-2 text-sm font-medium\">\n {currentPage} / {totalPages}\n </span>\n )}\n <button\n type=\"button\"\n onClick={handleNextClick}\n disabled={isNextDisabled}\n className={cn(\n buttonBase,\n \"border-border text-muted-foreground hover:bg-accent rounded-r-md border\",\n )}\n >\n <span className=\"sr-only\">Next</span>\n <ChevronRight className=\"h-4 w-4\" />\n </button>\n </nav>\n </div>\n </div>\n );\n}\n","import { cn } from \"@fluid-app/ui-primitives\";\n\nexport type BadgeColor = \"green\" | \"yellow\" | \"red\" | \"blue\" | \"gray\";\n\ntype BadgeSize = \"xs\" | \"sm\" | \"md\";\n\ninterface StatusBadgeProps {\n color: BadgeColor;\n dot?: boolean;\n size?: BadgeSize;\n className?: string;\n children: React.ReactNode;\n}\n\nconst colorStyles: Record<BadgeColor, string> = {\n green: \"bg-green-100 text-green-800 dark:bg-green-900/30 dark:text-green-400\",\n yellow:\n \"bg-yellow-100 text-yellow-800 dark:bg-yellow-900/30 dark:text-yellow-400\",\n red: \"bg-red-100 text-red-800 dark:bg-red-900/30 dark:text-red-400\",\n blue: \"bg-blue-100 text-blue-800 dark:bg-blue-900/30 dark:text-blue-400\",\n gray: \"bg-gray-100 text-gray-800 dark:bg-gray-800 dark:text-gray-300\",\n};\n\nconst dotColorStyles: Record<BadgeColor, string> = {\n green: \"bg-green-500\",\n yellow: \"bg-yellow-500\",\n red: \"bg-red-500\",\n blue: \"bg-blue-500\",\n gray: \"bg-gray-500\",\n};\n\nconst sizeStyles: Record<BadgeSize, string> = {\n xs: \"px-1.5 py-0.5 text-[10px]\",\n sm: \"px-2 py-0.5 text-xs\",\n md: \"px-2.5 py-1 text-sm\",\n};\n\nexport function StatusBadge({\n color,\n dot,\n size = \"md\",\n className,\n children,\n}: StatusBadgeProps) {\n return (\n <span\n className={cn(\n \"inline-flex items-center gap-1 rounded-full font-medium whitespace-nowrap\",\n colorStyles[color],\n sizeStyles[size],\n className,\n )}\n >\n {dot && (\n <span\n className={cn(\"h-1.5 w-1.5 rounded-full\", dotColorStyles[color])}\n />\n )}\n {children}\n </span>\n );\n}\n","import { cn, TableHead } from \"@fluid-app/ui-primitives\";\n\ninterface TableColumnProps {\n label: string;\n sortable?: boolean;\n className?: string;\n onSortClick?: (sortBy: string) => void;\n sortBy?: string;\n sortData?: {\n column: string;\n direction: \"asc\" | \"desc\";\n };\n chevronUpIcon?: string;\n chevronDownIcon?: string;\n}\n\nexport function TableColumn({\n label,\n sortable = true,\n className,\n onSortClick,\n sortBy,\n sortData,\n chevronUpIcon,\n chevronDownIcon,\n}: TableColumnProps) {\n const hideUpIcon =\n sortData?.column !== sortBy ||\n (sortData?.column === sortBy && sortData?.direction === \"asc\");\n\n const hideDownIcon =\n sortData?.column !== sortBy ||\n (sortData?.column === sortBy && sortData?.direction === \"desc\");\n\n return (\n <TableHead\n className={cn(\n \"group text-muted-foreground cursor-pointer px-3 text-xs transition-colors duration-200\",\n \"hover:text-primary\",\n className,\n )}\n onClick={() => sortable && onSortClick?.(sortBy ?? \"\")}\n >\n <div className=\"relative flex items-center\">\n {label}\n {sortable && chevronUpIcon && chevronDownIcon && (\n <button\n className={`ml-2 inline-flex flex-col items-center justify-center group-hover:opacity-100 ${\n sortData?.column === sortBy ? \"opacity-100\" : \"opacity-0\"\n } transition-opacity duration-200`}\n >\n <div className=\"flex flex-col\">\n <img\n src={chevronUpIcon}\n alt=\"\"\n width={12}\n height={12}\n className={cn(\n \"text-muted-foreground group-hover:text-primary h-2.5 w-2.5 transition-colors duration-200\",\n hideUpIcon && \"opacity-0\",\n sortData?.column !== sortBy && \"group-hover:opacity-100\",\n )}\n />\n <img\n src={chevronDownIcon}\n alt=\"\"\n width={12}\n height={12}\n className={cn(\n \"text-muted-foreground group-hover:text-primary h-2.5 w-2.5 transition-colors duration-200\",\n hideDownIcon && \"opacity-0\",\n sortData?.column !== sortBy && \"group-hover:opacity-100\",\n )}\n />\n </div>\n </button>\n )}\n </div>\n </TableHead>\n );\n}\n","import { useState, useCallback } from \"react\";\nimport type { orders } from \"@fluid-app/orders-core\";\nimport { useCustomerOrders, formatOrderTotal } from \"@fluid-app/orders-core\";\nimport {\n Skeleton,\n Table,\n TableBody,\n TableCell,\n TableHeader,\n TableRow,\n} from \"@fluid-app/ui-primitives\";\nimport { SearchInput } from \"./search-input\";\nimport { PaginationFooter } from \"./pagination-footer\";\nimport { StatusBadge } from \"./status-badge\";\nimport { TableColumn } from \"./table-column\";\n\nexport interface OrdersListProps {\n customerId: number | undefined;\n onOrderClick: (order: orders.ListOrder) => void;\n onSubscriptionClick?: (subscriptionToken: string) => void;\n t: (key: string) => string;\n pageSize?: number;\n}\n\nexport function OrdersList({\n customerId,\n onOrderClick,\n onSubscriptionClick,\n t,\n pageSize = 10,\n}: OrdersListProps) {\n const [cursor, setCursor] = useState<string | null>(null);\n const [searchTerm, setSearchTerm] = useState(\"\");\n\n const params: orders.FetchOrdersParams = {\n customerId,\n limit: pageSize,\n search: searchTerm || undefined,\n cursor: cursor || undefined,\n sort: \"-created_at\",\n };\n\n const { data, isLoading } = useCustomerOrders(params, {\n enabled: !!customerId,\n });\n\n const handleSearchChange = useCallback((term: string) => {\n setSearchTerm(term);\n setCursor(null);\n }, []);\n\n const handleNextPage = useCallback(() => {\n const nextCursor = data?.meta?.pagination?.next_cursor;\n if (nextCursor) {\n setCursor(nextCursor);\n }\n }, [data?.meta?.pagination?.next_cursor]);\n\n const handlePrevPage = useCallback(() => {\n const prevCursor = data?.meta?.pagination?.prev_cursor;\n if (prevCursor) {\n setCursor(prevCursor);\n } else {\n setCursor(null);\n }\n }, [data?.meta?.pagination?.prev_cursor]);\n\n const ordersList = data?.orders || [];\n const pagination = data?.meta?.pagination;\n const totalItems = pagination?.total_count ?? ordersList.length;\n const totalPages = pagination?.total_pages ?? 1;\n const currentPage = pagination?.current_page ?? 1;\n const hasNextPage = !!pagination?.next_cursor;\n const hasPrevPage = !!pagination?.prev_cursor;\n\n return (\n <div className=\"border-border overflow-hidden rounded-lg border shadow-sm\">\n <div className=\"p-3 text-left\">\n <div className=\"w-full md:mr-auto md:w-1/2 lg:w-1/3\">\n <SearchInput\n searchTerm={searchTerm}\n onSearchChange={handleSearchChange}\n placeholder={t(\"search_orders\")}\n />\n </div>\n </div>\n\n {/* mobile view */}\n <div className=\"block md:hidden\">\n {isLoading ? (\n Array(5)\n .fill(0)\n .map((_, index) => (\n <div\n key={`skeleton-${index}`}\n className=\"border-border border-b p-4\"\n >\n <div className=\"flex space-x-3\">\n <Skeleton className=\"h-12 w-12 rounded-md\" />\n <div className=\"flex-1 space-y-2\">\n <Skeleton className=\"h-4 w-3/4\" />\n <Skeleton className=\"h-3 w-1/2\" />\n </div>\n </div>\n </div>\n ))\n ) : ordersList.length === 0 ? (\n <div className=\"text-muted-foreground px-3 py-8 text-center text-sm\">\n {searchTerm ? t(\"no_matching_orders\") : t(\"no_orders_found\")}\n </div>\n ) : (\n ordersList.map((order) => (\n <div\n key={order.id}\n className=\"border-border hover:bg-accent cursor-pointer border-b p-4 transition-colors duration-200 ease-in-out last:border-b-0\"\n onClick={() => onOrderClick(order)}\n >\n <div className=\"flex items-start space-x-3\">\n {order.first_item?.image_url ? (\n <img\n src={order.first_item.image_url}\n alt={t(\"no_image_available\")}\n width={48}\n height={48}\n className=\"h-12 w-12 flex-shrink-0 rounded-md object-cover\"\n />\n ) : (\n <div className=\"bg-border h-12 w-12 flex-shrink-0 rounded-md\" />\n )}\n <div className=\"w-0 min-w-0 flex-1\">\n {order.first_item?.title ? (\n <p className=\"text-foreground truncate text-sm font-medium\">\n {order.first_item.title}\n </p>\n ) : (\n <div className=\"bg-muted rounded-lg p-2\">\n <div className=\"text-muted-foreground text-xs\">\n {t(\"this_product_no_longer_exists\")}\n </div>\n </div>\n )}\n {order.subscription && (\n <StatusBadge color=\"blue\" size=\"xs\" className=\"mt-1\">\n {t(\"subscription\")}\n </StatusBadge>\n )}\n {order.subscription && onSubscriptionClick && (\n <button\n type=\"button\"\n className=\"text-foreground hover:text-foreground/80 mt-1 inline-block text-xs transition-colors duration-200 hover:underline\"\n onClick={(e) => {\n e.stopPropagation();\n onSubscriptionClick(\n order.subscription!.subscription_token,\n );\n }}\n >\n {t(\"view_subscription\")}\n </button>\n )}\n <div className=\"mt-2 grid grid-cols-2 gap-x-4 gap-y-1 text-sm\">\n <div>\n <span className=\"text-muted-foreground block text-xs\">\n {t(\"date\")}\n </span>\n <span className=\"text-muted-foreground\">\n {new Date(order.created_at).toLocaleDateString()}\n </span>\n </div>\n <div>\n <span className=\"text-muted-foreground block text-xs\">\n {t(\"total\")}\n </span>\n <span className=\"text-foreground font-medium\">\n {formatOrderTotal(order)}\n </span>\n </div>\n </div>\n </div>\n </div>\n </div>\n ))\n )}\n </div>\n\n {/* desktop view */}\n <div className=\"hidden md:block\">\n <Table className=\"min-w-full table-fixed\">\n <colgroup>\n <col className=\"w-2/5 min-w-[240px]\" />\n <col className=\"w-1/3 min-w-[100px]\" />\n <col className=\"w-[26.67%] min-w-[100px]\" />\n </colgroup>\n <TableHeader className=\"bg-muted\">\n <TableRow className=\"hover:bg-muted h-10\">\n <TableColumn label={t(\"product\")} sortable={false} />\n <TableColumn label={t(\"date\")} sortable={false} />\n <TableColumn label={t(\"total\")} sortable={false} />\n </TableRow>\n </TableHeader>\n <TableBody className=\"bg-background\">\n {isLoading ? (\n Array(5)\n .fill(0)\n .map((_, index) => (\n <TableRow key={`skeleton-${index}`}>\n <TableCell className=\"px-3 py-4\">\n <div className=\"flex items-center space-x-2\">\n <Skeleton className=\"h-9 w-9 rounded-md\" />\n <Skeleton className=\"h-4 w-32\" />\n </div>\n </TableCell>\n <TableCell className=\"px-3 py-4\">\n <Skeleton className=\"h-4 w-24\" />\n </TableCell>\n <TableCell className=\"px-3 py-4\">\n <Skeleton className=\"h-4 w-24\" />\n </TableCell>\n </TableRow>\n ))\n ) : ordersList.length === 0 ? (\n <TableRow>\n <TableCell\n colSpan={3}\n className=\"text-muted-foreground px-3 py-8 text-center text-sm\"\n >\n {searchTerm ? t(\"no_matching_orders\") : t(\"no_orders_found\")}\n </TableCell>\n </TableRow>\n ) : (\n ordersList.map((order) => (\n <TableRow\n key={order.id}\n className=\"cursor-pointer\"\n onClick={() => onOrderClick(order)}\n >\n <TableCell className=\"text-muted-foreground px-3 py-4 text-sm\">\n <div className=\"flex max-w-[280px] flex-row items-center space-x-3\">\n {order.first_item?.image_url ? (\n <img\n src={order.first_item.image_url}\n alt={t(\"no_image_available\")}\n width={42}\n height={42}\n className=\"h-[42px] w-[42px] flex-shrink-0 rounded-md object-cover\"\n />\n ) : (\n <div className=\"bg-border ml-1 h-9 w-9 flex-shrink-0 rounded-md\" />\n )}\n <div className=\"flex min-w-0 flex-col space-y-1\">\n <div className=\"flex items-center space-x-2\">\n {order.first_item?.title ? (\n <span className=\"text-foreground truncate text-sm font-medium\">\n {order.first_item.title}\n </span>\n ) : (\n <div className=\"bg-muted w-full rounded-lg p-2\">\n <div className=\"text-muted-foreground text-xs\">\n {t(\"this_product_no_longer_exists\")}\n </div>\n </div>\n )}\n {order.subscription && (\n <StatusBadge\n color=\"blue\"\n size=\"xs\"\n className=\"flex-shrink-0\"\n >\n {t(\"subscription\")}\n </StatusBadge>\n )}\n </div>\n {order.subscription && onSubscriptionClick && (\n <button\n type=\"button\"\n className=\"text-foreground hover:text-foreground/80 text-left text-xs transition-colors duration-200 hover:underline\"\n onClick={(e) => {\n e.stopPropagation();\n onSubscriptionClick(\n order.subscription!.subscription_token,\n );\n }}\n >\n {t(\"view_subscription\")}\n </button>\n )}\n </div>\n </div>\n </TableCell>\n <TableCell className=\"text-muted-foreground px-3 py-4 text-sm whitespace-nowrap\">\n {new Date(order.created_at).toLocaleDateString()}\n </TableCell>\n <TableCell className=\"text-foreground px-3 py-4 text-sm whitespace-nowrap\">\n {formatOrderTotal(order)}\n </TableCell>\n </TableRow>\n ))\n )}\n </TableBody>\n </Table>\n </div>\n\n <PaginationFooter\n currentPage={currentPage}\n totalPages={totalPages}\n pageSize={pageSize}\n totalItems={totalItems}\n cursorPaginationMode\n hasNextPage={hasNextPage}\n hasPrevPage={hasPrevPage}\n onCursorNext={handleNextPage}\n onCursorPrev={handlePrevPage}\n />\n </div>\n );\n}\n","export function startCase(str: string | undefined | null): string {\n if (!str) return \"\";\n return str.replace(/_/g, \" \").replace(/\\b\\w/g, (char) => char.toUpperCase());\n}\n\nexport function formatCurrency(symbol: string, value: string | number): string {\n return `${symbol}${Number(value).toFixed(2)}`;\n}\n","import { StatusBadge, type BadgeColor } from \"./status-badge\";\nimport { startCase } from \"../lib/format\";\n\nconst statusColorMap: Record<string, BadgeColor> = {\n paid: \"green\",\n fulfilled: \"green\",\n delivered: \"green\",\n complete: \"green\",\n pending: \"yellow\",\n unfulfilled: \"yellow\",\n partially_fulfilled: \"yellow\",\n processing: \"yellow\",\n refunded: \"red\",\n cancelled: \"red\",\n failed: \"red\",\n voided: \"red\",\n};\n\nexport interface OrderStatusBadgeProps {\n status: string;\n className?: string;\n}\n\nexport function OrderStatusBadge({ status, className }: OrderStatusBadgeProps) {\n const color = statusColorMap[status] ?? \"gray\";\n return (\n <StatusBadge color={color} dot size=\"sm\" className={className}>\n {startCase(status)}\n </StatusBadge>\n );\n}\n","import { useEffect } from \"react\";\nimport type { orders } from \"@fluid-app/orders-core\";\nimport { useOrder } from \"@fluid-app/orders-core\";\nimport { Skeleton } from \"@fluid-app/ui-primitives\";\nimport { Truck } from \"lucide-react\";\nimport { OrderStatusBadge } from \"./order-status-badge\";\nimport { StatusBadge } from \"./status-badge\";\nimport { startCase, formatCurrency } from \"../lib/format\";\n\nexport interface OrderDetailProps {\n token: string;\n onNotFound?: () => void;\n onError?: (error: Error) => void;\n}\n\n/* ── Skeleton ─────────────────────────────────────────────────────── */\n\nfunction OrderDetailSkeleton() {\n return (\n <div className=\"flex flex-col lg:grid lg:grid-cols-8\">\n {/* Left: items skeleton */}\n <div className=\"bg-muted flex flex-col items-center px-8 lg:col-span-4\">\n <div className=\"w-full max-w-lg py-6\">\n <Skeleton className=\"mb-4 h-6 w-48\" />\n <div className=\"space-y-4\">\n <div className=\"flex items-center space-x-4\">\n <Skeleton className=\"h-24 w-24 rounded\" />\n <div className=\"flex-1 space-y-2\">\n <Skeleton className=\"h-4 w-3/4\" />\n <Skeleton className=\"h-4 w-1/2\" />\n <Skeleton className=\"h-4 w-1/4\" />\n </div>\n </div>\n </div>\n <div className=\"mt-6 space-y-2\">\n <Skeleton className=\"h-4 w-full\" />\n <Skeleton className=\"h-4 w-full\" />\n <Skeleton className=\"h-4 w-full\" />\n <Skeleton className=\"h-5 w-full\" />\n </div>\n </div>\n </div>\n {/* Right: details skeleton */}\n <div className=\"bg-background px-8 pt-4 lg:col-span-4\">\n <div className=\"mx-auto max-w-lg lg:mx-0 lg:mr-auto\">\n <Skeleton className=\"mb-4 h-10 w-full rounded\" />\n <div className=\"mt-6 space-y-4\">\n <Skeleton className=\"h-5 w-40\" />\n <Skeleton className=\"h-16 w-full rounded\" />\n </div>\n <div className=\"mt-6 space-y-4\">\n <Skeleton className=\"h-5 w-40\" />\n <Skeleton className=\"h-16 w-full rounded\" />\n </div>\n <div className=\"mt-6 space-y-4\">\n <Skeleton className=\"h-5 w-40\" />\n <Skeleton className=\"h-16 w-full rounded\" />\n </div>\n </div>\n </div>\n </div>\n );\n}\n\n/* ── Left column: items & price summary ───────────────────────────── */\n\nfunction OrderItemRow({ item }: { item: orders.LegacyOrderItem }) {\n return (\n <div className=\"flex items-center space-x-4 py-4\">\n <div className=\"relative shrink-0\">\n <div className=\"bg-muted h-24 w-24 overflow-hidden rounded\">\n {item.image_url ? (\n <img\n src={item.image_url}\n alt={item.title}\n width={96}\n height={96}\n className=\"h-full w-full object-cover\"\n />\n ) : (\n <div className=\"text-muted-foreground flex h-full w-full items-center justify-center\">\n No image\n </div>\n )}\n </div>\n {item.quantity > 1 && (\n <span className=\"bg-foreground text-background absolute -top-2 -right-2 z-10 flex h-6 w-6 items-center justify-center rounded-full text-xs font-medium\">\n {item.quantity}\n </span>\n )}\n </div>\n <div className=\"flex min-w-0 flex-1 flex-col space-y-0.5\">\n <p\n className=\"text-foreground truncate text-sm font-medium\"\n title={item.title}\n >\n {item.title}\n </p>\n {item.ordered_variant.length > 0 && (\n <p className=\"text-muted-foreground text-sm\">\n {item.ordered_variant.map((v) => v.value).join(\" / \")}\n </p>\n )}\n {item.sku && (\n <p className=\"text-muted-foreground text-xs\">SKU: {item.sku}</p>\n )}\n {item.subscription && (\n <StatusBadge color=\"blue\" size=\"xs\" className=\"mt-1 self-start\">\n Subscription\n </StatusBadge>\n )}\n <p className=\"text-foreground text-sm font-medium\">\n {item.display_total}\n </p>\n {item.quantity > 1 && (\n <p className=\"text-muted-foreground text-xs\">\n {item.display_price} x {item.quantity}\n </p>\n )}\n </div>\n </div>\n );\n}\n\nfunction OrderItemsSection({ order }: { order: orders.Order }) {\n const visibleItems = order.items.filter(\n (item) => item.display_to_customer !== false,\n );\n const sym = order.currency_symbol || \"$\";\n\n return (\n <section className=\"bg-muted flex w-full flex-col items-center px-8 lg:col-span-4\">\n <div className=\"flex w-full max-w-lg flex-col\">\n {/* Items header */}\n <div className=\"mt-4\">\n <h2 className=\"text-foreground mb-2 text-lg font-medium\">\n Items ({visibleItems.length})\n </h2>\n <hr className=\"border-border\" />\n </div>\n\n {/* Item rows */}\n <div className=\"divide-border divide-y\">\n {visibleItems.map((item) => (\n <OrderItemRow key={item.id} item={item} />\n ))}\n </div>\n\n {/* Pricing summary */}\n <div className=\"border-border mb-4 border-t pt-4\">\n <div className=\"flex justify-between text-sm\">\n <p className=\"text-muted-foreground font-medium\">Subtotal</p>\n <p className=\"text-muted-foreground font-medium\">\n {order.sub_total_in_currency}\n </p>\n </div>\n {Number(order.discount) > 0 && (\n <div className=\"mt-2 flex justify-between text-sm\">\n <p className=\"text-muted-foreground font-medium\">\n Discount\n {order.discount_codes?.length\n ? ` (${order.discount_codes.join(\", \")})`\n : \"\"}\n </p>\n <p className=\"text-muted-foreground font-medium\">\n -{order.discount_in_currency}\n </p>\n </div>\n )}\n <div className=\"mt-2 flex justify-between text-sm\">\n <p className=\"text-muted-foreground font-medium\">Shipping</p>\n <p className=\"text-muted-foreground font-medium\">\n {order.free_shipping ? \"Free\" : order.shipping_total_for_display}\n </p>\n </div>\n <div className=\"mt-2 flex justify-between text-sm\">\n <p className=\"text-muted-foreground font-medium\">\n Tax\n {order.price_inclusive_of_tax && order.price_inclusive_tax_name\n ? ` (${order.price_inclusive_tax_name}, included)`\n : \"\"}\n </p>\n <p className=\"text-muted-foreground font-medium\">\n {order.tax_in_currency}\n </p>\n </div>\n {order.points_applied_amount_in_currency != null &&\n order.points_applied_amount_in_currency > 0 && (\n <div className=\"mt-2 flex justify-between text-sm\">\n <p className=\"text-muted-foreground font-medium\">\n Points Applied\n {order.points_applied != null && order.points_applied > 0 && (\n <span className=\"text-muted-foreground ml-1 text-xs font-normal\">\n ({order.points_applied.toLocaleString()}{\" \"}\n {order.points_applied === 1 ? \"pt\" : \"pts\"})\n </span>\n )}\n </p>\n <p className=\"text-muted-foreground font-medium\">\n {`-${formatCurrency(sym, order.points_applied_amount_in_currency)}`}\n </p>\n </div>\n )}\n <div className=\"mt-4 flex items-center justify-between text-base font-medium\">\n <p className=\"text-muted-foreground text-sm font-medium\">Total</p>\n <p className=\"text-foreground text-base font-bold\">\n {order.total_in_currency}\n </p>\n </div>\n </div>\n </div>\n </section>\n );\n}\n\n/* ── Right column: order details ──────────────────────────────────── */\n\nfunction OrderDetailsSection({ order }: { order: orders.Order }) {\n const paymentDetails = order.payment_details;\n const cardDetails = paymentDetails?.details;\n\n return (\n <div className=\"bg-background px-8 pt-4 lg:col-span-4\">\n <div className=\"mx-auto max-w-lg lg:mx-0 lg:mr-auto\">\n {/* Order Status */}\n <div className=\"border-border mb-6 border-b pb-6\">\n <div className=\"flex flex-wrap items-center gap-3\">\n <div className=\"flex items-center gap-2\">\n <span className=\"text-muted-foreground text-sm\">Payment:</span>\n <OrderStatusBadge status={order.payment_status} />\n </div>\n <div className=\"flex items-center gap-2\">\n <span className=\"text-muted-foreground text-sm\">\n Fulfillment:\n </span>\n <OrderStatusBadge status={order.fulfillment_status} />\n </div>\n <div className=\"flex items-center gap-2\">\n <span className=\"text-muted-foreground text-sm\">Delivery:</span>\n <OrderStatusBadge status={order.delivery_status} />\n </div>\n </div>\n </div>\n\n {/* Order Info */}\n <div className=\"border-border mb-6 border-b pb-6\">\n <h3 className=\"text-foreground mb-3 text-sm/6 font-semibold\">\n Order Info\n </h3>\n <div className=\"divide-border flex divide-x\">\n <div className=\"flex-1 pr-4\">\n <div className=\"text-muted-foreground text-sm\">Order Number</div>\n <div className=\"text-foreground font-medium\">\n {order.order_number}\n </div>\n </div>\n <div className=\"flex-1 pl-4 text-right\">\n <div className=\"text-muted-foreground text-sm\">Date</div>\n <div className=\"text-foreground font-medium\">\n {new Date(order.created_at).toLocaleDateString(\"en-US\", {\n year: \"numeric\",\n month: \"short\",\n day: \"numeric\",\n })}\n </div>\n </div>\n </div>\n {order.email && (\n <div className=\"mt-3\">\n <div className=\"text-muted-foreground text-sm\">Email</div>\n <div className=\"text-foreground text-sm font-medium\">\n {order.email}\n </div>\n </div>\n )}\n </div>\n\n {/* Payment Method */}\n {paymentDetails && (\n <div className=\"border-border mb-6 border-b pb-4\">\n <div className=\"text-muted-foreground mb-1 text-sm\">\n Payment Method\n </div>\n <div className=\"text-foreground flex items-center gap-2 text-sm\">\n {cardDetails?.logo_url ? (\n <img\n src={cardDetails.logo_url}\n alt={cardDetails.card_type ?? \"Card\"}\n className=\"h-6 w-9 object-contain\"\n width={35}\n height={24}\n />\n ) : (\n <div className=\"bg-muted text-muted-foreground flex h-6 w-9 items-center justify-center rounded text-xs\">\n {(\n paymentDetails.payment_title ||\n paymentDetails.payment_type ||\n \"P\"\n ).charAt(0)}\n </div>\n )}\n <span className=\"font-medium\">\n {cardDetails?.card_type\n ? startCase(cardDetails.card_type)\n : paymentDetails.payment_title ||\n startCase(paymentDetails.payment_type)}\n {cardDetails?.last_four\n ? ` ending in ${cardDetails.last_four}`\n : \"\"}\n </span>\n </div>\n </div>\n )}\n\n {/* Shipping Address */}\n {order.ship_to && (\n <div className=\"border-border mb-6 border-b pb-4\">\n <div className=\"text-muted-foreground mb-1 text-sm\">\n Shipping Address\n </div>\n <div className=\"text-foreground flex items-start gap-2 text-sm\">\n <Truck className=\"text-muted-foreground mt-0.5 mr-1 h-4 w-4 shrink-0\" />\n <div className=\"flex flex-col\">\n {order.ship_to.name && (\n <span className=\"font-medium\">{order.ship_to.name}</span>\n )}\n {order.ship_to.address1 && (\n <span>{order.ship_to.address1}</span>\n )}\n {(order.ship_to.city ||\n order.ship_to.state ||\n order.ship_to.postal_code) && (\n <span>\n {[\n [order.ship_to.city, order.ship_to.state]\n .filter(Boolean)\n .join(\", \"),\n order.ship_to.postal_code,\n ]\n .filter(Boolean)\n .join(\" \")}\n </span>\n )}\n {order.ship_to.country_code && (\n <span>{order.ship_to.country_code}</span>\n )}\n </div>\n </div>\n </div>\n )}\n\n {/* Billing Address */}\n {order.bill_to && (\n <div className=\"border-border mb-6 border-b pb-4\">\n <div className=\"text-muted-foreground mb-1 text-sm\">\n Billing Address\n </div>\n <div className=\"text-foreground text-sm\">\n {order.bill_to.name && (\n <p className=\"font-medium\">{order.bill_to.name}</p>\n )}\n {order.bill_to.address1 && <p>{order.bill_to.address1}</p>}\n {(order.bill_to.city ||\n order.bill_to.state ||\n order.bill_to.postal_code) && (\n <p>\n {[\n [order.bill_to.city, order.bill_to.state]\n .filter(Boolean)\n .join(\", \"),\n order.bill_to.postal_code,\n ]\n .filter(Boolean)\n .join(\" \")}\n </p>\n )}\n {order.bill_to.country_code && (\n <p>{order.bill_to.country_code}</p>\n )}\n </div>\n </div>\n )}\n\n {/* Shipping Method */}\n {order.shipping_method && (\n <div className=\"border-border mb-6 border-b pb-4\">\n <div className=\"text-muted-foreground mb-1 text-sm\">\n Shipping Method\n </div>\n <div className=\"text-foreground text-sm font-medium\">\n {order.shipping_method.title}\n </div>\n {order.shipping_method.delivery_time_estimate && (\n <div className=\"text-muted-foreground mt-1 text-xs\">\n Est. {order.shipping_method.delivery_time_estimate}\n </div>\n )}\n </div>\n )}\n </div>\n </div>\n );\n}\n\n/* ── Main component ────────────────────────────────────────────────── */\n\nexport function OrderDetail({ token, onNotFound, onError }: OrderDetailProps) {\n const { data, isLoading, error } = useOrder(token);\n const order = data?.order;\n\n useEffect(() => {\n if (!isLoading && error) {\n onError?.(error as Error);\n }\n }, [isLoading, error, onError]);\n\n useEffect(() => {\n if (!isLoading && !error && !order) {\n onNotFound?.();\n }\n }, [isLoading, error, order, onNotFound]);\n\n if (isLoading) {\n return <OrderDetailSkeleton />;\n }\n\n if (!order) {\n return null;\n }\n\n return (\n <div className=\"flex flex-col lg:grid lg:grid-cols-8\">\n <OrderItemsSection order={order} />\n <OrderDetailsSection order={order} />\n </div>\n );\n}\n"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { I as Input, x as Skeleton, yn as cn } from "./src-D6DimP34.mjs";
1
+ import { I as Input, d as TableBody, f as TableCell, h as TableRow, m as TableHeader, p as TableHead, u as Table$1, x as Skeleton, yn as cn } from "./src-D6DimP34.mjs";
2
2
  import { createContext, useCallback, useContext, useEffect, useState } from "react";
3
3
  import { useQuery } from "@tanstack/react-query";
4
4
  import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
@@ -211,8 +211,8 @@ function StatusBadge({ color, dot, size = "md", className, children }) {
211
211
  function TableColumn({ label, sortable = true, className, onSortClick, sortBy, sortData, chevronUpIcon, chevronDownIcon }) {
212
212
  const hideUpIcon = sortData?.column !== sortBy || sortData?.column === sortBy && sortData?.direction === "asc";
213
213
  const hideDownIcon = sortData?.column !== sortBy || sortData?.column === sortBy && sortData?.direction === "desc";
214
- return /* @__PURE__ */ jsx("th", {
215
- className: cn("group cursor-pointer px-3 py-2 text-left text-xs font-medium text-gray-500 transition-colors duration-200", "hover:text-blue-600", className),
214
+ return /* @__PURE__ */ jsx(TableHead, {
215
+ className: cn("group text-muted-foreground cursor-pointer px-3 text-xs transition-colors duration-200", "hover:text-primary", className),
216
216
  onClick: () => sortable && onSortClick?.(sortBy ?? ""),
217
217
  children: /* @__PURE__ */ jsxs("div", {
218
218
  className: "relative flex items-center",
@@ -225,13 +225,13 @@ function TableColumn({ label, sortable = true, className, onSortClick, sortBy, s
225
225
  alt: "",
226
226
  width: 12,
227
227
  height: 12,
228
- className: cn("h-2.5 w-2.5 text-gray-400 transition-colors duration-200 group-hover:text-blue-600", hideUpIcon && "opacity-0", sortData?.column !== sortBy && "group-hover:opacity-100")
228
+ className: cn("text-muted-foreground group-hover:text-primary h-2.5 w-2.5 transition-colors duration-200", hideUpIcon && "opacity-0", sortData?.column !== sortBy && "group-hover:opacity-100")
229
229
  }), /* @__PURE__ */ jsx("img", {
230
230
  src: chevronDownIcon,
231
231
  alt: "",
232
232
  width: 12,
233
233
  height: 12,
234
- className: cn("h-2.5 w-2.5 text-gray-400 transition-colors duration-200 group-hover:text-blue-600", hideDownIcon && "opacity-0", sortData?.column !== sortBy && "group-hover:opacity-100")
234
+ className: cn("text-muted-foreground group-hover:text-primary h-2.5 w-2.5 transition-colors duration-200", hideDownIcon && "opacity-0", sortData?.column !== sortBy && "group-hover:opacity-100")
235
235
  })]
236
236
  })
237
237
  })]
@@ -359,8 +359,8 @@ function OrdersList({ customerId, onOrderClick, onSubscriptionClick, t, pageSize
359
359
  }, order.id))
360
360
  }),
361
361
  /* @__PURE__ */ jsx("div", {
362
- className: "hidden overflow-x-auto md:block",
363
- children: /* @__PURE__ */ jsxs("table", {
362
+ className: "hidden md:block",
363
+ children: /* @__PURE__ */ jsxs(Table$1, {
364
364
  className: "min-w-full table-fixed",
365
365
  children: [
366
366
  /* @__PURE__ */ jsxs("colgroup", { children: [
@@ -368,10 +368,10 @@ function OrdersList({ customerId, onOrderClick, onSubscriptionClick, t, pageSize
368
368
  /* @__PURE__ */ jsx("col", { className: "w-1/3 min-w-[100px]" }),
369
369
  /* @__PURE__ */ jsx("col", { className: "w-[26.67%] min-w-[100px]" })
370
370
  ] }),
371
- /* @__PURE__ */ jsx("thead", {
371
+ /* @__PURE__ */ jsx(TableHeader, {
372
372
  className: "bg-muted",
373
- children: /* @__PURE__ */ jsxs("tr", {
374
- className: "h-10",
373
+ children: /* @__PURE__ */ jsxs(TableRow, {
374
+ className: "hover:bg-muted h-10",
375
375
  children: [
376
376
  /* @__PURE__ */ jsx(TableColumn, {
377
377
  label: t("product"),
@@ -388,33 +388,33 @@ function OrdersList({ customerId, onOrderClick, onSubscriptionClick, t, pageSize
388
388
  ]
389
389
  })
390
390
  }),
391
- /* @__PURE__ */ jsx("tbody", {
392
- className: "divide-border bg-background divide-y",
393
- children: isLoading ? Array(5).fill(0).map((_, index) => /* @__PURE__ */ jsxs("tr", { children: [
394
- /* @__PURE__ */ jsx("td", {
391
+ /* @__PURE__ */ jsx(TableBody, {
392
+ className: "bg-background",
393
+ children: isLoading ? Array(5).fill(0).map((_, index) => /* @__PURE__ */ jsxs(TableRow, { children: [
394
+ /* @__PURE__ */ jsx(TableCell, {
395
395
  className: "px-3 py-4",
396
396
  children: /* @__PURE__ */ jsxs("div", {
397
397
  className: "flex items-center space-x-2",
398
398
  children: [/* @__PURE__ */ jsx(Skeleton, { className: "h-9 w-9 rounded-md" }), /* @__PURE__ */ jsx(Skeleton, { className: "h-4 w-32" })]
399
399
  })
400
400
  }),
401
- /* @__PURE__ */ jsx("td", {
401
+ /* @__PURE__ */ jsx(TableCell, {
402
402
  className: "px-3 py-4",
403
403
  children: /* @__PURE__ */ jsx(Skeleton, { className: "h-4 w-24" })
404
404
  }),
405
- /* @__PURE__ */ jsx("td", {
405
+ /* @__PURE__ */ jsx(TableCell, {
406
406
  className: "px-3 py-4",
407
407
  children: /* @__PURE__ */ jsx(Skeleton, { className: "h-4 w-24" })
408
408
  })
409
- ] }, `skeleton-${index}`)) : ordersList.length === 0 ? /* @__PURE__ */ jsx("tr", { children: /* @__PURE__ */ jsx("td", {
409
+ ] }, `skeleton-${index}`)) : ordersList.length === 0 ? /* @__PURE__ */ jsx(TableRow, { children: /* @__PURE__ */ jsx(TableCell, {
410
410
  colSpan: 3,
411
411
  className: "text-muted-foreground px-3 py-8 text-center text-sm",
412
412
  children: searchTerm ? t("no_matching_orders") : t("no_orders_found")
413
- }) }) : ordersList.map((order) => /* @__PURE__ */ jsxs("tr", {
414
- className: "hover:bg-accent cursor-pointer transition-colors duration-200 ease-in-out",
413
+ }) }) : ordersList.map((order) => /* @__PURE__ */ jsxs(TableRow, {
414
+ className: "cursor-pointer",
415
415
  onClick: () => onOrderClick(order),
416
416
  children: [
417
- /* @__PURE__ */ jsx("td", {
417
+ /* @__PURE__ */ jsx(TableCell, {
418
418
  className: "text-muted-foreground px-3 py-4 text-sm",
419
419
  children: /* @__PURE__ */ jsxs("div", {
420
420
  className: "flex max-w-[280px] flex-row items-center space-x-3",
@@ -455,11 +455,11 @@ function OrdersList({ customerId, onOrderClick, onSubscriptionClick, t, pageSize
455
455
  })]
456
456
  })
457
457
  }),
458
- /* @__PURE__ */ jsx("td", {
458
+ /* @__PURE__ */ jsx(TableCell, {
459
459
  className: "text-muted-foreground px-3 py-4 text-sm whitespace-nowrap",
460
460
  children: new Date(order.created_at).toLocaleDateString()
461
461
  }),
462
- /* @__PURE__ */ jsx("td", {
462
+ /* @__PURE__ */ jsx(TableCell, {
463
463
  className: "text-foreground px-3 py-4 text-sm whitespace-nowrap",
464
464
  children: formatOrderTotal(order)
465
465
  })
@@ -928,4 +928,4 @@ function OrderDetail({ token, onNotFound, onError }) {
928
928
  //#endregion
929
929
  export { OrdersCoreProvider as a, PaginationFooter as i, OrdersList as n, TableColumn as r, OrderDetail as t };
930
930
 
931
- //# sourceMappingURL=order-detail-B8jb-YB6.mjs.map
931
+ //# sourceMappingURL=order-detail-B5cxyosZ.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"order-detail-B5cxyosZ.mjs","names":["Table"],"sources":["../../../orders/core/src/context.ts","../../../orders/core/src/provider.tsx","../../../orders/core/src/query-keys.ts","../../../orders/core/src/hooks/use-order.ts","../../../orders/core/src/hooks/use-customer-orders.ts","../../../orders/core/src/utils/format-order-total.ts","../../../orders/ui/src/components/search-input.tsx","../../../orders/ui/src/components/pagination-footer.tsx","../../../orders/ui/src/components/status-badge.tsx","../../../orders/ui/src/components/table-column.tsx","../../../orders/ui/src/components/orders-list.tsx","../../../orders/ui/src/lib/format.ts","../../../orders/ui/src/components/order-status-badge.tsx","../../../orders/ui/src/components/order-detail.tsx"],"sourcesContent":["import { createContext, useContext } from \"react\";\nimport type { OrdersApi } from \"./orders-api\";\n\nconst OrdersApiContext = createContext<OrdersApi | null>(null);\n\nexport const OrdersApiProvider = OrdersApiContext.Provider;\n\nexport function useOrdersApi(): OrdersApi {\n const api = useContext(OrdersApiContext);\n if (!api) {\n throw new Error(\"useOrdersApi must be used within an OrdersCoreProvider\");\n }\n return api;\n}\n","import type { JSX, ReactNode } from \"react\";\nimport type { OrdersApi } from \"./orders-api\";\nimport { OrdersApiProvider } from \"./context\";\n\nexport interface OrdersCoreProviderProps {\n api: OrdersApi;\n children: ReactNode;\n}\n\nexport function OrdersCoreProvider({\n api,\n children,\n}: OrdersCoreProviderProps): JSX.Element {\n return <OrdersApiProvider value={api}>{children}</OrdersApiProvider>;\n}\n","import type { orders } from \"./types\";\n\nexport const ordersKeys = {\n all: [\"orders\"] as const,\n list: (params?: orders.FetchOrdersParams) =>\n [...ordersKeys.all, \"list\", params] as const,\n detail: (orderToken: string) =>\n [...ordersKeys.all, \"detail\", orderToken] as const,\n} as const;\n","import { useQuery } from \"@tanstack/react-query\";\nimport { ordersKeys } from \"../query-keys\";\nimport { useOrdersApi } from \"../context\";\n\nexport function useOrder(orderToken: string, options?: { enabled?: boolean }) {\n const api = useOrdersApi();\n return useQuery({\n queryKey: ordersKeys.detail(orderToken),\n queryFn: () => api.fetchOrder(orderToken),\n enabled: (options?.enabled ?? true) && !!orderToken,\n });\n}\n","import { useQuery } from \"@tanstack/react-query\";\nimport type { orders } from \"../types\";\nimport { ordersKeys } from \"../query-keys\";\nimport { useOrdersApi } from \"../context\";\n\nexport function useCustomerOrders(\n params: orders.FetchOrdersParams,\n options?: { enabled?: boolean },\n) {\n const api = useOrdersApi();\n return useQuery({\n queryKey: ordersKeys.list(params),\n queryFn: () => api.fetchCustomerOrders(params),\n enabled: options?.enabled ?? true,\n });\n}\n","import type { orders } from \"../types\";\n\nexport function formatOrderTotal(order: orders.ListOrder): string {\n if (order.order_total_after_points_redemption != null) {\n return `${order.currency_symbol || \"$\"}${Number(\n order.order_total_after_points_redemption,\n ).toFixed(2)}`;\n }\n return (\n order.total_display_amount ||\n `${order.currency_symbol || \"$\"}${Number(order.amount).toFixed(2)}`\n );\n}\n","import { Input } from \"@fluid-app/ui-primitives\";\nimport { Search } from \"lucide-react\";\n\ninterface SearchInputProps {\n searchTerm: string;\n onSearchChange: (value: string) => void;\n placeholder?: string;\n}\n\nexport function SearchInput({\n searchTerm,\n onSearchChange,\n placeholder,\n}: SearchInputProps) {\n return (\n <div className=\"relative\">\n <Search className=\"text-muted-foreground absolute top-1/2 left-3 h-4 w-4 -translate-y-1/2\" />\n <Input\n value={searchTerm}\n onChange={(e) => onSearchChange(e.target.value)}\n placeholder={placeholder}\n className=\"pl-9\"\n />\n </div>\n );\n}\n","import { cn } from \"@fluid-app/ui-primitives\";\nimport { ChevronLeft, ChevronRight } from \"lucide-react\";\n\nexport interface PaginationFooterProps {\n currentPage: number;\n totalPages: number;\n pageSize: number;\n totalItems: number;\n /** @deprecated No longer used. Kept for backward compatibility with subscriptions-ui. */\n maxVisiblePages?: number;\n onPageChange?: (page: number) => void;\n cursorPaginationMode?: boolean;\n hasNextPage?: boolean;\n hasPrevPage?: boolean;\n onCursorNext?: () => void;\n onCursorPrev?: () => void;\n /** @deprecated Use lucide icons directly. Kept for backward compatibility with subscriptions-ui. */\n chevronLeftIcon?: string;\n /** @deprecated Use lucide icons directly. Kept for backward compatibility with subscriptions-ui. */\n chevronRightIcon?: string;\n /** @deprecated Pagination labels are now hardcoded in English. Kept for backward compatibility. */\n t?: (key: string) => string;\n}\n\nexport function PaginationFooter({\n currentPage,\n totalPages,\n pageSize,\n totalItems,\n onPageChange,\n cursorPaginationMode,\n hasNextPage,\n hasPrevPage,\n onCursorNext,\n onCursorPrev,\n}: PaginationFooterProps) {\n const isCursor = !!cursorPaginationMode;\n\n const isPrevDisabled = isCursor ? !hasPrevPage : currentPage === 1;\n const isNextDisabled = isCursor\n ? !hasNextPage\n : totalPages === 0 || currentPage === totalPages;\n\n const handlePrevClick = () => {\n if (isCursor) {\n onCursorPrev?.();\n } else {\n onPageChange?.(currentPage - 1);\n }\n };\n\n const handleNextClick = () => {\n if (isCursor) {\n onCursorNext?.();\n } else {\n onPageChange?.(currentPage + 1);\n }\n };\n\n const displayText = (() => {\n if (isCursor) {\n return (\n <>\n Total <span className=\"font-medium\">{totalItems}</span> results\n </>\n );\n }\n const start = totalItems === 0 ? 0 : (currentPage - 1) * pageSize + 1;\n const end = Math.min(currentPage * pageSize, totalItems);\n return (\n <>\n Showing <span className=\"font-medium\">{start}</span> to{\" \"}\n <span className=\"font-medium\">{end}</span> of{\" \"}\n <span className=\"font-medium\">{totalItems}</span> results\n </>\n );\n })();\n\n const buttonBase =\n \"relative inline-flex items-center px-3 py-2 text-sm font-medium transition-colors disabled:pointer-events-none disabled:opacity-50\";\n\n return (\n <div className=\"border-border flex items-center justify-between border-t px-4 py-3 sm:px-6\">\n {/* Mobile prev/next */}\n <div className=\"flex flex-1 justify-between sm:hidden\">\n <button\n type=\"button\"\n onClick={handlePrevClick}\n disabled={isPrevDisabled}\n className={cn(\n buttonBase,\n \"border-border bg-background text-foreground hover:bg-accent rounded-md border\",\n )}\n >\n Previous\n </button>\n <button\n type=\"button\"\n onClick={handleNextClick}\n disabled={isNextDisabled}\n className={cn(\n buttonBase,\n \"border-border bg-background text-foreground hover:bg-accent ml-3 rounded-md border\",\n )}\n >\n Next\n </button>\n </div>\n\n {/* Desktop */}\n <div className=\"hidden sm:flex sm:flex-1 sm:items-center sm:justify-between\">\n <p className=\"text-muted-foreground text-xs\">{displayText}</p>\n <nav\n aria-label=\"Pagination\"\n className=\"isolate inline-flex -space-x-px rounded-md shadow-sm\"\n >\n <button\n type=\"button\"\n onClick={handlePrevClick}\n disabled={isPrevDisabled}\n className={cn(\n buttonBase,\n \"border-border text-muted-foreground hover:bg-accent rounded-l-md border\",\n )}\n >\n <span className=\"sr-only\">Previous</span>\n <ChevronLeft className=\"h-4 w-4\" />\n </button>\n {!isCursor && (\n <span className=\"border-border bg-background text-foreground relative inline-flex items-center border px-4 py-2 text-sm font-medium\">\n {currentPage} / {totalPages}\n </span>\n )}\n <button\n type=\"button\"\n onClick={handleNextClick}\n disabled={isNextDisabled}\n className={cn(\n buttonBase,\n \"border-border text-muted-foreground hover:bg-accent rounded-r-md border\",\n )}\n >\n <span className=\"sr-only\">Next</span>\n <ChevronRight className=\"h-4 w-4\" />\n </button>\n </nav>\n </div>\n </div>\n );\n}\n","import { cn } from \"@fluid-app/ui-primitives\";\n\nexport type BadgeColor = \"green\" | \"yellow\" | \"red\" | \"blue\" | \"gray\";\n\ntype BadgeSize = \"xs\" | \"sm\" | \"md\";\n\ninterface StatusBadgeProps {\n color: BadgeColor;\n dot?: boolean;\n size?: BadgeSize;\n className?: string;\n children: React.ReactNode;\n}\n\nconst colorStyles: Record<BadgeColor, string> = {\n green: \"bg-green-100 text-green-800 dark:bg-green-900/30 dark:text-green-400\",\n yellow:\n \"bg-yellow-100 text-yellow-800 dark:bg-yellow-900/30 dark:text-yellow-400\",\n red: \"bg-red-100 text-red-800 dark:bg-red-900/30 dark:text-red-400\",\n blue: \"bg-blue-100 text-blue-800 dark:bg-blue-900/30 dark:text-blue-400\",\n gray: \"bg-gray-100 text-gray-800 dark:bg-gray-800 dark:text-gray-300\",\n};\n\nconst dotColorStyles: Record<BadgeColor, string> = {\n green: \"bg-green-500\",\n yellow: \"bg-yellow-500\",\n red: \"bg-red-500\",\n blue: \"bg-blue-500\",\n gray: \"bg-gray-500\",\n};\n\nconst sizeStyles: Record<BadgeSize, string> = {\n xs: \"px-1.5 py-0.5 text-[10px]\",\n sm: \"px-2 py-0.5 text-xs\",\n md: \"px-2.5 py-1 text-sm\",\n};\n\nexport function StatusBadge({\n color,\n dot,\n size = \"md\",\n className,\n children,\n}: StatusBadgeProps) {\n return (\n <span\n className={cn(\n \"inline-flex items-center gap-1 rounded-full font-medium whitespace-nowrap\",\n colorStyles[color],\n sizeStyles[size],\n className,\n )}\n >\n {dot && (\n <span\n className={cn(\"h-1.5 w-1.5 rounded-full\", dotColorStyles[color])}\n />\n )}\n {children}\n </span>\n );\n}\n","import { cn, TableHead } from \"@fluid-app/ui-primitives\";\n\ninterface TableColumnProps {\n label: string;\n sortable?: boolean;\n className?: string;\n onSortClick?: (sortBy: string) => void;\n sortBy?: string;\n sortData?: {\n column: string;\n direction: \"asc\" | \"desc\";\n };\n chevronUpIcon?: string;\n chevronDownIcon?: string;\n}\n\nexport function TableColumn({\n label,\n sortable = true,\n className,\n onSortClick,\n sortBy,\n sortData,\n chevronUpIcon,\n chevronDownIcon,\n}: TableColumnProps) {\n const hideUpIcon =\n sortData?.column !== sortBy ||\n (sortData?.column === sortBy && sortData?.direction === \"asc\");\n\n const hideDownIcon =\n sortData?.column !== sortBy ||\n (sortData?.column === sortBy && sortData?.direction === \"desc\");\n\n return (\n <TableHead\n className={cn(\n \"group text-muted-foreground cursor-pointer px-3 text-xs transition-colors duration-200\",\n \"hover:text-primary\",\n className,\n )}\n onClick={() => sortable && onSortClick?.(sortBy ?? \"\")}\n >\n <div className=\"relative flex items-center\">\n {label}\n {sortable && chevronUpIcon && chevronDownIcon && (\n <button\n className={`ml-2 inline-flex flex-col items-center justify-center group-hover:opacity-100 ${\n sortData?.column === sortBy ? \"opacity-100\" : \"opacity-0\"\n } transition-opacity duration-200`}\n >\n <div className=\"flex flex-col\">\n <img\n src={chevronUpIcon}\n alt=\"\"\n width={12}\n height={12}\n className={cn(\n \"text-muted-foreground group-hover:text-primary h-2.5 w-2.5 transition-colors duration-200\",\n hideUpIcon && \"opacity-0\",\n sortData?.column !== sortBy && \"group-hover:opacity-100\",\n )}\n />\n <img\n src={chevronDownIcon}\n alt=\"\"\n width={12}\n height={12}\n className={cn(\n \"text-muted-foreground group-hover:text-primary h-2.5 w-2.5 transition-colors duration-200\",\n hideDownIcon && \"opacity-0\",\n sortData?.column !== sortBy && \"group-hover:opacity-100\",\n )}\n />\n </div>\n </button>\n )}\n </div>\n </TableHead>\n );\n}\n","import { useState, useCallback } from \"react\";\nimport type { orders } from \"@fluid-app/orders-core\";\nimport { useCustomerOrders, formatOrderTotal } from \"@fluid-app/orders-core\";\nimport {\n Skeleton,\n Table,\n TableBody,\n TableCell,\n TableHeader,\n TableRow,\n} from \"@fluid-app/ui-primitives\";\nimport { SearchInput } from \"./search-input\";\nimport { PaginationFooter } from \"./pagination-footer\";\nimport { StatusBadge } from \"./status-badge\";\nimport { TableColumn } from \"./table-column\";\n\nexport interface OrdersListProps {\n customerId: number | undefined;\n onOrderClick: (order: orders.ListOrder) => void;\n onSubscriptionClick?: (subscriptionToken: string) => void;\n t: (key: string) => string;\n pageSize?: number;\n}\n\nexport function OrdersList({\n customerId,\n onOrderClick,\n onSubscriptionClick,\n t,\n pageSize = 10,\n}: OrdersListProps) {\n const [cursor, setCursor] = useState<string | null>(null);\n const [searchTerm, setSearchTerm] = useState(\"\");\n\n const params: orders.FetchOrdersParams = {\n customerId,\n limit: pageSize,\n search: searchTerm || undefined,\n cursor: cursor || undefined,\n sort: \"-created_at\",\n };\n\n const { data, isLoading } = useCustomerOrders(params, {\n enabled: !!customerId,\n });\n\n const handleSearchChange = useCallback((term: string) => {\n setSearchTerm(term);\n setCursor(null);\n }, []);\n\n const handleNextPage = useCallback(() => {\n const nextCursor = data?.meta?.pagination?.next_cursor;\n if (nextCursor) {\n setCursor(nextCursor);\n }\n }, [data?.meta?.pagination?.next_cursor]);\n\n const handlePrevPage = useCallback(() => {\n const prevCursor = data?.meta?.pagination?.prev_cursor;\n if (prevCursor) {\n setCursor(prevCursor);\n } else {\n setCursor(null);\n }\n }, [data?.meta?.pagination?.prev_cursor]);\n\n const ordersList = data?.orders || [];\n const pagination = data?.meta?.pagination;\n const totalItems = pagination?.total_count ?? ordersList.length;\n const totalPages = pagination?.total_pages ?? 1;\n const currentPage = pagination?.current_page ?? 1;\n const hasNextPage = !!pagination?.next_cursor;\n const hasPrevPage = !!pagination?.prev_cursor;\n\n return (\n <div className=\"border-border overflow-hidden rounded-lg border shadow-sm\">\n <div className=\"p-3 text-left\">\n <div className=\"w-full md:mr-auto md:w-1/2 lg:w-1/3\">\n <SearchInput\n searchTerm={searchTerm}\n onSearchChange={handleSearchChange}\n placeholder={t(\"search_orders\")}\n />\n </div>\n </div>\n\n {/* mobile view */}\n <div className=\"block md:hidden\">\n {isLoading ? (\n Array(5)\n .fill(0)\n .map((_, index) => (\n <div\n key={`skeleton-${index}`}\n className=\"border-border border-b p-4\"\n >\n <div className=\"flex space-x-3\">\n <Skeleton className=\"h-12 w-12 rounded-md\" />\n <div className=\"flex-1 space-y-2\">\n <Skeleton className=\"h-4 w-3/4\" />\n <Skeleton className=\"h-3 w-1/2\" />\n </div>\n </div>\n </div>\n ))\n ) : ordersList.length === 0 ? (\n <div className=\"text-muted-foreground px-3 py-8 text-center text-sm\">\n {searchTerm ? t(\"no_matching_orders\") : t(\"no_orders_found\")}\n </div>\n ) : (\n ordersList.map((order) => (\n <div\n key={order.id}\n className=\"border-border hover:bg-accent cursor-pointer border-b p-4 transition-colors duration-200 ease-in-out last:border-b-0\"\n onClick={() => onOrderClick(order)}\n >\n <div className=\"flex items-start space-x-3\">\n {order.first_item?.image_url ? (\n <img\n src={order.first_item.image_url}\n alt={t(\"no_image_available\")}\n width={48}\n height={48}\n className=\"h-12 w-12 flex-shrink-0 rounded-md object-cover\"\n />\n ) : (\n <div className=\"bg-border h-12 w-12 flex-shrink-0 rounded-md\" />\n )}\n <div className=\"w-0 min-w-0 flex-1\">\n {order.first_item?.title ? (\n <p className=\"text-foreground truncate text-sm font-medium\">\n {order.first_item.title}\n </p>\n ) : (\n <div className=\"bg-muted rounded-lg p-2\">\n <div className=\"text-muted-foreground text-xs\">\n {t(\"this_product_no_longer_exists\")}\n </div>\n </div>\n )}\n {order.subscription && (\n <StatusBadge color=\"blue\" size=\"xs\" className=\"mt-1\">\n {t(\"subscription\")}\n </StatusBadge>\n )}\n {order.subscription && onSubscriptionClick && (\n <button\n type=\"button\"\n className=\"text-foreground hover:text-foreground/80 mt-1 inline-block text-xs transition-colors duration-200 hover:underline\"\n onClick={(e) => {\n e.stopPropagation();\n onSubscriptionClick(\n order.subscription!.subscription_token,\n );\n }}\n >\n {t(\"view_subscription\")}\n </button>\n )}\n <div className=\"mt-2 grid grid-cols-2 gap-x-4 gap-y-1 text-sm\">\n <div>\n <span className=\"text-muted-foreground block text-xs\">\n {t(\"date\")}\n </span>\n <span className=\"text-muted-foreground\">\n {new Date(order.created_at).toLocaleDateString()}\n </span>\n </div>\n <div>\n <span className=\"text-muted-foreground block text-xs\">\n {t(\"total\")}\n </span>\n <span className=\"text-foreground font-medium\">\n {formatOrderTotal(order)}\n </span>\n </div>\n </div>\n </div>\n </div>\n </div>\n ))\n )}\n </div>\n\n {/* desktop view */}\n <div className=\"hidden md:block\">\n <Table className=\"min-w-full table-fixed\">\n <colgroup>\n <col className=\"w-2/5 min-w-[240px]\" />\n <col className=\"w-1/3 min-w-[100px]\" />\n <col className=\"w-[26.67%] min-w-[100px]\" />\n </colgroup>\n <TableHeader className=\"bg-muted\">\n <TableRow className=\"hover:bg-muted h-10\">\n <TableColumn label={t(\"product\")} sortable={false} />\n <TableColumn label={t(\"date\")} sortable={false} />\n <TableColumn label={t(\"total\")} sortable={false} />\n </TableRow>\n </TableHeader>\n <TableBody className=\"bg-background\">\n {isLoading ? (\n Array(5)\n .fill(0)\n .map((_, index) => (\n <TableRow key={`skeleton-${index}`}>\n <TableCell className=\"px-3 py-4\">\n <div className=\"flex items-center space-x-2\">\n <Skeleton className=\"h-9 w-9 rounded-md\" />\n <Skeleton className=\"h-4 w-32\" />\n </div>\n </TableCell>\n <TableCell className=\"px-3 py-4\">\n <Skeleton className=\"h-4 w-24\" />\n </TableCell>\n <TableCell className=\"px-3 py-4\">\n <Skeleton className=\"h-4 w-24\" />\n </TableCell>\n </TableRow>\n ))\n ) : ordersList.length === 0 ? (\n <TableRow>\n <TableCell\n colSpan={3}\n className=\"text-muted-foreground px-3 py-8 text-center text-sm\"\n >\n {searchTerm ? t(\"no_matching_orders\") : t(\"no_orders_found\")}\n </TableCell>\n </TableRow>\n ) : (\n ordersList.map((order) => (\n <TableRow\n key={order.id}\n className=\"cursor-pointer\"\n onClick={() => onOrderClick(order)}\n >\n <TableCell className=\"text-muted-foreground px-3 py-4 text-sm\">\n <div className=\"flex max-w-[280px] flex-row items-center space-x-3\">\n {order.first_item?.image_url ? (\n <img\n src={order.first_item.image_url}\n alt={t(\"no_image_available\")}\n width={42}\n height={42}\n className=\"h-[42px] w-[42px] flex-shrink-0 rounded-md object-cover\"\n />\n ) : (\n <div className=\"bg-border ml-1 h-9 w-9 flex-shrink-0 rounded-md\" />\n )}\n <div className=\"flex min-w-0 flex-col space-y-1\">\n <div className=\"flex items-center space-x-2\">\n {order.first_item?.title ? (\n <span className=\"text-foreground truncate text-sm font-medium\">\n {order.first_item.title}\n </span>\n ) : (\n <div className=\"bg-muted w-full rounded-lg p-2\">\n <div className=\"text-muted-foreground text-xs\">\n {t(\"this_product_no_longer_exists\")}\n </div>\n </div>\n )}\n {order.subscription && (\n <StatusBadge\n color=\"blue\"\n size=\"xs\"\n className=\"flex-shrink-0\"\n >\n {t(\"subscription\")}\n </StatusBadge>\n )}\n </div>\n {order.subscription && onSubscriptionClick && (\n <button\n type=\"button\"\n className=\"text-foreground hover:text-foreground/80 text-left text-xs transition-colors duration-200 hover:underline\"\n onClick={(e) => {\n e.stopPropagation();\n onSubscriptionClick(\n order.subscription!.subscription_token,\n );\n }}\n >\n {t(\"view_subscription\")}\n </button>\n )}\n </div>\n </div>\n </TableCell>\n <TableCell className=\"text-muted-foreground px-3 py-4 text-sm whitespace-nowrap\">\n {new Date(order.created_at).toLocaleDateString()}\n </TableCell>\n <TableCell className=\"text-foreground px-3 py-4 text-sm whitespace-nowrap\">\n {formatOrderTotal(order)}\n </TableCell>\n </TableRow>\n ))\n )}\n </TableBody>\n </Table>\n </div>\n\n <PaginationFooter\n currentPage={currentPage}\n totalPages={totalPages}\n pageSize={pageSize}\n totalItems={totalItems}\n cursorPaginationMode\n hasNextPage={hasNextPage}\n hasPrevPage={hasPrevPage}\n onCursorNext={handleNextPage}\n onCursorPrev={handlePrevPage}\n />\n </div>\n );\n}\n","export function startCase(str: string | undefined | null): string {\n if (!str) return \"\";\n return str.replace(/_/g, \" \").replace(/\\b\\w/g, (char) => char.toUpperCase());\n}\n\nexport function formatCurrency(symbol: string, value: string | number): string {\n return `${symbol}${Number(value).toFixed(2)}`;\n}\n","import { StatusBadge, type BadgeColor } from \"./status-badge\";\nimport { startCase } from \"../lib/format\";\n\nconst statusColorMap: Record<string, BadgeColor> = {\n paid: \"green\",\n fulfilled: \"green\",\n delivered: \"green\",\n complete: \"green\",\n pending: \"yellow\",\n unfulfilled: \"yellow\",\n partially_fulfilled: \"yellow\",\n processing: \"yellow\",\n refunded: \"red\",\n cancelled: \"red\",\n failed: \"red\",\n voided: \"red\",\n};\n\nexport interface OrderStatusBadgeProps {\n status: string;\n className?: string;\n}\n\nexport function OrderStatusBadge({ status, className }: OrderStatusBadgeProps) {\n const color = statusColorMap[status] ?? \"gray\";\n return (\n <StatusBadge color={color} dot size=\"sm\" className={className}>\n {startCase(status)}\n </StatusBadge>\n );\n}\n","import { useEffect } from \"react\";\nimport type { orders } from \"@fluid-app/orders-core\";\nimport { useOrder } from \"@fluid-app/orders-core\";\nimport { Skeleton } from \"@fluid-app/ui-primitives\";\nimport { Truck } from \"lucide-react\";\nimport { OrderStatusBadge } from \"./order-status-badge\";\nimport { StatusBadge } from \"./status-badge\";\nimport { startCase, formatCurrency } from \"../lib/format\";\n\nexport interface OrderDetailProps {\n token: string;\n onNotFound?: () => void;\n onError?: (error: Error) => void;\n}\n\n/* ── Skeleton ─────────────────────────────────────────────────────── */\n\nfunction OrderDetailSkeleton() {\n return (\n <div className=\"flex flex-col lg:grid lg:grid-cols-8\">\n {/* Left: items skeleton */}\n <div className=\"bg-muted flex flex-col items-center px-8 lg:col-span-4\">\n <div className=\"w-full max-w-lg py-6\">\n <Skeleton className=\"mb-4 h-6 w-48\" />\n <div className=\"space-y-4\">\n <div className=\"flex items-center space-x-4\">\n <Skeleton className=\"h-24 w-24 rounded\" />\n <div className=\"flex-1 space-y-2\">\n <Skeleton className=\"h-4 w-3/4\" />\n <Skeleton className=\"h-4 w-1/2\" />\n <Skeleton className=\"h-4 w-1/4\" />\n </div>\n </div>\n </div>\n <div className=\"mt-6 space-y-2\">\n <Skeleton className=\"h-4 w-full\" />\n <Skeleton className=\"h-4 w-full\" />\n <Skeleton className=\"h-4 w-full\" />\n <Skeleton className=\"h-5 w-full\" />\n </div>\n </div>\n </div>\n {/* Right: details skeleton */}\n <div className=\"bg-background px-8 pt-4 lg:col-span-4\">\n <div className=\"mx-auto max-w-lg lg:mx-0 lg:mr-auto\">\n <Skeleton className=\"mb-4 h-10 w-full rounded\" />\n <div className=\"mt-6 space-y-4\">\n <Skeleton className=\"h-5 w-40\" />\n <Skeleton className=\"h-16 w-full rounded\" />\n </div>\n <div className=\"mt-6 space-y-4\">\n <Skeleton className=\"h-5 w-40\" />\n <Skeleton className=\"h-16 w-full rounded\" />\n </div>\n <div className=\"mt-6 space-y-4\">\n <Skeleton className=\"h-5 w-40\" />\n <Skeleton className=\"h-16 w-full rounded\" />\n </div>\n </div>\n </div>\n </div>\n );\n}\n\n/* ── Left column: items & price summary ───────────────────────────── */\n\nfunction OrderItemRow({ item }: { item: orders.LegacyOrderItem }) {\n return (\n <div className=\"flex items-center space-x-4 py-4\">\n <div className=\"relative shrink-0\">\n <div className=\"bg-muted h-24 w-24 overflow-hidden rounded\">\n {item.image_url ? (\n <img\n src={item.image_url}\n alt={item.title}\n width={96}\n height={96}\n className=\"h-full w-full object-cover\"\n />\n ) : (\n <div className=\"text-muted-foreground flex h-full w-full items-center justify-center\">\n No image\n </div>\n )}\n </div>\n {item.quantity > 1 && (\n <span className=\"bg-foreground text-background absolute -top-2 -right-2 z-10 flex h-6 w-6 items-center justify-center rounded-full text-xs font-medium\">\n {item.quantity}\n </span>\n )}\n </div>\n <div className=\"flex min-w-0 flex-1 flex-col space-y-0.5\">\n <p\n className=\"text-foreground truncate text-sm font-medium\"\n title={item.title}\n >\n {item.title}\n </p>\n {item.ordered_variant.length > 0 && (\n <p className=\"text-muted-foreground text-sm\">\n {item.ordered_variant.map((v) => v.value).join(\" / \")}\n </p>\n )}\n {item.sku && (\n <p className=\"text-muted-foreground text-xs\">SKU: {item.sku}</p>\n )}\n {item.subscription && (\n <StatusBadge color=\"blue\" size=\"xs\" className=\"mt-1 self-start\">\n Subscription\n </StatusBadge>\n )}\n <p className=\"text-foreground text-sm font-medium\">\n {item.display_total}\n </p>\n {item.quantity > 1 && (\n <p className=\"text-muted-foreground text-xs\">\n {item.display_price} x {item.quantity}\n </p>\n )}\n </div>\n </div>\n );\n}\n\nfunction OrderItemsSection({ order }: { order: orders.Order }) {\n const visibleItems = order.items.filter(\n (item) => item.display_to_customer !== false,\n );\n const sym = order.currency_symbol || \"$\";\n\n return (\n <section className=\"bg-muted flex w-full flex-col items-center px-8 lg:col-span-4\">\n <div className=\"flex w-full max-w-lg flex-col\">\n {/* Items header */}\n <div className=\"mt-4\">\n <h2 className=\"text-foreground mb-2 text-lg font-medium\">\n Items ({visibleItems.length})\n </h2>\n <hr className=\"border-border\" />\n </div>\n\n {/* Item rows */}\n <div className=\"divide-border divide-y\">\n {visibleItems.map((item) => (\n <OrderItemRow key={item.id} item={item} />\n ))}\n </div>\n\n {/* Pricing summary */}\n <div className=\"border-border mb-4 border-t pt-4\">\n <div className=\"flex justify-between text-sm\">\n <p className=\"text-muted-foreground font-medium\">Subtotal</p>\n <p className=\"text-muted-foreground font-medium\">\n {order.sub_total_in_currency}\n </p>\n </div>\n {Number(order.discount) > 0 && (\n <div className=\"mt-2 flex justify-between text-sm\">\n <p className=\"text-muted-foreground font-medium\">\n Discount\n {order.discount_codes?.length\n ? ` (${order.discount_codes.join(\", \")})`\n : \"\"}\n </p>\n <p className=\"text-muted-foreground font-medium\">\n -{order.discount_in_currency}\n </p>\n </div>\n )}\n <div className=\"mt-2 flex justify-between text-sm\">\n <p className=\"text-muted-foreground font-medium\">Shipping</p>\n <p className=\"text-muted-foreground font-medium\">\n {order.free_shipping ? \"Free\" : order.shipping_total_for_display}\n </p>\n </div>\n <div className=\"mt-2 flex justify-between text-sm\">\n <p className=\"text-muted-foreground font-medium\">\n Tax\n {order.price_inclusive_of_tax && order.price_inclusive_tax_name\n ? ` (${order.price_inclusive_tax_name}, included)`\n : \"\"}\n </p>\n <p className=\"text-muted-foreground font-medium\">\n {order.tax_in_currency}\n </p>\n </div>\n {order.points_applied_amount_in_currency != null &&\n order.points_applied_amount_in_currency > 0 && (\n <div className=\"mt-2 flex justify-between text-sm\">\n <p className=\"text-muted-foreground font-medium\">\n Points Applied\n {order.points_applied != null && order.points_applied > 0 && (\n <span className=\"text-muted-foreground ml-1 text-xs font-normal\">\n ({order.points_applied.toLocaleString()}{\" \"}\n {order.points_applied === 1 ? \"pt\" : \"pts\"})\n </span>\n )}\n </p>\n <p className=\"text-muted-foreground font-medium\">\n {`-${formatCurrency(sym, order.points_applied_amount_in_currency)}`}\n </p>\n </div>\n )}\n <div className=\"mt-4 flex items-center justify-between text-base font-medium\">\n <p className=\"text-muted-foreground text-sm font-medium\">Total</p>\n <p className=\"text-foreground text-base font-bold\">\n {order.total_in_currency}\n </p>\n </div>\n </div>\n </div>\n </section>\n );\n}\n\n/* ── Right column: order details ──────────────────────────────────── */\n\nfunction OrderDetailsSection({ order }: { order: orders.Order }) {\n const paymentDetails = order.payment_details;\n const cardDetails = paymentDetails?.details;\n\n return (\n <div className=\"bg-background px-8 pt-4 lg:col-span-4\">\n <div className=\"mx-auto max-w-lg lg:mx-0 lg:mr-auto\">\n {/* Order Status */}\n <div className=\"border-border mb-6 border-b pb-6\">\n <div className=\"flex flex-wrap items-center gap-3\">\n <div className=\"flex items-center gap-2\">\n <span className=\"text-muted-foreground text-sm\">Payment:</span>\n <OrderStatusBadge status={order.payment_status} />\n </div>\n <div className=\"flex items-center gap-2\">\n <span className=\"text-muted-foreground text-sm\">\n Fulfillment:\n </span>\n <OrderStatusBadge status={order.fulfillment_status} />\n </div>\n <div className=\"flex items-center gap-2\">\n <span className=\"text-muted-foreground text-sm\">Delivery:</span>\n <OrderStatusBadge status={order.delivery_status} />\n </div>\n </div>\n </div>\n\n {/* Order Info */}\n <div className=\"border-border mb-6 border-b pb-6\">\n <h3 className=\"text-foreground mb-3 text-sm/6 font-semibold\">\n Order Info\n </h3>\n <div className=\"divide-border flex divide-x\">\n <div className=\"flex-1 pr-4\">\n <div className=\"text-muted-foreground text-sm\">Order Number</div>\n <div className=\"text-foreground font-medium\">\n {order.order_number}\n </div>\n </div>\n <div className=\"flex-1 pl-4 text-right\">\n <div className=\"text-muted-foreground text-sm\">Date</div>\n <div className=\"text-foreground font-medium\">\n {new Date(order.created_at).toLocaleDateString(\"en-US\", {\n year: \"numeric\",\n month: \"short\",\n day: \"numeric\",\n })}\n </div>\n </div>\n </div>\n {order.email && (\n <div className=\"mt-3\">\n <div className=\"text-muted-foreground text-sm\">Email</div>\n <div className=\"text-foreground text-sm font-medium\">\n {order.email}\n </div>\n </div>\n )}\n </div>\n\n {/* Payment Method */}\n {paymentDetails && (\n <div className=\"border-border mb-6 border-b pb-4\">\n <div className=\"text-muted-foreground mb-1 text-sm\">\n Payment Method\n </div>\n <div className=\"text-foreground flex items-center gap-2 text-sm\">\n {cardDetails?.logo_url ? (\n <img\n src={cardDetails.logo_url}\n alt={cardDetails.card_type ?? \"Card\"}\n className=\"h-6 w-9 object-contain\"\n width={35}\n height={24}\n />\n ) : (\n <div className=\"bg-muted text-muted-foreground flex h-6 w-9 items-center justify-center rounded text-xs\">\n {(\n paymentDetails.payment_title ||\n paymentDetails.payment_type ||\n \"P\"\n ).charAt(0)}\n </div>\n )}\n <span className=\"font-medium\">\n {cardDetails?.card_type\n ? startCase(cardDetails.card_type)\n : paymentDetails.payment_title ||\n startCase(paymentDetails.payment_type)}\n {cardDetails?.last_four\n ? ` ending in ${cardDetails.last_four}`\n : \"\"}\n </span>\n </div>\n </div>\n )}\n\n {/* Shipping Address */}\n {order.ship_to && (\n <div className=\"border-border mb-6 border-b pb-4\">\n <div className=\"text-muted-foreground mb-1 text-sm\">\n Shipping Address\n </div>\n <div className=\"text-foreground flex items-start gap-2 text-sm\">\n <Truck className=\"text-muted-foreground mt-0.5 mr-1 h-4 w-4 shrink-0\" />\n <div className=\"flex flex-col\">\n {order.ship_to.name && (\n <span className=\"font-medium\">{order.ship_to.name}</span>\n )}\n {order.ship_to.address1 && (\n <span>{order.ship_to.address1}</span>\n )}\n {(order.ship_to.city ||\n order.ship_to.state ||\n order.ship_to.postal_code) && (\n <span>\n {[\n [order.ship_to.city, order.ship_to.state]\n .filter(Boolean)\n .join(\", \"),\n order.ship_to.postal_code,\n ]\n .filter(Boolean)\n .join(\" \")}\n </span>\n )}\n {order.ship_to.country_code && (\n <span>{order.ship_to.country_code}</span>\n )}\n </div>\n </div>\n </div>\n )}\n\n {/* Billing Address */}\n {order.bill_to && (\n <div className=\"border-border mb-6 border-b pb-4\">\n <div className=\"text-muted-foreground mb-1 text-sm\">\n Billing Address\n </div>\n <div className=\"text-foreground text-sm\">\n {order.bill_to.name && (\n <p className=\"font-medium\">{order.bill_to.name}</p>\n )}\n {order.bill_to.address1 && <p>{order.bill_to.address1}</p>}\n {(order.bill_to.city ||\n order.bill_to.state ||\n order.bill_to.postal_code) && (\n <p>\n {[\n [order.bill_to.city, order.bill_to.state]\n .filter(Boolean)\n .join(\", \"),\n order.bill_to.postal_code,\n ]\n .filter(Boolean)\n .join(\" \")}\n </p>\n )}\n {order.bill_to.country_code && (\n <p>{order.bill_to.country_code}</p>\n )}\n </div>\n </div>\n )}\n\n {/* Shipping Method */}\n {order.shipping_method && (\n <div className=\"border-border mb-6 border-b pb-4\">\n <div className=\"text-muted-foreground mb-1 text-sm\">\n Shipping Method\n </div>\n <div className=\"text-foreground text-sm font-medium\">\n {order.shipping_method.title}\n </div>\n {order.shipping_method.delivery_time_estimate && (\n <div className=\"text-muted-foreground mt-1 text-xs\">\n Est. {order.shipping_method.delivery_time_estimate}\n </div>\n )}\n </div>\n )}\n </div>\n </div>\n );\n}\n\n/* ── Main component ────────────────────────────────────────────────── */\n\nexport function OrderDetail({ token, onNotFound, onError }: OrderDetailProps) {\n const { data, isLoading, error } = useOrder(token);\n const order = data?.order;\n\n useEffect(() => {\n if (!isLoading && error) {\n onError?.(error as Error);\n }\n }, [isLoading, error, onError]);\n\n useEffect(() => {\n if (!isLoading && !error && !order) {\n onNotFound?.();\n }\n }, [isLoading, error, order, onNotFound]);\n\n if (isLoading) {\n return <OrderDetailSkeleton />;\n }\n\n if (!order) {\n return null;\n }\n\n return (\n <div className=\"flex flex-col lg:grid lg:grid-cols-8\">\n <OrderItemsSection order={order} />\n <OrderDetailsSection order={order} />\n </div>\n );\n}\n"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { ct as createFetchClient, n as useFluidContext } from "./FluidProvider-CMGu8wbx.mjs";
1
+ import { ct as createFetchClient, n as useFluidContext } from "./FluidProvider-DV87ZCCY.mjs";
2
2
  import { useMemo } from "react";
3
3
  //#region ../../orders/api-client/src/namespaces/orders.ts
4
4
  /**
@@ -187,4 +187,4 @@ function useSdkClient() {
187
187
  //#endregion
188
188
  export { useSubscriptionsApiClient as i, useOrdersApi as n, useSdkClient as r, API_VERSION as t };
189
189
 
190
- //# sourceMappingURL=use-account-clients-BinrTgf5.mjs.map
190
+ //# sourceMappingURL=use-account-clients-DaJbAmJW.mjs.map