@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.
- package/dist/coolandlovely/components/ActivityTrail.js +7 -7
- package/dist/coolandlovely/components/Comments.js +4 -4
- package/dist/coolandlovely/components/FeedbackWidget.d.ts.map +1 -1
- package/dist/coolandlovely/components/FeedbackWidget.js +72 -70
- package/dist/coolandlovely/components/FeedbackWidget.js.map +1 -1
- package/dist/coolandlovely/components/LookCard.js +24 -24
- package/dist/coolandlovely/components/StateViews.d.ts.map +1 -1
- package/dist/coolandlovely/components/StateViews.js +35 -26
- package/dist/coolandlovely/components/StateViews.js.map +1 -1
- package/dist/coolandlovely/components/StatusBadge.d.ts.map +1 -1
- package/dist/coolandlovely/components/StatusBadge.js +45 -15
- package/dist/coolandlovely/components/StatusBadge.js.map +1 -1
- package/dist/coolandlovely/components/VisibilityChip.d.ts.map +1 -1
- package/dist/coolandlovely/components/VisibilityChip.js +22 -17
- package/dist/coolandlovely/components/VisibilityChip.js.map +1 -1
- package/dist/coolandlovely/hooks/index.d.ts +1 -0
- package/dist/coolandlovely/hooks/index.d.ts.map +1 -1
- package/dist/coolandlovely/hooks/index.js +2 -1
- package/dist/coolandlovely/hooks/useTr.d.ts +2 -0
- package/dist/coolandlovely/hooks/useTr.d.ts.map +1 -0
- package/dist/coolandlovely/hooks/useTr.js +14 -0
- package/dist/coolandlovely/hooks/useTr.js.map +1 -0
- package/dist/coolandlovely/pages/HomePage.d.ts.map +1 -1
- package/dist/coolandlovely/pages/HomePage.js +172 -132
- package/dist/coolandlovely/pages/HomePage.js.map +1 -1
- package/dist/coolandlovely/pages/admin/AdminBrandsPage.js +10 -10
- package/dist/coolandlovely/pages/admin/AdminCollaborationsPage.js +16 -16
- package/dist/coolandlovely/pages/admin/AdminFeaturedItemsPage.js +17 -17
- package/dist/coolandlovely/pages/brands/BrandDetailPage.js +22 -22
- package/dist/coolandlovely/pages/brands/BrandFormPage.js +9 -9
- package/dist/coolandlovely/pages/brands/BrandsListPage.d.ts.map +1 -1
- package/dist/coolandlovely/pages/brands/BrandsListPage.js +80 -76
- package/dist/coolandlovely/pages/brands/BrandsListPage.js.map +1 -1
- package/dist/coolandlovely/pages/collaborations/CollaborationDetailPage.js +21 -21
- package/dist/coolandlovely/pages/collaborations/CollaborationFormPage.js +7 -7
- package/dist/coolandlovely/pages/collaborations/CollaborationsListPage.d.ts.map +1 -1
- package/dist/coolandlovely/pages/collaborations/CollaborationsListPage.js +82 -81
- package/dist/coolandlovely/pages/collaborations/CollaborationsListPage.js.map +1 -1
- package/dist/coolandlovely/pages/collections/CollectionDetailPage.js +19 -19
- package/dist/coolandlovely/pages/collections/CollectionFormPage.js +9 -9
- package/dist/coolandlovely/pages/collections/CollectionsListPage.d.ts.map +1 -1
- package/dist/coolandlovely/pages/collections/CollectionsListPage.js +54 -55
- package/dist/coolandlovely/pages/collections/CollectionsListPage.js.map +1 -1
- package/dist/coolandlovely/pages/discover/DiscoverPage.d.ts.map +1 -1
- package/dist/coolandlovely/pages/discover/DiscoverPage.js +322 -315
- package/dist/coolandlovely/pages/discover/DiscoverPage.js.map +1 -1
- package/dist/coolandlovely/pages/items/StyleItemDetailPage.js +21 -21
- package/dist/coolandlovely/pages/items/StyleItemFormPage.js +10 -10
- package/dist/coolandlovely/pages/items/StyleItemsListPage.d.ts.map +1 -1
- package/dist/coolandlovely/pages/items/StyleItemsListPage.js +105 -95
- package/dist/coolandlovely/pages/items/StyleItemsListPage.js.map +1 -1
- package/dist/coolandlovely/pages/lookbooks/LookbookDetailPage.js +20 -20
- package/dist/coolandlovely/pages/lookbooks/LookbookDetailPage.js.map +1 -1
- package/dist/coolandlovely/pages/lookbooks/LookbooksListPage.d.ts.map +1 -1
- package/dist/coolandlovely/pages/lookbooks/LookbooksListPage.js +88 -79
- package/dist/coolandlovely/pages/lookbooks/LookbooksListPage.js.map +1 -1
- package/dist/coolandlovely/pages/looks/LookDetailPage.js +18 -18
- package/dist/coolandlovely/pages/looks/LookFormPage.js +6 -6
- package/dist/coolandlovely/pages/looks/LookFormPage.js.map +1 -1
- package/dist/coolandlovely/pages/looks/LooksListPage.d.ts.map +1 -1
- package/dist/coolandlovely/pages/looks/LooksListPage.js +94 -94
- package/dist/coolandlovely/pages/looks/LooksListPage.js.map +1 -1
- package/dist/coolandlovely/pages/profile/StyleProfilePage.d.ts.map +1 -1
- package/dist/coolandlovely/pages/profile/StyleProfilePage.js +226 -199
- package/dist/coolandlovely/pages/profile/StyleProfilePage.js.map +1 -1
- package/dist/coolandlovely/pages/trends/TrendsPage.js +8 -8
- package/dist/coolandlovely/pages/wardrobe/WardrobeFormPage.js +5 -5
- package/dist/coolandlovely/pages/wardrobe/WardrobeListPage.d.ts.map +1 -1
- package/dist/coolandlovely/pages/wardrobe/WardrobeListPage.js +71 -69
- package/dist/coolandlovely/pages/wardrobe/WardrobeListPage.js.map +1 -1
- 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 {
|
|
5
|
-
import {
|
|
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 {
|
|
12
|
-
import {
|
|
13
|
-
import {
|
|
14
|
-
import {
|
|
15
|
-
import {
|
|
16
|
-
import {
|
|
17
|
-
import {
|
|
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
|
|
22
|
+
function O(e) {
|
|
22
23
|
return new Set(e.map((e) => e.trim().toLowerCase()).filter(Boolean));
|
|
23
24
|
}
|
|
24
|
-
function
|
|
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
|
|
33
|
+
var A = ({ title: e, icon: t, sublabel: n, children: r }) => /* @__PURE__ */ D("section", {
|
|
33
34
|
className: "mt-8",
|
|
34
|
-
children: [/* @__PURE__ */
|
|
35
|
+
children: [/* @__PURE__ */ D("div", {
|
|
35
36
|
className: "mb-3",
|
|
36
|
-
children: [/* @__PURE__ */
|
|
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__ */
|
|
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
|
-
}),
|
|
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__ */
|
|
51
|
+
children: [/* @__PURE__ */ D("div", {
|
|
51
52
|
className: "flex items-center justify-between gap-2",
|
|
52
|
-
children: [/* @__PURE__ */
|
|
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__ */
|
|
56
|
+
}), n ? /* @__PURE__ */ E(v, {
|
|
56
57
|
colours: t,
|
|
57
58
|
max: 6
|
|
58
59
|
}) : null]
|
|
59
|
-
}), /* @__PURE__ */
|
|
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__ */
|
|
66
|
+
}), pe = ({ reasons: e }) => e.length === 0 ? null : /* @__PURE__ */ D("div", {
|
|
66
67
|
className: "mt-2",
|
|
67
|
-
children: [/* @__PURE__ */
|
|
68
|
+
children: [/* @__PURE__ */ E("p", {
|
|
68
69
|
className: "text-xs font-medium text-text-secondary",
|
|
69
70
|
children: "Why this matched"
|
|
70
|
-
}), /* @__PURE__ */
|
|
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
|
-
|
|
79
|
-
|
|
80
|
-
|
|
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
|
-
|
|
99
|
-
|
|
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
|
-
|
|
120
|
-
|
|
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
|
-
} }),
|
|
127
|
+
} }), L = s({ pagination: {
|
|
156
128
|
limit: 100,
|
|
157
129
|
offset: 0
|
|
158
|
-
} }),
|
|
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:
|
|
161
|
-
categories:
|
|
162
|
-
status:
|
|
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:
|
|
166
|
-
offset:
|
|
137
|
+
limit: M,
|
|
138
|
+
offset: H
|
|
167
139
|
}
|
|
168
|
-
}), Z =
|
|
140
|
+
}), Z = ee({
|
|
169
141
|
input: {
|
|
170
|
-
query:
|
|
171
|
-
occasion:
|
|
142
|
+
query: B.trim() || void 0,
|
|
143
|
+
occasion: Y === "ALL" ? void 0 : Y
|
|
172
144
|
},
|
|
173
145
|
pagination: {
|
|
174
|
-
limit:
|
|
175
|
-
offset:
|
|
146
|
+
limit: M,
|
|
147
|
+
offset: W
|
|
176
148
|
}
|
|
177
|
-
}),
|
|
178
|
-
let e =
|
|
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 =
|
|
183
|
-
let t =
|
|
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,
|
|
159
|
+
reasons: n ? [...t, m(e.occasion)] : t
|
|
188
160
|
};
|
|
189
|
-
},
|
|
190
|
-
let t =
|
|
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 + +!!
|
|
165
|
+
score: n.length * 2 + t.length * 2 + +!!r + +!!s,
|
|
194
166
|
reasons: [
|
|
195
167
|
...t,
|
|
196
168
|
...n,
|
|
197
|
-
...r ? [
|
|
198
|
-
...
|
|
169
|
+
...r ? [m(e.category)] : [],
|
|
170
|
+
...s ? [s] : []
|
|
199
171
|
]
|
|
200
172
|
};
|
|
201
|
-
},
|
|
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:
|
|
176
|
+
hasTaste: c,
|
|
205
177
|
palette: e?.palette ?? [],
|
|
206
178
|
aesthetics: e?.stylePreferences ?? [],
|
|
207
179
|
favouriteBrands: e?.favouriteBrands ?? [],
|
|
208
|
-
madeForYou:
|
|
209
|
-
inYourPalette:
|
|
180
|
+
madeForYou: l,
|
|
181
|
+
inYourPalette: u,
|
|
210
182
|
fromFollowing: d,
|
|
211
|
-
followingProfiles:
|
|
183
|
+
followingProfiles: R.data ?? []
|
|
212
184
|
};
|
|
213
185
|
}, [
|
|
214
|
-
N.data,
|
|
215
|
-
P.data,
|
|
216
186
|
F.data,
|
|
217
|
-
I.data
|
|
218
|
-
|
|
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:
|
|
199
|
+
apiGatewayUrl: N,
|
|
228
200
|
authToken: _e,
|
|
229
201
|
workspaceId: ve
|
|
230
202
|
}), $ = (e) => {
|
|
231
|
-
let t =
|
|
203
|
+
let t = De[e];
|
|
232
204
|
return t?.resolved ? t.displayName : null;
|
|
233
|
-
},
|
|
234
|
-
|
|
205
|
+
}, Oe = (e) => {
|
|
206
|
+
q((t) => t.includes(e) ? t.filter((t) => t !== e) : [...t, e]), U(0);
|
|
235
207
|
};
|
|
236
|
-
return /* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
217
|
+
/* @__PURE__ */ E("div", {
|
|
246
218
|
className: "mb-4 flex items-center gap-2",
|
|
247
|
-
children: /* @__PURE__ */
|
|
219
|
+
children: /* @__PURE__ */ D("div", {
|
|
248
220
|
className: "relative flex-1",
|
|
249
221
|
children: [
|
|
250
|
-
/* @__PURE__ */
|
|
251
|
-
/* @__PURE__ */
|
|
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:
|
|
225
|
+
value: B,
|
|
254
226
|
onChange: (e) => {
|
|
255
|
-
|
|
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
|
-
|
|
232
|
+
B && /* @__PURE__ */ E("button", {
|
|
261
233
|
type: "button",
|
|
262
|
-
onClick: () =>
|
|
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__ */
|
|
236
|
+
children: /* @__PURE__ */ E(w, { className: "h-4 w-4" })
|
|
265
237
|
})
|
|
266
238
|
]
|
|
267
239
|
})
|
|
268
240
|
}),
|
|
269
|
-
/* @__PURE__ */
|
|
241
|
+
/* @__PURE__ */ D("div", {
|
|
270
242
|
className: "mb-6 flex items-center gap-1 border-b border-border-seam",
|
|
271
|
-
children: [
|
|
243
|
+
children: [ye.map((e) => /* @__PURE__ */ D("button", {
|
|
272
244
|
type: "button",
|
|
273
|
-
onClick: () =>
|
|
274
|
-
className: t("inline-flex items-center gap-1.5 border-b-2 px-3 py-2.5 text-sm font-medium transition-colors",
|
|
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)), (
|
|
252
|
+
}, e.value)), (B || K.length > 0 || J !== "ALL" || Y !== "ALL") && /* @__PURE__ */ D("button", {
|
|
281
253
|
type: "button",
|
|
282
254
|
onClick: () => {
|
|
283
|
-
|
|
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: [
|
|
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
|
-
|
|
290
|
-
|
|
291
|
-
} }) : /* @__PURE__ */
|
|
292
|
-
Q.hasProfile ? null : /* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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: () =>
|
|
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: [
|
|
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__ */
|
|
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__ */
|
|
293
|
+
/* @__PURE__ */ D("div", {
|
|
314
294
|
className: "flex flex-wrap items-center justify-between gap-2",
|
|
315
|
-
children: [/* @__PURE__ */
|
|
295
|
+
children: [/* @__PURE__ */ E("h2", {
|
|
316
296
|
className: "text-sm font-semibold text-text-primary",
|
|
317
|
-
children: "Your declared taste"
|
|
318
|
-
}), /* @__PURE__ */
|
|
297
|
+
children: P("coolandlovely.discover.declaredTaste", "Your declared taste")
|
|
298
|
+
}), /* @__PURE__ */ D("button", {
|
|
319
299
|
type: "button",
|
|
320
|
-
onClick: () =>
|
|
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: [
|
|
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__ */
|
|
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__ */
|
|
313
|
+
/* @__PURE__ */ D("div", {
|
|
330
314
|
className: "mt-3 grid grid-cols-1 gap-3 sm:grid-cols-3",
|
|
331
315
|
children: [
|
|
332
|
-
/* @__PURE__ */
|
|
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__ */
|
|
338
|
-
label: "Aesthetics",
|
|
321
|
+
/* @__PURE__ */ E(j, {
|
|
322
|
+
label: P("coolandlovely.profile.aesthetics", "Aesthetics"),
|
|
339
323
|
values: Q.aesthetics
|
|
340
324
|
}),
|
|
341
|
-
/* @__PURE__ */
|
|
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__ */
|
|
350
|
-
title: "Made for you",
|
|
351
|
-
icon: /* @__PURE__ */
|
|
352
|
-
sublabel: Q.hasTaste ? "Ranked to match your style profile" : "Most-loved looks on the platform",
|
|
353
|
-
children: Q.madeForYou.length === 0 ? /* @__PURE__ */
|
|
354
|
-
title: "No looks yet",
|
|
355
|
-
description: "Once looks are published they will appear here, tuned to your taste."
|
|
356
|
-
}) : /* @__PURE__ */
|
|
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__ */
|
|
344
|
+
return /* @__PURE__ */ D("button", {
|
|
361
345
|
type: "button",
|
|
362
|
-
onClick: () =>
|
|
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__ */
|
|
365
|
-
icon: /* @__PURE__ */
|
|
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__ */
|
|
354
|
+
}), /* @__PURE__ */ D("div", {
|
|
371
355
|
className: "min-w-0 p-3",
|
|
372
356
|
children: [
|
|
373
|
-
/* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
365
|
+
/* @__PURE__ */ E("p", {
|
|
382
366
|
className: "mt-0.5 text-xs text-text-secondary",
|
|
383
|
-
children:
|
|
367
|
+
children: P(`coolandlovely.occasion.${e.occasion.toLowerCase()}`, m(e.occasion))
|
|
384
368
|
}),
|
|
385
|
-
/* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
401
|
-
title: "In your palette",
|
|
402
|
-
icon: /* @__PURE__ */
|
|
403
|
-
sublabel: "Pieces that match your colours, categories and tags",
|
|
404
|
-
children: /* @__PURE__ */
|
|
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__ */
|
|
390
|
+
children: Q.inYourPalette.map(({ row: e, reasons: t }) => /* @__PURE__ */ D("button", {
|
|
407
391
|
type: "button",
|
|
408
|
-
onClick: () =>
|
|
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__ */
|
|
411
|
-
icon: /* @__PURE__ */
|
|
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__ */
|
|
400
|
+
}), /* @__PURE__ */ D("div", {
|
|
417
401
|
className: "min-w-0 p-3",
|
|
418
402
|
children: [
|
|
419
|
-
/* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
411
|
+
/* @__PURE__ */ D("p", {
|
|
428
412
|
className: "mt-0.5 flex items-baseline gap-2 text-xs text-text-secondary",
|
|
429
|
-
children: [/* @__PURE__ */
|
|
413
|
+
children: [/* @__PURE__ */ E("span", {
|
|
430
414
|
className: "font-medium text-text-primary tabular-nums",
|
|
431
|
-
children:
|
|
432
|
-
}), /* @__PURE__ */
|
|
415
|
+
children: p(e.price, e.currency)
|
|
416
|
+
}), /* @__PURE__ */ D("span", {
|
|
433
417
|
className: "truncate",
|
|
434
|
-
children: [
|
|
418
|
+
children: [P(`coolandlovely.category.${e.category.toLowerCase()}`, m(e.category)), e.materials.length > 0 ? ` · ${e.materials.join(", ")}` : ""]
|
|
435
419
|
})]
|
|
436
420
|
}),
|
|
437
|
-
/* @__PURE__ */
|
|
421
|
+
/* @__PURE__ */ E(v, {
|
|
438
422
|
colours: e.colours,
|
|
439
423
|
max: 5,
|
|
440
424
|
className: "mt-2"
|
|
441
425
|
}),
|
|
442
|
-
Q.hasTaste ? /* @__PURE__ */
|
|
426
|
+
Q.hasTaste ? /* @__PURE__ */ E(pe, { reasons: t }) : null
|
|
443
427
|
]
|
|
444
428
|
})]
|
|
445
429
|
}, e.id))
|
|
446
430
|
})
|
|
447
431
|
}) : null,
|
|
448
|
-
/* @__PURE__ */
|
|
449
|
-
title: "From people you follow",
|
|
450
|
-
icon: /* @__PURE__ */
|
|
451
|
-
sublabel: Q.followingProfiles.length === 0 ? "Follow creators and shoppers to see their looks here" :
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
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__ */
|
|
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__ */
|
|
450
|
+
return /* @__PURE__ */ D("button", {
|
|
464
451
|
type: "button",
|
|
465
|
-
onClick: () =>
|
|
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__ */
|
|
468
|
-
icon: /* @__PURE__ */
|
|
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__ */
|
|
460
|
+
}), /* @__PURE__ */ D("div", {
|
|
474
461
|
className: "min-w-0 p-3",
|
|
475
462
|
children: [
|
|
476
|
-
/* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
471
|
+
/* @__PURE__ */ E("p", {
|
|
485
472
|
className: "mt-0.5 text-xs text-text-secondary",
|
|
486
|
-
children:
|
|
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
|
-
|
|
496
|
-
let e = X.data, n = e?.items ?? [],
|
|
497
|
-
return /* @__PURE__ */
|
|
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__ */
|
|
487
|
+
/* @__PURE__ */ E("div", {
|
|
501
488
|
className: "flex flex-wrap items-center gap-2",
|
|
502
|
-
children: ne.map((e) => /* @__PURE__ */
|
|
489
|
+
children: ne.map((e) => /* @__PURE__ */ D("button", {
|
|
503
490
|
type: "button",
|
|
504
|
-
onClick: () =>
|
|
505
|
-
className: t("inline-flex items-center gap-1.5 rounded-full px-3 py-1.5 text-xs font-medium transition-colors",
|
|
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
|
-
|
|
494
|
+
h(e, 14),
|
|
508
495
|
" ",
|
|
509
|
-
|
|
496
|
+
P(`coolandlovely.category.${e.toLowerCase()}`, m(e))
|
|
510
497
|
]
|
|
511
498
|
}, e))
|
|
512
499
|
}),
|
|
513
|
-
/* @__PURE__ */
|
|
500
|
+
/* @__PURE__ */ E("div", {
|
|
514
501
|
className: "flex flex-wrap items-center gap-2",
|
|
515
|
-
children:
|
|
502
|
+
children: be.map((e) => /* @__PURE__ */ E("button", {
|
|
516
503
|
type: "button",
|
|
517
504
|
onClick: () => {
|
|
518
|
-
|
|
505
|
+
Ce(e.value), U(0);
|
|
519
506
|
},
|
|
520
|
-
className: t("rounded-full px-3 py-1.5 text-sm font-medium transition-colors",
|
|
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__ */
|
|
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__ */
|
|
527
|
-
title: "No items found",
|
|
528
|
-
description: "Try a different query or filters."
|
|
529
|
-
}) : /* @__PURE__ */
|
|
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__ */
|
|
518
|
+
children: n.map((e) => /* @__PURE__ */ D("button", {
|
|
532
519
|
type: "button",
|
|
533
|
-
onClick: () =>
|
|
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__ */
|
|
522
|
+
children: [/* @__PURE__ */ D("div", {
|
|
536
523
|
className: "relative",
|
|
537
|
-
children: [/* @__PURE__ */
|
|
538
|
-
icon:
|
|
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__ */
|
|
530
|
+
}), /* @__PURE__ */ E("div", {
|
|
544
531
|
className: "absolute right-2 top-2",
|
|
545
|
-
children: /* @__PURE__ */
|
|
532
|
+
children: /* @__PURE__ */ E(l, {
|
|
546
533
|
status: e.status,
|
|
547
534
|
className: "shadow-sm"
|
|
548
535
|
})
|
|
549
536
|
})]
|
|
550
|
-
}), /* @__PURE__ */
|
|
537
|
+
}), /* @__PURE__ */ D("div", {
|
|
551
538
|
className: "p-3",
|
|
552
539
|
children: [
|
|
553
|
-
/* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
548
|
+
/* @__PURE__ */ D("div", {
|
|
562
549
|
className: "mt-1.5 flex items-center justify-between gap-2",
|
|
563
|
-
children: [/* @__PURE__ */
|
|
550
|
+
children: [/* @__PURE__ */ E("span", {
|
|
564
551
|
className: "text-sm font-semibold text-text-primary tabular-nums",
|
|
565
|
-
children:
|
|
566
|
-
}), /* @__PURE__ */
|
|
552
|
+
children: p(e.price, e.currency)
|
|
553
|
+
}), /* @__PURE__ */ E("span", {
|
|
567
554
|
className: "text-xs text-text-secondary",
|
|
568
|
-
children:
|
|
555
|
+
children: P(`coolandlovely.category.${e.category.toLowerCase()}`, m(e.category))
|
|
569
556
|
})]
|
|
570
557
|
}),
|
|
571
|
-
e.colours.length > 0 && /* @__PURE__ */
|
|
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
|
-
}), (
|
|
566
|
+
}), (H > 0 || r) && /* @__PURE__ */ D("div", {
|
|
580
567
|
className: "mt-6 flex items-center justify-center gap-2",
|
|
581
568
|
children: [
|
|
582
|
-
/* @__PURE__ */
|
|
569
|
+
/* @__PURE__ */ D("button", {
|
|
583
570
|
type: "button",
|
|
584
|
-
disabled:
|
|
585
|
-
onClick: () =>
|
|
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: [
|
|
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:
|
|
582
|
+
children: P("coolandlovely.pagination.page", "Page {{page}}", { page: H / M + 1 })
|
|
592
583
|
}),
|
|
593
|
-
/* @__PURE__ */
|
|
584
|
+
/* @__PURE__ */ D("button", {
|
|
594
585
|
type: "button",
|
|
595
|
-
disabled: !
|
|
596
|
-
onClick: () =>
|
|
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: [
|
|
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
|
-
|
|
600
|
+
z === "looks" && (() => {
|
|
606
601
|
let e = Z.data, n = e?.items ?? [], r = e?.pageInfo.hasMore ?? !1;
|
|
607
|
-
return /* @__PURE__ */
|
|
602
|
+
return /* @__PURE__ */ D("div", {
|
|
608
603
|
className: "space-y-4",
|
|
609
|
-
children: [/* @__PURE__ */
|
|
604
|
+
children: [/* @__PURE__ */ E("div", {
|
|
610
605
|
className: "flex flex-wrap items-center gap-2",
|
|
611
|
-
children:
|
|
606
|
+
children: xe.map((e) => /* @__PURE__ */ E("button", {
|
|
612
607
|
type: "button",
|
|
613
608
|
onClick: () => {
|
|
614
|
-
|
|
609
|
+
we(e.value), G(0);
|
|
615
610
|
},
|
|
616
|
-
className: t("rounded-full px-3 py-1.5 text-sm font-medium transition-colors",
|
|
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__ */
|
|
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__ */
|
|
622
|
-
title: "No looks found",
|
|
623
|
-
description: "Try a different query or occasion."
|
|
624
|
-
}) : /* @__PURE__ */
|
|
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__ */
|
|
621
|
+
children: n.map((e) => /* @__PURE__ */ D("div", {
|
|
627
622
|
className: "relative",
|
|
628
|
-
children: [/* @__PURE__ */
|
|
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: () =>
|
|
631
|
+
onOpen: () => _(`/looks/${e.id}`),
|
|
637
632
|
showActions: !0
|
|
638
|
-
}), e.isFeatured && /* @__PURE__ */
|
|
633
|
+
}), e.isFeatured && /* @__PURE__ */ E("div", {
|
|
639
634
|
className: "pointer-events-none absolute left-2 top-2 z-10",
|
|
640
|
-
children: /* @__PURE__ */
|
|
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: [
|
|
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
|
-
}), (
|
|
645
|
+
}), (W > 0 || r) && /* @__PURE__ */ D("div", {
|
|
647
646
|
className: "mt-6 flex items-center justify-center gap-2",
|
|
648
647
|
children: [
|
|
649
|
-
/* @__PURE__ */
|
|
648
|
+
/* @__PURE__ */ D("button", {
|
|
650
649
|
type: "button",
|
|
651
|
-
disabled:
|
|
652
|
-
onClick: () =>
|
|
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: [
|
|
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:
|
|
661
|
+
children: P("coolandlovely.pagination.page", "Page {{page}}", { page: W / M + 1 })
|
|
659
662
|
}),
|
|
660
|
-
/* @__PURE__ */
|
|
663
|
+
/* @__PURE__ */ D("button", {
|
|
661
664
|
type: "button",
|
|
662
665
|
disabled: !r,
|
|
663
|
-
onClick: () =>
|
|
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: [
|
|
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 {
|
|
682
|
+
export { N as DiscoverPage };
|
|
676
683
|
|
|
677
684
|
//# sourceMappingURL=DiscoverPage.js.map
|