@djangocfg/ui-tools 2.1.383 → 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 (32) 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/{chunk-OZAU3QWD.cjs → chunk-HPK3EWBF.cjs} +8 -8
  6. package/dist/chunk-HPK3EWBF.cjs.map +1 -0
  7. package/dist/{chunk-UWVP6LCW.mjs → chunk-PEKBT75W.mjs} +8 -8
  8. package/dist/chunk-PEKBT75W.mjs.map +1 -0
  9. package/dist/index.cjs +54 -54
  10. package/dist/index.d.cts +12 -7
  11. package/dist/index.d.ts +12 -7
  12. package/dist/index.mjs +3 -3
  13. package/package.json +6 -6
  14. package/src/tools/Chat/core/audio/defaults.ts +16 -11
  15. package/src/tools/Chat/core/audio/sounds/error.ts +3 -0
  16. package/src/tools/Chat/core/audio/sounds/mention.ts +3 -0
  17. package/src/tools/Chat/core/audio/sounds/notification.ts +3 -0
  18. package/src/tools/Chat/core/audio/sounds/received.ts +3 -0
  19. package/src/tools/Chat/core/audio/sounds/sent.ts +3 -0
  20. package/src/tools/Chat/core/audio/sounds/start.ts +3 -0
  21. package/src/tools/SpeechRecognition/core/audio/defaults.ts +4 -4
  22. package/dist/ChatRoot-6IZFM5HM.mjs +0 -5
  23. package/dist/ChatRoot-LW4XNIKP.cjs +0 -14
  24. package/dist/chunk-OZAU3QWD.cjs.map +0 -1
  25. package/dist/chunk-UWVP6LCW.mjs.map +0 -1
  26. package/src/audio-assets.d.ts +0 -8
  27. package/src/tools/Chat/core/audio/sounds/error.mp3 +0 -0
  28. package/src/tools/Chat/core/audio/sounds/mention.mp3 +0 -0
  29. package/src/tools/Chat/core/audio/sounds/notification.mp3 +0 -0
  30. package/src/tools/Chat/core/audio/sounds/received.mp3 +0 -0
  31. package/src/tools/Chat/core/audio/sounds/sent.mp3 +0 -0
  32. package/src/tools/Chat/core/audio/sounds/start.mp3 +0 -0
