@next-bricks/visual-builder 1.11.0 → 1.11.1
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/dist/bricks.json +8 -8
- package/dist/chunks/2154.ac02446d.js +3 -0
- package/dist/chunks/2154.ac02446d.js.map +1 -0
- package/dist/chunks/chat-conversation.16169845.js +2 -0
- package/dist/chunks/chat-conversation.16169845.js.map +1 -0
- package/dist/chunks/{main.706321b2.js → main.14f3a0da.js} +2 -2
- package/dist/chunks/{main.706321b2.js.map → main.14f3a0da.js.map} +1 -1
- package/dist/examples.json +1 -1
- package/dist/{index.9573b911.js → index.fc5deba5.js} +2 -2
- package/dist/{index.9573b911.js.map → index.fc5deba5.js.map} +1 -1
- package/dist/manifest.json +61 -61
- package/docs/chat-conversation.md +28 -3
- package/package.json +2 -2
- package/dist/chunks/2154.6e2bf1c1.js +0 -3
- package/dist/chunks/2154.6e2bf1c1.js.map +0 -1
- package/dist/chunks/chat-conversation.f6d76e95.js +0 -2
- package/dist/chunks/chat-conversation.f6d76e95.js.map +0 -1
- /package/dist/chunks/{2154.6e2bf1c1.js.LICENSE.txt → 2154.ac02446d.js.LICENSE.txt} +0 -0
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"chunks/chat-conversation.f6d76e95.js","mappings":"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","sources":["webpack:///./src/chat-conversation/MessageComponent.tsx","webpack:///./src/chat-conversation/index.tsx","webpack:///./src/chat-conversation/styles.shadow.css","webpack:///../../shared/markdown/dist/esm/prism-tomorrow.css","webpack:///../../node_modules/@babel/runtime/helpers/esm/defineProperty.js","webpack:///../../node_modules/@babel/runtime/helpers/esm/objectSpread2.js","webpack:///../../node_modules/@babel/runtime/helpers/esm/toPropertyKey.js","webpack:///../../node_modules/@babel/runtime/helpers/esm/toPrimitive.js","webpack:///../../node_modules/@babel/runtime/helpers/esm/typeof.js","webpack:///../../src/MarkdownComponent.tsx","webpack:///../../src/rehypePrism.ts"],"sourcesContent":["import React, { useEffect, useMemo, useRef } from \"react\";\nimport classNames from \"classnames\";\nimport { MarkdownComponent } from \"@next-shared/markdown\";\nimport { wrapBrick } from \"@next-core/react-element\";\nimport type { AvatarProps, EoAvatar } from \"@next-bricks/basic/avatar\";\nimport type { Message } from \"./index\";\n\nconst WrappedAvatar = wrapBrick<EoAvatar, AvatarProps>(\"eo-avatar\");\n\nexport interface MessageComponentProps {\n message: Message;\n}\n\ntype MessageChunk = MessageChunkText | MessageChunkCommand;\n\ninterface MessageChunkText {\n type: \"text\";\n content: string;\n}\n\ninterface MessageChunkCommand {\n type: \"command\";\n command: string;\n content: string;\n raw: string;\n}\n\nexport function MessageComponent({ message }: MessageComponentProps) {\n const messageChunks = useMemo(() => {\n const chunks: MessageChunk[] = [];\n const chunkRegExp = /(?:^|\\n)```(easy_cmd_\\S+)\\n([\\s\\S]*?)\\n```(?:$|\\n)/gm;\n\n let match: RegExpExecArray | null;\n let lastIndex = 0;\n while ((match = chunkRegExp.exec(message.content))) {\n const [fullMatch, command, content] = match;\n const start = match.index;\n const previousText = message.content.slice(lastIndex, start).trim();\n if (previousText.length > 0) {\n chunks.push({\n type: \"text\",\n content: previousText,\n });\n }\n chunks.push({\n type: \"command\",\n command,\n content: content.trim(),\n raw: fullMatch,\n });\n lastIndex = chunkRegExp.lastIndex;\n }\n const lastText = message.content.slice(lastIndex).trim();\n if (lastText.length > 0) {\n chunks.push({\n type: \"text\",\n content: lastText,\n });\n }\n return chunks;\n }, [message.content]);\n\n const contentRef = useRef<HTMLDivElement>(null);\n useEffect(() => {\n const contentElement = contentRef.current;\n if (!contentElement) {\n return;\n }\n setTimeout(() => {\n const textingElements =\n contentElement.parentElement.querySelectorAll(\".texting\");\n for (const element of textingElements) {\n element.classList.remove(\"texting\");\n }\n if (!message.partial) {\n return;\n }\n // Find the last text element descendant of the message element,\n // and apply a texting effect to it.\n let current = contentElement as HTMLElement;\n while (current) {\n const lastChild = current.lastChild;\n if (\n lastChild?.nodeType === Node.ELEMENT_NODE &&\n ((lastChild as HTMLElement)?.tagName !== \"DETAILS\" ||\n (lastChild as HTMLDetailsElement).open)\n ) {\n current = lastChild as HTMLElement;\n } else {\n // Handle a special case: the last child is a text node without any\n // non-whitespace content. In such case, we should apply the texting\n // effect to the previous sibling element.\n if (\n lastChild?.nodeType === Node.TEXT_NODE &&\n lastChild.textContent.trim().length === 0 &&\n lastChild.previousSibling?.nodeType === Node.ELEMENT_NODE\n ) {\n current = lastChild.previousSibling as HTMLElement;\n } else {\n break;\n }\n }\n }\n current.classList.add(\"texting\");\n }, 1);\n }, [message.partial, message.content]);\n\n return (\n <div className={classNames(\"message\", { failed: message.failed })}>\n <div className=\"avatar\">\n <WrappedAvatar\n icon={{\n lib: \"easyops\",\n icon: message.role === \"assistant\" ? \"robot\" : \"account\",\n }}\n size=\"small\"\n className={`role-${message.role}`}\n />\n </div>\n <div className=\"main\">\n <div className=\"label\">\n {message.role === \"assistant\" ? \"Assistant\" : \"You\"}\n </div>\n <div className=\"content\" ref={contentRef}>\n {messageChunks.map((chunk, index) => (\n <MessageChunkComponent key={index} chunk={chunk} />\n ))}\n </div>\n </div>\n </div>\n );\n}\n\nfunction MessageChunkComponent({ chunk }: { chunk: MessageChunk }) {\n return (\n <>\n {chunk.type === \"text\" ? (\n <div className=\"markdown\">\n <MarkdownComponent content={chunk.content} />\n </div>\n ) : (\n <>\n <details className=\"command\">\n <summary>```{chunk.command}</summary>\n <pre>\n <code>{chunk.content}</code>\n </pre>\n </details>\n </>\n )}\n </>\n );\n}\n","import React, { useEffect, useMemo, useRef, useState } from \"react\";\nimport { createDecorators, type EventEmitter } from \"@next-core/element\";\nimport { ReactNextElement } from \"@next-core/react-element\";\nimport \"@next-core/theme\";\nimport type { BrickConf } from \"@next-core/types\";\nimport { MessageComponent } from \"./MessageComponent\";\nimport styleText from \"./styles.shadow.css\";\n\nconst { defineElement, property, event } = createDecorators();\n\nexport interface Message {\n role: \"user\" | \"assistant\";\n content: string;\n key: number;\n partial?: boolean;\n failed?: boolean;\n}\n\nexport interface ChatConversationProps {\n messages?: Message[];\n}\n\ntype StoryboardChunk = StoryboardChunkBlock | StoryboardChunkBlockItem;\n\ninterface StoryboardChunkBlock {\n type: \"block\";\n uuid: string;\n children: string[];\n name: string;\n seq: number;\n hasContainer?: boolean;\n}\n\ninterface StoryboardChunkBlockItem {\n type: \"item\";\n uuid: string;\n storyboard?: BrickConf;\n}\n\n/**\n * 用于 Visual Builder 的智能聊天对话列表\n */\nexport\n@defineElement(\"visual-builder.chat-conversation\", {\n styleTexts: [styleText],\n})\nclass ChatConversation\n extends ReactNextElement\n implements ChatConversationProps\n{\n @property({ attribute: false })\n accessor messages: Message[] | undefined;\n\n @event({ type: \"storyboard.update\" })\n accessor #storyboardUpdate!: EventEmitter<BrickConf[]>;\n\n #handleStoryboardUpdate = (storyboard: BrickConf[]) => {\n this.#storyboardUpdate.emit(storyboard);\n };\n\n render() {\n return (\n <ChatConversationComponent\n host={this}\n messages={this.messages}\n onStoryboardUpdate={this.#handleStoryboardUpdate}\n />\n );\n }\n}\n\nexport interface ChatConversationComponentProps extends ChatConversationProps {\n host: Element;\n onStoryboardUpdate?: (storyboard: BrickConf[]) => void;\n}\n\nexport function ChatConversationComponent({\n messages,\n host,\n onStoryboardUpdate,\n}: ChatConversationComponentProps) {\n const chunkRegExp = useMemo(\n () =>\n /(?:^|\\n)```easy_cmd_vb_block_(page|storyboard)\\n([\\s\\S]*?)\\n```(?:$|\\n)/gm,\n []\n );\n const lastIndexMapRef = useRef(new Map<number, number>());\n const [chunks, setChunks] = useState<StoryboardChunk[]>([]);\n const manualScrolledRef = useRef(false);\n\n useEffect(() => {\n for (const message of messages ?? []) {\n if (message.role !== \"assistant\") {\n continue;\n }\n chunkRegExp.lastIndex = lastIndexMapRef.current.get(message.key) ?? 0;\n let match: RegExpExecArray | null;\n const newChunks: StoryboardChunk[] = [];\n let newPage = false;\n while ((match = chunkRegExp.exec(message.content))) {\n lastIndexMapRef.current.set(message.key, chunkRegExp.lastIndex);\n const [, type, content] = match;\n try {\n const parsed = JSON.parse(content) as unknown;\n if (type === \"page\") {\n newPage = true;\n newChunks.push(\n ...(parsed as (StoryboardChunkBlock | StoryboardChunkBlockItem)[])\n );\n } else {\n newChunks.push({\n ...(parsed as StoryboardChunkBlockItem),\n type: \"item\",\n });\n }\n } catch (e) {\n // eslint-disable-next-line no-console\n console.error(\"parse storyboard failed:\", e);\n }\n }\n if (newPage) {\n setChunks(newChunks);\n } else if (newChunks.length > 0) {\n setChunks((prev) => [...prev, ...newChunks]);\n }\n }\n }, [chunkRegExp, messages]);\n\n const [storyboard, setStoryboard] = useState<BrickConf[]>([]);\n\n useEffect(() => {\n const blocks = [];\n const storyboardMap = new Map<string, BrickConf>();\n for (const chunk of chunks) {\n if (chunk.type === \"block\") {\n blocks.push(chunk);\n } else if (chunk.storyboard) {\n storyboardMap.set(chunk.uuid, chunk.storyboard);\n }\n }\n\n // Sort by seq ascent\n blocks.sort((a, b) => a.seq - b.seq);\n\n const contentLayout: BrickConf = {\n brick: \"eo-content-layout\",\n children: [],\n };\n const main: BrickConf = {\n brick: \"eo-main-view\",\n children: [\n {\n brick: \"eo-page-title\",\n slot: \"pageTitle\",\n properties: {\n pageTitle: \"测试页面\",\n },\n },\n ],\n };\n\n let hasContent = false;\n for (const block of blocks) {\n // No container\n if (block.name === \"全局操作区\") {\n for (const child of block.children) {\n const childBrick = storyboardMap.get(child);\n if (childBrick) {\n main.children.push({\n ...childBrick,\n properties: {\n ...childBrick.properties,\n slot: undefined,\n },\n slot: \"toolbar\",\n iid: `item:${child}`,\n meta: {\n type: \"item\",\n uuid: child,\n block: {\n uuid: block.uuid,\n name: block.name,\n },\n },\n } as BrickConf);\n hasContent = true;\n }\n }\n } else {\n const rawBrick = storyboardMap.get(block.uuid);\n if (rawBrick) {\n const brick: BrickConf = {\n ...rawBrick,\n children: [],\n iid: `block:${block.uuid}`,\n meta: {\n type: \"block\",\n uuid: block.uuid,\n name: block.name,\n },\n } as BrickConf;\n hasContent = true;\n contentLayout.children.push(brick);\n for (const child of block.children) {\n const childBrick = storyboardMap.get(child);\n if (childBrick) {\n brick.children.push({\n ...childBrick,\n iid: `item:${child}`,\n meta: {\n type: \"item\",\n uuid: child,\n },\n } as BrickConf);\n }\n }\n } else if (!block.hasContainer) {\n for (const child of block.children) {\n const childBrick = storyboardMap.get(child);\n if (childBrick) {\n contentLayout.children.push({\n ...childBrick,\n iid: `item:${child}`,\n meta: {\n type: \"item\",\n uuid: child,\n },\n } as BrickConf);\n hasContent = true;\n }\n }\n }\n }\n }\n\n main.children.push(contentLayout);\n\n setStoryboard((prev) =>\n hasContent ? [main] : prev.length === 0 ? prev : []\n );\n }, [chunks]);\n\n useEffect(() => {\n onStoryboardUpdate?.(storyboard);\n }, [onStoryboardUpdate, storyboard]);\n\n const verticalScrollParent = useMemo(() => {\n // Lookup the nearest scrollable parent (on axis y)\n let current = host;\n while (current) {\n const overflowY = getComputedStyle(current, null).getPropertyValue(\n \"overflow-y\"\n );\n if (overflowY === \"auto\" || overflowY === \"scroll\") {\n return current;\n }\n if (current.parentNode instanceof ShadowRoot) {\n current = current.parentNode.host;\n } else if (current.parentNode instanceof Element) {\n current = current.parentNode;\n } else {\n break;\n }\n }\n return document.scrollingElement || document.documentElement;\n }, [host]);\n\n useEffect(() => {\n if (manualScrolledRef.current) {\n return;\n }\n setTimeout(() => {\n // eslint-disable-next-line @typescript-eslint/no-non-null-asserted-optional-chain\n verticalScrollParent.scrollTo(0, verticalScrollParent.scrollHeight!);\n }, 1);\n }, [messages, verticalScrollParent]);\n\n useEffect(() => {\n const handleScroll = () => {\n manualScrolledRef.current =\n verticalScrollParent.scrollTop +\n verticalScrollParent.clientHeight! +\n 6 <\n verticalScrollParent.scrollHeight;\n };\n verticalScrollParent.addEventListener(\"scroll\", handleScroll);\n return () => {\n verticalScrollParent.removeEventListener(\"scroll\", handleScroll);\n };\n }, [verticalScrollParent]);\n\n return (\n <>\n {messages?.map((message, index) => (\n <MessageComponent\n key={message.key ?? `index-${index}`}\n message={message}\n />\n ))}\n </>\n );\n}\n","// Imports\nimport ___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/noSourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nimport ___CSS_LOADER_AT_RULE_IMPORT_0___ from \"-!../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].use[0]!../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[1].use[1]!../../../../shared/markdown/dist/esm/prism-tomorrow.css\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___);\n___CSS_LOADER_EXPORT___.i(___CSS_LOADER_AT_RULE_IMPORT_0___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `:host{display:block}:host([hidden]){display:none}*{box-sizing:border-box}.message{display:flex;gap:8px}.main{flex:1;min-width:0}.label{font-weight:bold;line-height:28px}.message:not(:last-child){margin-bottom:2em}.invisible-dots{opacity:0}.failed .content{color:var(--color-error)}.command:not(:first-child){margin-top:1em}.command:not(:last-child){margin-bottom:1em}pre{white-space:pre-wrap;background-color:var(--palette-gray-3);border-radius:6px;padding:1em}.markdown > :first-child{margin-top:0}.markdown > :last-child{margin-bottom:0}.avatar{align-self:flex-start;display:flex;align-items:center;justify-content:center}.texting::after{content:\" \";animation:texting 2s infinite;white-space:pre}@keyframes texting{0%{content:\" \"}25%{content:\". \"}50%{content:\".. \"}75%{content:\"...\"}100%{content:\" \"}}pre[class*=\"language-\"]{overflow:visible}pre[class*=\"language-\"],\ncode[class*=\"language-\"]{white-space:pre-wrap}eo-avatar.role-assistant::part(avatar-icon){background-color:var(--palette-blue-5)}`, \"\"]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___.toString();\n","// Imports\nimport ___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/noSourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nimport ___CSS_LOADER_AT_RULE_IMPORT_0___ from \"-!../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].use[0]!../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[1].use[1]!../../../../node_modules/prismjs/themes/prism-tomorrow.css\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___);\n___CSS_LOADER_EXPORT___.i(___CSS_LOADER_AT_RULE_IMPORT_0___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, ``, \"\"]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___.toString();\n","import toPropertyKey from \"./toPropertyKey.js\";\nexport default function _defineProperty(obj, key, value) {\n key = toPropertyKey(key);\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n return obj;\n}","import defineProperty from \"./defineProperty.js\";\nfunction ownKeys(e, r) {\n var t = Object.keys(e);\n if (Object.getOwnPropertySymbols) {\n var o = Object.getOwnPropertySymbols(e);\n r && (o = o.filter(function (r) {\n return Object.getOwnPropertyDescriptor(e, r).enumerable;\n })), t.push.apply(t, o);\n }\n return t;\n}\nexport default function _objectSpread2(e) {\n for (var r = 1; r < arguments.length; r++) {\n var t = null != arguments[r] ? arguments[r] : {};\n r % 2 ? ownKeys(Object(t), !0).forEach(function (r) {\n defineProperty(e, r, t[r]);\n }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) {\n Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r));\n });\n }\n return e;\n}","import _typeof from \"./typeof.js\";\nimport toPrimitive from \"./toPrimitive.js\";\nexport default function toPropertyKey(t) {\n var i = toPrimitive(t, \"string\");\n return \"symbol\" == _typeof(i) ? i : i + \"\";\n}","import _typeof from \"./typeof.js\";\nexport default function toPrimitive(t, r) {\n if (\"object\" != _typeof(t) || !t) return t;\n var e = t[Symbol.toPrimitive];\n if (void 0 !== e) {\n var i = e.call(t, r || \"default\");\n if (\"object\" != _typeof(i)) return i;\n throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n }\n return (\"string\" === r ? String : Number)(t);\n}","export default function _typeof(o) {\n \"@babel/helpers - typeof\";\n\n return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) {\n return typeof o;\n } : function (o) {\n return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o;\n }, _typeof(o);\n}","import { useEffect, useState } from \"react\";\nimport { Fragment, jsx, jsxs } from \"react/jsx-runtime\";\nimport { unified } from \"unified\";\nimport remarkParse from \"remark-parse\";\nimport remarkToRehype from \"remark-rehype\";\nimport rehypeReact, { Options as RehypeReactOptions } from \"rehype-react\";\nimport { rehypePrism } from \"./rehypePrism.js\";\n\nconst production = { Fragment, jsx, jsxs };\n\nexport interface MarkdownComponentProps {\n content: string;\n}\n\n// Reference https://github.com/remarkjs/react-remark/blob/39553e5f5c9e9b903bebf261788ff45130668de0/src/index.ts\nexport function MarkdownComponent({ content }: MarkdownComponentProps) {\n const [reactContent, setReactContent] = useState<JSX.Element | null>(null);\n\n useEffect(() => {\n let ignore = false;\n unified()\n .use(remarkParse)\n .use(remarkToRehype)\n .use([rehypePrism])\n .use(rehypeReact, production as RehypeReactOptions)\n .process(content)\n .then((vFile) => {\n if (!ignore) {\n setReactContent(vFile.result);\n }\n })\n .catch((error) => {\n if (!ignore) {\n // eslint-disable-next-line no-console\n console.error(\"Convert markdown failed:\", error);\n setReactContent(null);\n }\n });\n return () => {\n ignore = true;\n };\n }, [content]);\n\n return reactContent;\n}\n","import { visit } from \"unist-util-visit\";\nimport { toString } from \"hast-util-to-string\";\nimport { refractor, type RefractorElement } from \"refractor\";\n\n// Reference https://github.com/mapbox/rehype-prism\nexport function rehypePrism() {\n function visitor(\n node: RefractorElement,\n _index: number | undefined,\n parent: RefractorElement | undefined\n ) {\n if (!parent || parent.tagName !== \"pre\" || node.tagName !== \"code\") {\n return;\n }\n\n const lang = getLanguage(node);\n\n if (lang === null) {\n return;\n }\n\n let result;\n try {\n parent.properties.className = (\n (parent.properties.className as string[]) || []\n ).concat(\"language-\" + lang);\n result = refractor.highlight(toString(node), lang);\n } catch {\n return;\n }\n\n node.children = result.children;\n }\n return (tree: RefractorElement) => {\n visit(tree, \"element\", visitor);\n };\n}\n\nfunction getLanguage(node: RefractorElement) {\n const className = (node.properties.className as string[]) || [];\n\n for (const classListItem of className) {\n if (classListItem.slice(0, 9) === \"language-\") {\n return classListItem.slice(9).toLowerCase();\n }\n }\n\n return null;\n}\n"],"names":["WrappedAvatar","wrapBrick","MessageComponent","_ref","message","messageChunks","useMemo","match","chunks","chunkRegExp","lastIndex","exec","content","fullMatch","command","start","index","previousText","slice","trim","length","push","type","raw","lastText","contentRef","useRef","useEffect","contentElement","current","setTimeout","textingElements","parentElement","querySelectorAll","element","classList","remove","partial","lastChild","nodeType","Node","ELEMENT_NODE","tagName","open","_lastChild$previousSi","TEXT_NODE","textContent","previousSibling","add","React","className","classNames","failed","icon","lib","role","size","concat","ref","map","chunk","MessageChunkComponent","key","_ref2","MarkdownComponent","_ChatConversation","defineElement","property","event","createDecorators","_A","WeakMap","_B","_ChatConversation_brand","WeakSet","_handleStoryboardUpdate","ChatConversation","ReactNextElement","constructor","arguments","_classPrivateMethodInitSpec","_classPrivateFieldInitSpec","_init_messages","_init_extra_messages","_init_storyboardUpdate","_init_extra_storyboardUpdate","storyboard","_classPrivateGetter","this","_get_storyboardUpdate","emit","messages","_classPrivateFieldGet","v","_classPrivateFieldSet","render","ChatConversationComponent","host","onStoryboardUpdate","lastIndexMapRef","Map","setChunks","useState","manualScrolledRef","_loop","_lastIndexMapRef$curr","get","newChunks","newPage","set","parsed","JSON","parse","_objectSpread","e","console","error","prev","setStoryboard","blocks","storyboardMap","uuid","sort","a","b","seq","contentLayout","brick","children","main","slot","properties","pageTitle","hasContent","block","name","child","childBrick","undefined","iid","meta","rawBrick","hasContainer","verticalScrollParent","overflowY","getComputedStyle","getPropertyValue","parentNode","ShadowRoot","Element","document","scrollingElement","documentElement","scrollTo","scrollHeight","handleScroll","scrollTop","clientHeight","addEventListener","removeEventListener","_message$key","_ChatConversation2","_set_storyboardUpdate","c","_initClass","_applyDecs","styleTexts","styleText","attribute","o","_","has","_checkInRHS","___CSS_LOADER_EXPORT___","i","module","id","toString","_defineProperty","obj","value","Object","defineProperty","enumerable","configurable","writable","ownKeys","r","t","keys","getOwnPropertySymbols","filter","getOwnPropertyDescriptor","apply","_objectSpread2","forEach","getOwnPropertyDescriptors","defineProperties","toPropertyKey","Symbol","toPrimitive","call","TypeError","String","_typeof","iterator","prototype","production","Fragment","jsx","jsxs","reactContent","setReactContent","ignore","unified","use","remarkParse","remarkToRehype","rehypePrism","rehypeReact","process","then","vFile","result","catch","visitor","node","_index","parent","lang","classListItem","toLowerCase","getLanguage","refractor","highlight","_unused","tree","visit"],"sourceRoot":""}
|
|
File without changes
|