@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.
Files changed (100) hide show
  1. package/dist/coolandlovely/components/ActivityTrail.d.ts +24 -0
  2. package/dist/coolandlovely/components/ActivityTrail.d.ts.map +1 -0
  3. package/dist/coolandlovely/components/ActivityTrail.js +70 -0
  4. package/dist/coolandlovely/components/ActivityTrail.js.map +1 -0
  5. package/dist/coolandlovely/components/Comments.js +4 -4
  6. package/dist/coolandlovely/components/FeedbackWidget.d.ts.map +1 -1
  7. package/dist/coolandlovely/components/FeedbackWidget.js +72 -70
  8. package/dist/coolandlovely/components/FeedbackWidget.js.map +1 -1
  9. package/dist/coolandlovely/components/LookCard.js +24 -24
  10. package/dist/coolandlovely/components/StateViews.d.ts.map +1 -1
  11. package/dist/coolandlovely/components/StateViews.js +35 -26
  12. package/dist/coolandlovely/components/StateViews.js.map +1 -1
  13. package/dist/coolandlovely/components/StatusBadge.d.ts.map +1 -1
  14. package/dist/coolandlovely/components/StatusBadge.js +45 -15
  15. package/dist/coolandlovely/components/StatusBadge.js.map +1 -1
  16. package/dist/coolandlovely/components/VisibilityChip.d.ts.map +1 -1
  17. package/dist/coolandlovely/components/VisibilityChip.js +22 -17
  18. package/dist/coolandlovely/components/VisibilityChip.js.map +1 -1
  19. package/dist/coolandlovely/components/index.d.ts +1 -0
  20. package/dist/coolandlovely/components/index.d.ts.map +1 -1
  21. package/dist/coolandlovely/components/index.js +1 -0
  22. package/dist/coolandlovely/hooks/index.d.ts +4 -0
  23. package/dist/coolandlovely/hooks/index.d.ts.map +1 -1
  24. package/dist/coolandlovely/hooks/index.js +4 -1
  25. package/dist/coolandlovely/hooks/useActivity.d.ts +39 -0
  26. package/dist/coolandlovely/hooks/useActivity.d.ts.map +1 -0
  27. package/dist/coolandlovely/hooks/useActivity.js +38 -0
  28. package/dist/coolandlovely/hooks/useActivity.js.map +1 -0
  29. package/dist/coolandlovely/hooks/useAssistantEntity.d.ts +24 -0
  30. package/dist/coolandlovely/hooks/useAssistantEntity.d.ts.map +1 -0
  31. package/dist/coolandlovely/hooks/useAssistantEntity.js +12 -0
  32. package/dist/coolandlovely/hooks/useAssistantEntity.js.map +1 -0
  33. package/dist/coolandlovely/hooks/useTr.d.ts +2 -0
  34. package/dist/coolandlovely/hooks/useTr.d.ts.map +1 -0
  35. package/dist/coolandlovely/hooks/useTr.js +14 -0
  36. package/dist/coolandlovely/hooks/useTr.js.map +1 -0
  37. package/dist/coolandlovely/pages/HomePage.d.ts.map +1 -1
  38. package/dist/coolandlovely/pages/HomePage.js +172 -132
  39. package/dist/coolandlovely/pages/HomePage.js.map +1 -1
  40. package/dist/coolandlovely/pages/admin/AdminBrandsPage.js +10 -10
  41. package/dist/coolandlovely/pages/admin/AdminCollaborationsPage.js +16 -16
  42. package/dist/coolandlovely/pages/admin/AdminFeaturedItemsPage.js +17 -17
  43. package/dist/coolandlovely/pages/brands/BrandDetailPage.d.ts.map +1 -1
  44. package/dist/coolandlovely/pages/brands/BrandDetailPage.js +171 -151
  45. package/dist/coolandlovely/pages/brands/BrandDetailPage.js.map +1 -1
  46. package/dist/coolandlovely/pages/brands/BrandFormPage.js +9 -9
  47. package/dist/coolandlovely/pages/brands/BrandsListPage.d.ts.map +1 -1
  48. package/dist/coolandlovely/pages/brands/BrandsListPage.js +80 -76
  49. package/dist/coolandlovely/pages/brands/BrandsListPage.js.map +1 -1
  50. package/dist/coolandlovely/pages/collaborations/CollaborationDetailPage.d.ts.map +1 -1
  51. package/dist/coolandlovely/pages/collaborations/CollaborationDetailPage.js +121 -120
  52. package/dist/coolandlovely/pages/collaborations/CollaborationDetailPage.js.map +1 -1
  53. package/dist/coolandlovely/pages/collaborations/CollaborationFormPage.js +7 -7
  54. package/dist/coolandlovely/pages/collaborations/CollaborationsListPage.d.ts.map +1 -1
  55. package/dist/coolandlovely/pages/collaborations/CollaborationsListPage.js +82 -81
  56. package/dist/coolandlovely/pages/collaborations/CollaborationsListPage.js.map +1 -1
  57. package/dist/coolandlovely/pages/collections/CollectionDetailPage.d.ts.map +1 -1
  58. package/dist/coolandlovely/pages/collections/CollectionDetailPage.js +111 -110
  59. package/dist/coolandlovely/pages/collections/CollectionDetailPage.js.map +1 -1
  60. package/dist/coolandlovely/pages/collections/CollectionFormPage.js +9 -9
  61. package/dist/coolandlovely/pages/collections/CollectionsListPage.d.ts.map +1 -1
  62. package/dist/coolandlovely/pages/collections/CollectionsListPage.js +54 -55
  63. package/dist/coolandlovely/pages/collections/CollectionsListPage.js.map +1 -1
  64. package/dist/coolandlovely/pages/discover/DiscoverPage.d.ts.map +1 -1
  65. package/dist/coolandlovely/pages/discover/DiscoverPage.js +452 -307
  66. package/dist/coolandlovely/pages/discover/DiscoverPage.js.map +1 -1
  67. package/dist/coolandlovely/pages/items/StyleItemDetailPage.d.ts.map +1 -1
  68. package/dist/coolandlovely/pages/items/StyleItemDetailPage.js +117 -116
  69. package/dist/coolandlovely/pages/items/StyleItemDetailPage.js.map +1 -1
  70. package/dist/coolandlovely/pages/items/StyleItemFormPage.js +10 -10
  71. package/dist/coolandlovely/pages/items/StyleItemsListPage.d.ts.map +1 -1
  72. package/dist/coolandlovely/pages/items/StyleItemsListPage.js +105 -95
  73. package/dist/coolandlovely/pages/items/StyleItemsListPage.js.map +1 -1
  74. package/dist/coolandlovely/pages/lookbooks/LookbookDetailPage.d.ts.map +1 -1
  75. package/dist/coolandlovely/pages/lookbooks/LookbookDetailPage.js +32 -29
  76. package/dist/coolandlovely/pages/lookbooks/LookbookDetailPage.js.map +1 -1
  77. package/dist/coolandlovely/pages/lookbooks/LookbooksListPage.d.ts.map +1 -1
  78. package/dist/coolandlovely/pages/lookbooks/LookbooksListPage.js +88 -79
  79. package/dist/coolandlovely/pages/lookbooks/LookbooksListPage.js.map +1 -1
  80. package/dist/coolandlovely/pages/looks/LookDetailPage.d.ts.map +1 -1
  81. package/dist/coolandlovely/pages/looks/LookDetailPage.js +135 -134
  82. package/dist/coolandlovely/pages/looks/LookDetailPage.js.map +1 -1
  83. package/dist/coolandlovely/pages/looks/LookFormPage.js +6 -6
  84. package/dist/coolandlovely/pages/looks/LookFormPage.js.map +1 -1
  85. package/dist/coolandlovely/pages/looks/LooksListPage.d.ts.map +1 -1
  86. package/dist/coolandlovely/pages/looks/LooksListPage.js +94 -94
  87. package/dist/coolandlovely/pages/looks/LooksListPage.js.map +1 -1
  88. package/dist/coolandlovely/pages/profile/StyleProfilePage.d.ts.map +1 -1
  89. package/dist/coolandlovely/pages/profile/StyleProfilePage.js +226 -199
  90. package/dist/coolandlovely/pages/profile/StyleProfilePage.js.map +1 -1
  91. package/dist/coolandlovely/pages/trends/TrendsPage.js +8 -8
  92. package/dist/coolandlovely/pages/wardrobe/WardrobeFormPage.js +5 -5
  93. package/dist/coolandlovely/pages/wardrobe/WardrobeListPage.d.ts.map +1 -1
  94. package/dist/coolandlovely/pages/wardrobe/WardrobeListPage.js +71 -69
  95. package/dist/coolandlovely/pages/wardrobe/WardrobeListPage.js.map +1 -1
  96. package/dist/utils/pageContext.d.ts +23 -0
  97. package/dist/utils/pageContext.d.ts.map +1 -1
  98. package/dist/utils/pageContext.js +37 -25
  99. package/dist/utils/pageContext.js.map +1 -1
  100. 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 { StatusBadge as i } from "../components/StatusBadge.js";
