@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.
- package/esm/index.es.js +491 -154
- package/esm/index.es.js.map +1 -1
- package/esm/src/avatars/visuals/octopus3AvatarVisual.d.ts +72 -0
- package/esm/src/avatars/visuals/octopus3AvatarVisual.test.d.ts +1 -0
- package/esm/src/avatars/visuals/octopusAvatarVisualShared.d.ts +16 -0
- package/esm/src/book-components/BookEditor/BookEditor.d.ts +9 -0
- package/esm/src/book-components/BookEditor/useBookEditorMonacoLanguage.d.ts +10 -2
- package/esm/src/book-components/BookEditor/useBookEditorMonacoStyles.d.ts +2 -1
- package/esm/src/book-components/Chat/Chat/ChatMessageRichContent.d.ts +4 -0
- package/esm/src/book-components/Chat/Chat/ChatProps.d.ts +9 -0
- package/esm/src/book-components/Chat/Chat/ChatToolCallModal.d.ts +1 -0
- package/esm/src/book-components/Chat/Chat/ChatToolCallModalContent.d.ts +2 -1
- package/esm/src/book-components/Chat/Chat/renderAdvancedToolCallDetails.d.ts +4 -0
- package/esm/src/book-components/Chat/CodeBlock/CodeBlock.d.ts +2 -1
- package/esm/src/speech-recognition/OpenAiSpeechRecognition.d.ts +24 -2
- package/esm/src/speech-recognition/OpenAiSpeechRecognition.test.d.ts +1 -0
- package/esm/src/types/SpeechRecognition.d.ts +4 -0
- package/esm/src/version.d.ts +1 -1
- package/package.json +1 -1
- package/umd/index.umd.js +491 -154
- package/umd/index.umd.js.map +1 -1
- package/umd/src/avatars/visuals/octopus3AvatarVisual.d.ts +72 -0
- package/umd/src/avatars/visuals/octopus3AvatarVisual.test.d.ts +1 -0
- package/umd/src/avatars/visuals/octopusAvatarVisualShared.d.ts +16 -0
- package/umd/src/book-components/BookEditor/BookEditor.d.ts +9 -0
- package/umd/src/book-components/BookEditor/useBookEditorMonacoLanguage.d.ts +10 -2
- package/umd/src/book-components/BookEditor/useBookEditorMonacoStyles.d.ts +2 -1
- package/umd/src/book-components/Chat/Chat/ChatMessageRichContent.d.ts +4 -0
- package/umd/src/book-components/Chat/Chat/ChatProps.d.ts +9 -0
- package/umd/src/book-components/Chat/Chat/ChatToolCallModal.d.ts +1 -0
- package/umd/src/book-components/Chat/Chat/ChatToolCallModalContent.d.ts +2 -1
- package/umd/src/book-components/Chat/Chat/renderAdvancedToolCallDetails.d.ts +4 -0
- package/umd/src/book-components/Chat/CodeBlock/CodeBlock.d.ts +2 -1
- package/umd/src/speech-recognition/OpenAiSpeechRecognition.d.ts +24 -2
- package/umd/src/speech-recognition/OpenAiSpeechRecognition.test.d.ts +1 -0
- package/umd/src/types/SpeechRecognition.d.ts +4 -0
- 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-
|
|
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","
|
|
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 #
|
|
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:
|
|
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
|
|
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, ${
|
|
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: ${
|
|
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
|
-
${
|
|
20835
|
-
${
|
|
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:
|
|
20846
|
-
border-left: 1px solid ${
|
|
20847
|
-
border-right: 1px solid ${
|
|
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 ${
|
|
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 ${
|
|
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
|
-
|
|
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
|
-
|
|
26491
|
-
const
|
|
26492
|
-
const
|
|
26493
|
-
const
|
|
26494
|
-
const
|
|
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:
|
|
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 +
|
|
26563
|
+
x: centerX + spreadCenteredProgress * bodyRadius * horizontalStretch * 1.52,
|
|
26507
26564
|
y: baseY + startYOffset,
|
|
26508
26565
|
};
|
|
26509
26566
|
const controlPointOne = {
|
|
26510
|
-
x: startPoint.x +
|
|
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(
|
|
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
|
|
28193
|
-
const
|
|
28194
|
-
const
|
|
28195
|
-
const
|
|
28196
|
-
const
|
|
28197
|
-
const
|
|
28198
|
-
const
|
|
28199
|
-
const
|
|
28200
|
-
const
|
|
28201
|
-
const
|
|
28202
|
-
const
|
|
28203
|
-
const
|
|
28204
|
-
const
|
|
28205
|
-
const
|
|
28206
|
-
const
|
|
28207
|
-
const
|
|
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:
|
|
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 *
|
|
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
|
|
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,
|
|
28281
|
-
drawSeededEye(context, centerX + eyeSpacing,
|
|
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 -
|
|
28284
|
-
context.quadraticCurveTo(centerX
|
|
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.
|
|
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.
|
|
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
|
-
|
|
28425
|
-
|
|
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.
|
|
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.
|
|
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.
|
|
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 <
|
|
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.
|
|
28452
|
-
const nodeY = centerY -
|
|
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 *
|
|
28519
|
-
context.quadraticCurveTo(0, -radiusY * (
|
|
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 ?
|
|
47294
|
-
'--message-text-color': isAgentArticleMode
|
|
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:
|
|
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 =
|
|
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
|
/**
|