@djangocfg/ui-tools 2.1.382 → 2.1.384

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 (89) hide show
  1. package/dist/ChatRoot-JVR3M3H2.mjs +5 -0
  2. package/dist/{ChatRoot-6IZFM5HM.mjs.map → ChatRoot-JVR3M3H2.mjs.map} +1 -1
  3. package/dist/ChatRoot-LXIUBOXF.cjs +14 -0
  4. package/dist/{ChatRoot-LW4XNIKP.cjs.map → ChatRoot-LXIUBOXF.cjs.map} +1 -1
  5. package/dist/DictationField-U25MEYAL.mjs +4 -0
  6. package/dist/{DictationField-2ZLQWLYV.mjs.map → DictationField-U25MEYAL.mjs.map} +1 -1
  7. package/dist/DictationField-XWR5VOID.cjs +13 -0
  8. package/dist/{DictationField-IPPJ54CU.cjs.map → DictationField-XWR5VOID.cjs.map} +1 -1
  9. package/dist/{chunk-KMSBGNVC.cjs → chunk-4PFW7MIJ.cjs} +4 -2
  10. package/dist/chunk-4PFW7MIJ.cjs.map +1 -0
  11. package/dist/{chunk-4LXG3NBV.mjs → chunk-C2YN6WEO.mjs} +3 -3
  12. package/dist/chunk-C2YN6WEO.mjs.map +1 -0
  13. package/dist/{chunk-OZAU3QWD.cjs → chunk-HPK3EWBF.cjs} +8 -8
  14. package/dist/chunk-HPK3EWBF.cjs.map +1 -0
  15. package/dist/{chunk-UWVP6LCW.mjs → chunk-PEKBT75W.mjs} +8 -8
  16. package/dist/chunk-PEKBT75W.mjs.map +1 -0
  17. package/dist/index.cjs +192 -55
  18. package/dist/index.cjs.map +1 -1
  19. package/dist/index.d.cts +78 -6
  20. package/dist/index.d.ts +78 -6
  21. package/dist/index.mjs +143 -8
  22. package/dist/index.mjs.map +1 -1
  23. package/package.json +6 -13
  24. package/src/tools/Chat/core/audio/defaults.ts +16 -11
  25. package/src/tools/Chat/core/audio/sounds/error.ts +3 -0
  26. package/src/tools/Chat/core/audio/sounds/mention.ts +3 -0
  27. package/src/tools/Chat/core/audio/sounds/notification.ts +3 -0
  28. package/src/tools/Chat/core/audio/sounds/received.ts +3 -0
  29. package/src/tools/Chat/core/audio/sounds/sent.ts +3 -0
  30. package/src/tools/Chat/core/audio/sounds/start.ts +3 -0
  31. package/src/tools/Chat/index.ts +15 -0
  32. package/src/tools/SpeechRecognition/core/audio/defaults.ts +4 -4
  33. package/dist/ChatRoot-6IZFM5HM.mjs +0 -5
  34. package/dist/ChatRoot-LW4XNIKP.cjs +0 -14
  35. package/dist/DictationField-2ZLQWLYV.mjs +0 -4
  36. package/dist/DictationField-IPPJ54CU.cjs +0 -13
  37. package/dist/chunk-4LXG3NBV.mjs.map +0 -1
  38. package/dist/chunk-KMSBGNVC.cjs.map +0 -1
  39. package/dist/chunk-OZAU3QWD.cjs.map +0 -1
  40. package/dist/chunk-UWVP6LCW.mjs.map +0 -1
  41. package/src/audio-assets.d.ts +0 -8
  42. package/src/components/markdown/MarkdownMessage/MarkdownMessage.story.tsx +0 -771
  43. package/src/stories/index.ts +0 -63
  44. package/src/tools/AudioPlayer/AudioPlayer.story.tsx +0 -481
  45. package/src/tools/Chat/core/audio/sounds/error.mp3 +0 -0
  46. package/src/tools/Chat/core/audio/sounds/mention.mp3 +0 -0
  47. package/src/tools/Chat/core/audio/sounds/notification.mp3 +0 -0
  48. package/src/tools/Chat/core/audio/sounds/received.mp3 +0 -0
  49. package/src/tools/Chat/core/audio/sounds/sent.mp3 +0 -0
  50. package/src/tools/Chat/core/audio/sounds/start.mp3 +0 -0
  51. package/src/tools/Chat/stories/01-basic.story.tsx +0 -64
  52. package/src/tools/Chat/stories/02-bubbles.story.tsx +0 -21
  53. package/src/tools/Chat/stories/03-tool-calls.story.tsx +0 -59
  54. package/src/tools/Chat/stories/04-personas.story.tsx +0 -78
  55. package/src/tools/Chat/stories/05-launcher.story.tsx +0 -321
  56. package/src/tools/Chat/stories/06-header.story.tsx +0 -147
  57. package/src/tools/Chat/stories/07-audio-actions.story.tsx +0 -112
  58. package/src/tools/Chat/stories/shared/Frame.tsx +0 -21
  59. package/src/tools/Chat/stories/shared/index.ts +0 -5
  60. package/src/tools/Chat/stories/shared/messages.ts +0 -39
  61. package/src/tools/Chat/stories/shared/personas.ts +0 -13
  62. package/src/tools/Chat/stories/shared/seeds.ts +0 -92
  63. package/src/tools/Chat/stories/shared/transports.ts +0 -36
  64. package/src/tools/CodeEditor/CodeEditor.story.tsx +0 -202
  65. package/src/tools/CronScheduler/CronScheduler.story.tsx +0 -300
  66. package/src/tools/Gallery/Gallery.story.tsx +0 -237
  67. package/src/tools/ImageViewer/ImageViewer.story.tsx +0 -85
  68. package/src/tools/JsonForm/JsonForm.story.tsx +0 -350
  69. package/src/tools/JsonTree/JsonTree.story.tsx +0 -141
  70. package/src/tools/LottiePlayer/LottiePlayer.story.tsx +0 -95
  71. package/src/tools/Map/Map.story.tsx +0 -458
  72. package/src/tools/MarkdownEditor/MarkdownEditor.story.tsx +0 -225
  73. package/src/tools/Mermaid/Mermaid.story.tsx +0 -251
  74. package/src/tools/OpenapiViewer/OpenapiViewer.story.tsx +0 -230
  75. package/src/tools/PrettyCode/PrettyCode.story.tsx +0 -304
  76. package/src/tools/SpeechRecognition/stories/01-basic.story.tsx +0 -32
  77. package/src/tools/SpeechRecognition/stories/02-dictation-field.story.tsx +0 -32
  78. package/src/tools/SpeechRecognition/stories/03-push-to-talk.story.tsx +0 -27
  79. package/src/tools/SpeechRecognition/stories/04-mic-meter.story.tsx +0 -35
  80. package/src/tools/SpeechRecognition/stories/05-custom-engine-http.story.tsx +0 -40
  81. package/src/tools/SpeechRecognition/stories/06-custom-engine-ws.story.tsx +0 -48
  82. package/src/tools/SpeechRecognition/stories/07-language-device.story.tsx +0 -57
  83. package/src/tools/SpeechRecognition/stories/08-errors-permissions.story.tsx +0 -25
  84. package/src/tools/SpeechRecognition/stories/09-chat-voice.story.tsx +0 -90
  85. package/src/tools/SpeechRecognition/stories/shared.tsx +0 -123
  86. package/src/tools/Tour/Tour.story.tsx +0 -279
  87. package/src/tools/Tree/Tree.story.tsx +0 -620
  88. package/src/tools/Uploader/Uploader.story.tsx +0 -415
  89. package/src/tools/VideoPlayer/VideoPlayer.story.tsx +0 -87
