@burdenoff/fe-libs 2026.1018.1 → 2026.1019.2

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 (65) hide show
  1. package/dist/chrome/AccountSwitcher.js +90 -89
  2. package/dist/chrome/Breadcrumbs.js +1 -1
  3. package/dist/chrome/CommandPalette.js +91 -90
  4. package/dist/chrome/Footer.js +31 -8
  5. package/dist/chrome/GlobalSearch.js +78 -77
  6. package/dist/chrome/HeaderBar.js +1 -1
  7. package/dist/chrome/HeaderThemeSwitcher.js +48 -47
  8. package/dist/chrome/LanguagePickerSheet.js +23 -22
  9. package/dist/chrome/NavCustomizeDialog.d.ts +0 -14
  10. package/dist/chrome/NavCustomizeDialog.js +114 -122
  11. package/dist/chrome/PanelTabs.js +45 -41
  12. package/dist/chrome/PersonaSurfaceControls.d.ts +0 -17
  13. package/dist/chrome/PersonaSurfaceControls.js +115 -118
  14. package/dist/chrome/PluginSettingsPage.js +29 -28
  15. package/dist/chrome/PluginWidgetGrid.js +19 -18
  16. package/dist/chrome/ProductPickerSheet.js +44 -47
  17. package/dist/chrome/ProductSwitcher.js +2 -6
  18. package/dist/chrome/ProfileSwitcher.js +6 -10
  19. package/dist/chrome/ShortcutHelpDialog.js +60 -65
  20. package/dist/chrome/SideNavigation.js +2 -2
  21. package/dist/chrome/Sidebar.js +44 -43
  22. package/dist/chrome/ThemePreferences.js +289 -267
  23. package/dist/chrome/contextSwitcher/EmptyState.js +31 -27
  24. package/dist/chrome/contextSwitcher/OrganizationList.js +40 -30
  25. package/dist/chrome/contextSwitcher/ProjectList.js +48 -44
  26. package/dist/chrome/contextSwitcher/SearchInput.js +44 -40
  27. package/dist/chrome/contextSwitcher/TriggerButton.js +2 -2
  28. package/dist/chrome/contextSwitcher/WorkspaceList.js +36 -32
  29. package/dist/chrome/globalSearch/AdvancedFiltersPanel.js +128 -126
  30. package/dist/chrome/globalSearch/ResultsList.js +25 -27
  31. package/dist/chrome/globalSearch/SearchInput.js +16 -14
  32. package/dist/chrome/notificationCenter/NotificationCardItem.js +58 -47
  33. package/dist/chrome/notificationCenter/NotificationFilters.js +76 -62
  34. package/dist/chrome/notificationCenter/NotificationFooter.js +21 -21
  35. package/dist/chrome/notificationCenter/NotificationHeader.js +67 -63
  36. package/dist/chrome/notificationCenter/NotificationList.js +75 -71
  37. package/dist/chrome/notificationCenter/NotificationPanel.js +37 -33
  38. package/dist/chrome/notificationCenter/PushOptInToggle.js +33 -32
  39. package/dist/chrome/notificationCenter/constants.d.ts +6 -1
  40. package/dist/chrome/notificationCenter/constants.js +12 -11
  41. package/dist/chrome/useThemeOptionLabels.d.ts +33 -0
  42. package/dist/chrome/useThemeOptionLabels.js +39 -0
  43. package/dist/shared/assistant/conversation.d.ts +8 -0
  44. package/dist/shared/assistant/history/historyMapping.js +1 -1
  45. package/dist/shared/assistant/ui/AssistantMarkdownRenderer.d.ts +6 -6
  46. package/dist/shared/assistant/ui/AssistantMarkdownRenderer.js +86 -85
  47. package/dist/shared/assistant/ui/AssistantMessageItem.js +101 -96
  48. package/dist/shared/assistant/ui/AssistantWriteProposalCard.d.ts +2 -0
  49. package/dist/shared/assistant/ui/AssistantWriteProposalCard.js +93 -89
  50. package/dist/shared/assistant/ui/WorkflowAssistantPanel.js +152 -140
  51. package/dist/shared/assistant/ui/useWriteProposals.js +122 -85
  52. package/dist/shared/assistant/writeProposalDiscovery.d.ts +3 -1
  53. package/dist/shared/assistant/writeProposalDiscovery.js +2 -2
  54. package/dist/shared/events/sinks/RybbitSink.js +2 -2
  55. package/dist/shared/providers/shell/interpolateShellLabel.d.ts +3 -0
  56. package/dist/shared/providers/shell/interpolateShellLabel.js +11 -0
  57. package/dist/shared/providers/shell/useAssistantShellLabels.d.ts +45 -0
  58. package/dist/shared/providers/shell/useAssistantShellLabels.js +54 -0
  59. package/dist/shared/tours/TourPlayer.js +33 -32
  60. package/dist/shared/tours/TourTooltip.js +108 -109
  61. package/dist/shared/tours/tourTrigger/MobileTourSheet.js +98 -85
  62. package/dist/shared/tours/tourTrigger/TourListItemDesktop.js +20 -18
  63. package/dist/shared/tours/tourTrigger/TourListItemMobile.js +23 -25
  64. package/dist/shared-assistant.js +188 -188
  65. package/package.json +2 -2
@@ -2,17 +2,19 @@ import { Button as e } from "../ui/button.js";
2
2
  import { Select as t, SelectContent as n, SelectItem as r, SelectTrigger as i, SelectValue as a } from "../ui/select.js";
3
3
  import { Badge as o } from "../ui/badge.js";
4
4
  import { Card as s, CardContent as c, CardDescription as l, CardHeader as u, CardTitle as d } from "../ui/card.js";
5
- import { Input as f } from "../ui/input.js";
6
- import { Label as p } from "../ui/label.js";
7
- import { THEME_OPTIONS as m, useTheme as h } from "../shared/providers/shell/ThemeProvider.js";
8
- import { Switch as g } from "../ui/switch.js";
9
- import { cn as _ } from "../utils/cn.js";
5
+ import { Input as ee } from "../ui/input.js";
6
+ import { Label as f } from "../ui/label.js";
7
+ import { THEME_OPTIONS as p, useTheme as m } from "../shared/providers/shell/ThemeProvider.js";
8
+ import { Switch as h } from "../ui/switch.js";
9
+ import { useShellLabel as te } from "../shared/providers/shell/useShellLabel.js";
10
+ import { useThemeOptionLabels as ne } from "./useThemeOptionLabels.js";
11
+ import { cn as g } from "../utils/cn.js";
10
12
  import "../utils/index.js";
