@fluid-app/portal-sdk 0.1.190 → 0.1.192

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/{ContactsScreen-Dw9G8Q3n.mjs → ContactsScreen-BtBNMZzG.mjs} +68 -71
  2. package/dist/ContactsScreen-BtBNMZzG.mjs.map +1 -0
  3. package/dist/{ContactsScreen-Euvu6Y8H.cjs → ContactsScreen-Cheiwaxn.cjs} +3 -4
  4. package/dist/{ContactsScreen-D2rOJ9Ra.cjs → ContactsScreen-DvohvoOE.cjs} +67 -70
  5. package/dist/ContactsScreen-DvohvoOE.cjs.map +1 -0
  6. package/dist/{FluidProvider-bZ4dm-UF.cjs → FluidProvider-BWBEdHQQ.cjs} +30 -2
  7. package/dist/{FluidProvider-bZ4dm-UF.cjs.map → FluidProvider-BWBEdHQQ.cjs.map} +1 -1
  8. package/dist/{FluidProvider-ClxrzJDf.mjs → FluidProvider-dp9q6oRM.mjs} +30 -2
  9. package/dist/FluidProvider-dp9q6oRM.mjs.map +1 -0
  10. package/dist/InfiniteScrollSentinel-CU801UfD.cjs +36 -0
  11. package/dist/InfiniteScrollSentinel-CU801UfD.cjs.map +1 -0
  12. package/dist/InfiniteScrollSentinel-MgF-ldXy.mjs +30 -0
  13. package/dist/InfiniteScrollSentinel-MgF-ldXy.mjs.map +1 -0
  14. package/dist/{MessagingScreen-Bu8KvZrz.mjs → MessagingScreen-BNsaLpzu.mjs} +2 -2
  15. package/dist/{MessagingScreen-Bu8KvZrz.mjs.map → MessagingScreen-BNsaLpzu.mjs.map} +1 -1
  16. package/dist/{MessagingScreen-CZIMNXUy.cjs → MessagingScreen-CJ3p3ZHq.cjs} +2 -2
  17. package/dist/{MessagingScreen-B4OtJ908.cjs → MessagingScreen-DX8A0ahD.cjs} +2 -2
  18. package/dist/{MessagingScreen-B4OtJ908.cjs.map → MessagingScreen-DX8A0ahD.cjs.map} +1 -1
  19. package/dist/{OrdersScreen-DtO4r_th.mjs → OrdersScreen-BgyMsZpn.mjs} +245 -84
  20. package/dist/OrdersScreen-BgyMsZpn.mjs.map +1 -0
  21. package/dist/{OrdersScreen-DlCLRqEK.cjs → OrdersScreen-CCVPgVWa.cjs} +244 -83
  22. package/dist/OrdersScreen-CCVPgVWa.cjs.map +1 -0
  23. package/dist/{OrdersScreen-CV6umNnp.cjs → OrdersScreen-DWNylH_i.cjs} +3 -2
  24. package/dist/{PortalContentApiProvider-DGkP0Vk6.mjs → PortalContentApiProvider-Bwi7FOTs.mjs} +72 -75
  25. package/dist/PortalContentApiProvider-Bwi7FOTs.mjs.map +1 -0
  26. package/dist/{PortalContentApiProvider-CH87-pE5.cjs → PortalContentApiProvider-Cb-DGxBo.cjs} +72 -75
  27. package/dist/PortalContentApiProvider-Cb-DGxBo.cjs.map +1 -0
  28. package/dist/{PortalProductsApiProvider-CTLKKRqy.cjs → PortalProductsApiProvider-CRN-i8Rh.cjs} +2 -2
  29. package/dist/{PortalProductsApiProvider-CTLKKRqy.cjs.map → PortalProductsApiProvider-CRN-i8Rh.cjs.map} +1 -1
  30. package/dist/{PortalProductsApiProvider-CY6CUq6x.mjs → PortalProductsApiProvider-D0jul2Fh.mjs} +2 -2
  31. package/dist/{PortalProductsApiProvider-CY6CUq6x.mjs.map → PortalProductsApiProvider-D0jul2Fh.mjs.map} +1 -1
  32. package/dist/{ProductsScreen-a1Bcvc3U.cjs → ProductsScreen-BQqP8-N9.cjs} +3 -3
  33. package/dist/{ProductsScreen-a1Bcvc3U.cjs.map → ProductsScreen-BQqP8-N9.cjs.map} +1 -1
  34. package/dist/{ProductsScreen-DWpcieDU.mjs → ProductsScreen-Cd8hpH-3.mjs} +3 -3
  35. package/dist/{ProductsScreen-DWpcieDU.mjs.map → ProductsScreen-Cd8hpH-3.mjs.map} +1 -1
  36. package/dist/{ProductsScreen-DLrDpYau.mjs → ProductsScreen-CdbwRM5O.mjs} +4 -4
  37. package/dist/{ProductsScreen-DmhLYjZD.cjs → ProductsScreen-DgPjO-HY.cjs} +4 -4
  38. package/dist/{ProfileScreen-Dx8KAKbU.cjs → ProfileScreen-BsjuHCor.cjs} +2 -2
  39. package/dist/{ProfileScreen-Dx8KAKbU.cjs.map → ProfileScreen-BsjuHCor.cjs.map} +1 -1
  40. package/dist/{ProfileScreen-BCDSo1pW.cjs → ProfileScreen-DL-C2R6R.cjs} +2 -2
  41. package/dist/{ProfileScreen-DoCcIaDI.mjs → ProfileScreen-eJvfI2YW.mjs} +2 -2
  42. package/dist/{ProfileScreen-DoCcIaDI.mjs.map → ProfileScreen-eJvfI2YW.mjs.map} +1 -1
  43. package/dist/{ShareablesScreen-B-OPO65F.cjs → ShareablesScreen-BEm7wQaI.cjs} +4 -4
  44. package/dist/{ShareablesScreen-CXchqCpx.mjs → ShareablesScreen-BUuuUpDS.mjs} +3 -3
  45. package/dist/{ShareablesScreen-CXchqCpx.mjs.map → ShareablesScreen-BUuuUpDS.mjs.map} +1 -1
  46. package/dist/{ShareablesScreen-D8tsuynn.cjs → ShareablesScreen-C1PQmDVa.cjs} +3 -3
  47. package/dist/{ShareablesScreen-D8tsuynn.cjs.map → ShareablesScreen-C1PQmDVa.cjs.map} +1 -1
  48. package/dist/{ShareablesScreen-Bvx2nkO5.mjs → ShareablesScreen-DoJ8EIDG.mjs} +4 -4
  49. package/dist/{ShopScreen-D__IvAj7.mjs → ShopScreen-5AXTCtLQ.mjs} +3 -3
  50. package/dist/{ShopScreen-D__IvAj7.mjs.map → ShopScreen-5AXTCtLQ.mjs.map} +1 -1
  51. package/dist/{ShopScreen-D6YHqL2Z.cjs → ShopScreen-DEFhDrcd.cjs} +3 -3
  52. package/dist/{ShopScreen-CcmvJ3mF.cjs → ShopScreen-X802gHEX.cjs} +3 -3
  53. package/dist/{ShopScreen-CcmvJ3mF.cjs.map → ShopScreen-X802gHEX.cjs.map} +1 -1
  54. package/dist/{SubscriptionsScreen-CshfzE9Z.mjs → SubscriptionsScreen-BwRoXYF8.mjs} +44 -34
  55. package/dist/SubscriptionsScreen-BwRoXYF8.mjs.map +1 -0
  56. package/dist/{SubscriptionsScreen-CEiVF1iQ.cjs → SubscriptionsScreen-DbcnEDD0.cjs} +43 -33
  57. package/dist/SubscriptionsScreen-DbcnEDD0.cjs.map +1 -0
  58. package/dist/{SubscriptionsScreen-C32rbhAZ.cjs → SubscriptionsScreen-mhTl7OIp.cjs} +3 -3
  59. package/dist/{dist-Ib6pM5r3.cjs → dist-bL3uiYn3.cjs} +1 -1
  60. package/dist/{dist-Ib6pM5r3.cjs.map → dist-bL3uiYn3.cjs.map} +1 -1
  61. package/dist/{dist-DhOQb8en.mjs → dist-wzcShuuv.mjs} +1 -1
  62. package/dist/{dist-DhOQb8en.mjs.map → dist-wzcShuuv.mjs.map} +1 -1
  63. package/dist/index.cjs +30 -30
  64. package/dist/index.d.cts.map +1 -1
  65. package/dist/index.d.mts.map +1 -1
  66. package/dist/index.mjs +30 -30
  67. package/dist/{order-status-badge-DvZns1LY.cjs → order-status-badge-Crk9UGpl.cjs} +23 -151
  68. package/dist/order-status-badge-Crk9UGpl.cjs.map +1 -0
  69. package/dist/{order-status-badge-DK9GG8H-.mjs → order-status-badge-DiQDwwSp.mjs} +28 -150
  70. package/dist/order-status-badge-DiQDwwSp.mjs.map +1 -0
  71. package/dist/{portal_tenant-BrihTN41.mjs → portal_tenant-CWKHVgID.mjs} +14 -4
  72. package/dist/portal_tenant-CWKHVgID.mjs.map +1 -0
  73. package/dist/{portal_tenant-DjN8hwJb.cjs → portal_tenant-pozf8Ht6.cjs} +19 -3
  74. package/dist/portal_tenant-pozf8Ht6.cjs.map +1 -0
  75. package/package.json +18 -18
  76. package/dist/ContactsScreen-D2rOJ9Ra.cjs.map +0 -1
  77. package/dist/ContactsScreen-Dw9G8Q3n.mjs.map +0 -1
  78. package/dist/FluidProvider-ClxrzJDf.mjs.map +0 -1
  79. package/dist/OrdersScreen-DlCLRqEK.cjs.map +0 -1
  80. package/dist/OrdersScreen-DtO4r_th.mjs.map +0 -1
  81. package/dist/PortalContentApiProvider-CH87-pE5.cjs.map +0 -1
  82. package/dist/PortalContentApiProvider-DGkP0Vk6.mjs.map +0 -1
  83. package/dist/SubscriptionsScreen-CEiVF1iQ.cjs.map +0 -1
  84. package/dist/SubscriptionsScreen-CshfzE9Z.mjs.map +0 -1
  85. package/dist/order-status-badge-DK9GG8H-.mjs.map +0 -1
  86. package/dist/order-status-badge-DvZns1LY.cjs.map +0 -1
  87. package/dist/portal_tenant-BrihTN41.mjs.map +0 -1
  88. package/dist/portal_tenant-DjN8hwJb.cjs.map +0 -1
  89. package/dist/src-DOYe5GAF.cjs +0 -3
  90. package/dist/src-HUkXWdaF.mjs +0 -3
