@promptbook/components 0.112.0-49 → 0.112.0-50

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 (37) hide show
  1. package/esm/index.es.js +491 -154
  2. package/esm/index.es.js.map +1 -1
  3. package/esm/src/avatars/visuals/octopus3AvatarVisual.d.ts +72 -0
  4. package/esm/src/avatars/visuals/octopus3AvatarVisual.test.d.ts +1 -0
  5. package/esm/src/avatars/visuals/octopusAvatarVisualShared.d.ts +16 -0
  6. package/esm/src/book-components/BookEditor/BookEditor.d.ts +9 -0
  7. package/esm/src/book-components/BookEditor/useBookEditorMonacoLanguage.d.ts +10 -2
  8. package/esm/src/book-components/BookEditor/useBookEditorMonacoStyles.d.ts +2 -1
  9. package/esm/src/book-components/Chat/Chat/ChatMessageRichContent.d.ts +4 -0
  10. package/esm/src/book-components/Chat/Chat/ChatProps.d.ts +9 -0
  11. package/esm/src/book-components/Chat/Chat/ChatToolCallModal.d.ts +1 -0
  12. package/esm/src/book-components/Chat/Chat/ChatToolCallModalContent.d.ts +2 -1
  13. package/esm/src/book-components/Chat/Chat/renderAdvancedToolCallDetails.d.ts +4 -0
  14. package/esm/src/book-components/Chat/CodeBlock/CodeBlock.d.ts +2 -1
  15. package/esm/src/speech-recognition/OpenAiSpeechRecognition.d.ts +24 -2
  16. package/esm/src/speech-recognition/OpenAiSpeechRecognition.test.d.ts +1 -0
  17. package/esm/src/types/SpeechRecognition.d.ts +4 -0
  18. package/esm/src/version.d.ts +1 -1
  19. package/package.json +1 -1
  20. package/umd/index.umd.js +491 -154
  21. package/umd/index.umd.js.map +1 -1
  22. package/umd/src/avatars/visuals/octopus3AvatarVisual.d.ts +72 -0
  23. package/umd/src/avatars/visuals/octopus3AvatarVisual.test.d.ts +1 -0
  24. package/umd/src/avatars/visuals/octopusAvatarVisualShared.d.ts +16 -0
  25. package/umd/src/book-components/BookEditor/BookEditor.d.ts +9 -0
  26. package/umd/src/book-components/BookEditor/useBookEditorMonacoLanguage.d.ts +10 -2
  27. package/umd/src/book-components/BookEditor/useBookEditorMonacoStyles.d.ts +2 -1
  28. package/umd/src/book-components/Chat/Chat/ChatMessageRichContent.d.ts +4 -0
  29. package/umd/src/book-components/Chat/Chat/ChatProps.d.ts +9 -0
  30. package/umd/src/book-components/Chat/Chat/ChatToolCallModal.d.ts +1 -0
  31. package/umd/src/book-components/Chat/Chat/ChatToolCallModalContent.d.ts +2 -1
  32. package/umd/src/book-components/Chat/Chat/renderAdvancedToolCallDetails.d.ts +4 -0
  33. package/umd/src/book-components/Chat/CodeBlock/CodeBlock.d.ts +2 -1
  34. package/umd/src/speech-recognition/OpenAiSpeechRecognition.d.ts +24 -2
  35. package/umd/src/speech-recognition/OpenAiSpeechRecognition.test.d.ts +1 -0
  36. package/umd/src/types/SpeechRecognition.d.ts +4 -0
  37. package/umd/src/version.d.ts +1 -1
package/esm/index.es.js CHANGED
@@ -40,7 +40,7 @@ const BOOK_LANGUAGE_VERSION = '2.0.0';
40
40
  * @generated
41
41
  * @see https://github.com/webgptorg/promptbook
42
42
  */
