@burdenoff/microfe-coolandlovely 2026.1101.7 → 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.
Files changed (72) hide show
  1. package/dist/coolandlovely/components/WardrobeItemCard.d.ts +2 -1
  2. package/dist/coolandlovely/components/WardrobeItemCard.d.ts.map +1 -1
  3. package/dist/coolandlovely/components/WardrobeItemCard.js +4 -3
  4. package/dist/coolandlovely/components/WardrobeItemCard.js.map +1 -1
  5. package/dist/coolandlovely/components/prices/BestPriceBadge.d.ts +7 -0
  6. package/dist/coolandlovely/components/prices/BestPriceBadge.d.ts.map +1 -0
  7. package/dist/coolandlovely/components/prices/BestPriceBadge.js +22 -0
  8. package/dist/coolandlovely/components/prices/BestPriceBadge.js.map +1 -0
  9. package/dist/coolandlovely/components/prices/LookbookPriceBoard.d.ts +10 -0
  10. package/dist/coolandlovely/components/prices/LookbookPriceBoard.d.ts.map +1 -0
  11. package/dist/coolandlovely/components/prices/LookbookPriceBoard.js +120 -0
  12. package/dist/coolandlovely/components/prices/LookbookPriceBoard.js.map +1 -0
  13. package/dist/coolandlovely/components/prices/PriceComparison.d.ts +5 -0
  14. package/dist/coolandlovely/components/prices/PriceComparison.d.ts.map +1 -0
  15. package/dist/coolandlovely/components/prices/PriceComparison.js +95 -0
  16. package/dist/coolandlovely/components/prices/PriceComparison.js.map +1 -0
  17. package/dist/coolandlovely/components/prices/PriceCurrencySelect.d.ts +6 -0
  18. package/dist/coolandlovely/components/prices/PriceCurrencySelect.d.ts.map +1 -0
  19. package/dist/coolandlovely/components/prices/PriceCurrencySelect.js +38 -0
  20. package/dist/coolandlovely/components/prices/PriceCurrencySelect.js.map +1 -0
  21. package/dist/coolandlovely/components/prices/PricePanel.d.ts +6 -0
  22. package/dist/coolandlovely/components/prices/PricePanel.d.ts.map +1 -0
  23. package/dist/coolandlovely/components/prices/PricePanel.js +105 -0
  24. package/dist/coolandlovely/components/prices/PricePanel.js.map +1 -0
  25. package/dist/coolandlovely/components/prices/PriceWatchDisclosure.d.ts +2 -0
  26. package/dist/coolandlovely/components/prices/PriceWatchDisclosure.d.ts.map +1 -0
  27. package/dist/coolandlovely/components/prices/PriceWatchDisclosure.js +28 -0
  28. package/dist/coolandlovely/components/prices/PriceWatchDisclosure.js.map +1 -0
  29. package/dist/coolandlovely/components/prices/PriceWatchForm.d.ts +5 -0
  30. package/dist/coolandlovely/components/prices/PriceWatchForm.d.ts.map +1 -0
  31. package/dist/coolandlovely/components/prices/PriceWatchForm.js +89 -0
  32. package/dist/coolandlovely/components/prices/PriceWatchForm.js.map +1 -0
  33. package/dist/coolandlovely/components/prices/PriceWatches.d.ts +3 -0
  34. package/dist/coolandlovely/components/prices/PriceWatches.d.ts.map +1 -0
  35. package/dist/coolandlovely/components/prices/PriceWatches.js +189 -0
  36. package/dist/coolandlovely/components/prices/PriceWatches.js.map +1 -0
  37. package/dist/coolandlovely/components/prices/RetailerOfferLink.d.ts +6 -0
  38. package/dist/coolandlovely/components/prices/RetailerOfferLink.d.ts.map +1 -0
  39. package/dist/coolandlovely/components/prices/RetailerOfferLink.js +28 -0
  40. package/dist/coolandlovely/components/prices/RetailerOfferLink.js.map +1 -0
  41. package/dist/coolandlovely/components/prices/money.d.ts +6 -0
  42. package/dist/coolandlovely/components/prices/money.d.ts.map +1 -0
  43. package/dist/coolandlovely/components/prices/money.js +42 -0
  44. package/dist/coolandlovely/components/prices/money.js.map +1 -0
  45. package/dist/coolandlovely/hooks/usePriceApi.d.ts +57 -0
  46. package/dist/coolandlovely/hooks/usePriceApi.d.ts.map +1 -0
  47. package/dist/coolandlovely/hooks/usePriceApi.js +111 -0
  48. package/dist/coolandlovely/hooks/usePriceApi.js.map +1 -0
  49. package/dist/coolandlovely/pages/items/StoreListedPieceView.d.ts.map +1 -1
  50. package/dist/coolandlovely/pages/items/StoreListedPieceView.js +130 -123
  51. package/dist/coolandlovely/pages/items/StoreListedPieceView.js.map +1 -1
  52. package/dist/coolandlovely/pages/items/StyleItemDetailPage.d.ts.map +1 -1
  53. package/dist/coolandlovely/pages/items/StyleItemDetailPage.js +241 -230
  54. package/dist/coolandlovely/pages/items/StyleItemDetailPage.js.map +1 -1
  55. package/dist/coolandlovely/pages/lookbooks/LookbookDetailPage.d.ts.map +1 -1
  56. package/dist/coolandlovely/pages/lookbooks/LookbookDetailPage.js +64 -119
  57. package/dist/coolandlovely/pages/lookbooks/LookbookDetailPage.js.map +1 -1
  58. package/dist/coolandlovely/pages/profile/StyleProfilePage.d.ts.map +1 -1
  59. package/dist/coolandlovely/pages/profile/StyleProfilePage.js +214 -209
  60. package/dist/coolandlovely/pages/profile/StyleProfilePage.js.map +1 -1
  61. package/dist/coolandlovely/pages/wardrobe/WardrobeListPage.d.ts.map +1 -1
  62. package/dist/coolandlovely/pages/wardrobe/WardrobeListPage.js +83 -49
  63. package/dist/coolandlovely/pages/wardrobe/WardrobeListPage.js.map +1 -1
  64. package/dist/generated/wspace-operations.d.ts +282 -2
  65. package/dist/generated/wspace-operations.d.ts.map +1 -1
  66. package/dist/generated/wspace-operations.js +87 -1
  67. package/dist/generated/wspace-operations.js.map +1 -1
  68. package/dist/generated/wspace-types.d.ts +224 -0
  69. package/dist/generated/wspace-types.d.ts.map +1 -1
  70. package/dist/generated/wspace-types.js +8 -0
  71. package/dist/generated/wspace-types.js.map +1 -0
  72. package/package.json +4 -3
