@burdenoff/microfe-coolandlovely 2026.820.5 → 2026.829.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.d.ts +24 -0
- package/dist/coolandlovely/components/ActivityTrail.d.ts.map +1 -0
- package/dist/coolandlovely/components/ActivityTrail.js +70 -0
- package/dist/coolandlovely/components/ActivityTrail.js.map +1 -0
- 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/components/index.d.ts +1 -0
- package/dist/coolandlovely/components/index.d.ts.map +1 -1
- package/dist/coolandlovely/components/index.js +1 -0
- package/dist/coolandlovely/hooks/index.d.ts +4 -0
- package/dist/coolandlovely/hooks/index.d.ts.map +1 -1
- package/dist/coolandlovely/hooks/index.js +4 -1
- package/dist/coolandlovely/hooks/useActivity.d.ts +39 -0
- package/dist/coolandlovely/hooks/useActivity.d.ts.map +1 -0
- package/dist/coolandlovely/hooks/useActivity.js +38 -0
- package/dist/coolandlovely/hooks/useActivity.js.map +1 -0
- package/dist/coolandlovely/hooks/useAssistantEntity.d.ts +24 -0
- package/dist/coolandlovely/hooks/useAssistantEntity.d.ts.map +1 -0
- package/dist/coolandlovely/hooks/useAssistantEntity.js +12 -0
- package/dist/coolandlovely/hooks/useAssistantEntity.js.map +1 -0
- 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.d.ts.map +1 -1
- package/dist/coolandlovely/pages/brands/BrandDetailPage.js +171 -151
- package/dist/coolandlovely/pages/brands/BrandDetailPage.js.map +1 -1
- 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.d.ts.map +1 -1
- package/dist/coolandlovely/pages/collaborations/CollaborationDetailPage.js +121 -120
- package/dist/coolandlovely/pages/collaborations/CollaborationDetailPage.js.map +1 -1
- 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.d.ts.map +1 -1
- package/dist/coolandlovely/pages/collections/CollectionDetailPage.js +111 -110
- package/dist/coolandlovely/pages/collections/CollectionDetailPage.js.map +1 -1
- 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 +452 -307
- package/dist/coolandlovely/pages/discover/DiscoverPage.js.map +1 -1
- package/dist/coolandlovely/pages/items/StyleItemDetailPage.d.ts.map +1 -1
- package/dist/coolandlovely/pages/items/StyleItemDetailPage.js +117 -116
- package/dist/coolandlovely/pages/items/StyleItemDetailPage.js.map +1 -1
- 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.d.ts.map +1 -1
- package/dist/coolandlovely/pages/lookbooks/LookbookDetailPage.js +32 -29
- 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.d.ts.map +1 -1
- package/dist/coolandlovely/pages/looks/LookDetailPage.js +135 -134
- package/dist/coolandlovely/pages/looks/LookDetailPage.js.map +1 -1
- 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/dist/utils/pageContext.d.ts +23 -0
- package/dist/utils/pageContext.d.ts.map +1 -1
- package/dist/utils/pageContext.js +37 -25
- package/dist/utils/pageContext.js.map +1 -1
- package/package.json +1 -1
|
@@ -2,131 +2,159 @@ 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
4
|
import { MetricsCard as r } from "../components/MetricsCard.js";
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import { Thumbnail as s } from "../components/Thumbnail.js";
|
|
8
|
-
import { useBrands as c, useCollaborations as l, useLooks as u, useStyleItems as d, useWardrobeItems as f } from "../hooks/useCoolAndLovelyApi.js";
|
|
9
|
-
import { LookCard as p } from "../components/LookCard.js";
|
|
5
|
+
import { useBrands as i, useCollaborations as a, useLooks as o, useStyleItems as s, useWardrobeItems as c } from "../hooks/useCoolAndLovelyApi.js";
|
|
6
|
+
import { useTr as l } from "../hooks/useTr.js";
|
|
10
7
|
import "../hooks/index.js";
|
|
11
|
-
import {
|
|
8
|
+
import { StatusBadge as u } from "../components/StatusBadge.js";
|
|
9
|
+
import { ErrorView as d, LoadingView as f } from "../components/StateViews.js";
|
|
10
|
+
import { Thumbnail as p } from "../components/Thumbnail.js";
|
|
11
|
+
import { LookCard as m } from "../components/LookCard.js";
|
|
12
|
+
import { buildCreatedAtSparkline as h, sparklineDeltaLabel as g, sparklineTrendDirection as _ } from "../utils/sparkline.js";
|
|
12
13
|
import "../utils/index.js";
|
|
13
|
-
import { useMemo as
|
|
14
|
-
import { ArrowRight as
|
|
15
|
-
import { jsx as
|
|
16
|
-
import { EmphasisPanel as
|
|
14
|
+
import { useMemo as v } from "react";
|
|
15
|
+
import { ArrowRight as y, BookHeart as b, Compass as x, Handshake as S, Heart as C, Plus as w, Shapes as T, Shirt as E, Sparkles as D, Star as O, Store as k, TrendingUp as A, UserCircle as j } from "lucide-react";
|
|
16
|
+
import { jsx as M, jsxs as N } from "react/jsx-runtime";
|
|
17
|
+
import { EmphasisPanel as P, PagePurpose as F } from "@burdenoff/fe-libs/ui";
|
|
17
18
|
//#region src/coolandlovely/pages/HomePage.tsx
|
|
18
|
-
function F() {
|
|
19
|
-
let e = (/* @__PURE__ */ new Date()).getHours();
|
|
20
|
-
return e < 12 ? "Good morning" : e < 18 ? "Good afternoon" : "Good evening";
|
|
21
|
-
}
|
|
22
19
|
var I = [
|
|
23
20
|
{
|
|
21
|
+
labelKey: "newBrand",
|
|
22
|
+
descriptionKey: "newBrandDescription",
|
|
24
23
|
label: "New Brand",
|
|
25
24
|
description: "Launch a storefront",
|
|
26
|
-
icon: /* @__PURE__ */
|
|
25
|
+
icon: /* @__PURE__ */ M(k, { className: "h-5 w-5" }),
|
|
27
26
|
path: "/brands/new",
|
|
28
27
|
color: "bg-accent-purple-subtle text-text-primary"
|
|
29
28
|
},
|
|
30
29
|
{
|
|
30
|
+
labelKey: "addStyleItem",
|
|
31
|
+
descriptionKey: "addStyleItemDescription",
|
|
31
32
|
label: "Add Style Item",
|
|
32
33
|
description: "List a piece",
|
|
33
|
-
icon: /* @__PURE__ */
|
|
34
|
+
icon: /* @__PURE__ */ M(E, { className: "h-5 w-5" }),
|
|
34
35
|
path: "/items/new",
|
|
35
36
|
color: "bg-[var(--color-accent-soft)] text-text-primary"
|
|
36
37
|
},
|
|
37
38
|
{
|
|
39
|
+
labelKey: "publishLook",
|
|
40
|
+
descriptionKey: "publishLookDescription",
|
|
38
41
|
label: "Publish a Look",
|
|
39
42
|
description: "Shop-the-look outfit",
|
|
40
|
-
icon: /* @__PURE__ */
|
|
43
|
+
icon: /* @__PURE__ */ M(D, { className: "h-5 w-5" }),
|
|
41
44
|
path: "/looks/new",
|
|
42
45
|
color: "bg-status-success-bg-subtle text-status-success-text"
|
|
43
46
|
},
|
|
44
47
|
{
|
|
48
|
+
labelKey: "myWardrobe",
|
|
49
|
+
descriptionKey: "myWardrobeDescription",
|
|
45
50
|
label: "My Wardrobe",
|
|
46
51
|
description: "What you own",
|
|
47
|
-
icon: /* @__PURE__ */
|
|
52
|
+
icon: /* @__PURE__ */ M(C, { className: "h-5 w-5" }),
|
|
48
53
|
path: "/wardrobe",
|
|
49
54
|
color: "bg-status-warning-bg-subtle text-status-warning-text",
|
|
50
55
|
tourAttr: "coolandlovely-wardrobe-link"
|
|
51
56
|
}
|
|
52
57
|
], L = [
|
|
53
58
|
{
|
|
59
|
+
labelKey: "brands",
|
|
60
|
+
descriptionKey: "brandsDescription",
|
|
54
61
|
label: "Brands",
|
|
55
62
|
description: "Storefronts with a publish lifecycle",
|
|
56
|
-
icon: /* @__PURE__ */
|
|
63
|
+
icon: /* @__PURE__ */ M(k, { className: "h-6 w-6" }),
|
|
57
64
|
path: "/brands",
|
|
58
65
|
color: "bg-accent-purple-subtle text-text-primary",
|
|
59
66
|
tourAttr: "coolandlovely-brands-link"
|
|
60
67
|
},
|
|
61
68
|
{
|
|
69
|
+
labelKey: "collections",
|
|
70
|
+
descriptionKey: "collectionsDescription",
|
|
62
71
|
label: "Collections",
|
|
63
72
|
description: "Seasonal drops & curated edits",
|
|
64
|
-
icon: /* @__PURE__ */
|
|
73
|
+
icon: /* @__PURE__ */ M(T, { className: "h-6 w-6" }),
|
|
65
74
|
path: "/collections",
|
|
66
75
|
color: "bg-accent-blue-subtle text-accent-blue"
|
|
67
76
|
},
|
|
68
77
|
{
|
|
78
|
+
labelKey: "styleItems",
|
|
79
|
+
descriptionKey: "styleItemsDescription",
|
|
69
80
|
label: "Style Items",
|
|
70
81
|
description: "The shoppable catalogue",
|
|
71
|
-
icon: /* @__PURE__ */
|
|
82
|
+
icon: /* @__PURE__ */ M(E, { className: "h-6 w-6" }),
|
|
72
83
|
path: "/items",
|
|
73
84
|
color: "bg-[var(--color-accent-soft)] text-text-primary"
|
|
74
85
|
},
|
|
75
86
|
{
|
|
87
|
+
labelKey: "looks",
|
|
88
|
+
descriptionKey: "looksDescription",
|
|
76
89
|
label: "Looks",
|
|
77
90
|
description: "Published shop-the-look outfits",
|
|
78
|
-
icon: /* @__PURE__ */
|
|
91
|
+
icon: /* @__PURE__ */ M(D, { className: "h-6 w-6" }),
|
|
79
92
|
path: "/looks",
|
|
80
93
|
color: "bg-status-success-bg-subtle text-status-success-text"
|
|
81
94
|
},
|
|
82
95
|
{
|
|
96
|
+
labelKey: "collaborations",
|
|
97
|
+
descriptionKey: "collaborationsDescription",
|
|
83
98
|
label: "Collaborations",
|
|
84
99
|
description: "Brand × creator partnerships",
|
|
85
|
-
icon: /* @__PURE__ */
|
|
100
|
+
icon: /* @__PURE__ */ M(S, { className: "h-6 w-6" }),
|
|
86
101
|
path: "/collaborations",
|
|
87
102
|
color: "bg-status-warning-bg-subtle text-status-warning-text"
|
|
88
103
|
},
|
|
89
104
|
{
|
|
105
|
+
labelKey: "wardrobe",
|
|
106
|
+
descriptionKey: "wardrobeDescription",
|
|
90
107
|
label: "Wardrobe",
|
|
91
108
|
description: "Your digital closet & wear log",
|
|
92
|
-
icon: /* @__PURE__ */
|
|
109
|
+
icon: /* @__PURE__ */ M(C, { className: "h-6 w-6" }),
|
|
93
110
|
path: "/wardrobe",
|
|
94
111
|
color: "bg-status-error-bg-subtle text-status-error-text"
|
|
95
112
|
},
|
|
96
113
|
{
|
|
114
|
+
labelKey: "lookbooks",
|
|
115
|
+
descriptionKey: "lookbooksDescription",
|
|
97
116
|
label: "Lookbooks",
|
|
98
117
|
description: "Themed boards of saved pieces",
|
|
99
|
-
icon: /* @__PURE__ */
|
|
118
|
+
icon: /* @__PURE__ */ M(b, { className: "h-6 w-6" }),
|
|
100
119
|
path: "/lookbooks",
|
|
101
120
|
color: "bg-accent-purple-subtle text-text-primary"
|
|
102
121
|
},
|
|
103
122
|
{
|
|
123
|
+
labelKey: "styleProfile",
|
|
124
|
+
descriptionKey: "styleProfileDescription",
|
|
104
125
|
label: "Style Profile",
|
|
105
126
|
description: "Your taste, palette & sizing",
|
|
106
|
-
icon: /* @__PURE__ */ j
|
|
127
|
+
icon: /* @__PURE__ */ M(j, { className: "h-6 w-6" }),
|
|
107
128
|
path: "/profile",
|
|
108
129
|
color: "bg-accent-blue-subtle text-accent-blue",
|
|
109
130
|
tourAttr: "coolandlovely-style-profile-link"
|
|
110
131
|
},
|
|
111
132
|
{
|
|
133
|
+
labelKey: "discover",
|
|
134
|
+
descriptionKey: "discoverDescription",
|
|
112
135
|
label: "Discover",
|
|
113
136
|
description: "A feed tuned to your taste",
|
|
114
|
-
icon: /* @__PURE__ */
|
|
137
|
+
icon: /* @__PURE__ */ M(x, { className: "h-6 w-6" }),
|
|
115
138
|
path: "/discover",
|
|
116
139
|
color: "bg-[var(--color-accent-soft)] text-text-primary",
|
|
117
140
|
tourAttr: "coolandlovely-discover-feed"
|
|
118
141
|
},
|
|
119
142
|
{
|
|
143
|
+
labelKey: "trends",
|
|
144
|
+
descriptionKey: "trendsDescription",
|
|
120
145
|
label: "Trends",
|
|
121
146
|
description: "Live signals from platform activity",
|
|
122
|
-
icon: /* @__PURE__ */
|
|
147
|
+
icon: /* @__PURE__ */ M(A, { className: "h-6 w-6" }),
|
|
123
148
|
path: "/trends",
|
|
124
149
|
color: "bg-status-success-bg-subtle text-status-success-text"
|
|
125
150
|
}
|
|
126
151
|
];
|
|
127
152
|
function R() {
|
|
128
|
-
let { navigateTo:
|
|
129
|
-
let e =
|
|
153
|
+
let { navigateTo: b, currentUser: x } = e(), C = l(), T = v(() => {
|
|
154
|
+
let e = (/* @__PURE__ */ new Date()).getHours();
|
|
155
|
+
return e < 12 ? C("coolandlovely.greeting.morning", "Good morning") : e < 18 ? C("coolandlovely.greeting.afternoon", "Good afternoon") : C("coolandlovely.greeting.evening", "Good evening");
|
|
156
|
+
}, [C]), A = i(), j = s(), R = o(), z = a(), B = c(), V = x?.firstName ?? x?.name ?? C("coolandlovely.greeting.there", "there"), H = A.isLoading || j.isLoading || R.isLoading || z.isLoading || B.isLoading, U = A.isError && j.isError && R.isError && z.isError, W = v(() => {
|
|
157
|
+
let e = A.data?.items ?? [], t = j.data?.items ?? [], n = R.data?.items ?? [], r = z.data ?? [], i = B.data ?? [];
|
|
130
158
|
return {
|
|
131
159
|
totalBrands: e.length,
|
|
132
160
|
publishedBrands: e.filter((e) => e.status === "PUBLISHED").length,
|
|
@@ -138,163 +166,171 @@ function R() {
|
|
|
138
166
|
wardrobeItems: i.length
|
|
139
167
|
};
|
|
140
168
|
}, [
|
|
141
|
-
S.data,
|
|
142
|
-
w.data,
|
|
143
|
-
k.data,
|
|
144
169
|
A.data,
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
170
|
+
j.data,
|
|
171
|
+
R.data,
|
|
172
|
+
z.data,
|
|
173
|
+
B.data
|
|
174
|
+
]), G = v(() => [...R.data?.items ?? []].slice(0, 5), [R.data]), K = v(() => [...A.data?.items ?? []].sort((e, t) => new Date(t.updatedAt).getTime() - new Date(e.updatedAt).getTime()).slice(0, 4), [A.data]);
|
|
175
|
+
if (H) return /* @__PURE__ */ M(n, {
|
|
176
|
+
title: C("coolandlovely.appName", "CoolAndLovely"),
|
|
177
|
+
children: /* @__PURE__ */ M(f, { label: C("coolandlovely.loading.dashboard", "Loading your style command center…") })
|
|
150
178
|
});
|
|
151
|
-
if (
|
|
152
|
-
title: "CoolAndLovely",
|
|
153
|
-
children: /* @__PURE__ */
|
|
154
|
-
title: "Could not load CoolAndLovely",
|
|
155
|
-
message: "The fashion service did not respond. Please try again.",
|
|
179
|
+
if (U) return /* @__PURE__ */ M(n, {
|
|
180
|
+
title: C("coolandlovely.appName", "CoolAndLovely"),
|
|
181
|
+
children: /* @__PURE__ */ M(d, {
|
|
182
|
+
title: C("coolandlovely.error.loadTitle", "Could not load CoolAndLovely"),
|
|
183
|
+
message: C("coolandlovely.error.loadMessage", "The fashion service did not respond. Please try again."),
|
|
156
184
|
onRetry: () => {
|
|
157
|
-
|
|
185
|
+
A.refetch(), j.refetch(), R.refetch(), z.refetch(), B.refetch();
|
|
158
186
|
}
|
|
159
187
|
})
|
|
160
188
|
});
|
|
161
|
-
let
|
|
189
|
+
let q = h(A.data?.items ?? []), J = h(j.data?.items ?? []), Y = h(R.data?.items ?? []), X = h(z.data ?? []), Z = [
|
|
162
190
|
{
|
|
163
|
-
icon: /* @__PURE__ */
|
|
164
|
-
value:
|
|
191
|
+
icon: /* @__PURE__ */ M(k, { className: "h-5 w-5" }),
|
|
192
|
+
value: W.totalBrands.toString(),
|
|
193
|
+
labelKey: "brands",
|
|
165
194
|
label: "Brands",
|
|
166
|
-
sub:
|
|
167
|
-
sparklineData:
|
|
168
|
-
trend:
|
|
195
|
+
sub: g(q) ?? C("coolandlovely.metrics.publishedBrands", "{{count}} published", { count: W.publishedBrands }),
|
|
196
|
+
sparklineData: q,
|
|
197
|
+
trend: _(q)
|
|
169
198
|
},
|
|
170
199
|
{
|
|
171
|
-
icon: /* @__PURE__ */
|
|
172
|
-
value:
|
|
200
|
+
icon: /* @__PURE__ */ M(E, { className: "h-5 w-5" }),
|
|
201
|
+
value: W.totalStyleItems.toString(),
|
|
202
|
+
labelKey: "styleItems",
|
|
173
203
|
label: "Style Items",
|
|
174
|
-
sub:
|
|
175
|
-
sparklineData:
|
|
176
|
-
trend:
|
|
204
|
+
sub: g(J) ?? C("coolandlovely.metrics.activeItems", "{{count}} active", { count: W.activeStyleItems }),
|
|
205
|
+
sparklineData: J,
|
|
206
|
+
trend: _(J)
|
|
177
207
|
},
|
|
178
208
|
{
|
|
179
|
-
icon: /* @__PURE__ */
|
|
180
|
-
value:
|
|
209
|
+
icon: /* @__PURE__ */ M(D, { className: "h-5 w-5" }),
|
|
210
|
+
value: W.totalLooks.toString(),
|
|
211
|
+
labelKey: "looks",
|
|
181
212
|
label: "Looks",
|
|
182
|
-
sub:
|
|
183
|
-
sparklineData:
|
|
184
|
-
trend:
|
|
213
|
+
sub: g(Y) ?? C("coolandlovely.metrics.featuredLooks", "{{count}} featured", { count: W.featuredLooks }),
|
|
214
|
+
sparklineData: Y,
|
|
215
|
+
trend: _(Y)
|
|
185
216
|
},
|
|
186
217
|
{
|
|
187
|
-
icon: /* @__PURE__ */
|
|
188
|
-
value:
|
|
218
|
+
icon: /* @__PURE__ */ M(S, { className: "h-5 w-5" }),
|
|
219
|
+
value: W.activeCollaborations.toString(),
|
|
220
|
+
labelKey: "activeCollabs",
|
|
189
221
|
label: "Active Collabs",
|
|
190
|
-
sub:
|
|
191
|
-
sparklineData:
|
|
192
|
-
trend:
|
|
222
|
+
sub: g(X) ?? C("coolandlovely.metrics.inWardrobe", "{{count}} in wardrobe", { count: W.wardrobeItems }),
|
|
223
|
+
sparklineData: X,
|
|
224
|
+
trend: _(X)
|
|
193
225
|
}
|
|
194
226
|
];
|
|
195
|
-
return /* @__PURE__ */
|
|
196
|
-
title: `${
|
|
197
|
-
description: "Your fashion & lifestyle command center",
|
|
227
|
+
return /* @__PURE__ */ N(n, {
|
|
228
|
+
title: `${T}, ${V}`,
|
|
229
|
+
description: C("coolandlovely.dashboard.subtitle", "Your fashion & lifestyle command center"),
|
|
198
230
|
hero: !0,
|
|
199
231
|
children: [
|
|
200
|
-
/* @__PURE__ */
|
|
232
|
+
/* @__PURE__ */ M(F, {
|
|
201
233
|
className: "mb-6",
|
|
202
|
-
children: "CoolAndLovely connects the three sides of style on one workspace-native model: brands launch storefronts and seasonal collections, you build a wardrobe and lookbooks, and creators publish shop-the-look outfits and run brand collaborations. Jump into any module below — all data is live from the CoolAndLovely service."
|
|
234
|
+
children: C("coolandlovely.dashboard.purpose", "CoolAndLovely connects the three sides of style on one workspace-native model: brands launch storefronts and seasonal collections, you build a wardrobe and lookbooks, and creators publish shop-the-look outfits and run brand collaborations. Jump into any module below — all data is live from the CoolAndLovely service.")
|
|
203
235
|
}),
|
|
204
|
-
/* @__PURE__ */
|
|
236
|
+
/* @__PURE__ */ N(P, {
|
|
205
237
|
className: "mb-8",
|
|
206
|
-
children: [/* @__PURE__ */
|
|
238
|
+
children: [/* @__PURE__ */ M("h2", {
|
|
207
239
|
className: "mb-4 text-lg font-semibold text-text-primary",
|
|
208
|
-
children: "At a glance"
|
|
209
|
-
}), /* @__PURE__ */
|
|
240
|
+
children: C("coolandlovely.dashboard.atAGlance", "At a glance")
|
|
241
|
+
}), /* @__PURE__ */ M("div", {
|
|
210
242
|
className: "grid grid-cols-2 gap-4 lg:grid-cols-4",
|
|
211
|
-
children:
|
|
243
|
+
children: Z.map((e, t) => /* @__PURE__ */ M(r, {
|
|
212
244
|
icon: e.icon,
|
|
213
245
|
value: e.value,
|
|
214
|
-
label: e.label,
|
|
246
|
+
label: C(`coolandlovely.module.${e.labelKey}`, e.label),
|
|
215
247
|
trendValue: e.sub,
|
|
216
248
|
trend: e.trend,
|
|
217
249
|
sparklineData: e.sparklineData,
|
|
218
250
|
featured: t === 0
|
|
219
|
-
}, e.
|
|
251
|
+
}, e.labelKey))
|
|
220
252
|
})]
|
|
221
253
|
}),
|
|
222
|
-
/* @__PURE__ */
|
|
254
|
+
/* @__PURE__ */ N("section", {
|
|
223
255
|
className: "mb-8",
|
|
224
|
-
children: [/* @__PURE__ */
|
|
256
|
+
children: [/* @__PURE__ */ M("h2", {
|
|
225
257
|
className: "mb-4 text-lg font-semibold text-text-primary",
|
|
226
|
-
children: "Quick actions"
|
|
227
|
-
}), /* @__PURE__ */
|
|
258
|
+
children: C("coolandlovely.dashboard.quickActions", "Quick actions")
|
|
259
|
+
}), /* @__PURE__ */ M("div", {
|
|
228
260
|
className: "grid grid-cols-2 gap-4 lg:grid-cols-4",
|
|
229
|
-
children: I.map((e) => /* @__PURE__ */
|
|
261
|
+
children: I.map((e) => /* @__PURE__ */ N("button", {
|
|
230
262
|
type: "button",
|
|
231
|
-
onClick: () =>
|
|
263
|
+
onClick: () => b(e.path),
|
|
232
264
|
"data-tour": e.tourAttr,
|
|
233
265
|
className: t("flex items-start gap-3 rounded-lg border border-border-seam bg-bg-surface p-4 text-left shadow-sm transition-all", "hover:border-accent-foreground/20 hover:shadow-md"),
|
|
234
266
|
children: [
|
|
235
|
-
/* @__PURE__ */
|
|
267
|
+
/* @__PURE__ */ M("div", {
|
|
236
268
|
className: t("flex h-10 w-10 shrink-0 items-center justify-center rounded-lg", e.color),
|
|
237
269
|
children: e.icon
|
|
238
270
|
}),
|
|
239
|
-
/* @__PURE__ */
|
|
271
|
+
/* @__PURE__ */ N("div", {
|
|
240
272
|
className: "min-w-0 flex-1",
|
|
241
|
-
children: [/* @__PURE__ */
|
|
273
|
+
children: [/* @__PURE__ */ M("p", {
|
|
242
274
|
className: "text-sm font-semibold text-text-primary",
|
|
243
|
-
children: e.label
|
|
244
|
-
}), /* @__PURE__ */
|
|
275
|
+
children: C(`coolandlovely.quickAction.${e.labelKey}`, e.label)
|
|
276
|
+
}), /* @__PURE__ */ M("p", {
|
|
245
277
|
className: "mt-0.5 text-xs text-text-secondary",
|
|
246
|
-
children: e.description
|
|
278
|
+
children: C(`coolandlovely.quickAction.${e.descriptionKey}`, e.description)
|
|
247
279
|
})]
|
|
248
280
|
}),
|
|
249
|
-
/* @__PURE__ */
|
|
281
|
+
/* @__PURE__ */ M(w, { className: "mt-1 h-4 w-4 shrink-0 text-text-secondary" })
|
|
250
282
|
]
|
|
251
|
-
}, e.
|
|
283
|
+
}, e.labelKey))
|
|
252
284
|
})]
|
|
253
285
|
}),
|
|
254
|
-
/* @__PURE__ */
|
|
286
|
+
/* @__PURE__ */ N("section", {
|
|
255
287
|
className: "mb-8",
|
|
256
|
-
children: [/* @__PURE__ */
|
|
288
|
+
children: [/* @__PURE__ */ M("h2", {
|
|
257
289
|
className: "mb-4 text-lg font-semibold text-text-primary",
|
|
258
|
-
children: "Explore"
|
|
259
|
-
}), /* @__PURE__ */
|
|
290
|
+
children: C("coolandlovely.dashboard.explore", "Explore")
|
|
291
|
+
}), /* @__PURE__ */ M("div", {
|
|
260
292
|
className: "grid grid-cols-2 gap-4 sm:grid-cols-3 lg:grid-cols-4",
|
|
261
|
-
children: L.map((e) => /* @__PURE__ */
|
|
293
|
+
children: L.map((e) => /* @__PURE__ */ N("button", {
|
|
262
294
|
type: "button",
|
|
263
|
-
onClick: () =>
|
|
295
|
+
onClick: () => b(e.path),
|
|
264
296
|
"data-tour": e.tourAttr,
|
|
265
297
|
className: "flex flex-col gap-3 rounded-lg border border-border-seam bg-bg-surface p-5 text-left transition-all hover:border-accent-foreground/20 hover:shadow-md",
|
|
266
|
-
children: [/* @__PURE__ */
|
|
298
|
+
children: [/* @__PURE__ */ M("div", {
|
|
267
299
|
className: t("flex h-12 w-12 items-center justify-center rounded-full", e.color),
|
|
268
300
|
children: e.icon
|
|
269
|
-
}), /* @__PURE__ */
|
|
301
|
+
}), /* @__PURE__ */ N("div", { children: [/* @__PURE__ */ M("p", {
|
|
270
302
|
className: "text-sm font-semibold text-text-primary",
|
|
271
|
-
children: e.label
|
|
272
|
-
}), /* @__PURE__ */
|
|
303
|
+
children: C(`coolandlovely.module.${e.labelKey}`, e.label)
|
|
304
|
+
}), /* @__PURE__ */ M("p", {
|
|
273
305
|
className: "mt-0.5 text-xs text-text-secondary",
|
|
274
|
-
children: e.description
|
|
306
|
+
children: C(`coolandlovely.module.${e.descriptionKey}`, e.description)
|
|
275
307
|
})] })]
|
|
276
|
-
}, e.
|
|
308
|
+
}, e.labelKey))
|
|
277
309
|
})]
|
|
278
310
|
}),
|
|
279
|
-
/* @__PURE__ */
|
|
311
|
+
/* @__PURE__ */ N("section", {
|
|
280
312
|
className: "mb-8",
|
|
281
|
-
children: [/* @__PURE__ */
|
|
313
|
+
children: [/* @__PURE__ */ N("div", {
|
|
282
314
|
className: "mb-4 flex items-center justify-between",
|
|
283
|
-
children: [/* @__PURE__ */
|
|
315
|
+
children: [/* @__PURE__ */ M("h2", {
|
|
284
316
|
className: "text-lg font-semibold text-text-primary",
|
|
285
|
-
children: "Latest looks"
|
|
286
|
-
}), /* @__PURE__ */
|
|
317
|
+
children: C("coolandlovely.dashboard.latestLooks", "Latest looks")
|
|
318
|
+
}), /* @__PURE__ */ N("button", {
|
|
287
319
|
type: "button",
|
|
288
|
-
onClick: () =>
|
|
320
|
+
onClick: () => b("/looks"),
|
|
289
321
|
className: "flex items-center gap-1 text-sm font-medium text-primary hover:underline",
|
|
290
|
-
children: [
|
|
322
|
+
children: [
|
|
323
|
+
C("coolandlovely.actions.viewAll", "View all"),
|
|
324
|
+
" ",
|
|
325
|
+
/* @__PURE__ */ M(y, { className: "h-3.5 w-3.5" })
|
|
326
|
+
]
|
|
291
327
|
})]
|
|
292
|
-
}),
|
|
328
|
+
}), G.length === 0 ? /* @__PURE__ */ M("p", {
|
|
293
329
|
className: "rounded-lg border border-border-seam bg-bg-surface p-6 text-sm text-text-secondary",
|
|
294
|
-
children: "No looks published yet. Be the first to publish a shop-the-look outfit."
|
|
295
|
-
}) : /* @__PURE__ */
|
|
330
|
+
children: C("coolandlovely.empty.latestLooks", "No looks published yet. Be the first to publish a shop-the-look outfit.")
|
|
331
|
+
}) : /* @__PURE__ */ M("div", {
|
|
296
332
|
className: "grid grid-cols-2 gap-4 sm:grid-cols-3 lg:grid-cols-5",
|
|
297
|
-
children:
|
|
333
|
+
children: G.map((e) => /* @__PURE__ */ M(m, {
|
|
298
334
|
id: e.id,
|
|
299
335
|
title: e.title,
|
|
300
336
|
occasion: e.occasion,
|
|
@@ -302,50 +338,54 @@ function R() {
|
|
|
302
338
|
likeCount: e.likeCount,
|
|
303
339
|
isLikedByMe: e.isLikedByMe,
|
|
304
340
|
isSavedByMe: e.isSavedByMe,
|
|
305
|
-
onOpen: () =>
|
|
341
|
+
onOpen: () => b(`/looks/${e.id}`),
|
|
306
342
|
showActions: !0
|
|
307
343
|
}, e.id))
|
|
308
344
|
})]
|
|
309
345
|
}),
|
|
310
|
-
|
|
346
|
+
K.length > 0 && /* @__PURE__ */ N("section", { children: [/* @__PURE__ */ N("div", {
|
|
311
347
|
className: "mb-4 flex items-center justify-between",
|
|
312
|
-
children: [/* @__PURE__ */
|
|
348
|
+
children: [/* @__PURE__ */ M("h2", {
|
|
313
349
|
className: "text-lg font-semibold text-text-primary",
|
|
314
|
-
children: "Recently updated brands"
|
|
315
|
-
}), /* @__PURE__ */
|
|
350
|
+
children: C("coolandlovely.dashboard.recentBrands", "Recently updated brands")
|
|
351
|
+
}), /* @__PURE__ */ N("button", {
|
|
316
352
|
type: "button",
|
|
317
|
-
onClick: () =>
|
|
353
|
+
onClick: () => b("/brands"),
|
|
318
354
|
className: "flex items-center gap-1 text-sm font-medium text-primary hover:underline",
|
|
319
|
-
children: [
|
|
355
|
+
children: [
|
|
356
|
+
C("coolandlovely.actions.viewAll", "View all"),
|
|
357
|
+
" ",
|
|
358
|
+
/* @__PURE__ */ M(y, { className: "h-3.5 w-3.5" })
|
|
359
|
+
]
|
|
320
360
|
})]
|
|
321
|
-
}), /* @__PURE__ */
|
|
361
|
+
}), /* @__PURE__ */ M("div", {
|
|
322
362
|
className: "grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-4",
|
|
323
|
-
children:
|
|
363
|
+
children: K.map((e) => /* @__PURE__ */ N("button", {
|
|
324
364
|
type: "button",
|
|
325
|
-
onClick: () =>
|
|
365
|
+
onClick: () => b(`/brands/${e.id}`),
|
|
326
366
|
className: "group flex items-center gap-3 rounded-xl border border-border-seam bg-bg-surface p-3 text-left shadow-sm transition-all hover:border-accent-foreground/20 hover:shadow-md",
|
|
327
367
|
children: [
|
|
328
|
-
/* @__PURE__ */
|
|
329
|
-
icon: /* @__PURE__ */
|
|
368
|
+
/* @__PURE__ */ M(p, {
|
|
369
|
+
icon: /* @__PURE__ */ M(k, { className: "h-5 w-5" }),
|
|
330
370
|
seed: e.id,
|
|
331
371
|
fileId: e.logo?.id ?? e.cover?.id,
|
|
332
372
|
alt: e.name,
|
|
333
373
|
className: "h-11 w-11 shrink-0 rounded-full ring-2 ring-bg-surface"
|
|
334
374
|
}),
|
|
335
|
-
/* @__PURE__ */
|
|
375
|
+
/* @__PURE__ */ N("div", {
|
|
336
376
|
className: "min-w-0 flex-1",
|
|
337
|
-
children: [/* @__PURE__ */
|
|
377
|
+
children: [/* @__PURE__ */ N("div", {
|
|
338
378
|
className: "flex items-center gap-1.5",
|
|
339
|
-
children: [/* @__PURE__ */
|
|
379
|
+
children: [/* @__PURE__ */ M("p", {
|
|
340
380
|
className: "truncate text-sm font-medium text-text-primary",
|
|
341
381
|
children: e.name
|
|
342
|
-
}), e.isFeatured && /* @__PURE__ */
|
|
343
|
-
}), /* @__PURE__ */
|
|
382
|
+
}), e.isFeatured && /* @__PURE__ */ M(O, { className: "h-3.5 w-3.5 shrink-0 fill-status-warning-text text-status-warning-text" })]
|
|
383
|
+
}), /* @__PURE__ */ N("p", {
|
|
344
384
|
className: "truncate text-xs text-text-secondary",
|
|
345
385
|
children: ["@", e.handle]
|
|
346
386
|
})]
|
|
347
387
|
}),
|
|
348
|
-
/* @__PURE__ */
|
|
388
|
+
/* @__PURE__ */ M(u, { status: e.status })
|
|
349
389
|
]
|
|
350
390
|
}, e.id))
|
|
351
391
|
})] })
|