43
- const PROMPTBOOK_ENGINE_VERSION = '0.112.0-49';
43
+ const PROMPTBOOK_ENGINE_VERSION = '0.112.0-50';
44
44
  /**
45
45
  * TODO: string_promptbook_version should be constrained to the all versions of Promptbook engine
46
46
  * Note: [💞] Ignore a discrepancy between file name and entity name
@@ -18728,8 +18728,8 @@ const DEFAULT_BOOK = padBook(validateBook(spaceTrim$1(`
18728
18728
  // <- [🐱‍🚀] Buttons into genesis book
18729
18729
  // <- TODO: [🐱‍🚀] generateBookBoilerplate and deprecate `DEFAULT_BOOK`
18730
18730
 
18731
- var css_248z$d = ".BookEditor-module_BookEditor__s-0PU{width:100%}.BookEditor-module_bookEditorContainer__wLMwM{box-sizing:border-box;height:100%;padding:10px 25px 0;position:relative;width:100%}.BookEditor-module_bookEditorContainer__wLMwM.BookEditor-module_isVerbose__VQ6iL{background-color:rgba(0,0,0,.05);outline:1px dotted rgba(0,0,0,.5)}.BookEditor-module_isVerbose__VQ6iL{outline:2px dotted #ff7526}.BookEditor-module_bookEditorWrapper__twppD{background-color:#fff;border:1px solid rgba(209,213,219,.8);border-radius:1rem;box-shadow:0 1px 2px 0 rgba(0,0,0,.05);overflow:hidden;padding-top:10px;transition:box-shadow .2s ease-in-out}.BookEditor-module_isVerbose__VQ6iL .BookEditor-module_bookEditorWrapper__twppD{overflow:visible}.BookEditor-module_bookEditorWrapper__twppD:hover{box-shadow:0 4px 6px -1px rgba(0,0,0,.1),0 2px 4px -1px rgba(0,0,0,.06)}.BookEditor-module_bookEditorWrapper__twppD.BookEditor-module_isBorderRadiusDisabled__h1I3v{border-radius:0}.BookEditor-module_dropOverlay__xWWoX{align-items:center;background-color:rgba(0,0,0,.5);bottom:0;color:#fff;display:flex;font-size:1.5rem;justify-content:center;left:0;pointer-events:none;position:absolute;right:0;top:0;z-index:100}.BookEditor-module_bookEditorActionbar__KW6dc{position:absolute;right:55px;top:10px;z-index:100}.BookEditor-module_fullscreen__rktsl{border:none;border-radius:0;bottom:0;box-shadow:none;height:100%;left:0;padding-top:50px;position:fixed;right:0;top:0;width:100%;z-index:9999}.BookEditor-module_button__hS390{align-items:center;background-color:#fff;border:1px solid #d1d5db;border-radius:.375rem;box-shadow:0 1px 2px 0 rgba(0,0,0,.05);color:#374151;cursor:pointer;display:inline-flex;gap:.5rem;padding:.5rem 1rem;transition:all .2s ease-in-out}.BookEditor-module_button__hS390:hover{background-color:#f9fafb;border-color:#b7bcce;box-shadow:0 1px 3px 0 rgba(0,0,0,.1),0 1px 2px 0 rgba(0,0,0,.06)}.BookEditor-module_savedNotification__OiX9L{align-items:center;animation:BookEditor-module_fadeOut__q8JnR 2s forwards;background-color:rgba(0,0,0,.7);border-radius:.5rem;color:#fff;display:flex;font-size:1.25rem;gap:.5rem;left:50%;padding:1rem 2rem;pointer-events:none;position:absolute;top:50%;transform:translate(-50%,-50%);z-index:1000}.BookEditor-module_uploadPanel__2JJtD{background:hsla(0,0%,100%,.98);border:1px solid rgba(209,213,219,.9);border-radius:12px;bottom:20px;box-shadow:0 12px 30px rgba(15,23,42,.15);display:flex;flex-direction:column;gap:10px;max-width:calc(100% - 40px);padding:12px;position:absolute;right:20px;width:420px;z-index:220}.BookEditor-module_uploadPanelHeader__pdJd2{align-items:center;display:flex;gap:12px;justify-content:space-between}.BookEditor-module_uploadPanelTitle__TJIVF{color:#111827;font-size:.95rem;font-weight:600}.BookEditor-module_uploadPanelHeaderMeta__Xw0uI{color:#6b7280;font-size:.75rem}.BookEditor-module_uploadPanelSummary__rwSbG{color:#6b7280;display:grid;font-size:.75rem;gap:4px 12px;grid-template-columns:1fr 1fr}.BookEditor-module_uploadPanelProgressBar__a6pjf{background:#e5e7eb;border-radius:999px;height:6px;overflow:hidden}.BookEditor-module_uploadPanelProgressFill__l-TKR{background:linear-gradient(90deg,#2563eb,#10b981);height:100%;transition:width .2s ease}.BookEditor-module_uploadPanelList__VxEd5{display:flex;flex-direction:column;gap:8px;max-height:220px;overflow-y:auto;padding-right:4px}.BookEditor-module_uploadRow__QiSFg{background:#fff;border:1px solid #e5e7eb;border-radius:10px;display:flex;flex-direction:column;gap:6px;padding:8px}.BookEditor-module_uploadRowHeader__po0j5{align-items:center;display:flex;gap:8px;justify-content:space-between}.BookEditor-module_uploadRowName__doQRO{color:#111827;font-size:.8rem;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.BookEditor-module_uploadRowStatus__jsUb-{color:#6b7280;font-size:.7rem}.BookEditor-module_uploadRowMeta__1lz9h{color:#6b7280;display:flex;font-size:.7rem;justify-content:space-between}.BookEditor-module_uploadRowProgressBar__NoBA7{background:#e5e7eb;border-radius:999px;height:4px;overflow:hidden}.BookEditor-module_uploadRowProgressFill__TrP7e{background:#3b82f6;height:100%;transition:width .2s ease}.BookEditor-module_uploadRowActions__5Y1Mq{display:flex;gap:6px}.BookEditor-module_uploadActionButton__CqJrr{background:#f9fafb;border:1px solid #d1d5db;border-radius:6px;color:#374151;cursor:pointer;font-size:.7rem;padding:2px 8px;transition:all .15s ease-in-out}.BookEditor-module_uploadActionButton__CqJrr:hover{background:#eef2f7;border-color:#cbd5f5}.BookEditor-module_uploadRowError__eEHWw{color:#b91c1c;font-size:.7rem}@keyframes BookEditor-module_fadeOut__q8JnR{0%{opacity:0}10%{opacity:1}70%{opacity:1}to{opacity:0}}\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkJvb2tFZGl0b3IubW9kdWxlLmNzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxxQ0FFSSxVQUNKLENBRUEsOENBS0kscUJBQXNCLENBSHRCLFdBQVksQ0FFWixtQkFBb0IsQ0FEcEIsaUJBQWtCLENBRmxCLFVBS0osQ0FFQSxpRkFFSSxnQ0FBcUMsQ0FDckMsaUNBRUosQ0FFQSxvQ0FDSSwwQkFDSixDQUVBLDRDQUtJLHFCQUF1QixDQUR2QixxQ0FBMEMsQ0FGMUMsa0JBQW1CLENBSW5CLHNDQUEyQyxDQUwzQyxlQUFnQixDQUVoQixnQkFBaUIsQ0FJakIscUNBQ0osQ0FDQSxnRkFFSSxnQkFFSixDQUVBLGtEQUNJLHVFQUNKLENBVUEsNEZBQ0ksZUFDSixDQUVBLHNDQVNJLGtCQUFtQixDQUhuQiwrQkFBb0MsQ0FEcEMsUUFBUyxDQUVULFVBQVksQ0FDWixZQUFhLENBR2IsZ0JBQWlCLENBRGpCLHNCQUF1QixDQVB2QixNQUFPLENBVVAsbUJBQW9CLENBWnBCLGlCQUFrQixDQUdsQixPQUFRLENBRlIsS0FBTSxDQVVOLFdBRUosQ0FRQSw4Q0FDSSxpQkFBa0IsQ0FFbEIsVUFBVyxDQURYLFFBQVMsQ0FFVCxXQUNKLENBRUEscUNBV0ksV0FBWSxDQUZaLGVBQWdCLENBSmhCLFFBQVMsQ0FPVCxlQUFnQixDQUxoQixXQUFZLENBSlosTUFBTyxDQU9QLGdCQUFpQixDQVRqQixjQUFlLENBR2YsT0FBUSxDQUZSLEtBQU0sQ0FJTixVQUFXLENBRVgsWUFLSixDQUVBLGlDQU9JLGtCQUFtQixDQU5uQixxQkFBc0IsQ0FDdEIsd0JBQXlCLENBQ3pCLHFCQUF1QixDQU92QixzQ0FBMkMsQ0FEM0MsYUFBYyxDQUpkLGNBQWUsQ0FDZixtQkFBb0IsQ0FFcEIsU0FBVyxDQUpYLGtCQUFvQixDQU9wQiw4QkFDSixDQUVBLHVDQUNJLHdCQUF5QixDQUN6QixvQkFBcUIsQ0FDckIsaUVBQ0osQ0FFQSw0Q0FhSSxrQkFBbUIsQ0FFbkIsc0RBQThCLENBVjlCLCtCQUFvQyxDQUdwQyxtQkFBcUIsQ0FGckIsVUFBWSxDQU1aLFlBQWEsQ0FIYixpQkFBa0IsQ0FLbEIsU0FBVyxDQVhYLFFBQVMsQ0FJVCxpQkFBa0IsQ0FJbEIsbUJBQW9CLENBVnBCLGlCQUFrQixDQUNsQixPQUFRLENBRVIsOEJBQWdDLENBTWhDLFlBTUosQ0FFQSxzQ0FNSSw4QkFBcUMsQ0FDckMscUNBQTBDLENBQzFDLGtCQUFtQixDQUxuQixXQUFZLENBTVoseUNBQThDLENBRTlDLFlBQWEsQ0FDYixxQkFBc0IsQ0FDdEIsUUFBUyxDQVJULDJCQUE0QixDQUs1QixZQUFhLENBVGIsaUJBQWtCLENBQ2xCLFVBQVcsQ0FFWCxXQUFZLENBVVosV0FDSixDQUVBLDRDQUVJLGtCQUFtQixDQURuQixZQUFhLENBR2IsUUFBUyxDQURULDZCQUVKLENBRUEsMkNBR0ksYUFBYyxDQURkLGdCQUFrQixDQURsQixlQUdKLENBRUEsZ0RBRUksYUFBYyxDQURkLGdCQUVKLENBRUEsNkNBS0ksYUFBYyxDQUpkLFlBQWEsQ0FHYixnQkFBa0IsQ0FEbEIsWUFBYSxDQURiLDZCQUlKLENBRUEsaURBRUksa0JBQW1CLENBQ25CLG1CQUFvQixDQUZwQixVQUFXLENBR1gsZUFDSixDQUVBLGtEQUVJLGlEQUFvRCxDQURwRCxXQUFZLENBRVoseUJBQ0osQ0FFQSwwQ0FDSSxZQUFhLENBQ2IscUJBQXNCLENBQ3RCLE9BQVEsQ0FDUixnQkFBaUIsQ0FDakIsZUFBZ0IsQ0FDaEIsaUJBQ0osQ0FFQSxvQ0FPSSxlQUFnQixDQU5oQix3QkFBeUIsQ0FDekIsa0JBQW1CLENBRW5CLFlBQWEsQ0FDYixxQkFBc0IsQ0FDdEIsT0FBUSxDQUhSLFdBS0osQ0FFQSwwQ0FFSSxrQkFBbUIsQ0FEbkIsWUFBYSxDQUdiLE9BQVEsQ0FEUiw2QkFFSixDQUVBLHdDQUdJLGFBQWMsQ0FGZCxlQUFpQixDQUNqQixlQUFnQixDQUVoQixlQUFnQixDQUNoQixzQkFBdUIsQ0FDdkIsa0JBQ0osQ0FFQSwwQ0FFSSxhQUFjLENBRGQsZUFFSixDQUVBLHdDQUlJLGFBQWMsQ0FIZCxZQUFhLENBRWIsZUFBaUIsQ0FEakIsNkJBR0osQ0FFQSwrQ0FFSSxrQkFBbUIsQ0FDbkIsbUJBQW9CLENBRnBCLFVBQVcsQ0FHWCxlQUNKLENBRUEsZ0RBRUksa0JBQW1CLENBRG5CLFdBQVksQ0FFWix5QkFDSixDQUVBLDJDQUNJLFlBQWEsQ0FDYixPQUNKLENBRUEsNkNBRUksa0JBQW1CLENBRG5CLHdCQUF5QixDQUt6QixpQkFBa0IsQ0FIbEIsYUFBYyxDQUlkLGNBQWUsQ0FIZixlQUFpQixDQUNqQixlQUFnQixDQUdoQiwrQkFDSixDQUVBLG1EQUNJLGtCQUFtQixDQUNuQixvQkFDSixDQUVBLHlDQUVJLGFBQWMsQ0FEZCxlQUVKLENBRUEsNENBQ0ksR0FDSSxTQUNKLENBQ0EsSUFDSSxTQUNKLENBQ0EsSUFDSSxTQUNKLENBQ0EsR0FDSSxTQUNKLENBQ0oiLCJmaWxlIjoiQm9va0VkaXRvci5tb2R1bGUuY3NzIiwic291cmNlc0NvbnRlbnQiOlsiLkJvb2tFZGl0b3Ige1xuICAgIC8qIGhlaWdodDogNDUwcHg7ICovXG4gICAgd2lkdGg6IDEwMCU7XG59XG5cbi5ib29rRWRpdG9yQ29udGFpbmVyIHtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBoZWlnaHQ6IDEwMCU7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIHBhZGRpbmc6IDEwcHggMjVweCAwO1xuICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG59XG5cbi5ib29rRWRpdG9yQ29udGFpbmVyLmlzVmVyYm9zZSB7XG4gICAgLyoqL1xuICAgIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4wNSk7XG4gICAgb3V0bGluZTogMXB4IGRvdHRlZCByZ2JhKDAsIDAsIDAsIDAuNSk7XG4gICAgLyoqL1xufVxuXG4uaXNWZXJib3NlIHtcbiAgICBvdXRsaW5lOiAycHggZG90dGVkIHJnYigyNTUgMTE3IDM4KTtcbn1cblxuLmJvb2tFZGl0b3JXcmFwcGVyIHtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIGJvcmRlci1yYWRpdXM6IDFyZW07XG4gICAgcGFkZGluZy10b3A6IDEwcHg7XG4gICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgyMDksIDIxMywgMjE5LCAwLjgpO1xuICAgIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xuICAgIGJveC1zaGFkb3c6IDAgMXB4IDJweCAwIHJnYmEoMCwgMCwgMCwgMC4wNSk7XG4gICAgdHJhbnNpdGlvbjogYm94LXNoYWRvdyAwLjJzIGVhc2UtaW4tb3V0O1xufVxuLmlzVmVyYm9zZSAuYm9va0VkaXRvcldyYXBwZXIge1xuICAgIC8qKi9cbiAgICBvdmVyZmxvdzogdmlzaWJsZTtcbiAgICAvKiovXG59XG5cbi5ib29rRWRpdG9yV3JhcHBlcjpob3ZlciB7XG4gICAgYm94LXNoYWRvdzogMCA0cHggNnB4IC0xcHggcmdiYSgwLCAwLCAwLCAwLjEpLCAwIDJweCA0cHggLTFweCByZ2JhKDAsIDAsIDAsIDAuMDYpO1xufVxuXG4uYm9va0VkaXRvcldyYXBwZXI6Zm9jdXMtd2l0aGluIHtcbiAgICAvKlxuICAgIG91dGxpbmU6IDJweCBzb2xpZCB0cmFuc3BhcmVudDtcbiAgICBvdXRsaW5lLW9mZnNldDogMnB4O1xuICAgIGJveC1zaGFkb3c6IDAgMCAwIDNweCByZ2JhKDk5LCAxMDIsIDI0MSwgMC40KTtcbiAgICAqL1xufVxuXG4uYm9va0VkaXRvcldyYXBwZXIuaXNCb3JkZXJSYWRpdXNEaXNhYmxlZCB7XG4gICAgYm9yZGVyLXJhZGl1czogMDtcbn1cblxuLmRyb3BPdmVybGF5IHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgdG9wOiAwO1xuICAgIGxlZnQ6IDA7XG4gICAgcmlnaHQ6IDA7XG4gICAgYm90dG9tOiAwO1xuICAgIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC41KTtcbiAgICBjb2xvcjogd2hpdGU7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgIGZvbnQtc2l6ZTogMS41cmVtO1xuICAgIHotaW5kZXg6IDEwMDtcbiAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbn1cblxuLypcbi5ib29rRWRpdG9yQ29udGFpbmVyIDpnbG9iYWwoLnZpZXctbGluZSkge1xuICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZWVlOyAvKiA8LSBOb3RlOiBgUFJPTVBUQk9PS19TWU5UQVhfQ09MT1JTLkxJTkVgICogL1xufVxuKi9cblxuLmJvb2tFZGl0b3JBY3Rpb25iYXIge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB0b3A6IDEwcHg7XG4gICAgcmlnaHQ6IDU1cHg7XG4gICAgei1pbmRleDogMTAwO1xufVxuXG4uZnVsbHNjcmVlbiB7XG4gICAgcG9zaXRpb246IGZpeGVkO1xuICAgIHRvcDogMDtcbiAgICBsZWZ0OiAwO1xuICAgIHJpZ2h0OiAwO1xuICAgIGJvdHRvbTogMDtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBoZWlnaHQ6IDEwMCU7XG4gICAgei1pbmRleDogOTk5OTtcbiAgICBib3JkZXItcmFkaXVzOiAwO1xuICAgIHBhZGRpbmctdG9wOiA1MHB4O1xuICAgIGJvcmRlcjogbm9uZTtcbiAgICBib3gtc2hhZG93OiBub25lO1xufVxuXG4uYnV0dG9uIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xuICAgIGJvcmRlcjogMXB4IHNvbGlkICNkMWQ1ZGI7XG4gICAgYm9yZGVyLXJhZGl1czogMC4zNzVyZW07XG4gICAgcGFkZGluZzogMC41cmVtIDFyZW07XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICAgIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgZ2FwOiAwLjVyZW07XG4gICAgY29sb3I6ICMzNzQxNTE7XG4gICAgYm94LXNoYWRvdzogMCAxcHggMnB4IDAgcmdiYSgwLCAwLCAwLCAwLjA1KTtcbiAgICB0cmFuc2l0aW9uOiBhbGwgMC4ycyBlYXNlLWluLW91dDtcbn1cblxuLmJ1dHRvbjpob3ZlciB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogI2Y5ZmFmYjtcbiAgICBib3JkZXItY29sb3I6ICNiN2JjY2U7XG4gICAgYm94LXNoYWRvdzogMCAxcHggM3B4IDAgcmdiYSgwLCAwLCAwLCAwLjEpLCAwIDFweCAycHggMCByZ2JhKDAsIDAsIDAsIDAuMDYpO1xufVxuXG4uc2F2ZWROb3RpZmljYXRpb24ge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB0b3A6IDUwJTtcbiAgICBsZWZ0OiA1MCU7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTUwJSk7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjcpO1xuICAgIGNvbG9yOiB3aGl0ZTtcbiAgICBwYWRkaW5nOiAxcmVtIDJyZW07XG4gICAgYm9yZGVyLXJhZGl1czogMC41cmVtO1xuICAgIGZvbnQtc2l6ZTogMS4yNXJlbTtcbiAgICB6LWluZGV4OiAxMDAwO1xuICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBnYXA6IDAuNXJlbTtcbiAgICBhbmltYXRpb246IGZhZGVPdXQgMnMgZm9yd2FyZHM7XG59XG5cbi51cGxvYWRQYW5lbCB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHJpZ2h0OiAyMHB4O1xuICAgIGJvdHRvbTogMjBweDtcbiAgICB3aWR0aDogNDIwcHg7XG4gICAgbWF4LXdpZHRoOiBjYWxjKDEwMCUgLSA0MHB4KTtcbiAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOTgpO1xuICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMjA5LCAyMTMsIDIxOSwgMC45KTtcbiAgICBib3JkZXItcmFkaXVzOiAxMnB4O1xuICAgIGJveC1zaGFkb3c6IDAgMTJweCAzMHB4IHJnYmEoMTUsIDIzLCA0MiwgMC4xNSk7XG4gICAgcGFkZGluZzogMTJweDtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgZ2FwOiAxMHB4O1xuICAgIHotaW5kZXg6IDIyMDtcbn1cblxuLnVwbG9hZFBhbmVsSGVhZGVyIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICAgIGdhcDogMTJweDtcbn1cblxuLnVwbG9hZFBhbmVsVGl0bGUge1xuICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgZm9udC1zaXplOiAwLjk1cmVtO1xuICAgIGNvbG9yOiAjMTExODI3O1xufVxuXG4udXBsb2FkUGFuZWxIZWFkZXJNZXRhIHtcbiAgICBmb250LXNpemU6IDAuNzVyZW07XG4gICAgY29sb3I6ICM2YjcyODA7XG59XG5cbi51cGxvYWRQYW5lbFN1bW1hcnkge1xuICAgIGRpc3BsYXk6IGdyaWQ7XG4gICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxZnIgMWZyO1xuICAgIGdhcDogNHB4IDEycHg7XG4gICAgZm9udC1zaXplOiAwLjc1cmVtO1xuICAgIGNvbG9yOiAjNmI3MjgwO1xufVxuXG4udXBsb2FkUGFuZWxQcm9ncmVzc0JhciB7XG4gICAgaGVpZ2h0OiA2cHg7XG4gICAgYmFja2dyb3VuZDogI2U1ZTdlYjtcbiAgICBib3JkZXItcmFkaXVzOiA5OTlweDtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xufVxuXG4udXBsb2FkUGFuZWxQcm9ncmVzc0ZpbGwge1xuICAgIGhlaWdodDogMTAwJTtcbiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoOTBkZWcsICMyNTYzZWIsICMxMGI5ODEpO1xuICAgIHRyYW5zaXRpb246IHdpZHRoIDAuMnMgZWFzZTtcbn1cblxuLnVwbG9hZFBhbmVsTGlzdCB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgIGdhcDogOHB4O1xuICAgIG1heC1oZWlnaHQ6IDIyMHB4O1xuICAgIG92ZXJmbG93LXk6IGF1dG87XG4gICAgcGFkZGluZy1yaWdodDogNHB4O1xufVxuXG4udXBsb2FkUm93IHtcbiAgICBib3JkZXI6IDFweCBzb2xpZCAjZTVlN2ViO1xuICAgIGJvcmRlci1yYWRpdXM6IDEwcHg7XG4gICAgcGFkZGluZzogOHB4O1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICBnYXA6IDZweDtcbiAgICBiYWNrZ3JvdW5kOiAjZmZmO1xufVxuXG4udXBsb2FkUm93SGVhZGVyIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICAgIGdhcDogOHB4O1xufVxuXG4udXBsb2FkUm93TmFtZSB7XG4gICAgZm9udC1zaXplOiAwLjhyZW07XG4gICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICBjb2xvcjogIzExMTgyNztcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xuICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG59XG5cbi51cGxvYWRSb3dTdGF0dXMge1xuICAgIGZvbnQtc2l6ZTogMC43cmVtO1xuICAgIGNvbG9yOiAjNmI3MjgwO1xufVxuXG4udXBsb2FkUm93TWV0YSB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gICAgZm9udC1zaXplOiAwLjdyZW07XG4gICAgY29sb3I6ICM2YjcyODA7XG59XG5cbi51cGxvYWRSb3dQcm9ncmVzc0JhciB7XG4gICAgaGVpZ2h0OiA0cHg7XG4gICAgYmFja2dyb3VuZDogI2U1ZTdlYjtcbiAgICBib3JkZXItcmFkaXVzOiA5OTlweDtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xufVxuXG4udXBsb2FkUm93UHJvZ3Jlc3NGaWxsIHtcbiAgICBoZWlnaHQ6IDEwMCU7XG4gICAgYmFja2dyb3VuZDogIzNiODJmNjtcbiAgICB0cmFuc2l0aW9uOiB3aWR0aCAwLjJzIGVhc2U7XG59XG5cbi51cGxvYWRSb3dBY3Rpb25zIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGdhcDogNnB4O1xufVxuXG4udXBsb2FkQWN0aW9uQnV0dG9uIHtcbiAgICBib3JkZXI6IDFweCBzb2xpZCAjZDFkNWRiO1xuICAgIGJhY2tncm91bmQ6ICNmOWZhZmI7XG4gICAgY29sb3I6ICMzNzQxNTE7XG4gICAgZm9udC1zaXplOiAwLjdyZW07XG4gICAgcGFkZGluZzogMnB4IDhweDtcbiAgICBib3JkZXItcmFkaXVzOiA2cHg7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICAgIHRyYW5zaXRpb246IGFsbCAwLjE1cyBlYXNlLWluLW91dDtcbn1cblxuLnVwbG9hZEFjdGlvbkJ1dHRvbjpob3ZlciB7XG4gICAgYmFja2dyb3VuZDogI2VlZjJmNztcbiAgICBib3JkZXItY29sb3I6ICNjYmQ1ZjU7XG59XG5cbi51cGxvYWRSb3dFcnJvciB7XG4gICAgZm9udC1zaXplOiAwLjdyZW07XG4gICAgY29sb3I6ICNiOTFjMWM7XG59XG5cbkBrZXlmcmFtZXMgZmFkZU91dCB7XG4gICAgMCUge1xuICAgICAgICBvcGFjaXR5OiAwO1xuICAgIH1cbiAgICAxMCUge1xuICAgICAgICBvcGFjaXR5OiAxO1xuICAgIH1cbiAgICA3MCUge1xuICAgICAgICBvcGFjaXR5OiAxO1xuICAgIH1cbiAgICAxMDAlIHtcbiAgICAgICAgb3BhY2l0eTogMDtcbiAgICB9XG59XG4iXX0= */";
18732
- var styles$d = {"BookEditor":"BookEditor-module_BookEditor__s-0PU","bookEditorContainer":"BookEditor-module_bookEditorContainer__wLMwM","isVerbose":"BookEditor-module_isVerbose__VQ6iL","bookEditorWrapper":"BookEditor-module_bookEditorWrapper__twppD","isBorderRadiusDisabled":"BookEditor-module_isBorderRadiusDisabled__h1I3v","dropOverlay":"BookEditor-module_dropOverlay__xWWoX","bookEditorActionbar":"BookEditor-module_bookEditorActionbar__KW6dc","fullscreen":"BookEditor-module_fullscreen__rktsl","button":"BookEditor-module_button__hS390","savedNotification":"BookEditor-module_savedNotification__OiX9L","fadeOut":"BookEditor-module_fadeOut__q8JnR","uploadPanel":"BookEditor-module_uploadPanel__2JJtD","uploadPanelHeader":"BookEditor-module_uploadPanelHeader__pdJd2","uploadPanelTitle":"BookEditor-module_uploadPanelTitle__TJIVF","uploadPanelHeaderMeta":"BookEditor-module_uploadPanelHeaderMeta__Xw0uI","uploadPanelSummary":"BookEditor-module_uploadPanelSummary__rwSbG","uploadPanelProgressBar":"BookEditor-module_uploadPanelProgressBar__a6pjf","uploadPanelProgressFill":"BookEditor-module_uploadPanelProgressFill__l-TKR","uploadPanelList":"BookEditor-module_uploadPanelList__VxEd5","uploadRow":"BookEditor-module_uploadRow__QiSFg","uploadRowHeader":"BookEditor-module_uploadRowHeader__po0j5","uploadRowName":"BookEditor-module_uploadRowName__doQRO","uploadRowStatus":"BookEditor-module_uploadRowStatus__jsUb-","uploadRowMeta":"BookEditor-module_uploadRowMeta__1lz9h","uploadRowProgressBar":"BookEditor-module_uploadRowProgressBar__NoBA7","uploadRowProgressFill":"BookEditor-module_uploadRowProgressFill__TrP7e","uploadRowActions":"BookEditor-module_uploadRowActions__5Y1Mq","uploadActionButton":"BookEditor-module_uploadActionButton__CqJrr","uploadRowError":"BookEditor-module_uploadRowError__eEHWw"};
18731
+ var css_248z$d = ".BookEditor-module_BookEditor__s-0PU{width:100%}.BookEditor-module_bookEditorContainer__wLMwM{box-sizing:border-box;height:100%;padding:10px 25px 0;position:relative;width:100%}.BookEditor-module_bookEditorContainer__wLMwM.BookEditor-module_isVerbose__VQ6iL{background-color:rgba(0,0,0,.05);outline:1px dotted rgba(0,0,0,.5)}.BookEditor-module_isVerbose__VQ6iL{outline:2px dotted #ff7526}.BookEditor-module_bookEditorWrapper__twppD{background-color:#fff;border:1px solid rgba(209,213,219,.8);border-radius:1rem;box-shadow:0 1px 2px 0 rgba(0,0,0,.05);overflow:hidden;padding-top:10px;transition:box-shadow .2s ease-in-out}.BookEditor-module_isVerbose__VQ6iL .BookEditor-module_bookEditorWrapper__twppD{overflow:visible}.BookEditor-module_bookEditorWrapper__twppD:hover{box-shadow:0 4px 6px -1px rgba(0,0,0,.1),0 2px 4px -1px rgba(0,0,0,.06)}.BookEditor-module_BookEditor__s-0PU[data-book-editor-theme=dark] .BookEditor-module_bookEditorWrapper__twppD{background:linear-gradient(180deg,rgba(15,23,42,.98),rgba(8,15,28,.98));border-color:rgba(51,65,85,.92);box-shadow:0 20px 45px rgba(2,6,23,.4)}.BookEditor-module_BookEditor__s-0PU[data-book-editor-theme=dark] .BookEditor-module_bookEditorWrapper__twppD:hover{box-shadow:0 24px 50px rgba(2,6,23,.48)}.BookEditor-module_bookEditorWrapper__twppD.BookEditor-module_isBorderRadiusDisabled__h1I3v{border-radius:0}.BookEditor-module_dropOverlay__xWWoX{align-items:center;background-color:rgba(0,0,0,.5);bottom:0;color:#fff;display:flex;font-size:1.5rem;justify-content:center;left:0;pointer-events:none;position:absolute;right:0;top:0;z-index:100}.BookEditor-module_bookEditorActionbar__KW6dc{position:absolute;right:55px;top:10px;z-index:100}.BookEditor-module_fullscreen__rktsl{border:none;border-radius:0;bottom:0;box-shadow:none;height:100%;left:0;padding-top:50px;position:fixed;right:0;top:0;width:100%;z-index:9999}.BookEditor-module_button__hS390{align-items:center;background-color:#fff;border:1px solid #d1d5db;border-radius:.375rem;box-shadow:0 1px 2px 0 rgba(0,0,0,.05);color:#374151;cursor:pointer;display:inline-flex;gap:.5rem;padding:.5rem 1rem;transition:all .2s ease-in-out}.BookEditor-module_button__hS390:hover{background-color:#f9fafb;border-color:#b7bcce;box-shadow:0 1px 3px 0 rgba(0,0,0,.1),0 1px 2px 0 rgba(0,0,0,.06)}.BookEditor-module_BookEditor__s-0PU[data-book-editor-theme=dark] .BookEditor-module_button__hS390{background-color:rgba(15,23,42,.92);border-color:rgba(71,85,105,.9);box-shadow:0 1px 2px 0 rgba(2,6,23,.35);color:#e2e8f0}.BookEditor-module_BookEditor__s-0PU[data-book-editor-theme=dark] .BookEditor-module_button__hS390:hover{background-color:rgba(30,41,59,.98);border-color:rgba(125,211,252,.5);box-shadow:0 10px 24px rgba(2,6,23,.35)}.BookEditor-module_savedNotification__OiX9L{align-items:center;animation:BookEditor-module_fadeOut__q8JnR 2s forwards;background-color:rgba(0,0,0,.7);border-radius:.5rem;color:#fff;display:flex;font-size:1.25rem;gap:.5rem;left:50%;padding:1rem 2rem;pointer-events:none;position:absolute;top:50%;transform:translate(-50%,-50%);z-index:1000}.BookEditor-module_BookEditor__s-0PU[data-book-editor-theme=dark] .BookEditor-module_savedNotification__OiX9L{background-color:rgba(2,6,23,.86);border:1px solid rgba(51,65,85,.9);color:#e2e8f0}.BookEditor-module_uploadPanel__2JJtD{background:hsla(0,0%,100%,.98);border:1px solid rgba(209,213,219,.9);border-radius:12px;bottom:20px;box-shadow:0 12px 30px rgba(15,23,42,.15);display:flex;flex-direction:column;gap:10px;max-width:calc(100% - 40px);padding:12px;position:absolute;right:20px;width:420px;z-index:220}.BookEditor-module_BookEditor__s-0PU[data-book-editor-theme=dark] .BookEditor-module_uploadPanel__2JJtD{background:rgba(8,15,28,.96);border-color:rgba(51,65,85,.9);box-shadow:0 18px 40px rgba(2,6,23,.45)}.BookEditor-module_uploadPanelHeader__pdJd2{align-items:center;display:flex;gap:12px;justify-content:space-between}.BookEditor-module_uploadPanelTitle__TJIVF{color:#111827;font-size:.95rem;font-weight:600}.BookEditor-module_BookEditor__s-0PU[data-book-editor-theme=dark] .BookEditor-module_uploadPanelTitle__TJIVF{color:#f8fafc}.BookEditor-module_uploadPanelHeaderMeta__Xw0uI{color:#6b7280;font-size:.75rem}.BookEditor-module_BookEditor__s-0PU[data-book-editor-theme=dark] .BookEditor-module_uploadPanelHeaderMeta__Xw0uI,.BookEditor-module_BookEditor__s-0PU[data-book-editor-theme=dark] .BookEditor-module_uploadPanelSummary__rwSbG,.BookEditor-module_BookEditor__s-0PU[data-book-editor-theme=dark] .BookEditor-module_uploadRowMeta__1lz9h,.BookEditor-module_BookEditor__s-0PU[data-book-editor-theme=dark] .BookEditor-module_uploadRowStatus__jsUb-{color:#94a3b8}.BookEditor-module_uploadPanelSummary__rwSbG{color:#6b7280;display:grid;font-size:.75rem;gap:4px 12px;grid-template-columns:1fr 1fr}.BookEditor-module_uploadPanelProgressBar__a6pjf{background:#e5e7eb;border-radius:999px;height:6px;overflow:hidden}.BookEditor-module_uploadPanelProgressFill__l-TKR{background:linear-gradient(90deg,#2563eb,#10b981);height:100%;transition:width .2s ease}.BookEditor-module_BookEditor__s-0PU[data-book-editor-theme=dark] .BookEditor-module_uploadPanelProgressBar__a6pjf,.BookEditor-module_BookEditor__s-0PU[data-book-editor-theme=dark] .BookEditor-module_uploadRowProgressBar__NoBA7{background:#1e293b}.BookEditor-module_uploadPanelList__VxEd5{display:flex;flex-direction:column;gap:8px;max-height:220px;overflow-y:auto;padding-right:4px}.BookEditor-module_uploadRow__QiSFg{background:#fff;border:1px solid #e5e7eb;border-radius:10px;display:flex;flex-direction:column;gap:6px;padding:8px}.BookEditor-module_BookEditor__s-0PU[data-book-editor-theme=dark] .BookEditor-module_uploadRow__QiSFg{background:rgba(15,23,42,.92);border-color:#334155}.BookEditor-module_uploadRowHeader__po0j5{align-items:center;display:flex;gap:8px;justify-content:space-between}.BookEditor-module_uploadRowName__doQRO{color:#111827;font-size:.8rem;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.BookEditor-module_BookEditor__s-0PU[data-book-editor-theme=dark] .BookEditor-module_uploadRowName__doQRO{color:#f8fafc}.BookEditor-module_uploadRowStatus__jsUb-{color:#6b7280;font-size:.7rem}.BookEditor-module_uploadRowMeta__1lz9h{color:#6b7280;display:flex;font-size:.7rem;justify-content:space-between}.BookEditor-module_uploadRowProgressBar__NoBA7{background:#e5e7eb;border-radius:999px;height:4px;overflow:hidden}.BookEditor-module_uploadRowProgressFill__TrP7e{background:#3b82f6;height:100%;transition:width .2s ease}.BookEditor-module_uploadRowActions__5Y1Mq{display:flex;gap:6px}.BookEditor-module_uploadActionButton__CqJrr{background:#f9fafb;border:1px solid #d1d5db;border-radius:6px;color:#374151;cursor:pointer;font-size:.7rem;padding:2px 8px;transition:all .15s ease-in-out}.BookEditor-module_uploadActionButton__CqJrr:hover{background:#eef2f7;border-color:#cbd5f5}.BookEditor-module_BookEditor__s-0PU[data-book-editor-theme=dark] .BookEditor-module_uploadActionButton__CqJrr{background:#0f172a;border-color:#475569;color:#e2e8f0}.BookEditor-module_BookEditor__s-0PU[data-book-editor-theme=dark] .BookEditor-module_uploadActionButton__CqJrr:hover{background:#1e293b;border-color:#7dd3fc}.BookEditor-module_uploadRowError__eEHWw{color:#b91c1c;font-size:.7rem}@keyframes BookEditor-module_fadeOut__q8JnR{0%{opacity:0}10%{opacity:1}70%{opacity:1}to{opacity:0}}\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkJvb2tFZGl0b3IubW9kdWxlLmNzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxxQ0FFSSxVQUNKLENBRUEsOENBS0kscUJBQXNCLENBSHRCLFdBQVksQ0FFWixtQkFBb0IsQ0FEcEIsaUJBQWtCLENBRmxCLFVBS0osQ0FFQSxpRkFFSSxnQ0FBcUMsQ0FDckMsaUNBRUosQ0FFQSxvQ0FDSSwwQkFDSixDQUVBLDRDQUtJLHFCQUF1QixDQUR2QixxQ0FBMEMsQ0FGMUMsa0JBQW1CLENBSW5CLHNDQUEyQyxDQUwzQyxlQUFnQixDQUVoQixnQkFBaUIsQ0FJakIscUNBQ0osQ0FDQSxnRkFFSSxnQkFFSixDQUVBLGtEQUNJLHVFQUNKLENBRUEsOEdBRUksdUVBQWtGLENBRGxGLCtCQUFvQyxDQUVwQyxzQ0FDSixDQUVBLG9IQUNJLHVDQUNKLENBVUEsNEZBQ0ksZUFDSixDQUVBLHNDQVNJLGtCQUFtQixDQUhuQiwrQkFBb0MsQ0FEcEMsUUFBUyxDQUVULFVBQVksQ0FDWixZQUFhLENBR2IsZ0JBQWlCLENBRGpCLHNCQUF1QixDQVB2QixNQUFPLENBVVAsbUJBQW9CLENBWnBCLGlCQUFrQixDQUdsQixPQUFRLENBRlIsS0FBTSxDQVVOLFdBRUosQ0FRQSw4Q0FDSSxpQkFBa0IsQ0FFbEIsVUFBVyxDQURYLFFBQVMsQ0FFVCxXQUNKLENBRUEscUNBV0ksV0FBWSxDQUZaLGVBQWdCLENBSmhCLFFBQVMsQ0FPVCxlQUFnQixDQUxoQixXQUFZLENBSlosTUFBTyxDQU9QLGdCQUFpQixDQVRqQixjQUFlLENBR2YsT0FBUSxDQUZSLEtBQU0sQ0FJTixVQUFXLENBRVgsWUFLSixDQUVBLGlDQU9JLGtCQUFtQixDQU5uQixxQkFBc0IsQ0FDdEIsd0JBQXlCLENBQ3pCLHFCQUF1QixDQU92QixzQ0FBMkMsQ0FEM0MsYUFBYyxDQUpkLGNBQWUsQ0FDZixtQkFBb0IsQ0FFcEIsU0FBVyxDQUpYLGtCQUFvQixDQU9wQiw4QkFDSixDQUVBLHVDQUNJLHdCQUF5QixDQUN6QixvQkFBcUIsQ0FDckIsaUVBQ0osQ0FFQSxtR0FDSSxtQ0FBd0MsQ0FDeEMsK0JBQW9DLENBRXBDLHVDQUE0QyxDQUQ1QyxhQUVKLENBRUEseUdBQ0ksbUNBQXdDLENBQ3hDLGlDQUFzQyxDQUN0Qyx1Q0FDSixDQUVBLDRDQWFJLGtCQUFtQixDQUVuQixzREFBOEIsQ0FWOUIsK0JBQW9DLENBR3BDLG1CQUFxQixDQUZyQixVQUFZLENBTVosWUFBYSxDQUhiLGlCQUFrQixDQUtsQixTQUFXLENBWFgsUUFBUyxDQUlULGlCQUFrQixDQUlsQixtQkFBb0IsQ0FWcEIsaUJBQWtCLENBQ2xCLE9BQVEsQ0FFUiw4QkFBZ0MsQ0FNaEMsWUFNSixDQUVBLDhHQUNJLGlDQUFzQyxDQUV0QyxrQ0FBdUMsQ0FEdkMsYUFFSixDQUVBLHNDQU1JLDhCQUFxQyxDQUNyQyxxQ0FBMEMsQ0FDMUMsa0JBQW1CLENBTG5CLFdBQVksQ0FNWix5Q0FBOEMsQ0FFOUMsWUFBYSxDQUNiLHFCQUFzQixDQUN0QixRQUFTLENBUlQsMkJBQTRCLENBSzVCLFlBQWEsQ0FUYixpQkFBa0IsQ0FDbEIsVUFBVyxDQUVYLFdBQVksQ0FVWixXQUNKLENBRUEsd0dBQ0ksNEJBQWlDLENBQ2pDLDhCQUFtQyxDQUNuQyx1Q0FDSixDQUVBLDRDQUVJLGtCQUFtQixDQURuQixZQUFhLENBR2IsUUFBUyxDQURULDZCQUVKLENBRUEsMkNBR0ksYUFBYyxDQURkLGdCQUFrQixDQURsQixlQUdKLENBRUEsNkdBQ0ksYUFDSixDQUVBLGdEQUVJLGFBQWMsQ0FEZCxnQkFFSixDQUVBLHViQUlJLGFBQ0osQ0FFQSw2Q0FLSSxhQUFjLENBSmQsWUFBYSxDQUdiLGdCQUFrQixDQURsQixZQUFhLENBRGIsNkJBSUosQ0FFQSxpREFFSSxrQkFBbUIsQ0FDbkIsbUJBQW9CLENBRnBCLFVBQVcsQ0FHWCxlQUNKLENBRUEsa0RBRUksaURBQW9ELENBRHBELFdBQVksQ0FFWix5QkFDSixDQUVBLG9PQUVJLGtCQUNKLENBRUEsMENBQ0ksWUFBYSxDQUNiLHFCQUFzQixDQUN0QixPQUFRLENBQ1IsZ0JBQWlCLENBQ2pCLGVBQWdCLENBQ2hCLGlCQUNKLENBRUEsb0NBT0ksZUFBZ0IsQ0FOaEIsd0JBQXlCLENBQ3pCLGtCQUFtQixDQUVuQixZQUFhLENBQ2IscUJBQXNCLENBQ3RCLE9BQVEsQ0FIUixXQUtKLENBRUEsc0dBRUksNkJBQWtDLENBRGxDLG9CQUVKLENBRUEsMENBRUksa0JBQW1CLENBRG5CLFlBQWEsQ0FHYixPQUFRLENBRFIsNkJBRUosQ0FFQSx3Q0FHSSxhQUFjLENBRmQsZUFBaUIsQ0FDakIsZUFBZ0IsQ0FFaEIsZUFBZ0IsQ0FDaEIsc0JBQXVCLENBQ3ZCLGtCQUNKLENBRUEsMEdBQ0ksYUFDSixDQUVBLDBDQUVJLGFBQWMsQ0FEZCxlQUVKLENBRUEsd0NBSUksYUFBYyxDQUhkLFlBQWEsQ0FFYixlQUFpQixDQURqQiw2QkFHSixDQUVBLCtDQUVJLGtCQUFtQixDQUNuQixtQkFBb0IsQ0FGcEIsVUFBVyxDQUdYLGVBQ0osQ0FFQSxnREFFSSxrQkFBbUIsQ0FEbkIsV0FBWSxDQUVaLHlCQUNKLENBRUEsMkNBQ0ksWUFBYSxDQUNiLE9BQ0osQ0FFQSw2Q0FFSSxrQkFBbUIsQ0FEbkIsd0JBQXlCLENBS3pCLGlCQUFrQixDQUhsQixhQUFjLENBSWQsY0FBZSxDQUhmLGVBQWlCLENBQ2pCLGVBQWdCLENBR2hCLCtCQUNKLENBRUEsbURBQ0ksa0JBQW1CLENBQ25CLG9CQUNKLENBRUEsK0dBRUksa0JBQW1CLENBRG5CLG9CQUFxQixDQUVyQixhQUNKLENBRUEscUhBQ0ksa0JBQW1CLENBQ25CLG9CQUNKLENBRUEseUNBRUksYUFBYyxDQURkLGVBRUosQ0FFQSw0Q0FDSSxHQUNJLFNBQ0osQ0FDQSxJQUNJLFNBQ0osQ0FDQSxJQUNJLFNBQ0osQ0FDQSxHQUNJLFNBQ0osQ0FDSiIsImZpbGUiOiJCb29rRWRpdG9yLm1vZHVsZS5jc3MiLCJzb3VyY2VzQ29udGVudCI6WyIuQm9va0VkaXRvciB7XG4gICAgLyogaGVpZ2h0OiA0NTBweDsgKi9cbiAgICB3aWR0aDogMTAwJTtcbn1cblxuLmJvb2tFZGl0b3JDb250YWluZXIge1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIGhlaWdodDogMTAwJTtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgcGFkZGluZzogMTBweCAyNXB4IDA7XG4gICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbn1cblxuLmJvb2tFZGl0b3JDb250YWluZXIuaXNWZXJib3NlIHtcbiAgICAvKiovXG4gICAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjA1KTtcbiAgICBvdXRsaW5lOiAxcHggZG90dGVkIHJnYmEoMCwgMCwgMCwgMC41KTtcbiAgICAvKiovXG59XG5cbi5pc1ZlcmJvc2Uge1xuICAgIG91dGxpbmU6IDJweCBkb3R0ZWQgcmdiKDI1NSAxMTcgMzgpO1xufVxuXG4uYm9va0VkaXRvcldyYXBwZXIge1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgYm9yZGVyLXJhZGl1czogMXJlbTtcbiAgICBwYWRkaW5nLXRvcDogMTBweDtcbiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDIwOSwgMjEzLCAyMTksIDAuOCk7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XG4gICAgYm94LXNoYWRvdzogMCAxcHggMnB4IDAgcmdiYSgwLCAwLCAwLCAwLjA1KTtcbiAgICB0cmFuc2l0aW9uOiBib3gtc2hhZG93IDAuMnMgZWFzZS1pbi1vdXQ7XG59XG4uaXNWZXJib3NlIC5ib29rRWRpdG9yV3JhcHBlciB7XG4gICAgLyoqL1xuICAgIG92ZXJmbG93OiB2aXNpYmxlO1xuICAgIC8qKi9cbn1cblxuLmJvb2tFZGl0b3JXcmFwcGVyOmhvdmVyIHtcbiAgICBib3gtc2hhZG93OiAwIDRweCA2cHggLTFweCByZ2JhKDAsIDAsIDAsIDAuMSksIDAgMnB4IDRweCAtMXB4IHJnYmEoMCwgMCwgMCwgMC4wNik7XG59XG5cbi5Cb29rRWRpdG9yW2RhdGEtYm9vay1lZGl0b3ItdGhlbWU9J2RhcmsnXSAuYm9va0VkaXRvcldyYXBwZXIge1xuICAgIGJvcmRlci1jb2xvcjogcmdiYSg1MSwgNjUsIDg1LCAwLjkyKTtcbiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTgwZGVnLCByZ2JhKDE1LCAyMywgNDIsIDAuOTgpLCByZ2JhKDgsIDE1LCAyOCwgMC45OCkpO1xuICAgIGJveC1zaGFkb3c6IDAgMjBweCA0NXB4IHJnYmEoMiwgNiwgMjMsIDAuNCk7XG59XG5cbi5Cb29rRWRpdG9yW2RhdGEtYm9vay1lZGl0b3ItdGhlbWU9J2RhcmsnXSAuYm9va0VkaXRvcldyYXBwZXI6aG92ZXIge1xuICAgIGJveC1zaGFkb3c6IDAgMjRweCA1MHB4IHJnYmEoMiwgNiwgMjMsIDAuNDgpO1xufVxuXG4uYm9va0VkaXRvcldyYXBwZXI6Zm9jdXMtd2l0aGluIHtcbiAgICAvKlxuICAgIG91dGxpbmU6IDJweCBzb2xpZCB0cmFuc3BhcmVudDtcbiAgICBvdXRsaW5lLW9mZnNldDogMnB4O1xuICAgIGJveC1zaGFkb3c6IDAgMCAwIDNweCByZ2JhKDk5LCAxMDIsIDI0MSwgMC40KTtcbiAgICAqL1xufVxuXG4uYm9va0VkaXRvcldyYXBwZXIuaXNCb3JkZXJSYWRpdXNEaXNhYmxlZCB7XG4gICAgYm9yZGVyLXJhZGl1czogMDtcbn1cblxuLmRyb3BPdmVybGF5IHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgdG9wOiAwO1xuICAgIGxlZnQ6IDA7XG4gICAgcmlnaHQ6IDA7XG4gICAgYm90dG9tOiAwO1xuICAgIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC41KTtcbiAgICBjb2xvcjogd2hpdGU7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgIGZvbnQtc2l6ZTogMS41cmVtO1xuICAgIHotaW5kZXg6IDEwMDtcbiAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbn1cblxuLypcbi5ib29rRWRpdG9yQ29udGFpbmVyIDpnbG9iYWwoLnZpZXctbGluZSkge1xuICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZWVlOyAvKiA8LSBOb3RlOiBgUFJPTVBUQk9PS19TWU5UQVhfQ09MT1JTLkxJTkVgICogL1xufVxuKi9cblxuLmJvb2tFZGl0b3JBY3Rpb25iYXIge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB0b3A6IDEwcHg7XG4gICAgcmlnaHQ6IDU1cHg7XG4gICAgei1pbmRleDogMTAwO1xufVxuXG4uZnVsbHNjcmVlbiB7XG4gICAgcG9zaXRpb246IGZpeGVkO1xuICAgIHRvcDogMDtcbiAgICBsZWZ0OiAwO1xuICAgIHJpZ2h0OiAwO1xuICAgIGJvdHRvbTogMDtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBoZWlnaHQ6IDEwMCU7XG4gICAgei1pbmRleDogOTk5OTtcbiAgICBib3JkZXItcmFkaXVzOiAwO1xuICAgIHBhZGRpbmctdG9wOiA1MHB4O1xuICAgIGJvcmRlcjogbm9uZTtcbiAgICBib3gtc2hhZG93OiBub25lO1xufVxuXG4uYnV0dG9uIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xuICAgIGJvcmRlcjogMXB4IHNvbGlkICNkMWQ1ZGI7XG4gICAgYm9yZGVyLXJhZGl1czogMC4zNzVyZW07XG4gICAgcGFkZGluZzogMC41cmVtIDFyZW07XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICAgIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgZ2FwOiAwLjVyZW07XG4gICAgY29sb3I6ICMzNzQxNTE7XG4gICAgYm94LXNoYWRvdzogMCAxcHggMnB4IDAgcmdiYSgwLCAwLCAwLCAwLjA1KTtcbiAgICB0cmFuc2l0aW9uOiBhbGwgMC4ycyBlYXNlLWluLW91dDtcbn1cblxuLmJ1dHRvbjpob3ZlciB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogI2Y5ZmFmYjtcbiAgICBib3JkZXItY29sb3I6ICNiN2JjY2U7XG4gICAgYm94LXNoYWRvdzogMCAxcHggM3B4IDAgcmdiYSgwLCAwLCAwLCAwLjEpLCAwIDFweCAycHggMCByZ2JhKDAsIDAsIDAsIDAuMDYpO1xufVxuXG4uQm9va0VkaXRvcltkYXRhLWJvb2stZWRpdG9yLXRoZW1lPSdkYXJrJ10gLmJ1dHRvbiB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgxNSwgMjMsIDQyLCAwLjkyKTtcbiAgICBib3JkZXItY29sb3I6IHJnYmEoNzEsIDg1LCAxMDUsIDAuOSk7XG4gICAgY29sb3I6ICNlMmU4ZjA7XG4gICAgYm94LXNoYWRvdzogMCAxcHggMnB4IDAgcmdiYSgyLCA2LCAyMywgMC4zNSk7XG59XG5cbi5Cb29rRWRpdG9yW2RhdGEtYm9vay1lZGl0b3ItdGhlbWU9J2RhcmsnXSAuYnV0dG9uOmhvdmVyIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDMwLCA0MSwgNTksIDAuOTgpO1xuICAgIGJvcmRlci1jb2xvcjogcmdiYSgxMjUsIDIxMSwgMjUyLCAwLjUpO1xuICAgIGJveC1zaGFkb3c6IDAgMTBweCAyNHB4IHJnYmEoMiwgNiwgMjMsIDAuMzUpO1xufVxuXG4uc2F2ZWROb3RpZmljYXRpb24ge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB0b3A6IDUwJTtcbiAgICBsZWZ0OiA1MCU7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTUwJSk7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjcpO1xuICAgIGNvbG9yOiB3aGl0ZTtcbiAgICBwYWRkaW5nOiAxcmVtIDJyZW07XG4gICAgYm9yZGVyLXJhZGl1czogMC41cmVtO1xuICAgIGZvbnQtc2l6ZTogMS4yNXJlbTtcbiAgICB6LWluZGV4OiAxMDAwO1xuICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBnYXA6IDAuNXJlbTtcbiAgICBhbmltYXRpb246IGZhZGVPdXQgMnMgZm9yd2FyZHM7XG59XG5cbi5Cb29rRWRpdG9yW2RhdGEtYm9vay1lZGl0b3ItdGhlbWU9J2RhcmsnXSAuc2F2ZWROb3RpZmljYXRpb24ge1xuICAgIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMiwgNiwgMjMsIDAuODYpO1xuICAgIGNvbG9yOiAjZTJlOGYwO1xuICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoNTEsIDY1LCA4NSwgMC45KTtcbn1cblxuLnVwbG9hZFBhbmVsIHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgcmlnaHQ6IDIwcHg7XG4gICAgYm90dG9tOiAyMHB4O1xuICAgIHdpZHRoOiA0MjBweDtcbiAgICBtYXgtd2lkdGg6IGNhbGMoMTAwJSAtIDQwcHgpO1xuICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC45OCk7XG4gICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgyMDksIDIxMywgMjE5LCAwLjkpO1xuICAgIGJvcmRlci1yYWRpdXM6IDEycHg7XG4gICAgYm94LXNoYWRvdzogMCAxMnB4IDMwcHggcmdiYSgxNSwgMjMsIDQyLCAwLjE1KTtcbiAgICBwYWRkaW5nOiAxMnB4O1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICBnYXA6IDEwcHg7XG4gICAgei1pbmRleDogMjIwO1xufVxuXG4uQm9va0VkaXRvcltkYXRhLWJvb2stZWRpdG9yLXRoZW1lPSdkYXJrJ10gLnVwbG9hZFBhbmVsIHtcbiAgICBiYWNrZ3JvdW5kOiByZ2JhKDgsIDE1LCAyOCwgMC45Nik7XG4gICAgYm9yZGVyLWNvbG9yOiByZ2JhKDUxLCA2NSwgODUsIDAuOSk7XG4gICAgYm94LXNoYWRvdzogMCAxOHB4IDQwcHggcmdiYSgyLCA2LCAyMywgMC40NSk7XG59XG5cbi51cGxvYWRQYW5lbEhlYWRlciB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgICBnYXA6IDEycHg7XG59XG5cbi51cGxvYWRQYW5lbFRpdGxlIHtcbiAgICBmb250LXdlaWdodDogNjAwO1xuICAgIGZvbnQtc2l6ZTogMC45NXJlbTtcbiAgICBjb2xvcjogIzExMTgyNztcbn1cblxuLkJvb2tFZGl0b3JbZGF0YS1ib29rLWVkaXRvci10aGVtZT0nZGFyayddIC51cGxvYWRQYW5lbFRpdGxlIHtcbiAgICBjb2xvcjogI2Y4ZmFmYztcbn1cblxuLnVwbG9hZFBhbmVsSGVhZGVyTWV0YSB7XG4gICAgZm9udC1zaXplOiAwLjc1cmVtO1xuICAgIGNvbG9yOiAjNmI3MjgwO1xufVxuXG4uQm9va0VkaXRvcltkYXRhLWJvb2stZWRpdG9yLXRoZW1lPSdkYXJrJ10gLnVwbG9hZFBhbmVsSGVhZGVyTWV0YSxcbi5Cb29rRWRpdG9yW2RhdGEtYm9vay1lZGl0b3ItdGhlbWU9J2RhcmsnXSAudXBsb2FkUGFuZWxTdW1tYXJ5LFxuLkJvb2tFZGl0b3JbZGF0YS1ib29rLWVkaXRvci10aGVtZT0nZGFyayddIC51cGxvYWRSb3dTdGF0dXMsXG4uQm9va0VkaXRvcltkYXRhLWJvb2stZWRpdG9yLXRoZW1lPSdkYXJrJ10gLnVwbG9hZFJvd01ldGEge1xuICAgIGNvbG9yOiAjOTRhM2I4O1xufVxuXG4udXBsb2FkUGFuZWxTdW1tYXJ5IHtcbiAgICBkaXNwbGF5OiBncmlkO1xuICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogMWZyIDFmcjtcbiAgICBnYXA6IDRweCAxMnB4O1xuICAgIGZvbnQtc2l6ZTogMC43NXJlbTtcbiAgICBjb2xvcjogIzZiNzI4MDtcbn1cblxuLnVwbG9hZFBhbmVsUHJvZ3Jlc3NCYXIge1xuICAgIGhlaWdodDogNnB4O1xuICAgIGJhY2tncm91bmQ6ICNlNWU3ZWI7XG4gICAgYm9yZGVyLXJhZGl1czogOTk5cHg7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cblxuLnVwbG9hZFBhbmVsUHJvZ3Jlc3NGaWxsIHtcbiAgICBoZWlnaHQ6IDEwMCU7XG4gICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDkwZGVnLCAjMjU2M2ViLCAjMTBiOTgxKTtcbiAgICB0cmFuc2l0aW9uOiB3aWR0aCAwLjJzIGVhc2U7XG59XG5cbi5Cb29rRWRpdG9yW2RhdGEtYm9vay1lZGl0b3ItdGhlbWU9J2RhcmsnXSAudXBsb2FkUGFuZWxQcm9ncmVzc0Jhcixcbi5Cb29rRWRpdG9yW2RhdGEtYm9vay1lZGl0b3ItdGhlbWU9J2RhcmsnXSAudXBsb2FkUm93UHJvZ3Jlc3NCYXIge1xuICAgIGJhY2tncm91bmQ6ICMxZTI5M2I7XG59XG5cbi51cGxvYWRQYW5lbExpc3Qge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICBnYXA6IDhweDtcbiAgICBtYXgtaGVpZ2h0OiAyMjBweDtcbiAgICBvdmVyZmxvdy15OiBhdXRvO1xuICAgIHBhZGRpbmctcmlnaHQ6IDRweDtcbn1cblxuLnVwbG9hZFJvdyB7XG4gICAgYm9yZGVyOiAxcHggc29saWQgI2U1ZTdlYjtcbiAgICBib3JkZXItcmFkaXVzOiAxMHB4O1xuICAgIHBhZGRpbmc6IDhweDtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgZ2FwOiA2cHg7XG4gICAgYmFja2dyb3VuZDogI2ZmZjtcbn1cblxuLkJvb2tFZGl0b3JbZGF0YS1ib29rLWVkaXRvci10aGVtZT0nZGFyayddIC51cGxvYWRSb3cge1xuICAgIGJvcmRlci1jb2xvcjogIzMzNDE1NTtcbiAgICBiYWNrZ3JvdW5kOiByZ2JhKDE1LCAyMywgNDIsIDAuOTIpO1xufVxuXG4udXBsb2FkUm93SGVhZGVyIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICAgIGdhcDogOHB4O1xufVxuXG4udXBsb2FkUm93TmFtZSB7XG4gICAgZm9udC1zaXplOiAwLjhyZW07XG4gICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICBjb2xvcjogIzExMTgyNztcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xuICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG59XG5cbi5Cb29rRWRpdG9yW2RhdGEtYm9vay1lZGl0b3ItdGhlbWU9J2RhcmsnXSAudXBsb2FkUm93TmFtZSB7XG4gICAgY29sb3I6ICNmOGZhZmM7XG59XG5cbi51cGxvYWRSb3dTdGF0dXMge1xuICAgIGZvbnQtc2l6ZTogMC43cmVtO1xuICAgIGNvbG9yOiAjNmI3MjgwO1xufVxuXG4udXBsb2FkUm93TWV0YSB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gICAgZm9udC1zaXplOiAwLjdyZW07XG4gICAgY29sb3I6ICM2YjcyODA7XG59XG5cbi51cGxvYWRSb3dQcm9ncmVzc0JhciB7XG4gICAgaGVpZ2h0OiA0cHg7XG4gICAgYmFja2dyb3VuZDogI2U1ZTdlYjtcbiAgICBib3JkZXItcmFkaXVzOiA5OTlweDtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xufVxuXG4udXBsb2FkUm93UHJvZ3Jlc3NGaWxsIHtcbiAgICBoZWlnaHQ6IDEwMCU7XG4gICAgYmFja2dyb3VuZDogIzNiODJmNjtcbiAgICB0cmFuc2l0aW9uOiB3aWR0aCAwLjJzIGVhc2U7XG59XG5cbi51cGxvYWRSb3dBY3Rpb25zIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGdhcDogNnB4O1xufVxuXG4udXBsb2FkQWN0aW9uQnV0dG9uIHtcbiAgICBib3JkZXI6IDFweCBzb2xpZCAjZDFkNWRiO1xuICAgIGJhY2tncm91bmQ6ICNmOWZhZmI7XG4gICAgY29sb3I6ICMzNzQxNTE7XG4gICAgZm9udC1zaXplOiAwLjdyZW07XG4gICAgcGFkZGluZzogMnB4IDhweDtcbiAgICBib3JkZXItcmFkaXVzOiA2cHg7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICAgIHRyYW5zaXRpb246IGFsbCAwLjE1cyBlYXNlLWluLW91dDtcbn1cblxuLnVwbG9hZEFjdGlvbkJ1dHRvbjpob3ZlciB7XG4gICAgYmFja2dyb3VuZDogI2VlZjJmNztcbiAgICBib3JkZXItY29sb3I6ICNjYmQ1ZjU7XG59XG5cbi5Cb29rRWRpdG9yW2RhdGEtYm9vay1lZGl0b3ItdGhlbWU9J2RhcmsnXSAudXBsb2FkQWN0aW9uQnV0dG9uIHtcbiAgICBib3JkZXItY29sb3I6ICM0NzU1Njk7XG4gICAgYmFja2dyb3VuZDogIzBmMTcyYTtcbiAgICBjb2xvcjogI2UyZThmMDtcbn1cblxuLkJvb2tFZGl0b3JbZGF0YS1ib29rLWVkaXRvci10aGVtZT0nZGFyayddIC51cGxvYWRBY3Rpb25CdXR0b246aG92ZXIge1xuICAgIGJhY2tncm91bmQ6ICMxZTI5M2I7XG4gICAgYm9yZGVyLWNvbG9yOiAjN2RkM2ZjO1xufVxuXG4udXBsb2FkUm93RXJyb3Ige1xuICAgIGZvbnQtc2l6ZTogMC43cmVtO1xuICAgIGNvbG9yOiAjYjkxYzFjO1xufVxuXG5Aa2V5ZnJhbWVzIGZhZGVPdXQge1xuICAgIDAlIHtcbiAgICAgICAgb3BhY2l0eTogMDtcbiAgICB9XG4gICAgMTAlIHtcbiAgICAgICAgb3BhY2l0eTogMTtcbiAgICB9XG4gICAgNzAlIHtcbiAgICAgICAgb3BhY2l0eTogMTtcbiAgICB9XG4gICAgMTAwJSB7XG4gICAgICAgIG9wYWNpdHk6IDA7XG4gICAgfVxufVxuIl19 */";
18732
+ var styles$d = {"BookEditor":"BookEditor-module_BookEditor__s-0PU","bookEditorContainer":"BookEditor-module_bookEditorContainer__wLMwM","isVerbose":"BookEditor-module_isVerbose__VQ6iL","bookEditorWrapper":"BookEditor-module_bookEditorWrapper__twppD","isBorderRadiusDisabled":"BookEditor-module_isBorderRadiusDisabled__h1I3v","dropOverlay":"BookEditor-module_dropOverlay__xWWoX","bookEditorActionbar":"BookEditor-module_bookEditorActionbar__KW6dc","fullscreen":"BookEditor-module_fullscreen__rktsl","button":"BookEditor-module_button__hS390","savedNotification":"BookEditor-module_savedNotification__OiX9L","fadeOut":"BookEditor-module_fadeOut__q8JnR","uploadPanel":"BookEditor-module_uploadPanel__2JJtD","uploadPanelHeader":"BookEditor-module_uploadPanelHeader__pdJd2","uploadPanelTitle":"BookEditor-module_uploadPanelTitle__TJIVF","uploadPanelHeaderMeta":"BookEditor-module_uploadPanelHeaderMeta__Xw0uI","uploadPanelSummary":"BookEditor-module_uploadPanelSummary__rwSbG","uploadRowStatus":"BookEditor-module_uploadRowStatus__jsUb-","uploadRowMeta":"BookEditor-module_uploadRowMeta__1lz9h","uploadPanelProgressBar":"BookEditor-module_uploadPanelProgressBar__a6pjf","uploadPanelProgressFill":"BookEditor-module_uploadPanelProgressFill__l-TKR","uploadRowProgressBar":"BookEditor-module_uploadRowProgressBar__NoBA7","uploadPanelList":"BookEditor-module_uploadPanelList__VxEd5","uploadRow":"BookEditor-module_uploadRow__QiSFg","uploadRowHeader":"BookEditor-module_uploadRowHeader__po0j5","uploadRowName":"BookEditor-module_uploadRowName__doQRO","uploadRowProgressFill":"BookEditor-module_uploadRowProgressFill__TrP7e","uploadRowActions":"BookEditor-module_uploadRowActions__5Y1Mq","uploadActionButton":"BookEditor-module_uploadActionButton__CqJrr","uploadRowError":"BookEditor-module_uploadRowError__eEHWw"};
18733
18733
  styleInject(css_248z$d);
