@burdenoff/fe-libs 2026.1007.4 → 2026.1007.5

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 (83) hide show
  1. package/dist/chrome/AutoBreadcrumbs.d.ts.map +1 -1
  2. package/dist/chrome/AutoBreadcrumbs.js +65 -76
  3. package/dist/chrome/Breadcrumb.d.ts.map +1 -1
  4. package/dist/chrome/Breadcrumbs.d.ts.map +1 -1
  5. package/dist/chrome/Breadcrumbs.js +47 -46
  6. package/dist/chrome/ContextSwitcher.js +86 -86
  7. package/dist/chrome/HeaderBar.d.ts.map +1 -1
  8. package/dist/chrome/HeaderBar.js +111 -107
  9. package/dist/chrome/HeaderThemeSwitcher.d.ts.map +1 -1
  10. package/dist/chrome/HeaderThemeSwitcher.js +46 -45
  11. package/dist/chrome/LanguageSwitcher.js +4 -4
  12. package/dist/chrome/MobileTabBar.js +4 -4
  13. package/dist/chrome/PageHeader.d.ts.map +1 -1
  14. package/dist/chrome/PageHeader.js +32 -30
  15. package/dist/chrome/PersonaSurfaceControls.js +8 -8
  16. package/dist/chrome/ProductSideNav.js +6 -6
  17. package/dist/chrome/ProfileSwitcher.d.ts.map +1 -1
  18. package/dist/chrome/ProfileSwitcher.js +89 -88
  19. package/dist/chrome/SideNavigation.js +4 -4
  20. package/dist/chrome/Tabs.d.ts.map +1 -1
  21. package/dist/chrome/Tabs.js +30 -29
  22. package/dist/chrome/breadcrumbLabel.d.ts +10 -0
  23. package/dist/chrome/breadcrumbLabel.d.ts.map +1 -0
  24. package/dist/chrome/breadcrumbLabel.js +31 -0
  25. package/dist/chrome/contextSwitcher/TriggerButton.d.ts.map +1 -1
  26. package/dist/chrome/contextSwitcher/TriggerButton.js +40 -36
  27. package/dist/chrome/notificationCenter/BellButton.d.ts.map +1 -1
  28. package/dist/chrome/notificationCenter/BellButton.js +29 -25
  29. package/dist/chrome/shellLabelManifest.d.ts +27 -0
  30. package/dist/chrome/shellLabelManifest.d.ts.map +1 -0
  31. package/dist/chrome/sideNavigation/SidebarHeader.d.ts.map +1 -1
  32. package/dist/chrome/sideNavigation/SidebarHeader.js +23 -22
  33. package/dist/shared/assistant/appControls/languageReply.d.ts +6 -1
  34. package/dist/shared/assistant/appControls/languageReply.d.ts.map +1 -1
  35. package/dist/shared/assistant/i18nManifest.d.ts +17 -5
  36. package/dist/shared/assistant/i18nManifest.d.ts.map +1 -1
  37. package/dist/shared/assistant/i18nManifest.js +27 -22
  38. package/dist/shared/assistant/index.d.ts +1 -0
  39. package/dist/shared/assistant/index.d.ts.map +1 -1
  40. package/dist/shared/assistant/productCopy.d.ts +78 -0
  41. package/dist/shared/assistant/productCopy.d.ts.map +1 -0
  42. package/dist/shared/assistant/productCopy.js +45 -0
  43. package/dist/shared/assistant/ui/AssistantChatArea.d.ts.map +1 -1
  44. package/dist/shared/assistant/ui/AssistantChatArea.js +2 -2
  45. package/dist/shared/assistant/ui/AssistantEmptyState.d.ts.map +1 -1
  46. package/dist/shared/assistant/ui/AssistantEmptyState.js +30 -22
  47. package/dist/shared/assistant/ui/AssistantHeader.d.ts.map +1 -1
  48. package/dist/shared/assistant/ui/AssistantHeader.js +46 -45
  49. package/dist/shared/components/ContextConversationWidget.js +1 -1
  50. package/dist/shared/events/sinks/RybbitSink.d.ts.map +1 -1
  51. package/dist/shared/events/sinks/RybbitSink.js +66 -69
  52. package/dist/shared/providers/AppShellProvider.d.ts +17 -0
  53. package/dist/shared/providers/AppShellProvider.d.ts.map +1 -1
  54. package/dist/shared/providers/AppShellProvider.js +188 -180
  55. package/dist/shared/providers/shell/I18nProvider.d.ts +92 -4
  56. package/dist/shared/providers/shell/I18nProvider.d.ts.map +1 -1
  57. package/dist/shared/providers/shell/I18nProvider.js +187 -79
  58. package/dist/shared/providers/shell/ProfileI18nBridge.d.ts +18 -2
  59. package/dist/shared/providers/shell/ProfileI18nBridge.d.ts.map +1 -1
  60. package/dist/shared/providers/shell/ProfileI18nBridge.js +55 -41
  61. package/dist/shared/providers/shell/directionMode.d.ts +25 -0
  62. package/dist/shared/providers/shell/directionMode.d.ts.map +1 -0
  63. package/dist/shared/providers/shell/directionMode.js +34 -0
  64. package/dist/shared/providers/shell/index.d.ts +4 -2
  65. package/dist/shared/providers/shell/index.d.ts.map +1 -1
  66. package/dist/shared/providers/shell/translationLayers.d.ts +30 -0
  67. package/dist/shared/providers/shell/translationLayers.d.ts.map +1 -0
  68. package/dist/shared/providers/shell/translationLayers.js +35 -0
  69. package/dist/shared/providers/shell/translationStore.d.ts +55 -0
  70. package/dist/shared/providers/shell/translationStore.d.ts.map +1 -0
  71. package/dist/shared/providers/shell/translationStore.js +100 -0
  72. package/dist/shared/providers/shell/useShellLabel.d.ts +13 -1
  73. package/dist/shared/providers/shell/useShellLabel.d.ts.map +1 -1
  74. package/dist/shared/providers/shell/useShellLabel.js +10 -9
  75. package/dist/shared-assistant.js +163 -162
  76. package/dist/shared-providers-shell.js +20 -19
  77. package/dist/ui/boff-ui2.d.ts.map +1 -1
  78. package/dist/ui/cta-overflow-menu.d.ts.map +1 -1
  79. package/dist/ui/cta-overflow-menu.js +20 -18
  80. package/dist/ui/guidance.d.ts +1 -1
  81. package/dist/ui/guidance.d.ts.map +1 -1
  82. package/dist/ui/guidance.js +53 -52
  83. package/package.json +3 -2