6
- import { ErrorView as a, LoadingView as o } from "../components/StateViews.js";
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 { buildCreatedAtSparkline as m, sparklineDeltaLabel as h, sparklineTrendDirection as g } from "../utils/sparkline.js";
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 _ } from "react";
14
- import { ArrowRight as v, BookHeart as y, Compass as b, Handshake as x, Heart as S, Plus as C, Shapes as w, Shirt as T, Sparkles as E, Star as D, Store as O, TrendingUp as k, UserCircle as A } from "lucide-react";
15
- import { jsx as j, jsxs as M } from "react/jsx-runtime";
16
- import { EmphasisPanel as N, PagePurpose as P } from "@burdenoff/fe-libs/ui";
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__ */ j(O, { className: "h-5 w-5" }),
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__ */ j(T, { className: "h-5 w-5" }),
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__ */ j(E, { className: "h-5 w-5" }),
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__ */ j(S, { className: "h-5 w-5" }),
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__ */ j(O, { className: "h-6 w-6" }),
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__ */ j(w, { className: "h-6 w-6" }),
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__ */ j(T, { className: "h-6 w-6" }),
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__ */ j(E, { className: "h-6 w-6" }),
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__ */ j(x, { className: "h-6 w-6" }),
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__ */ j(S, { className: "h-6 w-6" }),
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__ */ j(y, { className: "h-6 w-6" }),
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(A, { className: "h-6 w-6" }),
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__ */ j(b, { className: "h-6 w-6" }),
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__ */ j(k, { className: "h-6 w-6" }),
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: y, currentUser: b } = e(), S = c(), w = d(), k = u(), A = l(), R = f(), z = b?.firstName ?? b?.name ?? "there", B = S.isLoading || w.isLoading || k.isLoading || A.isLoading || R.isLoading, V = S.isError && w.isError && k.isError && A.isError, H = _(() => {
129
- let e = S.data?.items ?? [], t = w.data?.items ?? [], n = k.data?.items ?? [], r = A.data ?? [], i = R.data ?? [];
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
- R.data
146
- ]), U = _(() => [...k.data?.items ?? []].slice(0, 5), [k.data]), W = _(() => [...S.data?.items ?? []].sort((e, t) => new Date(t.updatedAt).getTime() - new Date(e.updatedAt).getTime()).slice(0, 4), [S.data]);
147
- if (B) return /* @__PURE__ */ j(n, {
148
- title: "CoolAndLovely",
149
- children: /* @__PURE__ */ j(o, { label: "Loading your style command center…" })
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 (V) return /* @__PURE__ */ j(n, {
152
- title: "CoolAndLovely",
153
- children: /* @__PURE__ */ j(a, {
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
- S.refetch(), w.refetch(), k.refetch(), A.refetch(), R.refetch();
185
+ A.refetch(), j.refetch(), R.refetch(), z.refetch(), B.refetch();
158
186
  }
159
187
  })
160
188
  });
161
- let G = m(S.data?.items ?? []), K = m(w.data?.items ?? []), q = m(k.data?.items ?? []), J = m(A.data ?? []), Y = [
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__ */ j(O, { className: "h-5 w-5" }),
164
- value: H.totalBrands.toString(),
191
+ icon: /* @__PURE__ */ M(k, { className: "h-5 w-5" }),
192
+ value: W.totalBrands.toString(),
193
+ labelKey: "brands",
165
194
  label: "Brands",
166
- sub: h(G) ?? `${H.publishedBrands} published`,
167
- sparklineData: G,
168
- trend: g(G)
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__ */ j(T, { className: "h-5 w-5" }),
172
- value: H.totalStyleItems.toString(),
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: h(K) ?? `${H.activeStyleItems} active`,
175
- sparklineData: K,
176
- trend: g(K)
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__ */ j(E, { className: "h-5 w-5" }),
180
- value: H.totalLooks.toString(),
209
+ icon: /* @__PURE__ */ M(D, { className: "h-5 w-5" }),
210
+ value: W.totalLooks.toString(),
211
+ labelKey: "looks",
181
212
  label: "Looks",
182
- sub: h(q) ?? `${H.featuredLooks} featured`,
183
- sparklineData: q,
184
- trend: g(q)
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__ */ j(x, { className: "h-5 w-5" }),
188
- value: H.activeCollaborations.toString(),
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: h(J) ?? `${H.wardrobeItems} in wardrobe`,
191
- sparklineData: J,
192
- trend: g(J)
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__ */ M(n, {
196
- title: `${F()}, ${z}`,
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__ */ j(P, {
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__ */ M(N, {
236
+ /* @__PURE__ */ N(P, {
205
237
  className: "mb-8",
206
- children: [/* @__PURE__ */ j("h2", {
238
+ children: [/* @__PURE__ */ M("h2", {
207
239
  className: "mb-4 text-lg font-semibold text-text-primary",
208
- children: "At a glance"
209
- }), /* @__PURE__ */ j("div", {
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: Y.map((e, t) => /* @__PURE__ */ j(r, {
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.label))
251
+ }, e.labelKey))
220
252
  })]
221
253
  }),
222
- /* @__PURE__ */ M("section", {
254
+ /* @__PURE__ */ N("section", {
223
255
  className: "mb-8",
224
- children: [/* @__PURE__ */ j("h2", {
256
+ children: [/* @__PURE__ */ M("h2", {
225
257
  className: "mb-4 text-lg font-semibold text-text-primary",
226
- children: "Quick actions"
227
- }), /* @__PURE__ */ j("div", {
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__ */ M("button", {
261
+ children: I.map((e) => /* @__PURE__ */ N("button", {
230
262
  type: "button",
231
- onClick: () => y(e.path),
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__ */ j("div", {
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__ */ M("div", {
271
+ /* @__PURE__ */ N("div", {
240
272
  className: "min-w-0 flex-1",
241
- children: [/* @__PURE__ */ j("p", {
273
+ children: [/* @__PURE__ */ M("p", {
242
274
  className: "text-sm font-semibold text-text-primary",
243
- children: e.label
244
- }), /* @__PURE__ */ j("p", {
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__ */ j(C, { className: "mt-1 h-4 w-4 shrink-0 text-text-secondary" })
281
+ /* @__PURE__ */ M(w, { className: "mt-1 h-4 w-4 shrink-0 text-text-secondary" })
250
282
  ]
251
- }, e.label))
283
+ }, e.labelKey))
252
284
  })]
253
285
  }),
254
- /* @__PURE__ */ M("section", {
286
+ /* @__PURE__ */ N("section", {
255
287
  className: "mb-8",
256
- children: [/* @__PURE__ */ j("h2", {
288
+ children: [/* @__PURE__ */ M("h2", {
257
289
  className: "mb-4 text-lg font-semibold text-text-primary",
258
- children: "Explore"
259
- }), /* @__PURE__ */ j("div", {
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__ */ M("button", {
293
+ children: L.map((e) => /* @__PURE__ */ N("button", {
262
294
  type: "button",
263
- onClick: () => y(e.path),
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__ */ j("div", {
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__ */ M("div", { children: [/* @__PURE__ */ j("p", {
301
+ }), /* @__PURE__ */ N("div", { children: [/* @__PURE__ */ M("p", {
270
302
  className: "text-sm font-semibold text-text-primary",
271
- children: e.label
272
- }), /* @__PURE__ */ j("p", {
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.label))
308
+ }, e.labelKey))
277
309
  })]
278
310
  }),
279
- /* @__PURE__ */ M("section", {
311
+ /* @__PURE__ */ N("section", {
280
312
  className: "mb-8",
281
- children: [/* @__PURE__ */ M("div", {
313
+ children: [/* @__PURE__ */ N("div", {
282
314
  className: "mb-4 flex items-center justify-between",
283
- children: [/* @__PURE__ */ j("h2", {
315
+ children: [/* @__PURE__ */ M("h2", {
284
316
  className: "text-lg font-semibold text-text-primary",
285
- children: "Latest looks"
286
- }), /* @__PURE__ */ M("button", {
317
+ children: C("coolandlovely.dashboard.latestLooks", "Latest looks")
318
+ }), /* @__PURE__ */ N("button", {
287
319
  type: "button",
288
- onClick: () => y("/looks"),
320
+ onClick: () => b("/looks"),
289
321
  className: "flex items-center gap-1 text-sm font-medium text-primary hover:underline",
290
- children: ["View all ", /* @__PURE__ */ j(v, { className: "h-3.5 w-3.5" })]
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
- }), U.length === 0 ? /* @__PURE__ */ j("p", {
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__ */ j("div", {
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: U.map((e) => /* @__PURE__ */ j(p, {
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: () => y(`/looks/${e.id}`),
341
+ onOpen: () => b(`/looks/${e.id}`),
306
342
  showActions: !0
307
343
  }, e.id))
308
344
  })]
309
345
  }),
310
- W.length > 0 && /* @__PURE__ */ M("section", { children: [/* @__PURE__ */ M("div", {
346
+ K.length > 0 && /* @__PURE__ */ N("section", { children: [/* @__PURE__ */ N("div", {
311
347
  className: "mb-4 flex items-center justify-between",
312
- children: [/* @__PURE__ */ j("h2", {
348
+ children: [/* @__PURE__ */ M("h2", {
313
349
  className: "text-lg font-semibold text-text-primary",
314
- children: "Recently updated brands"
315
- }), /* @__PURE__ */ M("button", {
350
+ children: C("coolandlovely.dashboard.recentBrands", "Recently updated brands")
351
+ }), /* @__PURE__ */ N("button", {
316
352
  type: "button",
317
- onClick: () => y("/brands"),
353
+ onClick: () => b("/brands"),
318
354
  className: "flex items-center gap-1 text-sm font-medium text-primary hover:underline",
319
- children: ["View all ", /* @__PURE__ */ j(v, { className: "h-3.5 w-3.5" })]
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__ */ j("div", {
361
+ }), /* @__PURE__ */ M("div", {
322
362
  className: "grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-4",
323
- children: W.map((e) => /* @__PURE__ */ M("button", {
363
+ children: K.map((e) => /* @__PURE__ */ N("button", {
324
364
  type: "button",
325
- onClick: () => y(`/brands/${e.id}`),
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__ */ j(s, {
329
- icon: /* @__PURE__ */ j(O, { className: "h-5 w-5" }),
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__ */ M("div", {
375
+ /* @__PURE__ */ N("div", {
336
376
  className: "min-w-0 flex-1",
337
- children: [/* @__PURE__ */ M("div", {
377
+ children: [/* @__PURE__ */ N("div", {
338
378
  className: "flex items-center gap-1.5",
339
- children: [/* @__PURE__ */ j("p", {
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__ */ j(D, { className: "h-3.5 w-3.5 shrink-0 fill-status-warning-text text-status-warning-text" })]
343
- }), /* @__PURE__ */ M("p", {
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__ */ j(i, { status: e.status })
388
+ /* @__PURE__ */ M(u, { status: e.status })
349
389
  ]
350
390
  }, e.id))
351
391
  })] })