18734
18734
 
18735
18735
  /**
@@ -18940,7 +18940,7 @@ function resolveCodeBlockLanguage(language) {
18940
18940
  return CODE_BLOCK_LANGUAGE_ALIASES[normalizedLanguage] || 'plaintext';
18941
18941
  }
18942
18942
 
18943
- var css_248z$c = ".CodeBlock-module_CodeBlock__6K33Z{border:1px solid #444;border-radius:5px;margin:10px 0;max-width:100%;overflow:hidden;width:100%}.CodeBlock-module_CodeBlockHeader__tfOwl{align-items:center;background-color:#2d2d2d;border-bottom:1px solid #444;color:#ccc;display:flex;font-size:.8em;justify-content:space-between;padding:5px 10px}.CodeBlock-module_CodeBlockButtons__rz1VO{display:flex;gap:8px}.CodeBlock-module_CopyButton__M07tp,.CodeBlock-module_CreateAgentButton__kUEnp,.CodeBlock-module_DownloadButton__ZTrzQ{align-items:center;background:transparent;border:none;color:#aaa;cursor:pointer;display:flex;font-size:inherit;gap:5px;padding:0;transition:color .2s}.CodeBlock-module_CopyButton__M07tp:hover,.CodeBlock-module_CreateAgentButton__kUEnp:hover,.CodeBlock-module_DownloadButton__ZTrzQ:hover{color:#fff}.CodeBlock-module_CodeBlock__6K33Z .monaco-editor,.CodeBlock-module_CodeBlock__6K33Z .monaco-editor .overflow-guard{max-width:100%}\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkNvZGVCbG9jay5tb2R1bGUuY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLG1DQUlJLHFCQUFzQixDQUZ0QixpQkFBa0IsQ0FEbEIsYUFBYyxDQUtkLGNBQWUsQ0FIZixlQUFnQixDQUVoQixVQUVKLENBRUEseUNBUUksa0JBQW1CLENBUG5CLHdCQUF5QixDQUl6Qiw0QkFBNkIsQ0FIN0IsVUFBVyxDQUlYLFlBQWEsQ0FGYixjQUFnQixDQUdoQiw2QkFBOEIsQ0FKOUIsZ0JBTUosQ0FFQSwwQ0FDSSxZQUFhLENBQ2IsT0FDSixDQUVBLHVIQVVJLGtCQUFtQixDQVBuQixzQkFBdUIsQ0FDdkIsV0FBWSxDQUNaLFVBQVcsQ0FDWCxjQUFlLENBR2YsWUFBYSxDQUZiLGlCQUFrQixDQUlsQixPQUFRLENBSFIsU0FBVSxDQUlWLG9CQUNKLENBRUEseUlBR0ksVUFDSixDQUVBLG9IQUVJLGNBQ0oiLCJmaWxlIjoiQ29kZUJsb2NrLm1vZHVsZS5jc3MiLCJzb3VyY2VzQ29udGVudCI6WyIuQ29kZUJsb2NrIHtcbiAgICBtYXJnaW46IDEwcHggMDtcbiAgICBib3JkZXItcmFkaXVzOiA1cHg7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICBib3JkZXI6IDFweCBzb2xpZCAjNDQ0OyAvKiBEYXJrIG1vZGUgYm9yZGVyICovXG4gICAgd2lkdGg6IDEwMCU7XG4gICAgbWF4LXdpZHRoOiAxMDAlO1xufVxuXG4uQ29kZUJsb2NrSGVhZGVyIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMmQyZDJkO1xuICAgIGNvbG9yOiAjY2NjO1xuICAgIHBhZGRpbmc6IDVweCAxMHB4O1xuICAgIGZvbnQtc2l6ZTogMC44ZW07XG4gICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICM0NDQ7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbn1cblxuLkNvZGVCbG9ja0J1dHRvbnMge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZ2FwOiA4cHg7XG59XG5cbi5Db3B5QnV0dG9uLFxuLkRvd25sb2FkQnV0dG9uLFxuLkNyZWF0ZUFnZW50QnV0dG9uIHtcbiAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbiAgICBib3JkZXI6IG5vbmU7XG4gICAgY29sb3I6ICNhYWE7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICAgIGZvbnQtc2l6ZTogaW5oZXJpdDtcbiAgICBwYWRkaW5nOiAwO1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBnYXA6IDVweDtcbiAgICB0cmFuc2l0aW9uOiBjb2xvciAwLjJzO1xufVxuXG4uQ29weUJ1dHRvbjpob3Zlcixcbi5Eb3dubG9hZEJ1dHRvbjpob3Zlcixcbi5DcmVhdGVBZ2VudEJ1dHRvbjpob3ZlciB7XG4gICAgY29sb3I6ICNmZmY7XG59XG5cbi5Db2RlQmxvY2sgOmdsb2JhbCgubW9uYWNvLWVkaXRvciksXG4uQ29kZUJsb2NrIDpnbG9iYWwoLm1vbmFjby1lZGl0b3IgLm92ZXJmbG93LWd1YXJkKSB7XG4gICAgbWF4LXdpZHRoOiAxMDAlO1xufVxuIl19 */";
18943
+ var css_248z$c = ".CodeBlock-module_CodeBlock__6K33Z{background:#fff;border:1px solid #d0d7e2;border-radius:5px;margin:10px 0;max-width:100%;overflow:hidden;width:100%}.CodeBlock-module_CodeBlockHeader__tfOwl{align-items:center;background-color:#f8fafc;border-bottom:1px solid #d0d7e2;color:#475569;display:flex;font-size:.8em;justify-content:space-between;padding:5px 10px}.CodeBlock-module_CodeBlockButtons__rz1VO{display:flex;gap:8px}.CodeBlock-module_CopyButton__M07tp,.CodeBlock-module_CreateAgentButton__kUEnp,.CodeBlock-module_DownloadButton__ZTrzQ{align-items:center;background:transparent;border:none;color:#64748b;cursor:pointer;display:flex;font-size:inherit;gap:5px;padding:0;transition:color .2s}.CodeBlock-module_CopyButton__M07tp:hover,.CodeBlock-module_CreateAgentButton__kUEnp:hover,.CodeBlock-module_DownloadButton__ZTrzQ:hover{color:#0f172a}.CodeBlock-module_CodeBlock__6K33Z[data-code-theme=dark]{background:#0f172a;border-color:#334155}.CodeBlock-module_CodeBlock__6K33Z[data-code-theme=dark] .CodeBlock-module_CodeBlockHeader__tfOwl{background-color:#111827;border-bottom-color:#334155;color:#cbd5e1}.CodeBlock-module_CodeBlock__6K33Z[data-code-theme=dark] .CodeBlock-module_CopyButton__M07tp,.CodeBlock-module_CodeBlock__6K33Z[data-code-theme=dark] .CodeBlock-module_CreateAgentButton__kUEnp,.CodeBlock-module_CodeBlock__6K33Z[data-code-theme=dark] .CodeBlock-module_DownloadButton__ZTrzQ{color:#94a3b8}.CodeBlock-module_CodeBlock__6K33Z[data-code-theme=dark] .CodeBlock-module_CopyButton__M07tp:hover,.CodeBlock-module_CodeBlock__6K33Z[data-code-theme=dark] .CodeBlock-module_CreateAgentButton__kUEnp:hover,.CodeBlock-module_CodeBlock__6K33Z[data-code-theme=dark] .CodeBlock-module_DownloadButton__ZTrzQ:hover{color:#f8fafc}.CodeBlock-module_CodeBlock__6K33Z .monaco-editor,.CodeBlock-module_CodeBlock__6K33Z .monaco-editor .overflow-guard{max-width:100%}\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkNvZGVCbG9jay5tb2R1bGUuY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLG1DQUtJLGVBQW1CLENBRG5CLHdCQUF5QixDQUZ6QixpQkFBa0IsQ0FEbEIsYUFBYyxDQU1kLGNBQWUsQ0FKZixlQUFnQixDQUdoQixVQUVKLENBRUEseUNBUUksa0JBQW1CLENBUG5CLHdCQUF5QixDQUl6QiwrQkFBZ0MsQ0FIaEMsYUFBYyxDQUlkLFlBQWEsQ0FGYixjQUFnQixDQUdoQiw2QkFBOEIsQ0FKOUIsZ0JBTUosQ0FFQSwwQ0FDSSxZQUFhLENBQ2IsT0FDSixDQUVBLHVIQVVJLGtCQUFtQixDQVBuQixzQkFBdUIsQ0FDdkIsV0FBWSxDQUNaLGFBQWMsQ0FDZCxjQUFlLENBR2YsWUFBYSxDQUZiLGlCQUFrQixDQUlsQixPQUFRLENBSFIsU0FBVSxDQUlWLG9CQUNKLENBRUEseUlBR0ksYUFDSixDQUVBLHlEQUVJLGtCQUFtQixDQURuQixvQkFFSixDQUVBLGtHQUNJLHdCQUF5QixDQUV6QiwyQkFBNEIsQ0FENUIsYUFFSixDQUVBLGtTQUdJLGFBQ0osQ0FFQSxvVEFHSSxhQUNKLENBRUEsb0hBRUksY0FDSiIsImZpbGUiOiJDb2RlQmxvY2subW9kdWxlLmNzcyIsInNvdXJjZXNDb250ZW50IjpbIi5Db2RlQmxvY2sge1xuICAgIG1hcmdpbjogMTBweCAwO1xuICAgIGJvcmRlci1yYWRpdXM6IDVweDtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIGJvcmRlcjogMXB4IHNvbGlkICNkMGQ3ZTI7XG4gICAgYmFja2dyb3VuZDogI2ZmZmZmZjtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBtYXgtd2lkdGg6IDEwMCU7XG59XG5cbi5Db2RlQmxvY2tIZWFkZXIge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICNmOGZhZmM7XG4gICAgY29sb3I6ICM0NzU1Njk7XG4gICAgcGFkZGluZzogNXB4IDEwcHg7XG4gICAgZm9udC1zaXplOiAwLjhlbTtcbiAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2QwZDdlMjtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xufVxuXG4uQ29kZUJsb2NrQnV0dG9ucyB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBnYXA6IDhweDtcbn1cblxuLkNvcHlCdXR0b24sXG4uRG93bmxvYWRCdXR0b24sXG4uQ3JlYXRlQWdlbnRCdXR0b24ge1xuICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICAgIGJvcmRlcjogbm9uZTtcbiAgICBjb2xvcjogIzY0NzQ4YjtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgZm9udC1zaXplOiBpbmhlcml0O1xuICAgIHBhZGRpbmc6IDA7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGdhcDogNXB4O1xuICAgIHRyYW5zaXRpb246IGNvbG9yIDAuMnM7XG59XG5cbi5Db3B5QnV0dG9uOmhvdmVyLFxuLkRvd25sb2FkQnV0dG9uOmhvdmVyLFxuLkNyZWF0ZUFnZW50QnV0dG9uOmhvdmVyIHtcbiAgICBjb2xvcjogIzBmMTcyYTtcbn1cblxuLkNvZGVCbG9ja1tkYXRhLWNvZGUtdGhlbWU9J2RhcmsnXSB7XG4gICAgYm9yZGVyLWNvbG9yOiAjMzM0MTU1O1xuICAgIGJhY2tncm91bmQ6ICMwZjE3MmE7XG59XG5cbi5Db2RlQmxvY2tbZGF0YS1jb2RlLXRoZW1lPSdkYXJrJ10gLkNvZGVCbG9ja0hlYWRlciB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogIzExMTgyNztcbiAgICBjb2xvcjogI2NiZDVlMTtcbiAgICBib3JkZXItYm90dG9tLWNvbG9yOiAjMzM0MTU1O1xufVxuXG4uQ29kZUJsb2NrW2RhdGEtY29kZS10aGVtZT0nZGFyayddIC5Db3B5QnV0dG9uLFxuLkNvZGVCbG9ja1tkYXRhLWNvZGUtdGhlbWU9J2RhcmsnXSAuRG93bmxvYWRCdXR0b24sXG4uQ29kZUJsb2NrW2RhdGEtY29kZS10aGVtZT0nZGFyayddIC5DcmVhdGVBZ2VudEJ1dHRvbiB7XG4gICAgY29sb3I6ICM5NGEzYjg7XG59XG5cbi5Db2RlQmxvY2tbZGF0YS1jb2RlLXRoZW1lPSdkYXJrJ10gLkNvcHlCdXR0b246aG92ZXIsXG4uQ29kZUJsb2NrW2RhdGEtY29kZS10aGVtZT0nZGFyayddIC5Eb3dubG9hZEJ1dHRvbjpob3Zlcixcbi5Db2RlQmxvY2tbZGF0YS1jb2RlLXRoZW1lPSdkYXJrJ10gLkNyZWF0ZUFnZW50QnV0dG9uOmhvdmVyIHtcbiAgICBjb2xvcjogI2Y4ZmFmYztcbn1cblxuLkNvZGVCbG9jayA6Z2xvYmFsKC5tb25hY28tZWRpdG9yKSxcbi5Db2RlQmxvY2sgOmdsb2JhbCgubW9uYWNvLWVkaXRvciAub3ZlcmZsb3ctZ3VhcmQpIHtcbiAgICBtYXgtd2lkdGg6IDEwMCU7XG59XG4iXX0= */";
18944
18944
  var styles$c = {"CodeBlock":"CodeBlock-module_CodeBlock__6K33Z","CodeBlockHeader":"CodeBlock-module_CodeBlockHeader__tfOwl","CodeBlockButtons":"CodeBlock-module_CodeBlockButtons__rz1VO","CopyButton":"CodeBlock-module_CopyButton__M07tp","DownloadButton":"CodeBlock-module_DownloadButton__ZTrzQ","CreateAgentButton":"CodeBlock-module_CreateAgentButton__kUEnp"};
