@plasmicpkgs/tiptap 0.0.2 → 0.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (44) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/index.js +14 -13
  3. package/dist/index.js.map +1 -1
  4. package/dist/registerTiptap.d.ts +0 -1
  5. package/dist/tiptap.esm.js +14 -13
  6. package/dist/tiptap.esm.js.map +1 -1
  7. package/package.json +4 -6
  8. package/skinny/registerBold.cjs.js +1 -1
  9. package/skinny/registerBold.esm.js +1 -1
  10. package/skinny/registerCode.cjs.js +1 -1
  11. package/skinny/registerCode.esm.js +1 -1
  12. package/skinny/registerItalic.cjs.js +1 -1
  13. package/skinny/registerItalic.esm.js +1 -1
  14. package/skinny/registerLink.cjs.js +1 -1
  15. package/skinny/registerLink.esm.js +1 -1
  16. package/skinny/registerMention.cjs.js +1 -1
  17. package/skinny/registerMention.esm.js +1 -1
  18. package/skinny/registerStrike.cjs.js +1 -1
  19. package/skinny/registerStrike.esm.js +1 -1
  20. package/skinny/{registerTiptap-4a3b1c7e.cjs.js → registerTiptap-004bd7c8.cjs.js} +15 -14
  21. package/skinny/registerTiptap-004bd7c8.cjs.js.map +1 -0
  22. package/skinny/{registerTiptap-f7e7006c.esm.js → registerTiptap-3c71865b.esm.js} +15 -14
  23. package/skinny/registerTiptap-3c71865b.esm.js.map +1 -0
  24. package/skinny/registerTiptap.cjs.js +1 -1
  25. package/skinny/registerTiptap.d.ts +0 -1
  26. package/skinny/registerTiptap.esm.js +1 -1
  27. package/skinny/registerToolbarBold.cjs.js +1 -1
  28. package/skinny/registerToolbarBold.esm.js +1 -1
  29. package/skinny/registerToolbarCode.cjs.js +1 -1
  30. package/skinny/registerToolbarCode.esm.js +1 -1
  31. package/skinny/registerToolbarItalic.cjs.js +1 -1
  32. package/skinny/registerToolbarItalic.esm.js +1 -1
  33. package/skinny/registerToolbarLink.cjs.js +1 -1
  34. package/skinny/registerToolbarLink.esm.js +1 -1
  35. package/skinny/registerToolbarMention.cjs.js +1 -1
  36. package/skinny/registerToolbarMention.esm.js +1 -1
  37. package/skinny/registerToolbarStrike.cjs.js +1 -1
  38. package/skinny/registerToolbarStrike.esm.js +1 -1
  39. package/skinny/registerToolbarUnderline.cjs.js +1 -1
  40. package/skinny/registerToolbarUnderline.esm.js +1 -1
  41. package/skinny/registerUnderline.cjs.js +1 -1
  42. package/skinny/registerUnderline.esm.js +1 -1
  43. package/skinny/registerTiptap-4a3b1c7e.cjs.js.map +0 -1
  44. package/skinny/registerTiptap-f7e7006c.esm.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"registerTiptap-f7e7006c.esm.js","sources":["../src/contexts.tsx","../src/useIsClient.ts","../src/utils.ts","../src/registerTiptap.tsx"],"sourcesContent":["import { Mark, Node } from \"@tiptap/core\";\nimport type { BoldOptions } from \"@tiptap/extension-bold\";\nimport type { CodeOptions } from \"@tiptap/extension-code\";\nimport type { ItalicOptions } from \"@tiptap/extension-italic\";\nimport type { LinkOptions } from \"@tiptap/extension-link\";\nimport type { MentionOptions } from \"@tiptap/extension-mention\";\nimport type { StrikeOptions } from \"@tiptap/extension-strike\";\nimport type { UnderlineOptions } from \"@tiptap/extension-underline\";\nimport React, { useState } from \"react\";\n\nexport const RESET_TIMEOUT_MS = 500;\nexport interface TiptapContextProps {\n bold?: Mark<BoldOptions>;\n setBold: (boldOptions?: Mark<BoldOptions>) => void;\n code?: Mark<CodeOptions>;\n setCode: (codeOptions?: Mark<CodeOptions>) => void;\n italic?: Mark<ItalicOptions>;\n setItalic: (italicOptions?: Mark<ItalicOptions>) => void;\n link?: Mark<LinkOptions>;\n setLink: (linkOptions?: Mark<LinkOptions>) => void;\n mention?: Node<MentionOptions>;\n setMention: (mentionOptions?: Node<MentionOptions>) => void;\n strike?: Mark<StrikeOptions>;\n setStrike: (strikeOptions?: Mark<StrikeOptions>) => void;\n underline?: Mark<UnderlineOptions>;\n setUnderline: (underlineOptions?: Mark<UnderlineOptions>) => void;\n}\n\nexport const allExtensions: Extract<keyof TiptapContextProps, string>[] = [\n \"bold\",\n \"italic\",\n \"underline\",\n \"strike\",\n \"code\",\n \"link\",\n \"mention\",\n];\n\nexport const TiptapContext = React.createContext<\n TiptapContextProps | undefined\n>(undefined);\n\nexport const useTiptapContext = () => {\n const context = React.useContext(TiptapContext);\n if (!context) {\n throw new Error(\n \"useTiptapContext must be used within a TiptapContextProvider\"\n );\n }\n return context;\n};\n\nexport const TiptapContextProvider = ({ children }: any) => {\n const [bold, setBold] = useState<Mark<BoldOptions> | undefined>(undefined);\n const [code, setCode] = useState<Mark<CodeOptions> | undefined>(undefined);\n const [italic, setItalic] = useState<Mark<ItalicOptions> | undefined>(\n undefined\n );\n const [link, setLink] = useState<Mark<LinkOptions> | undefined>(undefined);\n const [mention, setMention] = useState<Node<MentionOptions> | undefined>(\n undefined\n );\n const [strike, setStrike] = useState<Mark<StrikeOptions> | undefined>(\n undefined\n );\n const [underline, setUnderline] = useState<\n Mark<UnderlineOptions> | undefined\n >(undefined);\n\n return (\n <TiptapContext.Provider\n value={{\n bold,\n setBold,\n code,\n setCode,\n italic,\n setItalic,\n link,\n setLink,\n mention,\n /**\n * In situations where I want to remove an extension and add it again with new options (e.g. within a useEffect - see registerMention)\n * the options are not updated.\n * So after removing the extension, I want to wait a few seconds before I add it again,\n * so the Tiptap editor acknowledges the removal before it adds the extension back with new updated options.\n * @param mentionOptions\n * @returns\n */\n setMention: (mentionOptions?: Node<MentionOptions>) => {\n if (!mentionOptions) {\n setMention(mentionOptions);\n return;\n }\n setTimeout(() => {\n setMention(mentionOptions);\n }, RESET_TIMEOUT_MS);\n },\n strike,\n setStrike,\n underline,\n setUnderline,\n }}\n >\n {children}\n </TiptapContext.Provider>\n );\n};\n","import React from \"react\";\n\nexport function useIsClient() {\n const [loaded, setLoaded] = React.useState(false);\n useIsomorphicLayoutEffect(() => {\n setLoaded(true);\n });\n return loaded;\n}\n\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-ignore\nconst isBrowser = typeof window !== \"undefined\";\nexport const useIsomorphicLayoutEffect = isBrowser\n ? React.useLayoutEffect\n : React.useEffect;\n","import {\n ComponentMeta,\n default as registerComponent,\n} from \"@plasmicapp/host/registerComponent\";\nimport {\n default as registerGlobalContext,\n GlobalContextMeta,\n} from \"@plasmicapp/host/registerGlobalContext\";\nimport { default as registerToken } from \"@plasmicapp/host/registerToken\";\nimport React from \"react\";\n\nexport type Registerable = {\n registerComponent: typeof registerComponent;\n registerGlobalContext: typeof registerGlobalContext;\n registerToken: typeof registerToken;\n};\n\nexport function makeRegisterComponent<T extends React.ComponentType<any>>(\n component: T,\n meta: ComponentMeta<React.ComponentProps<T>>\n) {\n return function (loader?: Registerable) {\n registerComponentHelper(loader, component, meta);\n };\n}\n\nexport function makeRegisterGlobalContext<T extends React.ComponentType<any>>(\n component: T,\n meta: GlobalContextMeta<React.ComponentProps<T>>\n) {\n return function (loader?: Registerable) {\n if (loader) {\n loader.registerGlobalContext(component, meta);\n } else {\n registerGlobalContext(component, meta);\n }\n };\n}\n\nexport function registerComponentHelper<T extends React.ComponentType<any>>(\n loader: Registerable | undefined,\n component: T,\n meta: ComponentMeta<React.ComponentProps<T>>\n) {\n if (loader) {\n loader.registerComponent(component, meta);\n } else {\n registerComponent(component, meta);\n }\n}\n\ntype ReactElt = {\n children: ReactElt | ReactElt[];\n props: {\n children: ReactElt | ReactElt[];\n [prop: string]: any;\n } | null;\n type: React.ComponentType<any> | null;\n key: string | null;\n} | null;\n\nexport function traverseReactEltTree(\n children: React.ReactNode,\n callback: (elt: ReactElt) => void\n) {\n const rec = (elts: ReactElt | ReactElt[] | null) => {\n (Array.isArray(elts) ? elts : [elts]).forEach((elt) => {\n if (elt) {\n callback(elt);\n if (elt.children) {\n rec(elt.children);\n }\n if (elt.props?.children && elt.props.children !== elt.children) {\n rec(elt.props.children);\n }\n }\n });\n };\n rec(children as any);\n}\n\nexport function asArray<T>(x: T[] | T | undefined | null) {\n if (Array.isArray(x)) {\n return x;\n } else if (x == null) {\n return [];\n } else {\n return [x];\n }\n}\n","import { usePlasmicCanvasContext } from \"@plasmicapp/host\";\nimport { ActionProps } from \"@plasmicapp/host/registerComponent\";\nimport Document from \"@tiptap/extension-document\";\nimport Paragraph from \"@tiptap/extension-paragraph\";\nimport Text from \"@tiptap/extension-text\";\nimport type { Extensions, JSONContent } from \"@tiptap/react\";\nimport { EditorProvider } from \"@tiptap/react\";\nimport { Switch } from \"antd\";\nimport React, { useEffect, useMemo, useRef, useState } from \"react\";\nimport {\n allExtensions,\n TiptapContextProvider,\n useTiptapContext,\n} from \"./contexts\";\nimport { useIsClient } from \"./useIsClient\";\nimport {\n Registerable,\n registerComponentHelper,\n traverseReactEltTree,\n} from \"./utils\";\n\nexport const TIPTAP_COMPONENT_NAME = \"hostless-tiptap\";\n\nexport type TiptapProps = {\n contentHtml?: string;\n defaultContentHtml?: string;\n contentJson?: JSONContent;\n defaultContentJson?: JSONContent;\n useJson: boolean;\n extensions?: React.ReactElement;\n toolbar?: React.ReactElement;\n className: string;\n onChange: (content: JSONContent) => void;\n};\n\nexport function Tiptap(props: TiptapProps) {\n const isClient = useIsClient();\n const [active, setActive] = useState<boolean>(false);\n const [refreshKey, setRefreshKey] = useState(0);\n const activeRef = useRef<boolean>();\n activeRef.current = active;\n\n const {\n extensions,\n contentHtml,\n defaultContentHtml,\n defaultContentJson,\n contentJson,\n className,\n onChange,\n toolbar,\n useJson,\n } = props;\n const { ...tiptapContext } = useTiptapContext();\n const usedExtensions: Record<string, any> = allExtensions.reduce(\n (acc: any, ext) => {\n if (tiptapContext[ext] !== undefined) {\n acc[ext] = tiptapContext[ext];\n }\n return acc;\n },\n {}\n );\n\n const extensionsProp: Extensions = [\n Document,\n Paragraph,\n Text,\n ...Object.values(usedExtensions),\n ];\n\n const isCanvas = usePlasmicCanvasContext();\n\n const content = useJson\n ? contentJson || defaultContentJson\n : contentHtml || defaultContentHtml;\n\n // If you try to update the content via the content prop (as opposed to directly typing into the tiptap editor), the new content won't show. So we got to refresh the editor to make the default content appear.\n useEffect(() => {\n if (activeRef.current) return;\n setRefreshKey(Math.random() * 1000000);\n }, [...(isCanvas ? [content] : [])]);\n\n if (!isClient) {\n return null;\n }\n\n const css = `\n .tiptap {\n padding: 0;\n outline: none;\n }\n `;\n\n const toolbarProp = toolbar ? (\n <div style={{ display: \"flex\", alignItems: \"center\" }}>{toolbar}</div>\n ) : null;\n\n return (\n <div className={className} style={{ position: \"relative\" }}>\n <EditorProvider\n key={`${extensionsProp.length}${refreshKey}`}\n // extensions={extensionsProp}\n extensions={extensionsProp}\n content={content}\n onCreate={({ editor }) => {\n onChange(editor.getJSON());\n }}\n onUpdate={({ editor }) => {\n onChange(editor.getJSON());\n }}\n onFocus={() => setActive(true)}\n onBlur={() => setActive(false)}\n slotBefore={toolbarProp}\n // slotAfter={<MyEditorFooter />}\n\n // TODO: HIDE children prop\n children={undefined}\n editorProps={{\n attributes: {\n className,\n },\n }}\n />\n {extensions}\n <style dangerouslySetInnerHTML={{ __html: css }} />\n </div>\n );\n}\n\nexport function TiptapWrapper(props: TiptapProps) {\n return (\n <TiptapContextProvider>\n <Tiptap {...props} />\n </TiptapContextProvider>\n );\n}\n\nexport function AddExtension({\n studioOps,\n componentProps,\n}: ActionProps<TiptapProps>) {\n const usedExtensions: string[] = useMemo(() => {\n const list: string[] = [];\n traverseReactEltTree(componentProps?.extensions, (elt) => {\n const ext = elt?.type?.displayName?.toLowerCase?.();\n if (ext) {\n list.push(ext);\n }\n });\n return list;\n }, [componentProps?.extensions]);\n\n const usedExtensionTools: string[] = useMemo(() => {\n const list: string[] = [];\n traverseReactEltTree(componentProps?.toolbar, (elt) => {\n const ext = elt?.type?.displayName?.toLowerCase?.();\n if (ext && ext.includes(\"toolbar\")) {\n list.push(ext.replace(\"toolbar\", \"\"));\n }\n });\n return list;\n }, [componentProps?.toolbar]);\n\n const handleChange = (extName: string, add: boolean) => {\n if (add) {\n studioOps.appendToSlot(\n {\n type: \"component\",\n name: `${TIPTAP_COMPONENT_NAME}-extension-${extName}`,\n props: {},\n },\n \"extensions\"\n );\n studioOps.appendToSlot(\n {\n type: \"component\",\n name: `${TIPTAP_COMPONENT_NAME}-toolbar-${extName}`,\n props: {},\n },\n \"toolbar\"\n );\n } else {\n const extIndices = usedExtensions.flatMap((ext, i) =>\n ext === extName ? i : []\n );\n extIndices\n .reverse()\n .forEach(\n (i) => i !== -1 && studioOps.removeFromSlotAt(i, \"extensions\")\n );\n\n const toolIndices = usedExtensionTools.flatMap((ext, i) =>\n ext === extName ? i : []\n );\n toolIndices\n .reverse()\n .forEach((i) => i !== -1 && studioOps.removeFromSlotAt(i, \"toolbar\"));\n }\n };\n\n return (\n <div\n style={{\n marginBottom: 10,\n paddingBottom: 10,\n borderBottom: \"1px dashed #ccc\",\n }}\n >\n <p>\n You can add capabilities to Tiptap Rich Text Editor using the tools\n below.\n </p>\n <p>\n To further customize the extensions, find them under the Editor's\n \"extensions\" and \"toolbar\" slots\n </p>\n {allExtensions.map((ext) => (\n <label\n key={ext}\n data-test-id={`custom-action-${ext}`}\n style={{\n display: \"flex\",\n justifyContent: \"space-between\",\n marginBottom: 5,\n color: \"#1b1b18\",\n }}\n >\n <span>{ext}</span>\n <Switch\n size=\"small\"\n checked={\n usedExtensions.includes(ext) || usedExtensionTools.includes(ext)\n }\n onChange={(checked) => handleChange(ext, checked)}\n />\n </label>\n ))}\n </div>\n );\n}\n\nexport function registerTiptap(loader?: Registerable) {\n registerComponentHelper(loader, TiptapWrapper, {\n name: TIPTAP_COMPONENT_NAME,\n displayName: \"Tiptap Rich Text Editor\",\n defaultStyles: {\n borderWidth: \"1px\",\n borderStyle: \"solid\",\n borderColor: \"rgb(204,204,204)\",\n borderRadius: \"4px\",\n padding: \"10px\",\n width: \"300px\",\n },\n actions: [\n {\n type: \"custom-action\",\n control: AddExtension,\n },\n ],\n props: {\n useJson: {\n displayName: \"Use JSON default content\",\n type: \"boolean\",\n defaultValue: false,\n },\n contentHtml: {\n type: \"string\",\n displayName: \"HTML Content\",\n editOnly: true,\n uncontrolledProp: \"defaultContentHtml\",\n description: \"Contents of the editor\",\n hidden: (ps) => ps.useJson,\n },\n contentJson: {\n type: \"object\",\n displayName: \"JSON Content\",\n editOnly: true,\n uncontrolledProp: \"defaultContentJson\",\n description: \"Contents of the editor as JSON\",\n hidden: (ps) => !ps.useJson,\n },\n extensions: {\n type: \"slot\",\n hidePlaceholder: true,\n allowedComponents: allExtensions.map(\n (ext) => `${TIPTAP_COMPONENT_NAME}-extension-${ext}`\n ),\n },\n toolbar: {\n type: \"slot\",\n hidePlaceholder: true,\n allowedComponents: allExtensions.map(\n (ext) => `${TIPTAP_COMPONENT_NAME}-toolbar-${ext}`\n ),\n },\n onChange: {\n type: \"eventHandler\",\n argTypes: [{ name: \"content\", type: \"object\" }],\n },\n },\n states: {\n content: {\n type: \"writable\",\n variableType: \"object\",\n valueProp: \"contentJson\",\n onChangeProp: \"onChange\",\n },\n },\n importName: \"TiptapWrapper\",\n importPath: \"@plasmicpkgs/tiptap/skinny/registerTiptap\",\n });\n}\n"],"names":[],"mappings":";;;;;;;;;;AAUO,MAAM,gBAAmB,GAAA,GAAA,CAAA;AAkBzB,MAAM,aAA6D,GAAA;AAAA,EACxE,MAAA;AAAA,EACA,QAAA;AAAA,EACA,WAAA;AAAA,EACA,QAAA;AAAA,EACA,MAAA;AAAA,EACA,MAAA;AAAA,EACA,SAAA;AACF,CAAA,CAAA;AAEa,MAAA,aAAA,GAAgB,KAAM,CAAA,aAAA,CAEjC,KAAS,CAAA,CAAA,CAAA;AAEJ,MAAM,mBAAmB,MAAM;AACpC,EAAM,MAAA,OAAA,GAAU,KAAM,CAAA,UAAA,CAAW,aAAa,CAAA,CAAA;AAC9C,EAAA,IAAI,CAAC,OAAS,EAAA;AACZ,IAAA,MAAM,IAAI,KAAA;AAAA,MACR,8DAAA;AAAA,KACF,CAAA;AAAA,GACF;AACA,EAAO,OAAA,OAAA,CAAA;AACT,EAAA;AAEO,MAAM,qBAAwB,GAAA,CAAC,EAAE,QAAA,EAAoB,KAAA;AAC1D,EAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAI,SAAwC,KAAS,CAAA,CAAA,CAAA;AACzE,EAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAI,SAAwC,KAAS,CAAA,CAAA,CAAA;AACzE,EAAM,MAAA,CAAC,MAAQ,EAAA,SAAS,CAAI,GAAA,QAAA;AAAA,IAC1B,KAAA,CAAA;AAAA,GACF,CAAA;AACA,EAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAI,SAAwC,KAAS,CAAA,CAAA,CAAA;AACzE,EAAM,MAAA,CAAC,OAAS,EAAA,UAAU,CAAI,GAAA,QAAA;AAAA,IAC5B,KAAA,CAAA;AAAA,GACF,CAAA;AACA,EAAM,MAAA,CAAC,MAAQ,EAAA,SAAS,CAAI,GAAA,QAAA;AAAA,IAC1B,KAAA,CAAA;AAAA,GACF,CAAA;AACA,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAI,SAEhC,KAAS,CAAA,CAAA,CAAA;AAEX,EACE,uBAAA,KAAA,CAAA,aAAA;AAAA,IAAC,aAAc,CAAA,QAAA;AAAA,IAAd;AAAA,MACC,KAAO,EAAA;AAAA,QACL,IAAA;AAAA,QACA,OAAA;AAAA,QACA,IAAA;AAAA,QACA,OAAA;AAAA,QACA,MAAA;AAAA,QACA,SAAA;AAAA,QACA,IAAA;AAAA,QACA,OAAA;AAAA,QACA,OAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QASA,UAAA,EAAY,CAAC,cAA0C,KAAA;AACrD,UAAA,IAAI,CAAC,cAAgB,EAAA;AACnB,YAAA,UAAA,CAAW,cAAc,CAAA,CAAA;AACzB,YAAA,OAAA;AAAA,WACF;AACA,UAAA,UAAA,CAAW,MAAM;AACf,YAAA,UAAA,CAAW,cAAc,CAAA,CAAA;AAAA,aACxB,gBAAgB,CAAA,CAAA;AAAA,SACrB;AAAA,QACA,MAAA;AAAA,QACA,SAAA;AAAA,QACA,SAAA;AAAA,QACA,YAAA;AAAA,OACF;AAAA,KAAA;AAAA,IAEC,QAAA;AAAA,GACH,CAAA;AAEJ,CAAA;;ACzGO,SAAS,WAAc,GAAA;AAC5B,EAAA,MAAM,CAAC,MAAQ,EAAA,SAAS,CAAI,GAAA,KAAA,CAAM,SAAS,KAAK,CAAA,CAAA;AAChD,EAAA,yBAAA,CAA0B,MAAM;AAC9B,IAAA,SAAA,CAAU,IAAI,CAAA,CAAA;AAAA,GACf,CAAA,CAAA;AACD,EAAO,OAAA,MAAA,CAAA;AACT,CAAA;AAIA,MAAM,SAAA,GAAY,OAAO,MAAW,KAAA,WAAA,CAAA;AAC7B,MAAM,yBAA4B,GAAA,SAAA,GACrC,KAAM,CAAA,eAAA,GACN,KAAM,CAAA,SAAA;;ACwBM,SAAA,uBAAA,CACd,MACA,EAAA,SAAA,EACA,IACA,EAAA;AACA,EAAA,IAAI,MAAQ,EAAA;AACV,IAAO,MAAA,CAAA,iBAAA,CAAkB,WAAW,IAAI,CAAA,CAAA;AAAA,GACnC,MAAA;AACL,IAAA,iBAAA,CAAkB,WAAW,IAAI,CAAA,CAAA;AAAA,GACnC;AACF,CAAA;AAYgB,SAAA,oBAAA,CACd,UACA,QACA,EAAA;AACA,EAAM,MAAA,GAAA,GAAM,CAAC,IAAuC,KAAA;AAClD,IAAC,CAAA,KAAA,CAAM,OAAQ,CAAA,IAAI,CAAI,GAAA,IAAA,GAAO,CAAC,IAAI,CAAA,EAAG,OAAQ,CAAA,CAAC,GAAQ,KAAA;AAlE3D,MAAA,IAAA,EAAA,CAAA;AAmEM,MAAA,IAAI,GAAK,EAAA;AACP,QAAA,QAAA,CAAS,GAAG,CAAA,CAAA;AACZ,QAAA,IAAI,IAAI,QAAU,EAAA;AAChB,UAAA,GAAA,CAAI,IAAI,QAAQ,CAAA,CAAA;AAAA,SAClB;AACA,QAAI,IAAA,CAAA,CAAA,EAAA,GAAA,GAAA,CAAI,UAAJ,IAAW,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,QAAA,KAAY,IAAI,KAAM,CAAA,QAAA,KAAa,IAAI,QAAU,EAAA;AAC9D,UAAI,GAAA,CAAA,GAAA,CAAI,MAAM,QAAQ,CAAA,CAAA;AAAA,SACxB;AAAA,OACF;AAAA,KACD,CAAA,CAAA;AAAA,GACH,CAAA;AACA,EAAA,GAAA,CAAI,QAAe,CAAA,CAAA;AACrB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC1DO,MAAM,qBAAwB,GAAA,kBAAA;AAc9B,SAAS,OAAO,KAAoB,EAAA;AACzC,EAAA,MAAM,WAAW,WAAY,EAAA,CAAA;AAC7B,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAI,SAAkB,KAAK,CAAA,CAAA;AACnD,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAI,SAAS,CAAC,CAAA,CAAA;AAC9C,EAAA,MAAM,YAAY,MAAgB,EAAA,CAAA;AAClC,EAAA,SAAA,CAAU,OAAU,GAAA,MAAA,CAAA;AAEpB,EAAM,MAAA;AAAA,IACJ,UAAA;AAAA,IACA,WAAA;AAAA,IACA,kBAAA;AAAA,IACA,kBAAA;AAAA,IACA,WAAA;AAAA,IACA,SAAA;AAAA,IACA,QAAA;AAAA,IACA,OAAA;AAAA,IACA,OAAA;AAAA,GACE,GAAA,KAAA,CAAA;AACJ,EAAW,MAAA,aAAA,GAAA,SAAA,CAAkB,kBAAlB,EAAA,EAAA,CAAA,CAAA;AACX,EAAA,MAAM,iBAAsC,aAAc,CAAA,MAAA;AAAA,IACxD,CAAC,KAAU,GAAQ,KAAA;AACjB,MAAI,IAAA,aAAA,CAAc,GAAG,CAAA,KAAM,KAAW,CAAA,EAAA;AACpC,QAAI,GAAA,CAAA,GAAG,CAAI,GAAA,aAAA,CAAc,GAAG,CAAA,CAAA;AAAA,OAC9B;AACA,MAAO,OAAA,GAAA,CAAA;AAAA,KACT;AAAA,IACA,EAAC;AAAA,GACH,CAAA;AAEA,EAAA,MAAM,cAA6B,GAAA;AAAA,IACjC,QAAA;AAAA,IACA,SAAA;AAAA,IACA,IAAA;AAAA,IACA,GAAG,MAAO,CAAA,MAAA,CAAO,cAAc,CAAA;AAAA,GACjC,CAAA;AAEA,EAAA,MAAM,WAAW,uBAAwB,EAAA,CAAA;AAEzC,EAAA,MAAM,OAAU,GAAA,OAAA,GACZ,WAAe,IAAA,kBAAA,GACf,WAAe,IAAA,kBAAA,CAAA;AAGnB,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,SAAU,CAAA,OAAA;AAAS,MAAA,OAAA;AACvB,IAAc,aAAA,CAAA,IAAA,CAAK,MAAO,EAAA,GAAI,GAAO,CAAA,CAAA;AAAA,GACvC,EAAG,CAAC,GAAI,QAAA,GAAW,CAAC,OAAO,CAAA,GAAI,EAAG,CAAC,CAAA,CAAA;AAEnC,EAAA,IAAI,CAAC,QAAU,EAAA;AACb,IAAO,OAAA,IAAA,CAAA;AAAA,GACT;AAEA,EAAA,MAAM,GAAM,GAAA,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAAA,CAAA,CAAA;AAOZ,EAAA,MAAM,WAAc,GAAA,OAAA,mBACjB,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAI,KAAO,EAAA,EAAE,OAAS,EAAA,MAAA,EAAQ,UAAY,EAAA,QAAA,EAAa,EAAA,EAAA,OAAQ,CAC9D,GAAA,IAAA,CAAA;AAEJ,EAAA,2CACG,KAAI,EAAA,EAAA,SAAA,EAAsB,OAAO,EAAE,QAAA,EAAU,YAC5C,EAAA,kBAAA,KAAA,CAAA,aAAA;AAAA,IAAC,cAAA;AAAA,IAAA;AAAA,MACC,GAAA,EAAK,CAAG,EAAA,cAAA,CAAe,MAAS,CAAA,EAAA,UAAA,CAAA,CAAA;AAAA,MAEhC,UAAY,EAAA,cAAA;AAAA,MACZ,OAAA;AAAA,MACA,QAAU,EAAA,CAAC,EAAE,MAAA,EAAa,KAAA;AACxB,QAAS,QAAA,CAAA,MAAA,CAAO,SAAS,CAAA,CAAA;AAAA,OAC3B;AAAA,MACA,QAAU,EAAA,CAAC,EAAE,MAAA,EAAa,KAAA;AACxB,QAAS,QAAA,CAAA,MAAA,CAAO,SAAS,CAAA,CAAA;AAAA,OAC3B;AAAA,MACA,OAAA,EAAS,MAAM,SAAA,CAAU,IAAI,CAAA;AAAA,MAC7B,MAAA,EAAQ,MAAM,SAAA,CAAU,KAAK,CAAA;AAAA,MAC7B,UAAY,EAAA,WAAA;AAAA,MAIZ,QAAU,EAAA,KAAA,CAAA;AAAA,MACV,WAAa,EAAA;AAAA,QACX,UAAY,EAAA;AAAA,UACV,SAAA;AAAA,SACF;AAAA,OACF;AAAA,KAAA;AAAA,GACF,EACC,4BACA,KAAA,CAAA,aAAA,CAAA,OAAA,EAAA,EAAM,yBAAyB,EAAE,MAAA,EAAQ,GAAI,EAAA,EAAG,CACnD,CAAA,CAAA;AAEJ,CAAA;AAEO,SAAS,cAAc,KAAoB,EAAA;AAChD,EAAA,uBACG,KAAA,CAAA,aAAA,CAAA,qBAAA,EAAA,IAAA,kBACE,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,cAAA,CAAA,EAAA,EAAW,MAAO,CACrB,CAAA,CAAA;AAEJ,CAAA;AAEO,SAAS,YAAa,CAAA;AAAA,EAC3B,SAAA;AAAA,EACA,cAAA;AACF,CAA6B,EAAA;AAC3B,EAAM,MAAA,cAAA,GAA2B,QAAQ,MAAM;AAC7C,IAAA,MAAM,OAAiB,EAAC,CAAA;AACxB,IAAqB,oBAAA,CAAA,cAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,cAAA,CAAgB,UAAY,EAAA,CAAC,GAAQ,KAAA;AAhJ9D,MAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,CAAA;AAiJM,MAAA,MAAM,OAAM,EAAK,GAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,GAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,GAAA,CAAA,IAAA,KAAL,IAAW,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,WAAA,KAAX,mBAAwB,WAAxB,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,IAAA,CAAA,EAAA,CAAA,CAAA;AACZ,MAAA,IAAI,GAAK,EAAA;AACP,QAAA,IAAA,CAAK,KAAK,GAAG,CAAA,CAAA;AAAA,OACf;AAAA,KACD,CAAA,CAAA;AACD,IAAO,OAAA,IAAA,CAAA;AAAA,GACN,EAAA,CAAC,cAAgB,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,cAAA,CAAA,UAAU,CAAC,CAAA,CAAA;AAE/B,EAAM,MAAA,kBAAA,GAA+B,QAAQ,MAAM;AACjD,IAAA,MAAM,OAAiB,EAAC,CAAA;AACxB,IAAqB,oBAAA,CAAA,cAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,cAAA,CAAgB,OAAS,EAAA,CAAC,GAAQ,KAAA;AA3J3D,MAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,CAAA;AA4JM,MAAA,MAAM,OAAM,EAAK,GAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,GAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,GAAA,CAAA,IAAA,KAAL,IAAW,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,WAAA,KAAX,mBAAwB,WAAxB,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,IAAA,CAAA,EAAA,CAAA,CAAA;AACZ,MAAA,IAAI,GAAO,IAAA,GAAA,CAAI,QAAS,CAAA,SAAS,CAAG,EAAA;AAClC,QAAA,IAAA,CAAK,IAAK,CAAA,GAAA,CAAI,OAAQ,CAAA,SAAA,EAAW,EAAE,CAAC,CAAA,CAAA;AAAA,OACtC;AAAA,KACD,CAAA,CAAA;AACD,IAAO,OAAA,IAAA,CAAA;AAAA,GACN,EAAA,CAAC,cAAgB,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,cAAA,CAAA,OAAO,CAAC,CAAA,CAAA;AAE5B,EAAM,MAAA,YAAA,GAAe,CAAC,OAAA,EAAiB,GAAiB,KAAA;AACtD,IAAA,IAAI,GAAK,EAAA;AACP,MAAU,SAAA,CAAA,YAAA;AAAA,QACR;AAAA,UACE,IAAM,EAAA,WAAA;AAAA,UACN,IAAA,EAAM,GAAG,qBAAmC,CAAA,WAAA,EAAA,OAAA,CAAA,CAAA;AAAA,UAC5C,OAAO,EAAC;AAAA,SACV;AAAA,QACA,YAAA;AAAA,OACF,CAAA;AACA,MAAU,SAAA,CAAA,YAAA;AAAA,QACR;AAAA,UACE,IAAM,EAAA,WAAA;AAAA,UACN,IAAA,EAAM,GAAG,qBAAiC,CAAA,SAAA,EAAA,OAAA,CAAA,CAAA;AAAA,UAC1C,OAAO,EAAC;AAAA,SACV;AAAA,QACA,SAAA;AAAA,OACF,CAAA;AAAA,KACK,MAAA;AACL,MAAA,MAAM,aAAa,cAAe,CAAA,OAAA;AAAA,QAAQ,CAAC,GAAK,EAAA,CAAA,KAC9C,GAAQ,KAAA,OAAA,GAAU,IAAI,EAAC;AAAA,OACzB,CAAA;AACA,MAAA,UAAA,CACG,SACA,CAAA,OAAA;AAAA,QACC,CAAC,CAAM,KAAA,CAAA,KAAM,MAAM,SAAU,CAAA,gBAAA,CAAiB,GAAG,YAAY,CAAA;AAAA,OAC/D,CAAA;AAEF,MAAA,MAAM,cAAc,kBAAmB,CAAA,OAAA;AAAA,QAAQ,CAAC,GAAK,EAAA,CAAA,KACnD,GAAQ,KAAA,OAAA,GAAU,IAAI,EAAC;AAAA,OACzB,CAAA;AACA,MACG,WAAA,CAAA,OAAA,EACA,CAAA,OAAA,CAAQ,CAAC,CAAA,KAAM,CAAM,KAAA,CAAA,CAAA,IAAM,SAAU,CAAA,gBAAA,CAAiB,CAAG,EAAA,SAAS,CAAC,CAAA,CAAA;AAAA,KACxE;AAAA,GACF,CAAA;AAEA,EACE,uBAAA,KAAA,CAAA,aAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,KAAO,EAAA;AAAA,QACL,YAAc,EAAA,EAAA;AAAA,QACd,aAAe,EAAA,EAAA;AAAA,QACf,YAAc,EAAA,iBAAA;AAAA,OAChB;AAAA,KAAA;AAAA,oBAEA,KAAA,CAAA,aAAA,CAAC,WAAE,4EAGH,CAAA;AAAA,oBACA,KAAA,CAAA,aAAA,CAAC,WAAE,CAGH,kGAAA,CAAA,CAAA;AAAA,IACC,aAAA,CAAc,GAAI,CAAA,CAAC,GAClB,qBAAA,KAAA,CAAA,aAAA;AAAA,MAAC,OAAA;AAAA,MAAA;AAAA,QACC,GAAK,EAAA,GAAA;AAAA,QACL,gBAAc,CAAiB,cAAA,EAAA,GAAA,CAAA,CAAA;AAAA,QAC/B,KAAO,EAAA;AAAA,UACL,OAAS,EAAA,MAAA;AAAA,UACT,cAAgB,EAAA,eAAA;AAAA,UAChB,YAAc,EAAA,CAAA;AAAA,UACd,KAAO,EAAA,SAAA;AAAA,SACT;AAAA,OAAA;AAAA,sBAEA,KAAA,CAAA,aAAA,CAAC,cAAM,GAAI,CAAA;AAAA,sBACX,KAAA,CAAA,aAAA;AAAA,QAAC,MAAA;AAAA,QAAA;AAAA,UACC,IAAK,EAAA,OAAA;AAAA,UACL,SACE,cAAe,CAAA,QAAA,CAAS,GAAG,CAAK,IAAA,kBAAA,CAAmB,SAAS,GAAG,CAAA;AAAA,UAEjE,QAAU,EAAA,CAAC,OAAY,KAAA,YAAA,CAAa,KAAK,OAAO,CAAA;AAAA,SAAA;AAAA,OAClD;AAAA,KAEH,CAAA;AAAA,GACH,CAAA;AAEJ,CAAA;AAEO,SAAS,eAAe,MAAuB,EAAA;AACpD,EAAA,uBAAA,CAAwB,QAAQ,aAAe,EAAA;AAAA,IAC7C,IAAM,EAAA,qBAAA;AAAA,IACN,WAAa,EAAA,yBAAA;AAAA,IACb,aAAe,EAAA;AAAA,MACb,WAAa,EAAA,KAAA;AAAA,MACb,WAAa,EAAA,OAAA;AAAA,MACb,WAAa,EAAA,kBAAA;AAAA,MACb,YAAc,EAAA,KAAA;AAAA,MACd,OAAS,EAAA,MAAA;AAAA,MACT,KAAO,EAAA,OAAA;AAAA,KACT;AAAA,IACA,OAAS,EAAA;AAAA,MACP;AAAA,QACE,IAAM,EAAA,eAAA;AAAA,QACN,OAAS,EAAA,YAAA;AAAA,OACX;AAAA,KACF;AAAA,IACA,KAAO,EAAA;AAAA,MACL,OAAS,EAAA;AAAA,QACP,WAAa,EAAA,0BAAA;AAAA,QACb,IAAM,EAAA,SAAA;AAAA,QACN,YAAc,EAAA,KAAA;AAAA,OAChB;AAAA,MACA,WAAa,EAAA;AAAA,QACX,IAAM,EAAA,QAAA;AAAA,QACN,WAAa,EAAA,cAAA;AAAA,QACb,QAAU,EAAA,IAAA;AAAA,QACV,gBAAkB,EAAA,oBAAA;AAAA,QAClB,WAAa,EAAA,wBAAA;AAAA,QACb,MAAA,EAAQ,CAAC,EAAA,KAAO,EAAG,CAAA,OAAA;AAAA,OACrB;AAAA,MACA,WAAa,EAAA;AAAA,QACX,IAAM,EAAA,QAAA;AAAA,QACN,WAAa,EAAA,cAAA;AAAA,QACb,QAAU,EAAA,IAAA;AAAA,QACV,gBAAkB,EAAA,oBAAA;AAAA,QAClB,WAAa,EAAA,gCAAA;AAAA,QACb,MAAQ,EAAA,CAAC,EAAO,KAAA,CAAC,EAAG,CAAA,OAAA;AAAA,OACtB;AAAA,MACA,UAAY,EAAA;AAAA,QACV,IAAM,EAAA,MAAA;AAAA,QACN,eAAiB,EAAA,IAAA;AAAA,QACjB,mBAAmB,aAAc,CAAA,GAAA;AAAA,UAC/B,CAAC,GAAQ,KAAA,CAAA,EAAG,qBAAmC,CAAA,WAAA,EAAA,GAAA,CAAA,CAAA;AAAA,SACjD;AAAA,OACF;AAAA,MACA,OAAS,EAAA;AAAA,QACP,IAAM,EAAA,MAAA;AAAA,QACN,eAAiB,EAAA,IAAA;AAAA,QACjB,mBAAmB,aAAc,CAAA,GAAA;AAAA,UAC/B,CAAC,GAAQ,KAAA,CAAA,EAAG,qBAAiC,CAAA,SAAA,EAAA,GAAA,CAAA,CAAA;AAAA,SAC/C;AAAA,OACF;AAAA,MACA,QAAU,EAAA;AAAA,QACR,IAAM,EAAA,cAAA;AAAA,QACN,UAAU,CAAC,EAAE,MAAM,SAAW,EAAA,IAAA,EAAM,UAAU,CAAA;AAAA,OAChD;AAAA,KACF;AAAA,IACA,MAAQ,EAAA;AAAA,MACN,OAAS,EAAA;AAAA,QACP,IAAM,EAAA,UAAA;AAAA,QACN,YAAc,EAAA,QAAA;AAAA,QACd,SAAW,EAAA,aAAA;AAAA,QACX,YAAc,EAAA,UAAA;AAAA,OAChB;AAAA,KACF;AAAA,IACA,UAAY,EAAA,eAAA;AAAA,IACZ,UAAY,EAAA,2CAAA;AAAA,GACb,CAAA,CAAA;AACH;;;;"}