@fluid-app/portal-sdk 0.1.150 → 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 (86) 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-BRLqZ5Aj.cjs → ContactsScreen-BTff-1nA.cjs} +2 -2
  7. package/dist/{ContactsScreen--c03aFBb.mjs → ContactsScreen-Cy5bom0o.mjs} +2 -2
  8. package/dist/{ContactsScreen--c03aFBb.mjs.map → ContactsScreen-Cy5bom0o.mjs.map} +1 -1
  9. package/dist/{ContactsScreen-C-wNg4uQ.cjs → ContactsScreen-IfYXlJhs.cjs} +2 -2
  10. package/dist/{ContactsScreen-C-wNg4uQ.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-CeyfnOeb.cjs → OrdersScreen-CwrDNuJd.cjs} +85 -235
  21. package/dist/OrdersScreen-CwrDNuJd.cjs.map +1 -0
  22. package/dist/{OrdersScreen-DZ0sgSHZ.mjs → OrdersScreen-DWBMyuuW.mjs} +87 -237
  23. package/dist/OrdersScreen-DWBMyuuW.mjs.map +1 -0
  24. package/dist/{OrdersScreen-CCpGsP-L.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-C5BF7B4b.mjs → ProductsScreen-icFY3n_C.mjs} +3 -3
  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-DutWYuKD.mjs → ShareablesScreen-bDjb5T1-.mjs} +3 -3
  42. package/dist/{ShopScreen-a3P0O4WA.cjs → ShopScreen-BW2Dx21M.cjs} +4 -4
  43. package/dist/{ShopScreen-a3P0O4WA.cjs.map → ShopScreen-BW2Dx21M.cjs.map} +1 -1
  44. package/dist/{ShopScreen-5PBOI4UO.cjs → ShopScreen-DnZsZ9_o.cjs} +2 -2
  45. package/dist/{ShopScreen-DMVWsOB-.mjs → ShopScreen-DzloqmdT.mjs} +4 -4
  46. package/dist/{ShopScreen-DMVWsOB-.mjs.map → ShopScreen-DzloqmdT.mjs.map} +1 -1
  47. package/dist/{SubscriptionsScreen-B6Wy4na9.cjs → SubscriptionsScreen-9rur531Y.cjs} +3 -3
  48. package/dist/{SubscriptionsScreen-B6Wy4na9.cjs.map → SubscriptionsScreen-9rur531Y.cjs.map} +1 -1
  49. package/dist/{SubscriptionsScreen-BITwBKgB.cjs → SubscriptionsScreen-CSiEOTPS.cjs} +2 -2
  50. package/dist/{SubscriptionsScreen-DzfYCz8K.mjs → SubscriptionsScreen-DpPl_eEV.mjs} +3 -3
  51. package/dist/{SubscriptionsScreen-DzfYCz8K.mjs.map → SubscriptionsScreen-DpPl_eEV.mjs.map} +1 -1
  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 +10 -10
  79. package/dist/OrdersScreen-CeyfnOeb.cjs.map +0 -1
  80. package/dist/OrdersScreen-DZ0sgSHZ.mjs.map +0 -1
  81. package/dist/order-status-badge-CAO-R9SO.cjs +0 -304
  82. package/dist/order-status-badge-CAO-R9SO.cjs.map +0 -1
  83. package/dist/order-status-badge-Dy8w7xHm.mjs +0 -262
  84. package/dist/order-status-badge-Dy8w7xHm.mjs.map +0 -1
  85. package/dist/portal_tenant-D9tdph5J.mjs.map +0 -1
  86. package/dist/portal_tenant-z_4uJF7r.cjs.map +0 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fluid-app/portal-sdk",
3
- "version": "0.1.150",
3
+ "version": "0.1.151",
4
4
  "description": "SDK for building custom Fluid portals",
5
5
  "files": [
6
6
  "dist",
@@ -72,10 +72,9 @@
72
72
  "typescript": "^5",
73
73
  "zod": "4.3.5",
74
74
  "@fluid-app/api-client-core": "0.1.0",
75
- "@fluid-app/auth": "0.1.0",
76
75
  "@fluid-app/company-switcher-core": "0.1.0",
77
- "@fluid-app/company-switcher-ui": "0.1.0",
78
76
  "@fluid-app/cart-ui": "0.1.15",
77
+ "@fluid-app/auth": "0.1.0",
79
78
  "@fluid-app/contacts-core": "0.1.0",
80
79
  "@fluid-app/contacts-api-client": "0.1.0",
81
80
  "@fluid-app/contacts-ui": "0.1.0",
@@ -83,21 +82,22 @@
83
82
  "@fluid-app/file-picker-core": "0.1.0",
84
83
  "@fluid-app/fluid-pay-api-client": "0.1.0",
85
84
  "@fluid-app/fluid-pay-core": "0.1.0",
86
- "@fluid-app/messaging-api-client": "0.1.0",
87
85
  "@fluid-app/fluidos-api-client": "0.1.0",
88
- "@fluid-app/messaging-ui": "0.1.0",
89
86
  "@fluid-app/messaging-core": "0.1.0",
87
+ "@fluid-app/company-switcher-ui": "0.1.0",
88
+ "@fluid-app/messaging-api-client": "0.1.0",
89
+ "@fluid-app/messaging-ui": "0.1.0",
90
90
  "@fluid-app/mysite-ui": "0.1.0",
91
- "@fluid-app/orders-api-client": "0.1.0",
92
91
  "@fluid-app/orders-core": "0.1.0",
93
92
  "@fluid-app/orders-ui": "0.1.0",
94
93
  "@fluid-app/permissions": "0.1.0",
95
94
  "@fluid-app/portal-app-download-ui": "0.1.0",
96
95
  "@fluid-app/portal-core": "0.1.23",
97
96
  "@fluid-app/portal-preview": "0.1.0",
98
- "@fluid-app/portal-pro-upgrade-ui": "0.1.0",
97
+ "@fluid-app/orders-api-client": "0.1.0",
99
98
  "@fluid-app/portal-react": "0.1.0",
100
99
  "@fluid-app/portal-tenant-api-client": "0.1.0",
100
+ "@fluid-app/portal-pro-upgrade-ui": "0.1.0",
101
101
  "@fluid-app/portal-tenant-contacts-api-client": "0.1.0",
102
102
  "@fluid-app/portal-tenant-mysite-api-client": "0.1.0",
103
103
  "@fluid-app/portal-tenant-pay-api-client": "0.1.0",
@@ -108,14 +108,14 @@
108
108
  "@fluid-app/profile-ui": "0.1.0",
109
109
  "@fluid-app/query-persister": "0.1.0",
110
110
  "@fluid-app/shareables-api-client": "0.1.0",
111
- "@fluid-app/shareables-core": "0.1.0",
112
111
  "@fluid-app/shareables-ui": "0.1.0",
112
+ "@fluid-app/shareables-core": "0.1.0",
113
113
  "@fluid-app/shop-ui": "0.1.0",
114
114
  "@fluid-app/store-api-client": "0.1.0",
115
115
  "@fluid-app/store-core": "0.1.0",
116
- "@fluid-app/subscriptions-ui": "0.1.0",
117
- "@fluid-app/subscriptions-core": "0.1.0",
118
116
  "@fluid-app/subscriptions-api-client": "0.1.0",
117
+ "@fluid-app/subscriptions-core": "0.1.0",
118
+ "@fluid-app/subscriptions-ui": "0.1.0",
119
119
  "@fluid-app/typescript-config": "0.0.0",
120
120
  "@fluid-app/ui-primitives": "0.1.13"
121
121
  },