@@ -1,27 +1,31 @@
1
- import { jsx as e, jsxs as t } from "react/jsx-runtime";
1
+ import { useShellLabel as e } from "../../shared/providers/shell/useShellLabel.js";
2
+ import { jsx as t, jsxs as n } from "react/jsx-runtime";
2
3
  //#region src/chrome/notificationCenter/BellButton.tsx
3
- var n = ({ unreadCount: n, isOpen: r, onToggle: i }) => /* @__PURE__ */ t("button", {
4
- type: "button",
5
- onClick: i,
6
- className: "relative p-2 hover:bg-bg-sunken rounded-button text-text-primary transition-colors",
7
- "aria-label": `Notifications${n > 0 ? ` (${n} unread)` : ""}`,
8
- "aria-expanded": r,
9
- "aria-haspopup": "true",
10
- children: [/* @__PURE__ */ e("svg", {
11
- className: "w-icon-md h-icon-md",
12
- fill: "none",
13
- stroke: "currentColor",
14
- viewBox: "0 0 24 24",
15
- children: /* @__PURE__ */ e("path", {
16
- strokeLinecap: "round",
17
- strokeLinejoin: "round",
18
- strokeWidth: 2,
19
- d: "M15 17h5l-1.405-1.405A2.032 2.032 0 0118 14.158V11a6.002 6.002 0 00-4-5.659V5a2 2 0 10-4 0v.341C7.67 6.165 6 8.388 6 11v3.159c0 .538-.214 1.055-.595 1.436L4 17h5m6 0v1a3 3 0 11-6 0v-1m6 0H9"
20
- })
21
- }), n > 0 && /* @__PURE__ */ e("span", {
22
- className: "absolute -top-0.5 -right-0.5 flex items-center justify-center min-w-[18px] h-[18px] px-1 text-[10px] font-bold text-action-primary-text bg-action-primary-bg rounded-full border-2 border-bg-elevated",
23
- children: n > 9 ? "9+" : n
24
- })]
25
- });
4
+ var r = ({ unreadCount: r, isOpen: i, onToggle: a }) => {
5
+ let o = e();
6
+ return /* @__PURE__ */ n("button", {
7
+ type: "button",
8
+ onClick: a,
9
+ className: "relative p-2 hover:bg-bg-sunken rounded-button text-text-primary transition-colors",
10
+ "aria-label": r > 0 ? o("notifications.bellLabelUnread", "Notifications ({{count}} unread)", { count: r }) : o("notifications.bellLabel", "Notifications"),
11
+ "aria-expanded": i,
12
+ "aria-haspopup": "true",
13
+ children: [/* @__PURE__ */ t("svg", {
14
+ className: "w-icon-md h-icon-md",
15
+ fill: "none",
16
+ stroke: "currentColor",
17
+ viewBox: "0 0 24 24",
18
+ children: /* @__PURE__ */ t("path", {
19
+ strokeLinecap: "round",
20
+ strokeLinejoin: "round",
21
+ strokeWidth: 2,
22
+ d: "M15 17h5l-1.405-1.405A2.032 2.032 0 0118 14.158V11a6.002 6.002 0 00-4-5.659V5a2 2 0 10-4 0v.341C7.67 6.165 6 8.388 6 11v3.159c0 .538-.214 1.055-.595 1.436L4 17h5m6 0v1a3 3 0 11-6 0v-1m6 0H9"
23
+ })
24
+ }), r > 0 && /* @__PURE__ */ t("span", {
25
+ className: "absolute -top-0.5 -right-0.5 flex items-center justify-center min-w-[18px] h-[18px] px-1 text-[10px] font-bold text-action-primary-text bg-action-primary-bg rounded-full border-2 border-bg-elevated",
26
+ children: r > 9 ? "9+" : r
27
+ })]
28
+ });
29
+ };
26
30
  //#endregion
