@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,27 +1,28 @@
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 { StatusBadge as r } from "../../components/StatusBadge.js";
5
- import { ErrorView as i, LoadingView as a } from "../../components/StateViews.js";
6
- import { Thumbnail as o } from "../../components/Thumbnail.js";
7
- import { useLooks as s, useMyFollowing as c, useMyStyleProfile as l, useSearchLooks as u, useSearchStyleItems as ee, useStyleItems as d } from "../../hooks/useCoolAndLovelyApi.js";
8
- import { formatPrice as f, titleCase as p } from "../../utils/formatters.js";
9
- import { LookCard as te } from "../../components/LookCard.js";
4
+ import { useLooks as r, useMyFollowing as i, useMyStyleProfile as a, useSearchLooks as ee, useSearchStyleItems as o, useStyleItems as s } from "../../hooks/useCoolAndLovelyApi.js";
5
+ import { useTr as c } from "../../hooks/useTr.js";
10
6
  import "../../hooks/index.js";
11
- import { STYLE_CATEGORIES as ne, categoryIcon as m } from "../../utils/icons.js";
12
- import { EmptyState as h } from "../../components/EmptyState.js";
13
- import { TagList as g } from "../../components/TagList.js";
14
- import { ColourSwatchRow as _ } from "../../components/ColourSwatchRow.js";
15
- import { useMemo as re, useState as v } from "react";
16
- import { ChevronLeft as ie, ChevronRight as y, Compass as b, Heart as ae, Search as oe, Shirt as se, ShoppingBag as x, Sparkles as S, UserCheck as ce, Users as le, X as C } from "lucide-react";
17
- import { Fragment as w, jsx as T, jsxs as E } from "react/jsx-runtime";
7
+ import { StatusBadge as l } from "../../components/StatusBadge.js";
8
+ import { ErrorView as u, LoadingView as d } from "../../components/StateViews.js";
9
+ import { Thumbnail as f } from "../../components/Thumbnail.js";
10
+ import { formatPrice as p, titleCase as m } from "../../utils/formatters.js";
11
+ import { LookCard as te } from "../../components/LookCard.js";
12
+ import { STYLE_CATEGORIES as ne, categoryIcon as h } from "../../utils/icons.js";
13
+ import { EmptyState as g } from "../../components/EmptyState.js";
14
+ import { TagList as _ } from "../../components/TagList.js";
15
+ import { ColourSwatchRow as v } from "../../components/ColourSwatchRow.js";
16
+ import { useMemo as re, useState as y } from "react";
17
+ import { ChevronLeft as ie, ChevronRight as b, Compass as x, Heart as ae, Search as oe, Shirt as se, ShoppingBag as S, Sparkles as C, UserCheck as ce, Users as le, X as w } from "lucide-react";
18
+ import { Fragment as T, jsx as E, jsxs as D } from "react/jsx-runtime";
18
19
  import { EmphasisPanel as ue, PagePurpose as de } from "@burdenoff/fe-libs/ui";
19
20
  import { useActorProfiles as fe } from "@burdenoff/fe-libs/shared";
20
21
  //#region src/coolandlovely/pages/discover/DiscoverPage.tsx
