@burdenoff/microfe-coolandlovely 2026.1024.2 → 2026.1024.3

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 (233) hide show
  1. package/dist/coolandlovely/CoolAndLovelyRoot.d.ts +5 -0
  2. package/dist/coolandlovely/CoolAndLovelyRoot.d.ts.map +1 -0
  3. package/dist/coolandlovely/CoolAndLovelyRoot.js +92 -68
  4. package/dist/coolandlovely/CoolAndLovelyRoot.js.map +1 -1
  5. package/dist/coolandlovely/CoolAndLovelyRoutes.d.ts +4 -0
  6. package/dist/coolandlovely/CoolAndLovelyRoutes.d.ts.map +1 -0
  7. package/dist/coolandlovely/CoolAndLovelyRoutes.js +25 -9
  8. package/dist/coolandlovely/CoolAndLovelyRoutes.js.map +1 -1
  9. package/dist/coolandlovely/components/ActivityTrail.d.ts +24 -0
  10. package/dist/coolandlovely/components/ActivityTrail.d.ts.map +1 -0
  11. package/dist/coolandlovely/components/ActorName.d.ts +14 -0
  12. package/dist/coolandlovely/components/ActorName.d.ts.map +1 -0
  13. package/dist/coolandlovely/components/AddToCartPanel.d.ts +10 -0
  14. package/dist/coolandlovely/components/AddToCartPanel.d.ts.map +1 -0
  15. package/dist/coolandlovely/components/AddToCartPanel.js +97 -0
  16. package/dist/coolandlovely/components/AddToCartPanel.js.map +1 -0
  17. package/dist/coolandlovely/components/AddToLookbookButton.d.ts +10 -0
  18. package/dist/coolandlovely/components/AddToLookbookButton.d.ts.map +1 -0
  19. package/dist/coolandlovely/components/BrandCard.d.ts +11 -0
  20. package/dist/coolandlovely/components/BrandCard.d.ts.map +1 -0
  21. package/dist/coolandlovely/components/BrandCover.d.ts +17 -0
  22. package/dist/coolandlovely/components/BrandCover.d.ts.map +1 -0
  23. package/dist/coolandlovely/components/BrandCreatorAvatars.d.ts +14 -0
  24. package/dist/coolandlovely/components/BrandCreatorAvatars.d.ts.map +1 -0
  25. package/dist/coolandlovely/components/CollectionCard.d.ts +11 -0
  26. package/dist/coolandlovely/components/CollectionCard.d.ts.map +1 -0
  27. package/dist/coolandlovely/components/ColourSwatchRow.d.ts +11 -0
  28. package/dist/coolandlovely/components/ColourSwatchRow.d.ts.map +1 -0
  29. package/dist/coolandlovely/components/Comments.d.ts +14 -0
  30. package/dist/coolandlovely/components/Comments.d.ts.map +1 -0
  31. package/dist/coolandlovely/components/EmptyState.d.ts +14 -0
  32. package/dist/coolandlovely/components/EmptyState.d.ts.map +1 -0
  33. package/dist/coolandlovely/components/FeedbackWidget.d.ts +4 -0
  34. package/dist/coolandlovely/components/FeedbackWidget.d.ts.map +1 -0
  35. package/dist/coolandlovely/components/Field.d.ts +71 -0
  36. package/dist/coolandlovely/components/Field.d.ts.map +1 -0
  37. package/dist/coolandlovely/components/FileImage.d.ts +10 -0
  38. package/dist/coolandlovely/components/FileImage.d.ts.map +1 -0
  39. package/dist/coolandlovely/components/FollowButton.d.ts +11 -0
  40. package/dist/coolandlovely/components/FollowButton.d.ts.map +1 -0
  41. package/dist/coolandlovely/components/ImageUploadField.d.ts +21 -0
  42. package/dist/coolandlovely/components/ImageUploadField.d.ts.map +1 -0
  43. package/dist/coolandlovely/components/LookCard.d.ts +19 -0
  44. package/dist/coolandlovely/components/LookCard.d.ts.map +1 -0
  45. package/dist/coolandlovely/components/LookbookCard.d.ts +11 -0
  46. package/dist/coolandlovely/components/LookbookCard.d.ts.map +1 -0
  47. package/dist/coolandlovely/components/MetricsCard.d.ts +23 -0
  48. package/dist/coolandlovely/components/MetricsCard.d.ts.map +1 -0
  49. package/dist/coolandlovely/components/PageLayout.d.ts +17 -0
  50. package/dist/coolandlovely/components/PageLayout.d.ts.map +1 -0
  51. package/dist/coolandlovely/components/PayForOrder.d.ts +11 -0
  52. package/dist/coolandlovely/components/PayForOrder.d.ts.map +1 -0
  53. package/dist/coolandlovely/components/PayForOrder.js +118 -0
  54. package/dist/coolandlovely/components/PayForOrder.js.map +1 -0
  55. package/dist/coolandlovely/components/ShopItemCard.d.ts +15 -0
  56. package/dist/coolandlovely/components/ShopItemCard.d.ts.map +1 -0
  57. package/dist/coolandlovely/components/StateViews.d.ts +16 -0
  58. package/dist/coolandlovely/components/StateViews.d.ts.map +1 -0
  59. package/dist/coolandlovely/components/StatusBadge.d.ts +9 -0
  60. package/dist/coolandlovely/components/StatusBadge.d.ts.map +1 -0
  61. package/dist/coolandlovely/components/StatusBadge.js +4 -0
  62. package/dist/coolandlovely/components/StatusBadge.js.map +1 -1
  63. package/dist/coolandlovely/components/StepTracker.d.ts +12 -0
  64. package/dist/coolandlovely/components/StepTracker.d.ts.map +1 -0
  65. package/dist/coolandlovely/components/TagList.d.ts +12 -0
  66. package/dist/coolandlovely/components/TagList.d.ts.map +1 -0
  67. package/dist/coolandlovely/components/Thumbnail.d.ts +23 -0
  68. package/dist/coolandlovely/components/Thumbnail.d.ts.map +1 -0
  69. package/dist/coolandlovely/components/VisibilityChip.d.ts +10 -0
  70. package/dist/coolandlovely/components/VisibilityChip.d.ts.map +1 -0
  71. package/dist/coolandlovely/components/WardrobeItemCard.d.ts +14 -0
  72. package/dist/coolandlovely/components/WardrobeItemCard.d.ts.map +1 -0
  73. package/dist/coolandlovely/components/index.d.ts +32 -0
  74. package/dist/coolandlovely/components/index.d.ts.map +1 -0
  75. package/dist/coolandlovely/context/CoolAndLovelyContext.d.ts +16 -0
  76. package/dist/coolandlovely/context/CoolAndLovelyContext.d.ts.map +1 -0
  77. package/dist/coolandlovely/context/index.d.ts +6 -0
  78. package/dist/coolandlovely/context/index.d.ts.map +1 -0
  79. package/dist/coolandlovely/hooks/index.d.ts +15 -0
  80. package/dist/coolandlovely/hooks/index.d.ts.map +1 -0
  81. package/dist/coolandlovely/hooks/useActivity.d.ts +39 -0
  82. package/dist/coolandlovely/hooks/useActivity.d.ts.map +1 -0
  83. package/dist/coolandlovely/hooks/useAssistantEntity.d.ts +24 -0
  84. package/dist/coolandlovely/hooks/useAssistantEntity.d.ts.map +1 -0
  85. package/dist/coolandlovely/hooks/useComments.d.ts +37 -0
  86. package/dist/coolandlovely/hooks/useComments.d.ts.map +1 -0
  87. package/dist/coolandlovely/hooks/useCommerceApi.d.ts +27 -0
  88. package/dist/coolandlovely/hooks/useCommerceApi.d.ts.map +1 -0
  89. package/dist/coolandlovely/hooks/useCommerceApi.js +121 -0
  90. package/dist/coolandlovely/hooks/useCommerceApi.js.map +1 -0
  91. package/dist/coolandlovely/hooks/useCoolAndLovelyApi.d.ts +178 -0
  92. package/dist/coolandlovely/hooks/useCoolAndLovelyApi.d.ts.map +1 -0
  93. package/dist/coolandlovely/hooks/useCoolAndLovelyApi.js +1 -1
  94. package/dist/coolandlovely/hooks/useCoolAndLovelyApi.js.map +1 -1
  95. package/dist/coolandlovely/hooks/useFiles.d.ts +62 -0
  96. package/dist/coolandlovely/hooks/useFiles.d.ts.map +1 -0
  97. package/dist/coolandlovely/hooks/useTr.d.ts +2 -0
  98. package/dist/coolandlovely/hooks/useTr.d.ts.map +1 -0
  99. package/dist/coolandlovely/index.d.ts +11 -0
  100. package/dist/coolandlovely/index.d.ts.map +1 -0
  101. package/dist/coolandlovely/pages/HomePage.d.ts +10 -0
  102. package/dist/coolandlovely/pages/HomePage.d.ts.map +1 -0
  103. package/dist/coolandlovely/pages/admin/AdminBrandsPage.d.ts +9 -0
  104. package/dist/coolandlovely/pages/admin/AdminBrandsPage.d.ts.map +1 -0
  105. package/dist/coolandlovely/pages/admin/AdminCollaborationsPage.d.ts +9 -0
  106. package/dist/coolandlovely/pages/admin/AdminCollaborationsPage.d.ts.map +1 -0
  107. package/dist/coolandlovely/pages/admin/AdminFeaturedItemsPage.d.ts +9 -0
  108. package/dist/coolandlovely/pages/admin/AdminFeaturedItemsPage.d.ts.map +1 -0
  109. package/dist/coolandlovely/pages/admin/index.d.ts +8 -0
  110. package/dist/coolandlovely/pages/admin/index.d.ts.map +1 -0
  111. package/dist/coolandlovely/pages/brands/BrandDetailPage.d.ts +9 -0
  112. package/dist/coolandlovely/pages/brands/BrandDetailPage.d.ts.map +1 -0
  113. package/dist/coolandlovely/pages/brands/BrandFormPage.d.ts +9 -0
  114. package/dist/coolandlovely/pages/brands/BrandFormPage.d.ts.map +1 -0
  115. package/dist/coolandlovely/pages/brands/BrandsListPage.d.ts +9 -0
  116. package/dist/coolandlovely/pages/brands/BrandsListPage.d.ts.map +1 -0
  117. package/dist/coolandlovely/pages/collaborations/CollaborationDetailPage.d.ts +9 -0
  118. package/dist/coolandlovely/pages/collaborations/CollaborationDetailPage.d.ts.map +1 -0
  119. package/dist/coolandlovely/pages/collaborations/CollaborationFormPage.d.ts +11 -0
  120. package/dist/coolandlovely/pages/collaborations/CollaborationFormPage.d.ts.map +1 -0
  121. package/dist/coolandlovely/pages/collaborations/CollaborationsListPage.d.ts +9 -0
  122. package/dist/coolandlovely/pages/collaborations/CollaborationsListPage.d.ts.map +1 -0
  123. package/dist/coolandlovely/pages/collections/CollectionDetailPage.d.ts +9 -0
  124. package/dist/coolandlovely/pages/collections/CollectionDetailPage.d.ts.map +1 -0
  125. package/dist/coolandlovely/pages/collections/CollectionFormPage.d.ts +9 -0
  126. package/dist/coolandlovely/pages/collections/CollectionFormPage.d.ts.map +1 -0
  127. package/dist/coolandlovely/pages/collections/CollectionsListPage.d.ts +8 -0
  128. package/dist/coolandlovely/pages/collections/CollectionsListPage.d.ts.map +1 -0
  129. package/dist/coolandlovely/pages/commerce/CartPage.d.ts +10 -0
  130. package/dist/coolandlovely/pages/commerce/CartPage.d.ts.map +1 -0
  131. package/dist/coolandlovely/pages/commerce/CartPage.js +283 -0
  132. package/dist/coolandlovely/pages/commerce/CartPage.js.map +1 -0
  133. package/dist/coolandlovely/pages/commerce/CreatorEarningsPage.d.ts +11 -0
  134. package/dist/coolandlovely/pages/commerce/CreatorEarningsPage.d.ts.map +1 -0
  135. package/dist/coolandlovely/pages/commerce/CreatorEarningsPage.js +185 -0
  136. package/dist/coolandlovely/pages/commerce/CreatorEarningsPage.js.map +1 -0
  137. package/dist/coolandlovely/pages/commerce/OrdersPage.d.ts +11 -0
  138. package/dist/coolandlovely/pages/commerce/OrdersPage.d.ts.map +1 -0
  139. package/dist/coolandlovely/pages/commerce/OrdersPage.js +280 -0
  140. package/dist/coolandlovely/pages/commerce/OrdersPage.js.map +1 -0
  141. package/dist/coolandlovely/pages/discover/DiscoverPage.d.ts +14 -0
  142. package/dist/coolandlovely/pages/discover/DiscoverPage.d.ts.map +1 -0
  143. package/dist/coolandlovely/pages/items/StyleItemDetailPage.d.ts +9 -0
  144. package/dist/coolandlovely/pages/items/StyleItemDetailPage.d.ts.map +1 -0
  145. package/dist/coolandlovely/pages/items/StyleItemDetailPage.js +114 -106
  146. package/dist/coolandlovely/pages/items/StyleItemDetailPage.js.map +1 -1
  147. package/dist/coolandlovely/pages/items/StyleItemFormPage.d.ts +10 -0
  148. package/dist/coolandlovely/pages/items/StyleItemFormPage.d.ts.map +1 -0
  149. package/dist/coolandlovely/pages/items/StyleItemsListPage.d.ts +9 -0
  150. package/dist/coolandlovely/pages/items/StyleItemsListPage.d.ts.map +1 -0
  151. package/dist/coolandlovely/pages/lookbooks/LookbookDetailPage.d.ts +12 -0
  152. package/dist/coolandlovely/pages/lookbooks/LookbookDetailPage.d.ts.map +1 -0
  153. package/dist/coolandlovely/pages/lookbooks/LookbooksListPage.d.ts +10 -0
  154. package/dist/coolandlovely/pages/lookbooks/LookbooksListPage.d.ts.map +1 -0
  155. package/dist/coolandlovely/pages/looks/LookDetailPage.d.ts +11 -0
  156. package/dist/coolandlovely/pages/looks/LookDetailPage.d.ts.map +1 -0
  157. package/dist/coolandlovely/pages/looks/LookDetailPage.js +1 -1
  158. package/dist/coolandlovely/pages/looks/LookDetailPage.js.map +1 -1
  159. package/dist/coolandlovely/pages/looks/LookFormPage.d.ts +10 -0
  160. package/dist/coolandlovely/pages/looks/LookFormPage.d.ts.map +1 -0
  161. package/dist/coolandlovely/pages/looks/LooksListPage.d.ts +9 -0
  162. package/dist/coolandlovely/pages/looks/LooksListPage.d.ts.map +1 -0
  163. package/dist/coolandlovely/pages/profile/StyleProfilePage.d.ts +17 -0
  164. package/dist/coolandlovely/pages/profile/StyleProfilePage.d.ts.map +1 -0
  165. package/dist/coolandlovely/pages/trends/TrendsPage.d.ts +11 -0
  166. package/dist/coolandlovely/pages/trends/TrendsPage.d.ts.map +1 -0
  167. package/dist/coolandlovely/pages/wardrobe/WardrobeFormPage.d.ts +10 -0
  168. package/dist/coolandlovely/pages/wardrobe/WardrobeFormPage.d.ts.map +1 -0
  169. package/dist/coolandlovely/pages/wardrobe/WardrobeListPage.d.ts +12 -0
  170. package/dist/coolandlovely/pages/wardrobe/WardrobeListPage.d.ts.map +1 -0
  171. package/dist/coolandlovely/store/coolandlovelyStore.d.ts +56 -0
  172. package/dist/coolandlovely/store/coolandlovelyStore.d.ts.map +1 -0
  173. package/dist/coolandlovely/store/index.d.ts +6 -0
  174. package/dist/coolandlovely/store/index.d.ts.map +1 -0
  175. package/dist/coolandlovely/types/commerce.d.ts +137 -0
  176. package/dist/coolandlovely/types/commerce.d.ts.map +1 -0
  177. package/dist/coolandlovely/types/index.d.ts +527 -0
  178. package/dist/coolandlovely/types/index.d.ts.map +1 -0
  179. package/dist/coolandlovely/utils/cn.d.ts +4 -0
  180. package/dist/coolandlovely/utils/cn.d.ts.map +1 -0
  181. package/dist/coolandlovely/utils/formatters.d.ts +101 -0
  182. package/dist/coolandlovely/utils/formatters.d.ts.map +1 -0
  183. package/dist/coolandlovely/utils/icons.d.ts +6 -0
  184. package/dist/coolandlovely/utils/icons.d.ts.map +1 -0
  185. package/dist/coolandlovely/utils/index.d.ts +10 -0
  186. package/dist/coolandlovely/utils/index.d.ts.map +1 -0
  187. package/dist/coolandlovely/utils/navigation.d.ts +20 -0
  188. package/dist/coolandlovely/utils/navigation.d.ts.map +1 -0
  189. package/dist/coolandlovely/utils/paymentProviders.d.ts +74 -0
  190. package/dist/coolandlovely/utils/paymentProviders.d.ts.map +1 -0
  191. package/dist/coolandlovely/utils/paymentProviders.js +42 -0
  192. package/dist/coolandlovely/utils/paymentProviders.js.map +1 -0
  193. package/dist/coolandlovely/utils/sparkline.d.ts +31 -0
  194. package/dist/coolandlovely/utils/sparkline.d.ts.map +1 -0
  195. package/dist/generated/global-operations.d.ts +2 -0
  196. package/dist/generated/global-operations.d.ts.map +1 -0
  197. package/dist/generated/global-types.d.ts +23527 -0
  198. package/dist/generated/global-types.d.ts.map +1 -0
  199. package/dist/generated/wspace-operations.d.ts +2 -0
  200. package/dist/generated/wspace-operations.d.ts.map +1 -0
  201. package/dist/generated/wspace-types.d.ts +57851 -0
  202. package/dist/generated/wspace-types.d.ts.map +1 -0
  203. package/dist/index.d.ts +7 -0
  204. package/dist/index.d.ts.map +1 -0
  205. package/dist/services/createSandboxAssistantTransport.d.ts +24 -0
  206. package/dist/services/createSandboxAssistantTransport.d.ts.map +1 -0
  207. package/dist/stories/BrandCard.stories.d.ts +10 -0
  208. package/dist/stories/BrandCard.stories.d.ts.map +1 -0
  209. package/dist/stories/CollectionCard.stories.d.ts +10 -0
  210. package/dist/stories/CollectionCard.stories.d.ts.map +1 -0
  211. package/dist/stories/DiscoverPage.stories.d.ts +11 -0
  212. package/dist/stories/DiscoverPage.stories.d.ts.map +1 -0
  213. package/dist/stories/FeedbackWidget.stories.d.ts +9 -0
  214. package/dist/stories/FeedbackWidget.stories.d.ts.map +1 -0
  215. package/dist/stories/LookCard.stories.d.ts +10 -0
  216. package/dist/stories/LookCard.stories.d.ts.map +1 -0
  217. package/dist/stories/LookbookCard.stories.d.ts +10 -0
  218. package/dist/stories/LookbookCard.stories.d.ts.map +1 -0
  219. package/dist/stories/MetricsCard.stories.d.ts +10 -0
  220. package/dist/stories/MetricsCard.stories.d.ts.map +1 -0
  221. package/dist/stories/ShopItemCard.stories.d.ts +9 -0
  222. package/dist/stories/ShopItemCard.stories.d.ts.map +1 -0
  223. package/dist/stories/StatusBadge.stories.d.ts +11 -0
  224. package/dist/stories/StatusBadge.stories.d.ts.map +1 -0
  225. package/dist/stories/VisibilityChip.stories.d.ts +10 -0
  226. package/dist/stories/VisibilityChip.stories.d.ts.map +1 -0
  227. package/dist/stories/WardrobeItemCard.stories.d.ts +11 -0
  228. package/dist/stories/WardrobeItemCard.stories.d.ts.map +1 -0
  229. package/dist/stories/__fixtures__/coolandlovely.d.ts +15 -0
  230. package/dist/stories/__fixtures__/coolandlovely.d.ts.map +1 -0
  231. package/dist/utils/pageContext.d.ts +58 -0
  232. package/dist/utils/pageContext.d.ts.map +1 -0
  233. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"LookDetailPage.js","names":[],"sources":["../../../../src/coolandlovely/pages/looks/LookDetailPage.tsx"],"sourcesContent":["/**\n * Look Detail Page\n * @module coolandlovely/pages/looks\n *\n * Single look (`cooLook`) with its look items, a true-toggle like\n * (`cooLikeLook` / `cooUnlikeLook`), a true-toggle save (`cooSaveLook` /\n * `cooUnsaveLook`), publish (`cooPublishLook`) and delete (`cooDeleteLook`)\n * actions.\n */\n\nimport { useMemo, useState } from 'react';\nimport { useParams } from 'react-router';\nimport { ArrowLeft, Heart, Bookmark, Rocket, Trash2, Loader2, Sparkles, Star } from 'lucide-react';\nimport { GlassCard } from '@burdenoff/fe-libs/ui';\nimport { useActorProfiles, type ActorInput } from '@burdenoff/fe-libs/shared';\nimport { PageLayout } from '../../components/PageLayout';\nimport { StatusBadge } from '../../components/StatusBadge';\nimport { LoadingView, ErrorView } from '../../components/StateViews';\nimport { Thumbnail } from '../../components/Thumbnail';\nimport { TagList } from '../../components/TagList';\nimport { Comments } from '../../components/Comments';\nimport { FollowButton } from '../../components/FollowButton';\nimport { AddToLookbookButton } from '../../components/AddToLookbookButton';\nimport { ShopItemCard } from '../../components/ShopItemCard';\nimport { useCoolAndLovely } from '../../context/CoolAndLovelyContext';\nimport {\n useLook,\n useLikeLook,\n useUnlikeLook,\n useSaveLook,\n useUnsaveLook,\n usePublishLook,\n useDeleteLook,\n useUpdateLook,\n useAssistantEntityName,\n} from '../../hooks';\nimport { formatDate, titleCase } from '../../utils/formatters';\nimport { cn } from '../../utils/cn';\n\n/** Compute up-to-two-letter initials for the avatar fallback. */\nfunction initials(name: string): string {\n const parts = name.trim().split(/\\s+/).filter(Boolean);\n if (parts.length === 0) return '?';\n if (parts.length === 1) return parts[0].slice(0, 2).toUpperCase();\n return (parts[0][0] + parts[parts.length - 1][0]).toUpperCase();\n}\n\n/**\n * Author chip — avatar + display name resolved via fe-libs `useActorProfiles`\n * on the GLOBAL gateway (never select firstName on a federated wspace User).\n * Clicking it opens the author's public style profile (`/profile/:userId`).\n */\nfunction LookAuthor({ authorId }: { authorId: string }) {\n const { apiGatewayUrl, authToken, workspaceId, navigateTo } = useCoolAndLovely();\n const [avatarFailed, setAvatarFailed] = useState(false);\n const actors = useMemo<ActorInput[]>(\n () => [{ actorId: authorId, actorType: 'user' }],\n [authorId]\n );\n const profiles = useActorProfiles(actors, { apiGatewayUrl, authToken, workspaceId });\n const profile = profiles[authorId];\n const name = profile?.displayName ?? 'Creator';\n const avatarUrl = profile?.avatarUrl;\n\n return (\n <button\n type=\"button\"\n onClick={() => navigateTo(`/profile/${authorId}`)}\n className=\"inline-flex items-center gap-2 rounded-md focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--color-focus-ring)]\"\n >\n <span\n title={name}\n className=\"relative flex h-7 w-7 shrink-0 items-center justify-center overflow-hidden rounded-full bg-bg-sunken ring-1 ring-border-seam\"\n >\n {avatarUrl && !avatarFailed ? (\n <img\n src={avatarUrl}\n alt={name}\n loading=\"lazy\"\n onError={() => setAvatarFailed(true)}\n className=\"h-full w-full object-cover\"\n />\n ) : (\n <span className=\"text-[10px] font-semibold text-text-secondary\">{initials(name)}</span>\n )}\n </span>\n <span\n className=\"font-medium text-text-primary hover:underline\"\n title={profile?.email ?? authorId}\n >\n {name}\n </span>\n </button>\n );\n}\n\nexport function LookDetailPage() {\n const { lookId } = useParams<{ lookId: string }>();\n const { navigateTo, currentUser } = useCoolAndLovely();\n const query = useLook(lookId);\n const like = useLikeLook();\n const unlike = useUnlikeLook();\n const save = useSaveLook();\n const unsave = useUnsaveLook();\n const publish = usePublishLook();\n const remove = useDeleteLook();\n const update = useUpdateLook();\n // Name the look for the assistant's screen context.\n useAssistantEntityName(lookId, query.data?.title);\n\n if (query.isLoading) {\n return (\n <PageLayout title=\"Look\">\n <LoadingView label=\"Loading look…\" />\n </PageLayout>\n );\n }\n\n if (query.isError || !query.data) {\n return (\n <PageLayout title=\"Look\">\n <ErrorView title=\"Look not found\" onRetry={() => void query.refetch()} />\n </PageLayout>\n );\n }\n\n const look = query.data;\n const items = look.items ?? [];\n const isPublished = look.publishedAt !== null;\n const isOwnLook = Boolean(currentUser?.id && currentUser.id === look.authorId);\n\n return (\n <PageLayout\n title={look.title}\n description={titleCase(look.occasion)}\n actions={\n <div className=\"flex flex-wrap items-center gap-2\">\n <button\n type=\"button\"\n onClick={() => navigateTo('/looks')}\n className=\"inline-flex items-center gap-1.5 rounded-lg border border-border-seam px-3 py-2 text-sm font-medium text-text-primary transition-colors hover:bg-bg-sunken\"\n >\n <ArrowLeft className=\"h-4 w-4\" /> Back\n </button>\n <AddToLookbookButton lookId={look.id} />\n <button\n type=\"button\"\n disabled={update.isPending}\n onClick={() => update.mutate({ id: look.id, input: { isFeatured: !look.isFeatured } })}\n aria-pressed={look.isFeatured}\n className={cn(\n 'inline-flex items-center gap-1.5 rounded-lg border px-3 py-2 text-sm font-medium transition-colors disabled:opacity-50',\n look.isFeatured\n ? 'border-status-warning-text/40 bg-status-warning-bg-subtle text-status-warning-text'\n : 'border-border-seam text-text-primary hover:bg-bg-sunken'\n )}\n >\n {update.isPending ? (\n <Loader2 className=\"h-4 w-4 animate-spin\" />\n ) : (\n <Star className={cn('h-4 w-4', look.isFeatured && 'fill-status-warning-text')} />\n )}\n {look.isFeatured ? 'Featured' : 'Feature'}\n </button>\n {!isPublished && (\n <button\n type=\"button\"\n disabled={publish.isPending}\n onClick={() => publish.mutate(look.id)}\n className=\"inline-flex items-center gap-1.5 rounded-lg bg-action-primary-bg px-4 py-2 text-sm font-medium text-action-primary-text transition-colors hover:bg-action-primary-bg/90 disabled:opacity-50\"\n >\n {publish.isPending ? (\n <Loader2 className=\"h-4 w-4 animate-spin\" />\n ) : (\n <Rocket className=\"h-4 w-4\" />\n )}\n Publish\n </button>\n )}\n <button\n type=\"button\"\n disabled={remove.isPending}\n onClick={() => remove.mutate(look.id, { onSuccess: () => navigateTo('/looks') })}\n className=\"inline-flex items-center gap-1.5 rounded-lg border border-border-seam px-3 py-2 text-sm font-medium text-status-error-text transition-colors hover:bg-status-error-bg-subtle disabled:opacity-50\"\n >\n {remove.isPending ? (\n <Loader2 className=\"h-4 w-4 animate-spin\" />\n ) : (\n <Trash2 className=\"h-4 w-4\" />\n )}\n Delete\n </button>\n </div>\n }\n >\n <div className=\"grid grid-cols-1 gap-6 lg:grid-cols-3\">\n <div className=\"lg:col-span-2\">\n <GlassCard treatment=\"glass\" className=\"group overflow-hidden p-0\">\n <Thumbnail\n icon={<Sparkles className=\"h-14 w-14\" />}\n seed={look.id}\n fileId={look.image?.id}\n alt={look.title}\n className=\"aspect-[4/5] max-h-[38rem] w-full rounded-none\"\n />\n <div className=\"p-6\">\n <div className=\"flex items-center gap-2\">\n <h2 className=\"text-xl font-semibold text-text-primary\">{look.title}</h2>\n {look.isFeatured && (\n <Star className=\"h-4 w-4 fill-status-warning-text text-status-warning-text\" />\n )}\n <StatusBadge status={isPublished ? 'published' : 'draft'} className=\"ml-auto\" />\n </div>\n {look.caption && <p className=\"mt-3 text-sm text-text-secondary\">{look.caption}</p>}\n {look.tags.length > 0 && <TagList tags={look.tags} className=\"mt-4\" tone=\"accent\" />}\n\n <div className=\"mt-4 flex flex-wrap items-center gap-3 text-sm text-text-secondary\">\n <LookAuthor authorId={look.authorId} />\n {!isOwnLook && <FollowButton followeeId={look.authorId} size=\"sm\" />}\n </div>\n\n <div className=\"mt-5 flex items-center gap-3\">\n <button\n type=\"button\"\n disabled={like.isPending || unlike.isPending}\n aria-pressed={Boolean(look.isLikedByMe)}\n onClick={() => (look.isLikedByMe ? unlike : like).mutate(look.id)}\n className={cn(\n 'inline-flex items-center gap-1.5 rounded-lg border px-3 py-2 text-sm font-medium transition-colors disabled:opacity-50',\n look.isLikedByMe\n ? 'border-status-error-text/40 bg-status-error-bg-subtle text-status-error-text'\n : 'border-border-seam text-text-primary hover:bg-status-error-bg-subtle'\n )}\n >\n {like.isPending || unlike.isPending ? (\n <Loader2 className=\"h-4 w-4 animate-spin\" />\n ) : (\n <Heart className={cn('h-4 w-4', look.isLikedByMe && 'fill-current')} />\n )}\n {look.isLikedByMe ? 'Liked' : 'Like'} · {look.likeCount}\n </button>\n <button\n type=\"button\"\n disabled={save.isPending || unsave.isPending}\n aria-pressed={Boolean(look.isSavedByMe)}\n onClick={() => (look.isSavedByMe ? unsave : save).mutate(look.id)}\n className={cn(\n 'inline-flex items-center gap-1.5 rounded-lg border px-3 py-2 text-sm font-medium transition-colors disabled:opacity-50',\n look.isSavedByMe\n ? 'border-accent-primary/40 bg-accent-primary/10 text-accent-primary'\n : 'border-border-seam text-text-secondary hover:bg-bg-sunken'\n )}\n >\n {save.isPending || unsave.isPending ? (\n <Loader2 className=\"h-4 w-4 animate-spin\" />\n ) : (\n <Bookmark className={cn('h-4 w-4', look.isSavedByMe && 'fill-current')} />\n )}\n {look.isSavedByMe ? 'Saved' : 'Save'} · {look.saveCount}\n </button>\n </div>\n </div>\n </GlassCard>\n\n {/* Shop the look */}\n <section className=\"mt-6\">\n <h3 className=\"mb-3 text-lg font-semibold text-text-primary\">\n Shop the look ({items.length})\n </h3>\n {items.length === 0 ? (\n <p className=\"rounded-lg border border-border-seam bg-bg-surface p-4 text-sm text-text-secondary\">\n No items tagged in this look yet.\n </p>\n ) : (\n <div className=\"grid grid-cols-1 gap-3 sm:grid-cols-2\">\n {[...items]\n .sort((a, b) => a.position - b.position)\n .map((li) =>\n li.styleItem ? (\n <ShopItemCard\n key={li.id}\n id={li.styleItem.id}\n name={li.styleItem.name}\n brandName={li.styleItem.brand?.name}\n price={li.styleItem.price}\n currency={li.styleItem.currency}\n imageFileId={li.styleItem.image?.id}\n onOpen={() => navigateTo(`/items/${li.styleItem?.id}`)}\n />\n ) : (\n <div\n key={li.id}\n className=\"flex flex-col justify-center rounded-xl border border-border-seam bg-bg-surface p-4\"\n >\n <p className=\"truncate text-sm font-medium text-text-primary\">\n Catalogue piece\n </p>\n {li.styling && (\n <p className=\"mt-0.5 truncate text-xs text-text-secondary\">\n {li.styling}\n </p>\n )}\n </div>\n )\n )}\n </div>\n )}\n </section>\n\n <Comments entityType=\"CooLook\" entityId={look.id} />\n </div>\n\n <div className=\"space-y-4\">\n <GlassCard treatment=\"plain\" className=\"p-5\">\n <h3 className=\"mb-3 text-sm font-semibold text-text-primary\">Details</h3>\n <dl className=\"space-y-2 text-sm\">\n <div className=\"flex justify-between gap-2\">\n <dt className=\"text-text-secondary\">Occasion</dt>\n <dd className=\"text-text-primary\">{titleCase(look.occasion)}</dd>\n </div>\n <div className=\"flex justify-between gap-2\">\n <dt className=\"text-text-secondary\">Visibility</dt>\n <dd className=\"text-text-primary\">{titleCase(look.visibility)}</dd>\n </div>\n <div className=\"flex justify-between gap-2\">\n <dt className=\"text-text-secondary\">Published</dt>\n <dd className=\"text-text-primary\">\n {look.publishedAt\n ? formatDate(look.publishedAt, { hour: undefined, minute: undefined })\n : '—'}\n </dd>\n </div>\n </dl>\n </GlassCard>\n\n {look.collaborationId && (\n <button\n type=\"button\"\n onClick={() => navigateTo(`/collaborations/${look.collaborationId}`)}\n className=\"flex w-full items-center gap-3 rounded-lg border border-border-seam bg-bg-surface p-4 text-left transition-colors hover:bg-bg-sunken/50\"\n >\n <div className=\"flex h-10 w-10 shrink-0 items-center justify-center rounded-lg bg-status-warning-bg-subtle text-status-warning-text\">\n <Sparkles className=\"h-5 w-5\" />\n </div>\n <div className=\"min-w-0\">\n <p className=\"truncate text-sm font-medium text-text-primary\">\n Part of a collaboration\n </p>\n <p className=\"truncate text-xs text-text-secondary\">View collaboration</p>\n </div>\n </button>\n )}\n\n {(publish.isError ||\n remove.isError ||\n like.isError ||\n unlike.isError ||\n save.isError ||\n unsave.isError) && (\n <p className=\"rounded-lg bg-status-error-bg-subtle px-3 py-2 text-xs text-status-error-text\">\n {(publish.error ??\n remove.error ??\n like.error ??\n unlike.error ??\n save.error ??\n unsave.error) instanceof Error\n ? (\n publish.error ??\n remove.error ??\n like.error ??\n unlike.error ??\n save.error ??\n unsave.error\n )?.message\n : 'Action failed'}\n </p>\n )}\n </div>\n </div>\n </PageLayout>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"LookDetailPage.js","names":[],"sources":["../../../../src/coolandlovely/pages/looks/LookDetailPage.tsx"],"sourcesContent":["/**\n * Look Detail Page\n * @module coolandlovely/pages/looks\n *\n * Single look (`cooLook`) with its look items, a true-toggle like\n * (`cooLikeLook` / `cooUnlikeLook`), a true-toggle save (`cooSaveLook` /\n * `cooUnsaveLook`), publish (`cooPublishLook`) and delete (`cooDeleteLook`)\n * actions.\n */\n\nimport { useMemo, useState } from 'react';\nimport { useParams } from 'react-router';\nimport { ArrowLeft, Heart, Bookmark, Rocket, Trash2, Loader2, Sparkles, Star } from 'lucide-react';\nimport { GlassCard } from '@burdenoff/fe-libs/ui';\nimport { useActorProfiles, type ActorInput } from '@burdenoff/fe-libs/shared';\nimport { PageLayout } from '../../components/PageLayout';\nimport { StatusBadge } from '../../components/StatusBadge';\nimport { LoadingView, ErrorView } from '../../components/StateViews';\nimport { Thumbnail } from '../../components/Thumbnail';\nimport { TagList } from '../../components/TagList';\nimport { Comments } from '../../components/Comments';\nimport { FollowButton } from '../../components/FollowButton';\nimport { AddToLookbookButton } from '../../components/AddToLookbookButton';\nimport { ShopItemCard } from '../../components/ShopItemCard';\nimport { useCoolAndLovely } from '../../context/CoolAndLovelyContext';\nimport {\n useLook,\n useLikeLook,\n useUnlikeLook,\n useSaveLook,\n useUnsaveLook,\n usePublishLook,\n useDeleteLook,\n useUpdateLook,\n useAssistantEntityName,\n} from '../../hooks';\nimport { formatDate, titleCase } from '../../utils/formatters';\nimport { cn } from '../../utils/cn';\n\n/** Compute up-to-two-letter initials for the avatar fallback. */\nfunction initials(name: string): string {\n const parts = name.trim().split(/\\s+/).filter(Boolean);\n if (parts.length === 0) return '?';\n if (parts.length === 1) return parts[0].slice(0, 2).toUpperCase();\n return (parts[0][0] + parts[parts.length - 1][0]).toUpperCase();\n}\n\n/**\n * Author chip — avatar + display name resolved via fe-libs `useActorProfiles`\n * on the GLOBAL gateway (never select firstName on a federated wspace User).\n * Clicking it opens the author's public style profile (`/profile/:userId`).\n */\nfunction LookAuthor({ authorId }: { authorId: string }) {\n const { apiGatewayUrl, authToken, workspaceId, navigateTo } = useCoolAndLovely();\n const [avatarFailed, setAvatarFailed] = useState(false);\n const actors = useMemo<ActorInput[]>(\n () => [{ actorId: authorId, actorType: 'user' }],\n [authorId]\n );\n const profiles = useActorProfiles(actors, { apiGatewayUrl, authToken, workspaceId });\n const profile = profiles[authorId];\n const name = profile?.displayName ?? 'Creator';\n const avatarUrl = profile?.avatarUrl;\n\n return (\n <button\n type=\"button\"\n onClick={() => navigateTo(`/profile/${authorId}`)}\n className=\"inline-flex items-center gap-2 rounded-md focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--color-focus-ring)]\"\n >\n <span\n title={name}\n className=\"relative flex h-7 w-7 shrink-0 items-center justify-center overflow-hidden rounded-full bg-bg-sunken ring-1 ring-border-seam\"\n >\n {avatarUrl && !avatarFailed ? (\n <img\n src={avatarUrl}\n alt={name}\n loading=\"lazy\"\n onError={() => setAvatarFailed(true)}\n className=\"h-full w-full object-cover\"\n />\n ) : (\n <span className=\"text-[10px] font-semibold text-text-secondary\">{initials(name)}</span>\n )}\n </span>\n <span\n className=\"font-medium text-text-primary hover:underline\"\n title={profile?.email ?? authorId}\n >\n {name}\n </span>\n </button>\n );\n}\n\nexport function LookDetailPage() {\n const { lookId } = useParams<{ lookId: string }>();\n const { navigateTo, currentUser } = useCoolAndLovely();\n const query = useLook(lookId);\n const like = useLikeLook();\n const unlike = useUnlikeLook();\n const save = useSaveLook();\n const unsave = useUnsaveLook();\n const publish = usePublishLook();\n const remove = useDeleteLook();\n const update = useUpdateLook();\n // Name the look for the assistant's screen context.\n useAssistantEntityName(lookId, query.data?.title);\n\n if (query.isLoading) {\n return (\n <PageLayout title=\"Look\">\n <LoadingView label=\"Loading look…\" />\n </PageLayout>\n );\n }\n\n if (query.isError || !query.data) {\n return (\n <PageLayout title=\"Look\">\n <ErrorView title=\"Look not found\" onRetry={() => void query.refetch()} />\n </PageLayout>\n );\n }\n\n const look = query.data;\n const items = look.items ?? [];\n const isPublished = look.publishedAt !== null;\n const isOwnLook = Boolean(currentUser?.id && currentUser.id === look.authorId);\n\n return (\n <PageLayout\n title={look.title}\n description={titleCase(look.occasion)}\n actions={\n <div className=\"flex flex-wrap items-center gap-2\">\n <button\n type=\"button\"\n onClick={() => navigateTo('/looks')}\n className=\"inline-flex items-center gap-1.5 rounded-lg border border-border-seam px-3 py-2 text-sm font-medium text-text-primary transition-colors hover:bg-bg-sunken\"\n >\n <ArrowLeft className=\"h-4 w-4\" /> Back\n </button>\n <AddToLookbookButton lookId={look.id} />\n <button\n type=\"button\"\n disabled={update.isPending}\n onClick={() => update.mutate({ id: look.id, input: { isFeatured: !look.isFeatured } })}\n aria-pressed={look.isFeatured}\n className={cn(\n 'inline-flex items-center gap-1.5 rounded-lg border px-3 py-2 text-sm font-medium transition-colors disabled:opacity-50',\n look.isFeatured\n ? 'border-status-warning-text/40 bg-status-warning-bg-subtle text-status-warning-text'\n : 'border-border-seam text-text-primary hover:bg-bg-sunken'\n )}\n >\n {update.isPending ? (\n <Loader2 className=\"h-4 w-4 animate-spin\" />\n ) : (\n <Star className={cn('h-4 w-4', look.isFeatured && 'fill-status-warning-text')} />\n )}\n {look.isFeatured ? 'Featured' : 'Feature'}\n </button>\n {!isPublished && (\n <button\n type=\"button\"\n disabled={publish.isPending}\n onClick={() => publish.mutate(look.id)}\n className=\"inline-flex items-center gap-1.5 rounded-lg bg-action-primary-bg px-4 py-2 text-sm font-medium text-action-primary-text transition-colors hover:bg-action-primary-bg/90 disabled:opacity-50\"\n >\n {publish.isPending ? (\n <Loader2 className=\"h-4 w-4 animate-spin\" />\n ) : (\n <Rocket className=\"h-4 w-4\" />\n )}\n Publish\n </button>\n )}\n <button\n type=\"button\"\n disabled={remove.isPending}\n onClick={() => remove.mutate(look.id, { onSuccess: () => navigateTo('/looks') })}\n className=\"inline-flex items-center gap-1.5 rounded-lg border border-border-seam px-3 py-2 text-sm font-medium text-status-error-text transition-colors hover:bg-status-error-bg-subtle disabled:opacity-50\"\n >\n {remove.isPending ? (\n <Loader2 className=\"h-4 w-4 animate-spin\" />\n ) : (\n <Trash2 className=\"h-4 w-4\" />\n )}\n Delete\n </button>\n </div>\n }\n >\n <div className=\"grid grid-cols-1 gap-6 lg:grid-cols-3\">\n <div className=\"lg:col-span-2\">\n <GlassCard treatment=\"glass\" className=\"group overflow-hidden p-0\">\n <Thumbnail\n icon={<Sparkles className=\"h-14 w-14\" />}\n seed={look.id}\n fileId={look.image?.id}\n alt={look.title}\n className=\"aspect-[4/5] max-h-[38rem] w-full rounded-none\"\n />\n <div className=\"p-6\">\n <div className=\"flex items-center gap-2\">\n <h2 className=\"text-xl font-semibold text-text-primary\">{look.title}</h2>\n {look.isFeatured && (\n <Star className=\"h-4 w-4 fill-status-warning-text text-status-warning-text\" />\n )}\n <StatusBadge status={isPublished ? 'published' : 'draft'} className=\"ml-auto\" />\n </div>\n {look.caption && <p className=\"mt-3 text-sm text-text-secondary\">{look.caption}</p>}\n {look.tags.length > 0 && <TagList tags={look.tags} className=\"mt-4\" tone=\"accent\" />}\n\n <div className=\"mt-4 flex flex-wrap items-center gap-3 text-sm text-text-secondary\">\n <LookAuthor authorId={look.authorId} />\n {!isOwnLook && <FollowButton followeeId={look.authorId} size=\"sm\" />}\n </div>\n\n <div className=\"mt-5 flex items-center gap-3\">\n <button\n type=\"button\"\n disabled={like.isPending || unlike.isPending}\n aria-pressed={Boolean(look.isLikedByMe)}\n onClick={() => (look.isLikedByMe ? unlike : like).mutate(look.id)}\n className={cn(\n 'inline-flex items-center gap-1.5 rounded-lg border px-3 py-2 text-sm font-medium transition-colors disabled:opacity-50',\n look.isLikedByMe\n ? 'border-status-error-text/40 bg-status-error-bg-subtle text-status-error-text'\n : 'border-border-seam text-text-primary hover:bg-status-error-bg-subtle'\n )}\n >\n {like.isPending || unlike.isPending ? (\n <Loader2 className=\"h-4 w-4 animate-spin\" />\n ) : (\n <Heart className={cn('h-4 w-4', look.isLikedByMe && 'fill-current')} />\n )}\n {look.isLikedByMe ? 'Liked' : 'Like'} · {look.likeCount}\n </button>\n <button\n type=\"button\"\n disabled={save.isPending || unsave.isPending}\n aria-pressed={Boolean(look.isSavedByMe)}\n onClick={() => (look.isSavedByMe ? unsave : save).mutate(look.id)}\n className={cn(\n 'inline-flex items-center gap-1.5 rounded-lg border px-3 py-2 text-sm font-medium transition-colors disabled:opacity-50',\n look.isSavedByMe\n ? 'border-accent-primary/40 bg-accent-primary/10 text-accent-primary'\n : 'border-border-seam text-text-secondary hover:bg-bg-sunken'\n )}\n >\n {save.isPending || unsave.isPending ? (\n <Loader2 className=\"h-4 w-4 animate-spin\" />\n ) : (\n <Bookmark className={cn('h-4 w-4', look.isSavedByMe && 'fill-current')} />\n )}\n {look.isSavedByMe ? 'Saved' : 'Save'} · {look.saveCount}\n </button>\n </div>\n </div>\n </GlassCard>\n\n {/* Shop the look */}\n <section className=\"mt-6\">\n <h3 className=\"mb-3 text-lg font-semibold text-text-primary\">\n Shop the look ({items.length})\n </h3>\n {items.length === 0 ? (\n <p className=\"rounded-lg border border-border-seam bg-bg-surface p-4 text-sm text-text-secondary\">\n No items tagged in this look yet.\n </p>\n ) : (\n <div className=\"grid grid-cols-1 gap-3 sm:grid-cols-2\">\n {[...items]\n .sort((a, b) => a.position - b.position)\n .map((li) =>\n li.styleItem ? (\n <ShopItemCard\n key={li.id}\n id={li.styleItem.id}\n name={li.styleItem.name}\n brandName={li.styleItem.brand?.name}\n price={li.styleItem.price}\n currency={li.styleItem.currency}\n imageFileId={li.styleItem.image?.id}\n onOpen={() => navigateTo(`/items/${li.styleItem?.id}?look=${look.id}`)}\n />\n ) : (\n <div\n key={li.id}\n className=\"flex flex-col justify-center rounded-xl border border-border-seam bg-bg-surface p-4\"\n >\n <p className=\"truncate text-sm font-medium text-text-primary\">\n Catalogue piece\n </p>\n {li.styling && (\n <p className=\"mt-0.5 truncate text-xs text-text-secondary\">\n {li.styling}\n </p>\n )}\n </div>\n )\n )}\n </div>\n )}\n </section>\n\n <Comments entityType=\"CooLook\" entityId={look.id} />\n </div>\n\n <div className=\"space-y-4\">\n <GlassCard treatment=\"plain\" className=\"p-5\">\n <h3 className=\"mb-3 text-sm font-semibold text-text-primary\">Details</h3>\n <dl className=\"space-y-2 text-sm\">\n <div className=\"flex justify-between gap-2\">\n <dt className=\"text-text-secondary\">Occasion</dt>\n <dd className=\"text-text-primary\">{titleCase(look.occasion)}</dd>\n </div>\n <div className=\"flex justify-between gap-2\">\n <dt className=\"text-text-secondary\">Visibility</dt>\n <dd className=\"text-text-primary\">{titleCase(look.visibility)}</dd>\n </div>\n <div className=\"flex justify-between gap-2\">\n <dt className=\"text-text-secondary\">Published</dt>\n <dd className=\"text-text-primary\">\n {look.publishedAt\n ? formatDate(look.publishedAt, { hour: undefined, minute: undefined })\n : '—'}\n </dd>\n </div>\n </dl>\n </GlassCard>\n\n {look.collaborationId && (\n <button\n type=\"button\"\n onClick={() => navigateTo(`/collaborations/${look.collaborationId}`)}\n className=\"flex w-full items-center gap-3 rounded-lg border border-border-seam bg-bg-surface p-4 text-left transition-colors hover:bg-bg-sunken/50\"\n >\n <div className=\"flex h-10 w-10 shrink-0 items-center justify-center rounded-lg bg-status-warning-bg-subtle text-status-warning-text\">\n <Sparkles className=\"h-5 w-5\" />\n </div>\n <div className=\"min-w-0\">\n <p className=\"truncate text-sm font-medium text-text-primary\">\n Part of a collaboration\n </p>\n <p className=\"truncate text-xs text-text-secondary\">View collaboration</p>\n </div>\n </button>\n )}\n\n {(publish.isError ||\n remove.isError ||\n like.isError ||\n unlike.isError ||\n save.isError ||\n unsave.isError) && (\n <p className=\"rounded-lg bg-status-error-bg-subtle px-3 py-2 text-xs text-status-error-text\">\n {(publish.error ??\n remove.error ??\n like.error ??\n unlike.error ??\n save.error ??\n unsave.error) instanceof Error\n ? (\n publish.error ??\n remove.error ??\n like.error ??\n unlike.error ??\n save.error ??\n unsave.error\n )?.message\n : 'Action failed'}\n </p>\n )}\n </div>\n </div>\n </PageLayout>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAwCA,SAAS,EAAS,GAAsB;CACtC,IAAM,IAAQ,EAAK,MAAM,CAAC,MAAM,MAAM,CAAC,OAAO,QAAQ;AAGtD,QAFI,EAAM,WAAW,IAAU,MAC3B,EAAM,WAAW,IAAU,EAAM,GAAG,MAAM,GAAG,EAAE,CAAC,aAAa,IACzD,EAAM,GAAG,KAAK,EAAM,EAAM,SAAS,GAAG,IAAI,aAAa;;AAQjE,SAAS,EAAW,EAAE,eAAkC;CACtD,IAAM,EAAE,kBAAe,cAAW,gBAAa,kBAAe,GAAkB,EAC1E,CAAC,GAAc,KAAmB,EAAS,GAAM,EAMjD,IADW,EAJF,QACP,CAAC;EAAE,SAAS;EAAU,WAAW;EAAQ,CAAC,EAChD,CAAC,EAAS,CACX,EACyC;EAAE;EAAe;EAAW;EAAa,CAAC,CAC3D,IACnB,IAAO,GAAS,eAAe,WAC/B,IAAY,GAAS;AAE3B,QACE,kBAAC,UAAD;EACE,MAAK;EACL,eAAe,EAAW,YAAY,IAAW;EACjD,WAAU;YAHZ,CAKE,kBAAC,QAAD;GACE,OAAO;GACP,WAAU;aAET,KAAa,CAAC,IACb,kBAAC,OAAD;IACE,KAAK;IACL,KAAK;IACL,SAAQ;IACR,eAAe,EAAgB,GAAK;IACpC,WAAU;IACV,CAAA,GAEF,kBAAC,QAAD;IAAM,WAAU;cAAiD,EAAS,EAAK;IAAQ,CAAA;GAEpF,CAAA,EACP,kBAAC,QAAD;GACE,WAAU;GACV,OAAO,GAAS,SAAS;aAExB;GACI,CAAA,CACA;;;AAIb,SAAgB,IAAiB;CAC/B,IAAM,EAAE,cAAW,GAA+B,EAC5C,EAAE,eAAY,mBAAgB,GAAkB,EAChD,IAAQ,EAAQ,EAAO,EACvB,IAAO,GAAa,EACpB,IAAS,GAAe,EACxB,IAAO,GAAa,EACpB,IAAS,GAAe,EACxB,IAAU,GAAgB,EAC1B,IAAS,GAAe,EACxB,IAAS,GAAe;AAI9B,KAFA,EAAuB,GAAQ,EAAM,MAAM,MAAM,EAE7C,EAAM,UACR,QACE,kBAAC,GAAD;EAAY,OAAM;YAChB,kBAAC,GAAD,EAAa,OAAM,iBAAkB,CAAA;EAC1B,CAAA;AAIjB,KAAI,EAAM,WAAW,CAAC,EAAM,KAC1B,QACE,kBAAC,GAAD;EAAY,OAAM;YAChB,kBAAC,GAAD;GAAW,OAAM;GAAiB,eAAe,KAAK,EAAM,SAAS;GAAI,CAAA;EAC9D,CAAA;CAIjB,IAAM,IAAO,EAAM,MACb,IAAQ,EAAK,SAAS,EAAE,EACxB,IAAc,EAAK,gBAAgB,MACnC,IAAY,GAAQ,GAAa,MAAM,EAAY,OAAO,EAAK;AAErE,QACE,kBAAC,GAAD;EACE,OAAO,EAAK;EACZ,aAAa,EAAU,EAAK,SAAS;EACrC,SACE,kBAAC,OAAD;GAAK,WAAU;aAAf;IACE,kBAAC,UAAD;KACE,MAAK;KACL,eAAe,EAAW,SAAS;KACnC,WAAU;eAHZ,CAKE,kBAAC,GAAD,EAAW,WAAU,WAAY,CAAA,EAAA,QAC1B;;IACT,kBAAC,GAAD,EAAqB,QAAQ,EAAK,IAAM,CAAA;IACxC,kBAAC,UAAD;KACE,MAAK;KACL,UAAU,EAAO;KACjB,eAAe,EAAO,OAAO;MAAE,IAAI,EAAK;MAAI,OAAO,EAAE,YAAY,CAAC,EAAK,YAAY;MAAE,CAAC;KACtF,gBAAc,EAAK;KACnB,WAAW,EACT,0HACA,EAAK,aACD,uFACA,0DACL;eAVH,CAYG,EAAO,YACN,kBAAC,GAAD,EAAS,WAAU,wBAAyB,CAAA,GAE5C,kBAAC,GAAD,EAAM,WAAW,EAAG,WAAW,EAAK,cAAc,2BAA2B,EAAI,CAAA,EAElF,EAAK,aAAa,aAAa,UACzB;;IACR,CAAC,KACA,kBAAC,UAAD;KACE,MAAK;KACL,UAAU,EAAQ;KAClB,eAAe,EAAQ,OAAO,EAAK,GAAG;KACtC,WAAU;eAJZ,CAMG,EAAQ,YACP,kBAAC,GAAD,EAAS,WAAU,wBAAyB,CAAA,GAE5C,kBAAC,GAAD,EAAQ,WAAU,WAAY,CAAA,EAC9B,UAEK;;IAEX,kBAAC,UAAD;KACE,MAAK;KACL,UAAU,EAAO;KACjB,eAAe,EAAO,OAAO,EAAK,IAAI,EAAE,iBAAiB,EAAW,SAAS,EAAE,CAAC;KAChF,WAAU;eAJZ,CAMG,EAAO,YACN,kBAAC,GAAD,EAAS,WAAU,wBAAyB,CAAA,GAE5C,kBAAC,GAAD,EAAQ,WAAU,WAAY,CAAA,EAC9B,SAEK;;IACL;;YAGR,kBAAC,OAAD;GAAK,WAAU;aAAf,CACE,kBAAC,OAAD;IAAK,WAAU;cAAf;KACE,kBAAC,GAAD;MAAW,WAAU;MAAQ,WAAU;gBAAvC,CACE,kBAAC,GAAD;OACE,MAAM,kBAAC,GAAD,EAAU,WAAU,aAAc,CAAA;OACxC,MAAM,EAAK;OACX,QAAQ,EAAK,OAAO;OACpB,KAAK,EAAK;OACV,WAAU;OACV,CAAA,EACF,kBAAC,OAAD;OAAK,WAAU;iBAAf;QACE,kBAAC,OAAD;SAAK,WAAU;mBAAf;UACE,kBAAC,MAAD;WAAI,WAAU;qBAA2C,EAAK;WAAW,CAAA;UACxE,EAAK,cACJ,kBAAC,GAAD,EAAM,WAAU,6DAA8D,CAAA;UAEhF,kBAAC,GAAD;WAAa,QAAQ,IAAc,cAAc;WAAS,WAAU;WAAY,CAAA;UAC5E;;QACL,EAAK,WAAW,kBAAC,KAAD;SAAG,WAAU;mBAAoC,EAAK;SAAY,CAAA;QAClF,EAAK,KAAK,SAAS,KAAK,kBAAC,GAAD;SAAS,MAAM,EAAK;SAAM,WAAU;SAAO,MAAK;SAAW,CAAA;QAEpF,kBAAC,OAAD;SAAK,WAAU;mBAAf,CACE,kBAAC,GAAD,EAAY,UAAU,EAAK,UAAY,CAAA,EACtC,CAAC,KAAa,kBAAC,GAAD;UAAc,YAAY,EAAK;UAAU,MAAK;UAAO,CAAA,CAChE;;QAEN,kBAAC,OAAD;SAAK,WAAU;mBAAf,CACE,kBAAC,UAAD;UACE,MAAK;UACL,UAAU,EAAK,aAAa,EAAO;UACnC,gBAAc,EAAQ,EAAK;UAC3B,gBAAgB,EAAK,cAAc,IAAS,GAAM,OAAO,EAAK,GAAG;UACjE,WAAW,EACT,0HACA,EAAK,cACD,iFACA,uEACL;oBAVH;WAYG,EAAK,aAAa,EAAO,YACxB,kBAAC,GAAD,EAAS,WAAU,wBAAyB,CAAA,GAE5C,kBAAC,GAAD,EAAO,WAAW,EAAG,WAAW,EAAK,eAAe,eAAe,EAAI,CAAA;WAExE,EAAK,cAAc,UAAU;WAAO;WAAI,EAAK;WACvC;aACT,kBAAC,UAAD;UACE,MAAK;UACL,UAAU,EAAK,aAAa,EAAO;UACnC,gBAAc,EAAQ,EAAK;UAC3B,gBAAgB,EAAK,cAAc,IAAS,GAAM,OAAO,EAAK,GAAG;UACjE,WAAW,EACT,0HACA,EAAK,cACD,sEACA,4DACL;oBAVH;WAYG,EAAK,aAAa,EAAO,YACxB,kBAAC,GAAD,EAAS,WAAU,wBAAyB,CAAA,GAE5C,kBAAC,GAAD,EAAU,WAAW,EAAG,WAAW,EAAK,eAAe,eAAe,EAAI,CAAA;WAE3E,EAAK,cAAc,UAAU;WAAO;WAAI,EAAK;WACvC;YACL;;QACF;SACI;;KAGZ,kBAAC,WAAD;MAAS,WAAU;gBAAnB,CACE,kBAAC,MAAD;OAAI,WAAU;iBAAd;QAA6D;QAC3C,EAAM;QAAO;QAC1B;UACJ,EAAM,WAAW,IAChB,kBAAC,KAAD;OAAG,WAAU;iBAAqF;OAE9F,CAAA,GAEJ,kBAAC,OAAD;OAAK,WAAU;iBACZ,CAAC,GAAG,EAAM,CACR,MAAM,GAAG,MAAM,EAAE,WAAW,EAAE,SAAS,CACvC,KAAK,MACJ,EAAG,YACD,kBAAC,GAAD;QAEE,IAAI,EAAG,UAAU;QACjB,MAAM,EAAG,UAAU;QACnB,WAAW,EAAG,UAAU,OAAO;QAC/B,OAAO,EAAG,UAAU;QACpB,UAAU,EAAG,UAAU;QACvB,aAAa,EAAG,UAAU,OAAO;QACjC,cAAc,EAAW,UAAU,EAAG,WAAW,GAAG,QAAQ,EAAK,KAAK;QACtE,EARK,EAAG,GAQR,GAEF,kBAAC,OAAD;QAEE,WAAU;kBAFZ,CAIE,kBAAC,KAAD;SAAG,WAAU;mBAAiD;SAE1D,CAAA,EACH,EAAG,WACF,kBAAC,KAAD;SAAG,WAAU;mBACV,EAAG;SACF,CAAA,CAEF;UAXC,EAAG,GAWJ,CAET;OACC,CAAA,CAEA;;KAEV,kBAAC,GAAD;MAAU,YAAW;MAAU,UAAU,EAAK;MAAM,CAAA;KAChD;OAEN,kBAAC,OAAD;IAAK,WAAU;cAAf;KACE,kBAAC,GAAD;MAAW,WAAU;MAAQ,WAAU;gBAAvC,CACE,kBAAC,MAAD;OAAI,WAAU;iBAA+C;OAAY,CAAA,EACzE,kBAAC,MAAD;OAAI,WAAU;iBAAd;QACE,kBAAC,OAAD;SAAK,WAAU;mBAAf,CACE,kBAAC,MAAD;UAAI,WAAU;oBAAsB;UAAa,CAAA,EACjD,kBAAC,MAAD;UAAI,WAAU;oBAAqB,EAAU,EAAK,SAAS;UAAM,CAAA,CAC7D;;QACN,kBAAC,OAAD;SAAK,WAAU;mBAAf,CACE,kBAAC,MAAD;UAAI,WAAU;oBAAsB;UAAe,CAAA,EACnD,kBAAC,MAAD;UAAI,WAAU;oBAAqB,EAAU,EAAK,WAAW;UAAM,CAAA,CAC/D;;QACN,kBAAC,OAAD;SAAK,WAAU;mBAAf,CACE,kBAAC,MAAD;UAAI,WAAU;oBAAsB;UAAc,CAAA,EAClD,kBAAC,MAAD;UAAI,WAAU;oBACX,EAAK,cACF,EAAW,EAAK,aAAa;WAAE,MAAM,KAAA;WAAW,QAAQ,KAAA;WAAW,CAAC,GACpE;UACD,CAAA,CACD;;QACH;SACK;;KAEX,EAAK,mBACJ,kBAAC,UAAD;MACE,MAAK;MACL,eAAe,EAAW,mBAAmB,EAAK,kBAAkB;MACpE,WAAU;gBAHZ,CAKE,kBAAC,OAAD;OAAK,WAAU;iBACb,kBAAC,GAAD,EAAU,WAAU,WAAY,CAAA;OAC5B,CAAA,EACN,kBAAC,OAAD;OAAK,WAAU;iBAAf,CACE,kBAAC,KAAD;QAAG,WAAU;kBAAiD;QAE1D,CAAA,EACJ,kBAAC,KAAD;QAAG,WAAU;kBAAuC;QAAsB,CAAA,CACtE;SACC;;MAGT,EAAQ,WACR,EAAO,WACP,EAAK,WACL,EAAO,WACP,EAAK,WACL,EAAO,YACP,kBAAC,KAAD;MAAG,WAAU;iBACT,EAAQ,SACR,EAAO,SACP,EAAK,SACL,EAAO,SACP,EAAK,SACL,EAAO,kBAAkB,SAErB,EAAQ,SACR,EAAO,SACP,EAAK,SACL,EAAO,SACP,EAAK,SACL,EAAO,QACN,UACH;MACF,CAAA;KAEF;MACF;;EACK,CAAA"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Look Create Page
3
+ * @module coolandlovely/pages/looks
4
+ *
5
+ * Drives `cooCreateLook`. A look is created with its title/occasion/visibility
6
+ * and an inline list of look items (catalogue pieces + styling notes), matching
7
+ * the `CooCreateLookInput` shape exactly.
8
+ */
9
+ export declare function LookFormPage(): import("react").JSX.Element;
10
+ //# sourceMappingURL=LookFormPage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LookFormPage.d.ts","sourceRoot":"","sources":["../../../../src/coolandlovely/pages/looks/LookFormPage.tsx"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAiCH,wBAAgB,YAAY,gCA2T3B"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Looks List Page
3
+ * @module coolandlovely/pages/looks
4
+ *
5
+ * Cursor-paginated feed of published looks (`cooListLooks`) with occasion &
6
+ * featured filters.
7
+ */
8
+ export declare function LooksListPage(): import("react").JSX.Element;
9
+ //# sourceMappingURL=LooksListPage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LooksListPage.d.ts","sourceRoot":"","sources":["../../../../src/coolandlovely/pages/looks/LooksListPage.tsx"],"names":[],"mappings":"AAAA;;;;;;GAMG;AA2BH,wBAAgB,aAAa,gCAqK5B"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Style Profile Page
3
+ * @module coolandlovely/pages/profile
4
+ *
5
+ * Two routes share this component:
6
+ * - `/profile` — the calling shopper's own profile (`cooMyStyleProfile` +
7
+ * `cooUpsertStyleProfile`), editable, with a self-scoped wardrobe preview
8
+ * and "people you follow" list.
9
+ * - `/profile/:userId` — any other shopper's PUBLIC profile
10
+ * (`cooStyleProfileByOwner`), reached by clicking an author's name/avatar
11
+ * on a Look/Discover/Collaboration card. Read-only: no edit affordance, no
12
+ * wardrobe preview (wardrobe stays self-scoped server-side), and shows a
13
+ * Follow button instead. Server-side CooVisibility (PRIVATE/FOLLOWERS)
14
+ * gates whether the profile resolves at all.
15
+ */
16
+ export declare function StyleProfilePage(): import("react").JSX.Element;
17
+ //# sourceMappingURL=StyleProfilePage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StyleProfilePage.d.ts","sourceRoot":"","sources":["../../../../src/coolandlovely/pages/profile/StyleProfilePage.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAgFH,wBAAgB,gBAAgB,gCA2jB/B"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Trends Page
3
+ * @module coolandlovely/pages/trends
4
+ *
5
+ * Client-side analytics computed over the real catalogue + social lists
6
+ * (cooListBrands / cooListStyleItems / cooListLooks). Honest by construction —
7
+ * it only counts and ranks what is actually on the platform. No fabricated
8
+ * metrics. Header labels it "Signals from platform activity."
9
+ */
10
+ export declare function TrendsPage(): import("react").JSX.Element;
11
+ //# sourceMappingURL=TrendsPage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TrendsPage.d.ts","sourceRoot":"","sources":["../../../../src/coolandlovely/pages/trends/TrendsPage.tsx"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAkFH,wBAAgB,UAAU,gCAoLzB"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Wardrobe Item Create Page (self-scoped)
3
+ * @module coolandlovely/pages/wardrobe
4
+ *
5
+ * Drives `cooCreateWardrobeItem`. Belongs to the calling shopper's profile. A
6
+ * piece can optionally be linked to a catalogue style item (`styleItemId`), and
7
+ * its source is chosen with a segmented control.
8
+ */
9
+ export declare function WardrobeFormPage(): import("react").JSX.Element;
10
+ //# sourceMappingURL=WardrobeFormPage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WardrobeFormPage.d.ts","sourceRoot":"","sources":["../../../../src/coolandlovely/pages/wardrobe/WardrobeFormPage.tsx"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAqDH,wBAAgB,gBAAgB,gCAsP/B"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Wardrobe List Page (self-scoped)
3
+ * @module coolandlovely/pages/wardrobe
4
+ *
5
+ * The shopper's digital wardrobe (`cooListWardrobeItems`, self-scoped) rendered
6
+ * as an image-forward gallery — each card is a large piece photo with a circular
7
+ * "Worn N×" badge and a hover-revealed action bar (wear log via
8
+ * `cooLogWardrobeWear`, removal via `cooRemoveWardrobeItem`), with category &
9
+ * source filters.
10
+ */
11
+ export declare function WardrobeListPage(): import("react").JSX.Element;
12
+ //# sourceMappingURL=WardrobeListPage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WardrobeListPage.d.ts","sourceRoot":"","sources":["../../../../src/coolandlovely/pages/wardrobe/WardrobeListPage.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAqBH,wBAAgB,gBAAgB,gCAoI/B"}
@@ -0,0 +1,56 @@
1
+ import { ViewMode } from '../types';
2
+
3
+ interface CoolAndLovelyState {
4
+ viewMode: ViewMode;
5
+ activeSection: string;
6
+ sidebarCollapsed: boolean;
7
+ searchQuery: string;
8
+ categoryFilter: string;
9
+ setViewMode: (mode: ViewMode) => void;
10
+ setActiveSection: (section: string) => void;
11
+ setSearchQuery: (query: string) => void;
12
+ setCategoryFilter: (category: string) => void;
13
+ toggleSidebar: () => void;
14
+ reset: () => void;
15
+ }
16
+ export declare const useCoolAndLovelyStore: import('zustand').UseBoundStore<Omit<Omit<import('zustand').StoreApi<CoolAndLovelyState>, "setState" | "devtools"> & {
17
+ setState(partial: CoolAndLovelyState | Partial<CoolAndLovelyState> | ((state: CoolAndLovelyState) => CoolAndLovelyState | Partial<CoolAndLovelyState>), replace?: false | undefined, action?: (string | {
18
+ [x: string]: unknown;
19
+ [x: number]: unknown;
20
+ [x: symbol]: unknown;
21
+ type: string;
22
+ }) | undefined): void;
23
+ setState(state: CoolAndLovelyState | ((state: CoolAndLovelyState) => CoolAndLovelyState), replace: true, action?: (string | {
24
+ [x: string]: unknown;
25
+ [x: number]: unknown;
26
+ [x: symbol]: unknown;
27
+ type: string;
28
+ }) | undefined): void;
29
+ devtools: {
30
+ cleanup: () => void;
31
+ };
32
+ }, "setState" | "persist"> & {
33
+ setState(partial: CoolAndLovelyState | Partial<CoolAndLovelyState> | ((state: CoolAndLovelyState) => CoolAndLovelyState | Partial<CoolAndLovelyState>), replace?: false | undefined, action?: (string | {
34
+ [x: string]: unknown;
35
+ [x: number]: unknown;
36
+ [x: symbol]: unknown;
37
+ type: string;
38
+ }) | undefined): unknown;
39
+ setState(state: CoolAndLovelyState | ((state: CoolAndLovelyState) => CoolAndLovelyState), replace: true, action?: (string | {
40
+ [x: string]: unknown;
41
+ [x: number]: unknown;
42
+ [x: symbol]: unknown;
43
+ type: string;
44
+ }) | undefined): unknown;
45
+ persist: {
46
+ setOptions: (options: Partial<import('zustand/middleware').PersistOptions<CoolAndLovelyState, unknown, unknown>>) => void;
47
+ clearStorage: () => void;
48
+ rehydrate: () => Promise<void> | void;
49
+ hasHydrated: () => boolean;
50
+ onHydrate: (fn: (state: CoolAndLovelyState) => void) => () => void;
51
+ onFinishHydration: (fn: (state: CoolAndLovelyState) => void) => () => void;
52
+ getOptions: () => Partial<import('zustand/middleware').PersistOptions<CoolAndLovelyState, unknown, unknown>>;
53
+ };
54
+ }>;
55
+ export {};
56
+ //# sourceMappingURL=coolandlovelyStore.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"coolandlovelyStore.d.ts","sourceRoot":"","sources":["../../../src/coolandlovely/store/coolandlovelyStore.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAKH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAEzC,UAAU,kBAAkB;IAE1B,QAAQ,EAAE,QAAQ,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,gBAAgB,EAAE,OAAO,CAAC;IAG1B,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IAGvB,WAAW,EAAE,CAAC,IAAI,EAAE,QAAQ,KAAK,IAAI,CAAC;IACtC,gBAAgB,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5C,cAAc,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,iBAAiB,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IAC9C,aAAa,EAAE,MAAM,IAAI,CAAC;IAC1B,KAAK,EAAE,MAAM,IAAI,CAAC;CACnB;AAUD,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAyBjC,CAAC"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Store Index
3
+ * @module coolandlovely/store
4
+ */
5
+ export { useCoolAndLovelyStore } from './coolandlovelyStore';
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/coolandlovely/store/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC"}
@@ -0,0 +1,137 @@
1
+ import { CooFileRef, CooStyleItem } from './index';
2
+
3
+ export type CooOrderStatus = 'PENDING_PAYMENT' | 'PAID' | 'CANCELLED';
4
+ export type CooEarningSyncStatus = 'PENDING' | 'SYNCED' | 'FAILED';
5
+ export interface CooCartItem {
6
+ id: string;
7
+ styleItemId: string;
8
+ quantity: number;
9
+ size: string | null;
10
+ colour: string | null;
11
+ lookId: string | null;
12
+ unitPrice: number;
13
+ currency: string;
14
+ lineTotal: number;
15
+ isPurchasable: boolean;
16
+ styleItem: (Pick<CooStyleItem, 'id' | 'name' | 'image' | 'status'> & {
17
+ brand?: {
18
+ id: string;
19
+ name: string;
20
+ } | null;
21
+ }) | null;
22
+ }
23
+ export interface CooCart {
24
+ items: CooCartItem[];
25
+ itemCount: number;
26
+ subtotal: number;
27
+ currency: string | null;
28
+ canCheckout: boolean;
29
+ blockedReason: string | null;
30
+ }
31
+ export interface CooOrderItem {
32
+ id: string;
33
+ styleItemId: string;
34
+ brandId: string;
35
+ name: string;
36
+ sku: string | null;
37
+ image: CooFileRef | null;
38
+ size: string | null;
39
+ colour: string | null;
40
+ unitPrice: number;
41
+ quantity: number;
42
+ lineTotal: number;
43
+ lookId: string | null;
44
+ isCreatorAttributed: boolean;
45
+ }
46
+ export interface CooOrder {
47
+ id: string;
48
+ orderNumber: string;
49
+ status: CooOrderStatus;
50
+ currency: string;
51
+ subtotal: number;
52
+ taxAmount: number;
53
+ total: number;
54
+ itemCount: number;
55
+ shippingName: string | null;
56
+ shippingAddress: string | null;
57
+ buyerNote: string | null;
58
+ paymentProvider: string | null;
59
+ paidAt: string | null;
60
+ cancelledAt: string | null;
61
+ createdAt: string;
62
+ updatedAt: string;
63
+ items: CooOrderItem[];
64
+ }
65
+ export interface CooOrderConnection {
66
+ items: CooOrder[];
67
+ pageInfo: {
68
+ cursor: string | null;
69
+ hasMore: boolean;
70
+ };
71
+ }
72
+ export interface CooOrderCheckout {
73
+ order: CooOrder;
74
+ provider: string;
75
+ providerOrderId: string | null;
76
+ razorpayKeyId: string | null;
77
+ clientSecret: string | null;
78
+ stripePublishableKey: string | null;
79
+ subtotal: number;
80
+ taxAmount: number;
81
+ total: number;
82
+ currency: string;
83
+ }
84
+ export interface CooAddToCartInput {
85
+ styleItemId: string;
86
+ quantity?: number;
87
+ size?: string | null;
88
+ colour?: string | null;
89
+ lookId?: string | null;
90
+ }
91
+ export interface CooCheckoutInput {
92
+ shippingName: string;
93
+ shippingAddress: string;
94
+ buyerNote?: string | null;
95
+ }
96
+ export interface CooCreatorEarning {
97
+ id: string;
98
+ orderId: string;
99
+ orderNumber: string | null;
100
+ lookId: string | null;
101
+ collaborationId: string | null;
102
+ commissionRate: number;
103
+ saleAmount: number;
104
+ amount: number;
105
+ currency: string;
106
+ availableAt: string;
107
+ billingSyncStatus: CooEarningSyncStatus;
108
+ createdAt: string;
109
+ }
110
+ export interface CooCreatorEarningConnection {
111
+ items: CooCreatorEarning[];
112
+ pageInfo: {
113
+ cursor: string | null;
114
+ hasMore: boolean;
115
+ };
116
+ }
117
+ export interface CooCreatorEarningsSummary {
118
+ commissionRate: number;
119
+ holdDays: number;
120
+ currency: string | null;
121
+ totalLifetimeAmount: number;
122
+ availableAmount: number;
123
+ pendingAmount: number;
124
+ reservedAmount: number;
125
+ paidAmount: number;
126
+ pendingPayoutCount: number;
127
+ unsyncedCount: number;
128
+ billingAvailable: boolean;
129
+ }
130
+ export interface CooCreatorPayout {
131
+ id: string;
132
+ status: string;
133
+ requestedAmount: number;
134
+ currency: string;
135
+ createdAt: string;
136
+ }
137
+ //# sourceMappingURL=commerce.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"commerce.d.ts","sourceRoot":"","sources":["../../../src/coolandlovely/types/commerce.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAExD,MAAM,MAAM,cAAc,GAAG,iBAAiB,GAAG,MAAM,GAAG,WAAW,CAAC;AACtE,MAAM,MAAM,oBAAoB,GAAG,SAAS,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAEnE,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,OAAO,CAAC;IACvB,SAAS,EACL,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,GAAG,MAAM,GAAG,OAAO,GAAG,QAAQ,CAAC,GAAG;QACxD,KAAK,CAAC,EAAE;YAAE,EAAE,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAA;SAAE,GAAG,IAAI,CAAC;KAC7C,CAAC,GACF,IAAI,CAAC;CACV;AAED,MAAM,WAAW,OAAO;IACtB,KAAK,EAAE,WAAW,EAAE,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,WAAW,EAAE,OAAO,CAAC;IACrB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B;AAED,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACnB,KAAK,EAAE,UAAU,GAAG,IAAI,CAAC;IACzB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,mBAAmB,EAAE,OAAO,CAAC;CAC9B;AAED,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,cAAc,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,YAAY,EAAE,CAAC;CACvB;AAED,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,QAAQ,EAAE;QAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,OAAO,EAAE,OAAO,CAAA;KAAE,CAAC;CACvD;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,QAAQ,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,oBAAoB,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,iBAAiB;IAChC,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACxB;AAED,MAAM,WAAW,gBAAgB;IAC/B,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AAED,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,iBAAiB,EAAE,oBAAoB,CAAC;IACxC,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,2BAA2B;IAC1C,KAAK,EAAE,iBAAiB,EAAE,CAAC;IAC3B,QAAQ,EAAE;QAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,OAAO,EAAE,OAAO,CAAA;KAAE,CAAC;CACvD;AAED,MAAM,WAAW,yBAAyB;IACxC,cAAc,EAAE,MAAM,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,eAAe,EAAE,MAAM,CAAC;IACxB,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,aAAa,EAAE,MAAM,CAAC;IACtB,gBAAgB,EAAE,OAAO,CAAC;CAC3B;AAED,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,eAAe,EAAE,MAAM,CAAC;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;CACnB"}