@burdenoff/fe-libs 2026.1018.1 → 2026.1019.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 (57) 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/ui/AssistantMarkdownRenderer.d.ts +6 -6
  44. package/dist/shared/assistant/ui/AssistantMarkdownRenderer.js +86 -85
  45. package/dist/shared/assistant/ui/AssistantMessageItem.js +101 -96
  46. package/dist/shared/assistant/ui/WorkflowAssistantPanel.js +152 -140
  47. package/dist/shared/events/sinks/RybbitSink.js +2 -2
  48. package/dist/shared/providers/shell/interpolateShellLabel.d.ts +3 -0
  49. package/dist/shared/providers/shell/interpolateShellLabel.js +11 -0
  50. package/dist/shared/providers/shell/useAssistantShellLabels.d.ts +45 -0
  51. package/dist/shared/providers/shell/useAssistantShellLabels.js +54 -0
  52. package/dist/shared/tours/TourPlayer.js +33 -32
  53. package/dist/shared/tours/TourTooltip.js +108 -109
  54. package/dist/shared/tours/tourTrigger/MobileTourSheet.js +98 -85
  55. package/dist/shared/tours/tourTrigger/TourListItemDesktop.js +20 -18
  56. package/dist/shared/tours/tourTrigger/TourListItemMobile.js +23 -25
  57. package/package.json +2 -2
@@ -1,95 +1,108 @@
1
- import { TourLoadError as e } from "./TourLoadError.js";
2
- import { TourListItemMobile as t } from "./TourListItemMobile.js";
3
- import { forwardRef as n } from "react";
4
- import { ExternalLink as r, HelpCircle as i, Sparkles as a, X as o } from "lucide-react";
5
- import { Fragment as s, jsx as c, jsxs as l } from "react/jsx-runtime";
6
- import { createPortal as u } from "react-dom";
1
+ import { useShellLabel as e } from "../../providers/shell/useShellLabel.js";
2
+ import { TourLoadError as t } from "./TourLoadError.js";
3
+ import { TourListItemMobile as n } from "./TourListItemMobile.js";
4
+ import { forwardRef as r } from "react";
5
+ import { ExternalLink as i, HelpCircle as a, Sparkles as o, X as s } from "lucide-react";
6
+ import { Fragment as c, jsx as l, jsxs as u } from "react/jsx-runtime";
7
+ import { createPortal as d } from "react-dom";
7
8
  //#region src/shared/tours/tourTrigger/MobileTourSheet.tsx