18945
18945
  styleInject(css_248z$c);
18946
18946
 
@@ -18986,7 +18986,7 @@ function createCodeBlockMonacoModelPath(reactId, language) {
18986
18986
  *
18987
18987
  * @private Internal utility of `<ChatMessage />` component
18988
18988
  */
18989
- function CodeBlock({ code, language, className, onCreateAgent }) {
18989
+ function CodeBlock({ code, language, className, onCreateAgent, theme = 'LIGHT' }) {
18990
18990
  const reactId = useId();
18991
18991
  const normalizedLanguage = resolveCodeBlockLanguage(language);
18992
18992
  const isBookLanguage = normalizedLanguage === 'book';
@@ -19019,9 +19019,9 @@ function CodeBlock({ code, language, className, onCreateAgent }) {
19019
19019
  };
19020
19020
  const header = language ? (jsxs("div", { className: styles$c.CodeBlockHeader, children: [jsx("span", { children: language }), jsxs("div", { className: styles$c.CodeBlockButtons, children: [jsx("button", { onClick: handleCopy, className: styles$c.CopyButton, title: "Copy to clipboard", children: copied ? 'Copied!' : 'Copy' }), jsx("button", { onClick: handleDownload, className: styles$c.DownloadButton, title: "Download code", children: "Download" }), isBookLanguage && onCreateAgent && (jsx("button", { onClick: () => onCreateAgent(code), className: styles$c.CreateAgentButton, title: "Create agent from this book", children: "Create Agent" }))] })] })) : null;
19021
19021
  if (isBookLanguage) {
19022
- return (jsxs("div", { className: classNames(styles$c.CodeBlock, className), children: [header, jsx(BookEditor, { value: code, isReadonly: true, height: lines * 25 /* <- [🧠] A bit more than 19px to accommodate BookEditor lines */ })] }));
19022
+ return (jsxs("div", { className: classNames(styles$c.CodeBlock, className), "data-code-theme": theme.toLowerCase(), children: [header, jsx(BookEditor, { value: code, isReadonly: true, height: lines * 25 /* <- [🧠] A bit more than 19px to accommodate BookEditor lines */, theme: theme })] }));
19023
19023
  }
19024
- return (jsxs("div", { className: classNames(styles$c.CodeBlock, className), children: [header, jsx(MonacoEditorWithShadowDom, { height: `${height}px`, language: normalizedLanguage, path: modelPath, value: code, theme: "vs-dark", options: {
19024
+ return (jsxs("div", { className: classNames(styles$c.CodeBlock, className), "data-code-theme": theme.toLowerCase(), children: [header, jsx(MonacoEditorWithShadowDom, { height: `${height}px`, language: normalizedLanguage, path: modelPath, value: code, theme: theme === 'DARK' ? 'vs-dark' : 'vs-light', options: {
19025
19025
  readOnly: true,
19026
19026
  minimap: { enabled: false },
19027
19027
  automaticLayout: true,
@@ -20518,12 +20518,91 @@ const NOTE_LIKE_COMMITMENT_GROUPS = [
20518
20518
  * @private function of BookEditorMonaco
20519
20519
  */
20520
20520
  const BOOK_EDITOR_LANGUAGE_INITIALIZED_FLAG = 'promptbookBookEditorLanguageInitialized';
20521
+ /**
20522
+ * Internal Monaco flag used to avoid re-defining the Book theme when the requested mode stays unchanged.
20523
+ *
20524
+ * @private function of BookEditorMonaco
20525
+ */
20526
+ const BOOK_EDITOR_THEME_MODE_FLAG = 'promptbookBookEditorThemeMode';
20521
20527
  /**
20522
20528
  * Matches fenced code-block delimiters, including optional leading indentation.
20523
20529
  *
20524
20530
  * @private function of BookEditorMonaco
20525
20531
  */
20526
20532
  const CODE_BLOCK_FENCE_REGEX = /^\s*```.*$/;
20533
+ /**
20534
+ * Shared token rules reused by both light and dark Book Monaco themes.
20535
+ *
20536
+ * @private function of BookEditorMonaco
20537
+ */
20538
+ const BOOK_EDITOR_THEME_RULES = [
20539
+ {
20540
+ token: 'title',
20541
+ foreground: PROMPTBOOK_SYNTAX_COLORS.TITLE.toHex(),
20542
+ fontStyle: 'bold underline',
20543
+ },
20544
+ {
20545
+ token: 'commitment',
20546
+ foreground: PROMPTBOOK_SYNTAX_COLORS.COMMITMENT.toHex(),
20547
+ fontStyle: 'bold',
20548
+ },
20549
+ {
20550
+ token: 'note-commitment',
20551
+ foreground: PROMPTBOOK_SYNTAX_COLORS.NOTE_COMMITMENT.toHex(),
20552
+ },
20553
+ {
20554
+ token: 'todo-commitment',
20555
+ foreground: PROMPTBOOK_SYNTAX_COLORS.TODO_COMMITMENT_TEXT.toHex(),
20556
+ background: PROMPTBOOK_SYNTAX_COLORS.TODO_COMMITMENT_BACKGROUND.toHex(),
20557
+ fontStyle: 'bold',
20558
+ },
20559
+ {
20560
+ token: 'parameter',
20561
+ foreground: PROMPTBOOK_SYNTAX_COLORS.PARAMETER.toHex(),
20562
+ fontStyle: 'italic',
20563
+ },
20564
+ {
20565
+ token: 'agent-reference',
20566
+ foreground: PROMPTBOOK_SYNTAX_COLORS.COMMITMENT.toHex(),
20567
+ fontStyle: 'underline',
20568
+ },
20569
+ {
20570
+ token: 'code-block',
20571
+ foreground: PROMPTBOOK_SYNTAX_COLORS.CODE_BLOCK.toHex(),
20572
+ },
20573
+ ];
20574
+ /**
20575
+ * Re-defines the shared Book Monaco theme according to the requested light/dark mode.
20576
+ *
20577
+ * @private function of BookEditorMonaco
20578
+ */
20579
+ function applyBookEditorMonacoTheme(monaco, theme) {
20580
+ const colors = theme === 'DARK'
20581
+ ? {
20582
+ 'editor.background': '#09111f',
20583
+ 'editor.foreground': '#e2e8f0',
20584
+ 'editorLineNumber.foreground': '#64748b',
20585
+ 'editorLineNumber.activeForeground': '#cbd5e1',
20586
+ 'editorCursor.foreground': '#7dd3fc',
20587
+ 'editor.selectionBackground': '#1d4ed866',
20588
+ 'editor.inactiveSelectionBackground': '#1e3a8a44',
20589
+ 'editor.scrollbarSlider.background': '#334155',
20590
+ 'editor.scrollbarSlider.hoverBackground': '#475569',
20591
+ 'editor.scrollbarSlider.activeBackground': '#64748b',
20592
+ }
20593
+ : {
20594
+ 'editor.scrollbarSlider.background': '#E0E0E0',
20595
+ 'editor.scrollbarSlider.hoverBackground': '#D0D0D0',
20596
+ 'editor.scrollbarSlider.activeBackground': '#C0C0C0',
20597
+ };
20598
+ monaco.editor.defineTheme(BookEditorMonacoConstants.BOOK_THEME_ID, {
20599
+ base: theme === 'DARK' ? 'vs-dark' : 'vs',
20600
+ inherit: true,
20601
+ rules: [...BOOK_EDITOR_THEME_RULES],
20602
+ colors,
20603
+ });
20604
+ monaco.editor.setTheme(BookEditorMonacoConstants.BOOK_THEME_ID);
20605
+ }
20527
20606
  /**
20528
20607
  * Builds a regex that matches one commitment keyword at line start.
20529
20608
  *
@@ -20601,13 +20680,19 @@ function createNoteLikeBodyRules(token, commitmentTransitionRules) {
20601
20680
  *
20602
20681
  * @private function of BookEditorMonaco
20603
20682
  */
20604
- function ensureBookEditorMonacoLanguage(monaco) {
20683
+ function ensureBookEditorMonacoLanguage(monaco, theme = 'LIGHT') {
20605
20684
  const monacoWithLanguageState = monaco;
20606
20685
  if (monacoWithLanguageState[BOOK_EDITOR_LANGUAGE_INITIALIZED_FLAG]) {
20686
+ if (monacoWithLanguageState[BOOK_EDITOR_THEME_MODE_FLAG] !== theme) {
20687
+ applyBookEditorMonacoTheme(monaco, theme);
20688
+ monacoWithLanguageState[BOOK_EDITOR_THEME_MODE_FLAG] = theme;
20689
+ return;
20690
+ }
20607
20691
  monaco.editor.setTheme(BookEditorMonacoConstants.BOOK_THEME_ID);
20608
20692
  return;
20609
20693
  }
20610
20694
  monacoWithLanguageState[BOOK_EDITOR_LANGUAGE_INITIALIZED_FLAG] = true;
20695
+ monacoWithLanguageState[BOOK_EDITOR_THEME_MODE_FLAG] = theme;
20611
20696
  monaco.languages.register({ id: BookEditorMonacoConstants.BOOK_LANGUAGE_ID });
20612
20697
  const commitmentDefinitions = getAllCommitmentDefinitions();
20613
20698
  const commitmentTypes = [...new Set(commitmentDefinitions.map(({ type }) => type))];
@@ -20702,52 +20787,7 @@ function ensureBookEditorMonacoLanguage(monaco) {
20702
20787
  return { links };
20703
20788
  },
20704
20789
  });
20705
- monaco.editor.defineTheme(BookEditorMonacoConstants.BOOK_THEME_ID, {
20706
- base: 'vs',
20707
- inherit: true,
20708
- rules: [
20709
- {
20710
- token: 'title',
20711
- foreground: PROMPTBOOK_SYNTAX_COLORS.TITLE.toHex(),
20712
- fontStyle: 'bold underline',
20713
- },
20714
- {
20715
- token: 'commitment',
20716
- foreground: PROMPTBOOK_SYNTAX_COLORS.COMMITMENT.toHex(),
20717
- fontStyle: 'bold',
20718
- },
20719
- {
20720
- token: 'note-commitment',
20721
- foreground: PROMPTBOOK_SYNTAX_COLORS.NOTE_COMMITMENT.toHex(),
20722
- },
20723
- {
20724
- token: 'todo-commitment',
20725
- foreground: PROMPTBOOK_SYNTAX_COLORS.TODO_COMMITMENT_TEXT.toHex(),
20726
- background: PROMPTBOOK_SYNTAX_COLORS.TODO_COMMITMENT_BACKGROUND.toHex(),
20727
- fontStyle: 'bold',
20728
- },
20729
- {
20730
- token: 'parameter',
20731
- foreground: PROMPTBOOK_SYNTAX_COLORS.PARAMETER.toHex(),
20732
- fontStyle: 'italic',
20733
- },
20734
- {
20735
- token: 'agent-reference',
20736
- foreground: PROMPTBOOK_SYNTAX_COLORS.COMMITMENT.toHex(),
20737
- fontStyle: 'underline',
20738
- },
20739
- {
20740
- token: 'code-block',
20741
- foreground: PROMPTBOOK_SYNTAX_COLORS.CODE_BLOCK.toHex(),
20742
- },
20743
- ],
20744
- colors: {
20745
- 'editor.scrollbarSlider.background': '#E0E0E0',
20746
- 'editor.scrollbarSlider.hoverBackground': '#D0D0D0',
20747
- 'editor.scrollbarSlider.activeBackground': '#C0C0C0',
20748
- },
20749
- });
20750
- monaco.editor.setTheme(BookEditorMonacoConstants.BOOK_THEME_ID);
20790
+ applyBookEditorMonacoTheme(monaco, theme);
20751
20791
  }
20752
20792
  /**
20753
20793
  * Ensures the mounted Monaco editor model uses Book language and Book theme.
@@ -20760,8 +20800,8 @@ function ensureBookEditorMonacoLanguage(monaco) {
20760
20800
  * @private function of BookEditorMonaco
20761
20801
  */
20762
20802
  function ensureBookEditorMonacoLanguageForEditor(props) {
20763
- const { monaco, monacoEditor } = props;
20764
- ensureBookEditorMonacoLanguage(monaco);
20803
+ const { monaco, monacoEditor, theme = 'LIGHT' } = props;
20804
+ ensureBookEditorMonacoLanguage(monaco, theme);
20765
20805
  const model = monacoEditor.getModel();
20766
20806
  if (!model) {
20767
20807
  return;
@@ -20776,13 +20816,13 @@ function ensureBookEditorMonacoLanguageForEditor(props) {
20776
20816
  *
20777
20817
  * @private function of BookEditorMonaco
20778
20818
  */
20779
- function useBookEditorMonacoLanguage({ monaco }) {
20819
+ function useBookEditorMonacoLanguage({ monaco, theme }) {
20780
20820
  useEffect(() => {
20781
20821
  if (!monaco) {
20782
20822
  return;
20783
20823
  }
20784
- ensureBookEditorMonacoLanguage(monaco);
20785
- }, [monaco]);
20824
+ ensureBookEditorMonacoLanguage(monaco, theme);
20825
+ }, [monaco, theme]);
20786
20826
  }
20787
20827
 
20788
20828
  /**
@@ -20796,9 +20836,13 @@ const BACKGROUND_POSITION_Y_MULTIPLIER = -0.1;
20796
20836
  *
20797
20837
  * @private function of BookEditorMonaco
20798
20838
  */
20799
- function useBookEditorMonacoStyles({ instanceClass, scaledLineHeight, scaledContentPaddingLeft, scaledVerticalLineLeft, zoomLevel, }) {
20839
+ function useBookEditorMonacoStyles({ instanceClass, scaledLineHeight, scaledContentPaddingLeft, scaledVerticalLineLeft, zoomLevel, theme, }) {
20800
20840
  useEffect(() => {
20801
20841
  const styleId = `notebook-margin-line-style-${instanceClass}`;
20842
+ const lineColor = theme === 'DARK' ? '#1f2937' : PROMPTBOOK_SYNTAX_COLORS.LINE.toHex();
20843
+ const separatorColor = theme === 'DARK' ? '#334155' : PROMPTBOOK_SYNTAX_COLORS.SEPARATOR.toHex();
20844
+ const codeBlockBackground = theme === 'DARK' ? '#0f172a99' : '#f5f5f566';
20845
+ const codeBlockBorderColor = theme === 'DARK' ? '#38bdf8aa' : PROMPTBOOK_SYNTAX_COLORS.CODE_BLOCK.toHex();
20802
20846
  let style = document.getElementById(styleId);
20803
20847
  if (!style) {
20804
20848
  style = document.createElement('style');
@@ -20811,7 +20855,7 @@ function useBookEditorMonacoStyles({ instanceClass, scaledLineHeight, scaledCont
20811
20855
  /* <- [🚚] */
20812
20856
 
20813
20857
  .${instanceClass} .monaco-editor .view-lines {
20814
- background-image: linear-gradient(to bottom, transparent ${scaledLineHeight - 1}px, ${PROMPTBOOK_SYNTAX_COLORS.LINE.toHex()} ${scaledLineHeight - 1}px);
20858
+ background-image: linear-gradient(to bottom, transparent ${scaledLineHeight - 1}px, ${lineColor} ${scaledLineHeight - 1}px);
20815
20859
  background-size: calc(100% + ${scaledContentPaddingLeft}px) ${scaledLineHeight}px;
20816
20860
  background-position-x: -${scaledContentPaddingLeft}px;
20817
20861
  background-position-y: ${scaledLineHeight * BACKGROUND_POSITION_Y_MULTIPLIER}px;
@@ -20823,7 +20867,7 @@ function useBookEditorMonacoStyles({ instanceClass, scaledLineHeight, scaledCont
20823
20867
  top: 0;
20824
20868
  bottom: 0;
20825
20869
  width: 1px;
20826
- background-color: ${PROMPTBOOK_SYNTAX_COLORS.LINE.toHex()};
20870
+ background-color: ${lineColor};
20827
20871
  z-index: 10;
20828
20872
  }
20829
20873
 
@@ -20831,8 +20875,8 @@ function useBookEditorMonacoStyles({ instanceClass, scaledLineHeight, scaledCont
20831
20875
  background: linear-gradient(
20832
20876
  to bottom,
20833
20877
  transparent ${scaledLineHeight * 0.9 - 2}px,
20834
- ${PROMPTBOOK_SYNTAX_COLORS.SEPARATOR.toHex()} ${scaledLineHeight * 0.9 - 2}px,
20835
- ${PROMPTBOOK_SYNTAX_COLORS.SEPARATOR.toHex()} ${scaledLineHeight * 0.9 + 1}px,
20878
+ ${separatorColor} ${scaledLineHeight * 0.9 - 2}px,
20879
+ ${separatorColor} ${scaledLineHeight * 0.9 + 1}px,
20836
20880
  transparent ${scaledLineHeight * 0.9 + 1}px
20837
20881
  );
20838
20882
  }
@@ -20842,22 +20886,22 @@ function useBookEditorMonacoStyles({ instanceClass, scaledLineHeight, scaledCont
20842
20886
  }
20843
20887
 
20844
20888
  .${instanceClass} .monaco-editor .code-block-box {
20845
- background-color: #f5f5f566;
20846
- border-left: 1px solid ${PROMPTBOOK_SYNTAX_COLORS.CODE_BLOCK.toHex()};
20847
- border-right: 1px solid ${PROMPTBOOK_SYNTAX_COLORS.CODE_BLOCK.toHex()};
20889
+ background-color: ${codeBlockBackground};
20890
+ border-left: 1px solid ${codeBlockBorderColor};
20891
+ border-right: 1px solid ${codeBlockBorderColor};
20848
20892
  padding-left: ${Math.round(8 * zoomLevel)}px;
20849
20893
  padding-right: ${Math.round(8 * zoomLevel)}px;
20850
20894
  }
20851
20895
 
20852
20896
  .${instanceClass} .monaco-editor .code-block-top {
20853
- border-top: 1px solid ${PROMPTBOOK_SYNTAX_COLORS.CODE_BLOCK.toHex()};
20897
+ border-top: 1px solid ${codeBlockBorderColor};
20854
20898
  border-top-left-radius: ${Math.round(10 * zoomLevel)}px;
20855
20899
  border-top-right-radius: ${Math.round(10 * zoomLevel)}px;
20856
20900
  overflow: hidden;
20857
20901
  }
20858
20902
 
20859
20903
  .${instanceClass} .monaco-editor .code-block-bottom {
20860
- border-bottom: 1px solid ${PROMPTBOOK_SYNTAX_COLORS.CODE_BLOCK.toHex()};
20904
+ border-bottom: 1px solid ${codeBlockBorderColor};
20861
20905
  border-bottom-left-radius: ${Math.round(10 * zoomLevel)}px;
20862
20906
  border-bottom-right-radius: ${Math.round(10 * zoomLevel)}px;
20863
20907
  overflow: hidden;
@@ -20868,7 +20912,7 @@ function useBookEditorMonacoStyles({ instanceClass, scaledLineHeight, scaledCont
20868
20912
  style === null || style === void 0 ? void 0 : style.remove();
20869
20913
  }
20870
20914
  };
20871
- }, [instanceClass, scaledLineHeight, scaledContentPaddingLeft, scaledVerticalLineLeft, zoomLevel]);
20915
+ }, [instanceClass, scaledLineHeight, scaledContentPaddingLeft, scaledVerticalLineLeft, theme, zoomLevel]);
20872
20916
  }
20873
20917
 
20874
20918
  /**
@@ -21781,7 +21825,7 @@ async function resolveClipboardUploadFiles(dataTransfer) {
21781
21825
  * @private Internal component used by `BookEditor`
21782
21826
  */
21783
21827
  function BookEditorMonaco(props) {
21784
- const { value, onChange, diagnostics, isReadonly, translations, onFileUpload, isUploadButtonShown, isCameraButtonShown, isDownloadButtonShown, isAboutButtonShown = true, isFullscreenButtonShown = true, onFullscreenClick, isFullscreen, zoom = 1, monacoModelPath, hoistedMenuItems, } = props;
21828
+ const { value, onChange, diagnostics, isReadonly, theme = 'LIGHT', translations, onFileUpload, isUploadButtonShown, isCameraButtonShown, isDownloadButtonShown, isAboutButtonShown = true, isFullscreenButtonShown = true, onFullscreenClick, isFullscreen, zoom = 1, monacoModelPath, hoistedMenuItems, } = props;
21785
21829
  const zoomLevel = zoom;
21786
21830
  const scaledLineHeight = Math.round(BookEditorMonacoConstants.LINE_HEIGHT * zoomLevel);
21787
21831
  const scaledContentPaddingLeft = Math.max(8, Math.round(BookEditorMonacoConstants.CONTENT_PADDING_LEFT * zoomLevel));
@@ -21806,7 +21850,7 @@ function BookEditorMonaco(props) {
21806
21850
  onFileUpload,
21807
21851
  });
21808
21852
  const combinedDiagnostics = [...(diagnostics || []), ...createDeprecatedCommitmentDiagnostics(value)];
21809
- useBookEditorMonacoLanguage({ monaco });
21853
+ useBookEditorMonacoLanguage({ monaco, theme });
21810
21854
  useBookEditorMonacoDiagnostics({ monaco, editor, diagnostics: combinedDiagnostics });
21811
21855
  useBookEditorMonacoDecorations({ editor, monaco });
21812
21856
  useBookEditorMonacoStyles({
@@ -21815,6 +21859,7 @@ function BookEditorMonaco(props) {
21815
21859
  scaledLineHeight,
21816
21860
  scaledVerticalLineLeft,
21817
21861
  zoomLevel,
21862
+ theme,
21818
21863
  });
21819
21864
  /**
21820
21865
  * Re-applies Book language + theme to the currently mounted Monaco model.
@@ -21823,9 +21868,9 @@ function BookEditorMonaco(props) {
21823
21868
  if (!editor || !monaco) {
21824
21869
  return;
21825
21870
  }
21826
- ensureBookEditorMonacoLanguageForEditor({ monaco, monacoEditor: editor });
21871
+ ensureBookEditorMonacoLanguageForEditor({ monaco, monacoEditor: editor, theme });
21827
21872
  logBookEditorMonacoDebug(`Re-applied Book Monaco language/theme (${reason}).`);
21828
- }, [editor, monaco]);
21873
+ }, [editor, monaco, theme]);
21829
21874
  useEffect(() => {
21830
21875
  setIsTouchDevice(typeof window !== 'undefined' && window.matchMedia('(pointer: coarse)').matches);
21831
21876
  }, []);
@@ -21932,16 +21977,16 @@ function BookEditorMonaco(props) {
21932
21977
  * Ensures Book language/tokenizer is ready before Monaco creates the editor model.
21933
21978
  */
21934
21979
  const handleBeforeMonacoMount = useCallback((beforeMountMonaco) => {
21935
- ensureBookEditorMonacoLanguage(beforeMountMonaco);
21936
- }, []);
21980
+ ensureBookEditorMonacoLanguage(beforeMountMonaco, theme);
21981
+ }, [theme]);
21937
21982
  /**
21938
21983
  * Re-applies Book language/theme once Monaco editor is mounted.
21939
21984
  */
21940
21985
  const handleMonacoMount = useCallback((mountedEditor, mountedMonaco) => {
21941
21986
  setEditor(mountedEditor);
21942
- ensureBookEditorMonacoLanguageForEditor({ monaco: mountedMonaco, monacoEditor: mountedEditor });
21987
+ ensureBookEditorMonacoLanguageForEditor({ monaco: mountedMonaco, monacoEditor: mountedEditor, theme });
21943
21988
  logBookEditorMonacoDebug('Mounted Monaco editor and re-applied Book language/theme.');
21944
- }, []);
21989
+ }, [theme]);
21945
21990
  const handleDragOver = useCallback((event) => {
21946
21991
  event.preventDefault();
21947
21992
  setIsDragOver(true);
@@ -22047,7 +22092,7 @@ const DEFAULT_BOOK_EDITOR_HEIGHT = countLines(DEFAULT_BOOK) * 30 + 20;
22047
22092
  * @public exported from `@promptbook/components`
22048
22093
  */
22049
22094
  function BookEditor(props) {
22050
- const { agentSource, className, style, zoom = 1, value, onChange, diagnostics, onFileUpload, isVerbose = DEFAULT_IS_VERBOSE, isBorderRadiusDisabled = false, isReadonly = false, translations, isUploadButtonShown = true, isCameraButtonShown, isDownloadButtonShown = true, isAboutButtonShown = true, isFullscreenButtonShown = true, sync, monacoModelPath, hoistedMenuItems, } = props;
22095
+ const { agentSource, className, style, theme = 'LIGHT', zoom = 1, value, onChange, diagnostics, onFileUpload, isVerbose = DEFAULT_IS_VERBOSE, isBorderRadiusDisabled = false, isReadonly = false, translations, isUploadButtonShown = true, isCameraButtonShown, isDownloadButtonShown = true, isAboutButtonShown = true, isFullscreenButtonShown = true, sync, monacoModelPath, hoistedMenuItems, } = props;
22051
22096
  const [isFullscreen, setIsFullscreen] = useState(false);
22052
22097
  /**
22053
22098
  * Toggles fullscreen mode for the editor.
@@ -22055,7 +22100,7 @@ function BookEditor(props) {
22055
22100
  const handleFullscreenToggle = () => {
22056
22101
  setIsFullscreen(!isFullscreen);
22057
22102
  };
22058
- const editorContent = (jsx("div", { "data-book-component": "BookEditor", className: classNames(styles$d.BookEditor, isVerbose && styles$d.isVerbose, styles$d.bookEditorWrapper, isBorderRadiusDisabled && styles$d.isBorderRadiusDisabled, isFullscreen && styles$d.fullscreen, className), style: isFullscreen
22103
+ const editorContent = (jsx("div", { "data-book-component": "BookEditor", "data-book-editor-theme": theme.toLowerCase(), className: classNames(styles$d.BookEditor, isVerbose && styles$d.isVerbose, styles$d.bookEditorWrapper, isBorderRadiusDisabled && styles$d.isBorderRadiusDisabled, isFullscreen && styles$d.fullscreen, className), style: isFullscreen
22059
22104
  ? style
22060
22105
  : {
22061
22106
  ...(style || {}),
@@ -22066,7 +22111,7 @@ function BookEditor(props) {
22066
22111
  ? `${props.height}px`
22067
22112
  : props.height || `${DEFAULT_BOOK_EDITOR_HEIGHT}px`,
22068
22113
  }),
22069
- }, children: jsx(BookEditorMonaco, { value: agentSource || value, onChange: onChange, diagnostics: diagnostics, onFileUpload: onFileUpload, isVerbose: isVerbose, isBorderRadiusDisabled: isBorderRadiusDisabled, isReadonly: isReadonly, translations: translations, isUploadButtonShown: isUploadButtonShown, isCameraButtonShown: isCameraButtonShown, isDownloadButtonShown: isDownloadButtonShown, isAboutButtonShown: isAboutButtonShown, isFullscreenButtonShown: isFullscreenButtonShown, onFullscreenClick: handleFullscreenToggle, isFullscreen: isFullscreen, sync: sync, zoom: zoom, monacoModelPath: monacoModelPath, hoistedMenuItems: hoistedMenuItems }) }));
22114
+ }, children: jsx(BookEditorMonaco, { value: agentSource || value, onChange: onChange, diagnostics: diagnostics, onFileUpload: onFileUpload, isVerbose: isVerbose, isBorderRadiusDisabled: isBorderRadiusDisabled, isReadonly: isReadonly, translations: translations, isUploadButtonShown: isUploadButtonShown, isCameraButtonShown: isCameraButtonShown, isDownloadButtonShown: isDownloadButtonShown, isAboutButtonShown: isAboutButtonShown, isFullscreenButtonShown: isFullscreenButtonShown, onFullscreenClick: handleFullscreenToggle, isFullscreen: isFullscreen, sync: sync, zoom: zoom, monacoModelPath: monacoModelPath, hoistedMenuItems: hoistedMenuItems, theme: theme }) }));
22070
22115
  return isFullscreen && typeof document !== 'undefined' ? createPortal(editorContent, document.body) : editorContent;
22071
22116
  }
22072
22117
 
@@ -26477,37 +26522,49 @@ function traceSmoothClosedPath(context, points) {
26477
26522
  * @private shared geometry helper of `octopus3AvatarVisual` and `asciiOctopusAvatarVisual`
26478
26523
  */
26479
26524
  function createOrganicOctopusTentacleShapes(options) {
26480
- const { size, centerX, centerY, bodyRadius, horizontalStretch, tentacleCount, shapePhase, createRandom, timeMs, saltPrefix, bodyPoints } = options;
26525
+ var _a, _b, _c, _d, _e, _f, _g, _h;
26526
+ const { size, centerX, centerY, bodyRadius, horizontalStretch, tentacleCount, shapePhase, createRandom, timeMs, saltPrefix, bodyPoints, variation, } = options;
26481
26527
  const baseY = centerY + bodyRadius * 0.74;
26482
26528
  const lowerBodyAnchorPoints = bodyPoints ? resolveTentacleBodyAnchorPoints(bodyPoints, centerY + bodyRadius * 0.04) : null;
26529
+ const flowLengthScale = (_a = variation === null || variation === void 0 ? void 0 : variation.flowLengthScale) !== null && _a !== void 0 ? _a : 1;
26530
+ const lateralReachScale = (_b = variation === null || variation === void 0 ? void 0 : variation.lateralReachScale) !== null && _b !== void 0 ? _b : 1;
26531
+ const tipReachScale = (_c = variation === null || variation === void 0 ? void 0 : variation.tipReachScale) !== null && _c !== void 0 ? _c : 1;
26532
+ const baseWidthScale = (_d = variation === null || variation === void 0 ? void 0 : variation.baseWidthScale) !== null && _d !== void 0 ? _d : 1;
26533
+ const tipWidthScale = (_e = variation === null || variation === void 0 ? void 0 : variation.tipWidthScale) !== null && _e !== void 0 ? _e : 1;
26534
+ const rootSpreadScale = (_f = variation === null || variation === void 0 ? void 0 : variation.rootSpreadScale) !== null && _f !== void 0 ? _f : 1;
26535
+ const startYOffsetScale = (_g = variation === null || variation === void 0 ? void 0 : variation.startYOffsetScale) !== null && _g !== void 0 ? _g : 1;
26536
+ const swayScale = (_h = variation === null || variation === void 0 ? void 0 : variation.swayScale) !== null && _h !== void 0 ? _h : 1;
26483
26537
  return Array.from({ length: tentacleCount }, (_, tentacleIndex) => {
26484
26538
  const tentacleRandom = createRandom(`${saltPrefix}-tentacle-${tentacleIndex}`);
26485
26539
  const spreadProgress = tentacleCount === 1 ? 0.5 : tentacleIndex / (tentacleCount - 1);
26486
26540
  const centeredProgress = spreadProgress - 0.5;
26541
+ const spreadCenteredProgress = centeredProgress * rootSpreadScale;
26542
+ const spreadAnchorProgress = Math.min(1, Math.max(0, 0.5 + spreadCenteredProgress));
26487
26543
  const temporalSway = Math.sin(timeMs / (720 + tentacleIndex * 34) + shapePhase + tentacleRandom() * Math.PI * 2) *
26488
26544
  size *
26489
- (0.014 + tentacleRandom() * 0.015);
26490
- const flowLength = size * (0.24 + tentacleRandom() * 0.18);
26491
- const curlDirection = centeredProgress === 0 ? (tentacleRandom() < 0.5 ? -1 : 1) : Math.sign(centeredProgress);
26492
- const lateralReach = centeredProgress * size * (0.1 + tentacleRandom() * 0.1) + temporalSway;
26493
- const tipReach = curlDirection * size * (0.025 + tentacleRandom() * 0.07);
26494
- const startYOffset = Math.abs(centeredProgress) * size * 0.012 + tentacleRandom() * size * 0.01;
26545
+ (0.014 + tentacleRandom() * 0.015) *
26546
+ swayScale;
26547
+ const flowLength = size * (0.24 + tentacleRandom() * 0.18) * flowLengthScale;
26548
+ const curlDirection = spreadCenteredProgress === 0 ? (tentacleRandom() < 0.5 ? -1 : 1) : Math.sign(spreadCenteredProgress);
26549
+ const lateralReach = spreadCenteredProgress * size * (0.1 + tentacleRandom() * 0.1) * lateralReachScale + temporalSway;
26550
+ const tipReach = curlDirection * size * (0.025 + tentacleRandom() * 0.07) * tipReachScale;
26551
+ const startYOffset = (Math.abs(spreadCenteredProgress) * size * 0.012 + tentacleRandom() * size * 0.01) * startYOffsetScale;
26495
26552
  const startPoint = lowerBodyAnchorPoints && lowerBodyAnchorPoints.length >= 2
26496
26553
  ? createInsetTentacleStartPoint({
26497
26554
  bodyPoints: lowerBodyAnchorPoints,
26498
- anchorProgress: spreadProgress,
26555
+ anchorProgress: spreadAnchorProgress,
26499
26556
  centerX,
26500
26557
  centerY,
26501
26558
  bodyRadius,
26502
- centeredProgress,
26559
+ centeredProgress: spreadCenteredProgress,
26503
26560
  startYOffset,
26504
26561
  })
26505
26562
  : {
26506
- x: centerX + centeredProgress * bodyRadius * horizontalStretch * 1.52,
26563
+ x: centerX + spreadCenteredProgress * bodyRadius * horizontalStretch * 1.52,
26507
26564
  y: baseY + startYOffset,
26508
26565
  };
26509
26566
  const controlPointOne = {
26510
- x: startPoint.x + centeredProgress * size * 0.045 + temporalSway * 0.4,
26567
+ x: startPoint.x + spreadCenteredProgress * size * 0.045 * lateralReachScale + temporalSway * 0.4,
26511
26568
  y: startPoint.y + flowLength * (0.21 + tentacleRandom() * 0.08),
26512
26569
  };
26513
26570
  const controlPointTwo = {
@@ -26520,8 +26577,8 @@ function createOrganicOctopusTentacleShapes(options) {
26520
26577
  flowLength * (0.9 + tentacleRandom() * 0.12) +
26521
26578
  Math.cos(timeMs / (840 + tentacleIndex * 41) + shapePhase) * size * (0.008 + tentacleRandom() * 0.01),
26522
26579
  };
26523
- const baseWidth = size * (0.038 + tentacleRandom() * 0.02) * (1 - Math.abs(centeredProgress) * 0.18);
26524
- const tipWidth = baseWidth * (0.18 + tentacleRandom() * 0.2);
26580
+ const baseWidth = size * (0.038 + tentacleRandom() * 0.02) * (1 - Math.abs(spreadCenteredProgress) * 0.18) * baseWidthScale;
26581
+ const tipWidth = baseWidth * Math.min(0.52, (0.18 + tentacleRandom() * 0.2) * tipWidthScale);
26525
26582
  return {
26526
26583
  startPoint,
26527
26584
  controlPointOne,
@@ -28177,6 +28234,244 @@ function drawAlienEye(context, centerX, centerY, radiusX, radiusY, palette, time
28177
28234
  }
28178
28235
 
28179
28236
  /* eslint-disable no-magic-numbers */
28237
+ /**
28238
+ * Builds one deterministic morphology profile for `Octopus3`.
28239
+ *
28240
+ * @param createRandom Seeded random factory scoped to the current avatar.
28241
+ * @returns Stable morphology profile.
28242
+ *
28243
+ * @private helper of `octopus3AvatarVisual`
28244
+ */
28245
+ function createOctopus3MorphologyProfile(createRandom) {
28246
+ const bodyRandom = createRandom('octopus3-body-profile');
28247
+ const faceRandom = createRandom('octopus3-face-profile');
28248
+ const detailRandom = createRandom('octopus3-detail-profile');
28249
+ const bodyFamilyRoll = bodyRandom();
28250
+ let bodyFamily;
28251
+ let body;
28252
+ let tentacles;
28253
+ if (bodyFamilyRoll < 0.34) {
28254
+ bodyFamily = 'lantern';
28255
+ body = {
28256
+ centerXJitterRatio: resolveSeededRange(bodyRandom, -0.018, 0.018),
28257
+ centerYRatio: resolveSeededRange(bodyRandom, 0.39, 0.435),
28258
+ bodyRadiusRatio: resolveSeededRange(bodyRandom, 0.19, 0.23),
28259
+ horizontalStretch: resolveSeededRange(bodyRandom, 0.94, 1.08),
28260
+ verticalStretch: resolveSeededRange(bodyRandom, 1.02, 1.18),
28261
+ mantleLiftRatio: resolveSeededRange(bodyRandom, 0.115, 0.148),
28262
+ lowerDropRatio: resolveSeededRange(bodyRandom, 0.042, 0.066),
28263
+ tentacleDepthRatio: resolveSeededRange(bodyRandom, 0.018, 0.03),
28264
+ wobbleAmplitudeRatio: resolveSeededRange(bodyRandom, 0.009, 0.017),
28265
+ lobeCount: resolveSeededIntegerRange(bodyRandom, 4, 6),
28266
+ pointCount: resolveSeededIntegerRange(bodyRandom, 38, 42),
28267
+ shadowWidthRatio: resolveSeededRange(bodyRandom, 0.18, 0.23),
28268
+ shadowHeightRatio: resolveSeededRange(bodyRandom, 0.055, 0.075),
28269
+ crownHighlightWidthRatio: resolveSeededRange(bodyRandom, 0.14, 0.18),
28270
+ crownHighlightHeightRatio: resolveSeededRange(bodyRandom, 0.045, 0.062),
28271
+ crownHighlightYOffsetRatio: resolveSeededRange(bodyRandom, -0.165, -0.135),
28272
+ };
28273
+ tentacles = {
28274
+ count: resolveSeededIntegerRange(bodyRandom, 7, 10),
28275
+ flowLengthScale: resolveSeededRange(bodyRandom, 1.08, 1.34),
28276
+ lateralReachScale: resolveSeededRange(bodyRandom, 0.72, 0.94),
28277
+ tipReachScale: resolveSeededRange(bodyRandom, 0.82, 1.06),
28278
+ baseWidthScale: resolveSeededRange(bodyRandom, 0.82, 0.98),
28279
+ tipWidthScale: resolveSeededRange(bodyRandom, 0.9, 1.08),
28280
+ rootSpreadScale: resolveSeededRange(bodyRandom, 0.76, 0.94),
28281
+ startYOffsetScale: resolveSeededRange(bodyRandom, 0.82, 1),
28282
+ swayScale: resolveSeededRange(bodyRandom, 0.82, 1.02),
28283
+ };
28284
+ }
28285
+ else if (bodyFamilyRoll < 0.68) {
28286
+ bodyFamily = 'drifter';
28287
+ body = {
28288
+ centerXJitterRatio: resolveSeededRange(bodyRandom, -0.025, 0.025),
28289
+ centerYRatio: resolveSeededRange(bodyRandom, 0.425, 0.46),
28290
+ bodyRadiusRatio: resolveSeededRange(bodyRandom, 0.175, 0.215),
28291
+ horizontalStretch: resolveSeededRange(bodyRandom, 1.22, 1.42),
28292
+ verticalStretch: resolveSeededRange(bodyRandom, 0.82, 0.92),
28293
+ mantleLiftRatio: resolveSeededRange(bodyRandom, 0.092, 0.115),
28294
+ lowerDropRatio: resolveSeededRange(bodyRandom, 0.02, 0.036),
28295
+ tentacleDepthRatio: resolveSeededRange(bodyRandom, 0.032, 0.052),
28296
+ wobbleAmplitudeRatio: resolveSeededRange(bodyRandom, 0.013, 0.022),
28297
+ lobeCount: resolveSeededIntegerRange(bodyRandom, 7, 9),
28298
+ pointCount: resolveSeededIntegerRange(bodyRandom, 40, 46),
28299
+ shadowWidthRatio: resolveSeededRange(bodyRandom, 0.24, 0.28),
28300
+ shadowHeightRatio: resolveSeededRange(bodyRandom, 0.06, 0.082),
28301
+ crownHighlightWidthRatio: resolveSeededRange(bodyRandom, 0.17, 0.22),
28302
+ crownHighlightHeightRatio: resolveSeededRange(bodyRandom, 0.038, 0.055),
28303
+ crownHighlightYOffsetRatio: resolveSeededRange(bodyRandom, -0.14, -0.11),
28304
+ };
28305
+ tentacles = {
28306
+ count: resolveSeededIntegerRange(bodyRandom, 10, 13),
28307
+ flowLengthScale: resolveSeededRange(bodyRandom, 0.88, 1.08),
28308
+ lateralReachScale: resolveSeededRange(bodyRandom, 1.18, 1.42),
28309
+ tipReachScale: resolveSeededRange(bodyRandom, 1.12, 1.42),
28310
+ baseWidthScale: resolveSeededRange(bodyRandom, 0.9, 1.06),
28311
+ tipWidthScale: resolveSeededRange(bodyRandom, 0.88, 1.08),
28312
+ rootSpreadScale: resolveSeededRange(bodyRandom, 1.12, 1.32),
28313
+ startYOffsetScale: resolveSeededRange(bodyRandom, 0.92, 1.14),
28314
+ swayScale: resolveSeededRange(bodyRandom, 1.04, 1.22),
28315
+ };
28316
+ }
28317
+ else {
28318
+ bodyFamily = 'rounded';
28319
+ body = {
28320
+ centerXJitterRatio: resolveSeededRange(bodyRandom, -0.02, 0.02),
28321
+ centerYRatio: resolveSeededRange(bodyRandom, 0.398, 0.442),
28322
+ bodyRadiusRatio: resolveSeededRange(bodyRandom, 0.208, 0.248),
28323
+ horizontalStretch: resolveSeededRange(bodyRandom, 1.06, 1.22),
28324
+ verticalStretch: resolveSeededRange(bodyRandom, 0.9, 1.01),
28325
+ mantleLiftRatio: resolveSeededRange(bodyRandom, 0.1, 0.128),
28326
+ lowerDropRatio: resolveSeededRange(bodyRandom, 0.032, 0.052),
28327
+ tentacleDepthRatio: resolveSeededRange(bodyRandom, 0.038, 0.06),
28328
+ wobbleAmplitudeRatio: resolveSeededRange(bodyRandom, 0.014, 0.024),
28329
+ lobeCount: resolveSeededIntegerRange(bodyRandom, 5, 8),
28330
+ pointCount: resolveSeededIntegerRange(bodyRandom, 39, 44),
28331
+ shadowWidthRatio: resolveSeededRange(bodyRandom, 0.2, 0.25),
28332
+ shadowHeightRatio: resolveSeededRange(bodyRandom, 0.055, 0.08),
28333
+ crownHighlightWidthRatio: resolveSeededRange(bodyRandom, 0.16, 0.2),
28334
+ crownHighlightHeightRatio: resolveSeededRange(bodyRandom, 0.05, 0.07),
28335
+ crownHighlightYOffsetRatio: resolveSeededRange(bodyRandom, -0.155, -0.122),
28336
+ };
28337
+ tentacles = {
28338
+ count: resolveSeededIntegerRange(bodyRandom, 8, 12),
28339
+ flowLengthScale: resolveSeededRange(bodyRandom, 0.94, 1.16),
28340
+ lateralReachScale: resolveSeededRange(bodyRandom, 0.9, 1.14),
28341
+ tipReachScale: resolveSeededRange(bodyRandom, 0.96, 1.22),
28342
+ baseWidthScale: resolveSeededRange(bodyRandom, 1.02, 1.2),
28343
+ tipWidthScale: resolveSeededRange(bodyRandom, 1.02, 1.22),
28344
+ rootSpreadScale: resolveSeededRange(bodyRandom, 0.94, 1.08),
28345
+ startYOffsetScale: resolveSeededRange(bodyRandom, 0.9, 1.08),
28346
+ swayScale: resolveSeededRange(bodyRandom, 0.9, 1.1),
28347
+ };
28348
+ }
28349
+ const faceFamilyRoll = faceRandom();
28350
+ let faceFamily;
28351
+ let face;
28352
+ if (faceFamilyRoll < 0.34) {
28353
+ faceFamily = 'watchful';
28354
+ face = {
28355
+ eyeSpacingRatio: resolveSeededRange(faceRandom, 0.118, 0.152),
28356
+ eyeCenterYOffsetRatio: resolveSeededRange(faceRandom, -0.026, -0.002),
28357
+ eyeRadiusXRatio: resolveSeededRange(faceRandom, 0.05, 0.062),
28358
+ eyeHeightRatio: resolveSeededRange(faceRandom, 1.18, 1.38),
28359
+ eyeRotationRange: resolveSeededRange(faceRandom, 0.16, 0.28),
28360
+ eyeTiltBias: resolveSeededRange(faceRandom, 0.02, 0.06),
28361
+ mouthWidthRatio: resolveSeededRange(faceRandom, 0.058, 0.074),
28362
+ mouthYOffsetRatio: resolveSeededRange(faceRandom, 0.086, 0.104),
28363
+ mouthCurveDepthRatio: resolveSeededRange(faceRandom, 0.126, 0.15),
28364
+ mouthCenterOffsetRatio: resolveSeededRange(faceRandom, -0.006, 0.006),
28365
+ mouthCornerTiltRatio: resolveSeededRange(faceRandom, -0.002, 0.002),
28366
+ eyeStyle: {
28367
+ irisScale: resolveSeededRange(faceRandom, 1, 1.1),
28368
+ pupilWidthScale: resolveSeededRange(faceRandom, 0.86, 1.02),
28369
+ pupilHeightScale: resolveSeededRange(faceRandom, 0.94, 1.08),
28370
+ upperLidArchRatio: resolveSeededRange(faceRandom, 0.96, 1.12),
28371
+ upperLidInsetRatio: resolveSeededRange(faceRandom, 0.08, 0.14),
28372
+ lowerLidOpacity: resolveSeededRange(faceRandom, 0.12, 0.22),
28373
+ },
28374
+ };
28375
+ }
28376
+ else if (faceFamilyRoll < 0.68) {
28377
+ faceFamily = 'sleepy';
28378
+ face = {
28379
+ eyeSpacingRatio: resolveSeededRange(faceRandom, 0.092, 0.124),
28380
+ eyeCenterYOffsetRatio: resolveSeededRange(faceRandom, -0.002, 0.024),
28381
+ eyeRadiusXRatio: resolveSeededRange(faceRandom, 0.058, 0.074),
28382
+ eyeHeightRatio: resolveSeededRange(faceRandom, 0.96, 1.14),
28383
+ eyeRotationRange: resolveSeededRange(faceRandom, 0.1, 0.22),
28384
+ eyeTiltBias: resolveSeededRange(faceRandom, 0.01, 0.05),
28385
+ mouthWidthRatio: resolveSeededRange(faceRandom, 0.066, 0.086),
28386
+ mouthYOffsetRatio: resolveSeededRange(faceRandom, 0.094, 0.118),
28387
+ mouthCurveDepthRatio: resolveSeededRange(faceRandom, 0.118, 0.145),
28388
+ mouthCenterOffsetRatio: resolveSeededRange(faceRandom, -0.004, 0.004),
28389
+ mouthCornerTiltRatio: resolveSeededRange(faceRandom, -0.004, 0.004),
28390
+ eyeStyle: {
28391
+ irisScale: resolveSeededRange(faceRandom, 0.9, 1),
28392
+ pupilWidthScale: resolveSeededRange(faceRandom, 1, 1.18),
28393
+ pupilHeightScale: resolveSeededRange(faceRandom, 0.78, 0.92),
28394
+ upperLidArchRatio: resolveSeededRange(faceRandom, 0.7, 0.88),
28395
+ upperLidInsetRatio: resolveSeededRange(faceRandom, -0.02, 0.06),
28396
+ lowerLidOpacity: resolveSeededRange(faceRandom, 0.22, 0.34),
28397
+ },
28398
+ };
28399
+ }
28400
+ else {
28401
+ faceFamily = 'mischief';
28402
+ face = {
28403
+ eyeSpacingRatio: resolveSeededRange(faceRandom, 0.086, 0.114),
28404
+ eyeCenterYOffsetRatio: resolveSeededRange(faceRandom, -0.018, 0.01),
28405
+ eyeRadiusXRatio: resolveSeededRange(faceRandom, 0.046, 0.06),
28406
+ eyeHeightRatio: resolveSeededRange(faceRandom, 1.08, 1.28),
28407
+ eyeRotationRange: resolveSeededRange(faceRandom, 0.28, 0.44),
28408
+ eyeTiltBias: resolveSeededRange(faceRandom, 0.12, 0.22),
28409
+ mouthWidthRatio: resolveSeededRange(faceRandom, 0.052, 0.074),
28410
+ mouthYOffsetRatio: resolveSeededRange(faceRandom, 0.082, 0.1),
28411
+ mouthCurveDepthRatio: resolveSeededRange(faceRandom, 0.116, 0.15),
28412
+ mouthCenterOffsetRatio: resolveSeededRange(faceRandom, -0.018, 0.018),
28413
+ mouthCornerTiltRatio: resolveSeededRange(faceRandom, -0.01, 0.01),
28414
+ eyeStyle: {
28415
+ irisScale: resolveSeededRange(faceRandom, 1.04, 1.12),
28416
+ pupilWidthScale: resolveSeededRange(faceRandom, 0.72, 0.9),
28417
+ pupilHeightScale: resolveSeededRange(faceRandom, 0.96, 1.14),
28418
+ upperLidArchRatio: resolveSeededRange(faceRandom, 0.88, 1.02),
28419
+ upperLidInsetRatio: resolveSeededRange(faceRandom, 0.04, 0.12),
28420
+ lowerLidOpacity: resolveSeededRange(faceRandom, 0.08, 0.18),
28421
+ },
28422
+ };
28423
+ }
28424
+ return {
28425
+ bodyFamily,
28426
+ faceFamily,
28427
+ body,
28428
+ tentacles,
28429
+ face,
28430
+ details: {
28431
+ mantleCurrentCount: resolveSeededIntegerRange(detailRandom, 4, 8),
28432
+ mantleNodeCount: resolveSeededIntegerRange(detailRandom, 3, 7),
28433
+ },
28434
+ };
28435
+ }
28436
+ /**
28437
+ * Resolves one seeded floating-point number inside the provided range.
28438
+ *
28439
+ * @param random Seeded random generator.
28440
+ * @param minimumValue Inclusive lower bound.
28441
+ * @param maximumValue Inclusive upper bound.
28442
+ * @returns Seeded number within the range.
28443
+ *
28444
+ * @private helper of `octopus3AvatarVisual`
28445
+ */
28446
+ function resolveSeededRange(random, minimumValue, maximumValue) {
28447
+ return minimumValue + random() * (maximumValue - minimumValue);
28448
+ }
28449
+ /**
28450
+ * Resolves one seeded integer inside the provided inclusive range.
28451
+ *
28452
+ * @param random Seeded random generator.
28453
+ * @param minimumValue Inclusive lower bound.
28454
+ * @param maximumValue Inclusive upper bound.
28455
+ * @returns Seeded integer within the range.
28456
+ *
28457
+ * @private helper of `octopus3AvatarVisual`
28458
+ */
28459
+ function resolveSeededIntegerRange(random, minimumValue, maximumValue) {
28460
+ return minimumValue + Math.floor(random() * (maximumValue - minimumValue + 1));
28461
+ }
28462
+ /**
28463
+ * Converts an opacity ratio into a two-digit hexadecimal alpha suffix.
28464
+ *
28465
+ * @param opacity Opacity ratio in the range `[0, 1]`.
28466
+ * @returns Two-digit hexadecimal alpha string.
28467
+ *
28468
+ * @private helper of `octopus3AvatarVisual`
28469
+ */
28470
+ function formatAlphaHex(opacity) {
28471
+ return Math.round(Math.min(1, Math.max(0, opacity)) * 255)
28472
+ .toString(16)
28473
+ .padStart(2, '0');
28474
+ }
28180
28475
  /**
28181
28476
  * Octopus3 avatar visual.
28182
28477
  *
@@ -28189,22 +28484,24 @@ const octopus3AvatarVisual = {
28189
28484
  isAnimated: true,
28190
28485
  supportsPointerTracking: true,
28191
28486
  render({ context, size, palette, createRandom, timeMs, interaction }) {
28192
- const staticRandom = createRandom('octopus3-static');
28193
- const centerX = size * (0.5 + (staticRandom() - 0.5) * 0.02) + interaction.bodyOffsetX * size * 0.05;
28194
- const centerY = size * (0.41 + staticRandom() * 0.05) + interaction.bodyOffsetY * size * 0.035;
28195
- const bodyRadius = size * (0.2 + staticRandom() * 0.045);
28196
- const horizontalStretch = 1.08 + staticRandom() * 0.22;
28197
- const verticalStretch = 0.9 + staticRandom() * 0.12;
28198
- const mantleLift = size * (0.105 + staticRandom() * 0.03);
28199
- const lowerDrop = size * (0.028 + staticRandom() * 0.022);
28200
- const tentacleDepth = size * (0.022 + staticRandom() * 0.018);
28201
- const wobbleAmplitude = size * (0.01 + staticRandom() * 0.01);
28202
- const lobeCount = 5 + Math.floor(staticRandom() * 3);
28203
- const shapePhase = staticRandom() * Math.PI * 2;
28204
- const tentacleCount = 8 + Math.floor(staticRandom() * 5);
28205
- const eyeSpacing = size * (0.11 + staticRandom() * 0.04);
28206
- const eyeRadiusX = size * (0.056 + staticRandom() * 0.014);
28207
- const eyeRadiusY = eyeRadiusX * (1.18 + staticRandom() * 0.18);
28487
+ const morphologyProfile = createOctopus3MorphologyProfile(createRandom);
28488
+ const animationRandom = createRandom('octopus3-animation-profile');
28489
+ const eyeRandom = createRandom('octopus3-eye-profile');
28490
+ const centerX = size * (0.5 + morphologyProfile.body.centerXJitterRatio) + interaction.bodyOffsetX * size * 0.05;
28491
+ const centerY = size * morphologyProfile.body.centerYRatio + interaction.bodyOffsetY * size * 0.035;
28492
+ const bodyRadius = size * morphologyProfile.body.bodyRadiusRatio;
28493
+ const horizontalStretch = morphologyProfile.body.horizontalStretch;
28494
+ const verticalStretch = morphologyProfile.body.verticalStretch;
28495
+ const mantleLift = size * morphologyProfile.body.mantleLiftRatio;
28496
+ const lowerDrop = size * morphologyProfile.body.lowerDropRatio;
28497
+ const tentacleDepth = size * morphologyProfile.body.tentacleDepthRatio;
28498
+ const wobbleAmplitude = size * morphologyProfile.body.wobbleAmplitudeRatio;
28499
+ const lobeCount = morphologyProfile.body.lobeCount;
28500
+ const shapePhase = animationRandom() * Math.PI * 2;
28501
+ const eyeSpacing = size * morphologyProfile.face.eyeSpacingRatio;
28502
+ const eyeCenterY = centerY + size * morphologyProfile.face.eyeCenterYOffsetRatio;
28503
+ const eyeRadiusX = size * morphologyProfile.face.eyeRadiusXRatio;
28504
+ const eyeRadiusY = eyeRadiusX * morphologyProfile.face.eyeHeightRatio;
28208
28505
  const bodyPoints = createOrganicOctopusBodyPoints({
28209
28506
  centerX,
28210
28507
  centerY,
@@ -28218,7 +28515,7 @@ const octopus3AvatarVisual = {
28218
28515
  lobeCount,
28219
28516
  shapePhase,
28220
28517
  timeMs,
28221
- pointCount: 40,
28518
+ pointCount: morphologyProfile.body.pointCount,
28222
28519
  });
28223
28520
  const tentacleShapes = createOrganicOctopusTentacleShapes({
28224
28521
  size,
@@ -28226,17 +28523,27 @@ const octopus3AvatarVisual = {
28226
28523
  centerY,
28227
28524
  bodyRadius,
28228
28525
  horizontalStretch,
28229
- tentacleCount,
28526
+ tentacleCount: morphologyProfile.tentacles.count,
28230
28527
  shapePhase,
28231
28528
  createRandom,
28232
28529
  timeMs,
28233
28530
  saltPrefix: 'octopus3',
28234
28531
  bodyPoints,
28532
+ variation: {
28533
+ flowLengthScale: morphologyProfile.tentacles.flowLengthScale,
28534
+ lateralReachScale: morphologyProfile.tentacles.lateralReachScale,
28535
+ tipReachScale: morphologyProfile.tentacles.tipReachScale,
28536
+ baseWidthScale: morphologyProfile.tentacles.baseWidthScale,
28537
+ tipWidthScale: morphologyProfile.tentacles.tipWidthScale,
28538
+ rootSpreadScale: morphologyProfile.tentacles.rootSpreadScale,
28539
+ startYOffsetScale: morphologyProfile.tentacles.startYOffsetScale,
28540
+ swayScale: morphologyProfile.tentacles.swayScale,
28541
+ },
28235
28542
  });
28236
28543
  drawAvatarFrame(context, size, palette);
28237
- drawOctopus3Atmosphere(context, size, palette, centerX, centerY, timeMs, shapePhase);
28544
+ drawOctopus3Atmosphere(context, size, palette, centerX, centerY, timeMs, shapePhase, morphologyProfile);
28238
28545
  context.beginPath();
28239
- context.ellipse(centerX, centerY + size * 0.25, size * 0.24, size * 0.08, 0, 0, Math.PI * 2);
28546
+ context.ellipse(centerX, centerY + size * 0.25, size * morphologyProfile.body.shadowWidthRatio, size * morphologyProfile.body.shadowHeightRatio, 0, 0, Math.PI * 2);
28240
28547
  context.fillStyle = `${palette.shadow}33`;
28241
28548
  context.fill();
28242
28549
  for (const tentacleShape of tentacleShapes) {
@@ -28264,8 +28571,8 @@ const octopus3AvatarVisual = {
28264
28571
  innerGlowGradient.addColorStop(1, `${palette.shadow}00`);
28265
28572
  context.fillStyle = innerGlowGradient;
28266
28573
  context.fillRect(centerX - size * 0.36, centerY - size * 0.34, size * 0.72, size * 0.72);
28267
- drawMantleCurrents(context, centerX, centerY, size, palette, timeMs, shapePhase);
28268
- drawMantleNodes(context, centerX, centerY, size, palette, createRandom);
28574
+ drawMantleCurrents(context, centerX, centerY, size, palette, timeMs, shapePhase, morphologyProfile);
28575
+ drawMantleNodes(context, centerX, centerY, size, palette, createRandom, morphologyProfile);
28269
28576
  context.restore();
28270
28577
  context.save();
28271
28578
  traceSmoothClosedPath(context, bodyPoints);
@@ -28274,14 +28581,19 @@ const octopus3AvatarVisual = {
28274
28581
  context.stroke();
28275
28582
  context.restore();
28276
28583
  context.beginPath();
28277
- context.ellipse(centerX, centerY - size * 0.14, size * 0.18, size * 0.062, 0, Math.PI, Math.PI * 2);
28584
+ context.ellipse(centerX, centerY + size * morphologyProfile.body.crownHighlightYOffsetRatio, size * morphologyProfile.body.crownHighlightWidthRatio, size * morphologyProfile.body.crownHighlightHeightRatio, 0, Math.PI, Math.PI * 2);
28278
28585
  context.fillStyle = `${palette.highlight}3d`;
28279
28586
  context.fill();
28280
- drawSeededEye(context, centerX - eyeSpacing, centerY - size * 0.01, eyeRadiusX, eyeRadiusY, (staticRandom() - 0.5) * 0.28, palette, timeMs, shapePhase, interaction);
28281
- drawSeededEye(context, centerX + eyeSpacing, centerY - size * 0.01, eyeRadiusX, eyeRadiusY, (staticRandom() - 0.5) * 0.28, palette, timeMs, shapePhase + Math.PI / 4, interaction);
28587
+ drawSeededEye(context, centerX - eyeSpacing, eyeCenterY, eyeRadiusX, eyeRadiusY, -morphologyProfile.face.eyeTiltBias + (eyeRandom() - 0.5) * morphologyProfile.face.eyeRotationRange, palette, timeMs, shapePhase, interaction, morphologyProfile.face.eyeStyle);
28588
+ drawSeededEye(context, centerX + eyeSpacing, eyeCenterY, eyeRadiusX, eyeRadiusY, morphologyProfile.face.eyeTiltBias + (eyeRandom() - 0.5) * morphologyProfile.face.eyeRotationRange, palette, timeMs, shapePhase + Math.PI / 4, interaction, morphologyProfile.face.eyeStyle);
28589
+ const mouthHalfWidth = size * morphologyProfile.face.mouthWidthRatio;
28590
+ const mouthY = centerY + size * morphologyProfile.face.mouthYOffsetRatio;
28591
+ const mouthCornerTilt = size * morphologyProfile.face.mouthCornerTiltRatio;
28282
28592
  context.beginPath();
28283
- context.moveTo(centerX - size * 0.07, centerY + size * 0.09);
28284
- context.quadraticCurveTo(centerX, centerY + size * (0.14 + Math.sin(timeMs / 620 + shapePhase) * 0.016) + interaction.gazeY * size * 0.012, centerX + size * 0.07, centerY + size * 0.09);
28593
+ context.moveTo(centerX - mouthHalfWidth, mouthY - mouthCornerTilt);
28594
+ context.quadraticCurveTo(centerX + size * morphologyProfile.face.mouthCenterOffsetRatio, centerY +
28595
+ size * (morphologyProfile.face.mouthCurveDepthRatio + Math.sin(timeMs / 620 + shapePhase) * 0.016) +
28596
+ interaction.gazeY * size * 0.012, centerX + mouthHalfWidth, mouthY + mouthCornerTilt);
28285
28597
  context.strokeStyle = `${palette.ink}b3`;
28286
28598
  context.lineWidth = size * 0.012;
28287
28599
  context.lineCap = 'round';
@@ -28298,17 +28610,18 @@ const octopus3AvatarVisual = {
28298
28610
  * @param centerY Body center Y coordinate.
28299
28611
  * @param timeMs Current animation time in milliseconds.
28300
28612
  * @param shapePhase Seed-based phase offset.
28613
+ * @param morphologyProfile Seeded morphology profile.
28301
28614
  *
28302
28615
  * @private helper of `octopus3AvatarVisual`
28303
28616
  */
28304
- function drawOctopus3Atmosphere(context, size, palette, centerX, centerY, timeMs, shapePhase) {
28305
- const haloGradient = context.createRadialGradient(centerX, centerY - size * 0.08, size * 0.06, centerX, centerY, size * 0.62);
28617
+ function drawOctopus3Atmosphere(context, size, palette, centerX, centerY, timeMs, shapePhase, morphologyProfile) {
28618
+ const haloGradient = context.createRadialGradient(centerX, centerY - size * (0.07 + (morphologyProfile.body.verticalStretch - 0.9) * 0.05), size * 0.06, centerX, centerY, size * (0.56 + morphologyProfile.body.bodyRadiusRatio * 0.45));
28306
28619
  haloGradient.addColorStop(0, `${palette.highlight}5c`);
28307
28620
  haloGradient.addColorStop(0.35, `${palette.accent}26`);
28308
28621
  haloGradient.addColorStop(1, `${palette.highlight}00`);
28309
28622
  context.fillStyle = haloGradient;
28310
28623
  context.fillRect(0, 0, size, size);
28311
- const lowerGlowGradient = context.createRadialGradient(centerX + Math.sin(timeMs / 1600 + shapePhase) * size * 0.04, centerY + size * 0.2, size * 0.04, centerX, centerY + size * 0.2, size * 0.48);
28624
+ const lowerGlowGradient = context.createRadialGradient(centerX + Math.sin(timeMs / 1600 + shapePhase) * size * 0.04, centerY + size * (0.18 + morphologyProfile.tentacles.flowLengthScale * 0.025), size * 0.04, centerX, centerY + size * (0.18 + morphologyProfile.tentacles.flowLengthScale * 0.025), size * (0.42 + morphologyProfile.tentacles.lateralReachScale * 0.06));
28312
28625
  lowerGlowGradient.addColorStop(0, `${palette.secondary}1f`);
28313
28626
  lowerGlowGradient.addColorStop(1, `${palette.secondary}00`);
28314
28627
  context.fillStyle = lowerGlowGradient;
@@ -28417,18 +28730,22 @@ function drawTentacleSuckers(context, tentacleShape, palette) {
28417
28730
  * @param palette Derived avatar palette.
28418
28731
  * @param timeMs Current animation time in milliseconds.
28419
28732
  * @param shapePhase Seed-based phase offset.
28733
+ * @param morphologyProfile Seeded morphology profile.
28420
28734
  *
28421
28735
  * @private helper of `octopus3AvatarVisual`
28422
28736
  */
28423
- function drawMantleCurrents(context, centerX, centerY, size, palette, timeMs, shapePhase) {
28424
- for (let currentIndex = 0; currentIndex < 6; currentIndex++) {
28425
- const horizontalOffset = (currentIndex - 2.5) * size * 0.06;
28737
+ function drawMantleCurrents(context, centerX, centerY, size, palette, timeMs, shapePhase, morphologyProfile) {
28738
+ const centeredCurrentIndex = (morphologyProfile.details.mantleCurrentCount - 1) / 2;
28739
+ for (let currentIndex = 0; currentIndex < morphologyProfile.details.mantleCurrentCount; currentIndex++) {
28740
+ const horizontalOffset = (currentIndex - centeredCurrentIndex) *
28741
+ size *
28742
+ (0.05 + (morphologyProfile.body.horizontalStretch - 0.9) * 0.025);
28426
28743
  const sway = Math.sin(timeMs / 680 + currentIndex * 0.78 + shapePhase) * size * 0.024;
28427
28744
  context.beginPath();
28428
- context.moveTo(centerX + horizontalOffset * 0.3, centerY - size * 0.13);
28429
- context.bezierCurveTo(centerX + horizontalOffset - sway * 0.25, centerY - size * 0.04, centerX + horizontalOffset + sway, centerY + size * 0.06, centerX + horizontalOffset * 0.7 + sway * 0.46, centerY + size * 0.2);
28745
+ context.moveTo(centerX + horizontalOffset * 0.3, centerY - size * (0.11 + morphologyProfile.body.verticalStretch * 0.02));
28746
+ context.bezierCurveTo(centerX + horizontalOffset - sway * 0.25, centerY - size * 0.04, centerX + horizontalOffset + sway, centerY + size * 0.06, centerX + horizontalOffset * 0.7 + sway * 0.46, centerY + size * (0.16 + morphologyProfile.body.verticalStretch * 0.035));
28430
28747
  context.strokeStyle = currentIndex % 2 === 0 ? `${palette.highlight}30` : `${palette.accent}26`;
28431
- context.lineWidth = size * (0.008 + currentIndex * 0.0007);
28748
+ context.lineWidth = size * (0.0075 + currentIndex * 0.00065 + morphologyProfile.tentacles.baseWidthScale * 0.0005);
28432
28749
  context.lineCap = 'round';
28433
28750
  context.stroke();
28434
28751
  }
@@ -28442,14 +28759,17 @@ function drawMantleCurrents(context, centerX, centerY, size, palette, timeMs, sh
28442
28759
  * @param size Canvas size in CSS pixels.
28443
28760
  * @param palette Derived avatar palette.
28444
28761
  * @param createRandom Seeded random factory scoped to the avatar.
28762
+ * @param morphologyProfile Seeded morphology profile.
28445
28763
  *
28446
28764
  * @private helper of `octopus3AvatarVisual`
28447
28765
  */
28448
- function drawMantleNodes(context, centerX, centerY, size, palette, createRandom) {
28449
- for (let nodeIndex = 0; nodeIndex < 5; nodeIndex++) {
28766
+ function drawMantleNodes(context, centerX, centerY, size, palette, createRandom, morphologyProfile) {
28767
+ for (let nodeIndex = 0; nodeIndex < morphologyProfile.details.mantleNodeCount; nodeIndex++) {
28450
28768
  const nodeRandom = createRandom(`octopus3-node-${nodeIndex}`);
28451
- const nodeX = centerX + (nodeRandom() - 0.5) * size * 0.28;
28452
- const nodeY = centerY - size * 0.03 + (nodeRandom() - 0.5) * size * 0.2;
28769
+ const nodeX = centerX + (nodeRandom() - 0.5) * size * (0.2 + (morphologyProfile.body.horizontalStretch - 0.9) * 0.16);
28770
+ const nodeY = centerY -
28771
+ size * 0.03 +
28772
+ (nodeRandom() - 0.5) * size * (0.16 + (morphologyProfile.body.verticalStretch - 0.82) * 0.1);
28453
28773
  const nodeRadius = size * (0.016 + nodeRandom() * 0.016);
28454
28774
  context.beginPath();
28455
28775
  context.arc(nodeX, nodeY, nodeRadius, 0, Math.PI * 2);
@@ -28470,10 +28790,11 @@ function drawMantleNodes(context, centerX, centerY, size, palette, createRandom)
28470
28790
  * @param timeMs Current animation time in milliseconds.
28471
28791
  * @param phase Seed-based animation phase.
28472
28792
  * @param interaction Smoothed avatar interaction state.
28793
+ * @param eyeStyle Seeded eye-style traits.
28473
28794
  *
28474
28795
  * @private helper of `octopus3AvatarVisual`
28475
28796
  */
28476
- function drawSeededEye(context, centerX, centerY, radiusX, radiusY, rotation, palette, timeMs, phase, interaction) {
28797
+ function drawSeededEye(context, centerX, centerY, radiusX, radiusY, rotation, palette, timeMs, phase, interaction, eyeStyle) {
28477
28798
  const { pupilOffsetX, pupilOffsetY } = resolveOrganicEyeMotion({
28478
28799
  radiusX,
28479
28800
  radiusY,
@@ -28494,11 +28815,11 @@ function drawSeededEye(context, centerX, centerY, radiusX, radiusY, rotation, pa
28494
28815
  irisGradient.addColorStop(0.58, palette.secondary);
28495
28816
  irisGradient.addColorStop(1, palette.shadow);
28496
28817
  context.beginPath();
28497
- context.ellipse(pupilOffsetX, pupilOffsetY, radiusX * 0.66, radiusY * 0.74, 0, 0, Math.PI * 2);
28818
+ context.ellipse(pupilOffsetX, pupilOffsetY, radiusX * 0.66 * eyeStyle.irisScale, radiusY * 0.74 * eyeStyle.irisScale, 0, 0, Math.PI * 2);
28498
28819
  context.fillStyle = irisGradient;
28499
28820
  context.fill();
28500
28821
  context.beginPath();
28501
- context.ellipse(pupilOffsetX, pupilOffsetY, radiusX * 0.14, radiusY * 0.5, 0, 0, Math.PI * 2);
28822
+ context.ellipse(pupilOffsetX, pupilOffsetY, radiusX * 0.14 * eyeStyle.pupilWidthScale, radiusY * 0.5 * eyeStyle.pupilHeightScale, 0, 0, Math.PI * 2);
28502
28823
  context.fillStyle = palette.ink;
28503
28824
  context.fill();
28504
28825
  context.beginPath();
@@ -28515,12 +28836,21 @@ function drawSeededEye(context, centerX, centerY, radiusX, radiusY, rotation, pa
28515
28836
  context.lineWidth = radiusX * 0.18;
28516
28837
  context.stroke();
28517
28838
  context.beginPath();
28518
- context.moveTo(-radiusX * 0.88, -radiusY * 0.08);
28519
- context.quadraticCurveTo(0, -radiusY * (0.9 - interaction.gazeY * 0.16 + interaction.intensity * 0.08), radiusX * 0.88, -radiusY * 0.08);
28839
+ context.moveTo(-radiusX * 0.88, -radiusY * eyeStyle.upperLidInsetRatio);
28840
+ context.quadraticCurveTo(0, -radiusY * (eyeStyle.upperLidArchRatio - interaction.gazeY * 0.16 + interaction.intensity * 0.08), radiusX * 0.88, -radiusY * eyeStyle.upperLidInsetRatio);
28520
28841
  context.strokeStyle = `${palette.shadow}73`;
28521
28842
  context.lineWidth = radiusX * 0.16;
28522
28843
  context.lineCap = 'round';
28523
28844
  context.stroke();
28845
+ if (eyeStyle.lowerLidOpacity > 0) {
28846
+ context.beginPath();
28847
+ context.moveTo(-radiusX * 0.74, radiusY * 0.2);
28848
+ context.quadraticCurveTo(0, radiusY * 0.38, radiusX * 0.74, radiusY * 0.2);
28849
+ context.strokeStyle = `${palette.highlight}${formatAlphaHex(eyeStyle.lowerLidOpacity)}`;
28850
+ context.lineWidth = radiusX * 0.08;
28851
+ context.lineCap = 'round';
28852
+ context.stroke();
28853
+ }
28524
28854
  context.restore();
28525
28855
  }
28526
28856
 
@@ -30247,7 +30577,7 @@ function StreamingFeaturePlaceholder({ kind }) {
30247
30577
  * @private internal component of `<ChatMessageItem/>`
30248
30578
  */
30249
30579
  function ChatMessageRichContent(props) {
30250
- const { content, contentSegments, streamingFeaturePlaceholderKind, onCreateAgent } = props;
30580
+ const { content, contentSegments, streamingFeaturePlaceholderKind, onCreateAgent, mode } = props;
30251
30581
  if (content === LOADING_INTERACTIVE_IMAGE) {
30252
30582
  return null;
30253
30583
  }
@@ -30256,7 +30586,7 @@ function ChatMessageRichContent(props) {
30256
30586
  return (jsx(MarkdownContent, { content: segment.content, onCreateAgent: onCreateAgent }, `text-${segmentIndex}`));
30257
30587
  }
30258
30588
  if (segment.type === 'code') {
30259
- return (jsx(CodeBlock, { code: segment.code, language: segment.language, onCreateAgent: onCreateAgent }, `code-${segmentIndex}`));
30589
+ return (jsx(CodeBlock, { code: segment.code, language: segment.language, onCreateAgent: onCreateAgent, theme: mode }, `code-${segmentIndex}`));
30260
30590
  }
30261
30591
  if (segment.type === 'image') {
30262
30592
  return (jsx(ImagePromptRenderer, { alt: segment.alt, prompt: segment.prompt }, `image-${segmentIndex}`));
@@ -47089,6 +47419,8 @@ const ChatMessageItem = memo(
47089
47419
  const swipeDirectionMultiplier = isMe ? -1 : 1;
47090
47420
  const swipeTranslation = `${isMe ? -replySwipeDistance : replySwipeDistance}px`;
47091
47421
  const isReplySwipeArmed = replySwipeDistance >= REPLY_SWIPE_TRIGGER_PX * 0.5;
47422
+ const articleModeBackgroundColor = mode === 'DARK' ? 'rgba(15, 23, 42, 0.78)' : '#ffffff';
47423
+ const articleModeTextColor = mode === 'DARK' ? '#e2e8f0' : '#0f172a';
47092
47424
  /**
47093
47425
  * Renders the optional message utility buttons used for copy/read actions.
47094
47426
  *
@@ -47290,10 +47622,12 @@ const ChatMessageItem = memo(
47290
47622
  aspectRatio: '1 / 1',
47291
47623
  borderRadius: '50%',
47292
47624
  } })), isAvatarTooltipVisible && (participant === null || participant === void 0 ? void 0 : participant.agentSource) && avatarTooltipPosition && (jsx(AvatarProfileTooltip, { ref: tooltipRef, agentSource: participant.agentSource, position: avatarTooltipPosition }))] })), jsxs("div", { className: classNames(styles$5.messageStack, chatCssClassNames.messageStack), children: [shouldShowParticipantLabel && participantLabel && (jsx("div", { className: styles$5.participantLabel, children: participantLabel })), jsxs("div", { className: classNames(styles$5.messageText, isReplyActionEnabled && styles$5.replyEnabledMessageText, isReplySwipeArmed && styles$5.replySwipeActive, isAgentArticleMode && styles$5.articleModeAgentMessageText, chatCssClassNames.messageContent), style: {
47293
- '--message-bg-color': isAgentArticleMode ? '#ffffff' : color.toHex(),
47294
- '--message-text-color': isAgentArticleMode ? '#0f172a' : colorOfText.toHex(),
47625
+ '--message-bg-color': isAgentArticleMode ? articleModeBackgroundColor : color.toHex(),
47626
+ '--message-text-color': isAgentArticleMode
47627
+ ? articleModeTextColor
47628
+ : colorOfText.toHex(),
47295
47629
  '--chat-message-swipe-offset': swipeTranslation,
47296
- }, onPointerDown: handleReplyPointerDown, onPointerMove: handleReplyPointerMove, onPointerUp: handleReplyPointerEnd, onPointerCancel: resetReplySwipe, children: [isReplyActionEnabled && (jsx("div", { className: classNames(styles$5.replySwipeIndicator, isMe && styles$5.replySwipeIndicatorRight, isReplySwipeArmed && styles$5.replySwipeIndicatorActive), "aria-hidden": "true", children: jsx(Reply, { className: styles$5.replySwipeIndicatorIcon }) })), !shouldRenderArticleActionsBar && renderMessageReadAndCopyControls(), message.isVoiceCall && (jsx("div", { className: styles$5.voiceCallIndicator, children: jsx("svg", { width: "16", height: "16", viewBox: "0 0 24 24", fill: "currentColor", children: jsx("path", { d: "M6.62 10.79c1.44 2.83 3.76 5.14 6.59 6.59l2.2-2.2c.27-.27.67-.36 1.02-.24 1.12.37 2.33.57 3.57.57.55 0 1 .45 1 1V20c0 .55-.45 1-1 1-9.39 0-17-7.61-17-17 0-.55.45-1 1-1h3.5c.55 0 1 .45 1 1 0 1.25.2 2.45.57 3.57.11.35.03.74-.25 1.02l-2.2 2.2z" }) }) })), replyingToMessage && replyPreviewText && replySenderLabel && (jsx(ChatReplyPreview, { label: replyPreviewLabel, senderLabel: replySenderLabel, previewText: replyPreviewText, className: styles$5.replyBubblePreview })), jsx("div", { ref: contentWithoutButtonsRef, children: jsx(ChatMessageRichContent, { content: message.content, contentSegments: contentSegments, streamingFeaturePlaceholderKind: streamingFeaturePlaceholderKind, onCreateAgent: onCreateAgent }) }), message.attachments && message.attachments.length > 0 && (jsx("div", { className: styles$5.attachments, children: message.attachments.map((attachment, index) => (jsxs("a", { href: attachment.url, target: "_blank", rel: "noopener noreferrer", className: styles$5.attachment, title: attachment.name, children: [jsx("span", { className: styles$5.attachmentIcon, children: "\uD83D\uDCCE" }), jsx("span", { className: styles$5.attachmentName, children: attachment.name })] }, index))) })), jsx(ChatMessageToolCallChips, { chips: toolCallChips, onToolCallClick: onToolCallClick }), citationFootnoteRenderModel.footnotes.length > 0 && (jsx("div", { className: styles$5.citationFootnotes, children: citationFootnoteRenderModel.footnotes.map((footnote) => (jsxs("div", { className: styles$5.citationFootnoteItem, children: [jsx("span", { className: styles$5.citationFootnoteNumber, children: footnote.number }), jsx(SourceChip, { citation: footnote.citation, onClick: onCitationClick, isCitationIdVisible: false })] }, `citation-footnote-${footnote.number}-${footnote.citation.source}`))) })), transitiveCitations.length > 0 && (jsx("div", { className: styles$5.sourceCitations, children: transitiveCitations.map((citation, index) => (jsx(SourceChip, { citation: citation, suffix: `by ${citation.origin.label}`, onClick: onCitationClick }, `team-source-${citation.source}-${index}`))) })), shouldShowButtons && (jsx("div", { className: styles$5.messageButtons, children: renderableButtons.map(({ button, buttonIndex }) => (jsx("button", { type: "button", className: classNames(styles$5.messageButton, button.type === 'action' && styles$5.actionMessageButton), onClick: (event) => {
47630
+ }, onPointerDown: handleReplyPointerDown, onPointerMove: handleReplyPointerMove, onPointerUp: handleReplyPointerEnd, onPointerCancel: resetReplySwipe, children: [isReplyActionEnabled && (jsx("div", { className: classNames(styles$5.replySwipeIndicator, isMe && styles$5.replySwipeIndicatorRight, isReplySwipeArmed && styles$5.replySwipeIndicatorActive), "aria-hidden": "true", children: jsx(Reply, { className: styles$5.replySwipeIndicatorIcon }) })), !shouldRenderArticleActionsBar && renderMessageReadAndCopyControls(), message.isVoiceCall && (jsx("div", { className: styles$5.voiceCallIndicator, children: jsx("svg", { width: "16", height: "16", viewBox: "0 0 24 24", fill: "currentColor", children: jsx("path", { d: "M6.62 10.79c1.44 2.83 3.76 5.14 6.59 6.59l2.2-2.2c.27-.27.67-.36 1.02-.24 1.12.37 2.33.57 3.57.57.55 0 1 .45 1 1V20c0 .55-.45 1-1 1-9.39 0-17-7.61-17-17 0-.55.45-1 1-1h3.5c.55 0 1 .45 1 1 0 1.25.2 2.45.57 3.57.11.35.03.74-.25 1.02l-2.2 2.2z" }) }) })), replyingToMessage && replyPreviewText && replySenderLabel && (jsx(ChatReplyPreview, { label: replyPreviewLabel, senderLabel: replySenderLabel, previewText: replyPreviewText, className: styles$5.replyBubblePreview })), jsx("div", { ref: contentWithoutButtonsRef, children: jsx(ChatMessageRichContent, { content: message.content, contentSegments: contentSegments, streamingFeaturePlaceholderKind: streamingFeaturePlaceholderKind, onCreateAgent: onCreateAgent, mode: mode }) }), message.attachments && message.attachments.length > 0 && (jsx("div", { className: styles$5.attachments, children: message.attachments.map((attachment, index) => (jsxs("a", { href: attachment.url, target: "_blank", rel: "noopener noreferrer", className: styles$5.attachment, title: attachment.name, children: [jsx("span", { className: styles$5.attachmentIcon, children: "\uD83D\uDCCE" }), jsx("span", { className: styles$5.attachmentName, children: attachment.name })] }, index))) })), jsx(ChatMessageToolCallChips, { chips: toolCallChips, onToolCallClick: onToolCallClick }), citationFootnoteRenderModel.footnotes.length > 0 && (jsx("div", { className: styles$5.citationFootnotes, children: citationFootnoteRenderModel.footnotes.map((footnote) => (jsxs("div", { className: styles$5.citationFootnoteItem, children: [jsx("span", { className: styles$5.citationFootnoteNumber, children: footnote.number }), jsx(SourceChip, { citation: footnote.citation, onClick: onCitationClick, isCitationIdVisible: false })] }, `citation-footnote-${footnote.number}-${footnote.citation.source}`))) })), transitiveCitations.length > 0 && (jsx("div", { className: styles$5.sourceCitations, children: transitiveCitations.map((citation, index) => (jsx(SourceChip, { citation: citation, suffix: `by ${citation.origin.label}`, onClick: onCitationClick }, `team-source-${citation.source}-${index}`))) })), shouldShowButtons && (jsx("div", { className: styles$5.messageButtons, children: renderableButtons.map(({ button, buttonIndex }) => (jsx("button", { type: "button", className: classNames(styles$5.messageButton, button.type === 'action' && styles$5.actionMessageButton), onClick: (event) => {
47297
47631
  event.stopPropagation();
47298
47632
  if (button.type === 'message') {
47299
47633
  const quickMessageHandler = onQuickMessageButton || onMessage;
@@ -47487,7 +47821,7 @@ function ChatRatingModal(props) {
47487
47821
  }
47488
47822
  return '';
47489
47823
  })();
47490
- return (jsx("div", { className: styles$5.ratingModal, onClick: (event) => {
47824
+ return (jsx("div", { className: styles$5.ratingModal, "data-chat-modal": "rating", "data-chat-theme": mode.toLowerCase(), onClick: (event) => {
47491
47825
  if (event.target === event.currentTarget && isMobile) {
47492
47826
  onClose();
47493
47827
  }
@@ -47591,12 +47925,14 @@ const TOOL_CALL_REPORT_FILENAME_UNSAFE_CHARACTER_PATTERN = /[^a-zA-Z0-9_-]/g;
47591
47925
  */
47592
47926
  function renderAdvancedToolCallDetails(options) {
47593
47927
  const { toolCall } = options;
47928
+ const mode = options.mode || 'LIGHT';
47594
47929
  const header = resolveAdvancedToolCallHeader(options);
47595
47930
  const payloadSections = createAdvancedToolCallPayloadSections(toolCall, options.availableTools);
47596
47931
  return (jsxs(Fragment, { children: [jsxs("header", { className: styles$5.toolCallHeader, children: [jsx("span", { className: styles$5.toolCallIcon, "aria-hidden": "true", children: header.emoji }), jsxs("div", { className: styles$5.toolCallHeaderMeta, children: [jsx("p", { className: styles$5.toolCallModalLabel, children: "Advanced" }), jsx("h3", { className: styles$5.toolCallTitle, children: header.title }), jsxs("p", { className: styles$5.toolCallSubtitle, children: [header.subtitle, " \u00B7 ", resolveToolCallState(toolCall).toLowerCase()] })] })] }), jsx("div", { className: styles$5.toolCallGrid, children: payloadSections.map((payloadSection) => (jsxs("section", { className: styles$5.toolCallPanel, children: [jsx("p", { className: styles$5.toolCallPanelTitle, children: payloadSection.title }), renderAdvancedToolCallPayload({
47597
47932
  toolCall,
47598
47933
  sectionId: payloadSection.id,
47599
47934
  payload: payloadSection.payload,
47935
+ mode,
47600
47936
  })] }, payloadSection.id))) })] }));
47601
47937
  }
47602
47938
  /**
@@ -47730,7 +48066,7 @@ function createAdvancedToolCallPayloadSections(toolCall, availableTools) {
47730
48066
  * @private function of ChatToolCallModal
47731
48067
  */
47732
48068
  function renderAdvancedToolCallPayload(options) {
47733
- const { toolCall, sectionId, payload } = options;
48069
+ const { toolCall, sectionId, payload, mode } = options;
47734
48070
  const formattedPayload = formatToolCallPayload(payload);
47735
48071
  const modelPath = createToolCallPayloadMonacoPath({
47736
48072
  toolCall,
@@ -47738,7 +48074,7 @@ function renderAdvancedToolCallPayload(options) {
47738
48074
  language: formattedPayload.language,
47739
48075
  });
47740
48076
  const editorHeight = resolveToolCallPayloadEditorHeight(formattedPayload.content);
47741
- return (jsx("div", { className: styles$5.toolCallPayloadContainer, children: jsx("div", { className: styles$5.toolCallPayloadEditor, children: jsx(MonacoEditorWithShadowDom, { height: `${editorHeight}px`, language: formattedPayload.language, path: modelPath, value: formattedPayload.content, theme: "vs-light", options: TOOL_CALL_PAYLOAD_EDITOR_OPTIONS }) }) }));
48077
+ return (jsx("div", { className: styles$5.toolCallPayloadContainer, children: jsx("div", { className: styles$5.toolCallPayloadEditor, children: jsx(MonacoEditorWithShadowDom, { height: `${editorHeight}px`, language: formattedPayload.language, path: modelPath, value: formattedPayload.content, theme: mode === 'DARK' ? 'vs-dark' : 'vs-light', options: TOOL_CALL_PAYLOAD_EDITOR_OPTIONS }) }) }));
47742
48078
  }
47743
48079
  /**
47744
48080
  * Resolves Monaco editor height from payload line count with bounded limits.
@@ -49870,12 +50206,13 @@ function TeamToolCallModalContent(options) {
49870
50206
  *
49871
50207
  * @private component of `ChatToolCallModal`
49872
50208
  */
49873
- function ChatToolCallModalContent({ agentParticipant, availableTools, buttonColor, chatUiTranslations, focusedToolCall, isAdvancedView, locale, onClearSelectedTeamToolCall, onRequestAdvancedView, onSelectTeamToolCall, selectedTeamToolCall, teamProfiles, teamResult, teamToolCallSummary, toolCall, toolCallDate, toolTitles, }) {
50209
+ function ChatToolCallModalContent({ agentParticipant, availableTools, buttonColor, chatUiTranslations, focusedToolCall, isAdvancedView, locale, mode, onClearSelectedTeamToolCall, onRequestAdvancedView, onSelectTeamToolCall, selectedTeamToolCall, teamProfiles, teamResult, teamToolCallSummary, toolCall, toolCallDate, toolTitles, }) {
49874
50210
  if (isAdvancedView) {
49875
50211
  return renderAdvancedToolCallDetails({
49876
50212
  toolCall: focusedToolCall,
49877
50213
  toolTitles,
49878
50214
  availableTools,
50215
+ mode,
49879
50216
  });
49880
50217
  }
49881
50218
  if (teamResult === null || teamResult === void 0 ? void 0 : teamResult.teammate) {
@@ -50142,7 +50479,7 @@ function handleModalBackdropClick(event, onClose) {
50142
50479
  * @private component of `<Chat/>`
50143
50480
  */
50144
50481
  function ChatToolCallModal(props) {
50145
- const { isOpen, toolCall, toolCallIdentity, onClose, toolTitles, agentParticipant, buttonColor, teamAgentProfiles, chatUiTranslations, locale, availableTools, } = props;
50482
+ const { isOpen, toolCall, mode = 'LIGHT', toolCallIdentity, onClose, toolTitles, agentParticipant, buttonColor, teamAgentProfiles, chatUiTranslations, locale, availableTools, } = props;
50146
50483
  const { clearSelectedTeamToolCall, exportAdvancedToolCallReport, focusedToolCall, isAdvancedView, modalDialogRef, openAdvancedView, selectTeamToolCall, selectedTeamToolCall, teamProfiles, teamResult, teamToolCallSummary, toggleViewMode, toolCallDate, } = useChatToolCallModalState({
50147
50484
  isOpen,
50148
50485
  toolCall,
@@ -50162,9 +50499,9 @@ function ChatToolCallModal(props) {
50162
50499
  const modeToggleLabel = isAdvancedView
50163
50500
  ? (chatUiTranslations === null || chatUiTranslations === void 0 ? void 0 : chatUiTranslations.toolCallModalSimpleLabel) || 'Simple'
50164
50501
  : (chatUiTranslations === null || chatUiTranslations === void 0 ? void 0 : chatUiTranslations.toolCallModalAdvancedLabel) || 'Advanced';
50165
- return (jsx("div", { className: styles$5.ratingModal, onClick: (event) => {
50502
+ return (jsx("div", { className: styles$5.ratingModal, "data-chat-modal": "tool-call", "data-chat-theme": mode.toLowerCase(), onClick: (event) => {
50166
50503
  handleModalBackdropClick(event, onClose);
50167
- }, children: jsxs("div", { ref: modalDialogRef, className: classNames(styles$5.ratingModalContent, styles$5.toolCallModal), role: "dialog", "aria-modal": "true", "aria-label": modalTitle, tabIndex: -1, children: [jsx("button", { type: "button", className: styles$5.modalCloseButton, onClick: onClose, "aria-label": closeButtonLabel, children: jsx(CloseIcon, {}) }), jsx(ChatToolCallModalContent, { toolCall: toolCall, focusedToolCall: resolvedFocusedToolCall, isAdvancedView: isAdvancedView, teamResult: teamResult, toolCallDate: toolCallDate, teamToolCallSummary: teamToolCallSummary, selectedTeamToolCall: selectedTeamToolCall, onSelectTeamToolCall: selectTeamToolCall, onClearSelectedTeamToolCall: clearSelectedTeamToolCall, teamProfiles: teamProfiles, toolTitles: toolTitles, agentParticipant: agentParticipant, buttonColor: buttonColor, locale: locale, chatUiTranslations: chatUiTranslations, availableTools: availableTools, onRequestAdvancedView: openAdvancedView }), jsxs("div", { className: styles$5.toolCallModeFooter, children: [isAdvancedView && (jsxs(Fragment, { children: [jsx("button", { type: "button", className: styles$5.toolCallModeButton, onClick: () => {
50504
+ }, children: jsxs("div", { ref: modalDialogRef, className: classNames(styles$5.ratingModalContent, styles$5.toolCallModal), role: "dialog", "aria-modal": "true", "aria-label": modalTitle, tabIndex: -1, children: [jsx("button", { type: "button", className: styles$5.modalCloseButton, onClick: onClose, "aria-label": closeButtonLabel, children: jsx(CloseIcon, {}) }), jsx(ChatToolCallModalContent, { toolCall: toolCall, focusedToolCall: resolvedFocusedToolCall, isAdvancedView: isAdvancedView, teamResult: teamResult, toolCallDate: toolCallDate, teamToolCallSummary: teamToolCallSummary, selectedTeamToolCall: selectedTeamToolCall, onSelectTeamToolCall: selectTeamToolCall, onClearSelectedTeamToolCall: clearSelectedTeamToolCall, teamProfiles: teamProfiles, toolTitles: toolTitles, agentParticipant: agentParticipant, buttonColor: buttonColor, locale: locale, chatUiTranslations: chatUiTranslations, availableTools: availableTools, onRequestAdvancedView: openAdvancedView, mode: mode }), jsxs("div", { className: styles$5.toolCallModeFooter, children: [isAdvancedView && (jsxs(Fragment, { children: [jsx("button", { type: "button", className: styles$5.toolCallModeButton, onClick: () => {
50168
50505
  void exportAdvancedToolCallReport('clipboard');
50169
50506
  }, children: copyButtonLabel }), jsx("button", { type: "button", className: styles$5.toolCallModeButton, onClick: () => {
50170
50507
  void exportAdvancedToolCallReport('file');
@@ -50790,7 +51127,7 @@ function hasChatActions(postprocessedMessages, { onReset, newChatButtonHref, onU
50790
51127
  * @public exported from `@promptbook/components`
50791
51128
  */
50792
51129
  function Chat(props) {
50793
- const { title = 'Chat', messages, onChange, onMessage, onActionButton, onQuickMessageButton, onReplyToMessage, onCancelReply, onReset, resetRequiresConfirmation = true, newChatButtonHref, onFeedback, feedbackMode = 'stars', feedbackTranslations, timingTranslations, onFileUpload, chatLocale, speechRecognition, placeholderMessageContent, defaultMessage, enterBehavior, resolveEnterBehavior, children, className, style, isAiTextHumanizedAndPromptbookified = true, isVoiceCalling = false, isFocusedOnLoad, participants = [], canReplyToMessage, replyingToMessage, extraActions, actionsContainer, saveFormats, isSaveButtonEnabled = true, isCopyButtonEnabled = true, buttonColor: buttonColorRaw, onUseTemplate, onCreateAgent, toolTitles, teammates, teamAgentProfiles, layout, visualMode = 'ARTICLE_MODE', effectConfigs, soundSystem, speechRecognitionLanguage, isSpeechPlaybackEnabled = true, elevenLabsVoiceId, chatUiTranslations, } = props;
51130
+ const { title = 'Chat', messages, onChange, onMessage, onActionButton, onQuickMessageButton, onReplyToMessage, onCancelReply, onReset, resetRequiresConfirmation = true, newChatButtonHref, onFeedback, feedbackMode = 'stars', feedbackTranslations, timingTranslations, onFileUpload, chatLocale, speechRecognition, placeholderMessageContent, defaultMessage, enterBehavior, resolveEnterBehavior, children, className, style, isAiTextHumanizedAndPromptbookified = true, isVoiceCalling = false, isFocusedOnLoad, participants = [], canReplyToMessage, replyingToMessage, extraActions, actionsContainer, saveFormats, isSaveButtonEnabled = true, isCopyButtonEnabled = true, buttonColor: buttonColorRaw, onUseTemplate, onCreateAgent, toolTitles, teammates, teamAgentProfiles, layout, visualMode = 'ARTICLE_MODE', theme = 'LIGHT', effectConfigs, soundSystem, speechRecognitionLanguage, isSpeechPlaybackEnabled = true, elevenLabsVoiceId, chatUiTranslations, } = props;
50794
51131
  const buttonColor = useMemo(() => Color.from(buttonColorRaw || '#0066cc'), [buttonColorRaw]);
50795
51132
  const agentParticipant = useMemo(() => participants.find((participant) => participant.name === 'AGENT'), [participants]);
50796
51133
  const postprocessedMessages = useChatPostprocessedMessages({
@@ -50810,7 +51147,7 @@ function Chat(props) {
50810
51147
  const { citationModalOpen, closeCitationModal, closeToolCallModal, openCitation, openToolCall, selectedCitation, selectedMessageAvailableTools, selectedToolCall, selectedToolCallIdentity, toolCallModalOpen, } = useChatToolCallState({
50811
51148
  messages: postprocessedMessages,
50812
51149
  });
50813
- const mode = 'LIGHT';
51150
+ const mode = theme;
50814
51151
  const scrollToBottomCssClassName = getChatCssClassName('scrollToBottom');
50815
51152
  const handleButtonClick = useCallback((originalHandler) => {
50816
51153
  return (event) => {
@@ -50835,7 +51172,7 @@ function Chat(props) {
50835
51172
  useChatCompleteNotification(messages, soundSystem);
50836
51173
  return (jsxs(Fragment, { children: [feedbackStatus && (jsx("div", { className: classNames(styles$5.feedbackStatus, feedbackStatus.variant === 'success'
50837
51174
  ? styles$5.feedbackStatusSuccess
50838
- : styles$5.feedbackStatusError), "aria-live": "polite", role: "status", children: feedbackStatus.message })), effectConfigs && effectConfigs.length > 0 && (jsx(ChatEffectsSystem, { messages: postprocessedMessages, effectConfigs: effectConfigs, soundSystem: soundSystem })), jsx("div", { className: classNames(className, styles$5.Chat, layout === 'STANDALONE' && styles$5.standaloneVisual, layout === 'FULL_PAGE' && styles$5.fullPageVisual, isConstrainedArticleMode && styles$5.constrainedArticleVisual, getChatCssClassName('Chat'), chatCssClassNames.chat), style, children: jsxs("div", { className: classNames(className, styles$5.chatMainFlow, getChatCssClassName('chatMainFlow'), chatCssClassNames.chatMainFlow), children: [children && jsx("div", { className: classNames(styles$5.chatChildren), children: children }), shouldShowScrollToBottom && (jsx("div", { className: styles$5.scrollToBottomContainer, children: jsxs("div", { className: styles$5.scrollToBottomWrapper, children: [jsx(SolidArrowButton, { "data-button-type": "custom", direction: "down", iconSize: 33, className: classNames(styles$5.scrollToBottom, scrollToBottomCssClassName), onClick: handleButtonClick(() => scrollToBottom()), "aria-label": ariaLabel, title: ariaLabel }), badgeLabel && (jsx("span", { className: styles$5.scrollToBottomBadge, "aria-live": "polite", role: "status", children: badgeLabel }))] }) })), isVoiceCalling && (jsx("div", { className: styles$5.voiceCallIndicatorBar, children: jsxs("div", { className: styles$5.voiceCallIndicator, children: [jsx("svg", { width: "16", height: "16", viewBox: "0 0 24 24", fill: "currentColor", children: jsx("path", { d: "M6.62 10.79c1.44 2.83 3.76 5.14 6.59 6.59l2.2-2.2c.27-.27.67-.36 1.02-.24 1.12.37 2.33.57 3.57.57.55 0 1 .45 1 1V20c0 .55-.45 1-1 1-9.39 0-17-7.61-17-17 0-.55.45-1 1-1h3.5c.55 0 1 .45 1 1 0 1.25.2 2.45.57 3.57.11.35.03.74-.25 1.02l-2.2 2.2z" }) }), jsx("span", { children: "Voice call active" }), jsx("div", { className: styles$5.voiceCallPulse })] }) })), jsx(ChatActionsBar, { actionsRef: actionsRef, actionsContainer: actionsContainer, messages: postprocessedMessages, participants: participants, title: title, onReset: onReset, resetRequiresConfirmation: resetRequiresConfirmation, newChatButtonHref: newChatButtonHref, onUseTemplate: onUseTemplate, extraActions: extraActions, saveFormats: saveFormats, isSaveButtonEnabled: isSaveButtonEnabled, shouldFadeActions: shouldFadeActions, shouldDisableActions: shouldDisableActions, chatUiTranslations: chatUiTranslations, onButtonClick: handleButtonClick }), jsx(ChatMessageList, { messages: postprocessedMessages, participants: participants, expandedMessageId: expandedMessageId, messageRatings: messageRatings, setExpandedMessageId: setExpandedMessageId, handleRating: handleRating, mode: mode, isCopyButtonEnabled: isCopyButtonEnabled, isFeedbackEnabled: isFeedbackEnabled, feedbackMode: feedbackMode, feedbackTranslations: feedbackTranslations, timingTranslations: timingTranslations, chatLocale: chatLocale, onCopy: handleCopy, onMessage: onMessage, onActionButton: onActionButton, onQuickMessageButton: onQuickMessageButton, onReplyToMessage: onReplyToMessage, canReplyToMessage: canReplyToMessage, onCreateAgent: onCreateAgent, toolTitles: toolTitles, teammates: teammates, teamAgentProfiles: teamAgentProfiles, visualMode: visualMode, soundSystem: soundSystem, onToolCallClick: openToolCall, onCitationClick: openCitation, setChatMessagesElement: setChatMessagesElement, onScroll: handleChatScroll, isSpeechPlaybackEnabled: isSpeechPlaybackEnabled, elevenLabsVoiceId: elevenLabsVoiceId, chatUiTranslations: chatUiTranslations, chatMessagesClassName: classNames(isConstrainedArticleMode && styles$5.articleModeChatMessages, getChatCssClassName('chatMessages'), chatCssClassNames.chatMessages), hasActions: hasActions }), onMessage && (jsx(ChatInputArea, { onMessage: onMessage, onChange: onChange, onFileUpload: onFileUpload, speechRecognition: speechRecognition, speechRecognitionLanguage: speechRecognitionLanguage, replyingToMessage: replyingToMessage, onCancelReply: onCancelReply, defaultMessage: defaultMessage, enterBehavior: enterBehavior, resolveEnterBehavior: resolveEnterBehavior, placeholderMessageContent: placeholderMessageContent || (chatUiTranslations === null || chatUiTranslations === void 0 ? void 0 : chatUiTranslations.inputPlaceholder), isFocusedOnLoad: isFocusedOnLoad, isMobile: isMobile, isVoiceCalling: isVoiceCalling, participants: participants, buttonColor: buttonColor, soundSystem: soundSystem, onButtonClick: handleButtonClick, chatUiTranslations: chatUiTranslations, chatInputClassName: classNames(isConstrainedArticleMode && styles$5.articleModeChatInput, getChatCssClassName('chatInput'), chatCssClassNames.chatInput) }))] }) }), jsx(ChatToolCallModal, { isOpen: toolCallModalOpen, toolCall: selectedToolCall, toolCallIdentity: selectedToolCallIdentity, onClose: closeToolCallModal, toolTitles: toolTitles, agentParticipant: agentParticipant, buttonColor: buttonColor, teamAgentProfiles: teamAgentProfiles, chatUiTranslations: chatUiTranslations, locale: chatLocale, availableTools: selectedMessageAvailableTools }), jsx(ChatCitationModal, { isOpen: citationModalOpen, citation: selectedCitation, participants: participants, soundSystem: soundSystem, onClose: closeCitationModal }), jsx(ChatRatingModal, { isOpen: ratingModalOpen, selectedMessage: selectedMessage, postprocessedMessages: postprocessedMessages, messages: messages, hoveredRating: hoveredRating, messageRatings: messageRatings, textRating: textRating, feedbackMode: feedbackMode, feedbackTranslations: feedbackTranslations, mode: mode, isMobile: isMobile, onClose: () => setRatingModalOpen(false), setHoveredRating: setHoveredRating, setMessageRatings: setMessageRatings, setSelectedMessage: setSelectedMessage, setTextRating: setTextRating, submitRating: submitRating })] }));
51175
+ : styles$5.feedbackStatusError), "aria-live": "polite", role: "status", children: feedbackStatus.message })), effectConfigs && effectConfigs.length > 0 && (jsx(ChatEffectsSystem, { messages: postprocessedMessages, effectConfigs: effectConfigs, soundSystem: soundSystem })), jsx("div", { className: classNames(className, styles$5.Chat, layout === 'STANDALONE' && styles$5.standaloneVisual, layout === 'FULL_PAGE' && styles$5.fullPageVisual, isConstrainedArticleMode && styles$5.constrainedArticleVisual, getChatCssClassName('Chat'), chatCssClassNames.chat), "data-chat-theme": mode.toLowerCase(), style, children: jsxs("div", { className: classNames(className, styles$5.chatMainFlow, getChatCssClassName('chatMainFlow'), chatCssClassNames.chatMainFlow), children: [children && jsx("div", { className: classNames(styles$5.chatChildren), children: children }), shouldShowScrollToBottom && (jsx("div", { className: styles$5.scrollToBottomContainer, children: jsxs("div", { className: styles$5.scrollToBottomWrapper, children: [jsx(SolidArrowButton, { "data-button-type": "custom", direction: "down", iconSize: 33, className: classNames(styles$5.scrollToBottom, scrollToBottomCssClassName), onClick: handleButtonClick(() => scrollToBottom()), "aria-label": ariaLabel, title: ariaLabel }), badgeLabel && (jsx("span", { className: styles$5.scrollToBottomBadge, "aria-live": "polite", role: "status", children: badgeLabel }))] }) })), isVoiceCalling && (jsx("div", { className: styles$5.voiceCallIndicatorBar, children: jsxs("div", { className: styles$5.voiceCallIndicator, children: [jsx("svg", { width: "16", height: "16", viewBox: "0 0 24 24", fill: "currentColor", children: jsx("path", { d: "M6.62 10.79c1.44 2.83 3.76 5.14 6.59 6.59l2.2-2.2c.27-.27.67-.36 1.02-.24 1.12.37 2.33.57 3.57.57.55 0 1 .45 1 1V20c0 .55-.45 1-1 1-9.39 0-17-7.61-17-17 0-.55.45-1 1-1h3.5c.55 0 1 .45 1 1 0 1.25.2 2.45.57 3.57.11.35.03.74-.25 1.02l-2.2 2.2z" }) }), jsx("span", { children: "Voice call active" }), jsx("div", { className: styles$5.voiceCallPulse })] }) })), jsx(ChatActionsBar, { actionsRef: actionsRef, actionsContainer: actionsContainer, messages: postprocessedMessages, participants: participants, title: title, onReset: onReset, resetRequiresConfirmation: resetRequiresConfirmation, newChatButtonHref: newChatButtonHref, onUseTemplate: onUseTemplate, extraActions: extraActions, saveFormats: saveFormats, isSaveButtonEnabled: isSaveButtonEnabled, shouldFadeActions: shouldFadeActions, shouldDisableActions: shouldDisableActions, chatUiTranslations: chatUiTranslations, onButtonClick: handleButtonClick }), jsx(ChatMessageList, { messages: postprocessedMessages, participants: participants, expandedMessageId: expandedMessageId, messageRatings: messageRatings, setExpandedMessageId: setExpandedMessageId, handleRating: handleRating, mode: mode, isCopyButtonEnabled: isCopyButtonEnabled, isFeedbackEnabled: isFeedbackEnabled, feedbackMode: feedbackMode, feedbackTranslations: feedbackTranslations, timingTranslations: timingTranslations, chatLocale: chatLocale, onCopy: handleCopy, onMessage: onMessage, onActionButton: onActionButton, onQuickMessageButton: onQuickMessageButton, onReplyToMessage: onReplyToMessage, canReplyToMessage: canReplyToMessage, onCreateAgent: onCreateAgent, toolTitles: toolTitles, teammates: teammates, teamAgentProfiles: teamAgentProfiles, visualMode: visualMode, soundSystem: soundSystem, onToolCallClick: openToolCall, onCitationClick: openCitation, setChatMessagesElement: setChatMessagesElement, onScroll: handleChatScroll, isSpeechPlaybackEnabled: isSpeechPlaybackEnabled, elevenLabsVoiceId: elevenLabsVoiceId, chatUiTranslations: chatUiTranslations, chatMessagesClassName: classNames(isConstrainedArticleMode && styles$5.articleModeChatMessages, getChatCssClassName('chatMessages'), chatCssClassNames.chatMessages), hasActions: hasActions }), onMessage && (jsx(ChatInputArea, { onMessage: onMessage, onChange: onChange, onFileUpload: onFileUpload, speechRecognition: speechRecognition, speechRecognitionLanguage: speechRecognitionLanguage, replyingToMessage: replyingToMessage, onCancelReply: onCancelReply, defaultMessage: defaultMessage, enterBehavior: enterBehavior, resolveEnterBehavior: resolveEnterBehavior, placeholderMessageContent: placeholderMessageContent || (chatUiTranslations === null || chatUiTranslations === void 0 ? void 0 : chatUiTranslations.inputPlaceholder), isFocusedOnLoad: isFocusedOnLoad, isMobile: isMobile, isVoiceCalling: isVoiceCalling, participants: participants, buttonColor: buttonColor, soundSystem: soundSystem, onButtonClick: handleButtonClick, chatUiTranslations: chatUiTranslations, chatInputClassName: classNames(isConstrainedArticleMode && styles$5.articleModeChatInput, getChatCssClassName('chatInput'), chatCssClassNames.chatInput) }))] }) }), jsx(ChatToolCallModal, { isOpen: toolCallModalOpen, toolCall: selectedToolCall, toolCallIdentity: selectedToolCallIdentity, onClose: closeToolCallModal, toolTitles: toolTitles, agentParticipant: agentParticipant, buttonColor: buttonColor, teamAgentProfiles: teamAgentProfiles, chatUiTranslations: chatUiTranslations, locale: chatLocale, availableTools: selectedMessageAvailableTools, mode: mode }), jsx(ChatCitationModal, { isOpen: citationModalOpen, citation: selectedCitation, participants: participants, soundSystem: soundSystem, onClose: closeCitationModal }), jsx(ChatRatingModal, { isOpen: ratingModalOpen, selectedMessage: selectedMessage, postprocessedMessages: postprocessedMessages, messages: messages, hoveredRating: hoveredRating, messageRatings: messageRatings, textRating: textRating, feedbackMode: feedbackMode, feedbackTranslations: feedbackTranslations, mode: mode, isMobile: isMobile, onClose: () => setRatingModalOpen(false), setHoveredRating: setHoveredRating, setMessageRatings: setMessageRatings, setSelectedMessage: setSelectedMessage, setTextRating: setTextRating, submitRating: submitRating })] }));
50839
51176
  }
50840
51177
 
50841
51178
  /**