You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

1 lines
19 KiB

{"version":3,"file":"devtools.js","sources":["src/constants.js","devtools/devtools.js","devtools/index.js"],"sourcesContent":["// render modes\n\nexport const NO_RENDER = 0;\nexport const SYNC_RENDER = 1;\nexport const FORCE_RENDER = 2;\nexport const ASYNC_RENDER = 3;\n\n\nexport const ATTR_KEY = '__preactattr_';\n\n// DOM properties that should NOT have \"px\" added when numeric\nexport const IS_NON_DIMENSIONAL = /acit|ex(?:s|g|n|p|$)|rph|ows|mnc|ntw|ine[ch]|zoo|^ord/i;\n\n","/* global __REACT_DEVTOOLS_GLOBAL_HOOK__ */\n\nimport { options } from 'preact';\n\n// Internal helpers from preact\nimport { ATTR_KEY } from '../src/constants';\n\n/**\n * Return a ReactElement-compatible object for the current state of a preact\n * component.\n */\nfunction createReactElement(component) {\n\treturn {\n\t\ttype: component.constructor,\n\t\tkey: component.key,\n\t\tref: null, // Unsupported\n\t\tprops: component.props\n\t};\n}\n\n/**\n * Create a ReactDOMComponent-compatible object for a given DOM node rendered\n * by preact.\n *\n * This implements the subset of the ReactDOMComponent interface that\n * React DevTools requires in order to display DOM nodes in the inspector with\n * the correct type and properties.\n *\n * @param {Node} node\n */\nfunction createReactDOMComponent(node) {\n\tconst childNodes = node.nodeType === Node.ELEMENT_NODE ?\n\t\tArray.from(node.childNodes) : [];\n\n\tconst isText = node.nodeType === Node.TEXT_NODE;\n\n\treturn {\n\t\t// --- ReactDOMComponent interface\n\t\t_currentElement: isText ? node.textContent : {\n\t\t\ttype: node.nodeName.toLowerCase(),\n\t\t\tprops: node[ATTR_KEY]\n\t\t},\n\t\t_renderedChildren: childNodes.map(child => {\n\t\t\tif (child._component) {\n\t\t\t\treturn updateReactComponent(child._component);\n\t\t\t}\n\t\t\treturn updateReactComponent(child);\n\t\t}),\n\t\t_stringText: isText ? node.textContent : null,\n\n\t\t// --- Additional properties used by preact devtools\n\n\t\t// A flag indicating whether the devtools have been notified about the\n\t\t// existence of this component instance yet.\n\t\t// This is used to send the appropriate notifications when DOM components\n\t\t// are added or updated between composite component updates.\n\t\t_inDevTools: false,\n\t\tnode\n\t};\n}\n\n/**\n * Return the name of a component created by a `ReactElement`-like object.\n *\n * @param {ReactElement} element\n */\nfunction typeName(element) {\n\tif (typeof element.type === 'function') {\n\t\treturn element.type.displayName || element.type.name;\n\t}\n\treturn element.type;\n}\n\n/**\n * Return a ReactCompositeComponent-compatible object for a given preact\n * component instance.\n *\n * This implements the subset of the ReactCompositeComponent interface that\n * the DevTools requires in order to walk the component tree and inspect the\n * component's properties.\n *\n * See https://github.com/facebook/react-devtools/blob/e31ec5825342eda570acfc9bcb43a44258fceb28/backend/getData.js\n */\nfunction createReactCompositeComponent(component) {\n\tconst _currentElement = createReactElement(component);\n\tconst node = component.base;\n\n\tlet instance = {\n\t\t// --- ReactDOMComponent properties\n\t\tgetName() {\n\t\t\treturn typeName(_currentElement);\n\t\t},\n\t\t_currentElement: createReactElement(component),\n\t\tprops: component.props,\n\t\tstate: component.state,\n\t\tforceUpdate: component.forceUpdate && component.forceUpdate.bind(component),\n\t\tsetState: component.setState && component.setState.bind(component),\n\n\t\t// --- Additional properties used by preact devtools\n\t\tnode\n\t};\n\n\t// React DevTools exposes the `_instance` field of the selected item in the\n\t// component tree as `$r` in the console. `_instance` must refer to a\n\t// React Component (or compatible) class instance with `props` and `state`\n\t// fields and `setState()`, `forceUpdate()` methods.\n\tinstance._instance = component;\n\n\t// If the root node returned by this component instance's render function\n\t// was itself a composite component, there will be a `_component` property\n\t// containing the child component instance.\n\tif (component._component) {\n\t\tinstance._renderedComponent = updateReactComponent(component._component);\n\t} else {\n\t\t// Otherwise, if the render() function returned an HTML/SVG element,\n\t\t// create a ReactDOMComponent-like object for the DOM node itself.\n\t\tinstance._renderedComponent = updateReactComponent(node);\n\t}\n\n\treturn instance;\n}\n\n/**\n * Map of Component|Node to ReactDOMComponent|ReactCompositeComponent-like\n * object.\n *\n * The same React*Component instance must be used when notifying devtools\n * about the initial mount of a component and subsequent updates.\n */\nlet instanceMap = typeof Map==='function' && new Map();\n\n/**\n * Update (and create if necessary) the ReactDOMComponent|ReactCompositeComponent-like\n * instance for a given preact component instance or DOM Node.\n *\n * @param {Component|Node} componentOrNode\n */\nfunction updateReactComponent(componentOrNode) {\n\tconst newInstance = componentOrNode instanceof Node ?\n\t\tcreateReactDOMComponent(componentOrNode) :\n\t\tcreateReactCompositeComponent(componentOrNode);\n\tif (instanceMap.has(componentOrNode)) {\n\t\tlet inst = instanceMap.get(componentOrNode);\n\t\tObject.assign(inst, newInstance);\n\t\treturn inst;\n\t}\n\tinstanceMap.set(componentOrNode, newInstance);\n\treturn newInstance;\n}\n\nfunction nextRootKey(roots) {\n\treturn '.' + Object.keys(roots).length;\n}\n\n/**\n * Find all root component instances rendered by preact in `node`'s children\n * and add them to the `roots` map.\n *\n * @param {DOMElement} node\n * @param {[key: string] => ReactDOMComponent|ReactCompositeComponent}\n */\nfunction findRoots(node, roots) {\n\tArray.from(node.childNodes).forEach(child => {\n\t\tif (child._component) {\n\t\t\troots[nextRootKey(roots)] = updateReactComponent(child._component);\n\t\t} else {\n\t\t\tfindRoots(child, roots);\n\t\t}\n\t});\n}\n\n/**\n * Create a bridge for exposing preact's component tree to React DevTools.\n *\n * It creates implementations of the interfaces that ReactDOM passes to\n * devtools to enable it to query the component tree and hook into component\n * updates.\n *\n * See https://github.com/facebook/react/blob/59ff7749eda0cd858d5ee568315bcba1be75a1ca/src/renderers/dom/ReactDOM.js\n * for how ReactDOM exports its internals for use by the devtools and\n * the `attachRenderer()` function in\n * https://github.com/facebook/react-devtools/blob/e31ec5825342eda570acfc9bcb43a44258fceb28/backend/attachRenderer.js\n * for how the devtools consumes the resulting objects.\n */\nfunction createDevToolsBridge() {\n\t// The devtools has different paths for interacting with the renderers from\n\t// React Native, legacy React DOM and current React DOM.\n\t//\n\t// Here we emulate the interface for the current React DOM (v15+) lib.\n\n\t// ReactDOMComponentTree-like object\n\tconst ComponentTree = {\n\t\tgetNodeFromInstance(instance) {\n\t\t\treturn instance.node;\n\t\t},\n\t\tgetClosestInstanceFromNode(node) {\n\t\t\twhile (node && !node._component) {\n\t\t\t\tnode = node.parentNode;\n\t\t\t}\n\t\t\treturn node ? updateReactComponent(node._component) : null;\n\t\t}\n\t};\n\n\t// Map of root ID (the ID is unimportant) to component instance.\n\tlet roots = {};\n\tfindRoots(document.body, roots);\n\n\t// ReactMount-like object\n\t//\n\t// Used by devtools to discover the list of root component instances and get\n\t// notified when new root components are rendered.\n\tconst Mount = {\n\t\t_instancesByReactRootID: roots,\n\n\t\t// Stub - React DevTools expects to find this method and replace it\n\t\t// with a wrapper in order to observe new root components being added\n\t\t_renderNewRootComponent(/* instance, ... */) { }\n\t};\n\n\t// ReactReconciler-like object\n\tconst Reconciler = {\n\t\t// Stubs - React DevTools expects to find these methods and replace them\n\t\t// with wrappers in order to observe components being mounted, updated and\n\t\t// unmounted\n\t\tmountComponent(/* instance, ... */) { },\n\t\tperformUpdateIfNecessary(/* instance, ... */) { },\n\t\treceiveComponent(/* instance, ... */) { },\n\t\tunmountComponent(/* instance, ... */) { }\n\t};\n\n\t/** Notify devtools that a new component instance has been mounted into the DOM. */\n\tconst componentAdded = component => {\n\t\tconst instance = updateReactComponent(component);\n\t\tif (isRootComponent(component)) {\n\t\t\tinstance._rootID = nextRootKey(roots);\n\t\t\troots[instance._rootID] = instance;\n\t\t\tMount._renderNewRootComponent(instance);\n\t\t}\n\t\tvisitNonCompositeChildren(instance, childInst => {\n\t\t\tchildInst._inDevTools = true;\n\t\t\tReconciler.mountComponent(childInst);\n\t\t});\n\t\tReconciler.mountComponent(instance);\n\t};\n\n\t/** Notify devtools that a component has been updated with new props/state. */\n\tconst componentUpdated = component => {\n\t\tconst prevRenderedChildren = [];\n\t\tvisitNonCompositeChildren(instanceMap.get(component), childInst => {\n\t\t\tprevRenderedChildren.push(childInst);\n\t\t});\n\n\t\t// Notify devtools about updates to this component and any non-composite\n\t\t// children\n\t\tconst instance = updateReactComponent(component);\n\t\tReconciler.receiveComponent(instance);\n\t\tvisitNonCompositeChildren(instance, childInst => {\n\t\t\tif (!childInst._inDevTools) {\n\t\t\t\t// New DOM child component\n\t\t\t\tchildInst._inDevTools = true;\n\t\t\t\tReconciler.mountComponent(childInst);\n\t\t\t} else {\n\t\t\t\t// Updated DOM child component\n\t\t\t\tReconciler.receiveComponent(childInst);\n\t\t\t}\n\t\t});\n\n\t\t// For any non-composite children that were removed by the latest render,\n\t\t// remove the corresponding ReactDOMComponent-like instances and notify\n\t\t// the devtools\n\t\tprevRenderedChildren.forEach(childInst => {\n\t\t\tif (!document.body.contains(childInst.node)) {\n\t\t\t\tinstanceMap.delete(childInst.node);\n\t\t\t\tReconciler.unmountComponent(childInst);\n\t\t\t}\n\t\t});\n\t};\n\n\t/** Notify devtools that a component has been unmounted from the DOM. */\n\tconst componentRemoved = component => {\n\t\tconst instance = updateReactComponent(component);\n\t\tvisitNonCompositeChildren(childInst => {\n\t\t\tinstanceMap.delete(childInst.node);\n\t\t\tReconciler.unmountComponent(childInst);\n\t\t});\n\t\tReconciler.unmountComponent(instance);\n\t\tinstanceMap.delete(component);\n\t\tif (instance._rootID) {\n\t\t\tdelete roots[instance._rootID];\n\t\t}\n\t};\n\n\treturn {\n\t\tcomponentAdded,\n\t\tcomponentUpdated,\n\t\tcomponentRemoved,\n\n\t\t// Interfaces passed to devtools via __REACT_DEVTOOLS_GLOBAL_HOOK__.inject()\n\t\tComponentTree,\n\t\tMount,\n\t\tReconciler\n\t};\n}\n\n/**\n * Return `true` if a preact component is a top level component rendered by\n * `render()` into a container Element.\n */\nfunction isRootComponent(component) {\n\t// `_parentComponent` is actually `__u` after minification\n\tif (component._parentComponent || component.__u) {\n\t\t// Component with a composite parent\n\t\treturn false;\n\t}\n\tif (component.base.parentElement && component.base.parentElement[ATTR_KEY]) {\n\t\t// Component with a parent DOM element rendered by Preact\n\t\treturn false;\n\t}\n\treturn true;\n}\n\n/**\n * Visit all child instances of a ReactCompositeComponent-like object that are\n * not composite components (ie. they represent DOM elements or text)\n *\n * @param {Component} component\n * @param {(Component) => void} visitor\n */\nfunction visitNonCompositeChildren(component, visitor) {\n\tif (component._renderedComponent) {\n\t\tif (!component._renderedComponent._component) {\n\t\t\tvisitor(component._renderedComponent);\n\t\t\tvisitNonCompositeChildren(component._renderedComponent, visitor);\n\t\t}\n\t} else if (component._renderedChildren) {\n\t\tcomponent._renderedChildren.forEach(child => {\n\t\t\tvisitor(child);\n\t\t\tif (!child._component) visitNonCompositeChildren(child, visitor);\n\t\t});\n\t}\n}\n\n/**\n * Create a bridge between the preact component tree and React's dev tools\n * and register it.\n *\n * After this function is called, the React Dev Tools should be able to detect\n * \"React\" on the page and show the component tree.\n *\n * This function hooks into preact VNode creation in order to expose functional\n * components correctly, so it should be called before the root component(s)\n * are rendered.\n *\n * Returns a cleanup function which unregisters the hooks.\n */\nexport function initDevTools() {\n\tif (typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ === 'undefined') {\n\t\t// React DevTools are not installed\n\t\treturn;\n\t}\n\n\t// Notify devtools when preact components are mounted, updated or unmounted\n\tconst bridge = createDevToolsBridge();\n\n\tconst nextAfterMount = options.afterMount;\n\toptions.afterMount = component => {\n\t\tbridge.componentAdded(component);\n\t\tif (nextAfterMount) nextAfterMount(component);\n\t};\n\n\tconst nextAfterUpdate = options.afterUpdate;\n\toptions.afterUpdate = component => {\n\t\tbridge.componentUpdated(component);\n\t\tif (nextAfterUpdate) nextAfterUpdate(component);\n\t};\n\n\tconst nextBeforeUnmount = options.beforeUnmount;\n\toptions.beforeUnmount = component => {\n\t\tbridge.componentRemoved(component);\n\t\tif (nextBeforeUnmount) nextBeforeUnmount(component);\n\t};\n\n\t// Notify devtools about this instance of \"React\"\n\t__REACT_DEVTOOLS_GLOBAL_HOOK__.inject(bridge);\n\n\treturn () => {\n\t\toptions.afterMount = nextAfterMount;\n\t\toptions.afterUpdate = nextAfterUpdate;\n\t\toptions.beforeUnmount = nextBeforeUnmount;\n\t};\n}\n","import { initDevTools } from './devtools';\n\ninitDevTools();\n\n"],"names":["options"],"mappings":";;;;;;;;AAEO,AACA,AACA,AACA,AAGA,IAAM,QAAQ,GAAG,eAAe,CAAC;;;;ACNxC;AAGA;;;;AAMA,SAAS,kBAAkB,CAAC,SAAS,EAAE;QAC/B;MACF,EAAE,SAAS,CAAC,WAAW;KACxB,EAAE,SAAS,CAAC,GAAG;KACf,EAAE,IAAI;OACJ,EAAE,SAAS,CAAC,KAAK;EACtB,CAAC;CACF;;;;;;;;;;;;AAYD,SAAS,uBAAuB,CAAC,IAAI,EAAE;KAChC,UAAU,GAAG,IAAI,CAAC,QAAQ,KAAK,IAAI,CAAC,YAAY,GACrD,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC;;KAE5B,MAAM,GAAG,IAAI,CAAC,QAAQ,KAAK,IAAI,CAAC,SAAS,CAAC;;QAEzC;;iBAES,EAAE,MAAM,GAAG,IAAI,CAAC,WAAW,GAAG;OACxC,EAAE,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE;QAC5B,EAAE,IAAI,CAAC,QAAQ,CAAC;GACrB;mBACgB,EAAE,UAAU,CAAC,GAAG,CAAC,UAAA,KAAK,EAAI;OACtC,KAAK,CAAC,UAAU,EAAE;WACd,oBAAoB,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IAC9C;UACM,oBAAoB,CAAC,KAAK,CAAC,CAAC;GACnC,CAAC;aACS,EAAE,MAAM,GAAG,IAAI,CAAC,WAAW,GAAG,IAAI;;;;;;;;aAQlC,EAAE,KAAK;MACd,EAAJ,IAAI;EACJ,CAAC;CACF;;;;;;;AAOD,SAAS,QAAQ,CAAC,OAAO,EAAE;KACtB,OAAO,OAAO,CAAC,IAAI,KAAK,UAAU,EAAE;SAChC,OAAO,CAAC,IAAI,CAAC,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;EACrD;QACM,OAAO,CAAC,IAAI,CAAC;CACpB;;;;;;;;;;;;AAYD,SAAS,6BAA6B,CAAC,SAAS,EAAE;KAC3C,eAAe,GAAG,kBAAkB,CAAC,SAAS,CAAC,CAAC;KAChD,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC;;KAExB,QAAQ,GAAG;;SAEP,EAAA,mBAAG;UACF,QAAQ,CAAC,eAAe,CAAC,CAAC;GACjC;iBACc,EAAE,kBAAkB,CAAC,SAAS,CAAC;OACzC,EAAE,SAAS,CAAC,KAAK;OACjB,EAAE,SAAS,CAAC,KAAK;aACX,EAAE,SAAS,CAAC,WAAW,IAAI,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC;UACnE,EAAE,SAAS,CAAC,QAAQ,IAAI,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC;;;MAG9D,EAAJ,IAAI;EACJ,CAAC;;;;;;SAMM,CAAC,SAAS,GAAG,SAAS,CAAC;;;;;KAK3B,SAAS,CAAC,UAAU,EAAE;UACjB,CAAC,kBAAkB,GAAG,oBAAoB,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;EACzE,MAAM;;;UAGE,CAAC,kBAAkB,GAAG,oBAAoB,CAAC,IAAI,CAAC,CAAC;EACzD;;QAEM,QAAQ,CAAC;CAChB;;;;;;;;;AASD,IAAI,WAAW,GAAG,OAAO,GAAG,KAAG,UAAU,IAAI,IAAI,GAAG,EAAE,CAAC;;;;;;;;AAQvD,SAAS,oBAAoB,CAAC,eAAe,EAAE;KACxC,WAAW,GAAG,eAAe,YAAY,IAAI,GAClD,uBAAuB,CAAC,eAAe,CAAC,GACxC,6BAA6B,CAAC,eAAe,CAAC,CAAC;KAC5C,WAAW,CAAC,GAAG,CAAC,eAAe,CAAC,EAAE;MACjC,IAAI,GAAG,WAAW,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;QACtC,CAAC,MAAM,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;SAC1B,IAAI,CAAC;EACZ;YACU,CAAC,GAAG,CAAC,eAAe,EAAE,WAAW,CAAC,CAAC;QACvC,WAAW,CAAC;CACnB;;AAED,SAAS,WAAW,CAAC,KAAK,EAAE;QACpB,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC;CACvC;;;;;;;;;AASD,SAAS,SAAS,CAAC,IAAI,EAAE,KAAK,EAAE;MAC1B,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,UAAA,KAAK,EAAI;MACxC,KAAK,CAAC,UAAU,EAAE;QAChB,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,GAAG,oBAAoB,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;GACnE,MAAM;YACG,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;GACxB;EACD,CAAC,CAAC;CACH;;;;;;;;;;;;;;;AAeD,SAAS,oBAAoB,GAAG;;;;;;;KAOzB,aAAa,GAAG;qBACF,EAAA,6BAAC,QAAQ,EAAE;UACtB,QAAQ,CAAC,IAAI,CAAC;GACrB;4BACyB,EAAA,oCAAC,IAAI,EAAE;UACzB,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;QAC5B,GAAG,IAAI,CAAC,UAAU,CAAC;IACvB;UACM,IAAI,GAAG,oBAAoB,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC;GAC3D;EACD,CAAC;;;KAGE,KAAK,GAAG,EAAE,CAAC;UACN,CAAC,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;;;;;;KAM1B,KAAK,GAAG;yBACU,EAAE,KAAK;;;;yBAIP,EAAA,sDAAsB,EAAG;EAChD,CAAC;;;KAGI,UAAU,GAAG;;;;gBAIJ,EAAA,6CAAsB,EAAG;0BACf,EAAA,uDAAsB,EAAG;kBACjC,EAAA,+CAAsB,EAAG;kBACzB,EAAA,+CAAsB,EAAG;EACzC,CAAC;;;KAGI,cAAc,GAAG,SAAjB,cAAc,CAAG,SAAS,EAAI;MAC7B,QAAQ,GAAG,oBAAoB,CAAC,SAAS,CAAC,CAAC;MAC7C,eAAe,CAAC,SAAS,CAAC,EAAE;WACvB,CAAC,OAAO,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;QACjC,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,QAAQ,CAAC;QAC9B,CAAC,uBAAuB,CAAC,QAAQ,CAAC,CAAC;GACxC;2BACwB,CAAC,QAAQ,EAAE,UAAA,SAAS,EAAI;YACvC,CAAC,WAAW,GAAG,IAAI,CAAC;aACnB,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;GACrC,CAAC,CAAC;YACO,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;EACpC,CAAC;;;KAGI,gBAAgB,GAAG,SAAnB,gBAAgB,CAAG,SAAS,EAAI;MAC/B,oBAAoB,GAAG,EAAE,CAAC;2BACP,CAAC,WAAW,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,UAAA,SAAS,EAAI;uBAC9C,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;GACrC,CAAC,CAAC;;;;MAIG,QAAQ,GAAG,oBAAoB,CAAC,SAAS,CAAC,CAAC;YACvC,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;2BACb,CAAC,QAAQ,EAAE,UAAA,SAAS,EAAI;OAC5C,CAAC,SAAS,CAAC,WAAW,EAAE;;aAElB,CAAC,WAAW,GAAG,IAAI,CAAC;cACnB,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;IACrC,MAAM;;cAEI,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC;IACvC;GACD,CAAC,CAAC;;;;;sBAKiB,CAAC,OAAO,CAAC,UAAA,SAAS,EAAI;OACrC,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE;eACjC,UAAO,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;cACzB,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC;IACvC;GACD,CAAC,CAAC;EACH,CAAC;;;KAGI,gBAAgB,GAAG,SAAnB,gBAAgB,CAAG,SAAS,EAAI;MAC/B,QAAQ,GAAG,oBAAoB,CAAC,SAAS,CAAC,CAAC;2BACxB,CAAC,UAAA,SAAS,EAAI;cAC3B,UAAO,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;aACzB,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC;GACvC,CAAC,CAAC;YACO,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;aAC3B,UAAO,CAAC,SAAS,CAAC,CAAC;MAC1B,QAAQ,CAAC,OAAO,EAAE;UACd,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;GAC/B;EACD,CAAC;;QAEK;gBACQ,EAAd,cAAc;kBACE,EAAhB,gBAAgB;kBACA,EAAhB,gBAAgB;;;eAGH,EAAb,aAAa;OACR,EAAL,KAAK;YACK,EAAV,UAAU;EACV,CAAC;CACF;;;;;;AAMD,SAAS,eAAe,CAAC,SAAS,EAAE;;KAE/B,SAAS,CAAC,gBAAgB,IAAI,SAAS,CAAC,GAAG,EAAE;;SAEzC,KAAK,CAAC;EACb;KACG,SAAS,CAAC,IAAI,CAAC,aAAa,IAAI,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,EAAE;;SAEpE,KAAK,CAAC;EACb;QACM,IAAI,CAAC;CACZ;;;;;;;;;AASD,SAAS,yBAAyB,CAAC,SAAS,EAAE,OAAO,EAAE;KAClD,SAAS,CAAC,kBAAkB,EAAE;MAC7B,CAAC,SAAS,CAAC,kBAAkB,CAAC,UAAU,EAAE;UACtC,CAAC,SAAS,CAAC,kBAAkB,CAAC,CAAC;4BACb,CAAC,SAAS,CAAC,kBAAkB,EAAE,OAAO,CAAC,CAAC;GACjE;EACD,MAAM,IAAI,SAAS,CAAC,iBAAiB,EAAE;WAC9B,CAAC,iBAAiB,CAAC,OAAO,CAAC,UAAA,KAAK,EAAI;UACrC,CAAC,KAAK,CAAC,CAAC;OACX,CAAC,KAAK,CAAC,UAAU,EAAE,yBAAyB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;GACjE,CAAC,CAAC;EACH;CACD;;;;;;;;;;;;;;;;AAeM,SAAS,YAAY,GAAG;KAC1B,OAAO,8BAA8B,KAAK,WAAW,EAAE;;SAEnD;EACP;;;KAGK,MAAM,GAAG,oBAAoB,EAAE,CAAC;;KAEhC,cAAc,GAAGA,cAAO,CAAC,UAAU,CAAC;eACnC,CAAC,UAAU,GAAG,UAAA,SAAS,EAAI;QAC3B,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;MAC7B,cAAc,EAAE,cAAc,CAAC,SAAS,CAAC,CAAC;EAC9C,CAAC;;KAEI,eAAe,GAAGA,cAAO,CAAC,WAAW,CAAC;eACrC,CAAC,WAAW,GAAG,UAAA,SAAS,EAAI;QAC5B,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC;MAC/B,eAAe,EAAE,eAAe,CAAC,SAAS,CAAC,CAAC;EAChD,CAAC;;KAEI,iBAAiB,GAAGA,cAAO,CAAC,aAAa,CAAC;eACzC,CAAC,aAAa,GAAG,UAAA,SAAS,EAAI;QAC9B,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC;MAC/B,iBAAiB,EAAE,iBAAiB,CAAC,SAAS,CAAC,CAAC;EACpD,CAAC;;;+BAG4B,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;;QAEvC,YAAM;gBACL,CAAC,UAAU,GAAG,cAAc,CAAC;gBAC7B,CAAC,WAAW,GAAG,eAAe,CAAC;gBAC/B,CAAC,aAAa,GAAG,iBAAiB,CAAC;EAC1C,CAAC;;;ACnYH,YAAY,EAAE;;"}