@burdenoff/microfe-coolandlovely 2026.1101.8 → 2026.1102.1
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/components/WardrobeItemCard.d.ts +2 -1
- package/dist/coolandlovely/components/WardrobeItemCard.d.ts.map +1 -1
- package/dist/coolandlovely/components/WardrobeItemCard.js +4 -3
- package/dist/coolandlovely/components/WardrobeItemCard.js.map +1 -1
- package/dist/coolandlovely/components/prices/BestPriceBadge.d.ts +7 -0
- package/dist/coolandlovely/components/prices/BestPriceBadge.d.ts.map +1 -0
- package/dist/coolandlovely/components/prices/BestPriceBadge.js +22 -0
- package/dist/coolandlovely/components/prices/BestPriceBadge.js.map +1 -0
- package/dist/coolandlovely/components/prices/LookbookPriceBoard.d.ts +10 -0
- package/dist/coolandlovely/components/prices/LookbookPriceBoard.d.ts.map +1 -0
- package/dist/coolandlovely/components/prices/LookbookPriceBoard.js +120 -0
- package/dist/coolandlovely/components/prices/LookbookPriceBoard.js.map +1 -0
- package/dist/coolandlovely/components/prices/PriceComparison.d.ts +5 -0
- package/dist/coolandlovely/components/prices/PriceComparison.d.ts.map +1 -0
- package/dist/coolandlovely/components/prices/PriceComparison.js +95 -0
- package/dist/coolandlovely/components/prices/PriceComparison.js.map +1 -0
- package/dist/coolandlovely/components/prices/PriceCurrencySelect.d.ts +6 -0
- package/dist/coolandlovely/components/prices/PriceCurrencySelect.d.ts.map +1 -0
- package/dist/coolandlovely/components/prices/PriceCurrencySelect.js +38 -0
- package/dist/coolandlovely/components/prices/PriceCurrencySelect.js.map +1 -0
- package/dist/coolandlovely/components/prices/PricePanel.d.ts +6 -0
- package/dist/coolandlovely/components/prices/PricePanel.d.ts.map +1 -0
- package/dist/coolandlovely/components/prices/PricePanel.js +105 -0
- package/dist/coolandlovely/components/prices/PricePanel.js.map +1 -0
- package/dist/coolandlovely/components/prices/PriceWatchDisclosure.d.ts +2 -0
- package/dist/coolandlovely/components/prices/PriceWatchDisclosure.d.ts.map +1 -0
- package/dist/coolandlovely/components/prices/PriceWatchDisclosure.js +28 -0
- package/dist/coolandlovely/components/prices/PriceWatchDisclosure.js.map +1 -0
- package/dist/coolandlovely/components/prices/PriceWatchForm.d.ts +5 -0
- package/dist/coolandlovely/components/prices/PriceWatchForm.d.ts.map +1 -0
- package/dist/coolandlovely/components/prices/PriceWatchForm.js +89 -0
- package/dist/coolandlovely/components/prices/PriceWatchForm.js.map +1 -0
- package/dist/coolandlovely/components/prices/PriceWatches.d.ts +3 -0
- package/dist/coolandlovely/components/prices/PriceWatches.d.ts.map +1 -0
- package/dist/coolandlovely/components/prices/PriceWatches.js +189 -0
- package/dist/coolandlovely/components/prices/PriceWatches.js.map +1 -0
- package/dist/coolandlovely/components/prices/RetailerOfferLink.d.ts +6 -0
- package/dist/coolandlovely/components/prices/RetailerOfferLink.d.ts.map +1 -0
- package/dist/coolandlovely/components/prices/RetailerOfferLink.js +28 -0
- package/dist/coolandlovely/components/prices/RetailerOfferLink.js.map +1 -0
- package/dist/coolandlovely/components/prices/money.d.ts +6 -0
- package/dist/coolandlovely/components/prices/money.d.ts.map +1 -0
- package/dist/coolandlovely/components/prices/money.js +42 -0
- package/dist/coolandlovely/components/prices/money.js.map +1 -0
- package/dist/coolandlovely/hooks/usePriceApi.d.ts +57 -0
- package/dist/coolandlovely/hooks/usePriceApi.d.ts.map +1 -0
- package/dist/coolandlovely/hooks/usePriceApi.js +111 -0
- package/dist/coolandlovely/hooks/usePriceApi.js.map +1 -0
- package/dist/coolandlovely/pages/items/StoreListedPieceView.d.ts.map +1 -1
- package/dist/coolandlovely/pages/items/StoreListedPieceView.js +130 -123
- package/dist/coolandlovely/pages/items/StoreListedPieceView.js.map +1 -1
- package/dist/coolandlovely/pages/items/StyleItemDetailPage.d.ts.map +1 -1
- package/dist/coolandlovely/pages/items/StyleItemDetailPage.js +241 -230
- package/dist/coolandlovely/pages/items/StyleItemDetailPage.js.map +1 -1
- package/dist/coolandlovely/pages/lookbooks/LookbookDetailPage.d.ts.map +1 -1
- package/dist/coolandlovely/pages/lookbooks/LookbookDetailPage.js +64 -119
- package/dist/coolandlovely/pages/lookbooks/LookbookDetailPage.js.map +1 -1
- package/dist/coolandlovely/pages/profile/StyleProfilePage.d.ts.map +1 -1
- package/dist/coolandlovely/pages/profile/StyleProfilePage.js +214 -209
- package/dist/coolandlovely/pages/profile/StyleProfilePage.js.map +1 -1
- package/dist/coolandlovely/pages/wardrobe/WardrobeListPage.d.ts.map +1 -1
- package/dist/coolandlovely/pages/wardrobe/WardrobeListPage.js +83 -49
- package/dist/coolandlovely/pages/wardrobe/WardrobeListPage.js.map +1 -1
- package/dist/generated/wspace-operations.d.ts +282 -2
- package/dist/generated/wspace-operations.d.ts.map +1 -1
- package/dist/generated/wspace-operations.js +87 -1
- package/dist/generated/wspace-operations.js.map +1 -1
- package/dist/generated/wspace-types.d.ts +224 -0
- package/dist/generated/wspace-types.d.ts.map +1 -1
- package/dist/generated/wspace-types.js +8 -0
- package/dist/generated/wspace-types.js.map +1 -0
- package/package.json +4 -3
|
@@ -13,268 +13,279 @@ 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
15
|
import { StoreListingCard as v } from "../../components/StoreListingCard.js";
|
|
16
|
-
import {
|
|
17
|
-
import {
|
|
18
|
-
import {
|
|
19
|
-
import {
|
|
20
|
-
import {
|
|
21
|
-
import {
|
|
16
|
+
import { PricePanel as y } from "../../components/prices/PricePanel.js";
|
|
17
|
+
import { AddToCartPanel as b } from "../../components/AddToCartPanel.js";
|
|
18
|
+
import { StoreListedPieceView as x } from "./StoreListedPieceView.js";
|
|
19
|
+
import { Archive as S, ArrowLeft as C, ChevronRight as w, Loader2 as T, Pencil as E, Shapes as D } from "lucide-react";
|
|
20
|
+
import { useParams as O, useSearchParams as k } from "react-router";
|
|
21
|
+
import { jsx as A, jsxs as j } from "react/jsx-runtime";
|
|
22
|
+
import { GlassCard as M } from "@burdenoff/fe-libs/ui";
|
|
22
23
|
//#region src/coolandlovely/pages/items/StyleItemDetailPage.tsx
|
|
23
|
-
function
|
|
24
|
-
let { itemId:
|
|
24
|
+
function N() {
|
|
25
|
+
let { itemId: N } = O(), [P] = k(), F = P.get("look"), { navigateTo: I, workspaceId: L, currentUser: R } = e(), z = i(N), B = r({ pagination: {
|
|
25
26
|
limit: 100,
|
|
26
27
|
offset: 0
|
|
27
|
-
} }),
|
|
28
|
-
if (a(
|
|
28
|
+
} }), V = n();
|
|
29
|
+
if (a(N, z.data?.name), z.isLoading) return /* @__PURE__ */ A(t, {
|
|
29
30
|
title: "Style item",
|
|
30
|
-
children: /* @__PURE__ */
|
|
31
|
+
children: /* @__PURE__ */ A(c, { label: "Loading item…" })
|
|
31
32
|
});
|
|
32
|
-
if (!
|
|
33
|
-
itemId:
|
|
34
|
-
onRetry: () => void
|
|
33
|
+
if (!z.isError && !z.data) return /* @__PURE__ */ A(x, {
|
|
34
|
+
itemId: N,
|
|
35
|
+
onRetry: () => void z.refetch()
|
|
35
36
|
});
|
|
36
|
-
if (
|
|
37
|
+
if (z.isError || !z.data) return /* @__PURE__ */ A(t, {
|
|
37
38
|
title: "Style item",
|
|
38
|
-
children: /* @__PURE__ */
|
|
39
|
+
children: /* @__PURE__ */ A(s, {
|
|
39
40
|
title: "Item not found",
|
|
40
|
-
onRetry: () => void
|
|
41
|
+
onRetry: () => void z.refetch()
|
|
41
42
|
})
|
|
42
43
|
});
|
|
43
|
-
let
|
|
44
|
-
return /* @__PURE__ */
|
|
45
|
-
title:
|
|
46
|
-
description:
|
|
47
|
-
actions: /* @__PURE__ */
|
|
44
|
+
let H = z.data, U = H.status === "RETIRED", W = (B.data?.items ?? []).filter((e) => e.items?.some((e) => e.styleItemId === H.id)).slice(0, 4);
|
|
45
|
+
return /* @__PURE__ */ j(t, {
|
|
46
|
+
title: H.name,
|
|
47
|
+
description: H.brand?.name ?? void 0,
|
|
48
|
+
actions: /* @__PURE__ */ j("div", {
|
|
48
49
|
className: "flex flex-wrap items-center gap-2",
|
|
49
50
|
children: [
|
|
50
|
-
/* @__PURE__ */
|
|
51
|
+
/* @__PURE__ */ j("button", {
|
|
51
52
|
type: "button",
|
|
52
|
-
onClick: () =>
|
|
53
|
+
onClick: () => I("/items"),
|
|
53
54
|
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",
|
|
54
|
-
children: [/* @__PURE__ */
|
|
55
|
+
children: [/* @__PURE__ */ A(C, { className: "h-4 w-4" }), " Back"]
|
|
55
56
|
}),
|
|
56
|
-
/* @__PURE__ */
|
|
57
|
-
/* @__PURE__ */
|
|
57
|
+
/* @__PURE__ */ A(u, { styleItemId: H.id }),
|
|
58
|
+
/* @__PURE__ */ j("button", {
|
|
58
59
|
type: "button",
|
|
59
|
-
onClick: () =>
|
|
60
|
+
onClick: () => I(`/items/${H.id}/edit`),
|
|
60
61
|
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",
|
|
61
|
-
children: [/* @__PURE__ */
|
|
62
|
+
children: [/* @__PURE__ */ A(E, { className: "h-4 w-4" }), " Edit"]
|
|
62
63
|
}),
|
|
63
|
-
!
|
|
64
|
+
!U && /* @__PURE__ */ j("button", {
|
|
64
65
|
type: "button",
|
|
65
|
-
disabled:
|
|
66
|
-
onClick: () =>
|
|
66
|
+
disabled: V.isPending,
|
|
67
|
+
onClick: () => V.mutate(H.id, { onSuccess: () => I("/items") }),
|
|
67
68
|
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",
|
|
68
|
-
children: [
|
|
69
|
+
children: [V.isPending ? /* @__PURE__ */ A(T, { className: "h-4 w-4 animate-spin" }) : /* @__PURE__ */ A(S, { className: "h-4 w-4" }), "Archive"]
|
|
69
70
|
})
|
|
70
71
|
]
|
|
71
72
|
}),
|
|
72
|
-
children: [
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
className: "group overflow-hidden p-0",
|
|
79
|
-
children: [/* @__PURE__ */ k(l, {
|
|
80
|
-
icon: h(z.category, 48),
|
|
81
|
-
seed: z.id,
|
|
82
|
-
fileId: z.image?.id,
|
|
83
|
-
alt: z.name,
|
|
84
|
-
className: "aspect-[4/5] w-full"
|
|
85
|
-
}), z.description && /* @__PURE__ */ k("div", {
|
|
86
|
-
className: "p-6",
|
|
87
|
-
children: /* @__PURE__ */ k("p", {
|
|
88
|
-
className: "text-sm leading-relaxed text-text-secondary",
|
|
89
|
-
children: z.description
|
|
90
|
-
})
|
|
91
|
-
})]
|
|
92
|
-
})
|
|
93
|
-
}), /* @__PURE__ */ A("div", {
|
|
94
|
-
className: "space-y-4",
|
|
95
|
-
children: [
|
|
96
|
-
/* @__PURE__ */ A(j, {
|
|
73
|
+
children: [
|
|
74
|
+
/* @__PURE__ */ j("div", {
|
|
75
|
+
className: "grid grid-cols-1 gap-6 lg:grid-cols-3",
|
|
76
|
+
children: [/* @__PURE__ */ A("div", {
|
|
77
|
+
className: "lg:col-span-2",
|
|
78
|
+
children: /* @__PURE__ */ j(M, {
|
|
97
79
|
treatment: "glass",
|
|
98
|
-
className: "
|
|
99
|
-
children: [
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
}), /* @__PURE__ */ k(o, { status: z.status })]
|
|
120
|
-
})
|
|
121
|
-
] }),
|
|
122
|
-
/* @__PURE__ */ k("div", { className: "border-t border-border-seam" }),
|
|
123
|
-
z.colours.length > 0 && /* @__PURE__ */ A("div", { children: [/* @__PURE__ */ k("p", {
|
|
124
|
-
className: "mb-2 text-xs font-medium uppercase tracking-wide text-text-secondary",
|
|
125
|
-
children: "Colours"
|
|
126
|
-
}), /* @__PURE__ */ k(_, {
|
|
127
|
-
colours: z.colours,
|
|
128
|
-
max: 12
|
|
129
|
-
})] }),
|
|
130
|
-
z.sizes.length > 0 && /* @__PURE__ */ A("div", { children: [/* @__PURE__ */ k("p", {
|
|
131
|
-
className: "mb-2 text-xs font-medium uppercase tracking-wide text-text-secondary",
|
|
132
|
-
children: "Size"
|
|
133
|
-
}), /* @__PURE__ */ k("div", {
|
|
134
|
-
className: "flex flex-wrap gap-2",
|
|
135
|
-
children: z.sizes.map((e) => /* @__PURE__ */ k("span", {
|
|
136
|
-
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",
|
|
137
|
-
children: e
|
|
138
|
-
}, e))
|
|
139
|
-
})] }),
|
|
140
|
-
/* @__PURE__ */ k("div", {
|
|
141
|
-
className: "border-t border-border-seam pt-5",
|
|
142
|
-
children: /* @__PURE__ */ k(y, {
|
|
143
|
-
item: z,
|
|
144
|
-
lookId: P
|
|
145
|
-
})
|
|
146
|
-
}),
|
|
147
|
-
z.materials.length > 0 && /* @__PURE__ */ A("div", { children: [/* @__PURE__ */ k("p", {
|
|
148
|
-
className: "mb-1 text-xs font-medium uppercase tracking-wide text-text-secondary",
|
|
149
|
-
children: "Materials"
|
|
150
|
-
}), /* @__PURE__ */ k("p", {
|
|
151
|
-
className: "text-sm text-text-primary",
|
|
152
|
-
children: z.materials.join(", ")
|
|
153
|
-
})] }),
|
|
154
|
-
z.tags.length > 0 && /* @__PURE__ */ A("div", { children: [/* @__PURE__ */ k("p", {
|
|
155
|
-
className: "mb-2 text-xs font-medium uppercase tracking-wide text-text-secondary",
|
|
156
|
-
children: "Tags"
|
|
157
|
-
}), /* @__PURE__ */ k(g, {
|
|
158
|
-
tags: z.tags,
|
|
159
|
-
max: 12,
|
|
160
|
-
tone: "accent"
|
|
161
|
-
})] })
|
|
162
|
-
]
|
|
163
|
-
}),
|
|
164
|
-
/* @__PURE__ */ A(j, {
|
|
165
|
-
treatment: "plain",
|
|
166
|
-
className: "p-5",
|
|
167
|
-
children: [/* @__PURE__ */ k("h3", {
|
|
168
|
-
className: "mb-3 text-sm font-semibold text-text-primary",
|
|
169
|
-
children: "Details"
|
|
170
|
-
}), /* @__PURE__ */ A("dl", {
|
|
171
|
-
className: "space-y-2 text-sm",
|
|
80
|
+
className: "group overflow-hidden p-0",
|
|
81
|
+
children: [/* @__PURE__ */ A(l, {
|
|
82
|
+
icon: h(H.category, 48),
|
|
83
|
+
seed: H.id,
|
|
84
|
+
fileId: H.image?.id,
|
|
85
|
+
alt: H.name,
|
|
86
|
+
className: "aspect-[4/5] w-full"
|
|
87
|
+
}), H.description && /* @__PURE__ */ A("div", {
|
|
88
|
+
className: "p-6",
|
|
89
|
+
children: /* @__PURE__ */ A("p", {
|
|
90
|
+
className: "text-sm leading-relaxed text-text-secondary",
|
|
91
|
+
children: H.description
|
|
92
|
+
})
|
|
93
|
+
})]
|
|
94
|
+
})
|
|
95
|
+
}), /* @__PURE__ */ j("div", {
|
|
96
|
+
className: "space-y-4",
|
|
97
|
+
children: [
|
|
98
|
+
/* @__PURE__ */ j(M, {
|
|
99
|
+
treatment: "glass",
|
|
100
|
+
className: "space-y-5 p-6",
|
|
172
101
|
children: [
|
|
102
|
+
/* @__PURE__ */ j("div", { children: [
|
|
103
|
+
/* @__PURE__ */ A("h2", {
|
|
104
|
+
className: "text-2xl font-semibold leading-tight text-text-primary",
|
|
105
|
+
children: H.name
|
|
106
|
+
}),
|
|
107
|
+
H.brand && /* @__PURE__ */ j("button", {
|
|
108
|
+
type: "button",
|
|
109
|
+
onClick: () => I(`/brands/${H.brand?.id}`),
|
|
110
|
+
className: "mt-1 inline-flex items-center gap-0.5 text-sm font-medium text-action-primary-bg hover:underline",
|
|
111
|
+
children: [H.brand.name, /* @__PURE__ */ A(w, { className: "h-3.5 w-3.5" })]
|
|
112
|
+
}),
|
|
113
|
+
/* @__PURE__ */ j("div", {
|
|
114
|
+
className: "mt-3 flex flex-wrap items-center justify-between gap-2",
|
|
115
|
+
children: [/* @__PURE__ */ j("p", {
|
|
116
|
+
className: "text-3xl font-bold text-text-primary tabular-nums",
|
|
117
|
+
children: [f(H.price, H.currency), /* @__PURE__ */ A("span", {
|
|
118
|
+
className: "ml-2 text-base font-medium text-text-secondary",
|
|
119
|
+
children: H.currency
|
|
120
|
+
})]
|
|
121
|
+
}), /* @__PURE__ */ A(o, { status: H.status })]
|
|
122
|
+
})
|
|
123
|
+
] }),
|
|
124
|
+
/* @__PURE__ */ A("div", { className: "border-t border-border-seam" }),
|
|
125
|
+
H.colours.length > 0 && /* @__PURE__ */ j("div", { children: [/* @__PURE__ */ A("p", {
|
|
126
|
+
className: "mb-2 text-xs font-medium uppercase tracking-wide text-text-secondary",
|
|
127
|
+
children: "Colours"
|
|
128
|
+
}), /* @__PURE__ */ A(_, {
|
|
129
|
+
colours: H.colours,
|
|
130
|
+
max: 12
|
|
131
|
+
})] }),
|
|
132
|
+
H.sizes.length > 0 && /* @__PURE__ */ j("div", { children: [/* @__PURE__ */ A("p", {
|
|
133
|
+
className: "mb-2 text-xs font-medium uppercase tracking-wide text-text-secondary",
|
|
134
|
+
children: "Size"
|
|
135
|
+
}), /* @__PURE__ */ A("div", {
|
|
136
|
+
className: "flex flex-wrap gap-2",
|
|
137
|
+
children: H.sizes.map((e) => /* @__PURE__ */ A("span", {
|
|
138
|
+
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",
|
|
139
|
+
children: e
|
|
140
|
+
}, e))
|
|
141
|
+
})] }),
|
|
173
142
|
/* @__PURE__ */ A("div", {
|
|
174
|
-
className: "
|
|
175
|
-
children:
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
})
|
|
179
|
-
className: "text-text-primary",
|
|
180
|
-
children: p(z.category)
|
|
181
|
-
})]
|
|
182
|
-
}),
|
|
183
|
-
/* @__PURE__ */ A("div", {
|
|
184
|
-
className: "flex justify-between gap-2",
|
|
185
|
-
children: [/* @__PURE__ */ k("dt", {
|
|
186
|
-
className: "text-text-secondary",
|
|
187
|
-
children: "SKU"
|
|
188
|
-
}), /* @__PURE__ */ k("dd", {
|
|
189
|
-
className: "text-text-primary",
|
|
190
|
-
children: z.sku ?? "—"
|
|
191
|
-
})]
|
|
143
|
+
className: "border-t border-border-seam pt-5",
|
|
144
|
+
children: /* @__PURE__ */ A(b, {
|
|
145
|
+
item: H,
|
|
146
|
+
lookId: F
|
|
147
|
+
})
|
|
192
148
|
}),
|
|
193
|
-
/* @__PURE__ */
|
|
194
|
-
className: "
|
|
195
|
-
children:
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
/* @__PURE__ */ A(
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
}), /* @__PURE__ */ k("dd", {
|
|
209
|
-
className: "text-text-primary",
|
|
210
|
-
children: d(z.createdAt, {
|
|
211
|
-
hour: void 0,
|
|
212
|
-
minute: void 0
|
|
213
|
-
})
|
|
214
|
-
})]
|
|
215
|
-
})
|
|
149
|
+
H.materials.length > 0 && /* @__PURE__ */ j("div", { children: [/* @__PURE__ */ A("p", {
|
|
150
|
+
className: "mb-1 text-xs font-medium uppercase tracking-wide text-text-secondary",
|
|
151
|
+
children: "Materials"
|
|
152
|
+
}), /* @__PURE__ */ A("p", {
|
|
153
|
+
className: "text-sm text-text-primary",
|
|
154
|
+
children: H.materials.join(", ")
|
|
155
|
+
})] }),
|
|
156
|
+
H.tags.length > 0 && /* @__PURE__ */ j("div", { children: [/* @__PURE__ */ A("p", {
|
|
157
|
+
className: "mb-2 text-xs font-medium uppercase tracking-wide text-text-secondary",
|
|
158
|
+
children: "Tags"
|
|
159
|
+
}), /* @__PURE__ */ A(g, {
|
|
160
|
+
tags: H.tags,
|
|
161
|
+
max: 12,
|
|
162
|
+
tone: "accent"
|
|
163
|
+
})] })
|
|
216
164
|
]
|
|
217
|
-
})
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
165
|
+
}),
|
|
166
|
+
/* @__PURE__ */ j(M, {
|
|
167
|
+
treatment: "plain",
|
|
168
|
+
className: "p-5",
|
|
169
|
+
children: [/* @__PURE__ */ A("h3", {
|
|
170
|
+
className: "mb-3 text-sm font-semibold text-text-primary",
|
|
171
|
+
children: "Details"
|
|
172
|
+
}), /* @__PURE__ */ j("dl", {
|
|
173
|
+
className: "space-y-2 text-sm",
|
|
174
|
+
children: [
|
|
175
|
+
/* @__PURE__ */ j("div", {
|
|
176
|
+
className: "flex justify-between gap-2",
|
|
177
|
+
children: [/* @__PURE__ */ A("dt", {
|
|
178
|
+
className: "text-text-secondary",
|
|
179
|
+
children: "Category"
|
|
180
|
+
}), /* @__PURE__ */ A("dd", {
|
|
181
|
+
className: "text-text-primary",
|
|
182
|
+
children: p(H.category)
|
|
183
|
+
})]
|
|
184
|
+
}),
|
|
185
|
+
/* @__PURE__ */ j("div", {
|
|
186
|
+
className: "flex justify-between gap-2",
|
|
187
|
+
children: [/* @__PURE__ */ A("dt", {
|
|
188
|
+
className: "text-text-secondary",
|
|
189
|
+
children: "SKU"
|
|
190
|
+
}), /* @__PURE__ */ A("dd", {
|
|
191
|
+
className: "text-text-primary",
|
|
192
|
+
children: H.sku ?? "—"
|
|
193
|
+
})]
|
|
194
|
+
}),
|
|
195
|
+
/* @__PURE__ */ j("div", {
|
|
196
|
+
className: "flex justify-between gap-2",
|
|
197
|
+
children: [/* @__PURE__ */ A("dt", {
|
|
198
|
+
className: "text-text-secondary",
|
|
199
|
+
children: "Currency"
|
|
200
|
+
}), /* @__PURE__ */ A("dd", {
|
|
201
|
+
className: "text-text-primary",
|
|
202
|
+
children: H.currency
|
|
203
|
+
})]
|
|
204
|
+
}),
|
|
205
|
+
/* @__PURE__ */ j("div", {
|
|
206
|
+
className: "flex justify-between gap-2",
|
|
207
|
+
children: [/* @__PURE__ */ A("dt", {
|
|
208
|
+
className: "text-text-secondary",
|
|
209
|
+
children: "Created"
|
|
210
|
+
}), /* @__PURE__ */ A("dd", {
|
|
211
|
+
className: "text-text-primary",
|
|
212
|
+
children: d(H.createdAt, {
|
|
213
|
+
hour: void 0,
|
|
214
|
+
minute: void 0
|
|
215
|
+
})
|
|
216
|
+
})]
|
|
217
|
+
})
|
|
218
|
+
]
|
|
236
219
|
})]
|
|
237
|
-
})
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
220
|
+
}),
|
|
221
|
+
/* @__PURE__ */ A(v, { item: H }),
|
|
222
|
+
H.collection && /* @__PURE__ */ j("button", {
|
|
223
|
+
type: "button",
|
|
224
|
+
onClick: () => I(`/collections/${H.collection?.id}`),
|
|
225
|
+
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",
|
|
226
|
+
children: [/* @__PURE__ */ A(l, {
|
|
227
|
+
icon: /* @__PURE__ */ A(D, { className: "h-5 w-5" }),
|
|
228
|
+
seed: H.collection.id,
|
|
229
|
+
className: "h-10 w-10 shrink-0"
|
|
230
|
+
}), /* @__PURE__ */ j("div", {
|
|
231
|
+
className: "min-w-0",
|
|
232
|
+
children: [/* @__PURE__ */ A("p", {
|
|
233
|
+
className: "truncate text-sm font-medium text-text-primary",
|
|
234
|
+
children: H.collection.name
|
|
235
|
+
}), /* @__PURE__ */ A("p", {
|
|
236
|
+
className: "truncate text-xs text-text-secondary",
|
|
237
|
+
children: "View collection"
|
|
238
|
+
})]
|
|
239
|
+
})]
|
|
240
|
+
})
|
|
241
|
+
]
|
|
242
|
+
})]
|
|
243
|
+
}),
|
|
244
|
+
/* @__PURE__ */ j("section", {
|
|
245
|
+
className: "mt-8",
|
|
246
|
+
children: [/* @__PURE__ */ j("div", {
|
|
247
|
+
className: "mb-3 flex items-center justify-between gap-3",
|
|
248
|
+
children: [/* @__PURE__ */ A("h3", {
|
|
249
|
+
className: "text-lg font-semibold text-text-primary",
|
|
250
|
+
children: "Appears in looks"
|
|
251
|
+
}), W.length > 0 && /* @__PURE__ */ j("button", {
|
|
252
|
+
type: "button",
|
|
253
|
+
onClick: () => I("/looks"),
|
|
254
|
+
className: "inline-flex items-center gap-1 text-sm font-medium text-action-primary-bg hover:underline",
|
|
255
|
+
children: ["View all ", /* @__PURE__ */ A(w, { className: "h-3.5 w-3.5" })]
|
|
256
|
+
})]
|
|
257
|
+
}), B.isLoading ? /* @__PURE__ */ j("div", {
|
|
258
|
+
className: "flex items-center gap-2 rounded-lg border border-border-seam bg-bg-surface p-4 text-sm text-text-secondary",
|
|
259
|
+
children: [/* @__PURE__ */ A(T, { className: "h-4 w-4 animate-spin" }), " Loading referenced looks…"]
|
|
260
|
+
}) : W.length === 0 ? /* @__PURE__ */ A("p", {
|
|
261
|
+
className: "rounded-lg border border-border-seam bg-bg-surface p-4 text-sm text-text-secondary",
|
|
262
|
+
children: "This piece has not been tagged in any looks yet."
|
|
263
|
+
}) : /* @__PURE__ */ A("div", {
|
|
264
|
+
className: "grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-4",
|
|
265
|
+
children: W.map((e) => /* @__PURE__ */ A(m, {
|
|
266
|
+
id: e.id,
|
|
267
|
+
title: e.title,
|
|
268
|
+
occasion: e.occasion,
|
|
269
|
+
imageFileId: e.image?.id,
|
|
270
|
+
likeCount: e.likeCount,
|
|
271
|
+
isLikedByMe: e.isLikedByMe,
|
|
272
|
+
isSavedByMe: e.isSavedByMe,
|
|
273
|
+
onOpen: () => I(`/looks/${e.id}`),
|
|
274
|
+
showActions: !0
|
|
275
|
+
}, e.id))
|
|
253
276
|
})]
|
|
254
|
-
}),
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
id: e.id,
|
|
264
|
-
title: e.title,
|
|
265
|
-
occasion: e.occasion,
|
|
266
|
-
imageFileId: e.image?.id,
|
|
267
|
-
likeCount: e.likeCount,
|
|
268
|
-
isLikedByMe: e.isLikedByMe,
|
|
269
|
-
isSavedByMe: e.isSavedByMe,
|
|
270
|
-
onOpen: () => F(`/looks/${e.id}`),
|
|
271
|
-
showActions: !0
|
|
272
|
-
}, e.id))
|
|
273
|
-
})]
|
|
274
|
-
})]
|
|
277
|
+
}),
|
|
278
|
+
/* @__PURE__ */ A("div", {
|
|
279
|
+
className: "mt-6",
|
|
280
|
+
children: /* @__PURE__ */ A(y, {
|
|
281
|
+
styleItemId: H.id,
|
|
282
|
+
currency: H.currency
|
|
283
|
+
}, `${L}:${R?.id}:${H.id}`)
|
|
284
|
+
})
|
|
285
|
+
]
|
|
275
286
|
});
|
|
276
287
|
}
|
|
277
288
|
//#endregion
|
|
278
|
-
export {
|
|
289
|
+
export { N as StyleItemDetailPage };
|
|
279
290
|
|
|
280
291
|
//# 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 and its Burdenoff store listing state.\n *\n * A shopper who follows a Burdenoff store listing to a brand outside their\n * workspace finds no such piece in the workspace catalogue; the page then\n * falls back to the store-listed piece view, where they can buy it (BOFF-10017).\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 { StoreListingCard } from '../../components/StoreListingCard';\nimport { StoreListedPieceView } from './StoreListedPieceView';\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 // Not in this workspace's catalogue: a store shopper from outside the brand's workspace.\n if (!query.isError && !query.data) {\n return <StoreListedPieceView itemId={itemId} onRetry={() => void query.refetch()} />;\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 <StoreListingCard item={item} />\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 and its Burdenoff store listing state.\n *\n * A shopper who follows a Burdenoff store listing to a brand outside their\n * workspace finds no such piece in the workspace catalogue; the page then\n * falls back to the store-listed piece view, where they can buy it (BOFF-10017).\n */\n\nimport { PricePanel } from '../../components/prices/PricePanel';\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 { StoreListingCard } from '../../components/StoreListingCard';\nimport { StoreListedPieceView } from './StoreListedPieceView';\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, workspaceId, currentUser } = 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 // Not in this workspace's catalogue: a store shopper from outside the brand's workspace.\n if (!query.isError && !query.data) {\n return <StoreListedPieceView itemId={itemId} onRetry={() => void query.refetch()} />;\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 <StoreListingCard item={item} />\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 <div className=\"mt-6\">\n <PricePanel\n key={`${workspaceId}:${currentUser?.id}:${item.id}`}\n styleItemId={item.id}\n currency={item.currency}\n />\n </div>\n </PageLayout>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAqCA,SAAgB,IAAsB;CACpC,IAAM,EAAE,cAAW,EAA8B,GAE3C,CAAC,KAAgB,EAAgB,GACjC,IAAa,EAAa,IAAI,MAAM,GACpC,EAAE,eAAY,gBAAa,mBAAgB,EAAiB,GAC5D,IAAQ,EAAa,CAAM,GAC3B,IAAa,EAAkB,EAAE,YAAY;EAAE,OAAO;EAAK,QAAQ;CAAE,EAAE,CAAC,GACxE,IAAU,EAAoB;CAIpC,IAFA,EAAuB,GAAQ,EAAM,MAAM,IAAI,GAE3C,EAAM,WACR,OACE,kBAAC,GAAD;EAAY,OAAM;YAChB,kBAAC,GAAD,EAAa,OAAM,gBAAiB,CAAA;CAC1B,CAAA;CAKhB,IAAI,CAAC,EAAM,WAAW,CAAC,EAAM,MAC3B,OAAO,kBAAC,GAAD;EAA8B;EAAQ,eAAe,KAAK,EAAM,QAAQ;CAAI,CAAA;CAGrF,IAAI,EAAM,WAAW,CAAC,EAAM,MAC1B,OACE,kBAAC,GAAD;EAAY,OAAM;YAChB,kBAAC,GAAD;GAAW,OAAM;GAAiB,eAAe,KAAK,EAAM,QAAQ;EAAI,CAAA;CAC9D,CAAA;CAIhB,IAAM,IAAO,EAAM,MACb,IAAa,EAAK,WAAW,WAC7B,KAAkB,EAAW,MAAM,SAAS,CAAC,EAAA,CAChD,QAAQ,MAAS,EAAK,OAAO,MAAM,MAAa,EAAS,gBAAgB,EAAK,EAAE,CAAC,CAAC,CAClF,MAAM,GAAG,CAAC;CAEb,OACE,kBAAC,GAAD;EACE,OAAO,EAAK;EACZ,aAAa,EAAK,OAAO,QAAQ,KAAA;EACjC,SACE,kBAAC,OAAD;GAAK,WAAU;aAAf;IACE,kBAAC,UAAD;KACE,MAAK;KACL,eAAe,EAAW,QAAQ;KAClC,WAAU;eAHZ,CAKE,kBAAC,GAAD,EAAW,WAAU,UAAW,CAAA,GAAC,OAC3B;;IACR,kBAAC,GAAD,EAAqB,aAAa,EAAK,GAAK,CAAA;IAC5C,kBAAC,UAAD;KACE,MAAK;KACL,eAAe,EAAW,UAAU,EAAK,GAAG,MAAM;KAClD,WAAU;eAHZ,CAKE,kBAAC,GAAD,EAAQ,WAAU,UAAW,CAAA,GAAC,OACxB;;IACP,CAAC,KACA,kBAAC,UAAD;KACE,MAAK;KACL,UAAU,EAAQ;KAClB,eAAe,EAAQ,OAAO,EAAK,IAAI,EAAE,iBAAiB,EAAW,QAAQ,EAAE,CAAC;KAChF,WAAU;eAJZ,CAMG,EAAQ,YACP,kBAAC,GAAD,EAAS,WAAU,uBAAwB,CAAA,IAE3C,kBAAC,GAAD,EAAS,WAAU,UAAW,CAAA,GAC9B,SAEI;;GAEP;;YAnCT;GAsCE,kBAAC,OAAD;IAAK,WAAU;cAAf,CAEE,kBAAC,OAAD;KAAK,WAAU;eACb,kBAAC,GAAD;MAAW,WAAU;MAAQ,WAAU;gBAAvC,CACE,kBAAC,GAAD;OACE,MAAM,EAAa,EAAK,UAAU,EAAE;OACpC,MAAM,EAAK;OACX,QAAQ,EAAK,OAAO;OACpB,KAAK,EAAK;OACV,WAAU;MACX,CAAA,GACA,EAAK,eACJ,kBAAC,OAAD;OAAK,WAAU;iBACb,kBAAC,KAAD;QAAG,WAAU;kBAA+C,EAAK;OAAe,CAAA;MAC7E,CAAA,CAEE;;IACR,CAAA,GAGL,kBAAC,OAAD;KAAK,WAAU;eAAf;MACE,kBAAC,GAAD;OAAW,WAAU;OAAQ,WAAU;iBAAvC;QACE,kBAAC,OAAD,EAAA,UAAA;SACE,kBAAC,MAAD;UAAI,WAAU;oBACX,EAAK;SACJ,CAAA;SACH,EAAK,SACJ,kBAAC,UAAD;UACE,MAAK;UACL,eAAe,EAAW,WAAW,EAAK,OAAO,IAAI;UACrD,WAAU;oBAHZ,CAKG,EAAK,MAAM,MACZ,kBAAC,GAAD,EAAc,WAAU,cAAe,CAAA,CACjC;;SAEV,kBAAC,OAAD;UAAK,WAAU;oBAAf,CACE,kBAAC,KAAD;WAAG,WAAU;qBAAb,CACG,EAAY,EAAK,OAAO,EAAK,QAAQ,GACtC,kBAAC,QAAD;YAAM,WAAU;sBACb,EAAK;WACF,CAAA,CACL;cACH,kBAAC,GAAD,EAAa,QAAQ,EAAK,OAAS,CAAA,CAChC;;QACF,EAAA,CAAA;QAEL,kBAAC,OAAD,EAAK,WAAU,8BAA+B,CAAA;QAE7C,EAAK,QAAQ,SAAS,KACrB,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,KAAD;SAAG,WAAU;mBAAuE;QAEjF,CAAA,GACH,kBAAC,GAAD;SAAiB,SAAS,EAAK;SAAS,KAAK;QAAK,CAAA,CAC/C,EAAA,CAAA;QAGN,EAAK,MAAM,SAAS,KACnB,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,KAAD;SAAG,WAAU;mBAAuE;QAEjF,CAAA,GACH,kBAAC,OAAD;SAAK,WAAU;mBACZ,EAAK,MAAM,KAAK,MACf,kBAAC,QAAD;UAEE,WAAU;oBAET;SACG,GAJC,CAID,CACP;QACE,CAAA,CACF,EAAA,CAAA;QAGP,kBAAC,OAAD;SAAK,WAAU;mBACb,kBAAC,GAAD;UAAsB;UAAM,QAAQ;SAAa,CAAA;QAC9C,CAAA;QAEJ,EAAK,UAAU,SAAS,KACvB,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,KAAD;SAAG,WAAU;mBAAuE;QAEjF,CAAA,GACH,kBAAC,KAAD;SAAG,WAAU;mBAA6B,EAAK,UAAU,KAAK,IAAI;QAAK,CAAA,CACpE,EAAA,CAAA;QAGN,EAAK,KAAK,SAAS,KAClB,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,KAAD;SAAG,WAAU;mBAAuE;QAEjF,CAAA,GACH,kBAAC,GAAD;SAAS,MAAM,EAAK;SAAM,KAAK;SAAI,MAAK;QAAU,CAAA,CAC/C,EAAA,CAAA;OAEE;;MAEX,kBAAC,GAAD;OAAW,WAAU;OAAQ,WAAU;iBAAvC,CACE,kBAAC,MAAD;QAAI,WAAU;kBAA+C;OAAW,CAAA,GACxE,kBAAC,MAAD;QAAI,WAAU;kBAAd;SACE,kBAAC,OAAD;UAAK,WAAU;oBAAf,CACE,kBAAC,MAAD;WAAI,WAAU;qBAAsB;UAAY,CAAA,GAChD,kBAAC,MAAD;WAAI,WAAU;qBAAqB,EAAU,EAAK,QAAQ;UAAM,CAAA,CAC7D;;SACL,kBAAC,OAAD;UAAK,WAAU;oBAAf,CACE,kBAAC,MAAD;WAAI,WAAU;qBAAsB;UAAO,CAAA,GAC3C,kBAAC,MAAD;WAAI,WAAU;qBAAqB,EAAK,OAAO;UAAQ,CAAA,CACpD;;SACL,kBAAC,OAAD;UAAK,WAAU;oBAAf,CACE,kBAAC,MAAD;WAAI,WAAU;qBAAsB;UAAY,CAAA,GAChD,kBAAC,MAAD;WAAI,WAAU;qBAAqB,EAAK;UAAa,CAAA,CAClD;;SACL,kBAAC,OAAD;UAAK,WAAU;oBAAf,CACE,kBAAC,MAAD;WAAI,WAAU;qBAAsB;UAAW,CAAA,GAC/C,kBAAC,MAAD;WAAI,WAAU;qBACX,EAAW,EAAK,WAAW;YAAE,MAAM,KAAA;YAAW,QAAQ,KAAA;WAAU,CAAC;UAChE,CAAA,CACD;;QACH;SACK;;MAEX,kBAAC,GAAD,EAAwB,QAAO,CAAA;MAE9B,EAAK,cACJ,kBAAC,UAAD;OACE,MAAK;OACL,eAAe,EAAW,gBAAgB,EAAK,YAAY,IAAI;OAC/D,WAAU;iBAHZ,CAKE,kBAAC,GAAD;QACE,MAAM,kBAAC,GAAD,EAAQ,WAAU,UAAW,CAAA;QACnC,MAAM,EAAK,WAAW;QACtB,WAAU;OACX,CAAA,GACD,kBAAC,OAAD;QAAK,WAAU;kBAAf,CACE,kBAAC,KAAD;SAAG,WAAU;mBACV,EAAK,WAAW;QAChB,CAAA,GACH,kBAAC,KAAD;SAAG,WAAU;mBAAuC;QAAkB,CAAA,CACnE;SACC;;KAEP;MACF;;GAEL,kBAAC,WAAD;IAAS,WAAU;cAAnB,CACE,kBAAC,OAAD;KAAK,WAAU;eAAf,CACE,kBAAC,MAAD;MAAI,WAAU;gBAA0C;KAAoB,CAAA,GAC3E,EAAe,SAAS,KACvB,kBAAC,UAAD;MACE,MAAK;MACL,eAAe,EAAW,QAAQ;MAClC,WAAU;gBAHZ,CAIC,aACU,kBAAC,GAAD,EAAc,WAAU,cAAe,CAAA,CAC1C;OAEP;QACJ,EAAW,YACV,kBAAC,OAAD;KAAK,WAAU;eAAf,CACE,kBAAC,GAAD,EAAS,WAAU,uBAAwB,CAAA,GAAC,4BACzC;SACH,EAAe,WAAW,IAC5B,kBAAC,KAAD;KAAG,WAAU;eAAqF;IAE/F,CAAA,IAEH,kBAAC,OAAD;KAAK,WAAU;eACZ,EAAe,KAAK,MACnB,kBAAC,GAAD;MAEE,IAAI,EAAK;MACT,OAAO,EAAK;MACZ,UAAU,EAAK;MACf,aAAa,EAAK,OAAO;MACzB,WAAW,EAAK;MAChB,aAAa,EAAK;MAClB,aAAa,EAAK;MAClB,cAAc,EAAW,UAAU,EAAK,IAAI;MAC5C,aAAA;KACD,GAVM,EAAK,EAUX,CACF;IACE,CAAA,CAEA;;GACT,kBAAC,OAAD;IAAK,WAAU;cACb,kBAAC,GAAD;KAEE,aAAa,EAAK;KAClB,UAAU,EAAK;IAChB,GAHM,GAAG,EAAY,GAAG,GAAa,GAAG,GAAG,EAAK,IAGhD;GACE,CAAA;EACK;;AAEhB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LookbookDetailPage.d.ts","sourceRoot":"","sources":["../../../../src/coolandlovely/pages/lookbooks/LookbookDetailPage.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;
|
|
1
|
+
{"version":3,"file":"LookbookDetailPage.d.ts","sourceRoot":"","sources":["../../../../src/coolandlovely/pages/lookbooks/LookbookDetailPage.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AA0BH,wBAAgB,kBAAkB,gCAgOjC"}
|