{"version":3,"file":"814.869fa0ef.js","sources":["webpack://@anywidget/monorepo/./packages/anywidget/src/plugin.js","webpack://@anywidget/monorepo/./packages/anywidget/src/widget.js?7366"],"sourcesContent":["import * as base from \"@jupyter-widgets/base\";\nimport create from \"./widget.js\";\n\n/**\n * @typedef JupyterLabRegistry\n * @property {(widget: { name: string, version: string, exports: any }) => void} registerWidget\n */\n\nexport default {\n\tid: \"anywidget:plugin\",\n\trequires: [base.IJupyterWidgetRegistry],\n\tactivate: (\n\t\t/** @type {unknown} */ _app,\n\t\t/** @type {JupyterLabRegistry} */ registry,\n\t) => {\n\t\tlet exports = create(base);\n\t\tregistry.registerWidget({\n\t\t\tname: \"anywidget\",\n\t\t\t// @ts-expect-error Added by bundler\n\t\t\tversion: globalThis.VERSION,\n\t\t\texports,\n\t\t});\n\t},\n\tautoStart: true,\n};\n","import * as uuid from \"@lukeed/uuid\";\nimport * as solid from \"solid-js\";\n\n/**\n * @typedef AnyWidget\n * @prop initialize {import(\"@anywidget/types\").Initialize}\n * @prop render {import(\"@anywidget/types\").Render}\n */\n\n/**\n * @typedef AnyWidgetModule\n * @prop render {import(\"@anywidget/types\").Render=}\n * @prop default {AnyWidget | (() => AnyWidget | Promise)=}\n */\n\n/**\n * @param {any} condition\n * @param {string} message\n * @returns {asserts condition}\n */\nfunction assert(condition, message) {\n\tif (!condition) throw new Error(message);\n}\n\n/**\n * @param {string} str\n * @returns {str is \"https://${string}\" | \"http://${string}\"}\n */\nfunction is_href(str) {\n\treturn str.startsWith(\"http://\") || str.startsWith(\"https://\");\n}\n\n/**\n * @param {string} href\n * @param {string} anywidget_id\n * @returns {Promise}\n */\nasync function load_css_href(href, anywidget_id) {\n\t/** @type {HTMLLinkElement | null} */\n\tlet prev = document.querySelector(`link[id='${anywidget_id}']`);\n\n\t// Adapted from https://github.com/vitejs/vite/blob/d59e1acc2efc0307488364e9f2fad528ec57f204/packages/vite/src/client/client.ts#L185-L201\n\t// Swaps out old styles with new, but avoids flash of unstyled content.\n\t// No need to await the load since we already have styles applied.\n\tif (prev) {\n\t\tlet newLink = /** @type {HTMLLinkElement} */ (prev.cloneNode());\n\t\tnewLink.href = href;\n\t\tnewLink.addEventListener(\"load\", () => prev?.remove());\n\t\tnewLink.addEventListener(\"error\", () => prev?.remove());\n\t\tprev.after(newLink);\n\t\treturn;\n\t}\n\n\treturn new Promise((resolve) => {\n\t\tlet link = Object.assign(document.createElement(\"link\"), {\n\t\t\trel: \"stylesheet\",\n\t\t\thref,\n\t\t\tonload: resolve,\n\t\t});\n\t\tdocument.head.appendChild(link);\n\t});\n}\n\n/**\n * @param {string} css_text\n * @param {string} anywidget_id\n * @returns {void}\n */\nfunction load_css_text(css_text, anywidget_id) {\n\t/** @type {HTMLStyleElement | null} */\n\tlet prev = document.querySelector(`style[id='${anywidget_id}']`);\n\tif (prev) {\n\t\t// replace instead of creating a new DOM node\n\t\tprev.textContent = css_text;\n\t\treturn;\n\t}\n\tlet style = Object.assign(document.createElement(\"style\"), {\n\t\tid: anywidget_id,\n\t\ttype: \"text/css\",\n\t});\n\tstyle.appendChild(document.createTextNode(css_text));\n\tdocument.head.appendChild(style);\n}\n\n/**\n * @param {string | undefined} css\n * @param {string} anywidget_id\n * @returns {Promise}\n */\nasync function load_css(css, anywidget_id) {\n\tif (!css || !anywidget_id) return;\n\tif (is_href(css)) return load_css_href(css, anywidget_id);\n\treturn load_css_text(css, anywidget_id);\n}\n\n/**\n * @param {string} esm\n * @returns {Promise<{ mod: AnyWidgetModule, url: string }>}\n */\nasync function load_esm(esm) {\n\tif (is_href(esm)) {\n\t\treturn {\n\t\t\tmod: await import(/* webpackIgnore: true */ esm),\n\t\t\turl: esm,\n\t\t};\n\t}\n\tlet url = URL.createObjectURL(new Blob([esm], { type: \"text/javascript\" }));\n\tlet mod = await import(/* webpackIgnore: true */ url);\n\tURL.revokeObjectURL(url);\n\treturn { mod, url };\n}\n\n/** @param {string} anywidget_id */\nfunction warn_render_deprecation(anywidget_id) {\n\tconsole.warn(`\\\n[anywidget] Deprecation Warning for ${anywidget_id}: Direct export of a 'render' will likely be deprecated in the future. To migrate ...\n\nRemove the 'export' keyword from 'render'\n-----------------------------------------\n\nexport function render({ model, el }) { ... }\n^^^^^^\n\nCreate a default export that returns an object with 'render'\n------------------------------------------------------------\n\nfunction render({ model, el }) { ... }\n ^^^^^^\nexport default { render }\n ^^^^^^\n\nPin to anywidget>=0.9.0 in your pyproject.toml\n----------------------------------------------\n\ndependencies = [\"anywidget>=0.9.0\"]\n\nTo learn more, please see: https://github.com/manzt/anywidget/pull/395.\n`);\n}\n\n/**\n * @param {string} esm\n * @param {string} anywidget_id\n * @returns {Promise}\n */\nasync function load_widget(esm, anywidget_id) {\n\tlet { mod, url } = await load_esm(esm);\n\tif (mod.render) {\n\t\twarn_render_deprecation(anywidget_id);\n\t\treturn {\n\t\t\turl,\n\t\t\tasync initialize() {},\n\t\t\trender: mod.render,\n\t\t};\n\t}\n\tassert(\n\t\tmod.default,\n\t\t`[anywidget] module must export a default function or object.`,\n\t);\n\tlet widget =\n\t\ttypeof mod.default === \"function\" ? await mod.default() : mod.default;\n\treturn { url, ...widget };\n}\n\n/**\n * This is a trick so that we can cleanup event listeners added\n * by the user-defined function.\n */\nlet INITIALIZE_MARKER = Symbol(\"anywidget.initialize\");\n\n/**\n * @param {import(\"@jupyter-widgets/base\").DOMWidgetModel} model\n * @param {unknown} context\n * @return {import(\"@anywidget/types\").AnyModel}\n *\n * Prunes the view down to the minimum context necessary.\n *\n * Calls to `model.get` and `model.set` automatically add the\n * `context`, so we can gracefully unsubscribe from events\n * added by user-defined hooks.\n */\nfunction model_proxy(model, context) {\n\treturn {\n\t\tget: model.get.bind(model),\n\t\tset: model.set.bind(model),\n\t\tsave_changes: model.save_changes.bind(model),\n\t\tsend: model.send.bind(model),\n\t\t// @ts-expect-error\n\t\ton(name, callback) {\n\t\t\tmodel.on(name, callback, context);\n\t\t},\n\t\toff(name, callback) {\n\t\t\tmodel.off(name, callback, context);\n\t\t},\n\t\twidget_manager: model.widget_manager,\n\t};\n}\n\n/**\n * @param {void | (() => import('vitest').Awaitable)} fn\n * @param {string} kind\n */\nasync function safe_cleanup(fn, kind) {\n\treturn Promise.resolve()\n\t\t.then(() => fn?.())\n\t\t.catch((e) => console.warn(`[anywidget] error cleaning up ${kind}.`, e));\n}\n\n/**\n * @template T\n * @typedef {{ data: T, state: \"ok\" } | { error: any, state: \"error\" }} Result\n */\n\n/** @type {(data: T) => Result} */\nfunction ok(data) {\n\treturn { data, state: \"ok\" };\n}\n\n/** @type {(e: any) => Result} */\nfunction error(e) {\n\treturn { error: e, state: \"error\" };\n}\n\n/**\n * Cleans up the stack trace at anywidget boundary.\n * You can fully inspect the entire stack trace in the console interactively,\n * but the initial error message is cleaned up to be more user-friendly.\n *\n * @param {unknown} source\n * @returns {never}\n */\nfunction throw_anywidget_error(source) {\n\tif (!(source instanceof Error)) {\n\t\t// Don't know what to do with this.\n\t\tthrow source;\n\t}\n\tlet lines = source.stack?.split(\"\\n\") ?? [];\n\tlet anywidget_index = lines.findIndex((line) => line.includes(\"anywidget\"));\n\tlet clean_stack =\n\t\tanywidget_index === -1 ? lines : lines.slice(0, anywidget_index + 1);\n\tsource.stack = clean_stack.join(\"\\n\");\n\tconsole.error(source);\n\tthrow source;\n}\n\n/**\n * @typedef InvokeOptions\n * @prop {DataView[]} [buffers]\n * @prop {AbortSignal} [signal]\n */\n\n/**\n * @template T\n * @param {import(\"@anywidget/types\").AnyModel} model\n * @param {string} name\n * @param {any} [msg]\n * @param {InvokeOptions} [options]\n * @return {Promise<[T, DataView[]]>}\n */\nexport function invoke(model, name, msg, options = {}) {\n\t// crypto.randomUUID() is not available in non-secure contexts (i.e., http://)\n\t// so we use simple (non-secure) polyfill.\n\tlet id = uuid.v4();\n\tlet signal = options.signal ?? AbortSignal.timeout(3000);\n\n\treturn new Promise((resolve, reject) => {\n\t\tif (signal.aborted) {\n\t\t\treject(signal.reason);\n\t\t}\n\t\tsignal.addEventListener(\"abort\", () => {\n\t\t\tmodel.off(\"msg:custom\", handler);\n\t\t\treject(signal.reason);\n\t\t});\n\n\t\t/**\n\t\t * @param {{ id: string, kind: \"anywidget-command-response\", response: T }} msg\n\t\t * @param {DataView[]} buffers\n\t\t */\n\t\tfunction handler(msg, buffers) {\n\t\t\tif (!(msg.id === id)) return;\n\t\t\tresolve([msg.response, buffers]);\n\t\t\tmodel.off(\"msg:custom\", handler);\n\t\t}\n\t\tmodel.on(\"msg:custom\", handler);\n\t\tmodel.send(\n\t\t\t{ id, kind: \"anywidget-command\", name, msg },\n\t\t\tundefined,\n\t\t\toptions.buffers ?? [],\n\t\t);\n\t});\n}\n\nclass Runtime {\n\t/** @type {() => void} */\n\t#disposer = () => {};\n\t/** @type {Set<() => void>} */\n\t#view_disposers = new Set();\n\t/** @type {import('solid-js').Resource>} */\n\t// @ts-expect-error - Set synchronously in constructor.\n\t#widget_result;\n\n\t/** @param {import(\"@jupyter-widgets/base\").DOMWidgetModel} model */\n\tconstructor(model) {\n\t\tthis.#disposer = solid.createRoot((dispose) => {\n\t\t\tlet [css, set_css] = solid.createSignal(model.get(\"_css\"));\n\t\t\tmodel.on(\"change:_css\", () => {\n\t\t\t\tlet id = model.get(\"_anywidget_id\");\n\t\t\t\tconsole.debug(`[anywidget] css hot updated: ${id}`);\n\t\t\t\tset_css(model.get(\"_css\"));\n\t\t\t});\n\t\t\tsolid.createEffect(() => {\n\t\t\t\tlet id = model.get(\"_anywidget_id\");\n\t\t\t\tload_css(css(), id);\n\t\t\t});\n\n\t\t\t/** @type {import(\"solid-js\").Signal} */\n\t\t\tlet [esm, setEsm] = solid.createSignal(model.get(\"_esm\"));\n\t\t\tmodel.on(\"change:_esm\", async () => {\n\t\t\t\tlet id = model.get(\"_anywidget_id\");\n\t\t\t\tconsole.debug(`[anywidget] esm hot updated: ${id}`);\n\t\t\t\tsetEsm(model.get(\"_esm\"));\n\t\t\t});\n\t\t\t/** @type {void | (() => import(\"vitest\").Awaitable)} */\n\t\t\tlet cleanup;\n\t\t\tthis.#widget_result = solid.createResource(esm, async (update) => {\n\t\t\t\tawait safe_cleanup(cleanup, \"initialize\");\n\t\t\t\ttry {\n\t\t\t\t\tmodel.off(null, null, INITIALIZE_MARKER);\n\t\t\t\t\tlet widget = await load_widget(update, model.get(\"_anywidget_id\"));\n\t\t\t\t\tcleanup = await widget.initialize?.({\n\t\t\t\t\t\tmodel: model_proxy(model, INITIALIZE_MARKER),\n\t\t\t\t\t\texperimental: {\n\t\t\t\t\t\t\t// @ts-expect-error - bind isn't working\n\t\t\t\t\t\t\tinvoke: invoke.bind(null, model),\n\t\t\t\t\t\t},\n\t\t\t\t\t});\n\t\t\t\t\treturn ok(widget);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn error(e);\n\t\t\t\t}\n\t\t\t})[0];\n\t\t\treturn () => {\n\t\t\t\tcleanup?.();\n\t\t\t\tmodel.off(\"change:_css\");\n\t\t\t\tmodel.off(\"change:_esm\");\n\t\t\t\tdispose();\n\t\t\t};\n\t\t});\n\t}\n\n\t/**\n\t * @param {import(\"@jupyter-widgets/base\").DOMWidgetView} view\n\t * @returns {Promise<() => void>}\n\t */\n\tasync create_view(view) {\n\t\tlet model = view.model;\n\t\tlet disposer = solid.createRoot((dispose) => {\n\t\t\t/** @type {void | (() => import(\"vitest\").Awaitable)} */\n\t\t\tlet cleanup;\n\t\t\tlet resource = solid.createResource(\n\t\t\t\tthis.#widget_result,\n\t\t\t\tasync (widget_result) => {\n\t\t\t\t\tcleanup?.();\n\t\t\t\t\t// Clear all previous event listeners from this hook.\n\t\t\t\t\tmodel.off(null, null, view);\n\t\t\t\t\tview.$el.empty();\n\t\t\t\t\tif (widget_result.state === \"error\") {\n\t\t\t\t\t\tthrow_anywidget_error(widget_result.error);\n\t\t\t\t\t}\n\t\t\t\t\tlet widget = widget_result.data;\n\t\t\t\t\ttry {\n\t\t\t\t\t\tcleanup = await widget.render?.({\n\t\t\t\t\t\t\tmodel: model_proxy(model, view),\n\t\t\t\t\t\t\tel: view.el,\n\t\t\t\t\t\t\texperimental: {\n\t\t\t\t\t\t\t\t// @ts-expect-error - bind isn't working\n\t\t\t\t\t\t\t\tinvoke: invoke.bind(null, model),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t});\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tthrow_anywidget_error(e);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t)[0];\n\t\t\tsolid.createEffect(() => {\n\t\t\t\tif (resource.error) {\n\t\t\t\t\t// TODO: Show error in the view?\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn () => {\n\t\t\t\tdispose();\n\t\t\t\tcleanup?.();\n\t\t\t};\n\t\t});\n\t\t// Have the runtime keep track but allow the view to dispose itself.\n\t\tthis.#view_disposers.add(disposer);\n\t\treturn () => {\n\t\t\tlet deleted = this.#view_disposers.delete(disposer);\n\t\t\tif (deleted) disposer();\n\t\t};\n\t}\n\n\tdispose() {\n\t\t// biome-ignore lint/complexity/noForEach: Easier to read than a for loop.\n\t\tthis.#view_disposers.forEach((dispose) => dispose());\n\t\tthis.#view_disposers.clear();\n\t\tthis.#disposer();\n\t}\n}\n\n// @ts-expect-error - injected by bundler\nlet version = globalThis.VERSION;\n\n/** @param {typeof import(\"@jupyter-widgets/base\")} base */\nexport default function ({ DOMWidgetModel, DOMWidgetView }) {\n\t/** @type {WeakMap} */\n\tlet RUNTIMES = new WeakMap();\n\n\tclass AnyModel extends DOMWidgetModel {\n\t\tstatic model_name = \"AnyModel\";\n\t\tstatic model_module = \"anywidget\";\n\t\tstatic model_module_version = version;\n\n\t\tstatic view_name = \"AnyView\";\n\t\tstatic view_module = \"anywidget\";\n\t\tstatic view_module_version = version;\n\n\t\t/** @param {Parameters[\"initialize\"]>} args */\n\t\tinitialize(...args) {\n\t\t\tsuper.initialize(...args);\n\t\t\tlet runtime = new Runtime(this);\n\t\t\tthis.once(\"destroy\", () => {\n\t\t\t\ttry {\n\t\t\t\t\truntime.dispose();\n\t\t\t\t} finally {\n\t\t\t\t\tRUNTIMES.delete(this);\n\t\t\t\t}\n\t\t\t});\n\t\t\tRUNTIMES.set(this, runtime);\n\t\t}\n\n\t\t/**\n\t\t * @param {Record} state\n\t\t *\n\t\t * We override to support binary trailets because JSON.parse(JSON.stringify())\n\t\t * does not properly clone binary data (it just returns an empty object).\n\t\t *\n\t\t * https://github.com/jupyter-widgets/ipywidgets/blob/47058a373d2c2b3acf101677b2745e14b76dd74b/packages/base/src/widget.ts#L562-L583\n\t\t */\n\t\tserialize(state) {\n\t\t\tlet serializers =\n\t\t\t\t/** @type {DOMWidgetModel} */ (this.constructor).serializers || {};\n\t\t\tfor (let k of Object.keys(state)) {\n\t\t\t\ttry {\n\t\t\t\t\tlet serialize = serializers[k]?.serialize;\n\t\t\t\t\tif (serialize) {\n\t\t\t\t\t\tstate[k] = serialize(state[k], this);\n\t\t\t\t\t} else if (k === \"layout\" || k === \"style\") {\n\t\t\t\t\t\t// These keys come from ipywidgets, rely on JSON.stringify trick.\n\t\t\t\t\t\tstate[k] = JSON.parse(JSON.stringify(state[k]));\n\t\t\t\t\t} else {\n\t\t\t\t\t\tstate[k] = structuredClone(state[k]);\n\t\t\t\t\t}\n\t\t\t\t\tif (typeof state[k]?.toJSON === \"function\") {\n\t\t\t\t\t\tstate[k] = state[k].toJSON();\n\t\t\t\t\t}\n\t\t\t\t} catch (e) {\n\t\t\t\t\tconsole.error(\"Error serializing widget state attribute: \", k);\n\t\t\t\t\tthrow e;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn state;\n\t\t}\n\t}\n\n\tclass AnyView extends DOMWidgetView {\n\t\t/** @type {undefined | (() => void)} */\n\t\t#dispose = undefined;\n\t\tasync render() {\n\t\t\tlet runtime = RUNTIMES.get(this.model);\n\t\t\tassert(runtime, \"[anywidget] runtime not found.\");\n\t\t\tassert(!this.#dispose, \"[anywidget] dispose already set.\");\n\t\t\tthis.#dispose = await runtime.create_view(this);\n\t\t}\n\t\tremove() {\n\t\t\tthis.#dispose?.();\n\t\t\tsuper.remove();\n\t\t}\n\t}\n\n\treturn { AnyModel, AnyView };\n}\n"],"names":[],"mappings":";;;;;;;AAA8C;AACb;;AAEjC;AACA;AACA,cAAc,WAAW,6CAA6C,WAAW;AACjF;;AAEA,+DAAe;AACf;AACA,YAAY,yEAA2B;AACvC;AACA,aAAa,SAAS;AACtB,aAAa,oBAAoB;AACjC;AACA,gBAAgB,8DAAM,CAAC,yOAAI;AAC3B;AACA;AACA;AACA,YAAY,UAAkB;AAC9B;AACA,GAAG;AACH,EAAE;AACF;AACA,CAAC,EAAC;;;;;;;;;;ACxBmC;AACH;;AAElC;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;;AAEA;AACA;AACA,kBAAkB;AAClB,mBAAmB;AACnB;;AAEA;AACA,WAAW,KAAK;AAChB,WAAW,QAAQ;AACnB,aAAa;AACb;AACA;AACA;AACA;;AAEA;AACA,WAAW,QAAQ;AACnB,aAAa,kBAAkB,OAAO,cAAc,OAAO;AAC3D;AACA;AACA;AACA;;AAEA;AACA,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,aAAa;AACb;AACA;AACA,YAAY,wBAAwB;AACpC,+CAA+C,aAAa;;AAE5D;AACA;AACA;AACA;AACA,2BAA2B,iBAAiB;AAC5C;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,EAAE;AACF;;AAEA;AACA,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,aAAa;AACb;AACA;AACA,YAAY,yBAAyB;AACrC,gDAAgD,aAAa;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;;AAEA;AACA,WAAW,oBAAoB;AAC/B,WAAW,QAAQ;AACnB,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,WAAW,QAAQ;AACnB,aAAa,UAAU,mCAAmC;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAiD,yBAAyB;AAC1E;AACA;AACA,UAAU;AACV;;AAEA,YAAY,QAAQ;AACpB;AACA;AACA,sCAAsC,aAAa;;AAEnD;AACA;;AAEA,yBAAyB,WAAW,IAAI;AACxC;;AAEA;AACA;;AAEA,kBAAkB,WAAW,IAAI;AACjC;AACA,iBAAiB;AACjB;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,aAAa,sBAAsB,aAAa;AAChD;AACA;AACA,OAAO,WAAW;AAClB;AACA;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,WAAW,gDAAgD;AAC3D,WAAW,SAAS;AACpB,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA,WAAW,iDAAiD;AAC5D,WAAW,QAAQ;AACnB;AACA;AACA;AACA;AACA,8DAA8D,KAAK;AACnE;;AAEA;AACA;AACA,eAAe,uBAAuB,IAAI,8BAA8B;AACxE;;AAEA,WAAW,2BAA2B;AACtC;AACA,UAAU;AACV;;AAEA,WAAW,yBAAyB;AACpC;AACA,UAAU;AACV;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAW,SAAS;AACpB,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,UAAU,YAAY;AACtB,UAAU,aAAa;AACvB;;AAEA;AACA;AACA,WAAW,qCAAqC;AAChD,WAAW,QAAQ;AACnB,WAAW,KAAK;AAChB,WAAW,eAAe;AAC1B,YAAY;AACZ;AACO,8CAA8C;AACrD;AACA;AACA,UAAU,4CAAO;AACjB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA,eAAe,+DAA+D;AAC9E,aAAa,YAAY;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK,0CAA0C;AAC/C;AACA;AACA;AACA,EAAE;AACF;;AAEA;AACA,YAAY,YAAY;AACxB;AACA,YAAY,iBAAiB;AAC7B;AACA,YAAY,iDAAiD,aAAa,IAAI;AAC9E;AACA;;AAEA,aAAa,gDAAgD;AAC7D;AACA,mBAAmB,yDAAgB;AACnC,wBAAwB,2DAAkB;AAC1C;AACA;AACA,kDAAkD,GAAG;AACrD;AACA,IAAI;AACJ,GAAG,2DAAkB;AACrB;AACA;AACA,IAAI;;AAEJ,cAAc,mCAAmC;AACjD,uBAAuB,2DAAkB;AACzC;AACA;AACA,kDAAkD,GAAG;AACrD;AACA,IAAI;AACJ,cAAc,iDAAiD;AAC/D;AACA,yBAAyB,6DAAoB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,MAAM;AACN;AACA,MAAM;AACN;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA,YAAY,+CAA+C;AAC3D,cAAc;AACd;AACA;AACA;AACA,iBAAiB,yDAAgB;AACjC,cAAc,iDAAiD;AAC/D;AACA,kBAAkB,6DAAoB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR,OAAO;AACP,OAAO;AACP;AACA;AACA,KAAK;AACL;AACA,GAAG,2DAAkB;AACrB;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,cAAc,UAAkB;;AAEhC,YAAY,wCAAwC;AACpD,6BAAe,oCAAU,EAAE,+BAA+B;AAC1D,YAAY,4BAA4B;AACxC;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,cAAc,wDAAwD;AACtE;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,IAAI;AACJ;AACA;;AAEA;AACA,aAAa,qBAAqB;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,gBAAgB;AAC/B;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,aAAa,0BAA0B;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,UAAU;AACV"}