21
- function D(e) {
22
+ function O(e) {
22
23
  return new Set(e.map((e) => e.trim().toLowerCase()).filter(Boolean));
23
24
  }
24
- function O(e, t) {
25
+ function k(e, t) {
25
26
  let n = /* @__PURE__ */ new Set(), r = [];
26
27
  for (let i of e) {
27
28
  let e = i.trim().toLowerCase();
@@ -29,193 +30,164 @@ function O(e, t) {
29
30
  }
30
31
  return r;
31
32
  }
32
- var k = ({ title: e, icon: t, sublabel: n, children: r }) => /* @__PURE__ */ E("section", {
33
+ var A = ({ title: e, icon: t, sublabel: n, children: r }) => /* @__PURE__ */ D("section", {
33
34
  className: "mt-8",
34
- children: [/* @__PURE__ */ E("div", {
35
+ children: [/* @__PURE__ */ D("div", {
35
36
  className: "mb-3",
36
- children: [/* @__PURE__ */ E("h2", {
37
+ children: [/* @__PURE__ */ D("h2", {
37
38
  className: "flex items-center gap-2 text-lg font-semibold text-text-primary",
38
39
  children: [
39
40
  t,
40
41
  " ",
41
42
  e
42
43
  ]
43
- }), n ? /* @__PURE__ */ T("p", {
44
+ }), n ? /* @__PURE__ */ E("p", {
44
45
  className: "mt-0.5 text-sm text-text-secondary",
45
46
  children: n
46
47
  }) : null]
47
48
  }), r]
48
- }), A = ({ label: e, values: t, withSwatches: n }) => t.length === 0 ? null : /* @__PURE__ */ E("div", {
49
+ }), j = ({ label: e, values: t, withSwatches: n }) => t.length === 0 ? null : /* @__PURE__ */ D("div", {
49
50
  className: "min-w-0 rounded-lg bg-bg-sunken p-3",
50
- children: [/* @__PURE__ */ E("div", {
51
+ children: [/* @__PURE__ */ D("div", {
51
52
  className: "flex items-center justify-between gap-2",
52
- children: [/* @__PURE__ */ T("p", {
53
+ children: [/* @__PURE__ */ E("p", {
53
54
  className: "text-xs font-medium uppercase tracking-wide text-text-secondary",
54
55
  children: e
55
- }), n ? /* @__PURE__ */ T(_, {
56
+ }), n ? /* @__PURE__ */ E(v, {
56
57
  colours: t,
57
58
  max: 6
58
59
  }) : null]
59
- }), /* @__PURE__ */ T(g, {
60
+ }), /* @__PURE__ */ E(_, {
60
61
  tags: t,
61
62
  max: 8,
62
63
  tone: "accent",
63
64
  className: "mt-2"
64
65
  })]
65
- }), pe = ({ reasons: e }) => e.length === 0 ? null : /* @__PURE__ */ E("div", {
66
+ }), pe = ({ reasons: e }) => e.length === 0 ? null : /* @__PURE__ */ D("div", {
66
67
  className: "mt-2",
67
- children: [/* @__PURE__ */ T("p", {
68
+ children: [/* @__PURE__ */ E("p", {
68
69
  className: "text-xs font-medium text-text-secondary",
69
70
  children: "Why this matched"
70
- }), /* @__PURE__ */ T(g, {
71
+ }), /* @__PURE__ */ E(_, {
71
72
  tags: e,
72
73
  max: 3,
73
74
  tone: "accent",
74
75
  className: "mt-1"
75
76
  })]
76
77
  }), me = [
77
- {
78
- value: "for-you",
79
- label: "For you",
80
- icon: /* @__PURE__ */ T(b, { className: "h-4 w-4" })
81
- },
82
- {
83
- value: "items",
84
- label: "Items",
85
- icon: /* @__PURE__ */ T(x, { className: "h-4 w-4" })
86
- },
87
- {
88
- value: "looks",
89
- label: "Looks",
90
- icon: /* @__PURE__ */ T(S, { className: "h-4 w-4" })
91
- }
78
+ "ACTIVE",
79
+ "DRAFT",
80
+ "OUT_OF_STOCK",
81
+ "RETIRED"
92
82
  ], he = [
93
- {
83
+ "EVERYDAY",
84
+ "WORK",
85
+ "EVENING",
86
+ "WEDDING_GUEST",
87
+ "VACATION",
88
+ "PARTY",
89
+ "ACTIVE",
90
+ "OTHER"
91
+ ], M = 24;
92
+ function ge(e) {
93
+ return e.replace(/_/g, " ").replace(/\b\w/g, (e) => e.toUpperCase());
94
+ }
95
+ function N() {
96
+ let { navigateTo: _, apiGatewayUrl: N, authToken: _e, workspaceId: ve } = e(), P = c(), F = a(), ye = [
97
+ {
98
+ value: "for-you",
99
+ label: P("coolandlovely.discover.forYou", "For you"),
100
+ icon: /* @__PURE__ */ E(x, { className: "h-4 w-4" })
101
+ },
102
+ {
103
+ value: "items",
104
+ label: P("coolandlovely.discover.items", "Items"),
105
+ icon: /* @__PURE__ */ E(S, { className: "h-4 w-4" })
106
+ },
107
+ {
108
+ value: "looks",
109
+ label: P("coolandlovely.discover.looks", "Looks"),
110
+ icon: /* @__PURE__ */ E(C, { className: "h-4 w-4" })
111
+ }
112
+ ], be = [{
94
113
  value: "ALL",
95
- label: "All"
96
- },
97
- {
98
- value: "ACTIVE",
99
- label: "Active"
100
- },
101
- {
102
- value: "DRAFT",
103
- label: "Draft"
104
- },
105
- {
106
- value: "OUT_OF_STOCK",
107
- label: "Out of stock"
108
- },
109
- {
110
- value: "RETIRED",
111
- label: "Retired"
112
- }
113
- ], ge = [
114
- {
114
+ label: P("coolandlovely.filters.all", "All")
115
+ }, ...me.map((e) => ({
116
+ value: e,
117
+ label: P(`coolandlovely.status.${e.toLowerCase()}`, ge(e))
118
+ }))], xe = [{
115
119
  value: "ALL",
116
- label: "All"
117
- },
118
- {
119
- value: "EVERYDAY",
120
- label: "Everyday"
121
- },
122
- {
123
- value: "WORK",
124
- label: "Work"
125
- },
126
- {
127
- value: "EVENING",
128
- label: "Evening"
129
- },
130
- {
131
- value: "WEDDING_GUEST",
132
- label: "Wedding guest"
133
- },
134
- {
135
- value: "VACATION",
136
- label: "Vacation"
137
- },
138
- {
139
- value: "PARTY",
140
- label: "Party"
141
- },
142
- {
143
- value: "ACTIVE",
144
- label: "Active"
145
- },
146
- {
147
- value: "OTHER",
148
- label: "Other"
149
- }
150
- ], j = 24;
151
- function M() {
152
- let { navigateTo: g, apiGatewayUrl: M, authToken: _e, workspaceId: ve } = e(), N = l(), P = s({ pagination: {
120
+ label: P("coolandlovely.filters.all", "All")
121
+ }, ...he.map((e) => ({
122
+ value: e,
123
+ label: P(`coolandlovely.occasion.${e.toLowerCase()}`, m(e))
124
+ }))], I = r({ pagination: {
153
125
  limit: 100,
154
126
  offset: 0
155
- } }), F = d({ pagination: {
127
+ } }), L = s({ pagination: {
156
128
  limit: 100,
157
129
  offset: 0
158
- } }), I = c(), [L, ye] = v("for-you"), [R, z] = v(""), [B, V] = v(0), [H, U] = v(0), [W, G] = v([]), [K, q] = v("ALL"), [J, Y] = v("ALL"), X = ee({
130
+ } }), R = i(), [z, Se] = y("for-you"), [B, V] = y(""), [H, U] = y(0), [W, G] = y(0), [K, q] = y([]), [J, Ce] = y("ALL"), [Y, we] = y("ALL"), X = o({
159
131
  input: {
160
- query: R.trim() || void 0,
161
- categories: W.length > 0 ? W : void 0,
162
- status: K === "ALL" ? void 0 : K
132
+ query: B.trim() || void 0,
133
+ categories: K.length > 0 ? K : void 0,
134
+ status: J === "ALL" ? void 0 : J
163
135
  },
164
136
  pagination: {
165
- limit: j,
166
- offset: B
137
+ limit: M,
138
+ offset: H
167
139
  }
168
- }), Z = u({
140
+ }), Z = ee({
169
141
  input: {
170
- query: R.trim() || void 0,
171
- occasion: J === "ALL" ? void 0 : J
142
+ query: B.trim() || void 0,
143
+ occasion: Y === "ALL" ? void 0 : Y
172
144
  },
173
145
  pagination: {
174
- limit: j,
175
- offset: H
146
+ limit: M,
147
+ offset: W
176
148
  }
177
- }), be = N.isLoading || P.isLoading || F.isLoading, xe = P.isError && F.isError, Q = re(() => {
178
- let e = N.data, t = P.data?.items ?? [], n = F.data?.items ?? [], r = new Set((I.data ?? []).map((e) => e.ownerId)), i = D([
149
+ }), Te = F.isLoading || I.isLoading || L.isLoading, Ee = I.isError && L.isError, Q = re(() => {
150
+ let e = F.data, t = I.data?.items ?? [], n = L.data?.items ?? [], r = new Set((R.data ?? []).map((e) => e.ownerId)), i = O([
179
151
  ...e?.stylePreferences ?? [],
180
152
  ...e?.palette ?? [],
181
153
  ...e?.favouriteBrands ?? []
182
- ]), a = D(e?.palette ?? []), o = D(e?.favouriteBrands ?? []), s = (e) => {
183
- let t = O(e.tags, i), n = i.has(e.occasion.toLowerCase());
154
+ ]), a = O(e?.palette ?? []), ee = O(e?.favouriteBrands ?? []), o = (e) => {
155
+ let t = k(e.tags, i), n = i.has(e.occasion.toLowerCase());
184
156
  return {
185
157
  row: e,
186
158
  score: t.length * 2 + +!!n + e.likeCount * .05 + e.saveCount * .05,
187
- reasons: n ? [...t, p(e.occasion)] : t
159
+ reasons: n ? [...t, m(e.occasion)] : t
188
160
  };
189
- }, c = (e) => {
190
- let t = O(e.colours, a), n = O(e.tags, i), r = i.has(e.category.toLowerCase()), s = e.brand?.name?.trim(), c = s && o.has(s.toLowerCase()) ? s : null;
161
+ }, s = (e) => {
162
+ let t = k(e.colours, a), n = k(e.tags, i), r = i.has(e.category.toLowerCase()), o = e.brand?.name?.trim(), s = o && ee.has(o.toLowerCase()) ? o : null;
191
163
  return {
192
164
  row: e,
193
- score: n.length * 2 + t.length * 2 + +!!r + +!!c,
165
+ score: n.length * 2 + t.length * 2 + +!!r + +!!s,
194
166
  reasons: [
195
167
  ...t,
196
168
  ...n,
197
- ...r ? [p(e.category)] : [],
198
- ...c ? [c] : []
169
+ ...r ? [m(e.category)] : [],
170
+ ...s ? [s] : []
199
171
  ]
200
172
  };
201
- }, l = i.size > 0, u = t.map(s).sort((e, t) => l ? t.score - e.score : t.row.likeCount + t.row.saveCount - (e.row.likeCount + e.row.saveCount)).slice(0, 8), ee = n.map(c).filter((e) => l ? e.score > 0 : !0).sort((e, t) => t.score - e.score).slice(0, 8), d = t.filter((e) => r.has(e.authorId)).sort((e, t) => t.likeCount + t.saveCount - (e.likeCount + e.saveCount)).slice(0, 8);
173
+ }, c = i.size > 0, l = t.map(o).sort((e, t) => c ? t.score - e.score : t.row.likeCount + t.row.saveCount - (e.row.likeCount + e.row.saveCount)).slice(0, 8), u = n.map(s).filter((e) => c ? e.score > 0 : !0).sort((e, t) => t.score - e.score).slice(0, 8), d = t.filter((e) => r.has(e.authorId)).sort((e, t) => t.likeCount + t.saveCount - (e.likeCount + e.saveCount)).slice(0, 8);
202
174
  return {
203
175
  hasProfile: !!e,
204
- hasTaste: l,
176
+ hasTaste: c,
205
177
  palette: e?.palette ?? [],
206
178
  aesthetics: e?.stylePreferences ?? [],
207
179
  favouriteBrands: e?.favouriteBrands ?? [],
208
- madeForYou: u,
209
- inYourPalette: ee,
180
+ madeForYou: l,
181
+ inYourPalette: u,
210
182
  fromFollowing: d,
211
- followingProfiles: I.data ?? []
183
+ followingProfiles: R.data ?? []
212
184
  };
213
185
  }, [
214
- N.data,
215
- P.data,
216
186
  F.data,
217
- I.data
218
- ]), Se = fe(re(() => {
187
+ I.data,
188
+ L.data,
189
+ R.data
190
+ ]), De = fe(re(() => {
219
191
  let e = /* @__PURE__ */ new Set();
220
192
  for (let t of Q.madeForYou) e.add(t.row.authorId);
221
193
  for (let t of Q.fromFollowing) e.add(t.authorId);
@@ -224,266 +196,281 @@ function M() {
224
196
  actorType: "user"
225
197
  }));
226
198
  }, [Q]), {
227
- apiGatewayUrl: M,
199
+ apiGatewayUrl: N,
228
200
  authToken: _e,
229
201
  workspaceId: ve
230
202
  }), $ = (e) => {
231
- let t = Se[e];
203
+ let t = De[e];
232
204
  return t?.resolved ? t.displayName : null;
233
- }, Ce = (e) => {
234
- G((t) => t.includes(e) ? t.filter((t) => t !== e) : [...t, e]), V(0);
205
+ }, Oe = (e) => {
206
+ q((t) => t.includes(e) ? t.filter((t) => t !== e) : [...t, e]), U(0);
235
207
  };
236
- return /* @__PURE__ */ E(n, {
237
- title: "Discover",
238
- description: "Find looks and pieces tuned to your taste",
208
+ return /* @__PURE__ */ D(n, {
209
+ title: P("coolandlovely.page.discoverTitle", "Discover"),
210
+ description: P("coolandlovely.page.discoverSubtitle", "Find looks and pieces tuned to your taste"),
239
211
  hero: !0,
240
212
  children: [
241
- /* @__PURE__ */ T(de, {
213
+ /* @__PURE__ */ E(de, {
242
214
  className: "mb-4",
243
- children: "Your personalised feed, computed live from your style profile, plus search across every piece and look on the platform."
215
+ children: P("coolandlovely.discover.purpose", "Your personalised feed, computed live from your style profile, plus search across every piece and look on the platform.")
244
216
  }),
245
- /* @__PURE__ */ T("div", {
217
+ /* @__PURE__ */ E("div", {
246
218
  className: "mb-4 flex items-center gap-2",
247
- children: /* @__PURE__ */ E("div", {
219
+ children: /* @__PURE__ */ D("div", {
248
220
  className: "relative flex-1",
249
221
  children: [
250
- /* @__PURE__ */ T(oe, { className: "absolute left-3 top-1/2 h-4 w-4 -translate-y-1/2 text-text-secondary" }),
251
- /* @__PURE__ */ T("input", {
222
+ /* @__PURE__ */ E(oe, { className: "absolute left-3 top-1/2 h-4 w-4 -translate-y-1/2 text-text-secondary" }),
223
+ /* @__PURE__ */ E("input", {
252
224
  type: "text",
253
- value: R,
225
+ value: B,
254
226
  onChange: (e) => {
255
- z(e.target.value), V(0), U(0);
227
+ V(e.target.value), U(0), G(0);
256
228
  },
257
- placeholder: "Search style items and looks…",
229
+ placeholder: P("coolandlovely.discover.searchPlaceholder", "Search style items and looks…"),
258
230
  className: "w-full rounded-lg border border-border-seam bg-bg-surface py-2.5 pl-9 pr-9 text-sm text-text-primary placeholder:text-text-secondary focus:outline-none focus:ring-2 focus:ring-[var(--color-focus-ring)]"
259
231
  }),
260
- R && /* @__PURE__ */ T("button", {
232
+ B && /* @__PURE__ */ E("button", {
261
233
  type: "button",
262
- onClick: () => z(""),
234
+ onClick: () => V(""),
263
235
  className: "absolute right-2 top-1/2 -translate-y-1/2 rounded p-1 text-text-secondary hover:text-text-primary",
264
- children: /* @__PURE__ */ T(C, { className: "h-4 w-4" })
236
+ children: /* @__PURE__ */ E(w, { className: "h-4 w-4" })
265
237
  })
266
238
  ]
267
239
  })
268
240
  }),
269
- /* @__PURE__ */ E("div", {
241
+ /* @__PURE__ */ D("div", {
270
242
  className: "mb-6 flex items-center gap-1 border-b border-border-seam",
271
- children: [me.map((e) => /* @__PURE__ */ E("button", {
243
+ children: [ye.map((e) => /* @__PURE__ */ D("button", {
272
244
  type: "button",
273
- onClick: () => ye(e.value),
274
- className: t("inline-flex items-center gap-1.5 border-b-2 px-3 py-2.5 text-sm font-medium transition-colors", L === e.value ? "border-action-primary-bg text-text-primary" : "border-transparent text-text-secondary hover:text-text-primary"),
245
+ onClick: () => Se(e.value),
246
+ className: t("inline-flex items-center gap-1.5 border-b-2 px-3 py-2.5 text-sm font-medium transition-colors", z === e.value ? "border-action-primary-bg text-text-primary" : "border-transparent text-text-secondary hover:text-text-primary"),
275
247
  children: [
276
248
  e.icon,
277
249
  " ",
278
250
  e.label
279
251
  ]
280
- }, e.value)), (R || W.length > 0 || K !== "ALL" || J !== "ALL") && /* @__PURE__ */ E("button", {
252
+ }, e.value)), (B || K.length > 0 || J !== "ALL" || Y !== "ALL") && /* @__PURE__ */ D("button", {
281
253
  type: "button",
282
254
  onClick: () => {
283
- z(""), G([]), q("ALL"), Y("ALL"), V(0), U(0);
255
+ V(""), q([]), Ce("ALL"), we("ALL"), U(0), G(0);
284
256
  },
285
257
  className: "ml-auto inline-flex items-center gap-1 rounded-full px-3 py-1.5 text-xs font-medium text-text-secondary transition-colors hover:bg-bg-sunken hover:text-text-primary",
286
- children: [/* @__PURE__ */ T(C, { className: "h-3.5 w-3.5" }), " Clear"]
258
+ children: [
259
+ /* @__PURE__ */ E(w, { className: "h-3.5 w-3.5" }),
260
+ " ",
261
+ P("coolandlovely.filters.clear", "Clear")
262
+ ]
287
263
  })]
288
264
  }),
289
- L === "for-you" && (be ? /* @__PURE__ */ T(a, { label: "Curating your feed…" }) : xe ? /* @__PURE__ */ T(i, { onRetry: () => {
290
- P.refetch(), F.refetch();
291
- } }) : /* @__PURE__ */ E(w, { children: [
292
- Q.hasProfile ? null : /* @__PURE__ */ T(ue, {
265
+ z === "for-you" && (Te ? /* @__PURE__ */ E(d, { label: P("coolandlovely.loading.feed", "Curating your feed…") }) : Ee ? /* @__PURE__ */ E(u, { onRetry: () => {
266
+ I.refetch(), L.refetch();
267
+ } }) : /* @__PURE__ */ D(T, { children: [
268
+ Q.hasProfile ? null : /* @__PURE__ */ E(ue, {
293
269
  className: "mb-8",
294
- children: /* @__PURE__ */ E("div", {
270
+ children: /* @__PURE__ */ D("div", {
295
271
  className: "flex flex-col items-start gap-3 sm:flex-row sm:items-center sm:justify-between",
296
- children: [/* @__PURE__ */ E("div", { children: [/* @__PURE__ */ T("h2", {
272
+ children: [/* @__PURE__ */ D("div", { children: [/* @__PURE__ */ E("h2", {
297
273
  className: "text-lg font-semibold text-text-primary",
298
- children: "Build your style profile"
299
- }), /* @__PURE__ */ T("p", {
274
+ children: P("coolandlovely.discover.buildProfileTitle", "Build your style profile")
275
+ }), /* @__PURE__ */ E("p", {
300
276
  className: "mt-1 text-sm text-text-secondary",
301
- children: "Tell us your aesthetics, palette and favourite brands and this feed tunes itself to you."
302
- })] }), /* @__PURE__ */ E("button", {
277
+ children: P("coolandlovely.discover.buildProfileDescription", "Tell us your aesthetics, palette and favourite brands and this feed tunes itself to you.")
278
+ })] }), /* @__PURE__ */ D("button", {
303
279
  type: "button",
304
- onClick: () => g("/profile"),
280
+ onClick: () => _("/profile"),
305
281
  className: "inline-flex shrink-0 items-center gap-1.5 rounded-lg bg-action-primary-bg px-4 py-2 text-sm font-medium text-action-primary-text transition-opacity hover:opacity-90",
306
- children: [/* @__PURE__ */ T(S, { className: "h-4 w-4" }), " Create profile"]
282
+ children: [
283
+ /* @__PURE__ */ E(C, { className: "h-4 w-4" }),
284
+ " ",
285
+ P("coolandlovely.discover.createProfile", "Create profile")
286
+ ]
307
287
  })]
308
288
  })
309
289
  }),
310
- Q.hasTaste ? /* @__PURE__ */ E("section", {
290
+ Q.hasTaste ? /* @__PURE__ */ D("section", {
311
291
  className: "mb-6 rounded-lg border border-border-seam bg-bg-surface p-4",
312
292
  children: [
313
- /* @__PURE__ */ E("div", {
293
+ /* @__PURE__ */ D("div", {
314
294
  className: "flex flex-wrap items-center justify-between gap-2",
315
- children: [/* @__PURE__ */ T("h2", {
295
+ children: [/* @__PURE__ */ E("h2", {
316
296
  className: "text-sm font-semibold text-text-primary",
317
- children: "Your declared taste"
318
- }), /* @__PURE__ */ E("button", {
297
+ children: P("coolandlovely.discover.declaredTaste", "Your declared taste")
298
+ }), /* @__PURE__ */ D("button", {
319
299
  type: "button",
320
- onClick: () => g("/profile"),
300
+ onClick: () => _("/profile"),
321
301
  className: "inline-flex items-center gap-0.5 text-sm font-medium text-action-primary-bg hover:underline",
322
- children: ["Edit profile ", /* @__PURE__ */ T(y, { className: "h-3.5 w-3.5" })]
302
+ children: [
303
+ P("coolandlovely.discover.editProfile", "Edit profile"),
304
+ " ",
305
+ /* @__PURE__ */ E(b, { className: "h-3.5 w-3.5" })
306
+ ]
323
307
  })]
324
308
  }),
325
- /* @__PURE__ */ T("p", {
309
+ /* @__PURE__ */ E("p", {
326
310
  className: "mt-1 text-xs text-text-secondary",
327
- children: "Everything below is ranked against these lists."
311
+ children: P("coolandlovely.discover.rankedAgainst", "Everything below is ranked against these lists.")
328
312
  }),
329
- /* @__PURE__ */ E("div", {
313
+ /* @__PURE__ */ D("div", {
330
314
  className: "mt-3 grid grid-cols-1 gap-3 sm:grid-cols-3",
331
315
  children: [
332
- /* @__PURE__ */ T(A, {
333
- label: "Palette",
316
+ /* @__PURE__ */ E(j, {
317
+ label: P("coolandlovely.profile.palette", "Palette"),
334
318
  values: Q.palette,
335
319
  withSwatches: !0
336
320
  }),
337
- /* @__PURE__ */ T(A, {
338
- label: "Aesthetics",
321
+ /* @__PURE__ */ E(j, {
322
+ label: P("coolandlovely.profile.aesthetics", "Aesthetics"),
339
323
  values: Q.aesthetics
340
324
  }),
341
- /* @__PURE__ */ T(A, {
342
- label: "Favourite brands",
325
+ /* @__PURE__ */ E(j, {
326
+ label: P("coolandlovely.profile.favouriteBrands", "Favourite brands"),
343
327
  values: Q.favouriteBrands
344
328
  })
345
329
  ]
346
330
  })
347
331
  ]
348
332
  }) : null,
349
- /* @__PURE__ */ T(k, {
350
- title: "Made for you",
351
- icon: /* @__PURE__ */ T(b, { className: "h-5 w-5" }),
352
- sublabel: Q.hasTaste ? "Ranked to match your style profile" : "Most-loved looks on the platform",
353
- children: Q.madeForYou.length === 0 ? /* @__PURE__ */ T(h, {
354
- title: "No looks yet",
355
- description: "Once looks are published they will appear here, tuned to your taste."
356
- }) : /* @__PURE__ */ T("div", {
333
+ /* @__PURE__ */ E(A, {
334
+ title: P("coolandlovely.discover.madeForYou", "Made for you"),
335
+ icon: /* @__PURE__ */ E(x, { className: "h-5 w-5" }),
336
+ sublabel: Q.hasTaste ? P("coolandlovely.discover.madeForYouTuned", "Ranked to match your style profile") : P("coolandlovely.discover.madeForYouFallback", "Most-loved looks on the platform"),
337
+ children: Q.madeForYou.length === 0 ? /* @__PURE__ */ E(g, {
338
+ title: P("coolandlovely.empty.looksTitle", "No looks yet"),
339
+ description: P("coolandlovely.discover.madeForYouEmpty", "Once looks are published they will appear here, tuned to your taste.")
340
+ }) : /* @__PURE__ */ E("div", {
357
341
  className: "grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-4",
358
342
  children: Q.madeForYou.map(({ row: e, reasons: t }) => {
359
343
  let n = $(e.authorId);
360
- return /* @__PURE__ */ E("button", {
344
+ return /* @__PURE__ */ D("button", {
361
345
  type: "button",
362
- onClick: () => g(`/looks/${e.id}`),
346
+ onClick: () => _(`/looks/${e.id}`),
363
347
  className: "group flex flex-col overflow-hidden rounded-lg border border-border-seam bg-bg-surface text-left transition-colors hover:border-accent-foreground/20 hover:shadow-md",
364
- children: [/* @__PURE__ */ T(o, {
365
- icon: /* @__PURE__ */ T(S, { className: "h-6 w-6" }),
348
+ children: [/* @__PURE__ */ E(f, {
349
+ icon: /* @__PURE__ */ E(C, { className: "h-6 w-6" }),
366
350
  seed: e.id,
367
351
  fileId: e.image?.id,
368
352
  alt: e.title,
369
353
  className: "aspect-[4/5] w-full rounded-none"
370
- }), /* @__PURE__ */ E("div", {
354
+ }), /* @__PURE__ */ D("div", {
371
355
  className: "min-w-0 p-3",
372
356
  children: [
373
- /* @__PURE__ */ T("p", {
357
+ /* @__PURE__ */ E("p", {
374
358
  className: "truncate text-sm font-medium text-text-primary",
375
359
  children: e.title
376
360
  }),
377
- n ? /* @__PURE__ */ T("p", {
361
+ n ? /* @__PURE__ */ E("p", {
378
362
  className: "mt-0.5 truncate text-xs text-text-secondary",
379
363
  children: n
380
364
  }) : null,
381
- /* @__PURE__ */ T("p", {
365
+ /* @__PURE__ */ E("p", {
382
366
  className: "mt-0.5 text-xs text-text-secondary",
383
- children: p(e.occasion)
367
+ children: P(`coolandlovely.occasion.${e.occasion.toLowerCase()}`, m(e.occasion))
384
368
  }),
385
- /* @__PURE__ */ E("span", {
369
+ /* @__PURE__ */ D("span", {
386
370
  className: "mt-2 inline-flex items-center gap-1 text-xs text-text-secondary",
387
371
  children: [
388
- /* @__PURE__ */ T(ae, { className: "h-3.5 w-3.5" }),
372
+ /* @__PURE__ */ E(ae, { className: "h-3.5 w-3.5" }),
389
373
  " ",
390
374
  e.likeCount
391
375
  ]
392
376
  }),
393
- Q.hasTaste ? /* @__PURE__ */ T(pe, { reasons: t }) : null
377
+ Q.hasTaste ? /* @__PURE__ */ E(pe, { reasons: t }) : null
394
378
  ]
395
379
  })]
396
380
  }, e.id);
397
381
  })
398
382
  })
399
383
  }),
400
- Q.inYourPalette.length > 0 ? /* @__PURE__ */ T(k, {
401
- title: "In your palette",
402
- icon: /* @__PURE__ */ T(x, { className: "h-5 w-5" }),
403
- sublabel: "Pieces that match your colours, categories and tags",
404
- children: /* @__PURE__ */ T("div", {
384
+ Q.inYourPalette.length > 0 ? /* @__PURE__ */ E(A, {
385
+ title: P("coolandlovely.discover.inYourPalette", "In your palette"),
386
+ icon: /* @__PURE__ */ E(S, { className: "h-5 w-5" }),
387
+ sublabel: P("coolandlovely.discover.inYourPaletteSub", "Pieces that match your colours, categories and tags"),
388
+ children: /* @__PURE__ */ E("div", {
405
389
  className: "grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-4",
406
- children: Q.inYourPalette.map(({ row: e, reasons: t }) => /* @__PURE__ */ E("button", {
390
+ children: Q.inYourPalette.map(({ row: e, reasons: t }) => /* @__PURE__ */ D("button", {
407
391
  type: "button",
408
- onClick: () => g(`/items/${e.id}`),
392
+ onClick: () => _(`/items/${e.id}`),
409
393
  className: "group flex flex-col overflow-hidden rounded-lg border border-border-seam bg-bg-surface text-left transition-colors hover:border-accent-foreground/20 hover:shadow-md",
410
- children: [/* @__PURE__ */ T(o, {
411
- icon: /* @__PURE__ */ T(x, { className: "h-6 w-6" }),
394
+ children: [/* @__PURE__ */ E(f, {
395
+ icon: /* @__PURE__ */ E(S, { className: "h-6 w-6" }),
412
396
  seed: e.id,
413
397
  fileId: e.image?.id,
414
398
  alt: e.name,
415
399
  className: "aspect-[4/5] w-full rounded-none"
416
- }), /* @__PURE__ */ E("div", {
400
+ }), /* @__PURE__ */ D("div", {
417
401
  className: "min-w-0 p-3",
418
402
  children: [
419
- /* @__PURE__ */ T("p", {
403
+ /* @__PURE__ */ E("p", {
420
404
  className: "truncate text-sm font-medium text-text-primary",
421
405
  children: e.name
422
406
  }),
423
- e.brand?.name ? /* @__PURE__ */ T("p", {
407
+ e.brand?.name ? /* @__PURE__ */ E("p", {
424
408
  className: "truncate text-xs text-text-secondary",
425
409
  children: e.brand.name
426
410
  }) : null,
427
- /* @__PURE__ */ E("p", {
411
+ /* @__PURE__ */ D("p", {
428
412
  className: "mt-0.5 flex items-baseline gap-2 text-xs text-text-secondary",
429
- children: [/* @__PURE__ */ T("span", {
413
+ children: [/* @__PURE__ */ E("span", {
430
414
  className: "font-medium text-text-primary tabular-nums",
431
- children: f(e.price, e.currency)
432
- }), /* @__PURE__ */ E("span", {
415
+ children: p(e.price, e.currency)
416
+ }), /* @__PURE__ */ D("span", {
433
417
  className: "truncate",
434
- children: [p(e.category), e.materials.length > 0 ? ` · ${e.materials.join(", ")}` : ""]
418
+ children: [P(`coolandlovely.category.${e.category.toLowerCase()}`, m(e.category)), e.materials.length > 0 ? ` · ${e.materials.join(", ")}` : ""]
435
419
  })]
436
420
  }),
437
- /* @__PURE__ */ T(_, {
421
+ /* @__PURE__ */ E(v, {
438
422
  colours: e.colours,
439
423
  max: 5,
440
424
  className: "mt-2"
441
425
  }),
442
- Q.hasTaste ? /* @__PURE__ */ T(pe, { reasons: t }) : null
426
+ Q.hasTaste ? /* @__PURE__ */ E(pe, { reasons: t }) : null
443
427
  ]
444
428
  })]
445
429
  }, e.id))
446
430
  })
447
431
  }) : null,
448
- /* @__PURE__ */ T(k, {
449
- title: "From people you follow",
450
- icon: /* @__PURE__ */ T(ce, { className: "h-5 w-5" }),
451
- sublabel: Q.followingProfiles.length === 0 ? "Follow creators and shoppers to see their looks here" : `You follow ${Q.followingProfiles.length} ${Q.followingProfiles.length === 1 ? "person" : "people"}`,
452
- children: Q.followingProfiles.length === 0 ? /* @__PURE__ */ T(h, {
453
- title: "You are not following anyone yet",
454
- description: "Open a look or a style profile and tap Follow to build a feed from people whose taste you love.",
455
- icon: /* @__PURE__ */ T(le, { className: "h-8 w-8" })
456
- }) : Q.fromFollowing.length === 0 ? /* @__PURE__ */ T("div", {
432
+ /* @__PURE__ */ E(A, {
433
+ title: P("coolandlovely.discover.fromFollowing", "From people you follow"),
434
+ icon: /* @__PURE__ */ E(ce, { className: "h-5 w-5" }),
435
+ sublabel: Q.followingProfiles.length === 0 ? P("coolandlovely.discover.followPrompt", "Follow creators and shoppers to see their looks here") : P("coolandlovely.discover.followCount", "You follow {{count}} {{people}}", {
436
+ count: Q.followingProfiles.length,
437
+ people: Q.followingProfiles.length === 1 ? P("coolandlovely.common.person", "person") : P("coolandlovely.common.people", "people")
438
+ }),
439
+ children: Q.followingProfiles.length === 0 ? /* @__PURE__ */ E(g, {
440
+ title: P("coolandlovely.discover.noFollowingTitle", "You are not following anyone yet"),
441
+ description: P("coolandlovely.discover.noFollowingDescription", "Open a look or a style profile and tap Follow to build a feed from people whose taste you love."),
442
+ icon: /* @__PURE__ */ E(le, { className: "h-8 w-8" })
443
+ }) : Q.fromFollowing.length === 0 ? /* @__PURE__ */ E("div", {
457
444
  className: "rounded-lg border border-border-seam bg-bg-surface p-4 text-sm text-text-secondary",
458
- children: "The people you follow have not published looks visible to you yet."
459
- }) : /* @__PURE__ */ T("div", {
445
+ children: P("coolandlovely.discover.followingEmpty", "The people you follow have not published looks visible to you yet.")
446
+ }) : /* @__PURE__ */ E("div", {
460
447
  className: "grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-4",
461
448
  children: Q.fromFollowing.map((e) => {
462
449
  let t = $(e.authorId);
463
- return /* @__PURE__ */ E("button", {
450
+ return /* @__PURE__ */ D("button", {
464
451
  type: "button",
465
- onClick: () => g(`/looks/${e.id}`),
452
+ onClick: () => _(`/looks/${e.id}`),
466
453
  className: "group flex flex-col overflow-hidden rounded-lg border border-border-seam bg-bg-surface text-left transition-colors hover:border-accent-foreground/20 hover:shadow-md",
467
- children: [/* @__PURE__ */ T(o, {
468
- icon: /* @__PURE__ */ T(S, { className: "h-6 w-6" }),
454
+ children: [/* @__PURE__ */ E(f, {
455
+ icon: /* @__PURE__ */ E(C, { className: "h-6 w-6" }),
469
456
  seed: e.id,
470
457
  fileId: e.image?.id,
471
458
  alt: e.title,
472
459
  className: "aspect-[4/5] w-full rounded-none"
473
- }), /* @__PURE__ */ E("div", {
460
+ }), /* @__PURE__ */ D("div", {
474
461
  className: "min-w-0 p-3",
475
462
  children: [
476
- /* @__PURE__ */ T("p", {
463
+ /* @__PURE__ */ E("p", {
477
464
  className: "truncate text-sm font-medium text-text-primary",
478
465
  children: e.title
479
466
  }),
480
- t ? /* @__PURE__ */ T("p", {
467
+ t ? /* @__PURE__ */ E("p", {
481
468
  className: "mt-0.5 truncate text-xs text-text-secondary",
482
469
  children: t
483
470
  }) : null,
484
- /* @__PURE__ */ T("p", {
471
+ /* @__PURE__ */ E("p", {
485
472
  className: "mt-0.5 text-xs text-text-secondary",
486
- children: p(e.occasion)
473
+ children: P(`coolandlovely.occasion.${e.occasion.toLowerCase()}`, m(e.occasion))
487
474
  })
488
475
  ]
489
476
  })]
@@ -492,83 +479,83 @@ function M() {
492
479
  })
493
480
  })
494
481
  ] })),
495
- L === "items" && (() => {
496
- let e = X.data, n = e?.items ?? [], s = e?.pageInfo.hasMore ?? !1;
497
- return /* @__PURE__ */ E("div", {
482
+ z === "items" && (() => {
483
+ let e = X.data, n = e?.items ?? [], r = e?.pageInfo.hasMore ?? !1;
484
+ return /* @__PURE__ */ D("div", {
498
485
  className: "space-y-4",
499
486
  children: [
500
- /* @__PURE__ */ T("div", {
487
+ /* @__PURE__ */ E("div", {
501
488
  className: "flex flex-wrap items-center gap-2",
502
- children: ne.map((e) => /* @__PURE__ */ E("button", {
489
+ children: ne.map((e) => /* @__PURE__ */ D("button", {
503
490
  type: "button",
504
- onClick: () => Ce(e),
505
- className: t("inline-flex items-center gap-1.5 rounded-full px-3 py-1.5 text-xs font-medium transition-colors", W.includes(e) ? "bg-accent-purple-subtle text-text-primary" : "bg-bg-sunken text-text-secondary hover:text-text-primary"),
491
+ onClick: () => Oe(e),
492
+ className: t("inline-flex items-center gap-1.5 rounded-full px-3 py-1.5 text-xs font-medium transition-colors", K.includes(e) ? "bg-accent-purple-subtle text-text-primary" : "bg-bg-sunken text-text-secondary hover:text-text-primary"),
506
493
  children: [
507
- m(e, 14),
494
+ h(e, 14),
508
495
  " ",
509
- p(e)
496
+ P(`coolandlovely.category.${e.toLowerCase()}`, m(e))
510
497
  ]
511
498
  }, e))
512
499
  }),
513
- /* @__PURE__ */ T("div", {
500
+ /* @__PURE__ */ E("div", {
514
501
  className: "flex flex-wrap items-center gap-2",
515
- children: he.map((e) => /* @__PURE__ */ T("button", {
502
+ children: be.map((e) => /* @__PURE__ */ E("button", {
516
503
  type: "button",
517
504
  onClick: () => {
518
- q(e.value), V(0);
505
+ Ce(e.value), U(0);
519
506
  },
520
- className: t("rounded-full px-3 py-1.5 text-sm font-medium transition-colors", K === e.value ? "bg-action-primary-bg text-action-primary-text" : "bg-bg-sunken text-text-secondary hover:text-text-primary"),
507
+ className: t("rounded-full px-3 py-1.5 text-sm font-medium transition-colors", J === e.value ? "bg-action-primary-bg text-action-primary-text" : "bg-bg-sunken text-text-secondary hover:text-text-primary"),
521
508
  children: e.label
522
509
  }, e.value))
523
510
  }),
524
- X.isLoading ? /* @__PURE__ */ T(a, { label: "Searching items…" }) : X.isError ? /* @__PURE__ */ T(i, { onRetry: () => void X.refetch() }) : n.length === 0 ? /* @__PURE__ */ T(h, {
511
+ X.isLoading ? /* @__PURE__ */ E(d, { label: P("coolandlovely.loading.searchItems", "Searching items…") }) : X.isError ? /* @__PURE__ */ E(u, { onRetry: () => void X.refetch() }) : n.length === 0 ? /* @__PURE__ */ E(g, {
525
512
  illustration: "empty-data",
526
- icon: /* @__PURE__ */ T(se, { className: "h-10 w-10" }),
527
- title: "No items found",
528
- description: "Try a different query or filters."
529
- }) : /* @__PURE__ */ E(w, { children: [/* @__PURE__ */ T("div", {
513
+ icon: /* @__PURE__ */ E(se, { className: "h-10 w-10" }),
514
+ title: P("coolandlovely.empty.itemsTitle", "No items found"),
515
+ description: P("coolandlovely.empty.searchFilters", "Try a different query or filters.")
516
+ }) : /* @__PURE__ */ D(T, { children: [/* @__PURE__ */ E("div", {
530
517
  className: "grid grid-cols-2 gap-4 sm:grid-cols-3 lg:grid-cols-4",
531
- children: n.map((e) => /* @__PURE__ */ E("button", {
518
+ children: n.map((e) => /* @__PURE__ */ D("button", {
532
519
  type: "button",
533
- onClick: () => g(`/items/${e.id}`),
520
+ onClick: () => _(`/items/${e.id}`),
534
521
  className: "group overflow-hidden rounded-lg border border-border-seam bg-bg-surface text-left shadow-sm transition-all hover:border-accent-foreground/20 hover:shadow-md",
535
- children: [/* @__PURE__ */ E("div", {
522
+ children: [/* @__PURE__ */ D("div", {
536
523
  className: "relative",
537
- children: [/* @__PURE__ */ T(o, {
538
- icon: m(e.category, 32),
524
+ children: [/* @__PURE__ */ E(f, {
525
+ icon: h(e.category, 32),
539
526
  seed: e.id,
540
527
  fileId: e.image?.id,
541
528
  alt: e.name,
542
529
  className: "aspect-[3/4] w-full"
543
- }), /* @__PURE__ */ T("div", {
530
+ }), /* @__PURE__ */ E("div", {
544
531
  className: "absolute right-2 top-2",
545
- children: /* @__PURE__ */ T(r, {
532
+ children: /* @__PURE__ */ E(l, {
546
533
  status: e.status,
547
534
  className: "shadow-sm"
548
535
  })
549
536
  })]
550
- }), /* @__PURE__ */ E("div", {
537
+ }), /* @__PURE__ */ D("div", {
551
538
  className: "p-3",
552
539
  children: [
553
- /* @__PURE__ */ T("p", {
540
+ /* @__PURE__ */ E("p", {
554
541
  className: "truncate text-sm font-medium text-text-primary",
555
542
  children: e.name
556
543
  }),
557
- e.brand?.name && /* @__PURE__ */ T("p", {
544
+ e.brand?.name && /* @__PURE__ */ E("p", {
558
545
  className: "truncate text-xs text-text-secondary",
559
546
  children: e.brand.name
560
547
  }),
561
- /* @__PURE__ */ E("div", {
548
+ /* @__PURE__ */ D("div", {
562
549
  className: "mt-1.5 flex items-center justify-between gap-2",
563
- children: [/* @__PURE__ */ T("span", {
550
+ children: [/* @__PURE__ */ E("span", {
564
551
  className: "text-sm font-semibold text-text-primary tabular-nums",
565
- children: f(e.price, e.currency)
566
- }), /* @__PURE__ */ T("span", {
552
+ children: p(e.price, e.currency)
553
+ }), /* @__PURE__ */ E("span", {
567
554
  className: "text-xs text-text-secondary",
568
- children: p(e.category)
555
+ children: P(`coolandlovely.category.${e.category.toLowerCase()}`, m(e.category))
569
556
  })]
570
557
  }),
571
- e.colours.length > 0 && /* @__PURE__ */ T(_, {
558
+ e.colours.length > 0 && /* @__PURE__ */ E(v, {
572
559
  colours: e.colours,
573
560
  max: 5,
574
561
  className: "mt-2"
@@ -576,56 +563,64 @@ function M() {
576
563
  ]
577
564
  })]
578
565
  }, e.id))
579
- }), (B > 0 || s) && /* @__PURE__ */ E("div", {
566
+ }), (H > 0 || r) && /* @__PURE__ */ D("div", {
580
567
  className: "mt-6 flex items-center justify-center gap-2",
581
568
  children: [
582
- /* @__PURE__ */ E("button", {
569
+ /* @__PURE__ */ D("button", {
583
570
  type: "button",
584
- disabled: B === 0,
585
- onClick: () => V((e) => Math.max(0, e - j)),
571
+ disabled: H === 0,
572
+ onClick: () => U((e) => Math.max(0, e - M)),
586
573
  className: "inline-flex items-center gap-1 rounded-lg border border-border-seam px-3 py-1.5 text-sm font-medium text-text-primary transition-colors hover:bg-bg-sunken disabled:cursor-not-allowed disabled:opacity-40",
587
- children: [/* @__PURE__ */ T(ie, { className: "h-4 w-4" }), " Previous"]
574
+ children: [
575
+ /* @__PURE__ */ E(ie, { className: "h-4 w-4" }),
576
+ " ",
577
+ P("coolandlovely.pagination.previous", "Previous")
578
+ ]
588
579
  }),
589
580
  /* @__PURE__ */ E("span", {
590
581
  className: "text-sm text-text-secondary",
591
- children: ["Page ", B / j + 1]
582
+ children: P("coolandlovely.pagination.page", "Page {{page}}", { page: H / M + 1 })
592
583
  }),
593
- /* @__PURE__ */ E("button", {
584
+ /* @__PURE__ */ D("button", {
594
585
  type: "button",
595
- disabled: !s,
596
- onClick: () => V((e) => e + j),
586
+ disabled: !r,
587
+ onClick: () => U((e) => e + M),
597
588
  className: "inline-flex items-center gap-1 rounded-lg border border-border-seam px-3 py-1.5 text-sm font-medium text-text-primary transition-colors hover:bg-bg-sunken disabled:cursor-not-allowed disabled:opacity-40",
598
- children: ["Next ", /* @__PURE__ */ T(y, { className: "h-4 w-4" })]
589
+ children: [
590
+ P("coolandlovely.pagination.next", "Next"),
591
+ " ",
592
+ /* @__PURE__ */ E(b, { className: "h-4 w-4" })
593
+ ]
599
594
  })
600
595
  ]
601
596
  })] })
602
597
  ]
603
598
  });
604
599
  })(),
605
- L === "looks" && (() => {
600
+ z === "looks" && (() => {
606
601
  let e = Z.data, n = e?.items ?? [], r = e?.pageInfo.hasMore ?? !1;
607
- return /* @__PURE__ */ E("div", {
602
+ return /* @__PURE__ */ D("div", {
608
603
  className: "space-y-4",
609
- children: [/* @__PURE__ */ T("div", {
604
+ children: [/* @__PURE__ */ E("div", {
610
605
  className: "flex flex-wrap items-center gap-2",
611
- children: ge.map((e) => /* @__PURE__ */ T("button", {
606
+ children: xe.map((e) => /* @__PURE__ */ E("button", {
612
607
  type: "button",
613
608
  onClick: () => {
614
- Y(e.value), U(0);
609
+ we(e.value), G(0);
615
610
  },
616
- className: t("rounded-full px-3 py-1.5 text-sm font-medium transition-colors", J === e.value ? "bg-action-primary-bg text-action-primary-text" : "bg-bg-sunken text-text-secondary hover:text-text-primary"),
611
+ className: t("rounded-full px-3 py-1.5 text-sm font-medium transition-colors", Y === e.value ? "bg-action-primary-bg text-action-primary-text" : "bg-bg-sunken text-text-secondary hover:text-text-primary"),
617
612
  children: e.label
618
613
  }, e.value))
619
- }), Z.isLoading ? /* @__PURE__ */ T(a, { label: "Searching looks…" }) : Z.isError ? /* @__PURE__ */ T(i, { onRetry: () => void Z.refetch() }) : n.length === 0 ? /* @__PURE__ */ T(h, {
614
+ }), Z.isLoading ? /* @__PURE__ */ E(d, { label: P("coolandlovely.loading.searchLooks", "Searching looks…") }) : Z.isError ? /* @__PURE__ */ E(u, { onRetry: () => void Z.refetch() }) : n.length === 0 ? /* @__PURE__ */ E(g, {
620
615
  illustration: "empty-data",
621
- icon: /* @__PURE__ */ T(S, { className: "h-10 w-10" }),
622
- title: "No looks found",
623
- description: "Try a different query or occasion."
624
- }) : /* @__PURE__ */ E(w, { children: [/* @__PURE__ */ T("div", {
616
+ icon: /* @__PURE__ */ E(C, { className: "h-10 w-10" }),
617
+ title: P("coolandlovely.empty.looksSearchTitle", "No looks found"),
618
+ description: P("coolandlovely.empty.looksSearchDescription", "Try a different query or occasion.")
619
+ }) : /* @__PURE__ */ D(T, { children: [/* @__PURE__ */ E("div", {
625
620
  className: "grid grid-cols-2 gap-4 sm:grid-cols-3 lg:grid-cols-4",
626
- children: n.map((e) => /* @__PURE__ */ E("div", {
621
+ children: n.map((e) => /* @__PURE__ */ D("div", {
627
622
  className: "relative",
628
- children: [/* @__PURE__ */ T(te, {
623
+ children: [/* @__PURE__ */ E(te, {
629
624
  id: e.id,
630
625
  title: e.title,
631
626
  occasion: e.occasion,
@@ -633,36 +628,48 @@ function M() {
633
628
  likeCount: e.likeCount,
634
629
  isLikedByMe: e.isLikedByMe,
635
630
  isSavedByMe: e.isSavedByMe,
636
- onOpen: () => g(`/looks/${e.id}`),
631
+ onOpen: () => _(`/looks/${e.id}`),
637
632
  showActions: !0
638
- }), e.isFeatured && /* @__PURE__ */ T("div", {
633
+ }), e.isFeatured && /* @__PURE__ */ E("div", {
639
634
  className: "pointer-events-none absolute left-2 top-2 z-10",
640
- children: /* @__PURE__ */ E("span", {
635
+ children: /* @__PURE__ */ D("span", {
641
636
  className: "inline-flex items-center gap-1 rounded-full bg-status-warning-bg-subtle px-2 py-0.5 text-xs font-medium text-status-warning-text shadow-sm backdrop-blur",
642
- children: [/* @__PURE__ */ T(S, { className: "h-3 w-3" }), " Featured"]
637
+ children: [
638
+ /* @__PURE__ */ E(C, { className: "h-3 w-3" }),
639
+ " ",
640
+ P("coolandlovely.filters.featured", "Featured")
641
+ ]
643
642
  })
644
643
  })]
645
644
  }, e.id))
646
- }), (H > 0 || r) && /* @__PURE__ */ E("div", {
645
+ }), (W > 0 || r) && /* @__PURE__ */ D("div", {
647
646
  className: "mt-6 flex items-center justify-center gap-2",
648
647
  children: [
649
- /* @__PURE__ */ E("button", {
648
+ /* @__PURE__ */ D("button", {
650
649
  type: "button",
651
- disabled: H === 0,
652
- onClick: () => U((e) => Math.max(0, e - j)),
650
+ disabled: W === 0,
651
+ onClick: () => G((e) => Math.max(0, e - M)),
653
652
  className: "inline-flex items-center gap-1 rounded-lg border border-border-seam px-3 py-1.5 text-sm font-medium text-text-primary transition-colors hover:bg-bg-sunken disabled:cursor-not-allowed disabled:opacity-40",
654
- children: [/* @__PURE__ */ T(ie, { className: "h-4 w-4" }), " Previous"]
653
+ children: [
654
+ /* @__PURE__ */ E(ie, { className: "h-4 w-4" }),
655
+ " ",
656
+ P("coolandlovely.pagination.previous", "Previous")
657
+ ]
655
658
  }),
656
659
  /* @__PURE__ */ E("span", {
657
660
  className: "text-sm text-text-secondary",
658
- children: ["Page ", H / j + 1]
661
+ children: P("coolandlovely.pagination.page", "Page {{page}}", { page: W / M + 1 })
659
662
  }),
660
- /* @__PURE__ */ E("button", {
663
+ /* @__PURE__ */ D("button", {
661
664
  type: "button",
662
665
  disabled: !r,
663
- onClick: () => U((e) => e + j),
666
+ onClick: () => G((e) => e + M),
664
667
  className: "inline-flex items-center gap-1 rounded-lg border border-border-seam px-3 py-1.5 text-sm font-medium text-text-primary transition-colors hover:bg-bg-sunken disabled:cursor-not-allowed disabled:opacity-40",
665
- children: ["Next ", /* @__PURE__ */ T(y, { className: "h-4 w-4" })]
668
+ children: [
669
+ P("coolandlovely.pagination.next", "Next"),
670
+ " ",
671
+ /* @__PURE__ */ E(b, { className: "h-4 w-4" })
672
+ ]
666
673
  })
667
674
  ]
668
675
  })] })]
@@ -672,6 +679,6 @@ function M() {
672
679
  });
673
680
  }
674
681
  //#endregion
675
- export { M as DiscoverPage };
682
+ export { N as DiscoverPage };
676
683
 
677
684
  //# sourceMappingURL=DiscoverPage.js.map