package/dist/index.cjs CHANGED
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- require('./chunk-KMSBGNVC.cjs');
3
+ var chunk4PFW7MIJ_cjs = require('./chunk-4PFW7MIJ.cjs');
4
4
  var chunkFEN5S772_cjs = require('./chunk-FEN5S772.cjs');
5
5
  var chunkQJ6GTUCO_cjs = require('./chunk-QJ6GTUCO.cjs');
6
6
  var chunkYDPDTOSP_cjs = require('./chunk-YDPDTOSP.cjs');
@@ -8,7 +8,7 @@ var chunkKNDLV4PI_cjs = require('./chunk-KNDLV4PI.cjs');
8
8
  var chunk5I5QNGUG_cjs = require('./chunk-5I5QNGUG.cjs');
9
9
  var chunkYW5IVWHQ_cjs = require('./chunk-YW5IVWHQ.cjs');
10
10
  var chunk76NNDZH6_cjs = require('./chunk-76NNDZH6.cjs');
11
- var chunkOZAU3QWD_cjs = require('./chunk-OZAU3QWD.cjs');
11
+ var chunkHPK3EWBF_cjs = require('./chunk-HPK3EWBF.cjs');
12
12
  var chunkYXZ6GU7H_cjs = require('./chunk-YXZ6GU7H.cjs');
13
13
  var chunkFVVF7VCD_cjs = require('./chunk-FVVF7VCD.cjs');
14
14
  var chunk7EYHNP3E_cjs = require('./chunk-7EYHNP3E.cjs');
@@ -375,7 +375,7 @@ var LazyTree = createLazyComponent(
375
375
  }
376
376
  );