27
- export { n as BellButton };
31
+ export { r as BellButton };
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Every key the shell chrome resolves through `useShellLabel`, with its English
3
+ * (BOFF-8060).
4
+ *
5
+ * WHY. The chrome sits on every page of every product, and its keys live in
6
+ * generic namespaces (`nav.*`, `appShell.*`, `contextSwitcher.*`, …) that each
7
+ * product used to copy into its own dictionary by hand. With the platform
8
+ * dictionary layered under every product (fallback < platform < product), the
9
+ * shared chrome needs these keys ONCE, in the `workspaces` dictionary. This is
10
+ * the list a seed is built from, so nothing has to be hand-extracted again.
11
+ *
12
+ * `src/chrome/__tests__/shellLabelManifest.test.ts` parses every module that
13
+ * calls `useShellLabel` and fails on a key missing here, an English that
14
+ * differs, or an entry nothing requests. Two keys are requested with two
15
+ * spellings of their English (pre-existing; the test lists them); the value
16
+ * here is the one the products already seeded.
17
+ *
18
+ * Pure data, no imports: loadable by any seed or extractor script.
19
+ */
20
+ export declare const SHELL_LABEL_MANIFEST: Readonly<Record<string, string>>;
21
+ /**
22
+ * The keys this change introduced (BOFF-8060, F1). Their translations are not
23
+ * in any dictionary yet: seed them into `workspaces` (S1). Until then every
24
+ * one renders its English, exactly as before.
25
+ */
26
+ export declare const SHELL_LABELS_ADDED_BOFF_8060: readonly string[];
27
+ //# sourceMappingURL=shellLabelManifest.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shellLabelManifest.d.ts","sourceRoot":"","sources":["../../src/chrome/shellLabelManifest.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AACH,eAAO,MAAM,oBAAoB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CA2DhE,CAAC;AAEH;;;;GAIG;AACH,eAAO,MAAM,4BAA4B,EAAE,SAAS,MAAM,EAqBxD,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"SidebarHeader.d.ts","sourceRoot":"","sources":["../../../src/chrome/sideNavigation/SidebarHeader.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAG3C,UAAU,kBAAkB;IAC1B,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,SAAS,EAAE,OAAO,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,IAAI,CAAC;IAC1B,+EAA+E;IAC/E,gBAAgB,CAAC,EAAE,MAAM,IAAI,CAAC;IAC9B,oFAAoF;IACpF,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,eAAO,MAAM,aAAa,EAAE,EAAE,CAAC,kBAAkB,CAmDhD,CAAC"}
1
+ {"version":3,"file":"SidebarHeader.d.ts","sourceRoot":"","sources":["../../../src/chrome/sideNavigation/SidebarHeader.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAI3C,UAAU,kBAAkB;IAC1B,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,SAAS,EAAE,OAAO,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,IAAI,CAAC;IAC1B,+EAA+E;IAC/E,gBAAgB,CAAC,EAAE,MAAM,IAAI,CAAC;IAC9B,oFAAoF;IACpF,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,eAAO,MAAM,aAAa,EAAE,EAAE,CAAC,kBAAkB,CAoDhD,CAAC"}
@@ -1,37 +1,38 @@
1
- import { ChevronUp as e, PanelLeft as t } from "lucide-react";
2
- import { jsx as n, jsxs as r } from "react/jsx-runtime";
1
+ import { useShellLabel as e } from "../../shared/providers/shell/useShellLabel.js";
2
+ import { ChevronUp as t, PanelLeft as n } from "lucide-react";
3
+ import { jsx as r, jsxs as i } from "react/jsx-runtime";
3
4
  //#region src/chrome/sideNavigation/SidebarHeader.tsx
4
- var i = ({ header: i, collapsed: a, expandedCount: o, onCollapseAll: s, onToggleCollapse: c, collapseLabel: l, expandLabel: u }) => {
5
- let d = a ? u : l;
6
- return /* @__PURE__ */ n("div", {
7
- className: `py-card-padding border-b border-border-subtle ${a ? "md:px-2" : "px-card-padding"}`,
8
- children: /* @__PURE__ */ r("div", {
9
- className: `flex items-center gap-2 ${a ? "justify-center" : ""}`,
5
+ var a = ({ header: a, collapsed: o, expandedCount: s, onCollapseAll: c, onToggleCollapse: l, collapseLabel: u, expandLabel: d }) => {
6
+ let f = e(), p = o ? d : u;
7
+ return /* @__PURE__ */ r("div", {
8
+ className: `py-card-padding border-b border-border-subtle ${o ? "md:px-2" : "px-card-padding"}`,
9
+ children: /* @__PURE__ */ i("div", {
10
+ className: `flex items-center gap-2 ${o ? "justify-center" : ""}`,
10
11
  children: [
11
- i && !a && /* @__PURE__ */ n("div", {
12
+ a && !o && /* @__PURE__ */ r("div", {
12
13
  className: "min-w-0 flex-1",
13
- children: i
14
+ children: a
14
15
  }),
15
- !a && o > 0 && /* @__PURE__ */ n("button", {
16
+ !o && s > 0 && /* @__PURE__ */ r("button", {
16
17
  type: "button",
17
- onClick: s,
18
+ onClick: c,
18
19
  className: "shrink-0 rounded-button p-1.5 text-text-secondary transition-colors hover:bg-bg-sunken hover:text-text-primary",
19
- title: "Collapse all",
20
- "aria-label": "Collapse all menu items",
21
- children: /* @__PURE__ */ n(e, { className: "size-4" })
20
+ title: f("nav.collapseAll", "Collapse all"),
21
+ "aria-label": f("nav.collapseAllHint", "Collapse all menu items"),
22
+ children: /* @__PURE__ */ r(t, { className: "size-4" })
22
23
  }),
23
- c && /* @__PURE__ */ n("button", {
24
+ l && /* @__PURE__ */ r("button", {
24
25
  type: "button",
25
- onClick: c,
26
+ onClick: l,
26
27
  className: "hidden shrink-0 rounded-button p-1.5 text-text-secondary transition-colors hover:bg-bg-sunken hover:text-text-primary md:block",
27
- "aria-label": d,
28
- "aria-expanded": !a,
29
- title: d,
30
- children: /* @__PURE__ */ n(t, { className: "size-5" })
28
+ "aria-label": p,
29
+ "aria-expanded": !o,
30
+ title: p,
31
+ children: /* @__PURE__ */ r(n, { className: "size-5" })
31
32
  })
32
33
  ]
33
34
  })
34
35
  });
35
36
  };
36
37
  //#endregion
37
- export { i as SidebarHeader };
38
+ export { a as SidebarHeader };
@@ -17,7 +17,12 @@ export interface LanguageReplyView {
17
17
  wanted: string;
18
18
  /** The language the i18n provider is in NOW. */
19
19
  locale: string;
20
- /** The provider is fetching translations. */
20
+ /**
21
+ * The provider is still fetching THE WANTED language's dictionary
22
+ * (`useI18n().isLocaleLoading(wanted)`). ★ BOFF-8823: not the provider-wide
23
+ * `isLoading` — after A -> B with A still in flight, A settling cleared that
24
+ * flag while B was loading, and the reply fell to English after the grace.
25
+ */
21
26
  isLoading: boolean;
22
27
  /** The sentence, made with the translator in force now, came back translated. */
23
28
  translatedNow: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"languageReply.d.ts","sourceRoot":"","sources":["../../../../src/shared/assistant/appControls/languageReply.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAC3C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAG9D;;;;;GAKG;AACH,MAAM,MAAM,iBAAiB,GAAG,OAAO,GAAG,MAAM,GAAG,OAAO,CAAC;AAE3D,wFAAwF;AACxF,eAAO,MAAM,uBAAuB,MAAM,CAAC;AAE3C,+DAA+D;AAC/D,eAAO,MAAM,0BAA0B,OAAQ,CAAC;AAKhD,MAAM,WAAW,iBAAiB;IAChC,qEAAqE;IACrE,MAAM,EAAE,MAAM,CAAC;IACf,gDAAgD;IAChD,MAAM,EAAE,MAAM,CAAC;IACf,6CAA6C;IAC7C,SAAS,EAAE,OAAO,CAAC;IACnB,iFAAiF;IACjF,aAAa,EAAE,OAAO,CAAC;CACxB;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,iBAAiB,GAAG,iBAAiB,CAO5E;AAED,0FAA0F;AAC1F,wBAAgB,wBAAwB,CACtC,OAAO,EAAE,OAAO,EAChB,EAAE,EAAE,WAAW,GACd,gBAAgB,GAAG,IAAI,CAkBzB"}
1
+ {"version":3,"file":"languageReply.d.ts","sourceRoot":"","sources":["../../../../src/shared/assistant/appControls/languageReply.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAC3C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAG9D;;;;;GAKG;AACH,MAAM,MAAM,iBAAiB,GAAG,OAAO,GAAG,MAAM,GAAG,OAAO,CAAC;AAE3D,wFAAwF;AACxF,eAAO,MAAM,uBAAuB,MAAM,CAAC;AAE3C,+DAA+D;AAC/D,eAAO,MAAM,0BAA0B,OAAQ,CAAC;AAKhD,MAAM,WAAW,iBAAiB;IAChC,qEAAqE;IACrE,MAAM,EAAE,MAAM,CAAC;IACf,gDAAgD;IAChD,MAAM,EAAE,MAAM,CAAC;IACf;;;;;OAKG;IACH,SAAS,EAAE,OAAO,CAAC;IACnB,iFAAiF;IACjF,aAAa,EAAE,OAAO,CAAC;CACxB;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,iBAAiB,GAAG,iBAAiB,CAO5E;AAED,0FAA0F;AAC1F,wBAAgB,wBAAwB,CACtC,OAAO,EAAE,OAAO,EAChB,EAAE,EAAE,WAAW,GACd,gBAAgB,GAAG,IAAI,CAkBzB"}
@@ -39,8 +39,13 @@ import { AssistantModeConfig } from './conversation';
39
39
  * and `assistant` pills — the exact defect `AssistantModeSelector` fixed. Use
40
40
  * `assistantModeI18nCopy(modes)`, which takes the words from the product.
41
41
  * - A mode's `description` and `suggestions`, and the page label from
42
- * `describeCurrentPage()`, are rendered exactly as passed and never reach
43
- * `tr()`. Translate them in the product before passing them.
42
+ * `describeCurrentPage()`, are the product's words too. Since BOFF-8060 (F5)
43
+ * they are translated AT DISPLAY TIME under keys derived from their English
44
+ * (`suggestion.<mode>.<slug>`, `modeDescription.<mode>`, `page.<slug>`; see
45
+ * `productCopy.ts`). They stay out of the shared manifest, and
46
+ * `assistantI18nSeedCopy` emits them from the product's own modes and the
47
+ * `pageLabels` it passes — so a product passes its ENGLISH, never a
48
+ * pre-translated string (that would key the translation by itself).
44
49
  *
45
50
  * HOW A PRODUCT'S EXTRACTOR USES IT
46
51
  *
@@ -546,8 +551,11 @@ export declare const ASSISTANT_I18N_SEED_COMPAT_COPY: Readonly<{
546
551
  * see `overrides` on `assistantI18nSeedCopy`.
547
552
  */
548
553
  export declare const ASSISTANT_I18N_MANIFEST: Readonly<Record<string, string>>;
549
- /** The part of a mode that decides its pill's key and English. */
550
- export type AssistantModeCopySource = Pick<AssistantModeConfig, "id" | "label" | "producesArtifacts">;
554
+ /**
555
+ * The part of a mode that decides its keys and English: the pill, plus (when
556
+ * given) its description and suggestion chips (BOFF-8060, F5).
557
+ */
558
+ export type AssistantModeCopySource = Pick<AssistantModeConfig, "id" | "label" | "producesArtifacts"> & Partial<Pick<AssistantModeConfig, "description" | "suggestions">>;
551
559
  /**
552
560
  * `mode.<id>` for each mode a product offers, in the product's own words.
553
561
  *
@@ -564,7 +572,9 @@ export declare function assistantModeI18nCopy(modes: readonly AssistantModeCopyS
564
572
  /**
565
573
  * Everything a product seeds for the shared assistant, as FULL keys under its
566
574
  * namespace: the manifest, its own mode labels, and its own English for any
567
- * shared key it has customised.
575
+ * shared key it has customised — plus its own display copy (BOFF-8060, F5):
576
+ * each mode's description and suggestion chips, and the `pageLabels` its
577
+ * `describeCurrentPage()` can return (pass every label it can produce).
568
578
  *
569
579
  * `namespace` is the id given to `AssistantProductProvider` /
570
580
  * `AssistantI18nProvider`; the keys are built by `assistantTranslationKey`, the
@@ -582,5 +592,7 @@ export declare function assistantI18nSeedCopy(args: {
582
592
  namespace: string;
583
593
  modes: readonly AssistantModeCopySource[];
584
594
  overrides?: Readonly<Record<string, string>>;
595
+ /** Every English label the product's `describeCurrentPage()` can return. */
596
+ pageLabels?: readonly string[];
585
597
  }): Record<string, string>;
586
598
  //# sourceMappingURL=i18nManifest.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"i18nManifest.d.ts","sourceRoot":"","sources":["../../../src/shared/assistant/i18nManifest.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAa1D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0GG;AAEH;;;;;GAKG;AACH,eAAO,MAAM,2BAA2B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+dG,CAAC;AAE5C,mDAAmD;AACnD,MAAM,MAAM,uBAAuB,GAAG,MAAM,OAAO,2BAA2B,CAAC;AAW/E;;;GAGG;AACH,eAAO,MAAM,4BAA4B,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAgCtE,CAAC;AAEL;;;;GAIG;AACH,eAAO,MAAM,+BAA+B;;EAGjC,CAAC;AAEZ;;;;;GAKG;AACH,eAAO,MAAM,uBAAuB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAKjE,CAAC;AAEL,kEAAkE;AAClE,MAAM,MAAM,uBAAuB,GAAG,IAAI,CACxC,mBAAmB,EACnB,IAAI,GAAG,OAAO,GAAG,mBAAmB,CACrC,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,SAAS,uBAAuB,EAAE,GACxC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAexB;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE;IAC1C,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,SAAS,uBAAuB,EAAE,CAAC;IAC1C,SAAS,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;CAC9C,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAiCzB"}
1
+ {"version":3,"file":"i18nManifest.d.ts","sourceRoot":"","sources":["../../../src/shared/assistant/i18nManifest.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAc1D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+GG;AAEH;;;;;GAKG;AACH,eAAO,MAAM,2BAA2B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+dG,CAAC;AAE5C,mDAAmD;AACnD,MAAM,MAAM,uBAAuB,GAAG,MAAM,OAAO,2BAA2B,CAAC;AAW/E;;;GAGG;AACH,eAAO,MAAM,4BAA4B,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAgCtE,CAAC;AAEL;;;;GAIG;AACH,eAAO,MAAM,+BAA+B;;EAGjC,CAAC;AAEZ;;;;;GAKG;AACH,eAAO,MAAM,uBAAuB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAKjE,CAAC;AAEL;;;GAGG;AACH,MAAM,MAAM,uBAAuB,GAAG,IAAI,CACxC,mBAAmB,EACnB,IAAI,GAAG,OAAO,GAAG,mBAAmB,CACrC,GACC,OAAO,CAAC,IAAI,CAAC,mBAAmB,EAAE,aAAa,GAAG,aAAa,CAAC,CAAC,CAAC;AAEpE;;;;;;;;;;;GAWG;AACH,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,SAAS,uBAAuB,EAAE,GACxC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAexB;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE;IAC1C,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,SAAS,uBAAuB,EAAE,CAAC;IAC1C,SAAS,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAC7C,4EAA4E;IAC5E,UAAU,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAChC,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAuCzB"}
@@ -7,10 +7,11 @@ import { INCOMPLETE_TURN_NOTICES as a } from "./streamBudget.js";
7
7
  import { STAGE_COPY as o, THINKING_PHRASES as s } from "./stageCopy.js";
8
8
  import { VOICE_MUTED_LABEL as c, VOICE_THINKING_LABEL as l } from "./voice/voiceStatus.js";
9
9
  import { ATTACHMENT_SOURCES as u } from "./attachmentSources.js";
10
- import { WRITE_PROPOSAL_ERROR_COPY as d } from "./writeProposalErrorCopy.js";
11
- import { WRITE_PROPOSAL_VOICE_COPY as f } from "./writeProposalVoice.js";
10
+ import { assistantProductCopyEntries as d } from "./productCopy.js";
11
+ import { WRITE_PROPOSAL_ERROR_COPY as f } from "./writeProposalErrorCopy.js";
12
+ import { WRITE_PROPOSAL_VOICE_COPY as p } from "./writeProposalVoice.js";
12
13
  //#region src/shared/assistant/i18nManifest.ts
13
- var p = {
14
+ var m = {
14
15
  "apiCalls.consentBody": "In Take action mode the assistant can read AND change your data — creating records, logging activity, updating details, and more, on your behalf.",
15
16
  "apiCalls.consentBody2": "It will describe what it is about to do and ask you to confirm before making a change. Only continue if you want the assistant to take actions for you.",
16
17
  "apiCalls.consentCancel": "Stay in Ask",
@@ -421,39 +422,43 @@ var p = {
421
422
  "writeProposal.values": "Values",
422
423
  "writeProposal.variablesOmitted": "{{count}} more values not shown",
423
424
  "writeProposal.waitForTurn": "You can confirm once the assistant finishes replying."
424
- }, m = (e) => Object.fromEntries(e.map((e) => [e.key, e.fallback])), h = Object.freeze({
425
- ...m(Object.values(o)),
426
- ...m(s),
427
- ...m([l, c]),
428
- ...m(a),
429
- ...m(Object.values(i)),
430
- ...m(Object.values(r)),
431
- ...m(Object.values(d)),
432
- ...m(Object.values(f)),
425
+ }, h = (e) => Object.fromEntries(e.map((e) => [e.key, e.fallback])), g = Object.freeze({
426
+ ...h(Object.values(o)),
427
+ ...h(s),
428
+ ...h([l, c]),
429
+ ...h(a),
430
+ ...h(Object.values(i)),
431
+ ...h(Object.values(r)),
432
+ ...h(Object.values(f)),
433
+ ...h(Object.values(p)),
433
434
  ...Object.fromEntries(u.map((e) => [e.labelKey, e.labelFallback]))
434
- }), g = Object.freeze({ "outcome.usageDailyLimitReachedNoTime": "You've reached today's AI assistant limit. Try again tomorrow." }), _ = Object.freeze({
435
- ...p,
436
- ...h,
437
- ...g
435
+ }), _ = Object.freeze({ "outcome.usageDailyLimitReachedNoTime": "You've reached today's AI assistant limit. Try again tomorrow." }), v = Object.freeze({
436
+ ...m,
437
+ ...g,
438
+ ..._
438
439
  });
439
- function v(e) {
440
+ function y(e) {
440
441
  let r = e.map((e) => e.id).filter((e) => !n(e));
441
442
  if (r.length > 0) throw Error(`assistantModeI18nCopy: malformed mode id ${r.map((e) => JSON.stringify(e)).join(", ")}. Declare product modes with declareAssistantMode().`);
442
443
  return Object.fromEntries(e.map((e) => [`mode.${e.id}`, e.label || t(e)]));
443
444
  }
444
- function y(t) {
445
+ function b(t) {
445
446
  let n = {
446
- ..._,
447
- ...v(t.modes)
447
+ ...v,
448
+ ...y(t.modes)
448
449
  }, r = Object.entries(t.overrides ?? {}), i = r.filter(([e]) => !Object.hasOwn(n, e)).map(([e]) => e);
449
450
  if (i.length > 0) throw Error(`assistantI18nSeedCopy: no shared assistant key ${i.join(", ")} to override. Check the spelling, or that the key is a mode this product offers; a key fe-libs no longer requests belongs with the product's own keys.`);
450
451
  let a = r.filter(([, e]) => e.trim() === "").map(([e]) => e);
451
452
  if (a.length > 0) throw Error(`assistantI18nSeedCopy: blank English for ${a.join(", ")}. Omit the override to keep the shared English.`);
452
453
  let o = {
453
454
  ...n,
454
- ...Object.fromEntries(r)
455
+ ...Object.fromEntries(r),
456
+ ...d({
457
+ modes: t.modes,
458
+ pageLabels: t.pageLabels
459
+ })
455
460
  };
456
461
  return Object.fromEntries(Object.entries(o).map(([n, r]) => [e(t.namespace, n), r]));
457
462
  }
458
463
  //#endregion
459
- export { h as ASSISTANT_I18N_COMPUTED_COPY, p as ASSISTANT_I18N_LITERAL_COPY, _ as ASSISTANT_I18N_MANIFEST, g as ASSISTANT_I18N_SEED_COMPAT_COPY, y as assistantI18nSeedCopy, v as assistantModeI18nCopy };
464
+ export { g as ASSISTANT_I18N_COMPUTED_COPY, m as ASSISTANT_I18N_LITERAL_COPY, v as ASSISTANT_I18N_MANIFEST, _ as ASSISTANT_I18N_SEED_COMPAT_COPY, b as assistantI18nSeedCopy, y as assistantModeI18nCopy };
@@ -90,6 +90,7 @@ export * from './i18nManifest';
90
90
  export * from './modeCopy';
91
91
  export * from './modeIds';
92
92
  export * from './modeCapabilities';
93
+ export * from './productCopy';
93
94
  export * from './adminModeSendGate';
94
95
  export * from './attachmentTurn';
95
96
  export * from './writeModeConsent';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/shared/assistant/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/shared/assistant/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,78 @@
1
+ /**
2
+ * Display-time translation of the copy a PRODUCT hands the shared assistant
3
+ * (BOFF-8060, F5): its suggestion chips, its mode descriptions, and the page
4
+ * label from `describeCurrentPage()`.
5
+ *
6
+ * WHY. Products pass these as English constants, and the assistant rendered
7
+ * them exactly as passed, so the chips under "How can I help?" and the
8
+ * "Context: <page>" line stayed English in every locale (production check,
9
+ * 2026-10-07: BigConsole 8 chips / 6 page names, VibeControls 12 / 13).
10
+ *
11
+ * HOW. Each string gets a key DERIVED FROM ITS ENGLISH, under the product's
12
+ * assistant namespace:
13
+ *
14
+ * suggestion.<modeId>.<slug(english)> a suggestion chip
15
+ * modeDescription.<modeId> a mode's description
16
+ * page.<slug(english)> a page label
17
+ *
18
+ * `slug` is the lower-camel ASCII of the English ("Show overdue tasks" ->
19
+ * `showOverdueTasks`). Deriving the key from the words means:
20
+ * - a product needs no key table: `assistantI18nSeedCopy` emits these keys
21
+ * from the same mode list and page labels the product already passes;
22
+ * - when the English CHANGES, the key changes with it, so a stale translation
23
+ * of the old words can never be shown — the new English shows until the new
24
+ * key is translated.
25
+ *
26
+ * ★ Not `mode.<id>.suggestion.*`. `mode.<id>` is already a live LEAF (the
27
+ * pill label). The served dictionary COULD hold it as a branch too: the label
28
+ * would move to the branch's `_` slot, which `resolveTranslationValue` reads.
29
+ * This is a choice, not a limit. Separate families add no child under any
30
+ * live leaf, so no served key changes shape and a seed has no leaf/branch
31
+ * collisions to account for.
32
+ *
33
+ * ★★ THESE IDS ARE THE SEED CONTRACT. The prepared seeds (BigConsole B5,
34
+ * VibeControls V1) are generated by calling `assistantI18nSeedCopy` /
35
+ * `assistantProductCopyEntries`, never by re-deriving the slug elsewhere. The
36
+ * ids are pinned in `productCopy.test.ts` ("seed plan ids"). A change to this
37
+ * derivation re-keys every seeded translation, so regenerate those seeds with
38
+ * it.
39
+ *
40
+ * `modeDescription.<id>` is seeded, but no fe-libs UI displays a mode
41
+ * description yet. The key exists so a description can be translated once it
42
+ * is shown.
43
+ *
44
+ * ★ The model still reads English page context: `describeCurrentPage()` is
45
+ * unchanged and only its DISPLAY is translated. A clicked chip sends the text
46
+ * as displayed, i.e. localized (operator decision D-7, 2026-10-07): it is what
47
+ * the person saw and chose.
48
+ *
49
+ * Pure and import-free, so it loads in any test or extractor script.
50
+ */
51
+ /** Keys longer than this get a hash suffix instead of the full slug. */
52
+ export declare const MAX_COPY_SLUG_LENGTH = 64;
53
+ /**
54
+ * Lower-camel ASCII slug of an English string; `null` when nothing ASCII
55
+ * alphanumeric is left (such copy is shown as passed, never keyed).
56
+ *
57
+ * Over-long slugs keep a readable prefix plus a hash of the whole English, so
58
+ * two long chips that share a prefix still get different keys.
59
+ */
60
+ export declare function assistantCopySlug(english: string): string | null;
61
+ /** `suggestion.<modeId>.<slug>`, or null for copy that cannot be keyed. */
62
+ export declare function assistantSuggestionKey(modeId: string, english: string): string | null;
63
+ /** `modeDescription.<modeId>`. */
64
+ export declare function assistantModeDescriptionKey(modeId: string): string;
65
+ /** `page.<slug>`, or null for a label that cannot be keyed. */
66
+ export declare function assistantPageLabelKey(english: string): string | null;
67
+ /** Translate one piece of product copy, or return it unchanged when unkeyable. */
68
+ export declare function translateProductCopy(tr: (key: string, fallback: string) => string, key: string | null, english: string): string;
69
+ /** The relative keys and English for a product's modes and page labels. */
70
+ export declare function assistantProductCopyEntries(args: {
71
+ modes: readonly {
72
+ id: string;
73
+ description?: string;
74
+ suggestions?: readonly string[];
75
+ }[];
76
+ pageLabels?: readonly string[];
77
+ }): Record<string, string>;
78
+ //# sourceMappingURL=productCopy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"productCopy.d.ts","sourceRoot":"","sources":["../../../src/shared/assistant/productCopy.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiDG;AAEH,wEAAwE;AACxE,eAAO,MAAM,oBAAoB,KAAK,CAAC;AAcvC;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAgBhE;AAED,2EAA2E;AAC3E,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,GACd,MAAM,GAAG,IAAI,CAGf;AAED,kCAAkC;AAClC,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAElE;AAED,+DAA+D;AAC/D,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAGpE;AAED,kFAAkF;AAClF,wBAAgB,oBAAoB,CAGlC,EAAE,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,MAAM,EAC7C,GAAG,EAAE,MAAM,GAAG,IAAI,EAClB,OAAO,EAAE,MAAM,GACd,MAAM,CAER;AAED,2EAA2E;AAC3E,wBAAgB,2BAA2B,CAAC,IAAI,EAAE;IAChD,KAAK,EAAE,SAAS;QACd,EAAE,EAAE,MAAM,CAAC;QACX,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,WAAW,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;KACjC,EAAE,CAAC;IACJ,UAAU,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAChC,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CA0BzB"}
@@ -0,0 +1,45 @@
1
+ //#region src/shared/assistant/productCopy.ts
2
+ var e = 64, t = 2166136261, n = 16777619;
3
+ function r(e) {
4
+ let r = t;
5
+ for (let t = 0; t < e.length; t += 1) r ^= e.charCodeAt(t), r = Math.imul(r, n);
6
+ return (r >>> 0).toString(36);
7
+ }
8
+ function i(e) {
9
+ let t = e.normalize("NFKD").replace(/[̀-ͯ]/g, "").split(/[^A-Za-z0-9]+/).filter((e) => e.length > 0).map((e) => e.toLowerCase());
10
+ if (t.length === 0) return null;
11
+ let n = t.map((e, t) => t === 0 ? e : e.charAt(0).toUpperCase() + e.slice(1)).join("");
12
+ if (n.length <= 64) return n;
13
+ let i = r(e.trim());
14
+ return `${n.slice(0, 64 - i.length - 1)}H${i}`;
15
+ }
16
+ function a(e, t) {
17
+ let n = i(t);
18
+ return n === null ? null : `suggestion.${e}.${n}`;
19
+ }
20
+ function o(e) {
21
+ return `modeDescription.${e}`;
22
+ }
23
+ function s(e) {
24
+ let t = i(e);
25
+ return t === null ? null : `page.${t}`;
26
+ }
27
+ function c(e, t, n) {
28
+ return t === null ? n : e(t, n);
29
+ }
30
+ function l(e) {
31
+ let t = {}, n = (e, n) => {
32
+ if (e === null) return;
33
+ let r = t[e];
34
+ if (r !== void 0 && r !== n) throw Error(`assistantProductCopyEntries: ${JSON.stringify(r)} and ${JSON.stringify(n)} both map to ${e}. Reword one of them.`);
35
+ t[e] = n;
36
+ };
37
+ for (let t of e.modes) {
38
+ t.description && t.description.trim() !== "" && n(o(t.id), t.description);
39
+ for (let e of t.suggestions ?? []) n(a(t.id, e), e);
40
+ }
41
+ for (let t of e.pageLabels ?? []) n(s(t), t);
42
+ return t;
43
+ }
44
+ //#endregion
45
+ export { e as MAX_COPY_SLUG_LENGTH, i as assistantCopySlug, o as assistantModeDescriptionKey, s as assistantPageLabelKey, l as assistantProductCopyEntries, a as assistantSuggestionKey, c as translateProductCopy };
@@ -1 +1 @@
1
- {"version":3,"file":"AssistantChatArea.d.ts","sourceRoot":"","sources":["../../../../src/shared/assistant/ui/AssistantChatArea.tsx"],"names":[],"mappings":"AAAA,OAAO,EAOL,KAAK,EAAE,EACR,MAAM,OAAO,CAAC;AAkQf,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAmLvE;;;;;GAKG;AACH,MAAM,WAAW,sBAAsB;IACrC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;;;;;;;;;;;OAYG;IACH,WAAW,CAAC,EAAE,oBAAoB,CAAC;CACpC;AAED,eAAO,MAAM,iBAAiB,EAAE,EAAE,CAAC,sBAAsB,CAygMxD,CAAC"}
1
+ {"version":3,"file":"AssistantChatArea.d.ts","sourceRoot":"","sources":["../../../../src/shared/assistant/ui/AssistantChatArea.tsx"],"names":[],"mappings":"AAAA,OAAO,EAOL,KAAK,EAAE,EACR,MAAM,OAAO,CAAC;AAkQf,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAmLvE;;;;;GAKG;AACH,MAAM,WAAW,sBAAsB;IACrC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;;;;;;;;;;;OAYG;IACH,WAAW,CAAC,EAAE,oBAAoB,CAAC;CACpC;AAED,eAAO,MAAM,iBAAiB,EAAE,EAAE,CAAC,sBAAsB,CA0gMxD,CAAC"}
@@ -109,7 +109,7 @@ var Br = ({ visible: Br = !0, writeAccess: Vr = "unknown" }) => {
109
109
  productWriteApproval: z,
110
110
  capabilities: r ? n.sandboxWriteCapabilities[r] : null
111
111
  });
112
- }, [z]), { getAccessToken: B, getWorkspaceToken: Jr, userId: V } = n(), { locale: H, isLoading: Yr } = t(), Xr = y((e) => e.voiceGraceMs), Zr = y((e) => e.handsFreeInterrupt), Qr = y((e) => e.handsFreeStreamNoticeAccepted), $r = y((e) => e.acceptHandsFreeStreamNotice), ei = y((e) => e.assistantLanguage), ti = y((e) => e.replyLanguage), ni = M(() => He(ei, ti, H), [
112
+ }, [z]), { getAccessToken: B, getWorkspaceToken: Jr, userId: V } = n(), { locale: H, isLocaleLoading: Yr } = t(), Xr = y((e) => e.voiceGraceMs), Zr = y((e) => e.handsFreeInterrupt), Qr = y((e) => e.handsFreeStreamNoticeAccepted), $r = y((e) => e.acceptHandsFreeStreamNotice), ei = y((e) => e.assistantLanguage), ti = y((e) => e.replyLanguage), ni = M(() => He(ei, ti, H), [
113
113
  ei,
114
114
  ti,
115
115
  H
@@ -574,7 +574,7 @@ var Br = ({ visible: Br = !0, writeAccess: Vr = "unknown" }) => {
574
574
  let t = Mt({
575
575
  wanted: e.wanted,
576
576
  locale: H,
577
- isLoading: Yr,
577
+ isLoading: Yr(e.wanted),
578
578
  translatedNow: kt(I, e.reply).translated
579
579
  });
580
580
  if (t === "write") {
@@ -1 +1 @@
1
- {"version":3,"file":"AssistantEmptyState.d.ts","sourceRoot":"","sources":["../../../../src/shared/assistant/ui/AssistantEmptyState.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,EAAE,MAAM,OAAO,CAAC;AAEhC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAC9C,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAMtE,UAAU,KAAK;IACb,IAAI,EAAE,aAAa,CAAC;IACpB;;;OAGG;IACH,iBAAiB,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,eAAe,KAAK,IAAI,CAAC;IAC1E;;;OAGG;IACH,WAAW,CAAC,EAAE,SAAS,cAAc,EAAE,CAAC;IACxC;;;;OAIG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED;;;;;;GAMG;AACH,eAAO,MAAM,mBAAmB,EAAE,EAAE,CAAC,KAAK,CA8FzC,CAAC"}
1
+ {"version":3,"file":"AssistantEmptyState.d.ts","sourceRoot":"","sources":["../../../../src/shared/assistant/ui/AssistantEmptyState.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,EAAE,MAAM,OAAO,CAAC;AAEhC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAC9C,OAAO,EAGL,KAAK,eAAe,EACpB,KAAK,cAAc,EACpB,MAAM,gBAAgB,CAAC;AAWxB,UAAU,KAAK;IACb,IAAI,EAAE,aAAa,CAAC;IACpB;;;OAGG;IACH,iBAAiB,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,eAAe,KAAK,IAAI,CAAC;IAC1E;;;OAGG;IACH,WAAW,CAAC,EAAE,SAAS,cAAc,EAAE,CAAC;IACxC;;;;OAIG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED;;;;;;GAMG;AACH,eAAO,MAAM,mBAAmB,EAAE,EAAE,CAAC,KAAK,CAqHzC,CAAC"}
@@ -1,48 +1,56 @@
1
1
  import { resolveModeConfig as e, useAssistantPageLabel as t, useAssistantProduct as n } from "../product.js";
2
2
  import { useAssistantTr as r } from "../i18n.js";
3
- import { hasConnectSource as i, useAssistantConnectSource as a } from "./composer/connectSource.js";
4
- import { AssistantConnectSourceItem as o } from "./composer/AssistantConnectSourceItem.js";
5
- import { Sparkles as s } from "lucide-react";
6
- import { jsx as c, jsxs as l } from "react/jsx-runtime";
3
+ import { AUTO_READ_MODE as i, AUTO_WRITE_MODE as a } from "../autoRouting.js";
4
+ import { assistantPageLabelKey as o, assistantSuggestionKey as s, translateProductCopy as c } from "../productCopy.js";
5
+ import { hasConnectSource as l, useAssistantConnectSource as u } from "./composer/connectSource.js";
6
+ import { AssistantConnectSourceItem as d } from "./composer/AssistantConnectSourceItem.js";
7
+ import { Sparkles as f } from "lucide-react";
8
+ import { jsx as p, jsxs as m } from "react/jsx-runtime";
7
9
  //#region src/shared/assistant/ui/AssistantEmptyState.tsx
8
- var u = ({ mode: u, onSuggestionClick: d, suggestions: f, explainsAuto: p = !1 }) => {
9
- let m = r(), { modes: h } = n(), g = e(h, u), _ = t(), v = f ?? (g?.suggestions.slice(0, 4) ?? []).map((e) => ({ text: e })), y = i(a());
10
- return /* @__PURE__ */ l("div", {
10
+ var h = ({ mode: h, onSuggestionClick: g, suggestions: _, explainsAuto: v = !1 }) => {
11
+ let y = r(), { modes: b } = n(), x = e(b, h), S = t(), C = (_ ?? (x?.suggestions.slice(0, 4) ?? []).map((e) => ({ text: e }))).map((e) => {
12
+ let t = e.intent === "act" ? a : e.intent === "read" ? i : x?.id ?? h;
13
+ return {
14
+ ...e,
15
+ display: c(y, s(t, e.text), e.text)
16
+ };
17
+ }), w = S ? c(y, o(S), S) : null, T = l(u());
18
+ return /* @__PURE__ */ m("div", {
11
19
  className: "flex flex-1 flex-col items-center justify-center overflow-y-auto px-6 py-8 text-center",
12
20
  children: [
13
- /* @__PURE__ */ c("div", {
21
+ /* @__PURE__ */ p("div", {
14
22
  className: "flex size-12 items-center justify-center rounded-2xl bg-gradient-to-br from-action-primary-bg/25 to-action-primary-bg/5 text-action-primary-bg shadow-sm",
15
- children: /* @__PURE__ */ c(s, { className: "size-6" })
23
+ children: /* @__PURE__ */ p(f, { className: "size-6" })
16
24
  }),
17
- /* @__PURE__ */ c("h2", {
25
+ /* @__PURE__ */ p("h2", {
18
26
  className: "mt-5 text-2xl font-semibold leading-tight tracking-tight text-text-primary",
19
- children: m("empty.title", "How can I help?")
27
+ children: y("empty.title", "How can I help?")
20
28
  }),
21
- /* @__PURE__ */ c("p", {
29
+ /* @__PURE__ */ p("p", {
22
30
  className: "mt-2 max-w-[16rem] text-[13px] leading-relaxed text-text-muted",
23
- children: _ ? m("empty.subtitle", "You're viewing {{page}}. Ask about it, or pick a suggestion below.", { page: _ }) : m("empty.subtitleNoPage", "Ask me anything, or pick a suggestion below.")
31
+ children: w ? y("empty.subtitle", "You're viewing {{page}}. Ask about it, or pick a suggestion below.", { page: w }) : y("empty.subtitleNoPage", "Ask me anything, or pick a suggestion below.")
24
32
  }),
25
- p ? /* @__PURE__ */ c("p", {
33
+ v ? /* @__PURE__ */ p("p", {
26
34
  className: "mt-2 max-w-[18rem] text-[12px] leading-relaxed text-text-muted",
27
35
  "data-testid": "assistant-auto-explainer",
28
- children: m("modeSelector.autoHint", "Answers your questions, and proposes changes for you to approve")
36
+ children: y("modeSelector.autoHint", "Answers your questions, and proposes changes for you to approve")
29
37
  }) : null,
30
- /* @__PURE__ */ c("div", {
38
+ /* @__PURE__ */ p("div", {
31
39
  className: "mt-6 flex flex-wrap items-center justify-center gap-2",
32
- children: v.map((e) => /* @__PURE__ */ c("button", {
40
+ children: C.map((e) => /* @__PURE__ */ p("button", {
33
41
  type: "button",
34
- onClick: () => d(e.text, e.intent),
42
+ onClick: () => g(e.display, e.intent),
35
43
  className: "rounded-full border border-border-subtle bg-bg-surface px-3.5 py-2 text-[13px] leading-tight text-text-primary shadow-sm transition-[color,background-color,border-color,box-shadow] hover:border-action-primary-bg/40 hover:bg-bg-elevated hover:shadow-md",
36
44
  "data-testid": "assistant-suggestion",
37
- children: e.text
45
+ children: e.display
38
46
  }, e.text))
39
47
  }),
40
- y ? /* @__PURE__ */ c("div", {
48
+ T ? /* @__PURE__ */ p("div", {
41
49
  className: "mt-5",
42
- children: /* @__PURE__ */ c(o, { presentation: "action" })
50
+ children: /* @__PURE__ */ p(d, { presentation: "action" })
43
51
  }) : null
44
52
  ]
45
53
  });
46
54
  };
47
55
  //#endregion
48
- export { u as AssistantEmptyState };
56
+ export { h as AssistantEmptyState };
@@ -1 +1 @@
1
- {"version":3,"file":"AssistantHeader.d.ts","sourceRoot":"","sources":["../../../../src/shared/assistant/ui/AssistantHeader.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC;AAehC,UAAU,KAAK;IACb,qEAAqE;IACrE;;;;;;;OAOG;IACH,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,iBAAiB,EAAE,MAAM,IAAI,CAAC;IAC9B,aAAa,EAAE,MAAM,IAAI,CAAC;IAC1B,gFAAgF;IAChF,WAAW,EAAE,OAAO,CAAC;IACrB;;;;;;;OAOG;IACH,eAAe,CAAC,EAAE,MAAM,IAAI,CAAC;IAC7B,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,IAAI,CAAC;CAC3B;AAED;;;;;;;;;GASG;AACH,eAAO,MAAM,eAAe,EAAE,EAAE,CAAC,KAAK,CA+IrC,CAAC"}
1
+ {"version":3,"file":"AssistantHeader.d.ts","sourceRoot":"","sources":["../../../../src/shared/assistant/ui/AssistantHeader.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC;AAgBhC,UAAU,KAAK;IACb,qEAAqE;IACrE;;;;;;;OAOG;IACH,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,iBAAiB,EAAE,MAAM,IAAI,CAAC;IAC9B,aAAa,EAAE,MAAM,IAAI,CAAC;IAC1B,gFAAgF;IAChF,WAAW,EAAE,OAAO,CAAC;IACrB;;;;;;;OAOG;IACH,eAAe,CAAC,EAAE,MAAM,IAAI,CAAC;IAC7B,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,IAAI,CAAC;CAC3B;AAED;;;;;;;;;GASG;AACH,eAAO,MAAM,eAAe,EAAE,EAAE,CAAC,KAAK,CAqJrC,CAAC"}