@@ -1,30 +1,31 @@
1
1
  import { useCoolAndLovely as e } from "../../context/CoolAndLovelyContext.js";
2
2
  import { cn as t } from "../../utils/cn.js";
3
3
  import { PageLayout as n } from "../../components/PageLayout.js";
4
- import { useLooks as r, useMyFollowing as i, useMyStyleProfile as a, useStyleProfileByOwner as o, useUpsertStyleProfile as s, useWardrobeItems as c } from "../../hooks/useCoolAndLovelyApi.js";
5
- import { useTr as ee } from "../../hooks/useTr.js";
4
+ import { useLooks as r, useMyFollowing as i, useMyStyleProfile as a, useStyleProfileByOwner as o, useUpsertStyleProfile as ee, useWardrobeItems as s } from "../../hooks/useCoolAndLovelyApi.js";
5
+ import { useTr as te } from "../../hooks/useTr.js";
6
6
  import "../../hooks/index.js";
7
- import { ErrorView as te, LoadingView as l } from "../../components/StateViews.js";
8
- import { Thumbnail as u } from "../../components/Thumbnail.js";
9
- import { parseCsv as d, titleCase as f } from "../../utils/formatters.js";
10
- import { categoryIcon as p } from "../../utils/icons.js";
11
- import { EmptyState as m } from "../../components/EmptyState.js";
12
- import { SelectField as h, TextAreaField as g, TextField as _ } from "../../components/Field.js";
13
- import { ActorName as v } from "../../components/ActorName.js";
14
- import { FollowButton as y } from "../../components/FollowButton.js";
15
- import { VisibilityChip as ne } from "../../components/VisibilityChip.js";
16
- import { ColourSwatchRow as re } from "../../components/ColourSwatchRow.js";
17
- import { useEffect as b, useMemo as x, useState as S } from "react";
18
- import { Loader2 as C, Pencil as w, Save as ie, Shirt as ae, Sparkles as oe, UserCircle as T, Users as se, X as E } from "lucide-react";
19
- import { useParams as D } from "react-router";
20
- import { jsx as O, jsxs as k } from "react/jsx-runtime";
21
- import { GlassCard as A } from "@burdenoff/fe-libs/ui";
7
+ import { ErrorView as ne, LoadingView as c } from "../../components/StateViews.js";
8
+ import { Thumbnail as l } from "../../components/Thumbnail.js";
9
+ import { parseCsv as u, titleCase as d } from "../../utils/formatters.js";
10
+ import { categoryIcon as f } from "../../utils/icons.js";
11
+ import { EmptyState as p } from "../../components/EmptyState.js";
12
+ import { SelectField as m, TextAreaField as h, TextField as g } from "../../components/Field.js";
13
+ import { ActorName as _ } from "../../components/ActorName.js";
14
+ import { FollowButton as v } from "../../components/FollowButton.js";
15
+ import { VisibilityChip as re } from "../../components/VisibilityChip.js";
16
+ import { ColourSwatchRow as ie } from "../../components/ColourSwatchRow.js";
17
+ import { PriceWatchDisclosure as y } from "../../components/prices/PriceWatchDisclosure.js";
18
+ import { useEffect as b, useMemo as ae, useState as x } from "react";
19
+ import { Loader2 as S, Pencil as C, Save as oe, Shirt as se, Sparkles as w, UserCircle as T, Users as E, X as ce } from "lucide-react";
20
+ import { useParams as le } from "react-router";
21
+ import { jsx as D, jsxs as O } from "react/jsx-runtime";
22
+ import { GlassCard as k } from "@burdenoff/fe-libs/ui";
22
23
  //#region src/coolandlovely/pages/profile/StyleProfilePage.tsx
