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