8
- var d = n(function({ loading: n, error: d, onRetry: f, tours: p, onClose: m, onStartTour: h, actions: g, onAction: _ }, v) {
9
- let y = !!(g && g.length > 0);
10
- return u(/* @__PURE__ */ l(s, { children: [/* @__PURE__ */ c("div", {
9
+ var f = r(function({ loading: e, error: t, onRetry: n, tours: r, onClose: i, onStartTour: a, actions: o, onAction: s }, f) {
10
+ return d(/* @__PURE__ */ u(c, { children: [/* @__PURE__ */ l("div", {
11
11
  className: "fixed inset-0 bg-black/50 z-[100] animate-in fade-in duration-200",
12
- onClick: m
12
+ onClick: i
13
13
  }), /* @__PURE__ */ l("div", {
14
- ref: v,
14
+ ref: f,
15
15
  className: "fixed inset-x-0 bottom-0 z-[101] bg-bg-surface rounded-t-2xl shadow-xl animate-in slide-in-from-bottom duration-300 max-h-[80vh] flex flex-col",
16
- children: [
17
- /* @__PURE__ */ c("div", {
18
- className: "flex justify-center pt-3 pb-2",
19
- children: /* @__PURE__ */ c("div", { className: "w-10 h-1 bg-border-default rounded-full" })
20
- }),
21
- /* @__PURE__ */ l("div", {
22
- className: "flex items-center justify-between px-4 pb-3 border-b border-border-subtle",
23
- children: [/* @__PURE__ */ l("div", {
24
- className: "flex items-center gap-2",
25
- children: [/* @__PURE__ */ c(a, { className: "size-5 text-action-primary-bg" }), /* @__PURE__ */ c("h2", {
26
- className: "text-lg font-semibold text-text-primary",
27
- children: "Help & tours"
28
- })]
29
- }), /* @__PURE__ */ c("button", {
30
- type: "button",
31
- onClick: m,
32
- className: "p-2 hover:bg-action-ghost-bg-hover rounded-full",
33
- "aria-label": "Close",
34
- children: /* @__PURE__ */ c(o, { className: "size-5" })
16
+ children: /* @__PURE__ */ l(p, {
17
+ loading: e,
18
+ error: t,
19
+ onRetry: n,
20
+ tours: r,
21
+ onClose: i,
22
+ onStartTour: a,
23
+ actions: o,
24
+ onAction: s
25
+ })
26
+ })] }), document.body);
27
+ });
28
+ function p({ loading: r, error: d, onRetry: f, tours: p, onClose: m, onStartTour: h, actions: g, onAction: _ }) {
29
+ let v = e(), y = !!(g && g.length > 0);
30
+ return /* @__PURE__ */ u(c, { children: [
31
+ /* @__PURE__ */ l("div", {
32
+ className: "flex justify-center pt-3 pb-2",
33
+ children: /* @__PURE__ */ l("div", { className: "w-10 h-1 bg-border-default rounded-full" })
34
+ }),
35
+ /* @__PURE__ */ u("div", {
36
+ className: "flex items-center justify-between px-4 pb-3 border-b border-border-subtle",
37
+ children: [/* @__PURE__ */ u("div", {
38
+ className: "flex items-center gap-2",
39
+ children: [/* @__PURE__ */ l(o, { className: "size-5 text-action-primary-bg" }), /* @__PURE__ */ l("h2", {
40
+ className: "text-lg font-semibold text-text-primary",
41
+ children: v("tours.helpTours", "Help & tours")
35
42
  })]
36
- }),
37
- /* @__PURE__ */ l("div", {
38
- className: "flex-1 overflow-y-auto p-4",
39
- children: [n ? /* @__PURE__ */ c("div", {
40
- className: "flex items-center justify-center py-8",
41
- children: /* @__PURE__ */ c("div", { className: "animate-spin rounded-full size-6 border-2 border-action-primary-bg border-t-transparent" })
42
- }) : d ? /* @__PURE__ */ c(e, { onRetry: f }) : p.length > 0 ? /* @__PURE__ */ l("div", {
43
- className: "space-y-3",
44
- children: [/* @__PURE__ */ c("p", {
45
- className: "text-sm text-text-secondary mb-4",
46
- children: "Take a guided tour. Current-page tours are shown first."
47
- }), p.map((e) => /* @__PURE__ */ c(t, {
48
- tour: e,
49
- onStart: h
50
- }, e.id))]
51
- }) : /* @__PURE__ */ l("div", {
52
- className: "text-center py-6",
53
- children: [/* @__PURE__ */ c(i, { className: "size-10 mx-auto text-text-tertiary mb-2" }), /* @__PURE__ */ c("p", {
54
- className: "text-text-secondary",
55
- children: "No guided tours for this page yet"
56
- })]
57
- }), y && /* @__PURE__ */ c("div", {
58
- className: "mt-4 border-t border-border-subtle pt-3 space-y-1",
59
- children: g.map((e) => e.href ? /* @__PURE__ */ l("a", {
60
- href: e.href,
61
- target: "_blank",
62
- rel: "noreferrer",
63
- onClick: () => _?.(e),
64
- className: "flex items-center gap-3 rounded-button px-3 py-3 text-sm text-text-secondary hover:bg-bg-sunken hover:text-text-primary transition-colors",
65
- children: [
66
- e.icon && /* @__PURE__ */ c("span", {
67
- className: "flex size-5 items-center justify-center text-text-muted",
68
- children: e.icon
69
- }),
70
- /* @__PURE__ */ c("span", {
71
- className: "flex-1 truncate",
72
- children: e.label
73
- }),
74
- /* @__PURE__ */ c(r, { className: "size-4 text-text-muted" })
75
- ]
76
- }, e.id) : /* @__PURE__ */ l("button", {
77
- type: "button",
78
- onClick: () => _?.(e),
79
- className: "flex w-full items-center gap-3 rounded-button px-3 py-3 text-left text-sm text-text-secondary hover:bg-bg-sunken hover:text-text-primary transition-colors",
80
- children: [e.icon && /* @__PURE__ */ c("span", {
43
+ }), /* @__PURE__ */ l("button", {
44
+ type: "button",
45
+ onClick: m,
46
+ className: "p-2 hover:bg-action-ghost-bg-hover rounded-full",
47
+ "aria-label": v("common.close", "Close"),
48
+ children: /* @__PURE__ */ l(s, { className: "size-5" })
49
+ })]
50
+ }),
51
+ /* @__PURE__ */ u("div", {
52
+ className: "flex-1 overflow-y-auto p-4",
53
+ children: [r ? /* @__PURE__ */ l("div", {
54
+ className: "flex items-center justify-center py-8",
55
+ children: /* @__PURE__ */ l("div", { className: "animate-spin rounded-full size-6 border-2 border-action-primary-bg border-t-transparent" })
56
+ }) : d ? /* @__PURE__ */ l(t, { onRetry: f }) : p.length > 0 ? /* @__PURE__ */ u("div", {
57
+ className: "space-y-3",
58
+ children: [/* @__PURE__ */ l("p", {
59
+ className: "text-sm text-text-secondary mb-4",
60
+ children: v("tours.orderHint", "Take a guided tour. Current-page tours are shown first.")
61
+ }), p.map((e) => /* @__PURE__ */ l(n, {
62
+ tour: e,
63
+ onStart: h
64
+ }, e.id))]
65
+ }) : /* @__PURE__ */ u("div", {
66
+ className: "text-center py-6",
67
+ children: [/* @__PURE__ */ l(a, { className: "size-10 mx-auto text-text-tertiary mb-2" }), /* @__PURE__ */ l("p", {
68
+ className: "text-text-secondary",
69
+ children: v("tours.noGuidedToursForThisPageYet", "No guided tours for this page yet")
70
+ })]
71
+ }), y && /* @__PURE__ */ l("div", {
72
+ className: "mt-4 border-t border-border-subtle pt-3 space-y-1",
73
+ children: g.map((e) => e.href ? /* @__PURE__ */ u("a", {
74
+ href: e.href,
75
+ target: "_blank",
76
+ rel: "noreferrer",
77
+ onClick: () => _?.(e),
78
+ className: "flex items-center gap-3 rounded-button px-3 py-3 text-sm text-text-secondary hover:bg-bg-sunken hover:text-text-primary transition-colors",
79
+ children: [
80
+ e.icon && /* @__PURE__ */ l("span", {
81
81
  className: "flex size-5 items-center justify-center text-text-muted",
82
82
  children: e.icon
83
- }), /* @__PURE__ */ c("span", {
83
+ }),
84
+ /* @__PURE__ */ l("span", {
84
85
  className: "flex-1 truncate",
85
86
  children: e.label
86
- })]
87
- }, e.id))
88
- })]
89
- }),
90
- /* @__PURE__ */ c("div", { className: "h-safe-area-inset-bottom" })
91
- ]
92
- })] }), document.body);
93
- });
87
+ }),
88
+ /* @__PURE__ */ l(i, { className: "size-4 text-text-muted" })
89
+ ]
90
+ }, e.id) : /* @__PURE__ */ u("button", {
91
+ type: "button",
92
+ onClick: () => _?.(e),
93
+ className: "flex w-full items-center gap-3 rounded-button px-3 py-3 text-left text-sm text-text-secondary hover:bg-bg-sunken hover:text-text-primary transition-colors",
94
+ children: [e.icon && /* @__PURE__ */ l("span", {
95
+ className: "flex size-5 items-center justify-center text-text-muted",
96
+ children: e.icon
97
+ }), /* @__PURE__ */ l("span", {
98
+ className: "flex-1 truncate",
99
+ children: e.label
100
+ })]
101
+ }, e.id))
102
+ })]
103
+ }),
104
+ /* @__PURE__ */ l("div", { className: "h-safe-area-inset-bottom" })
105
+ ] });
106
+ }
94
107
  //#endregion
95
- export { d as MobileTourSheet };
108
+ export { f as MobileTourSheet };
@@ -1,36 +1,38 @@
1
- import { TourStatusChip as e } from "./TourStatusChip.js";
2
- import { ChevronRight as t } from "lucide-react";
3
- import { jsx as n, jsxs as r } from "react/jsx-runtime";
1
+ import { useShellLabel as e } from "../../providers/shell/useShellLabel.js";
2
+ import { TourStatusChip as t } from "./TourStatusChip.js";
3
+ import { ChevronRight as n } from "lucide-react";
4
+ import { jsx as r, jsxs as i } from "react/jsx-runtime";
4
5
  //#region src/shared/tours/tourTrigger/TourListItemDesktop.tsx
5
- function i({ tour: i, onStart: a }) {
6
- return /* @__PURE__ */ n("button", {
6
+ function a({ tour: a, onStart: o }) {
7
+ let s = e();
8
+ return /* @__PURE__ */ r("button", {
7
9
  type: "button",
8
- onClick: () => a(i),
10
+ onClick: () => o(a),
9
11
  className: "w-full p-3 hover:bg-action-ghost-bg-hover rounded-md transition-colors text-left group",
10
- children: /* @__PURE__ */ r("div", {
12
+ children: /* @__PURE__ */ i("div", {
11
13
  className: "flex items-center justify-between",
12
- children: [/* @__PURE__ */ r("div", {
14
+ children: [/* @__PURE__ */ i("div", {
13
15
  className: "flex-1 min-w-0",
14
16
  children: [
15
- /* @__PURE__ */ r("div", {
17
+ /* @__PURE__ */ i("div", {
16
18
  className: "flex items-center gap-2 min-w-0",
17
- children: [/* @__PURE__ */ n("h4", {
19
+ children: [/* @__PURE__ */ r("h4", {
18
20
  className: "min-w-0 flex-1 font-medium text-text-primary text-sm truncate",
19
- children: i.name
20
- }), /* @__PURE__ */ n(e, { status: i.myProgress?.status })]
21
+ children: a.name
22
+ }), /* @__PURE__ */ r(t, { status: a.myProgress?.status })]
21
23
  }),
22
- i.description && /* @__PURE__ */ n("p", {
24
+ a.description && /* @__PURE__ */ r("p", {
23
25
  className: "text-xs text-text-secondary mt-0.5 line-clamp-1",
24
- children: i.description
26
+ children: a.description
25
27
  }),
26
- /* @__PURE__ */ n("div", {
28
+ /* @__PURE__ */ r("div", {
27
29
  className: "flex items-center gap-2 mt-1 text-xs text-text-tertiary",
28
- children: /* @__PURE__ */ r("span", { children: [i.steps?.length || 0, " steps"] })
30
+ children: /* @__PURE__ */ r("span", { children: s("tours.stepCount", "{{count}} steps", { count: a.steps?.length || 0 }) })
29
31
  })
30
32
  ]
31
- }), /* @__PURE__ */ n(t, { className: "size-4 text-text-tertiary group-hover:text-action-primary-bg group-hover:translate-x-0.5 transition-all" })]
33
+ }), /* @__PURE__ */ r(n, { className: "size-4 text-text-tertiary group-hover:text-action-primary-bg group-hover:translate-x-0.5 transition-all" })]
32
34
  })
33
35
  });
34
36
  }
35
37
  //#endregion
36
- export { i as TourListItemDesktop };
38
+ export { a as TourListItemDesktop };
@@ -1,47 +1,45 @@
1
- import { TourStatusChip as e } from "./TourStatusChip.js";
2
- import { Play as t } from "lucide-react";
3
- import { jsx as n, jsxs as r } from "react/jsx-runtime";
1
+ import { useShellLabel as e } from "../../providers/shell/useShellLabel.js";
2
+ import { TourStatusChip as t } from "./TourStatusChip.js";
3
+ import { Play as n } from "lucide-react";
4
+ import { jsx as r, jsxs as i } from "react/jsx-runtime";
4
5
  //#region src/shared/tours/tourTrigger/TourListItemMobile.tsx
5
- function i({ tour: i, onStart: a }) {
6
- return /* @__PURE__ */ n("button", {
6
+ function a({ tour: a, onStart: o }) {
7
+ let s = e();
8
+ return /* @__PURE__ */ r("button", {
7
9
  type: "button",
8
- onClick: () => a(i),
10
+ onClick: () => o(a),
9
11
  className: "w-full p-4 bg-bg-muted hover:bg-action-ghost-bg-hover rounded-xl transition-colors text-left group",
10
- children: /* @__PURE__ */ r("div", {
12
+ children: /* @__PURE__ */ i("div", {
11
13
  className: "flex items-center justify-between",
12
- children: [/* @__PURE__ */ r("div", {
14
+ children: [/* @__PURE__ */ i("div", {
13
15
  className: "flex-1 min-w-0",
14
16
  children: [
15
- /* @__PURE__ */ r("div", {
17
+ /* @__PURE__ */ i("div", {
16
18
  className: "flex items-center gap-2 min-w-0",
17
- children: [/* @__PURE__ */ n("h3", {
19
+ children: [/* @__PURE__ */ r("h3", {
18
20
  className: "min-w-0 flex-1 font-medium text-text-primary truncate",
19
- children: i.name
20
- }), /* @__PURE__ */ n(e, { status: i.myProgress?.status })]
21
+ children: a.name
22
+ }), /* @__PURE__ */ r(t, { status: a.myProgress?.status })]
21
23
  }),
22
- i.description && /* @__PURE__ */ n("p", {
24
+ a.description && /* @__PURE__ */ r("p", {
23
25
  className: "text-sm text-text-secondary mt-1 line-clamp-2",
24
- children: i.description
26
+ children: a.description
25
27
  }),
26
- /* @__PURE__ */ r("div", {
28
+ /* @__PURE__ */ i("div", {
27
29
  className: "flex items-center gap-3 mt-2 text-xs text-text-tertiary",
28
30
  children: [
29
- /* @__PURE__ */ r("span", { children: [i.steps?.length || 0, " steps"] }),
30
- /* @__PURE__ */ n("span", { children: "•" }),
31
- /* @__PURE__ */ r("span", { children: [
32
- "~",
33
- Math.ceil((i.steps?.length || 0) * .5),
34
- " min"
35
- ] })
31
+ /* @__PURE__ */ r("span", { children: s("tours.stepCount", "{{count}} steps", { count: a.steps?.length || 0 }) }),
32
+ /* @__PURE__ */ r("span", { children: "•" }),
33
+ /* @__PURE__ */ r("span", { children: s("tours.durationMinutes", "~{{count}} min", { count: Math.ceil((a.steps?.length || 0) * .5) }) })
36
34
  ]
37
35
  })
38
36
  ]
39
- }), /* @__PURE__ */ n("div", {
37
+ }), /* @__PURE__ */ r("div", {
40
38
  className: "ml-3 p-2 bg-action-primary-bg rounded-full text-action-primary-text group-hover:scale-110 transition-transform",
41
- children: /* @__PURE__ */ n(t, { className: "size-4" })
39
+ children: /* @__PURE__ */ r(n, { className: "size-4" })
42
40
  })]
43
41
  })
44
42
  });
45
43
  }
46
44
  //#endregion
47
- export { i as TourListItemMobile };
45
+ export { a as TourListItemMobile };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@burdenoff/fe-libs",
3
- "version": "2026.1018.1",
3
+ "version": "2026.1019.1",
4
4
  "description": "Burdenoff frontend primitives and domain libraries",
5
5
  "type": "module",
6
6
  "bin": {
@@ -304,7 +304,7 @@
304
304
  "dev": "vite",
305
305
  "build": "tsc && MFE_DTS=1 bash scripts/build-limits.sh --gate vite build && node scripts/validate-livekit-optional.mjs",
306
306
  "lint": "eslint .",
307
- "lint:sanity": "if [ \"${CI:-}\" = \"true\" ]; then bun run lint; else bun run lint -- --cache --cache-location .eslintcache; fi",
307
+ "lint:sanity": "bun scripts/check-shell-labels.ts && (if [ \"${CI:-}\" = \"true\" ]; then bun run lint; else bun run lint -- --cache --cache-location .eslintcache; fi)",
308
308
  "format": "prettier --config shared/config/prettier.config.mjs --write \"src/**/*.{ts,tsx}\" \"!src/config/*.config.ts\"",
309
309
  "type:check": "bash scripts/build-limits.sh tsc --noEmit",
310
310
  "test:package-css-exports": "node scripts/validate-package-css-exports.mjs",