23
- var ce = [
24
+ var ue = [
24
25
  "PUBLIC",
25
26
  "FOLLOWERS",
26
27
  "PRIVATE"
27
- ], le = [
28
+ ], A = [
28
29
  "tops",
29
30
  "bottoms",
30
31
  "dresses",
@@ -44,23 +45,23 @@ function M(e) {
44
45
  return t.length === 0 ? "?" : t.length === 1 ? t[0].slice(0, 2).toUpperCase() : (t[0][0] + t[1][0]).toUpperCase();
45
46
  }
46
47
  function N({ title: e, children: n, className: r }) {
47
- return /* @__PURE__ */ k(A, {
48
+ return /* @__PURE__ */ O(k, {
48
49
  treatment: "plain",
49
50
  className: t("p-5", r),
50
- children: [/* @__PURE__ */ O("h3", {
51
+ children: [/* @__PURE__ */ D("h3", {
51
52
  className: "mb-3 text-sm font-semibold text-text-primary",
52
53
  children: e
53
54
  }), n]
54
55
  });
55
56
  }
56
57
  function P() {
57
- let { userId: P } = D(), { navigateTo: F, currentUser: I } = e(), L = ee(), R = !P || P === I?.id, z = a(), B = o(R ? void 0 : P), V = R ? z : B, H = s(), U = i(), W = c(), G = V.data, K = r({
58
+ let { userId: P } = le(), { navigateTo: F, currentUser: I } = e(), L = te(), R = !P || P === I?.id, z = a(), B = o(R ? void 0 : P), V = R ? z : B, H = ee(), U = i(), W = s(), G = V.data, K = r({
58
59
  authorId: G?.ownerId,
59
60
  pagination: {
60
61
  limit: 6,
61
62
  offset: 0
62
63
  }
63
- }), [ue, q] = S(!1), [J, Y] = S(j), X = !!G, Z = U.data ?? [];
64
+ }), [de, q] = x(!1), [J, Y] = x(j), X = !!G, Z = U.data ?? [];
64
65
  b(() => {
65
66
  R && G && Y({
66
67
  displayName: G.displayName ?? "",
@@ -81,108 +82,109 @@ function P() {
81
82
  let Q = (e, t) => Y((n) => ({
82
83
  ...n,
83
84
  [e]: t
84
- })), de = (e, t) => Y((n) => ({
85
+ })), fe = (e, t) => Y((n) => ({
85
86
  ...n,
86
87
  sizes: {
87
88
  ...n.sizes,
88
89
  [e]: t
89
90
  }
90
- })), fe = x(() => ce.map((e) => ({
91
+ })), pe = ae(() => ue.map((e) => ({
91
92
  value: e,
92
- label: L(`coolandlovely.visibility.${e.toLowerCase()}`, f(e))
93
- })), [L]), pe = (e) => {
93
+ label: L(`coolandlovely.visibility.${e.toLowerCase()}`, d(e))
94
+ })), [L]), me = (e) => {
94
95
  e.preventDefault();
95
96
  let t = Object.fromEntries(Object.entries(J.sizes).map(([e, t]) => [e, t.trim()]).filter(([, e]) => e.length > 0));
96
97
  H.mutate({
97
98
  displayName: J.displayName.trim() || void 0,
98
99
  bio: J.bio.trim() || void 0,
99
100
  visibility: J.visibility,
100
- stylePreferences: d(J.stylePreferences),
101
- palette: d(J.palette),
102
- favouriteBrands: d(J.favouriteBrands),
101
+ stylePreferences: u(J.stylePreferences),
102
+ palette: u(J.palette),
103
+ favouriteBrands: u(J.favouriteBrands),
103
104
  sizes: t
104
105
  }, { onSuccess: () => q(!1) });
105
106
  };
106
- if (V.isLoading) return /* @__PURE__ */ O(n, {
107
+ if (V.isLoading) return /* @__PURE__ */ D(n, {
107
108
  title: L("coolandlovely.page.profileTitle", "Style Profile"),
108
- children: /* @__PURE__ */ O(l, { label: L("coolandlovely.loading.profile", "Loading style profile…") })
109
+ children: /* @__PURE__ */ D(c, { label: L("coolandlovely.loading.profile", "Loading style profile…") })
109
110
  });
110
- if (V.isError) return /* @__PURE__ */ O(n, {
111
+ if (V.isError) return /* @__PURE__ */ D(n, {
111
112
  title: L("coolandlovely.page.profileTitle", "Style Profile"),
112
- children: /* @__PURE__ */ O(te, { onRetry: () => void V.refetch() })
113
+ children: /* @__PURE__ */ D(ne, { onRetry: () => void V.refetch() })
113
114
  });
114
- if (!R && !G) return /* @__PURE__ */ O(n, {
115
+ if (!R && !G) return /* @__PURE__ */ D(n, {
115
116
  title: L("coolandlovely.page.profileTitle", "Style Profile"),
116
- children: /* @__PURE__ */ O(m, {
117
+ children: /* @__PURE__ */ D(p, {
117
118
  title: L("coolandlovely.profile.notAvailableTitle", "Profile not available"),
118
119
  description: L("coolandlovely.profile.notAvailableDescription", "This style profile doesn't exist, or its owner hasn't shared it with you."),
119
- icon: /* @__PURE__ */ O(T, { className: "h-8 w-8" })
120
+ icon: /* @__PURE__ */ D(T, { className: "h-8 w-8" })
120
121
  })
121
122
  });
122
123
  let $ = R;
123
- if ((!ue || !$) && G) {
124
+ if ((!de || !$) && G) {
124
125
  let e = R ? I?.profilePicture || I?.avatar : void 0, r = R ? (W.data ?? []).slice(0, 6) : [], i = K.data?.items ?? [], a = Object.entries(G.sizes ?? {}), o = G.displayName || (R ? I?.name : void 0);
125
- return /* @__PURE__ */ O(n, {
126
+ return /* @__PURE__ */ D(n, {
126
127
  title: R ? L("coolandlovely.page.profileTitle", "Style Profile") : o || L("coolandlovely.page.profileTitle", "Style Profile"),
127
128
  description: R ? L("coolandlovely.page.profileSubtitle", "Your taste, palette and sizing — the spine of personalised discovery") : void 0,
128
- actions: $ ? /* @__PURE__ */ k("button", {
129
+ actions: $ ? /* @__PURE__ */ O("button", {
129
130
  type: "button",
130
131
  onClick: () => q(!0),
131
132
  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",
132
133
  children: [
133
- /* @__PURE__ */ O(w, { className: "h-4 w-4" }),
134
+ /* @__PURE__ */ D(C, { className: "h-4 w-4" }),
134
135
  " ",
135
136
  L("coolandlovely.actions.edit", "Edit")
136
137
  ]
137
- }) : /* @__PURE__ */ O(y, { followeeId: G.ownerId }),
138
- children: /* @__PURE__ */ k("div", {
138
+ }) : /* @__PURE__ */ D(v, { followeeId: G.ownerId }),
139
+ children: /* @__PURE__ */ O("div", {
139
140
  className: "mx-auto max-w-5xl",
140
141
  children: [
141
- /* @__PURE__ */ O(A, {
142
+ R && /* @__PURE__ */ D(y, {}),
143
+ /* @__PURE__ */ D(k, {
142
144
  treatment: "glass",
143
145
  className: "p-6",
144
- children: /* @__PURE__ */ k("div", {
146
+ children: /* @__PURE__ */ O("div", {
145
147
  className: "flex flex-col gap-4 sm:flex-row sm:items-center",
146
- children: [e ? /* @__PURE__ */ O("img", {
148
+ children: [e ? /* @__PURE__ */ D("img", {
147
149
  src: e,
148
150
  alt: o || "Avatar",
149
151
  className: "h-16 w-16 shrink-0 rounded-full object-cover ring-2 ring-bg-surface"
150
- }) : /* @__PURE__ */ O("div", {
152
+ }) : /* @__PURE__ */ D("div", {
151
153
  className: "flex h-16 w-16 shrink-0 items-center justify-center rounded-full bg-accent-purple-subtle text-text-primary",
152
- children: /* @__PURE__ */ O(T, { className: "h-8 w-8" })
153
- }), /* @__PURE__ */ k("div", {
154
+ children: /* @__PURE__ */ D(T, { className: "h-8 w-8" })
155
+ }), /* @__PURE__ */ O("div", {
154
156
  className: "min-w-0 flex-1",
155
157
  children: [
156
- /* @__PURE__ */ k("div", {
158
+ /* @__PURE__ */ O("div", {
157
159
  className: "flex flex-wrap items-center gap-2",
158
- children: [/* @__PURE__ */ O("h2", {
160
+ children: [/* @__PURE__ */ D("h2", {
159
161
  className: "truncate text-xl font-semibold text-text-primary",
160
- children: o || /* @__PURE__ */ O(v, {
162
+ children: o || /* @__PURE__ */ D(_, {
161
163
  id: G.ownerId,
162
164
  fallback: "Style profile"
163
165
  })
164
- }), /* @__PURE__ */ O(ne, { visibility: G.visibility })]
166
+ }), /* @__PURE__ */ D(re, { visibility: G.visibility })]
165
167
  }),
166
- G.bio && /* @__PURE__ */ O("p", {
168
+ G.bio && /* @__PURE__ */ D("p", {
167
169
  className: "mt-1 line-clamp-2 text-sm text-text-secondary",
168
170
  children: G.bio
169
171
  }),
170
- /* @__PURE__ */ k("div", {
172
+ /* @__PURE__ */ O("div", {
171
173
  className: "mt-2 flex items-center gap-6",
172
- children: [/* @__PURE__ */ k("span", {
174
+ children: [/* @__PURE__ */ O("span", {
173
175
  className: "text-sm text-text-secondary",
174
176
  children: [
175
- /* @__PURE__ */ O("span", {
177
+ /* @__PURE__ */ D("span", {
176
178
  className: "font-semibold text-text-primary tabular-nums",
177
179
  children: G.followerCount ?? 0
178
180
  }),
179
181
  " ",
180
182
  G.followerCount === 1 ? L("coolandlovely.profile.followerSingular", "follower") : L("coolandlovely.profile.followerPlural", "followers")
181
183
  ]
182
- }), /* @__PURE__ */ k("span", {
184
+ }), /* @__PURE__ */ O("span", {
183
185
  className: "text-sm text-text-secondary",
184
186
  children: [
185
- /* @__PURE__ */ O("span", {
187
+ /* @__PURE__ */ D("span", {
186
188
  className: "font-semibold text-text-primary tabular-nums",
187
189
  children: G.followingCount ?? 0
188
190
  }),
@@ -195,189 +197,189 @@ function P() {
195
197
  })]
196
198
  })
197
199
  }),
198
- /* @__PURE__ */ k("div", {
200
+ /* @__PURE__ */ O("div", {
199
201
  className: "mt-6 grid gap-6 lg:grid-cols-5",
200
- children: [/* @__PURE__ */ k("div", {
202
+ children: [/* @__PURE__ */ O("div", {
201
203
  className: "space-y-6 lg:col-span-3",
202
204
  children: [
203
- /* @__PURE__ */ O(N, {
205
+ /* @__PURE__ */ D(N, {
204
206
  title: L("coolandlovely.profile.stylePreferences", "Style preferences"),
205
- children: G.stylePreferences.length ? /* @__PURE__ */ O("div", {
207
+ children: G.stylePreferences.length ? /* @__PURE__ */ D("div", {
206
208
  className: "flex flex-wrap gap-2",
207
- children: G.stylePreferences.map((e, n) => /* @__PURE__ */ O("span", {
209
+ children: G.stylePreferences.map((e, n) => /* @__PURE__ */ D("span", {
208
210
  className: t("rounded-full px-3 py-1 text-sm font-medium", n === 0 ? "bg-accent-purple-subtle text-text-primary ring-1 ring-[var(--color-accent-soft)]" : "bg-bg-sunken text-text-secondary"),
209
211
  children: e
210
212
  }, `${e}-${n}`))
211
- }) : /* @__PURE__ */ O("p", {
213
+ }) : /* @__PURE__ */ D("p", {
212
214
  className: "text-sm text-text-secondary",
213
215
  children: R ? L("coolandlovely.profile.noPreferencesOwn", "No preferences yet — add a few in Edit.") : L("coolandlovely.profile.noPreferencesOther", "No preferences shared yet.")
214
216
  })
215
217
  }),
216
- /* @__PURE__ */ O(N, {
218
+ /* @__PURE__ */ D(N, {
217
219
  title: L("coolandlovely.profile.palette", "Palette"),
218
- children: G.palette.length ? /* @__PURE__ */ O(re, {
220
+ children: G.palette.length ? /* @__PURE__ */ D(ie, {
219
221
  colours: G.palette,
220
222
  max: 12,
221
223
  className: "gap-2.5"
222
- }) : /* @__PURE__ */ O("p", {
224
+ }) : /* @__PURE__ */ D("p", {
223
225
  className: "text-sm text-text-secondary",
224
226
  children: L("coolandlovely.profile.noPalette", "No palette yet.")
225
227
  })
226
228
  }),
227
- /* @__PURE__ */ k("div", {
229
+ /* @__PURE__ */ O("div", {
228
230
  className: "grid gap-6 sm:grid-cols-2",
229
- children: [/* @__PURE__ */ O(N, {
231
+ children: [/* @__PURE__ */ D(N, {
230
232
  title: L("coolandlovely.profile.favouriteBrands", "Favourite brands"),
231
- children: G.favouriteBrands.length ? /* @__PURE__ */ O("div", {
233
+ children: G.favouriteBrands.length ? /* @__PURE__ */ D("div", {
232
234
  className: "grid grid-cols-1 gap-2",
233
- children: G.favouriteBrands.map((e, t) => /* @__PURE__ */ k("div", {
235
+ children: G.favouriteBrands.map((e, t) => /* @__PURE__ */ O("div", {
234
236
  className: "flex items-center gap-2 rounded-lg border border-border-seam bg-bg-surface px-3 py-2",
235
- children: [/* @__PURE__ */ O("span", {
237
+ children: [/* @__PURE__ */ D("span", {
236
238
  className: "flex h-7 w-7 shrink-0 items-center justify-center rounded-md bg-accent-purple-subtle text-xs font-bold text-text-primary",
237
239
  children: M(e)
238
- }), /* @__PURE__ */ O("span", {
240
+ }), /* @__PURE__ */ D("span", {
239
241
  className: "truncate text-sm font-medium text-text-primary",
240
242
  children: e
241
243
  })]
242
244
  }, `${e}-${t}`))
243
- }) : /* @__PURE__ */ O("p", {
245
+ }) : /* @__PURE__ */ D("p", {
244
246
  className: "text-sm text-text-secondary",
245
247
  children: L("coolandlovely.profile.noBrands", "No brands yet.")
246
248
  })
247
- }), R && /* @__PURE__ */ O(N, {
249
+ }), R && /* @__PURE__ */ D(N, {
248
250
  title: L("coolandlovely.profile.sizes", "Sizes"),
249
- children: a.length ? /* @__PURE__ */ O("dl", {
251
+ children: a.length ? /* @__PURE__ */ D("dl", {
250
252
  className: "space-y-0",
251
- children: a.map(([e, t]) => /* @__PURE__ */ k("div", {
253
+ children: a.map(([e, t]) => /* @__PURE__ */ O("div", {
252
254
  className: "flex items-center justify-between border-b border-border-seam/60 py-1.5 last:border-0",
253
- children: [/* @__PURE__ */ O("dt", {
255
+ children: [/* @__PURE__ */ D("dt", {
254
256
  className: "text-sm text-text-secondary",
255
- children: L(`coolandlovely.size.${e.toLowerCase()}`, f(e))
256
- }), /* @__PURE__ */ O("dd", {
257
+ children: L(`coolandlovely.size.${e.toLowerCase()}`, d(e))
258
+ }), /* @__PURE__ */ D("dd", {
257
259
  className: "text-sm font-medium text-text-primary tabular-nums",
258
260
  children: String(t)
259
261
  })]
260
262
  }, e))
261
- }) : /* @__PURE__ */ O("p", {
263
+ }) : /* @__PURE__ */ D("p", {
262
264
  className: "text-sm text-text-secondary",
263
265
  children: L("coolandlovely.profile.noSizes", "No sizes recorded yet.")
264
266
  })
265
267
  })]
266
268
  })
267
269
  ]
268
- }), /* @__PURE__ */ k("div", {
270
+ }), /* @__PURE__ */ O("div", {
269
271
  className: "space-y-6 lg:col-span-2",
270
- children: [R && /* @__PURE__ */ O(N, {
272
+ children: [R && /* @__PURE__ */ D(N, {
271
273
  title: L("coolandlovely.profile.myWardrobe", "My wardrobe"),
272
- children: W.isLoading ? /* @__PURE__ */ k("div", {
274
+ children: W.isLoading ? /* @__PURE__ */ O("div", {
273
275
  className: "flex items-center gap-2 text-sm text-text-secondary",
274
276
  children: [
275
- /* @__PURE__ */ O(C, { className: "h-4 w-4 animate-spin" }),
277
+ /* @__PURE__ */ D(S, { className: "h-4 w-4 animate-spin" }),
276
278
  " ",
277
279
  L("coolandlovely.loading.short", "Loading…")
278
280
  ]
279
- }) : r.length ? /* @__PURE__ */ O("div", {
281
+ }) : r.length ? /* @__PURE__ */ D("div", {
280
282
  className: "grid grid-cols-3 gap-2",
281
- children: r.map((e) => /* @__PURE__ */ O("button", {
283
+ children: r.map((e) => /* @__PURE__ */ D("button", {
282
284
  type: "button",
283
285
  onClick: () => F("/wardrobe"),
284
286
  "aria-label": e.name,
285
287
  className: "group overflow-hidden rounded-lg focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--color-focus-ring)]",
286
- children: /* @__PURE__ */ O(u, {
287
- icon: p(e.category, 18),
288
+ children: /* @__PURE__ */ D(l, {
289
+ icon: f(e.category, 18),
288
290
  seed: e.id,
289
291
  fileId: e.image?.id,
290
292
  alt: e.name,
291
293
  className: "aspect-square w-full rounded-lg"
292
294
  })
293
295
  }, e.id))
294
- }) : /* @__PURE__ */ k("button", {
296
+ }) : /* @__PURE__ */ O("button", {
295
297
  type: "button",
296
298
  onClick: () => F("/wardrobe/new"),
297
299
  className: "flex w-full items-center gap-2 rounded-lg border border-dashed border-border-seam px-3 py-3 text-left text-sm text-text-secondary transition-colors hover:text-text-primary",
298
300
  children: [
299
- /* @__PURE__ */ O(ae, { className: "h-4 w-4" }),
301
+ /* @__PURE__ */ D(se, { className: "h-4 w-4" }),
300
302
  " ",
301
303
  L("coolandlovely.profile.addPieces", "Add pieces to your wardrobe")
302
304
  ]
303
305
  })
304
- }), /* @__PURE__ */ O(N, {
306
+ }), /* @__PURE__ */ D(N, {
305
307
  title: L("coolandlovely.profile.recentLooks", "Recent looks"),
306
- children: K.isLoading ? /* @__PURE__ */ k("div", {
308
+ children: K.isLoading ? /* @__PURE__ */ O("div", {
307
309
  className: "flex items-center gap-2 text-sm text-text-secondary",
308
310
  children: [
309
- /* @__PURE__ */ O(C, { className: "h-4 w-4 animate-spin" }),
311
+ /* @__PURE__ */ D(S, { className: "h-4 w-4 animate-spin" }),
310
312
  " ",
311
313
  L("coolandlovely.loading.short", "Loading…")
312
314
  ]
313
- }) : i.length ? /* @__PURE__ */ O("div", {
315
+ }) : i.length ? /* @__PURE__ */ D("div", {
314
316
  className: "-mx-1 flex gap-3 overflow-x-auto px-1 pb-1",
315
- children: i.map((e) => /* @__PURE__ */ k("button", {
317
+ children: i.map((e) => /* @__PURE__ */ O("button", {
316
318
  type: "button",
317
319
  onClick: () => F(`/looks/${e.id}`),
318
320
  className: "group w-24 shrink-0 text-left focus-visible:outline-none",
319
- children: [/* @__PURE__ */ O(u, {
320
- icon: /* @__PURE__ */ O(oe, { className: "h-5 w-5" }),
321
+ children: [/* @__PURE__ */ D(l, {
322
+ icon: /* @__PURE__ */ D(w, { className: "h-5 w-5" }),
321
323
  seed: e.id,
322
324
  fileId: e.image?.id,
323
325
  alt: e.title,
324
326
  className: "aspect-[3/4] w-full rounded-lg"
325
- }), /* @__PURE__ */ O("p", {
327
+ }), /* @__PURE__ */ D("p", {
326
328
  className: "mt-1 truncate text-xs text-text-secondary",
327
329
  children: e.title
328
330
  })]
329
331
  }, e.id))
330
- }) : /* @__PURE__ */ O("p", {
332
+ }) : /* @__PURE__ */ D("p", {
331
333
  className: "text-sm text-text-secondary",
332
334
  children: R ? L("coolandlovely.profile.noLooksOwn", "You have not published any looks yet.") : L("coolandlovely.profile.noLooksOther", "No looks published yet.")
333
335
  })
334
336
  })]
335
337
  })]
336
338
  }),
337
- R && /* @__PURE__ */ k("section", {
339
+ R && /* @__PURE__ */ O("section", {
338
340
  className: "mt-6",
339
- children: [/* @__PURE__ */ k("h3", {
341
+ children: [/* @__PURE__ */ O("h3", {
340
342
  className: "mb-3 flex items-center gap-2 text-lg font-semibold text-text-primary",
341
343
  children: [
342
- /* @__PURE__ */ O(se, { className: "h-5 w-5" }),
344
+ /* @__PURE__ */ D(E, { className: "h-5 w-5" }),
343
345
  " ",
344
346
  L("coolandlovely.profile.peopleYouFollow", "People you follow"),
345
347
  " (",
346
348
  Z.length,
347
349
  ")"
348
350
  ]
349
- }), U.isLoading ? /* @__PURE__ */ k("div", {
351
+ }), U.isLoading ? /* @__PURE__ */ O("div", {
350
352
  className: "flex items-center gap-2 rounded-lg border border-border-seam bg-bg-surface p-4 text-sm text-text-secondary",
351
353
  children: [
352
- /* @__PURE__ */ O(C, { className: "h-4 w-4 animate-spin" }),
354
+ /* @__PURE__ */ D(S, { className: "h-4 w-4 animate-spin" }),
353
355
  " ",
354
356
  L("coolandlovely.loading.short", "Loading…")
355
357
  ]
356
- }) : Z.length === 0 ? /* @__PURE__ */ O("p", {
358
+ }) : Z.length === 0 ? /* @__PURE__ */ D("p", {
357
359
  className: "rounded-lg border border-border-seam bg-bg-surface p-4 text-sm text-text-secondary",
358
360
  children: L("coolandlovely.profile.noFollowing", "You are not following anyone yet. Follow creators from their looks to see their latest in Discover.")
359
- }) : /* @__PURE__ */ O("ul", {
361
+ }) : /* @__PURE__ */ D("ul", {
360
362
  className: "divide-y divide-border-seam rounded-lg border border-border-seam bg-bg-surface",
361
- children: Z.map((e) => /* @__PURE__ */ k("li", {
363
+ children: Z.map((e) => /* @__PURE__ */ O("li", {
362
364
  className: "flex items-center gap-3 px-4 py-3",
363
- children: [/* @__PURE__ */ k("button", {
365
+ children: [/* @__PURE__ */ O("button", {
364
366
  type: "button",
365
367
  onClick: () => F(`/profile/${e.ownerId}`),
366
368
  className: "flex min-w-0 flex-1 items-center gap-3 text-left focus-visible:outline-none",
367
- children: [/* @__PURE__ */ O("div", {
369
+ children: [/* @__PURE__ */ D("div", {
368
370
  className: "flex h-9 w-9 shrink-0 items-center justify-center rounded-full bg-accent-purple-subtle text-text-primary",
369
- children: /* @__PURE__ */ O(T, { className: "h-5 w-5" })
370
- }), /* @__PURE__ */ k("div", {
371
+ children: /* @__PURE__ */ D(T, { className: "h-5 w-5" })
372
+ }), /* @__PURE__ */ O("div", {
371
373
  className: "min-w-0 flex-1",
372
- children: [/* @__PURE__ */ O("p", {
374
+ children: [/* @__PURE__ */ D("p", {
373
375
  className: "truncate text-sm font-medium text-text-primary hover:underline",
374
- children: e.displayName || /* @__PURE__ */ O(v, { id: e.ownerId })
375
- }), e.bio && /* @__PURE__ */ O("p", {
376
+ children: e.displayName || /* @__PURE__ */ D(_, { id: e.ownerId })
377
+ }), e.bio && /* @__PURE__ */ D("p", {
376
378
  className: "truncate text-xs text-text-secondary",
377
379
  children: e.bio
378
380
  })]
379
381
  })]
380
- }), /* @__PURE__ */ O(y, {
382
+ }), /* @__PURE__ */ D(v, {
381
383
  followeeId: e.ownerId,
382
384
  size: "sm"
383
385
  })]
@@ -388,109 +390,112 @@ function P() {
388
390
  })
389
391
  });
390
392
  }
391
- let me = Array.from(/* @__PURE__ */ new Set([...le, ...Object.keys(J.sizes).map((e) => e.toLowerCase())]));
392
- return /* @__PURE__ */ O(n, {
393
+ let he = Array.from(/* @__PURE__ */ new Set([...A, ...Object.keys(J.sizes).map((e) => e.toLowerCase())]));
394
+ return /* @__PURE__ */ D(n, {
393
395
  title: X ? L("coolandlovely.profile.editTitle", "Edit style profile") : L("coolandlovely.profile.createTitle", "Create your style profile"),
394
396
  description: L("coolandlovely.profile.editDescription", "This powers your personalised discovery feed"),
395
- actions: X ? /* @__PURE__ */ k("button", {
397
+ actions: X ? /* @__PURE__ */ O("button", {
396
398
  type: "button",
397
399
  onClick: () => q(!1),
398
400
  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",
399
401
  children: [
400
- /* @__PURE__ */ O(E, { className: "h-4 w-4" }),
402
+ /* @__PURE__ */ D(ce, { className: "h-4 w-4" }),
401
403
  " ",
402
404
  L("coolandlovely.actions.cancel", "Cancel")
403
405
  ]
404
406
  }) : void 0,
405
- children: /* @__PURE__ */ O("form", {
406
- onSubmit: pe,
407
- className: "mx-auto max-w-2xl",
408
- children: /* @__PURE__ */ k(A, {
409
- treatment: "plain",
410
- className: "p-6",
411
- children: [
412
- /* @__PURE__ */ O(_, {
413
- id: "displayName",
414
- label: L("coolandlovely.field.displayName", "Display name"),
415
- value: J.displayName,
416
- onChange: (e) => Q("displayName", e),
417
- placeholder: L("coolandlovely.placeholder.displayName", "How you want to appear")
418
- }),
419
- /* @__PURE__ */ O(g, {
420
- id: "bio",
421
- label: L("coolandlovely.field.bio", "Bio"),
422
- value: J.bio,
423
- onChange: (e) => Q("bio", e),
424
- placeholder: L("coolandlovely.placeholder.bio", "A sentence about your style…"),
425
- rows: 3,
426
- className: "mt-4"
427
- }),
428
- /* @__PURE__ */ O(h, {
429
- id: "visibility",
430
- label: L("coolandlovely.field.visibility", "Visibility"),
431
- value: J.visibility,
432
- onChange: (e) => Q("visibility", e),
433
- options: fe,
434
- className: "mt-4"
435
- }),
436
- /* @__PURE__ */ O(_, {
437
- id: "stylePreferences",
438
- label: L("coolandlovely.field.stylePreferences", "Style preferences"),
439
- value: J.stylePreferences,
440
- onChange: (e) => Q("stylePreferences", e),
441
- placeholder: L("coolandlovely.placeholder.stylePreferences", "minimal, tailored, vintage"),
442
- hint: L("coolandlovely.hint.commaSeparated", "Comma-separated"),
443
- className: "mt-4"
444
- }),
445
- /* @__PURE__ */ O(_, {
446
- id: "palette",
447
- label: L("coolandlovely.field.palette", "Palette"),
448
- value: J.palette,
449
- onChange: (e) => Q("palette", e),
450
- placeholder: L("coolandlovely.placeholder.palette", "neutrals, navy, rust"),
451
- hint: L("coolandlovely.hint.palette", "Comma-separated colour names — shown as swatches"),
452
- className: "mt-4"
453
- }),
454
- /* @__PURE__ */ O(_, {
455
- id: "favouriteBrands",
456
- label: L("coolandlovely.field.favouriteBrands", "Favourite brands"),
457
- value: J.favouriteBrands,
458
- onChange: (e) => Q("favouriteBrands", e),
459
- placeholder: L("coolandlovely.placeholder.favouriteBrands", "Aurora Atelier, …"),
460
- hint: L("coolandlovely.hint.commaSeparated", "Comma-separated"),
461
- className: "mt-4"
462
- }),
463
- /* @__PURE__ */ k("div", {
464
- className: "mt-4",
465
- children: [/* @__PURE__ */ O("span", {
466
- className: "mb-2 block text-sm font-medium text-text-primary",
467
- children: L("coolandlovely.profile.sizes", "Sizes")
468
- }), /* @__PURE__ */ O("div", {
469
- className: "grid grid-cols-1 gap-3 sm:grid-cols-2",
470
- children: me.map((e) => /* @__PURE__ */ O(_, {
471
- id: `size-${e}`,
472
- label: L(`coolandlovely.size.${e}`, f(e)),
473
- value: J.sizes[e] ?? J.sizes[f(e)] ?? "",
474
- onChange: (t) => de(e, t),
475
- placeholder: L("coolandlovely.placeholder.size", "e.g. M · 26 · 39")
476
- }, e))
477
- })]
478
- }),
479
- H.isError && /* @__PURE__ */ O("p", {
480
- className: "mt-4 rounded-lg bg-status-error-bg-subtle px-3 py-2 text-sm text-status-error-text",
481
- children: H.error instanceof Error ? H.error.message : L("coolandlovely.error.generic", "Something went wrong")
482
- }),
483
- /* @__PURE__ */ O("div", {
484
- className: "mt-6 flex justify-end gap-2",
485
- children: /* @__PURE__ */ k("button", {
486
- type: "submit",
487
- disabled: H.isPending,
488
- className: "inline-flex items-center gap-1.5 rounded-lg bg-action-primary-bg px-5 py-2 text-sm font-medium text-action-primary-text transition-colors hover:bg-action-primary-bg/90 disabled:opacity-50",
489
- children: [H.isPending ? /* @__PURE__ */ O(C, { className: "h-4 w-4 animate-spin" }) : /* @__PURE__ */ O(ie, { className: "h-4 w-4" }), X ? L("coolandlovely.actions.saveChanges", "Save changes") : L("coolandlovely.actions.createProfile", "Create profile")]
407
+ children: /* @__PURE__ */ O("div", {
408
+ className: "mx-auto max-w-5xl",
409
+ children: [R && /* @__PURE__ */ D(y, {}), /* @__PURE__ */ D("form", {
410
+ onSubmit: me,
411
+ className: "mx-auto max-w-2xl",
412
+ children: /* @__PURE__ */ O(k, {
413
+ treatment: "plain",
414
+ className: "p-6",
415
+ children: [
416
+ /* @__PURE__ */ D(g, {
417
+ id: "displayName",
418
+ label: L("coolandlovely.field.displayName", "Display name"),
419
+ value: J.displayName,
420
+ onChange: (e) => Q("displayName", e),
421
+ placeholder: L("coolandlovely.placeholder.displayName", "How you want to appear")
422
+ }),
423
+ /* @__PURE__ */ D(h, {
424
+ id: "bio",
425
+ label: L("coolandlovely.field.bio", "Bio"),
426
+ value: J.bio,
427
+ onChange: (e) => Q("bio", e),
428
+ placeholder: L("coolandlovely.placeholder.bio", "A sentence about your style…"),
429
+ rows: 3,
430
+ className: "mt-4"
431
+ }),
432
+ /* @__PURE__ */ D(m, {
433
+ id: "visibility",
434
+ label: L("coolandlovely.field.visibility", "Visibility"),
435
+ value: J.visibility,
436
+ onChange: (e) => Q("visibility", e),
437
+ options: pe,
438
+ className: "mt-4"
439
+ }),
440
+ /* @__PURE__ */ D(g, {
441
+ id: "stylePreferences",
442
+ label: L("coolandlovely.field.stylePreferences", "Style preferences"),
443
+ value: J.stylePreferences,
444
+ onChange: (e) => Q("stylePreferences", e),
445
+ placeholder: L("coolandlovely.placeholder.stylePreferences", "minimal, tailored, vintage"),
446
+ hint: L("coolandlovely.hint.commaSeparated", "Comma-separated"),
447
+ className: "mt-4"
448
+ }),
449
+ /* @__PURE__ */ D(g, {
450
+ id: "palette",
451
+ label: L("coolandlovely.field.palette", "Palette"),
452
+ value: J.palette,
453
+ onChange: (e) => Q("palette", e),
454
+ placeholder: L("coolandlovely.placeholder.palette", "neutrals, navy, rust"),
455
+ hint: L("coolandlovely.hint.palette", "Comma-separated colour names — shown as swatches"),
456
+ className: "mt-4"
457
+ }),
458
+ /* @__PURE__ */ D(g, {
459
+ id: "favouriteBrands",
460
+ label: L("coolandlovely.field.favouriteBrands", "Favourite brands"),
461
+ value: J.favouriteBrands,
462
+ onChange: (e) => Q("favouriteBrands", e),
463
+ placeholder: L("coolandlovely.placeholder.favouriteBrands", "Aurora Atelier, …"),
464
+ hint: L("coolandlovely.hint.commaSeparated", "Comma-separated"),
465
+ className: "mt-4"
466
+ }),
467
+ /* @__PURE__ */ O("div", {
468
+ className: "mt-4",
469
+ children: [/* @__PURE__ */ D("span", {
470
+ className: "mb-2 block text-sm font-medium text-text-primary",
471
+ children: L("coolandlovely.profile.sizes", "Sizes")
472
+ }), /* @__PURE__ */ D("div", {
473
+ className: "grid grid-cols-1 gap-3 sm:grid-cols-2",
474
+ children: he.map((e) => /* @__PURE__ */ D(g, {
475
+ id: `size-${e}`,
476
+ label: L(`coolandlovely.size.${e}`, d(e)),
477
+ value: J.sizes[e] ?? J.sizes[d(e)] ?? "",
478
+ onChange: (t) => fe(e, t),
479
+ placeholder: L("coolandlovely.placeholder.size", "e.g. M · 26 · 39")
480
+ }, e))
481
+ })]
482
+ }),
483
+ H.isError && /* @__PURE__ */ D("p", {
484
+ className: "mt-4 rounded-lg bg-status-error-bg-subtle px-3 py-2 text-sm text-status-error-text",
485
+ children: H.error instanceof Error ? H.error.message : L("coolandlovely.error.generic", "Something went wrong")
486
+ }),
487
+ /* @__PURE__ */ D("div", {
488
+ className: "mt-6 flex justify-end gap-2",
489
+ children: /* @__PURE__ */ O("button", {
490
+ type: "submit",
491
+ disabled: H.isPending,
492
+ className: "inline-flex items-center gap-1.5 rounded-lg bg-action-primary-bg px-5 py-2 text-sm font-medium text-action-primary-text transition-colors hover:bg-action-primary-bg/90 disabled:opacity-50",
493
+ children: [H.isPending ? /* @__PURE__ */ D(S, { className: "h-4 w-4 animate-spin" }) : /* @__PURE__ */ D(oe, { className: "h-4 w-4" }), X ? L("coolandlovely.actions.saveChanges", "Save changes") : L("coolandlovely.actions.createProfile", "Create profile")]
494
+ })
490
495
  })
491
- })
492
- ]
493
- })
496
+ ]
497
+ })
498
+ })]
494
499
  })
495
500
  });
496
501
  }