package/dist/index.cjs CHANGED
@@ -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()
@@ -2321,7 +2321,7 @@ function useChatDockPrefs(opts = {}) {
2321
2321
  chunkOLISEQHS_cjs.__name(useChatDockPrefs, "useChatDockPrefs");
2322
2322
  function useChatUnread(opts = {}) {
2323
2323
  const { open = false, countRoles = ["assistant"] } = opts;
2324
- const ctx = chunkOZAU3QWD_cjs.useChatContext();
2324
+ const ctx = chunkHPK3EWBF_cjs.useChatContext();
2325
2325
  const [lastSeenId, setLastSeenId] = React.useState(null);
2326
2326
  const initialized = React.useRef(false);
2327
2327
  React.useEffect(() => {
@@ -2396,7 +2396,7 @@ function AudioToggle({
2396
2396
  }) {
2397
2397
  const muted = useChatAudioPrefs((s) => s.muted);
2398
2398
  const setMuted = useChatAudioPrefs((s) => s.setMuted);
2399
- const ctx = chunkOZAU3QWD_cjs.useChatContextOptional();
2399
+ const ctx = chunkHPK3EWBF_cjs.useChatContextOptional();
2400
2400
  if (ctx && !ctx.hasAudio && !alwaysShow) return null;
2401
2401
  const Icon = muted ? lucideReact.VolumeX : lucideReact.Volume2;
2402
2402
  const label = muted ? "Unmute chat sounds" : "Mute chat sounds";
@@ -3764,183 +3764,183 @@ Object.defineProperty(exports, "useCronWeekDays", {
3764
3764
  });
3765
3765
  Object.defineProperty(exports, "Attachments", {
3766
3766
  enumerable: true,
3767
- get: function () { return chunkOZAU3QWD_cjs.Attachments; }
3767
+ get: function () { return chunkHPK3EWBF_cjs.Attachments; }
3768
3768
  });
3769
3769
  Object.defineProperty(exports, "AttachmentsGrid", {
3770
3770
  enumerable: true,
3771
- get: function () { return chunkOZAU3QWD_cjs.AttachmentsGrid; }
3771
+ get: function () { return chunkHPK3EWBF_cjs.AttachmentsGrid; }
3772
3772
  });
3773
3773
  Object.defineProperty(exports, "AttachmentsList", {
3774
3774
  enumerable: true,
3775
- get: function () { return chunkOZAU3QWD_cjs.AttachmentsList; }
3775
+ get: function () { return chunkHPK3EWBF_cjs.AttachmentsList; }
3776
3776
  });
3777
3777
  Object.defineProperty(exports, "CHAT_EVENT_NAME", {
3778
3778
  enumerable: true,
3779
- get: function () { return chunkOZAU3QWD_cjs.CHAT_EVENT_NAME; }
3779
+ get: function () { return chunkHPK3EWBF_cjs.CHAT_EVENT_NAME; }
3780
3780
  });
3781
3781
  Object.defineProperty(exports, "CSS_VARS", {
3782
3782
  enumerable: true,
3783
- get: function () { return chunkOZAU3QWD_cjs.CSS_VARS; }
3783
+ get: function () { return chunkHPK3EWBF_cjs.CSS_VARS; }
3784
3784
  });
3785
3785
  Object.defineProperty(exports, "ChatProvider", {
3786
3786
  enumerable: true,
3787
- get: function () { return chunkOZAU3QWD_cjs.ChatProvider; }
3787
+ get: function () { return chunkHPK3EWBF_cjs.ChatProvider; }
3788
3788
  });
3789
3789
  Object.defineProperty(exports, "ChatRoot", {
3790
3790
  enumerable: true,
3791
- get: function () { return chunkOZAU3QWD_cjs.ChatRoot; }
3791
+ get: function () { return chunkHPK3EWBF_cjs.ChatRoot; }
3792
3792
  });
3793
3793
  Object.defineProperty(exports, "Composer", {
3794
3794
  enumerable: true,
3795
- get: function () { return chunkOZAU3QWD_cjs.Composer; }
3795
+ get: function () { return chunkHPK3EWBF_cjs.Composer; }
3796
3796
  });
3797
3797
  Object.defineProperty(exports, "DEFAULT_CHAT_SOUNDS", {
3798
3798
  enumerable: true,
3799
- get: function () { return chunkOZAU3QWD_cjs.DEFAULT_CHAT_SOUNDS; }
3799
+ get: function () { return chunkHPK3EWBF_cjs.DEFAULT_CHAT_SOUNDS; }
3800
3800
  });
3801
3801
  Object.defineProperty(exports, "DEFAULT_LABELS", {
3802
3802
  enumerable: true,
3803
- get: function () { return chunkOZAU3QWD_cjs.DEFAULT_LABELS; }
3803
+ get: function () { return chunkHPK3EWBF_cjs.DEFAULT_LABELS; }
3804
3804
  });
3805
3805
  Object.defineProperty(exports, "DEFAULT_SIDEBAR", {
3806
3806
  enumerable: true,
3807
- get: function () { return chunkOZAU3QWD_cjs.DEFAULT_SIDEBAR; }
3807
+ get: function () { return chunkHPK3EWBF_cjs.DEFAULT_SIDEBAR; }
3808
3808
  });
3809
3809
  Object.defineProperty(exports, "DEFAULT_Z_INDEX", {
3810
3810
  enumerable: true,
3811
- get: function () { return chunkOZAU3QWD_cjs.DEFAULT_Z_INDEX; }
3811
+ get: function () { return chunkHPK3EWBF_cjs.DEFAULT_Z_INDEX; }
3812
3812
  });
3813
3813
  Object.defineProperty(exports, "EmptyState", {
3814
3814
  enumerable: true,
3815
- get: function () { return chunkOZAU3QWD_cjs.EmptyState; }
3815
+ get: function () { return chunkHPK3EWBF_cjs.EmptyState; }
3816
3816
  });
3817
3817
  Object.defineProperty(exports, "ErrorBanner", {
3818
3818
  enumerable: true,
3819
- get: function () { return chunkOZAU3QWD_cjs.ErrorBanner; }
3819
+ get: function () { return chunkHPK3EWBF_cjs.ErrorBanner; }
3820
3820
  });
3821
3821
  Object.defineProperty(exports, "HOTKEYS", {
3822
3822
  enumerable: true,
3823
- get: function () { return chunkOZAU3QWD_cjs.HOTKEYS; }
3823
+ get: function () { return chunkHPK3EWBF_cjs.HOTKEYS; }
3824
3824
  });
3825
3825
  Object.defineProperty(exports, "JumpToLatest", {
3826
3826
  enumerable: true,
3827
- get: function () { return chunkOZAU3QWD_cjs.JumpToLatest; }
3827
+ get: function () { return chunkHPK3EWBF_cjs.JumpToLatest; }
3828
3828
  });
3829
3829
  Object.defineProperty(exports, "LIMITS", {
3830
3830
  enumerable: true,
3831
- get: function () { return chunkOZAU3QWD_cjs.LIMITS; }
3831
+ get: function () { return chunkHPK3EWBF_cjs.LIMITS; }
3832
3832
  });
3833
3833
  Object.defineProperty(exports, "MessageActions", {
3834
3834
  enumerable: true,
3835
- get: function () { return chunkOZAU3QWD_cjs.MessageActions; }
3835
+ get: function () { return chunkHPK3EWBF_cjs.MessageActions; }
3836
3836
  });
3837
3837
  Object.defineProperty(exports, "MessageBubble", {
3838
3838
  enumerable: true,
3839
- get: function () { return chunkOZAU3QWD_cjs.MessageBubble; }
3839
+ get: function () { return chunkHPK3EWBF_cjs.MessageBubble; }
3840
3840
  });
3841
3841
  Object.defineProperty(exports, "MessageList", {
3842
3842
  enumerable: true,
3843
- get: function () { return chunkOZAU3QWD_cjs.MessageList; }
3843
+ get: function () { return chunkHPK3EWBF_cjs.MessageList; }
3844
3844
  });
3845
3845
  Object.defineProperty(exports, "STORAGE_KEYS", {
3846
3846
  enumerable: true,
3847
- get: function () { return chunkOZAU3QWD_cjs.STORAGE_KEYS; }
3847
+ get: function () { return chunkHPK3EWBF_cjs.STORAGE_KEYS; }
3848
3848
  });
3849
3849
  Object.defineProperty(exports, "Sources", {
3850
3850
  enumerable: true,
3851
- get: function () { return chunkOZAU3QWD_cjs.Sources; }
3851
+ get: function () { return chunkHPK3EWBF_cjs.Sources; }
3852
3852
  });
3853
3853
  Object.defineProperty(exports, "StreamingIndicator", {
3854
3854
  enumerable: true,
3855
- get: function () { return chunkOZAU3QWD_cjs.StreamingIndicator; }
3855
+ get: function () { return chunkHPK3EWBF_cjs.StreamingIndicator; }
3856
3856
  });
3857
3857
  Object.defineProperty(exports, "ToolCalls", {
3858
3858
  enumerable: true,
3859
- get: function () { return chunkOZAU3QWD_cjs.ToolCalls; }
3859
+ get: function () { return chunkHPK3EWBF_cjs.ToolCalls; }
3860
3860
  });
3861
3861
  Object.defineProperty(exports, "createId", {
3862
3862
  enumerable: true,
3863
- get: function () { return chunkOZAU3QWD_cjs.createId; }
3863
+ get: function () { return chunkHPK3EWBF_cjs.createId; }
3864
3864
  });
3865
3865
  Object.defineProperty(exports, "createTokenBuffer", {
3866
3866
  enumerable: true,
3867
- get: function () { return chunkOZAU3QWD_cjs.createTokenBuffer; }
3867
+ get: function () { return chunkHPK3EWBF_cjs.createTokenBuffer; }
3868
3868
  });
3869
3869
  Object.defineProperty(exports, "deriveInitials", {
3870
3870
  enumerable: true,
3871
- get: function () { return chunkOZAU3QWD_cjs.deriveInitials; }
3871
+ get: function () { return chunkHPK3EWBF_cjs.deriveInitials; }
3872
3872
  });
3873
3873
  Object.defineProperty(exports, "getChatLogger", {
3874
3874
  enumerable: true,
3875
- get: function () { return chunkOZAU3QWD_cjs.getChatLogger; }
3875
+ get: function () { return chunkHPK3EWBF_cjs.getChatLogger; }
3876
3876
  });
3877
3877
  Object.defineProperty(exports, "initialState", {
3878
3878
  enumerable: true,
3879
- get: function () { return chunkOZAU3QWD_cjs.initialState; }
3879
+ get: function () { return chunkHPK3EWBF_cjs.initialState; }
3880
3880
  });
3881
3881
  Object.defineProperty(exports, "isSubmittableDraft", {
3882
3882
  enumerable: true,
3883
- get: function () { return chunkOZAU3QWD_cjs.isSubmittableDraft; }
3883
+ get: function () { return chunkHPK3EWBF_cjs.isSubmittableDraft; }
3884
3884
  });
3885
3885
  Object.defineProperty(exports, "reducer", {
3886
3886
  enumerable: true,
3887
- get: function () { return chunkOZAU3QWD_cjs.reducer; }
3887
+ get: function () { return chunkHPK3EWBF_cjs.reducer; }
3888
3888
  });
3889
3889
  Object.defineProperty(exports, "resolvePersona", {
3890
3890
  enumerable: true,
3891
- get: function () { return chunkOZAU3QWD_cjs.resolvePersona; }
3891
+ get: function () { return chunkHPK3EWBF_cjs.resolvePersona; }
3892
3892
  });
3893
3893
  Object.defineProperty(exports, "sanitizeDraft", {
3894
3894
  enumerable: true,
3895
- get: function () { return chunkOZAU3QWD_cjs.sanitizeDraft; }
3895
+ get: function () { return chunkHPK3EWBF_cjs.sanitizeDraft; }
3896
3896
  });
3897
3897
  Object.defineProperty(exports, "useAutoFocusOnStreamEnd", {
3898
3898
  enumerable: true,
3899
- get: function () { return chunkOZAU3QWD_cjs.useAutoFocusOnStreamEnd; }
3899
+ get: function () { return chunkHPK3EWBF_cjs.useAutoFocusOnStreamEnd; }
3900
3900
  });
3901
3901
  Object.defineProperty(exports, "useChat", {
3902
3902
  enumerable: true,
3903
- get: function () { return chunkOZAU3QWD_cjs.useChat; }
3903
+ get: function () { return chunkHPK3EWBF_cjs.useChat; }
3904
3904
  });
3905
3905
  Object.defineProperty(exports, "useChatAudio", {
3906
3906
  enumerable: true,
3907
- get: function () { return chunkOZAU3QWD_cjs.useChatAudio; }
3907
+ get: function () { return chunkHPK3EWBF_cjs.useChatAudio; }
3908
3908
  });
3909
3909
  Object.defineProperty(exports, "useChatBubbleStyles", {
3910
3910
  enumerable: true,
3911
- get: function () { return chunkOZAU3QWD_cjs.useChatBubbleStyles; }
3911
+ get: function () { return chunkHPK3EWBF_cjs.useChatBubbleStyles; }
3912
3912
  });
3913
3913
  Object.defineProperty(exports, "useChatComposer", {
3914
3914
  enumerable: true,
3915
- get: function () { return chunkOZAU3QWD_cjs.useChatComposer; }
3915
+ get: function () { return chunkHPK3EWBF_cjs.useChatComposer; }
3916
3916
  });
3917
3917
  Object.defineProperty(exports, "useChatContext", {
3918
3918
  enumerable: true,
3919
- get: function () { return chunkOZAU3QWD_cjs.useChatContext; }
3919
+ get: function () { return chunkHPK3EWBF_cjs.useChatContext; }
3920
3920
  });
3921
3921
  Object.defineProperty(exports, "useChatContextOptional", {
3922
3922
  enumerable: true,
3923
- get: function () { return chunkOZAU3QWD_cjs.useChatContextOptional; }
3923
+ get: function () { return chunkHPK3EWBF_cjs.useChatContextOptional; }
3924
3924
  });
3925
3925
  Object.defineProperty(exports, "useChatDestructiveStyles", {
3926
3926
  enumerable: true,
3927
- get: function () { return chunkOZAU3QWD_cjs.useChatDestructiveStyles; }
3927
+ get: function () { return chunkHPK3EWBF_cjs.useChatDestructiveStyles; }
3928
3928
  });
3929
3929
  Object.defineProperty(exports, "useChatLayout", {
3930
3930
  enumerable: true,
3931
- get: function () { return chunkOZAU3QWD_cjs.useChatLayout; }
3931
+ get: function () { return chunkHPK3EWBF_cjs.useChatLayout; }
3932
3932
  });
3933
3933
  Object.defineProperty(exports, "useChatRoleStyles", {
3934
3934
  enumerable: true,
3935
- get: function () { return chunkOZAU3QWD_cjs.useChatRoleStyles; }
3935
+ get: function () { return chunkHPK3EWBF_cjs.useChatRoleStyles; }
3936
3936
  });
3937
3937
  Object.defineProperty(exports, "useFocusOnEmptyClick", {
3938
3938
  enumerable: true,
3939
- get: function () { return chunkOZAU3QWD_cjs.useFocusOnEmptyClick; }
3939
+ get: function () { return chunkHPK3EWBF_cjs.useFocusOnEmptyClick; }
3940
3940
  });
3941
3941
  Object.defineProperty(exports, "useRegisterComposer", {
3942
3942
  enumerable: true,
3943
- get: function () { return chunkOZAU3QWD_cjs.useRegisterComposer; }
3943
+ get: function () { return chunkHPK3EWBF_cjs.useRegisterComposer; }
3944
3944
  });
3945
3945
  Object.defineProperty(exports, "TreeError", {
3946
3946
  enumerable: true,
package/dist/index.d.cts CHANGED
@@ -3371,13 +3371,18 @@ declare const useChatAudioPrefs: zustand.UseBoundStore<zustand.StoreApi<AudioPre
3371
3371
  /**
3372
3372
  * Built-in chat notification sounds.
3373
3373
  *
3374
- * Bundled into the JS at build time as base64 data URLs (`tsup.config.ts`
3375
- * loader: `.mp3 → dataurl`). Total 136KB, gzipped 130KB added to
3376
- * the lazy Chat tool so hosts get notification sounds with zero setup.
3377
- *
3378
- * Source files live in `./sounds/`. Re-encode via ffmpeg if you tweak:
3379
- *
3380
- * ffmpeg -i in.mp3 -ac 2 -ar 44100 -b:a 128k -af 'atrim=0:1.4,afade=t=out:st=1.22:d=0.18' out.mp3
3374
+ * Sounds are inlined as base64 data URLs inside each `./sounds/<name>.ts`
3375
+ * module — no `.mp3` loader / `*.d.ts` shim required on the consumer
3376
+ * side. Total 136KB bundled into the lazy Chat chunk.
3377
+ *
3378
+ * To re-encode after a source edit:
3379
+ * 1. Drop the new mp3 next to this file (e.g. `./sounds/sent.source.mp3`).
3380
+ * 2. `base64 -i sent.source.mp3` and paste into `./sounds/sent.ts`.
3381
+ * 3. Delete the temporary source mp3 — only the `.ts` ships.
3382
+ *
3383
+ * Encoding cheat-sheet:
3384
+ * ffmpeg -i in.mp3 -ac 2 -ar 44100 -b:a 128k \
3385
+ * -af 'atrim=0:1.4,afade=t=out:st=1.22:d=0.18' out.mp3
3381
3386
  */
3382
3387
 
3383
3388
  /**
package/dist/index.d.ts CHANGED
@@ -3371,13 +3371,18 @@ declare const useChatAudioPrefs: zustand.UseBoundStore<zustand.StoreApi<AudioPre
3371
3371
  /**
3372
3372
  * Built-in chat notification sounds.
3373
3373
  *
3374
- * Bundled into the JS at build time as base64 data URLs (`tsup.config.ts`
3375
- * loader: `.mp3 → dataurl`). Total 136KB, gzipped 130KB added to
3376
- * the lazy Chat tool so hosts get notification sounds with zero setup.
3377
- *
3378
- * Source files live in `./sounds/`. Re-encode via ffmpeg if you tweak:
3379
- *
3380
- * ffmpeg -i in.mp3 -ac 2 -ar 44100 -b:a 128k -af 'atrim=0:1.4,afade=t=out:st=1.22:d=0.18' out.mp3
3374
+ * Sounds are inlined as base64 data URLs inside each `./sounds/<name>.ts`
3375
+ * module — no `.mp3` loader / `*.d.ts` shim required on the consumer
3376
+ * side. Total 136KB bundled into the lazy Chat chunk.
3377
+ *
3378
+ * To re-encode after a source edit:
3379
+ * 1. Drop the new mp3 next to this file (e.g. `./sounds/sent.source.mp3`).
3380
+ * 2. `base64 -i sent.source.mp3` and paste into `./sounds/sent.ts`.
3381
+ * 3. Delete the temporary source mp3 — only the `.ts` ships.
3382
+ *
3383
+ * Encoding cheat-sheet:
3384
+ * ffmpeg -i in.mp3 -ac 2 -ar 44100 -b:a 128k \
3385
+ * -af 'atrim=0:1.4,afade=t=out:st=1.22:d=0.18' out.mp3
3381
3386
  */
3382
3387
 
3383
3388
  /**
package/dist/index.mjs CHANGED
@@ -6,8 +6,8 @@ export { NativeProvider, StreamProvider, VideoControls, VideoErrorFallback, Vide
6
6
  export { ImageViewer } from './chunk-OBRSGM64.mjs';
7
7
  export { generateContentKey, useAudioCache, useBlobUrlCleanup, useImageCache, useMediaCacheStore, useVideoCache, useVideoPlayerSettings } from './chunk-C6GXVH5J.mjs';
8
8
  export { CronSchedulerProvider, CustomInput, DayChips, MonthDayGrid, SchedulePreview, ScheduleTypeSelector, TimeSelector, buildCron, humanizeCron, isValidCron, parseCron, useCronCustom, useCronMonthDays, useCronPreview, useCronScheduler, useCronSchedulerContext, useCronTime, useCronType, useCronWeekDays } from './chunk-PVAX67JG.mjs';
9
- import { LIMITS, createId, useChatContext, useChatContextOptional } from './chunk-UWVP6LCW.mjs';
10
- export { Attachments, AttachmentsGrid, AttachmentsList, CHAT_EVENT_NAME, CSS_VARS, ChatProvider, ChatRoot, Composer, DEFAULT_CHAT_SOUNDS, DEFAULT_LABELS, DEFAULT_SIDEBAR, DEFAULT_Z_INDEX, EmptyState, ErrorBanner, HOTKEYS, JumpToLatest, LIMITS, MessageActions, MessageBubble, MessageList, STORAGE_KEYS, Sources, StreamingIndicator, ToolCalls, createId, createTokenBuffer, deriveInitials, getChatLogger, initialState, isSubmittableDraft, reducer, resolvePersona, sanitizeDraft, useAutoFocusOnStreamEnd, useChat, useChatAudio, useChatBubbleStyles, useChatComposer, useChatContext, useChatContextOptional, useChatDestructiveStyles, useChatLayout, useChatRoleStyles, useFocusOnEmptyClick, useRegisterComposer } from './chunk-UWVP6LCW.mjs';
9
+ import { LIMITS, createId, useChatContext, useChatContextOptional } from './chunk-PEKBT75W.mjs';
10
+ export { Attachments, AttachmentsGrid, AttachmentsList, CHAT_EVENT_NAME, CSS_VARS, ChatProvider, ChatRoot, Composer, DEFAULT_CHAT_SOUNDS, DEFAULT_LABELS, DEFAULT_SIDEBAR, DEFAULT_Z_INDEX, EmptyState, ErrorBanner, HOTKEYS, JumpToLatest, LIMITS, MessageActions, MessageBubble, MessageList, STORAGE_KEYS, Sources, StreamingIndicator, ToolCalls, createId, createTokenBuffer, deriveInitials, getChatLogger, initialState, isSubmittableDraft, reducer, resolvePersona, sanitizeDraft, useAutoFocusOnStreamEnd, useChat, useChatAudio, useChatBubbleStyles, useChatComposer, useChatContext, useChatContextOptional, useChatDestructiveStyles, useChatLayout, useChatRoleStyles, useFocusOnEmptyClick, useRegisterComposer } from './chunk-PEKBT75W.mjs';
11
11
  export { TreeError, TreeSkeleton, createDemoTree } from './chunk-B6IR5KSC.mjs';
12
12
  export { DEFAULT_TREE_APPEARANCE, DEFAULT_TREE_LABELS, TreeRoot as Tree, TreeChevron, TreeContent, TreeEmpty, TreeIcon, TreeIndentGuides, TreeLabel, TreeProvider, TreeRoot, TreeRow, TreeSearchInput, appearanceToStyle, clearTreeState, createChildCache, flattenTree, loadTreeState, resolveAppearance, resolveChildren, saveTreeState, useTreeActions, useTreeContext, useTreeExpansion, useTreeFocus, useTreeKeyboard, useTreeLabels, useTreeRows, useTreeSearch, useTreeSelection, useTreeTypeAhead } from './chunk-ZL7FH4NW.mjs';
13
13
  import { PlaygroundProvider } from './chunk-Y6UTOBF6.mjs';
@@ -350,7 +350,7 @@ var LazyTree = createLazyComponent(
350
350
  }
351
351
  );
352
352
  var LazyChat = createLazyComponent(
353
- () => import('./ChatRoot-6IZFM5HM.mjs').then((m) => ({ default: m.ChatRoot })),
353
+ () => import('./ChatRoot-JVR3M3H2.mjs').then((m) => ({ default: m.ChatRoot })),
354
354
  {
355
355
  displayName: "LazyChat",
356
356
  fallback: /* @__PURE__ */ jsx(LoadingFallback, { minHeight: 320, text: "Loading chat\u2026" })
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@djangocfg/ui-tools",
3
- "version": "2.1.383",
3
+ "version": "2.1.384",
4
4
  "description": "Heavy React tools with lazy loading - for Electron, Vite, CRA, Next.js apps",
5
5
  "keywords": [
6
6
  "ui-tools",
@@ -157,8 +157,8 @@
157
157
  "test:watch": "vitest"
158
158
  },
159
159
  "peerDependencies": {
160
- "@djangocfg/i18n": "^2.1.383",
161
- "@djangocfg/ui-core": "^2.1.383",
160
+ "@djangocfg/i18n": "^2.1.384",
161
+ "@djangocfg/ui-core": "^2.1.384",
162
162
  "consola": "^3.4.2",
163
163
  "lodash-es": "^4.18.1",
164
164
  "lucide-react": "^0.545.0",
@@ -212,9 +212,9 @@
212
212
  "material-file-icons": "^2.4.0"
213
213
  },
214
214
  "devDependencies": {
215
- "@djangocfg/i18n": "^2.1.383",
216
- "@djangocfg/typescript-config": "^2.1.383",
217
- "@djangocfg/ui-core": "^2.1.383",
215
+ "@djangocfg/i18n": "^2.1.384",
216
+ "@djangocfg/typescript-config": "^2.1.384",
217
+ "@djangocfg/ui-core": "^2.1.384",
218
218
  "@types/lodash-es": "^4.17.12",
219
219
  "@types/mapbox__mapbox-gl-draw": "^1.4.8",
220
220
  "@types/node": "^24.7.2",
@@ -1,21 +1,26 @@
1
1
  /**
2
2
  * Built-in chat notification sounds.
3
3
  *
4
- * Bundled into the JS at build time as base64 data URLs (`tsup.config.ts`
5
- * loader: `.mp3 → dataurl`). Total 136KB, gzipped 130KB added to
6
- * the lazy Chat tool so hosts get notification sounds with zero setup.
4
+ * Sounds are inlined as base64 data URLs inside each `./sounds/<name>.ts`
5
+ * module — no `.mp3` loader / `*.d.ts` shim required on the consumer
6
+ * side. Total 136KB bundled into the lazy Chat chunk.
7
7
  *
8
- * Source files live in `./sounds/`. Re-encode via ffmpeg if you tweak:
8
+ * To re-encode after a source edit:
9
+ * 1. Drop the new mp3 next to this file (e.g. `./sounds/sent.source.mp3`).
10
+ * 2. `base64 -i sent.source.mp3` and paste into `./sounds/sent.ts`.
11
+ * 3. Delete the temporary source mp3 — only the `.ts` ships.
9
12
  *
10
- * ffmpeg -i in.mp3 -ac 2 -ar 44100 -b:a 128k -af 'atrim=0:1.4,afade=t=out:st=1.22:d=0.18' out.mp3
13
+ * Encoding cheat-sheet:
14
+ * ffmpeg -i in.mp3 -ac 2 -ar 44100 -b:a 128k \
15
+ * -af 'atrim=0:1.4,afade=t=out:st=1.22:d=0.18' out.mp3
11
16
  */
12
17
 
13
- import sent from './sounds/sent.mp3';
14
- import received from './sounds/received.mp3';
15
- import start from './sounds/start.mp3';
16
- import errorSound from './sounds/error.mp3';
17
- import mention from './sounds/mention.mp3';
18
- import notification from './sounds/notification.mp3';
18
+ import sent from './sounds/sent';
19
+ import received from './sounds/received';
20
+ import start from './sounds/start';
21
+ import errorSound from './sounds/error';
22
+ import mention from './sounds/mention';
23
+ import notification from './sounds/notification';
19
24
 
20
25
  import type { ChatAudioSounds } from './types';
21
26
 
@@ -0,0 +1,3 @@
1
+ // Auto-generated from `error.mp3` as a base64 data URL. Inline so consumers
2
+ // don't need a `.mp3` loader or ambient type shim.
3
+ export default 'data:audio/mpeg;base64,SUQzBAAAAAAAIlRTU0UAAAAOAAADTGF2ZjYyLjMuMTAwAAAAAAAAAAAAAAD/+5AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABJbmZvAAAADwAAADcAAFtsAAkNDRISFhYbGx8kJCkpLS0yMjY7Oz8/RERJSU1NUlZWW1tfX2RkaW1tcnJ2dnt7f3+EiYmNjZKSlpabn5+kpKmpra2ysra7u8DAxMTJyc3S0tbW29vg4OTk6e3t8vL29vv7/wAAAABMYXZjNjIuMTEAAAAAAAAAAAAAAAAkBBQAAAAAAABbbJLPqWoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/+5BkAA/wAABpAAAACAAADSAAAAEAAAGkAAAAIAAANIAAAARMQU1FMy4xMDBVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVMQU1FMy4xMDBVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVX/+5JkQI/wAABpAAAACAAADSAAAAEAAAGkAAAAIAAANIAAAARVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVTEFNRTMuMTAwVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV//uSZECP8AAAaQAAAAgAAA0gAAABAAABpAAAACAAADSAAAAEVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVUxBTUUzLjEwMFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVf/7kmRAj/AAAGkAAAAIAAANIAAAAQAAAaQAAAAgAAA0gAAABFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVMQU1FMy4xMDBVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVX/+5JkQI/wAABpAAAACAAADSAAAAEAAAGkAAAAIAAANIAAAARVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVTEFNRTMuMTAwVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV//uSZECP8AAAaQAAAAgAAA0gAAABAAABpAAAACAAADSAAAAEVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVUxBTUUzLjEwMFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVf/7kmRAj/AAAGkAAAAIAAANIAAAAQAAAaQAAAAgAAA0gAAABFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVMQU1FMy4xMDBVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVX/+5JkQI/wAABpAAAACAAADSAAAAEAAAGkAAAAIAAANIAAAARVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVTEFNRTMuMTAwVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV//uSZECP8AAAaQAAAAgAAA0gAAABAAABpAAAACAAADSAAAAEVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVUxBTUUzLjEwMFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVf/7kmRAj/AAAGkAAAAIAAANIAAAAQAAAaQAAAAgAAA0gAAABFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVMQU1FMy4xMDBVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVX/+5JkQI/wAABpAAAACAAADSAAAAEAAAGkAAAAIAAANIAAAARVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVTEFNRTMuMTAwVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV//uSZECP8AAAaQAAAAgAAA0gAAABAAABpAAAACAAADSAAAAEVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVUxBTUUzLjEwMFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVf/7kmRAj/AAAGkAAAAIAAANIAAAAQAAAaQAAAAgAAA0gAAABFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVMQU1FMy4xMDBVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVX/+5JkQI/wAABpAAAACAAADSAAAAEAAAGkAAAAIAAANIAAAARVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVTEFNRTMuMTAwVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV//uSZECP8AAAaQAAAAgAAA0gAAABAAABpAAAACAAADSAAAAEVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVUxBTUUzLjEwMFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVf/7kmRAj/AAAGkAAAAIAAANIAAAAQAAAaQAAAAgAAA0gAAABFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVMQU1FMy4xMDBVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVX/+5JkQI/wAABpAAAACAAADSAAAAEAAAGkAAAAIAAANIAAAARVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVTEFNRTMuMTAwVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV//uSZECP8AAAaQAAAAgAAA0gAAABAAABpAAAACAAADSAAAAEVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVUxBTUUzLjEwMFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVf/7kmRAj/AAAGkAAAAIAAANIAAAAQAAAaQAAAAgAAA0gAAABFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVMQU1FMy4xMDBVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVX/+5JkQI/wAABpAAAACAAADSAAAAEAAAGkAAAAIAAANIAAAARVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVTEFNRTMuMTAwVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV//uSZECP8AAAaQAAAAgAAA0gAAABAAABpAAAACAAADSAAAAEVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVUxBTUUzLjEwMFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVf/7kmRAj/AAAGkAAAAIAAANIAAAAQAAAaQAAAAgAAA0gAAABFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVMQU1FMy4xMDBVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVX/+5JkQI/wAABpAAAACAAADSAAAAEAAAGkAAAAIAAANIAAAARVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVTEFNRTMuMTAwVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV//uSZECP8AAAaQAAAAgAAA0gAAABAAABpAAAACAAADSAAAAEVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVUxBTUUzLjEwMFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVf/7kmRAj/AAAGkAAAAIAAANIAAAAQAAAaQAAAAgAAA0gAAABFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVUxBTUUzLjEwMFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVX/+5BkQQ/wAABpAAAACAAADSAAAAEAAAGkAAAAIAAANIAAAARVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVMQU1FMy4xMDBVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVX/+5JkQI/wAABpAAAACAAADSAAAAEAAAGkAAAAIAAANIAAAAQBEhJCJJzIADEjwoWCg0MLAY4ABQwDJgyFC73YtuSrovUX5QqQpEgQ0JGjYOODQsHBihKGF2gpLCAaYksagmEjzlkzXGjGjQQCBIMAEhGpMeoFupxBBqyJkhhiR4IIEo8RjjBCx5mZ0aYIoKCS1xflCooEGLBhQMXGQJIVpEMjfsUBBQiBmRFjNYMMuXBBAdGkI4KEzFkCtEZgHGOk4MJBQhCpQAD8yFYNmVTrwE71JN+YDK0MLEAoCtuOgxhweTxn+KdCRjkq2TzEUaigkFLmKGlox1TdNBDuIwgMSJTmmCYAyUqumgueqRHdM4MDsIgF9QgImNEjwcQW3ALVaKYqJnhp7GMQgYkeYYpkkmcAkQnQ5C2RYMyIjocDFJeFwTLNAyaQ5bdY6/zGaPWMOXuSVBOjcaChmEGYIqOPL5DgwAgEIQSCRwEm4IgIEjF35W6J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' as string;