@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.
- package/dist/coolandlovely/CoolAndLovelyRoot.d.ts +5 -0
- package/dist/coolandlovely/CoolAndLovelyRoot.d.ts.map +1 -0
- package/dist/coolandlovely/CoolAndLovelyRoot.js +92 -68
- package/dist/coolandlovely/CoolAndLovelyRoot.js.map +1 -1
- package/dist/coolandlovely/CoolAndLovelyRoutes.d.ts +4 -0
- package/dist/coolandlovely/CoolAndLovelyRoutes.d.ts.map +1 -0
- package/dist/coolandlovely/CoolAndLovelyRoutes.js +25 -9
- package/dist/coolandlovely/CoolAndLovelyRoutes.js.map +1 -1
- package/dist/coolandlovely/components/ActivityTrail.d.ts +24 -0
- package/dist/coolandlovely/components/ActivityTrail.d.ts.map +1 -0
- package/dist/coolandlovely/components/ActorName.d.ts +14 -0
- package/dist/coolandlovely/components/ActorName.d.ts.map +1 -0
- package/dist/coolandlovely/components/AddToCartPanel.d.ts +10 -0
- package/dist/coolandlovely/components/AddToCartPanel.d.ts.map +1 -0
- package/dist/coolandlovely/components/AddToCartPanel.js +97 -0
- package/dist/coolandlovely/components/AddToCartPanel.js.map +1 -0
- package/dist/coolandlovely/components/AddToLookbookButton.d.ts +10 -0
- package/dist/coolandlovely/components/AddToLookbookButton.d.ts.map +1 -0
- package/dist/coolandlovely/components/BrandCard.d.ts +11 -0
- package/dist/coolandlovely/components/BrandCard.d.ts.map +1 -0
- package/dist/coolandlovely/components/BrandCover.d.ts +17 -0
- package/dist/coolandlovely/components/BrandCover.d.ts.map +1 -0
- package/dist/coolandlovely/components/BrandCreatorAvatars.d.ts +14 -0
- package/dist/coolandlovely/components/BrandCreatorAvatars.d.ts.map +1 -0
- package/dist/coolandlovely/components/CollectionCard.d.ts +11 -0
- package/dist/coolandlovely/components/CollectionCard.d.ts.map +1 -0
- package/dist/coolandlovely/components/ColourSwatchRow.d.ts +11 -0
- package/dist/coolandlovely/components/ColourSwatchRow.d.ts.map +1 -0
- package/dist/coolandlovely/components/Comments.d.ts +14 -0
- package/dist/coolandlovely/components/Comments.d.ts.map +1 -0
- package/dist/coolandlovely/components/EmptyState.d.ts +14 -0
- package/dist/coolandlovely/components/EmptyState.d.ts.map +1 -0
- package/dist/coolandlovely/components/FeedbackWidget.d.ts +4 -0
- package/dist/coolandlovely/components/FeedbackWidget.d.ts.map +1 -0
- package/dist/coolandlovely/components/Field.d.ts +71 -0
- package/dist/coolandlovely/components/Field.d.ts.map +1 -0
- package/dist/coolandlovely/components/FileImage.d.ts +10 -0
- package/dist/coolandlovely/components/FileImage.d.ts.map +1 -0
- package/dist/coolandlovely/components/FollowButton.d.ts +11 -0
- package/dist/coolandlovely/components/FollowButton.d.ts.map +1 -0
- package/dist/coolandlovely/components/ImageUploadField.d.ts +21 -0
- package/dist/coolandlovely/components/ImageUploadField.d.ts.map +1 -0
- package/dist/coolandlovely/components/LookCard.d.ts +19 -0
- package/dist/coolandlovely/components/LookCard.d.ts.map +1 -0
- package/dist/coolandlovely/components/LookbookCard.d.ts +11 -0
- package/dist/coolandlovely/components/LookbookCard.d.ts.map +1 -0
- package/dist/coolandlovely/components/MetricsCard.d.ts +23 -0
- package/dist/coolandlovely/components/MetricsCard.d.ts.map +1 -0
- package/dist/coolandlovely/components/PageLayout.d.ts +17 -0
- package/dist/coolandlovely/components/PageLayout.d.ts.map +1 -0
- package/dist/coolandlovely/components/PayForOrder.d.ts +11 -0
- package/dist/coolandlovely/components/PayForOrder.d.ts.map +1 -0
- package/dist/coolandlovely/components/PayForOrder.js +118 -0
- package/dist/coolandlovely/components/PayForOrder.js.map +1 -0
- package/dist/coolandlovely/components/ShopItemCard.d.ts +15 -0
- package/dist/coolandlovely/components/ShopItemCard.d.ts.map +1 -0
- package/dist/coolandlovely/components/StateViews.d.ts +16 -0
- package/dist/coolandlovely/components/StateViews.d.ts.map +1 -0
- package/dist/coolandlovely/components/StatusBadge.d.ts +9 -0
- package/dist/coolandlovely/components/StatusBadge.d.ts.map +1 -0
- package/dist/coolandlovely/components/StatusBadge.js +4 -0
- package/dist/coolandlovely/components/StatusBadge.js.map +1 -1
- package/dist/coolandlovely/components/StepTracker.d.ts +12 -0
- package/dist/coolandlovely/components/StepTracker.d.ts.map +1 -0
- package/dist/coolandlovely/components/TagList.d.ts +12 -0
- package/dist/coolandlovely/components/TagList.d.ts.map +1 -0
- package/dist/coolandlovely/components/Thumbnail.d.ts +23 -0
- package/dist/coolandlovely/components/Thumbnail.d.ts.map +1 -0
- package/dist/coolandlovely/components/VisibilityChip.d.ts +10 -0
- package/dist/coolandlovely/components/VisibilityChip.d.ts.map +1 -0
- package/dist/coolandlovely/components/WardrobeItemCard.d.ts +14 -0
- package/dist/coolandlovely/components/WardrobeItemCard.d.ts.map +1 -0
- package/dist/coolandlovely/components/index.d.ts +32 -0
- package/dist/coolandlovely/components/index.d.ts.map +1 -0
- package/dist/coolandlovely/context/CoolAndLovelyContext.d.ts +16 -0
- package/dist/coolandlovely/context/CoolAndLovelyContext.d.ts.map +1 -0
- package/dist/coolandlovely/context/index.d.ts +6 -0
- package/dist/coolandlovely/context/index.d.ts.map +1 -0
- package/dist/coolandlovely/hooks/index.d.ts +15 -0
- package/dist/coolandlovely/hooks/index.d.ts.map +1 -0
- package/dist/coolandlovely/hooks/useActivity.d.ts +39 -0
- package/dist/coolandlovely/hooks/useActivity.d.ts.map +1 -0
- package/dist/coolandlovely/hooks/useAssistantEntity.d.ts +24 -0
- package/dist/coolandlovely/hooks/useAssistantEntity.d.ts.map +1 -0
- package/dist/coolandlovely/hooks/useComments.d.ts +37 -0
- package/dist/coolandlovely/hooks/useComments.d.ts.map +1 -0
- package/dist/coolandlovely/hooks/useCommerceApi.d.ts +27 -0
- package/dist/coolandlovely/hooks/useCommerceApi.d.ts.map +1 -0
- package/dist/coolandlovely/hooks/useCommerceApi.js +121 -0
- package/dist/coolandlovely/hooks/useCommerceApi.js.map +1 -0
- package/dist/coolandlovely/hooks/useCoolAndLovelyApi.d.ts +178 -0
- package/dist/coolandlovely/hooks/useCoolAndLovelyApi.d.ts.map +1 -0
- package/dist/coolandlovely/hooks/useCoolAndLovelyApi.js +1 -1
- package/dist/coolandlovely/hooks/useCoolAndLovelyApi.js.map +1 -1
- package/dist/coolandlovely/hooks/useFiles.d.ts +62 -0
- package/dist/coolandlovely/hooks/useFiles.d.ts.map +1 -0
- package/dist/coolandlovely/hooks/useTr.d.ts +2 -0
- package/dist/coolandlovely/hooks/useTr.d.ts.map +1 -0
- package/dist/coolandlovely/index.d.ts +11 -0
- package/dist/coolandlovely/index.d.ts.map +1 -0
- package/dist/coolandlovely/pages/HomePage.d.ts +10 -0
- package/dist/coolandlovely/pages/HomePage.d.ts.map +1 -0
- package/dist/coolandlovely/pages/admin/AdminBrandsPage.d.ts +9 -0
- package/dist/coolandlovely/pages/admin/AdminBrandsPage.d.ts.map +1 -0
- package/dist/coolandlovely/pages/admin/AdminCollaborationsPage.d.ts +9 -0
- package/dist/coolandlovely/pages/admin/AdminCollaborationsPage.d.ts.map +1 -0
- package/dist/coolandlovely/pages/admin/AdminFeaturedItemsPage.d.ts +9 -0
- package/dist/coolandlovely/pages/admin/AdminFeaturedItemsPage.d.ts.map +1 -0
- package/dist/coolandlovely/pages/admin/index.d.ts +8 -0
- package/dist/coolandlovely/pages/admin/index.d.ts.map +1 -0
- package/dist/coolandlovely/pages/brands/BrandDetailPage.d.ts +9 -0
- package/dist/coolandlovely/pages/brands/BrandDetailPage.d.ts.map +1 -0
- package/dist/coolandlovely/pages/brands/BrandFormPage.d.ts +9 -0
- package/dist/coolandlovely/pages/brands/BrandFormPage.d.ts.map +1 -0
- package/dist/coolandlovely/pages/brands/BrandsListPage.d.ts +9 -0
- package/dist/coolandlovely/pages/brands/BrandsListPage.d.ts.map +1 -0
- package/dist/coolandlovely/pages/collaborations/CollaborationDetailPage.d.ts +9 -0
- package/dist/coolandlovely/pages/collaborations/CollaborationDetailPage.d.ts.map +1 -0
- package/dist/coolandlovely/pages/collaborations/CollaborationFormPage.d.ts +11 -0
- package/dist/coolandlovely/pages/collaborations/CollaborationFormPage.d.ts.map +1 -0
- package/dist/coolandlovely/pages/collaborations/CollaborationsListPage.d.ts +9 -0
- package/dist/coolandlovely/pages/collaborations/CollaborationsListPage.d.ts.map +1 -0
- package/dist/coolandlovely/pages/collections/CollectionDetailPage.d.ts +9 -0
- package/dist/coolandlovely/pages/collections/CollectionDetailPage.d.ts.map +1 -0
- package/dist/coolandlovely/pages/collections/CollectionFormPage.d.ts +9 -0
- package/dist/coolandlovely/pages/collections/CollectionFormPage.d.ts.map +1 -0
- package/dist/coolandlovely/pages/collections/CollectionsListPage.d.ts +8 -0
- package/dist/coolandlovely/pages/collections/CollectionsListPage.d.ts.map +1 -0
- package/dist/coolandlovely/pages/commerce/CartPage.d.ts +10 -0
- package/dist/coolandlovely/pages/commerce/CartPage.d.ts.map +1 -0
- package/dist/coolandlovely/pages/commerce/CartPage.js +283 -0
- package/dist/coolandlovely/pages/commerce/CartPage.js.map +1 -0
- package/dist/coolandlovely/pages/commerce/CreatorEarningsPage.d.ts +11 -0
- package/dist/coolandlovely/pages/commerce/CreatorEarningsPage.d.ts.map +1 -0
- package/dist/coolandlovely/pages/commerce/CreatorEarningsPage.js +185 -0
- package/dist/coolandlovely/pages/commerce/CreatorEarningsPage.js.map +1 -0
- package/dist/coolandlovely/pages/commerce/OrdersPage.d.ts +11 -0
- package/dist/coolandlovely/pages/commerce/OrdersPage.d.ts.map +1 -0
- package/dist/coolandlovely/pages/commerce/OrdersPage.js +280 -0
- package/dist/coolandlovely/pages/commerce/OrdersPage.js.map +1 -0
- package/dist/coolandlovely/pages/discover/DiscoverPage.d.ts +14 -0
- package/dist/coolandlovely/pages/discover/DiscoverPage.d.ts.map +1 -0
- package/dist/coolandlovely/pages/items/StyleItemDetailPage.d.ts +9 -0
- package/dist/coolandlovely/pages/items/StyleItemDetailPage.d.ts.map +1 -0
- package/dist/coolandlovely/pages/items/StyleItemDetailPage.js +114 -106
- package/dist/coolandlovely/pages/items/StyleItemDetailPage.js.map +1 -1
- package/dist/coolandlovely/pages/items/StyleItemFormPage.d.ts +10 -0
- package/dist/coolandlovely/pages/items/StyleItemFormPage.d.ts.map +1 -0
- package/dist/coolandlovely/pages/items/StyleItemsListPage.d.ts +9 -0
- package/dist/coolandlovely/pages/items/StyleItemsListPage.d.ts.map +1 -0
- package/dist/coolandlovely/pages/lookbooks/LookbookDetailPage.d.ts +12 -0
- package/dist/coolandlovely/pages/lookbooks/LookbookDetailPage.d.ts.map +1 -0
- package/dist/coolandlovely/pages/lookbooks/LookbooksListPage.d.ts +10 -0
- package/dist/coolandlovely/pages/lookbooks/LookbooksListPage.d.ts.map +1 -0
- package/dist/coolandlovely/pages/looks/LookDetailPage.d.ts +11 -0
- package/dist/coolandlovely/pages/looks/LookDetailPage.d.ts.map +1 -0
- package/dist/coolandlovely/pages/looks/LookDetailPage.js +1 -1
- package/dist/coolandlovely/pages/looks/LookDetailPage.js.map +1 -1
- package/dist/coolandlovely/pages/looks/LookFormPage.d.ts +10 -0
- package/dist/coolandlovely/pages/looks/LookFormPage.d.ts.map +1 -0
- package/dist/coolandlovely/pages/looks/LooksListPage.d.ts +9 -0
- package/dist/coolandlovely/pages/looks/LooksListPage.d.ts.map +1 -0
- package/dist/coolandlovely/pages/profile/StyleProfilePage.d.ts +17 -0
- package/dist/coolandlovely/pages/profile/StyleProfilePage.d.ts.map +1 -0
- package/dist/coolandlovely/pages/trends/TrendsPage.d.ts +11 -0
- package/dist/coolandlovely/pages/trends/TrendsPage.d.ts.map +1 -0
- package/dist/coolandlovely/pages/wardrobe/WardrobeFormPage.d.ts +10 -0
- package/dist/coolandlovely/pages/wardrobe/WardrobeFormPage.d.ts.map +1 -0
- package/dist/coolandlovely/pages/wardrobe/WardrobeListPage.d.ts +12 -0
- package/dist/coolandlovely/pages/wardrobe/WardrobeListPage.d.ts.map +1 -0
- package/dist/coolandlovely/store/coolandlovelyStore.d.ts +56 -0
- package/dist/coolandlovely/store/coolandlovelyStore.d.ts.map +1 -0
- package/dist/coolandlovely/store/index.d.ts +6 -0
- package/dist/coolandlovely/store/index.d.ts.map +1 -0
- package/dist/coolandlovely/types/commerce.d.ts +137 -0
- package/dist/coolandlovely/types/commerce.d.ts.map +1 -0
- package/dist/coolandlovely/types/index.d.ts +527 -0
- package/dist/coolandlovely/types/index.d.ts.map +1 -0
- package/dist/coolandlovely/utils/cn.d.ts +4 -0
- package/dist/coolandlovely/utils/cn.d.ts.map +1 -0
- package/dist/coolandlovely/utils/formatters.d.ts +101 -0
- package/dist/coolandlovely/utils/formatters.d.ts.map +1 -0
- package/dist/coolandlovely/utils/icons.d.ts +6 -0
- package/dist/coolandlovely/utils/icons.d.ts.map +1 -0
- package/dist/coolandlovely/utils/index.d.ts +10 -0
- package/dist/coolandlovely/utils/index.d.ts.map +1 -0
- package/dist/coolandlovely/utils/navigation.d.ts +20 -0
- package/dist/coolandlovely/utils/navigation.d.ts.map +1 -0
- package/dist/coolandlovely/utils/paymentProviders.d.ts +74 -0
- package/dist/coolandlovely/utils/paymentProviders.d.ts.map +1 -0
- package/dist/coolandlovely/utils/paymentProviders.js +42 -0
- package/dist/coolandlovely/utils/paymentProviders.js.map +1 -0
- package/dist/coolandlovely/utils/sparkline.d.ts +31 -0
- package/dist/coolandlovely/utils/sparkline.d.ts.map +1 -0
- package/dist/generated/global-operations.d.ts +2 -0
- package/dist/generated/global-operations.d.ts.map +1 -0
- package/dist/generated/global-types.d.ts +23527 -0
- package/dist/generated/global-types.d.ts.map +1 -0
- package/dist/generated/wspace-operations.d.ts +2 -0
- package/dist/generated/wspace-operations.d.ts.map +1 -0
- package/dist/generated/wspace-types.d.ts +57851 -0
- package/dist/generated/wspace-types.d.ts.map +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/services/createSandboxAssistantTransport.d.ts +24 -0
- package/dist/services/createSandboxAssistantTransport.d.ts.map +1 -0
- package/dist/stories/BrandCard.stories.d.ts +10 -0
- package/dist/stories/BrandCard.stories.d.ts.map +1 -0
- package/dist/stories/CollectionCard.stories.d.ts +10 -0
- package/dist/stories/CollectionCard.stories.d.ts.map +1 -0
- package/dist/stories/DiscoverPage.stories.d.ts +11 -0
- package/dist/stories/DiscoverPage.stories.d.ts.map +1 -0
- package/dist/stories/FeedbackWidget.stories.d.ts +9 -0
- package/dist/stories/FeedbackWidget.stories.d.ts.map +1 -0
- package/dist/stories/LookCard.stories.d.ts +10 -0
- package/dist/stories/LookCard.stories.d.ts.map +1 -0
- package/dist/stories/LookbookCard.stories.d.ts +10 -0
- package/dist/stories/LookbookCard.stories.d.ts.map +1 -0
- package/dist/stories/MetricsCard.stories.d.ts +10 -0
- package/dist/stories/MetricsCard.stories.d.ts.map +1 -0
- package/dist/stories/ShopItemCard.stories.d.ts +9 -0
- package/dist/stories/ShopItemCard.stories.d.ts.map +1 -0
- package/dist/stories/StatusBadge.stories.d.ts +11 -0
- package/dist/stories/StatusBadge.stories.d.ts.map +1 -0
- package/dist/stories/VisibilityChip.stories.d.ts +10 -0
- package/dist/stories/VisibilityChip.stories.d.ts.map +1 -0
- package/dist/stories/WardrobeItemCard.stories.d.ts +11 -0
- package/dist/stories/WardrobeItemCard.stories.d.ts.map +1 -0
- package/dist/stories/__fixtures__/coolandlovely.d.ts +15 -0
- package/dist/stories/__fixtures__/coolandlovely.d.ts.map +1 -0
- package/dist/utils/pageContext.d.ts +58 -0
- package/dist/utils/pageContext.d.ts.map +1 -0
- package/package.json +1 -1
|
@@ -12,188 +12,196 @@ import { LookCard as m } from "../../components/LookCard.js";
|
|
|
12
12
|
import { categoryIcon as h } from "../../utils/icons.js";
|
|
13
13
|
import { TagList as g } from "../../components/TagList.js";
|
|
14
14
|
import { ColourSwatchRow as _ } from "../../components/ColourSwatchRow.js";
|
|
15
|
-
import {
|
|
16
|
-
import {
|
|
17
|
-
import {
|
|
18
|
-
import {
|
|
15
|
+
import { AddToCartPanel as v } from "../../components/AddToCartPanel.js";
|
|
16
|
+
import { Archive as y, ArrowLeft as b, ChevronRight as x, Loader2 as S, Pencil as C, Shapes as w } from "lucide-react";
|
|
17
|
+
import { useParams as T, useSearchParams as E } from "react-router";
|
|
18
|
+
import { jsx as D, jsxs as O } from "react/jsx-runtime";
|
|
19
|
+
import { GlassCard as k } from "@burdenoff/fe-libs/ui";
|
|
19
20
|
//#region src/coolandlovely/pages/items/StyleItemDetailPage.tsx
|
|
20
|
-
function
|
|
21
|
-
let { itemId:
|
|
21
|
+
function A() {
|
|
22
|
+
let { itemId: A } = T(), [j] = E(), M = j.get("look"), { navigateTo: N } = e(), P = i(A), F = r({ pagination: {
|
|
22
23
|
limit: 100,
|
|
23
24
|
offset: 0
|
|
24
|
-
} }),
|
|
25
|
-
if (a(
|
|
25
|
+
} }), I = n();
|
|
26
|
+
if (a(A, P.data?.name), P.isLoading) return /* @__PURE__ */ D(t, {
|
|
26
27
|
title: "Style item",
|
|
27
|
-
children: /* @__PURE__ */
|
|
28
|
+
children: /* @__PURE__ */ D(c, { label: "Loading item…" })
|
|
28
29
|
});
|
|
29
|
-
if (
|
|
30
|
+
if (P.isError || !P.data) return /* @__PURE__ */ D(t, {
|
|
30
31
|
title: "Style item",
|
|
31
|
-
children: /* @__PURE__ */
|
|
32
|
+
children: /* @__PURE__ */ D(s, {
|
|
32
33
|
title: "Item not found",
|
|
33
|
-
onRetry: () => void
|
|
34
|
+
onRetry: () => void P.refetch()
|
|
34
35
|
})
|
|
35
36
|
});
|
|
36
|
-
let
|
|
37
|
-
return /* @__PURE__ */
|
|
38
|
-
title:
|
|
39
|
-
description:
|
|
40
|
-
actions: /* @__PURE__ */
|
|
37
|
+
let L = P.data, R = L.status === "RETIRED", z = (F.data?.items ?? []).filter((e) => e.items?.some((e) => e.styleItemId === L.id)).slice(0, 4);
|
|
38
|
+
return /* @__PURE__ */ O(t, {
|
|
39
|
+
title: L.name,
|
|
40
|
+
description: L.brand?.name ?? void 0,
|
|
41
|
+
actions: /* @__PURE__ */ O("div", {
|
|
41
42
|
className: "flex flex-wrap items-center gap-2",
|
|
42
43
|
children: [
|
|
43
|
-
/* @__PURE__ */
|
|
44
|
+
/* @__PURE__ */ O("button", {
|
|
44
45
|
type: "button",
|
|
45
|
-
onClick: () =>
|
|
46
|
+
onClick: () => N("/items"),
|
|
46
47
|
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",
|
|
47
|
-
children: [/* @__PURE__ */
|
|
48
|
+
children: [/* @__PURE__ */ D(b, { className: "h-4 w-4" }), " Back"]
|
|
48
49
|
}),
|
|
49
|
-
/* @__PURE__ */
|
|
50
|
-
/* @__PURE__ */
|
|
50
|
+
/* @__PURE__ */ D(u, { styleItemId: L.id }),
|
|
51
|
+
/* @__PURE__ */ O("button", {
|
|
51
52
|
type: "button",
|
|
52
|
-
onClick: () =>
|
|
53
|
+
onClick: () => N(`/items/${L.id}/edit`),
|
|
53
54
|
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",
|
|
54
|
-
children: [/* @__PURE__ */
|
|
55
|
+
children: [/* @__PURE__ */ D(C, { className: "h-4 w-4" }), " Edit"]
|
|
55
56
|
}),
|
|
56
|
-
!
|
|
57
|
+
!R && /* @__PURE__ */ O("button", {
|
|
57
58
|
type: "button",
|
|
58
|
-
disabled:
|
|
59
|
-
onClick: () =>
|
|
59
|
+
disabled: I.isPending,
|
|
60
|
+
onClick: () => I.mutate(L.id, { onSuccess: () => N("/items") }),
|
|
60
61
|
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",
|
|
61
|
-
children: [
|
|
62
|
+
children: [I.isPending ? /* @__PURE__ */ D(S, { className: "h-4 w-4 animate-spin" }) : /* @__PURE__ */ D(y, { className: "h-4 w-4" }), "Archive"]
|
|
62
63
|
})
|
|
63
64
|
]
|
|
64
65
|
}),
|
|
65
|
-
children: [/* @__PURE__ */
|
|
66
|
+
children: [/* @__PURE__ */ O("div", {
|
|
66
67
|
className: "grid grid-cols-1 gap-6 lg:grid-cols-3",
|
|
67
|
-
children: [/* @__PURE__ */
|
|
68
|
+
children: [/* @__PURE__ */ D("div", {
|
|
68
69
|
className: "lg:col-span-2",
|
|
69
|
-
children: /* @__PURE__ */
|
|
70
|
+
children: /* @__PURE__ */ O(k, {
|
|
70
71
|
treatment: "glass",
|
|
71
72
|
className: "group overflow-hidden p-0",
|
|
72
|
-
children: [/* @__PURE__ */
|
|
73
|
-
icon: h(
|
|
74
|
-
seed:
|
|
75
|
-
fileId:
|
|
76
|
-
alt:
|
|
73
|
+
children: [/* @__PURE__ */ D(l, {
|
|
74
|
+
icon: h(L.category, 48),
|
|
75
|
+
seed: L.id,
|
|
76
|
+
fileId: L.image?.id,
|
|
77
|
+
alt: L.name,
|
|
77
78
|
className: "aspect-[4/5] w-full"
|
|
78
|
-
}),
|
|
79
|
+
}), L.description && /* @__PURE__ */ D("div", {
|
|
79
80
|
className: "p-6",
|
|
80
|
-
children: /* @__PURE__ */
|
|
81
|
+
children: /* @__PURE__ */ D("p", {
|
|
81
82
|
className: "text-sm leading-relaxed text-text-secondary",
|
|
82
|
-
children:
|
|
83
|
+
children: L.description
|
|
83
84
|
})
|
|
84
85
|
})]
|
|
85
86
|
})
|
|
86
|
-
}), /* @__PURE__ */
|
|
87
|
+
}), /* @__PURE__ */ O("div", {
|
|
87
88
|
className: "space-y-4",
|
|
88
89
|
children: [
|
|
89
|
-
/* @__PURE__ */
|
|
90
|
+
/* @__PURE__ */ O(k, {
|
|
90
91
|
treatment: "glass",
|
|
91
92
|
className: "space-y-5 p-6",
|
|
92
93
|
children: [
|
|
93
|
-
/* @__PURE__ */
|
|
94
|
-
/* @__PURE__ */
|
|
94
|
+
/* @__PURE__ */ O("div", { children: [
|
|
95
|
+
/* @__PURE__ */ D("h2", {
|
|
95
96
|
className: "text-2xl font-semibold leading-tight text-text-primary",
|
|
96
|
-
children:
|
|
97
|
+
children: L.name
|
|
97
98
|
}),
|
|
98
|
-
|
|
99
|
+
L.brand && /* @__PURE__ */ O("button", {
|
|
99
100
|
type: "button",
|
|
100
|
-
onClick: () =>
|
|
101
|
+
onClick: () => N(`/brands/${L.brand?.id}`),
|
|
101
102
|
className: "mt-1 inline-flex items-center gap-0.5 text-sm font-medium text-action-primary-bg hover:underline",
|
|
102
|
-
children: [
|
|
103
|
+
children: [L.brand.name, /* @__PURE__ */ D(x, { className: "h-3.5 w-3.5" })]
|
|
103
104
|
}),
|
|
104
|
-
/* @__PURE__ */
|
|
105
|
+
/* @__PURE__ */ O("div", {
|
|
105
106
|
className: "mt-3 flex flex-wrap items-center justify-between gap-2",
|
|
106
|
-
children: [/* @__PURE__ */
|
|
107
|
+
children: [/* @__PURE__ */ O("p", {
|
|
107
108
|
className: "text-3xl font-bold text-text-primary tabular-nums",
|
|
108
|
-
children: [f(
|
|
109
|
+
children: [f(L.price, L.currency), /* @__PURE__ */ D("span", {
|
|
109
110
|
className: "ml-2 text-base font-medium text-text-secondary",
|
|
110
|
-
children:
|
|
111
|
+
children: L.currency
|
|
111
112
|
})]
|
|
112
|
-
}), /* @__PURE__ */
|
|
113
|
+
}), /* @__PURE__ */ D(o, { status: L.status })]
|
|
113
114
|
})
|
|
114
115
|
] }),
|
|
115
|
-
/* @__PURE__ */
|
|
116
|
-
|
|
116
|
+
/* @__PURE__ */ D("div", { className: "border-t border-border-seam" }),
|
|
117
|
+
L.colours.length > 0 && /* @__PURE__ */ O("div", { children: [/* @__PURE__ */ D("p", {
|
|
117
118
|
className: "mb-2 text-xs font-medium uppercase tracking-wide text-text-secondary",
|
|
118
119
|
children: "Colours"
|
|
119
|
-
}), /* @__PURE__ */
|
|
120
|
-
colours:
|
|
120
|
+
}), /* @__PURE__ */ D(_, {
|
|
121
|
+
colours: L.colours,
|
|
121
122
|
max: 12
|
|
122
123
|
})] }),
|
|
123
|
-
|
|
124
|
+
L.sizes.length > 0 && /* @__PURE__ */ O("div", { children: [/* @__PURE__ */ D("p", {
|
|
124
125
|
className: "mb-2 text-xs font-medium uppercase tracking-wide text-text-secondary",
|
|
125
126
|
children: "Size"
|
|
126
|
-
}), /* @__PURE__ */
|
|
127
|
+
}), /* @__PURE__ */ D("div", {
|
|
127
128
|
className: "flex flex-wrap gap-2",
|
|
128
|
-
children:
|
|
129
|
+
children: L.sizes.map((e) => /* @__PURE__ */ D("span", {
|
|
129
130
|
className: "inline-flex min-w-9 items-center justify-center rounded-full border border-border-seam px-3 py-1 text-sm font-medium text-text-primary",
|
|
130
131
|
children: e
|
|
131
132
|
}, e))
|
|
132
133
|
})] }),
|
|
133
|
-
|
|
134
|
+
/* @__PURE__ */ D("div", {
|
|
135
|
+
className: "border-t border-border-seam pt-5",
|
|
136
|
+
children: /* @__PURE__ */ D(v, {
|
|
137
|
+
item: L,
|
|
138
|
+
lookId: M
|
|
139
|
+
})
|
|
140
|
+
}),
|
|
141
|
+
L.materials.length > 0 && /* @__PURE__ */ O("div", { children: [/* @__PURE__ */ D("p", {
|
|
134
142
|
className: "mb-1 text-xs font-medium uppercase tracking-wide text-text-secondary",
|
|
135
143
|
children: "Materials"
|
|
136
|
-
}), /* @__PURE__ */
|
|
144
|
+
}), /* @__PURE__ */ D("p", {
|
|
137
145
|
className: "text-sm text-text-primary",
|
|
138
|
-
children:
|
|
146
|
+
children: L.materials.join(", ")
|
|
139
147
|
})] }),
|
|
140
|
-
|
|
148
|
+
L.tags.length > 0 && /* @__PURE__ */ O("div", { children: [/* @__PURE__ */ D("p", {
|
|
141
149
|
className: "mb-2 text-xs font-medium uppercase tracking-wide text-text-secondary",
|
|
142
150
|
children: "Tags"
|
|
143
|
-
}), /* @__PURE__ */
|
|
144
|
-
tags:
|
|
151
|
+
}), /* @__PURE__ */ D(g, {
|
|
152
|
+
tags: L.tags,
|
|
145
153
|
max: 12,
|
|
146
154
|
tone: "accent"
|
|
147
155
|
})] })
|
|
148
156
|
]
|
|
149
157
|
}),
|
|
150
|
-
/* @__PURE__ */
|
|
158
|
+
/* @__PURE__ */ O(k, {
|
|
151
159
|
treatment: "plain",
|
|
152
160
|
className: "p-5",
|
|
153
|
-
children: [/* @__PURE__ */
|
|
161
|
+
children: [/* @__PURE__ */ D("h3", {
|
|
154
162
|
className: "mb-3 text-sm font-semibold text-text-primary",
|
|
155
163
|
children: "Details"
|
|
156
|
-
}), /* @__PURE__ */
|
|
164
|
+
}), /* @__PURE__ */ O("dl", {
|
|
157
165
|
className: "space-y-2 text-sm",
|
|
158
166
|
children: [
|
|
159
|
-
/* @__PURE__ */
|
|
167
|
+
/* @__PURE__ */ O("div", {
|
|
160
168
|
className: "flex justify-between gap-2",
|
|
161
|
-
children: [/* @__PURE__ */
|
|
169
|
+
children: [/* @__PURE__ */ D("dt", {
|
|
162
170
|
className: "text-text-secondary",
|
|
163
171
|
children: "Category"
|
|
164
|
-
}), /* @__PURE__ */
|
|
172
|
+
}), /* @__PURE__ */ D("dd", {
|
|
165
173
|
className: "text-text-primary",
|
|
166
|
-
children: p(
|
|
174
|
+
children: p(L.category)
|
|
167
175
|
})]
|
|
168
176
|
}),
|
|
169
|
-
/* @__PURE__ */
|
|
177
|
+
/* @__PURE__ */ O("div", {
|
|
170
178
|
className: "flex justify-between gap-2",
|
|
171
|
-
children: [/* @__PURE__ */
|
|
179
|
+
children: [/* @__PURE__ */ D("dt", {
|
|
172
180
|
className: "text-text-secondary",
|
|
173
181
|
children: "SKU"
|
|
174
|
-
}), /* @__PURE__ */
|
|
182
|
+
}), /* @__PURE__ */ D("dd", {
|
|
175
183
|
className: "text-text-primary",
|
|
176
|
-
children:
|
|
184
|
+
children: L.sku ?? "—"
|
|
177
185
|
})]
|
|
178
186
|
}),
|
|
179
|
-
/* @__PURE__ */
|
|
187
|
+
/* @__PURE__ */ O("div", {
|
|
180
188
|
className: "flex justify-between gap-2",
|
|
181
|
-
children: [/* @__PURE__ */
|
|
189
|
+
children: [/* @__PURE__ */ D("dt", {
|
|
182
190
|
className: "text-text-secondary",
|
|
183
191
|
children: "Currency"
|
|
184
|
-
}), /* @__PURE__ */
|
|
192
|
+
}), /* @__PURE__ */ D("dd", {
|
|
185
193
|
className: "text-text-primary",
|
|
186
|
-
children:
|
|
194
|
+
children: L.currency
|
|
187
195
|
})]
|
|
188
196
|
}),
|
|
189
|
-
/* @__PURE__ */
|
|
197
|
+
/* @__PURE__ */ O("div", {
|
|
190
198
|
className: "flex justify-between gap-2",
|
|
191
|
-
children: [/* @__PURE__ */
|
|
199
|
+
children: [/* @__PURE__ */ D("dt", {
|
|
192
200
|
className: "text-text-secondary",
|
|
193
201
|
children: "Created"
|
|
194
|
-
}), /* @__PURE__ */
|
|
202
|
+
}), /* @__PURE__ */ D("dd", {
|
|
195
203
|
className: "text-text-primary",
|
|
196
|
-
children: d(
|
|
204
|
+
children: d(L.createdAt, {
|
|
197
205
|
hour: void 0,
|
|
198
206
|
minute: void 0
|
|
199
207
|
})
|
|
@@ -202,20 +210,20 @@ function O() {
|
|
|
202
210
|
]
|
|
203
211
|
})]
|
|
204
212
|
}),
|
|
205
|
-
|
|
213
|
+
L.collection && /* @__PURE__ */ O("button", {
|
|
206
214
|
type: "button",
|
|
207
|
-
onClick: () =>
|
|
215
|
+
onClick: () => N(`/collections/${L.collection?.id}`),
|
|
208
216
|
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",
|
|
209
|
-
children: [/* @__PURE__ */
|
|
210
|
-
icon: /* @__PURE__ */
|
|
211
|
-
seed:
|
|
217
|
+
children: [/* @__PURE__ */ D(l, {
|
|
218
|
+
icon: /* @__PURE__ */ D(w, { className: "h-5 w-5" }),
|
|
219
|
+
seed: L.collection.id,
|
|
212
220
|
className: "h-10 w-10 shrink-0"
|
|
213
|
-
}), /* @__PURE__ */
|
|
221
|
+
}), /* @__PURE__ */ O("div", {
|
|
214
222
|
className: "min-w-0",
|
|
215
|
-
children: [/* @__PURE__ */
|
|
223
|
+
children: [/* @__PURE__ */ D("p", {
|
|
216
224
|
className: "truncate text-sm font-medium text-text-primary",
|
|
217
|
-
children:
|
|
218
|
-
}), /* @__PURE__ */
|
|
225
|
+
children: L.collection.name
|
|
226
|
+
}), /* @__PURE__ */ D("p", {
|
|
219
227
|
className: "truncate text-xs text-text-secondary",
|
|
220
228
|
children: "View collection"
|
|
221
229
|
})]
|
|
@@ -223,28 +231,28 @@ function O() {
|
|
|
223
231
|
})
|
|
224
232
|
]
|
|
225
233
|
})]
|
|
226
|
-
}), /* @__PURE__ */
|
|
234
|
+
}), /* @__PURE__ */ O("section", {
|
|
227
235
|
className: "mt-8",
|
|
228
|
-
children: [/* @__PURE__ */
|
|
236
|
+
children: [/* @__PURE__ */ O("div", {
|
|
229
237
|
className: "mb-3 flex items-center justify-between gap-3",
|
|
230
|
-
children: [/* @__PURE__ */
|
|
238
|
+
children: [/* @__PURE__ */ D("h3", {
|
|
231
239
|
className: "text-lg font-semibold text-text-primary",
|
|
232
240
|
children: "Appears in looks"
|
|
233
|
-
}),
|
|
241
|
+
}), z.length > 0 && /* @__PURE__ */ O("button", {
|
|
234
242
|
type: "button",
|
|
235
|
-
onClick: () =>
|
|
243
|
+
onClick: () => N("/looks"),
|
|
236
244
|
className: "inline-flex items-center gap-1 text-sm font-medium text-action-primary-bg hover:underline",
|
|
237
|
-
children: ["View all ", /* @__PURE__ */
|
|
245
|
+
children: ["View all ", /* @__PURE__ */ D(x, { className: "h-3.5 w-3.5" })]
|
|
238
246
|
})]
|
|
239
|
-
}),
|
|
247
|
+
}), F.isLoading ? /* @__PURE__ */ O("div", {
|
|
240
248
|
className: "flex items-center gap-2 rounded-lg border border-border-seam bg-bg-surface p-4 text-sm text-text-secondary",
|
|
241
|
-
children: [/* @__PURE__ */
|
|
242
|
-
}) :
|
|
249
|
+
children: [/* @__PURE__ */ D(S, { className: "h-4 w-4 animate-spin" }), " Loading referenced looks…"]
|
|
250
|
+
}) : z.length === 0 ? /* @__PURE__ */ D("p", {
|
|
243
251
|
className: "rounded-lg border border-border-seam bg-bg-surface p-4 text-sm text-text-secondary",
|
|
244
252
|
children: "This piece has not been tagged in any looks yet."
|
|
245
|
-
}) : /* @__PURE__ */
|
|
253
|
+
}) : /* @__PURE__ */ D("div", {
|
|
246
254
|
className: "grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-4",
|
|
247
|
-
children:
|
|
255
|
+
children: z.map((e) => /* @__PURE__ */ D(m, {
|
|
248
256
|
id: e.id,
|
|
249
257
|
title: e.title,
|
|
250
258
|
occasion: e.occasion,
|
|
@@ -252,7 +260,7 @@ function O() {
|
|
|
252
260
|
likeCount: e.likeCount,
|
|
253
261
|
isLikedByMe: e.isLikedByMe,
|
|
254
262
|
isSavedByMe: e.isSavedByMe,
|
|
255
|
-
onOpen: () =>
|
|
263
|
+
onOpen: () => N(`/looks/${e.id}`),
|
|
256
264
|
showActions: !0
|
|
257
265
|
}, e.id))
|
|
258
266
|
})]
|
|
@@ -260,6 +268,6 @@ function O() {
|
|
|
260
268
|
});
|
|
261
269
|
}
|
|
262
270
|
//#endregion
|
|
263
|
-
export {
|
|
271
|
+
export { A as StyleItemDetailPage };
|
|
264
272
|
|
|
265
273
|
//# sourceMappingURL=StyleItemDetailPage.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StyleItemDetailPage.js","names":[],"sources":["../../../../src/coolandlovely/pages/items/StyleItemDetailPage.tsx"],"sourcesContent":["/**\n * Style Item Detail Page\n * @module coolandlovely/pages/items\n *\n * Renders a single catalogue piece (`cooStyleItem`) with edit + archive\n * (`cooArchiveStyleItem`) actions.\n */\n\nimport { useParams } from 'react-router';\nimport { ArrowLeft, Pencil, Archive, Loader2, ChevronRight, Shapes } from 'lucide-react';\nimport { GlassCard } from '@burdenoff/fe-libs/ui';\nimport { PageLayout } from '../../components/PageLayout';\nimport { StatusBadge } from '../../components/StatusBadge';\nimport { LoadingView, ErrorView } from '../../components/StateViews';\nimport { Thumbnail } from '../../components/Thumbnail';\nimport { LookCard } from '../../components/LookCard';\nimport { TagList } from '../../components/TagList';\nimport { ColourSwatchRow } from '../../components/ColourSwatchRow';\nimport { AddToLookbookButton } from '../../components/AddToLookbookButton';\nimport { useCoolAndLovely } from '../../context/CoolAndLovelyContext';\nimport {\n useAssistantEntityName,\n useStyleItem,\n useArchiveStyleItem,\n useLooksWithItems,\n} from '../../hooks';\nimport { categoryIcon } from '../../utils/icons';\nimport { formatPrice, formatDate, titleCase } from '../../utils/formatters';\n\nexport function StyleItemDetailPage() {\n const { itemId } = useParams<{ itemId: string }>();\n const { navigateTo } = useCoolAndLovely();\n const query = useStyleItem(itemId);\n const looksQuery = useLooksWithItems({ pagination: { limit: 100, offset: 0 } });\n const archive = useArchiveStyleItem();\n // Name the piece for the assistant's screen context (see useAssistantEntity).\n useAssistantEntityName(itemId, query.data?.name);\n\n if (query.isLoading) {\n return (\n <PageLayout title=\"Style item\">\n <LoadingView label=\"Loading item…\" />\n </PageLayout>\n );\n }\n\n if (query.isError || !query.data) {\n return (\n <PageLayout title=\"Style item\">\n <ErrorView title=\"Item not found\" onRetry={() => void query.refetch()} />\n </PageLayout>\n );\n }\n\n const item = query.data;\n const isArchived = item.status === 'RETIRED';\n const appearsInLooks = (looksQuery.data?.items ?? [])\n .filter((look) => look.items?.some((lookItem) => lookItem.styleItemId === item.id))\n .slice(0, 4);\n\n return (\n <PageLayout\n title={item.name}\n description={item.brand?.name ?? undefined}\n actions={\n <div className=\"flex flex-wrap items-center gap-2\">\n <button\n type=\"button\"\n onClick={() => navigateTo('/items')}\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 styleItemId={item.id} />\n <button\n type=\"button\"\n onClick={() => navigateTo(`/items/${item.id}/edit`)}\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\"\n >\n <Pencil className=\"h-4 w-4\" /> Edit\n </button>\n {!isArchived && (\n <button\n type=\"button\"\n disabled={archive.isPending}\n onClick={() => archive.mutate(item.id, { onSuccess: () => navigateTo('/items') })}\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 {archive.isPending ? (\n <Loader2 className=\"h-4 w-4 animate-spin\" />\n ) : (\n <Archive className=\"h-4 w-4\" />\n )}\n Archive\n </button>\n )}\n </div>\n }\n >\n <div className=\"grid grid-cols-1 gap-6 lg:grid-cols-3\">\n {/* Product image */}\n <div className=\"lg:col-span-2\">\n <GlassCard treatment=\"glass\" className=\"group overflow-hidden p-0\">\n <Thumbnail\n icon={categoryIcon(item.category, 48)}\n seed={item.id}\n fileId={item.image?.id}\n alt={item.name}\n className=\"aspect-[4/5] w-full\"\n />\n {item.description && (\n <div className=\"p-6\">\n <p className=\"text-sm leading-relaxed text-text-secondary\">{item.description}</p>\n </div>\n )}\n </GlassCard>\n </div>\n\n {/* Product panel */}\n <div className=\"space-y-4\">\n <GlassCard treatment=\"glass\" className=\"space-y-5 p-6\">\n <div>\n <h2 className=\"text-2xl font-semibold leading-tight text-text-primary\">\n {item.name}\n </h2>\n {item.brand && (\n <button\n type=\"button\"\n onClick={() => navigateTo(`/brands/${item.brand?.id}`)}\n className=\"mt-1 inline-flex items-center gap-0.5 text-sm font-medium text-action-primary-bg hover:underline\"\n >\n {item.brand.name}\n <ChevronRight className=\"h-3.5 w-3.5\" />\n </button>\n )}\n <div className=\"mt-3 flex flex-wrap items-center justify-between gap-2\">\n <p className=\"text-3xl font-bold text-text-primary tabular-nums\">\n {formatPrice(item.price, item.currency)}\n <span className=\"ml-2 text-base font-medium text-text-secondary\">\n {item.currency}\n </span>\n </p>\n <StatusBadge status={item.status} />\n </div>\n </div>\n\n <div className=\"border-t border-border-seam\" />\n\n {item.colours.length > 0 && (\n <div>\n <p className=\"mb-2 text-xs font-medium uppercase tracking-wide text-text-secondary\">\n Colours\n </p>\n <ColourSwatchRow colours={item.colours} max={12} />\n </div>\n )}\n\n {item.sizes.length > 0 && (\n <div>\n <p className=\"mb-2 text-xs font-medium uppercase tracking-wide text-text-secondary\">\n Size\n </p>\n <div className=\"flex flex-wrap gap-2\">\n {item.sizes.map((size) => (\n <span\n key={size}\n className=\"inline-flex min-w-9 items-center justify-center rounded-full border border-border-seam px-3 py-1 text-sm font-medium text-text-primary\"\n >\n {size}\n </span>\n ))}\n </div>\n </div>\n )}\n\n {item.materials.length > 0 && (\n <div>\n <p className=\"mb-1 text-xs font-medium uppercase tracking-wide text-text-secondary\">\n Materials\n </p>\n <p className=\"text-sm text-text-primary\">{item.materials.join(', ')}</p>\n </div>\n )}\n\n {item.tags.length > 0 && (\n <div>\n <p className=\"mb-2 text-xs font-medium uppercase tracking-wide text-text-secondary\">\n Tags\n </p>\n <TagList tags={item.tags} max={12} tone=\"accent\" />\n </div>\n )}\n </GlassCard>\n\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\">Category</dt>\n <dd className=\"text-text-primary\">{titleCase(item.category)}</dd>\n </div>\n <div className=\"flex justify-between gap-2\">\n <dt className=\"text-text-secondary\">SKU</dt>\n <dd className=\"text-text-primary\">{item.sku ?? '—'}</dd>\n </div>\n <div className=\"flex justify-between gap-2\">\n <dt className=\"text-text-secondary\">Currency</dt>\n <dd className=\"text-text-primary\">{item.currency}</dd>\n </div>\n <div className=\"flex justify-between gap-2\">\n <dt className=\"text-text-secondary\">Created</dt>\n <dd className=\"text-text-primary\">\n {formatDate(item.createdAt, { hour: undefined, minute: undefined })}\n </dd>\n </div>\n </dl>\n </GlassCard>\n\n {item.collection && (\n <button\n type=\"button\"\n onClick={() => navigateTo(`/collections/${item.collection?.id}`)}\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 <Thumbnail\n icon={<Shapes className=\"h-5 w-5\" />}\n seed={item.collection.id}\n className=\"h-10 w-10 shrink-0\"\n />\n <div className=\"min-w-0\">\n <p className=\"truncate text-sm font-medium text-text-primary\">\n {item.collection.name}\n </p>\n <p className=\"truncate text-xs text-text-secondary\">View collection</p>\n </div>\n </button>\n )}\n </div>\n </div>\n\n <section className=\"mt-8\">\n <div className=\"mb-3 flex items-center justify-between gap-3\">\n <h3 className=\"text-lg font-semibold text-text-primary\">Appears in looks</h3>\n {appearsInLooks.length > 0 && (\n <button\n type=\"button\"\n onClick={() => navigateTo('/looks')}\n className=\"inline-flex items-center gap-1 text-sm font-medium text-action-primary-bg hover:underline\"\n >\n View all <ChevronRight className=\"h-3.5 w-3.5\" />\n </button>\n )}\n </div>\n {looksQuery.isLoading ? (\n <div className=\"flex items-center gap-2 rounded-lg border border-border-seam bg-bg-surface p-4 text-sm text-text-secondary\">\n <Loader2 className=\"h-4 w-4 animate-spin\" /> Loading referenced looks…\n </div>\n ) : appearsInLooks.length === 0 ? (\n <p className=\"rounded-lg border border-border-seam bg-bg-surface p-4 text-sm text-text-secondary\">\n This piece has not been tagged in any looks yet.\n </p>\n ) : (\n <div className=\"grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-4\">\n {appearsInLooks.map((look) => (\n <LookCard\n key={look.id}\n id={look.id}\n title={look.title}\n occasion={look.occasion}\n imageFileId={look.image?.id}\n likeCount={look.likeCount}\n isLikedByMe={look.isLikedByMe}\n isSavedByMe={look.isSavedByMe}\n onOpen={() => navigateTo(`/looks/${look.id}`)}\n showActions\n />\n ))}\n </div>\n )}\n </section>\n </PageLayout>\n );\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"StyleItemDetailPage.js","names":[],"sources":["../../../../src/coolandlovely/pages/items/StyleItemDetailPage.tsx"],"sourcesContent":["/**\n * Style Item Detail Page\n * @module coolandlovely/pages/items\n *\n * Renders a single catalogue piece (`cooStyleItem`) with edit + archive\n * (`cooArchiveStyleItem`) actions.\n */\n\nimport { useParams, useSearchParams } from 'react-router';\nimport { ArrowLeft, Pencil, Archive, Loader2, ChevronRight, Shapes } from 'lucide-react';\nimport { GlassCard } from '@burdenoff/fe-libs/ui';\nimport { PageLayout } from '../../components/PageLayout';\nimport { StatusBadge } from '../../components/StatusBadge';\nimport { LoadingView, ErrorView } from '../../components/StateViews';\nimport { Thumbnail } from '../../components/Thumbnail';\nimport { LookCard } from '../../components/LookCard';\nimport { TagList } from '../../components/TagList';\nimport { ColourSwatchRow } from '../../components/ColourSwatchRow';\nimport { AddToLookbookButton } from '../../components/AddToLookbookButton';\nimport { AddToCartPanel } from '../../components/AddToCartPanel';\nimport { useCoolAndLovely } from '../../context/CoolAndLovelyContext';\nimport {\n useAssistantEntityName,\n useStyleItem,\n useArchiveStyleItem,\n useLooksWithItems,\n} from '../../hooks';\nimport { categoryIcon } from '../../utils/icons';\nimport { formatPrice, formatDate, titleCase } from '../../utils/formatters';\n\nexport function StyleItemDetailPage() {\n const { itemId } = useParams<{ itemId: string }>();\n // \"Shop the look\" links carry the look id so the look's creator earns the commission.\n const [searchParams] = useSearchParams();\n const fromLookId = searchParams.get('look');\n const { navigateTo } = useCoolAndLovely();\n const query = useStyleItem(itemId);\n const looksQuery = useLooksWithItems({ pagination: { limit: 100, offset: 0 } });\n const archive = useArchiveStyleItem();\n // Name the piece for the assistant's screen context (see useAssistantEntity).\n useAssistantEntityName(itemId, query.data?.name);\n\n if (query.isLoading) {\n return (\n <PageLayout title=\"Style item\">\n <LoadingView label=\"Loading item…\" />\n </PageLayout>\n );\n }\n\n if (query.isError || !query.data) {\n return (\n <PageLayout title=\"Style item\">\n <ErrorView title=\"Item not found\" onRetry={() => void query.refetch()} />\n </PageLayout>\n );\n }\n\n const item = query.data;\n const isArchived = item.status === 'RETIRED';\n const appearsInLooks = (looksQuery.data?.items ?? [])\n .filter((look) => look.items?.some((lookItem) => lookItem.styleItemId === item.id))\n .slice(0, 4);\n\n return (\n <PageLayout\n title={item.name}\n description={item.brand?.name ?? undefined}\n actions={\n <div className=\"flex flex-wrap items-center gap-2\">\n <button\n type=\"button\"\n onClick={() => navigateTo('/items')}\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 styleItemId={item.id} />\n <button\n type=\"button\"\n onClick={() => navigateTo(`/items/${item.id}/edit`)}\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\"\n >\n <Pencil className=\"h-4 w-4\" /> Edit\n </button>\n {!isArchived && (\n <button\n type=\"button\"\n disabled={archive.isPending}\n onClick={() => archive.mutate(item.id, { onSuccess: () => navigateTo('/items') })}\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 {archive.isPending ? (\n <Loader2 className=\"h-4 w-4 animate-spin\" />\n ) : (\n <Archive className=\"h-4 w-4\" />\n )}\n Archive\n </button>\n )}\n </div>\n }\n >\n <div className=\"grid grid-cols-1 gap-6 lg:grid-cols-3\">\n {/* Product image */}\n <div className=\"lg:col-span-2\">\n <GlassCard treatment=\"glass\" className=\"group overflow-hidden p-0\">\n <Thumbnail\n icon={categoryIcon(item.category, 48)}\n seed={item.id}\n fileId={item.image?.id}\n alt={item.name}\n className=\"aspect-[4/5] w-full\"\n />\n {item.description && (\n <div className=\"p-6\">\n <p className=\"text-sm leading-relaxed text-text-secondary\">{item.description}</p>\n </div>\n )}\n </GlassCard>\n </div>\n\n {/* Product panel */}\n <div className=\"space-y-4\">\n <GlassCard treatment=\"glass\" className=\"space-y-5 p-6\">\n <div>\n <h2 className=\"text-2xl font-semibold leading-tight text-text-primary\">\n {item.name}\n </h2>\n {item.brand && (\n <button\n type=\"button\"\n onClick={() => navigateTo(`/brands/${item.brand?.id}`)}\n className=\"mt-1 inline-flex items-center gap-0.5 text-sm font-medium text-action-primary-bg hover:underline\"\n >\n {item.brand.name}\n <ChevronRight className=\"h-3.5 w-3.5\" />\n </button>\n )}\n <div className=\"mt-3 flex flex-wrap items-center justify-between gap-2\">\n <p className=\"text-3xl font-bold text-text-primary tabular-nums\">\n {formatPrice(item.price, item.currency)}\n <span className=\"ml-2 text-base font-medium text-text-secondary\">\n {item.currency}\n </span>\n </p>\n <StatusBadge status={item.status} />\n </div>\n </div>\n\n <div className=\"border-t border-border-seam\" />\n\n {item.colours.length > 0 && (\n <div>\n <p className=\"mb-2 text-xs font-medium uppercase tracking-wide text-text-secondary\">\n Colours\n </p>\n <ColourSwatchRow colours={item.colours} max={12} />\n </div>\n )}\n\n {item.sizes.length > 0 && (\n <div>\n <p className=\"mb-2 text-xs font-medium uppercase tracking-wide text-text-secondary\">\n Size\n </p>\n <div className=\"flex flex-wrap gap-2\">\n {item.sizes.map((size) => (\n <span\n key={size}\n className=\"inline-flex min-w-9 items-center justify-center rounded-full border border-border-seam px-3 py-1 text-sm font-medium text-text-primary\"\n >\n {size}\n </span>\n ))}\n </div>\n </div>\n )}\n\n <div className=\"border-t border-border-seam pt-5\">\n <AddToCartPanel item={item} lookId={fromLookId} />\n </div>\n\n {item.materials.length > 0 && (\n <div>\n <p className=\"mb-1 text-xs font-medium uppercase tracking-wide text-text-secondary\">\n Materials\n </p>\n <p className=\"text-sm text-text-primary\">{item.materials.join(', ')}</p>\n </div>\n )}\n\n {item.tags.length > 0 && (\n <div>\n <p className=\"mb-2 text-xs font-medium uppercase tracking-wide text-text-secondary\">\n Tags\n </p>\n <TagList tags={item.tags} max={12} tone=\"accent\" />\n </div>\n )}\n </GlassCard>\n\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\">Category</dt>\n <dd className=\"text-text-primary\">{titleCase(item.category)}</dd>\n </div>\n <div className=\"flex justify-between gap-2\">\n <dt className=\"text-text-secondary\">SKU</dt>\n <dd className=\"text-text-primary\">{item.sku ?? '—'}</dd>\n </div>\n <div className=\"flex justify-between gap-2\">\n <dt className=\"text-text-secondary\">Currency</dt>\n <dd className=\"text-text-primary\">{item.currency}</dd>\n </div>\n <div className=\"flex justify-between gap-2\">\n <dt className=\"text-text-secondary\">Created</dt>\n <dd className=\"text-text-primary\">\n {formatDate(item.createdAt, { hour: undefined, minute: undefined })}\n </dd>\n </div>\n </dl>\n </GlassCard>\n\n {item.collection && (\n <button\n type=\"button\"\n onClick={() => navigateTo(`/collections/${item.collection?.id}`)}\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 <Thumbnail\n icon={<Shapes className=\"h-5 w-5\" />}\n seed={item.collection.id}\n className=\"h-10 w-10 shrink-0\"\n />\n <div className=\"min-w-0\">\n <p className=\"truncate text-sm font-medium text-text-primary\">\n {item.collection.name}\n </p>\n <p className=\"truncate text-xs text-text-secondary\">View collection</p>\n </div>\n </button>\n )}\n </div>\n </div>\n\n <section className=\"mt-8\">\n <div className=\"mb-3 flex items-center justify-between gap-3\">\n <h3 className=\"text-lg font-semibold text-text-primary\">Appears in looks</h3>\n {appearsInLooks.length > 0 && (\n <button\n type=\"button\"\n onClick={() => navigateTo('/looks')}\n className=\"inline-flex items-center gap-1 text-sm font-medium text-action-primary-bg hover:underline\"\n >\n View all <ChevronRight className=\"h-3.5 w-3.5\" />\n </button>\n )}\n </div>\n {looksQuery.isLoading ? (\n <div className=\"flex items-center gap-2 rounded-lg border border-border-seam bg-bg-surface p-4 text-sm text-text-secondary\">\n <Loader2 className=\"h-4 w-4 animate-spin\" /> Loading referenced looks…\n </div>\n ) : appearsInLooks.length === 0 ? (\n <p className=\"rounded-lg border border-border-seam bg-bg-surface p-4 text-sm text-text-secondary\">\n This piece has not been tagged in any looks yet.\n </p>\n ) : (\n <div className=\"grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-4\">\n {appearsInLooks.map((look) => (\n <LookCard\n key={look.id}\n id={look.id}\n title={look.title}\n occasion={look.occasion}\n imageFileId={look.image?.id}\n likeCount={look.likeCount}\n isLikedByMe={look.isLikedByMe}\n isSavedByMe={look.isSavedByMe}\n onOpen={() => navigateTo(`/looks/${look.id}`)}\n showActions\n />\n ))}\n </div>\n )}\n </section>\n </PageLayout>\n );\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Style Item Create / Edit Page
|
|
3
|
+
* @module coolandlovely/pages/items
|
|
4
|
+
*
|
|
5
|
+
* Drives `cooCreateStyleItem` (new) and `cooUpdateStyleItem` (edit).
|
|
6
|
+
* Brand selection is required on create (and locked on edit). The collection
|
|
7
|
+
* select is scoped to the chosen brand.
|
|
8
|
+
*/
|
|
9
|
+
export declare function StyleItemFormPage(): import("react").JSX.Element;
|
|
10
|
+
//# sourceMappingURL=StyleItemFormPage.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StyleItemFormPage.d.ts","sourceRoot":"","sources":["../../../../src/coolandlovely/pages/items/StyleItemFormPage.tsx"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAuDH,wBAAgB,iBAAiB,gCAwThC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Style Items List Page
|
|
3
|
+
* @module coolandlovely/pages/items
|
|
4
|
+
*
|
|
5
|
+
* Cursor-paginated catalogue (`cooListStyleItems`) with category & status
|
|
6
|
+
* filters. Cards link to the item detail page.
|
|
7
|
+
*/
|
|
8
|
+
export declare function StyleItemsListPage(): import("react").JSX.Element;
|
|
9
|
+
//# sourceMappingURL=StyleItemsListPage.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StyleItemsListPage.d.ts","sourceRoot":"","sources":["../../../../src/coolandlovely/pages/items/StyleItemsListPage.tsx"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAwBH,wBAAgB,kBAAkB,gCAqMjC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Lookbook Detail Page
|
|
3
|
+
* @module coolandlovely/pages/lookbooks
|
|
4
|
+
*
|
|
5
|
+
* Single lookbook (`cooLookbook`) rendered as a Pinterest-style masonry board.
|
|
6
|
+
* Each entry's `lookId` / `styleItemId` is resolved client-side against the
|
|
7
|
+
* already-fetched looks/items lists to a real title + image, with an optional
|
|
8
|
+
* note badge and a hover X-remove (`cooRemoveLookbookEntry`). New entries are
|
|
9
|
+
* added inline (`cooAddLookbookEntry`).
|
|
10
|
+
*/
|
|
11
|
+
export declare function LookbookDetailPage(): import("react").JSX.Element;
|
|
12
|
+
//# sourceMappingURL=LookbookDetailPage.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LookbookDetailPage.d.ts","sourceRoot":"","sources":["../../../../src/coolandlovely/pages/lookbooks/LookbookDetailPage.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AA6BH,wBAAgB,kBAAkB,gCAsSjC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Lookbooks List Page
|
|
3
|
+
* @module coolandlovely/pages/lookbooks
|
|
4
|
+
*
|
|
5
|
+
* Lists themed lookbook boards (`cooListLookbooks`) as mood-board cards — a
|
|
6
|
+
* cover, a visibility chip and (when the list selection carries entries) an
|
|
7
|
+
* item count — and supports creating one inline (`cooCreateLookbook`).
|
|
8
|
+
*/
|
|
9
|
+
export declare function LookbooksListPage(): import("react").JSX.Element;
|
|
10
|
+
//# sourceMappingURL=LookbooksListPage.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LookbooksListPage.d.ts","sourceRoot":"","sources":["../../../../src/coolandlovely/pages/lookbooks/LookbooksListPage.tsx"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAmBH,wBAAgB,iBAAiB,gCAwLhC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Look Detail Page
|
|
3
|
+
* @module coolandlovely/pages/looks
|
|
4
|
+
*
|
|
5
|
+
* Single look (`cooLook`) with its look items, a true-toggle like
|
|
6
|
+
* (`cooLikeLook` / `cooUnlikeLook`), a true-toggle save (`cooSaveLook` /
|
|
7
|
+
* `cooUnsaveLook`), publish (`cooPublishLook`) and delete (`cooDeleteLook`)
|
|
8
|
+
* actions.
|
|
9
|
+
*/
|
|
10
|
+
export declare function LookDetailPage(): import("react").JSX.Element;
|
|
11
|
+
//# sourceMappingURL=LookDetailPage.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LookDetailPage.d.ts","sourceRoot":"","sources":["../../../../src/coolandlovely/pages/looks/LookDetailPage.tsx"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAwFH,wBAAgB,cAAc,gCA6R7B"}
|
|
@@ -210,7 +210,7 @@ function B() {
|
|
|
210
210
|
price: e.styleItem.price,
|
|
211
211
|
currency: e.styleItem.currency,
|
|
212
212
|
imageFileId: e.styleItem.image?.id,
|
|
213
|
-
onOpen: () => w(`/items/${e.styleItem?.id}`)
|
|
213
|
+
onOpen: () => w(`/items/${e.styleItem?.id}?look=${q.id}`)
|
|
214
214
|
}, e.id) : /* @__PURE__ */ F("div", {
|
|
215
215
|
className: "flex flex-col justify-center rounded-xl border border-border-seam bg-bg-surface p-4",
|
|
216
216
|
children: [/* @__PURE__ */ P("p", {
|