@fluid-app/portal-sdk 0.1.149 → 0.1.151

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-sGvzVEOC.cjs → AppDownloadScreen-CjKkw4Fg.cjs} +2 -2
  2. package/dist/{AppDownloadScreen-sGvzVEOC.cjs.map → AppDownloadScreen-CjKkw4Fg.cjs.map} +1 -1
  3. package/dist/{AppDownloadScreen-D8Y7JAgO.mjs → AppDownloadScreen-DRnjxlvT.mjs} +2 -2
  4. package/dist/{AppDownloadScreen-D8Y7JAgO.mjs.map → AppDownloadScreen-DRnjxlvT.mjs.map} +1 -1
  5. package/dist/{AppDownloadScreen-B1_C7kjK.cjs → AppDownloadScreen-ooVsEvs8.cjs} +2 -2
  6. package/dist/{ContactsScreen-DuKE5ruf.cjs → ContactsScreen-BTff-1nA.cjs} +2 -2
  7. package/dist/{ContactsScreen-DtABz7O7.mjs → ContactsScreen-Cy5bom0o.mjs} +2 -2
  8. package/dist/{ContactsScreen-DtABz7O7.mjs.map → ContactsScreen-Cy5bom0o.mjs.map} +1 -1
  9. package/dist/{ContactsScreen-psnV3fcP.cjs → ContactsScreen-IfYXlJhs.cjs} +2 -2
  10. package/dist/{ContactsScreen-psnV3fcP.cjs.map → ContactsScreen-IfYXlJhs.cjs.map} +1 -1
  11. package/dist/{FluidProvider-BbMqSBkY.mjs → FluidProvider-BdfmEGWq.mjs} +2 -2
  12. package/dist/{FluidProvider-BbMqSBkY.mjs.map → FluidProvider-BdfmEGWq.mjs.map} +1 -1
  13. package/dist/{FluidProvider-C6WODD6y.cjs → FluidProvider-DNrnrUMP.cjs} +2 -2
  14. package/dist/{FluidProvider-C6WODD6y.cjs.map → FluidProvider-DNrnrUMP.cjs.map} +1 -1
  15. package/dist/{MessagingScreen-gbTy8V_o.mjs → MessagingScreen-B90e8S3J.mjs} +3 -3
  16. package/dist/{MessagingScreen-gbTy8V_o.mjs.map → MessagingScreen-B90e8S3J.mjs.map} +1 -1
  17. package/dist/{MessagingScreen-DSU_xyHK.cjs → MessagingScreen-J0CN90BV.cjs} +3 -3
  18. package/dist/{MessagingScreen-DSU_xyHK.cjs.map → MessagingScreen-J0CN90BV.cjs.map} +1 -1
  19. package/dist/{MessagingScreen-B5lqBpVo.cjs → MessagingScreen-mVyTAxP0.cjs} +2 -2
  20. package/dist/{OrdersScreen-BXlGNk8k.cjs → OrdersScreen-CwrDNuJd.cjs} +85 -235
  21. package/dist/OrdersScreen-CwrDNuJd.cjs.map +1 -0
  22. package/dist/{OrdersScreen-B4xeL-Kg.mjs → OrdersScreen-DWBMyuuW.mjs} +87 -237
  23. package/dist/OrdersScreen-DWBMyuuW.mjs.map +1 -0
  24. package/dist/{OrdersScreen-CR2NZAGm.cjs → OrdersScreen-Ygf_IvG8.cjs} +3 -2
  25. package/dist/{ProductsScreen-DG_SMNs5.cjs → ProductsScreen-B9h7P0pF.cjs} +3 -3
  26. package/dist/{ProductsScreen-C8wwsfu0.cjs → ProductsScreen-BiTzo11P.cjs} +3 -3
  27. package/dist/{ProductsScreen-C8wwsfu0.cjs.map → ProductsScreen-BiTzo11P.cjs.map} +1 -1
  28. package/dist/{ProductsScreen--hkyw5c3.mjs → ProductsScreen-R8wkxAQz.mjs} +3 -3
  29. package/dist/{ProductsScreen--hkyw5c3.mjs.map → ProductsScreen-R8wkxAQz.mjs.map} +1 -1
  30. package/dist/{ProductsScreen-IbgDLX51.mjs → ProductsScreen-icFY3n_C.mjs} +3 -8
  31. package/dist/{ProfileScreen-CvtEh4hl.cjs → ProfileScreen-DT_ihepQ.cjs} +2 -2
  32. package/dist/{ProfileScreen-B3bK-8Lp.mjs → ProfileScreen-OKbwvvjy.mjs} +2 -2
  33. package/dist/{ProfileScreen-B3bK-8Lp.mjs.map → ProfileScreen-OKbwvvjy.mjs.map} +1 -1
  34. package/dist/{ProfileScreen-k9HsbdhW.cjs → ProfileScreen-Spy0wH4C.cjs} +2 -2
  35. package/dist/{ProfileScreen-k9HsbdhW.cjs.map → ProfileScreen-Spy0wH4C.cjs.map} +1 -1
  36. package/dist/{ShareablesScreen-Caf2fI3S.cjs → ShareablesScreen-BTvAr7Ok.cjs} +3 -3
  37. package/dist/{ShareablesScreen-B8ZsEkgi.mjs → ShareablesScreen-CHmLiKBq.mjs} +4 -4
  38. package/dist/{ShareablesScreen-B8ZsEkgi.mjs.map → ShareablesScreen-CHmLiKBq.mjs.map} +1 -1
  39. package/dist/{ShareablesScreen-B0JMhiKA.cjs → ShareablesScreen-DzN2T7WM.cjs} +4 -4
  40. package/dist/{ShareablesScreen-B0JMhiKA.cjs.map → ShareablesScreen-DzN2T7WM.cjs.map} +1 -1
  41. package/dist/{ShareablesScreen-C2zLeoy7.mjs → ShareablesScreen-bDjb5T1-.mjs} +3 -9
  42. package/dist/{ShopScreen-BVD2rPsc.cjs → ShopScreen-BW2Dx21M.cjs} +5 -5
  43. package/dist/ShopScreen-BW2Dx21M.cjs.map +1 -0
  44. package/dist/{ShopScreen-DGQuhCjL.cjs → ShopScreen-DnZsZ9_o.cjs} +2 -2
  45. package/dist/{ShopScreen-gE3t8H83.mjs → ShopScreen-DzloqmdT.mjs} +5 -5
  46. package/dist/ShopScreen-DzloqmdT.mjs.map +1 -0
  47. package/dist/{SubscriptionsScreen-OkgAzsMr.cjs → SubscriptionsScreen-9rur531Y.cjs} +4 -4
  48. package/dist/SubscriptionsScreen-9rur531Y.cjs.map +1 -0
  49. package/dist/{SubscriptionsScreen-CU49ip-B.cjs → SubscriptionsScreen-CSiEOTPS.cjs} +2 -2
  50. package/dist/{SubscriptionsScreen-B5uCnkDP.mjs → SubscriptionsScreen-DpPl_eEV.mjs} +4 -4
  51. package/dist/SubscriptionsScreen-DpPl_eEV.mjs.map +1 -0
  52. package/dist/index.cjs +32 -32
  53. package/dist/index.mjs +32 -32
  54. package/dist/order-status-badge-C5K03hR8.cjs +592 -0
  55. package/dist/order-status-badge-C5K03hR8.cjs.map +1 -0
  56. package/dist/order-status-badge-CzCxrkzq.mjs +556 -0
  57. package/dist/order-status-badge-CzCxrkzq.mjs.map +1 -0
  58. package/dist/{portal_tenant-z_4uJF7r.cjs → portal_tenant-BTRzzEQu.cjs} +5 -5
  59. package/dist/portal_tenant-BTRzzEQu.cjs.map +1 -0
  60. package/dist/{portal_tenant-D9tdph5J.mjs → portal_tenant-BuhowW58.mjs} +5 -5
  61. package/dist/portal_tenant-BuhowW58.mjs.map +1 -0
  62. package/dist/{use-current-user-Cj2_q6uf.mjs → use-current-user-CdCeH7yF.mjs} +2 -2
  63. package/dist/{use-current-user-Cj2_q6uf.mjs.map → use-current-user-CdCeH7yF.mjs.map} +1 -1
  64. package/dist/{use-current-user-0N-2bZRJ.cjs → use-current-user-cyO8A9sS.cjs} +2 -2
  65. package/dist/{use-current-user-0N-2bZRJ.cjs.map → use-current-user-cyO8A9sS.cjs.map} +1 -1
  66. package/dist/{use-fluid-api-DzyyTeeh.mjs → use-fluid-api-BEaf_TzG.mjs} +2 -2
  67. package/dist/{use-fluid-api-DzyyTeeh.mjs.map → use-fluid-api-BEaf_TzG.mjs.map} +1 -1
  68. package/dist/{use-fluid-api-gTgB7jKG.cjs → use-fluid-api-BjIXhuT7.cjs} +2 -2
  69. package/dist/{use-fluid-api-gTgB7jKG.cjs.map → use-fluid-api-BjIXhuT7.cjs.map} +1 -1
  70. package/dist/{use-portal-products-client-CYenp38s.cjs → use-portal-products-client-BDE9BflI.cjs} +2 -2
  71. package/dist/{use-portal-products-client-CYenp38s.cjs.map → use-portal-products-client-BDE9BflI.cjs.map} +1 -1
  72. package/dist/{use-portal-products-client-cK-Vbzv_.mjs → use-portal-products-client-DBxWCLx0.mjs} +2 -2
  73. package/dist/{use-portal-products-client-cK-Vbzv_.mjs.map → use-portal-products-client-DBxWCLx0.mjs.map} +1 -1
  74. package/dist/{use-portal-shareables-api-CwSezl14.cjs → use-portal-shareables-api-CH38IaKt.cjs} +3 -3
  75. package/dist/{use-portal-shareables-api-CwSezl14.cjs.map → use-portal-shareables-api-CH38IaKt.cjs.map} +1 -1
  76. package/dist/{use-portal-shareables-api-CCRQARQM.mjs → use-portal-shareables-api-CaXsju8A.mjs} +3 -3
  77. package/dist/{use-portal-shareables-api-CCRQARQM.mjs.map → use-portal-shareables-api-CaXsju8A.mjs.map} +1 -1
  78. package/package.json +14 -14
  79. package/dist/OrdersScreen-B4xeL-Kg.mjs.map +0 -1
  80. package/dist/OrdersScreen-BXlGNk8k.cjs.map +0 -1
  81. package/dist/ShopScreen-BVD2rPsc.cjs.map +0 -1
  82. package/dist/ShopScreen-gE3t8H83.mjs.map +0 -1
  83. package/dist/SubscriptionsScreen-B5uCnkDP.mjs.map +0 -1
  84. package/dist/SubscriptionsScreen-OkgAzsMr.cjs.map +0 -1
  85. package/dist/order-status-badge-CCK76FjJ.mjs +0 -262
  86. package/dist/order-status-badge-CCK76FjJ.mjs.map +0 -1
  87. package/dist/order-status-badge-CDdk0tyF.cjs +0 -304
  88. package/dist/order-status-badge-CDdk0tyF.cjs.map +0 -1
  89. package/dist/portal_tenant-D9tdph5J.mjs.map +0 -1
  90. package/dist/portal_tenant-z_4uJF7r.cjs.map +0 -1