11
- import { useCallback as v, useId as y, useMemo as b, useState as x } from "react";
12
- import { Check as S, Palette as C, Pencil as ee, Plus as te, Trash2 as ne, X as re } from "lucide-react";
13
- import { jsx as w, jsxs as T } from "react/jsx-runtime";
13
+ import { useCallback as _, useId as v, useMemo as y, useState as b } from "react";
14
+ import { Check as x, Palette as S, Pencil as re, Plus as C, Trash2 as ie, X as w } from "lucide-react";
15
+ import { jsx as T, jsxs as E } from "react/jsx-runtime";
14
16
  //#region src/chrome/ThemePreferences.tsx
15
- var E = [
17
+ var D = [
16
18
  {
17
19
  name: "Blue",
18
20
  varName: "--color-accent-blue"
@@ -29,7 +31,7 @@ var E = [
29
31
  name: "Indigo",
30
32
  varName: "--color-accent-indigo"
31
33
  }
32
- ], D = [
34
+ ], O = [
33
35
  {
34
36
  value: "compact",
35
37
  label: "Compact"
@@ -42,7 +44,7 @@ var E = [
42
44
  value: "spacious",
43
45
  label: "Spacious"
44
46
  }
45
- ], O = [
47
+ ], k = [
46
48
  {
47
49
  value: "small",
48
50
  label: "Small"
@@ -55,7 +57,7 @@ var E = [
55
57
  value: "large",
56
58
  label: "Large"
57
59
  }
58
- ], k = [
60
+ ], ae = [
59
61
  {
60
62
  value: "off",
61
63
  label: "Off"
@@ -70,240 +72,251 @@ var E = [
70
72
  }
71
73
  ], A = (e) => e === "dark" ? "bg-bg-sunken" : "bg-bg-surface";
72
74
  function j({ className: t, showCustomThemes: n = !0 }) {
73
- let { mode: r, density: i, typography: a, glass: y, reduceMotion: re, resolvedThemeName: j, setMode: P, setDensity: ae, setTypography: oe, setGlass: se, setReduceMotion: ce, customThemes: F, activeCustomId: I, createCustomTheme: L, updateCustomTheme: R, deleteCustomTheme: le, applyCustomTheme: z } = h(), [B, V] = x(!1), [H, ue] = x("My theme"), [U, de] = x("light"), [W, fe] = x("#6366F1"), [G, pe] = x("comfortable"), [K, me] = x("default"), [q, he] = x("full"), [J, ge] = x(!1), [Y, X] = x(null), [Z, _e] = x(""), Q = v(() => V(!0), []), ve = v(() => {
74
- z(L({
75
- name: H.trim() || "Untitled theme",
76
- base: U,
77
- accent: W,
78
- density: G,
79
- typography: K,
80
- glass: q,
81
- reduceMotion: J
82
- }).id), V(!1);
75
+ let r = te(), i = ne(), { mode: a, density: v, typography: w, glass: j, reduceMotion: F, resolvedThemeName: oe, setMode: se, setDensity: ce, setTypography: le, setGlass: ue, setReduceMotion: de, customThemes: I, activeCustomId: L, createCustomTheme: R, updateCustomTheme: z, deleteCustomTheme: fe, applyCustomTheme: B } = m(), [V, H] = b(!1), [U, pe] = b(() => r("themeSwitcher.myTheme", "My theme")), [W, me] = b("light"), [G, he] = b("#6366F1"), [K, ge] = b("comfortable"), [q, _e] = b("default"), [J, ve] = b("full"), [Y, ye] = b(!1), [X, Z] = b(null), [Q, be] = b(""), xe = _(() => H(!0), []), Se = _(() => {
76
+ B(R({
77
+ name: U.trim() || r("themeSwitcher.untitled", "Untitled theme"),
78
+ base: W,
79
+ accent: G,
80
+ density: K,
81
+ typography: q,
82
+ glass: J,
83
+ reduceMotion: Y
84
+ }).id), H(!1);
83
85
  }, [
84
- H,
85
86
  U,
86
87
  W,
87
88
  G,
88
89
  K,
89
90
  q,
90
91
  J,
91
- L,
92
- z
93
- ]), ye = v((e) => {
94
- X(e.id), _e(e.name);
95
- }, []), be = v(() => {
96
- Y && R(Y, { name: Z.trim() || "Untitled theme" }), X(null);
97
- }, [
98
92
  Y,
99
- Z,
100
- R
101
- ]), $ = b(() => B ? {
102
- theme: U,
103
- density: G,
104
- typography: K,
105
- glass: q
93
+ R,
94
+ B,
95
+ r
96
+ ]), Ce = _((e) => {
97
+ Z(e.id), be(e.name);
98
+ }, []), we = _(() => {
99
+ X && z(X, { name: Q.trim() || r("themeSwitcher.untitled", "Untitled theme") }), Z(null);
100
+ }, [
101
+ X,
102
+ Q,
103
+ z,
104
+ r
105
+ ]), $ = y(() => V ? {
106
+ theme: W,
107
+ density: K,
108
+ typography: q,
109
+ glass: J
106
110
  } : {
107
- theme: j,
108
- density: i,
109
- typography: a,
110
- glass: y
111
+ theme: oe,
112
+ density: v,
113
+ typography: w,
114
+ glass: j
111
115
  }, [
112
- B,
113
- U,
114
- G,
116
+ V,
117
+ W,
115
118
  K,
116
119
  q,
117
- j,
118
- i,
119
- a,
120
- y
120
+ J,
121
+ oe,
122
+ v,
123
+ w,
124
+ j
121
125
  ]);
122
- return /* @__PURE__ */ T("div", {
123
- className: _("flex flex-col gap-6", t),
126
+ return /* @__PURE__ */ E("div", {
127
+ className: g("flex flex-col gap-6", t),
124
128
  children: [
125
- n && /* @__PURE__ */ T(s, { children: [/* @__PURE__ */ T(u, { children: [/* @__PURE__ */ T(d, {
129
+ n && /* @__PURE__ */ E(s, { children: [/* @__PURE__ */ E(u, { children: [/* @__PURE__ */ E(d, {
126
130
  className: "flex items-center gap-2",
127
- children: [/* @__PURE__ */ w(C, {
131
+ children: [/* @__PURE__ */ T(S, {
128
132
  className: "size-4 text-text-secondary",
129
133
  "aria-hidden": "true"
130
- }), "Theme"]
131
- }), /* @__PURE__ */ w(l, { children: "Pick a built-in theme or one of your saved custom themes." })] }), /* @__PURE__ */ w(c, { children: /* @__PURE__ */ T("div", {
134
+ }), r("themeSwitcher.label", "Theme")]
135
+ }), /* @__PURE__ */ T(l, { children: r("themeSwitcher.description", "Pick a built-in theme or one of your saved custom themes.") })] }), /* @__PURE__ */ T(c, { children: /* @__PURE__ */ E("div", {
132
136
  role: "radiogroup",
133
- "aria-label": "Theme",
137
+ "aria-label": r("themeSwitcher.label", "Theme"),
134
138
  className: "grid grid-cols-2 gap-3 sm:grid-cols-3 lg:grid-cols-4",
135
139
  children: [
136
- m.map((e) => /* @__PURE__ */ w(M, {
137
- label: e.label,
140
+ p.map((e) => /* @__PURE__ */ T(M, {
141
+ label: i.themes[e.value],
138
142
  family: e.family,
139
- active: r === e.value,
140
- onSelect: () => P(e.value)
143
+ active: a === e.value,
144
+ onSelect: () => se(e.value)
141
145
  }, e.value)),
142
- F.map((e) => /* @__PURE__ */ w(M, {
146
+ I.map((e) => /* @__PURE__ */ T(M, {
143
147
  label: e.name,
144
148
  family: e.base,
145
149
  accent: e.accent,
146
- active: r === "custom" && I === e.id,
147
- onSelect: () => z(e.id)
150
+ active: a === "custom" && L === e.id,
151
+ onSelect: () => B(e.id)
148
152
  }, e.id)),
149
- /* @__PURE__ */ T("button", {
153
+ /* @__PURE__ */ E("button", {
150
154
  type: "button",
151
- onClick: Q,
155
+ onClick: xe,
152
156
  className: "flex min-h-[5.5rem] flex-col items-center justify-center gap-1 rounded-card border border-dashed border-border-default bg-bg-surface text-text-secondary transition-colors hover:border-border-strong hover:bg-bg-sunken hover:text-text-primary focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--color-focus-ring)]",
153
- children: [/* @__PURE__ */ w(te, {
157
+ children: [/* @__PURE__ */ T(C, {
154
158
  className: "size-5",
155
159
  "aria-hidden": "true"
156
- }), /* @__PURE__ */ w("span", {
160
+ }), /* @__PURE__ */ T("span", {
157
161
  className: "text-xs font-medium",
158
- children: "New theme"
162
+ children: r("themeSwitcher.newTheme", "New theme")
159
163
  })]
160
164
  })
161
165
  ]
162
166
  }) })] }),
163
- /* @__PURE__ */ T(s, { children: [/* @__PURE__ */ T(u, { children: [/* @__PURE__ */ w(d, { children: "Accent" }), /* @__PURE__ */ w(l, { children: "Accent color retints buttons, links, and highlights across the app." })] }), /* @__PURE__ */ w(c, { children: /* @__PURE__ */ T("div", {
167
+ /* @__PURE__ */ E(s, { children: [/* @__PURE__ */ E(u, { children: [/* @__PURE__ */ T(d, { children: r("themeSwitcher.accent", "Accent") }), /* @__PURE__ */ T(l, { children: r("themeSwitcher.accentHelp", "Accent color retints buttons, links, and highlights across the app.") })] }), /* @__PURE__ */ T(c, { children: /* @__PURE__ */ E("div", {
164
168
  className: "flex flex-wrap items-center gap-3",
165
- children: [E.map((e) => /* @__PURE__ */ T("div", {
169
+ children: [D.map((e) => /* @__PURE__ */ E("div", {
166
170
  className: "flex flex-col items-center gap-1.5",
167
- children: [/* @__PURE__ */ w("span", {
171
+ children: [/* @__PURE__ */ T("span", {
168
172
  className: "size-9 rounded-full border border-border-seam shadow-elevation-1",
169
173
  style: { backgroundColor: `var(${e.varName})` },
170
174
  "aria-hidden": "true"
171
- }), /* @__PURE__ */ w("span", {
175
+ }), /* @__PURE__ */ T("span", {
172
176
  className: "text-xs text-text-secondary",
173
- children: e.name
177
+ children: i.accents[e.name] ?? e.name
174
178
  })]
175
- }, e.name)), /* @__PURE__ */ T(e, {
179
+ }, e.name)), /* @__PURE__ */ E(e, {
176
180
  type: "button",
177
181
  variant: "outline",
178
182
  size: "sm",
179
- onClick: Q,
183
+ onClick: xe,
180
184
  className: "ml-1",
181
- children: [/* @__PURE__ */ w(C, {
185
+ children: [/* @__PURE__ */ T(S, {
182
186
  className: "size-4",
183
187
  "aria-hidden": "true"
184
- }), "Custom accent"]
188
+ }), r("themeSwitcher.customAccent", "Custom accent")]
185
189
  })]
186
190
  }) })] }),
187
- /* @__PURE__ */ w(N, {
188
- title: "Density",
189
- description: "Spacing and control sizing throughout the interface.",
190
- value: i,
191
- options: D,
192
- onChange: ae
191
+ /* @__PURE__ */ T(N, {
192
+ title: r("themeSwitcher.density", "Density"),
193
+ description: r("themeSwitcher.densityHelp", "Spacing and control sizing throughout the interface."),
194
+ value: v,
195
+ options: O.map((e) => ({
196
+ ...e,
197
+ label: i.density[e.value]
198
+ })),
199
+ onChange: ce
193
200
  }),
194
- /* @__PURE__ */ w(N, {
195
- title: "Typography",
196
- description: "Base font scale for text across the app.",
197
- value: a,
198
- options: O,
199
- onChange: oe
201
+ /* @__PURE__ */ T(N, {
202
+ title: r("themeSwitcher.typography", "Typography"),
203
+ description: r("themeSwitcher.typographyHelp", "Base font scale for text across the app."),
204
+ value: w,
205
+ options: k.map((e) => ({
206
+ ...e,
207
+ label: i.typography[e.value]
208
+ })),
209
+ onChange: le
200
210
  }),
201
- /* @__PURE__ */ w(N, {
202
- title: "Glass intensity",
203
- description: "Strength of the frosted-glass blur on elevated surfaces.",
204
- value: y,
205
- options: k,
206
- onChange: se
211
+ /* @__PURE__ */ T(N, {
212
+ title: r("themeSwitcher.glassIntensity", "Glass intensity"),
213
+ description: r("themeSwitcher.glassHelp", "Strength of the frosted-glass blur on elevated surfaces."),
214
+ value: j,
215
+ options: ae.map((e) => ({
216
+ ...e,
217
+ label: i.glass[e.value]
218
+ })),
219
+ onChange: ue
207
220
  }),
208
- /* @__PURE__ */ w(s, { children: /* @__PURE__ */ T(c, {
221
+ /* @__PURE__ */ T(s, { children: /* @__PURE__ */ E(c, {
209
222
  className: "flex items-center justify-between gap-4 pt-6",
210
- children: [/* @__PURE__ */ T("div", {
223
+ children: [/* @__PURE__ */ E("div", {
211
224
  className: "flex flex-col",
212
- children: [/* @__PURE__ */ w(p, {
225
+ children: [/* @__PURE__ */ T(f, {
213
226
  htmlFor: "theme-reduce-motion",
214
227
  className: "text-sm font-medium text-text-primary",
215
- children: "Reduce motion"
216
- }), /* @__PURE__ */ w("span", {
228
+ children: r("themeSwitcher.reduceMotion", "Reduce motion")
229
+ }), /* @__PURE__ */ T("span", {
217
230
  className: "text-xs text-text-secondary",
218
- children: "Minimize animations and transitions across the app."
231
+ children: r("themeSwitcher.motionHelp", "Minimize animations and transitions across the app.")
219
232
  })]
220
- }), /* @__PURE__ */ w(g, {
233
+ }), /* @__PURE__ */ T(h, {
221
234
  id: "theme-reduce-motion",
222
- checked: re,
223
- onCheckedChange: ce,
224
- "aria-label": "Reduce motion"
235
+ checked: F,
236
+ onCheckedChange: de,
237
+ "aria-label": r("themeSwitcher.reduceMotion", "Reduce motion")
225
238
  })]
226
239
  }) }),
227
- n && B && /* @__PURE__ */ w(ie, {
228
- name: H,
229
- base: U,
230
- accent: W,
231
- density: G,
232
- typography: K,
233
- glass: q,
234
- reduceMotion: J,
235
- onName: ue,
236
- onBase: de,
237
- onAccent: fe,
238
- onDensity: pe,
239
- onTypography: me,
240
- onGlass: he,
241
- onReduceMotion: ge,
242
- onSave: ve,
243
- onCancel: () => V(!1)
240
+ n && V && /* @__PURE__ */ T(P, {
241
+ name: U,
242
+ base: W,
243
+ accent: G,
244
+ density: K,
245
+ typography: q,
246
+ glass: J,
247
+ reduceMotion: Y,
248
+ onName: pe,
249
+ onBase: me,
250
+ onAccent: he,
251
+ onDensity: ge,
252
+ onTypography: _e,
253
+ onGlass: ve,
254
+ onReduceMotion: ye,
255
+ onSave: Se,
256
+ onCancel: () => H(!1)
244
257
  }),
245
- n && F.length > 0 && /* @__PURE__ */ T(s, { children: [/* @__PURE__ */ T(u, { children: [/* @__PURE__ */ w(d, { children: "Saved themes" }), /* @__PURE__ */ w(l, { children: "Apply, rename, or remove your custom themes." })] }), /* @__PURE__ */ w(c, { children: /* @__PURE__ */ w("ul", {
258
+ n && I.length > 0 && /* @__PURE__ */ E(s, { children: [/* @__PURE__ */ E(u, { children: [/* @__PURE__ */ T(d, { children: r("themeSwitcher.savedThemes", "Saved themes") }), /* @__PURE__ */ T(l, { children: r("themeSwitcher.savedThemesHelp", "Apply, rename, or remove your custom themes.") })] }), /* @__PURE__ */ T(c, { children: /* @__PURE__ */ T("ul", {
246
259
  className: "flex flex-col divide-y divide-border-subtle",
247
- children: F.map((t) => {
248
- let n = r === "custom" && I === t.id;
249
- return /* @__PURE__ */ T("li", {
260
+ children: I.map((t) => {
261
+ let n = a === "custom" && L === t.id;
262
+ return /* @__PURE__ */ E("li", {
250
263
  className: "flex flex-wrap items-center gap-3 py-3 first:pt-0 last:pb-0",
251
264
  children: [
252
- /* @__PURE__ */ w("span", {
265
+ /* @__PURE__ */ T("span", {
253
266
  className: "size-6 rounded-full border border-border-seam",
254
267
  style: { backgroundColor: t.accent },
255
268
  "aria-hidden": "true"
256
269
  }),
257
- Y === t.id ? /* @__PURE__ */ w(f, {
270
+ X === t.id ? /* @__PURE__ */ T(ee, {
258
271
  autoFocus: !0,
259
- value: Z,
260
- "aria-label": "Theme name",
261
- onChange: (e) => _e(e.target.value),
262
- onBlur: be,
272
+ value: Q,
273
+ "aria-label": r("themeSwitcher.themeName", "Theme name"),
274
+ onChange: (e) => be(e.target.value),
275
+ onBlur: we,
263
276
  onKeyDown: (e) => {
264
- e.key === "Enter" && be(), e.key === "Escape" && X(null);
277
+ e.key === "Enter" && we(), e.key === "Escape" && Z(null);
265
278
  },
266
279
  className: "h-8 w-44"
267
- }) : /* @__PURE__ */ T("span", {
280
+ }) : /* @__PURE__ */ E("span", {
268
281
  className: "flex flex-1 items-center gap-2 text-sm text-text-primary",
269
- children: [t.name, n && /* @__PURE__ */ T(o, {
282
+ children: [t.name, n && /* @__PURE__ */ E(o, {
270
283
  variant: "success",
271
284
  className: "gap-1",
272
- children: [/* @__PURE__ */ w(S, {
285
+ children: [/* @__PURE__ */ T(x, {
273
286
  className: "size-3",
274
287
  "aria-hidden": "true"
275
- }), "Active"]
288
+ }), r("common.status.active", "Active")]
276
289
  })]
277
290
  }),
278
- /* @__PURE__ */ T("div", {
291
+ /* @__PURE__ */ E("div", {
279
292
  className: "ml-auto flex items-center gap-1",
280
293
  children: [
281
- /* @__PURE__ */ w(e, {
294
+ /* @__PURE__ */ T(e, {
282
295
  type: "button",
283
296
  variant: "outline",
284
297
  size: "sm",
285
298
  disabled: n,
286
- onClick: () => z(t.id),
287
- children: "Apply"
299
+ onClick: () => B(t.id),
300
+ children: r("themeSwitcher.apply", "Apply")
288
301
  }),
289
- /* @__PURE__ */ w(e, {
302
+ /* @__PURE__ */ T(e, {
290
303
  type: "button",
291
304
  variant: "ghost",
292
305
  size: "icon-sm",
293
- "aria-label": `Rename ${t.name}`,
294
- onClick: () => ye(t),
295
- children: /* @__PURE__ */ w(ee, {
306
+ "aria-label": r("themeSwitcher.renameNamed", "Rename {{name}}", { name: t.name }),
307
+ onClick: () => Ce(t),
308
+ children: /* @__PURE__ */ T(re, {
296
309
  className: "size-4",
297
310
  "aria-hidden": "true"
298
311
  })
299
312
  }),
300
- /* @__PURE__ */ w(e, {
313
+ /* @__PURE__ */ T(e, {
301
314
  type: "button",
302
315
  variant: "ghost",
303
316
  size: "icon-sm",
304
- "aria-label": `Delete ${t.name}`,
305
- onClick: () => le(t.id),
306
- children: /* @__PURE__ */ w(ne, {
317
+ "aria-label": r("themeSwitcher.deleteNamed", "Delete {{name}}", { name: t.name }),
318
+ onClick: () => fe(t.id),
319
+ children: /* @__PURE__ */ T(ie, {
307
320
  className: "size-4 text-action-danger-bg",
308
321
  "aria-hidden": "true"
309
322
  })
@@ -314,89 +327,89 @@ function j({ className: t, showCustomThemes: n = !0 }) {
314
327
  }, t.id);
315
328
  })
316
329
  }) })] }),
317
- /* @__PURE__ */ T(s, { children: [/* @__PURE__ */ T(u, { children: [/* @__PURE__ */ w(d, { children: "Preview" }), /* @__PURE__ */ w(l, { children: "A scoped preview of the candidate theme — applies only here until you select it." })] }), /* @__PURE__ */ w(c, { children: /* @__PURE__ */ T("div", {
330
+ /* @__PURE__ */ E(s, { children: [/* @__PURE__ */ E(u, { children: [/* @__PURE__ */ T(d, { children: r("common.markdownEditor.preview", "Preview") }), /* @__PURE__ */ T(l, { children: r("themeSwitcher.previewHelp", "A scoped preview of the candidate theme — applies only here until you select it.") })] }), /* @__PURE__ */ T(c, { children: /* @__PURE__ */ E("div", {
318
331
  "data-theme": $.theme,
319
332
  "data-density": $.density,
320
333
  "data-typography": $.typography,
321
334
  "data-glass": $.glass,
322
- className: _("flex flex-col gap-4 rounded-card border border-border-seam p-4", A(m.find((e) => e.value === $.theme)?.family ?? "light")),
335
+ className: g("flex flex-col gap-4 rounded-card border border-border-seam p-4", A(p.find((e) => e.value === $.theme)?.family ?? "light")),
323
336
  children: [
324
- /* @__PURE__ */ T("div", {
337
+ /* @__PURE__ */ E("div", {
325
338
  className: "flex flex-wrap items-center gap-2",
326
339
  children: [
327
- /* @__PURE__ */ w(e, {
340
+ /* @__PURE__ */ T(e, {
328
341
  type: "button",
329
342
  size: "sm",
330
- children: "Primary"
343
+ children: r("notifications.actionStyle.primary", "Primary")
331
344
  }),
332
- /* @__PURE__ */ w(e, {
345
+ /* @__PURE__ */ T(e, {
333
346
  type: "button",
334
347
  variant: "secondary",
335
348
  size: "sm",
336
- children: "Secondary"
349
+ children: r("notifications.actionStyle.secondary", "Secondary")
337
350
  }),
338
- /* @__PURE__ */ w(e, {
351
+ /* @__PURE__ */ T(e, {
339
352
  type: "button",
340
353
  variant: "outline",
341
354
  size: "sm",
342
- children: "Outline"
355
+ children: r("themeSwitcher.outline", "Outline")
343
356
  }),
344
- /* @__PURE__ */ w(e, {
357
+ /* @__PURE__ */ T(e, {
345
358
  type: "button",
346
359
  variant: "ghost",
347
360
  size: "sm",
348
- children: "Ghost"
361
+ children: r("themeSwitcher.ghost", "Ghost")
349
362
  })
350
363
  ]
351
364
  }),
352
- /* @__PURE__ */ T("div", {
365
+ /* @__PURE__ */ E("div", {
353
366
  className: "rounded-card border border-border-seam bg-[var(--color-surface-glass)] p-4 shadow-[var(--shadow-pop)] backdrop-blur-[var(--blur-glass)]",
354
367
  children: [
355
- /* @__PURE__ */ w("p", {
368
+ /* @__PURE__ */ T("p", {
356
369
  className: "text-xs font-medium text-text-secondary",
357
- children: "Active sessions"
370
+ children: r("themeSwitcher.activeSessions", "Active sessions")
358
371
  }),
359
- /* @__PURE__ */ w("p", {
372
+ /* @__PURE__ */ T("p", {
360
373
  className: "mt-1 text-2xl font-semibold text-text-primary",
361
374
  children: "1,284"
362
375
  }),
363
- /* @__PURE__ */ w("p", {
376
+ /* @__PURE__ */ T("p", {
364
377
  className: "mt-1 text-xs text-status-success-text",
365
- children: "+12.4% this week"
378
+ children: r("themeSwitcher.previewTrend", "+12.4% this week")
366
379
  })
367
380
  ]
368
381
  }),
369
- /* @__PURE__ */ T("div", {
382
+ /* @__PURE__ */ E("div", {
370
383
  className: "flex flex-wrap items-center gap-2",
371
384
  children: [
372
- /* @__PURE__ */ w(o, { children: "Default" }),
373
- /* @__PURE__ */ w(o, {
385
+ /* @__PURE__ */ T(o, { children: r("themeSwitcher.default", "Default") }),
386
+ /* @__PURE__ */ T(o, {
374
387
  variant: "secondary",
375
- children: "Secondary"
388
+ children: r("notifications.actionStyle.secondary", "Secondary")
376
389
  }),
377
- /* @__PURE__ */ w(o, {
390
+ /* @__PURE__ */ T(o, {
378
391
  variant: "success",
379
- children: "Success"
392
+ children: r("common.success", "Success")
380
393
  }),
381
- /* @__PURE__ */ w(o, {
394
+ /* @__PURE__ */ T(o, {
382
395
  variant: "warning",
383
- children: "Warning"
396
+ children: r("themeSwitcher.warning", "Warning")
384
397
  }),
385
- /* @__PURE__ */ w(o, {
398
+ /* @__PURE__ */ T(o, {
386
399
  variant: "destructive",
387
- children: "Error"
400
+ children: r("common.errorPage.title", "Error")
388
401
  })
389
402
  ]
390
403
  }),
391
- /* @__PURE__ */ w("div", {
404
+ /* @__PURE__ */ T("div", {
392
405
  className: "flex flex-wrap items-center gap-4",
393
- children: E.map((e) => /* @__PURE__ */ T("span", {
406
+ children: D.map((e) => /* @__PURE__ */ E("span", {
394
407
  className: "flex items-center gap-1.5 text-xs text-text-secondary",
395
- children: [/* @__PURE__ */ w("span", {
408
+ children: [/* @__PURE__ */ T("span", {
396
409
  className: "size-3 rounded-full",
397
410
  style: { backgroundColor: `var(${e.varName})` },
398
411
  "aria-hidden": "true"
399
- }), e.name]
412
+ }), i.accents[e.name] ?? e.name]
400
413
  }, e.name))
401
414
  })
402
415
  ]
@@ -405,26 +418,26 @@ function j({ className: t, showCustomThemes: n = !0 }) {
405
418
  });
406
419
  }
407
420
  function M({ label: e, family: t, accent: n, active: r, onSelect: i }) {
408
- return /* @__PURE__ */ T("button", {
421
+ return /* @__PURE__ */ E("button", {
409
422
  type: "button",
410
423
  role: "radio",
411
424
  "aria-checked": r,
412
425
  onClick: i,
413
- className: _("group relative flex flex-col gap-2 rounded-card border p-2 text-left transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--color-focus-ring)]", r ? "border-border-focus bg-[var(--color-accent-soft)]" : "border-border-default bg-bg-surface hover:border-border-strong hover:bg-bg-sunken"),
414
- children: [/* @__PURE__ */ w("span", {
415
- className: _("relative flex h-12 w-full items-end overflow-hidden rounded-button border border-border-seam", A(t)),
426
+ className: g("group relative flex flex-col gap-2 rounded-card border p-2 text-left transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--color-focus-ring)]", r ? "border-border-focus bg-[var(--color-accent-soft)]" : "border-border-default bg-bg-surface hover:border-border-strong hover:bg-bg-sunken"),
427
+ children: [/* @__PURE__ */ T("span", {
428
+ className: g("relative flex h-12 w-full items-end overflow-hidden rounded-button border border-border-seam", A(t)),
416
429
  "aria-hidden": "true",
417
- children: /* @__PURE__ */ w("span", {
430
+ children: /* @__PURE__ */ T("span", {
418
431
  className: "m-1.5 size-3 rounded-full shadow-elevation-1",
419
432
  style: n ? { backgroundColor: n } : void 0,
420
- children: !n && /* @__PURE__ */ w("span", { className: "block size-3 rounded-full bg-action-primary-bg" })
433
+ children: !n && /* @__PURE__ */ T("span", { className: "block size-3 rounded-full bg-action-primary-bg" })
421
434
  })
422
- }), /* @__PURE__ */ T("span", {
435
+ }), /* @__PURE__ */ E("span", {
423
436
  className: "flex items-center justify-between gap-1",
424
- children: [/* @__PURE__ */ w("span", {
437
+ children: [/* @__PURE__ */ T("span", {
425
438
  className: "truncate text-xs font-medium text-text-primary",
426
439
  children: e
427
- }), r && /* @__PURE__ */ w(S, {
440
+ }), r && /* @__PURE__ */ T(x, {
428
441
  className: "size-3.5 shrink-0 text-action-primary-bg",
429
442
  "aria-hidden": "true"
430
443
  })]
@@ -432,168 +445,177 @@ function M({ label: e, family: t, accent: n, active: r, onSelect: i }) {
432
445
  });
433
446
  }
434
447
  function N({ title: e, description: t, value: n, options: r, onChange: i }) {
435
- return /* @__PURE__ */ T(s, { children: [/* @__PURE__ */ T(u, { children: [/* @__PURE__ */ w(d, { children: e }), /* @__PURE__ */ w(l, { children: t })] }), /* @__PURE__ */ w(c, { children: /* @__PURE__ */ w("div", {
448
+ return /* @__PURE__ */ E(s, { children: [/* @__PURE__ */ E(u, { children: [/* @__PURE__ */ T(d, { children: e }), /* @__PURE__ */ T(l, { children: t })] }), /* @__PURE__ */ T(c, { children: /* @__PURE__ */ T("div", {
436
449
  role: "radiogroup",
437
450
  "aria-label": e,
438
451
  className: "inline-flex w-full flex-col gap-1 rounded-button border border-border-default bg-bg-sunken p-1 sm:w-auto sm:flex-row",
439
452
  children: r.map((e) => {
440
453
  let t = n === e.value;
441
- return /* @__PURE__ */ w("button", {
454
+ return /* @__PURE__ */ T("button", {
442
455
  type: "button",
443
456
  role: "radio",
444
457
  "aria-checked": t,
445
458
  onClick: () => i(e.value),
446
- className: _("flex-1 rounded-button px-4 py-1.5 text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--color-focus-ring)]", t ? "bg-bg-surface text-text-primary shadow-elevation-1" : "text-text-secondary hover:text-text-primary"),
459
+ className: g("flex-1 rounded-button px-4 py-1.5 text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--color-focus-ring)]", t ? "bg-bg-surface text-text-primary shadow-elevation-1" : "text-text-secondary hover:text-text-primary"),
447
460
  children: e.label
448
461
  }, e.value);
449
462
  })
450
463
  }) })] });
451
464
  }
452
- function ie({ name: t, base: n, accent: r, density: i, typography: a, glass: o, reduceMotion: m, onName: h, onBase: v, onAccent: b, onDensity: x, onTypography: C, onGlass: ee, onReduceMotion: te, onSave: ne, onCancel: E }) {
453
- let A = y(), j = y(), M = y();
454
- return /* @__PURE__ */ T(s, { children: [/* @__PURE__ */ T(u, {
465
+ function P({ name: t, base: n, accent: r, density: i, typography: a, glass: o, reduceMotion: p, onName: m, onBase: _, onAccent: y, onDensity: b, onTypography: S, onGlass: re, onReduceMotion: C, onSave: ie, onCancel: D }) {
466
+ let A = te(), j = ne(), M = v(), N = v(), P = v();
467
+ return /* @__PURE__ */ E(s, { children: [/* @__PURE__ */ E(u, {
455
468
  className: "flex-row items-start justify-between gap-4 space-y-0",
456
- children: [/* @__PURE__ */ T("div", {
469
+ children: [/* @__PURE__ */ E("div", {
457
470
  className: "flex flex-col gap-1.5",
458
- children: [/* @__PURE__ */ w(d, { children: "Custom theme" }), /* @__PURE__ */ w(l, { children: "Design a reusable theme and save it to your library." })]
459
- }), /* @__PURE__ */ w(e, {
471
+ children: [/* @__PURE__ */ T(d, { children: A("themeSwitcher.customTheme", "Custom theme") }), /* @__PURE__ */ T(l, { children: A("themeSwitcher.editorHelp", "Design a reusable theme and save it to your library.") })]
472
+ }), /* @__PURE__ */ T(e, {
460
473
  type: "button",
461
474
  variant: "ghost",
462
475
  size: "icon-sm",
463
- "aria-label": "Close editor",
464
- onClick: E,
465
- children: /* @__PURE__ */ w(re, {
476
+ "aria-label": A("themeSwitcher.closeEditor", "Close editor"),
477
+ onClick: D,
478
+ children: /* @__PURE__ */ T(w, {
466
479
  className: "size-4",
467
480
  "aria-hidden": "true"
468
481
  })
469
482
  })]
470
- }), /* @__PURE__ */ T(c, {
483
+ }), /* @__PURE__ */ E(c, {
471
484
  className: "flex flex-col gap-4",
472
485
  children: [
473
- /* @__PURE__ */ T("div", {
486
+ /* @__PURE__ */ E("div", {
474
487
  className: "flex flex-col gap-1.5",
475
- children: [/* @__PURE__ */ w(p, {
476
- htmlFor: A,
477
- children: "Name"
478
- }), /* @__PURE__ */ w(f, {
479
- id: A,
488
+ children: [/* @__PURE__ */ T(f, {
489
+ htmlFor: M,
490
+ children: A("common.name", "Name")
491
+ }), /* @__PURE__ */ T(ee, {
492
+ id: M,
480
493
  value: t,
481
- onChange: (e) => h(e.target.value),
482
- placeholder: "My theme"
494
+ onChange: (e) => m(e.target.value),
495
+ placeholder: A("themeSwitcher.myTheme", "My theme")
483
496
  })]
484
497
  }),
485
- /* @__PURE__ */ T("div", {
498
+ /* @__PURE__ */ E("div", {
486
499
  className: "flex flex-col gap-1.5",
487
- children: [/* @__PURE__ */ w("span", {
500
+ children: [/* @__PURE__ */ T("span", {
488
501
  className: "text-sm font-medium text-text-primary",
489
- id: `${A}-base`,
490
- children: "Base"
491
- }), /* @__PURE__ */ w("div", {
502
+ id: `${M}-base`,
503
+ children: A("themeSwitcher.base", "Base")
504
+ }), /* @__PURE__ */ T("div", {
492
505
  role: "radiogroup",
493
- "aria-labelledby": `${A}-base`,
506
+ "aria-labelledby": `${M}-base`,
494
507
  className: "inline-flex w-full gap-1 rounded-button border border-border-default bg-bg-sunken p-1 sm:w-auto",
495
508
  children: ["light", "dark"].map((e) => {
496
509
  let t = n === e;
497
- return /* @__PURE__ */ w("button", {
510
+ return /* @__PURE__ */ T("button", {
498
511
  type: "button",
499
512
  role: "radio",
500
513
  "aria-checked": t,
501
- onClick: () => v(e),
502
- className: _("flex-1 rounded-button px-4 py-1.5 text-sm font-medium capitalize transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--color-focus-ring)]", t ? "bg-bg-surface text-text-primary shadow-elevation-1" : "text-text-secondary hover:text-text-primary"),
503
- children: e
514
+ onClick: () => _(e),
515
+ className: g("flex-1 rounded-button px-4 py-1.5 text-sm font-medium capitalize transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--color-focus-ring)]", t ? "bg-bg-surface text-text-primary shadow-elevation-1" : "text-text-secondary hover:text-text-primary"),
516
+ children: e === "light" ? A("themeSwitcher.lightBase", "light") : A("themeSwitcher.darkBase", "dark")
504
517
  }, e);
505
518
  })
506
519
  })]
507
520
  }),
508
- /* @__PURE__ */ T("div", {
521
+ /* @__PURE__ */ E("div", {
509
522
  className: "flex flex-col gap-1.5",
510
- children: [/* @__PURE__ */ w(p, {
511
- htmlFor: j,
512
- children: "Accent"
513
- }), /* @__PURE__ */ T("div", {
523
+ children: [/* @__PURE__ */ T(f, {
524
+ htmlFor: N,
525
+ children: A("themeSwitcher.accent", "Accent")
526
+ }), /* @__PURE__ */ E("div", {
514
527
  className: "flex items-center gap-3",
515
- children: [/* @__PURE__ */ w("input", {
516
- id: j,
528
+ children: [/* @__PURE__ */ T("input", {
529
+ id: N,
517
530
  type: "color",
518
531
  value: r,
519
- onChange: (e) => b(e.target.value),
520
- "aria-label": "Accent color",
532
+ onChange: (e) => y(e.target.value),
533
+ "aria-label": A("themeSwitcher.accentColor", "Accent color"),
521
534
  className: "size-10 cursor-pointer rounded-input border border-border-default bg-bg-surface p-1 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--color-focus-ring)]"
522
- }), /* @__PURE__ */ w("span", {
535
+ }), /* @__PURE__ */ T("span", {
523
536
  className: "font-mono text-sm uppercase text-text-secondary",
524
537
  children: r
525
538
  })]
526
539
  })]
527
540
  }),
528
- /* @__PURE__ */ T("div", {
541
+ /* @__PURE__ */ E("div", {
529
542
  className: "grid grid-cols-1 gap-4 sm:grid-cols-3",
530
543
  children: [
531
- /* @__PURE__ */ w(P, {
532
- label: "Density",
544
+ /* @__PURE__ */ T(F, {
545
+ label: A("themeSwitcher.density", "Density"),
533
546
  value: i,
534
- options: D,
535
- onChange: (e) => x(e)
547
+ options: O.map((e) => ({
548
+ ...e,
549
+ label: j.density[e.value]
550
+ })),
551
+ onChange: (e) => b(e)
536
552
  }),
537
- /* @__PURE__ */ w(P, {
538
- label: "Typography",
553
+ /* @__PURE__ */ T(F, {
554
+ label: A("themeSwitcher.typography", "Typography"),
539
555
  value: a,
540
- options: O,
541
- onChange: (e) => C(e)
556
+ options: k.map((e) => ({
557
+ ...e,
558
+ label: j.typography[e.value]
559
+ })),
560
+ onChange: (e) => S(e)
542
561
  }),
543
- /* @__PURE__ */ w(P, {
544
- label: "Glass",
562
+ /* @__PURE__ */ T(F, {
563
+ label: A("themeSwitcher.glass", "Glass"),
545
564
  value: o,
546
- options: k,
547
- onChange: (e) => ee(e)
565
+ options: ae.map((e) => ({
566
+ ...e,
567
+ label: j.glass[e.value]
568
+ })),
569
+ onChange: (e) => re(e)
548
570
  })
549
571
  ]
550
572
  }),
551
- /* @__PURE__ */ T("div", {
573
+ /* @__PURE__ */ E("div", {
552
574
  className: "flex items-center justify-between gap-4",
553
- children: [/* @__PURE__ */ w(p, {
554
- htmlFor: M,
575
+ children: [/* @__PURE__ */ T(f, {
576
+ htmlFor: P,
555
577
  className: "text-sm font-medium text-text-primary",
556
- children: "Reduce motion"
557
- }), /* @__PURE__ */ w(g, {
558
- id: M,
559
- checked: m,
560
- onCheckedChange: te,
561
- "aria-label": "Reduce motion"
578
+ children: A("themeSwitcher.reduceMotion", "Reduce motion")
579
+ }), /* @__PURE__ */ T(h, {
580
+ id: P,
581
+ checked: p,
582
+ onCheckedChange: C,
583
+ "aria-label": A("themeSwitcher.reduceMotion", "Reduce motion")
562
584
  })]
563
585
  }),
564
- /* @__PURE__ */ T("div", {
586
+ /* @__PURE__ */ E("div", {
565
587
  className: "flex items-center justify-end gap-2 pt-2",
566
- children: [/* @__PURE__ */ w(e, {
588
+ children: [/* @__PURE__ */ T(e, {
567
589
  type: "button",
568
590
  variant: "ghost",
569
- onClick: E,
570
- children: "Cancel"
571
- }), /* @__PURE__ */ T(e, {
591
+ onClick: D,
592
+ children: A("common.actions.cancel", "Cancel")
593
+ }), /* @__PURE__ */ E(e, {
572
594
  type: "button",
573
- onClick: ne,
574
- children: [/* @__PURE__ */ w(S, {
595
+ onClick: ie,
596
+ children: [/* @__PURE__ */ T(x, {
575
597
  className: "size-4",
576
598
  "aria-hidden": "true"
577
- }), "Save"]
599
+ }), A("common.save", "Save")]
578
600
  })]
579
601
  })
580
602
  ]
581
603
  })] });
582
604
  }
583
- function P({ label: e, value: o, options: s, onChange: c }) {
584
- let l = y();
585
- return /* @__PURE__ */ T("div", {
605
+ function F({ label: e, value: o, options: s, onChange: c }) {
606
+ let l = v();
607
+ return /* @__PURE__ */ E("div", {
586
608
  className: "flex flex-col gap-1.5",
587
- children: [/* @__PURE__ */ w(p, {
609
+ children: [/* @__PURE__ */ T(f, {
588
610
  htmlFor: l,
589
611
  children: e
590
- }), /* @__PURE__ */ T(t, {
612
+ }), /* @__PURE__ */ E(t, {
591
613
  value: o,
592
614
  onValueChange: c,
593
- children: [/* @__PURE__ */ w(i, {
615
+ children: [/* @__PURE__ */ T(i, {
594
616
  id: l,
595
- children: /* @__PURE__ */ w(a, {})
596
- }), /* @__PURE__ */ w(n, { children: s.map((e) => /* @__PURE__ */ w(r, {
617
+ children: /* @__PURE__ */ T(a, {})
618
+ }), /* @__PURE__ */ T(n, { children: s.map((e) => /* @__PURE__ */ T(r, {
597
619
  value: e.value,
598
620
  children: e.label
599
621
  }, e.value)) })]