377
377
  var LazyChat = createLazyComponent(
378
- () => import('./ChatRoot-LW4XNIKP.cjs').then((m) => ({ default: m.ChatRoot })),
378
+ () => import('./ChatRoot-LXIUBOXF.cjs').then((m) => ({ default: m.ChatRoot })),
379
379
  {
380
380
  displayName: "LazyChat",
381
381
  fallback: /* @__PURE__ */ jsxRuntime.jsx(LoadingFallback, { minHeight: 320, text: "Loading chat\u2026" })
@@ -412,7 +412,7 @@ async function* parseSSE(response, options = {}) {
412
412
  throw new Error("SSE response has no body");
413
413
  }
414
414
  const map = options.map ?? DEFAULT_MAP;
415
- const idleMs = options.idleTimeoutMs ?? chunkOZAU3QWD_cjs.LIMITS.sseIdleMs;
415
+ const idleMs = options.idleTimeoutMs ?? chunkHPK3EWBF_cjs.LIMITS.sseIdleMs;
416
416
  const reader = response.body.getReader();
417
417
  const decoder = new TextDecoder();
418
418
  let buffer = "";
@@ -627,7 +627,7 @@ function createMockTransport(opts = {}) {
627
627
  async createSession(_opts) {
628
628
  await sleep(latency);
629
629
  return {
630
- sessionId: chunkOZAU3QWD_cjs.createId("s"),
630
+ sessionId: chunkHPK3EWBF_cjs.createId("s"),
631
631
  messages: history.length ? [...history] : void 0,
632
632
  hasMore: false,
633
633
  cursor: null,
@@ -644,12 +644,12 @@ function createMockTransport(opts = {}) {
644
644
  throw new Error("mock transport scripted failure");
645
645
  }
646
646
  history.push({
647
- id: chunkOZAU3QWD_cjs.createId("u"),
647
+ id: chunkHPK3EWBF_cjs.createId("u"),
648
648
  role: "user",
649
649
  content,
650
650
  createdAt: Date.now()
651
651
  });
652
- const messageId = chunkOZAU3QWD_cjs.createId("a");
652
+ const messageId = chunkHPK3EWBF_cjs.createId("a");
653
653
  yield { type: "message_start", messageId, sessionId: _sid };
654
654
  const reply = replies[turn % replies.length];
655
655
  turn += 1;
@@ -678,7 +678,7 @@ function createMockTransport(opts = {}) {
678
678
  turn += 1;
679
679
  const text = typeof reply === "string" ? reply : reply.filter((e) => e.type === "chunk").map((e) => e.delta).join("");
680
680
  return {
681
- id: chunkOZAU3QWD_cjs.createId("a"),
681
+ id: chunkHPK3EWBF_cjs.createId("a"),
682
682
  role: "assistant",
683
683
  content: text || DEFAULT_REPLY,
684
684
  createdAt: Date.now()
@@ -1632,9 +1632,30 @@ var WEB_SPEECH_LANGUAGES = [
1632
1632
  WEB_SPEECH_LANGUAGES.flatMap(
1633
1633
  (l) => l.dialects.map((d) => d.code)
1634
1634
  );
1635
+ function findSpeechLanguage(tag) {
1636
+ if (!tag) return null;
1637
+ const lower = tag.toLowerCase();
1638
+ for (const language of WEB_SPEECH_LANGUAGES) {
1639
+ for (const dialect of language.dialects) {
1640
+ if (dialect.code.toLowerCase() === lower) return { language, dialect };
1641
+ }
1642
+ }
1643
+ return null;
1644
+ }
1645
+ chunkOLISEQHS_cjs.__name(findSpeechLanguage, "findSpeechLanguage");
1646
+ function countryFromTag(tag) {
1647
+ if (!tag) return null;
1648
+ const parts = tag.split("-");
1649
+ for (let i = parts.length - 1; i >= 0; i -= 1) {
1650
+ const p = parts[i];
1651
+ if (p.length === 2 && /^[A-Za-z]{2}$/.test(p)) return p.toUpperCase();
1652
+ }
1653
+ return null;
1654
+ }
1655
+ chunkOLISEQHS_cjs.__name(countryFromTag, "countryFromTag");
1635
1656
  React.createContext(null);
1636
1657
  createLazyComponent(
1637
- () => import('./DictationField-IPPJ54CU.cjs').then((mod) => ({
1658
+ () => import('./DictationField-XWR5VOID.cjs').then((mod) => ({
1638
1659
  default: mod.DictationField
1639
1660
  })),
1640
1661
  {
@@ -1642,6 +1663,93 @@ createLazyComponent(
1642
1663
  fallback: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "rounded-lg border border-border/60 bg-card px-3 py-2 text-xs text-muted-foreground", children: "Loading dictation\u2026" })
1643
1664
  }
1644
1665
  );
1666
+ function ChatHeaderLanguageButton({
1667
+ ariaLabel = "Speech language",
1668
+ allowedTags,
1669
+ hideFallbackIcon,
1670
+ className
1671
+ }) {
1672
+ const prefs = chunk4PFW7MIJ_cjs.useSpeechPrefs();
1673
+ const active = chunk4PFW7MIJ_cjs.useResolvedLanguage();
1674
+ const options = React.useMemo(() => {
1675
+ const allow = allowedTags ? new Set(allowedTags) : null;
1676
+ const out = [];
1677
+ for (const lang of WEB_SPEECH_LANGUAGES) {
1678
+ for (const d of lang.dialects) {
1679
+ if (allow && !allow.has(d.code)) continue;
1680
+ out.push({
1681
+ value: d.code,
1682
+ // "Русский" / "Español — Argentina" / "English — United States"
1683
+ label: lang.dialects.length === 1 ? lang.name : `${lang.name} \u2014 ${d.region}`,
1684
+ // Search-only index: English name, BCP-47 tag, ISO, region.
1685
+ // Lets users type "russian" / "ru-RU" / "ru" / "argentina"
1686
+ // and still find the row regardless of native script.
1687
+ description: `${lang.englishName} ${d.code} ${lang.iso} ${d.region}`.toLowerCase()
1688
+ });
1689
+ }
1690
+ }
1691
+ return out;
1692
+ }, [allowedTags]);
1693
+ return /* @__PURE__ */ jsxRuntime.jsx(
1694
+ components.Combobox,
1695
+ {
1696
+ options,
1697
+ value: prefs.language ?? active,
1698
+ onValueChange: (v) => prefs.setLanguage(v || null),
1699
+ placeholder: ariaLabel,
1700
+ searchPlaceholder: "Search language\u2026",
1701
+ filterFunction: (opt, search) => {
1702
+ const s = search.toLowerCase();
1703
+ return opt.label.toLowerCase().includes(s) || opt.value.toLowerCase().includes(s) || (opt.description?.includes(s) ?? false);
1704
+ },
1705
+ contentClassName: "w-[280px]",
1706
+ contentStyle: { zIndex: 10001 },
1707
+ renderOption: (option) => {
1708
+ const country = countryFromTag(option.value);
1709
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex min-w-0 flex-1 items-center gap-2", children: [
1710
+ country ? /* @__PURE__ */ jsxRuntime.jsx(
1711
+ components.Flag,
1712
+ {
1713
+ countryCode: country,
1714
+ className: "h-4 w-5 shrink-0 overflow-hidden rounded-[2px] border border-border/60 ring-1 ring-black/5"
1715
+ }
1716
+ ) : /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Globe, { className: "h-4 w-4 shrink-0 text-muted-foreground", "aria-hidden": true }),
1717
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "truncate text-sm", children: option.label })
1718
+ ] });
1719
+ },
1720
+ renderTrigger: (selected, open) => {
1721
+ const tag = selected?.value ?? active;
1722
+ const country = countryFromTag(tag);
1723
+ const found = findSpeechLanguage(tag);
1724
+ const tooltipLabel = found ? `${found.language.name}${found.language.dialects.length > 1 ? ` \u2014 ${found.dialect.region}` : ""} \xB7 ${tag}` : tag;
1725
+ return /* @__PURE__ */ jsxRuntime.jsx(
1726
+ "button",
1727
+ {
1728
+ type: "button",
1729
+ "aria-label": `${ariaLabel}: ${tooltipLabel}`,
1730
+ "aria-expanded": open,
1731
+ title: tooltipLabel,
1732
+ className: lib.cn(
1733
+ "inline-flex h-7 w-7 items-center justify-center rounded-md",
1734
+ "text-muted-foreground transition-colors",
1735
+ "hover:bg-accent hover:text-foreground",
1736
+ "focus:outline-none focus-visible:ring-2 focus-visible:ring-ring",
1737
+ className
1738
+ ),
1739
+ children: country ? /* @__PURE__ */ jsxRuntime.jsx(
1740
+ components.Flag,
1741
+ {
1742
+ countryCode: country,
1743
+ className: "h-4 w-5 overflow-hidden rounded-[2px] border border-border/60 ring-1 ring-black/5"
1744
+ }
1745
+ ) : hideFallbackIcon ? null : /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Globe, { className: "h-3.5 w-3.5", "aria-hidden": true })
1746
+ }
1747
+ );
1748
+ }
1749
+ }
1750
+ );
1751
+ }
1752
+ chunkOLISEQHS_cjs.__name(ChatHeaderLanguageButton, "ChatHeaderLanguageButton");
1645
1753
  function anchorStyle(position, fabOffset, fabClearance) {
1646
1754
  const [vert, horiz] = position.split("-");
1647
1755
  return { [vert]: fabClearance, [horiz]: fabOffset };
@@ -2211,6 +2319,33 @@ function useChatDockPrefs(opts = {}) {
2211
2319
  return { ...prefs, setPrefs, toggleMode, toggleSide, reset };
2212
2320
  }
2213
2321
  chunkOLISEQHS_cjs.__name(useChatDockPrefs, "useChatDockPrefs");
2322
+ function useChatUnread(opts = {}) {
2323
+ const { open = false, countRoles = ["assistant"] } = opts;
2324
+ const ctx = chunkHPK3EWBF_cjs.useChatContext();
2325
+ const [lastSeenId, setLastSeenId] = React.useState(null);
2326
+ const initialized = React.useRef(false);
2327
+ React.useEffect(() => {
2328
+ if (initialized.current) return;
2329
+ initialized.current = true;
2330
+ const tail = ctx.messages[ctx.messages.length - 1];
2331
+ setLastSeenId(tail?.id ?? null);
2332
+ }, [ctx.messages]);
2333
+ React.useEffect(() => {
2334
+ if (!open) return;
2335
+ const tail = ctx.messages[ctx.messages.length - 1];
2336
+ setLastSeenId(tail?.id ?? null);
2337
+ }, [open, ctx.messages]);
2338
+ const seenIdx = lastSeenId ? ctx.messages.findIndex((m) => m.id === lastSeenId) : -1;
2339
+ const after = seenIdx === -1 ? ctx.messages : ctx.messages.slice(seenIdx + 1);
2340
+ const inbound = after.filter((m) => countRoles.includes(m.role));
2341
+ const unread = inbound.length > 0 ? inbound[inbound.length - 1] : null;
2342
+ const markRead = React.useCallback(() => {
2343
+ const tail = ctx.messages[ctx.messages.length - 1];
2344
+ setLastSeenId(tail?.id ?? null);
2345
+ }, [ctx.messages]);
2346
+ return { unread, count: inbound.length, markRead };
2347
+ }
2348
+ chunkOLISEQHS_cjs.__name(useChatUnread, "useChatUnread");
2214
2349
  var STORAGE_KEY = "djangocfg-chat-audio:prefs";
2215
2350
  var useChatAudioPrefs = hooks.createAudioPrefsStore(STORAGE_KEY);
2216
2351
 
@@ -2261,7 +2396,7 @@ function AudioToggle({
2261
2396
  }) {
2262
2397
  const muted = useChatAudioPrefs((s) => s.muted);
2263
2398
  const setMuted = useChatAudioPrefs((s) => s.setMuted);
2264
- const ctx = chunkOZAU3QWD_cjs.useChatContextOptional();
2399
+ const ctx = chunkHPK3EWBF_cjs.useChatContextOptional();
2265
2400
  if (ctx && !ctx.hasAudio && !alwaysShow) return null;
2266
2401
  const Icon = muted ? lucideReact.VolumeX : lucideReact.Volume2;
2267
2402
  const label = muted ? "Unmute chat sounds" : "Mute chat sounds";
@@ -3629,183 +3764,183 @@ Object.defineProperty(exports, "useCronWeekDays", {
3629
3764
  });
3630
3765
  Object.defineProperty(exports, "Attachments", {
3631
3766
  enumerable: true,
3632
- get: function () { return chunkOZAU3QWD_cjs.Attachments; }
3767
+ get: function () { return chunkHPK3EWBF_cjs.Attachments; }
3633
3768
  });
3634
3769
  Object.defineProperty(exports, "AttachmentsGrid", {
3635
3770
  enumerable: true,
3636
- get: function () { return chunkOZAU3QWD_cjs.AttachmentsGrid; }
3771
+ get: function () { return chunkHPK3EWBF_cjs.AttachmentsGrid; }
3637
3772
  });
3638
3773
  Object.defineProperty(exports, "AttachmentsList", {
3639
3774
  enumerable: true,
3640
- get: function () { return chunkOZAU3QWD_cjs.AttachmentsList; }
3775
+ get: function () { return chunkHPK3EWBF_cjs.AttachmentsList; }
3641
3776
  });
3642
3777
  Object.defineProperty(exports, "CHAT_EVENT_NAME", {
3643
3778
  enumerable: true,
3644
- get: function () { return chunkOZAU3QWD_cjs.CHAT_EVENT_NAME; }
3779
+ get: function () { return chunkHPK3EWBF_cjs.CHAT_EVENT_NAME; }
3645
3780
  });
3646
3781
  Object.defineProperty(exports, "CSS_VARS", {
3647
3782
  enumerable: true,
3648
- get: function () { return chunkOZAU3QWD_cjs.CSS_VARS; }
3783
+ get: function () { return chunkHPK3EWBF_cjs.CSS_VARS; }
3649
3784
  });
3650
3785
  Object.defineProperty(exports, "ChatProvider", {
3651
3786
  enumerable: true,
3652
- get: function () { return chunkOZAU3QWD_cjs.ChatProvider; }
3787
+ get: function () { return chunkHPK3EWBF_cjs.ChatProvider; }
3653
3788
  });
3654
3789
  Object.defineProperty(exports, "ChatRoot", {
3655
3790
  enumerable: true,
3656
- get: function () { return chunkOZAU3QWD_cjs.ChatRoot; }
3791
+ get: function () { return chunkHPK3EWBF_cjs.ChatRoot; }
3657
3792
  });
3658
3793
  Object.defineProperty(exports, "Composer", {
3659
3794
  enumerable: true,
3660
- get: function () { return chunkOZAU3QWD_cjs.Composer; }
3795
+ get: function () { return chunkHPK3EWBF_cjs.Composer; }
3661
3796
  });
3662
3797
  Object.defineProperty(exports, "DEFAULT_CHAT_SOUNDS", {
3663
3798
  enumerable: true,
3664
- get: function () { return chunkOZAU3QWD_cjs.DEFAULT_CHAT_SOUNDS; }
3799
+ get: function () { return chunkHPK3EWBF_cjs.DEFAULT_CHAT_SOUNDS; }
3665
3800
  });
3666
3801
  Object.defineProperty(exports, "DEFAULT_LABELS", {
3667
3802
  enumerable: true,
3668
- get: function () { return chunkOZAU3QWD_cjs.DEFAULT_LABELS; }
3803
+ get: function () { return chunkHPK3EWBF_cjs.DEFAULT_LABELS; }
3669
3804
  });
3670
3805
  Object.defineProperty(exports, "DEFAULT_SIDEBAR", {
3671
3806
  enumerable: true,
3672
- get: function () { return chunkOZAU3QWD_cjs.DEFAULT_SIDEBAR; }
3807
+ get: function () { return chunkHPK3EWBF_cjs.DEFAULT_SIDEBAR; }
3673
3808
  });
3674
3809
  Object.defineProperty(exports, "DEFAULT_Z_INDEX", {
3675
3810
  enumerable: true,
3676
- get: function () { return chunkOZAU3QWD_cjs.DEFAULT_Z_INDEX; }
3811
+ get: function () { return chunkHPK3EWBF_cjs.DEFAULT_Z_INDEX; }
3677
3812
  });
3678
3813
  Object.defineProperty(exports, "EmptyState", {
3679
3814
  enumerable: true,
3680
- get: function () { return chunkOZAU3QWD_cjs.EmptyState; }
3815
+ get: function () { return chunkHPK3EWBF_cjs.EmptyState; }
3681
3816
  });
3682
3817
  Object.defineProperty(exports, "ErrorBanner", {
3683
3818
  enumerable: true,
3684
- get: function () { return chunkOZAU3QWD_cjs.ErrorBanner; }
3819
+ get: function () { return chunkHPK3EWBF_cjs.ErrorBanner; }
3685
3820
  });
3686
3821
  Object.defineProperty(exports, "HOTKEYS", {
3687
3822
  enumerable: true,
3688
- get: function () { return chunkOZAU3QWD_cjs.HOTKEYS; }
3823
+ get: function () { return chunkHPK3EWBF_cjs.HOTKEYS; }
3689
3824
  });
3690
3825
  Object.defineProperty(exports, "JumpToLatest", {
3691
3826
  enumerable: true,
3692
- get: function () { return chunkOZAU3QWD_cjs.JumpToLatest; }
3827
+ get: function () { return chunkHPK3EWBF_cjs.JumpToLatest; }
3693
3828
  });
3694
3829
  Object.defineProperty(exports, "LIMITS", {
3695
3830
  enumerable: true,
3696
- get: function () { return chunkOZAU3QWD_cjs.LIMITS; }
3831
+ get: function () { return chunkHPK3EWBF_cjs.LIMITS; }
3697
3832
  });
3698
3833
  Object.defineProperty(exports, "MessageActions", {
3699
3834
  enumerable: true,
3700
- get: function () { return chunkOZAU3QWD_cjs.MessageActions; }
3835
+ get: function () { return chunkHPK3EWBF_cjs.MessageActions; }
3701
3836
  });
3702
3837
  Object.defineProperty(exports, "MessageBubble", {
3703
3838
  enumerable: true,
3704
- get: function () { return chunkOZAU3QWD_cjs.MessageBubble; }
3839
+ get: function () { return chunkHPK3EWBF_cjs.MessageBubble; }
3705
3840
  });
3706
3841
  Object.defineProperty(exports, "MessageList", {
3707
3842
  enumerable: true,
3708
- get: function () { return chunkOZAU3QWD_cjs.MessageList; }
3843
+ get: function () { return chunkHPK3EWBF_cjs.MessageList; }
3709
3844
  });
3710
3845
  Object.defineProperty(exports, "STORAGE_KEYS", {
3711
3846
  enumerable: true,
3712
- get: function () { return chunkOZAU3QWD_cjs.STORAGE_KEYS; }
3847
+ get: function () { return chunkHPK3EWBF_cjs.STORAGE_KEYS; }
3713
3848
  });
3714
3849
  Object.defineProperty(exports, "Sources", {
3715
3850
  enumerable: true,
3716
- get: function () { return chunkOZAU3QWD_cjs.Sources; }
3851
+ get: function () { return chunkHPK3EWBF_cjs.Sources; }
3717
3852
  });
3718
3853
  Object.defineProperty(exports, "StreamingIndicator", {
3719
3854
  enumerable: true,
3720
- get: function () { return chunkOZAU3QWD_cjs.StreamingIndicator; }
3855
+ get: function () { return chunkHPK3EWBF_cjs.StreamingIndicator; }
3721
3856
  });
3722
3857
  Object.defineProperty(exports, "ToolCalls", {
3723
3858
  enumerable: true,
3724
- get: function () { return chunkOZAU3QWD_cjs.ToolCalls; }
3859
+ get: function () { return chunkHPK3EWBF_cjs.ToolCalls; }
3725
3860
  });
3726
3861
  Object.defineProperty(exports, "createId", {
3727
3862
  enumerable: true,
3728
- get: function () { return chunkOZAU3QWD_cjs.createId; }
3863
+ get: function () { return chunkHPK3EWBF_cjs.createId; }
3729
3864
  });
3730
3865
  Object.defineProperty(exports, "createTokenBuffer", {
3731
3866
  enumerable: true,
3732
- get: function () { return chunkOZAU3QWD_cjs.createTokenBuffer; }
3867
+ get: function () { return chunkHPK3EWBF_cjs.createTokenBuffer; }
3733
3868
  });
3734
3869
  Object.defineProperty(exports, "deriveInitials", {
3735
3870
  enumerable: true,
3736
- get: function () { return chunkOZAU3QWD_cjs.deriveInitials; }
3871
+ get: function () { return chunkHPK3EWBF_cjs.deriveInitials; }
3737
3872
  });
3738
3873
  Object.defineProperty(exports, "getChatLogger", {
3739
3874
  enumerable: true,
3740
- get: function () { return chunkOZAU3QWD_cjs.getChatLogger; }
3875
+ get: function () { return chunkHPK3EWBF_cjs.getChatLogger; }
3741
3876
  });
3742
3877
  Object.defineProperty(exports, "initialState", {
3743
3878
  enumerable: true,
3744
- get: function () { return chunkOZAU3QWD_cjs.initialState; }
3879
+ get: function () { return chunkHPK3EWBF_cjs.initialState; }
3745
3880
  });
3746
3881
  Object.defineProperty(exports, "isSubmittableDraft", {
3747
3882
  enumerable: true,
3748
- get: function () { return chunkOZAU3QWD_cjs.isSubmittableDraft; }
3883
+ get: function () { return chunkHPK3EWBF_cjs.isSubmittableDraft; }
3749
3884
  });
3750
3885
  Object.defineProperty(exports, "reducer", {
3751
3886
  enumerable: true,
3752
- get: function () { return chunkOZAU3QWD_cjs.reducer; }
3887
+ get: function () { return chunkHPK3EWBF_cjs.reducer; }
3753
3888
  });
3754
3889
  Object.defineProperty(exports, "resolvePersona", {
3755
3890
  enumerable: true,
3756
- get: function () { return chunkOZAU3QWD_cjs.resolvePersona; }
3891
+ get: function () { return chunkHPK3EWBF_cjs.resolvePersona; }
3757
3892
  });
3758
3893
  Object.defineProperty(exports, "sanitizeDraft", {
3759
3894
  enumerable: true,
3760
- get: function () { return chunkOZAU3QWD_cjs.sanitizeDraft; }
3895
+ get: function () { return chunkHPK3EWBF_cjs.sanitizeDraft; }
3761
3896
  });
3762
3897
  Object.defineProperty(exports, "useAutoFocusOnStreamEnd", {
3763
3898
  enumerable: true,
3764
- get: function () { return chunkOZAU3QWD_cjs.useAutoFocusOnStreamEnd; }
3899
+ get: function () { return chunkHPK3EWBF_cjs.useAutoFocusOnStreamEnd; }
3765
3900
  });
3766
3901
  Object.defineProperty(exports, "useChat", {
3767
3902
  enumerable: true,
3768
- get: function () { return chunkOZAU3QWD_cjs.useChat; }
3903
+ get: function () { return chunkHPK3EWBF_cjs.useChat; }
3769
3904
  });
3770
3905
  Object.defineProperty(exports, "useChatAudio", {
3771
3906
  enumerable: true,
3772
- get: function () { return chunkOZAU3QWD_cjs.useChatAudio; }
3907
+ get: function () { return chunkHPK3EWBF_cjs.useChatAudio; }
3773
3908
  });
3774
3909
  Object.defineProperty(exports, "useChatBubbleStyles", {
3775
3910
  enumerable: true,
3776
- get: function () { return chunkOZAU3QWD_cjs.useChatBubbleStyles; }
3911
+ get: function () { return chunkHPK3EWBF_cjs.useChatBubbleStyles; }
3777
3912
  });
3778
3913
  Object.defineProperty(exports, "useChatComposer", {
3779
3914
  enumerable: true,
3780
- get: function () { return chunkOZAU3QWD_cjs.useChatComposer; }
3915
+ get: function () { return chunkHPK3EWBF_cjs.useChatComposer; }
3781
3916
  });
3782
3917
  Object.defineProperty(exports, "useChatContext", {
3783
3918
  enumerable: true,
3784
- get: function () { return chunkOZAU3QWD_cjs.useChatContext; }
3919
+ get: function () { return chunkHPK3EWBF_cjs.useChatContext; }
3785
3920
  });
3786
3921
  Object.defineProperty(exports, "useChatContextOptional", {
3787
3922
  enumerable: true,
3788
- get: function () { return chunkOZAU3QWD_cjs.useChatContextOptional; }
3923
+ get: function () { return chunkHPK3EWBF_cjs.useChatContextOptional; }
3789
3924
  });
3790
3925
  Object.defineProperty(exports, "useChatDestructiveStyles", {
3791
3926
  enumerable: true,
3792
- get: function () { return chunkOZAU3QWD_cjs.useChatDestructiveStyles; }
3927
+ get: function () { return chunkHPK3EWBF_cjs.useChatDestructiveStyles; }
3793
3928
  });
3794
3929
  Object.defineProperty(exports, "useChatLayout", {
3795
3930
  enumerable: true,
3796
- get: function () { return chunkOZAU3QWD_cjs.useChatLayout; }
3931
+ get: function () { return chunkHPK3EWBF_cjs.useChatLayout; }
3797
3932
  });
3798
3933
  Object.defineProperty(exports, "useChatRoleStyles", {
3799
3934
  enumerable: true,
3800
- get: function () { return chunkOZAU3QWD_cjs.useChatRoleStyles; }
3935
+ get: function () { return chunkHPK3EWBF_cjs.useChatRoleStyles; }
3801
3936
  });
3802
3937
  Object.defineProperty(exports, "useFocusOnEmptyClick", {
3803
3938
  enumerable: true,
3804
- get: function () { return chunkOZAU3QWD_cjs.useFocusOnEmptyClick; }
3939
+ get: function () { return chunkHPK3EWBF_cjs.useFocusOnEmptyClick; }
3805
3940
  });
3806
3941
  Object.defineProperty(exports, "useRegisterComposer", {
3807
3942
  enumerable: true,
3808
- get: function () { return chunkOZAU3QWD_cjs.useRegisterComposer; }
3943
+ get: function () { return chunkHPK3EWBF_cjs.useRegisterComposer; }
3809
3944
  });
3810
3945
  Object.defineProperty(exports, "TreeError", {
3811
3946
  enumerable: true,
@@ -3995,6 +4130,7 @@ exports.ChatGreeting = ChatGreeting;
3995
4130
  exports.ChatHeader = ChatHeader;
3996
4131
  exports.ChatHeaderActionButton = ChatHeaderActionButton;
3997
4132
  exports.ChatHeaderAudioToggle = ChatHeaderAudioToggle;
4133
+ exports.ChatHeaderLanguageButton = ChatHeaderLanguageButton;
3998
4134
  exports.ChatHeaderModeToggle = ChatHeaderModeToggle;
3999
4135
  exports.ChatHeaderResetButton = ChatHeaderResetButton;
4000
4136
  exports.ChatLauncher = ChatLauncher;
@@ -4048,6 +4184,7 @@ exports.useChatLightbox = useChatLightbox;
4048
4184
  exports.useChatPresence = useChatPresence;
4049
4185
  exports.useChatReset = useChatReset;
4050
4186
  exports.useChatScroll = useChatScroll;
4187
+ exports.useChatUnread = useChatUnread;
4051
4188
  exports.useEditor = useEditor;
4052
4189
  exports.useEditorContext = useEditorContext;
4053
4190
  exports.useLanguage = useLanguage;