@@ -1 +0,0 @@
1
- {"version":3,"file":"order-status-badge-DK9GG8H-.mjs","names":["Table"],"sources":["../../../orders/core/src/orders-api-context.ts","../../../orders/core/src/provider.tsx","../../../orders/core/src/query-keys.ts","../../../orders/core/src/hooks/use-customer-orders.ts","../../../orders/core/src/hooks/use-portal-tenant-order.ts","../../../orders/core/src/utils/format-order-total.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/components/orders-list.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 \"./orders-api-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 { ordersKeys } from \"../query-keys\";\nimport { useOrdersApi } from \"../orders-api-context\";\n\nexport function useCustomerOrders(\n params: orders.FetchOrdersParams,\n options?: { enabled?: boolean },\n) {\n const api = useOrdersApi();\n return useQuery({\n queryKey: ordersKeys.list(params),\n queryFn: () => {\n if (!api.fetchCustomerOrders) {\n throw new Error(\n \"fetchCustomerOrders not implemented on this OrdersApi\",\n );\n }\n return api.fetchCustomerOrders(params);\n },\n enabled: options?.enabled ?? true,\n });\n}\n","import { useQuery } from \"@tanstack/react-query\";\nimport { portalTenantOrdersKeys } from \"../query-keys\";\nimport { useOrdersApi } from \"../orders-api-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(id);\n },\n enabled: (options?.enabled ?? true) && !!id,\n });\n}\n","import type { orders } from \"../types\";\n\nexport function formatOrderTotal(order: orders.ListOrder): string {\n if (order.order_total_after_points_redemption != null) {\n return `${order.currency_symbol || \"$\"}${Number(\n order.order_total_after_points_redemption,\n ).toFixed(2)}`;\n }\n return (\n order.total_display_amount ||\n `${order.currency_symbol || \"$\"}${Number(order.amount).toFixed(2)}`\n );\n}\n","import { 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 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 <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 <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 capitalize\",\n colorStyles[color],\n sizeStyles[size],\n className,\n )}\n >\n {dot && (\n <span\n className={cn(\"h-1.5 w-1.5 rounded-full\", dotColorStyles[color])}\n />\n )}\n {children}\n </span>\n );\n}\n","import { cn, TableHead } from \"@fluid-app/ui-primitives\";\n\ninterface TableColumnProps {\n label: string;\n sortable?: boolean;\n className?: string;\n onSortClick?: (sortBy: string) => void;\n sortBy?: string;\n sortData?: {\n column: string;\n direction: \"asc\" | \"desc\";\n };\n chevronUpIcon?: string;\n chevronDownIcon?: string;\n}\n\nexport function TableColumn({\n label,\n sortable = true,\n className,\n onSortClick,\n sortBy,\n sortData,\n chevronUpIcon,\n chevronDownIcon,\n}: TableColumnProps) {\n const hideUpIcon =\n sortData?.column !== sortBy ||\n (sortData?.column === sortBy && sortData?.direction === \"asc\");\n\n const hideDownIcon =\n sortData?.column !== sortBy ||\n (sortData?.column === sortBy && sortData?.direction === \"desc\");\n\n return (\n <TableHead\n className={cn(\n \"group text-muted-foreground cursor-pointer px-3 text-xs transition-colors duration-200\",\n \"hover:text-primary\",\n className,\n )}\n onClick={() => sortable && onSortClick?.(sortBy ?? \"\")}\n >\n <div className=\"relative flex items-center\">\n {label}\n {sortable && chevronUpIcon && chevronDownIcon && (\n <button\n className={`ml-2 inline-flex flex-col items-center justify-center group-hover:opacity-100 ${\n sortData?.column === sortBy ? \"opacity-100\" : \"opacity-0\"\n } transition-opacity duration-200`}\n >\n <div className=\"flex flex-col\">\n <img\n src={chevronUpIcon}\n alt=\"\"\n width={12}\n height={12}\n className={cn(\n \"text-muted-foreground group-hover:text-primary h-2.5 w-2.5 transition-colors duration-200\",\n hideUpIcon && \"opacity-0\",\n sortData?.column !== sortBy && \"group-hover:opacity-100\",\n )}\n />\n <img\n src={chevronDownIcon}\n alt=\"\"\n width={12}\n height={12}\n className={cn(\n \"text-muted-foreground group-hover:text-primary h-2.5 w-2.5 transition-colors duration-200\",\n hideDownIcon && \"opacity-0\",\n sortData?.column !== sortBy && \"group-hover:opacity-100\",\n )}\n />\n </div>\n </button>\n )}\n </div>\n </TableHead>\n );\n}\n","import { useState, useCallback } from \"react\";\nimport type { orders } from \"@fluid-app/orders-core\";\nimport { useCustomerOrders, formatOrderTotal } from \"@fluid-app/orders-core\";\nimport {\n Skeleton,\n Table,\n TableBody,\n TableCell,\n TableHeader,\n TableRow,\n} from \"@fluid-app/ui-primitives\";\nimport { SearchSort } from \"@fluid-app/ui-components/components/SearchSort\";\nimport { PaginationFooter } from \"./pagination-footer\";\nimport { StatusBadge } from \"./status-badge\";\nimport { TableColumn } from \"./table-column\";\n\nexport interface OrdersListProps {\n customerId: number | undefined;\n onOrderClick: (order: orders.ListOrder) => void;\n onSubscriptionClick?: (subscriptionToken: string) => void;\n t: (key: string) => string;\n pageSize?: number;\n}\n\nexport function OrdersList({\n customerId,\n onOrderClick,\n onSubscriptionClick,\n t,\n pageSize = 10,\n}: OrdersListProps) {\n const [cursor, setCursor] = useState<string | null>(null);\n const [currentPage, setCurrentPage] = useState(1);\n const [searchTerm, setSearchTerm] = useState(\"\");\n\n const params: orders.FetchOrdersParams = {\n customerId,\n limit: pageSize,\n search: searchTerm || undefined,\n cursor: cursor || undefined,\n sort: \"-created_at\",\n };\n\n const { data, isLoading } = useCustomerOrders(params, {\n enabled: !!customerId,\n });\n\n const handleSearchChange = useCallback((term: string) => {\n setSearchTerm(term);\n setCursor(null);\n setCurrentPage(1);\n }, []);\n\n const handleNextPage = useCallback(() => {\n const nextCursor = data?.meta?.pagination?.next_cursor;\n if (nextCursor) {\n setCursor(nextCursor);\n setCurrentPage((p) => p + 1);\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 setCurrentPage((p) => Math.max(1, p - 1));\n } else {\n setCursor(null);\n setCurrentPage(1);\n }\n }, [data?.meta?.pagination?.prev_cursor]);\n\n const ordersList = data?.orders || [];\n const pagination = data?.meta?.pagination;\n const totalItems = pagination?.total_count ?? ordersList.length;\n const totalPages =\n pagination?.total_pages ?? Math.max(1, Math.ceil(totalItems / pageSize));\n const hasNextPage = !!pagination?.next_cursor;\n const hasPrevPage = !!pagination?.prev_cursor;\n\n return (\n <div className=\"border-border overflow-hidden rounded-lg border shadow-sm\">\n <div className=\"flex justify-end p-3\">\n <div className=\"w-full max-w-sm\">\n <SearchSort\n searchValue={searchTerm}\n onSearchChange={handleSearchChange}\n placeholder={t(\"search_orders\")}\n />\n </div>\n </div>\n\n {/* mobile view */}\n <div className=\"block md:hidden\">\n {isLoading ? (\n Array(5)\n .fill(0)\n .map((_, index) => (\n <div\n key={`skeleton-${index}`}\n className=\"border-border border-b p-4\"\n >\n <div className=\"flex space-x-3\">\n <Skeleton className=\"h-12 w-12 rounded-md\" />\n <div className=\"flex-1 space-y-2\">\n <Skeleton className=\"h-4 w-3/4\" />\n <Skeleton className=\"h-3 w-1/2\" />\n </div>\n </div>\n </div>\n ))\n ) : ordersList.length === 0 ? (\n <div className=\"text-muted-foreground px-3 py-8 text-center text-sm\">\n {searchTerm ? t(\"no_matching_orders\") : t(\"no_orders_found\")}\n </div>\n ) : (\n ordersList.map((order) => (\n <div\n key={order.id}\n className=\"border-border hover:bg-accent cursor-pointer border-b p-4 transition-colors duration-200 ease-in-out last:border-b-0\"\n onClick={() => onOrderClick(order)}\n >\n <div className=\"flex items-start space-x-3\">\n {order.first_item?.image_url ? (\n <img\n src={order.first_item.image_url}\n alt={t(\"no_image_available\")}\n width={48}\n height={48}\n className=\"h-12 w-12 flex-shrink-0 rounded-md object-cover\"\n />\n ) : (\n <div className=\"bg-border h-12 w-12 flex-shrink-0 rounded-md\" />\n )}\n <div className=\"w-0 min-w-0 flex-1\">\n {order.first_item?.title ? (\n <p className=\"text-foreground truncate text-sm font-medium\">\n {order.first_item.title}\n </p>\n ) : (\n <div className=\"bg-muted rounded-lg p-2\">\n <div className=\"text-muted-foreground text-xs\">\n {t(\"this_product_no_longer_exists\")}\n </div>\n </div>\n )}\n {order.subscription && (\n <StatusBadge color=\"blue\" size=\"xs\" className=\"mt-1\">\n {t(\"subscription\")}\n </StatusBadge>\n )}\n {order.subscription?.subscription_token &&\n onSubscriptionClick && (\n <button\n type=\"button\"\n className=\"text-foreground hover:text-foreground/80 mt-1 inline-block text-xs transition-colors duration-200 hover:underline\"\n onClick={(e) => {\n e.stopPropagation();\n onSubscriptionClick(\n order.subscription!.subscription_token,\n );\n }}\n >\n {t(\"view_subscription\")}\n </button>\n )}\n <div className=\"mt-2 grid grid-cols-3 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.order_status === \"completed\" ||\n order.order_status === \"delivered\" ||\n order.order_status === \"shipped\"\n ? \"green\"\n : order.order_status === \"cancelled\" ||\n order.order_status === \"returned\"\n ? \"red\"\n : \"yellow\"\n }\n size=\"xs\"\n >\n {order.order_status}\n </StatusBadge>\n </div>\n <div>\n <span className=\"text-muted-foreground block text-xs\">\n {t(\"total\")}\n </span>\n <span className=\"text-foreground font-medium\">\n {formatOrderTotal(order)}\n </span>\n </div>\n </div>\n </div>\n </div>\n </div>\n ))\n )}\n </div>\n\n {/* desktop view */}\n <div className=\"hidden md:block\">\n <Table className=\"min-w-full table-fixed\">\n <colgroup>\n <col className=\"w-2/5 min-w-[240px]\" />\n <col className=\"w-[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 <div className=\"flex items-center space-x-2\">\n <Skeleton className=\"h-9 w-9 rounded-md\" />\n <Skeleton className=\"h-4 w-32\" />\n </div>\n </TableCell>\n <TableCell className=\"px-3 py-4\">\n <Skeleton className=\"h-4 w-24\" />\n </TableCell>\n <TableCell className=\"px-3 py-4\">\n <Skeleton className=\"h-4 w-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 {searchTerm ? t(\"no_matching_orders\") : t(\"no_orders_found\")}\n </TableCell>\n </TableRow>\n ) : (\n ordersList.map((order) => (\n <TableRow\n key={order.id}\n className=\"cursor-pointer\"\n onClick={() => onOrderClick(order)}\n >\n <TableCell className=\"text-muted-foreground px-3 py-4 text-sm\">\n <div className=\"flex max-w-[280px] flex-row items-center space-x-3\">\n {order.first_item?.image_url ? (\n <img\n src={order.first_item.image_url}\n alt={t(\"no_image_available\")}\n width={42}\n height={42}\n className=\"h-[42px] w-[42px] flex-shrink-0 rounded-md object-cover\"\n />\n ) : (\n <div className=\"bg-border ml-1 h-9 w-9 flex-shrink-0 rounded-md\" />\n )}\n <div className=\"flex min-w-0 flex-col space-y-1\">\n <div className=\"flex items-center space-x-2\">\n {order.first_item?.title ? (\n <span className=\"text-foreground truncate text-sm font-medium\">\n {order.first_item.title}\n </span>\n ) : (\n <div className=\"bg-muted w-full rounded-lg p-2\">\n <div className=\"text-muted-foreground text-xs\">\n {t(\"this_product_no_longer_exists\")}\n </div>\n </div>\n )}\n {order.subscription && (\n <StatusBadge\n color=\"blue\"\n size=\"xs\"\n className=\"flex-shrink-0\"\n >\n {t(\"subscription\")}\n </StatusBadge>\n )}\n </div>\n {order.subscription?.subscription_token &&\n onSubscriptionClick && (\n <button\n type=\"button\"\n className=\"text-foreground hover:text-foreground/80 text-left text-xs transition-colors duration-200 hover:underline\"\n onClick={(e) => {\n e.stopPropagation();\n onSubscriptionClick(\n order.subscription!.subscription_token,\n );\n }}\n >\n {t(\"view_subscription\")}\n </button>\n )}\n </div>\n </div>\n </TableCell>\n <TableCell className=\"text-muted-foreground px-3 py-4 text-sm whitespace-nowrap\">\n {new Date(order.created_at).toLocaleDateString()}\n </TableCell>\n <TableCell className=\"px-3 py-4 text-sm\">\n <StatusBadge\n color={\n order.order_status === \"completed\" ||\n order.order_status === \"delivered\" ||\n order.order_status === \"shipped\"\n ? \"green\"\n : order.order_status === \"cancelled\" ||\n order.order_status === \"returned\"\n ? \"red\"\n : \"yellow\"\n }\n size=\"xs\"\n >\n {order.order_status}\n </StatusBadge>\n </TableCell>\n <TableCell className=\"text-foreground px-3 py-4 text-sm whitespace-nowrap\">\n {formatOrderTotal(order)}\n </TableCell>\n </TableRow>\n ))\n )}\n </TableBody>\n </Table>\n </div>\n\n <PaginationFooter\n currentPage={currentPage}\n totalPages={totalPages}\n pageSize={pageSize}\n totalItems={totalItems}\n cursorPaginationMode\n hasNextPage={hasNextPage}\n hasPrevPage={hasPrevPage}\n onCursorNext={handleNextPage}\n onCursorPrev={handlePrevPage}\n />\n </div>\n );\n}\n","export function startCase(str: string | undefined | null): string {\n if (!str) return \"\";\n return str.replace(/_/g, \" \").replace(/\\b\\w/g, (char) => char.toUpperCase());\n}\n\nexport function formatCurrency(symbol: string, value: string | number): string {\n return `${symbol}${Number(value).toFixed(2)}`;\n}\n","import { StatusBadge, type BadgeColor } from \"./status-badge\";\nimport { startCase } from \"../lib/format\";\n\nconst statusColorMap: Record<string, BadgeColor> = {\n paid: \"green\",\n fulfilled: \"green\",\n delivered: \"green\",\n complete: \"green\",\n pending: \"yellow\",\n unfulfilled: \"yellow\",\n partially_fulfilled: \"yellow\",\n processing: \"yellow\",\n refunded: \"red\",\n cancelled: \"red\",\n failed: \"red\",\n voided: \"red\",\n};\n\nexport interface OrderStatusBadgeProps {\n status: string;\n className?: string;\n}\n\nexport function OrderStatusBadge({ status, className }: OrderStatusBadgeProps) {\n const color = statusColorMap[status] ?? \"gray\";\n return (\n <StatusBadge color={color} dot size=\"sm\" className={className}>\n {startCase(status)}\n </StatusBadge>\n );\n}\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"order-status-badge-DvZns1LY.cjs","names":["cn","ChevronLeft","ChevronRight","cn","TableHead","cn","SearchSort","Skeleton","Table","TableHeader","TableRow","TableBody","TableCell"],"sources":["../../../orders/core/src/orders-api-context.ts","../../../orders/core/src/provider.tsx","../../../orders/core/src/query-keys.ts","../../../orders/core/src/hooks/use-customer-orders.ts","../../../orders/core/src/hooks/use-portal-tenant-order.ts","../../../orders/core/src/utils/format-order-total.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/components/orders-list.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 \"./orders-api-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 { ordersKeys } from \"../query-keys\";\nimport { useOrdersApi } from \"../orders-api-context\";\n\nexport function useCustomerOrders(\n params: orders.FetchOrdersParams,\n options?: { enabled?: boolean },\n) {\n const api = useOrdersApi();\n return useQuery({\n queryKey: ordersKeys.list(params),\n queryFn: () => {\n if (!api.fetchCustomerOrders) {\n throw new Error(\n \"fetchCustomerOrders not implemented on this OrdersApi\",\n );\n }\n return api.fetchCustomerOrders(params);\n },\n enabled: options?.enabled ?? true,\n });\n}\n","import { useQuery } from \"@tanstack/react-query\";\nimport { portalTenantOrdersKeys } from \"../query-keys\";\nimport { useOrdersApi } from \"../orders-api-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(id);\n },\n enabled: (options?.enabled ?? true) && !!id,\n });\n}\n","import type { orders } from \"../types\";\n\nexport function formatOrderTotal(order: orders.ListOrder): string {\n if (order.order_total_after_points_redemption != null) {\n return `${order.currency_symbol || \"$\"}${Number(\n order.order_total_after_points_redemption,\n ).toFixed(2)}`;\n }\n return (\n order.total_display_amount ||\n `${order.currency_symbol || \"$\"}${Number(order.amount).toFixed(2)}`\n );\n}\n","import { 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 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 <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 <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 capitalize\",\n colorStyles[color],\n sizeStyles[size],\n className,\n )}\n >\n {dot && (\n <span\n className={cn(\"h-1.5 w-1.5 rounded-full\", dotColorStyles[color])}\n />\n )}\n {children}\n </span>\n );\n}\n","import { cn, TableHead } from \"@fluid-app/ui-primitives\";\n\ninterface TableColumnProps {\n label: string;\n sortable?: boolean;\n className?: string;\n onSortClick?: (sortBy: string) => void;\n sortBy?: string;\n sortData?: {\n column: string;\n direction: \"asc\" | \"desc\";\n };\n chevronUpIcon?: string;\n chevronDownIcon?: string;\n}\n\nexport function TableColumn({\n label,\n sortable = true,\n className,\n onSortClick,\n sortBy,\n sortData,\n chevronUpIcon,\n chevronDownIcon,\n}: TableColumnProps) {\n const hideUpIcon =\n sortData?.column !== sortBy ||\n (sortData?.column === sortBy && sortData?.direction === \"asc\");\n\n const hideDownIcon =\n sortData?.column !== sortBy ||\n (sortData?.column === sortBy && sortData?.direction === \"desc\");\n\n return (\n <TableHead\n className={cn(\n \"group text-muted-foreground cursor-pointer px-3 text-xs transition-colors duration-200\",\n \"hover:text-primary\",\n className,\n )}\n onClick={() => sortable && onSortClick?.(sortBy ?? \"\")}\n >\n <div className=\"relative flex items-center\">\n {label}\n {sortable && chevronUpIcon && chevronDownIcon && (\n <button\n className={`ml-2 inline-flex flex-col items-center justify-center group-hover:opacity-100 ${\n sortData?.column === sortBy ? \"opacity-100\" : \"opacity-0\"\n } transition-opacity duration-200`}\n >\n <div className=\"flex flex-col\">\n <img\n src={chevronUpIcon}\n alt=\"\"\n width={12}\n height={12}\n className={cn(\n \"text-muted-foreground group-hover:text-primary h-2.5 w-2.5 transition-colors duration-200\",\n hideUpIcon && \"opacity-0\",\n sortData?.column !== sortBy && \"group-hover:opacity-100\",\n )}\n />\n <img\n src={chevronDownIcon}\n alt=\"\"\n width={12}\n height={12}\n className={cn(\n \"text-muted-foreground group-hover:text-primary h-2.5 w-2.5 transition-colors duration-200\",\n hideDownIcon && \"opacity-0\",\n sortData?.column !== sortBy && \"group-hover:opacity-100\",\n )}\n />\n </div>\n </button>\n )}\n </div>\n </TableHead>\n );\n}\n","import { useState, useCallback } from \"react\";\nimport type { orders } from \"@fluid-app/orders-core\";\nimport { useCustomerOrders, formatOrderTotal } from \"@fluid-app/orders-core\";\nimport {\n Skeleton,\n Table,\n TableBody,\n TableCell,\n TableHeader,\n TableRow,\n} from \"@fluid-app/ui-primitives\";\nimport { SearchSort } from \"@fluid-app/ui-components/components/SearchSort\";\nimport { PaginationFooter } from \"./pagination-footer\";\nimport { StatusBadge } from \"./status-badge\";\nimport { TableColumn } from \"./table-column\";\n\nexport interface OrdersListProps {\n customerId: number | undefined;\n onOrderClick: (order: orders.ListOrder) => void;\n onSubscriptionClick?: (subscriptionToken: string) => void;\n t: (key: string) => string;\n pageSize?: number;\n}\n\nexport function OrdersList({\n customerId,\n onOrderClick,\n onSubscriptionClick,\n t,\n pageSize = 10,\n}: OrdersListProps) {\n const [cursor, setCursor] = useState<string | null>(null);\n const [currentPage, setCurrentPage] = useState(1);\n const [searchTerm, setSearchTerm] = useState(\"\");\n\n const params: orders.FetchOrdersParams = {\n customerId,\n limit: pageSize,\n search: searchTerm || undefined,\n cursor: cursor || undefined,\n sort: \"-created_at\",\n };\n\n const { data, isLoading } = useCustomerOrders(params, {\n enabled: !!customerId,\n });\n\n const handleSearchChange = useCallback((term: string) => {\n setSearchTerm(term);\n setCursor(null);\n setCurrentPage(1);\n }, []);\n\n const handleNextPage = useCallback(() => {\n const nextCursor = data?.meta?.pagination?.next_cursor;\n if (nextCursor) {\n setCursor(nextCursor);\n setCurrentPage((p) => p + 1);\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 setCurrentPage((p) => Math.max(1, p - 1));\n } else {\n setCursor(null);\n setCurrentPage(1);\n }\n }, [data?.meta?.pagination?.prev_cursor]);\n\n const ordersList = data?.orders || [];\n const pagination = data?.meta?.pagination;\n const totalItems = pagination?.total_count ?? ordersList.length;\n const totalPages =\n pagination?.total_pages ?? Math.max(1, Math.ceil(totalItems / pageSize));\n const hasNextPage = !!pagination?.next_cursor;\n const hasPrevPage = !!pagination?.prev_cursor;\n\n return (\n <div className=\"border-border overflow-hidden rounded-lg border shadow-sm\">\n <div className=\"flex justify-end p-3\">\n <div className=\"w-full max-w-sm\">\n <SearchSort\n searchValue={searchTerm}\n onSearchChange={handleSearchChange}\n placeholder={t(\"search_orders\")}\n />\n </div>\n </div>\n\n {/* mobile view */}\n <div className=\"block md:hidden\">\n {isLoading ? (\n Array(5)\n .fill(0)\n .map((_, index) => (\n <div\n key={`skeleton-${index}`}\n className=\"border-border border-b p-4\"\n >\n <div className=\"flex space-x-3\">\n <Skeleton className=\"h-12 w-12 rounded-md\" />\n <div className=\"flex-1 space-y-2\">\n <Skeleton className=\"h-4 w-3/4\" />\n <Skeleton className=\"h-3 w-1/2\" />\n </div>\n </div>\n </div>\n ))\n ) : ordersList.length === 0 ? (\n <div className=\"text-muted-foreground px-3 py-8 text-center text-sm\">\n {searchTerm ? t(\"no_matching_orders\") : t(\"no_orders_found\")}\n </div>\n ) : (\n ordersList.map((order) => (\n <div\n key={order.id}\n className=\"border-border hover:bg-accent cursor-pointer border-b p-4 transition-colors duration-200 ease-in-out last:border-b-0\"\n onClick={() => onOrderClick(order)}\n >\n <div className=\"flex items-start space-x-3\">\n {order.first_item?.image_url ? (\n <img\n src={order.first_item.image_url}\n alt={t(\"no_image_available\")}\n width={48}\n height={48}\n className=\"h-12 w-12 flex-shrink-0 rounded-md object-cover\"\n />\n ) : (\n <div className=\"bg-border h-12 w-12 flex-shrink-0 rounded-md\" />\n )}\n <div className=\"w-0 min-w-0 flex-1\">\n {order.first_item?.title ? (\n <p className=\"text-foreground truncate text-sm font-medium\">\n {order.first_item.title}\n </p>\n ) : (\n <div className=\"bg-muted rounded-lg p-2\">\n <div className=\"text-muted-foreground text-xs\">\n {t(\"this_product_no_longer_exists\")}\n </div>\n </div>\n )}\n {order.subscription && (\n <StatusBadge color=\"blue\" size=\"xs\" className=\"mt-1\">\n {t(\"subscription\")}\n </StatusBadge>\n )}\n {order.subscription?.subscription_token &&\n onSubscriptionClick && (\n <button\n type=\"button\"\n className=\"text-foreground hover:text-foreground/80 mt-1 inline-block text-xs transition-colors duration-200 hover:underline\"\n onClick={(e) => {\n e.stopPropagation();\n onSubscriptionClick(\n order.subscription!.subscription_token,\n );\n }}\n >\n {t(\"view_subscription\")}\n </button>\n )}\n <div className=\"mt-2 grid grid-cols-3 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.order_status === \"completed\" ||\n order.order_status === \"delivered\" ||\n order.order_status === \"shipped\"\n ? \"green\"\n : order.order_status === \"cancelled\" ||\n order.order_status === \"returned\"\n ? \"red\"\n : \"yellow\"\n }\n size=\"xs\"\n >\n {order.order_status}\n </StatusBadge>\n </div>\n <div>\n <span className=\"text-muted-foreground block text-xs\">\n {t(\"total\")}\n </span>\n <span className=\"text-foreground font-medium\">\n {formatOrderTotal(order)}\n </span>\n </div>\n </div>\n </div>\n </div>\n </div>\n ))\n )}\n </div>\n\n {/* desktop view */}\n <div className=\"hidden md:block\">\n <Table className=\"min-w-full table-fixed\">\n <colgroup>\n <col className=\"w-2/5 min-w-[240px]\" />\n <col className=\"w-[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 <div className=\"flex items-center space-x-2\">\n <Skeleton className=\"h-9 w-9 rounded-md\" />\n <Skeleton className=\"h-4 w-32\" />\n </div>\n </TableCell>\n <TableCell className=\"px-3 py-4\">\n <Skeleton className=\"h-4 w-24\" />\n </TableCell>\n <TableCell className=\"px-3 py-4\">\n <Skeleton className=\"h-4 w-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 {searchTerm ? t(\"no_matching_orders\") : t(\"no_orders_found\")}\n </TableCell>\n </TableRow>\n ) : (\n ordersList.map((order) => (\n <TableRow\n key={order.id}\n className=\"cursor-pointer\"\n onClick={() => onOrderClick(order)}\n >\n <TableCell className=\"text-muted-foreground px-3 py-4 text-sm\">\n <div className=\"flex max-w-[280px] flex-row items-center space-x-3\">\n {order.first_item?.image_url ? (\n <img\n src={order.first_item.image_url}\n alt={t(\"no_image_available\")}\n width={42}\n height={42}\n className=\"h-[42px] w-[42px] flex-shrink-0 rounded-md object-cover\"\n />\n ) : (\n <div className=\"bg-border ml-1 h-9 w-9 flex-shrink-0 rounded-md\" />\n )}\n <div className=\"flex min-w-0 flex-col space-y-1\">\n <div className=\"flex items-center space-x-2\">\n {order.first_item?.title ? (\n <span className=\"text-foreground truncate text-sm font-medium\">\n {order.first_item.title}\n </span>\n ) : (\n <div className=\"bg-muted w-full rounded-lg p-2\">\n <div className=\"text-muted-foreground text-xs\">\n {t(\"this_product_no_longer_exists\")}\n </div>\n </div>\n )}\n {order.subscription && (\n <StatusBadge\n color=\"blue\"\n size=\"xs\"\n className=\"flex-shrink-0\"\n >\n {t(\"subscription\")}\n </StatusBadge>\n )}\n </div>\n {order.subscription?.subscription_token &&\n onSubscriptionClick && (\n <button\n type=\"button\"\n className=\"text-foreground hover:text-foreground/80 text-left text-xs transition-colors duration-200 hover:underline\"\n onClick={(e) => {\n e.stopPropagation();\n onSubscriptionClick(\n order.subscription!.subscription_token,\n );\n }}\n >\n {t(\"view_subscription\")}\n </button>\n )}\n </div>\n </div>\n </TableCell>\n <TableCell className=\"text-muted-foreground px-3 py-4 text-sm whitespace-nowrap\">\n {new Date(order.created_at).toLocaleDateString()}\n </TableCell>\n <TableCell className=\"px-3 py-4 text-sm\">\n <StatusBadge\n color={\n order.order_status === \"completed\" ||\n order.order_status === \"delivered\" ||\n order.order_status === \"shipped\"\n ? \"green\"\n : order.order_status === \"cancelled\" ||\n order.order_status === \"returned\"\n ? \"red\"\n : \"yellow\"\n }\n size=\"xs\"\n >\n {order.order_status}\n </StatusBadge>\n </TableCell>\n <TableCell className=\"text-foreground px-3 py-4 text-sm whitespace-nowrap\">\n {formatOrderTotal(order)}\n </TableCell>\n </TableRow>\n ))\n )}\n </TableBody>\n </Table>\n </div>\n\n <PaginationFooter\n currentPage={currentPage}\n totalPages={totalPages}\n pageSize={pageSize}\n totalItems={totalItems}\n cursorPaginationMode\n hasNextPage={hasNextPage}\n hasPrevPage={hasPrevPage}\n onCursorNext={handleNextPage}\n onCursorPrev={handlePrevPage}\n />\n </div>\n );\n}\n","export function startCase(str: string | undefined | null): string {\n if (!str) return \"\";\n return str.replace(/_/g, \" \").replace(/\\b\\w/g, (char) => char.toUpperCase());\n}\n\nexport function formatCurrency(symbol: string, value: string | number): string {\n return `${symbol}${Number(value).toFixed(2)}`;\n}\n","import { StatusBadge, type BadgeColor } from \"./status-badge\";\nimport { startCase } from \"../lib/format\";\n\nconst statusColorMap: Record<string, BadgeColor> = {\n paid: \"green\",\n fulfilled: \"green\",\n delivered: \"green\",\n complete: \"green\",\n pending: \"yellow\",\n unfulfilled: \"yellow\",\n partially_fulfilled: \"yellow\",\n processing: \"yellow\",\n refunded: \"red\",\n cancelled: \"red\",\n failed: \"red\",\n voided: \"red\",\n};\n\nexport interface OrderStatusBadgeProps {\n status: string;\n className?: string;\n}\n\nexport function OrderStatusBadge({ status, className }: OrderStatusBadgeProps) {\n const color = statusColorMap[status] ?? \"gray\";\n return (\n <StatusBadge color={color} dot size=\"sm\" className={className}>\n {startCase(status)}\n </StatusBadge>\n );\n}\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"portal_tenant-BrihTN41.mjs","names":[],"sources":["../../../api-clients/portal-tenant/src/namespaces/portal_tenant.ts"],"sourcesContent":["/**\n * Generated API client functions for portal_tenant\n *\n * DO NOT EDIT THIS FILE DIRECTLY\n * This file is auto-generated. To update:\n * 1. Update the OpenAPI spec file\n * 2. Run: pnpm generate\n */\n\nimport type { FetchClient } from \"../lib/fetch-client\";\nimport type { operations } from \"../generated/portal-tenant\";\n\n// ============================================================================\n// account\n// ============================================================================\n\n/**\n * Get current account\n * Returns the authenticated member's account profile and company context. This is the primary endpoint the SPA calls to check auth status and display user information.\n *\n * @param client - Fetch client instance\n \n */\nexport async function account_show(\n client: FetchClient,\n): Promise<\n operations[\"account_show\"][\"responses\"][200][\"content\"][\"application/json\"]\n> {\n return client.get(`/api/account`);\n}\n\n/**\n * Update current account\n * Updates the authenticated member's profile fields such as name, phone, bio, avatar, and social links.\n *\n * @param client - Fetch client instance\n * @param body - body\n */\nexport async function account_update(\n client: FetchClient,\n body: operations[\"account_update\"][\"requestBody\"][\"content\"][\"application/json\"],\n): Promise<\n operations[\"account_update\"][\"responses\"][200][\"content\"][\"application/json\"]\n> {\n return client.patch(`/api/account`, body);\n}\n\n// ============================================================================\n// store\n// ============================================================================\n\n/**\n * Get store branding\n * Returns the tenant company's store branding including logo, icon, and app store URLs.\n *\n * @param client - Fetch client instance\n \n */\nexport async function store_show(\n client: FetchClient,\n): Promise<\n operations[\"store_show\"][\"responses\"][200][\"content\"][\"application/json\"]\n> {\n return client.get(`/api/store`);\n}\n\n// ============================================================================\n// app\n// ============================================================================\n\n/**\n * Get the app manifest\n * Returns the rendered manifest for the tenant company's active FluidOS definition, matched against the current user's country, rank, and roles.\n *\n * @param client - Fetch client instance\n \n */\nexport async function app_manifest_show(\n client: FetchClient,\n): Promise<\n operations[\"app_manifest_show\"][\"responses\"][200][\"content\"][\"application/json\"]\n> {\n return client.get(`/api/app/manifest`);\n}\n\n// ============================================================================\n// orders\n// ============================================================================\n\n/**\n * List orders\n * Returns a paginated list of orders placed through the tenant company, optionally filtered by status.\n *\n * @param client - Fetch client instance\n * @param [params] - params\n */\nexport async function orders_list(\n client: FetchClient,\n params?: operations[\"orders_list\"][\"parameters\"][\"query\"],\n): Promise<\n operations[\"orders_list\"][\"responses\"][200][\"content\"][\"application/json\"]\n> {\n return client.get(`/api/orders`, params);\n}\n\n/**\n * Get an order\n * Returns a single order by token (slug) with its line items.\n *\n * @param client - Fetch client instance\n * @param token - token\n */\nexport async function orders_show(\n client: FetchClient,\n token: string | number,\n): Promise<\n operations[\"orders_show\"][\"responses\"][200][\"content\"][\"application/json\"]\n> {\n return client.get(`/api/orders/${token}`);\n}\n\n// ============================================================================\n// products\n// ============================================================================\n\n/**\n * List products\n * Returns a paginated list of products available in the tenant company's catalog. Supports sorting and filtering by title, product type, collection, and stock availability.\n *\n * @param client - Fetch client instance\n * @param [params] - params\n */\nexport async function products_list(\n client: FetchClient,\n params?: operations[\"products_list\"][\"parameters\"][\"query\"],\n): Promise<\n operations[\"products_list\"][\"responses\"][200][\"content\"][\"application/json\"]\n> {\n return client.get(`/api/products`, params);\n}\n\n/**\n * Get a product\n * Returns a single product by ID with its variants.\n *\n * @param client - Fetch client instance\n * @param id - id\n */\nexport async function products_show(\n client: FetchClient,\n id: string | number,\n): Promise<\n operations[\"products_show\"][\"responses\"][200][\"content\"][\"application/json\"]\n> {\n return client.get(`/api/products/${id}`);\n}\n\n/**\n * Search products\n * Searches the tenant company's product catalog by keyword, returning paginated results.\n *\n * @param client - Fetch client instance\n * @param [params] - params\n */\nexport async function products_search(\n client: FetchClient,\n params?: operations[\"products_search\"][\"parameters\"][\"query\"],\n): Promise<\n operations[\"products_search\"][\"responses\"][200][\"content\"][\"application/json\"]\n> {\n return client.get(`/api/products/search`, params);\n}\n\n/**\n * List product media\n * Returns all media (images, videos) attached to a product.\n *\n * @param client - Fetch client instance\n * @param id - id\n */\nexport async function products_media_list(\n client: FetchClient,\n id: string | number,\n): Promise<\n operations[\"products_media_list\"][\"responses\"][200][\"content\"][\"application/json\"]\n> {\n return client.get(`/api/products/${id}/media`);\n}\n\n// ============================================================================\n// enrollment_packs\n// ============================================================================\n\n/**\n * Get an enrollment pack\n * Returns a single active, non-discarded enrollment pack scoped to the current portal tenant's company.\n *\n * @param client - Fetch client instance\n * @param id - id\n */\nexport async function enrollment_packs_show(\n client: FetchClient,\n id: string | number,\n): Promise<\n operations[\"enrollment_packs_show\"][\"responses\"][200][\"content\"][\"application/json\"]\n> {\n return client.get(`/api/enrollment_packs/${id}`);\n}\n\n// ============================================================================\n// subscriptions\n// ============================================================================\n\n/**\n * List subscriptions\n * Returns a paginated list of the member's active and historical subscriptions.\n *\n * @param client - Fetch client instance\n * @param [params] - params\n */\nexport async function subscriptions_list(\n client: FetchClient,\n params?: operations[\"subscriptions_list\"][\"parameters\"][\"query\"],\n): Promise<\n operations[\"subscriptions_list\"][\"responses\"][200][\"content\"][\"application/json\"]\n> {\n return client.get(`/api/subscriptions`, params);\n}\n\n/**\n * Get a subscription\n * Returns a single subscription by its token.\n *\n * @param client - Fetch client instance\n * @param token - token\n */\nexport async function subscriptions_show(\n client: FetchClient,\n token: string | number,\n): Promise<\n operations[\"subscriptions_show\"][\"responses\"][200][\"content\"][\"application/json\"]\n> {\n return client.get(`/api/subscriptions/${token}`);\n}\n\n/**\n * Update a subscription\n * Updates a subscription's default payment method.\n *\n * @param client - Fetch client instance\n * @param token - token\n * @param body - body\n */\nexport async function subscriptions_update(\n client: FetchClient,\n token: string | number,\n body: operations[\"subscriptions_update\"][\"requestBody\"][\"content\"][\"application/json\"],\n): Promise<\n operations[\"subscriptions_update\"][\"responses\"][200][\"content\"][\"application/json\"]\n> {\n return client.put(`/api/subscriptions/${token}`, body);\n}\n\n/**\n * Pause a subscription\n * Pauses billing on an active subscription.\n *\n * @param client - Fetch client instance\n * @param token - token\n */\nexport async function subscriptions_pause(\n client: FetchClient,\n token: string | number,\n): Promise<\n operations[\"subscriptions_pause\"][\"responses\"][200][\"content\"][\"application/json\"]\n> {\n return client.post(`/api/subscriptions/${token}/pause`);\n}\n\n/**\n * Resume a subscription\n * Resumes billing on a paused subscription.\n *\n * @param client - Fetch client instance\n * @param token - token\n */\nexport async function subscriptions_resume(\n client: FetchClient,\n token: string | number,\n): Promise<\n operations[\"subscriptions_resume\"][\"responses\"][200][\"content\"][\"application/json\"]\n> {\n return client.post(`/api/subscriptions/${token}/resume`);\n}\n\n/**\n * Skip next billing cycle\n * Skips the next billing cycle for a subscription without pausing it.\n *\n * @param client - Fetch client instance\n * @param token - token\n */\nexport async function subscriptions_skip(\n client: FetchClient,\n token: string | number,\n): Promise<\n operations[\"subscriptions_skip\"][\"responses\"][200][\"content\"][\"application/json\"]\n> {\n return client.post(`/api/subscriptions/${token}/skip_next_billing`);\n}\n\n/**\n * Cancel a subscription\n * Cancels an active subscription.\n *\n * @param client - Fetch client instance\n * @param token - token\n */\nexport async function subscriptions_cancel(\n client: FetchClient,\n token: string | number,\n): Promise<\n operations[\"subscriptions_cancel\"][\"responses\"][200][\"content\"][\"application/json\"]\n> {\n return client.post(`/api/subscriptions/${token}/cancel`);\n}\n\n/**\n * Reactivate a subscription\n * Reactivates a previously cancelled subscription.\n *\n * @param client - Fetch client instance\n * @param token - token\n */\nexport async function subscriptions_reactivate(\n client: FetchClient,\n token: string | number,\n): Promise<\n operations[\"subscriptions_reactivate\"][\"responses\"][200][\"content\"][\"application/json\"]\n> {\n return client.post(`/api/subscriptions/${token}/reactivate`);\n}\n\n// ============================================================================\n// todos\n// ============================================================================\n\n/**\n * List todos\n * Returns a paginated list of incomplete tasks scoped to the authenticated member. Ordered by due date ascending, tasks without a due date sort last.\n *\n * @param client - Fetch client instance\n * @param [params] - params\n */\nexport async function todos_list(\n client: FetchClient,\n params?: operations[\"todos_list\"][\"parameters\"][\"query\"],\n): Promise<\n operations[\"todos_list\"][\"responses\"][200][\"content\"][\"application/json\"]\n> {\n return client.get(`/api/todos`, params);\n}\n\n// ============================================================================\n// carts\n// ============================================================================\n\n/**\n * Claim a cart\n * Assigns the logged-in member as buyer_rep on an unclaimed FairShare cart. Any portal member (rep or customer) can claim. Returns an error if the cart has already been claimed.\n *\n * @param client - Fetch client instance\n * @param token - token\n */\nexport async function carts_claim(\n client: FetchClient,\n token: string | number,\n): Promise<\n operations[\"carts_claim\"][\"responses\"][200][\"content\"][\"application/json\"]\n> {\n return client.post(`/api/carts/${token}/claim`);\n}\n"],"mappings":";;;;;;;;AAuBA,eAAsB,aACpB,QAGA;AACA,QAAO,OAAO,IAAI,eAAe;;;;;;;;;AAUnC,eAAsB,eACpB,QACA,MAGA;AACA,QAAO,OAAO,MAAM,gBAAgB,KAAK;;;;;;;;;AAc3C,eAAsB,WACpB,QAGA;AACA,QAAO,OAAO,IAAI,aAAa;;;;;;;;;AAcjC,eAAsB,kBACpB,QAGA;AACA,QAAO,OAAO,IAAI,oBAAoB;;;;;;;;;AAcxC,eAAsB,YACpB,QACA,QAGA;AACA,QAAO,OAAO,IAAI,eAAe,OAAO;;;;;;;;;AAU1C,eAAsB,YACpB,QACA,OAGA;AACA,QAAO,OAAO,IAAI,eAAe,QAAQ;;;;;;;;;AAc3C,eAAsB,cACpB,QACA,QAGA;AACA,QAAO,OAAO,IAAI,iBAAiB,OAAO;;;;;;;;;AAU5C,eAAsB,cACpB,QACA,IAGA;AACA,QAAO,OAAO,IAAI,iBAAiB,KAAK;;;;;;;;;AAU1C,eAAsB,gBACpB,QACA,QAGA;AACA,QAAO,OAAO,IAAI,wBAAwB,OAAO;;;;;;;;;AAUnD,eAAsB,oBACpB,QACA,IAGA;AACA,QAAO,OAAO,IAAI,iBAAiB,GAAG,QAAQ;;;;;;;;;AAchD,eAAsB,sBACpB,QACA,IAGA;AACA,QAAO,OAAO,IAAI,yBAAyB,KAAK;;;;;;;;;AAclD,eAAsB,mBACpB,QACA,QAGA;AACA,QAAO,OAAO,IAAI,sBAAsB,OAAO;;;;;;;;;AAUjD,eAAsB,mBACpB,QACA,OAGA;AACA,QAAO,OAAO,IAAI,sBAAsB,QAAQ;;;;;;;;;;AAWlD,eAAsB,qBACpB,QACA,OACA,MAGA;AACA,QAAO,OAAO,IAAI,sBAAsB,SAAS,KAAK;;;;;;;;;AAUxD,eAAsB,oBACpB,QACA,OAGA;AACA,QAAO,OAAO,KAAK,sBAAsB,MAAM,QAAQ;;;;;;;;;AAUzD,eAAsB,qBACpB,QACA,OAGA;AACA,QAAO,OAAO,KAAK,sBAAsB,MAAM,SAAS;;;;;;;;;AAU1D,eAAsB,mBACpB,QACA,OAGA;AACA,QAAO,OAAO,KAAK,sBAAsB,MAAM,oBAAoB;;;;;;;;;AAUrE,eAAsB,qBACpB,QACA,OAGA;AACA,QAAO,OAAO,KAAK,sBAAsB,MAAM,SAAS;;;;;;;;;AAU1D,eAAsB,yBACpB,QACA,OAGA;AACA,QAAO,OAAO,KAAK,sBAAsB,MAAM,aAAa;;;;;;;;;AAc9D,eAAsB,WACpB,QACA,QAGA;AACA,QAAO,OAAO,IAAI,cAAc,OAAO"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"portal_tenant-DjN8hwJb.cjs","names":[],"sources":["../../../api-clients/portal-tenant/src/namespaces/portal_tenant.ts"],"sourcesContent":["/**\n * Generated API client functions for portal_tenant\n *\n * DO NOT EDIT THIS FILE DIRECTLY\n * This file is auto-generated. To update:\n * 1. Update the OpenAPI spec file\n * 2. Run: pnpm generate\n */\n\nimport type { FetchClient } from \"../lib/fetch-client\";\nimport type { operations } from \"../generated/portal-tenant\";\n\n// ============================================================================\n// account\n// ============================================================================\n\n/**\n * Get current account\n * Returns the authenticated member's account profile and company context. This is the primary endpoint the SPA calls to check auth status and display user information.\n *\n * @param client - Fetch client instance\n \n */\nexport async function account_show(\n client: FetchClient,\n): Promise<\n operations[\"account_show\"][\"responses\"][200][\"content\"][\"application/json\"]\n> {\n return client.get(`/api/account`);\n}\n\n/**\n * Update current account\n * Updates the authenticated member's profile fields such as name, phone, bio, avatar, and social links.\n *\n * @param client - Fetch client instance\n * @param body - body\n */\nexport async function account_update(\n client: FetchClient,\n body: operations[\"account_update\"][\"requestBody\"][\"content\"][\"application/json\"],\n): Promise<\n operations[\"account_update\"][\"responses\"][200][\"content\"][\"application/json\"]\n> {\n return client.patch(`/api/account`, body);\n}\n\n// ============================================================================\n// store\n// ============================================================================\n\n/**\n * Get store branding\n * Returns the tenant company's store branding including logo, icon, and app store URLs.\n *\n * @param client - Fetch client instance\n \n */\nexport async function store_show(\n client: FetchClient,\n): Promise<\n operations[\"store_show\"][\"responses\"][200][\"content\"][\"application/json\"]\n> {\n return client.get(`/api/store`);\n}\n\n// ============================================================================\n// app\n// ============================================================================\n\n/**\n * Get the app manifest\n * Returns the rendered manifest for the tenant company's active FluidOS definition, matched against the current user's country, rank, and roles.\n *\n * @param client - Fetch client instance\n \n */\nexport async function app_manifest_show(\n client: FetchClient,\n): Promise<\n operations[\"app_manifest_show\"][\"responses\"][200][\"content\"][\"application/json\"]\n> {\n return client.get(`/api/app/manifest`);\n}\n\n// ============================================================================\n// orders\n// ============================================================================\n\n/**\n * List orders\n * Returns a paginated list of orders placed through the tenant company, optionally filtered by status.\n *\n * @param client - Fetch client instance\n * @param [params] - params\n */\nexport async function orders_list(\n client: FetchClient,\n params?: operations[\"orders_list\"][\"parameters\"][\"query\"],\n): Promise<\n operations[\"orders_list\"][\"responses\"][200][\"content\"][\"application/json\"]\n> {\n return client.get(`/api/orders`, params);\n}\n\n/**\n * Get an order\n * Returns a single order by token (slug) with its line items.\n *\n * @param client - Fetch client instance\n * @param token - token\n */\nexport async function orders_show(\n client: FetchClient,\n token: string | number,\n): Promise<\n operations[\"orders_show\"][\"responses\"][200][\"content\"][\"application/json\"]\n> {\n return client.get(`/api/orders/${token}`);\n}\n\n// ============================================================================\n// products\n// ============================================================================\n\n/**\n * List products\n * Returns a paginated list of products available in the tenant company's catalog. Supports sorting and filtering by title, product type, collection, and stock availability.\n *\n * @param client - Fetch client instance\n * @param [params] - params\n */\nexport async function products_list(\n client: FetchClient,\n params?: operations[\"products_list\"][\"parameters\"][\"query\"],\n): Promise<\n operations[\"products_list\"][\"responses\"][200][\"content\"][\"application/json\"]\n> {\n return client.get(`/api/products`, params);\n}\n\n/**\n * Get a product\n * Returns a single product by ID with its variants.\n *\n * @param client - Fetch client instance\n * @param id - id\n */\nexport async function products_show(\n client: FetchClient,\n id: string | number,\n): Promise<\n operations[\"products_show\"][\"responses\"][200][\"content\"][\"application/json\"]\n> {\n return client.get(`/api/products/${id}`);\n}\n\n/**\n * Search products\n * Searches the tenant company's product catalog by keyword, returning paginated results.\n *\n * @param client - Fetch client instance\n * @param [params] - params\n */\nexport async function products_search(\n client: FetchClient,\n params?: operations[\"products_search\"][\"parameters\"][\"query\"],\n): Promise<\n operations[\"products_search\"][\"responses\"][200][\"content\"][\"application/json\"]\n> {\n return client.get(`/api/products/search`, params);\n}\n\n/**\n * List product media\n * Returns all media (images, videos) attached to a product.\n *\n * @param client - Fetch client instance\n * @param id - id\n */\nexport async function products_media_list(\n client: FetchClient,\n id: string | number,\n): Promise<\n operations[\"products_media_list\"][\"responses\"][200][\"content\"][\"application/json\"]\n> {\n return client.get(`/api/products/${id}/media`);\n}\n\n// ============================================================================\n// enrollment_packs\n// ============================================================================\n\n/**\n * Get an enrollment pack\n * Returns a single active, non-discarded enrollment pack scoped to the current portal tenant's company.\n *\n * @param client - Fetch client instance\n * @param id - id\n */\nexport async function enrollment_packs_show(\n client: FetchClient,\n id: string | number,\n): Promise<\n operations[\"enrollment_packs_show\"][\"responses\"][200][\"content\"][\"application/json\"]\n> {\n return client.get(`/api/enrollment_packs/${id}`);\n}\n\n// ============================================================================\n// subscriptions\n// ============================================================================\n\n/**\n * List subscriptions\n * Returns a paginated list of the member's active and historical subscriptions.\n *\n * @param client - Fetch client instance\n * @param [params] - params\n */\nexport async function subscriptions_list(\n client: FetchClient,\n params?: operations[\"subscriptions_list\"][\"parameters\"][\"query\"],\n): Promise<\n operations[\"subscriptions_list\"][\"responses\"][200][\"content\"][\"application/json\"]\n> {\n return client.get(`/api/subscriptions`, params);\n}\n\n/**\n * Get a subscription\n * Returns a single subscription by its token.\n *\n * @param client - Fetch client instance\n * @param token - token\n */\nexport async function subscriptions_show(\n client: FetchClient,\n token: string | number,\n): Promise<\n operations[\"subscriptions_show\"][\"responses\"][200][\"content\"][\"application/json\"]\n> {\n return client.get(`/api/subscriptions/${token}`);\n}\n\n/**\n * Update a subscription\n * Updates a subscription's default payment method.\n *\n * @param client - Fetch client instance\n * @param token - token\n * @param body - body\n */\nexport async function subscriptions_update(\n client: FetchClient,\n token: string | number,\n body: operations[\"subscriptions_update\"][\"requestBody\"][\"content\"][\"application/json\"],\n): Promise<\n operations[\"subscriptions_update\"][\"responses\"][200][\"content\"][\"application/json\"]\n> {\n return client.put(`/api/subscriptions/${token}`, body);\n}\n\n/**\n * Pause a subscription\n * Pauses billing on an active subscription.\n *\n * @param client - Fetch client instance\n * @param token - token\n */\nexport async function subscriptions_pause(\n client: FetchClient,\n token: string | number,\n): Promise<\n operations[\"subscriptions_pause\"][\"responses\"][200][\"content\"][\"application/json\"]\n> {\n return client.post(`/api/subscriptions/${token}/pause`);\n}\n\n/**\n * Resume a subscription\n * Resumes billing on a paused subscription.\n *\n * @param client - Fetch client instance\n * @param token - token\n */\nexport async function subscriptions_resume(\n client: FetchClient,\n token: string | number,\n): Promise<\n operations[\"subscriptions_resume\"][\"responses\"][200][\"content\"][\"application/json\"]\n> {\n return client.post(`/api/subscriptions/${token}/resume`);\n}\n\n/**\n * Skip next billing cycle\n * Skips the next billing cycle for a subscription without pausing it.\n *\n * @param client - Fetch client instance\n * @param token - token\n */\nexport async function subscriptions_skip(\n client: FetchClient,\n token: string | number,\n): Promise<\n operations[\"subscriptions_skip\"][\"responses\"][200][\"content\"][\"application/json\"]\n> {\n return client.post(`/api/subscriptions/${token}/skip_next_billing`);\n}\n\n/**\n * Cancel a subscription\n * Cancels an active subscription.\n *\n * @param client - Fetch client instance\n * @param token - token\n */\nexport async function subscriptions_cancel(\n client: FetchClient,\n token: string | number,\n): Promise<\n operations[\"subscriptions_cancel\"][\"responses\"][200][\"content\"][\"application/json\"]\n> {\n return client.post(`/api/subscriptions/${token}/cancel`);\n}\n\n/**\n * Reactivate a subscription\n * Reactivates a previously cancelled subscription.\n *\n * @param client - Fetch client instance\n * @param token - token\n */\nexport async function subscriptions_reactivate(\n client: FetchClient,\n token: string | number,\n): Promise<\n operations[\"subscriptions_reactivate\"][\"responses\"][200][\"content\"][\"application/json\"]\n> {\n return client.post(`/api/subscriptions/${token}/reactivate`);\n}\n\n// ============================================================================\n// todos\n// ============================================================================\n\n/**\n * List todos\n * Returns a paginated list of incomplete tasks scoped to the authenticated member. Ordered by due date ascending, tasks without a due date sort last.\n *\n * @param client - Fetch client instance\n * @param [params] - params\n */\nexport async function todos_list(\n client: FetchClient,\n params?: operations[\"todos_list\"][\"parameters\"][\"query\"],\n): Promise<\n operations[\"todos_list\"][\"responses\"][200][\"content\"][\"application/json\"]\n> {\n return client.get(`/api/todos`, params);\n}\n\n// ============================================================================\n// carts\n// ============================================================================\n\n/**\n * Claim a cart\n * Assigns the logged-in member as buyer_rep on an unclaimed FairShare cart. Any portal member (rep or customer) can claim. Returns an error if the cart has already been claimed.\n *\n * @param client - Fetch client instance\n * @param token - token\n */\nexport async function carts_claim(\n client: FetchClient,\n token: string | number,\n): Promise<\n operations[\"carts_claim\"][\"responses\"][200][\"content\"][\"application/json\"]\n> {\n return client.post(`/api/carts/${token}/claim`);\n}\n"],"mappings":";;;;;;;;AAuBA,eAAsB,aACpB,QAGA;AACA,QAAO,OAAO,IAAI,eAAe;;;;;;;;;AAUnC,eAAsB,eACpB,QACA,MAGA;AACA,QAAO,OAAO,MAAM,gBAAgB,KAAK;;;;;;;;;AAc3C,eAAsB,WACpB,QAGA;AACA,QAAO,OAAO,IAAI,aAAa;;;;;;;;;AAcjC,eAAsB,kBACpB,QAGA;AACA,QAAO,OAAO,IAAI,oBAAoB;;;;;;;;;AAcxC,eAAsB,YACpB,QACA,QAGA;AACA,QAAO,OAAO,IAAI,eAAe,OAAO;;;;;;;;;AAU1C,eAAsB,YACpB,QACA,OAGA;AACA,QAAO,OAAO,IAAI,eAAe,QAAQ;;;;;;;;;AAc3C,eAAsB,cACpB,QACA,QAGA;AACA,QAAO,OAAO,IAAI,iBAAiB,OAAO;;;;;;;;;AAU5C,eAAsB,cACpB,QACA,IAGA;AACA,QAAO,OAAO,IAAI,iBAAiB,KAAK;;;;;;;;;AAU1C,eAAsB,gBACpB,QACA,QAGA;AACA,QAAO,OAAO,IAAI,wBAAwB,OAAO;;;;;;;;;AAUnD,eAAsB,oBACpB,QACA,IAGA;AACA,QAAO,OAAO,IAAI,iBAAiB,GAAG,QAAQ;;;;;;;;;AAchD,eAAsB,sBACpB,QACA,IAGA;AACA,QAAO,OAAO,IAAI,yBAAyB,KAAK;;;;;;;;;AAclD,eAAsB,mBACpB,QACA,QAGA;AACA,QAAO,OAAO,IAAI,sBAAsB,OAAO;;;;;;;;;AAUjD,eAAsB,mBACpB,QACA,OAGA;AACA,QAAO,OAAO,IAAI,sBAAsB,QAAQ;;;;;;;;;;AAWlD,eAAsB,qBACpB,QACA,OACA,MAGA;AACA,QAAO,OAAO,IAAI,sBAAsB,SAAS,KAAK;;;;;;;;;AAUxD,eAAsB,oBACpB,QACA,OAGA;AACA,QAAO,OAAO,KAAK,sBAAsB,MAAM,QAAQ;;;;;;;;;AAUzD,eAAsB,qBACpB,QACA,OAGA;AACA,QAAO,OAAO,KAAK,sBAAsB,MAAM,SAAS;;;;;;;;;AAU1D,eAAsB,mBACpB,QACA,OAGA;AACA,QAAO,OAAO,KAAK,sBAAsB,MAAM,oBAAoB;;;;;;;;;AAUrE,eAAsB,qBACpB,QACA,OAGA;AACA,QAAO,OAAO,KAAK,sBAAsB,MAAM,SAAS;;;;;;;;;AAU1D,eAAsB,yBACpB,QACA,OAGA;AACA,QAAO,OAAO,KAAK,sBAAsB,MAAM,aAAa;;;;;;;;;AAc9D,eAAsB,WACpB,QACA,QAGA;AACA,QAAO,OAAO,IAAI,cAAc,OAAO"}
@@ -1,3 +0,0 @@
1
- require("react");
2
- require("react/jsx-runtime");
3
- require("lucide-react");
@@ -1,3 +0,0 @@
1
- import "react";
2
- import "react/jsx-runtime";
3
- import "lucide-react";