@@ -1 +0,0 @@
1
- {"version":3,"file":"OrdersScreen-CeyfnOeb.cjs","names":["usePortalTenantOrders","Skeleton","StatusBadge","Table","TableHeader","TableRow","TableColumn","TableBody","TableCell","PaginationFooter","Breadcrumb","BreadcrumbList","BreadcrumbItem","BreadcrumbPage","usePortalTenantClient","useAppNavigation","OrdersCoreProvider","PortalOrdersListScreenContent","Skeleton","OrderStatusBadge","usePortalTenantOrder","Breadcrumb","BreadcrumbList","BreadcrumbItem","BreadcrumbLink","BreadcrumbSeparator","BreadcrumbPage","usePortalTenantClient","useAppNavigation","OrdersCoreProvider","PortalOrderDetailScreenContent","useAppNavigation"],"sources":["../../../orders/ui/src/components/portal-orders-list.tsx","../../../orders/ui/src/screens/PortalOrdersListScreen.tsx","../../../orders/api-client/src/portal-tenant-adapter.ts","../src/adapters/orders-api-adapter.ts","../src/screens/OrdersListScreen.tsx","../../../orders/ui/src/components/portal-order-detail.tsx","../../../orders/ui/src/screens/PortalOrderDetailScreen.tsx","../src/screens/OrderDetailScreen.tsx","../src/screens/OrdersScreen.tsx"],"sourcesContent":["import { useState, useCallback } from \"react\";\nimport type { orders } from \"@fluid-app/orders-core\";\nimport { usePortalTenantOrders } 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 { PaginationFooter } from \"./pagination-footer\";\nimport { StatusBadge } from \"./status-badge\";\nimport { TableColumn } from \"./table-column\";\n\nexport interface PortalOrdersListProps {\n onOrderClick: (order: orders.PortalTenantOrder) => void;\n t: (key: string) => string;\n pageSize?: number;\n}\n\nfunction formatTotal(order: orders.PortalTenantOrder): string {\n return `${order.currency} ${Number(order.total).toFixed(2)}`;\n}\n\nexport function PortalOrdersList({\n onOrderClick,\n t,\n pageSize = 10,\n}: PortalOrdersListProps) {\n const [cursor, setCursor] = useState<string | null>(null);\n\n const params: orders.PortalTenantFetchOrdersParams = {\n limit: pageSize,\n cursor: cursor || undefined,\n };\n\n const { data, isLoading } = usePortalTenantOrders(params);\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 = ordersList.length;\n const hasNextPage = !!pagination?.next_cursor;\n const hasPrevPage = !!pagination?.prev_cursor;\n\n const firstItem = (order: orders.PortalTenantOrder) => order.line_items[0];\n\n return (\n <div className=\"border-border overflow-hidden rounded-lg border shadow-sm\">\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 {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 <div className=\"bg-border h-12 w-12 flex-shrink-0 rounded-md\" />\n <div className=\"w-0 min-w-0 flex-1\">\n {firstItem(order) ? (\n <p className=\"text-foreground truncate text-sm font-medium\">\n {firstItem(order)?.product_name}\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 <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(\"status\")}\n </span>\n <StatusBadge\n color={\n order.status === \"delivered\" ||\n order.status === \"shipped\"\n ? \"green\"\n : order.status === \"cancelled\" ||\n order.status === \"returned\"\n ? \"red\"\n : \"yellow\"\n }\n size=\"xs\"\n >\n {order.status}\n </StatusBadge>\n </div>\n <div className=\"col-span-2 mt-1\">\n <span className=\"text-foreground font-medium\">\n {formatTotal(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-[20%] min-w-[100px]\" />\n <col className=\"w-[20%] min-w-[100px]\" />\n <col className=\"w-[20%] 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(\"status\")} 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 <Skeleton className=\"h-4 w-32\" />\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-20\" />\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={4}\n className=\"text-muted-foreground px-3 py-8 text-center text-sm\"\n >\n {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-foreground px-3 py-4 text-sm font-medium\">\n {firstItem(order)?.product_name ?? (\n <span className=\"text-muted-foreground italic\">\n {t(\"this_product_no_longer_exists\")}\n </span>\n )}\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=\"px-3 py-4 text-sm\">\n <StatusBadge\n color={\n order.status === \"delivered\" ||\n order.status === \"shipped\"\n ? \"green\"\n : order.status === \"cancelled\" ||\n order.status === \"returned\"\n ? \"red\"\n : \"yellow\"\n }\n size=\"xs\"\n >\n {order.status}\n </StatusBadge>\n </TableCell>\n <TableCell className=\"text-foreground px-3 py-4 text-sm whitespace-nowrap\">\n {formatTotal(order)}\n </TableCell>\n </TableRow>\n ))\n )}\n </TableBody>\n </Table>\n </div>\n\n <PaginationFooter\n currentPage={1}\n totalPages={1}\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","\"use client\";\n\nimport { useMemo } from \"react\";\nimport type { orders } from \"@fluid-app/orders-core\";\nimport {\n Breadcrumb,\n BreadcrumbList,\n BreadcrumbItem,\n BreadcrumbPage,\n} from \"@fluid-app/ui-primitives\";\nimport { useScreenHeaderBreadcrumbs } from \"@fluid-app/portal-react/shell/ScreenHeaderContext\";\nimport { PortalOrdersList } from \"../components/portal-orders-list\";\n\nexport interface PortalOrdersListScreenProps {\n onOrderClick: (order: orders.PortalTenantOrder) => void;\n t: (key: string) => string;\n pageSize?: number;\n}\n\nexport function PortalOrdersListScreen({\n onOrderClick,\n t,\n pageSize,\n}: PortalOrdersListScreenProps) {\n const headerBreadcrumbs = useMemo(\n () => (\n <Breadcrumb>\n <BreadcrumbList className=\"text-lg\">\n <BreadcrumbItem>\n <BreadcrumbPage className=\"font-semibold\">Orders</BreadcrumbPage>\n </BreadcrumbItem>\n </BreadcrumbList>\n </Breadcrumb>\n ),\n [],\n );\n useScreenHeaderBreadcrumbs(headerBreadcrumbs);\n\n return (\n <div className=\"mx-auto max-w-7xl px-4 py-4 sm:px-6 sm:py-6 lg:px-10 lg:py-8\">\n <PortalOrdersList onOrderClick={onOrderClick} t={t} pageSize={pageSize} />\n </div>\n );\n}\n","import type { FetchClient } from \"./lib/fetch-client\";\nimport type { OrdersApi } from \"@fluid-app/orders-core\";\nimport type { orders } from \"@fluid-app/orders-core\";\nimport { portalTenant } from \"@fluid-app/portal-tenant-api-client\";\n\n/**\n * Creates an OrdersApi adapter backed by the portal-tenant BFF.\n *\n * Maps the generated portal-tenant namespace functions to the abstract\n * OrdersApi port, closing over the FetchClient so consumers don't need\n * to pass it per-call.\n */\n\nfunction mapOrder(\n raw: NonNullable<\n Awaited<ReturnType<typeof portalTenant.orders_show>>[\"order\"]\n >,\n): orders.PortalTenantOrder {\n return {\n id: raw.id ?? 0,\n token: raw.token ?? \"\",\n status: (raw.status ?? \"pending\") as orders.PortalTenantOrderStatus,\n total: raw.total ?? \"0\",\n currency: raw.currency ?? \"\",\n line_items: (raw.line_items ?? []).map((li) => ({\n id: li.id ?? 0,\n product_id: li.product_id ?? 0,\n product_name: li.product_name ?? \"\",\n quantity: li.quantity ?? 0,\n price: li.price ?? \"0\",\n total: li.total ?? \"0\",\n })),\n customer_name: raw.customer_name ?? null,\n customer_email: raw.customer_email ?? null,\n total_points_credited:\n typeof (raw as Record<string, unknown>).total_points_credited === \"number\"\n ? ((raw as Record<string, unknown>).total_points_credited as number)\n : undefined,\n customer_points_balance:\n typeof (raw as Record<string, unknown>).customer_points_balance ===\n \"number\"\n ? ((raw as Record<string, unknown>).customer_points_balance as number)\n : undefined,\n created_at: raw.created_at ?? \"\",\n updated_at: raw.updated_at ?? \"\",\n } satisfies orders.PortalTenantOrder;\n}\n\nfunction mapMeta(\n raw: Awaited<ReturnType<typeof portalTenant.orders_list>>[\"meta\"] | undefined,\n): orders.PortalTenantMeta {\n return {\n request_id: raw?.request_id ?? \"\",\n timestamp: raw?.timestamp ?? \"\",\n pagination: {\n cursor: raw?.pagination?.cursor ?? null,\n limit: raw?.pagination?.limit ?? 25,\n next_cursor: raw?.pagination?.next_cursor ?? null,\n prev_cursor: raw?.pagination?.prev_cursor ?? null,\n },\n } satisfies orders.PortalTenantMeta;\n}\n\nexport function createPortalTenantOrdersAdapter(\n client: FetchClient,\n): Required<Pick<OrdersApi, \"fetchOrderById\" | \"fetchOrders\">> {\n return {\n fetchOrderById: async (id: number) => {\n const response = await portalTenant.orders_show(client, id);\n return {\n order: mapOrder(response.order ?? {}),\n meta: {\n request_id: response.meta?.request_id ?? \"\",\n timestamp: response.meta?.timestamp ?? \"\",\n },\n } satisfies orders.PortalTenantOrderResponse;\n },\n\n fetchOrders: async (params: orders.PortalTenantFetchOrdersParams) => {\n const response = await portalTenant.orders_list(client, {\n \"page[cursor]\": params.cursor,\n \"page[limit]\": params.limit,\n status: params.status,\n });\n return {\n orders: (response.orders ?? []).map(mapOrder),\n meta: mapMeta(response.meta),\n } satisfies orders.PortalTenantOrdersResponse;\n },\n };\n}\n","import type { OrdersApi } from \"@fluid-app/orders-core\";\nimport type { FetchClient } from \"@fluid-app/portal-tenant-api-client\";\nimport { createPortalTenantOrdersAdapter } from \"@fluid-app/orders-api-client\";\n\n/**\n * Creates an OrdersApi adapter for the portal-tenant BFF.\n *\n * Delegates to the existing clean adapter in orders/api-client which maps\n * BFF responses to PortalTenantOrder types. The legacy methods (fetchOrder,\n * fetchCustomerOrders) are not used by portal UI — portal-specific hooks\n * call fetchOrders/fetchOrderById directly.\n */\nexport function createPortalOrdersAdapter(client: FetchClient): OrdersApi {\n const bffAdapter = createPortalTenantOrdersAdapter(client);\n return {\n fetchOrderById: bffAdapter.fetchOrderById,\n fetchOrders: bffAdapter.fetchOrders,\n };\n}\n","import { useMemo } from \"react\";\nimport { OrdersCoreProvider } from \"@fluid-app/orders-core\";\nimport type { orders } from \"@fluid-app/orders-core\";\nimport { PortalOrdersListScreen as PortalOrdersListScreenContent } from \"@fluid-app/orders-ui/screens/PortalOrdersListScreen\";\nimport { createPortalOrdersAdapter } from \"../adapters/orders-api-adapter\";\nimport { usePortalTenantClient } from \"../providers/PortalTenantClientProvider\";\nimport { useAppNavigation } from \"../shell/AppNavigationContext\";\n\nconst translations: Record<string, string> = {\n search_orders: \"Search orders...\",\n order_number: \"Order #\",\n date: \"Date\",\n status: \"Status\",\n product: \"Product\",\n no_orders_found: \"No orders found\",\n no_matching_orders: \"No matching orders\",\n no_image_available: \"No image available\",\n this_product_no_longer_exists: \"This product no longer exists\",\n subscription: \"Subscription\",\n view_subscription: \"View Subscription\",\n total: \"Total\",\n results: \"results\",\n previous: \"Previous\",\n next: \"Next\",\n pagination: \"Pagination\",\n};\n\nexport function OrdersListScreen(): React.JSX.Element {\n const client = usePortalTenantClient();\n const ordersApi = useMemo(() => createPortalOrdersAdapter(client), [client]);\n const { navigate } = useAppNavigation();\n\n const handleOrderClick = (order: orders.PortalTenantOrder) => {\n navigate(`orders/${order.token}`);\n };\n\n return (\n <OrdersCoreProvider api={ordersApi}>\n <PortalOrdersListScreenContent\n onOrderClick={handleOrderClick}\n t={(key) => translations[key] ?? key}\n />\n </OrdersCoreProvider>\n );\n}\n","import { useEffect } from \"react\";\nimport type { orders } from \"@fluid-app/orders-core\";\nimport { usePortalTenantOrder } from \"@fluid-app/orders-core\";\nimport { Skeleton } from \"@fluid-app/ui-primitives\";\nimport { OrderStatusBadge } from \"./order-status-badge\";\n\nexport interface PortalOrderDetailProps {\n id: string | number;\n onNotFound?: () => void;\n onError?: (error: Error) => void;\n}\n\nfunction DetailSkeleton() {\n return (\n <div className=\"flex flex-col lg:grid lg:grid-cols-8\">\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 </div>\n </div>\n </div>\n <div className=\"mt-6 space-y-2\">\n <Skeleton className=\"h-4 w-full\" />\n <Skeleton className=\"h-5 w-full\" />\n </div>\n </div>\n </div>\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>\n </div>\n </div>\n );\n}\n\nfunction ItemRow({ item }: { item: orders.PortalTenantOrderLineItem }) {\n return (\n <div className=\"flex items-center space-x-4 py-4\">\n <div className=\"relative shrink-0\">\n <div className=\"bg-muted text-muted-foreground flex h-24 w-24 items-center justify-center overflow-hidden rounded\">\n No image\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.product_name}\n >\n {item.product_name}\n </p>\n <p className=\"text-foreground text-sm font-medium\">{item.total}</p>\n {item.quantity > 1 && (\n <p className=\"text-muted-foreground text-xs\">\n {item.price} x {item.quantity}\n </p>\n )}\n </div>\n </div>\n );\n}\n\nfunction ItemsSection({ order }: { order: orders.PortalTenantOrder }) {\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 <div className=\"mt-4\">\n <h2 className=\"text-foreground mb-2 text-lg font-medium\">\n Items ({order.line_items.length})\n </h2>\n <hr className=\"border-border\" />\n </div>\n\n <div className=\"divide-border divide-y\">\n {order.line_items.map((item) => (\n <ItemRow key={item.id} item={item} />\n ))}\n </div>\n\n <div className=\"border-border mb-4 border-t pt-4\">\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.currency} {order.total}\n </p>\n </div>\n </div>\n\n {/* TODO: i18n */}\n {/* TODO: gate on reward_points_enabled when available on PortalTenantOrder */}\n {order.total_points_credited != null &&\n order.total_points_credited > 0 && (\n <div className=\"border-border mb-4 border-t pt-4\">\n <div className=\"flex items-baseline justify-between\">\n <div>\n <p className=\"text-foreground text-sm font-semibold\">\n points earned on this order!\n </p>\n {order.customer_points_balance != null && (\n <p className=\"text-muted-foreground text-xs\">\n {order.customer_points_balance.toLocaleString()} points\n total\n </p>\n )}\n </div>\n <div className=\"text-right\">\n <p className=\"text-foreground text-sm font-semibold\">\n +{order.total_points_credited.toLocaleString()}\n </p>\n <p className=\"text-muted-foreground text-xs\">points</p>\n </div>\n </div>\n </div>\n )}\n </div>\n </section>\n );\n}\n\nfunction DetailsSection({ order }: { order: orders.PortalTenantOrder }) {\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\">Status:</span>\n <OrderStatusBadge status={order.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</div>\n <div className=\"text-foreground font-medium\">#{order.id}</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.customer_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.customer_email}\n </div>\n </div>\n )}\n {order.customer_name && (\n <div className=\"mt-3\">\n <div className=\"text-muted-foreground text-sm\">Customer</div>\n <div className=\"text-foreground text-sm font-medium\">\n {order.customer_name}\n </div>\n </div>\n )}\n </div>\n </div>\n </div>\n );\n}\n\nexport function PortalOrderDetail({\n id,\n onNotFound,\n onError,\n}: PortalOrderDetailProps) {\n const { data, isLoading, error } = usePortalTenantOrder(id);\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 <DetailSkeleton />;\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 <ItemsSection order={order} />\n <DetailsSection order={order} />\n </div>\n );\n}\n","\"use client\";\n\nimport { useMemo } from \"react\";\nimport {\n Breadcrumb,\n BreadcrumbItem,\n BreadcrumbLink,\n BreadcrumbList,\n BreadcrumbPage,\n BreadcrumbSeparator,\n} from \"@fluid-app/ui-primitives\";\nimport { useScreenHeaderBreadcrumbs } from \"@fluid-app/portal-react/shell/ScreenHeaderContext\";\nimport { PortalOrderDetail } from \"../components/portal-order-detail\";\n\nexport interface PortalOrderDetailScreenProps {\n id: string | number;\n onNavigateToList: () => void;\n onNotFound?: () => void;\n onError?: (error: Error) => void;\n}\n\nexport function PortalOrderDetailScreen({\n id,\n onNavigateToList,\n onNotFound,\n onError,\n}: PortalOrderDetailScreenProps) {\n const headerBreadcrumbs = useMemo(\n () => (\n <Breadcrumb>\n <BreadcrumbList className=\"text-lg\">\n <BreadcrumbItem>\n <BreadcrumbLink\n href=\"#\"\n onClick={(e) => {\n e.preventDefault();\n onNavigateToList();\n }}\n >\n Orders\n </BreadcrumbLink>\n </BreadcrumbItem>\n <BreadcrumbSeparator />\n <BreadcrumbItem>\n <BreadcrumbPage className=\"font-semibold\">\n Order #{id}\n </BreadcrumbPage>\n </BreadcrumbItem>\n </BreadcrumbList>\n </Breadcrumb>\n ),\n [id, onNavigateToList],\n );\n useScreenHeaderBreadcrumbs(headerBreadcrumbs);\n\n return (\n <div className=\"mx-auto max-w-7xl px-4 py-4 sm:px-6 sm:py-6 lg:px-10 lg:py-8\">\n <PortalOrderDetail id={id} onNotFound={onNotFound} onError={onError} />\n </div>\n );\n}\n","import { useMemo } from \"react\";\nimport { OrdersCoreProvider } from \"@fluid-app/orders-core\";\nimport { PortalOrderDetailScreen as PortalOrderDetailScreenContent } from \"@fluid-app/orders-ui/screens/PortalOrderDetailScreen\";\nimport { createPortalOrdersAdapter } from \"../adapters/orders-api-adapter\";\nimport { usePortalTenantClient } from \"../providers/PortalTenantClientProvider\";\nimport { useAppNavigation } from \"../shell/AppNavigationContext\";\n\ninterface OrderDetailScreenProps {\n token: string;\n onToast: (message: string, type: \"success\" | \"error\" | \"warning\") => void;\n}\n\nexport function OrderDetailScreen({\n token,\n onToast,\n}: OrderDetailScreenProps): React.JSX.Element {\n const client = usePortalTenantClient();\n const ordersApi = useMemo(() => createPortalOrdersAdapter(client), [client]);\n const { navigate } = useAppNavigation();\n\n return (\n <OrdersCoreProvider api={ordersApi}>\n <PortalOrderDetailScreenContent\n id={token}\n onNavigateToList={() => navigate(\"orders\")}\n onNotFound={() => {\n onToast(\"Order not found\", \"warning\");\n navigate(\"orders\");\n }}\n onError={(err) => {\n const message =\n err instanceof Error ? err.message : \"An error occurred\";\n onToast(`Failed to load order: ${message}`, \"error\");\n }}\n />\n </OrdersCoreProvider>\n );\n}\n","import type { ComponentProps } from \"react\";\nimport type {\n BackgroundValue,\n BorderRadiusOptions,\n ColorOptions,\n PaddingOptions,\n} from \"../types\";\nimport type { WidgetPropertySchema } from \"../registries/property-schema-types\";\nimport { useAppNavigation } from \"../shell/AppNavigationContext\";\nimport { OrdersListScreen } from \"./OrdersListScreen\";\nimport { OrderDetailScreen } from \"./OrderDetailScreen\";\n\ntype OrdersScreenProps = ComponentProps<\"div\"> & {\n background?: BackgroundValue;\n textColor?: ColorOptions;\n accentColor?: ColorOptions;\n padding?: PaddingOptions;\n borderRadius?: BorderRadiusOptions;\n onToast?: (message: string, type: \"success\" | \"error\" | \"warning\") => void;\n};\n\nfunction defaultToast(message: string, type: \"success\" | \"error\" | \"warning\") {\n if (type === \"error\" || type === \"warning\") {\n console.warn(\"[Orders]\", message);\n } else {\n console.info(\"[Orders]\", message);\n }\n}\n\nexport function OrdersScreen({\n onToast,\n /* eslint-disable @typescript-eslint/no-unused-vars -- destructured to exclude from divProps spread */\n background,\n textColor,\n accentColor,\n padding,\n borderRadius,\n /* eslint-enable @typescript-eslint/no-unused-vars */\n ...divProps\n}: OrdersScreenProps): React.JSX.Element {\n const { currentSlug } = useAppNavigation();\n const effectiveToast = onToast ?? defaultToast;\n\n // Parse slug: \"orders\" → list, \"orders/{token}\" → detail\n const detailToken = currentSlug.split(\"/\")[1];\n const isDetailView = detailToken !== undefined;\n\n if (isDetailView) {\n return (\n <div {...divProps}>\n <OrderDetailScreen token={detailToken} onToast={effectiveToast} />\n </div>\n );\n }\n\n return (\n <div {...divProps}>\n <OrdersListScreen />\n </div>\n );\n}\n\nexport const ordersScreenPropertySchema: WidgetPropertySchema = {\n widgetType: \"OrdersScreen\",\n displayName: \"Orders Screen\",\n tabsConfig: [{ id: \"styling\", label: \"Styling\" }],\n fields: [],\n} as const satisfies WidgetPropertySchema;\n"],"mappings":";;;;;;;;;;AAqBA,SAAS,YAAY,OAAyC;AAC5D,QAAO,GAAG,MAAM,SAAS,GAAG,OAAO,MAAM,MAAM,CAAC,QAAQ,EAAE;;AAG5D,SAAgB,iBAAiB,EAC/B,cACA,GACA,WAAW,MACa;CACxB,MAAM,CAAC,QAAQ,cAAA,GAAA,MAAA,UAAqC,KAAK;CAOzD,MAAM,EAAE,MAAM,cAAcA,2BAAAA,sBALyB;EACnD,OAAO;EACP,QAAQ,UAAU,KAAA;EACnB,CAEwD;CAEzD,MAAM,kBAAA,GAAA,MAAA,mBAAmC;EACvC,MAAM,aAAa,MAAM,MAAM,YAAY;AAC3C,MAAI,WACF,WAAU,WAAW;IAEtB,CAAC,MAAM,MAAM,YAAY,YAAY,CAAC;CAEzC,MAAM,kBAAA,GAAA,MAAA,mBAAmC;EACvC,MAAM,aAAa,MAAM,MAAM,YAAY;AAC3C,MAAI,WACF,WAAU,WAAW;MAErB,WAAU,KAAK;IAEhB,CAAC,MAAM,MAAM,YAAY,YAAY,CAAC;CAEzC,MAAM,aAAa,MAAM,UAAU,EAAE;CACrC,MAAM,aAAa,MAAM,MAAM;CAC/B,MAAM,aAAa,WAAW;CAC9B,MAAM,cAAc,CAAC,CAAC,YAAY;CAClC,MAAM,cAAc,CAAC,CAAC,YAAY;CAElC,MAAM,aAAa,UAAoC,MAAM,WAAW;AAExE,QACE,iBAAA,GAAA,kBAAA,MAAC,OAAD;EAAK,WAAU;YAAf;GAEE,iBAAA,GAAA,kBAAA,KAAC,OAAD;IAAK,WAAU;cACZ,YACC,MAAM,EAAE,CACL,KAAK,EAAE,CACP,KAAK,GAAG,UACP,iBAAA,GAAA,kBAAA,KAAC,OAAD;KAEE,WAAU;eAEV,iBAAA,GAAA,kBAAA,MAAC,OAAD;MAAK,WAAU;gBAAf,CACE,iBAAA,GAAA,kBAAA,KAACC,YAAAA,UAAD,EAAU,WAAU,wBAAyB,CAAA,EAC7C,iBAAA,GAAA,kBAAA,MAAC,OAAD;OAAK,WAAU;iBAAf,CACE,iBAAA,GAAA,kBAAA,KAACA,YAAAA,UAAD,EAAU,WAAU,aAAc,CAAA,EAClC,iBAAA,GAAA,kBAAA,KAACA,YAAAA,UAAD,EAAU,WAAU,aAAc,CAAA,CAC9B;SACF;;KACF,EAVC,YAAY,QAUb,CACN,GACF,WAAW,WAAW,IACxB,iBAAA,GAAA,kBAAA,KAAC,OAAD;KAAK,WAAU;eACZ,EAAE,kBAAkB;KACjB,CAAA,GAEN,WAAW,KAAK,UACd,iBAAA,GAAA,kBAAA,KAAC,OAAD;KAEE,WAAU;KACV,eAAe,aAAa,MAAM;eAElC,iBAAA,GAAA,kBAAA,MAAC,OAAD;MAAK,WAAU;gBAAf,CACE,iBAAA,GAAA,kBAAA,KAAC,OAAD,EAAK,WAAU,gDAAiD,CAAA,EAChE,iBAAA,GAAA,kBAAA,MAAC,OAAD;OAAK,WAAU;iBAAf,CACG,UAAU,MAAM,GACf,iBAAA,GAAA,kBAAA,KAAC,KAAD;QAAG,WAAU;kBACV,UAAU,MAAM,EAAE;QACjB,CAAA,GAEJ,iBAAA,GAAA,kBAAA,KAAC,OAAD;QAAK,WAAU;kBACb,iBAAA,GAAA,kBAAA,KAAC,OAAD;SAAK,WAAU;mBACZ,EAAE,gCAAgC;SAC/B,CAAA;QACF,CAAA,EAER,iBAAA,GAAA,kBAAA,MAAC,OAAD;QAAK,WAAU;kBAAf;SACE,iBAAA,GAAA,kBAAA,MAAC,OAAD,EAAA,UAAA,CACE,iBAAA,GAAA,kBAAA,KAAC,QAAD;UAAM,WAAU;oBACb,EAAE,OAAO;UACL,CAAA,EACP,iBAAA,GAAA,kBAAA,KAAC,QAAD;UAAM,WAAU;oBACb,IAAI,KAAK,MAAM,WAAW,CAAC,oBAAoB;UAC3C,CAAA,CACH,EAAA,CAAA;SACN,iBAAA,GAAA,kBAAA,MAAC,OAAD,EAAA,UAAA,CACE,iBAAA,GAAA,kBAAA,KAAC,QAAD;UAAM,WAAU;oBACb,EAAE,SAAS;UACP,CAAA,EACP,iBAAA,GAAA,kBAAA,KAACC,2BAAAA,aAAD;UACE,OACE,MAAM,WAAW,eACjB,MAAM,WAAW,YACb,UACA,MAAM,WAAW,eACf,MAAM,WAAW,aACjB,QACA;UAER,MAAK;oBAEJ,MAAM;UACK,CAAA,CACV,EAAA,CAAA;SACN,iBAAA,GAAA,kBAAA,KAAC,OAAD;UAAK,WAAU;oBACb,iBAAA,GAAA,kBAAA,KAAC,QAAD;WAAM,WAAU;qBACb,YAAY,MAAM;WACd,CAAA;UACH,CAAA;SACF;UACF;SACF;;KACF,EAtDC,MAAM,GAsDP,CACN;IAEA,CAAA;GAGN,iBAAA,GAAA,kBAAA,KAAC,OAAD;IAAK,WAAU;cACb,iBAAA,GAAA,kBAAA,MAACC,YAAAA,OAAD;KAAO,WAAU;eAAjB;MACE,iBAAA,GAAA,kBAAA,MAAC,YAAD,EAAA,UAAA;OACE,iBAAA,GAAA,kBAAA,KAAC,OAAD,EAAK,WAAU,uBAAwB,CAAA;OACvC,iBAAA,GAAA,kBAAA,KAAC,OAAD,EAAK,WAAU,yBAA0B,CAAA;OACzC,iBAAA,GAAA,kBAAA,KAAC,OAAD,EAAK,WAAU,yBAA0B,CAAA;OACzC,iBAAA,GAAA,kBAAA,KAAC,OAAD,EAAK,WAAU,yBAA0B,CAAA;OAChC,EAAA,CAAA;MACX,iBAAA,GAAA,kBAAA,KAACC,YAAAA,aAAD;OAAa,WAAU;iBACrB,iBAAA,GAAA,kBAAA,MAACC,YAAAA,UAAD;QAAU,WAAU;kBAApB;SACE,iBAAA,GAAA,kBAAA,KAACC,2BAAAA,aAAD;UAAa,OAAO,EAAE,UAAU;UAAE,UAAU;UAAS,CAAA;SACrD,iBAAA,GAAA,kBAAA,KAACA,2BAAAA,aAAD;UAAa,OAAO,EAAE,OAAO;UAAE,UAAU;UAAS,CAAA;SAClD,iBAAA,GAAA,kBAAA,KAACA,2BAAAA,aAAD;UAAa,OAAO,EAAE,SAAS;UAAE,UAAU;UAAS,CAAA;SACpD,iBAAA,GAAA,kBAAA,KAACA,2BAAAA,aAAD;UAAa,OAAO,EAAE,QAAQ;UAAE,UAAU;UAAS,CAAA;SAC1C;;OACC,CAAA;MACd,iBAAA,GAAA,kBAAA,KAACC,YAAAA,WAAD;OAAW,WAAU;iBAClB,YACC,MAAM,EAAE,CACL,KAAK,EAAE,CACP,KAAK,GAAG,UACP,iBAAA,GAAA,kBAAA,MAACF,YAAAA,UAAD,EAAA,UAAA;QACE,iBAAA,GAAA,kBAAA,KAACG,YAAAA,WAAD;SAAW,WAAU;mBACnB,iBAAA,GAAA,kBAAA,KAACP,YAAAA,UAAD,EAAU,WAAU,YAAa,CAAA;SACvB,CAAA;QACZ,iBAAA,GAAA,kBAAA,KAACO,YAAAA,WAAD;SAAW,WAAU;mBACnB,iBAAA,GAAA,kBAAA,KAACP,YAAAA,UAAD,EAAU,WAAU,YAAa,CAAA;SACvB,CAAA;QACZ,iBAAA,GAAA,kBAAA,KAACO,YAAAA,WAAD;SAAW,WAAU;mBACnB,iBAAA,GAAA,kBAAA,KAACP,YAAAA,UAAD,EAAU,WAAU,YAAa,CAAA;SACvB,CAAA;QACZ,iBAAA,GAAA,kBAAA,KAACO,YAAAA,WAAD;SAAW,WAAU;mBACnB,iBAAA,GAAA,kBAAA,KAACP,YAAAA,UAAD,EAAU,WAAU,YAAa,CAAA;SACvB,CAAA;QACH,EAAA,EAbI,YAAY,QAahB,CACX,GACF,WAAW,WAAW,IACxB,iBAAA,GAAA,kBAAA,KAACI,YAAAA,UAAD,EAAA,UACE,iBAAA,GAAA,kBAAA,KAACG,YAAAA,WAAD;QACE,SAAS;QACT,WAAU;kBAET,EAAE,kBAAkB;QACX,CAAA,EACH,CAAA,GAEX,WAAW,KAAK,UACd,iBAAA,GAAA,kBAAA,MAACH,YAAAA,UAAD;QAEE,WAAU;QACV,eAAe,aAAa,MAAM;kBAHpC;SAKE,iBAAA,GAAA,kBAAA,KAACG,YAAAA,WAAD;UAAW,WAAU;oBAClB,UAAU,MAAM,EAAE,gBACjB,iBAAA,GAAA,kBAAA,KAAC,QAAD;WAAM,WAAU;qBACb,EAAE,gCAAgC;WAC9B,CAAA;UAEC,CAAA;SACZ,iBAAA,GAAA,kBAAA,KAACA,YAAAA,WAAD;UAAW,WAAU;oBAClB,IAAI,KAAK,MAAM,WAAW,CAAC,oBAAoB;UACtC,CAAA;SACZ,iBAAA,GAAA,kBAAA,KAACA,YAAAA,WAAD;UAAW,WAAU;oBACnB,iBAAA,GAAA,kBAAA,KAACN,2BAAAA,aAAD;WACE,OACE,MAAM,WAAW,eACjB,MAAM,WAAW,YACb,UACA,MAAM,WAAW,eACf,MAAM,WAAW,aACjB,QACA;WAER,MAAK;qBAEJ,MAAM;WACK,CAAA;UACJ,CAAA;SACZ,iBAAA,GAAA,kBAAA,KAACM,YAAAA,WAAD;UAAW,WAAU;oBAClB,YAAY,MAAM;UACT,CAAA;SACH;UAjCJ,MAAM,GAiCF,CACX;OAEM,CAAA;MACN;;IACJ,CAAA;GAEN,iBAAA,GAAA,kBAAA,KAACC,2BAAAA,kBAAD;IACE,aAAa;IACb,YAAY;IACF;IACE;IACZ,sBAAA;IACa;IACA;IACb,cAAc;IACd,cAAc;IACd,CAAA;GACE;;;;;ACvOV,SAAgB,uBAAuB,EACrC,cACA,GACA,YAC8B;AAa9B,6BAAA,4BAAA,GAAA,MAAA,eAVI,iBAAA,GAAA,kBAAA,KAACC,YAAAA,YAAD,EAAA,UACE,iBAAA,GAAA,kBAAA,KAACC,YAAAA,gBAAD;EAAgB,WAAU;YACxB,iBAAA,GAAA,kBAAA,KAACC,YAAAA,gBAAD,EAAA,UACE,iBAAA,GAAA,kBAAA,KAACC,YAAAA,gBAAD;GAAgB,WAAU;aAAgB;GAAuB,CAAA,EAClD,CAAA;EACF,CAAA,EACN,CAAA,EAEf,EAAE,CACH,CAC4C;AAE7C,QACE,iBAAA,GAAA,kBAAA,KAAC,OAAD;EAAK,WAAU;YACb,iBAAA,GAAA,kBAAA,KAAC,kBAAD;GAAgC;GAAiB;GAAa;GAAY,CAAA;EACtE,CAAA;;;;;;;;;;;AC5BV,SAAS,SACP,KAG0B;AAC1B,QAAO;EACL,IAAI,IAAI,MAAM;EACd,OAAO,IAAI,SAAS;EACpB,QAAS,IAAI,UAAU;EACvB,OAAO,IAAI,SAAS;EACpB,UAAU,IAAI,YAAY;EAC1B,aAAa,IAAI,cAAc,EAAE,EAAE,KAAK,QAAQ;GAC9C,IAAI,GAAG,MAAM;GACb,YAAY,GAAG,cAAc;GAC7B,cAAc,GAAG,gBAAgB;GACjC,UAAU,GAAG,YAAY;GACzB,OAAO,GAAG,SAAS;GACnB,OAAO,GAAG,SAAS;GACpB,EAAE;EACH,eAAe,IAAI,iBAAiB;EACpC,gBAAgB,IAAI,kBAAkB;EACtC,uBACE,OAAQ,IAAgC,0BAA0B,WAC5D,IAAgC,wBAClC,KAAA;EACN,yBACE,OAAQ,IAAgC,4BACxC,WACM,IAAgC,0BAClC,KAAA;EACN,YAAY,IAAI,cAAc;EAC9B,YAAY,IAAI,cAAc;EAC/B;;AAGH,SAAS,QACP,KACyB;AACzB,QAAO;EACL,YAAY,KAAK,cAAc;EAC/B,WAAW,KAAK,aAAa;EAC7B,YAAY;GACV,QAAQ,KAAK,YAAY,UAAU;GACnC,OAAO,KAAK,YAAY,SAAS;GACjC,aAAa,KAAK,YAAY,eAAe;GAC7C,aAAa,KAAK,YAAY,eAAe;GAC9C;EACF;;AAGH,SAAgB,gCACd,QAC6D;AAC7D,QAAO;EACL,gBAAgB,OAAO,OAAe;GACpC,MAAM,WAAW,MAAA,sBAAA,YAA+B,QAAQ,GAAG;AAC3D,UAAO;IACL,OAAO,SAAS,SAAS,SAAS,EAAE,CAAC;IACrC,MAAM;KACJ,YAAY,SAAS,MAAM,cAAc;KACzC,WAAW,SAAS,MAAM,aAAa;KACxC;IACF;;EAGH,aAAa,OAAO,WAAiD;GACnE,MAAM,WAAW,MAAA,sBAAA,YAA+B,QAAQ;IACtD,gBAAgB,OAAO;IACvB,eAAe,OAAO;IACtB,QAAQ,OAAO;IAChB,CAAC;AACF,UAAO;IACL,SAAS,SAAS,UAAU,EAAE,EAAE,IAAI,SAAS;IAC7C,MAAM,QAAQ,SAAS,KAAK;IAC7B;;EAEJ;;;;;;;;;;;;AC7EH,SAAgB,0BAA0B,QAAgC;CACxE,MAAM,aAAa,gCAAgC,OAAO;AAC1D,QAAO;EACL,gBAAgB,WAAW;EAC3B,aAAa,WAAW;EACzB;;;;ACTH,MAAM,eAAuC;CAC3C,eAAe;CACf,cAAc;CACd,MAAM;CACN,QAAQ;CACR,SAAS;CACT,iBAAiB;CACjB,oBAAoB;CACpB,oBAAoB;CACpB,+BAA+B;CAC/B,cAAc;CACd,mBAAmB;CACnB,OAAO;CACP,SAAS;CACT,UAAU;CACV,MAAM;CACN,YAAY;CACb;AAED,SAAgB,mBAAsC;CACpD,MAAM,SAASC,mCAAAA,uBAAuB;CACtC,MAAM,aAAA,GAAA,MAAA,eAA0B,0BAA0B,OAAO,EAAE,CAAC,OAAO,CAAC;CAC5E,MAAM,EAAE,aAAaC,6BAAAA,kBAAkB;CAEvC,MAAM,oBAAoB,UAAoC;AAC5D,WAAS,UAAU,MAAM,QAAQ;;AAGnC,QACE,iBAAA,GAAA,kBAAA,KAACC,2BAAAA,oBAAD;EAAoB,KAAK;YACvB,iBAAA,GAAA,kBAAA,KAACC,wBAAD;GACE,cAAc;GACd,IAAI,QAAQ,aAAa,QAAQ;GACjC,CAAA;EACiB,CAAA;;;;AC9BzB,SAAS,iBAAiB;AACxB,QACE,iBAAA,GAAA,kBAAA,MAAC,OAAD;EAAK,WAAU;YAAf,CACE,iBAAA,GAAA,kBAAA,KAAC,OAAD;GAAK,WAAU;aACb,iBAAA,GAAA,kBAAA,MAAC,OAAD;IAAK,WAAU;cAAf;KACE,iBAAA,GAAA,kBAAA,KAACC,YAAAA,UAAD,EAAU,WAAU,iBAAkB,CAAA;KACtC,iBAAA,GAAA,kBAAA,KAAC,OAAD;MAAK,WAAU;gBACb,iBAAA,GAAA,kBAAA,MAAC,OAAD;OAAK,WAAU;iBAAf,CACE,iBAAA,GAAA,kBAAA,KAACA,YAAAA,UAAD,EAAU,WAAU,qBAAsB,CAAA,EAC1C,iBAAA,GAAA,kBAAA,MAAC,OAAD;QAAK,WAAU;kBAAf,CACE,iBAAA,GAAA,kBAAA,KAACA,YAAAA,UAAD,EAAU,WAAU,aAAc,CAAA,EAClC,iBAAA,GAAA,kBAAA,KAACA,YAAAA,UAAD,EAAU,WAAU,aAAc,CAAA,CAC9B;UACF;;MACF,CAAA;KACN,iBAAA,GAAA,kBAAA,MAAC,OAAD;MAAK,WAAU;gBAAf,CACE,iBAAA,GAAA,kBAAA,KAACA,YAAAA,UAAD,EAAU,WAAU,cAAe,CAAA,EACnC,iBAAA,GAAA,kBAAA,KAACA,YAAAA,UAAD,EAAU,WAAU,cAAe,CAAA,CAC/B;;KACF;;GACF,CAAA,EACN,iBAAA,GAAA,kBAAA,KAAC,OAAD;GAAK,WAAU;aACb,iBAAA,GAAA,kBAAA,MAAC,OAAD;IAAK,WAAU;cAAf,CACE,iBAAA,GAAA,kBAAA,KAACA,YAAAA,UAAD,EAAU,WAAU,4BAA6B,CAAA,EACjD,iBAAA,GAAA,kBAAA,MAAC,OAAD;KAAK,WAAU;eAAf,CACE,iBAAA,GAAA,kBAAA,KAACA,YAAAA,UAAD,EAAU,WAAU,YAAa,CAAA,EACjC,iBAAA,GAAA,kBAAA,KAACA,YAAAA,UAAD,EAAU,WAAU,uBAAwB,CAAA,CACxC;OACF;;GACF,CAAA,CACF;;;AAIV,SAAS,QAAQ,EAAE,QAAoD;AACrE,QACE,iBAAA,GAAA,kBAAA,MAAC,OAAD;EAAK,WAAU;YAAf,CACE,iBAAA,GAAA,kBAAA,MAAC,OAAD;GAAK,WAAU;aAAf,CACE,iBAAA,GAAA,kBAAA,KAAC,OAAD;IAAK,WAAU;cAAoG;IAE7G,CAAA,EACL,KAAK,WAAW,KACf,iBAAA,GAAA,kBAAA,KAAC,QAAD;IAAM,WAAU;cACb,KAAK;IACD,CAAA,CAEL;MACN,iBAAA,GAAA,kBAAA,MAAC,OAAD;GAAK,WAAU;aAAf;IACE,iBAAA,GAAA,kBAAA,KAAC,KAAD;KACE,WAAU;KACV,OAAO,KAAK;eAEX,KAAK;KACJ,CAAA;IACJ,iBAAA,GAAA,kBAAA,KAAC,KAAD;KAAG,WAAU;eAAuC,KAAK;KAAU,CAAA;IAClE,KAAK,WAAW,KACf,iBAAA,GAAA,kBAAA,MAAC,KAAD;KAAG,WAAU;eAAb;MACG,KAAK;MAAM;MAAI,KAAK;MACnB;;IAEF;KACF;;;AAIV,SAAS,aAAa,EAAE,SAA8C;AACpE,QACE,iBAAA,GAAA,kBAAA,KAAC,WAAD;EAAS,WAAU;YACjB,iBAAA,GAAA,kBAAA,MAAC,OAAD;GAAK,WAAU;aAAf;IACE,iBAAA,GAAA,kBAAA,MAAC,OAAD;KAAK,WAAU;eAAf,CACE,iBAAA,GAAA,kBAAA,MAAC,MAAD;MAAI,WAAU;gBAAd;OAAyD;OAC/C,MAAM,WAAW;OAAO;OAC7B;SACL,iBAAA,GAAA,kBAAA,KAAC,MAAD,EAAI,WAAU,iBAAkB,CAAA,CAC5B;;IAEN,iBAAA,GAAA,kBAAA,KAAC,OAAD;KAAK,WAAU;eACZ,MAAM,WAAW,KAAK,SACrB,iBAAA,GAAA,kBAAA,KAAC,SAAD,EAA6B,MAAQ,EAAvB,KAAK,GAAkB,CACrC;KACE,CAAA;IAEN,iBAAA,GAAA,kBAAA,KAAC,OAAD;KAAK,WAAU;eACb,iBAAA,GAAA,kBAAA,MAAC,OAAD;MAAK,WAAU;gBAAf,CACE,iBAAA,GAAA,kBAAA,KAAC,KAAD;OAAG,WAAU;iBAA4C;OAAS,CAAA,EAClE,iBAAA,GAAA,kBAAA,MAAC,KAAD;OAAG,WAAU;iBAAb;QACG,MAAM;QAAS;QAAE,MAAM;QACtB;SACA;;KACF,CAAA;IAIL,MAAM,yBAAyB,QAC9B,MAAM,wBAAwB,KAC5B,iBAAA,GAAA,kBAAA,KAAC,OAAD;KAAK,WAAU;eACb,iBAAA,GAAA,kBAAA,MAAC,OAAD;MAAK,WAAU;gBAAf,CACE,iBAAA,GAAA,kBAAA,MAAC,OAAD,EAAA,UAAA,CACE,iBAAA,GAAA,kBAAA,KAAC,KAAD;OAAG,WAAU;iBAAwC;OAEjD,CAAA,EACH,MAAM,2BAA2B,QAChC,iBAAA,GAAA,kBAAA,MAAC,KAAD;OAAG,WAAU;iBAAb,CACG,MAAM,wBAAwB,gBAAgB,EAAC,gBAE9C;SAEF,EAAA,CAAA,EACN,iBAAA,GAAA,kBAAA,MAAC,OAAD;OAAK,WAAU;iBAAf,CACE,iBAAA,GAAA,kBAAA,MAAC,KAAD;QAAG,WAAU;kBAAb,CAAqD,KACjD,MAAM,sBAAsB,gBAAgB,CAC5C;WACJ,iBAAA,GAAA,kBAAA,KAAC,KAAD;QAAG,WAAU;kBAAgC;QAAU,CAAA,CACnD;SACF;;KACF,CAAA;IAEN;;EACE,CAAA;;AAId,SAAS,eAAe,EAAE,SAA8C;AACtE,QACE,iBAAA,GAAA,kBAAA,KAAC,OAAD;EAAK,WAAU;YACb,iBAAA,GAAA,kBAAA,MAAC,OAAD;GAAK,WAAU;aAAf,CAEE,iBAAA,GAAA,kBAAA,KAAC,OAAD;IAAK,WAAU;cACb,iBAAA,GAAA,kBAAA,KAAC,OAAD;KAAK,WAAU;eACb,iBAAA,GAAA,kBAAA,MAAC,OAAD;MAAK,WAAU;gBAAf,CACE,iBAAA,GAAA,kBAAA,KAAC,QAAD;OAAM,WAAU;iBAAgC;OAAc,CAAA,EAC9D,iBAAA,GAAA,kBAAA,KAACC,2BAAAA,kBAAD,EAAkB,QAAQ,MAAM,QAAU,CAAA,CACtC;;KACF,CAAA;IACF,CAAA,EAGN,iBAAA,GAAA,kBAAA,MAAC,OAAD;IAAK,WAAU;cAAf;KACE,iBAAA,GAAA,kBAAA,KAAC,MAAD;MAAI,WAAU;gBAA+C;MAExD,CAAA;KACL,iBAAA,GAAA,kBAAA,MAAC,OAAD;MAAK,WAAU;gBAAf,CACE,iBAAA,GAAA,kBAAA,MAAC,OAAD;OAAK,WAAU;iBAAf,CACE,iBAAA,GAAA,kBAAA,KAAC,OAAD;QAAK,WAAU;kBAAgC;QAAW,CAAA,EAC1D,iBAAA,GAAA,kBAAA,MAAC,OAAD;QAAK,WAAU;kBAAf,CAA6C,KAAE,MAAM,GAAS;UAC1D;UACN,iBAAA,GAAA,kBAAA,MAAC,OAAD;OAAK,WAAU;iBAAf,CACE,iBAAA,GAAA,kBAAA,KAAC,OAAD;QAAK,WAAU;kBAAgC;QAAU,CAAA,EACzD,iBAAA,GAAA,kBAAA,KAAC,OAAD;QAAK,WAAU;kBACZ,IAAI,KAAK,MAAM,WAAW,CAAC,mBAAmB,SAAS;SACtD,MAAM;SACN,OAAO;SACP,KAAK;SACN,CAAC;QACE,CAAA,CACF;SACF;;KACL,MAAM,kBACL,iBAAA,GAAA,kBAAA,MAAC,OAAD;MAAK,WAAU;gBAAf,CACE,iBAAA,GAAA,kBAAA,KAAC,OAAD;OAAK,WAAU;iBAAgC;OAAW,CAAA,EAC1D,iBAAA,GAAA,kBAAA,KAAC,OAAD;OAAK,WAAU;iBACZ,MAAM;OACH,CAAA,CACF;;KAEP,MAAM,iBACL,iBAAA,GAAA,kBAAA,MAAC,OAAD;MAAK,WAAU;gBAAf,CACE,iBAAA,GAAA,kBAAA,KAAC,OAAD;OAAK,WAAU;iBAAgC;OAAc,CAAA,EAC7D,iBAAA,GAAA,kBAAA,KAAC,OAAD;OAAK,WAAU;iBACZ,MAAM;OACH,CAAA,CACF;;KAEJ;MACF;;EACF,CAAA;;AAIV,SAAgB,kBAAkB,EAChC,IACA,YACA,WACyB;CACzB,MAAM,EAAE,MAAM,WAAW,UAAUC,2BAAAA,qBAAqB,GAAG;CAC3D,MAAM,QAAQ,MAAM;AAEpB,EAAA,GAAA,MAAA,iBAAgB;AACd,MAAI,CAAC,aAAa,MAChB,WAAU,MAAe;IAE1B;EAAC;EAAW;EAAO;EAAQ,CAAC;AAE/B,EAAA,GAAA,MAAA,iBAAgB;AACd,MAAI,CAAC,aAAa,CAAC,SAAS,CAAC,MAC3B,eAAc;IAEf;EAAC;EAAW;EAAO;EAAO;EAAW,CAAC;AAEzC,KAAI,UACF,QAAO,iBAAA,GAAA,kBAAA,KAAC,gBAAD,EAAkB,CAAA;AAG3B,KAAI,CAAC,MACH,QAAO;AAGT,QACE,iBAAA,GAAA,kBAAA,MAAC,OAAD;EAAK,WAAU;YAAf,CACE,iBAAA,GAAA,kBAAA,KAAC,cAAD,EAAqB,OAAS,CAAA,EAC9B,iBAAA,GAAA,kBAAA,KAAC,gBAAD,EAAuB,OAAS,CAAA,CAC5B;;;;;AC1MV,SAAgB,wBAAwB,EACtC,IACA,kBACA,YACA,WAC+B;AA2B/B,6BAAA,4BAAA,GAAA,MAAA,eAxBI,iBAAA,GAAA,kBAAA,KAACC,YAAAA,YAAD,EAAA,UACE,iBAAA,GAAA,kBAAA,MAACC,YAAAA,gBAAD;EAAgB,WAAU;YAA1B;GACE,iBAAA,GAAA,kBAAA,KAACC,YAAAA,gBAAD,EAAA,UACE,iBAAA,GAAA,kBAAA,KAACC,YAAAA,gBAAD;IACE,MAAK;IACL,UAAU,MAAM;AACd,OAAE,gBAAgB;AAClB,uBAAkB;;cAErB;IAEgB,CAAA,EACF,CAAA;GACjB,iBAAA,GAAA,kBAAA,KAACC,YAAAA,qBAAD,EAAuB,CAAA;GACvB,iBAAA,GAAA,kBAAA,KAACF,YAAAA,gBAAD,EAAA,UACE,iBAAA,GAAA,kBAAA,MAACG,YAAAA,gBAAD;IAAgB,WAAU;cAA1B,CAA0C,WAChC,GACO;OACF,CAAA;GACF;KACN,CAAA,EAEf,CAAC,IAAI,iBAAiB,CACvB,CAC4C;AAE7C,QACE,iBAAA,GAAA,kBAAA,KAAC,OAAD;EAAK,WAAU;YACb,iBAAA,GAAA,kBAAA,KAAC,mBAAD;GAAuB;GAAgB;GAAqB;GAAW,CAAA;EACnE,CAAA;;;;AC9CV,SAAgB,kBAAkB,EAChC,OACA,WAC4C;CAC5C,MAAM,SAASC,mCAAAA,uBAAuB;CACtC,MAAM,aAAA,GAAA,MAAA,eAA0B,0BAA0B,OAAO,EAAE,CAAC,OAAO,CAAC;CAC5E,MAAM,EAAE,aAAaC,6BAAAA,kBAAkB;AAEvC,QACE,iBAAA,GAAA,kBAAA,KAACC,2BAAAA,oBAAD;EAAoB,KAAK;YACvB,iBAAA,GAAA,kBAAA,KAACC,yBAAD;GACE,IAAI;GACJ,wBAAwB,SAAS,SAAS;GAC1C,kBAAkB;AAChB,YAAQ,mBAAmB,UAAU;AACrC,aAAS,SAAS;;GAEpB,UAAU,QAAQ;AAGhB,YAAQ,yBADN,eAAe,QAAQ,IAAI,UAAU,uBACK,QAAQ;;GAEtD,CAAA;EACiB,CAAA;;;;ACdzB,SAAS,aAAa,SAAiB,MAAuC;AAC5E,KAAI,SAAS,WAAW,SAAS,UAC/B,SAAQ,KAAK,YAAY,QAAQ;KAEjC,SAAQ,KAAK,YAAY,QAAQ;;AAIrC,SAAgB,aAAa,EAC3B,SAEA,YACA,WACA,aACA,SACA,cAEA,GAAG,YACoC;CACvC,MAAM,EAAE,gBAAgBC,6BAAAA,kBAAkB;CAC1C,MAAM,iBAAiB,WAAW;CAGlC,MAAM,cAAc,YAAY,MAAM,IAAI,CAAC;AAG3C,KAFqB,gBAAgB,KAAA,EAGnC,QACE,iBAAA,GAAA,kBAAA,KAAC,OAAD;EAAK,GAAI;YACP,iBAAA,GAAA,kBAAA,KAAC,mBAAD;GAAmB,OAAO;GAAa,SAAS;GAAkB,CAAA;EAC9D,CAAA;AAIV,QACE,iBAAA,GAAA,kBAAA,KAAC,OAAD;EAAK,GAAI;YACP,iBAAA,GAAA,kBAAA,KAAC,kBAAD,EAAoB,CAAA;EAChB,CAAA;;AAIV,MAAa,6BAAmD;CAC9D,YAAY;CACZ,aAAa;CACb,YAAY,CAAC;EAAE,IAAI;EAAW,OAAO;EAAW,CAAC;CACjD,QAAQ,EAAE;CACX"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"OrdersScreen-DZ0sgSHZ.mjs","names":["portalTenant.orders_show","portalTenant.orders_list","PortalOrdersListScreenContent","PortalOrderDetailScreenContent"],"sources":["../../../orders/ui/src/components/portal-orders-list.tsx","../../../orders/ui/src/screens/PortalOrdersListScreen.tsx","../../../orders/api-client/src/portal-tenant-adapter.ts","../src/adapters/orders-api-adapter.ts","../src/screens/OrdersListScreen.tsx","../../../orders/ui/src/components/portal-order-detail.tsx","../../../orders/ui/src/screens/PortalOrderDetailScreen.tsx","../src/screens/OrderDetailScreen.tsx","../src/screens/OrdersScreen.tsx"],"sourcesContent":["import { useState, useCallback } from \"react\";\nimport type { orders } from \"@fluid-app/orders-core\";\nimport { usePortalTenantOrders } 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 { PaginationFooter } from \"./pagination-footer\";\nimport { StatusBadge } from \"./status-badge\";\nimport { TableColumn } from \"./table-column\";\n\nexport interface PortalOrdersListProps {\n onOrderClick: (order: orders.PortalTenantOrder) => void;\n t: (key: string) => string;\n pageSize?: number;\n}\n\nfunction formatTotal(order: orders.PortalTenantOrder): string {\n return `${order.currency} ${Number(order.total).toFixed(2)}`;\n}\n\nexport function PortalOrdersList({\n onOrderClick,\n t,\n pageSize = 10,\n}: PortalOrdersListProps) {\n const [cursor, setCursor] = useState<string | null>(null);\n\n const params: orders.PortalTenantFetchOrdersParams = {\n limit: pageSize,\n cursor: cursor || undefined,\n };\n\n const { data, isLoading } = usePortalTenantOrders(params);\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 = ordersList.length;\n const hasNextPage = !!pagination?.next_cursor;\n const hasPrevPage = !!pagination?.prev_cursor;\n\n const firstItem = (order: orders.PortalTenantOrder) => order.line_items[0];\n\n return (\n <div className=\"border-border overflow-hidden rounded-lg border shadow-sm\">\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 {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 <div className=\"bg-border h-12 w-12 flex-shrink-0 rounded-md\" />\n <div className=\"w-0 min-w-0 flex-1\">\n {firstItem(order) ? (\n <p className=\"text-foreground truncate text-sm font-medium\">\n {firstItem(order)?.product_name}\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 <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(\"status\")}\n </span>\n <StatusBadge\n color={\n order.status === \"delivered\" ||\n order.status === \"shipped\"\n ? \"green\"\n : order.status === \"cancelled\" ||\n order.status === \"returned\"\n ? \"red\"\n : \"yellow\"\n }\n size=\"xs\"\n >\n {order.status}\n </StatusBadge>\n </div>\n <div className=\"col-span-2 mt-1\">\n <span className=\"text-foreground font-medium\">\n {formatTotal(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-[20%] min-w-[100px]\" />\n <col className=\"w-[20%] min-w-[100px]\" />\n <col className=\"w-[20%] 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(\"status\")} 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 <Skeleton className=\"h-4 w-32\" />\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-20\" />\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={4}\n className=\"text-muted-foreground px-3 py-8 text-center text-sm\"\n >\n {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-foreground px-3 py-4 text-sm font-medium\">\n {firstItem(order)?.product_name ?? (\n <span className=\"text-muted-foreground italic\">\n {t(\"this_product_no_longer_exists\")}\n </span>\n )}\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=\"px-3 py-4 text-sm\">\n <StatusBadge\n color={\n order.status === \"delivered\" ||\n order.status === \"shipped\"\n ? \"green\"\n : order.status === \"cancelled\" ||\n order.status === \"returned\"\n ? \"red\"\n : \"yellow\"\n }\n size=\"xs\"\n >\n {order.status}\n </StatusBadge>\n </TableCell>\n <TableCell className=\"text-foreground px-3 py-4 text-sm whitespace-nowrap\">\n {formatTotal(order)}\n </TableCell>\n </TableRow>\n ))\n )}\n </TableBody>\n </Table>\n </div>\n\n <PaginationFooter\n currentPage={1}\n totalPages={1}\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","\"use client\";\n\nimport { useMemo } from \"react\";\nimport type { orders } from \"@fluid-app/orders-core\";\nimport {\n Breadcrumb,\n BreadcrumbList,\n BreadcrumbItem,\n BreadcrumbPage,\n} from \"@fluid-app/ui-primitives\";\nimport { useScreenHeaderBreadcrumbs } from \"@fluid-app/portal-react/shell/ScreenHeaderContext\";\nimport { PortalOrdersList } from \"../components/portal-orders-list\";\n\nexport interface PortalOrdersListScreenProps {\n onOrderClick: (order: orders.PortalTenantOrder) => void;\n t: (key: string) => string;\n pageSize?: number;\n}\n\nexport function PortalOrdersListScreen({\n onOrderClick,\n t,\n pageSize,\n}: PortalOrdersListScreenProps) {\n const headerBreadcrumbs = useMemo(\n () => (\n <Breadcrumb>\n <BreadcrumbList className=\"text-lg\">\n <BreadcrumbItem>\n <BreadcrumbPage className=\"font-semibold\">Orders</BreadcrumbPage>\n </BreadcrumbItem>\n </BreadcrumbList>\n </Breadcrumb>\n ),\n [],\n );\n useScreenHeaderBreadcrumbs(headerBreadcrumbs);\n\n return (\n <div className=\"mx-auto max-w-7xl px-4 py-4 sm:px-6 sm:py-6 lg:px-10 lg:py-8\">\n <PortalOrdersList onOrderClick={onOrderClick} t={t} pageSize={pageSize} />\n </div>\n );\n}\n","import type { FetchClient } from \"./lib/fetch-client\";\nimport type { OrdersApi } from \"@fluid-app/orders-core\";\nimport type { orders } from \"@fluid-app/orders-core\";\nimport { portalTenant } from \"@fluid-app/portal-tenant-api-client\";\n\n/**\n * Creates an OrdersApi adapter backed by the portal-tenant BFF.\n *\n * Maps the generated portal-tenant namespace functions to the abstract\n * OrdersApi port, closing over the FetchClient so consumers don't need\n * to pass it per-call.\n */\n\nfunction mapOrder(\n raw: NonNullable<\n Awaited<ReturnType<typeof portalTenant.orders_show>>[\"order\"]\n >,\n): orders.PortalTenantOrder {\n return {\n id: raw.id ?? 0,\n token: raw.token ?? \"\",\n status: (raw.status ?? \"pending\") as orders.PortalTenantOrderStatus,\n total: raw.total ?? \"0\",\n currency: raw.currency ?? \"\",\n line_items: (raw.line_items ?? []).map((li) => ({\n id: li.id ?? 0,\n product_id: li.product_id ?? 0,\n product_name: li.product_name ?? \"\",\n quantity: li.quantity ?? 0,\n price: li.price ?? \"0\",\n total: li.total ?? \"0\",\n })),\n customer_name: raw.customer_name ?? null,\n customer_email: raw.customer_email ?? null,\n total_points_credited:\n typeof (raw as Record<string, unknown>).total_points_credited === \"number\"\n ? ((raw as Record<string, unknown>).total_points_credited as number)\n : undefined,\n customer_points_balance:\n typeof (raw as Record<string, unknown>).customer_points_balance ===\n \"number\"\n ? ((raw as Record<string, unknown>).customer_points_balance as number)\n : undefined,\n created_at: raw.created_at ?? \"\",\n updated_at: raw.updated_at ?? \"\",\n } satisfies orders.PortalTenantOrder;\n}\n\nfunction mapMeta(\n raw: Awaited<ReturnType<typeof portalTenant.orders_list>>[\"meta\"] | undefined,\n): orders.PortalTenantMeta {\n return {\n request_id: raw?.request_id ?? \"\",\n timestamp: raw?.timestamp ?? \"\",\n pagination: {\n cursor: raw?.pagination?.cursor ?? null,\n limit: raw?.pagination?.limit ?? 25,\n next_cursor: raw?.pagination?.next_cursor ?? null,\n prev_cursor: raw?.pagination?.prev_cursor ?? null,\n },\n } satisfies orders.PortalTenantMeta;\n}\n\nexport function createPortalTenantOrdersAdapter(\n client: FetchClient,\n): Required<Pick<OrdersApi, \"fetchOrderById\" | \"fetchOrders\">> {\n return {\n fetchOrderById: async (id: number) => {\n const response = await portalTenant.orders_show(client, id);\n return {\n order: mapOrder(response.order ?? {}),\n meta: {\n request_id: response.meta?.request_id ?? \"\",\n timestamp: response.meta?.timestamp ?? \"\",\n },\n } satisfies orders.PortalTenantOrderResponse;\n },\n\n fetchOrders: async (params: orders.PortalTenantFetchOrdersParams) => {\n const response = await portalTenant.orders_list(client, {\n \"page[cursor]\": params.cursor,\n \"page[limit]\": params.limit,\n status: params.status,\n });\n return {\n orders: (response.orders ?? []).map(mapOrder),\n meta: mapMeta(response.meta),\n } satisfies orders.PortalTenantOrdersResponse;\n },\n };\n}\n","import type { OrdersApi } from \"@fluid-app/orders-core\";\nimport type { FetchClient } from \"@fluid-app/portal-tenant-api-client\";\nimport { createPortalTenantOrdersAdapter } from \"@fluid-app/orders-api-client\";\n\n/**\n * Creates an OrdersApi adapter for the portal-tenant BFF.\n *\n * Delegates to the existing clean adapter in orders/api-client which maps\n * BFF responses to PortalTenantOrder types. The legacy methods (fetchOrder,\n * fetchCustomerOrders) are not used by portal UI — portal-specific hooks\n * call fetchOrders/fetchOrderById directly.\n */\nexport function createPortalOrdersAdapter(client: FetchClient): OrdersApi {\n const bffAdapter = createPortalTenantOrdersAdapter(client);\n return {\n fetchOrderById: bffAdapter.fetchOrderById,\n fetchOrders: bffAdapter.fetchOrders,\n };\n}\n","import { useMemo } from \"react\";\nimport { OrdersCoreProvider } from \"@fluid-app/orders-core\";\nimport type { orders } from \"@fluid-app/orders-core\";\nimport { PortalOrdersListScreen as PortalOrdersListScreenContent } from \"@fluid-app/orders-ui/screens/PortalOrdersListScreen\";\nimport { createPortalOrdersAdapter } from \"../adapters/orders-api-adapter\";\nimport { usePortalTenantClient } from \"../providers/PortalTenantClientProvider\";\nimport { useAppNavigation } from \"../shell/AppNavigationContext\";\n\nconst translations: Record<string, string> = {\n search_orders: \"Search orders...\",\n order_number: \"Order #\",\n date: \"Date\",\n status: \"Status\",\n product: \"Product\",\n no_orders_found: \"No orders found\",\n no_matching_orders: \"No matching orders\",\n no_image_available: \"No image available\",\n this_product_no_longer_exists: \"This product no longer exists\",\n subscription: \"Subscription\",\n view_subscription: \"View Subscription\",\n total: \"Total\",\n results: \"results\",\n previous: \"Previous\",\n next: \"Next\",\n pagination: \"Pagination\",\n};\n\nexport function OrdersListScreen(): React.JSX.Element {\n const client = usePortalTenantClient();\n const ordersApi = useMemo(() => createPortalOrdersAdapter(client), [client]);\n const { navigate } = useAppNavigation();\n\n const handleOrderClick = (order: orders.PortalTenantOrder) => {\n navigate(`orders/${order.token}`);\n };\n\n return (\n <OrdersCoreProvider api={ordersApi}>\n <PortalOrdersListScreenContent\n onOrderClick={handleOrderClick}\n t={(key) => translations[key] ?? key}\n />\n </OrdersCoreProvider>\n );\n}\n","import { useEffect } from \"react\";\nimport type { orders } from \"@fluid-app/orders-core\";\nimport { usePortalTenantOrder } from \"@fluid-app/orders-core\";\nimport { Skeleton } from \"@fluid-app/ui-primitives\";\nimport { OrderStatusBadge } from \"./order-status-badge\";\n\nexport interface PortalOrderDetailProps {\n id: string | number;\n onNotFound?: () => void;\n onError?: (error: Error) => void;\n}\n\nfunction DetailSkeleton() {\n return (\n <div className=\"flex flex-col lg:grid lg:grid-cols-8\">\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 </div>\n </div>\n </div>\n <div className=\"mt-6 space-y-2\">\n <Skeleton className=\"h-4 w-full\" />\n <Skeleton className=\"h-5 w-full\" />\n </div>\n </div>\n </div>\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>\n </div>\n </div>\n );\n}\n\nfunction ItemRow({ item }: { item: orders.PortalTenantOrderLineItem }) {\n return (\n <div className=\"flex items-center space-x-4 py-4\">\n <div className=\"relative shrink-0\">\n <div className=\"bg-muted text-muted-foreground flex h-24 w-24 items-center justify-center overflow-hidden rounded\">\n No image\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.product_name}\n >\n {item.product_name}\n </p>\n <p className=\"text-foreground text-sm font-medium\">{item.total}</p>\n {item.quantity > 1 && (\n <p className=\"text-muted-foreground text-xs\">\n {item.price} x {item.quantity}\n </p>\n )}\n </div>\n </div>\n );\n}\n\nfunction ItemsSection({ order }: { order: orders.PortalTenantOrder }) {\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 <div className=\"mt-4\">\n <h2 className=\"text-foreground mb-2 text-lg font-medium\">\n Items ({order.line_items.length})\n </h2>\n <hr className=\"border-border\" />\n </div>\n\n <div className=\"divide-border divide-y\">\n {order.line_items.map((item) => (\n <ItemRow key={item.id} item={item} />\n ))}\n </div>\n\n <div className=\"border-border mb-4 border-t pt-4\">\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.currency} {order.total}\n </p>\n </div>\n </div>\n\n {/* TODO: i18n */}\n {/* TODO: gate on reward_points_enabled when available on PortalTenantOrder */}\n {order.total_points_credited != null &&\n order.total_points_credited > 0 && (\n <div className=\"border-border mb-4 border-t pt-4\">\n <div className=\"flex items-baseline justify-between\">\n <div>\n <p className=\"text-foreground text-sm font-semibold\">\n points earned on this order!\n </p>\n {order.customer_points_balance != null && (\n <p className=\"text-muted-foreground text-xs\">\n {order.customer_points_balance.toLocaleString()} points\n total\n </p>\n )}\n </div>\n <div className=\"text-right\">\n <p className=\"text-foreground text-sm font-semibold\">\n +{order.total_points_credited.toLocaleString()}\n </p>\n <p className=\"text-muted-foreground text-xs\">points</p>\n </div>\n </div>\n </div>\n )}\n </div>\n </section>\n );\n}\n\nfunction DetailsSection({ order }: { order: orders.PortalTenantOrder }) {\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\">Status:</span>\n <OrderStatusBadge status={order.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</div>\n <div className=\"text-foreground font-medium\">#{order.id}</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.customer_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.customer_email}\n </div>\n </div>\n )}\n {order.customer_name && (\n <div className=\"mt-3\">\n <div className=\"text-muted-foreground text-sm\">Customer</div>\n <div className=\"text-foreground text-sm font-medium\">\n {order.customer_name}\n </div>\n </div>\n )}\n </div>\n </div>\n </div>\n );\n}\n\nexport function PortalOrderDetail({\n id,\n onNotFound,\n onError,\n}: PortalOrderDetailProps) {\n const { data, isLoading, error } = usePortalTenantOrder(id);\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 <DetailSkeleton />;\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 <ItemsSection order={order} />\n <DetailsSection order={order} />\n </div>\n );\n}\n","\"use client\";\n\nimport { useMemo } from \"react\";\nimport {\n Breadcrumb,\n BreadcrumbItem,\n BreadcrumbLink,\n BreadcrumbList,\n BreadcrumbPage,\n BreadcrumbSeparator,\n} from \"@fluid-app/ui-primitives\";\nimport { useScreenHeaderBreadcrumbs } from \"@fluid-app/portal-react/shell/ScreenHeaderContext\";\nimport { PortalOrderDetail } from \"../components/portal-order-detail\";\n\nexport interface PortalOrderDetailScreenProps {\n id: string | number;\n onNavigateToList: () => void;\n onNotFound?: () => void;\n onError?: (error: Error) => void;\n}\n\nexport function PortalOrderDetailScreen({\n id,\n onNavigateToList,\n onNotFound,\n onError,\n}: PortalOrderDetailScreenProps) {\n const headerBreadcrumbs = useMemo(\n () => (\n <Breadcrumb>\n <BreadcrumbList className=\"text-lg\">\n <BreadcrumbItem>\n <BreadcrumbLink\n href=\"#\"\n onClick={(e) => {\n e.preventDefault();\n onNavigateToList();\n }}\n >\n Orders\n </BreadcrumbLink>\n </BreadcrumbItem>\n <BreadcrumbSeparator />\n <BreadcrumbItem>\n <BreadcrumbPage className=\"font-semibold\">\n Order #{id}\n </BreadcrumbPage>\n </BreadcrumbItem>\n </BreadcrumbList>\n </Breadcrumb>\n ),\n [id, onNavigateToList],\n );\n useScreenHeaderBreadcrumbs(headerBreadcrumbs);\n\n return (\n <div className=\"mx-auto max-w-7xl px-4 py-4 sm:px-6 sm:py-6 lg:px-10 lg:py-8\">\n <PortalOrderDetail id={id} onNotFound={onNotFound} onError={onError} />\n </div>\n );\n}\n","import { useMemo } from \"react\";\nimport { OrdersCoreProvider } from \"@fluid-app/orders-core\";\nimport { PortalOrderDetailScreen as PortalOrderDetailScreenContent } from \"@fluid-app/orders-ui/screens/PortalOrderDetailScreen\";\nimport { createPortalOrdersAdapter } from \"../adapters/orders-api-adapter\";\nimport { usePortalTenantClient } from \"../providers/PortalTenantClientProvider\";\nimport { useAppNavigation } from \"../shell/AppNavigationContext\";\n\ninterface OrderDetailScreenProps {\n token: string;\n onToast: (message: string, type: \"success\" | \"error\" | \"warning\") => void;\n}\n\nexport function OrderDetailScreen({\n token,\n onToast,\n}: OrderDetailScreenProps): React.JSX.Element {\n const client = usePortalTenantClient();\n const ordersApi = useMemo(() => createPortalOrdersAdapter(client), [client]);\n const { navigate } = useAppNavigation();\n\n return (\n <OrdersCoreProvider api={ordersApi}>\n <PortalOrderDetailScreenContent\n id={token}\n onNavigateToList={() => navigate(\"orders\")}\n onNotFound={() => {\n onToast(\"Order not found\", \"warning\");\n navigate(\"orders\");\n }}\n onError={(err) => {\n const message =\n err instanceof Error ? err.message : \"An error occurred\";\n onToast(`Failed to load order: ${message}`, \"error\");\n }}\n />\n </OrdersCoreProvider>\n );\n}\n","import type { ComponentProps } from \"react\";\nimport type {\n BackgroundValue,\n BorderRadiusOptions,\n ColorOptions,\n PaddingOptions,\n} from \"../types\";\nimport type { WidgetPropertySchema } from \"../registries/property-schema-types\";\nimport { useAppNavigation } from \"../shell/AppNavigationContext\";\nimport { OrdersListScreen } from \"./OrdersListScreen\";\nimport { OrderDetailScreen } from \"./OrderDetailScreen\";\n\ntype OrdersScreenProps = ComponentProps<\"div\"> & {\n background?: BackgroundValue;\n textColor?: ColorOptions;\n accentColor?: ColorOptions;\n padding?: PaddingOptions;\n borderRadius?: BorderRadiusOptions;\n onToast?: (message: string, type: \"success\" | \"error\" | \"warning\") => void;\n};\n\nfunction defaultToast(message: string, type: \"success\" | \"error\" | \"warning\") {\n if (type === \"error\" || type === \"warning\") {\n console.warn(\"[Orders]\", message);\n } else {\n console.info(\"[Orders]\", message);\n }\n}\n\nexport function OrdersScreen({\n onToast,\n /* eslint-disable @typescript-eslint/no-unused-vars -- destructured to exclude from divProps spread */\n background,\n textColor,\n accentColor,\n padding,\n borderRadius,\n /* eslint-enable @typescript-eslint/no-unused-vars */\n ...divProps\n}: OrdersScreenProps): React.JSX.Element {\n const { currentSlug } = useAppNavigation();\n const effectiveToast = onToast ?? defaultToast;\n\n // Parse slug: \"orders\" → list, \"orders/{token}\" → detail\n const detailToken = currentSlug.split(\"/\")[1];\n const isDetailView = detailToken !== undefined;\n\n if (isDetailView) {\n return (\n <div {...divProps}>\n <OrderDetailScreen token={detailToken} onToast={effectiveToast} />\n </div>\n );\n }\n\n return (\n <div {...divProps}>\n <OrdersListScreen />\n </div>\n );\n}\n\nexport const ordersScreenPropertySchema: WidgetPropertySchema = {\n widgetType: \"OrdersScreen\",\n displayName: \"Orders Screen\",\n tabsConfig: [{ id: \"styling\", label: \"Styling\" }],\n fields: [],\n} as const satisfies WidgetPropertySchema;\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/orders-api-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-CAO-R9SO.cjs.map