@@ -1,262 +0,0 @@
1
- import { d as TableHead, hn as cn } from "./src-CRDhXvlT.mjs";
2
- import { createContext, useContext } from "react";
3
- import { useQuery } from "@tanstack/react-query";
4
- import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
5
- import { ChevronLeft, ChevronRight } from "lucide-react";
6
- //#region ../../orders/core/src/context.ts
7
- const OrdersApiContext = createContext(null);
8
- const OrdersApiProvider = OrdersApiContext.Provider;
9
- function useOrdersApi() {
10
- const api = useContext(OrdersApiContext);
11
- if (!api) throw new Error("useOrdersApi must be used within an OrdersCoreProvider");
12
- return api;
13
- }
14
- //#endregion
15
- //#region ../../orders/core/src/provider.tsx
16
- function OrdersCoreProvider({ api, children }) {
17
- return /* @__PURE__ */ jsx(OrdersApiProvider, {
18
- value: api,
19
- children
20
- });
21
- }
22
- //#endregion
23
- //#region ../../orders/core/src/query-keys.ts
24
- const portalTenantOrdersKeys = {
25
- all: ["portalTenantOrders"],
26
- list: (params) => [
27
- ...portalTenantOrdersKeys.all,
28
- "list",
29
- params
30
- ],
31
- detail: (id) => [
32
- ...portalTenantOrdersKeys.all,
33
- "detail",
34
- id
35
- ]
36
- };
37
- //#endregion
38
- //#region ../../orders/core/src/hooks/use-portal-tenant-orders.ts
39
- function usePortalTenantOrders(params, options) {
40
- const api = useOrdersApi();
41
- return useQuery({
42
- queryKey: portalTenantOrdersKeys.list(params),
43
- queryFn: () => {
44
- if (!api.fetchOrders) throw new Error("fetchOrders not implemented on this OrdersApi");
45
- return api.fetchOrders(params);
46
- },
47
- enabled: options?.enabled ?? true
48
- });
49
- }
50
- //#endregion
51
- //#region ../../orders/core/src/hooks/use-portal-tenant-order.ts
52
- function usePortalTenantOrder(id, options) {
53
- const api = useOrdersApi();
54
- return useQuery({
55
- queryKey: portalTenantOrdersKeys.detail(id),
56
- queryFn: () => {
57
- if (!api.fetchOrderById) throw new Error("fetchOrderById not implemented on this OrdersApi");
58
- return api.fetchOrderById(Number(id));
59
- },
60
- enabled: (options?.enabled ?? true) && !!id
61
- });
62
- }
63
- //#endregion
64
- //#region ../../orders/ui/src/components/pagination-footer.tsx
65
- function PaginationFooter({ currentPage, totalPages, pageSize, totalItems, onPageChange, cursorPaginationMode, hasNextPage, hasPrevPage, onCursorNext, onCursorPrev }) {
66
- const isCursor = !!cursorPaginationMode;
67
- const isPrevDisabled = isCursor ? !hasPrevPage : currentPage === 1;
68
- const isNextDisabled = isCursor ? !hasNextPage : totalPages === 0 || currentPage === totalPages;
69
- const handlePrevClick = () => {
70
- if (isCursor) onCursorPrev?.();
71
- else onPageChange?.(currentPage - 1);
72
- };
73
- const handleNextClick = () => {
74
- if (isCursor) onCursorNext?.();
75
- else onPageChange?.(currentPage + 1);
76
- };
77
- const displayText = (() => {
78
- if (isCursor) return /* @__PURE__ */ jsxs(Fragment$1, { children: [
79
- "Total ",
80
- /* @__PURE__ */ jsx("span", {
81
- className: "font-medium",
82
- children: totalItems
83
- }),
84
- " results"
85
- ] });
86
- const start = totalItems === 0 ? 0 : (currentPage - 1) * pageSize + 1;
87
- const end = Math.min(currentPage * pageSize, totalItems);
88
- return /* @__PURE__ */ jsxs(Fragment$1, { children: [
89
- "Showing ",
90
- /* @__PURE__ */ jsx("span", {
91
- className: "font-medium",
92
- children: start
93
- }),
94
- " to",
95
- " ",
96
- /* @__PURE__ */ jsx("span", {
97
- className: "font-medium",
98
- children: end
99
- }),
100
- " of",
101
- " ",
102
- /* @__PURE__ */ jsx("span", {
103
- className: "font-medium",
104
- children: totalItems
105
- }),
106
- " results"
107
- ] });
108
- })();
109
- const buttonBase = "relative inline-flex items-center px-3 py-2 text-sm font-medium transition-colors disabled:pointer-events-none disabled:opacity-50";
110
- return /* @__PURE__ */ jsxs("div", {
111
- className: "border-border flex items-center justify-between border-t px-4 py-3 sm:px-6",
112
- children: [/* @__PURE__ */ jsxs("div", {
113
- className: "flex flex-1 justify-between sm:hidden",
114
- children: [/* @__PURE__ */ jsx("button", {
115
- type: "button",
116
- onClick: handlePrevClick,
117
- disabled: isPrevDisabled,
118
- className: cn(buttonBase, "border-border bg-background text-foreground hover:bg-accent rounded-md border"),
119
- children: "Previous"
120
- }), /* @__PURE__ */ jsx("button", {
121
- type: "button",
122
- onClick: handleNextClick,
123
- disabled: isNextDisabled,
124
- className: cn(buttonBase, "border-border bg-background text-foreground hover:bg-accent ml-3 rounded-md border"),
125
- children: "Next"
126
- })]
127
- }), /* @__PURE__ */ jsxs("div", {
128
- className: "hidden sm:flex sm:flex-1 sm:items-center sm:justify-between",
129
- children: [/* @__PURE__ */ jsx("p", {
130
- className: "text-muted-foreground text-xs",
131
- children: displayText
132
- }), /* @__PURE__ */ jsxs("nav", {
133
- "aria-label": "Pagination",
134
- className: "isolate inline-flex -space-x-px rounded-md shadow-sm",
135
- children: [
136
- /* @__PURE__ */ jsxs("button", {
137
- type: "button",
138
- onClick: handlePrevClick,
139
- disabled: isPrevDisabled,
140
- className: cn(buttonBase, "border-border text-muted-foreground hover:bg-accent rounded-l-md border"),
141
- children: [/* @__PURE__ */ jsx("span", {
142
- className: "sr-only",
143
- children: "Previous"
144
- }), /* @__PURE__ */ jsx(ChevronLeft, { className: "h-4 w-4" })]
145
- }),
146
- !isCursor && /* @__PURE__ */ jsxs("span", {
147
- className: "border-border bg-background text-foreground relative inline-flex items-center border px-4 py-2 text-sm font-medium",
148
- children: [
149
- currentPage,
150
- " / ",
151
- totalPages
152
- ]
153
- }),
154
- /* @__PURE__ */ jsxs("button", {
155
- type: "button",
156
- onClick: handleNextClick,
157
- disabled: isNextDisabled,
158
- className: cn(buttonBase, "border-border text-muted-foreground hover:bg-accent rounded-r-md border"),
159
- children: [/* @__PURE__ */ jsx("span", {
160
- className: "sr-only",
161
- children: "Next"
162
- }), /* @__PURE__ */ jsx(ChevronRight, { className: "h-4 w-4" })]
163
- })
164
- ]
165
- })]
166
- })]
167
- });
168
- }
169
- //#endregion
170
- //#region ../../orders/ui/src/components/status-badge.tsx
171
- const colorStyles = {
172
- green: "bg-green-100 text-green-800 dark:bg-green-900/30 dark:text-green-400",
173
- yellow: "bg-yellow-100 text-yellow-800 dark:bg-yellow-900/30 dark:text-yellow-400",
174
- red: "bg-red-100 text-red-800 dark:bg-red-900/30 dark:text-red-400",
175
- blue: "bg-blue-100 text-blue-800 dark:bg-blue-900/30 dark:text-blue-400",
176
- gray: "bg-gray-100 text-gray-800 dark:bg-gray-800 dark:text-gray-300"
177
- };
178
- const dotColorStyles = {
179
- green: "bg-green-500",
180
- yellow: "bg-yellow-500",
181
- red: "bg-red-500",
182
- blue: "bg-blue-500",
183
- gray: "bg-gray-500"
184
- };
185
- const sizeStyles = {
186
- xs: "px-1.5 py-0.5 text-[10px]",
187
- sm: "px-2 py-0.5 text-xs",
188
- md: "px-2.5 py-1 text-sm"
189
- };
190
- function StatusBadge({ color, dot, size = "md", className, children }) {
191
- return /* @__PURE__ */ jsxs("span", {
192
- className: cn("inline-flex items-center gap-1 rounded-full font-medium whitespace-nowrap", colorStyles[color], sizeStyles[size], className),
193
- children: [dot && /* @__PURE__ */ jsx("span", { className: cn("h-1.5 w-1.5 rounded-full", dotColorStyles[color]) }), children]
194
- });
195
- }
196
- //#endregion
197
- //#region ../../orders/ui/src/components/table-column.tsx
198
- function TableColumn({ label, sortable = true, className, onSortClick, sortBy, sortData, chevronUpIcon, chevronDownIcon }) {
199
- const hideUpIcon = sortData?.column !== sortBy || sortData?.column === sortBy && sortData?.direction === "asc";
200
- const hideDownIcon = sortData?.column !== sortBy || sortData?.column === sortBy && sortData?.direction === "desc";
201
- return /* @__PURE__ */ jsx(TableHead, {
202
- className: cn("group text-muted-foreground cursor-pointer px-3 text-xs transition-colors duration-200", "hover:text-primary", className),
203
- onClick: () => sortable && onSortClick?.(sortBy ?? ""),
204
- children: /* @__PURE__ */ jsxs("div", {
205
- className: "relative flex items-center",
206
- children: [label, sortable && chevronUpIcon && chevronDownIcon && /* @__PURE__ */ jsx("button", {
207
- className: `ml-2 inline-flex flex-col items-center justify-center group-hover:opacity-100 ${sortData?.column === sortBy ? "opacity-100" : "opacity-0"} transition-opacity duration-200`,
208
- children: /* @__PURE__ */ jsxs("div", {
209
- className: "flex flex-col",
210
- children: [/* @__PURE__ */ jsx("img", {
211
- src: chevronUpIcon,
212
- alt: "",
213
- width: 12,
214
- height: 12,
215
- 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")
216
- }), /* @__PURE__ */ jsx("img", {
217
- src: chevronDownIcon,
218
- alt: "",
219
- width: 12,
220
- height: 12,
221
- 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")
222
- })]
223
- })
224
- })]
225
- })
226
- });
227
- }
228
- //#endregion
229
- //#region ../../orders/ui/src/lib/format.ts
230
- function startCase(str) {
231
- if (!str) return "";
232
- return str.replace(/_/g, " ").replace(/\b\w/g, (char) => char.toUpperCase());
233
- }
234
- //#endregion
235
- //#region ../../orders/ui/src/components/order-status-badge.tsx
236
- const statusColorMap = {
237
- paid: "green",
238
- fulfilled: "green",
239
- delivered: "green",
240
- complete: "green",
241
- pending: "yellow",
242
- unfulfilled: "yellow",
243
- partially_fulfilled: "yellow",
244
- processing: "yellow",
245
- refunded: "red",
246
- cancelled: "red",
247
- failed: "red",
248
- voided: "red"
249
- };
250
- function OrderStatusBadge({ status, className }) {
251
- return /* @__PURE__ */ jsx(StatusBadge, {
252
- color: statusColorMap[status] ?? "gray",
253
- dot: true,
254
- size: "sm",
255
- className,
256
- children: startCase(status)
257
- });
258
- }
259
- //#endregion
260
- export { usePortalTenantOrder as a, PaginationFooter as i, TableColumn as n, usePortalTenantOrders as o, StatusBadge as r, OrdersCoreProvider as s, OrderStatusBadge as t };
261
-
262
- //# sourceMappingURL=order-status-badge-CCK76FjJ.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"order-status-badge-CCK76FjJ.mjs","names":[],"sources":["../../../orders/core/src/context.ts","../../../orders/core/src/provider.tsx","../../../orders/core/src/query-keys.ts","../../../orders/core/src/hooks/use-portal-tenant-orders.ts","../../../orders/core/src/hooks/use-portal-tenant-order.ts","../../../orders/ui/src/components/pagination-footer.tsx","../../../orders/ui/src/components/status-badge.tsx","../../../orders/ui/src/components/table-column.tsx","../../../orders/ui/src/lib/format.ts","../../../orders/ui/src/components/order-status-badge.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\nexport const portalTenantOrdersKeys = {\n all: [\"portalTenantOrders\"] as const,\n list: (params?: orders.PortalTenantFetchOrdersParams) =>\n [...portalTenantOrdersKeys.all, \"list\", params] as const,\n detail: (id: string | number) =>\n [...portalTenantOrdersKeys.all, \"detail\", id] as const,\n} as const;\n","import { useQuery } from \"@tanstack/react-query\";\nimport type { orders } from \"../types\";\nimport { portalTenantOrdersKeys } from \"../query-keys\";\nimport { useOrdersApi } from \"../context\";\n\nexport function usePortalTenantOrders(\n params: orders.PortalTenantFetchOrdersParams,\n options?: { enabled?: boolean },\n) {\n const api = useOrdersApi();\n return useQuery({\n queryKey: portalTenantOrdersKeys.list(params),\n queryFn: () => {\n if (!api.fetchOrders) {\n throw new Error(\"fetchOrders not implemented on this OrdersApi\");\n }\n return api.fetchOrders(params);\n },\n enabled: options?.enabled ?? true,\n });\n}\n","import { useQuery } from \"@tanstack/react-query\";\nimport { portalTenantOrdersKeys } from \"../query-keys\";\nimport { useOrdersApi } from \"../context\";\n\nexport function usePortalTenantOrder(\n id: string | number,\n options?: { enabled?: boolean },\n) {\n const api = useOrdersApi();\n return useQuery({\n queryKey: portalTenantOrdersKeys.detail(id),\n queryFn: () => {\n if (!api.fetchOrderById) {\n throw new Error(\"fetchOrderById not implemented on this OrdersApi\");\n }\n return api.fetchOrderById(Number(id));\n },\n enabled: (options?.enabled ?? true) && !!id,\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","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"],"mappings":"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"}
@@ -1,304 +0,0 @@
1
- require("./chunk-9hOWP6kD.cjs");
2
- const require_src = require("./src-DvJ4o9Sq.cjs");
3
- let react = require("react");
4
- let _tanstack_react_query = require("@tanstack/react-query");
5
- let react_jsx_runtime = require("react/jsx-runtime");
6
- let lucide_react = require("lucide-react");
7
- //#region ../../orders/core/src/context.ts
8
- const OrdersApiContext = (0, react.createContext)(null);
9
- const OrdersApiProvider = OrdersApiContext.Provider;
10
- function useOrdersApi() {
11
- const api = (0, react.useContext)(OrdersApiContext);
12
- if (!api) throw new Error("useOrdersApi must be used within an OrdersCoreProvider");
13
- return api;
14
- }
15
- //#endregion
16
- //#region ../../orders/core/src/provider.tsx
17
- function OrdersCoreProvider({ api, children }) {
18
- return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(OrdersApiProvider, {
19
- value: api,
20
- children
21
- });
22
- }
23
- //#endregion
24
- //#region ../../orders/core/src/query-keys.ts
25
- const portalTenantOrdersKeys = {
26
- all: ["portalTenantOrders"],
27
- list: (params) => [
28
- ...portalTenantOrdersKeys.all,
29
- "list",
30
- params
31
- ],
32
- detail: (id) => [
33
- ...portalTenantOrdersKeys.all,
34
- "detail",
35
- id
36
- ]
37
- };
38
- //#endregion
39
- //#region ../../orders/core/src/hooks/use-portal-tenant-orders.ts
40
- function usePortalTenantOrders(params, options) {
41
- const api = useOrdersApi();
42
- return (0, _tanstack_react_query.useQuery)({
43
- queryKey: portalTenantOrdersKeys.list(params),
44
- queryFn: () => {
45
- if (!api.fetchOrders) throw new Error("fetchOrders not implemented on this OrdersApi");
46
- return api.fetchOrders(params);
47
- },
48
- enabled: options?.enabled ?? true
49
- });
50
- }
51
- //#endregion
52
- //#region ../../orders/core/src/hooks/use-portal-tenant-order.ts
53
- function usePortalTenantOrder(id, options) {
54
- const api = useOrdersApi();
55
- return (0, _tanstack_react_query.useQuery)({
56
- queryKey: portalTenantOrdersKeys.detail(id),
57
- queryFn: () => {
58
- if (!api.fetchOrderById) throw new Error("fetchOrderById not implemented on this OrdersApi");
59
- return api.fetchOrderById(Number(id));
60
- },
61
- enabled: (options?.enabled ?? true) && !!id
62
- });
63
- }
64
- //#endregion
65
- //#region ../../orders/ui/src/components/pagination-footer.tsx
66
- function PaginationFooter({ currentPage, totalPages, pageSize, totalItems, onPageChange, cursorPaginationMode, hasNextPage, hasPrevPage, onCursorNext, onCursorPrev }) {
67
- const isCursor = !!cursorPaginationMode;
68
- const isPrevDisabled = isCursor ? !hasPrevPage : currentPage === 1;
69
- const isNextDisabled = isCursor ? !hasNextPage : totalPages === 0 || currentPage === totalPages;
70
- const handlePrevClick = () => {
71
- if (isCursor) onCursorPrev?.();
72
- else onPageChange?.(currentPage - 1);
73
- };
74
- const handleNextClick = () => {
75
- if (isCursor) onCursorNext?.();
76
- else onPageChange?.(currentPage + 1);
77
- };
78
- const displayText = (() => {
79
- if (isCursor) return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [
80
- "Total ",
81
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
82
- className: "font-medium",
83
- children: totalItems
84
- }),
85
- " results"
86
- ] });
87
- const start = totalItems === 0 ? 0 : (currentPage - 1) * pageSize + 1;
88
- const end = Math.min(currentPage * pageSize, totalItems);
89
- return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [
90
- "Showing ",
91
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
92
- className: "font-medium",
93
- children: start
94
- }),
95
- " to",
96
- " ",
97
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
98
- className: "font-medium",
99
- children: end
100
- }),
101
- " of",
102
- " ",
103
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
104
- className: "font-medium",
105
- children: totalItems
106
- }),
107
- " results"
108
- ] });
109
- })();
110
- const buttonBase = "relative inline-flex items-center px-3 py-2 text-sm font-medium transition-colors disabled:pointer-events-none disabled:opacity-50";
111
- return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
112
- className: "border-border flex items-center justify-between border-t px-4 py-3 sm:px-6",
113
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
114
- className: "flex flex-1 justify-between sm:hidden",
115
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
116
- type: "button",
117
- onClick: handlePrevClick,
118
- disabled: isPrevDisabled,
119
- className: require_src.cn(buttonBase, "border-border bg-background text-foreground hover:bg-accent rounded-md border"),
120
- children: "Previous"
121
- }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
122
- type: "button",
123
- onClick: handleNextClick,
124
- disabled: isNextDisabled,
125
- className: require_src.cn(buttonBase, "border-border bg-background text-foreground hover:bg-accent ml-3 rounded-md border"),
126
- children: "Next"
127
- })]
128
- }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
129
- className: "hidden sm:flex sm:flex-1 sm:items-center sm:justify-between",
130
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
131
- className: "text-muted-foreground text-xs",
132
- children: displayText
133
- }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("nav", {
134
- "aria-label": "Pagination",
135
- className: "isolate inline-flex -space-x-px rounded-md shadow-sm",
136
- children: [
137
- /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("button", {
138
- type: "button",
139
- onClick: handlePrevClick,
140
- disabled: isPrevDisabled,
141
- className: require_src.cn(buttonBase, "border-border text-muted-foreground hover:bg-accent rounded-l-md border"),
142
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
143
- className: "sr-only",
144
- children: "Previous"
145
- }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(lucide_react.ChevronLeft, { className: "h-4 w-4" })]
146
- }),
147
- !isCursor && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
148
- className: "border-border bg-background text-foreground relative inline-flex items-center border px-4 py-2 text-sm font-medium",
149
- children: [
150
- currentPage,
151
- " / ",
152
- totalPages
153
- ]
154
- }),
155
- /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("button", {
156
- type: "button",
157
- onClick: handleNextClick,
158
- disabled: isNextDisabled,
159
- className: require_src.cn(buttonBase, "border-border text-muted-foreground hover:bg-accent rounded-r-md border"),
160
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
161
- className: "sr-only",
162
- children: "Next"
163
- }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(lucide_react.ChevronRight, { className: "h-4 w-4" })]
164
- })
165
- ]
166
- })]
167
- })]
168
- });
169
- }
170
- //#endregion
171
- //#region ../../orders/ui/src/components/status-badge.tsx
172
- const colorStyles = {
173
- green: "bg-green-100 text-green-800 dark:bg-green-900/30 dark:text-green-400",
174
- yellow: "bg-yellow-100 text-yellow-800 dark:bg-yellow-900/30 dark:text-yellow-400",
175
- red: "bg-red-100 text-red-800 dark:bg-red-900/30 dark:text-red-400",
176
- blue: "bg-blue-100 text-blue-800 dark:bg-blue-900/30 dark:text-blue-400",
177
- gray: "bg-gray-100 text-gray-800 dark:bg-gray-800 dark:text-gray-300"
178
- };
179
- const dotColorStyles = {
180
- green: "bg-green-500",
181
- yellow: "bg-yellow-500",
182
- red: "bg-red-500",
183
- blue: "bg-blue-500",
184
- gray: "bg-gray-500"
185
- };
186
- const sizeStyles = {
187
- xs: "px-1.5 py-0.5 text-[10px]",
188
- sm: "px-2 py-0.5 text-xs",
189
- md: "px-2.5 py-1 text-sm"
190
- };
191
- function StatusBadge({ color, dot, size = "md", className, children }) {
192
- return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
193
- className: require_src.cn("inline-flex items-center gap-1 rounded-full font-medium whitespace-nowrap", colorStyles[color], sizeStyles[size], className),
194
- children: [dot && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { className: require_src.cn("h-1.5 w-1.5 rounded-full", dotColorStyles[color]) }), children]
195
- });
196
- }
197
- //#endregion
198
- //#region ../../orders/ui/src/components/table-column.tsx
199
- function TableColumn({ label, sortable = true, className, onSortClick, sortBy, sortData, chevronUpIcon, chevronDownIcon }) {
200
- const hideUpIcon = sortData?.column !== sortBy || sortData?.column === sortBy && sortData?.direction === "asc";
201
- const hideDownIcon = sortData?.column !== sortBy || sortData?.column === sortBy && sortData?.direction === "desc";
202
- return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_src.TableHead, {
203
- className: require_src.cn("group text-muted-foreground cursor-pointer px-3 text-xs transition-colors duration-200", "hover:text-primary", className),
204
- onClick: () => sortable && onSortClick?.(sortBy ?? ""),
205
- children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
206
- className: "relative flex items-center",
207
- children: [label, sortable && chevronUpIcon && chevronDownIcon && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
208
- className: `ml-2 inline-flex flex-col items-center justify-center group-hover:opacity-100 ${sortData?.column === sortBy ? "opacity-100" : "opacity-0"} transition-opacity duration-200`,
209
- children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
210
- className: "flex flex-col",
211
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("img", {
212
- src: chevronUpIcon,
213
- alt: "",
214
- width: 12,
215
- height: 12,
216
- 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")
217
- }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("img", {
218
- src: chevronDownIcon,
219
- alt: "",
220
- width: 12,
221
- height: 12,
222
- 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")
223
- })]
224
- })
225
- })]
226
- })
227
- });
228
- }
229
- //#endregion
230
- //#region ../../orders/ui/src/lib/format.ts
231
- function startCase(str) {
232
- if (!str) return "";
233
- return str.replace(/_/g, " ").replace(/\b\w/g, (char) => char.toUpperCase());
234
- }
235
- //#endregion
236
- //#region ../../orders/ui/src/components/order-status-badge.tsx
237
- const statusColorMap = {
238
- paid: "green",
239
- fulfilled: "green",
240
- delivered: "green",
241
- complete: "green",
242
- pending: "yellow",
243
- unfulfilled: "yellow",
244
- partially_fulfilled: "yellow",
245
- processing: "yellow",
246
- refunded: "red",
247
- cancelled: "red",
248
- failed: "red",
249
- voided: "red"
250
- };
251
- function OrderStatusBadge({ status, className }) {
252
- return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(StatusBadge, {
253
- color: statusColorMap[status] ?? "gray",
254
- dot: true,
255
- size: "sm",
256
- className,
257
- children: startCase(status)
258
- });
259
- }
260
- //#endregion
261
- Object.defineProperty(exports, "OrderStatusBadge", {
262
- enumerable: true,
263
- get: function() {
264
- return OrderStatusBadge;
265
- }
266
- });
267
- Object.defineProperty(exports, "OrdersCoreProvider", {
268
- enumerable: true,
269
- get: function() {
270
- return OrdersCoreProvider;
271
- }
272
- });
273
- Object.defineProperty(exports, "PaginationFooter", {
274
- enumerable: true,
275
- get: function() {
276
- return PaginationFooter;
277
- }
278
- });
279
- Object.defineProperty(exports, "StatusBadge", {
280
- enumerable: true,
281
- get: function() {
282
- return StatusBadge;
283
- }
284
- });
285
- Object.defineProperty(exports, "TableColumn", {
286
- enumerable: true,
287
- get: function() {
288
- return TableColumn;
289
- }
290
- });
291
- Object.defineProperty(exports, "usePortalTenantOrder", {
292
- enumerable: true,
293
- get: function() {
294
- return usePortalTenantOrder;
295
- }
296
- });
297
- Object.defineProperty(exports, "usePortalTenantOrders", {
298
- enumerable: true,
299
- get: function() {
300
- return usePortalTenantOrders;
301
- }
302
- });
303
-
304
- //# sourceMappingURL=order-status-badge-CDdk0tyF.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"order-status-badge-CDdk0tyF.cjs","names":["cn","ChevronLeft","ChevronRight","cn","TableHead","cn"],"sources":["../../../orders/core/src/context.ts","../../../orders/core/src/provider.tsx","../../../orders/core/src/query-keys.ts","../../../orders/core/src/hooks/use-portal-tenant-orders.ts","../../../orders/core/src/hooks/use-portal-tenant-order.ts","../../../orders/ui/src/components/pagination-footer.tsx","../../../orders/ui/src/components/status-badge.tsx","../../../orders/ui/src/components/table-column.tsx","../../../orders/ui/src/lib/format.ts","../../../orders/ui/src/components/order-status-badge.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\nexport const portalTenantOrdersKeys = {\n all: [\"portalTenantOrders\"] as const,\n list: (params?: orders.PortalTenantFetchOrdersParams) =>\n [...portalTenantOrdersKeys.all, \"list\", params] as const,\n detail: (id: string | number) =>\n [...portalTenantOrdersKeys.all, \"detail\", id] as const,\n} as const;\n","import { useQuery } from \"@tanstack/react-query\";\nimport type { orders } from \"../types\";\nimport { portalTenantOrdersKeys } from \"../query-keys\";\nimport { useOrdersApi } from \"../context\";\n\nexport function usePortalTenantOrders(\n params: orders.PortalTenantFetchOrdersParams,\n options?: { enabled?: boolean },\n) {\n const api = useOrdersApi();\n return useQuery({\n queryKey: portalTenantOrdersKeys.list(params),\n queryFn: () => {\n if (!api.fetchOrders) {\n throw new Error(\"fetchOrders not implemented on this OrdersApi\");\n }\n return api.fetchOrders(params);\n },\n enabled: options?.enabled ?? true,\n });\n}\n","import { useQuery } from \"@tanstack/react-query\";\nimport { portalTenantOrdersKeys } from \"../query-keys\";\nimport { useOrdersApi } from \"../context\";\n\nexport function usePortalTenantOrder(\n id: string | number,\n options?: { enabled?: boolean },\n) {\n const api = useOrdersApi();\n return useQuery({\n queryKey: portalTenantOrdersKeys.detail(id),\n queryFn: () => {\n if (!api.fetchOrderById) {\n throw new Error(\"fetchOrderById not implemented on this OrdersApi\");\n }\n return api.fetchOrderById(Number(id));\n },\n enabled: (options?.enabled ?? true) && !!id,\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","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"],"mappings":"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"}