selective-ui 1.0.2 → 1.0.3

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 (67) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +7 -2
  3. package/dist/selective-ui.css +567 -567
  4. package/dist/selective-ui.css.map +1 -1
  5. package/dist/selective-ui.esm.js +6046 -6046
  6. package/dist/selective-ui.esm.js.map +1 -1
  7. package/dist/selective-ui.esm.min.js +1 -1
  8. package/dist/selective-ui.esm.min.js.br +0 -0
  9. package/dist/selective-ui.min.js +1 -1
  10. package/dist/selective-ui.min.js.br +0 -0
  11. package/dist/selective-ui.umd.js +6046 -6046
  12. package/dist/selective-ui.umd.js.map +1 -1
  13. package/package.json +68 -68
  14. package/src/css/components/accessorybox.css +63 -63
  15. package/src/css/components/directive.css +19 -19
  16. package/src/css/components/empty-state.css +25 -25
  17. package/src/css/components/loading-state.css +25 -25
  18. package/src/css/components/optgroup.css +61 -61
  19. package/src/css/components/option-handle.css +33 -33
  20. package/src/css/components/option.css +129 -129
  21. package/src/css/components/placeholder.css +14 -14
  22. package/src/css/components/popup.css +38 -38
  23. package/src/css/components/searchbox.css +28 -28
  24. package/src/css/components/selectbox.css +53 -53
  25. package/src/css/index.css +74 -74
  26. package/src/js/adapter/mixed-adapter.js +434 -434
  27. package/src/js/components/accessorybox.js +124 -124
  28. package/src/js/components/directive.js +37 -37
  29. package/src/js/components/empty-state.js +67 -67
  30. package/src/js/components/loading-state.js +59 -59
  31. package/src/js/components/option-handle.js +113 -113
  32. package/src/js/components/placeholder.js +56 -56
  33. package/src/js/components/popup.js +470 -470
  34. package/src/js/components/searchbox.js +167 -167
  35. package/src/js/components/selectbox.js +692 -692
  36. package/src/js/core/base/adapter.js +162 -162
  37. package/src/js/core/base/model.js +59 -59
  38. package/src/js/core/base/recyclerview.js +82 -82
  39. package/src/js/core/base/view.js +62 -62
  40. package/src/js/core/model-manager.js +286 -286
  41. package/src/js/core/search-controller.js +521 -521
  42. package/src/js/index.js +136 -136
  43. package/src/js/models/group-model.js +142 -142
  44. package/src/js/models/option-model.js +236 -236
  45. package/src/js/services/dataset-observer.js +73 -73
  46. package/src/js/services/ea-observer.js +87 -87
  47. package/src/js/services/effector.js +403 -403
  48. package/src/js/services/refresher.js +39 -39
  49. package/src/js/services/resize-observer.js +151 -151
  50. package/src/js/services/select-observer.js +60 -60
  51. package/src/js/types/adapter.type.js +32 -32
  52. package/src/js/types/effector.type.js +23 -23
  53. package/src/js/types/ievents.type.js +10 -10
  54. package/src/js/types/libs.type.js +27 -27
  55. package/src/js/types/model.type.js +11 -11
  56. package/src/js/types/recyclerview.type.js +11 -11
  57. package/src/js/types/resize-observer.type.js +18 -18
  58. package/src/js/types/view.group.type.js +12 -12
  59. package/src/js/types/view.option.type.js +14 -14
  60. package/src/js/types/view.type.js +10 -10
  61. package/src/js/utils/guard.js +46 -46
  62. package/src/js/utils/ievents.js +83 -83
  63. package/src/js/utils/istorage.js +60 -60
  64. package/src/js/utils/libs.js +618 -618
  65. package/src/js/utils/selective.js +385 -385
  66. package/src/js/views/group-view.js +102 -102
  67. package/src/js/views/option-view.js +152 -152
@@ -1 +1 @@
1
- {"version":3,"file":"selective-ui.umd.js","sources":["../src/js/utils/istorage.js","../src/js/utils/libs.js","../src/js/utils/ievents.js","../src/js/services/refresher.js","../src/js/components/placeholder.js","../src/js/components/directive.js","../src/js/components/option-handle.js","../src/js/services/resize-observer.js","../src/js/core/base/model.js","../src/js/core/base/view.js","../src/js/views/group-view.js","../src/js/views/option-view.js","../src/js/models/option-model.js","../src/js/models/group-model.js","../src/js/core/base/adapter.js","../src/js/core/model-manager.js","../src/js/components/empty-state.js","../src/js/components/loading-state.js","../src/js/adapter/mixed-adapter.js","../src/js/components/popup.js","../src/js/components/searchbox.js","../src/js/services/effector.js","../src/js/core/base/recyclerview.js","../src/js/components/accessorybox.js","../src/js/core/search-controller.js","../src/js/services/select-observer.js","../src/js/services/dataset-observer.js","../src/js/components/selectbox.js","../src/js/services/ea-observer.js","../src/js/utils/selective.js","../src/js/utils/guard.js","../src/js/index.js"],"sourcesContent":["/**\r\n * @class\r\n */\r\nexport class iStorage {\r\n defaultConfig = {\r\n showPanel: true,\r\n accessoryStyle: \"top\",\r\n multiple: false,\r\n minWidth: \"50px\",\r\n width: \"0px\",\r\n offsetWidth: null,\r\n minHeight: \"30px\",\r\n height: \"30px\",\r\n panelHeight: \"220px\",\r\n panelMinHeight: \"100px\",\r\n disabled: false,\r\n readonly: false,\r\n selectall: true,\r\n keepSelected: true,\r\n placeholder: \"Chọn giá trị\",\r\n altMask: \"\",\r\n autoclose: false,\r\n autoscroll: true,\r\n autofocus: true,\r\n searchable: true,\r\n loadingfield: true,\r\n visible: true,\r\n skipError: false,\r\n customDelimiter: \",\",\r\n textLoading: \"Đang xử lý...\",\r\n textNoData: \"Không có dữ liệu\",\r\n textNotFound: \"Không tìm thấy\",\r\n textSelectAll: \"Chọn tất cả\",\r\n textDeselectAll: \"Bỏ chọn\",\r\n textAccessoryDeselect: \"Bỏ chọn: \",\r\n animationtime: 200, // milisecond\r\n delaysearchtime: 200, // milisecond\r\n allowHtml: true,\r\n maxSelected: 0,\r\n labelHalign: \"left\",\r\n labelValign: \"center\",\r\n imageMode: false,\r\n imageWidth: \"60px\",\r\n imageHeight: \"60px\",\r\n imageBorderRadius: \"4px\",\r\n imagePosition: \"right\",\r\n ajax: null,\r\n on: {\r\n load: [],\r\n beforeShow: [],\r\n show: [],\r\n beforeChange: [],\r\n change: [],\r\n beforeClose: [],\r\n close: []\r\n }\r\n };\r\n bindedMap = new Map;\r\n unbindedMap = new Map;\r\n bindedCommand = [];\r\n}","import {iStorage} from \"./istorage.js\";\r\n\r\n/**\r\n * @class\r\n */\r\nexport class Libs {\r\n /** @type {iStorage} */\r\n static #iStorage = null;\r\n \r\n /**\r\n * Retrieves the shared iStorage instance (lazy-initialized singleton).\r\n *\r\n * @returns {iStorage} - The global storage utility used by Libs.\r\n */\r\n static get iStorage() {\r\n !this.#iStorage && (this.#iStorage = new iStorage());\r\n return this.#iStorage;\r\n }\r\n\r\n /**\r\n * Schedules and batches function executions keyed by name, with debounced timers.\r\n * Provides setExecute(), clearExecute(), and run() to manage deferred callbacks.\r\n */\r\n static timerProcess = {\r\n executeStored: {}, \r\n setExecute: function(keyExecute, execute, timeout = 50, once = false) {\r\n if (!this.executeStored[keyExecute]) {\r\n this.executeStored[keyExecute] = [];\r\n }\r\n this.executeStored[keyExecute].push({execute: execute, timeout: timeout, once: once});\r\n }, clearExecute: function(keyExecute) {\r\n delete this.executeStored[keyExecute];\r\n }, run: function(keyExecute, ...params) {\r\n let executes = this.executeStored[keyExecute];\r\n\r\n if (!this.timerRunner[keyExecute]) {\r\n this.timerRunner[keyExecute] = {};\r\n }\r\n \r\n for (const key in executes) {\r\n const execute = executes[key];\r\n\r\n if (!this.timerRunner[keyExecute][key]) {\r\n this.timerRunner[keyExecute][key] = {};\r\n }\r\n\r\n if (execute) {\r\n clearTimeout(this.timerRunner[keyExecute][key]);\r\n this.timerRunner[keyExecute][key] = setTimeout(() => {\r\n execute && execute.execute(params.length > 0 ? params : null);\r\n execute.once && (delete this.executeStored[keyExecute][key]);\r\n }, execute.timeout);\r\n }\r\n }\r\n }, timerRunner: {}\r\n }\r\n\r\n /**\r\n * Checks whether a value is null/undefined/empty-string/\"0\"/0.\r\n * Booleans are always considered non-empty.\r\n *\r\n * @param {any} value - The value to test.\r\n * @returns {boolean} - True if considered empty; otherwise false.\r\n */\r\n static isNullOrEmpty(value) {\r\n if (typeof value === \"boolean\") return false;\r\n return value == null || value === \"\" || value === 0 || value === \"0\";\r\n }\r\n\r\n /**\r\n * Deep-copies plain objects/arrays recursively. Returns primitives as-is.\r\n *\r\n * @param {any} obj - The source object or array.\r\n * @returns {any} - A deep-cloned copy.\r\n */\r\n static jsCopyObject(obj) {\r\n if (obj === null || typeof obj !== \"object\") {\r\n return obj;\r\n }\r\n\r\n let copy = Array.isArray(obj) ? [] : {};\r\n\r\n for (let key in obj) {\r\n if (obj.hasOwnProperty(key)) {\r\n copy[key] = this.jsCopyObject(obj[key]);\r\n }\r\n }\r\n\r\n return copy;\r\n }\r\n\r\n /**\r\n * Generates a random alphanumeric string of given length.\r\n *\r\n * @param {number} [length=6] - Desired length.\r\n * @returns {string} - The generated string.\r\n */\r\n static randomString(length = 6) {\r\n let result = \"\";\r\n let characters = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\";\r\n let charactersLength = characters.length;\r\n for ( let i = 0; i < length; i++ ) {\r\n result += characters.charAt(Math.floor(Math.random() * charactersLength));\r\n }\r\n return result;\r\n }\r\n\r\n /**\r\n * Resolves a selector, NodeList, or single Element into an array of elements.\r\n * Returns an empty array if nothing is found.\r\n *\r\n * @param {string|NodeList|Element|HTMLElement|null} queryCommon - CSS selector, NodeList, or Element.\r\n * @returns {Element[]|HTMLElement[]|Node[]} - Array of matched elements (empty if none).\r\n */\r\n static getElements(queryCommon) {\r\n if (!queryCommon) return [];\r\n\r\n if (typeof queryCommon === \"string\") {\r\n const nodeList = document.querySelectorAll(queryCommon);\r\n return Array.from(nodeList);\r\n }\r\n\r\n if (queryCommon instanceof Element) {\r\n return [queryCommon];\r\n }\r\n\r\n if (queryCommon instanceof NodeList || Array.isArray(queryCommon)) {\r\n return Array.from(queryCommon);\r\n }\r\n\r\n return [];\r\n }\r\n\r\n /**\r\n * Creates a new Element based on a NodeSpec and applies attributes, classes, styles, dataset, and events.\r\n *\r\n * @param {NodeSpec} data - Specification describing the element to create.\r\n * @returns {Element} - The created element.\r\n */\r\n static nodeCreator(data = {}) {\r\n return this.nodeCloner(document.createElement(data.node), data, true);\r\n }\r\n\r\n /**\r\n * Clones an element (or converts a Node to Element) and applies NodeSpec options.\r\n * When systemNodeCreate=true, uses the provided node as-is.\r\n *\r\n * @param {Element} node - The element to clone or use.\r\n * @param {NodeSpec} _nodeOption - Options (classList, style, dataset, event, other props).\r\n * @param {boolean} systemNodeCreate - If true, do not clone; use original node.\r\n * @returns {Element} - The processed element.\r\n */\r\n static nodeCloner(node = document.documentElement, _nodeOption = null, systemNodeCreate = false) {\r\n const nodeOption = { ..._nodeOption };\r\n \r\n /** @type {Element} */\r\n const element_creation = systemNodeCreate ? node : this.nodeToElement(node.cloneNode(true));\r\n\r\n if (typeof nodeOption.classList === \"string\") {\r\n element_creation.classList.add(nodeOption.classList);\r\n } else if (Array.isArray(nodeOption.classList)) {\r\n element_creation.classList.add(...nodeOption.classList);\r\n }\r\n delete nodeOption.classList;\r\n\r\n [\"style\", \"dataset\"].forEach(property => {\r\n Object.assign(element_creation[property], nodeOption[property]);\r\n delete nodeOption[property];\r\n });\r\n\r\n if (nodeOption.role) {\r\n element_creation.setAttribute(\"role\", nodeOption.role);\r\n delete nodeOption.role;\r\n }\r\n\r\n if (nodeOption.ariaLive) {\r\n element_creation.setAttribute(\"aria-live\", nodeOption.ariaLive);\r\n delete nodeOption.ariaLive;\r\n }\r\n\r\n if (nodeOption.ariaLabelledby) {\r\n element_creation.setAttribute(\"aria-labelledby\", nodeOption.ariaLabelledby);\r\n delete nodeOption.ariaLabelledby;\r\n }\r\n\r\n if (nodeOption.ariaControls) {\r\n element_creation.setAttribute(\"aria-controls\", nodeOption.ariaControls);\r\n delete nodeOption.ariaControls;\r\n }\r\n\r\n if (nodeOption.ariaHaspopup) {\r\n element_creation.setAttribute(\"aria-haspopup\", nodeOption.ariaHaspopup);\r\n delete nodeOption.ariaHaspopup;\r\n }\r\n\r\n if (nodeOption.ariaMultiselectable) {\r\n element_creation.setAttribute(\"aria-multiselectable\", nodeOption.ariaMultiselectable);\r\n delete nodeOption.ariaMultiselectable;\r\n }\r\n\r\n if (nodeOption.ariaAutocomplete) {\r\n element_creation.setAttribute(\"aria-autocomplete\", nodeOption.ariaAutocomplete);\r\n delete nodeOption.ariaAutocomplete;\r\n }\r\n\r\n if (nodeOption.event) {\r\n Object.entries(nodeOption.event).forEach(([key, value]) => {\r\n element_creation.addEventListener(key, value);\r\n });\r\n delete nodeOption.event;\r\n }\r\n\r\n Object.entries(nodeOption).forEach(([key, value]) => {\r\n if (value === null) {\r\n element_creation.removeAttribute(key);\r\n } else {\r\n element_creation[key] = value;\r\n }\r\n });\r\n\r\n return element_creation;\r\n }\r\n\r\n /**\r\n * Ensures the given Node is an Element; throws if not.\r\n *\r\n * @param {Node} node - The node to validate.\r\n * @returns {Element} - The element cast.\r\n * @throws {TypeError} - If node is not an Element.\r\n */\r\n static nodeToElement(node) {\r\n if (node instanceof Element) {\r\n return node;\r\n }\r\n throw new TypeError(\"Node is not an Element\");\r\n }\r\n\r\n\r\n /**\r\n * Mounts a view from a plain object specification and returns a typed result\r\n * containing the root element and a tag map.\r\n *\r\n * @template TTags\r\n * @param {Object} rawObj - The specification describing elements and tags.\r\n * @returns {MountViewResult<TTags>} - The mounted view and its tag references.\r\n */\r\n static mountView(rawObj) {\r\n return /** @type {MountViewResult<TTags>} */ (\r\n this.mountNode(rawObj)\r\n );\r\n }\r\n\r\n /**\r\n * Recursively builds DOM nodes from a specification object, appends/prepends them\r\n * to an optional parent, and returns either a tag map or a full MountViewResult.\r\n *\r\n * @template TTags\r\n * @param {Object<string, any>} rawObj - Node spec (keys -> { tag, child }).\r\n * @param {Element|null} [parentE=null] - Parent to attach into; if null, returns root.\r\n * @param {boolean} [isPrepend=false] - If true, prepend; otherwise append.\r\n * @param {boolean} [isRecusive=false] - Internal flag for recursion control.\r\n * @param {TTags|Object} [recursiveTemp={}] - Accumulator for tag references.\r\n * @returns {MountViewResult<TTags>|TTags} - Tag map or the final mount result.\r\n */\r\n static mountNode(rawObj, parentE = null, isPrepend = false, isRecusive = false, recursiveTemp = {}) {\r\n let view = null;\r\n for (let key in rawObj) {\r\n const singleObj = rawObj[key];\r\n \r\n const tag = (singleObj.tag?.tagName) ? singleObj.tag : this.nodeCreator(singleObj.tag);\r\n recursiveTemp[key] = tag;\r\n singleObj.child && this.mountNode(singleObj.child, tag, false, false, recursiveTemp);\r\n\r\n if (parentE) {\r\n if (isPrepend) {\r\n parentE.prepend(tag);\r\n }\r\n else {\r\n parentE.append(tag);\r\n }\r\n }\r\n else if (!isRecusive && !view) {\r\n view = tag;\r\n }\r\n }\r\n if (!isRecusive) {\r\n recursiveTemp.id = this.randomString(7);\r\n\r\n if (!parentE) {\r\n recursiveTemp = {tags: recursiveTemp, view: view}\r\n }\r\n }\r\n return recursiveTemp;\r\n }\r\n\r\n /**\r\n * Applies inline CSS styles to all matched elements. Accepts either a style\r\n * object or a single property + value pair.\r\n *\r\n * @param {string|NodeList|HTMLElement} queryCommon - Selector or element(s).\r\n * @param {Record<string, string>|string} styles - Style object or a single property name.\r\n * @param {string|null} [value=null] - Value for the single property form.\r\n */\r\n static setStyle(queryCommon, styles, value = null) {\r\n const apply_styles = typeof styles === \"string\" ? { [styles]: value } : { ...styles },\r\n queryItems = this.getElements(queryCommon);\r\n\r\n if (queryItems && typeof queryItems == \"object\"){\r\n for (let i = 0; i < queryItems.length; i++){\r\n const item = queryItems[i];\r\n if (item) {\r\n Object.assign(item[\"style\"], apply_styles);\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Builds a configuration object by copying defaults and then overriding with\r\n * matching element properties or data-* attributes when present.\r\n *\r\n * @param {HTMLElement} element - Source element providing overrides.\r\n * @param {object} options - Default configuration to be merged.\r\n * @returns {object} - Final configuration after element overrides.\r\n */\r\n static buildConfig(element, options) {\r\n let myOptions = this.jsCopyObject(options);\r\n\r\n for (let optionKey in myOptions) {\r\n if (element[optionKey]) {\r\n myOptions[optionKey] = element[optionKey];\r\n }\r\n else if (typeof element?.dataset[optionKey] !== \"undefined\") {\r\n myOptions[optionKey] = element.dataset[optionKey];\r\n }\r\n }\r\n return myOptions;\r\n }\r\n\r\n /**\r\n * Deep-merges multiple configuration objects. Special-cases the `on` field\r\n * by concatenating event handler arrays; other keys are overwritten.\r\n *\r\n * @param {...object} params - Config objects in priority order (leftmost is base).\r\n * @returns {object} - Merged configuration object.\r\n */\r\n static mergeConfig(...params) {\r\n if (params.length == 0) {\r\n return {};\r\n }\r\n if (params.length == 1) {\r\n return this.jsCopyObject(params[0]);\r\n }\r\n else {\r\n const level0 = this.jsCopyObject(params[0]);\r\n for (let index = 1; index < params.length; index++) {\r\n const cfg = params[index];\r\n\r\n for (let optionKey in cfg) {\r\n if (optionKey == \"on\") {\r\n const cfgVar = cfg[optionKey];\r\n for (let actKey in cfgVar) {\r\n level0[optionKey][actKey].push(cfgVar[actKey]);\r\n }\r\n }\r\n else {\r\n level0[optionKey] = cfg[optionKey];\r\n }\r\n }\r\n }\r\n return level0;\r\n }\r\n }\r\n\r\n /**\r\n * Converts strings like \"true\", \"1\", \"yes\", \"on\" to boolean true; \"false\", \"0\",\r\n * \"no\", \"off\" to false. Non-strings are coerced via Boolean().\r\n *\r\n * @param {unknown} str - String or any value to convert.\r\n * @returns {boolean} - The normalized boolean.\r\n */\r\n static string2Boolean(str) {\r\n if (typeof str === \"boolean\") return str;\r\n if (typeof str !== \"string\") return Boolean(str);\r\n\r\n switch (str.trim().toLowerCase()) {\r\n case \"true\":\r\n case \"1\":\r\n case \"yes\":\r\n case \"on\":\r\n return true;\r\n case \"false\":\r\n case \"0\":\r\n case \"no\":\r\n case \"off\":\r\n return false;\r\n default:\r\n return false;\r\n }\r\n }\r\n\r\n /**\r\n * Removes a binder map entry for the given element from the global storage.\r\n *\r\n * @param {HTMLElement} element - Element key to remove from the binder map.\r\n * @returns {boolean} - True if an entry existed and was removed.\r\n */\r\n static removeBinderMap(element) {\r\n return this.iStorage.bindedMap.delete(element);\r\n }\r\n\r\n /**\r\n * Retrieves the binder map entry associated with the given element.\r\n *\r\n * @param {HTMLElement} item - Element key whose binder map is requested.\r\n * @returns {any} - The stored binder map value or undefined if absent.\r\n */\r\n static getBinderMap(item) {\r\n return this.iStorage.bindedMap.get(item);\r\n }\r\n \r\n /**\r\n * Sets or updates the binder map entry for a given element.\r\n *\r\n * @param {HTMLElement} item - Element key to associate with the binder map.\r\n * @param {any} bindMap - Value to store in the binder map.\r\n */\r\n static setBinderMap(item, bindMap) {\r\n this.iStorage.bindedMap.set(item, bindMap);\r\n }\r\n\r\n /**\r\n * Removes a binder map entry for the given element from the global storage.\r\n *\r\n * @param {HTMLElement} element - Element key to remove from the binder map.\r\n * @returns {boolean} - True if an entry existed and was removed.\r\n */\r\n static removeUnbinderMap(element) {\r\n return this.iStorage.unbindedMap.delete(element);\r\n }\r\n\r\n /**\r\n * Retrieves the binder map entry associated with the given element.\r\n *\r\n * @param {HTMLElement} item - Element key whose binder map is requested.\r\n * @returns {any} - The stored binder map value or undefined if absent.\r\n */\r\n static getUnbinderMap(item) {\r\n return this.iStorage.unbindedMap.get(item);\r\n }\r\n \r\n /**\r\n * Sets or updates the binder map entry for a given element.\r\n *\r\n * @param {HTMLElement} item - Element key to associate with the binder map.\r\n * @param {any} bindMap - Value to store in the binder map.\r\n */\r\n static setUnbinderMap(item, bindMap) {\r\n this.iStorage.unbindedMap.set(item, bindMap);\r\n }\r\n\r\n /**\r\n * Returns the global default configuration used by the Selective UI system.\r\n *\r\n * @returns {object} - The default config object.\r\n */\r\n static getDefaultConfig() {\r\n return this.iStorage.defaultConfig;\r\n }\r\n\r\n /**\r\n * Returns the global list of bound commands stored in the shared storage.\r\n *\r\n * @returns {any[]} - The bound command list.\r\n */\r\n static getBindedCommand() {\r\n return this.iStorage.bindedCommand;\r\n }\r\n\r\n /**\r\n * Safely translates an HTML-like string to sanitized markup:\r\n * - decodes custom &lt;`/`&gt; placeholders,\r\n * - strips <script> tags,\r\n * - removes event and javascript: attributes from all nodes.\r\n *\r\n * @param {string} str_tag - The input string to sanitize/translate.\r\n * @returns {string} - Safe innerHTML string.\r\n */\r\n static tagTranslate(str_tag) {\r\n if (str_tag == null) return \"\";\r\n\r\n str_tag = String(str_tag).replace(/&lt;`/g, \"<\").replace(/`&gt;/g, \">\").replace(/<`/g, \"<\").replace(/`>/g, \">\").trim();\r\n\r\n const doc = globalThis?.document;\r\n\r\n if (!doc || typeof doc.createElement !== \"function\") {\r\n str_tag = str_tag\r\n .replace(/<script\\b[^>]*>[\\s\\S]*?<\\/script>/gi, \"\")\r\n .replace(/<style\\b[^>]*>[\\s\\S]*?<\\/style>/gi, \"\")\r\n .replace(/<iframe\\b[^>]*>[\\s\\S]*?<\\/iframe>/gi, \"\")\r\n .replace(/<(object|embed|link)\\b[^>]*>[\\s\\S]*?<\\/\\1>/gi, \"\");\r\n str_tag = str_tag.replace(/\\son[a-z]+\\s*=\\s*(['\"]).*?\\1/gi, \"\");\r\n str_tag = str_tag.replace(/\\s([a-z-:]+)\\s*=\\s*(['\"])\\s*javascript:[^'\"]*\\2/gi, \"\");\r\n return str_tag;\r\n }\r\n\r\n const tmp = doc.createElement(\"div\");\r\n tmp.innerHTML = str_tag;\r\n\r\n tmp.querySelectorAll(\"script, style, iframe, object, embed, link\").forEach(n => n.remove());\r\n\r\n tmp.querySelectorAll(\"*\").forEach(n => {\r\n [...n.attributes].forEach(a => {\r\n const name = a.name || \"\";\r\n const value = a.value || \"\";\r\n if (/^on/i.test(name)) {\r\n n.removeAttribute(name);\r\n return;\r\n }\r\n if (/^(href|src|xlink:href)$/i.test(name) && /^javascript:/i.test(value)) {\r\n n.removeAttribute(name);\r\n }\r\n });\r\n });\r\n\r\n return (tmp.innerHTML || \"\").trim();\r\n }\r\n\r\n /**\r\n * Strips all HTML from a string and returns trimmed plain text.\r\n *\r\n * @param {string} html - The HTML string to strip.\r\n * @returns {string} - The extracted plain text.\r\n */\r\n static stripHtml(html) {\r\n let tmp = document.createElement(\"DIV\");\r\n tmp.innerHTML = html;\r\n let text_tmp = tmp.textContent || tmp.innerText || \"\";\r\n tmp.remove();\r\n return text_tmp.trim();\r\n }\r\n\r\n /**\r\n * Normalizes a Vietnamese string by removing diacritics and special combining marks,\r\n * returning a lowercase non-accent version for searching/matching.\r\n *\r\n * @param {string} str - The input text.\r\n * @returns {string} - The diacritic-free lowercase string.\r\n */\r\n static string2normalize(str) {\r\n if (str == null) return '';\r\n const s = String(str).toLowerCase().normalize('NFD').replace(/[\\u0300-\\u036f]/g, '');\r\n return s.replace(/đ/g, 'd').replace(/Đ/g, 'd');\r\n }\r\n\r\n /**\r\n * Parse select element to array (including optgroups)\r\n * @param {HTMLSelectElement} selectElement\r\n * @returns {Array<HTMLOptGroupElement|HTMLOptionElement>}\r\n */\r\n static parseSelectToArray(selectElement) {\r\n const result = [];\r\n const children = Array.from(selectElement.children);\r\n\r\n children.forEach(child => {\r\n if (child.tagName === \"OPTGROUP\") {\r\n result.push(child);\r\n \r\n Array.from(child.children).forEach(option => {\r\n option[\"__parentGroup\"] = child;\r\n result.push(option);\r\n });\r\n } else if (child.tagName === \"OPTION\") {\r\n result.push(child);\r\n }\r\n });\r\n\r\n return result;\r\n }\r\n\r\n \r\n /**\r\n * Detects whether the current environment is iOS (including iPad/iPhone/iPod, iOS browsers,\r\n * iPadOS on Mac with touch, standalone PWAs, and WebKit mobile heuristics). Caches the result\r\n * for subsequent calls to avoid re-computation.\r\n *\r\n * @returns {boolean} - True if the user agent/platform appears to be iOS; otherwise false.\r\n */\r\n \r\n static IsIOS() {\r\n const ua = navigator.userAgent;\r\n return /iP(hone|ad|od)/.test(ua) || \r\n (navigator.platform === 'MacIntel' && navigator.maxTouchPoints > 1);\r\n }\r\n\r\n /**\r\n * Converts an arbitrary CSS size value into pixel units by measuring a temporary element.\r\n * Returns the computed pixel height as a string with \"px\" suffix.\r\n *\r\n * @param {string} value - Any valid CSS size (e.g., \"2rem\", \"5vh\", \"12pt\").\r\n * @returns {string} - The equivalent pixel value (e.g., \"32px\").\r\n */\r\n \r\n static any2px(value) {\r\n const v = String(value).trim();\r\n if (v.endsWith('px')) return v;\r\n if (v.endsWith('vh')) return (window.innerHeight * parseFloat(v)/100) + 'px';\r\n if (v.endsWith('vw')) return (window.innerWidth * parseFloat(v)/100) + 'px';\r\n // ... rem/em: lấy computed font-size thân document\r\n const fs = parseFloat(getComputedStyle(document.documentElement).fontSize);\r\n if (v.endsWith('rem')) return (fs * parseFloat(v)) + 'px';\r\n // fallback: đo DOM (hiếm)\r\n const el = /** @type {HTMLElement} */ (this.nodeCreator({node:'div', style:{height:v, opacity:0}}));\r\n document.body.appendChild(el);\r\n const px = el.offsetHeight + 'px';\r\n el.remove();\r\n return px;\r\n }\r\n}","\r\n/**\r\n * Provides a lightweight event utility with cancel/continue control:\r\n * - buildEventToken(): creates a token/callback pair to control flow (stopPropagation/cancel).\r\n * - callEvent(): invokes handlers in order, passing params; stops when canceled or propagation stopped.\r\n * - trigger(): dispatches a native DOM Event on the given element.\r\n * - callFunctions(): executes an array of functions with optional parameters.\r\n */\r\nexport class iEvents {\r\n /**\r\n * Creates an event token and its controller callbacks.\r\n * @returns {{ token: IEventToken, callback: IEventCallback }}\r\n */\r\n static buildEventToken() {\r\n const privToken = { isContinue: true, isCancel: false };\r\n\r\n const token = {\r\n get isContinue() { return privToken.isContinue; },\r\n get isCancel() { return privToken.isCancel; }\r\n };\r\n\r\n const callback = {\r\n stopPropagation() { privToken.isContinue = false; },\r\n cancel() { privToken.isCancel = true; privToken.isContinue = false; }\r\n };\r\n\r\n return { token, callback };\r\n }\r\n\r\n /**\r\n * Calls event handlers sequentially with optional parameters and a control callback.\r\n * Stops invoking further handlers if canceled or propagation is stopped.\r\n *\r\n * @template T\r\n * @param {T[]|null} params\r\n * @param {...Function} handles\r\n * @returns {IEventToken}\r\n */\r\n static callEvent(params, ...handles) {\r\n const { token, callback } = this.buildEventToken();\r\n\r\n for (let i = 0; i < handles.length; i++) {\r\n const handle = handles[i];\r\n\r\n if (typeof handle !== 'function') continue;\r\n\r\n if (params && Array.isArray(params)) {\r\n handle(callback, ...params);\r\n } else {\r\n handle(callback);\r\n }\r\n\r\n if (token.isCancel || !token.isContinue) break;\r\n }\r\n\r\n return token;\r\n }\r\n\r\n /**\r\n * Dispatches a native DOM event on the specified element.\r\n * @param {HTMLElement|Window|Document} element\r\n * @param {string} eventSTR\r\n * @param {{bubbles?: boolean, cancelable?: boolean}} [opts]\r\n */\r\n static trigger(element, eventSTR, opts = { bubbles: true, cancelable: true }) {\r\n const evt = new Event(eventSTR, opts);\r\n element.dispatchEvent(evt);\r\n return evt;\r\n }\r\n\r\n /**\r\n * Invokes an array of functions with optional parameters.\r\n * @param {Function[]} funcs\r\n * @param {...any} params\r\n */\r\n static callFunctions(funcs, ...params) {\r\n if (!Array.isArray(funcs)) return;\r\n for (const fn of funcs) {\r\n if (typeof fn !== 'function') continue;\r\n fn(...params);\r\n }\r\n }\r\n}\r\n","import {Libs} from \"../utils/libs.js\";\r\n\r\n/**\r\n * @class\r\n */\r\nexport class Refresher {\r\n /**\r\n * Provides a utility to resize the Select UI view panel based on the bound <select> element\r\n * and configuration options. Applies explicit width/height if configured; otherwise uses the\r\n * select's current offset size. Ensures minimum width/height constraints are respected.\r\n *\r\n * @param {HTMLSelectElement} select - The native select element used to derive dimensions.\r\n * @param {HTMLElement} view - The view panel element whose styles will be updated.\r\n */\r\n static resizeBox(select, view) {\r\n const \r\n bindedMap = Libs.getBinderMap(select),\r\n options = bindedMap.options\r\n ;\r\n \r\n const \r\n minWidth = options.minWidth,\r\n minHeight = options.minHeight,\r\n cfgWidth = parseInt(options.width, 10),\r\n cfgHeight = parseInt(options.height, 10)\r\n ;\r\n \r\n let width = `${select.offsetWidth}px`,\r\n height = `${select.offsetHeight}px`;\r\n \r\n if (cfgWidth > 0) {\r\n width = options.width;\r\n }\r\n if (cfgHeight > 0) {\r\n height = options.height;\r\n }\r\n\r\n Libs.setStyle(view, {width, height, minWidth, minHeight});\r\n }\r\n}","import {Libs} from \"../utils/libs.js\";\r\n\r\n/**\r\n * @class\r\n */\r\nexport class PlaceHolder {\r\n /**\r\n * Represents a placeholder component for the Select UI, allowing dynamic updates to placeholder text.\r\n * Supports HTML content based on configuration and provides methods to get or set the placeholder value.\r\n */\r\n constructor(options) {\r\n options && this.init(options);\r\n }\r\n\r\n /**\r\n * @type {Element}\r\n */\r\n node = null;\r\n \r\n #options = null;\r\n \r\n /**\r\n * Initializes the placeholder element with provided options and renders its initial content.\r\n *\r\n * @param {object} options - Configuration object containing placeholder text and HTML allowance.\r\n */\r\n init(options) {\r\n this.node = Libs.nodeCreator({\r\n node: \"div\", classList: \"selective-ui-placeholder\", innerHTML: options.placeholder\r\n });\r\n this.#options = options;\r\n }\r\n \r\n /**\r\n * Retrieves the current placeholder text from the configuration.\r\n *\r\n * @returns {string} - The current placeholder text.\r\n */\r\n get() {\r\n return this.#options.placeholder\r\n }\r\n \r\n /**\r\n * Updates the placeholder text and optionally saves it to the configuration.\r\n * Applies HTML sanitization based on the allowHtml setting.\r\n *\r\n * @param {string} value - The new placeholder text.\r\n * @param {boolean} [isSave=true] - Whether to persist the new value in the configuration.\r\n */\r\n set(value, isSave = true) {\r\n if (isSave) {\r\n this.#options.placeholder = value;\r\n }\r\n value = Libs.tagTranslate(value);\r\n this.node.innerHTML = this.#options.allowHtml ? value : Libs.stripHtml(value);\r\n }\r\n}","import {Libs} from \"../utils/libs.js\";\r\n\r\n/**\r\n * @class\r\n */\r\nexport class Directive {\r\n constructor() {\r\n this.#init();\r\n }\r\n /**\r\n * @type {Element}\r\n */\r\n node = null;\r\n \r\n /**\r\n * Represents a directive button element used to toggle dropdown state.\r\n * Initializes a clickable node with appropriate ARIA attributes for accessibility.\r\n */\r\n #init() {\r\n this.node = Libs.nodeCreator({\r\n node: \"div\", classList: \"selective-ui-directive\", role: \"button\", ariaLabel: \"Toggle dropdown\"\r\n });\r\n }\r\n \r\n /**\r\n * Sets the dropdown state by toggling the \"drop-down\" CSS class on the directive node.\r\n *\r\n * @param {boolean} value - If true, adds the \"drop-down\" class; otherwise removes it.\r\n */\r\n setDropdown(value) {\r\n if (value) {\r\n this.node.classList.add(\"drop-down\");\r\n }\r\n else {\r\n this.node.classList.remove(\"drop-down\");\r\n }\r\n }\r\n}","import { iEvents } from \"../utils/ievents.js\";\r\nimport {Libs} from \"../utils/libs.js\";\r\n\r\n/**\r\n * @class\r\n */\r\nexport class OptionHandle {\r\n nodeMounted;\r\n /**\r\n * @type {HTMLDivElement}\r\n */\r\n node;\r\n\r\n options = null;\r\n\r\n /** @type {Function[]} */\r\n #ActionOnSelectAll = [];\r\n\r\n /** @type {Function[]} */\r\n #ActionOnDeSelectAll = [];\r\n\r\n /**\r\n * Represents an option handle component that provides \"Select All\" and \"Deselect All\" actions\r\n * for multiple-selection lists. Includes methods to show/hide the handle, refresh its visibility,\r\n * and register callbacks for select/deselect events.\r\n */\r\n constructor(options = null) {\r\n if (options) {\r\n this.init(options);\r\n }\r\n }\r\n \r\n /**\r\n * Initializes the option handle UI with \"Select All\" and \"Deselect All\" buttons,\r\n * wiring their click events to trigger registered callbacks.\r\n *\r\n * @param {object} options - Configuration object containing text labels and feature flags.\r\n */\r\n init(options) {\r\n this.nodeMounted = Libs.mountNode({\r\n OptionHandle: {\r\n tag: {node: \"div\", classList: [\"selective-ui-option-handle\", \"hide\"]},\r\n child: {\r\n SelectAll: {\r\n tag: {node: \"a\", classList: \"selective-ui-option-handle-item\", textContent: options.textSelectAll, onclick: () => {\r\n iEvents.callFunctions(this.#ActionOnSelectAll);\r\n }}\r\n },\r\n DeSelectAll: {\r\n tag: {node: \"a\", classList: \"selective-ui-option-handle-item\", textContent: options.textDeselectAll, onclick: () => {\r\n iEvents.callFunctions(this.#ActionOnDeSelectAll);\r\n }}\r\n }\r\n }\r\n }\r\n });\r\n this.node = this.nodeMounted.view;\r\n this.options = options;\r\n }\r\n \r\n /**\r\n * Determines whether the option handle should be available based on configuration.\r\n *\r\n * @returns {boolean} - True if multiple selection and select-all features are enabled.\r\n */\r\n available() {\r\n return Libs.string2Boolean(this.options.multiple) && Libs.string2Boolean(this.options.selectall);\r\n }\r\n \r\n /**\r\n * Refreshes the visibility of the option handle based on availability.\r\n * Shows the handle if available; hides it otherwise.\r\n */\r\n refresh() {\r\n if (this.available()) {\r\n this.show();\r\n }\r\n else {\r\n this.hide();\r\n }\r\n }\r\n \r\n /**\r\n * Makes the option handle visible by removing the \"hide\" class.\r\n */\r\n show() {\r\n this.node.classList.remove(\"hide\");\r\n }\r\n \r\n /**\r\n * Hides the option handle by adding the \"hide\" class.\r\n */\r\n hide() {\r\n this.node.classList.add(\"hide\");\r\n }\r\n \r\n /**\r\n * Registers a callback to be executed when \"Select All\" is clicked.\r\n *\r\n * @param {Function|null} action - The function to call on select-all action.\r\n */\r\n OnSelectAll(action = null) {\r\n this.#ActionOnSelectAll.push(action);\r\n }\r\n \r\n /**\r\n * Registers a callback to be executed when \"Deselect All\" is clicked.\r\n *\r\n * @param {Function|null} action - The function to call on deselect-all action.\r\n */\r\n OnDeSelectAll(action = null) {\r\n this.#ActionOnDeSelectAll.push(action);\r\n }\r\n}","\r\n/**\r\n * @class\r\n */\r\nexport class ResizeObserverService {\r\n isInit = false;\r\n element = null;\r\n /** @type {ResizeObserver} */\r\n #resizeObserver = null;\r\n #mutationObserver = null;\r\n #boundUpdateChanged;\r\n \r\n /**\r\n * Initializes the service and binds the internal update handler to `this`.\r\n * Sets the service to an initialized state.\r\n */\r\n constructor() {\r\n this.isInit = true\r\n this.#boundUpdateChanged = this.#updateChanged.bind(this);\r\n }\r\n\r\n /**\r\n * Callback invoked when the observed element's metrics change.\r\n * Override to react to size/position/style updates.\r\n *\r\n * @param {ElementMetrics} metrics - Calculated box metrics (size, position, padding, border, margin).\r\n */\r\n onChanged(metrics) {}\r\n\r\n /**\r\n * Computes the current metrics of the bound element (bounding rect + computed styles)\r\n * and forwards them to `onChanged(metrics)`.\r\n *\r\n * @returns {void}\r\n */\r\n #updateChanged() {\r\n // Guard: nếu element chưa sẵn sàng hoặc không đo được, trả về metrics mặc định\r\n const el = this.element;\r\n if (!el || typeof el.getBoundingClientRect !== 'function') {\r\n /** @type {ElementMetrics} */\r\n const defaultMetrics = {\r\n width: 0,\r\n height: 0,\r\n top: 0,\r\n left: 0,\r\n padding: { top: 0, right: 0, bottom: 0, left: 0 },\r\n border: { top: 0, right: 0, bottom: 0, left: 0 },\r\n margin: { top: 0, right: 0, bottom: 0, left: 0 },\r\n };\r\n this.onChanged(defaultMetrics);\r\n return;\r\n }\r\n\r\n const rect = el.getBoundingClientRect();\r\n const style = (typeof window?.getComputedStyle === 'function')\r\n ? window.getComputedStyle(el)\r\n : null;\r\n\r\n /** @type {ElementMetrics} */\r\n const metrics = {\r\n width: rect?.width ?? 0,\r\n height: rect?.height ?? 0,\r\n top: rect?.top ?? 0,\r\n left: rect?.left ?? 0,\r\n\r\n padding: {\r\n top: parseFloat(style?.paddingTop ?? '0'),\r\n right: parseFloat(style?.paddingRight ?? '0'),\r\n bottom: parseFloat(style?.paddingBottom ?? '0'),\r\n left: parseFloat(style?.paddingLeft ?? '0'),\r\n },\r\n\r\n border: {\r\n top: parseFloat(style?.borderTopWidth ?? '0'),\r\n right: parseFloat(style?.borderRightWidth ?? '0'),\r\n bottom: parseFloat(style?.borderBottomWidth ?? '0'),\r\n left: parseFloat(style?.borderLeftWidth ?? '0'),\r\n },\r\n\r\n margin: {\r\n top: parseFloat(style?.marginTop ?? '0'),\r\n right: parseFloat(style?.marginRight ?? '0'),\r\n bottom: parseFloat(style?.marginBottom ?? '0'),\r\n left: parseFloat(style?.marginLeft ?? '0'),\r\n }\r\n };\r\n \r\n this.onChanged(metrics);\r\n }\r\n \r\n /**\r\n * Manually triggers a metrics computation and notification via `onChanged`.\r\n */\r\n trigger() {\r\n this.#updateChanged();\r\n }\r\n \r\n /**\r\n * Starts observing the provided element for resize and style/class mutations,\r\n * and listens to window/visualViewport scroll/resize to detect layout changes.\r\n *\r\n * @param {Element} element - The element to observe; must be a valid DOM Element.\r\n * @throws {Error} If `element` is not an instance of Element.\r\n */\r\n connect(element) {\r\n if (!(element instanceof Element)) {\r\n throw new Error(\"Element không hợp lệ\");\r\n }\r\n\r\n this.element = element;\r\n\r\n this.#resizeObserver = new ResizeObserver(this.#boundUpdateChanged);\r\n this.#resizeObserver.observe(element);\r\n\r\n this.#mutationObserver = new MutationObserver(this.#boundUpdateChanged);\r\n this.#mutationObserver.observe(element, {\r\n attributes: true,\r\n attributeFilter: [\"style\", \"class\"]\r\n });\r\n\r\n window.addEventListener(\"scroll\", this.#boundUpdateChanged, true);\r\n window.addEventListener(\"resize\", this.#boundUpdateChanged);\r\n\r\n if (window.visualViewport) {\r\n window.visualViewport.addEventListener(\"resize\", this.#boundUpdateChanged);\r\n window.visualViewport.addEventListener(\"scroll\", this.#boundUpdateChanged);\r\n }\r\n }\r\n \r\n /**\r\n * Stops all observations and event listeners, resets the change handler,\r\n * and releases internal observer resources.\r\n */\r\n disconnect() {\r\n // Optional chaining để an toàn với mocks trong môi trường test\r\n this.#resizeObserver?.disconnect?.();\r\n this.#mutationObserver?.disconnect?.();\r\n\r\n this.onChanged = (metrics) => {};\r\n window.removeEventListener(\"scroll\", this.#boundUpdateChanged, true);\r\n window.removeEventListener(\"resize\", this.#boundUpdateChanged);\r\n\r\n if (window.visualViewport) {\r\n window.visualViewport.removeEventListener(\"resize\", this.#boundUpdateChanged);\r\n window.visualViewport.removeEventListener(\"scroll\", this.#boundUpdateChanged);\r\n }\r\n\r\n this.#resizeObserver = null;\r\n this.#mutationObserver = null;\r\n this.element = null;\r\n }\r\n}","/**\r\n * @template TTarget\r\n * @template {Record<string, Element>} TTags\r\n * @template {ViewContract<TTags>} TView\r\n * @implements {ModelContract<TTarget, TView>}\r\n */\r\nexport class Model {\r\n /** @type {TTarget | null} */\r\n targetElement = null;\r\n\r\n options = null;\r\n\r\n /** @type {TView | null} */\r\n view = null;\r\n\r\n position = -1;\r\n\r\n isInit = false;\r\n\r\n /**\r\n * Returns the current value from the underlying target element's \"value\" attribute.\r\n * For single-select, this is typically a string; for multi-select, may be an array depending on usage.\r\n *\r\n * @type {String|String[]}\r\n */\r\n get value() {\r\n return /** @type {HTMLElement} */ (this.targetElement).getAttribute(\"value\");\r\n }\r\n\r\n /**\r\n * Constructs a Model instance with configuration options and optional bindings to a target element and view.\r\n * Stores references for later updates and rendering.\r\n *\r\n * @param {object} options - Configuration options for the model.\r\n * @param {TTarget|null} [targetElement=null] - The underlying element (e.g., <option> or group node).\r\n * @param {TView|null} [view=null] - The associated view responsible for rendering the model.\r\n */\r\n constructor(options, targetElement = null, view = null) {\r\n this.options = options;\r\n this.targetElement = targetElement;\r\n this.view = view;\r\n }\r\n\r\n /**\r\n * Updates the bound target element reference and invokes the change hook.\r\n *\r\n * @param {TTarget|null} targetElement - The new target element to bind to the model.\r\n */\r\n update(targetElement) {\r\n this.targetElement = targetElement;\r\n this.onTargetChanged();\r\n }\r\n\r\n /**\r\n * Hook invoked whenever the target element changes.\r\n * Override in subclasses to react to attribute/content updates (e.g., text, disabled state).\r\n */\r\n onTargetChanged() { }\r\n}\r\n","\r\n/**\r\n * @template {Record<string, Element>} TTags\r\n * @implements {ViewContract<TTags>}\r\n */\r\nexport class View {\r\n /** @type {Element|null} */\r\n parent = null;\r\n\r\n /**\r\n * Initializes the view with a parent container element that will host its rendered content.\r\n *\r\n * @param {Element} parent - The parent element into which this view will render.\r\n */\r\n constructor(parent) {\r\n this.parent = parent;\r\n }\r\n\r\n /**\r\n * Renders the view into the parent container.\r\n * Override in subclasses to create DOM structure and mount tags.\r\n */\r\n render() {}\r\n \r\n /**\r\n * Updates the view to reflect model or state changes.\r\n * Override in subclasses to patch DOM nodes without full re-render.\r\n */\r\n update() {}\r\n\r\n /** @type {MountViewResult<TTags>} */\r\n view = null;\r\n\r\n /**\r\n * Returns the root HTMLElement of the mounted view.\r\n *\r\n * @returns {HTMLElement} - The root view element.\r\n */\r\n getView() {\r\n return this.view.view;\r\n }\r\n\r\n /**\r\n * Retrieves a single tagged element from the mounted view.\r\n *\r\n * @template {keyof TTags} K\r\n * @param {K} tag - The tag key corresponding to the desired element.\r\n * @returns {TTags[K]} - The element associated with the provided tag key.\r\n */\r\n getTag(tag) {\r\n return this.view.tags[tag];\r\n }\r\n\r\n /**\r\n * Retrieves the full tag map for the mounted view.\r\n *\r\n * @returns {TTags} - An object map of all tagged elements.\r\n */\r\n getTags() {\r\n return this.view.tags;\r\n }\r\n}\r\n","import { View } from \"../core/base/view\";\r\nimport { Libs } from \"../utils/libs\";\r\n\r\n/**\r\n * @extends {View<GroupViewTags>}\r\n */\r\nexport class GroupView extends View {\r\n /** @type {GroupViewResult} */\r\n view;\r\n\r\n /**\r\n * Renders the group view structure (header + items container), sets ARIA attributes,\r\n * and appends the root element to the parent container.\r\n */\r\n render() {\r\n const group_id = Libs.randomString(7);\r\n \r\n this.view = Libs.mountView({\r\n GroupView: {\r\n tag: {\r\n node: \"div\", \r\n classList: [\"selective-ui-group\"],\r\n role: \"group\",\r\n ariaLabelledby: `seui-${group_id}-header`,\r\n id: `seui-${group_id}-group`\r\n },\r\n child: {\r\n GroupHeader: {\r\n tag: {\r\n node: \"div\", \r\n classList: [\"selective-ui-group-header\"],\r\n role: \"presentation\",\r\n id: `seui-${group_id}-header`\r\n }\r\n },\r\n GroupItems: {\r\n tag: {\r\n node: \"div\",\r\n classList: [\"selective-ui-group-items\"],\r\n role: \"group\"\r\n }\r\n }\r\n }\r\n }\r\n });\r\n\r\n this.parent.appendChild(this.view.view);\r\n }\r\n\r\n /**\r\n * Performs a lightweight refresh of the view (currently updates the header label).\r\n */\r\n update() {\r\n this.updateLabel();\r\n }\r\n\r\n /**\r\n * Updates the group header text content if a label is provided.\r\n *\r\n * @param {string|null} [label=null] - The new label to display; if null, keeps current.\r\n */\r\n updateLabel(label = null) {\r\n const headerEl = this.view.tags.GroupHeader;\r\n if (label !== null) {\r\n headerEl.textContent = label;\r\n }\r\n }\r\n\r\n /**\r\n * Returns the container element that holds all option/item views in this group.\r\n *\r\n * @returns {HTMLDivElement} - The items container element.\r\n */\r\n getItemsContainer() {\r\n return this.view.tags.GroupItems;\r\n }\r\n\r\n /**\r\n * Toggles the group's visibility based on whether any child item is visible.\r\n * Hides the entire group when all children are hidden.\r\n */\r\n updateVisibility() {\r\n const items = this.view.tags.GroupItems;\r\n const visibleItems = Array.from(items.children)\r\n .filter(child => !child.classList.contains(\"hide\"));\r\n \r\n const isVisible = visibleItems.length > 0;\r\n this.view.view.classList.toggle(\"hide\", !isVisible);\r\n }\r\n\r\n /**\r\n * Sets the collapsed state on the group and updates ARIA attributes accordingly.\r\n *\r\n * @param {boolean} collapsed - True to collapse; false to expand.\r\n */\r\n setCollapsed(collapsed) {\r\n this.view.view.classList.toggle(\"collapsed\", collapsed);\r\n this.view.tags.GroupHeader.setAttribute(\r\n \"aria-expanded\", \r\n collapsed ? \"false\" : \"true\"\r\n );\r\n }\r\n}","\r\nimport { View } from \"../core/base/view\";\r\nimport { Libs } from \"../utils/libs\";\r\n\r\n/**\r\n * @extends {View<OptionViewTags>}\r\n */\r\nexport class OptionView extends View {\r\n /** @type {OptionViewResult} */\r\n view;\r\n\r\n isMultiple = false;\r\n hasImage = false;\r\n optionConfig = null;\r\n\r\n /**\r\n * Renders the option view DOM structure (input, optional image, label),\r\n * sets ARIA attributes/IDs, mounts into parent, and applies initial config.\r\n */\r\n render() {\r\n const viewClass = [\"selective-ui-option-view\"];\r\n const opt_id = Libs.randomString(7);\r\n const inputID = `option_${opt_id}`;\r\n\r\n if (this.isMultiple) {\r\n viewClass.push(\"multiple\");\r\n }\r\n\r\n if (this.hasImage) {\r\n viewClass.push(\"has-image\");\r\n viewClass.push(`image-${this.optionConfig?.imagePosition}`);\r\n }\r\n\r\n const childStructure = {\r\n OptionInput: {\r\n tag: {\r\n node: \"input\",\r\n type: this.isMultiple ? \"checkbox\" : \"radio\",\r\n classList: \"allow-choice\",\r\n id: inputID\r\n }\r\n },\r\n ...(this.hasImage && {\r\n OptionImage: {\r\n tag: {\r\n node: \"img\",\r\n classList: \"option-image\",\r\n style: {\r\n width: this.optionConfig?.imageWidth || \"60px\",\r\n height: this.optionConfig?.imageHeight || \"60px\",\r\n borderRadius: this.optionConfig?.imageBorderRadius || \"4px\"\r\n }\r\n }\r\n }\r\n }),\r\n OptionLabel: {\r\n tag: {\r\n node: \"label\",\r\n htmlFor: inputID,\r\n classList: [\r\n `align-vertical-${this.optionConfig?.labelValign}`,\r\n `align-horizontal-${this.optionConfig?.labelHalign}`\r\n ]\r\n },\r\n child: {\r\n LabelContent: { tag: { node: \"div\" } }\r\n }\r\n }\r\n };\r\n\r\n this.view = Libs.mountView({\r\n OptionView: {\r\n tag: {\r\n node: \"div\",\r\n id: `seui-${opt_id}-option`,\r\n classList: viewClass,\r\n role: \"option\",\r\n ariaSelected: \"false\",\r\n tabIndex: \"-1\"\r\n },\r\n child: childStructure\r\n }\r\n });\r\n\r\n this.parent.appendChild(this.view.view);\r\n\r\n this.applyConfigToDOM();\r\n }\r\n\r\n /**\r\n * Refreshes the option view by reapplying configuration (classes, alignments, image styles).\r\n */\r\n update() {\r\n this.applyConfigToDOM();\r\n }\r\n\r\n /**\r\n * Applies current configuration to the DOM in a minimal, fast way:\r\n * - Set root/label classes in a single assignment (less DOM churn),\r\n * - Ensure input type matches selection mode,\r\n * - Create/remove image element only when needed, update its styles.\r\n */\r\n applyConfigToDOM() {\r\n const v = this.view;\r\n if (!v || !v.view) return;\r\n\r\n const root = v.view;\r\n const input = v.tags?.OptionInput;\r\n const label = v.tags?.OptionLabel;\r\n const isMultiple = !!this.isMultiple;\r\n const hasImage = !!this.hasImage;\r\n const imagePos = this.optionConfig?.imagePosition || 'right';\r\n const imageWidth = this.optionConfig?.imageWidth || '60px';\r\n const imageHeight = this.optionConfig?.imageHeight || '60px';\r\n const imageRadius = this.optionConfig?.imageBorderRadius || '4px';\r\n const vAlign = this.optionConfig?.labelValign || 'center';\r\n const hAlign = this.optionConfig?.labelHalign || 'left';\r\n\r\n const rootClasses = ['selective-ui-option-view'];\r\n if (isMultiple) rootClasses.push('multiple');\r\n if (hasImage) {\r\n rootClasses.push('has-image', `image-${imagePos}`);\r\n }\r\n root.className = rootClasses.join(' ');\r\n\r\n if (input) {\r\n const desiredType = isMultiple ? 'checkbox' : 'radio';\r\n if (input.type !== desiredType) input.type = desiredType;\r\n }\r\n\r\n if (label) {\r\n label.className = `align-vertical-${vAlign} align-horizontal-${hAlign}`;\r\n }\r\n\r\n let image = v.tags?.OptionImage;\r\n if (hasImage) {\r\n if (!image) {\r\n image = document.createElement('img');\r\n image.className = 'option-image';\r\n if (label && label.parentElement) root.insertBefore(image, label);\r\n else root.appendChild(image);\r\n v.tags.OptionImage = image;\r\n }\r\n const style = image.style;\r\n style.width = imageWidth;\r\n style.height = imageHeight;\r\n style.borderRadius = imageRadius;\r\n } else if (image) {\r\n image.remove();\r\n v.tags.OptionImage = null;\r\n }\r\n }\r\n}","import { Model } from \"../core/base/model.js\";\r\nimport { iEvents } from \"../utils/ievents.js\";\r\nimport { Libs } from \"../utils/libs.js\";\r\nimport { OptionView } from \"../views/option-view.js\";\r\n\r\n/**\r\n * @extends {Model<HTMLOptionElement, OptionViewTags, OptionView>}\r\n */\r\nexport class OptionModel extends Model {\r\n #privOnSelected = [];\r\n #privOnInternalSelected = [];\r\n #privOnVisibilityChanged = [];\r\n #visible = true;\r\n #highlighted = false;\r\n\r\n /** @type {import('./group-model').GroupModel} */\r\n group = null\r\n \r\n /**\r\n * Returns the image source from dataset (imgsrc or image), or an empty string if absent.\r\n *\r\n * @type {string}\r\n */\r\n get imageSrc() {\r\n return this.dataset?.imgsrc || this.dataset?.image || \"\";\r\n }\r\n \r\n /**\r\n * Indicates whether this option has an associated image source.\r\n *\r\n * @type {boolean}\r\n */\r\n get hasImage() {\r\n return !!this.imageSrc;\r\n }\r\n \r\n /**\r\n * Gets the option's current value from the underlying <option> element.\r\n *\r\n * @type {string}\r\n */\r\n get value() {\r\n return this.targetElement.value;\r\n }\r\n \r\n /**\r\n * Gets whether the option is currently selected (proxied to the <option> element).\r\n *\r\n * @type {boolean}\r\n */\r\n get selected() {\r\n return this.targetElement.selected;\r\n }\r\n \r\n /**\r\n * Sets the selected state and triggers external selection listeners.\r\n * Uses selectedNonTrigger internally to update DOM/ARIA without firing external side effects first.\r\n *\r\n * @type {boolean}\r\n */\r\n set selected(value) {\r\n this.selectedNonTrigger = value;\r\n \r\n iEvents.callEvent([this, value], ...this.#privOnSelected);\r\n }\r\n \r\n /**\r\n * Gets whether the option is currently visible in the UI.\r\n *\r\n * @type {boolean}\r\n */\r\n get visible() {\r\n return this.#visible;\r\n }\r\n \r\n /**\r\n * Sets the visibility state; toggles \"hide\" class on the view and notifies visibility listeners.\r\n *\r\n * @type {boolean}\r\n */\r\n set visible(value) {\r\n if (this.#visible === value) return;\r\n this.#visible = value;\r\n \r\n const view = this.view?.getView();\r\n if (view) {\r\n view.classList.toggle(\"hide\", !value);\r\n }\r\n\r\n iEvents.callEvent([this, value], ...this.#privOnVisibilityChanged);\r\n }\r\n \r\n /**\r\n * Gets the selected state without triggering external listeners (alias of selected).\r\n *\r\n * @type {boolean}\r\n */\r\n get selectedNonTrigger() {\r\n return this.selected;\r\n }\r\n \r\n /**\r\n * Sets the selected state and updates input checked, CSS classes, ARIA attributes,\r\n * and the underlying <option> 'selected' attribute. Notifies internal selection listeners.\r\n *\r\n * @type {boolean}\r\n */\r\n set selectedNonTrigger(value) {\r\n const tag = this.view?.getTag(\"OptionInput\");\r\n const view = this.view?.getView();\r\n \r\n if (tag) {\r\n tag.checked = value;\r\n }\r\n\r\n if (view) {\r\n view.classList.toggle(\"checked\", !!value);\r\n view.setAttribute(\"aria-selected\", value ? \"true\" : \"false\");\r\n this.targetElement.toggleAttribute(\"selected\", !!value);\r\n }\r\n \r\n this.targetElement.selected = value;\r\n iEvents.callEvent([this, value], ...this.#privOnInternalSelected);\r\n }\r\n \r\n /**\r\n * Returns the display text for the option, applying tag translation and optional HTML allowance.\r\n * If allowHtml=false, returns stripped/sanitized text.\r\n *\r\n * @type {string}\r\n */\r\n get text() {\r\n const text = Libs.tagTranslate(this.dataset?.mask ?? this.targetElement.text);\r\n return this.options.allowHtml ? text : Libs.stripHtml(text);\r\n }\r\n \r\n /**\r\n * Returns a plain-text version of the display text (trimmed),\r\n * stripping HTML if allowHtml is true, otherwise the raw text.\r\n *\r\n * @type {string}\r\n */\r\n get textContent() {\r\n return this.options.allowHtml ? Libs.stripHtml(this.text).trim() : this.text.trim();\r\n }\r\n \r\n /**\r\n * Returns the dataset object of the underlying <option> element, or an empty object.\r\n *\r\n * @type {DOMStringMap|Record<string, string>}\r\n */\r\n get dataset() {\r\n return this.targetElement.dataset ?? {};\r\n }\r\n\r\n /**\r\n * Gets whether the option is currently highlighted (e.g., via keyboard navigation).\r\n *\r\n * @type {boolean}\r\n */\r\n get highlighted() {\r\n return this.#highlighted;\r\n }\r\n \r\n\r\n /**\r\n * Sets the highlighted state and toggles the \"highlight\" CSS class on the view.\r\n * Always syncs the DOM class even if the state is unchanged.\r\n *\r\n * @type {boolean}\r\n */\r\n set highlighted(value) {\r\n const val = !!value;\r\n const view = this.view?.getView?.();\r\n\r\n if (this.#highlighted !== val) {\r\n this.#highlighted = val;\r\n }\r\n\r\n if (view) {\r\n view.classList.toggle('highlight', val);\r\n }\r\n }\r\n\r\n \r\n /**\r\n * Registers a listener invoked when external selection changes (via setter `selected`).\r\n *\r\n * @param {(evtToken: any, el: OptionModel, selected: boolean) => void} callback - Selection listener.\r\n */\r\n onSelected(callback) {\r\n this.#privOnSelected.push(callback);\r\n }\r\n \r\n /**\r\n * Registers a listener invoked when internal selection changes (via setter `selectedNonTrigger`).\r\n *\r\n * @param {(evtToken: any, el: OptionModel, selected: boolean) => void} callback - Internal selection listener.\r\n */\r\n onInternalSelected(callback) {\r\n this.#privOnInternalSelected.push(callback);\r\n }\r\n \r\n /**\r\n * Registers a listener invoked when visibility changes (via setter `visible`).\r\n *\r\n * @param {(evtToken: any, model: OptionModel, visible: boolean) => void} callback - Visibility listener.\r\n */\r\n onVisibilityChanged(callback) {\r\n this.#privOnVisibilityChanged.push(callback);\r\n }\r\n \r\n /**\r\n * Hook called when the target <option> element changes.\r\n * Updates label content (HTML or text), image src/alt if present,\r\n * and synchronizes initial selected state to the view.\r\n */\r\n onTargetChanged() {\r\n const labelContent = this.view.getTag(\"LabelContent\");\r\n if (labelContent) {\r\n if (this.options.allowHtml) {\r\n labelContent.innerHTML = this.text;\r\n }\r\n else {\r\n labelContent.textContent = this.textContent;\r\n }\r\n }\r\n\r\n const imageTag = this.view.getTag(\"OptionImage\");\r\n if (imageTag && this.hasImage) {\r\n imageTag.src = this.imageSrc;\r\n imageTag.alt = this.text;\r\n }\r\n \r\n this.selectedNonTrigger = this.targetElement.selected;\r\n }\r\n}","import { Model } from \"../core/base/model\";\r\nimport { iEvents } from \"../utils/ievents\";\r\nimport { Libs } from \"../utils/libs\";\r\nimport { GroupView } from \"../views/group-view\";\r\nimport { OptionModel } from \"./option-model\";\r\n\r\n/**\r\n * @extends {Model<HTMLOptGroupElement, GroupViewTags, GroupView>}\r\n */\r\nexport class GroupModel extends Model {\r\n label = \"\";\r\n /** @type {OptionModel[]} */\r\n items = [];\r\n collapsed = false;\r\n #privOnCollapsedChanged = [];\r\n\r\n /**\r\n * Initializes a group model with options and an optional <optgroup> target.\r\n * Reads the label and collapsed state from the target element's attributes/dataset.\r\n *\r\n * @param {object} options - Configuration for the model.\r\n * @param {HTMLOptGroupElement} [targetElement] - The source <optgroup> element.\r\n */\r\n constructor(options, targetElement) {\r\n super(options, targetElement);\r\n if (targetElement) {\r\n this.label = targetElement.label;\r\n this.collapsed = Libs.string2Boolean(targetElement.dataset?.collapsed);\r\n }\r\n }\r\n\r\n /**\r\n * Returns the array of values from all option items within the group.\r\n *\r\n * @type {String[]}\r\n */\r\n get value() {\r\n return this.items.map(item => item.value);\r\n }\r\n\r\n /**\r\n * Returns the list of option items currently selected within the group.\r\n *\r\n * @type {OptionModel[]}\r\n */\r\n get selectedItems() {\r\n return this.items.filter(item => item.selected);\r\n }\r\n\r\n /**\r\n * Returns the list of option items currently visible within the group.\r\n *\r\n * @type {OptionModel[]}\r\n */\r\n get visibleItems() {\r\n return this.items.filter(item => item.visible);\r\n }\r\n\r\n /**\r\n * Indicates whether the group has at least one visible option item.\r\n *\r\n * @type {boolean}\r\n */\r\n get hasVisibleItems() {\r\n return this.visibleItems.length > 0;\r\n }\r\n\r\n /**\r\n * Updates the group's label from the new target element and propagates the change to the view.\r\n *\r\n * @param {HTMLOptGroupElement} targetElement - The updated <optgroup> element.\r\n */\r\n update(targetElement) {\r\n this.label = targetElement.label;\r\n if (this.view) {\r\n this.view.updateLabel(this.label);\r\n }\r\n }\r\n\r\n /**\r\n * Hook invoked when the target element reference changes.\r\n * Updates the view's label and collapsed state to keep UI in sync.\r\n */\r\n onTargetChanged() {\r\n if (this.view) {\r\n this.view.updateLabel(this.label);\r\n this.view.setCollapsed(this.collapsed);\r\n }\r\n }\r\n\r\n /**\r\n * Registers a callback to be invoked when the group's collapsed state changes.\r\n *\r\n * @param {(evtToken: any, model: GroupModel, collapsed: boolean) => void} callback - Listener for collapse changes.\r\n */\r\n onCollapsedChanged(callback) {\r\n this.#privOnCollapsedChanged.push(callback);\r\n }\r\n\r\n /**\r\n * Toggles the group's collapsed state, updates the view, and notifies registered listeners.\r\n */\r\n toggleCollapse() {\r\n this.collapsed = !this.collapsed;\r\n if (this.view) {\r\n this.view.setCollapsed(this.collapsed);\r\n }\r\n iEvents.callEvent([this, this.collapsed], ...this.#privOnCollapsedChanged);\r\n }\r\n\r\n /**\r\n * Adds an option item to this group and sets its back-reference to the group.\r\n *\r\n * @param {OptionModel} optionModel - The option to add.\r\n */\r\n addItem(optionModel) {\r\n this.items.push(optionModel);\r\n optionModel.group = this;\r\n }\r\n\r\n /**\r\n * Removes an option item from this group and clears its group reference.\r\n *\r\n * @param {OptionModel} optionModel - The option to remove.\r\n */\r\n removeItem(optionModel) {\r\n const index = this.items.indexOf(optionModel);\r\n if (index > -1) {\r\n this.items.splice(index, 1);\r\n optionModel.group = null;\r\n }\r\n }\r\n\r\n /**\r\n * Updates the group's visibility in the view, typically based on children visibility.\r\n * No-ops if the view is not initialized.\r\n */\r\n updateVisibility() {\r\n if (this.view) {\r\n this.view.updateVisibility();\r\n }\r\n }\r\n}","import { Libs } from \"../../utils/libs\";\r\nimport { Model } from \"./model\";\r\n\r\n/**\r\n * @template {ModelContract<any, any>} TItem\r\n * @implements {AdapterContract<TItem>}\r\n */\r\nexport class Adapter {\r\n /** @type {TItem[]} */\r\n items = [];\r\n adapterKey = Libs.randomString(12);\r\n\r\n isSkipEvent = false;\r\n\r\n\r\n /**\r\n * Initializes the adapter with an optional array of items and invokes onInit()\r\n * to perform any subclass-specific setup. Accepts a generic list of models.\r\n *\r\n * @param {TItem[]} [items=[]] - Initial items to be managed by the adapter.\r\n */\r\n constructor(items = []) {\r\n this.items = items;\r\n this.onInit();\r\n }\r\n\r\n /**\r\n * Lifecycle hook called once after construction. Override in subclasses to\r\n * perform setup tasks (e.g., event wiring, cache building).\r\n */\r\n onInit() {}\r\n\r\n /**\r\n * Binds an item model to its viewer at a given position. If the item has not\r\n * been initialized yet, renders the viewer; otherwise triggers an update.\r\n *\r\n * @param {any} item - The model instance to bind to the view.\r\n * @param {any} viewer - The view instance responsible for rendering the model.\r\n * @param {number} position - The index of the item within the adapter.\r\n */\r\n onViewHolder(item, viewer, position) {\r\n if (!item.isInit) {\r\n viewer.render();\r\n }\r\n else {\r\n viewer.update();\r\n }\r\n }\r\n\r\n /**\r\n * Registers a pre-change (debounced) callback for a property change pipeline.\r\n * The callback is scheduled with a minimal delay to batch rapid updates.\r\n *\r\n * @param {string} propName - The property name to observe (e.g., \"items\").\r\n * @param {Function} callback - Function to execute before the property changes.\r\n */\r\n onPropChanging(propName, callback) {\r\n Libs.timerProcess.setExecute(`${propName}ing_${this.adapterKey}`, callback, 1);\r\n }\r\n\r\n /**\r\n * Registers a post-change callback for a property change pipeline.\r\n * The callback is executed after the property is updated.\r\n *\r\n * @param {string} propName - The property name to observe (e.g., \"items\").\r\n * @param {Function} callback - Function to execute after the property changes.\r\n */\r\n onPropChanged(propName, callback) {\r\n Libs.timerProcess.setExecute(`${propName}_${this.adapterKey}`, callback);\r\n }\r\n\r\n /**\r\n * Triggers the post-change pipeline for a given property, passing optional parameters\r\n * to registered callbacks. Use this after mutating adapter state.\r\n *\r\n * @param {string} propName - The property name to emit (e.g., \"items\").\r\n * @param {...any} params - Parameters forwarded to the callbacks.\r\n */\r\n changeProp(propName, ...params) {\r\n Libs.timerProcess.run(`${propName}_${this.adapterKey}`, ...params);\r\n }\r\n\r\n /**\r\n * Triggers the pre-change pipeline for a given property, passing optional parameters\r\n * to registered callbacks. Use this before mutating adapter state.\r\n *\r\n * @param {string} propName - The property name to emit (e.g., \"items\").\r\n * @param {...any} params - Parameters forwarded to the callbacks.\r\n */\r\n changingProp(propName, ...params) {\r\n Libs.timerProcess.run(`${propName}ing_${this.adapterKey}`, ...params);\r\n }\r\n\r\n\r\n /**\r\n * Creates and returns a viewer instance for the given item within the specified parent container.\r\n * Override in subclasses to return a concrete view implementation tailored to TItem.\r\n *\r\n * @param {HTMLElement} parent - The container element that will host the viewer.\r\n * @param {TItem} item - The model instance for which the viewer is created.\r\n * @returns {any} - The created viewer instance; null by default.\r\n */\r\n viewHolder(parent, item) {\r\n return null;\r\n }\r\n\r\n /**\r\n * Returns the total number of items currently managed by the adapter.\r\n *\r\n * @returns {number} - The item count.\r\n */\r\n itemCount() {\r\n return this.items.length;\r\n }\r\n\r\n /**\r\n * Replaces the adapter's items with a new collection, emitting pre-change and post-change\r\n * notifications to observers. Does not render; call updateRecyclerView() to apply to the DOM.\r\n *\r\n * @param {TItem[]} items - The new list of items to set.\r\n */\r\n setItems(items) {\r\n this.changingProp(\"items\", items);\r\n this.items = items;\r\n this.changeProp(\"items\", items);\r\n }\r\n\r\n /**\r\n * Synchronizes adapter items from an external source by delegating to setItems().\r\n * Useful for keeping adapter state aligned with another data store.\r\n *\r\n * @param {TItem[]} items - The source list of items to synchronize.\r\n */\r\n syncFromSource(items) {\r\n this.setItems(items);\r\n }\r\n\r\n /**\r\n * Iterates through all items and ensures each has a viewer. For new items, calls viewHolder()\r\n * to create the viewer, then binds via onViewHolder() and marks the item as initialized.\r\n *\r\n * @param {HTMLElement|null} parent - The container element in which item viewers are rendered.\r\n */\r\n updateRecyclerView(parent) {\r\n for (let index = 0; index < this.itemCount(); index++) {\r\n let viewer = this.items[index].view;\r\n if (!this.items[index].isInit) {\r\n viewer = this.viewHolder(parent, this.items[index]);\r\n }\r\n this.onViewHolder(this.items[index], viewer, index);\r\n\r\n this.items[index].isInit = true;\r\n }\r\n }\r\n\r\n /**\r\n * Updates adapter data without performing any default actions.\r\n * Override in subclasses to implement custom data refresh logic.\r\n *\r\n * @param {TItem[]} items - The incoming data to apply to the adapter.\r\n */\r\n updateData(items) { }\r\n}","import { GroupModel } from \"../models/group-model\";\r\nimport { OptionModel } from \"../models/option-model\";\r\nimport { Adapter } from \"./base/adapter\";\r\n\r\n/**\r\n * @template {ModelContract<any, any>} TModel\r\n * @template {Adapter} TAdapter\r\n */\r\nexport class ModelManager {\r\n /** @type {Array<GroupModel|OptionModel>} */\r\n #privModelList = [];\r\n\r\n /** @type {new (...args: any[]) => TAdapter} */\r\n #privAdapter;\r\n\r\n /** @type {TAdapter} */\r\n #privAdapterHandle;\r\n\r\n /** @type {new (...args: any[]) => RecyclerViewContract<TAdapter>} */\r\n #privRecyclerView;\r\n\r\n /** @type {RecyclerViewContract<TAdapter>} */\r\n #privRecyclerViewHandle;\r\n\r\n options = null;\r\n \r\n /**\r\n * Constructs a ModelManager with configuration options used by created models and components.\r\n *\r\n * @param {object} options - Configuration object passed to GroupModel/OptionModel and view infrastructure.\r\n */\r\n constructor(options) {\r\n this.options = options;\r\n }\r\n\r\n /**\r\n * Registers the adapter class to be used for rendering and managing models.\r\n *\r\n * @param {new (...args: any[]) => TAdapter} adapter - The adapter constructor (class) to instantiate.\r\n */\r\n setupAdapter(adapter) {\r\n this.#privAdapter = adapter;\r\n }\r\n\r\n /**\r\n * Registers the RecyclerView class responsible for hosting and updating item views.\r\n *\r\n * @param {new (...args: any[]) => RecyclerViewContract<TAdapter>} recyclerView - The recycler view constructor.\r\n */\r\n setupRecyclerView(recyclerView) {\r\n this.#privRecyclerView = recyclerView;\r\n }\r\n\r\n /**\r\n * Builds model instances (GroupModel/OptionModel) from raw <optgroup>/<option> elements.\r\n * Preserves grouping relationships and returns the structured list.\r\n *\r\n * @param {Array<HTMLOptGroupElement|HTMLOptionElement>} modelData - Parsed DOM elements from the source <select>.\r\n * @returns {Array<GroupModel|OptionModel>} - The ordered list of group and option models.\r\n */\r\n createModelResources(modelData) {\r\n this.#privModelList = [];\r\n let currentGroup = null;\r\n \r\n modelData.forEach(data => {\r\n if (data.tagName === \"OPTGROUP\") {\r\n currentGroup = new GroupModel(this.options, data);\r\n this.#privModelList.push(currentGroup);\r\n } \r\n else if (data.tagName === \"OPTION\") {\r\n const optionModel = new OptionModel(this.options, /** @type {HTMLOptionElement} */ (data));\r\n \r\n if (data[\"__parentGroup\"] && currentGroup && \r\n data[\"__parentGroup\"] === currentGroup.targetElement) {\r\n currentGroup.addItem(optionModel);\r\n optionModel.group = currentGroup;\r\n } else {\r\n this.#privModelList.push(optionModel);\r\n currentGroup = null;\r\n }\r\n }\r\n });\r\n\r\n return this.#privModelList;\r\n }\r\n\r\n /**\r\n * Replaces the current model list with new data and syncs it into the adapter,\r\n * then refreshes the view to reflect changes.\r\n *\r\n * @param {Array<HTMLOptGroupElement|HTMLOptionElement>} modelData - New source elements to rebuild models from.\r\n */\r\n replace(modelData) {\r\n this.createModelResources(modelData);\r\n\r\n if (this.#privAdapterHandle) {\r\n this.#privAdapterHandle.syncFromSource(this.#privModelList);\r\n }\r\n\r\n this.refresh();\r\n }\r\n\r\n /**\r\n * Requests a view refresh if an adapter has been initialized,\r\n * typically used after external updates to model data.\r\n */\r\n notify() {\r\n if (!this.#privAdapterHandle) return;\r\n \r\n this.refresh();\r\n }\r\n\r\n /**\r\n * Initializes adapter and recycler view instances, attaches them to a container element,\r\n * and applies optional configuration overrides for adapter and recyclerView.\r\n *\r\n * @param {HTMLElement} viewElement - The container element where items will be rendered.\r\n * @param {object} [adapterOpt={}] - Optional properties to merge into the adapter instance.\r\n * @param {object} [recyclerViewOpt={}] - Optional properties to merge into the recycler view instance.\r\n */\r\n load(viewElement, adapterOpt = {}, recyclerViewOpt = {}) {\r\n this.#privAdapterHandle = new this.#privAdapter(this.#privModelList);\r\n Object.assign(this.#privAdapterHandle, adapterOpt);\r\n\r\n this.#privRecyclerViewHandle = new this.#privRecyclerView(viewElement);\r\n this.#privRecyclerViewHandle.setAdapter(this.#privAdapterHandle);\r\n Object.assign(this.#privRecyclerViewHandle, recyclerViewOpt);\r\n }\r\n\r\n /**\r\n * Diffs existing models against new <optgroup>/<option> data to update in place:\r\n * reuses existing models when possible, updates positions and group membership,\r\n * removes stale views, and notifies adapter and listeners about updates.\r\n *\r\n * @param {Array<HTMLOptGroupElement|HTMLOptionElement>} modelData - Fresh DOM elements reflecting the latest state.\r\n */\r\n update(modelData) {\r\n const oldModels = this.#privModelList;\r\n const newModels = [];\r\n \r\n const oldGroupMap = new Map();\r\n const oldOptionMap = new Map();\r\n \r\n oldModels.forEach(model => {\r\n if (model instanceof GroupModel) {\r\n oldGroupMap.set(model.label, model);\r\n } else if (model instanceof OptionModel) {\r\n oldOptionMap.set(model.value, model);\r\n }\r\n });\r\n\r\n let currentGroup = null;\r\n let position = 0;\r\n\r\n modelData.forEach((data, index) => {\r\n if (data.tagName === \"OPTGROUP\") {\r\n let dataVset = /** @type {HTMLOptGroupElement} */ (data);\r\n const existingGroup = oldGroupMap.get(dataVset.label);\r\n \r\n if (existingGroup) {\r\n existingGroup.update(dataVset);\r\n existingGroup.position = position;\r\n existingGroup.items = [];\r\n currentGroup = existingGroup;\r\n newModels.push(existingGroup);\r\n oldGroupMap.delete(dataVset.label);\r\n } else {\r\n currentGroup = new GroupModel(this.options, dataVset);\r\n currentGroup.position = position;\r\n newModels.push(currentGroup);\r\n }\r\n position++;\r\n }\r\n else if (data.tagName === \"OPTION\") {\r\n let dataVset = /** @type {HTMLOptionElement} */ (data);\r\n const existingOption = oldOptionMap.get(dataVset.value);\r\n \r\n if (existingOption) {\r\n existingOption.update(dataVset);\r\n existingOption.position = position;\r\n \r\n if (dataVset[\"__parentGroup\"] && currentGroup) {\r\n currentGroup.addItem(existingOption);\r\n existingOption.group = currentGroup;\r\n } else {\r\n existingOption.group = null;\r\n newModels.push(existingOption);\r\n }\r\n \r\n oldOptionMap.delete(dataVset.value);\r\n } else {\r\n const newOption = new OptionModel(this.options, dataVset);\r\n newOption.position = position;\r\n \r\n if (dataVset[\"__parentGroup\"] && currentGroup) {\r\n currentGroup.addItem(newOption);\r\n newOption.group = currentGroup;\r\n } else {\r\n newModels.push(newOption);\r\n }\r\n }\r\n position++;\r\n }\r\n });\r\n\r\n oldGroupMap.forEach(removedGroup => {\r\n if (removedGroup.view) {\r\n removedGroup.view.getView()?.remove();\r\n }\r\n });\r\n \r\n oldOptionMap.forEach(removedOption => {\r\n if (removedOption.view) {\r\n removedOption.view.getView()?.remove();\r\n }\r\n });\r\n\r\n this.#privModelList = newModels;\r\n \r\n if (this.#privAdapterHandle) {\r\n this.#privAdapterHandle.updateData(this.#privModelList);\r\n }\r\n\r\n this.onUpdated();\r\n this.refresh();\r\n }\r\n\r\n /**\r\n * Hook invoked after the manager completes an update or refresh cycle.\r\n * Override to run side effects (e.g., layout adjustments or analytics).\r\n */\r\n onUpdated() { }\r\n\r\n /**\r\n * Instructs the adapter to temporarily skip event handling (e.g., during batch updates).\r\n *\r\n * @param {boolean} value - True to skip events; false to restore normal behavior.\r\n */\r\n skipEvent(value) {\r\n this.#privAdapterHandle.isSkipEvent = value;\r\n }\r\n\r\n /**\r\n * Re-renders the recycler view if present and invokes the post-refresh hook.\r\n * No-op if the recycler view is not initialized.\r\n */\r\n refresh() {\r\n if (!this.#privRecyclerViewHandle) return;\r\n this.#privRecyclerViewHandle.refresh();\r\n this.onUpdated();\r\n }\r\n\r\n /**\r\n * Returns handles to the current resources, including the model list,\r\n * adapter instance, and recycler view instance.\r\n *\r\n * @returns {{modelList: (GroupModel|OptionModel)[], adapter: TAdapter, recyclerView: RecyclerViewContract<TAdapter>}}\r\n */\r\n getResources() {\r\n return {\r\n modelList: this.#privModelList,\r\n adapter: this.#privAdapterHandle,\r\n recyclerView: this.#privRecyclerViewHandle\r\n };\r\n }\r\n\r\n /**\r\n * Triggers the adapter's pre-change pipeline for a named event,\r\n * enabling observers to react before a change is applied.\r\n *\r\n * @param {string} event_name - The event or property name (e.g., \"items\", \"select\").\r\n */\r\n triggerChanging(event_name) {\r\n this.#privAdapterHandle.changingProp(event_name);\r\n }\r\n\r\n /**\r\n * Triggers the adapter's post-change pipeline for a named event,\r\n * notifying observers after a change has been applied.\r\n *\r\n * @param {string} event_name - The event or property name (e.g., \"items\", \"select\").\r\n */\r\n triggerChanged(event_name) {\r\n this.#privAdapterHandle.changeProp(event_name);\r\n }\r\n}\r\n","import {Libs} from \"../utils/libs.js\";\r\n\r\n/**\r\n * @class\r\n */\r\nexport class EmptyState {\r\n /**\r\n * @type {HTMLDivElement}\r\n */\r\n node = null;\r\n\r\n options = null;\r\n\r\n /**\r\n * Represents an empty state component that displays a message when no data or search results are available.\r\n * Provides methods to show/hide the state and check its visibility.\r\n */\r\n constructor(options = null) {\r\n options && this.init(options);\r\n }\r\n\r\n /**\r\n * Initializes the empty state element with ARIA attributes for accessibility and stores configuration options.\r\n *\r\n * @param {object} options - Configuration object containing text for \"no data\" and \"not found\" states.\r\n */\r\n init(options) {\r\n this.options = options;\r\n \r\n this.node = /** @type {HTMLDivElement} */ (Libs.nodeCreator({\r\n node: \"div\",\r\n classList: [\"selective-ui-empty-state\", \"hide\"],\r\n role: \"status\",\r\n ariaLive: \"polite\"\r\n }));\r\n }\r\n\r\n /**\r\n * Displays the empty state message based on the provided type.\r\n *\r\n * @param {\"notfound\" | \"nodata\"} [type=\"nodata\"] - Determines which message to show:\r\n * \"notfound\" for search results not found, \"nodata\" for no available data.\r\n */\r\n show(type = \"nodata\") {\r\n const text = type === \"notfound\" \r\n ? this.options.textNotFound \r\n : this.options.textNoData;\r\n \r\n this.node.textContent = text;\r\n this.node.classList.remove(\"hide\");\r\n }\r\n\r\n /**\r\n * Hides the empty state element by adding the \"hide\" class.\r\n */\r\n hide() {\r\n this.node.classList.add(\"hide\");\r\n }\r\n\r\n /**\r\n * Indicates whether the empty state is currently visible.\r\n *\r\n * @returns {boolean} - True if visible, false otherwise.\r\n */\r\n get isVisible() {\r\n return !this.node.classList.contains(\"hide\");\r\n }\r\n}","import { Libs } from \"../utils/libs\";\r\n\r\nexport class LoadingState {\r\n\r\n /** @type {HTMLDivElement} */\r\n node = null;\r\n \r\n options = null;\r\n\r\n /**\r\n * Represents a loading state component that displays a loading message during data fetch or processing.\r\n * Provides methods to show/hide the state and check its visibility.\r\n */\r\n constructor(options = null) { \r\n options && this.init(options); \r\n }\r\n \r\n /**\r\n * Initializes the loading state element with ARIA attributes for accessibility and stores configuration options.\r\n *\r\n * @param {object} options - Configuration object containing text for the loading message.\r\n */\r\n init(options) {\r\n this.options = options;\r\n this.node = /** @type {HTMLDivElement} */(Libs.nodeCreator({\r\n node: \"div\",\r\n classList: [\"selective-ui-loading-state\", \"hide\"],\r\n textContent: options.textLoading,\r\n role: \"status\",\r\n ariaLive: \"polite\"\r\n }));\r\n }\r\n\r\n /**\r\n * Displays the loading state message and adjusts its size based on whether items are present.\r\n *\r\n * @param {boolean} hasItems - If true, applies a \"small\" style for compact display.\r\n */\r\n show(hasItems) {\r\n this.node.textContent = this.options.textLoading;\r\n this.node.classList.toggle(\"small\", hasItems);\r\n this.node.classList.remove(\"hide\");\r\n }\r\n\r\n /**\r\n * Hides the loading state element by adding the \"hide\" class.\r\n */\r\n hide() {\r\n this.node.classList.add(\"hide\");\r\n }\r\n\r\n /**\r\n * Indicates whether the loading state is currently visible.\r\n *\r\n * @returns {boolean} - True if visible, false otherwise.\r\n */\r\n get isVisible() {\r\n return !this.node.classList.contains(\"hide\");\r\n }\r\n}","import { Adapter } from \"../core/base/adapter\";\r\nimport { GroupModel } from \"../models/group-model\";\r\nimport { OptionModel } from \"../models/option-model\";\r\nimport { GroupView } from \"../views/group-view\";\r\nimport { OptionView } from \"../views/option-view\";\r\n\r\n/**\r\n * @extends {Adapter<GroupModel|OptionModel>}\r\n */\r\nexport class MixedAdapter extends Adapter {\r\n isMultiple = false;\r\n #visibilityChangedCallbacks = [];\r\n #currentHighlightIndex = -1;\r\n /** @type {OptionModel} */\r\n #selectedItemSingle = null;\r\n\r\n /** @type {GroupModel[]} */\r\n groups = [];\r\n\r\n /** @type {OptionModel[]} */\r\n flatOptions = [];\r\n\r\n constructor(items = []) {\r\n super(items);\r\n this.#buildFlatStructure();\r\n }\r\n\r\n /**\r\n * Build flat list of all options for navigation\r\n */\r\n #buildFlatStructure() {\r\n this.flatOptions = [];\r\n this.groups = [];\r\n\r\n this.items.forEach(item => {\r\n if (item instanceof GroupModel) {\r\n this.groups.push(item);\r\n this.flatOptions.push(...item.items);\r\n } else if (item instanceof OptionModel) {\r\n this.flatOptions.push(item);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Creates and returns the appropriate view instance for the given item type.\r\n *\r\n * @param {HTMLElement} parent - The parent container element where the view will be attached.\r\n * @param {GroupModel|OptionModel} item - The data model representing either a group or an option.\r\n * @returns {GroupView|OptionView} - A new view instance corresponding to the item type.\r\n */\r\n viewHolder(parent, item) {\r\n if (item instanceof GroupModel) {\r\n return new GroupView(parent);\r\n } else {\r\n return new OptionView(parent);\r\n }\r\n }\r\n \r\n /**\r\n * Binds a data model (GroupModel or OptionModel) to its corresponding view\r\n * and delegates rendering logic based on the type of item.\r\n *\r\n * @param {GroupModel|OptionModel} item - The data model representing either a group or an option.\r\n * @param {GroupView|OptionView} viewer - The view instance that displays the item in the UI.\r\n * @param {number} position - The position (index) of the item within its parent list.\r\n */\r\n onViewHolder(item, viewer, position) {\r\n item.position = position;\r\n \r\n if (item instanceof GroupModel) {\r\n this.#handleGroupView(item, /** @type {GroupView} */ (viewer), position);\r\n } else if (item instanceof OptionModel) {\r\n this.#handleOptionView(item, /** @type {OptionView} */ (viewer), position);\r\n }\r\n\r\n item.isInit = true;\r\n }\r\n \r\n /**\r\n * Handles binding and rendering logic for a group view, including header behavior,\r\n * collapse/expand state, and initialization of option items.\r\n *\r\n * @param {GroupModel} groupModel - The data model representing the group and its items.\r\n * @param {GroupView} groupView - The view instance that renders the group in the UI.\r\n * @param {number} position - The position (index) of the group within a list.\r\n */\r\n #handleGroupView(groupModel, groupView, position) {\r\n super.onViewHolder(groupModel, groupView, position);\r\n groupModel.view = groupView;\r\n\r\n const header = groupView.getTag(\"GroupHeader\");\r\n header.textContent = groupModel.label;\r\n\r\n if (!groupModel.isInit) {\r\n header.style.cursor = \"pointer\";\r\n header.addEventListener(\"click\", () => {\r\n groupModel.toggleCollapse();\r\n });\r\n\r\n groupModel.onCollapsedChanged((evtToken, model, collapsed) => {\r\n model.items.forEach(optItem => {\r\n const optView = optItem.view?.getView();\r\n if (optView) {\r\n optView.style.display = collapsed ? \"none\" : \"\";\r\n }\r\n });\r\n this.onCollapsedChange(model, collapsed);\r\n });\r\n }\r\n\r\n const itemsContainer = groupView.getItemsContainer();\r\n groupModel.items.forEach((optionModel, idx) => {\r\n let optionViewer = optionModel.view;\r\n if (!optionModel.isInit) {\r\n optionViewer = new OptionView(itemsContainer);\r\n }\r\n this.#handleOptionView(optionModel, optionViewer, idx);\r\n optionModel.isInit = true;\r\n });\r\n\r\n groupView.setCollapsed(groupModel.collapsed);\r\n groupView.updateVisibility();\r\n }\r\n\r\n /**\r\n * Handles binding and rendering logic for an option item, including image setup,\r\n * label rendering, event wiring, and selection state synchronization.\r\n *\r\n * @param {OptionModel} optionModel - The data model representing a single option.\r\n * @param {OptionView} optionViewer - The view instance that renders the option in the UI.\r\n * @param {number} position - The index of this option within its group's item list.\r\n */\r\n #handleOptionView(optionModel, optionViewer, position) {\r\n optionViewer.isMultiple = this.isMultiple;\r\n optionViewer.hasImage = optionModel.hasImage;\r\n optionViewer.optionConfig = {\r\n imageWidth: optionModel.options.imageWidth,\r\n imageHeight: optionModel.options.imageHeight,\r\n imageBorderRadius: optionModel.options.imageBorderRadius,\r\n imagePosition: optionModel.options.imagePosition,\r\n labelValign: optionModel.options.labelValign,\r\n labelHalign: optionModel.options.labelHalign\r\n };\r\n\r\n if (!optionModel.isInit) {\r\n super.onViewHolder(optionModel, optionViewer, position);\r\n } else {\r\n optionViewer.update();\r\n }\r\n\r\n optionModel.view = optionViewer;\r\n\r\n if (optionModel.hasImage) {\r\n const imageTag = optionViewer.getTag(\"OptionImage\");\r\n if (imageTag) {\r\n imageTag.src = optionModel.imageSrc;\r\n imageTag.alt = optionModel.text;\r\n }\r\n }\r\n\r\n optionViewer.getTag(\"LabelContent\").innerHTML = optionModel.text;\r\n\r\n if (!optionModel.isInit) {\r\n optionViewer.getTag(\"OptionView\").addEventListener(\"click\", (ev) => {\r\n ev.stopPropagation();\r\n ev.preventDefault();\r\n\r\n if (this.isSkipEvent) return;\r\n\r\n if (this.isMultiple) {\r\n this.changingProp(\"select\");\r\n setTimeout(() => {\r\n optionModel.selected = !optionModel.selected;\r\n }, 5);\r\n } else if (optionModel.selected !== true) {\r\n this.changingProp(\"select\");\r\n setTimeout(() => {\r\n if (this.#selectedItemSingle) {\r\n this.#selectedItemSingle.selected = false;\r\n }\r\n optionModel.selected = true;\r\n }, 5);\r\n }\r\n });\r\n\r\n optionViewer.getTag(\"OptionView\").title = optionModel.textContent;\r\n\r\n optionViewer.getTag(\"OptionView\").addEventListener(\"mouseenter\", () => {\r\n if (this.isSkipEvent) return;\r\n this.setHighlight(this.flatOptions.indexOf(optionModel), false);\r\n });\r\n\r\n optionModel.onSelected((evtToken, el, selected) => {\r\n this.changeProp(\"selected\");\r\n });\r\n\r\n optionModel.onInternalSelected((evtToken, el, selected) => {\r\n if (selected) {\r\n this.#selectedItemSingle = optionModel;\r\n }\r\n this.changeProp(\"selected_internal\");\r\n });\r\n\r\n optionModel.onVisibilityChanged((evtToken, model, visible) => {\r\n if (model.group) {\r\n model.group.updateVisibility();\r\n }\r\n this.#notifyVisibilityChanged();\r\n });\r\n }\r\n\r\n if (optionModel.selected) {\r\n this.#selectedItemSingle = optionModel;\r\n optionModel.selectedNonTrigger = true;\r\n }\r\n }\r\n \r\n /**\r\n * Updates the list of items in the component and rebuilds its internal flat structure.\r\n *\r\n * @param {Array<GroupModel|OptionModel>} items - The new collection of items to be displayed.\r\n */\r\n setItems(items) {\r\n this.changingProp(\"items\", items);\r\n this.items = items;\r\n this.#buildFlatStructure();\r\n this.changeProp(\"items\", items);\r\n }\r\n \r\n /**\r\n * Synchronizes the component's items from an external source by delegating to setItems().\r\n *\r\n * @param {Array<GroupModel|OptionModel>} items - The new collection of items to sync.\r\n */\r\n syncFromSource(items) {\r\n this.setItems(items);\r\n }\r\n \r\n /**\r\n * Updates the component's data items and rebuilds the internal flat structure\r\n * without triggering change notifications.\r\n *\r\n * @param {Array<GroupModel|OptionModel>} items - The new collection of items to update.\r\n */\r\n updateData(items) {\r\n this.items = items;\r\n this.#buildFlatStructure();\r\n }\r\n \r\n /**\r\n * Returns all option items that are currently selected.\r\n *\r\n * @returns {OptionModel[]} - An array of selected option items from the flat list.\r\n */\r\n getSelectedItems() {\r\n return this.flatOptions.filter(item => item.selected);\r\n }\r\n\r\n /**\r\n * Returns the first selected option item, if any.\r\n *\r\n * @returns {OptionModel|undefined} - The first selected option or undefined if none are selected.\r\n */\r\n getSelectedItem() {\r\n return this.flatOptions.find(item => item.selected);\r\n }\r\n\r\n /**\r\n * Checks or unchecks all options when in multiple selection mode.\r\n *\r\n * @param {boolean} isChecked - If true, select all; if false, deselect all.\r\n */\r\n checkAll(isChecked) {\r\n if (this.isMultiple) {\r\n this.flatOptions.forEach(item => {\r\n item.selected = isChecked;\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Subscribes a callback to visibility changes across options.\r\n *\r\n * @param {(stats: {visibleCount:number,totalCount:number,hasVisible:boolean,isEmpty:boolean}) => void} callback\r\n * - Function to invoke when visibility stats change.\r\n */\r\n onVisibilityChanged(callback) {\r\n this.#visibilityChangedCallbacks.push(callback);\r\n }\r\n\r\n /**\r\n * Notifies all registered visibility-change callbacks with up-to-date statistics.\r\n * Computes visible and total counts, then emits aggregated state.\r\n */\r\n #notifyVisibilityChanged() {\r\n const visibleCount = this.flatOptions.filter(item => item.visible).length;\r\n const totalCount = this.flatOptions.length;\r\n\r\n this.#visibilityChangedCallbacks.forEach(callback => {\r\n callback({\r\n visibleCount,\r\n totalCount,\r\n hasVisible: visibleCount > 0,\r\n isEmpty: totalCount === 0\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * Computes and returns current visibility statistics for options.\r\n *\r\n * @returns {{visibleCount:number,totalCount:number,hasVisible:boolean,isEmpty:boolean}}\r\n * - Aggregated visibility information.\r\n */\r\n getVisibilityStats() {\r\n const visibleCount = this.flatOptions.filter(item => item.visible).length;\r\n const totalCount = this.flatOptions.length;\r\n\r\n return {\r\n visibleCount,\r\n totalCount,\r\n hasVisible: visibleCount > 0,\r\n isEmpty: totalCount === 0\r\n };\r\n }\r\n\r\n /**\r\n * Resets the highlight to the first visible option (index 0).\r\n */\r\n resetHighlight() {\r\n this.setHighlight(0);\r\n }\r\n\r\n /**\r\n * Moves the highlight forward/backward among visible options and optionally scrolls into view.\r\n *\r\n * @param {number} direction - Increment (+1) or decrement (-1) of the current visible index.\r\n * @param {boolean} [isScrollToView=true] - Whether to scroll the highlighted item into view.\r\n */\r\n navigate(direction, isScrollToView = true) {\r\n const visibleOptions = this.flatOptions.filter(opt => opt.visible);\r\n if (visibleOptions.length === 0) return;\r\n\r\n let currentVisibleIndex = visibleOptions.findIndex(\r\n opt => opt === this.flatOptions[this.#currentHighlightIndex]\r\n );\r\n\r\n if (currentVisibleIndex === -1) currentVisibleIndex = -1;\r\n\r\n let nextVisibleIndex = currentVisibleIndex + direction;\r\n\r\n if (nextVisibleIndex >= visibleOptions.length) nextVisibleIndex = 0;\r\n if (nextVisibleIndex < 0) nextVisibleIndex = visibleOptions.length - 1;\r\n\r\n const nextOption = visibleOptions[nextVisibleIndex];\r\n const flatIndex = this.flatOptions.indexOf(nextOption);\r\n\r\n this.setHighlight(flatIndex, isScrollToView);\r\n }\r\n\r\n /**\r\n * Triggers a click on the currently highlighted and visible option to select it.\r\n * No-op if nothing is highlighted or the highlighted item is not visible.\r\n */\r\n selectHighlighted() {\r\n if (this.#currentHighlightIndex > -1 && this.flatOptions[this.#currentHighlightIndex]) {\r\n const item = this.flatOptions[this.#currentHighlightIndex];\r\n if (item.visible) {\r\n const viewEl = item.view?.getView();\r\n if (viewEl) viewEl.click();\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Highlights a target option by flat index or model instance, skipping invisible items,\r\n * and optionally scrolls the highlighted element into view.\r\n *\r\n * @param {number|OptionModel} target - Flat index or the specific OptionModel to highlight.\r\n * @param {boolean} [isScrollToView=true] - Whether to scroll the highlighted item into view.\r\n */\r\n setHighlight(target, isScrollToView = true) {\r\n let index = 0;\r\n if (typeof target === \"number\") {\r\n index = target;\r\n } else if (target instanceof OptionModel) {\r\n const fi = this.flatOptions.indexOf(target);\r\n index = fi > -1 ? fi : 0;\r\n } else {\r\n index = 0;\r\n }\r\n \r\n if (this.#currentHighlightIndex > -1 && this.flatOptions[this.#currentHighlightIndex]) {\r\n this.flatOptions[this.#currentHighlightIndex].highlighted = false;\r\n }\r\n\r\n for (let i = index; i < this.flatOptions.length; i++) {\r\n const item = this.flatOptions[i];\r\n if (item.visible) {\r\n item.highlighted = true;\r\n this.#currentHighlightIndex = i;\r\n\r\n if (isScrollToView) {\r\n const el = item.view?.getView();\r\n if (el) {\r\n el.scrollIntoView({ block: \"center\", behavior: \"smooth\" });\r\n }\r\n }\r\n\r\n this.onHighlightChange(i, item.view?.getView()?.id);\r\n return;\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Hook invoked whenever the highlight changes.\r\n * Override to handle UI side effects (e.g., ARIA announcement, focus sync).\r\n *\r\n * @param {number} index - The flat index of the newly highlighted item.\r\n * @param {string|undefined} id - The DOM id of the highlighted item's view, if available.\r\n */\r\n onHighlightChange(index, id) {}\r\n\r\n \r\n /**\r\n * Hook invoked when a group's collapsed state changes.\r\n * Override to handle side effects like analytics or layout adjustments.\r\n *\r\n * @param {GroupModel} model - The group whose collapsed state changed.\r\n * @param {boolean} collapsed - The new collapsed state.\r\n */\r\n onCollapsedChange(model, collapsed) {}\r\n}","import { Libs } from \"../utils/libs.js\";\r\nimport { OptionHandle } from \"./option-handle.js\";\r\nimport { ResizeObserverService } from \"../services/resize-observer.js\"\r\nimport { ModelManager } from \"../core/model-manager.js\";\r\nimport { OptionModel } from \"../models/option-model.js\";\r\nimport { EmptyState } from \"./empty-state.js\";\r\nimport { LoadingState } from \"./loading-state.js\";\r\nimport { MixedAdapter } from \"../adapter/mixed-adapter.js\";\r\n\r\n/**\r\n * @class\r\n */\r\nexport class Popup {\r\n /** @type {ModelManager<OptionModel, MixedAdapter>} */\r\n #modelManager;\r\n\r\n /**\r\n * Represents a popup component that manages rendering and interaction for a dropdown panel.\r\n * Stores a reference to the ModelManager for handling option models and adapter logic.\r\n *\r\n * @param {HTMLSelectElement|null} [select=null] - The source select element to bind.\r\n * @param {object|null} [options=null] - Configuration options for the popup.\r\n * @param {ModelManager|null} [modelManager=null] - The model manager instance for data handling.\r\n */\r\n constructor(select = null, options = null, modelManager = null) {\r\n this.#modelManager = modelManager;\r\n if (select && options) {\r\n this.init(select, options);\r\n }\r\n }\r\n\r\n options = null;\r\n isCreated = false;\r\n\r\n /**\r\n * @type {MixedAdapter}\r\n */\r\n optionAdapter = null;\r\n \r\n /**\r\n * @type {HTMLDivElement}\r\n */\r\n node = null;\r\n\r\n /**\r\n * @type {EffectorInterface}\r\n */\r\n #effSvc = null;\r\n\r\n /**\r\n * @type {ResizeObserverService}\r\n */\r\n #resizeObser;\r\n\r\n #parent = null;\r\n\r\n /**\r\n * @type {OptionHandle}\r\n */\r\n optionHandle = null;\r\n\r\n /**\r\n * @type {EmptyState}\r\n */\r\n emptyState = null;\r\n\r\n /**\r\n * @type {LoadingState}\r\n */\r\n loadingState = null;\r\n\r\n /**\r\n * @type {RecyclerViewContract<MixedAdapter>}\r\n */\r\n recyclerView = null;\r\n\r\n /**\r\n * @type {HTMLDivElement}\r\n */\r\n #optionsContainer = null;\r\n\r\n #scrollListener = null;\r\n\r\n /**\r\n * @type {NodeJS.Timeout}\r\n */\r\n #hideLoadHandle = null;\r\n \r\n /**\r\n * Initializes the popup UI: creates DOM structure, wires OptionHandle, LoadingState, and EmptyState,\r\n * binds ModelManager resources (adapter/recyclerView), and sets up empty-state logic.\r\n *\r\n * @param {HTMLSelectElement} select - The source select element to bind.\r\n * @param {object} options - Configuration for panel, IDs, multiple mode, and texts.\r\n */\r\n init(select, options) {\r\n this.optionHandle = new OptionHandle(options);\r\n this.emptyState = new EmptyState(options);\r\n this.loadingState = new LoadingState(options);\r\n \r\n const nodeMounted = Libs.mountNode({\r\n PopupContainer: {\r\n tag: {node: \"div\", classList: \"selective-ui-popup\", style: {maxHeight: options.panelHeight}},\r\n child: {\r\n OptionHandle: {\r\n tag: this.optionHandle.node\r\n },\r\n OptionsContainer: {\r\n tag: {id: options.SEID_LIST, node: \"div\", classList: \"selective-ui-options-container\", role: \"listbox\"}\r\n },\r\n LoadingState: {\r\n tag: this.loadingState.node\r\n },\r\n EmptyState: {\r\n tag: this.emptyState.node\r\n }\r\n }\r\n }\r\n });\r\n \r\n this.node = nodeMounted.view;\r\n this.#optionsContainer = nodeMounted.tags.OptionsContainer;\r\n this.#parent = Libs.getBinderMap(select);\r\n this.options = options;\r\n \r\n this.#modelManager.load(this.#optionsContainer, {isMultiple: options.multiple});\r\n const MMResources = this.#modelManager.getResources();\r\n this.optionAdapter = MMResources.adapter;\r\n this.recyclerView = MMResources.recyclerView;\r\n\r\n this.optionHandle.OnSelectAll(() => {\r\n MMResources.adapter.checkAll(true);\r\n });\r\n this.optionHandle.OnDeSelectAll(() => {\r\n MMResources.adapter.checkAll(false);\r\n });\r\n\r\n this.#setupEmptyStateLogic();\r\n }\r\n\r\n /**\r\n * Shows the loading state and temporarily skips model events.\r\n * Adjusts size based on current visibility stats and triggers a resize.\r\n */\r\n async showLoading() {\r\n clearTimeout(this.#hideLoadHandle);\r\n\r\n this.#modelManager.skipEvent(true);\r\n if (Libs.string2Boolean(this.options.loadingfield) === false) return;\r\n this.loadingState.show(this.optionAdapter.getVisibilityStats().hasVisible);\r\n // this.#optionsContainer.classList.add(\"hide\");\r\n this.optionHandle.hide();\r\n this.triggerResize();\r\n }\r\n\r\n /**\r\n * Hides the loading state after a short delay, restores event handling,\r\n * updates empty state based on adapter visibility stats, and triggers a resize.\r\n */\r\n async hideLoading() {\r\n clearTimeout(this.#hideLoadHandle);\r\n\r\n this.#hideLoadHandle = setTimeout(() => {\r\n this.#modelManager.skipEvent(false);\r\n this.loadingState.hide();\r\n \r\n const stats = this.optionAdapter.getVisibilityStats();\r\n this.#updateEmptyState(stats);\r\n \r\n this.triggerResize();\r\n }, 200);\r\n }\r\n\r\n /**\r\n * Subscribes to adapter visibility and item changes to keep the empty state in sync.\r\n * Triggers resize when items change to reflect layout updates.\r\n */\r\n #setupEmptyStateLogic() {\r\n this.optionAdapter.onVisibilityChanged((stats) => {\r\n this.#updateEmptyState(stats);\r\n });\r\n \r\n this.optionAdapter.onPropChanged(\"items\", () => {\r\n const stats = this.optionAdapter.getVisibilityStats();\r\n this.#updateEmptyState(stats);\r\n\r\n this.triggerResize();\r\n });\r\n }\r\n\r\n /**\r\n * Updates the empty state and option container visibility based on aggregated stats.\r\n * Shows \"no data\" when empty, \"not found\" when no visible items, otherwise shows options and handle.\r\n *\r\n * @param {{visibleCount:number,totalCount:number,hasVisible:boolean,isEmpty:boolean}|undefined} stats - Visibility stats; computed if omitted.\r\n */\r\n #updateEmptyState(stats = null) {\r\n if (!stats) {\r\n stats = this.optionAdapter.getVisibilityStats();\r\n }\r\n\r\n if (stats?.isEmpty) {\r\n this.emptyState.show(\"nodata\");\r\n this.#optionsContainer.classList.add(\"hide\");\r\n this.optionHandle.hide();\r\n } else if (stats && !stats.hasVisible) {\r\n this.emptyState.show(\"notfound\");\r\n this.#optionsContainer.classList.add(\"hide\");\r\n this.optionHandle.hide();\r\n } else {\r\n this.emptyState.hide();\r\n this.#optionsContainer.classList.remove(\"hide\");\r\n this.optionHandle.refresh();\r\n }\r\n }\r\n\r\n /**\r\n * Registers a callback for adapter property pre-change notifications.\r\n *\r\n * @param {string} propName - The adapter property to observe.\r\n * @param {Function} callback - Invoked before the property changes.\r\n */\r\n onAdapterPropChanging(propName, callback) {\r\n this.optionAdapter.onPropChanging(propName, callback);\r\n }\r\n\r\n /**\r\n * Registers a callback for adapter property post-change notifications.\r\n *\r\n * @param {string} propName - The adapter property to observe.\r\n * @param {Function} callback - Invoked after the property changes.\r\n */\r\n onAdapterPropChanged(propName, callback) {\r\n this.optionAdapter.onPropChanged(propName, callback);\r\n }\r\n\r\n /**\r\n * Injects an effector service used to perform side effects (e.g., animations or external actions).\r\n *\r\n * @param {EffectorInterface} effectorSvc - The effector service instance.\r\n */\r\n setupEffector(effectorSvc) {\r\n this.#effSvc = effectorSvc;\r\n }\r\n\r\n /**\r\n * Opens the popup: creates and attaches DOM if needed, initializes observers and effector,\r\n * computes position and dimensions, and runs expand animation. Invokes callback on completion.\r\n *\r\n * @param {Function|null} [callback=null] - Function to call after the popup finishes expanding.\r\n */\r\n open(callback = null) {\r\n if (!this.isCreated) {\r\n document.body.appendChild(this.node);\r\n this.isCreated = true;\r\n\r\n this.#resizeObser = new ResizeObserverService();\r\n this.#effSvc.setElement(this.node);\r\n\r\n this.node.addEventListener(\"mousedown\", (e) => {\r\n e.stopPropagation();\r\n e.preventDefault();\r\n });\r\n }\r\n\r\n this.optionHandle.refresh();\r\n this.#updateEmptyState();\r\n \r\n const location = this.#getParentLocation();\r\n const {position, top, maxHeight, realHeight} = this.#calculatePosition(location);\r\n \r\n this.#effSvc.expand({\r\n duration: this.options.animationtime,\r\n display: \"flex\",\r\n width: location.width,\r\n left: location.left,\r\n top: top,\r\n maxHeight: maxHeight,\r\n realHeight: realHeight,\r\n position: position,\r\n onComplete: () => {\r\n this.#resizeObser.onChanged = (newLocation) => this.#handleResize(newLocation);\r\n this.#resizeObser.connect(this.#parent.container.tags.ViewPanel);\r\n callback && callback();\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Closes the popup: disconnects the resize observer and runs collapse animation.\r\n * Safely no-ops if the popup has not been created.\r\n *\r\n * @param {Function|null} [callback=null] - Function to call after the popup finishes collapsing.\r\n */\r\n close(callback = null) {\r\n if (!this.isCreated) {\r\n return;\r\n }\r\n\r\n this.#resizeObser.disconnect();\r\n \r\n this.#effSvc.collapse({\r\n duration: this.options.animationtime,\r\n onComplete: callback\r\n });\r\n }\r\n\r\n /**\r\n * Programmatically triggers a resize recalculation if the popup is created,\r\n * causing the layout to update based on the current parent dimensions.\r\n */\r\n triggerResize() {\r\n if (this.isCreated) {\r\n this.#resizeObser.trigger();\r\n }\r\n }\r\n\r\n /**\r\n * Enables infinite scroll by listening to container scroll events and loading more data\r\n * when nearing the bottom, respecting pagination state (enabled/loading/hasMore).\r\n *\r\n * @param {object} searchController - Controller providing pagination state and loadMore().\r\n * @param {object} options - Additional configuration for the infinite scroll behavior.\r\n */\r\n setupInfiniteScroll(searchController, options) {\r\n this.#scrollListener = async () => {\r\n const state = searchController.getPaginationState();\r\n \r\n if (!state.isPaginationEnabled) {\r\n return;\r\n }\r\n\r\n const container = this.node;\r\n const scrollTop = container.scrollTop;\r\n const scrollHeight = container.scrollHeight;\r\n const clientHeight = container.clientHeight;\r\n \r\n if (scrollHeight - scrollTop - clientHeight < 100) {\r\n if (!state.isLoading && state.hasMore) {\r\n const result = await searchController.loadMore();\r\n \r\n if (!result.success && result.message) {\r\n console.log(\"Load more:\", result.message);\r\n }\r\n }\r\n }\r\n };\r\n\r\n this.node.addEventListener(\"scroll\", this.#scrollListener);\r\n }\r\n\r\n /**\r\n * Computes the parent panel's location and box metrics, including size, position,\r\n * padding, and border, accounting for iOS visual viewport offsets.\r\n *\r\n * @returns {{\r\n * width:number, height:number, top:number, left:number,\r\n * padding:{top:number,right:number,bottom:number,left:number},\r\n * border:{top:number,right:number,bottom:number,left:number}\r\n * }} - The parent panel metrics in viewport coordinates.\r\n */\r\n #getParentLocation() {\r\n const viewPanel = this.#parent.container.tags.ViewPanel;\r\n const rect = viewPanel.getBoundingClientRect();\r\n const style = window.getComputedStyle(viewPanel);\r\n\r\n const vv = window.visualViewport;\r\n const is_ios = Libs.IsIOS();\r\n \r\n const viewportOffsetY = vv && is_ios ? vv.offsetTop : 0;\r\n const viewportOffsetX = vv && is_ios ? vv.offsetLeft : 0;\r\n\r\n return {\r\n width: rect.width,\r\n height: rect.height,\r\n top: rect.top - viewportOffsetY,\r\n left: rect.left - viewportOffsetX,\r\n padding: {\r\n top: parseFloat(style.paddingTop),\r\n right: parseFloat(style.paddingRight),\r\n bottom: parseFloat(style.paddingBottom),\r\n left: parseFloat(style.paddingLeft),\r\n },\r\n border: {\r\n top: parseFloat(style.borderTopWidth),\r\n right: parseFloat(style.borderRightWidth),\r\n bottom: parseFloat(style.borderBottomWidth),\r\n left: parseFloat(style.borderLeftWidth),\r\n }\r\n };\r\n }\r\n\r\n /**\r\n * Determines popup placement (top/bottom) and height constraints based on available viewport space,\r\n * content size, and configured min/max heights; returns final position, top, and heights.\r\n *\r\n * @param {{width:number,height:number,top:number,left:number}} location - Parent panel metrics.\r\n * @returns {{position:string, top:number, maxHeight:number, realHeight:number, contentHeight:number}}\r\n * - Calculated layout values for the popup.\r\n */\r\n #calculatePosition(location) {\r\n const vv = window.visualViewport;\r\n const is_ios = Libs.IsIOS();\r\n const viewportHeight = vv?.height ?? window.innerHeight;\r\n const viewportOffsetY = vv && is_ios ? vv.offsetTop : 0;\r\n\r\n const gap = 3;\r\n const safeMargin = 15;\r\n \r\n const dimensions = this.#effSvc.getHiddenDimensions(\"flex\");\r\n const contentHeight = dimensions.scrollHeight;\r\n\r\n const configMaxHeight = parseFloat(this.options.panelHeight) || 220;\r\n const configMinHeight = parseFloat(this.options.panelMinHeight) || 100;\r\n\r\n const spaceBelow = viewportHeight - (location.top + location.height) - gap;\r\n const spaceAbove = location.top - gap;\r\n\r\n let position = \"bottom\";\r\n let maxHeight = configMaxHeight;\r\n let realHeight = Math.min(contentHeight, maxHeight);\r\n const heightOri = spaceBelow - safeMargin;\r\n \r\n if (realHeight >= configMinHeight ? heightOri >= configMinHeight : heightOri >= realHeight) {\r\n position = \"bottom\";\r\n maxHeight = Math.min(spaceBelow - safeMargin, configMaxHeight);\r\n } \r\n else if (spaceAbove >= Math.max(realHeight, configMinHeight)) {\r\n position = \"top\";\r\n maxHeight = Math.min(spaceAbove - safeMargin, configMaxHeight);\r\n }\r\n else {\r\n if (spaceBelow >= spaceAbove) {\r\n position = \"bottom\";\r\n maxHeight = Math.max(spaceBelow - safeMargin, configMinHeight);\r\n } else {\r\n position = \"top\";\r\n maxHeight = Math.max(spaceAbove - safeMargin, configMinHeight);\r\n }\r\n }\r\n\r\n realHeight = Math.min(contentHeight, maxHeight);\r\n \r\n const top = position === \"bottom\"\r\n ? (location.top + location.height + gap + viewportOffsetY)\r\n : (location.top - realHeight - gap + viewportOffsetY);\r\n\r\n return {position, top, maxHeight, realHeight, contentHeight};\r\n }\r\n\r\n /**\r\n * Handles parent resize events by recalculating placement and dimensions,\r\n * then animates the popup to the new size and position.\r\n *\r\n * @param {{width:number,height:number,top:number,left:number}} location - Updated parent metrics.\r\n */\r\n #handleResize(location) {\r\n const {position, top, maxHeight, realHeight} = this.#calculatePosition(location);\r\n \r\n this.#effSvc.resize({\r\n duration: this.options.animationtime,\r\n width: location.width,\r\n left: location.left,\r\n top: top,\r\n maxHeight: maxHeight,\r\n realHeight: realHeight,\r\n position: position,\r\n animate: true\r\n });\r\n }\r\n}","import {Libs} from \"../utils/libs.js\";\r\n\r\n/**\r\n * @class\r\n */\r\nexport class SearchBox {\r\n /**\r\n * Creates a searchable input box component with optional configuration\r\n * and initializes it if options are provided.\r\n *\r\n * @param {object|null} [options=null] - Configuration (e.g., placeholder, accessibility IDs).\r\n */\r\n constructor(options = null) {\r\n this.options = options;\r\n options && this.init(options);\r\n }\r\n\r\n /**\r\n * @type {MountViewResult<any>}\r\n */\r\n nodeMounted = null;\r\n\r\n /**\r\n * @type {HTMLDivElement}\r\n */\r\n node = null;\r\n\r\n /**\r\n * @type {HTMLInputElement}\r\n */\r\n SearchInput = null;\r\n\r\n /**\r\n * @type {Function|null}\r\n */\r\n onSearch = null;\r\n\r\n options = null;\r\n\r\n onNavigate = null;\r\n onEnter = null;\r\n onEsc = null;\r\n \r\n /**\r\n * Initializes the search box DOM, sets ARIA attributes, and wires keyboard/mouse/input events.\r\n * Supports navigation (ArrowUp/ArrowDown/Tab), Enter, and Escape through callbacks.\r\n *\r\n * @param {object} options - Configuration including placeholder and SEID_LIST for aria-controls.\r\n */\r\n init(options) {\r\n this.nodeMounted = Libs.mountNode({\r\n SearchBox: {\r\n tag: {node: \"div\", classList: [\"selective-ui-searchbox\", \"hide\"]},\r\n child: {\r\n SearchInput: {\r\n tag: {\r\n id: Libs.randomString(), \r\n node: \"input\", \r\n type: \"search\", \r\n classList: [\"selective-ui-searchbox-input\"], \r\n placeholder: options.placeholder, \r\n role: \"searchbox\",\r\n ariaControls: options.SEID_LIST,\r\n ariaAutocomplete: \"list\"\r\n }\r\n }\r\n }\r\n }\r\n });\r\n this.node = /** @type {HTMLDivElement} */ (this.nodeMounted.view);\r\n this.SearchInput = this.nodeMounted.tags.SearchInput;\r\n\r\n let isControlKey = false;\r\n\r\n /** @type {HTMLInputElement} */\r\n const SearchInput = this.nodeMounted.tags.SearchInput;\r\n\r\n SearchInput.addEventListener(\"mousedown\", (e) => {\r\n e.stopPropagation();\r\n });\r\n SearchInput.addEventListener(\"mouseup\", (e) => {\r\n e.stopPropagation();\r\n });\r\n SearchInput.addEventListener(\"keydown\", (e) => {\r\n isControlKey = false;\r\n if (e.key === \"ArrowDown\" || e.key === \"Tab\") {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n isControlKey = true;\r\n this.onNavigate?.(1);\r\n } \r\n else if (e.key === \"ArrowUp\") {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n isControlKey = true;\r\n this.onNavigate?.(-1);\r\n } \r\n else if (e.key === \"Enter\") {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n isControlKey = true;\r\n this.onEnter?.();\r\n }\r\n else if (e.key === \"Escape\") {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n isControlKey = true;\r\n this.onEsc?.();\r\n }\r\n });\r\n SearchInput.addEventListener(\"input\", (e) => {\r\n if (isControlKey) {\r\n return;\r\n }\r\n \r\n this.onSearch && this.onSearch(this.nodeMounted.tags.SearchInput.value, true);\r\n });\r\n }\r\n\r\n /**\r\n * Shows the search box, toggles read-only based on `options.searchable`,\r\n * and focuses the input when searchable.\r\n */\r\n show() {\r\n this.node.classList.remove(\"hide\");\r\n this.SearchInput.readOnly = !this.options.searchable;\r\n if (this.options.searchable) {\r\n requestAnimationFrame(() => {\r\n this.SearchInput.focus();\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Hides the search box by adding the \"hide\" class.\r\n */\r\n hide() {\r\n this.node.classList.add(\"hide\");\r\n }\r\n\r\n /**\r\n * Clears the current search value and optionally triggers the onSearch callback.\r\n *\r\n * @param {boolean} [isTrigger=true] - Whether to invoke onSearch with an empty string.\r\n */\r\n clear(isTrigger = true) {\r\n this.nodeMounted.tags.SearchInput.value = \"\";\r\n this.onSearch && this.onSearch(\"\", isTrigger);\r\n }\r\n\r\n /**\r\n * Updates the input's placeholder text, stripping any HTML for safety.\r\n *\r\n * @param {string} value - The new placeholder text.\r\n */\r\n setPlaceHolder(value) {\r\n this.SearchInput.placeholder = Libs.stripHtml(value);\r\n }\r\n\r\n /**\r\n * Sets the active descendant for ARIA to indicate which option is currently highlighted.\r\n *\r\n * @param {string} id - The DOM id of the active option element.\r\n */\r\n setActiveDescendant(id) {\r\n this.SearchInput.setAttribute(\"aria-activedescendant\", id);\r\n }\r\n}","/**\r\n * @returns {EffectorInterface}\r\n */\r\nexport function Effector(query) {\r\n return new class {\r\n /**\r\n * @type {HTMLElement}\r\n */\r\n element;\r\n #timeOut = null;\r\n #resizeTimeout = null;\r\n #isAnimating = false;\r\n \r\n /**\r\n * Provides an effector utility that controls animations and resizing for a target element.\r\n * Supports setting the element by selector or node, canceling in-flight animations/timers,\r\n * and exposes methods (expand, collapse, resize) via the returned object instance.\r\n *\r\n * @param {string|HTMLElement} [query] - A CSS selector or the target element to control.\r\n */\r\n constructor(query = null) {\r\n if (query) {\r\n this.setElement(query);\r\n }\r\n }\r\n\r\n /**\r\n * Sets the target element to be controlled by the effector.\r\n * Accepts either a CSS selector or a direct HTMLElement reference.\r\n *\r\n * @param {string|HTMLElement} query - The element or selector to bind.\r\n */\r\n setElement(query) {\r\n if (typeof query === \"string\") {\r\n this.element = document.querySelector(query);\r\n } else {\r\n this.element = query;\r\n }\r\n }\r\n\r\n /**\r\n * Cancels any pending timeouts or resize triggers and resets the animation state.\r\n * Use this to stop ongoing expand/collapse/resize animations immediately.\r\n *\r\n * @returns {this} - The effector instance for chaining.\r\n */\r\n cancel() {\r\n if (this.#timeOut) {\r\n clearTimeout(this.#timeOut);\r\n this.#timeOut = null;\r\n }\r\n if (this.#resizeTimeout) {\r\n clearTimeout(this.#resizeTimeout);\r\n this.#resizeTimeout = null;\r\n }\r\n this.#isAnimating = false;\r\n return this;\r\n }\r\n\r\n /**\r\n * Get hidden dimensions\r\n * @param {string} display \r\n * @returns {{width: number, height: number, scrollHeight: number}}\r\n */\r\n getHiddenDimensions(display = \"flex\") {\r\n const originalStyles = {\r\n display: this.element.style.display,\r\n visibility: this.element.style.visibility,\r\n position: this.element.style.position,\r\n height: this.element.style.height,\r\n width: this.element.style.width,\r\n };\r\n\r\n Object.assign(this.element.style, {\r\n display: display,\r\n visibility: \"hidden\",\r\n position: \"fixed\",\r\n height: \"fit-content\",\r\n width: \"fit-content\"\r\n });\r\n\r\n const getComputedStyle = window.getComputedStyle(this.element);\r\n const borderTopWidth = parseFloat(getComputedStyle.borderTopWidth);\r\n const borderBottomWidth = parseFloat(getComputedStyle.borderBottomWidth);\r\n\r\n const scrollHeight = this.element.scrollHeight + borderTopWidth + borderBottomWidth;\r\n\r\n const rect = this.element.getBoundingClientRect();\r\n \r\n const dimensions = {\r\n width: rect.width,\r\n height: rect.height + borderTopWidth + borderBottomWidth,\r\n scrollHeight: scrollHeight\r\n };\r\n\r\n Object.assign(this.element.style, originalStyles);\r\n\r\n return dimensions;\r\n }\r\n\r\n /**\r\n * Expand animation (open popup)\r\n * @param {Object} config\r\n * @param {number} config.duration - Animation duration in ms\r\n * @param {string} config.display - Display type\r\n * @param {number} config.width - Target width\r\n * @param {number} config.left - Left position\r\n * @param {number} config.top - Top position\r\n * @param {number} config.maxHeight - Max height\r\n * @param {number} config.realHeight - Real height\r\n * @param {string} config.position - Position type (top/bottom)\r\n * @param {Function} config.onComplete - Callback when complete\r\n * @returns {this}\r\n */\r\n expand(config) {\r\n this.cancel();\r\n this.#isAnimating = true;\r\n\r\n const {\r\n duration = 200,\r\n display = \"flex\",\r\n width,\r\n left,\r\n top,\r\n maxHeight,\r\n realHeight,\r\n position = \"bottom\",\r\n onComplete\r\n } = config;\r\n\r\n const initialTop = position === \"bottom\" \r\n ? top \r\n : top + realHeight;\r\n\r\n Object.assign(this.element.style, {\r\n display: display,\r\n width: `${width}px`,\r\n left: `${left}px`,\r\n top: `${initialTop}px`,\r\n maxHeight: `${maxHeight}px`,\r\n height: \"0px\",\r\n opacity: \"0\",\r\n overflow: \"hidden\",\r\n transition: \"none\"\r\n });\r\n\r\n this.element.classList.toggle(\"position-top\", position === \"top\");\r\n this.element.classList.toggle(\"position-bottom\", position === \"bottom\");\r\n\r\n requestAnimationFrame(() => {\r\n const isScrollable = realHeight >= maxHeight;\r\n \r\n Object.assign(this.element.style, {\r\n transition: `top ${duration}ms, height ${duration}ms, opacity ${duration}ms`,\r\n top: `${top}px`,\r\n height: `${realHeight}px`,\r\n opacity: \"1\",\r\n overflow: isScrollable ? \"auto\" : \"hidden\"\r\n });\r\n\r\n this.#timeOut = setTimeout(() => {\r\n this.element.style.transition = \"none\";\r\n this.#isAnimating = false;\r\n onComplete && onComplete();\r\n }, duration);\r\n });\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Collapse animation (close popup)\r\n * @param {Object} config\r\n * @param {number} config.duration - Animation duration in ms\r\n * @param {Function} config.onComplete - Callback when complete\r\n * @returns {this}\r\n */\r\n collapse(config) {\r\n this.cancel();\r\n this.#isAnimating = true;\r\n\r\n const {\r\n duration = 200,\r\n onComplete\r\n } = config;\r\n\r\n const currentHeight = this.element.offsetHeight;\r\n const currentTop = this.element.offsetTop;\r\n const position = this.element.classList.contains(\"position-top\") ? \"top\" : \"bottom\";\r\n const isScrollable = (this.element.scrollHeight - this.element.offsetHeight) > 0;\r\n\r\n const finalTop = position === \"top\" \r\n ? currentTop + currentHeight\r\n : currentTop;\r\n\r\n requestAnimationFrame(() => {\r\n Object.assign(this.element.style, {\r\n transition: `height ${duration}ms, top ${duration}ms, opacity ${duration}ms`,\r\n height: \"0px\",\r\n top: `${finalTop}px`,\r\n opacity: \"0\",\r\n overflow: isScrollable ? \"auto\" : \"hidden\"\r\n });\r\n\r\n this.#timeOut = setTimeout(() => {\r\n Object.assign(this.element.style, {\r\n display: \"none\",\r\n transition: \"none\"\r\n });\r\n this.#isAnimating = false;\r\n onComplete && onComplete();\r\n }, duration);\r\n });\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * show Swipe animation (close element)\r\n * @param {Object} config\r\n * @param {number} config.duration - Animation duration in ms\r\n * @param {String} config.display - Display for element\r\n * @param {Function} config.onComplete - Callback when complete\r\n * @returns {this}\r\n */\r\n showSwipeWidth(config) {\r\n this.cancel();\r\n this.#isAnimating = true;\r\n\r\n const {\r\n duration = 200,\r\n display = \"block\",\r\n onComplete\r\n } = config;\r\n\r\n Object.assign(this.element.style, {\r\n transition: \"none\",\r\n display: display,\r\n width: \"fit-content\"\r\n });\r\n\r\n const maxWidth = this.getHiddenDimensions(display).width;\r\n \r\n Object.assign(this.element.style, {\r\n width: \"0px\"\r\n });\r\n\r\n requestAnimationFrame(() => {\r\n Object.assign(this.element.style, {\r\n transition: `width ${duration}ms`,\r\n width: `${maxWidth}px`,\r\n overflow: \"hidden\"\r\n });\r\n });\r\n\r\n this.#timeOut = setTimeout(() => {\r\n Object.assign(this.element.style, {\r\n width: null,\r\n overflow: null,\r\n transition: null\r\n });\r\n this.#isAnimating = false;\r\n onComplete && onComplete();\r\n }, duration);\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * hide Swipe animation (close element)\r\n * @param {Object} config\r\n * @param {number} config.duration - Animation duration in ms\r\n * @param {Function} config.onComplete - Callback when complete\r\n * @returns {this}\r\n */\r\n hideSwipeWidth(config) {\r\n this.cancel();\r\n this.#isAnimating = true;\r\n\r\n const {\r\n duration = 200,\r\n onComplete\r\n } = config;\r\n\r\n const maxWidth = this.getHiddenDimensions().width;\r\n\r\n Object.assign(this.element.style, {\r\n transition: \"none\",\r\n width: `${maxWidth}px`\r\n });\r\n\r\n requestAnimationFrame(() => {\r\n Object.assign(this.element.style, {\r\n transition: `width ${duration}ms`,\r\n width: `0px`,\r\n overflow: \"hidden\"\r\n });\r\n });\r\n\r\n this.#timeOut = setTimeout(() => {\r\n Object.assign(this.element.style, {\r\n width: null,\r\n overflow: null,\r\n transition: null,\r\n display: null\r\n });\r\n this.#isAnimating = false;\r\n onComplete && onComplete();\r\n }, duration);\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Resize animation (when content changes)\r\n * @param {Object} config\r\n * @param {number} config.duration - Animation duration in ms\r\n * @param {number} config.width - Target width\r\n * @param {number} config.left - Left position\r\n * @param {number} config.top - Top position\r\n * @param {number} config.maxHeight - Max height\r\n * @param {number} config.realHeight - Real height\r\n * @param {string} config.position - Position type (top/bottom)\r\n * @param {boolean} config.animate - Whether to animate\r\n * @param {Function} config.onComplete - Callback when complete\r\n * @returns {this}\r\n */\r\n resize(config) {\r\n if (this.#resizeTimeout) {\r\n clearTimeout(this.#resizeTimeout);\r\n }\r\n\r\n const {\r\n duration = 200,\r\n width,\r\n left,\r\n top,\r\n maxHeight,\r\n realHeight,\r\n position = \"bottom\",\r\n animate = true,\r\n onComplete\r\n } = config;\r\n\r\n const currentPosition = this.element.classList.contains(\"position-top\") ? \"top\" : \"bottom\";\r\n const isPositionChanged = currentPosition !== position;\r\n const isScrollable = this.element.scrollHeight > maxHeight;\r\n\r\n this.element.classList.toggle(\"position-top\", position === \"top\");\r\n this.element.classList.toggle(\"position-bottom\", position === \"bottom\");\r\n \r\n if (isPositionChanged) {\r\n this.element.style.transition = `top ${duration}ms ease-out, height ${duration}ms ease-out, max-height ${duration}ms ease-out;`;\r\n }\r\n\r\n requestAnimationFrame(() => {\r\n const curTop = this.element.offsetTop;\r\n const styles = {\r\n width: `${width}px`,\r\n left: `${left}px`,\r\n top: `${top}px`,\r\n maxHeight: `${maxHeight}px`,\r\n height: `${realHeight}px`,\r\n overflowY: isScrollable ? \"auto\" : \"hidden\"\r\n };\r\n\r\n if (animate && (isPositionChanged || Math.abs(this.element.offsetHeight - realHeight) > 5) ) {\r\n styles.transition = `height ${duration}ms, top ${duration}ms`;\r\n } else {\r\n this.#resizeTimeout = setTimeout(() => {\r\n this.element.style.transition = \"none\";\r\n }, duration);\r\n }\r\n\r\n Object.assign(this.element.style, styles);\r\n\r\n if (animate && (isPositionChanged || Math.abs(this.element.offsetHeight - realHeight) > 1)) {\r\n this.#resizeTimeout = setTimeout(() => {\r\n this.element.style.transition = \"none\";\r\n if (isPositionChanged) {\r\n delete this.element.style.transition;\r\n }\r\n onComplete && onComplete();\r\n }, duration);\r\n } else {\r\n if (isPositionChanged) {\r\n delete this.element.style.transition;\r\n }\r\n onComplete && onComplete();\r\n }\r\n });\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Check if currently animating\r\n * @returns {boolean}\r\n */\r\n get isAnimating() {\r\n return this.#isAnimating;\r\n }\r\n }(query);\r\n}","/**\r\n * @template {ModelContract<any, any>} TItem\r\n * @template {AdapterContract<TItem>} TAdapter\r\n * @implements {RecyclerViewContract<TAdapter>}\r\n */\r\nexport class RecyclerView {\r\n /**\r\n * @type {HTMLDivElement}\r\n */\r\n viewElement = null;\r\n\r\n /**\r\n * @type {TAdapter}\r\n */\r\n adapter = null;\r\n\r\n /**\r\n * Constructs a RecyclerView with an optional container element that will host rendered item views.\r\n *\r\n * @param {HTMLDivElement|null} [viewElement=null] - The root element where the adapter will render items.\r\n */\r\n constructor(viewElement = null) {\r\n this.viewElement = viewElement;\r\n }\r\n \r\n /**\r\n * Sets or updates the container element used to render the adapter's item views.\r\n *\r\n * @param {HTMLDivElement} viewElement - The root element for rendering.\r\n */\r\n setView(viewElement) {\r\n this.viewElement = viewElement;\r\n }\r\n \r\n /**\r\n * Attaches an adapter to the RecyclerView and wires item-change lifecycle:\r\n * - onPropChanging(\"items\"): clears the container before items change,\r\n * - onPropChanged(\"items\"): re-renders after items change,\r\n * then performs an initial render.\r\n *\r\n * @param {TAdapter} adapter - The adapter managing models and their views.\r\n */\r\n setAdapter(adapter) {\r\n this.adapter = adapter;\r\n\r\n adapter.onPropChanging(\"items\", () => {\r\n this.clear();\r\n });\r\n\r\n adapter.onPropChanged(\"items\", () => {\r\n this.render();\r\n });\r\n\r\n this.render();\r\n }\r\n\r\n /**\r\n * Removes all child nodes from the rendering container, if present.\r\n * Used prior to re-rendering or when items are changing.\r\n */\r\n clear() {\r\n if (!this.viewElement) return;\r\n this.viewElement.replaceChildren();\r\n }\r\n\r\n /**\r\n * Renders the current adapter contents into the container.\r\n * No-ops if either the adapter or the container is not set.\r\n */\r\n render() {\r\n if (!this.adapter || !this.viewElement) return;\r\n\r\n this.adapter.updateRecyclerView(this.viewElement);\r\n }\r\n\r\n /**\r\n * Forces a re-render of the current adapter state into the container.\r\n * Useful when visual updates are required without changing the data.\r\n */\r\n refresh() {\r\n this.render();\r\n }\r\n}","import { ModelManager } from \"../core/model-manager\";\r\nimport { OptionModel } from \"../models/option-model\";\r\nimport { iEvents } from \"../utils/ievents\";\r\nimport { Libs } from \"../utils/libs\";\r\n\r\n/**\r\n * @class\r\n */\r\nexport class AccessoryBox {\r\n /**\r\n * @type {MountViewResult<any>}\r\n */\r\n nodeMounted = null;\r\n\r\n /**\r\n * @type {HTMLDivElement}\r\n */\r\n node = null;\r\n\r\n options = null;\r\n\r\n /** @type {HTMLDivElement} */\r\n selectUIMask;\r\n\r\n /** @type {HTMLDivElement} */\r\n parentMask;\r\n\r\n /** @type {ModelManager} */\r\n modelManager;\r\n\r\n /**\r\n * Initializes the accessory box with optional configuration and immediately calls init() if provided.\r\n *\r\n * @param {object|null} options - Configuration options for the accessory box (e.g., layout and behavior).\r\n */\r\n constructor(options = null) {\r\n options && this.init(options);\r\n }\r\n\r\n /**\r\n * Creates the accessory box DOM node and stores the provided options.\r\n * The node is initially hidden and stops mouseup events from bubbling.\r\n *\r\n * @param {object} options - Configuration object for the accessory box.\r\n */\r\n init(options) {\r\n this.nodeMounted = Libs.mountNode({\r\n AccessoryBox: {\r\n tag: {node: \"div\", classList: [\"selective-ui-accessorybox\", \"hide\"], onmouseup: (evt) => {\r\n evt.stopPropagation();\r\n }}\r\n }\r\n });\r\n this.node = /** @type {HTMLDivElement} */ (this.nodeMounted.view);\r\n this.options = options;\r\n }\r\n\r\n /**\r\n * Sets the root references for the accessory box (mask elements) and refreshes its location in the DOM.\r\n *\r\n * @param {HTMLDivElement} selectUIMask - The overlay/mask element of the main Select UI.\r\n */\r\n setRoot(selectUIMask) {\r\n this.selectUIMask = selectUIMask;\r\n this.parentMask = /** @type {HTMLDivElement} */ (selectUIMask.parentElement);\r\n\r\n this.refreshLocation();\r\n }\r\n\r\n /**\r\n * Inserts the accessory box before or after the Select UI mask depending on the configured accessoryStyle.\r\n * Keeps the accessory box aligned relative to the parent mask.\r\n */\r\n refreshLocation() {\r\n this.parentMask.insertBefore(this.node, (this.options.accessoryStyle == \"top\" ? this.selectUIMask : this.selectUIMask.nextSibling));\r\n }\r\n\r\n /**\r\n * Assigns a ModelManager instance used to trigger and manage selection state changes.\r\n *\r\n * @param {ModelManager} modelManager - The model manager controlling option state.\r\n */\r\n setModelManager(modelManager) {\r\n this.modelManager = modelManager;\r\n }\r\n\r\n /**\r\n * Renders accessory items for the currently selected options in multiple-select mode.\r\n * Shows the accessory box when there are items; otherwise hides it. Triggers a window resize event.\r\n *\r\n * @param {OptionModel[]} modelDatas - List of option models to render as accessory items.\r\n */\r\n setModelData(modelDatas) {\r\n this.node.replaceChildren();\r\n \r\n if (modelDatas.length > 0 && this.options.multiple) {\r\n this.node.classList.remove(\"hide\");\r\n\r\n modelDatas.forEach(modelData => {\r\n Libs.mountNode({\r\n AccessoryItem: {\r\n tag: {node: \"div\", classList: [\"accessory-item\"]},\r\n child: {\r\n Button: {\r\n tag: {node: \"span\", classList: [\"accessory-item-button\"], role: \"button\", ariaLabel: `${this.options.textAccessoryDeselect}${modelData.textContent}`, title: `${this.options.textAccessoryDeselect}${modelData.textContent}`, onclick: (evt) => {\r\n this.modelManager.triggerChanging(\"select\");\r\n setTimeout(() => {\r\n modelData.selected = false;\r\n }, 10);\r\n }}\r\n },\r\n Content: {\r\n tag: {node: \"span\", classList: [\"accessory-item-content\"], innerHTML: modelData.text}\r\n }\r\n }\r\n }\r\n }, this.node);\r\n });\r\n }\r\n else {\r\n this.node.classList.add(\"hide\");\r\n }\r\n iEvents.trigger(window, \"resize\");\r\n }\r\n}","import { Popup } from \"../components/popup\";\r\nimport { GroupModel } from \"../models/group-model\";\r\nimport { OptionModel } from \"../models/option-model\";\r\nimport { Libs } from \"../utils/libs\";\r\nimport { ModelManager } from \"./model-manager\";\r\n\r\nexport class SearchController {\r\n #select;\r\n /** @type {ModelManager<OptionModel>} */\r\n #modelManager;\r\n\r\n #ajaxConfig = null;\r\n\r\n #abortController = null;\r\n\r\n /** @type {Popup} */\r\n #popup = null;\r\n \r\n #paginationState = {\r\n currentPage: 0,\r\n totalPages: 1,\r\n hasMore: false,\r\n isLoading: false,\r\n currentKeyword: \"\",\r\n isPaginationEnabled: false\r\n };\r\n\r\n /**\r\n * Initializes the SearchController with a source <select> element and a ModelManager\r\n * to manage option models and search results.\r\n *\r\n * @param {HTMLSelectElement} selectElement - The native select element that provides context and data source.\r\n * @param {ModelManager<OptionModel>} modelManager - Manager responsible for models and rendering updates.\r\n */\r\n constructor(selectElement, modelManager) {\r\n this.#select = selectElement;\r\n this.#modelManager = modelManager;\r\n }\r\n\r\n /**\r\n * Indicates whether AJAX-based search is configured.\r\n *\r\n * @returns {boolean} - True if AJAX config is present; false otherwise.\r\n */\r\n isAjax() {\r\n return !(!this.#ajaxConfig);\r\n }\r\n\r\n /**\r\n * Configures AJAX settings used for remote searching and pagination.\r\n *\r\n * @param {object} config - AJAX configuration object (e.g., endpoint, headers, query params).\r\n */\r\n setAjax(config) {\r\n this.#ajaxConfig = config;\r\n }\r\n\r\n /**\r\n * Attaches a Popup instance to allow UI updates during search (e.g., loading, resize).\r\n *\r\n * @param {Popup} popupInstance - The popup used to display search results and loading state.\r\n */\r\n setPopup(popupInstance) {\r\n this.#popup = popupInstance;\r\n }\r\n\r\n\r\n /**\r\n * Returns a shallow copy of the current pagination state used for search/infinite scroll.\r\n *\r\n * @returns {{\r\n * currentPage:number, totalPages:number, hasMore:boolean, isLoading:boolean,\r\n * currentKeyword:string, isPaginationEnabled:boolean\r\n * }}\r\n */\r\n getPaginationState() {\r\n return { ...this.#paginationState };\r\n }\r\n\r\n /**\r\n * Resets pagination counters while preserving whether pagination is enabled.\r\n * Clears page, totals, loading flags, and current keyword.\r\n */\r\n resetPagination() {\r\n this.#paginationState = {\r\n currentPage: 0,\r\n totalPages: 1,\r\n hasMore: false,\r\n isLoading: false,\r\n currentKeyword: \"\",\r\n isPaginationEnabled: this.#paginationState.isPaginationEnabled\r\n };\r\n }\r\n\r\n /**\r\n * Clears the current keyword and makes all options visible (local reset).\r\n * Flattens groups and options, then sets `visible = true` for each option.\r\n */\r\n clear() {\r\n this.#paginationState.currentKeyword = \"\";\r\n const { modelList } = this.#modelManager.getResources();\r\n const flatOptions = [];\r\n for (const m of modelList) {\r\n if (m instanceof OptionModel) flatOptions.push(m);\r\n else if (m instanceof GroupModel && Array.isArray(m.items)) flatOptions.push(...m.items);\r\n }\r\n flatOptions.forEach(opt => { opt.visible = true; });\r\n }\r\n\r\n /**\r\n * Performs a search with either AJAX or local filtering depending on configuration.\r\n *\r\n * @param {string} keyword - The search term to apply.\r\n * @param {boolean} [append=false] - When using AJAX, whether to append results to existing items.\r\n * @returns {Promise<{success:boolean, hasResults:boolean, isEmpty:boolean} | any>}\r\n */\r\n async search(keyword, append = false) {\r\n if (this.#ajaxConfig && this.#ajaxConfig) {\r\n return this.#ajaxSearch(keyword, append);\r\n }\r\n return this.#localSearch(keyword);\r\n }\r\n\r\n /**\r\n * Loads the next page for AJAX pagination if enabled and not already loading,\r\n * otherwise returns an error object indicating the reason.\r\n *\r\n * @returns {Promise<{success:boolean, message?:string} | any>}\r\n */\r\n async loadMore() {\r\n if (!this.#ajaxConfig || !this.#ajaxConfig) {\r\n return { success: false, message: \"Ajax not enabled\" };\r\n }\r\n\r\n if (this.#paginationState.isLoading) {\r\n return { success: false, message: \"Already loading\" };\r\n }\r\n\r\n if (!this.#paginationState.isPaginationEnabled) {\r\n return { success: false, message: \"Pagination not enabled\" };\r\n }\r\n\r\n if (!this.#paginationState.hasMore) {\r\n return { success: false, message: \"No more data\" };\r\n }\r\n\r\n this.#paginationState.currentPage++;\r\n return this.#ajaxSearch(this.#paginationState.currentKeyword, true);\r\n }\r\n\r\n /**\r\n * Executes a local (in-memory) search by normalizing the keyword (lowercase, non-accent)\r\n * and toggling each option's visibility based on text match. Returns summary flags.\r\n *\r\n * @param {string} keyword - The search term.\r\n * @returns {Promise<{success:boolean, hasResults:boolean, isEmpty:boolean}>}\r\n */\r\n async #localSearch(keyword) {\r\n if (this.compareSearchTrigger(keyword)) {\r\n this.#paginationState.currentKeyword = keyword;\r\n }\r\n \r\n const lower = String(keyword || \"\").toLowerCase();\r\n const lowerNA = Libs.string2normalize(lower);\r\n\r\n const { modelList } = this.#modelManager.getResources();\r\n const flatOptions = [];\r\n for (const m of modelList) {\r\n if (m instanceof OptionModel) {\r\n flatOptions.push(m);\r\n } else if (m instanceof GroupModel && Array.isArray(m.items)) {\r\n flatOptions.push(...m.items);\r\n }\r\n }\r\n\r\n let hasVisibleItems = false;\r\n flatOptions.forEach(opt => {\r\n const text = String(opt.textContent || opt.text || \"\").toLowerCase();\r\n const textNA = Libs.string2normalize(text);\r\n const isVisible =\r\n lower === \"\" ||\r\n text.includes(lower) ||\r\n textNA.includes(lowerNA);\r\n opt.visible = isVisible;\r\n if (isVisible) hasVisibleItems = true;\r\n });\r\n\r\n return {\r\n success: true,\r\n hasResults: hasVisibleItems,\r\n isEmpty: flatOptions.length === 0\r\n };\r\n }\r\n\r\n /**\r\n * Checks whether the provided keyword differs from the current one,\r\n * to determine if a new search should be triggered.\r\n *\r\n * @param {string} keyword - The candidate search term.\r\n * @returns {boolean} - True if different from the current keyword; otherwise false.\r\n */\r\n compareSearchTrigger(keyword) {\r\n if (keyword !== this.#paginationState.currentKeyword) {\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n /**\r\n * Executes an AJAX-based search with optional appending. Manages pagination,\r\n * aborts previous requests, shows/hides loading, builds payload, and applies results.\r\n *\r\n * @param {string} keyword - The search term.\r\n * @param {boolean} [append=false] - Whether to append results instead of replacing.\r\n * @returns {Promise<{\r\n * success:boolean, hasResults:boolean, isEmpty:boolean,\r\n * hasPagination:boolean, hasMore:boolean, currentPage:number, totalPages:number\r\n * } | {success:false, message:string}>}\r\n */\r\n async #ajaxSearch(keyword, append = false) {\r\n const cfg = this.#ajaxConfig;\r\n\r\n if (this.compareSearchTrigger(keyword)) {\r\n this.resetPagination();\r\n this.#paginationState.currentKeyword = keyword;\r\n append = false;\r\n }\r\n\r\n this.#paginationState.isLoading = true;\r\n this.#popup?.showLoading();\r\n\r\n this.#abortController?.abort();\r\n this.#abortController = new AbortController();\r\n\r\n const page = this.#paginationState.currentPage;\r\n \r\n const selectedValues = Array.from(this.#select.selectedOptions)\r\n .map(opt => opt.value)\r\n .join(\",\");\r\n \r\n let payload;\r\n if (typeof cfg.data === \"function\") {\r\n payload = cfg.data(keyword, page);\r\n if (payload && !payload.selectedValue) {\r\n payload.selectedValue = selectedValues;\r\n }\r\n } else {\r\n payload = {\r\n search: keyword,\r\n page: page,\r\n selectedValue: selectedValues,\r\n ...(cfg.data || {})\r\n };\r\n }\r\n\r\n try {\r\n let response;\r\n\r\n if (cfg.method === \"POST\") {\r\n const formData = new URLSearchParams();\r\n Object.keys(payload).forEach(key => {\r\n formData.append(key, payload[key]);\r\n });\r\n\r\n response = await fetch(cfg.url, {\r\n method: \"POST\",\r\n body: formData,\r\n headers: { \"Content-Type\": \"application/x-www-form-urlencoded\" },\r\n signal: this.#abortController.signal\r\n });\r\n } else {\r\n const params = new URLSearchParams(payload).toString();\r\n response = await fetch(`${cfg.url}?${params}`, {\r\n signal: this.#abortController.signal\r\n });\r\n }\r\n\r\n let data = await response.json();\r\n \r\n const result = this.#parseResponse(data);\r\n \r\n if (result.hasPagination) {\r\n this.#paginationState.isPaginationEnabled = true;\r\n this.#paginationState.currentPage = result.page;\r\n this.#paginationState.totalPages = result.totalPages;\r\n this.#paginationState.hasMore = result.hasMore;\r\n } else {\r\n this.#paginationState.isPaginationEnabled = false;\r\n }\r\n\r\n this.#applyAjaxResult(result.items, cfg.keepSelected, append);\r\n \r\n this.#paginationState.isLoading = false;\r\n this.#popup?.hideLoading();\r\n\r\n return {\r\n success: true,\r\n hasResults: result.items.length > 0,\r\n isEmpty: result.items.length === 0,\r\n hasPagination: result.hasPagination,\r\n hasMore: result.hasMore,\r\n currentPage: result.page,\r\n totalPages: result.totalPages\r\n };\r\n } catch (error) {\r\n this.#paginationState.isLoading = false;\r\n this.#popup?.hideLoading();\r\n \r\n if (error.name === \"AbortError\") {\r\n return { success: false, message: \"Request aborted\" };\r\n }\r\n \r\n console.error(\"Ajax search error:\", error);\r\n return { success: false, message: error.message };\r\n }\r\n }\r\n\r\n /**\r\n * Parses various server response shapes into a normalized structure for options and groups.\r\n * Supports arrays at keys: `object`, `data`, `items`, or a root array; detects pagination metadata.\r\n * Each item is mapped to either an \"option\" or \"optgroup\" descriptor, preserving custom data fields.\r\n *\r\n * @param {any} data - The raw response payload from the AJAX request.\r\n * @returns {{\r\n * items: Array<\r\n * | HTMLOptionElement\r\n * | HTMLOptGroupElement\r\n * | {\r\n * type: \"option\",\r\n * value: string,\r\n * text: string,\r\n * selected?: boolean,\r\n * data?: Record<string, any>\r\n * }\r\n * | {\r\n * type: \"optgroup\",\r\n * label: string,\r\n * data?: Record<string, any>,\r\n * options: Array<{\r\n * value: string,\r\n * text: string,\r\n * selected?: boolean,\r\n * data?: Record<string, any>\r\n * }>\r\n * }\r\n * >,\r\n * hasPagination: boolean,\r\n * page: number,\r\n * totalPages: number,\r\n * hasMore: boolean\r\n * }}\r\n */\r\n #parseResponse(data) {\r\n let items = [];\r\n let hasPagination = false;\r\n let page = 0;\r\n let totalPages = 1;\r\n let hasMore = false;\r\n\r\n if (data.object && Array.isArray(data.object)) {\r\n items = data.object;\r\n if (typeof data.page !== \"undefined\") {\r\n hasPagination = true;\r\n page = parseInt(data.page) || 0;\r\n totalPages = parseInt(data.totalPages || data.total_page) || 1;\r\n hasMore = page < totalPages - 1;\r\n }\r\n }\r\n else if (data.data && Array.isArray(data.data)) {\r\n items = data.data;\r\n if (typeof data.page !== \"undefined\") {\r\n hasPagination = true;\r\n page = parseInt(data.page) || 0;\r\n totalPages = parseInt(data.totalPages || data.total_page) || 1;\r\n hasMore = data.hasMore ?? (page < totalPages - 1);\r\n }\r\n }\r\n else if (Array.isArray(data)) {\r\n items = data;\r\n }\r\n else if (data.items && Array.isArray(data.items)) {\r\n items = data.items;\r\n if (data.pagination) {\r\n hasPagination = true;\r\n page = parseInt(data.pagination.page) || 0;\r\n totalPages = parseInt(data.pagination.totalPages || data.pagination.total_page) || 1;\r\n hasMore = data.pagination.hasMore ?? (page < totalPages - 1);\r\n }\r\n }\r\n\r\n items = items.map(item => {\r\n if (item instanceof HTMLOptionElement || item instanceof HTMLOptGroupElement) {\r\n return item;\r\n }\r\n\r\n if (item.type === \"optgroup\" || item.isGroup || item.group || item.label) {\r\n return {\r\n type: \"optgroup\",\r\n label: item.label || item.name || item.title || \"\",\r\n data: item.data || {},\r\n options: (item.options || item.items || []).map(opt => ({\r\n value: opt.value || opt.id || opt.key || \"\",\r\n text: opt.text || opt.label || opt.name || opt.title || \"\",\r\n selected: opt.selected || false,\r\n data: opt.data || (opt.imgsrc ? { imgsrc: opt.imgsrc } : {})\r\n }))\r\n };\r\n }\r\n\r\n let data = item.data || {};\r\n if (item?.imgsrc) {\r\n data.imgsrc = item.imgsrc;\r\n }\r\n \r\n return {\r\n type: \"option\",\r\n value: item.value || item.id || item.key || \"\",\r\n text: item.text || item.label || item.name || item.title || \"\",\r\n selected: item.selected || false,\r\n data: data\r\n };\r\n });\r\n\r\n return {\r\n items,\r\n hasPagination,\r\n page,\r\n totalPages,\r\n hasMore\r\n };\r\n }\r\n\r\n /**\r\n * Applies normalized AJAX results to the underlying <select> element.\r\n * Optionally keeps previous selections, supports appending, and preserves\r\n * custom data attributes for both options and optgroups. Emits \"options:changed\".\r\n *\r\n * @param {Array<\r\n * | HTMLOptionElement\r\n * | HTMLOptGroupElement\r\n * | {type:\"option\", value:string, text:string, selected?:boolean, data?:Record<string, any>}\r\n * | {type:\"optgroup\", label:string, data?:Record<string, any>, options:Array<{value:string, text:string, selected?:boolean, data?:Record<string, any>}>}\r\n * >} items - The normalized list of items to apply.\r\n * @param {boolean} keepSelected - If true, previously selected values are preserved when possible.\r\n * @param {boolean} [append=false] - If true, append to existing options; otherwise replace them.\r\n */\r\n #applyAjaxResult(items, keepSelected, append = false) {\r\n const select = this.#select;\r\n \r\n let oldSelected = [];\r\n if (keepSelected) {\r\n oldSelected = Array.from(select.selectedOptions).map(o => o.value);\r\n }\r\n\r\n if (!append) {\r\n select.innerHTML = \"\";\r\n }\r\n\r\n items.forEach(item => {\r\n if ((item[\"type\"] === \"option\" || !item[\"type\"]) && item[\"value\"] === \"\" && item[\"text\"] === \"\") {\r\n return;\r\n }\r\n\r\n if (item instanceof HTMLOptionElement || item instanceof HTMLOptGroupElement) {\r\n select.appendChild(item);\r\n return;\r\n }\r\n\r\n if (item.type === \"optgroup\") {\r\n const optgroup = document.createElement(\"optgroup\");\r\n optgroup.label = item.label;\r\n\r\n if (item.data) {\r\n Object.keys(item.data).forEach(key => {\r\n optgroup.dataset[key] = item.data[key];\r\n });\r\n }\r\n\r\n if (item.options && Array.isArray(item.options)) {\r\n item.options.forEach(opt => {\r\n const option = document.createElement(\"option\");\r\n option.value = opt.value;\r\n option.text = opt.text;\r\n\r\n if (opt.data) {\r\n Object.keys(opt.data).forEach(key => {\r\n option.dataset[key] = opt.data[key];\r\n });\r\n }\r\n\r\n if (opt.selected || (keepSelected && oldSelected.includes(option.value))) {\r\n option.selected = true;\r\n }\r\n\r\n optgroup.appendChild(option);\r\n });\r\n }\r\n\r\n select.appendChild(optgroup);\r\n }\r\n else {\r\n const option = document.createElement(\"option\");\r\n option.value = item.value;\r\n option.text = item.text;\r\n \r\n if (item.data) {\r\n Object.keys(item.data).forEach(key => {\r\n option.dataset[key] = item.data[key];\r\n });\r\n }\r\n\r\n if (item.selected || (keepSelected && oldSelected.includes(option.value))) {\r\n option.selected = true;\r\n }\r\n\r\n select.appendChild(option);\r\n }\r\n });\r\n\r\n select.dispatchEvent(new CustomEvent(\"options:changed\"));\r\n }\r\n}","export class SelectObserver {\r\n /** @type {MutationObserver} */\r\n #observer;\r\n\r\n /** @type {HTMLSelectElement} */\r\n #select;\r\n\r\n #debounceTimer = null;\r\n\r\n /**\r\n * Observes a <select> element for option list and attribute changes, with debouncing.\r\n * Detects modifications to children (options added/removed) and relevant attributes\r\n * (\"selected\", \"value\", \"disabled\"). Emits updates via the overridable onChanged() hook.\r\n *\r\n * @param {HTMLSelectElement} select - The <select> element to monitor.\r\n */\r\n constructor(select) {\r\n this.#observer = new MutationObserver(() => {\r\n clearTimeout(this.#debounceTimer);\r\n this.#debounceTimer = setTimeout(() => {\r\n this.onChanged(select);\r\n }, 50);\r\n });\r\n\r\n this.#select = select;\r\n\r\n select.addEventListener(\"options:changed\", () => {\r\n this.onChanged(select);\r\n });\r\n }\r\n\r\n /**\r\n * Starts observing the select element for child list mutations and attribute changes.\r\n * Uses a MutationObserver with a debounce to batch rapid updates.\r\n */\r\n connect() {\r\n this.#observer.observe(this.#select, {\r\n childList: true,\r\n subtree: false,\r\n\r\n attributes: true,\r\n attributeFilter: [\"selected\", \"value\", \"disabled\"]\r\n });\r\n }\r\n\r\n /**\r\n * Hook invoked when the select's options or attributes change.\r\n * Override to handle updates; receives the current HTMLCollection of options.\r\n *\r\n * @param {HTMLSelectElement} options - The Select element.\r\n */\r\n onChanged(options) { }\r\n\r\n /**\r\n * Stops observing the select element and clears any pending debounce timers.\r\n */\r\n disconnect() {\r\n clearTimeout(this.#debounceTimer);\r\n this.#observer.disconnect();\r\n }\r\n}","export class DatasetObserver {\r\n /** @type {MutationObserver} */\r\n #observer;\r\n\r\n /** @type {HTMLElement} */\r\n #element;\r\n\r\n #debounceTimer = null;\r\n\r\n /**\r\n * Observes data-* attribute changes on a target element and debounces notifications.\r\n * Sets up a MutationObserver to detect dataset mutations and a fallback custom event listener.\r\n *\r\n * @param {HTMLElement} element - The element whose dataset (data-* attributes) will be observed.\r\n */\r\n constructor(element) {\r\n this.#element = element;\r\n\r\n this.#observer = new MutationObserver((mutations) => {\r\n let datasetChanged = false;\r\n\r\n for (const mutation of mutations) {\r\n if (\r\n mutation.type === \"attributes\" &&\r\n mutation.attributeName?.startsWith(\"data-\")\r\n ) {\r\n datasetChanged = true;\r\n break;\r\n }\r\n }\r\n\r\n if (!datasetChanged) return;\r\n\r\n clearTimeout(this.#debounceTimer);\r\n this.#debounceTimer = setTimeout(() => {\r\n this.onChanged({ ...this.#element.dataset });\r\n }, 50);\r\n });\r\n\r\n element.addEventListener(\"dataset:changed\", () => {\r\n this.onChanged({ ...this.#element.dataset });\r\n });\r\n }\r\n\r\n /**\r\n * Starts observing the element for attribute changes, including old values.\r\n * Uses MutationObserver to track updates to data-* attributes.\r\n */\r\n connect() {\r\n this.#observer.observe(this.#element, {\r\n attributes: true,\r\n attributeOldValue: true\r\n });\r\n }\r\n\r\n /**\r\n * Callback invoked when the element's dataset changes (debounced).\r\n * Override in subclasses to handle dataset updates.\r\n *\r\n * @param {DOMStringMap} dataset - A shallow copy of the element's current dataset.\r\n */\r\n onChanged(dataset) {\r\n // override\r\n }\r\n\r\n /**\r\n * Stops observing the element and clears any pending debounce timers.\r\n */\r\n disconnect() {\r\n clearTimeout(this.#debounceTimer);\r\n this.#observer.disconnect();\r\n }\r\n}\r\n","import {Libs} from \"../utils/libs.js\";\r\nimport {Refresher} from \"../services/refresher.js\";\r\nimport {PlaceHolder} from \"../components/placeholder.js\";\r\nimport {Directive} from \"../components/directive.js\";\r\nimport {Popup} from \"../components/popup.js\";\r\nimport {SearchBox} from \"../components/searchbox.js\";\r\nimport * as Effector from \"../services/effector.js\";\r\nimport { iEvents } from \"../utils/ievents.js\";\r\nimport { ModelManager } from \"../core/model-manager.js\";\r\nimport { RecyclerView } from \"../core/base/recyclerview.js\";\r\nimport { AccessoryBox } from \"./accessorybox.js\";\r\nimport { SearchController } from \"../core/search-controller.js\";\r\nimport { SelectObserver } from \"../services/select-observer.js\";\r\nimport { DatasetObserver } from \"../services/dataset-observer.js\";\r\nimport { MixedAdapter } from \"../adapter/mixed-adapter.js\";\r\nimport { GroupModel } from \"../models/group-model.js\";\r\nimport { OptionModel } from \"../models/option-model.js\";\r\n\r\n/**\r\n * @class\r\n */\r\nexport class SelectBox {\r\n \r\n /**\r\n * Initializes a SelectBox instance and, if a source <select> and Selective context are provided,\r\n * immediately calls init() to set up the enhanced UI and behavior.\r\n *\r\n * @param {HTMLSelectElement|null} [select=null] - The native select element to enhance.\r\n * @param {typeof import('../utils/selective.js').Selective} [Selective=null] - The Selective framework/context used for configuration and services.\r\n */\r\n constructor(select = null, Selective = null) {\r\n select && this.init(select, Selective);\r\n }\r\n container = {};\r\n oldValue = null;\r\n\r\n /** @type {HTMLDivElement} */\r\n node = null;\r\n\r\n options = null;\r\n\r\n /** @type {ModelManager} */\r\n optionModelManager = null;\r\n\r\n isOpen = false;\r\n\r\n hasLoadedOnce = false;\r\n\r\n isBeforeSearch = false;\r\n\r\n /** @type {typeof import('../utils/selective.js').Selective} */\r\n Selective = null;\r\n\r\n /**\r\n * Gets or sets the disabled state of the SelectBox.\r\n * When set, updates CSS class and ARIA attributes to reflect the disabled state.\r\n *\r\n * @type {boolean}\r\n */\r\n get isDisabled() {\r\n return this.options.disabled;\r\n }\r\n set isDisabled(value) {\r\n this.options.disabled = value;\r\n this.node.classList.toggle(\"disabled\", value);\r\n this.node.setAttribute(\"aria-disabled\", value.toString());\r\n this.container.tags.ViewPanel.setAttribute(\"aria-disabled\", value.toString());\r\n }\r\n\r\n /**\r\n * Gets or sets the read-only state of the SelectBox.\r\n * When set, toggles the \"readonly\" CSS class to prevent user interaction.\r\n *\r\n * @type {boolean}\r\n */\r\n get isReadOnly() {\r\n return this.options.readonly;\r\n }\r\n set isReadOnly(value) {\r\n this.options.readonly = value;\r\n this.node.classList.toggle(\"readonly\", value);\r\n }\r\n\r\n /**\r\n * Gets or sets the visibility state of the SelectBox.\r\n * When set, toggles the \"invisible\" CSS class to show or hide the component.\r\n *\r\n * @type {boolean}\r\n */\r\n get isVisible() {\r\n return this.options.visible;\r\n }\r\n set isVisible(value) {\r\n this.options.visible = value;\r\n this.node.classList.toggle(\"invisible\", !value);\r\n }\r\n\r\n\r\n /**\r\n * Initializes the SelectBox UI and behavior by wiring core components (Placeholder, Directive,\r\n * SearchBox, Popup, AccessoryBox), setting ARIA attributes, mounting DOM structure, and connecting\r\n * observers (SelectObserver, DatasetObserver). Configures ModelManager with MixedAdapter and\r\n * RecyclerView, sets up search (including optional AJAX with debouncing), infinite scroll, and\r\n * event handlers for selection, highlighting, collapsing, and keyboard navigation.\r\n *\r\n * @param {HTMLSelectElement} select - The native <select> element to enhance.\r\n * @param {typeof import('../utils/selective.js').Selective} Selective - The Selective framework/context for services and configuration.\r\n */\r\n init(select, Selective) {\r\n const \r\n bindedMap = Libs.getBinderMap(select),\r\n options = bindedMap.options,\r\n placeholder = new PlaceHolder(options),\r\n directive = new Directive(),\r\n searchbox = new SearchBox(options),\r\n effector = Effector.Effector(),\r\n optionModelManager = new ModelManager(options),\r\n accessoryBox = new AccessoryBox(options),\r\n searchController = new SearchController(\r\n select,\r\n optionModelManager\r\n ),\r\n selectObserver = new SelectObserver(select),\r\n datasetObserver = new DatasetObserver(select)\r\n ;\r\n \r\n this.Selective = Selective;\r\n this.options = options;\r\n\r\n placeholder.node.id = options.SEID_HOLDER;\r\n\r\n const container = Libs.mountNode({\r\n Container: {\r\n tag: {node: \"div\", classList: \"selective-ui-MAIN\"},\r\n child: {\r\n ViewPanel: {\r\n tag: {\r\n node: \"div\", \r\n classList: \"selective-ui-view\", \r\n tabIndex: 0, \r\n role: \"combobox\",\r\n ariaExpanded: \"false\",\r\n ariaLabelledby: options.SEID_HOLDER,\r\n ariaControls: options.SEID_LIST,\r\n ariaHaspopup: \"true\",\r\n ariaMultiselectable: options.multiple ? \"true\" : \"false\",\r\n onkeydown: (e) => {\r\n if (e.key === \"Enter\" || e.key === \" \" || e.key === \"ArrowDown\") {\r\n e.preventDefault();\r\n this.getAction()?.open();\r\n }\r\n }\r\n },\r\n child: {\r\n PlaceHolder: {\r\n tag: placeholder.node\r\n },\r\n Directive: {\r\n tag: directive.node\r\n },\r\n SearchBox: {\r\n tag: searchbox.node\r\n }\r\n }\r\n }\r\n }\r\n }\r\n });\r\n \r\n this.container = container;\r\n\r\n this.node = this.container.view;\r\n\r\n select.parentNode.insertBefore(this.node, select);\r\n\r\n this.node.insertBefore(select, container.tags.ViewPanel);\r\n\r\n accessoryBox.setRoot(container.tags.ViewPanel);\r\n accessoryBox.setModelManager(optionModelManager);\r\n\r\n container.tags.ViewPanel.addEventListener(\"mousedown\", (e) => {\r\n e.stopPropagation();\r\n e.preventDefault();\r\n });\r\n\r\n Refresher.resizeBox(select, container.tags.ViewPanel);\r\n\r\n select.classList.add(\"init\");\r\n\r\n // optionModelManager.setupModel(OptionModel);\r\n optionModelManager.setupAdapter(MixedAdapter);\r\n optionModelManager.setupRecyclerView(RecyclerView);\r\n optionModelManager.createModelResources(Libs.parseSelectToArray(select));\r\n optionModelManager.onUpdated = () => {\r\n container.popup.triggerResize();\r\n };\r\n \r\n this.optionModelManager = optionModelManager;\r\n\r\n container.searchController = searchController;\r\n\r\n container.placeholder = placeholder;\r\n container.directive = directive;\r\n container.popup = new Popup(select, options, optionModelManager);\r\n container.popup.setupEffector(effector);\r\n container.popup.setupInfiniteScroll(searchController, options);\r\n container.popup.onAdapterPropChanged(\"selected\", () => {\r\n this.getAction()?.change(null, true);\r\n });\r\n container.popup.onAdapterPropChanged(\"selected_internal\", () => {\r\n this.getAction()?.change(null, false);\r\n });\r\n container.popup.onAdapterPropChanging(\"select\", () => {\r\n this.oldValue = this.getAction()?.value ?? \"\";\r\n });\r\n container.searchbox = searchbox;\r\n container.effector = effector;\r\n container.targetElement = select;\r\n container.accessorybox = accessoryBox;\r\n this.getAction()?.change(null, false);\r\n\r\n selectObserver.connect();\r\n selectObserver.onChanged = options => {\r\n optionModelManager.update(Libs.parseSelectToArray(options));\r\n this.getAction()?.refreshMask();\r\n };\r\n container.selectObserver = selectObserver;\r\n\r\n container.datasetObserver = datasetObserver;\r\n datasetObserver.connect();\r\n \r\n select.addEventListener('options:changed', () => {\r\n optionModelManager.update(Libs.parseSelectToArray(select));\r\n this.getAction()?.refreshMask();\r\n container.popup?.triggerResize?.();\r\n });\r\n\r\n datasetObserver.onChanged = dataset => {\r\n if (Libs.string2Boolean(dataset.disabled) != this.isDisabled) {\r\n this.isDisabled = Libs.string2Boolean(dataset.disabled);\r\n }\r\n\r\n if (Libs.string2Boolean(dataset.readonly) != this.isReadOnly) {\r\n this.isReadOnly = Libs.string2Boolean(dataset.readonly);\r\n }\r\n\r\n if (Libs.string2Boolean(dataset.visible) != this.isVisible) {\r\n this.isVisible = Libs.string2Boolean(dataset.visible ?? \"1\");\r\n }\r\n }\r\n\r\n if (options.ajax) {\r\n searchController.setAjax(options.ajax);\r\n }\r\n\r\n const optionAdapter = container.popup.optionAdapter;\r\n\r\n let searchHandle = (keyword, isTrigger) => {\r\n if (!isTrigger && keyword == \"\") {\r\n searchController.clear();\r\n }\r\n else {\r\n if (keyword != \"\") {\r\n this.isBeforeSearch = true;\r\n }\r\n searchController.search(keyword).then((result) => {\r\n container.popup.triggerResize();\r\n \r\n if (result.hasResults) {\r\n setTimeout(() => {\r\n optionAdapter.resetHighlight();\r\n }, options.animationtime);\r\n }\r\n }).catch(error => {\r\n console.error(\"Search error:\", error);\r\n });\r\n }\r\n }\r\n let searchHandleTimer = null;\r\n searchbox.onSearch = (keyword, isTrigger) => {\r\n if (!searchController.compareSearchTrigger(keyword)) {\r\n return;\r\n }\r\n\r\n if (searchController.isAjax()) {\r\n clearTimeout(searchHandleTimer);\r\n container.popup.showLoading();\r\n\r\n searchHandleTimer = setTimeout(() => {\r\n searchHandle(keyword, isTrigger);\r\n }, options.delaysearchtime);\r\n }\r\n else {\r\n searchHandle(keyword, isTrigger);\r\n }\r\n };\r\n\r\n searchController.setPopup(container.popup);\r\n searchbox.onNavigate = (direction) => {\r\n optionAdapter.navigate(direction);\r\n };\r\n\r\n searchbox.onEnter = () => {\r\n optionAdapter.selectHighlighted();\r\n };\r\n\r\n optionAdapter.onHighlightChange = (index, id) => {\r\n searchbox.setActiveDescendant(id);\r\n }\r\n\r\n optionAdapter.onCollapsedChange = () => {\r\n container.popup.triggerResize();\r\n }\r\n\r\n searchbox.onEsc = () => {\r\n this.getAction()?.close();\r\n container.tags.ViewPanel.focus();\r\n };\r\n\r\n this.isDisabled = Libs.string2Boolean(options.disabled);\r\n this.isReadOnly = Libs.string2Boolean(options.readonly);\r\n }\r\n\r\n /**\r\n * Disconnects observers associated with the SelectBox instance,\r\n * including SelectObserver and DatasetObserver, to clean up resources\r\n * and stop monitoring changes.\r\n */\r\n deInit() {\r\n const container = this.container || {};\r\n const { selectObserver, datasetObserver } = container;\r\n if (selectObserver?.disconnect) selectObserver.disconnect();\r\n if (datasetObserver?.disconnect) datasetObserver.disconnect();\r\n }\r\n \r\n /**\r\n * Returns an action API for controlling the SelectBox instance.\r\n * The API exposes getters/setters and operations that synchronize UI, model, and events:\r\n * - placeholder: get/set placeholder (updates Placeholder & SearchBox)\r\n * - oldValue/value/valueArray/valueString/valueOptions/valueText/mask: read current selection(s)\r\n * - disabled/readonly/visible: proxy component state to dataset & CSS/ARIA\r\n * - selectAll/deSelectAll: bulk select/deselect (respects multiple & maxSelected, emits beforeChange/change)\r\n * - setValue: programmatically set selection(s) (array or single), with optional trigger/force\r\n * - open/close/toggle: control popup visibility (runs beforeShow/show and beforeClose/close hooks)\r\n * - change: commit selection changes, refresh mask, update AccessoryBox, fire DOM \"change\" & custom events, and auto-close if configured\r\n * - refreshMask: recompute displayed label (single-select uses selected text; otherwise placeholder)\r\n * - on: register custom event handlers into options.on\r\n * - ajax: configure AJAX search behavior via SearchController\r\n * Internally uses ModelManager/adapter to highlight, resize, and keep ARIA attributes in sync.\r\n */\r\n getAction() {\r\n const container = this.container;\r\n const superThis = this;\r\n const bindedMap = Libs.getBinderMap(container.targetElement);\r\n if (!bindedMap) {\r\n return null;\r\n }\r\n const bindedOptions = bindedMap.options;\r\n let resp = {\r\n get placeholder() {\r\n return container.placeholder.get();\r\n },\r\n set placeholder(value) {\r\n container.placeholder?.set(value);\r\n container.searchbox?.setPlaceHolder(value);\r\n },\r\n get oldValue() {\r\n return superThis.oldValue;\r\n },\r\n set value(value) {\r\n this.setValue(null, value, true);\r\n },\r\n get value() {\r\n let item_list = this.valueArray;\r\n \r\n const valLength = item_list.length;\r\n return valLength > 1 ? item_list : (valLength == 0 ? \"\" : item_list[0]);\r\n },\r\n get valueArray() {\r\n let item_list = [];\r\n superThis.getModelOption().forEach(modelElement => {\r\n modelElement[\"selected\"] && (item_list.push(modelElement[\"value\"]));\r\n });\r\n return item_list;\r\n },\r\n get valueString() {\r\n const customDelimiter = bindedOptions.customDelimiter;\r\n let item_list = this.valueArray;\r\n\r\n return item_list.join(customDelimiter);\r\n },\r\n get valueOptions() {\r\n let item_list = [];\r\n superThis.getModelOption().forEach(modelElement => {\r\n modelElement[\"selected\"] && (item_list.push(modelElement));\r\n });\r\n return item_list;\r\n },\r\n get mask() {\r\n let item_list = [];\r\n superThis.getModelOption().forEach(modelOption => {\r\n modelOption[\"selected\"] && (item_list.push(modelOption[\"text\"]));\r\n });\r\n return item_list;\r\n },\r\n get valueText() {\r\n var item_list = [];\r\n superThis.getModelOption().forEach(modelOption => {\r\n modelOption[\"selected\"] && (item_list.push(modelOption[\"text\"]));\r\n });\r\n \r\n const valLength = item_list.length;\r\n return valLength > 1 ? item_list : (valLength == 0 ? \"\" : item_list[0]);\r\n },\r\n get isOpen() {\r\n return superThis.isOpen;\r\n },\r\n selectAll(evtToken, trigger = true) {\r\n if (bindedOptions.multiple && bindedOptions.maxSelected > 0) {\r\n if (superThis.getModelOption().length > bindedOptions.maxSelected) {\r\n return\r\n }\r\n }\r\n\r\n if (this.disabled || this.readonly || !bindedOptions.multiple) {\r\n return;\r\n }\r\n\r\n if (trigger) {\r\n const beforeChangeToken = iEvents.callEvent([this], ...bindedOptions.on.beforeChange);\r\n if (beforeChangeToken.isCancel) {\r\n return;\r\n }\r\n\r\n superThis.oldValue = this.value;\r\n }\r\n\r\n superThis.getModelOption().forEach(modelOption => {\r\n modelOption[\"selectedNonTrigger\"] = true;\r\n });\r\n \r\n this.change(false, trigger);\r\n },\r\n deSelectAll(evtToken, trigger = true) {\r\n if (this.disabled || this.readonly || !bindedOptions.multiple) {\r\n return;\r\n }\r\n\r\n if (trigger) {\r\n const beforeChangeToken = iEvents.callEvent([this], ...bindedOptions.on.beforeChange);\r\n if (beforeChangeToken.isCancel) {\r\n return;\r\n }\r\n\r\n superThis.oldValue = this.value;\r\n }\r\n\r\n superThis.getModelOption().forEach(modelOption => {\r\n modelOption[\"selectedNonTrigger\"] = false;\r\n });\r\n \r\n this.change(false, trigger);\r\n },\r\n setValue(evtToken = null, value, trigger = true, force = false) {\r\n !Array.isArray(value) && (value = [value]);\r\n\r\n if (bindedOptions.multiple && bindedOptions.maxSelected > 0) {\r\n if (value.length > bindedOptions.maxSelected) {\r\n return\r\n }\r\n }\r\n\r\n if (!force && (this.disabled || this.readonly)) {\r\n return;\r\n }\r\n\r\n if (trigger) {\r\n const beforeChangeToken = iEvents.callEvent([this], ...bindedOptions.on.beforeChange);\r\n if (beforeChangeToken.isCancel) {\r\n return;\r\n }\r\n\r\n superThis.oldValue = this.value;\r\n }\r\n\r\n superThis.getModelOption().forEach(modelOption => {\r\n modelOption[\"selectedNonTrigger\"] = value.some(v => v == modelOption[\"value\"]);\r\n });\r\n \r\n if (!bindedOptions.multiple){\r\n container.targetElement.value = value[0];\r\n }\r\n \r\n this.change(false, trigger);\r\n },\r\n open() {\r\n if (superThis.isOpen) return false;\r\n let findAnother = superThis.Selective.find();\r\n if (!findAnother.isEmpty) {\r\n /** @type {IEventToken} */\r\n const closeToken = findAnother.close();\r\n if (closeToken.isCancel) {\r\n return false;\r\n }\r\n }\r\n\r\n if (this.disabled) {\r\n return false;\r\n }\r\n \r\n const beforeShowToken = iEvents.callEvent([this], ...bindedOptions.on.beforeShow);\r\n if (beforeShowToken.isCancel) {\r\n return false;\r\n }\r\n\r\n superThis.isOpen = true;\r\n container.directive.setDropdown(true);\r\n\r\n const adapter = container.popup.optionAdapter;\r\n const selectedOption = adapter.getSelectedItem();\r\n if (selectedOption) {\r\n adapter.setHighlight(selectedOption, false);\r\n } else {\r\n adapter.resetHighlight();\r\n }\r\n\r\n if ((!superThis.hasLoadedOnce || superThis.isBeforeSearch) && bindedOptions?.ajax) {\r\n container.popup.showLoading();\r\n superThis.hasLoadedOnce = true;\r\n superThis.isBeforeSearch = false;\r\n \r\n setTimeout(() => {\r\n if (!container.popup || !container.searchController) return;\r\n container.searchController.search(\"\")\r\n .then(() => container.popup?.triggerResize?.())\r\n .catch(err => console.error(\"Initial ajax load error:\", err));\r\n }, bindedOptions.animationtime);\r\n }\r\n \r\n container.popup.open();\r\n container.searchbox.show();\r\n\r\n container.tags.ViewPanel.setAttribute(\"aria-expanded\", \"true\");\r\n \r\n iEvents.callEvent([this], ...bindedOptions.on.show);\r\n\r\n return true;\r\n },\r\n close() {\r\n if (!superThis.isOpen) return false;\r\n\r\n const beforeCloseToken = iEvents.callEvent([this], ...bindedOptions.on.beforeClose);\r\n if (beforeCloseToken.isCancel) {\r\n return false;\r\n }\r\n \r\n superThis.isOpen = false;\r\n \r\n container.directive.setDropdown(false);\r\n container.popup.close(() => {\r\n container.searchbox.clear(false);\r\n });\r\n container.searchbox.hide();\r\n container.tags.ViewPanel.setAttribute(\"aria-expanded\", \"false\");\r\n\r\n iEvents.callEvent([this], ...bindedOptions.on.close);\r\n\r\n return true;\r\n },\r\n toggle() {\r\n if (superThis.isOpen) {\r\n this.close();\r\n }\r\n else {\r\n this.open();\r\n }\r\n },\r\n change(evtToken = null, canTrigger = true) {\r\n if (canTrigger) {\r\n if (bindedOptions.multiple && bindedOptions.maxSelected > 0) {\r\n if (this.valueArray.length > bindedOptions.maxSelected) {\r\n this.setValue(null, this.oldValue, false, true);\r\n }\r\n }\r\n\r\n if (this.disabled || this.readonly) {\r\n this.setValue(null, this.oldValue, false, true);\r\n return;\r\n }\r\n\r\n const beforeChangeToken = iEvents.callEvent([this, this.value], ...bindedOptions.on.beforeChange);\r\n \r\n if (beforeChangeToken.isCancel) {\r\n this.setValue(null, this.oldValue, false);\r\n return;\r\n }\r\n }\r\n\r\n this.refreshMask();\r\n container.accessorybox.setModelData(this.valueOptions);\r\n if (canTrigger) {\r\n if (container.targetElement) {\r\n iEvents.trigger(container.targetElement, \"change\");\r\n }\r\n iEvents.callEvent([this, this.value], ...bindedOptions.on.change);\r\n\r\n if (superThis.options.autoclose) {\r\n this.close();\r\n }\r\n }\r\n },\r\n refreshMask() {\r\n let mask = bindedOptions.placeholder;\r\n if (!bindedOptions.multiple && superThis.getModelOption().length > 0) {\r\n mask = this.mask[0];\r\n }\r\n mask ??= bindedOptions.placeholder;\r\n \r\n container.placeholder.set(mask, false);\r\n container.searchbox.setPlaceHolder(mask);\r\n },\r\n on(evtToken, evtName, handle) {\r\n if (!bindedOptions.on[evtName]) {\r\n bindedOptions.on[evtName] = [];\r\n }\r\n bindedOptions.on[evtName].push(handle);\r\n },\r\n ajax(evtToken, obj) {\r\n container.searchController.setAjax(obj);\r\n }\r\n };\r\n\r\n this.createSymProp(resp, \"disabled\", \"isDisabled\");\r\n this.createSymProp(resp, \"readonly\", \"isReadOnly\");\r\n this.createSymProp(resp, \"visible\", \"isVisible\");\r\n\r\n return resp;\r\n }\r\n\r\n /**\r\n * Creates a property on the given object with custom getter and setter behavior.\r\n * The getter returns the value stored in a private property on the current instance (`this`),\r\n * and the setter updates both the private property and a corresponding data-* attribute\r\n * on the instance's `container.targetElement`.\r\n *\r\n * @param {Object} obj - The object on which to define the public property.\r\n * @param {string} prop - The public property name to create on `obj`.\r\n * @param {string} privateProp - The private property name on `this` that stores the actual value.\r\n */\r\n createSymProp(obj, prop, privateProp) {\r\n const superThis = this;\r\n\r\n Object.defineProperty(obj, prop, {\r\n get() { return superThis[privateProp]; },\r\n set(value) {\r\n superThis[privateProp] = value;\r\n superThis.container.targetElement.dataset[prop] = value;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n }\r\n\r\n /**\r\n * Flattens and returns all option models from the current resources.\r\n * Collects OptionModel instances directly and items within GroupModel.\r\n * If `isSelected` is a boolean, filters by selection state; otherwise returns all.\r\n *\r\n * @param {boolean|null} [isSelected=null] - Optional filter to return only selected or unselected options.\r\n * @returns {(GroupModel|OptionModel)[]} - A flat array of option models (and/or group items).\r\n */\r\n getModelOption(isSelected = null) {\r\n if (!this.optionModelManager) return [];\r\n\r\n const { modelList } = this.optionModelManager.getResources();\r\n\r\n const flatOptions = [];\r\n for (const m of modelList) {\r\n if (m instanceof OptionModel) {\r\n flatOptions.push(m);\r\n } else if (m instanceof GroupModel) {\r\n if (Array.isArray(m.items) && m.items.length) {\r\n flatOptions.push(...m.items);\r\n }\r\n }\r\n }\r\n\r\n if (typeof isSelected === \"boolean\") {\r\n return flatOptions.filter(o => o.selected === isSelected);\r\n }\r\n return flatOptions;\r\n }\r\n}","/**\r\n * @class\r\n */\r\nexport class ElementAdditionObserver {\r\n #isActive = false;\r\n /** @type {MutationObserver} */\r\n #observer = null;\r\n\r\n /** @type {Function[]} */\r\n #actions = [];\r\n\r\n /**\r\n * Registers a callback to be invoked whenever a matching element is detected being added to the DOM.\r\n *\r\n * @param {(el: HTMLSelectElement) => void} action - Function executed with the newly added element.\r\n */\r\n onDetect(action) {\r\n this.#actions.push(action);\r\n }\r\n\r\n /**\r\n * Clears all previously registered detection callbacks.\r\n */\r\n clearDetect() {\r\n this.#actions = [];\r\n }\r\n\r\n /**\r\n * Starts observing the document for additions of elements matching the given tag.\r\n * Detects both direct additions and nested matches within added subtrees.\r\n *\r\n * @param {string} tag - The tag name to watch for (e.g., \"select\", \"div\").\r\n */\r\n start(tag) {\r\n if (this.#isActive) {\r\n return;\r\n }\r\n this.#isActive = true;\r\n const upperTag = tag.toUpperCase();\r\n const lowerTag = tag.toLowerCase();\r\n this.#observer = new MutationObserver((mutations) => {\r\n mutations.forEach((mutation) => {\r\n mutation.addedNodes.forEach((node) => {\r\n const subnode = /** @type {HTMLElement} */ (node);\r\n if (subnode.nodeType === 1) {\r\n if (subnode.tagName === upperTag) {\r\n this.#handle(subnode);\r\n }\r\n \r\n const selects = subnode.querySelectorAll(lowerTag);\r\n selects.forEach((select) => {\r\n this.#handle(select);\r\n });\r\n }\r\n });\r\n });\r\n });\r\n\r\n this.#observer.observe(document.body, {\r\n childList: true,\r\n subtree: true\r\n });\r\n }\r\n\r\n /**\r\n * Stops observing for element additions and releases internal resources.\r\n * No-ops if the observer is not active.\r\n */\r\n stop() {\r\n if (!this.#isActive) {\r\n return;\r\n }\r\n this.#isActive = false;\r\n this.#observer.disconnect();\r\n this.#observer = null;\r\n }\r\n\r\n /**\r\n * Internal handler that invokes all registered detection callbacks for the provided element.\r\n *\r\n * @param {Element} element - The element that was detected as added to the DOM.\r\n */\r\n #handle(element) {\r\n this.#actions.forEach(action => {\r\n action(element);\r\n });\r\n }\r\n}","import {Libs} from \"./libs.js\";\r\nimport {iEvents} from \"./ievents.js\";\r\nimport {SelectBox} from \"../components/selectbox.js\";\r\nimport { ElementAdditionObserver } from \"../services/ea-observer.js\";\r\n\r\n/**\r\n * @class\r\n */\r\nexport class Selective {\r\n /** @type {ElementAdditionObserver} */\r\n EAObserver = null;\r\n\r\n static bindedQueries = new Map();\r\n\r\n /**\r\n * Binds Selective UI to all <select> elements matching the query.\r\n * Merges provided options with defaults, schedules `on.load` callbacks,\r\n * initializes each matching select, and records the binding for auto-rebinding.\r\n *\r\n * @param {string} query - CSS selector for target <select> elements.\r\n * @param {object} options - Configuration overrides merged with defaults.\r\n */\r\n static bind(query, options) {\r\n options = Libs.mergeConfig(Libs.getDefaultConfig(), options);\r\n\r\n this.bindedQueries.set(query, options);\r\n\r\n const superThis = this;\r\n const doneToken = Libs.randomString();\r\n Libs.timerProcess.setExecute(doneToken, () => {\r\n iEvents.callEvent([superThis.find(query)], ...options.on.load);\r\n Libs.timerProcess.clearExecute(doneToken);\r\n options.on.load = [];\r\n });\r\n \r\n /** @type {HTMLSelectElement[]} */\r\n const selectElements = /** @type {HTMLSelectElement[]} */ (Libs.getElements(query));\r\n \r\n selectElements.forEach(item => {\r\n (async() => {\r\n if (\"SELECT\" == item.tagName) {\r\n Libs.removeUnbinderMap(item);\r\n if (this.applySelectBox(item, options)) {\r\n Libs.timerProcess.run(doneToken);\r\n }\r\n }\r\n })();\r\n });\r\n\r\n if (!Libs.getBindedCommand().includes(query)) {\r\n Libs.getBindedCommand().push(query);\r\n }\r\n }\r\n\r\n \r\n /**\r\n * A dynamic action API object produced by `find()`.\r\n * Contains `isEmpty` plus dynamically attached properties (get/set or functions).\r\n * \r\n * @typedef {Record<string, object> & { isEmpty: boolean }} ActionApi\r\n * \r\n * Finds the first bound SelectBox actions for a given query (or all bound queries if \"*\").\r\n * Returns an API object with methods assembled from the bound action definitions.\r\n *\r\n * @param {string} [query=\"*\"] - CSS selector or \"*\" to search all bound instances.\r\n * @returns {ActionApi} - Aggregated actions; {isEmpty:true} if none found.\r\n */\r\n static find(query = \"*\") {\r\n let actions = { isEmpty: true };\r\n\r\n if (query == \"*\") {\r\n query = Libs.getBindedCommand().join(\", \");\r\n if (query == \"\") {\r\n return actions;\r\n }\r\n }\r\n\r\n const sels = /** @type {HTMLElement[]} */ (Libs.getElements(query));\r\n if (sels.length == 0) {\r\n return actions;\r\n }\r\n \r\n const binded = Libs.getBinderMap(sels[0]);\r\n if (!binded) {\r\n return actions;\r\n }\r\n \r\n for (let actionName in binded.action) {\r\n actions[actionName] = this.#getProperties(actionName, binded.action)\r\n }\r\n Object.keys(binded.action);\r\n \r\n if (actions) {\r\n /** @type {ActionApi} */\r\n let response = {};\r\n for (let actionKey in actions) {\r\n\r\n /** @type {IPropertiesType} */\r\n const action = actions[actionKey];\r\n \r\n switch (action.type) {\r\n case \"get-set\":\r\n this.#buildGetSetAction(response, action.name, sels);\r\n break;\r\n \r\n case \"func\":\r\n this.#buildFuntionAction(response, action.name, sels);\r\n break;\r\n \r\n default:\r\n break;\r\n }\r\n }\r\n \r\n response.isEmpty = false;\r\n return response;\r\n }\r\n }\r\n\r\n /**\r\n * Starts observing the document for newly added <select> elements and applies\r\n * Selective bindings automatically when they match previously bound queries.\r\n */\r\n static Observer() {\r\n this.EAObserver = new ElementAdditionObserver();\r\n this.EAObserver.onDetect((selectElement) => {\r\n this.bindedQueries.forEach((options, query) => {\r\n try {\r\n if (selectElement.matches(query)) {\r\n this.applySelectBox(selectElement, options);\r\n }\r\n } catch (error) {\r\n console.warn(`Invalid selector: ${query}`, error);\r\n }\r\n });\r\n });\r\n this.EAObserver.start(\"select\");\r\n }\r\n\r\n /**\r\n * Destroys Selective instances. Supports:\r\n * - destroyAll(): when target is null,\r\n * - destroyByQuery(): when target is a selector string,\r\n * - destroyElement(): when target is an HTMLSelectElement.\r\n *\r\n * @param {null|string|HTMLSelectElement} target - Target to destroy.\r\n */\r\n static destroy(target = null) {\r\n if (target === null) {\r\n this.destroyAll();\r\n } else if (typeof target === \"string\") {\r\n this.destroyByQuery(target);\r\n } else if (target instanceof HTMLSelectElement) {\r\n this.destroyElement(target);\r\n }\r\n }\r\n\r\n /**\r\n * Destroys all bound Selective instances and clears bindings/state.\r\n * Stops the ElementAdditionObserver.\r\n */\r\n static destroyAll() {\r\n const bindedCommands = Libs.getBindedCommand();\r\n \r\n bindedCommands.forEach(query => {\r\n this.destroyByQuery(query);\r\n });\r\n\r\n this.bindedQueries.clear();\r\n Libs.getBindedCommand().length = 0;\r\n\r\n this.EAObserver.stop();\r\n }\r\n\r\n /**\r\n * Destroys Selective instances bound to the specified query and removes\r\n * the query from the binding registry.\r\n *\r\n * @param {string} query - CSS selector whose Selective instances should be destroyed.\r\n */\r\n static destroyByQuery(query) {\r\n const selectElements = /** @type {HTMLSelectElement[]} */ (Libs.getElements(query));\r\n \r\n selectElements.forEach(element => {\r\n if (element.tagName === \"SELECT\") {\r\n this.destroyElement(element);\r\n }\r\n });\r\n\r\n this.bindedQueries.delete(query);\r\n const commands = Libs.getBindedCommand();\r\n const index = commands.indexOf(query);\r\n if (index > -1) {\r\n commands.splice(index, 1);\r\n }\r\n }\r\n\r\n /**\r\n * Destroys a single Selective instance attached to the given <select> element,\r\n * detaches UI, restores original select state, and removes binder map entry.\r\n *\r\n * @param {HTMLSelectElement} selectElement - The target <select> element to clean up.\r\n */\r\n static destroyElement(selectElement) {\r\n const bindMap = Libs.getBinderMap(selectElement);\r\n if (!bindMap) return;\r\n\r\n Libs.setUnbinderMap(selectElement, bindMap);\r\n\r\n const wasObserving = !!this.EAObserver;\r\n if (wasObserving) this.EAObserver.stop();\r\n\r\n try { bindMap.self.deInit?.(); } catch (_) {}\r\n\r\n const wrapper = bindMap.container?.element || selectElement.parentElement;\r\n\r\n selectElement.style.display = \"\";\r\n selectElement.style.visibility = \"\";\r\n selectElement.disabled = false;\r\n delete selectElement.dataset.selectiveId;\r\n\r\n if (wrapper && wrapper.parentNode) {\r\n wrapper.parentNode.replaceChild(selectElement, wrapper);\r\n } else {\r\n document.body.appendChild(selectElement);\r\n }\r\n\r\n Libs.removeBinderMap(selectElement);\r\n\r\n if (wasObserving && this.bindedQueries.size > 0) {\r\n this.EAObserver.start(\"select\");\r\n }\r\n }\r\n\r\n /**\r\n * Unbinds a previously bound query from auto-apply and auto-observe lists.\r\n * Stops the observer when no bound queries remain.\r\n *\r\n * @param {string} query - The CSS selector to unbind.\r\n */\r\n // static unbind(query) {\r\n // this.bindedQueries.delete(query);\r\n \r\n // const commands = Libs.getBindedCommand();\r\n // const index = commands.indexOf(query);\r\n // if (index > -1) {\r\n // commands.splice(index, 1);\r\n // }\r\n\r\n // if (this.bindedQueries.size === 0) {\r\n // this.EAObserver.stop();\r\n // }\r\n // }\r\n\r\n /**\r\n * Rebinds a query by destroying existing instances and binding anew\r\n * with the provided options.\r\n *\r\n * @param {string} query - CSS selector to rebind.\r\n * @param {object} options - Configuration for the new binding.\r\n */\r\n static rebind(query, options) {\r\n this.destroyByQuery(query);\r\n this.bind(query, options);\r\n }\r\n\r\n /**\r\n * Applies SelectBox enhancement to a single <select> element:\r\n * builds per-instance IDs, merges element dataset into options,\r\n * creates SelectBox, stores binder map with action API, and wires toggle on mouseup.\r\n *\r\n * @param {HTMLSelectElement} selectElement - The native <select> to enhance.\r\n * @param {object} options - Configuration used for this instance.\r\n * @returns {boolean} - False if already bound; true if successfully applied.\r\n */\r\n static applySelectBox(selectElement, options) {\r\n if (Libs.getBinderMap(selectElement) || Libs.getUnbinderMap(selectElement)) {\r\n return false;\r\n }\r\n \r\n const SEID = Libs.randomString(8);\r\n const options_cfg = Libs.buildConfig(selectElement, options);\r\n options_cfg.SEID = SEID\r\n options_cfg.SEID_LIST = `seui-${SEID}-optionlist`;\r\n options_cfg.SEID_HOLDER = `seui-${SEID}-placeholder`;\r\n const bindMap = {options: options_cfg};\r\n \r\n Libs.setBinderMap(selectElement, bindMap);\r\n const selectBox = new SelectBox(selectElement, this);\r\n bindMap.container = selectBox.container;\r\n bindMap.action = selectBox.getAction();\r\n bindMap.self = selectBox;\r\n\r\n selectBox.container.view.addEventListener(\"mouseup\", () => {\r\n bindMap.action.toggle();\r\n });\r\n\r\n return true;\r\n }\r\n\r\n /**\r\n * Determines the property type for an action name on the provided object.\r\n * Classifies as:\r\n * - \"get-set\" when a getter exists (or a setter with non-function value),\r\n * - \"func\" when the property is a function,\r\n * - \"variable\" otherwise.\r\n *\r\n * @typedef {Object} IPropertiesType\r\n * @property {string} type - One of \"variable\" | \"get-set\" | \"func\".\r\n * @property {string} name - The original action name.\r\n *\r\n * @param {string} actionName - The property key to inspect.\r\n * @param {*} action - The object containing the property.\r\n * @returns {IPropertiesType} - The derived property type and name.\r\n */\r\n static #getProperties(actionName, action) {\r\n const descriptor = Object.getOwnPropertyDescriptor(action, actionName);\r\n let type = \"variable\";\r\n\r\n if (descriptor.get || (descriptor.set && typeof action[actionName] !== \"function\")) {\r\n type = \"get-set\";\r\n }\r\n else if (typeof action[actionName] === \"function\") {\r\n type = \"func\";\r\n }\r\n\r\n return {\r\n type,\r\n name: actionName\r\n }\r\n }\r\n\r\n /**\r\n * Defines a get/set property on the target object that proxies to each bound element's action API.\r\n * Getter reads from the first element; setter writes the value to all elements.\r\n *\r\n * @param {Object} object - The target object to define the property on.\r\n * @param {string} name - The property name to expose.\r\n * @param {HTMLElement[]} els - The list of bound elements to proxy.\r\n */\r\n static #buildGetSetAction(object, name, els) {\r\n Object.defineProperty(object, name, {\r\n get() {\r\n const binded = Libs.getBinderMap(els[0]);\r\n return binded.action[name];\r\n },\r\n set(value) {\r\n els.forEach(el => {\r\n const binded = Libs.getBinderMap(el);\r\n if (binded) {\r\n binded.action[name] = value;\r\n }\r\n });\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n }\r\n\r\n /**\r\n * Creates a function on the target object that invokes the corresponding action\r\n * across all bound elements in order, respecting the event token flow control.\r\n * Stops iteration if the token indicates propagation should not continue.\r\n *\r\n * @param {Object} object - The target object to attach the function to.\r\n * @param {string} name - The function name to expose.\r\n * @param {HTMLElement[]} els - The list of bound elements to invoke against.\r\n */\r\n static #buildFuntionAction(object, name, els) {\r\n object[name] = (...params) => {\r\n for (let index = 0; index < els.length; index++) {\r\n const el = els[index];\r\n const binded = Libs.getBinderMap(el);\r\n if (!binded) {\r\n continue;\r\n }\r\n const evtToken = iEvents.buildEventToken();\r\n binded.action[name](evtToken.callback, ...params)\r\n if (!evtToken.token.isContinue) {\r\n break;\r\n }\r\n }\r\n return object;\r\n }\r\n }\r\n}","/**\r\n * Checks for a previously loaded global library instance by name.\r\n * If found (with `__loaded` flag), logs a warning and returns true; otherwise\r\n * initializes a loading placeholder on `window[name]` and returns false.\r\n *\r\n * @param {string} LIB_NAME - The global namespace key to check on `window`.\r\n * @returns {boolean} - True if a loaded instance already exists; false otherwise.\r\n */\r\nexport function checkDuplicate(LIB_NAME) {\r\n if (typeof window === \"undefined\") return false;\r\n \r\n if (window[LIB_NAME] && window[LIB_NAME].__loaded) {\r\n console.warn(\r\n `[${LIB_NAME}] Already loaded (v${window[LIB_NAME].__version}). ` +\r\n `Using existing instance. Please remove duplicate <script> tags.`\r\n );\r\n return true;\r\n }\r\n \r\n window[LIB_NAME] = window[LIB_NAME] || {};\r\n window[LIB_NAME].__loading = true;\r\n return false;\r\n}\r\n\r\n/**\r\n * Marks a global library namespace as fully loaded, sets version metadata,\r\n * merges its public API into `window[name]`, freezes the object to prevent\r\n * further mutation, and logs a success message.\r\n *\r\n * @param {string} name - The global namespace key on `window`.\r\n * @param {string} version - Semantic version string of the library.\r\n * @param {Object} api - Public API surface to expose under `window[name]`.\r\n * @returns {void}\r\n */\r\nexport function markLoaded(name, version, api) {\r\n if (typeof window === \"undefined\") return;\r\n \r\n window[name].__loaded = true;\r\n window[name].__loading = false;\r\n window[name].__version = version;\r\n \r\n Object.assign(window[name], api);\r\n \r\n Object.freeze(window[name]);\r\n \r\n console.log(`[${name}] v${version} loaded successfully`);\r\n}","import \"../css/index.css\";\r\nimport \"../css/components/selectbox.css\";\r\nimport \"../css/components/placeholder.css\";\r\nimport \"../css/components/directive.css\";\r\nimport \"../css/components/empty-state.css\";\r\nimport \"../css/components/loading-state.css\";\r\nimport \"../css/components/optgroup.css\";\r\nimport \"../css/components/popup.css\";\r\nimport \"../css/components/searchbox.css\";\r\nimport \"../css/components/option-handle.css\";\r\nimport \"../css/components/option.css\";\r\nimport \"../css/components/accessorybox.css\";\r\n\r\nimport \"./types/adapter.type\";\r\nimport \"./types/effector.type\";\r\nimport \"./types/ievents.type\";\r\nimport \"./types/libs.type\";\r\nimport \"./types/model.type\";\r\nimport \"./types/recyclerview.type\";\r\nimport \"./types/resize-observer.type\";\r\nimport \"./types/view.option.type\";\r\nimport \"./types/view.type\";\r\n\r\nimport { Selective } from \"./utils/selective\";\r\nimport { checkDuplicate, markLoaded } from \"./utils/guard\";\r\nimport { Libs } from \"./utils/libs\";\r\nimport { Effector } from \"./services/effector\";\r\n\r\nexport const version = \"1.0.2\";\r\nexport const name = \"SelectiveUI\";\r\n\r\nconst alreadyLoaded = checkDuplicate(name);\r\n\r\n/**\r\n * Enhances all <select> elements matching the query with Selective UI.\r\n * If a prior global instance is already loaded, proxies the call to it; otherwise uses local Selective.bind.\r\n *\r\n * @param {string} query - CSS selector for target <select> elements.\r\n * @param {object} [options={}] - Configuration overrides merged with defaults.\r\n */\r\nexport function bind(query, options = {}) {\r\n if (alreadyLoaded && typeof window !== \"undefined\" && window[name]) {\r\n return window[name].bind(query, options);\r\n }\r\n\r\n Selective.bind(query, options);\r\n}\r\n\r\n/**\r\n * Retrieves the dynamic action API for bound instances matching the query.\r\n * Proxies to an already-loaded global instance if present; otherwise uses local Selective.find.\r\n *\r\n * @param {string} query - CSS selector identifying bound instances.\r\n * @returns {{isEmpty:boolean} & Record<string, unknown>} - Action API; {isEmpty:true} if none found.\r\n */\r\nexport function find(query) {\r\n if (alreadyLoaded && typeof window !== \"undefined\" && window[name]) {\r\n return window[name].find(query);\r\n }\r\n\r\n return Selective.find(query);\r\n}\r\n\r\n/**\r\n * Destroys Selective instances associated with the given query.\r\n * Proxies to a global loaded instance if available; otherwise uses local Selective.destroy.\r\n *\r\n * @param {string} query - CSS selector identifying instances to tear down.\r\n * @returns {void}\r\n */\r\nexport function destroy(query) {\r\n if (alreadyLoaded && typeof window !== \"undefined\" && window[name]) {\r\n return window[name].destroy(query);\r\n }\r\n\r\n return Selective.destroy(query);\r\n}\r\n\r\n/**\r\n * Rebinds Selective for the given query by destroying existing instances and binding anew.\r\n * Proxies to a global loaded instance if available; otherwise uses local Selective.rebind.\r\n *\r\n * @param {string} query - CSS selector for target <select> elements.\r\n * @param {object} [options={}] - Configuration overrides for the new binding.\r\n * @returns {void}\r\n */\r\nexport function rebind(query, options = {}) {\r\n if (alreadyLoaded && typeof window !== \"undefined\" && window[name]) {\r\n return window[name].rebind(query, options);\r\n }\r\n\r\n return Selective.rebind(query, options);\r\n}\r\n\r\n/**\r\n * Returns an effector instance for a given element, enabling expand/collapse/resize animations.\r\n * Proxies to a global loaded instance if available; otherwise constructs a local Effector.\r\n *\r\n * @param {string|HTMLElement} element - CSS selector or element to control.\r\n * @returns {EffectorInterface} - The effector utility bound to the element.\r\n */\r\nexport function effector(element) {\r\n if (alreadyLoaded && typeof window !== \"undefined\" && window[name]) {\r\n return window[name].effector(element);\r\n }\r\n\r\n return Effector(element);\r\n}\r\n\r\nif (!alreadyLoaded) {\r\n let initialized = false;\r\n\r\n function init() {\r\n if (initialized) return;\r\n initialized = true;\r\n \r\n document.addEventListener(\"mousedown\", () => {\r\n const sels = Libs.getBindedCommand();\r\n if (sels.length > 0) {\r\n const optanObj = Selective.find(sels.join(\", \"));\r\n if (!optanObj.isEmpty) {\r\n optanObj.close();\r\n }\r\n }\r\n });\r\n\r\n Selective.Observer();\r\n \r\n markLoaded(name, version, { bind, find, destroy, rebind, effector, version });\r\n }\r\n\r\n if (document.readyState === \"loading\") {\r\n document.addEventListener(\"DOMContentLoaded\", init);\r\n } else {\r\n init();\r\n }\r\n}"],"names":["Effector.Effector"],"mappings":"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"}
1
+ {"version":3,"file":"selective-ui.umd.js","sources":["../src/js/utils/istorage.js","../src/js/utils/libs.js","../src/js/utils/ievents.js","../src/js/services/refresher.js","../src/js/components/placeholder.js","../src/js/components/directive.js","../src/js/components/option-handle.js","../src/js/services/resize-observer.js","../src/js/core/base/model.js","../src/js/core/base/view.js","../src/js/views/group-view.js","../src/js/views/option-view.js","../src/js/models/option-model.js","../src/js/models/group-model.js","../src/js/core/base/adapter.js","../src/js/core/model-manager.js","../src/js/components/empty-state.js","../src/js/components/loading-state.js","../src/js/adapter/mixed-adapter.js","../src/js/components/popup.js","../src/js/components/searchbox.js","../src/js/services/effector.js","../src/js/core/base/recyclerview.js","../src/js/components/accessorybox.js","../src/js/core/search-controller.js","../src/js/services/select-observer.js","../src/js/services/dataset-observer.js","../src/js/components/selectbox.js","../src/js/services/ea-observer.js","../src/js/utils/selective.js","../src/js/utils/guard.js","../src/js/index.js"],"sourcesContent":["/**\n * @class\n */\nexport class iStorage {\n defaultConfig = {\n showPanel: true,\n accessoryStyle: \"top\",\n multiple: false,\n minWidth: \"50px\",\n width: \"0px\",\n offsetWidth: null,\n minHeight: \"30px\",\n height: \"30px\",\n panelHeight: \"220px\",\n panelMinHeight: \"100px\",\n disabled: false,\n readonly: false,\n selectall: true,\n keepSelected: true,\n placeholder: \"Select value\",\n altMask: \"\",\n autoclose: false,\n autoscroll: true,\n autofocus: true,\n searchable: true,\n loadingfield: true,\n visible: true,\n skipError: false,\n customDelimiter: \",\",\n textLoading: \"Processing...\",\n textNoData: \"No data available\",\n textNotFound: \"Not found\",\n textSelectAll: \"Select all\",\n textDeselectAll: \"Deselect all\",\n textAccessoryDeselect: \"Deselect: \",\n animationtime: 200, // milisecond\n delaysearchtime: 200, // milisecond\n allowHtml: true,\n maxSelected: 0,\n labelHalign: \"left\",\n labelValign: \"center\",\n imageMode: false,\n imageWidth: \"60px\",\n imageHeight: \"60px\",\n imageBorderRadius: \"4px\",\n imagePosition: \"right\",\n ajax: null,\n on: {\n load: [],\n beforeShow: [],\n show: [],\n beforeChange: [],\n change: [],\n beforeClose: [],\n close: []\n }\n };\n bindedMap = new Map;\n unbindedMap = new Map;\n bindedCommand = [];\n}","import {iStorage} from \"./istorage.js\";\n\n/**\n * @class\n */\nexport class Libs {\n /** @type {iStorage} */\n static #iStorage = null;\n \n /**\n * Retrieves the shared iStorage instance (lazy-initialized singleton).\n *\n * @returns {iStorage} - The global storage utility used by Libs.\n */\n static get iStorage() {\n !this.#iStorage && (this.#iStorage = new iStorage());\n return this.#iStorage;\n }\n\n /**\n * Schedules and batches function executions keyed by name, with debounced timers.\n * Provides setExecute(), clearExecute(), and run() to manage deferred callbacks.\n */\n static timerProcess = {\n executeStored: {}, \n setExecute: function(keyExecute, execute, timeout = 50, once = false) {\n if (!this.executeStored[keyExecute]) {\n this.executeStored[keyExecute] = [];\n }\n this.executeStored[keyExecute].push({execute: execute, timeout: timeout, once: once});\n }, clearExecute: function(keyExecute) {\n delete this.executeStored[keyExecute];\n }, run: function(keyExecute, ...params) {\n let executes = this.executeStored[keyExecute];\n\n if (!this.timerRunner[keyExecute]) {\n this.timerRunner[keyExecute] = {};\n }\n \n for (const key in executes) {\n const execute = executes[key];\n\n if (!this.timerRunner[keyExecute][key]) {\n this.timerRunner[keyExecute][key] = {};\n }\n\n if (execute) {\n clearTimeout(this.timerRunner[keyExecute][key]);\n this.timerRunner[keyExecute][key] = setTimeout(() => {\n execute && execute.execute(params.length > 0 ? params : null);\n execute.once && (delete this.executeStored[keyExecute][key]);\n }, execute.timeout);\n }\n }\n }, timerRunner: {}\n }\n\n /**\n * Checks whether a value is null/undefined/empty-string/\"0\"/0.\n * Booleans are always considered non-empty.\n *\n * @param {any} value - The value to test.\n * @returns {boolean} - True if considered empty; otherwise false.\n */\n static isNullOrEmpty(value) {\n if (typeof value === \"boolean\") return false;\n return value == null || value === \"\" || value === 0 || value === \"0\";\n }\n\n /**\n * Deep-copies plain objects/arrays recursively. Returns primitives as-is.\n *\n * @param {any} obj - The source object or array.\n * @returns {any} - A deep-cloned copy.\n */\n static jsCopyObject(obj) {\n if (obj === null || typeof obj !== \"object\") {\n return obj;\n }\n\n let copy = Array.isArray(obj) ? [] : {};\n\n for (let key in obj) {\n if (obj.hasOwnProperty(key)) {\n copy[key] = this.jsCopyObject(obj[key]);\n }\n }\n\n return copy;\n }\n\n /**\n * Generates a random alphanumeric string of given length.\n *\n * @param {number} [length=6] - Desired length.\n * @returns {string} - The generated string.\n */\n static randomString(length = 6) {\n let result = \"\";\n let characters = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\";\n let charactersLength = characters.length;\n for ( let i = 0; i < length; i++ ) {\n result += characters.charAt(Math.floor(Math.random() * charactersLength));\n }\n return result;\n }\n\n /**\n * Resolves a selector, NodeList, or single Element into an array of elements.\n * Returns an empty array if nothing is found.\n *\n * @param {string|NodeList|Element|HTMLElement|null} queryCommon - CSS selector, NodeList, or Element.\n * @returns {Element[]|HTMLElement[]|Node[]} - Array of matched elements (empty if none).\n */\n static getElements(queryCommon) {\n if (!queryCommon) return [];\n\n if (typeof queryCommon === \"string\") {\n const nodeList = document.querySelectorAll(queryCommon);\n return Array.from(nodeList);\n }\n\n if (queryCommon instanceof Element) {\n return [queryCommon];\n }\n\n if (queryCommon instanceof NodeList || Array.isArray(queryCommon)) {\n return Array.from(queryCommon);\n }\n\n return [];\n }\n\n /**\n * Creates a new Element based on a NodeSpec and applies attributes, classes, styles, dataset, and events.\n *\n * @param {NodeSpec} data - Specification describing the element to create.\n * @returns {Element} - The created element.\n */\n static nodeCreator(data = {}) {\n return this.nodeCloner(document.createElement(data.node), data, true);\n }\n\n /**\n * Clones an element (or converts a Node to Element) and applies NodeSpec options.\n * When systemNodeCreate=true, uses the provided node as-is.\n *\n * @param {Element} node - The element to clone or use.\n * @param {NodeSpec} _nodeOption - Options (classList, style, dataset, event, other props).\n * @param {boolean} systemNodeCreate - If true, do not clone; use original node.\n * @returns {Element} - The processed element.\n */\n static nodeCloner(node = document.documentElement, _nodeOption = null, systemNodeCreate = false) {\n const nodeOption = { ..._nodeOption };\n \n /** @type {Element} */\n const element_creation = systemNodeCreate ? node : this.nodeToElement(node.cloneNode(true));\n\n if (typeof nodeOption.classList === \"string\") {\n element_creation.classList.add(nodeOption.classList);\n } else if (Array.isArray(nodeOption.classList)) {\n element_creation.classList.add(...nodeOption.classList);\n }\n delete nodeOption.classList;\n\n [\"style\", \"dataset\"].forEach(property => {\n Object.assign(element_creation[property], nodeOption[property]);\n delete nodeOption[property];\n });\n\n if (nodeOption.role) {\n element_creation.setAttribute(\"role\", nodeOption.role);\n delete nodeOption.role;\n }\n\n if (nodeOption.ariaLive) {\n element_creation.setAttribute(\"aria-live\", nodeOption.ariaLive);\n delete nodeOption.ariaLive;\n }\n\n if (nodeOption.ariaLabelledby) {\n element_creation.setAttribute(\"aria-labelledby\", nodeOption.ariaLabelledby);\n delete nodeOption.ariaLabelledby;\n }\n\n if (nodeOption.ariaControls) {\n element_creation.setAttribute(\"aria-controls\", nodeOption.ariaControls);\n delete nodeOption.ariaControls;\n }\n\n if (nodeOption.ariaHaspopup) {\n element_creation.setAttribute(\"aria-haspopup\", nodeOption.ariaHaspopup);\n delete nodeOption.ariaHaspopup;\n }\n\n if (nodeOption.ariaMultiselectable) {\n element_creation.setAttribute(\"aria-multiselectable\", nodeOption.ariaMultiselectable);\n delete nodeOption.ariaMultiselectable;\n }\n\n if (nodeOption.ariaAutocomplete) {\n element_creation.setAttribute(\"aria-autocomplete\", nodeOption.ariaAutocomplete);\n delete nodeOption.ariaAutocomplete;\n }\n\n if (nodeOption.event) {\n Object.entries(nodeOption.event).forEach(([key, value]) => {\n element_creation.addEventListener(key, value);\n });\n delete nodeOption.event;\n }\n\n Object.entries(nodeOption).forEach(([key, value]) => {\n if (value === null) {\n element_creation.removeAttribute(key);\n } else {\n element_creation[key] = value;\n }\n });\n\n return element_creation;\n }\n\n /**\n * Ensures the given Node is an Element; throws if not.\n *\n * @param {Node} node - The node to validate.\n * @returns {Element} - The element cast.\n * @throws {TypeError} - If node is not an Element.\n */\n static nodeToElement(node) {\n if (node instanceof Element) {\n return node;\n }\n throw new TypeError(\"Node is not an Element\");\n }\n\n\n /**\n * Mounts a view from a plain object specification and returns a typed result\n * containing the root element and a tag map.\n *\n * @template TTags\n * @param {Object} rawObj - The specification describing elements and tags.\n * @returns {MountViewResult<TTags>} - The mounted view and its tag references.\n */\n static mountView(rawObj) {\n return /** @type {MountViewResult<TTags>} */ (\n this.mountNode(rawObj)\n );\n }\n\n /**\n * Recursively builds DOM nodes from a specification object, appends/prepends them\n * to an optional parent, and returns either a tag map or a full MountViewResult.\n *\n * @template TTags\n * @param {Object<string, any>} rawObj - Node spec (keys -> { tag, child }).\n * @param {Element|null} [parentE=null] - Parent to attach into; if null, returns root.\n * @param {boolean} [isPrepend=false] - If true, prepend; otherwise append.\n * @param {boolean} [isRecusive=false] - Internal flag for recursion control.\n * @param {TTags|Object} [recursiveTemp={}] - Accumulator for tag references.\n * @returns {MountViewResult<TTags>|TTags} - Tag map or the final mount result.\n */\n static mountNode(rawObj, parentE = null, isPrepend = false, isRecusive = false, recursiveTemp = {}) {\n let view = null;\n for (let key in rawObj) {\n const singleObj = rawObj[key];\n \n const tag = (singleObj.tag?.tagName) ? singleObj.tag : this.nodeCreator(singleObj.tag);\n recursiveTemp[key] = tag;\n singleObj.child && this.mountNode(singleObj.child, tag, false, false, recursiveTemp);\n\n if (parentE) {\n if (isPrepend) {\n parentE.prepend(tag);\n }\n else {\n parentE.append(tag);\n }\n }\n else if (!isRecusive && !view) {\n view = tag;\n }\n }\n if (!isRecusive) {\n recursiveTemp.id = this.randomString(7);\n\n if (!parentE) {\n recursiveTemp = {tags: recursiveTemp, view: view}\n }\n }\n return recursiveTemp;\n }\n\n /**\n * Applies inline CSS styles to all matched elements. Accepts either a style\n * object or a single property + value pair.\n *\n * @param {string|NodeList|HTMLElement} queryCommon - Selector or element(s).\n * @param {Record<string, string>|string} styles - Style object or a single property name.\n * @param {string|null} [value=null] - Value for the single property form.\n */\n static setStyle(queryCommon, styles, value = null) {\n const apply_styles = typeof styles === \"string\" ? { [styles]: value } : { ...styles },\n queryItems = this.getElements(queryCommon);\n\n if (queryItems && typeof queryItems == \"object\"){\n for (let i = 0; i < queryItems.length; i++){\n const item = queryItems[i];\n if (item) {\n Object.assign(item[\"style\"], apply_styles);\n }\n }\n }\n }\n\n /**\n * Builds a configuration object by copying defaults and then overriding with\n * matching element properties or data-* attributes when present.\n *\n * @param {HTMLElement} element - Source element providing overrides.\n * @param {object} options - Default configuration to be merged.\n * @returns {object} - Final configuration after element overrides.\n */\n static buildConfig(element, options) {\n let myOptions = this.jsCopyObject(options);\n\n for (let optionKey in myOptions) {\n if (element[optionKey]) {\n myOptions[optionKey] = element[optionKey];\n }\n else if (typeof element?.dataset[optionKey] !== \"undefined\") {\n myOptions[optionKey] = element.dataset[optionKey];\n }\n }\n return myOptions;\n }\n\n /**\n * Deep-merges multiple configuration objects. Special-cases the `on` field\n * by concatenating event handler arrays; other keys are overwritten.\n *\n * @param {...object} params - Config objects in priority order (leftmost is base).\n * @returns {object} - Merged configuration object.\n */\n static mergeConfig(...params) {\n if (params.length == 0) {\n return {};\n }\n if (params.length == 1) {\n return this.jsCopyObject(params[0]);\n }\n else {\n const level0 = this.jsCopyObject(params[0]);\n for (let index = 1; index < params.length; index++) {\n const cfg = params[index];\n\n for (let optionKey in cfg) {\n if (optionKey == \"on\") {\n const cfgVar = cfg[optionKey];\n for (let actKey in cfgVar) {\n level0[optionKey][actKey].push(cfgVar[actKey]);\n }\n }\n else {\n level0[optionKey] = cfg[optionKey];\n }\n }\n }\n return level0;\n }\n }\n\n /**\n * Converts strings like \"true\", \"1\", \"yes\", \"on\" to boolean true; \"false\", \"0\",\n * \"no\", \"off\" to false. Non-strings are coerced via Boolean().\n *\n * @param {unknown} str - String or any value to convert.\n * @returns {boolean} - The normalized boolean.\n */\n static string2Boolean(str) {\n if (typeof str === \"boolean\") return str;\n if (typeof str !== \"string\") return Boolean(str);\n\n switch (str.trim().toLowerCase()) {\n case \"true\":\n case \"1\":\n case \"yes\":\n case \"on\":\n return true;\n case \"false\":\n case \"0\":\n case \"no\":\n case \"off\":\n return false;\n default:\n return false;\n }\n }\n\n /**\n * Removes a binder map entry for the given element from the global storage.\n *\n * @param {HTMLElement} element - Element key to remove from the binder map.\n * @returns {boolean} - True if an entry existed and was removed.\n */\n static removeBinderMap(element) {\n return this.iStorage.bindedMap.delete(element);\n }\n\n /**\n * Retrieves the binder map entry associated with the given element.\n *\n * @param {HTMLElement} item - Element key whose binder map is requested.\n * @returns {any} - The stored binder map value or undefined if absent.\n */\n static getBinderMap(item) {\n return this.iStorage.bindedMap.get(item);\n }\n \n /**\n * Sets or updates the binder map entry for a given element.\n *\n * @param {HTMLElement} item - Element key to associate with the binder map.\n * @param {any} bindMap - Value to store in the binder map.\n */\n static setBinderMap(item, bindMap) {\n this.iStorage.bindedMap.set(item, bindMap);\n }\n\n /**\n * Removes a binder map entry for the given element from the global storage.\n *\n * @param {HTMLElement} element - Element key to remove from the binder map.\n * @returns {boolean} - True if an entry existed and was removed.\n */\n static removeUnbinderMap(element) {\n return this.iStorage.unbindedMap.delete(element);\n }\n\n /**\n * Retrieves the binder map entry associated with the given element.\n *\n * @param {HTMLElement} item - Element key whose binder map is requested.\n * @returns {any} - The stored binder map value or undefined if absent.\n */\n static getUnbinderMap(item) {\n return this.iStorage.unbindedMap.get(item);\n }\n \n /**\n * Sets or updates the binder map entry for a given element.\n *\n * @param {HTMLElement} item - Element key to associate with the binder map.\n * @param {any} bindMap - Value to store in the binder map.\n */\n static setUnbinderMap(item, bindMap) {\n this.iStorage.unbindedMap.set(item, bindMap);\n }\n\n /**\n * Returns the global default configuration used by the Selective UI system.\n *\n * @returns {object} - The default config object.\n */\n static getDefaultConfig() {\n return this.iStorage.defaultConfig;\n }\n\n /**\n * Returns the global list of bound commands stored in the shared storage.\n *\n * @returns {any[]} - The bound command list.\n */\n static getBindedCommand() {\n return this.iStorage.bindedCommand;\n }\n\n /**\n * Safely translates an HTML-like string to sanitized markup:\n * - decodes custom &lt;`/`&gt; placeholders,\n * - strips <script> tags,\n * - removes event and javascript: attributes from all nodes.\n *\n * @param {string} str_tag - The input string to sanitize/translate.\n * @returns {string} - Safe innerHTML string.\n */\n static tagTranslate(str_tag) {\n if (str_tag == null) return \"\";\n\n str_tag = String(str_tag).replace(/&lt;`/g, \"<\").replace(/`&gt;/g, \">\").replace(/<`/g, \"<\").replace(/`>/g, \">\").trim();\n\n const doc = globalThis?.document;\n\n if (!doc || typeof doc.createElement !== \"function\") {\n str_tag = str_tag\n .replace(/<script\\b[^>]*>[\\s\\S]*?<\\/script>/gi, \"\")\n .replace(/<style\\b[^>]*>[\\s\\S]*?<\\/style>/gi, \"\")\n .replace(/<iframe\\b[^>]*>[\\s\\S]*?<\\/iframe>/gi, \"\")\n .replace(/<(object|embed|link)\\b[^>]*>[\\s\\S]*?<\\/\\1>/gi, \"\");\n str_tag = str_tag.replace(/\\son[a-z]+\\s*=\\s*(['\"]).*?\\1/gi, \"\");\n str_tag = str_tag.replace(/\\s([a-z-:]+)\\s*=\\s*(['\"])\\s*javascript:[^'\"]*\\2/gi, \"\");\n return str_tag;\n }\n\n const tmp = doc.createElement(\"div\");\n tmp.innerHTML = str_tag;\n\n tmp.querySelectorAll(\"script, style, iframe, object, embed, link\").forEach(n => n.remove());\n\n tmp.querySelectorAll(\"*\").forEach(n => {\n [...n.attributes].forEach(a => {\n const name = a.name || \"\";\n const value = a.value || \"\";\n if (/^on/i.test(name)) {\n n.removeAttribute(name);\n return;\n }\n if (/^(href|src|xlink:href)$/i.test(name) && /^javascript:/i.test(value)) {\n n.removeAttribute(name);\n }\n });\n });\n\n return (tmp.innerHTML || \"\").trim();\n }\n\n /**\n * Strips all HTML from a string and returns trimmed plain text.\n *\n * @param {string} html - The HTML string to strip.\n * @returns {string} - The extracted plain text.\n */\n static stripHtml(html) {\n let tmp = document.createElement(\"DIV\");\n tmp.innerHTML = html;\n let text_tmp = tmp.textContent || tmp.innerText || \"\";\n tmp.remove();\n return text_tmp.trim();\n }\n\n /**\n * Normalizes a Vietnamese string by removing diacritics and special combining marks,\n * returning a lowercase non-accent version for searching/matching.\n *\n * @param {string} str - The input text.\n * @returns {string} - The diacritic-free lowercase string.\n */\n static string2normalize(str) {\n if (str == null) return '';\n const s = String(str).toLowerCase().normalize('NFD').replace(/[\\u0300-\\u036f]/g, '');\n return s.replace(/đ/g, 'd').replace(/Đ/g, 'd');\n }\n\n /**\n * Parse select element to array (including optgroups)\n * @param {HTMLSelectElement} selectElement\n * @returns {Array<HTMLOptGroupElement|HTMLOptionElement>}\n */\n static parseSelectToArray(selectElement) {\n const result = [];\n const children = Array.from(selectElement.children);\n\n children.forEach(child => {\n if (child.tagName === \"OPTGROUP\") {\n result.push(child);\n \n Array.from(child.children).forEach(option => {\n option[\"__parentGroup\"] = child;\n result.push(option);\n });\n } else if (child.tagName === \"OPTION\") {\n result.push(child);\n }\n });\n\n return result;\n }\n\n \n /**\n * Detects whether the current environment is iOS (including iPad/iPhone/iPod, iOS browsers,\n * iPadOS on Mac with touch, standalone PWAs, and WebKit mobile heuristics). Caches the result\n * for subsequent calls to avoid re-computation.\n *\n * @returns {boolean} - True if the user agent/platform appears to be iOS; otherwise false.\n */\n \n static IsIOS() {\n const ua = navigator.userAgent;\n return /iP(hone|ad|od)/.test(ua) || \n (navigator.platform === 'MacIntel' && navigator.maxTouchPoints > 1);\n }\n\n /**\n * Converts an arbitrary CSS size value into pixel units by measuring a temporary element.\n * Returns the computed pixel height as a string with \"px\" suffix.\n *\n * @param {string} value - Any valid CSS size (e.g., \"2rem\", \"5vh\", \"12pt\").\n * @returns {string} - The equivalent pixel value (e.g., \"32px\").\n */\n \n static any2px(value) {\n const v = String(value).trim();\n if (v.endsWith('px')) return v;\n if (v.endsWith('vh')) return (window.innerHeight * parseFloat(v)/100) + 'px';\n if (v.endsWith('vw')) return (window.innerWidth * parseFloat(v)/100) + 'px';\n // ... rem/em: lấy computed font-size thân document\n const fs = parseFloat(getComputedStyle(document.documentElement).fontSize);\n if (v.endsWith('rem')) return (fs * parseFloat(v)) + 'px';\n // fallback: đo DOM (hiếm)\n const el = /** @type {HTMLElement} */ (this.nodeCreator({node:'div', style:{height:v, opacity:0}}));\n document.body.appendChild(el);\n const px = el.offsetHeight + 'px';\n el.remove();\n return px;\n }\n}","\n/**\n * Provides a lightweight event utility with cancel/continue control:\n * - buildEventToken(): creates a token/callback pair to control flow (stopPropagation/cancel).\n * - callEvent(): invokes handlers in order, passing params; stops when canceled or propagation stopped.\n * - trigger(): dispatches a native DOM Event on the given element.\n * - callFunctions(): executes an array of functions with optional parameters.\n */\nexport class iEvents {\n /**\n * Creates an event token and its controller callbacks.\n * @returns {{ token: IEventToken, callback: IEventCallback }}\n */\n static buildEventToken() {\n const privToken = { isContinue: true, isCancel: false };\n\n const token = {\n get isContinue() { return privToken.isContinue; },\n get isCancel() { return privToken.isCancel; }\n };\n\n const callback = {\n stopPropagation() { privToken.isContinue = false; },\n cancel() { privToken.isCancel = true; privToken.isContinue = false; }\n };\n\n return { token, callback };\n }\n\n /**\n * Calls event handlers sequentially with optional parameters and a control callback.\n * Stops invoking further handlers if canceled or propagation is stopped.\n *\n * @template T\n * @param {T[]|null} params\n * @param {...Function} handles\n * @returns {IEventToken}\n */\n static callEvent(params, ...handles) {\n const { token, callback } = this.buildEventToken();\n\n for (let i = 0; i < handles.length; i++) {\n const handle = handles[i];\n\n if (typeof handle !== 'function') continue;\n\n if (params && Array.isArray(params)) {\n handle(callback, ...params);\n } else {\n handle(callback);\n }\n\n if (token.isCancel || !token.isContinue) break;\n }\n\n return token;\n }\n\n /**\n * Dispatches a native DOM event on the specified element.\n * @param {HTMLElement|Window|Document} element\n * @param {string} eventSTR\n * @param {{bubbles?: boolean, cancelable?: boolean}} [opts]\n */\n static trigger(element, eventSTR, opts = { bubbles: true, cancelable: true }) {\n const evt = new Event(eventSTR, opts);\n element.dispatchEvent(evt);\n return evt;\n }\n\n /**\n * Invokes an array of functions with optional parameters.\n * @param {Function[]} funcs\n * @param {...any} params\n */\n static callFunctions(funcs, ...params) {\n if (!Array.isArray(funcs)) return;\n for (const fn of funcs) {\n if (typeof fn !== 'function') continue;\n fn(...params);\n }\n }\n}\n","import {Libs} from \"../utils/libs.js\";\n\n/**\n * @class\n */\nexport class Refresher {\n /**\n * Provides a utility to resize the Select UI view panel based on the bound <select> element\n * and configuration options. Applies explicit width/height if configured; otherwise uses the\n * select's current offset size. Ensures minimum width/height constraints are respected.\n *\n * @param {HTMLSelectElement} select - The native select element used to derive dimensions.\n * @param {HTMLElement} view - The view panel element whose styles will be updated.\n */\n static resizeBox(select, view) {\n const \n bindedMap = Libs.getBinderMap(select),\n options = bindedMap.options\n ;\n \n const \n minWidth = options.minWidth,\n minHeight = options.minHeight,\n cfgWidth = parseInt(options.width, 10),\n cfgHeight = parseInt(options.height, 10)\n ;\n \n let width = `${select.offsetWidth}px`,\n height = `${select.offsetHeight}px`;\n \n if (cfgWidth > 0) {\n width = options.width;\n }\n if (cfgHeight > 0) {\n height = options.height;\n }\n\n Libs.setStyle(view, {width, height, minWidth, minHeight});\n }\n}","import {Libs} from \"../utils/libs.js\";\n\n/**\n * @class\n */\nexport class PlaceHolder {\n /**\n * Represents a placeholder component for the Select UI, allowing dynamic updates to placeholder text.\n * Supports HTML content based on configuration and provides methods to get or set the placeholder value.\n */\n constructor(options) {\n options && this.init(options);\n }\n\n /**\n * @type {Element}\n */\n node = null;\n \n #options = null;\n \n /**\n * Initializes the placeholder element with provided options and renders its initial content.\n *\n * @param {object} options - Configuration object containing placeholder text and HTML allowance.\n */\n init(options) {\n this.node = Libs.nodeCreator({\n node: \"div\", classList: \"selective-ui-placeholder\", innerHTML: options.placeholder\n });\n this.#options = options;\n }\n \n /**\n * Retrieves the current placeholder text from the configuration.\n *\n * @returns {string} - The current placeholder text.\n */\n get() {\n return this.#options.placeholder\n }\n \n /**\n * Updates the placeholder text and optionally saves it to the configuration.\n * Applies HTML sanitization based on the allowHtml setting.\n *\n * @param {string} value - The new placeholder text.\n * @param {boolean} [isSave=true] - Whether to persist the new value in the configuration.\n */\n set(value, isSave = true) {\n if (isSave) {\n this.#options.placeholder = value;\n }\n value = Libs.tagTranslate(value);\n this.node.innerHTML = this.#options.allowHtml ? value : Libs.stripHtml(value);\n }\n}","import {Libs} from \"../utils/libs.js\";\n\n/**\n * @class\n */\nexport class Directive {\n constructor() {\n this.#init();\n }\n /**\n * @type {Element}\n */\n node = null;\n \n /**\n * Represents a directive button element used to toggle dropdown state.\n * Initializes a clickable node with appropriate ARIA attributes for accessibility.\n */\n #init() {\n this.node = Libs.nodeCreator({\n node: \"div\", classList: \"selective-ui-directive\", role: \"button\", ariaLabel: \"Toggle dropdown\"\n });\n }\n \n /**\n * Sets the dropdown state by toggling the \"drop-down\" CSS class on the directive node.\n *\n * @param {boolean} value - If true, adds the \"drop-down\" class; otherwise removes it.\n */\n setDropdown(value) {\n if (value) {\n this.node.classList.add(\"drop-down\");\n }\n else {\n this.node.classList.remove(\"drop-down\");\n }\n }\n}","import { iEvents } from \"../utils/ievents.js\";\nimport {Libs} from \"../utils/libs.js\";\n\n/**\n * @class\n */\nexport class OptionHandle {\n nodeMounted;\n /**\n * @type {HTMLDivElement}\n */\n node;\n\n options = null;\n\n /** @type {Function[]} */\n #ActionOnSelectAll = [];\n\n /** @type {Function[]} */\n #ActionOnDeSelectAll = [];\n\n /**\n * Represents an option handle component that provides \"Select All\" and \"Deselect All\" actions\n * for multiple-selection lists. Includes methods to show/hide the handle, refresh its visibility,\n * and register callbacks for select/deselect events.\n */\n constructor(options = null) {\n if (options) {\n this.init(options);\n }\n }\n \n /**\n * Initializes the option handle UI with \"Select All\" and \"Deselect All\" buttons,\n * wiring their click events to trigger registered callbacks.\n *\n * @param {object} options - Configuration object containing text labels and feature flags.\n */\n init(options) {\n this.nodeMounted = Libs.mountNode({\n OptionHandle: {\n tag: {node: \"div\", classList: [\"selective-ui-option-handle\", \"hide\"]},\n child: {\n SelectAll: {\n tag: {node: \"a\", classList: \"selective-ui-option-handle-item\", textContent: options.textSelectAll, onclick: () => {\n iEvents.callFunctions(this.#ActionOnSelectAll);\n }}\n },\n DeSelectAll: {\n tag: {node: \"a\", classList: \"selective-ui-option-handle-item\", textContent: options.textDeselectAll, onclick: () => {\n iEvents.callFunctions(this.#ActionOnDeSelectAll);\n }}\n }\n }\n }\n });\n this.node = this.nodeMounted.view;\n this.options = options;\n }\n \n /**\n * Determines whether the option handle should be available based on configuration.\n *\n * @returns {boolean} - True if multiple selection and select-all features are enabled.\n */\n available() {\n return Libs.string2Boolean(this.options.multiple) && Libs.string2Boolean(this.options.selectall);\n }\n \n /**\n * Refreshes the visibility of the option handle based on availability.\n * Shows the handle if available; hides it otherwise.\n */\n refresh() {\n if (this.available()) {\n this.show();\n }\n else {\n this.hide();\n }\n }\n \n /**\n * Makes the option handle visible by removing the \"hide\" class.\n */\n show() {\n this.node.classList.remove(\"hide\");\n }\n \n /**\n * Hides the option handle by adding the \"hide\" class.\n */\n hide() {\n this.node.classList.add(\"hide\");\n }\n \n /**\n * Registers a callback to be executed when \"Select All\" is clicked.\n *\n * @param {Function|null} action - The function to call on select-all action.\n */\n OnSelectAll(action = null) {\n this.#ActionOnSelectAll.push(action);\n }\n \n /**\n * Registers a callback to be executed when \"Deselect All\" is clicked.\n *\n * @param {Function|null} action - The function to call on deselect-all action.\n */\n OnDeSelectAll(action = null) {\n this.#ActionOnDeSelectAll.push(action);\n }\n}","\n/**\n * @class\n */\nexport class ResizeObserverService {\n isInit = false;\n element = null;\n /** @type {ResizeObserver} */\n #resizeObserver = null;\n #mutationObserver = null;\n #boundUpdateChanged;\n \n /**\n * Initializes the service and binds the internal update handler to `this`.\n * Sets the service to an initialized state.\n */\n constructor() {\n this.isInit = true\n this.#boundUpdateChanged = this.#updateChanged.bind(this);\n }\n\n /**\n * Callback invoked when the observed element's metrics change.\n * Override to react to size/position/style updates.\n *\n * @param {ElementMetrics} metrics - Calculated box metrics (size, position, padding, border, margin).\n */\n onChanged(metrics) {}\n\n /**\n * Computes the current metrics of the bound element (bounding rect + computed styles)\n * and forwards them to `onChanged(metrics)`.\n *\n * @returns {void}\n */\n #updateChanged() {\n // Guard: nếu element chưa sẵn sàng hoặc không đo được, trả về metrics mặc định\n const el = this.element;\n if (!el || typeof el.getBoundingClientRect !== 'function') {\n /** @type {ElementMetrics} */\n const defaultMetrics = {\n width: 0,\n height: 0,\n top: 0,\n left: 0,\n padding: { top: 0, right: 0, bottom: 0, left: 0 },\n border: { top: 0, right: 0, bottom: 0, left: 0 },\n margin: { top: 0, right: 0, bottom: 0, left: 0 },\n };\n this.onChanged(defaultMetrics);\n return;\n }\n\n const rect = el.getBoundingClientRect();\n const style = (typeof window?.getComputedStyle === 'function')\n ? window.getComputedStyle(el)\n : null;\n\n /** @type {ElementMetrics} */\n const metrics = {\n width: rect?.width ?? 0,\n height: rect?.height ?? 0,\n top: rect?.top ?? 0,\n left: rect?.left ?? 0,\n\n padding: {\n top: parseFloat(style?.paddingTop ?? '0'),\n right: parseFloat(style?.paddingRight ?? '0'),\n bottom: parseFloat(style?.paddingBottom ?? '0'),\n left: parseFloat(style?.paddingLeft ?? '0'),\n },\n\n border: {\n top: parseFloat(style?.borderTopWidth ?? '0'),\n right: parseFloat(style?.borderRightWidth ?? '0'),\n bottom: parseFloat(style?.borderBottomWidth ?? '0'),\n left: parseFloat(style?.borderLeftWidth ?? '0'),\n },\n\n margin: {\n top: parseFloat(style?.marginTop ?? '0'),\n right: parseFloat(style?.marginRight ?? '0'),\n bottom: parseFloat(style?.marginBottom ?? '0'),\n left: parseFloat(style?.marginLeft ?? '0'),\n }\n };\n \n this.onChanged(metrics);\n }\n \n /**\n * Manually triggers a metrics computation and notification via `onChanged`.\n */\n trigger() {\n this.#updateChanged();\n }\n \n /**\n * Starts observing the provided element for resize and style/class mutations,\n * and listens to window/visualViewport scroll/resize to detect layout changes.\n *\n * @param {Element} element - The element to observe; must be a valid DOM Element.\n * @throws {Error} If `element` is not an instance of Element.\n */\n connect(element) {\n if (!(element instanceof Element)) {\n throw new Error(\"Element không hợp lệ\");\n }\n\n this.element = element;\n\n this.#resizeObserver = new ResizeObserver(this.#boundUpdateChanged);\n this.#resizeObserver.observe(element);\n\n this.#mutationObserver = new MutationObserver(this.#boundUpdateChanged);\n this.#mutationObserver.observe(element, {\n attributes: true,\n attributeFilter: [\"style\", \"class\"]\n });\n\n window.addEventListener(\"scroll\", this.#boundUpdateChanged, true);\n window.addEventListener(\"resize\", this.#boundUpdateChanged);\n\n if (window.visualViewport) {\n window.visualViewport.addEventListener(\"resize\", this.#boundUpdateChanged);\n window.visualViewport.addEventListener(\"scroll\", this.#boundUpdateChanged);\n }\n }\n \n /**\n * Stops all observations and event listeners, resets the change handler,\n * and releases internal observer resources.\n */\n disconnect() {\n // Optional chaining để an toàn với mocks trong môi trường test\n this.#resizeObserver?.disconnect?.();\n this.#mutationObserver?.disconnect?.();\n\n this.onChanged = (metrics) => {};\n window.removeEventListener(\"scroll\", this.#boundUpdateChanged, true);\n window.removeEventListener(\"resize\", this.#boundUpdateChanged);\n\n if (window.visualViewport) {\n window.visualViewport.removeEventListener(\"resize\", this.#boundUpdateChanged);\n window.visualViewport.removeEventListener(\"scroll\", this.#boundUpdateChanged);\n }\n\n this.#resizeObserver = null;\n this.#mutationObserver = null;\n this.element = null;\n }\n}","/**\n * @template TTarget\n * @template {Record<string, Element>} TTags\n * @template {ViewContract<TTags>} TView\n * @implements {ModelContract<TTarget, TView>}\n */\nexport class Model {\n /** @type {TTarget | null} */\n targetElement = null;\n\n options = null;\n\n /** @type {TView | null} */\n view = null;\n\n position = -1;\n\n isInit = false;\n\n /**\n * Returns the current value from the underlying target element's \"value\" attribute.\n * For single-select, this is typically a string; for multi-select, may be an array depending on usage.\n *\n * @type {String|String[]}\n */\n get value() {\n return /** @type {HTMLElement} */ (this.targetElement).getAttribute(\"value\");\n }\n\n /**\n * Constructs a Model instance with configuration options and optional bindings to a target element and view.\n * Stores references for later updates and rendering.\n *\n * @param {object} options - Configuration options for the model.\n * @param {TTarget|null} [targetElement=null] - The underlying element (e.g., <option> or group node).\n * @param {TView|null} [view=null] - The associated view responsible for rendering the model.\n */\n constructor(options, targetElement = null, view = null) {\n this.options = options;\n this.targetElement = targetElement;\n this.view = view;\n }\n\n /**\n * Updates the bound target element reference and invokes the change hook.\n *\n * @param {TTarget|null} targetElement - The new target element to bind to the model.\n */\n update(targetElement) {\n this.targetElement = targetElement;\n this.onTargetChanged();\n }\n\n /**\n * Hook invoked whenever the target element changes.\n * Override in subclasses to react to attribute/content updates (e.g., text, disabled state).\n */\n onTargetChanged() { }\n}\n","\n/**\n * @template {Record<string, Element>} TTags\n * @implements {ViewContract<TTags>}\n */\nexport class View {\n /** @type {Element|null} */\n parent = null;\n\n /**\n * Initializes the view with a parent container element that will host its rendered content.\n *\n * @param {Element} parent - The parent element into which this view will render.\n */\n constructor(parent) {\n this.parent = parent;\n }\n\n /**\n * Renders the view into the parent container.\n * Override in subclasses to create DOM structure and mount tags.\n */\n render() {}\n \n /**\n * Updates the view to reflect model or state changes.\n * Override in subclasses to patch DOM nodes without full re-render.\n */\n update() {}\n\n /** @type {MountViewResult<TTags>} */\n view = null;\n\n /**\n * Returns the root HTMLElement of the mounted view.\n *\n * @returns {HTMLElement} - The root view element.\n */\n getView() {\n return this.view.view;\n }\n\n /**\n * Retrieves a single tagged element from the mounted view.\n *\n * @template {keyof TTags} K\n * @param {K} tag - The tag key corresponding to the desired element.\n * @returns {TTags[K]} - The element associated with the provided tag key.\n */\n getTag(tag) {\n return this.view.tags[tag];\n }\n\n /**\n * Retrieves the full tag map for the mounted view.\n *\n * @returns {TTags} - An object map of all tagged elements.\n */\n getTags() {\n return this.view.tags;\n }\n}\n","import { View } from \"../core/base/view\";\nimport { Libs } from \"../utils/libs\";\n\n/**\n * @extends {View<GroupViewTags>}\n */\nexport class GroupView extends View {\n /** @type {GroupViewResult} */\n view;\n\n /**\n * Renders the group view structure (header + items container), sets ARIA attributes,\n * and appends the root element to the parent container.\n */\n render() {\n const group_id = Libs.randomString(7);\n \n this.view = Libs.mountView({\n GroupView: {\n tag: {\n node: \"div\", \n classList: [\"selective-ui-group\"],\n role: \"group\",\n ariaLabelledby: `seui-${group_id}-header`,\n id: `seui-${group_id}-group`\n },\n child: {\n GroupHeader: {\n tag: {\n node: \"div\", \n classList: [\"selective-ui-group-header\"],\n role: \"presentation\",\n id: `seui-${group_id}-header`\n }\n },\n GroupItems: {\n tag: {\n node: \"div\",\n classList: [\"selective-ui-group-items\"],\n role: \"group\"\n }\n }\n }\n }\n });\n\n this.parent.appendChild(this.view.view);\n }\n\n /**\n * Performs a lightweight refresh of the view (currently updates the header label).\n */\n update() {\n this.updateLabel();\n }\n\n /**\n * Updates the group header text content if a label is provided.\n *\n * @param {string|null} [label=null] - The new label to display; if null, keeps current.\n */\n updateLabel(label = null) {\n const headerEl = this.view.tags.GroupHeader;\n if (label !== null) {\n headerEl.textContent = label;\n }\n }\n\n /**\n * Returns the container element that holds all option/item views in this group.\n *\n * @returns {HTMLDivElement} - The items container element.\n */\n getItemsContainer() {\n return this.view.tags.GroupItems;\n }\n\n /**\n * Toggles the group's visibility based on whether any child item is visible.\n * Hides the entire group when all children are hidden.\n */\n updateVisibility() {\n const items = this.view.tags.GroupItems;\n const visibleItems = Array.from(items.children)\n .filter(child => !child.classList.contains(\"hide\"));\n \n const isVisible = visibleItems.length > 0;\n this.view.view.classList.toggle(\"hide\", !isVisible);\n }\n\n /**\n * Sets the collapsed state on the group and updates ARIA attributes accordingly.\n *\n * @param {boolean} collapsed - True to collapse; false to expand.\n */\n setCollapsed(collapsed) {\n this.view.view.classList.toggle(\"collapsed\", collapsed);\n this.view.tags.GroupHeader.setAttribute(\n \"aria-expanded\", \n collapsed ? \"false\" : \"true\"\n );\n }\n}","\nimport { View } from \"../core/base/view\";\nimport { Libs } from \"../utils/libs\";\n\n/**\n * @extends {View<OptionViewTags>}\n */\nexport class OptionView extends View {\n /** @type {OptionViewResult} */\n view;\n\n isMultiple = false;\n hasImage = false;\n optionConfig = null;\n\n /**\n * Renders the option view DOM structure (input, optional image, label),\n * sets ARIA attributes/IDs, mounts into parent, and applies initial config.\n */\n render() {\n const viewClass = [\"selective-ui-option-view\"];\n const opt_id = Libs.randomString(7);\n const inputID = `option_${opt_id}`;\n\n if (this.isMultiple) {\n viewClass.push(\"multiple\");\n }\n\n if (this.hasImage) {\n viewClass.push(\"has-image\");\n viewClass.push(`image-${this.optionConfig?.imagePosition}`);\n }\n\n const childStructure = {\n OptionInput: {\n tag: {\n node: \"input\",\n type: this.isMultiple ? \"checkbox\" : \"radio\",\n classList: \"allow-choice\",\n id: inputID\n }\n },\n ...(this.hasImage && {\n OptionImage: {\n tag: {\n node: \"img\",\n classList: \"option-image\",\n style: {\n width: this.optionConfig?.imageWidth || \"60px\",\n height: this.optionConfig?.imageHeight || \"60px\",\n borderRadius: this.optionConfig?.imageBorderRadius || \"4px\"\n }\n }\n }\n }),\n OptionLabel: {\n tag: {\n node: \"label\",\n htmlFor: inputID,\n classList: [\n `align-vertical-${this.optionConfig?.labelValign}`,\n `align-horizontal-${this.optionConfig?.labelHalign}`\n ]\n },\n child: {\n LabelContent: { tag: { node: \"div\" } }\n }\n }\n };\n\n this.view = Libs.mountView({\n OptionView: {\n tag: {\n node: \"div\",\n id: `seui-${opt_id}-option`,\n classList: viewClass,\n role: \"option\",\n ariaSelected: \"false\",\n tabIndex: \"-1\"\n },\n child: childStructure\n }\n });\n\n this.parent.appendChild(this.view.view);\n\n this.applyConfigToDOM();\n }\n\n /**\n * Refreshes the option view by reapplying configuration (classes, alignments, image styles).\n */\n update() {\n this.applyConfigToDOM();\n }\n\n /**\n * Applies current configuration to the DOM in a minimal, fast way:\n * - Set root/label classes in a single assignment (less DOM churn),\n * - Ensure input type matches selection mode,\n * - Create/remove image element only when needed, update its styles.\n */\n applyConfigToDOM() {\n const v = this.view;\n if (!v || !v.view) return;\n\n const root = v.view;\n const input = v.tags?.OptionInput;\n const label = v.tags?.OptionLabel;\n const isMultiple = !!this.isMultiple;\n const hasImage = !!this.hasImage;\n const imagePos = this.optionConfig?.imagePosition || 'right';\n const imageWidth = this.optionConfig?.imageWidth || '60px';\n const imageHeight = this.optionConfig?.imageHeight || '60px';\n const imageRadius = this.optionConfig?.imageBorderRadius || '4px';\n const vAlign = this.optionConfig?.labelValign || 'center';\n const hAlign = this.optionConfig?.labelHalign || 'left';\n\n const rootClasses = ['selective-ui-option-view'];\n if (isMultiple) rootClasses.push('multiple');\n if (hasImage) {\n rootClasses.push('has-image', `image-${imagePos}`);\n }\n root.className = rootClasses.join(' ');\n\n if (input) {\n const desiredType = isMultiple ? 'checkbox' : 'radio';\n if (input.type !== desiredType) input.type = desiredType;\n }\n\n if (label) {\n label.className = `align-vertical-${vAlign} align-horizontal-${hAlign}`;\n }\n\n let image = v.tags?.OptionImage;\n if (hasImage) {\n if (!image) {\n image = document.createElement('img');\n image.className = 'option-image';\n if (label && label.parentElement) root.insertBefore(image, label);\n else root.appendChild(image);\n v.tags.OptionImage = image;\n }\n const style = image.style;\n style.width = imageWidth;\n style.height = imageHeight;\n style.borderRadius = imageRadius;\n } else if (image) {\n image.remove();\n v.tags.OptionImage = null;\n }\n }\n}","import { Model } from \"../core/base/model.js\";\nimport { iEvents } from \"../utils/ievents.js\";\nimport { Libs } from \"../utils/libs.js\";\nimport { OptionView } from \"../views/option-view.js\";\n\n/**\n * @extends {Model<HTMLOptionElement, OptionViewTags, OptionView>}\n */\nexport class OptionModel extends Model {\n #privOnSelected = [];\n #privOnInternalSelected = [];\n #privOnVisibilityChanged = [];\n #visible = true;\n #highlighted = false;\n\n /** @type {import('./group-model').GroupModel} */\n group = null\n \n /**\n * Returns the image source from dataset (imgsrc or image), or an empty string if absent.\n *\n * @type {string}\n */\n get imageSrc() {\n return this.dataset?.imgsrc || this.dataset?.image || \"\";\n }\n \n /**\n * Indicates whether this option has an associated image source.\n *\n * @type {boolean}\n */\n get hasImage() {\n return !!this.imageSrc;\n }\n \n /**\n * Gets the option's current value from the underlying <option> element.\n *\n * @type {string}\n */\n get value() {\n return this.targetElement.value;\n }\n \n /**\n * Gets whether the option is currently selected (proxied to the <option> element).\n *\n * @type {boolean}\n */\n get selected() {\n return this.targetElement.selected;\n }\n \n /**\n * Sets the selected state and triggers external selection listeners.\n * Uses selectedNonTrigger internally to update DOM/ARIA without firing external side effects first.\n *\n * @type {boolean}\n */\n set selected(value) {\n this.selectedNonTrigger = value;\n \n iEvents.callEvent([this, value], ...this.#privOnSelected);\n }\n \n /**\n * Gets whether the option is currently visible in the UI.\n *\n * @type {boolean}\n */\n get visible() {\n return this.#visible;\n }\n \n /**\n * Sets the visibility state; toggles \"hide\" class on the view and notifies visibility listeners.\n *\n * @type {boolean}\n */\n set visible(value) {\n if (this.#visible === value) return;\n this.#visible = value;\n \n const view = this.view?.getView();\n if (view) {\n view.classList.toggle(\"hide\", !value);\n }\n\n iEvents.callEvent([this, value], ...this.#privOnVisibilityChanged);\n }\n \n /**\n * Gets the selected state without triggering external listeners (alias of selected).\n *\n * @type {boolean}\n */\n get selectedNonTrigger() {\n return this.selected;\n }\n \n /**\n * Sets the selected state and updates input checked, CSS classes, ARIA attributes,\n * and the underlying <option> 'selected' attribute. Notifies internal selection listeners.\n *\n * @type {boolean}\n */\n set selectedNonTrigger(value) {\n const tag = this.view?.getTag(\"OptionInput\");\n const view = this.view?.getView();\n \n if (tag) {\n tag.checked = value;\n }\n\n if (view) {\n view.classList.toggle(\"checked\", !!value);\n view.setAttribute(\"aria-selected\", value ? \"true\" : \"false\");\n this.targetElement.toggleAttribute(\"selected\", !!value);\n }\n \n this.targetElement.selected = value;\n iEvents.callEvent([this, value], ...this.#privOnInternalSelected);\n }\n \n /**\n * Returns the display text for the option, applying tag translation and optional HTML allowance.\n * If allowHtml=false, returns stripped/sanitized text.\n *\n * @type {string}\n */\n get text() {\n const text = Libs.tagTranslate(this.dataset?.mask ?? this.targetElement.text);\n return this.options.allowHtml ? text : Libs.stripHtml(text);\n }\n \n /**\n * Returns a plain-text version of the display text (trimmed),\n * stripping HTML if allowHtml is true, otherwise the raw text.\n *\n * @type {string}\n */\n get textContent() {\n return this.options.allowHtml ? Libs.stripHtml(this.text).trim() : this.text.trim();\n }\n \n /**\n * Returns the dataset object of the underlying <option> element, or an empty object.\n *\n * @type {DOMStringMap|Record<string, string>}\n */\n get dataset() {\n return this.targetElement.dataset ?? {};\n }\n\n /**\n * Gets whether the option is currently highlighted (e.g., via keyboard navigation).\n *\n * @type {boolean}\n */\n get highlighted() {\n return this.#highlighted;\n }\n \n\n /**\n * Sets the highlighted state and toggles the \"highlight\" CSS class on the view.\n * Always syncs the DOM class even if the state is unchanged.\n *\n * @type {boolean}\n */\n set highlighted(value) {\n const val = !!value;\n const view = this.view?.getView?.();\n\n if (this.#highlighted !== val) {\n this.#highlighted = val;\n }\n\n if (view) {\n view.classList.toggle('highlight', val);\n }\n }\n\n \n /**\n * Registers a listener invoked when external selection changes (via setter `selected`).\n *\n * @param {(evtToken: any, el: OptionModel, selected: boolean) => void} callback - Selection listener.\n */\n onSelected(callback) {\n this.#privOnSelected.push(callback);\n }\n \n /**\n * Registers a listener invoked when internal selection changes (via setter `selectedNonTrigger`).\n *\n * @param {(evtToken: any, el: OptionModel, selected: boolean) => void} callback - Internal selection listener.\n */\n onInternalSelected(callback) {\n this.#privOnInternalSelected.push(callback);\n }\n \n /**\n * Registers a listener invoked when visibility changes (via setter `visible`).\n *\n * @param {(evtToken: any, model: OptionModel, visible: boolean) => void} callback - Visibility listener.\n */\n onVisibilityChanged(callback) {\n this.#privOnVisibilityChanged.push(callback);\n }\n \n /**\n * Hook called when the target <option> element changes.\n * Updates label content (HTML or text), image src/alt if present,\n * and synchronizes initial selected state to the view.\n */\n onTargetChanged() {\n const labelContent = this.view.getTag(\"LabelContent\");\n if (labelContent) {\n if (this.options.allowHtml) {\n labelContent.innerHTML = this.text;\n }\n else {\n labelContent.textContent = this.textContent;\n }\n }\n\n const imageTag = this.view.getTag(\"OptionImage\");\n if (imageTag && this.hasImage) {\n imageTag.src = this.imageSrc;\n imageTag.alt = this.text;\n }\n \n this.selectedNonTrigger = this.targetElement.selected;\n }\n}","import { Model } from \"../core/base/model\";\nimport { iEvents } from \"../utils/ievents\";\nimport { Libs } from \"../utils/libs\";\nimport { GroupView } from \"../views/group-view\";\nimport { OptionModel } from \"./option-model\";\n\n/**\n * @extends {Model<HTMLOptGroupElement, GroupViewTags, GroupView>}\n */\nexport class GroupModel extends Model {\n label = \"\";\n /** @type {OptionModel[]} */\n items = [];\n collapsed = false;\n #privOnCollapsedChanged = [];\n\n /**\n * Initializes a group model with options and an optional <optgroup> target.\n * Reads the label and collapsed state from the target element's attributes/dataset.\n *\n * @param {object} options - Configuration for the model.\n * @param {HTMLOptGroupElement} [targetElement] - The source <optgroup> element.\n */\n constructor(options, targetElement) {\n super(options, targetElement);\n if (targetElement) {\n this.label = targetElement.label;\n this.collapsed = Libs.string2Boolean(targetElement.dataset?.collapsed);\n }\n }\n\n /**\n * Returns the array of values from all option items within the group.\n *\n * @type {String[]}\n */\n get value() {\n return this.items.map(item => item.value);\n }\n\n /**\n * Returns the list of option items currently selected within the group.\n *\n * @type {OptionModel[]}\n */\n get selectedItems() {\n return this.items.filter(item => item.selected);\n }\n\n /**\n * Returns the list of option items currently visible within the group.\n *\n * @type {OptionModel[]}\n */\n get visibleItems() {\n return this.items.filter(item => item.visible);\n }\n\n /**\n * Indicates whether the group has at least one visible option item.\n *\n * @type {boolean}\n */\n get hasVisibleItems() {\n return this.visibleItems.length > 0;\n }\n\n /**\n * Updates the group's label from the new target element and propagates the change to the view.\n *\n * @param {HTMLOptGroupElement} targetElement - The updated <optgroup> element.\n */\n update(targetElement) {\n this.label = targetElement.label;\n if (this.view) {\n this.view.updateLabel(this.label);\n }\n }\n\n /**\n * Hook invoked when the target element reference changes.\n * Updates the view's label and collapsed state to keep UI in sync.\n */\n onTargetChanged() {\n if (this.view) {\n this.view.updateLabel(this.label);\n this.view.setCollapsed(this.collapsed);\n }\n }\n\n /**\n * Registers a callback to be invoked when the group's collapsed state changes.\n *\n * @param {(evtToken: any, model: GroupModel, collapsed: boolean) => void} callback - Listener for collapse changes.\n */\n onCollapsedChanged(callback) {\n this.#privOnCollapsedChanged.push(callback);\n }\n\n /**\n * Toggles the group's collapsed state, updates the view, and notifies registered listeners.\n */\n toggleCollapse() {\n this.collapsed = !this.collapsed;\n if (this.view) {\n this.view.setCollapsed(this.collapsed);\n }\n iEvents.callEvent([this, this.collapsed], ...this.#privOnCollapsedChanged);\n }\n\n /**\n * Adds an option item to this group and sets its back-reference to the group.\n *\n * @param {OptionModel} optionModel - The option to add.\n */\n addItem(optionModel) {\n this.items.push(optionModel);\n optionModel.group = this;\n }\n\n /**\n * Removes an option item from this group and clears its group reference.\n *\n * @param {OptionModel} optionModel - The option to remove.\n */\n removeItem(optionModel) {\n const index = this.items.indexOf(optionModel);\n if (index > -1) {\n this.items.splice(index, 1);\n optionModel.group = null;\n }\n }\n\n /**\n * Updates the group's visibility in the view, typically based on children visibility.\n * No-ops if the view is not initialized.\n */\n updateVisibility() {\n if (this.view) {\n this.view.updateVisibility();\n }\n }\n}","import { Libs } from \"../../utils/libs\";\nimport { Model } from \"./model\";\n\n/**\n * @template {ModelContract<any, any>} TItem\n * @implements {AdapterContract<TItem>}\n */\nexport class Adapter {\n /** @type {TItem[]} */\n items = [];\n adapterKey = Libs.randomString(12);\n\n isSkipEvent = false;\n\n\n /**\n * Initializes the adapter with an optional array of items and invokes onInit()\n * to perform any subclass-specific setup. Accepts a generic list of models.\n *\n * @param {TItem[]} [items=[]] - Initial items to be managed by the adapter.\n */\n constructor(items = []) {\n this.items = items;\n this.onInit();\n }\n\n /**\n * Lifecycle hook called once after construction. Override in subclasses to\n * perform setup tasks (e.g., event wiring, cache building).\n */\n onInit() {}\n\n /**\n * Binds an item model to its viewer at a given position. If the item has not\n * been initialized yet, renders the viewer; otherwise triggers an update.\n *\n * @param {any} item - The model instance to bind to the view.\n * @param {any} viewer - The view instance responsible for rendering the model.\n * @param {number} position - The index of the item within the adapter.\n */\n onViewHolder(item, viewer, position) {\n if (!item.isInit) {\n viewer.render();\n }\n else {\n viewer.update();\n }\n }\n\n /**\n * Registers a pre-change (debounced) callback for a property change pipeline.\n * The callback is scheduled with a minimal delay to batch rapid updates.\n *\n * @param {string} propName - The property name to observe (e.g., \"items\").\n * @param {Function} callback - Function to execute before the property changes.\n */\n onPropChanging(propName, callback) {\n Libs.timerProcess.setExecute(`${propName}ing_${this.adapterKey}`, callback, 1);\n }\n\n /**\n * Registers a post-change callback for a property change pipeline.\n * The callback is executed after the property is updated.\n *\n * @param {string} propName - The property name to observe (e.g., \"items\").\n * @param {Function} callback - Function to execute after the property changes.\n */\n onPropChanged(propName, callback) {\n Libs.timerProcess.setExecute(`${propName}_${this.adapterKey}`, callback);\n }\n\n /**\n * Triggers the post-change pipeline for a given property, passing optional parameters\n * to registered callbacks. Use this after mutating adapter state.\n *\n * @param {string} propName - The property name to emit (e.g., \"items\").\n * @param {...any} params - Parameters forwarded to the callbacks.\n */\n changeProp(propName, ...params) {\n Libs.timerProcess.run(`${propName}_${this.adapterKey}`, ...params);\n }\n\n /**\n * Triggers the pre-change pipeline for a given property, passing optional parameters\n * to registered callbacks. Use this before mutating adapter state.\n *\n * @param {string} propName - The property name to emit (e.g., \"items\").\n * @param {...any} params - Parameters forwarded to the callbacks.\n */\n changingProp(propName, ...params) {\n Libs.timerProcess.run(`${propName}ing_${this.adapterKey}`, ...params);\n }\n\n\n /**\n * Creates and returns a viewer instance for the given item within the specified parent container.\n * Override in subclasses to return a concrete view implementation tailored to TItem.\n *\n * @param {HTMLElement} parent - The container element that will host the viewer.\n * @param {TItem} item - The model instance for which the viewer is created.\n * @returns {any} - The created viewer instance; null by default.\n */\n viewHolder(parent, item) {\n return null;\n }\n\n /**\n * Returns the total number of items currently managed by the adapter.\n *\n * @returns {number} - The item count.\n */\n itemCount() {\n return this.items.length;\n }\n\n /**\n * Replaces the adapter's items with a new collection, emitting pre-change and post-change\n * notifications to observers. Does not render; call updateRecyclerView() to apply to the DOM.\n *\n * @param {TItem[]} items - The new list of items to set.\n */\n setItems(items) {\n this.changingProp(\"items\", items);\n this.items = items;\n this.changeProp(\"items\", items);\n }\n\n /**\n * Synchronizes adapter items from an external source by delegating to setItems().\n * Useful for keeping adapter state aligned with another data store.\n *\n * @param {TItem[]} items - The source list of items to synchronize.\n */\n syncFromSource(items) {\n this.setItems(items);\n }\n\n /**\n * Iterates through all items and ensures each has a viewer. For new items, calls viewHolder()\n * to create the viewer, then binds via onViewHolder() and marks the item as initialized.\n *\n * @param {HTMLElement|null} parent - The container element in which item viewers are rendered.\n */\n updateRecyclerView(parent) {\n for (let index = 0; index < this.itemCount(); index++) {\n let viewer = this.items[index].view;\n if (!this.items[index].isInit) {\n viewer = this.viewHolder(parent, this.items[index]);\n }\n this.onViewHolder(this.items[index], viewer, index);\n\n this.items[index].isInit = true;\n }\n }\n\n /**\n * Updates adapter data without performing any default actions.\n * Override in subclasses to implement custom data refresh logic.\n *\n * @param {TItem[]} items - The incoming data to apply to the adapter.\n */\n updateData(items) { }\n}","import { GroupModel } from \"../models/group-model\";\nimport { OptionModel } from \"../models/option-model\";\nimport { Adapter } from \"./base/adapter\";\n\n/**\n * @template {ModelContract<any, any>} TModel\n * @template {Adapter} TAdapter\n */\nexport class ModelManager {\n /** @type {Array<GroupModel|OptionModel>} */\n #privModelList = [];\n\n /** @type {new (...args: any[]) => TAdapter} */\n #privAdapter;\n\n /** @type {TAdapter} */\n #privAdapterHandle;\n\n /** @type {new (...args: any[]) => RecyclerViewContract<TAdapter>} */\n #privRecyclerView;\n\n /** @type {RecyclerViewContract<TAdapter>} */\n #privRecyclerViewHandle;\n\n options = null;\n \n /**\n * Constructs a ModelManager with configuration options used by created models and components.\n *\n * @param {object} options - Configuration object passed to GroupModel/OptionModel and view infrastructure.\n */\n constructor(options) {\n this.options = options;\n }\n\n /**\n * Registers the adapter class to be used for rendering and managing models.\n *\n * @param {new (...args: any[]) => TAdapter} adapter - The adapter constructor (class) to instantiate.\n */\n setupAdapter(adapter) {\n this.#privAdapter = adapter;\n }\n\n /**\n * Registers the RecyclerView class responsible for hosting and updating item views.\n *\n * @param {new (...args: any[]) => RecyclerViewContract<TAdapter>} recyclerView - The recycler view constructor.\n */\n setupRecyclerView(recyclerView) {\n this.#privRecyclerView = recyclerView;\n }\n\n /**\n * Builds model instances (GroupModel/OptionModel) from raw <optgroup>/<option> elements.\n * Preserves grouping relationships and returns the structured list.\n *\n * @param {Array<HTMLOptGroupElement|HTMLOptionElement>} modelData - Parsed DOM elements from the source <select>.\n * @returns {Array<GroupModel|OptionModel>} - The ordered list of group and option models.\n */\n createModelResources(modelData) {\n this.#privModelList = [];\n let currentGroup = null;\n \n modelData.forEach(data => {\n if (data.tagName === \"OPTGROUP\") {\n currentGroup = new GroupModel(this.options, data);\n this.#privModelList.push(currentGroup);\n } \n else if (data.tagName === \"OPTION\") {\n const optionModel = new OptionModel(this.options, /** @type {HTMLOptionElement} */ (data));\n \n if (data[\"__parentGroup\"] && currentGroup && \n data[\"__parentGroup\"] === currentGroup.targetElement) {\n currentGroup.addItem(optionModel);\n optionModel.group = currentGroup;\n } else {\n this.#privModelList.push(optionModel);\n currentGroup = null;\n }\n }\n });\n\n return this.#privModelList;\n }\n\n /**\n * Replaces the current model list with new data and syncs it into the adapter,\n * then refreshes the view to reflect changes.\n *\n * @param {Array<HTMLOptGroupElement|HTMLOptionElement>} modelData - New source elements to rebuild models from.\n */\n replace(modelData) {\n this.createModelResources(modelData);\n\n if (this.#privAdapterHandle) {\n this.#privAdapterHandle.syncFromSource(this.#privModelList);\n }\n\n this.refresh();\n }\n\n /**\n * Requests a view refresh if an adapter has been initialized,\n * typically used after external updates to model data.\n */\n notify() {\n if (!this.#privAdapterHandle) return;\n \n this.refresh();\n }\n\n /**\n * Initializes adapter and recycler view instances, attaches them to a container element,\n * and applies optional configuration overrides for adapter and recyclerView.\n *\n * @param {HTMLElement} viewElement - The container element where items will be rendered.\n * @param {object} [adapterOpt={}] - Optional properties to merge into the adapter instance.\n * @param {object} [recyclerViewOpt={}] - Optional properties to merge into the recycler view instance.\n */\n load(viewElement, adapterOpt = {}, recyclerViewOpt = {}) {\n this.#privAdapterHandle = new this.#privAdapter(this.#privModelList);\n Object.assign(this.#privAdapterHandle, adapterOpt);\n\n this.#privRecyclerViewHandle = new this.#privRecyclerView(viewElement);\n this.#privRecyclerViewHandle.setAdapter(this.#privAdapterHandle);\n Object.assign(this.#privRecyclerViewHandle, recyclerViewOpt);\n }\n\n /**\n * Diffs existing models against new <optgroup>/<option> data to update in place:\n * reuses existing models when possible, updates positions and group membership,\n * removes stale views, and notifies adapter and listeners about updates.\n *\n * @param {Array<HTMLOptGroupElement|HTMLOptionElement>} modelData - Fresh DOM elements reflecting the latest state.\n */\n update(modelData) {\n const oldModels = this.#privModelList;\n const newModels = [];\n \n const oldGroupMap = new Map();\n const oldOptionMap = new Map();\n \n oldModels.forEach(model => {\n if (model instanceof GroupModel) {\n oldGroupMap.set(model.label, model);\n } else if (model instanceof OptionModel) {\n oldOptionMap.set(model.value, model);\n }\n });\n\n let currentGroup = null;\n let position = 0;\n\n modelData.forEach((data, index) => {\n if (data.tagName === \"OPTGROUP\") {\n let dataVset = /** @type {HTMLOptGroupElement} */ (data);\n const existingGroup = oldGroupMap.get(dataVset.label);\n \n if (existingGroup) {\n existingGroup.update(dataVset);\n existingGroup.position = position;\n existingGroup.items = [];\n currentGroup = existingGroup;\n newModels.push(existingGroup);\n oldGroupMap.delete(dataVset.label);\n } else {\n currentGroup = new GroupModel(this.options, dataVset);\n currentGroup.position = position;\n newModels.push(currentGroup);\n }\n position++;\n }\n else if (data.tagName === \"OPTION\") {\n let dataVset = /** @type {HTMLOptionElement} */ (data);\n const existingOption = oldOptionMap.get(dataVset.value);\n \n if (existingOption) {\n existingOption.update(dataVset);\n existingOption.position = position;\n \n if (dataVset[\"__parentGroup\"] && currentGroup) {\n currentGroup.addItem(existingOption);\n existingOption.group = currentGroup;\n } else {\n existingOption.group = null;\n newModels.push(existingOption);\n }\n \n oldOptionMap.delete(dataVset.value);\n } else {\n const newOption = new OptionModel(this.options, dataVset);\n newOption.position = position;\n \n if (dataVset[\"__parentGroup\"] && currentGroup) {\n currentGroup.addItem(newOption);\n newOption.group = currentGroup;\n } else {\n newModels.push(newOption);\n }\n }\n position++;\n }\n });\n\n oldGroupMap.forEach(removedGroup => {\n if (removedGroup.view) {\n removedGroup.view.getView()?.remove();\n }\n });\n \n oldOptionMap.forEach(removedOption => {\n if (removedOption.view) {\n removedOption.view.getView()?.remove();\n }\n });\n\n this.#privModelList = newModels;\n \n if (this.#privAdapterHandle) {\n this.#privAdapterHandle.updateData(this.#privModelList);\n }\n\n this.onUpdated();\n this.refresh();\n }\n\n /**\n * Hook invoked after the manager completes an update or refresh cycle.\n * Override to run side effects (e.g., layout adjustments or analytics).\n */\n onUpdated() { }\n\n /**\n * Instructs the adapter to temporarily skip event handling (e.g., during batch updates).\n *\n * @param {boolean} value - True to skip events; false to restore normal behavior.\n */\n skipEvent(value) {\n this.#privAdapterHandle.isSkipEvent = value;\n }\n\n /**\n * Re-renders the recycler view if present and invokes the post-refresh hook.\n * No-op if the recycler view is not initialized.\n */\n refresh() {\n if (!this.#privRecyclerViewHandle) return;\n this.#privRecyclerViewHandle.refresh();\n this.onUpdated();\n }\n\n /**\n * Returns handles to the current resources, including the model list,\n * adapter instance, and recycler view instance.\n *\n * @returns {{modelList: (GroupModel|OptionModel)[], adapter: TAdapter, recyclerView: RecyclerViewContract<TAdapter>}}\n */\n getResources() {\n return {\n modelList: this.#privModelList,\n adapter: this.#privAdapterHandle,\n recyclerView: this.#privRecyclerViewHandle\n };\n }\n\n /**\n * Triggers the adapter's pre-change pipeline for a named event,\n * enabling observers to react before a change is applied.\n *\n * @param {string} event_name - The event or property name (e.g., \"items\", \"select\").\n */\n triggerChanging(event_name) {\n this.#privAdapterHandle.changingProp(event_name);\n }\n\n /**\n * Triggers the adapter's post-change pipeline for a named event,\n * notifying observers after a change has been applied.\n *\n * @param {string} event_name - The event or property name (e.g., \"items\", \"select\").\n */\n triggerChanged(event_name) {\n this.#privAdapterHandle.changeProp(event_name);\n }\n}\n","import {Libs} from \"../utils/libs.js\";\n\n/**\n * @class\n */\nexport class EmptyState {\n /**\n * @type {HTMLDivElement}\n */\n node = null;\n\n options = null;\n\n /**\n * Represents an empty state component that displays a message when no data or search results are available.\n * Provides methods to show/hide the state and check its visibility.\n */\n constructor(options = null) {\n options && this.init(options);\n }\n\n /**\n * Initializes the empty state element with ARIA attributes for accessibility and stores configuration options.\n *\n * @param {object} options - Configuration object containing text for \"no data\" and \"not found\" states.\n */\n init(options) {\n this.options = options;\n \n this.node = /** @type {HTMLDivElement} */ (Libs.nodeCreator({\n node: \"div\",\n classList: [\"selective-ui-empty-state\", \"hide\"],\n role: \"status\",\n ariaLive: \"polite\"\n }));\n }\n\n /**\n * Displays the empty state message based on the provided type.\n *\n * @param {\"notfound\" | \"nodata\"} [type=\"nodata\"] - Determines which message to show:\n * \"notfound\" for search results not found, \"nodata\" for no available data.\n */\n show(type = \"nodata\") {\n const text = type === \"notfound\" \n ? this.options.textNotFound \n : this.options.textNoData;\n \n this.node.textContent = text;\n this.node.classList.remove(\"hide\");\n }\n\n /**\n * Hides the empty state element by adding the \"hide\" class.\n */\n hide() {\n this.node.classList.add(\"hide\");\n }\n\n /**\n * Indicates whether the empty state is currently visible.\n *\n * @returns {boolean} - True if visible, false otherwise.\n */\n get isVisible() {\n return !this.node.classList.contains(\"hide\");\n }\n}","import { Libs } from \"../utils/libs\";\n\nexport class LoadingState {\n\n /** @type {HTMLDivElement} */\n node = null;\n \n options = null;\n\n /**\n * Represents a loading state component that displays a loading message during data fetch or processing.\n * Provides methods to show/hide the state and check its visibility.\n */\n constructor(options = null) { \n options && this.init(options); \n }\n \n /**\n * Initializes the loading state element with ARIA attributes for accessibility and stores configuration options.\n *\n * @param {object} options - Configuration object containing text for the loading message.\n */\n init(options) {\n this.options = options;\n this.node = /** @type {HTMLDivElement} */(Libs.nodeCreator({\n node: \"div\",\n classList: [\"selective-ui-loading-state\", \"hide\"],\n textContent: options.textLoading,\n role: \"status\",\n ariaLive: \"polite\"\n }));\n }\n\n /**\n * Displays the loading state message and adjusts its size based on whether items are present.\n *\n * @param {boolean} hasItems - If true, applies a \"small\" style for compact display.\n */\n show(hasItems) {\n this.node.textContent = this.options.textLoading;\n this.node.classList.toggle(\"small\", hasItems);\n this.node.classList.remove(\"hide\");\n }\n\n /**\n * Hides the loading state element by adding the \"hide\" class.\n */\n hide() {\n this.node.classList.add(\"hide\");\n }\n\n /**\n * Indicates whether the loading state is currently visible.\n *\n * @returns {boolean} - True if visible, false otherwise.\n */\n get isVisible() {\n return !this.node.classList.contains(\"hide\");\n }\n}","import { Adapter } from \"../core/base/adapter\";\nimport { GroupModel } from \"../models/group-model\";\nimport { OptionModel } from \"../models/option-model\";\nimport { GroupView } from \"../views/group-view\";\nimport { OptionView } from \"../views/option-view\";\n\n/**\n * @extends {Adapter<GroupModel|OptionModel>}\n */\nexport class MixedAdapter extends Adapter {\n isMultiple = false;\n #visibilityChangedCallbacks = [];\n #currentHighlightIndex = -1;\n /** @type {OptionModel} */\n #selectedItemSingle = null;\n\n /** @type {GroupModel[]} */\n groups = [];\n\n /** @type {OptionModel[]} */\n flatOptions = [];\n\n constructor(items = []) {\n super(items);\n this.#buildFlatStructure();\n }\n\n /**\n * Build flat list of all options for navigation\n */\n #buildFlatStructure() {\n this.flatOptions = [];\n this.groups = [];\n\n this.items.forEach(item => {\n if (item instanceof GroupModel) {\n this.groups.push(item);\n this.flatOptions.push(...item.items);\n } else if (item instanceof OptionModel) {\n this.flatOptions.push(item);\n }\n });\n }\n\n /**\n * Creates and returns the appropriate view instance for the given item type.\n *\n * @param {HTMLElement} parent - The parent container element where the view will be attached.\n * @param {GroupModel|OptionModel} item - The data model representing either a group or an option.\n * @returns {GroupView|OptionView} - A new view instance corresponding to the item type.\n */\n viewHolder(parent, item) {\n if (item instanceof GroupModel) {\n return new GroupView(parent);\n } else {\n return new OptionView(parent);\n }\n }\n \n /**\n * Binds a data model (GroupModel or OptionModel) to its corresponding view\n * and delegates rendering logic based on the type of item.\n *\n * @param {GroupModel|OptionModel} item - The data model representing either a group or an option.\n * @param {GroupView|OptionView} viewer - The view instance that displays the item in the UI.\n * @param {number} position - The position (index) of the item within its parent list.\n */\n onViewHolder(item, viewer, position) {\n item.position = position;\n \n if (item instanceof GroupModel) {\n this.#handleGroupView(item, /** @type {GroupView} */ (viewer), position);\n } else if (item instanceof OptionModel) {\n this.#handleOptionView(item, /** @type {OptionView} */ (viewer), position);\n }\n\n item.isInit = true;\n }\n \n /**\n * Handles binding and rendering logic for a group view, including header behavior,\n * collapse/expand state, and initialization of option items.\n *\n * @param {GroupModel} groupModel - The data model representing the group and its items.\n * @param {GroupView} groupView - The view instance that renders the group in the UI.\n * @param {number} position - The position (index) of the group within a list.\n */\n #handleGroupView(groupModel, groupView, position) {\n super.onViewHolder(groupModel, groupView, position);\n groupModel.view = groupView;\n\n const header = groupView.getTag(\"GroupHeader\");\n header.textContent = groupModel.label;\n\n if (!groupModel.isInit) {\n header.style.cursor = \"pointer\";\n header.addEventListener(\"click\", () => {\n groupModel.toggleCollapse();\n });\n\n groupModel.onCollapsedChanged((evtToken, model, collapsed) => {\n model.items.forEach(optItem => {\n const optView = optItem.view?.getView();\n if (optView) {\n optView.style.display = collapsed ? \"none\" : \"\";\n }\n });\n this.onCollapsedChange(model, collapsed);\n });\n }\n\n const itemsContainer = groupView.getItemsContainer();\n groupModel.items.forEach((optionModel, idx) => {\n let optionViewer = optionModel.view;\n if (!optionModel.isInit) {\n optionViewer = new OptionView(itemsContainer);\n }\n this.#handleOptionView(optionModel, optionViewer, idx);\n optionModel.isInit = true;\n });\n\n groupView.setCollapsed(groupModel.collapsed);\n groupView.updateVisibility();\n }\n\n /**\n * Handles binding and rendering logic for an option item, including image setup,\n * label rendering, event wiring, and selection state synchronization.\n *\n * @param {OptionModel} optionModel - The data model representing a single option.\n * @param {OptionView} optionViewer - The view instance that renders the option in the UI.\n * @param {number} position - The index of this option within its group's item list.\n */\n #handleOptionView(optionModel, optionViewer, position) {\n optionViewer.isMultiple = this.isMultiple;\n optionViewer.hasImage = optionModel.hasImage;\n optionViewer.optionConfig = {\n imageWidth: optionModel.options.imageWidth,\n imageHeight: optionModel.options.imageHeight,\n imageBorderRadius: optionModel.options.imageBorderRadius,\n imagePosition: optionModel.options.imagePosition,\n labelValign: optionModel.options.labelValign,\n labelHalign: optionModel.options.labelHalign\n };\n\n if (!optionModel.isInit) {\n super.onViewHolder(optionModel, optionViewer, position);\n } else {\n optionViewer.update();\n }\n\n optionModel.view = optionViewer;\n\n if (optionModel.hasImage) {\n const imageTag = optionViewer.getTag(\"OptionImage\");\n if (imageTag) {\n imageTag.src = optionModel.imageSrc;\n imageTag.alt = optionModel.text;\n }\n }\n\n optionViewer.getTag(\"LabelContent\").innerHTML = optionModel.text;\n\n if (!optionModel.isInit) {\n optionViewer.getTag(\"OptionView\").addEventListener(\"click\", (ev) => {\n ev.stopPropagation();\n ev.preventDefault();\n\n if (this.isSkipEvent) return;\n\n if (this.isMultiple) {\n this.changingProp(\"select\");\n setTimeout(() => {\n optionModel.selected = !optionModel.selected;\n }, 5);\n } else if (optionModel.selected !== true) {\n this.changingProp(\"select\");\n setTimeout(() => {\n if (this.#selectedItemSingle) {\n this.#selectedItemSingle.selected = false;\n }\n optionModel.selected = true;\n }, 5);\n }\n });\n\n optionViewer.getTag(\"OptionView\").title = optionModel.textContent;\n\n optionViewer.getTag(\"OptionView\").addEventListener(\"mouseenter\", () => {\n if (this.isSkipEvent) return;\n this.setHighlight(this.flatOptions.indexOf(optionModel), false);\n });\n\n optionModel.onSelected((evtToken, el, selected) => {\n this.changeProp(\"selected\");\n });\n\n optionModel.onInternalSelected((evtToken, el, selected) => {\n if (selected) {\n this.#selectedItemSingle = optionModel;\n }\n this.changeProp(\"selected_internal\");\n });\n\n optionModel.onVisibilityChanged((evtToken, model, visible) => {\n if (model.group) {\n model.group.updateVisibility();\n }\n this.#notifyVisibilityChanged();\n });\n }\n\n if (optionModel.selected) {\n this.#selectedItemSingle = optionModel;\n optionModel.selectedNonTrigger = true;\n }\n }\n \n /**\n * Updates the list of items in the component and rebuilds its internal flat structure.\n *\n * @param {Array<GroupModel|OptionModel>} items - The new collection of items to be displayed.\n */\n setItems(items) {\n this.changingProp(\"items\", items);\n this.items = items;\n this.#buildFlatStructure();\n this.changeProp(\"items\", items);\n }\n \n /**\n * Synchronizes the component's items from an external source by delegating to setItems().\n *\n * @param {Array<GroupModel|OptionModel>} items - The new collection of items to sync.\n */\n syncFromSource(items) {\n this.setItems(items);\n }\n \n /**\n * Updates the component's data items and rebuilds the internal flat structure\n * without triggering change notifications.\n *\n * @param {Array<GroupModel|OptionModel>} items - The new collection of items to update.\n */\n updateData(items) {\n this.items = items;\n this.#buildFlatStructure();\n }\n \n /**\n * Returns all option items that are currently selected.\n *\n * @returns {OptionModel[]} - An array of selected option items from the flat list.\n */\n getSelectedItems() {\n return this.flatOptions.filter(item => item.selected);\n }\n\n /**\n * Returns the first selected option item, if any.\n *\n * @returns {OptionModel|undefined} - The first selected option or undefined if none are selected.\n */\n getSelectedItem() {\n return this.flatOptions.find(item => item.selected);\n }\n\n /**\n * Checks or unchecks all options when in multiple selection mode.\n *\n * @param {boolean} isChecked - If true, select all; if false, deselect all.\n */\n checkAll(isChecked) {\n if (this.isMultiple) {\n this.flatOptions.forEach(item => {\n item.selected = isChecked;\n });\n }\n }\n\n /**\n * Subscribes a callback to visibility changes across options.\n *\n * @param {(stats: {visibleCount:number,totalCount:number,hasVisible:boolean,isEmpty:boolean}) => void} callback\n * - Function to invoke when visibility stats change.\n */\n onVisibilityChanged(callback) {\n this.#visibilityChangedCallbacks.push(callback);\n }\n\n /**\n * Notifies all registered visibility-change callbacks with up-to-date statistics.\n * Computes visible and total counts, then emits aggregated state.\n */\n #notifyVisibilityChanged() {\n const visibleCount = this.flatOptions.filter(item => item.visible).length;\n const totalCount = this.flatOptions.length;\n\n this.#visibilityChangedCallbacks.forEach(callback => {\n callback({\n visibleCount,\n totalCount,\n hasVisible: visibleCount > 0,\n isEmpty: totalCount === 0\n });\n });\n }\n\n /**\n * Computes and returns current visibility statistics for options.\n *\n * @returns {{visibleCount:number,totalCount:number,hasVisible:boolean,isEmpty:boolean}}\n * - Aggregated visibility information.\n */\n getVisibilityStats() {\n const visibleCount = this.flatOptions.filter(item => item.visible).length;\n const totalCount = this.flatOptions.length;\n\n return {\n visibleCount,\n totalCount,\n hasVisible: visibleCount > 0,\n isEmpty: totalCount === 0\n };\n }\n\n /**\n * Resets the highlight to the first visible option (index 0).\n */\n resetHighlight() {\n this.setHighlight(0);\n }\n\n /**\n * Moves the highlight forward/backward among visible options and optionally scrolls into view.\n *\n * @param {number} direction - Increment (+1) or decrement (-1) of the current visible index.\n * @param {boolean} [isScrollToView=true] - Whether to scroll the highlighted item into view.\n */\n navigate(direction, isScrollToView = true) {\n const visibleOptions = this.flatOptions.filter(opt => opt.visible);\n if (visibleOptions.length === 0) return;\n\n let currentVisibleIndex = visibleOptions.findIndex(\n opt => opt === this.flatOptions[this.#currentHighlightIndex]\n );\n\n if (currentVisibleIndex === -1) currentVisibleIndex = -1;\n\n let nextVisibleIndex = currentVisibleIndex + direction;\n\n if (nextVisibleIndex >= visibleOptions.length) nextVisibleIndex = 0;\n if (nextVisibleIndex < 0) nextVisibleIndex = visibleOptions.length - 1;\n\n const nextOption = visibleOptions[nextVisibleIndex];\n const flatIndex = this.flatOptions.indexOf(nextOption);\n\n this.setHighlight(flatIndex, isScrollToView);\n }\n\n /**\n * Triggers a click on the currently highlighted and visible option to select it.\n * No-op if nothing is highlighted or the highlighted item is not visible.\n */\n selectHighlighted() {\n if (this.#currentHighlightIndex > -1 && this.flatOptions[this.#currentHighlightIndex]) {\n const item = this.flatOptions[this.#currentHighlightIndex];\n if (item.visible) {\n const viewEl = item.view?.getView();\n if (viewEl) viewEl.click();\n }\n }\n }\n\n /**\n * Highlights a target option by flat index or model instance, skipping invisible items,\n * and optionally scrolls the highlighted element into view.\n *\n * @param {number|OptionModel} target - Flat index or the specific OptionModel to highlight.\n * @param {boolean} [isScrollToView=true] - Whether to scroll the highlighted item into view.\n */\n setHighlight(target, isScrollToView = true) {\n let index = 0;\n if (typeof target === \"number\") {\n index = target;\n } else if (target instanceof OptionModel) {\n const fi = this.flatOptions.indexOf(target);\n index = fi > -1 ? fi : 0;\n } else {\n index = 0;\n }\n \n if (this.#currentHighlightIndex > -1 && this.flatOptions[this.#currentHighlightIndex]) {\n this.flatOptions[this.#currentHighlightIndex].highlighted = false;\n }\n\n for (let i = index; i < this.flatOptions.length; i++) {\n const item = this.flatOptions[i];\n if (item.visible) {\n item.highlighted = true;\n this.#currentHighlightIndex = i;\n\n if (isScrollToView) {\n const el = item.view?.getView();\n if (el) {\n el.scrollIntoView({ block: \"center\", behavior: \"smooth\" });\n }\n }\n\n this.onHighlightChange(i, item.view?.getView()?.id);\n return;\n }\n }\n }\n\n /**\n * Hook invoked whenever the highlight changes.\n * Override to handle UI side effects (e.g., ARIA announcement, focus sync).\n *\n * @param {number} index - The flat index of the newly highlighted item.\n * @param {string|undefined} id - The DOM id of the highlighted item's view, if available.\n */\n onHighlightChange(index, id) {}\n\n \n /**\n * Hook invoked when a group's collapsed state changes.\n * Override to handle side effects like analytics or layout adjustments.\n *\n * @param {GroupModel} model - The group whose collapsed state changed.\n * @param {boolean} collapsed - The new collapsed state.\n */\n onCollapsedChange(model, collapsed) {}\n}","import { Libs } from \"../utils/libs.js\";\nimport { OptionHandle } from \"./option-handle.js\";\nimport { ResizeObserverService } from \"../services/resize-observer.js\"\nimport { ModelManager } from \"../core/model-manager.js\";\nimport { OptionModel } from \"../models/option-model.js\";\nimport { EmptyState } from \"./empty-state.js\";\nimport { LoadingState } from \"./loading-state.js\";\nimport { MixedAdapter } from \"../adapter/mixed-adapter.js\";\n\n/**\n * @class\n */\nexport class Popup {\n /** @type {ModelManager<OptionModel, MixedAdapter>} */\n #modelManager;\n\n /**\n * Represents a popup component that manages rendering and interaction for a dropdown panel.\n * Stores a reference to the ModelManager for handling option models and adapter logic.\n *\n * @param {HTMLSelectElement|null} [select=null] - The source select element to bind.\n * @param {object|null} [options=null] - Configuration options for the popup.\n * @param {ModelManager|null} [modelManager=null] - The model manager instance for data handling.\n */\n constructor(select = null, options = null, modelManager = null) {\n this.#modelManager = modelManager;\n if (select && options) {\n this.init(select, options);\n }\n }\n\n options = null;\n isCreated = false;\n\n /**\n * @type {MixedAdapter}\n */\n optionAdapter = null;\n \n /**\n * @type {HTMLDivElement}\n */\n node = null;\n\n /**\n * @type {EffectorInterface}\n */\n #effSvc = null;\n\n /**\n * @type {ResizeObserverService}\n */\n #resizeObser;\n\n #parent = null;\n\n /**\n * @type {OptionHandle}\n */\n optionHandle = null;\n\n /**\n * @type {EmptyState}\n */\n emptyState = null;\n\n /**\n * @type {LoadingState}\n */\n loadingState = null;\n\n /**\n * @type {RecyclerViewContract<MixedAdapter>}\n */\n recyclerView = null;\n\n /**\n * @type {HTMLDivElement}\n */\n #optionsContainer = null;\n\n #scrollListener = null;\n\n /**\n * @type {NodeJS.Timeout}\n */\n #hideLoadHandle = null;\n \n /**\n * Initializes the popup UI: creates DOM structure, wires OptionHandle, LoadingState, and EmptyState,\n * binds ModelManager resources (adapter/recyclerView), and sets up empty-state logic.\n *\n * @param {HTMLSelectElement} select - The source select element to bind.\n * @param {object} options - Configuration for panel, IDs, multiple mode, and texts.\n */\n init(select, options) {\n this.optionHandle = new OptionHandle(options);\n this.emptyState = new EmptyState(options);\n this.loadingState = new LoadingState(options);\n \n const nodeMounted = Libs.mountNode({\n PopupContainer: {\n tag: {node: \"div\", classList: \"selective-ui-popup\", style: {maxHeight: options.panelHeight}},\n child: {\n OptionHandle: {\n tag: this.optionHandle.node\n },\n OptionsContainer: {\n tag: {id: options.SEID_LIST, node: \"div\", classList: \"selective-ui-options-container\", role: \"listbox\"}\n },\n LoadingState: {\n tag: this.loadingState.node\n },\n EmptyState: {\n tag: this.emptyState.node\n }\n }\n }\n });\n \n this.node = nodeMounted.view;\n this.#optionsContainer = nodeMounted.tags.OptionsContainer;\n this.#parent = Libs.getBinderMap(select);\n this.options = options;\n \n this.#modelManager.load(this.#optionsContainer, {isMultiple: options.multiple});\n const MMResources = this.#modelManager.getResources();\n this.optionAdapter = MMResources.adapter;\n this.recyclerView = MMResources.recyclerView;\n\n this.optionHandle.OnSelectAll(() => {\n MMResources.adapter.checkAll(true);\n });\n this.optionHandle.OnDeSelectAll(() => {\n MMResources.adapter.checkAll(false);\n });\n\n this.#setupEmptyStateLogic();\n }\n\n /**\n * Shows the loading state and temporarily skips model events.\n * Adjusts size based on current visibility stats and triggers a resize.\n */\n async showLoading() {\n clearTimeout(this.#hideLoadHandle);\n\n this.#modelManager.skipEvent(true);\n if (Libs.string2Boolean(this.options.loadingfield) === false) return;\n this.loadingState.show(this.optionAdapter.getVisibilityStats().hasVisible);\n // this.#optionsContainer.classList.add(\"hide\");\n this.optionHandle.hide();\n this.triggerResize();\n }\n\n /**\n * Hides the loading state after a short delay, restores event handling,\n * updates empty state based on adapter visibility stats, and triggers a resize.\n */\n async hideLoading() {\n clearTimeout(this.#hideLoadHandle);\n\n this.#hideLoadHandle = setTimeout(() => {\n this.#modelManager.skipEvent(false);\n this.loadingState.hide();\n \n const stats = this.optionAdapter.getVisibilityStats();\n this.#updateEmptyState(stats);\n \n this.triggerResize();\n }, 200);\n }\n\n /**\n * Subscribes to adapter visibility and item changes to keep the empty state in sync.\n * Triggers resize when items change to reflect layout updates.\n */\n #setupEmptyStateLogic() {\n this.optionAdapter.onVisibilityChanged((stats) => {\n this.#updateEmptyState(stats);\n });\n \n this.optionAdapter.onPropChanged(\"items\", () => {\n const stats = this.optionAdapter.getVisibilityStats();\n this.#updateEmptyState(stats);\n\n this.triggerResize();\n });\n }\n\n /**\n * Updates the empty state and option container visibility based on aggregated stats.\n * Shows \"no data\" when empty, \"not found\" when no visible items, otherwise shows options and handle.\n *\n * @param {{visibleCount:number,totalCount:number,hasVisible:boolean,isEmpty:boolean}|undefined} stats - Visibility stats; computed if omitted.\n */\n #updateEmptyState(stats = null) {\n if (!stats) {\n stats = this.optionAdapter.getVisibilityStats();\n }\n\n if (stats?.isEmpty) {\n this.emptyState.show(\"nodata\");\n this.#optionsContainer.classList.add(\"hide\");\n this.optionHandle.hide();\n } else if (stats && !stats.hasVisible) {\n this.emptyState.show(\"notfound\");\n this.#optionsContainer.classList.add(\"hide\");\n this.optionHandle.hide();\n } else {\n this.emptyState.hide();\n this.#optionsContainer.classList.remove(\"hide\");\n this.optionHandle.refresh();\n }\n }\n\n /**\n * Registers a callback for adapter property pre-change notifications.\n *\n * @param {string} propName - The adapter property to observe.\n * @param {Function} callback - Invoked before the property changes.\n */\n onAdapterPropChanging(propName, callback) {\n this.optionAdapter.onPropChanging(propName, callback);\n }\n\n /**\n * Registers a callback for adapter property post-change notifications.\n *\n * @param {string} propName - The adapter property to observe.\n * @param {Function} callback - Invoked after the property changes.\n */\n onAdapterPropChanged(propName, callback) {\n this.optionAdapter.onPropChanged(propName, callback);\n }\n\n /**\n * Injects an effector service used to perform side effects (e.g., animations or external actions).\n *\n * @param {EffectorInterface} effectorSvc - The effector service instance.\n */\n setupEffector(effectorSvc) {\n this.#effSvc = effectorSvc;\n }\n\n /**\n * Opens the popup: creates and attaches DOM if needed, initializes observers and effector,\n * computes position and dimensions, and runs expand animation. Invokes callback on completion.\n *\n * @param {Function|null} [callback=null] - Function to call after the popup finishes expanding.\n */\n open(callback = null) {\n if (!this.isCreated) {\n document.body.appendChild(this.node);\n this.isCreated = true;\n\n this.#resizeObser = new ResizeObserverService();\n this.#effSvc.setElement(this.node);\n\n this.node.addEventListener(\"mousedown\", (e) => {\n e.stopPropagation();\n e.preventDefault();\n });\n }\n\n this.optionHandle.refresh();\n this.#updateEmptyState();\n \n const location = this.#getParentLocation();\n const {position, top, maxHeight, realHeight} = this.#calculatePosition(location);\n \n this.#effSvc.expand({\n duration: this.options.animationtime,\n display: \"flex\",\n width: location.width,\n left: location.left,\n top: top,\n maxHeight: maxHeight,\n realHeight: realHeight,\n position: position,\n onComplete: () => {\n this.#resizeObser.onChanged = (newLocation) => this.#handleResize(newLocation);\n this.#resizeObser.connect(this.#parent.container.tags.ViewPanel);\n callback && callback();\n }\n });\n }\n\n /**\n * Closes the popup: disconnects the resize observer and runs collapse animation.\n * Safely no-ops if the popup has not been created.\n *\n * @param {Function|null} [callback=null] - Function to call after the popup finishes collapsing.\n */\n close(callback = null) {\n if (!this.isCreated) {\n return;\n }\n\n this.#resizeObser.disconnect();\n \n this.#effSvc.collapse({\n duration: this.options.animationtime,\n onComplete: callback\n });\n }\n\n /**\n * Programmatically triggers a resize recalculation if the popup is created,\n * causing the layout to update based on the current parent dimensions.\n */\n triggerResize() {\n if (this.isCreated) {\n this.#resizeObser.trigger();\n }\n }\n\n /**\n * Enables infinite scroll by listening to container scroll events and loading more data\n * when nearing the bottom, respecting pagination state (enabled/loading/hasMore).\n *\n * @param {object} searchController - Controller providing pagination state and loadMore().\n * @param {object} options - Additional configuration for the infinite scroll behavior.\n */\n setupInfiniteScroll(searchController, options) {\n this.#scrollListener = async () => {\n const state = searchController.getPaginationState();\n \n if (!state.isPaginationEnabled) {\n return;\n }\n\n const container = this.node;\n const scrollTop = container.scrollTop;\n const scrollHeight = container.scrollHeight;\n const clientHeight = container.clientHeight;\n \n if (scrollHeight - scrollTop - clientHeight < 100) {\n if (!state.isLoading && state.hasMore) {\n const result = await searchController.loadMore();\n \n if (!result.success && result.message) {\n console.log(\"Load more:\", result.message);\n }\n }\n }\n };\n\n this.node.addEventListener(\"scroll\", this.#scrollListener);\n }\n\n /**\n * Computes the parent panel's location and box metrics, including size, position,\n * padding, and border, accounting for iOS visual viewport offsets.\n *\n * @returns {{\n * width:number, height:number, top:number, left:number,\n * padding:{top:number,right:number,bottom:number,left:number},\n * border:{top:number,right:number,bottom:number,left:number}\n * }} - The parent panel metrics in viewport coordinates.\n */\n #getParentLocation() {\n const viewPanel = this.#parent.container.tags.ViewPanel;\n const rect = viewPanel.getBoundingClientRect();\n const style = window.getComputedStyle(viewPanel);\n\n const vv = window.visualViewport;\n const is_ios = Libs.IsIOS();\n \n const viewportOffsetY = vv && is_ios ? vv.offsetTop : 0;\n const viewportOffsetX = vv && is_ios ? vv.offsetLeft : 0;\n\n return {\n width: rect.width,\n height: rect.height,\n top: rect.top - viewportOffsetY,\n left: rect.left - viewportOffsetX,\n padding: {\n top: parseFloat(style.paddingTop),\n right: parseFloat(style.paddingRight),\n bottom: parseFloat(style.paddingBottom),\n left: parseFloat(style.paddingLeft),\n },\n border: {\n top: parseFloat(style.borderTopWidth),\n right: parseFloat(style.borderRightWidth),\n bottom: parseFloat(style.borderBottomWidth),\n left: parseFloat(style.borderLeftWidth),\n }\n };\n }\n\n /**\n * Determines popup placement (top/bottom) and height constraints based on available viewport space,\n * content size, and configured min/max heights; returns final position, top, and heights.\n *\n * @param {{width:number,height:number,top:number,left:number}} location - Parent panel metrics.\n * @returns {{position:string, top:number, maxHeight:number, realHeight:number, contentHeight:number}}\n * - Calculated layout values for the popup.\n */\n #calculatePosition(location) {\n const vv = window.visualViewport;\n const is_ios = Libs.IsIOS();\n const viewportHeight = vv?.height ?? window.innerHeight;\n const viewportOffsetY = vv && is_ios ? vv.offsetTop : 0;\n\n const gap = 3;\n const safeMargin = 15;\n \n const dimensions = this.#effSvc.getHiddenDimensions(\"flex\");\n const contentHeight = dimensions.scrollHeight;\n\n const configMaxHeight = parseFloat(this.options.panelHeight) || 220;\n const configMinHeight = parseFloat(this.options.panelMinHeight) || 100;\n\n const spaceBelow = viewportHeight - (location.top + location.height) - gap;\n const spaceAbove = location.top - gap;\n\n let position = \"bottom\";\n let maxHeight = configMaxHeight;\n let realHeight = Math.min(contentHeight, maxHeight);\n const heightOri = spaceBelow - safeMargin;\n \n if (realHeight >= configMinHeight ? heightOri >= configMinHeight : heightOri >= realHeight) {\n position = \"bottom\";\n maxHeight = Math.min(spaceBelow - safeMargin, configMaxHeight);\n } \n else if (spaceAbove >= Math.max(realHeight, configMinHeight)) {\n position = \"top\";\n maxHeight = Math.min(spaceAbove - safeMargin, configMaxHeight);\n }\n else {\n if (spaceBelow >= spaceAbove) {\n position = \"bottom\";\n maxHeight = Math.max(spaceBelow - safeMargin, configMinHeight);\n } else {\n position = \"top\";\n maxHeight = Math.max(spaceAbove - safeMargin, configMinHeight);\n }\n }\n\n realHeight = Math.min(contentHeight, maxHeight);\n \n const top = position === \"bottom\"\n ? (location.top + location.height + gap + viewportOffsetY)\n : (location.top - realHeight - gap + viewportOffsetY);\n\n return {position, top, maxHeight, realHeight, contentHeight};\n }\n\n /**\n * Handles parent resize events by recalculating placement and dimensions,\n * then animates the popup to the new size and position.\n *\n * @param {{width:number,height:number,top:number,left:number}} location - Updated parent metrics.\n */\n #handleResize(location) {\n const {position, top, maxHeight, realHeight} = this.#calculatePosition(location);\n \n this.#effSvc.resize({\n duration: this.options.animationtime,\n width: location.width,\n left: location.left,\n top: top,\n maxHeight: maxHeight,\n realHeight: realHeight,\n position: position,\n animate: true\n });\n }\n}","import {Libs} from \"../utils/libs.js\";\n\n/**\n * @class\n */\nexport class SearchBox {\n /**\n * Creates a searchable input box component with optional configuration\n * and initializes it if options are provided.\n *\n * @param {object|null} [options=null] - Configuration (e.g., placeholder, accessibility IDs).\n */\n constructor(options = null) {\n this.options = options;\n options && this.init(options);\n }\n\n /**\n * @type {MountViewResult<any>}\n */\n nodeMounted = null;\n\n /**\n * @type {HTMLDivElement}\n */\n node = null;\n\n /**\n * @type {HTMLInputElement}\n */\n SearchInput = null;\n\n /**\n * @type {Function|null}\n */\n onSearch = null;\n\n options = null;\n\n onNavigate = null;\n onEnter = null;\n onEsc = null;\n \n /**\n * Initializes the search box DOM, sets ARIA attributes, and wires keyboard/mouse/input events.\n * Supports navigation (ArrowUp/ArrowDown/Tab), Enter, and Escape through callbacks.\n *\n * @param {object} options - Configuration including placeholder and SEID_LIST for aria-controls.\n */\n init(options) {\n this.nodeMounted = Libs.mountNode({\n SearchBox: {\n tag: {node: \"div\", classList: [\"selective-ui-searchbox\", \"hide\"]},\n child: {\n SearchInput: {\n tag: {\n id: Libs.randomString(), \n node: \"input\", \n type: \"search\", \n classList: [\"selective-ui-searchbox-input\"], \n placeholder: options.placeholder, \n role: \"searchbox\",\n ariaControls: options.SEID_LIST,\n ariaAutocomplete: \"list\"\n }\n }\n }\n }\n });\n this.node = /** @type {HTMLDivElement} */ (this.nodeMounted.view);\n this.SearchInput = this.nodeMounted.tags.SearchInput;\n\n let isControlKey = false;\n\n /** @type {HTMLInputElement} */\n const SearchInput = this.nodeMounted.tags.SearchInput;\n\n SearchInput.addEventListener(\"mousedown\", (e) => {\n e.stopPropagation();\n });\n SearchInput.addEventListener(\"mouseup\", (e) => {\n e.stopPropagation();\n });\n SearchInput.addEventListener(\"keydown\", (e) => {\n isControlKey = false;\n if (e.key === \"ArrowDown\" || e.key === \"Tab\") {\n e.preventDefault();\n e.stopPropagation();\n isControlKey = true;\n this.onNavigate?.(1);\n } \n else if (e.key === \"ArrowUp\") {\n e.preventDefault();\n e.stopPropagation();\n isControlKey = true;\n this.onNavigate?.(-1);\n } \n else if (e.key === \"Enter\") {\n e.preventDefault();\n e.stopPropagation();\n isControlKey = true;\n this.onEnter?.();\n }\n else if (e.key === \"Escape\") {\n e.preventDefault();\n e.stopPropagation();\n isControlKey = true;\n this.onEsc?.();\n }\n });\n SearchInput.addEventListener(\"input\", (e) => {\n if (isControlKey) {\n return;\n }\n \n this.onSearch && this.onSearch(this.nodeMounted.tags.SearchInput.value, true);\n });\n }\n\n /**\n * Shows the search box, toggles read-only based on `options.searchable`,\n * and focuses the input when searchable.\n */\n show() {\n this.node.classList.remove(\"hide\");\n this.SearchInput.readOnly = !this.options.searchable;\n if (this.options.searchable) {\n requestAnimationFrame(() => {\n this.SearchInput.focus();\n });\n }\n }\n\n /**\n * Hides the search box by adding the \"hide\" class.\n */\n hide() {\n this.node.classList.add(\"hide\");\n }\n\n /**\n * Clears the current search value and optionally triggers the onSearch callback.\n *\n * @param {boolean} [isTrigger=true] - Whether to invoke onSearch with an empty string.\n */\n clear(isTrigger = true) {\n this.nodeMounted.tags.SearchInput.value = \"\";\n this.onSearch && this.onSearch(\"\", isTrigger);\n }\n\n /**\n * Updates the input's placeholder text, stripping any HTML for safety.\n *\n * @param {string} value - The new placeholder text.\n */\n setPlaceHolder(value) {\n this.SearchInput.placeholder = Libs.stripHtml(value);\n }\n\n /**\n * Sets the active descendant for ARIA to indicate which option is currently highlighted.\n *\n * @param {string} id - The DOM id of the active option element.\n */\n setActiveDescendant(id) {\n this.SearchInput.setAttribute(\"aria-activedescendant\", id);\n }\n}","/**\n * @returns {EffectorInterface}\n */\nexport function Effector(query) {\n return new class {\n /**\n * @type {HTMLElement}\n */\n element;\n #timeOut = null;\n #resizeTimeout = null;\n #isAnimating = false;\n \n /**\n * Provides an effector utility that controls animations and resizing for a target element.\n * Supports setting the element by selector or node, canceling in-flight animations/timers,\n * and exposes methods (expand, collapse, resize) via the returned object instance.\n *\n * @param {string|HTMLElement} [query] - A CSS selector or the target element to control.\n */\n constructor(query = null) {\n if (query) {\n this.setElement(query);\n }\n }\n\n /**\n * Sets the target element to be controlled by the effector.\n * Accepts either a CSS selector or a direct HTMLElement reference.\n *\n * @param {string|HTMLElement} query - The element or selector to bind.\n */\n setElement(query) {\n if (typeof query === \"string\") {\n this.element = document.querySelector(query);\n } else {\n this.element = query;\n }\n }\n\n /**\n * Cancels any pending timeouts or resize triggers and resets the animation state.\n * Use this to stop ongoing expand/collapse/resize animations immediately.\n *\n * @returns {this} - The effector instance for chaining.\n */\n cancel() {\n if (this.#timeOut) {\n clearTimeout(this.#timeOut);\n this.#timeOut = null;\n }\n if (this.#resizeTimeout) {\n clearTimeout(this.#resizeTimeout);\n this.#resizeTimeout = null;\n }\n this.#isAnimating = false;\n return this;\n }\n\n /**\n * Get hidden dimensions\n * @param {string} display \n * @returns {{width: number, height: number, scrollHeight: number}}\n */\n getHiddenDimensions(display = \"flex\") {\n const originalStyles = {\n display: this.element.style.display,\n visibility: this.element.style.visibility,\n position: this.element.style.position,\n height: this.element.style.height,\n width: this.element.style.width,\n };\n\n Object.assign(this.element.style, {\n display: display,\n visibility: \"hidden\",\n position: \"fixed\",\n height: \"fit-content\",\n width: \"fit-content\"\n });\n\n const getComputedStyle = window.getComputedStyle(this.element);\n const borderTopWidth = parseFloat(getComputedStyle.borderTopWidth);\n const borderBottomWidth = parseFloat(getComputedStyle.borderBottomWidth);\n\n const scrollHeight = this.element.scrollHeight + borderTopWidth + borderBottomWidth;\n\n const rect = this.element.getBoundingClientRect();\n \n const dimensions = {\n width: rect.width,\n height: rect.height + borderTopWidth + borderBottomWidth,\n scrollHeight: scrollHeight\n };\n\n Object.assign(this.element.style, originalStyles);\n\n return dimensions;\n }\n\n /**\n * Expand animation (open popup)\n * @param {Object} config\n * @param {number} config.duration - Animation duration in ms\n * @param {string} config.display - Display type\n * @param {number} config.width - Target width\n * @param {number} config.left - Left position\n * @param {number} config.top - Top position\n * @param {number} config.maxHeight - Max height\n * @param {number} config.realHeight - Real height\n * @param {string} config.position - Position type (top/bottom)\n * @param {Function} config.onComplete - Callback when complete\n * @returns {this}\n */\n expand(config) {\n this.cancel();\n this.#isAnimating = true;\n\n const {\n duration = 200,\n display = \"flex\",\n width,\n left,\n top,\n maxHeight,\n realHeight,\n position = \"bottom\",\n onComplete\n } = config;\n\n const initialTop = position === \"bottom\" \n ? top \n : top + realHeight;\n\n Object.assign(this.element.style, {\n display: display,\n width: `${width}px`,\n left: `${left}px`,\n top: `${initialTop}px`,\n maxHeight: `${maxHeight}px`,\n height: \"0px\",\n opacity: \"0\",\n overflow: \"hidden\",\n transition: \"none\"\n });\n\n this.element.classList.toggle(\"position-top\", position === \"top\");\n this.element.classList.toggle(\"position-bottom\", position === \"bottom\");\n\n requestAnimationFrame(() => {\n const isScrollable = realHeight >= maxHeight;\n \n Object.assign(this.element.style, {\n transition: `top ${duration}ms, height ${duration}ms, opacity ${duration}ms`,\n top: `${top}px`,\n height: `${realHeight}px`,\n opacity: \"1\",\n overflow: isScrollable ? \"auto\" : \"hidden\"\n });\n\n this.#timeOut = setTimeout(() => {\n this.element.style.transition = \"none\";\n this.#isAnimating = false;\n onComplete && onComplete();\n }, duration);\n });\n\n return this;\n }\n\n /**\n * Collapse animation (close popup)\n * @param {Object} config\n * @param {number} config.duration - Animation duration in ms\n * @param {Function} config.onComplete - Callback when complete\n * @returns {this}\n */\n collapse(config) {\n this.cancel();\n this.#isAnimating = true;\n\n const {\n duration = 200,\n onComplete\n } = config;\n\n const currentHeight = this.element.offsetHeight;\n const currentTop = this.element.offsetTop;\n const position = this.element.classList.contains(\"position-top\") ? \"top\" : \"bottom\";\n const isScrollable = (this.element.scrollHeight - this.element.offsetHeight) > 0;\n\n const finalTop = position === \"top\" \n ? currentTop + currentHeight\n : currentTop;\n\n requestAnimationFrame(() => {\n Object.assign(this.element.style, {\n transition: `height ${duration}ms, top ${duration}ms, opacity ${duration}ms`,\n height: \"0px\",\n top: `${finalTop}px`,\n opacity: \"0\",\n overflow: isScrollable ? \"auto\" : \"hidden\"\n });\n\n this.#timeOut = setTimeout(() => {\n Object.assign(this.element.style, {\n display: \"none\",\n transition: \"none\"\n });\n this.#isAnimating = false;\n onComplete && onComplete();\n }, duration);\n });\n\n return this;\n }\n\n /**\n * show Swipe animation (close element)\n * @param {Object} config\n * @param {number} config.duration - Animation duration in ms\n * @param {String} config.display - Display for element\n * @param {Function} config.onComplete - Callback when complete\n * @returns {this}\n */\n showSwipeWidth(config) {\n this.cancel();\n this.#isAnimating = true;\n\n const {\n duration = 200,\n display = \"block\",\n onComplete\n } = config;\n\n Object.assign(this.element.style, {\n transition: \"none\",\n display: display,\n width: \"fit-content\"\n });\n\n const maxWidth = this.getHiddenDimensions(display).width;\n \n Object.assign(this.element.style, {\n width: \"0px\"\n });\n\n requestAnimationFrame(() => {\n Object.assign(this.element.style, {\n transition: `width ${duration}ms`,\n width: `${maxWidth}px`,\n overflow: \"hidden\"\n });\n });\n\n this.#timeOut = setTimeout(() => {\n Object.assign(this.element.style, {\n width: null,\n overflow: null,\n transition: null\n });\n this.#isAnimating = false;\n onComplete && onComplete();\n }, duration);\n\n return this;\n }\n\n /**\n * hide Swipe animation (close element)\n * @param {Object} config\n * @param {number} config.duration - Animation duration in ms\n * @param {Function} config.onComplete - Callback when complete\n * @returns {this}\n */\n hideSwipeWidth(config) {\n this.cancel();\n this.#isAnimating = true;\n\n const {\n duration = 200,\n onComplete\n } = config;\n\n const maxWidth = this.getHiddenDimensions().width;\n\n Object.assign(this.element.style, {\n transition: \"none\",\n width: `${maxWidth}px`\n });\n\n requestAnimationFrame(() => {\n Object.assign(this.element.style, {\n transition: `width ${duration}ms`,\n width: `0px`,\n overflow: \"hidden\"\n });\n });\n\n this.#timeOut = setTimeout(() => {\n Object.assign(this.element.style, {\n width: null,\n overflow: null,\n transition: null,\n display: null\n });\n this.#isAnimating = false;\n onComplete && onComplete();\n }, duration);\n\n return this;\n }\n\n /**\n * Resize animation (when content changes)\n * @param {Object} config\n * @param {number} config.duration - Animation duration in ms\n * @param {number} config.width - Target width\n * @param {number} config.left - Left position\n * @param {number} config.top - Top position\n * @param {number} config.maxHeight - Max height\n * @param {number} config.realHeight - Real height\n * @param {string} config.position - Position type (top/bottom)\n * @param {boolean} config.animate - Whether to animate\n * @param {Function} config.onComplete - Callback when complete\n * @returns {this}\n */\n resize(config) {\n if (this.#resizeTimeout) {\n clearTimeout(this.#resizeTimeout);\n }\n\n const {\n duration = 200,\n width,\n left,\n top,\n maxHeight,\n realHeight,\n position = \"bottom\",\n animate = true,\n onComplete\n } = config;\n\n const currentPosition = this.element.classList.contains(\"position-top\") ? \"top\" : \"bottom\";\n const isPositionChanged = currentPosition !== position;\n const isScrollable = this.element.scrollHeight > maxHeight;\n\n this.element.classList.toggle(\"position-top\", position === \"top\");\n this.element.classList.toggle(\"position-bottom\", position === \"bottom\");\n \n if (isPositionChanged) {\n this.element.style.transition = `top ${duration}ms ease-out, height ${duration}ms ease-out, max-height ${duration}ms ease-out;`;\n }\n\n requestAnimationFrame(() => {\n const curTop = this.element.offsetTop;\n const styles = {\n width: `${width}px`,\n left: `${left}px`,\n top: `${top}px`,\n maxHeight: `${maxHeight}px`,\n height: `${realHeight}px`,\n overflowY: isScrollable ? \"auto\" : \"hidden\"\n };\n\n if (animate && (isPositionChanged || Math.abs(this.element.offsetHeight - realHeight) > 5) ) {\n styles.transition = `height ${duration}ms, top ${duration}ms`;\n } else {\n this.#resizeTimeout = setTimeout(() => {\n this.element.style.transition = \"none\";\n }, duration);\n }\n\n Object.assign(this.element.style, styles);\n\n if (animate && (isPositionChanged || Math.abs(this.element.offsetHeight - realHeight) > 1)) {\n this.#resizeTimeout = setTimeout(() => {\n this.element.style.transition = \"none\";\n if (isPositionChanged) {\n delete this.element.style.transition;\n }\n onComplete && onComplete();\n }, duration);\n } else {\n if (isPositionChanged) {\n delete this.element.style.transition;\n }\n onComplete && onComplete();\n }\n });\n\n return this;\n }\n\n /**\n * Check if currently animating\n * @returns {boolean}\n */\n get isAnimating() {\n return this.#isAnimating;\n }\n }(query);\n}","/**\n * @template {ModelContract<any, any>} TItem\n * @template {AdapterContract<TItem>} TAdapter\n * @implements {RecyclerViewContract<TAdapter>}\n */\nexport class RecyclerView {\n /**\n * @type {HTMLDivElement}\n */\n viewElement = null;\n\n /**\n * @type {TAdapter}\n */\n adapter = null;\n\n /**\n * Constructs a RecyclerView with an optional container element that will host rendered item views.\n *\n * @param {HTMLDivElement|null} [viewElement=null] - The root element where the adapter will render items.\n */\n constructor(viewElement = null) {\n this.viewElement = viewElement;\n }\n \n /**\n * Sets or updates the container element used to render the adapter's item views.\n *\n * @param {HTMLDivElement} viewElement - The root element for rendering.\n */\n setView(viewElement) {\n this.viewElement = viewElement;\n }\n \n /**\n * Attaches an adapter to the RecyclerView and wires item-change lifecycle:\n * - onPropChanging(\"items\"): clears the container before items change,\n * - onPropChanged(\"items\"): re-renders after items change,\n * then performs an initial render.\n *\n * @param {TAdapter} adapter - The adapter managing models and their views.\n */\n setAdapter(adapter) {\n this.adapter = adapter;\n\n adapter.onPropChanging(\"items\", () => {\n this.clear();\n });\n\n adapter.onPropChanged(\"items\", () => {\n this.render();\n });\n\n this.render();\n }\n\n /**\n * Removes all child nodes from the rendering container, if present.\n * Used prior to re-rendering or when items are changing.\n */\n clear() {\n if (!this.viewElement) return;\n this.viewElement.replaceChildren();\n }\n\n /**\n * Renders the current adapter contents into the container.\n * No-ops if either the adapter or the container is not set.\n */\n render() {\n if (!this.adapter || !this.viewElement) return;\n\n this.adapter.updateRecyclerView(this.viewElement);\n }\n\n /**\n * Forces a re-render of the current adapter state into the container.\n * Useful when visual updates are required without changing the data.\n */\n refresh() {\n this.render();\n }\n}","import { ModelManager } from \"../core/model-manager\";\nimport { OptionModel } from \"../models/option-model\";\nimport { iEvents } from \"../utils/ievents\";\nimport { Libs } from \"../utils/libs\";\n\n/**\n * @class\n */\nexport class AccessoryBox {\n /**\n * @type {MountViewResult<any>}\n */\n nodeMounted = null;\n\n /**\n * @type {HTMLDivElement}\n */\n node = null;\n\n options = null;\n\n /** @type {HTMLDivElement} */\n selectUIMask;\n\n /** @type {HTMLDivElement} */\n parentMask;\n\n /** @type {ModelManager} */\n modelManager;\n\n /**\n * Initializes the accessory box with optional configuration and immediately calls init() if provided.\n *\n * @param {object|null} options - Configuration options for the accessory box (e.g., layout and behavior).\n */\n constructor(options = null) {\n options && this.init(options);\n }\n\n /**\n * Creates the accessory box DOM node and stores the provided options.\n * The node is initially hidden and stops mouseup events from bubbling.\n *\n * @param {object} options - Configuration object for the accessory box.\n */\n init(options) {\n this.nodeMounted = Libs.mountNode({\n AccessoryBox: {\n tag: {node: \"div\", classList: [\"selective-ui-accessorybox\", \"hide\"], onmouseup: (evt) => {\n evt.stopPropagation();\n }}\n }\n });\n this.node = /** @type {HTMLDivElement} */ (this.nodeMounted.view);\n this.options = options;\n }\n\n /**\n * Sets the root references for the accessory box (mask elements) and refreshes its location in the DOM.\n *\n * @param {HTMLDivElement} selectUIMask - The overlay/mask element of the main Select UI.\n */\n setRoot(selectUIMask) {\n this.selectUIMask = selectUIMask;\n this.parentMask = /** @type {HTMLDivElement} */ (selectUIMask.parentElement);\n\n this.refreshLocation();\n }\n\n /**\n * Inserts the accessory box before or after the Select UI mask depending on the configured accessoryStyle.\n * Keeps the accessory box aligned relative to the parent mask.\n */\n refreshLocation() {\n this.parentMask.insertBefore(this.node, (this.options.accessoryStyle == \"top\" ? this.selectUIMask : this.selectUIMask.nextSibling));\n }\n\n /**\n * Assigns a ModelManager instance used to trigger and manage selection state changes.\n *\n * @param {ModelManager} modelManager - The model manager controlling option state.\n */\n setModelManager(modelManager) {\n this.modelManager = modelManager;\n }\n\n /**\n * Renders accessory items for the currently selected options in multiple-select mode.\n * Shows the accessory box when there are items; otherwise hides it. Triggers a window resize event.\n *\n * @param {OptionModel[]} modelDatas - List of option models to render as accessory items.\n */\n setModelData(modelDatas) {\n this.node.replaceChildren();\n \n if (modelDatas.length > 0 && this.options.multiple) {\n this.node.classList.remove(\"hide\");\n\n modelDatas.forEach(modelData => {\n Libs.mountNode({\n AccessoryItem: {\n tag: {node: \"div\", classList: [\"accessory-item\"]},\n child: {\n Button: {\n tag: {node: \"span\", classList: [\"accessory-item-button\"], role: \"button\", ariaLabel: `${this.options.textAccessoryDeselect}${modelData.textContent}`, title: `${this.options.textAccessoryDeselect}${modelData.textContent}`, onclick: (evt) => {\n this.modelManager.triggerChanging(\"select\");\n setTimeout(() => {\n modelData.selected = false;\n }, 10);\n }}\n },\n Content: {\n tag: {node: \"span\", classList: [\"accessory-item-content\"], innerHTML: modelData.text}\n }\n }\n }\n }, this.node);\n });\n }\n else {\n this.node.classList.add(\"hide\");\n }\n iEvents.trigger(window, \"resize\");\n }\n}","import { Popup } from \"../components/popup\";\nimport { GroupModel } from \"../models/group-model\";\nimport { OptionModel } from \"../models/option-model\";\nimport { Libs } from \"../utils/libs\";\nimport { ModelManager } from \"./model-manager\";\n\nexport class SearchController {\n #select;\n /** @type {ModelManager<OptionModel>} */\n #modelManager;\n\n #ajaxConfig = null;\n\n #abortController = null;\n\n /** @type {Popup} */\n #popup = null;\n \n #paginationState = {\n currentPage: 0,\n totalPages: 1,\n hasMore: false,\n isLoading: false,\n currentKeyword: \"\",\n isPaginationEnabled: false\n };\n\n /**\n * Initializes the SearchController with a source <select> element and a ModelManager\n * to manage option models and search results.\n *\n * @param {HTMLSelectElement} selectElement - The native select element that provides context and data source.\n * @param {ModelManager<OptionModel>} modelManager - Manager responsible for models and rendering updates.\n */\n constructor(selectElement, modelManager) {\n this.#select = selectElement;\n this.#modelManager = modelManager;\n }\n\n /**\n * Indicates whether AJAX-based search is configured.\n *\n * @returns {boolean} - True if AJAX config is present; false otherwise.\n */\n isAjax() {\n return !(!this.#ajaxConfig);\n }\n\n /**\n * Configures AJAX settings used for remote searching and pagination.\n *\n * @param {object} config - AJAX configuration object (e.g., endpoint, headers, query params).\n */\n setAjax(config) {\n this.#ajaxConfig = config;\n }\n\n /**\n * Attaches a Popup instance to allow UI updates during search (e.g., loading, resize).\n *\n * @param {Popup} popupInstance - The popup used to display search results and loading state.\n */\n setPopup(popupInstance) {\n this.#popup = popupInstance;\n }\n\n\n /**\n * Returns a shallow copy of the current pagination state used for search/infinite scroll.\n *\n * @returns {{\n * currentPage:number, totalPages:number, hasMore:boolean, isLoading:boolean,\n * currentKeyword:string, isPaginationEnabled:boolean\n * }}\n */\n getPaginationState() {\n return { ...this.#paginationState };\n }\n\n /**\n * Resets pagination counters while preserving whether pagination is enabled.\n * Clears page, totals, loading flags, and current keyword.\n */\n resetPagination() {\n this.#paginationState = {\n currentPage: 0,\n totalPages: 1,\n hasMore: false,\n isLoading: false,\n currentKeyword: \"\",\n isPaginationEnabled: this.#paginationState.isPaginationEnabled\n };\n }\n\n /**\n * Clears the current keyword and makes all options visible (local reset).\n * Flattens groups and options, then sets `visible = true` for each option.\n */\n clear() {\n this.#paginationState.currentKeyword = \"\";\n const { modelList } = this.#modelManager.getResources();\n const flatOptions = [];\n for (const m of modelList) {\n if (m instanceof OptionModel) flatOptions.push(m);\n else if (m instanceof GroupModel && Array.isArray(m.items)) flatOptions.push(...m.items);\n }\n flatOptions.forEach(opt => { opt.visible = true; });\n }\n\n /**\n * Performs a search with either AJAX or local filtering depending on configuration.\n *\n * @param {string} keyword - The search term to apply.\n * @param {boolean} [append=false] - When using AJAX, whether to append results to existing items.\n * @returns {Promise<{success:boolean, hasResults:boolean, isEmpty:boolean} | any>}\n */\n async search(keyword, append = false) {\n if (this.#ajaxConfig && this.#ajaxConfig) {\n return this.#ajaxSearch(keyword, append);\n }\n return this.#localSearch(keyword);\n }\n\n /**\n * Loads the next page for AJAX pagination if enabled and not already loading,\n * otherwise returns an error object indicating the reason.\n *\n * @returns {Promise<{success:boolean, message?:string} | any>}\n */\n async loadMore() {\n if (!this.#ajaxConfig || !this.#ajaxConfig) {\n return { success: false, message: \"Ajax not enabled\" };\n }\n\n if (this.#paginationState.isLoading) {\n return { success: false, message: \"Already loading\" };\n }\n\n if (!this.#paginationState.isPaginationEnabled) {\n return { success: false, message: \"Pagination not enabled\" };\n }\n\n if (!this.#paginationState.hasMore) {\n return { success: false, message: \"No more data\" };\n }\n\n this.#paginationState.currentPage++;\n return this.#ajaxSearch(this.#paginationState.currentKeyword, true);\n }\n\n /**\n * Executes a local (in-memory) search by normalizing the keyword (lowercase, non-accent)\n * and toggling each option's visibility based on text match. Returns summary flags.\n *\n * @param {string} keyword - The search term.\n * @returns {Promise<{success:boolean, hasResults:boolean, isEmpty:boolean}>}\n */\n async #localSearch(keyword) {\n if (this.compareSearchTrigger(keyword)) {\n this.#paginationState.currentKeyword = keyword;\n }\n \n const lower = String(keyword || \"\").toLowerCase();\n const lowerNA = Libs.string2normalize(lower);\n\n const { modelList } = this.#modelManager.getResources();\n const flatOptions = [];\n for (const m of modelList) {\n if (m instanceof OptionModel) {\n flatOptions.push(m);\n } else if (m instanceof GroupModel && Array.isArray(m.items)) {\n flatOptions.push(...m.items);\n }\n }\n\n let hasVisibleItems = false;\n flatOptions.forEach(opt => {\n const text = String(opt.textContent || opt.text || \"\").toLowerCase();\n const textNA = Libs.string2normalize(text);\n const isVisible =\n lower === \"\" ||\n text.includes(lower) ||\n textNA.includes(lowerNA);\n opt.visible = isVisible;\n if (isVisible) hasVisibleItems = true;\n });\n\n return {\n success: true,\n hasResults: hasVisibleItems,\n isEmpty: flatOptions.length === 0\n };\n }\n\n /**\n * Checks whether the provided keyword differs from the current one,\n * to determine if a new search should be triggered.\n *\n * @param {string} keyword - The candidate search term.\n * @returns {boolean} - True if different from the current keyword; otherwise false.\n */\n compareSearchTrigger(keyword) {\n if (keyword !== this.#paginationState.currentKeyword) {\n return true;\n }\n return false;\n }\n\n /**\n * Executes an AJAX-based search with optional appending. Manages pagination,\n * aborts previous requests, shows/hides loading, builds payload, and applies results.\n *\n * @param {string} keyword - The search term.\n * @param {boolean} [append=false] - Whether to append results instead of replacing.\n * @returns {Promise<{\n * success:boolean, hasResults:boolean, isEmpty:boolean,\n * hasPagination:boolean, hasMore:boolean, currentPage:number, totalPages:number\n * } | {success:false, message:string}>}\n */\n async #ajaxSearch(keyword, append = false) {\n const cfg = this.#ajaxConfig;\n\n if (this.compareSearchTrigger(keyword)) {\n this.resetPagination();\n this.#paginationState.currentKeyword = keyword;\n append = false;\n }\n\n this.#paginationState.isLoading = true;\n this.#popup?.showLoading();\n\n this.#abortController?.abort();\n this.#abortController = new AbortController();\n\n const page = this.#paginationState.currentPage;\n \n const selectedValues = Array.from(this.#select.selectedOptions)\n .map(opt => opt.value)\n .join(\",\");\n \n let payload;\n if (typeof cfg.data === \"function\") {\n payload = cfg.data(keyword, page);\n if (payload && !payload.selectedValue) {\n payload.selectedValue = selectedValues;\n }\n } else {\n payload = {\n search: keyword,\n page: page,\n selectedValue: selectedValues,\n ...(cfg.data || {})\n };\n }\n\n try {\n let response;\n\n if (cfg.method === \"POST\") {\n const formData = new URLSearchParams();\n Object.keys(payload).forEach(key => {\n formData.append(key, payload[key]);\n });\n\n response = await fetch(cfg.url, {\n method: \"POST\",\n body: formData,\n headers: { \"Content-Type\": \"application/x-www-form-urlencoded\" },\n signal: this.#abortController.signal\n });\n } else {\n const params = new URLSearchParams(payload).toString();\n response = await fetch(`${cfg.url}?${params}`, {\n signal: this.#abortController.signal\n });\n }\n\n let data = await response.json();\n \n const result = this.#parseResponse(data);\n \n if (result.hasPagination) {\n this.#paginationState.isPaginationEnabled = true;\n this.#paginationState.currentPage = result.page;\n this.#paginationState.totalPages = result.totalPages;\n this.#paginationState.hasMore = result.hasMore;\n } else {\n this.#paginationState.isPaginationEnabled = false;\n }\n\n this.#applyAjaxResult(result.items, cfg.keepSelected, append);\n \n this.#paginationState.isLoading = false;\n this.#popup?.hideLoading();\n\n return {\n success: true,\n hasResults: result.items.length > 0,\n isEmpty: result.items.length === 0,\n hasPagination: result.hasPagination,\n hasMore: result.hasMore,\n currentPage: result.page,\n totalPages: result.totalPages\n };\n } catch (error) {\n this.#paginationState.isLoading = false;\n this.#popup?.hideLoading();\n \n if (error.name === \"AbortError\") {\n return { success: false, message: \"Request aborted\" };\n }\n \n console.error(\"Ajax search error:\", error);\n return { success: false, message: error.message };\n }\n }\n\n /**\n * Parses various server response shapes into a normalized structure for options and groups.\n * Supports arrays at keys: `object`, `data`, `items`, or a root array; detects pagination metadata.\n * Each item is mapped to either an \"option\" or \"optgroup\" descriptor, preserving custom data fields.\n *\n * @param {any} data - The raw response payload from the AJAX request.\n * @returns {{\n * items: Array<\n * | HTMLOptionElement\n * | HTMLOptGroupElement\n * | {\n * type: \"option\",\n * value: string,\n * text: string,\n * selected?: boolean,\n * data?: Record<string, any>\n * }\n * | {\n * type: \"optgroup\",\n * label: string,\n * data?: Record<string, any>,\n * options: Array<{\n * value: string,\n * text: string,\n * selected?: boolean,\n * data?: Record<string, any>\n * }>\n * }\n * >,\n * hasPagination: boolean,\n * page: number,\n * totalPages: number,\n * hasMore: boolean\n * }}\n */\n #parseResponse(data) {\n let items = [];\n let hasPagination = false;\n let page = 0;\n let totalPages = 1;\n let hasMore = false;\n\n if (data.object && Array.isArray(data.object)) {\n items = data.object;\n if (typeof data.page !== \"undefined\") {\n hasPagination = true;\n page = parseInt(data.page) || 0;\n totalPages = parseInt(data.totalPages || data.total_page) || 1;\n hasMore = page < totalPages - 1;\n }\n }\n else if (data.data && Array.isArray(data.data)) {\n items = data.data;\n if (typeof data.page !== \"undefined\") {\n hasPagination = true;\n page = parseInt(data.page) || 0;\n totalPages = parseInt(data.totalPages || data.total_page) || 1;\n hasMore = data.hasMore ?? (page < totalPages - 1);\n }\n }\n else if (Array.isArray(data)) {\n items = data;\n }\n else if (data.items && Array.isArray(data.items)) {\n items = data.items;\n if (data.pagination) {\n hasPagination = true;\n page = parseInt(data.pagination.page) || 0;\n totalPages = parseInt(data.pagination.totalPages || data.pagination.total_page) || 1;\n hasMore = data.pagination.hasMore ?? (page < totalPages - 1);\n }\n }\n\n items = items.map(item => {\n if (item instanceof HTMLOptionElement || item instanceof HTMLOptGroupElement) {\n return item;\n }\n\n if (item.type === \"optgroup\" || item.isGroup || item.group || item.label) {\n return {\n type: \"optgroup\",\n label: item.label || item.name || item.title || \"\",\n data: item.data || {},\n options: (item.options || item.items || []).map(opt => ({\n value: opt.value || opt.id || opt.key || \"\",\n text: opt.text || opt.label || opt.name || opt.title || \"\",\n selected: opt.selected || false,\n data: opt.data || (opt.imgsrc ? { imgsrc: opt.imgsrc } : {})\n }))\n };\n }\n\n let data = item.data || {};\n if (item?.imgsrc) {\n data.imgsrc = item.imgsrc;\n }\n \n return {\n type: \"option\",\n value: item.value || item.id || item.key || \"\",\n text: item.text || item.label || item.name || item.title || \"\",\n selected: item.selected || false,\n data: data\n };\n });\n\n return {\n items,\n hasPagination,\n page,\n totalPages,\n hasMore\n };\n }\n\n /**\n * Applies normalized AJAX results to the underlying <select> element.\n * Optionally keeps previous selections, supports appending, and preserves\n * custom data attributes for both options and optgroups. Emits \"options:changed\".\n *\n * @param {Array<\n * | HTMLOptionElement\n * | HTMLOptGroupElement\n * | {type:\"option\", value:string, text:string, selected?:boolean, data?:Record<string, any>}\n * | {type:\"optgroup\", label:string, data?:Record<string, any>, options:Array<{value:string, text:string, selected?:boolean, data?:Record<string, any>}>}\n * >} items - The normalized list of items to apply.\n * @param {boolean} keepSelected - If true, previously selected values are preserved when possible.\n * @param {boolean} [append=false] - If true, append to existing options; otherwise replace them.\n */\n #applyAjaxResult(items, keepSelected, append = false) {\n const select = this.#select;\n \n let oldSelected = [];\n if (keepSelected) {\n oldSelected = Array.from(select.selectedOptions).map(o => o.value);\n }\n\n if (!append) {\n select.innerHTML = \"\";\n }\n\n items.forEach(item => {\n if ((item[\"type\"] === \"option\" || !item[\"type\"]) && item[\"value\"] === \"\" && item[\"text\"] === \"\") {\n return;\n }\n\n if (item instanceof HTMLOptionElement || item instanceof HTMLOptGroupElement) {\n select.appendChild(item);\n return;\n }\n\n if (item.type === \"optgroup\") {\n const optgroup = document.createElement(\"optgroup\");\n optgroup.label = item.label;\n\n if (item.data) {\n Object.keys(item.data).forEach(key => {\n optgroup.dataset[key] = item.data[key];\n });\n }\n\n if (item.options && Array.isArray(item.options)) {\n item.options.forEach(opt => {\n const option = document.createElement(\"option\");\n option.value = opt.value;\n option.text = opt.text;\n\n if (opt.data) {\n Object.keys(opt.data).forEach(key => {\n option.dataset[key] = opt.data[key];\n });\n }\n\n if (opt.selected || (keepSelected && oldSelected.includes(option.value))) {\n option.selected = true;\n }\n\n optgroup.appendChild(option);\n });\n }\n\n select.appendChild(optgroup);\n }\n else {\n const option = document.createElement(\"option\");\n option.value = item.value;\n option.text = item.text;\n \n if (item.data) {\n Object.keys(item.data).forEach(key => {\n option.dataset[key] = item.data[key];\n });\n }\n\n if (item.selected || (keepSelected && oldSelected.includes(option.value))) {\n option.selected = true;\n }\n\n select.appendChild(option);\n }\n });\n\n select.dispatchEvent(new CustomEvent(\"options:changed\"));\n }\n}","export class SelectObserver {\n /** @type {MutationObserver} */\n #observer;\n\n /** @type {HTMLSelectElement} */\n #select;\n\n #debounceTimer = null;\n\n /**\n * Observes a <select> element for option list and attribute changes, with debouncing.\n * Detects modifications to children (options added/removed) and relevant attributes\n * (\"selected\", \"value\", \"disabled\"). Emits updates via the overridable onChanged() hook.\n *\n * @param {HTMLSelectElement} select - The <select> element to monitor.\n */\n constructor(select) {\n this.#observer = new MutationObserver(() => {\n clearTimeout(this.#debounceTimer);\n this.#debounceTimer = setTimeout(() => {\n this.onChanged(select);\n }, 50);\n });\n\n this.#select = select;\n\n select.addEventListener(\"options:changed\", () => {\n this.onChanged(select);\n });\n }\n\n /**\n * Starts observing the select element for child list mutations and attribute changes.\n * Uses a MutationObserver with a debounce to batch rapid updates.\n */\n connect() {\n this.#observer.observe(this.#select, {\n childList: true,\n subtree: false,\n\n attributes: true,\n attributeFilter: [\"selected\", \"value\", \"disabled\"]\n });\n }\n\n /**\n * Hook invoked when the select's options or attributes change.\n * Override to handle updates; receives the current HTMLCollection of options.\n *\n * @param {HTMLSelectElement} options - The Select element.\n */\n onChanged(options) { }\n\n /**\n * Stops observing the select element and clears any pending debounce timers.\n */\n disconnect() {\n clearTimeout(this.#debounceTimer);\n this.#observer.disconnect();\n }\n}","export class DatasetObserver {\n /** @type {MutationObserver} */\n #observer;\n\n /** @type {HTMLElement} */\n #element;\n\n #debounceTimer = null;\n\n /**\n * Observes data-* attribute changes on a target element and debounces notifications.\n * Sets up a MutationObserver to detect dataset mutations and a fallback custom event listener.\n *\n * @param {HTMLElement} element - The element whose dataset (data-* attributes) will be observed.\n */\n constructor(element) {\n this.#element = element;\n\n this.#observer = new MutationObserver((mutations) => {\n let datasetChanged = false;\n\n for (const mutation of mutations) {\n if (\n mutation.type === \"attributes\" &&\n mutation.attributeName?.startsWith(\"data-\")\n ) {\n datasetChanged = true;\n break;\n }\n }\n\n if (!datasetChanged) return;\n\n clearTimeout(this.#debounceTimer);\n this.#debounceTimer = setTimeout(() => {\n this.onChanged({ ...this.#element.dataset });\n }, 50);\n });\n\n element.addEventListener(\"dataset:changed\", () => {\n this.onChanged({ ...this.#element.dataset });\n });\n }\n\n /**\n * Starts observing the element for attribute changes, including old values.\n * Uses MutationObserver to track updates to data-* attributes.\n */\n connect() {\n this.#observer.observe(this.#element, {\n attributes: true,\n attributeOldValue: true\n });\n }\n\n /**\n * Callback invoked when the element's dataset changes (debounced).\n * Override in subclasses to handle dataset updates.\n *\n * @param {DOMStringMap} dataset - A shallow copy of the element's current dataset.\n */\n onChanged(dataset) {\n // override\n }\n\n /**\n * Stops observing the element and clears any pending debounce timers.\n */\n disconnect() {\n clearTimeout(this.#debounceTimer);\n this.#observer.disconnect();\n }\n}\n","import {Libs} from \"../utils/libs.js\";\nimport {Refresher} from \"../services/refresher.js\";\nimport {PlaceHolder} from \"../components/placeholder.js\";\nimport {Directive} from \"../components/directive.js\";\nimport {Popup} from \"../components/popup.js\";\nimport {SearchBox} from \"../components/searchbox.js\";\nimport * as Effector from \"../services/effector.js\";\nimport { iEvents } from \"../utils/ievents.js\";\nimport { ModelManager } from \"../core/model-manager.js\";\nimport { RecyclerView } from \"../core/base/recyclerview.js\";\nimport { AccessoryBox } from \"./accessorybox.js\";\nimport { SearchController } from \"../core/search-controller.js\";\nimport { SelectObserver } from \"../services/select-observer.js\";\nimport { DatasetObserver } from \"../services/dataset-observer.js\";\nimport { MixedAdapter } from \"../adapter/mixed-adapter.js\";\nimport { GroupModel } from \"../models/group-model.js\";\nimport { OptionModel } from \"../models/option-model.js\";\n\n/**\n * @class\n */\nexport class SelectBox {\n \n /**\n * Initializes a SelectBox instance and, if a source <select> and Selective context are provided,\n * immediately calls init() to set up the enhanced UI and behavior.\n *\n * @param {HTMLSelectElement|null} [select=null] - The native select element to enhance.\n * @param {typeof import('../utils/selective.js').Selective} [Selective=null] - The Selective framework/context used for configuration and services.\n */\n constructor(select = null, Selective = null) {\n select && this.init(select, Selective);\n }\n container = {};\n oldValue = null;\n\n /** @type {HTMLDivElement} */\n node = null;\n\n options = null;\n\n /** @type {ModelManager} */\n optionModelManager = null;\n\n isOpen = false;\n\n hasLoadedOnce = false;\n\n isBeforeSearch = false;\n\n /** @type {typeof import('../utils/selective.js').Selective} */\n Selective = null;\n\n /**\n * Gets or sets the disabled state of the SelectBox.\n * When set, updates CSS class and ARIA attributes to reflect the disabled state.\n *\n * @type {boolean}\n */\n get isDisabled() {\n return this.options.disabled;\n }\n set isDisabled(value) {\n this.options.disabled = value;\n this.node.classList.toggle(\"disabled\", value);\n this.node.setAttribute(\"aria-disabled\", value.toString());\n this.container.tags.ViewPanel.setAttribute(\"aria-disabled\", value.toString());\n }\n\n /**\n * Gets or sets the read-only state of the SelectBox.\n * When set, toggles the \"readonly\" CSS class to prevent user interaction.\n *\n * @type {boolean}\n */\n get isReadOnly() {\n return this.options.readonly;\n }\n set isReadOnly(value) {\n this.options.readonly = value;\n this.node.classList.toggle(\"readonly\", value);\n }\n\n /**\n * Gets or sets the visibility state of the SelectBox.\n * When set, toggles the \"invisible\" CSS class to show or hide the component.\n *\n * @type {boolean}\n */\n get isVisible() {\n return this.options.visible;\n }\n set isVisible(value) {\n this.options.visible = value;\n this.node.classList.toggle(\"invisible\", !value);\n }\n\n\n /**\n * Initializes the SelectBox UI and behavior by wiring core components (Placeholder, Directive,\n * SearchBox, Popup, AccessoryBox), setting ARIA attributes, mounting DOM structure, and connecting\n * observers (SelectObserver, DatasetObserver). Configures ModelManager with MixedAdapter and\n * RecyclerView, sets up search (including optional AJAX with debouncing), infinite scroll, and\n * event handlers for selection, highlighting, collapsing, and keyboard navigation.\n *\n * @param {HTMLSelectElement} select - The native <select> element to enhance.\n * @param {typeof import('../utils/selective.js').Selective} Selective - The Selective framework/context for services and configuration.\n */\n init(select, Selective) {\n const \n bindedMap = Libs.getBinderMap(select),\n options = bindedMap.options,\n placeholder = new PlaceHolder(options),\n directive = new Directive(),\n searchbox = new SearchBox(options),\n effector = Effector.Effector(),\n optionModelManager = new ModelManager(options),\n accessoryBox = new AccessoryBox(options),\n searchController = new SearchController(\n select,\n optionModelManager\n ),\n selectObserver = new SelectObserver(select),\n datasetObserver = new DatasetObserver(select)\n ;\n \n this.Selective = Selective;\n this.options = options;\n\n placeholder.node.id = options.SEID_HOLDER;\n\n const container = Libs.mountNode({\n Container: {\n tag: {node: \"div\", classList: \"selective-ui-MAIN\"},\n child: {\n ViewPanel: {\n tag: {\n node: \"div\", \n classList: \"selective-ui-view\", \n tabIndex: 0, \n role: \"combobox\",\n ariaExpanded: \"false\",\n ariaLabelledby: options.SEID_HOLDER,\n ariaControls: options.SEID_LIST,\n ariaHaspopup: \"true\",\n ariaMultiselectable: options.multiple ? \"true\" : \"false\",\n onkeydown: (e) => {\n if (e.key === \"Enter\" || e.key === \" \" || e.key === \"ArrowDown\") {\n e.preventDefault();\n this.getAction()?.open();\n }\n }\n },\n child: {\n PlaceHolder: {\n tag: placeholder.node\n },\n Directive: {\n tag: directive.node\n },\n SearchBox: {\n tag: searchbox.node\n }\n }\n }\n }\n }\n });\n \n this.container = container;\n\n this.node = this.container.view;\n\n select.parentNode.insertBefore(this.node, select);\n\n this.node.insertBefore(select, container.tags.ViewPanel);\n\n accessoryBox.setRoot(container.tags.ViewPanel);\n accessoryBox.setModelManager(optionModelManager);\n\n container.tags.ViewPanel.addEventListener(\"mousedown\", (e) => {\n e.stopPropagation();\n e.preventDefault();\n });\n\n Refresher.resizeBox(select, container.tags.ViewPanel);\n\n select.classList.add(\"init\");\n\n // optionModelManager.setupModel(OptionModel);\n optionModelManager.setupAdapter(MixedAdapter);\n optionModelManager.setupRecyclerView(RecyclerView);\n optionModelManager.createModelResources(Libs.parseSelectToArray(select));\n optionModelManager.onUpdated = () => {\n container.popup.triggerResize();\n };\n \n this.optionModelManager = optionModelManager;\n\n container.searchController = searchController;\n\n container.placeholder = placeholder;\n container.directive = directive;\n container.popup = new Popup(select, options, optionModelManager);\n container.popup.setupEffector(effector);\n container.popup.setupInfiniteScroll(searchController, options);\n container.popup.onAdapterPropChanged(\"selected\", () => {\n this.getAction()?.change(null, true);\n });\n container.popup.onAdapterPropChanged(\"selected_internal\", () => {\n this.getAction()?.change(null, false);\n });\n container.popup.onAdapterPropChanging(\"select\", () => {\n this.oldValue = this.getAction()?.value ?? \"\";\n });\n container.searchbox = searchbox;\n container.effector = effector;\n container.targetElement = select;\n container.accessorybox = accessoryBox;\n this.getAction()?.change(null, false);\n\n selectObserver.connect();\n selectObserver.onChanged = options => {\n optionModelManager.update(Libs.parseSelectToArray(options));\n this.getAction()?.refreshMask();\n };\n container.selectObserver = selectObserver;\n\n container.datasetObserver = datasetObserver;\n datasetObserver.connect();\n \n select.addEventListener('options:changed', () => {\n optionModelManager.update(Libs.parseSelectToArray(select));\n this.getAction()?.refreshMask();\n container.popup?.triggerResize?.();\n });\n\n datasetObserver.onChanged = dataset => {\n if (Libs.string2Boolean(dataset.disabled) != this.isDisabled) {\n this.isDisabled = Libs.string2Boolean(dataset.disabled);\n }\n\n if (Libs.string2Boolean(dataset.readonly) != this.isReadOnly) {\n this.isReadOnly = Libs.string2Boolean(dataset.readonly);\n }\n\n if (Libs.string2Boolean(dataset.visible) != this.isVisible) {\n this.isVisible = Libs.string2Boolean(dataset.visible ?? \"1\");\n }\n }\n\n if (options.ajax) {\n searchController.setAjax(options.ajax);\n }\n\n const optionAdapter = container.popup.optionAdapter;\n\n let searchHandle = (keyword, isTrigger) => {\n if (!isTrigger && keyword == \"\") {\n searchController.clear();\n }\n else {\n if (keyword != \"\") {\n this.isBeforeSearch = true;\n }\n searchController.search(keyword).then((result) => {\n container.popup.triggerResize();\n \n if (result.hasResults) {\n setTimeout(() => {\n optionAdapter.resetHighlight();\n }, options.animationtime);\n }\n }).catch(error => {\n console.error(\"Search error:\", error);\n });\n }\n }\n let searchHandleTimer = null;\n searchbox.onSearch = (keyword, isTrigger) => {\n if (!searchController.compareSearchTrigger(keyword)) {\n return;\n }\n\n if (searchController.isAjax()) {\n clearTimeout(searchHandleTimer);\n container.popup.showLoading();\n\n searchHandleTimer = setTimeout(() => {\n searchHandle(keyword, isTrigger);\n }, options.delaysearchtime);\n }\n else {\n searchHandle(keyword, isTrigger);\n }\n };\n\n searchController.setPopup(container.popup);\n searchbox.onNavigate = (direction) => {\n optionAdapter.navigate(direction);\n };\n\n searchbox.onEnter = () => {\n optionAdapter.selectHighlighted();\n };\n\n optionAdapter.onHighlightChange = (index, id) => {\n searchbox.setActiveDescendant(id);\n }\n\n optionAdapter.onCollapsedChange = () => {\n container.popup.triggerResize();\n }\n\n searchbox.onEsc = () => {\n this.getAction()?.close();\n container.tags.ViewPanel.focus();\n };\n\n this.isDisabled = Libs.string2Boolean(options.disabled);\n this.isReadOnly = Libs.string2Boolean(options.readonly);\n }\n\n /**\n * Disconnects observers associated with the SelectBox instance,\n * including SelectObserver and DatasetObserver, to clean up resources\n * and stop monitoring changes.\n */\n deInit() {\n const container = this.container || {};\n const { selectObserver, datasetObserver } = container;\n if (selectObserver?.disconnect) selectObserver.disconnect();\n if (datasetObserver?.disconnect) datasetObserver.disconnect();\n }\n \n /**\n * Returns an action API for controlling the SelectBox instance.\n * The API exposes getters/setters and operations that synchronize UI, model, and events:\n * - placeholder: get/set placeholder (updates Placeholder & SearchBox)\n * - oldValue/value/valueArray/valueString/valueOptions/valueText/mask: read current selection(s)\n * - disabled/readonly/visible: proxy component state to dataset & CSS/ARIA\n * - selectAll/deSelectAll: bulk select/deselect (respects multiple & maxSelected, emits beforeChange/change)\n * - setValue: programmatically set selection(s) (array or single), with optional trigger/force\n * - open/close/toggle: control popup visibility (runs beforeShow/show and beforeClose/close hooks)\n * - change: commit selection changes, refresh mask, update AccessoryBox, fire DOM \"change\" & custom events, and auto-close if configured\n * - refreshMask: recompute displayed label (single-select uses selected text; otherwise placeholder)\n * - on: register custom event handlers into options.on\n * - ajax: configure AJAX search behavior via SearchController\n * Internally uses ModelManager/adapter to highlight, resize, and keep ARIA attributes in sync.\n */\n getAction() {\n const container = this.container;\n const superThis = this;\n const bindedMap = Libs.getBinderMap(container.targetElement);\n if (!bindedMap) {\n return null;\n }\n const bindedOptions = bindedMap.options;\n let resp = {\n get placeholder() {\n return container.placeholder.get();\n },\n set placeholder(value) {\n container.placeholder?.set(value);\n container.searchbox?.setPlaceHolder(value);\n },\n get oldValue() {\n return superThis.oldValue;\n },\n set value(value) {\n this.setValue(null, value, true);\n },\n get value() {\n let item_list = this.valueArray;\n \n const valLength = item_list.length;\n return valLength > 1 ? item_list : (valLength == 0 ? \"\" : item_list[0]);\n },\n get valueArray() {\n let item_list = [];\n superThis.getModelOption().forEach(modelElement => {\n modelElement[\"selected\"] && (item_list.push(modelElement[\"value\"]));\n });\n return item_list;\n },\n get valueString() {\n const customDelimiter = bindedOptions.customDelimiter;\n let item_list = this.valueArray;\n\n return item_list.join(customDelimiter);\n },\n get valueOptions() {\n let item_list = [];\n superThis.getModelOption().forEach(modelElement => {\n modelElement[\"selected\"] && (item_list.push(modelElement));\n });\n return item_list;\n },\n get mask() {\n let item_list = [];\n superThis.getModelOption().forEach(modelOption => {\n modelOption[\"selected\"] && (item_list.push(modelOption[\"text\"]));\n });\n return item_list;\n },\n get valueText() {\n var item_list = [];\n superThis.getModelOption().forEach(modelOption => {\n modelOption[\"selected\"] && (item_list.push(modelOption[\"text\"]));\n });\n \n const valLength = item_list.length;\n return valLength > 1 ? item_list : (valLength == 0 ? \"\" : item_list[0]);\n },\n get isOpen() {\n return superThis.isOpen;\n },\n selectAll(evtToken, trigger = true) {\n if (bindedOptions.multiple && bindedOptions.maxSelected > 0) {\n if (superThis.getModelOption().length > bindedOptions.maxSelected) {\n return\n }\n }\n\n if (this.disabled || this.readonly || !bindedOptions.multiple) {\n return;\n }\n\n if (trigger) {\n const beforeChangeToken = iEvents.callEvent([this], ...bindedOptions.on.beforeChange);\n if (beforeChangeToken.isCancel) {\n return;\n }\n\n superThis.oldValue = this.value;\n }\n\n superThis.getModelOption().forEach(modelOption => {\n modelOption[\"selectedNonTrigger\"] = true;\n });\n \n this.change(false, trigger);\n },\n deSelectAll(evtToken, trigger = true) {\n if (this.disabled || this.readonly || !bindedOptions.multiple) {\n return;\n }\n\n if (trigger) {\n const beforeChangeToken = iEvents.callEvent([this], ...bindedOptions.on.beforeChange);\n if (beforeChangeToken.isCancel) {\n return;\n }\n\n superThis.oldValue = this.value;\n }\n\n superThis.getModelOption().forEach(modelOption => {\n modelOption[\"selectedNonTrigger\"] = false;\n });\n \n this.change(false, trigger);\n },\n setValue(evtToken = null, value, trigger = true, force = false) {\n !Array.isArray(value) && (value = [value]);\n\n if (bindedOptions.multiple && bindedOptions.maxSelected > 0) {\n if (value.length > bindedOptions.maxSelected) {\n return\n }\n }\n\n if (!force && (this.disabled || this.readonly)) {\n return;\n }\n\n if (trigger) {\n const beforeChangeToken = iEvents.callEvent([this], ...bindedOptions.on.beforeChange);\n if (beforeChangeToken.isCancel) {\n return;\n }\n\n superThis.oldValue = this.value;\n }\n\n superThis.getModelOption().forEach(modelOption => {\n modelOption[\"selectedNonTrigger\"] = value.some(v => v == modelOption[\"value\"]);\n });\n \n if (!bindedOptions.multiple){\n container.targetElement.value = value[0];\n }\n \n this.change(false, trigger);\n },\n open() {\n if (superThis.isOpen) return false;\n let findAnother = superThis.Selective.find();\n if (!findAnother.isEmpty) {\n /** @type {IEventToken} */\n const closeToken = findAnother.close();\n if (closeToken.isCancel) {\n return false;\n }\n }\n\n if (this.disabled) {\n return false;\n }\n \n const beforeShowToken = iEvents.callEvent([this], ...bindedOptions.on.beforeShow);\n if (beforeShowToken.isCancel) {\n return false;\n }\n\n superThis.isOpen = true;\n container.directive.setDropdown(true);\n\n const adapter = container.popup.optionAdapter;\n const selectedOption = adapter.getSelectedItem();\n if (selectedOption) {\n adapter.setHighlight(selectedOption, false);\n } else {\n adapter.resetHighlight();\n }\n\n if ((!superThis.hasLoadedOnce || superThis.isBeforeSearch) && bindedOptions?.ajax) {\n container.popup.showLoading();\n superThis.hasLoadedOnce = true;\n superThis.isBeforeSearch = false;\n \n setTimeout(() => {\n if (!container.popup || !container.searchController) return;\n container.searchController.search(\"\")\n .then(() => container.popup?.triggerResize?.())\n .catch(err => console.error(\"Initial ajax load error:\", err));\n }, bindedOptions.animationtime);\n }\n \n container.popup.open();\n container.searchbox.show();\n\n container.tags.ViewPanel.setAttribute(\"aria-expanded\", \"true\");\n \n iEvents.callEvent([this], ...bindedOptions.on.show);\n\n return true;\n },\n close() {\n if (!superThis.isOpen) return false;\n\n const beforeCloseToken = iEvents.callEvent([this], ...bindedOptions.on.beforeClose);\n if (beforeCloseToken.isCancel) {\n return false;\n }\n \n superThis.isOpen = false;\n \n container.directive.setDropdown(false);\n container.popup.close(() => {\n container.searchbox.clear(false);\n });\n container.searchbox.hide();\n container.tags.ViewPanel.setAttribute(\"aria-expanded\", \"false\");\n\n iEvents.callEvent([this], ...bindedOptions.on.close);\n\n return true;\n },\n toggle() {\n if (superThis.isOpen) {\n this.close();\n }\n else {\n this.open();\n }\n },\n change(evtToken = null, canTrigger = true) {\n if (canTrigger) {\n if (bindedOptions.multiple && bindedOptions.maxSelected > 0) {\n if (this.valueArray.length > bindedOptions.maxSelected) {\n this.setValue(null, this.oldValue, false, true);\n }\n }\n\n if (this.disabled || this.readonly) {\n this.setValue(null, this.oldValue, false, true);\n return;\n }\n\n const beforeChangeToken = iEvents.callEvent([this, this.value], ...bindedOptions.on.beforeChange);\n \n if (beforeChangeToken.isCancel) {\n this.setValue(null, this.oldValue, false);\n return;\n }\n }\n\n this.refreshMask();\n container.accessorybox.setModelData(this.valueOptions);\n if (canTrigger) {\n if (container.targetElement) {\n iEvents.trigger(container.targetElement, \"change\");\n }\n iEvents.callEvent([this, this.value], ...bindedOptions.on.change);\n\n if (superThis.options.autoclose) {\n this.close();\n }\n }\n },\n refreshMask() {\n let mask = bindedOptions.placeholder;\n if (!bindedOptions.multiple && superThis.getModelOption().length > 0) {\n mask = this.mask[0];\n }\n mask ??= bindedOptions.placeholder;\n \n container.placeholder.set(mask, false);\n container.searchbox.setPlaceHolder(mask);\n },\n on(evtToken, evtName, handle) {\n if (!bindedOptions.on[evtName]) {\n bindedOptions.on[evtName] = [];\n }\n bindedOptions.on[evtName].push(handle);\n },\n ajax(evtToken, obj) {\n container.searchController.setAjax(obj);\n }\n };\n\n this.createSymProp(resp, \"disabled\", \"isDisabled\");\n this.createSymProp(resp, \"readonly\", \"isReadOnly\");\n this.createSymProp(resp, \"visible\", \"isVisible\");\n\n return resp;\n }\n\n /**\n * Creates a property on the given object with custom getter and setter behavior.\n * The getter returns the value stored in a private property on the current instance (`this`),\n * and the setter updates both the private property and a corresponding data-* attribute\n * on the instance's `container.targetElement`.\n *\n * @param {Object} obj - The object on which to define the public property.\n * @param {string} prop - The public property name to create on `obj`.\n * @param {string} privateProp - The private property name on `this` that stores the actual value.\n */\n createSymProp(obj, prop, privateProp) {\n const superThis = this;\n\n Object.defineProperty(obj, prop, {\n get() { return superThis[privateProp]; },\n set(value) {\n superThis[privateProp] = value;\n superThis.container.targetElement.dataset[prop] = value;\n },\n enumerable: true,\n configurable: true\n });\n }\n\n /**\n * Flattens and returns all option models from the current resources.\n * Collects OptionModel instances directly and items within GroupModel.\n * If `isSelected` is a boolean, filters by selection state; otherwise returns all.\n *\n * @param {boolean|null} [isSelected=null] - Optional filter to return only selected or unselected options.\n * @returns {(GroupModel|OptionModel)[]} - A flat array of option models (and/or group items).\n */\n getModelOption(isSelected = null) {\n if (!this.optionModelManager) return [];\n\n const { modelList } = this.optionModelManager.getResources();\n\n const flatOptions = [];\n for (const m of modelList) {\n if (m instanceof OptionModel) {\n flatOptions.push(m);\n } else if (m instanceof GroupModel) {\n if (Array.isArray(m.items) && m.items.length) {\n flatOptions.push(...m.items);\n }\n }\n }\n\n if (typeof isSelected === \"boolean\") {\n return flatOptions.filter(o => o.selected === isSelected);\n }\n return flatOptions;\n }\n}","/**\n * @class\n */\nexport class ElementAdditionObserver {\n #isActive = false;\n /** @type {MutationObserver} */\n #observer = null;\n\n /** @type {Function[]} */\n #actions = [];\n\n /**\n * Registers a callback to be invoked whenever a matching element is detected being added to the DOM.\n *\n * @param {(el: HTMLSelectElement) => void} action - Function executed with the newly added element.\n */\n onDetect(action) {\n this.#actions.push(action);\n }\n\n /**\n * Clears all previously registered detection callbacks.\n */\n clearDetect() {\n this.#actions = [];\n }\n\n /**\n * Starts observing the document for additions of elements matching the given tag.\n * Detects both direct additions and nested matches within added subtrees.\n *\n * @param {string} tag - The tag name to watch for (e.g., \"select\", \"div\").\n */\n start(tag) {\n if (this.#isActive) {\n return;\n }\n this.#isActive = true;\n const upperTag = tag.toUpperCase();\n const lowerTag = tag.toLowerCase();\n this.#observer = new MutationObserver((mutations) => {\n mutations.forEach((mutation) => {\n mutation.addedNodes.forEach((node) => {\n const subnode = /** @type {HTMLElement} */ (node);\n if (subnode.nodeType === 1) {\n if (subnode.tagName === upperTag) {\n this.#handle(subnode);\n }\n \n const selects = subnode.querySelectorAll(lowerTag);\n selects.forEach((select) => {\n this.#handle(select);\n });\n }\n });\n });\n });\n\n this.#observer.observe(document.body, {\n childList: true,\n subtree: true\n });\n }\n\n /**\n * Stops observing for element additions and releases internal resources.\n * No-ops if the observer is not active.\n */\n stop() {\n if (!this.#isActive) {\n return;\n }\n this.#isActive = false;\n this.#observer.disconnect();\n this.#observer = null;\n }\n\n /**\n * Internal handler that invokes all registered detection callbacks for the provided element.\n *\n * @param {Element} element - The element that was detected as added to the DOM.\n */\n #handle(element) {\n this.#actions.forEach(action => {\n action(element);\n });\n }\n}","import {Libs} from \"./libs.js\";\nimport {iEvents} from \"./ievents.js\";\nimport {SelectBox} from \"../components/selectbox.js\";\nimport { ElementAdditionObserver } from \"../services/ea-observer.js\";\n\n/**\n * @class\n */\nexport class Selective {\n /** @type {ElementAdditionObserver} */\n EAObserver = null;\n\n static bindedQueries = new Map();\n\n /**\n * Binds Selective UI to all <select> elements matching the query.\n * Merges provided options with defaults, schedules `on.load` callbacks,\n * initializes each matching select, and records the binding for auto-rebinding.\n *\n * @param {string} query - CSS selector for target <select> elements.\n * @param {object} options - Configuration overrides merged with defaults.\n */\n static bind(query, options) {\n options = Libs.mergeConfig(Libs.getDefaultConfig(), options);\n\n this.bindedQueries.set(query, options);\n\n const superThis = this;\n const doneToken = Libs.randomString();\n Libs.timerProcess.setExecute(doneToken, () => {\n iEvents.callEvent([superThis.find(query)], ...options.on.load);\n Libs.timerProcess.clearExecute(doneToken);\n options.on.load = [];\n });\n \n /** @type {HTMLSelectElement[]} */\n const selectElements = /** @type {HTMLSelectElement[]} */ (Libs.getElements(query));\n \n selectElements.forEach(item => {\n (async() => {\n if (\"SELECT\" == item.tagName) {\n Libs.removeUnbinderMap(item);\n if (this.applySelectBox(item, options)) {\n Libs.timerProcess.run(doneToken);\n }\n }\n })();\n });\n\n if (!Libs.getBindedCommand().includes(query)) {\n Libs.getBindedCommand().push(query);\n }\n }\n\n \n /**\n * A dynamic action API object produced by `find()`.\n * Contains `isEmpty` plus dynamically attached properties (get/set or functions).\n * \n * @typedef {Record<string, object> & { isEmpty: boolean }} ActionApi\n * \n * Finds the first bound SelectBox actions for a given query (or all bound queries if \"*\").\n * Returns an API object with methods assembled from the bound action definitions.\n *\n * @param {string} [query=\"*\"] - CSS selector or \"*\" to search all bound instances.\n * @returns {ActionApi} - Aggregated actions; {isEmpty:true} if none found.\n */\n static find(query = \"*\") {\n let actions = { isEmpty: true };\n\n if (query == \"*\") {\n query = Libs.getBindedCommand().join(\", \");\n if (query == \"\") {\n return actions;\n }\n }\n\n const sels = /** @type {HTMLElement[]} */ (Libs.getElements(query));\n if (sels.length == 0) {\n return actions;\n }\n \n const binded = Libs.getBinderMap(sels[0]);\n if (!binded) {\n return actions;\n }\n \n for (let actionName in binded.action) {\n actions[actionName] = this.#getProperties(actionName, binded.action)\n }\n Object.keys(binded.action);\n \n if (actions) {\n /** @type {ActionApi} */\n let response = {};\n for (let actionKey in actions) {\n\n /** @type {IPropertiesType} */\n const action = actions[actionKey];\n \n switch (action.type) {\n case \"get-set\":\n this.#buildGetSetAction(response, action.name, sels);\n break;\n \n case \"func\":\n this.#buildFuntionAction(response, action.name, sels);\n break;\n \n default:\n break;\n }\n }\n \n response.isEmpty = false;\n return response;\n }\n }\n\n /**\n * Starts observing the document for newly added <select> elements and applies\n * Selective bindings automatically when they match previously bound queries.\n */\n static Observer() {\n this.EAObserver = new ElementAdditionObserver();\n this.EAObserver.onDetect((selectElement) => {\n this.bindedQueries.forEach((options, query) => {\n try {\n if (selectElement.matches(query)) {\n this.applySelectBox(selectElement, options);\n }\n } catch (error) {\n console.warn(`Invalid selector: ${query}`, error);\n }\n });\n });\n this.EAObserver.start(\"select\");\n }\n\n /**\n * Destroys Selective instances. Supports:\n * - destroyAll(): when target is null,\n * - destroyByQuery(): when target is a selector string,\n * - destroyElement(): when target is an HTMLSelectElement.\n *\n * @param {null|string|HTMLSelectElement} target - Target to destroy.\n */\n static destroy(target = null) {\n if (target === null) {\n this.destroyAll();\n } else if (typeof target === \"string\") {\n this.destroyByQuery(target);\n } else if (target instanceof HTMLSelectElement) {\n this.destroyElement(target);\n }\n }\n\n /**\n * Destroys all bound Selective instances and clears bindings/state.\n * Stops the ElementAdditionObserver.\n */\n static destroyAll() {\n const bindedCommands = Libs.getBindedCommand();\n \n bindedCommands.forEach(query => {\n this.destroyByQuery(query);\n });\n\n this.bindedQueries.clear();\n Libs.getBindedCommand().length = 0;\n\n this.EAObserver.stop();\n }\n\n /**\n * Destroys Selective instances bound to the specified query and removes\n * the query from the binding registry.\n *\n * @param {string} query - CSS selector whose Selective instances should be destroyed.\n */\n static destroyByQuery(query) {\n const selectElements = /** @type {HTMLSelectElement[]} */ (Libs.getElements(query));\n \n selectElements.forEach(element => {\n if (element.tagName === \"SELECT\") {\n this.destroyElement(element);\n }\n });\n\n this.bindedQueries.delete(query);\n const commands = Libs.getBindedCommand();\n const index = commands.indexOf(query);\n if (index > -1) {\n commands.splice(index, 1);\n }\n }\n\n /**\n * Destroys a single Selective instance attached to the given <select> element,\n * detaches UI, restores original select state, and removes binder map entry.\n *\n * @param {HTMLSelectElement} selectElement - The target <select> element to clean up.\n */\n static destroyElement(selectElement) {\n const bindMap = Libs.getBinderMap(selectElement);\n if (!bindMap) return;\n\n Libs.setUnbinderMap(selectElement, bindMap);\n\n const wasObserving = !!this.EAObserver;\n if (wasObserving) this.EAObserver.stop();\n\n try { bindMap.self.deInit?.(); } catch (_) {}\n\n const wrapper = bindMap.container?.element || selectElement.parentElement;\n\n selectElement.style.display = \"\";\n selectElement.style.visibility = \"\";\n selectElement.disabled = false;\n delete selectElement.dataset.selectiveId;\n\n if (wrapper && wrapper.parentNode) {\n wrapper.parentNode.replaceChild(selectElement, wrapper);\n } else {\n document.body.appendChild(selectElement);\n }\n\n Libs.removeBinderMap(selectElement);\n\n if (wasObserving && this.bindedQueries.size > 0) {\n this.EAObserver.start(\"select\");\n }\n }\n\n /**\n * Unbinds a previously bound query from auto-apply and auto-observe lists.\n * Stops the observer when no bound queries remain.\n *\n * @param {string} query - The CSS selector to unbind.\n */\n // static unbind(query) {\n // this.bindedQueries.delete(query);\n \n // const commands = Libs.getBindedCommand();\n // const index = commands.indexOf(query);\n // if (index > -1) {\n // commands.splice(index, 1);\n // }\n\n // if (this.bindedQueries.size === 0) {\n // this.EAObserver.stop();\n // }\n // }\n\n /**\n * Rebinds a query by destroying existing instances and binding anew\n * with the provided options.\n *\n * @param {string} query - CSS selector to rebind.\n * @param {object} options - Configuration for the new binding.\n */\n static rebind(query, options) {\n this.destroyByQuery(query);\n this.bind(query, options);\n }\n\n /**\n * Applies SelectBox enhancement to a single <select> element:\n * builds per-instance IDs, merges element dataset into options,\n * creates SelectBox, stores binder map with action API, and wires toggle on mouseup.\n *\n * @param {HTMLSelectElement} selectElement - The native <select> to enhance.\n * @param {object} options - Configuration used for this instance.\n * @returns {boolean} - False if already bound; true if successfully applied.\n */\n static applySelectBox(selectElement, options) {\n if (Libs.getBinderMap(selectElement) || Libs.getUnbinderMap(selectElement)) {\n return false;\n }\n \n const SEID = Libs.randomString(8);\n const options_cfg = Libs.buildConfig(selectElement, options);\n options_cfg.SEID = SEID\n options_cfg.SEID_LIST = `seui-${SEID}-optionlist`;\n options_cfg.SEID_HOLDER = `seui-${SEID}-placeholder`;\n const bindMap = {options: options_cfg};\n \n Libs.setBinderMap(selectElement, bindMap);\n const selectBox = new SelectBox(selectElement, this);\n bindMap.container = selectBox.container;\n bindMap.action = selectBox.getAction();\n bindMap.self = selectBox;\n\n selectBox.container.view.addEventListener(\"mouseup\", () => {\n bindMap.action.toggle();\n });\n\n return true;\n }\n\n /**\n * Determines the property type for an action name on the provided object.\n * Classifies as:\n * - \"get-set\" when a getter exists (or a setter with non-function value),\n * - \"func\" when the property is a function,\n * - \"variable\" otherwise.\n *\n * @typedef {Object} IPropertiesType\n * @property {string} type - One of \"variable\" | \"get-set\" | \"func\".\n * @property {string} name - The original action name.\n *\n * @param {string} actionName - The property key to inspect.\n * @param {*} action - The object containing the property.\n * @returns {IPropertiesType} - The derived property type and name.\n */\n static #getProperties(actionName, action) {\n const descriptor = Object.getOwnPropertyDescriptor(action, actionName);\n let type = \"variable\";\n\n if (descriptor.get || (descriptor.set && typeof action[actionName] !== \"function\")) {\n type = \"get-set\";\n }\n else if (typeof action[actionName] === \"function\") {\n type = \"func\";\n }\n\n return {\n type,\n name: actionName\n }\n }\n\n /**\n * Defines a get/set property on the target object that proxies to each bound element's action API.\n * Getter reads from the first element; setter writes the value to all elements.\n *\n * @param {Object} object - The target object to define the property on.\n * @param {string} name - The property name to expose.\n * @param {HTMLElement[]} els - The list of bound elements to proxy.\n */\n static #buildGetSetAction(object, name, els) {\n Object.defineProperty(object, name, {\n get() {\n const binded = Libs.getBinderMap(els[0]);\n return binded.action[name];\n },\n set(value) {\n els.forEach(el => {\n const binded = Libs.getBinderMap(el);\n if (binded) {\n binded.action[name] = value;\n }\n });\n },\n enumerable: true,\n configurable: true\n });\n }\n\n /**\n * Creates a function on the target object that invokes the corresponding action\n * across all bound elements in order, respecting the event token flow control.\n * Stops iteration if the token indicates propagation should not continue.\n *\n * @param {Object} object - The target object to attach the function to.\n * @param {string} name - The function name to expose.\n * @param {HTMLElement[]} els - The list of bound elements to invoke against.\n */\n static #buildFuntionAction(object, name, els) {\n object[name] = (...params) => {\n for (let index = 0; index < els.length; index++) {\n const el = els[index];\n const binded = Libs.getBinderMap(el);\n if (!binded) {\n continue;\n }\n const evtToken = iEvents.buildEventToken();\n binded.action[name](evtToken.callback, ...params)\n if (!evtToken.token.isContinue) {\n break;\n }\n }\n return object;\n }\n }\n}","/**\n * Checks for a previously loaded global library instance by name.\n * If found (with `__loaded` flag), logs a warning and returns true; otherwise\n * initializes a loading placeholder on `window[name]` and returns false.\n *\n * @param {string} LIB_NAME - The global namespace key to check on `window`.\n * @returns {boolean} - True if a loaded instance already exists; false otherwise.\n */\nexport function checkDuplicate(LIB_NAME) {\n if (typeof window === \"undefined\") return false;\n \n if (window[LIB_NAME] && window[LIB_NAME].__loaded) {\n console.warn(\n `[${LIB_NAME}] Already loaded (v${window[LIB_NAME].__version}). ` +\n `Using existing instance. Please remove duplicate <script> tags.`\n );\n return true;\n }\n \n window[LIB_NAME] = window[LIB_NAME] || {};\n window[LIB_NAME].__loading = true;\n return false;\n}\n\n/**\n * Marks a global library namespace as fully loaded, sets version metadata,\n * merges its public API into `window[name]`, freezes the object to prevent\n * further mutation, and logs a success message.\n *\n * @param {string} name - The global namespace key on `window`.\n * @param {string} version - Semantic version string of the library.\n * @param {Object} api - Public API surface to expose under `window[name]`.\n * @returns {void}\n */\nexport function markLoaded(name, version, api) {\n if (typeof window === \"undefined\") return;\n \n window[name].__loaded = true;\n window[name].__loading = false;\n window[name].__version = version;\n \n Object.assign(window[name], api);\n \n Object.freeze(window[name]);\n \n console.log(`[${name}] v${version} loaded successfully`);\n}","import \"../css/index.css\";\nimport \"../css/components/selectbox.css\";\nimport \"../css/components/placeholder.css\";\nimport \"../css/components/directive.css\";\nimport \"../css/components/empty-state.css\";\nimport \"../css/components/loading-state.css\";\nimport \"../css/components/optgroup.css\";\nimport \"../css/components/popup.css\";\nimport \"../css/components/searchbox.css\";\nimport \"../css/components/option-handle.css\";\nimport \"../css/components/option.css\";\nimport \"../css/components/accessorybox.css\";\n\nimport \"./types/adapter.type\";\nimport \"./types/effector.type\";\nimport \"./types/ievents.type\";\nimport \"./types/libs.type\";\nimport \"./types/model.type\";\nimport \"./types/recyclerview.type\";\nimport \"./types/resize-observer.type\";\nimport \"./types/view.option.type\";\nimport \"./types/view.type\";\n\nimport { Selective } from \"./utils/selective\";\nimport { checkDuplicate, markLoaded } from \"./utils/guard\";\nimport { Libs } from \"./utils/libs\";\nimport { Effector } from \"./services/effector\";\n\nexport const version = \"1.0.3\";\nexport const name = \"SelectiveUI\";\n\nconst alreadyLoaded = checkDuplicate(name);\n\n/**\n * Enhances all <select> elements matching the query with Selective UI.\n * If a prior global instance is already loaded, proxies the call to it; otherwise uses local Selective.bind.\n *\n * @param {string} query - CSS selector for target <select> elements.\n * @param {object} [options={}] - Configuration overrides merged with defaults.\n */\nexport function bind(query, options = {}) {\n if (alreadyLoaded && typeof window !== \"undefined\" && window[name]) {\n return window[name].bind(query, options);\n }\n\n Selective.bind(query, options);\n}\n\n/**\n * Retrieves the dynamic action API for bound instances matching the query.\n * Proxies to an already-loaded global instance if present; otherwise uses local Selective.find.\n *\n * @param {string} query - CSS selector identifying bound instances.\n * @returns {{isEmpty:boolean} & Record<string, unknown>} - Action API; {isEmpty:true} if none found.\n */\nexport function find(query) {\n if (alreadyLoaded && typeof window !== \"undefined\" && window[name]) {\n return window[name].find(query);\n }\n\n return Selective.find(query);\n}\n\n/**\n * Destroys Selective instances associated with the given query.\n * Proxies to a global loaded instance if available; otherwise uses local Selective.destroy.\n *\n * @param {string} query - CSS selector identifying instances to tear down.\n * @returns {void}\n */\nexport function destroy(query) {\n if (alreadyLoaded && typeof window !== \"undefined\" && window[name]) {\n return window[name].destroy(query);\n }\n\n return Selective.destroy(query);\n}\n\n/**\n * Rebinds Selective for the given query by destroying existing instances and binding anew.\n * Proxies to a global loaded instance if available; otherwise uses local Selective.rebind.\n *\n * @param {string} query - CSS selector for target <select> elements.\n * @param {object} [options={}] - Configuration overrides for the new binding.\n * @returns {void}\n */\nexport function rebind(query, options = {}) {\n if (alreadyLoaded && typeof window !== \"undefined\" && window[name]) {\n return window[name].rebind(query, options);\n }\n\n return Selective.rebind(query, options);\n}\n\n/**\n * Returns an effector instance for a given element, enabling expand/collapse/resize animations.\n * Proxies to a global loaded instance if available; otherwise constructs a local Effector.\n *\n * @param {string|HTMLElement} element - CSS selector or element to control.\n * @returns {EffectorInterface} - The effector utility bound to the element.\n */\nexport function effector(element) {\n if (alreadyLoaded && typeof window !== \"undefined\" && window[name]) {\n return window[name].effector(element);\n }\n\n return Effector(element);\n}\n\nif (!alreadyLoaded) {\n let initialized = false;\n\n function init() {\n if (initialized) return;\n initialized = true;\n \n document.addEventListener(\"mousedown\", () => {\n const sels = Libs.getBindedCommand();\n if (sels.length > 0) {\n const optanObj = Selective.find(sels.join(\", \"));\n if (!optanObj.isEmpty) {\n optanObj.close();\n }\n }\n });\n\n Selective.Observer();\n \n markLoaded(name, version, { bind, find, destroy, rebind, effector, version });\n }\n\n if (document.readyState === \"loading\") {\n document.addEventListener(\"DOMContentLoaded\", init);\n } else {\n init();\n }\n}"],"names":["Effector.Effector"],"mappings":";;;;;;;IAAA;IACA;IACA;IACO,MAAM,QAAQ,CAAC;IACtB,IAAI,aAAa,GAAG;IACpB,QAAQ,SAAS,EAAE,IAAI;IACvB,QAAQ,cAAc,EAAE,KAAK;IAC7B,QAAQ,QAAQ,EAAE,KAAK;IACvB,QAAQ,QAAQ,EAAE,MAAM;IACxB,QAAQ,KAAK,EAAE,KAAK;IACpB,QAAQ,WAAW,EAAE,IAAI;IACzB,QAAQ,SAAS,EAAE,MAAM;IACzB,QAAQ,MAAM,EAAE,MAAM;IACtB,QAAQ,WAAW,EAAE,OAAO;IAC5B,QAAQ,cAAc,EAAE,OAAO;IAC/B,QAAQ,QAAQ,EAAE,KAAK;IACvB,QAAQ,QAAQ,EAAE,KAAK;IACvB,QAAQ,SAAS,EAAE,IAAI;IACvB,QAAQ,YAAY,EAAE,IAAI;IAC1B,QAAQ,WAAW,EAAE,cAAc;IACnC,QAAQ,OAAO,EAAE,EAAE;IACnB,QAAQ,SAAS,EAAE,KAAK;IACxB,QAAQ,UAAU,EAAE,IAAI;IACxB,QAAQ,SAAS,EAAE,IAAI;IACvB,QAAQ,UAAU,EAAE,IAAI;IACxB,QAAQ,YAAY,EAAE,IAAI;IAC1B,QAAQ,OAAO,EAAE,IAAI;IACrB,QAAQ,SAAS,EAAE,KAAK;IACxB,QAAQ,eAAe,EAAE,GAAG;IAC5B,QAAQ,WAAW,EAAE,eAAe;IACpC,QAAQ,UAAU,EAAE,mBAAmB;IACvC,QAAQ,YAAY,EAAE,WAAW;IACjC,QAAQ,aAAa,EAAE,YAAY;IACnC,QAAQ,eAAe,EAAE,cAAc;IACvC,QAAQ,qBAAqB,EAAE,YAAY;IAC3C,QAAQ,aAAa,EAAE,GAAG;IAC1B,QAAQ,eAAe,EAAE,GAAG;IAC5B,QAAQ,SAAS,EAAE,IAAI;IACvB,QAAQ,WAAW,EAAE,CAAC;IACtB,QAAQ,WAAW,EAAE,MAAM;IAC3B,QAAQ,WAAW,EAAE,QAAQ;IAC7B,QAAQ,SAAS,EAAE,KAAK;IACxB,QAAQ,UAAU,EAAE,MAAM;IAC1B,QAAQ,WAAW,EAAE,MAAM;IAC3B,QAAQ,iBAAiB,EAAE,KAAK;IAChC,QAAQ,aAAa,EAAE,OAAO;IAC9B,QAAQ,IAAI,EAAE,IAAI;IAClB,QAAQ,EAAE,EAAE;IACZ,YAAY,IAAI,EAAE,EAAE;IACpB,YAAY,UAAU,EAAE,EAAE;IAC1B,YAAY,IAAI,EAAE,EAAE;IACpB,YAAY,YAAY,EAAE,EAAE;IAC5B,YAAY,MAAM,EAAE,EAAE;IACtB,YAAY,WAAW,EAAE,EAAE;IAC3B,YAAY,KAAK,EAAE;IACnB;IACA,KAAK;IACL,IAAI,SAAS,GAAG,IAAI,GAAG;IACvB,IAAI,WAAW,GAAG,IAAI,GAAG;IACzB,IAAI,aAAa,GAAG,EAAE;IACtB;;IC1DA;IACA;IACA;IACO,MAAM,IAAI,CAAC;IAClB;IACA,IAAI,OAAO,SAAS,GAAG,IAAI;IAC3B;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,WAAW,QAAQ,GAAG;IAC1B,QAAQ,CAAC,IAAI,CAAC,SAAS,KAAK,IAAI,CAAC,SAAS,GAAG,IAAI,QAAQ,EAAE,CAAC;IAC5D,QAAQ,OAAO,IAAI,CAAC,SAAS;IAC7B,IAAI;;IAEJ;IACA;IACA;IACA;IACA,IAAI,OAAO,YAAY,GAAG;IAC1B,QAAQ,aAAa,EAAE,EAAE;IACzB,QAAQ,UAAU,EAAE,SAAS,UAAU,EAAE,OAAO,EAAE,OAAO,GAAG,EAAE,EAAE,IAAI,GAAG,KAAK,EAAE;IAC9E,YAAY,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,EAAE;IACjD,gBAAgB,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,GAAG,EAAE;IACnD,YAAY;IACZ,YAAY,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IACjG,QAAQ,CAAC,EAAE,YAAY,EAAE,SAAS,UAAU,EAAE;IAC9C,YAAY,OAAO,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC;IACjD,QAAQ,CAAC,EAAE,GAAG,EAAE,SAAS,UAAU,EAAE,GAAG,MAAM,EAAE;IAChD,YAAY,IAAI,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC;;IAEzD,YAAY,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,EAAE;IAC/C,gBAAgB,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,GAAG,EAAE;IACjD,YAAY;IACZ;IACA,YAAY,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE;IACxC,gBAAgB,MAAM,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC;;IAE7C,gBAAgB,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,EAAE;IACxD,oBAAoB,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE;IAC1D,gBAAgB;;IAEhB,gBAAgB,IAAI,OAAO,EAAE;IAC7B,oBAAoB,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC;IACnE,oBAAoB,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,GAAG,UAAU,CAAC,MAAM;IACzE,wBAAwB,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,GAAG,MAAM,GAAG,IAAI,CAAC;IACrF,wBAAwB,OAAO,CAAC,IAAI,KAAK,OAAO,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC;IACpF,oBAAoB,CAAC,EAAE,OAAO,CAAC,OAAO,CAAC;IACvC,gBAAgB;IAChB,YAAY;IACZ,QAAQ,CAAC,EAAE,WAAW,EAAE;IACxB;;IAEA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,OAAO,aAAa,CAAC,KAAK,EAAE;IAChC,QAAQ,IAAI,OAAO,KAAK,KAAK,SAAS,EAAE,OAAO,KAAK;IACpD,QAAQ,OAAO,KAAK,IAAI,IAAI,IAAI,KAAK,KAAK,EAAE,IAAI,KAAK,KAAK,CAAC,IAAI,KAAK,KAAK,GAAG;IAC5E,IAAI;;IAEJ;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,OAAO,YAAY,CAAC,GAAG,EAAE;IAC7B,QAAQ,IAAI,GAAG,KAAK,IAAI,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE;IACrD,YAAY,OAAO,GAAG;IACtB,QAAQ;;IAER,QAAQ,IAAI,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE;;IAE/C,QAAQ,KAAK,IAAI,GAAG,IAAI,GAAG,EAAE;IAC7B,YAAY,IAAI,GAAG,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE;IACzC,gBAAgB,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACvD,YAAY;IACZ,QAAQ;;IAER,QAAQ,OAAO,IAAI;IACnB,IAAI;;IAEJ;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,OAAO,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE;IACpC,QAAQ,IAAI,MAAM,aAAa,EAAE;IACjC,QAAQ,IAAI,UAAU,SAAS,gEAAgE;IAC/F,QAAQ,IAAI,gBAAgB,GAAG,UAAU,CAAC,MAAM;IAChD,QAAQ,MAAM,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,GAAG;IAC3C,YAAY,MAAM,IAAI,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,gBAAgB,CAAC,CAAC;IACrF,QAAQ;IACR,QAAQ,OAAO,MAAM;IACrB,IAAI;;IAEJ;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,OAAO,WAAW,CAAC,WAAW,EAAE;IACpC,QAAQ,IAAI,CAAC,WAAW,EAAE,OAAO,EAAE;;IAEnC,QAAQ,IAAI,OAAO,WAAW,KAAK,QAAQ,EAAE;IAC7C,YAAY,MAAM,QAAQ,GAAG,QAAQ,CAAC,gBAAgB,CAAC,WAAW,CAAC;IACnE,YAAY,OAAO,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC;IACvC,QAAQ;;IAER,QAAQ,IAAI,WAAW,YAAY,OAAO,EAAE;IAC5C,YAAY,OAAO,CAAC,WAAW,CAAC;IAChC,QAAQ;;IAER,QAAQ,IAAI,WAAW,YAAY,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE;IAC3E,YAAY,OAAO,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC;IAC1C,QAAQ;;IAER,QAAQ,OAAO,EAAE;IACjB,IAAI;;IAEJ;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,OAAO,WAAW,CAAC,IAAI,GAAG,EAAE,EAAE;IAClC,QAAQ,OAAO,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC;IAC7E,IAAI;;IAEJ;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,OAAO,UAAU,CAAC,IAAI,GAAG,QAAQ,CAAC,eAAe,EAAE,WAAW,GAAG,IAAI,EAAE,gBAAgB,GAAG,KAAK,EAAE;IACrG,QAAQ,MAAM,UAAU,GAAG,EAAE,GAAG,WAAW,EAAE;IAC7C;IACA;IACA,QAAQ,MAAM,gBAAgB,GAAG,gBAAgB,GAAG,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;;IAEnG,QAAQ,IAAI,OAAO,UAAU,CAAC,SAAS,KAAK,QAAQ,EAAE;IACtD,YAAY,gBAAgB,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,SAAS,CAAC;IAChE,QAAQ,CAAC,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE;IACxD,YAAY,gBAAgB,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,UAAU,CAAC,SAAS,CAAC;IACnE,QAAQ;IACR,QAAQ,OAAO,UAAU,CAAC,SAAS;;IAEnC,QAAQ,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC,OAAO,CAAC,QAAQ,IAAI;IACjD,YAAY,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,QAAQ,CAAC,EAAE,UAAU,CAAC,QAAQ,CAAC,CAAC;IAC3E,YAAY,OAAO,UAAU,CAAC,QAAQ,CAAC;IACvC,QAAQ,CAAC,CAAC;;IAEV,QAAQ,IAAI,UAAU,CAAC,IAAI,EAAE;IAC7B,YAAY,gBAAgB,CAAC,YAAY,CAAC,MAAM,EAAE,UAAU,CAAC,IAAI,CAAC;IAClE,YAAY,OAAO,UAAU,CAAC,IAAI;IAClC,QAAQ;;IAER,QAAQ,IAAI,UAAU,CAAC,QAAQ,EAAE;IACjC,YAAY,gBAAgB,CAAC,YAAY,CAAC,WAAW,EAAE,UAAU,CAAC,QAAQ,CAAC;IAC3E,YAAY,OAAO,UAAU,CAAC,QAAQ;IACtC,QAAQ;;IAER,QAAQ,IAAI,UAAU,CAAC,cAAc,EAAE;IACvC,YAAY,gBAAgB,CAAC,YAAY,CAAC,iBAAiB,EAAE,UAAU,CAAC,cAAc,CAAC;IACvF,YAAY,OAAO,UAAU,CAAC,cAAc;IAC5C,QAAQ;;IAER,QAAQ,IAAI,UAAU,CAAC,YAAY,EAAE;IACrC,YAAY,gBAAgB,CAAC,YAAY,CAAC,eAAe,EAAE,UAAU,CAAC,YAAY,CAAC;IACnF,YAAY,OAAO,UAAU,CAAC,YAAY;IAC1C,QAAQ;;IAER,QAAQ,IAAI,UAAU,CAAC,YAAY,EAAE;IACrC,YAAY,gBAAgB,CAAC,YAAY,CAAC,eAAe,EAAE,UAAU,CAAC,YAAY,CAAC;IACnF,YAAY,OAAO,UAAU,CAAC,YAAY;IAC1C,QAAQ;;IAER,QAAQ,IAAI,UAAU,CAAC,mBAAmB,EAAE;IAC5C,YAAY,gBAAgB,CAAC,YAAY,CAAC,sBAAsB,EAAE,UAAU,CAAC,mBAAmB,CAAC;IACjG,YAAY,OAAO,UAAU,CAAC,mBAAmB;IACjD,QAAQ;;IAER,QAAQ,IAAI,UAAU,CAAC,gBAAgB,EAAE;IACzC,YAAY,gBAAgB,CAAC,YAAY,CAAC,mBAAmB,EAAE,UAAU,CAAC,gBAAgB,CAAC;IAC3F,YAAY,OAAO,UAAU,CAAC,gBAAgB;IAC9C,QAAQ;;IAER,QAAQ,IAAI,UAAU,CAAC,KAAK,EAAE;IAC9B,YAAY,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,KAAK;IACvE,gBAAgB,gBAAgB,CAAC,gBAAgB,CAAC,GAAG,EAAE,KAAK,CAAC;IAC7D,YAAY,CAAC,CAAC;IACd,YAAY,OAAO,UAAU,CAAC,KAAK;IACnC,QAAQ;;IAER,QAAQ,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,KAAK;IAC7D,YAAY,IAAI,KAAK,KAAK,IAAI,EAAE;IAChC,gBAAgB,gBAAgB,CAAC,eAAe,CAAC,GAAG,CAAC;IACrD,YAAY,CAAC,MAAM;IACnB,gBAAgB,gBAAgB,CAAC,GAAG,CAAC,GAAG,KAAK;IAC7C,YAAY;IACZ,QAAQ,CAAC,CAAC;;IAEV,QAAQ,OAAO,gBAAgB;IAC/B,IAAI;;IAEJ;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,OAAO,aAAa,CAAC,IAAI,EAAE;IAC/B,QAAQ,IAAI,IAAI,YAAY,OAAO,EAAE;IACrC,YAAY,OAAO,IAAI;IACvB,QAAQ;IACR,QAAQ,MAAM,IAAI,SAAS,CAAC,wBAAwB,CAAC;IACrD,IAAI;;;IAGJ;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,OAAO,SAAS,CAAC,MAAM,EAAE;IAC7B,QAAQ;IACR,YAAY,IAAI,CAAC,SAAS,CAAC,MAAM;IACjC;IACA,IAAI;;IAEJ;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,OAAO,SAAS,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI,EAAE,SAAS,GAAG,KAAK,EAAE,UAAU,GAAG,KAAK,EAAE,aAAa,GAAG,EAAE,EAAE;IACxG,QAAQ,IAAI,IAAI,GAAG,IAAI;IACvB,QAAQ,KAAK,IAAI,GAAG,IAAI,MAAM,EAAE;IAChC,YAAY,MAAM,SAAS,GAAG,MAAM,CAAC,GAAG,CAAC;IACzC;IACA,YAAY,MAAM,GAAG,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,OAAO,IAAI,SAAS,CAAC,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,GAAG,CAAC;IAClG,YAAY,aAAa,CAAC,GAAG,CAAC,GAAG,GAAG;IACpC,YAAY,SAAS,CAAC,KAAK,IAAI,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,aAAa,CAAC;;IAEhG,YAAY,IAAI,OAAO,EAAE;IACzB,gBAAgB,IAAI,SAAS,EAAE;IAC/B,oBAAoB,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC;IACxC,gBAAgB;IAChB,qBAAqB;IACrB,oBAAoB,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC;IACvC,gBAAgB;IAChB,YAAY;IACZ,iBAAiB,IAAI,CAAC,UAAU,IAAI,CAAC,IAAI,EAAE;IAC3C,gBAAgB,IAAI,GAAG,GAAG;IAC1B,YAAY;IACZ,QAAQ;IACR,QAAQ,IAAI,CAAC,UAAU,EAAE;IACzB,YAAY,aAAa,CAAC,EAAE,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;;IAEnD,YAAY,IAAI,CAAC,OAAO,EAAE;IAC1B,gBAAgB,aAAa,GAAG,CAAC,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,IAAI;IAChE,YAAY;IACZ,QAAQ;IACR,QAAQ,OAAO,aAAa;IAC5B,IAAI;;IAEJ;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,OAAO,QAAQ,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,GAAG,IAAI,EAAE;IACvD,QAAQ,MAAM,YAAY,GAAG,OAAO,MAAM,KAAK,QAAQ,GAAG,EAAE,CAAC,MAAM,GAAG,KAAK,EAAE,GAAG,EAAE,GAAG,MAAM,EAAE;IAC7F,gBAAgB,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC;;IAE1D,QAAQ,IAAI,UAAU,IAAI,OAAO,UAAU,IAAI,QAAQ,CAAC;IACxD,YAAY,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC;IACvD,gBAAgB,MAAM,IAAI,GAAG,UAAU,CAAC,CAAC,CAAC;IAC1C,gBAAgB,IAAI,IAAI,EAAE;IAC1B,oBAAoB,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,YAAY,CAAC;IAC9D,gBAAgB;IAChB,YAAY;IACZ,QAAQ;IACR,IAAI;;IAEJ;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,OAAO,WAAW,CAAC,OAAO,EAAE,OAAO,EAAE;IACzC,QAAQ,IAAI,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC;;IAElD,QAAQ,KAAK,IAAI,SAAS,IAAI,SAAS,EAAE;IACzC,YAAY,IAAI,OAAO,CAAC,SAAS,CAAC,EAAE;IACpC,gBAAgB,SAAS,CAAC,SAAS,CAAC,GAAG,OAAO,CAAC,SAAS,CAAC;IACzD,YAAY;IACZ,iBAAiB,IAAI,OAAO,OAAO,EAAE,OAAO,CAAC,SAAS,CAAC,KAAK,WAAW,EAAE;IACzE,gBAAgB,SAAS,CAAC,SAAS,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC;IACjE,YAAY;IACZ,QAAQ;IACR,QAAQ,OAAO,SAAS;IACxB,IAAI;;IAEJ;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,OAAO,WAAW,CAAC,GAAG,MAAM,EAAE;IAClC,QAAQ,IAAI,MAAM,CAAC,MAAM,IAAI,CAAC,EAAE;IAChC,YAAY,OAAO,EAAE;IACrB,QAAQ;IACR,QAAQ,IAAI,MAAM,CAAC,MAAM,IAAI,CAAC,EAAE;IAChC,YAAY,OAAO,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IAC/C,QAAQ;IACR,aAAa;IACb,YAAY,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IACvD,YAAY,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;IAChE,gBAAgB,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC;;IAEzC,gBAAgB,KAAK,IAAI,SAAS,IAAI,GAAG,EAAE;IAC3C,oBAAoB,IAAI,SAAS,IAAI,IAAI,EAAE;IAC3C,wBAAwB,MAAM,MAAM,GAAG,GAAG,CAAC,SAAS,CAAC;IACrD,wBAAwB,KAAK,IAAI,MAAM,IAAI,MAAM,EAAE;IACnD,4BAA4B,MAAM,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC1E,wBAAwB;IACxB,oBAAoB;IACpB,yBAAyB;IACzB,wBAAwB,MAAM,CAAC,SAAS,CAAC,GAAG,GAAG,CAAC,SAAS,CAAC;IAC1D,oBAAoB;IACpB,gBAAgB;IAChB,YAAY;IACZ,YAAY,OAAO,MAAM;IACzB,QAAQ;IACR,IAAI;;IAEJ;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,OAAO,cAAc,CAAC,GAAG,EAAE;IAC/B,QAAQ,IAAI,OAAO,GAAG,KAAK,SAAS,EAAE,OAAO,GAAG;IAChD,QAAQ,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,OAAO,OAAO,CAAC,GAAG,CAAC;;IAExD,QAAQ,QAAQ,GAAG,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE;IACxC,YAAY,KAAK,MAAM;IACvB,YAAY,KAAK,GAAG;IACpB,YAAY,KAAK,KAAK;IACtB,YAAY,KAAK,IAAI;IACrB,gBAAgB,OAAO,IAAI;IAC3B,YAAY,KAAK,OAAO;IACxB,YAAY,KAAK,GAAG;IACpB,YAAY,KAAK,IAAI;IACrB,YAAY,KAAK,KAAK;IACtB,gBAAgB,OAAO,KAAK;IAC5B,YAAY;IACZ,gBAAgB,OAAO,KAAK;IAC5B;IACA,IAAI;;IAEJ;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,OAAO,eAAe,CAAC,OAAO,EAAE;IACpC,QAAQ,OAAO,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC;IACtD,IAAI;;IAEJ;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,OAAO,YAAY,CAAC,IAAI,EAAE;IAC9B,QAAQ,OAAO,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC;IAChD,IAAI;IACJ;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,OAAO,YAAY,CAAC,IAAI,EAAE,OAAO,EAAE;IACvC,QAAQ,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC;IAClD,IAAI;;IAEJ;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,OAAO,iBAAiB,CAAC,OAAO,EAAE;IACtC,QAAQ,OAAO,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC;IACxD,IAAI;;IAEJ;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,OAAO,cAAc,CAAC,IAAI,EAAE;IAChC,QAAQ,OAAO,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC;IAClD,IAAI;IACJ;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,OAAO,cAAc,CAAC,IAAI,EAAE,OAAO,EAAE;IACzC,QAAQ,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC;IACpD,IAAI;;IAEJ;IACA;IACA;IACA;IACA;IACA,IAAI,OAAO,gBAAgB,GAAG;IAC9B,QAAQ,OAAO,IAAI,CAAC,QAAQ,CAAC,aAAa;IAC1C,IAAI;;IAEJ;IACA;IACA;IACA;IACA;IACA,IAAI,OAAO,gBAAgB,GAAG;IAC9B,QAAQ,OAAO,IAAI,CAAC,QAAQ,CAAC,aAAa;IAC1C,IAAI;;IAEJ;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,OAAO,YAAY,CAAC,OAAO,EAAE;IACjC,QAAQ,IAAI,OAAO,IAAI,IAAI,EAAE,OAAO,EAAE;;IAEtC,QAAQ,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE;;IAE9H,QAAQ,MAAM,GAAG,GAAG,UAAU,EAAE,QAAQ;;IAExC,QAAQ,IAAI,CAAC,GAAG,IAAI,OAAO,GAAG,CAAC,aAAa,KAAK,UAAU,EAAE;IAC7D,YAAY,OAAO,GAAG;IACtB,aAAa,OAAO,CAAC,qCAAqC,EAAE,EAAE;IAC9D,aAAa,OAAO,CAAC,mCAAmC,EAAE,EAAE;IAC5D,aAAa,OAAO,CAAC,qCAAqC,EAAE,EAAE;IAC9D,aAAa,OAAO,CAAC,8CAA8C,EAAE,EAAE,CAAC;IACxE,YAAY,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,gCAAgC,EAAE,EAAE,CAAC;IAC3E,YAAY,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,mDAAmD,EAAE,EAAE,CAAC;IAC9F,YAAY,OAAO,OAAO;IAC1B,QAAQ;;IAER,QAAQ,MAAM,GAAG,GAAG,GAAG,CAAC,aAAa,CAAC,KAAK,CAAC;IAC5C,QAAQ,GAAG,CAAC,SAAS,GAAG,OAAO;;IAE/B,QAAQ,GAAG,CAAC,gBAAgB,CAAC,4CAA4C,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC;;IAEnG,QAAQ,GAAG,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI;IAC/C,YAAY,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI;IAC3C,YAAY,MAAM,IAAI,GAAG,CAAC,CAAC,IAAI,IAAI,EAAE;IACrC,YAAY,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,IAAI,EAAE;IACvC,YAAY,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;IACnC,gBAAgB,CAAC,CAAC,eAAe,CAAC,IAAI,CAAC;IACvC,gBAAgB;IAChB,YAAY;IACZ,YAAY,IAAI,0BAA0B,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;IACtF,gBAAgB,CAAC,CAAC,eAAe,CAAC,IAAI,CAAC;IACvC,YAAY;IACZ,YAAY,CAAC,CAAC;IACd,QAAQ,CAAC,CAAC;;IAEV,QAAQ,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,EAAE,EAAE,IAAI,EAAE;IAC3C,IAAI;;IAEJ;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,OAAO,SAAS,CAAC,IAAI,EAAE;IAC3B,QAAQ,IAAI,GAAG,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;IAC/C,QAAQ,GAAG,CAAC,SAAS,GAAG,IAAI;IAC5B,QAAQ,IAAI,QAAQ,GAAG,GAAG,CAAC,WAAW,IAAI,GAAG,CAAC,SAAS,IAAI,EAAE;IAC7D,QAAQ,GAAG,CAAC,MAAM,EAAE;IACpB,QAAQ,OAAO,QAAQ,CAAC,IAAI,EAAE;IAC9B,IAAI;;IAEJ;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,OAAO,gBAAgB,CAAC,GAAG,EAAE;IACjC,QAAQ,IAAI,GAAG,IAAI,IAAI,EAAE,OAAO,EAAE;IAClC,QAAQ,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,kBAAkB,EAAE,EAAE,CAAC;IAC5F,QAAQ,OAAO,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC;IACtD,IAAI;;IAEJ;IACA;IACA;IACA;IACA;IACA,IAAI,OAAO,kBAAkB,CAAC,aAAa,EAAE;IAC7C,QAAQ,MAAM,MAAM,GAAG,EAAE;IACzB,QAAQ,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC;;IAE3D,QAAQ,QAAQ,CAAC,OAAO,CAAC,KAAK,IAAI;IAClC,YAAY,IAAI,KAAK,CAAC,OAAO,KAAK,UAAU,EAAE;IAC9C,gBAAgB,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;IAClC;IACA,gBAAgB,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,MAAM,IAAI;IAC7D,oBAAoB,MAAM,CAAC,eAAe,CAAC,GAAG,KAAK;IACnD,oBAAoB,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC;IACvC,gBAAgB,CAAC,CAAC;IAClB,YAAY,CAAC,MAAM,IAAI,KAAK,CAAC,OAAO,KAAK,QAAQ,EAAE;IACnD,gBAAgB,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;IAClC,YAAY;IACZ,QAAQ,CAAC,CAAC;;IAEV,QAAQ,OAAO,MAAM;IACrB,IAAI;;IAEJ;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,OAAO,KAAK,GAAG;IACnB,QAAQ,MAAM,EAAE,GAAG,SAAS,CAAC,SAAS;IACtC,QAAQ,OAAO,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC;IACxC,aAAa,SAAS,CAAC,QAAQ,KAAK,UAAU,IAAI,SAAS,CAAC,cAAc,GAAG,CAAC,CAAC;IAC/E,IAAI;;IAEJ;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,OAAO,MAAM,CAAC,KAAK,EAAE;IACzB,QAAQ,MAAM,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE;IACtC,QAAQ,IAAI,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC;IACtC,QAAQ,IAAI,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,WAAW,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,IAAI;IACpF,QAAQ,IAAI,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,UAAU,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,IAAI;IACpF;IACA,QAAQ,MAAM,EAAE,GAAG,UAAU,CAAC,gBAAgB,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC,QAAQ,CAAC;IAClF,QAAQ,IAAI,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC,EAAE,GAAG,UAAU,CAAC,CAAC,CAAC,IAAI,IAAI;IACjE;IACA,QAAQ,MAAM,EAAE,+BAA+B,IAAI,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3G,QAAQ,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;IACrC,QAAQ,MAAM,EAAE,GAAG,EAAE,CAAC,YAAY,GAAG,IAAI;IACzC,QAAQ,EAAE,CAAC,MAAM,EAAE;IACnB,QAAQ,OAAO,EAAE;IACjB,IAAI;IACJ;;ICzmBA;IACA;IACA;IACA;IACA;IACA;IACA;IACO,MAAM,OAAO,CAAC;IACrB;IACA;IACA;IACA;IACA,IAAI,OAAO,eAAe,GAAG;IAC7B,QAAQ,MAAM,SAAS,GAAG,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE;;IAE/D,QAAQ,MAAM,KAAK,GAAG;IACtB,YAAY,IAAI,UAAU,GAAG,EAAE,OAAO,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC;IAC7D,YAAY,IAAI,QAAQ,GAAG,EAAE,OAAO,SAAS,CAAC,QAAQ,CAAC,CAAC;IACxD,SAAS;;IAET,QAAQ,MAAM,QAAQ,GAAG;IACzB,YAAY,eAAe,GAAG,EAAE,SAAS,CAAC,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC;IAC/D,YAAY,MAAM,GAAG,EAAE,SAAS,CAAC,QAAQ,GAAG,IAAI,CAAC,CAAC,SAAS,CAAC,UAAU,GAAG,KAAK,CAAC,CAAC;IAChF,SAAS;;IAET,QAAQ,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE;IAClC,IAAI;;IAEJ;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,OAAO,SAAS,CAAC,MAAM,EAAE,GAAG,OAAO,EAAE;IACzC,QAAQ,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC,eAAe,EAAE;;IAE1D,QAAQ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;IACjD,YAAY,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC;;IAErC,YAAY,IAAI,OAAO,MAAM,KAAK,UAAU,EAAE;;IAE9C,YAAY,IAAI,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;IACjD,gBAAgB,MAAM,CAAC,QAAQ,EAAE,GAAG,MAAM,CAAC;IAC3C,YAAY,CAAC,MAAM;IACnB,gBAAgB,MAAM,CAAC,QAAQ,CAAC;IAChC,YAAY;;IAEZ,YAAY,IAAI,KAAK,CAAC,QAAQ,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE;IACrD,QAAQ;;IAER,QAAQ,OAAO,KAAK;IACpB,IAAI;;IAEJ;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,OAAO,OAAO,CAAC,OAAO,EAAE,QAAQ,EAAE,IAAI,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,EAAE;IAClF,QAAQ,MAAM,GAAG,GAAG,IAAI,KAAK,CAAC,QAAQ,EAAE,IAAI,CAAC;IAC7C,QAAQ,OAAO,CAAC,aAAa,CAAC,GAAG,CAAC;IAClC,QAAQ,OAAO,GAAG;IAClB,IAAI;;IAEJ;IACA;IACA;IACA;IACA;IACA,IAAI,OAAO,aAAa,CAAC,KAAK,EAAE,GAAG,MAAM,EAAE;IAC3C,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;IACnC,QAAQ,KAAK,MAAM,EAAE,IAAI,KAAK,EAAE;IAChC,YAAY,IAAI,OAAO,EAAE,KAAK,UAAU,EAAE;IAC1C,YAAY,EAAE,CAAC,GAAG,MAAM,CAAC;IACzB,QAAQ;IACR,IAAI;IACJ;;IChFA;IACA;IACA;IACO,MAAM,SAAS,CAAC;IACvB;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,OAAO,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE;IACnC,QAAQ;IACR,YAAY,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC;IACjD,YAAY,OAAO,GAAG,SAAS,CAAC;IAChC;IACA;IACA,QAAQ;IACR,YAAY,QAAQ,GAAG,OAAO,CAAC,QAAQ;IACvC,YAAY,SAAS,GAAG,OAAO,CAAC,SAAS;IACzC,YAAY,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC;IAClD,YAAY,SAAS,GAAG,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE;IACnD;IACA;IACA,QAAQ,IAAI,KAAK,GAAG,CAAC,EAAE,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC;IAC7C,YAAY,MAAM,GAAG,CAAC,EAAE,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC;IAC/C;IACA,QAAQ,IAAI,QAAQ,GAAG,CAAC,EAAE;IAC1B,YAAY,KAAK,GAAG,OAAO,CAAC,KAAK;IACjC,QAAQ;IACR,QAAQ,IAAI,SAAS,GAAG,CAAC,EAAE;IAC3B,YAAY,MAAM,GAAG,OAAO,CAAC,MAAM;IACnC,QAAQ;;IAER,QAAQ,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;IACjE,IAAI;IACJ;;ICrCA;IACA;IACA;IACO,MAAM,WAAW,CAAC;IACzB;IACA;IACA;IACA;IACA,IAAI,WAAW,CAAC,OAAO,EAAE;IACzB,QAAQ,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;IACrC,IAAI;;IAEJ;IACA;IACA;IACA,IAAI,IAAI,GAAG,IAAI;IACf;IACA,IAAI,QAAQ,GAAG,IAAI;IACnB;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,IAAI,CAAC,OAAO,EAAE;IAClB,QAAQ,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC;IACrC,YAAY,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,0BAA0B,EAAE,SAAS,EAAE,OAAO,CAAC;IACnF,SAAS,CAAC;IACV,QAAQ,IAAI,CAAC,QAAQ,GAAG,OAAO;IAC/B,IAAI;IACJ;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,GAAG,GAAG;IACV,QAAQ,OAAO,IAAI,CAAC,QAAQ,CAAC;IAC7B,IAAI;IACJ;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,EAAE;IAC9B,QAAQ,IAAI,MAAM,EAAE;IACpB,YAAY,IAAI,CAAC,QAAQ,CAAC,WAAW,GAAG,KAAK;IAC7C,QAAQ;IACR,QAAQ,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;IACxC,QAAQ,IAAI,CAAC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,GAAG,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;IACrF,IAAI;IACJ;;ICtDA;IACA;IACA;IACO,MAAM,SAAS,CAAC;IACvB,IAAI,WAAW,GAAG;IAClB,QAAQ,IAAI,CAAC,KAAK,EAAE;IACpB,IAAI;IACJ;IACA;IACA;IACA,IAAI,IAAI,GAAG,IAAI;IACf;IACA;IACA;IACA;IACA;IACA,IAAI,KAAK,GAAG;IACZ,QAAQ,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC;IACrC,YAAY,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,wBAAwB,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE;IACzF,SAAS,CAAC;IACV,IAAI;IACJ;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,WAAW,CAAC,KAAK,EAAE;IACvB,QAAQ,IAAI,KAAK,EAAE;IACnB,YAAY,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC;IAChD,QAAQ;IACR,aAAa;IACb,YAAY,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,WAAW,CAAC;IACnD,QAAQ;IACR,IAAI;IACJ;;IClCA;IACA;IACA;IACO,MAAM,YAAY,CAAC;IAC1B,IAAI,WAAW;IACf;IACA;IACA;IACA,IAAI,IAAI;;IAER,IAAI,OAAO,GAAG,IAAI;;IAElB;IACA,IAAI,kBAAkB,GAAG,EAAE;;IAE3B;IACA,IAAI,oBAAoB,GAAG,EAAE;;IAE7B;IACA;IACA;IACA;IACA;IACA,IAAI,WAAW,CAAC,OAAO,GAAG,IAAI,EAAE;IAChC,QAAQ,IAAI,OAAO,EAAE;IACrB,YAAY,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;IAC9B,QAAQ;IACR,IAAI;IACJ;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,IAAI,CAAC,OAAO,EAAE;IAClB,QAAQ,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC;IAC1C,YAAY,YAAY,EAAE;IAC1B,gBAAgB,GAAG,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,4BAA4B,EAAE,MAAM,CAAC,CAAC;IACrF,gBAAgB,KAAK,EAAE;IACvB,oBAAoB,SAAS,EAAE;IAC/B,wBAAwB,GAAG,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,SAAS,EAAE,iCAAiC,EAAE,WAAW,EAAE,OAAO,CAAC,aAAa,EAAE,OAAO,EAAE,MAAM;IAC1I,4BAA4B,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,kBAAkB,CAAC;IAC1E,wBAAwB,CAAC;IACzB,qBAAqB;IACrB,oBAAoB,WAAW,EAAE;IACjC,wBAAwB,GAAG,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,SAAS,EAAE,iCAAiC,EAAE,WAAW,EAAE,OAAO,CAAC,eAAe,EAAE,OAAO,EAAE,MAAM;IAC5I,4BAA4B,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,oBAAoB,CAAC;IAC5E,wBAAwB,CAAC;IACzB;IACA;IACA;IACA,SAAS,CAAC;IACV,QAAQ,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI;IACzC,QAAQ,IAAI,CAAC,OAAO,GAAG,OAAO;IAC9B,IAAI;IACJ;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,SAAS,GAAG;IAChB,QAAQ,OAAO,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC;IACxG,IAAI;IACJ;IACA;IACA;IACA;IACA;IACA,IAAI,OAAO,GAAG;IACd,QAAQ,IAAI,IAAI,CAAC,SAAS,EAAE,EAAE;IAC9B,YAAY,IAAI,CAAC,IAAI,EAAE;IACvB,QAAQ;IACR,aAAa;IACb,YAAY,IAAI,CAAC,IAAI,EAAE;IACvB,QAAQ;IACR,IAAI;IACJ;IACA;IACA;IACA;IACA,IAAI,IAAI,GAAG;IACX,QAAQ,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC;IAC1C,IAAI;IACJ;IACA;IACA;IACA;IACA,IAAI,IAAI,GAAG;IACX,QAAQ,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC;IACvC,IAAI;IACJ;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,WAAW,CAAC,MAAM,GAAG,IAAI,EAAE;IAC/B,QAAQ,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC;IAC5C,IAAI;IACJ;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,aAAa,CAAC,MAAM,GAAG,IAAI,EAAE;IACjC,QAAQ,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,MAAM,CAAC;IAC9C,IAAI;IACJ;;IChHA;IACA;IACA;IACO,MAAM,qBAAqB,CAAC;IACnC,IAAI,MAAM,GAAG,KAAK;IAClB,IAAI,OAAO,GAAG,IAAI;IAClB;IACA,IAAI,eAAe,GAAG,IAAI;IAC1B,IAAI,iBAAiB,GAAG,IAAI;IAC5B,IAAI,mBAAmB;IACvB;IACA;IACA;IACA;IACA;IACA,IAAI,WAAW,GAAG;IAClB,QAAQ,IAAI,CAAC,MAAM,GAAG;IACtB,QAAQ,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC;IACjE,IAAI;;IAEJ;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,SAAS,CAAC,OAAO,EAAE,CAAC;;IAExB;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,cAAc,GAAG;IACrB;IACA,QAAQ,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO;IAC/B,QAAQ,IAAI,CAAC,EAAE,IAAI,OAAO,EAAE,CAAC,qBAAqB,KAAK,UAAU,EAAE;IACnE;IACA,YAAY,MAAM,cAAc,GAAG;IACnC,gBAAgB,KAAK,EAAE,CAAC;IACxB,gBAAgB,MAAM,EAAE,CAAC;IACzB,gBAAgB,GAAG,EAAE,CAAC;IACtB,gBAAgB,IAAI,EAAE,CAAC;IACvB,gBAAgB,OAAO,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE;IACjE,gBAAgB,MAAM,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE;IACjE,gBAAgB,MAAM,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE;IACjE,aAAa;IACb,YAAY,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC;IAC1C,YAAY;IACZ,QAAQ;;IAER,QAAQ,MAAM,IAAI,GAAG,EAAE,CAAC,qBAAqB,EAAE;IAC/C,QAAQ,MAAM,KAAK,GAAG,CAAC,OAAO,MAAM,EAAE,gBAAgB,KAAK,UAAU;IACrE,cAAc,MAAM,CAAC,gBAAgB,CAAC,EAAE;IACxC,cAAc,IAAI;;IAElB;IACA,QAAQ,MAAM,OAAO,GAAG;IACxB,YAAY,KAAK,EAAE,IAAI,EAAE,KAAK,IAAI,CAAC;IACnC,YAAY,MAAM,EAAE,IAAI,EAAE,MAAM,IAAI,CAAC;IACrC,YAAY,GAAG,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC;IAC/B,YAAY,IAAI,EAAE,IAAI,EAAE,IAAI,IAAI,CAAC;;IAEjC,YAAY,OAAO,EAAE;IACrB,gBAAgB,GAAG,EAAE,UAAU,CAAC,KAAK,EAAE,UAAU,IAAI,GAAG,CAAC;IACzD,gBAAgB,KAAK,EAAE,UAAU,CAAC,KAAK,EAAE,YAAY,IAAI,GAAG,CAAC;IAC7D,gBAAgB,MAAM,EAAE,UAAU,CAAC,KAAK,EAAE,aAAa,IAAI,GAAG,CAAC;IAC/D,gBAAgB,IAAI,EAAE,UAAU,CAAC,KAAK,EAAE,WAAW,IAAI,GAAG,CAAC;IAC3D,aAAa;;IAEb,YAAY,MAAM,EAAE;IACpB,gBAAgB,GAAG,EAAE,UAAU,CAAC,KAAK,EAAE,cAAc,IAAI,GAAG,CAAC;IAC7D,gBAAgB,KAAK,EAAE,UAAU,CAAC,KAAK,EAAE,gBAAgB,IAAI,GAAG,CAAC;IACjE,gBAAgB,MAAM,EAAE,UAAU,CAAC,KAAK,EAAE,iBAAiB,IAAI,GAAG,CAAC;IACnE,gBAAgB,IAAI,EAAE,UAAU,CAAC,KAAK,EAAE,eAAe,IAAI,GAAG,CAAC;IAC/D,aAAa;;IAEb,YAAY,MAAM,EAAE;IACpB,gBAAgB,GAAG,EAAE,UAAU,CAAC,KAAK,EAAE,SAAS,IAAI,GAAG,CAAC;IACxD,gBAAgB,KAAK,EAAE,UAAU,CAAC,KAAK,EAAE,WAAW,IAAI,GAAG,CAAC;IAC5D,gBAAgB,MAAM,EAAE,UAAU,CAAC,KAAK,EAAE,YAAY,IAAI,GAAG,CAAC;IAC9D,gBAAgB,IAAI,EAAE,UAAU,CAAC,KAAK,EAAE,UAAU,IAAI,GAAG,CAAC;IAC1D;IACA,SAAS;IACT;IACA,QAAQ,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;IAC/B,IAAI;IACJ;IACA;IACA;IACA;IACA,IAAI,OAAO,GAAG;IACd,QAAQ,IAAI,CAAC,cAAc,EAAE;IAC7B,IAAI;IACJ;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,OAAO,CAAC,OAAO,EAAE;IACrB,QAAQ,IAAI,EAAE,OAAO,YAAY,OAAO,CAAC,EAAE;IAC3C,YAAY,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC;IACnD,QAAQ;;IAER,QAAQ,IAAI,CAAC,OAAO,GAAG,OAAO;;IAE9B,QAAQ,IAAI,CAAC,eAAe,GAAG,IAAI,cAAc,CAAC,IAAI,CAAC,mBAAmB,CAAC;IAC3E,QAAQ,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,OAAO,CAAC;;IAE7C,QAAQ,IAAI,CAAC,iBAAiB,GAAG,IAAI,gBAAgB,CAAC,IAAI,CAAC,mBAAmB,CAAC;IAC/E,QAAQ,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,OAAO,EAAE;IAChD,YAAY,UAAU,EAAE,IAAI;IAC5B,YAAY,eAAe,EAAE,CAAC,OAAO,EAAE,OAAO;IAC9C,SAAS,CAAC;;IAEV,QAAQ,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,IAAI,CAAC,mBAAmB,EAAE,IAAI,CAAC;IACzE,QAAQ,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,IAAI,CAAC,mBAAmB,CAAC;;IAEnE,QAAQ,IAAI,MAAM,CAAC,cAAc,EAAE;IACnC,YAAY,MAAM,CAAC,cAAc,CAAC,gBAAgB,CAAC,QAAQ,EAAE,IAAI,CAAC,mBAAmB,CAAC;IACtF,YAAY,MAAM,CAAC,cAAc,CAAC,gBAAgB,CAAC,QAAQ,EAAE,IAAI,CAAC,mBAAmB,CAAC;IACtF,QAAQ;IACR,IAAI;IACJ;IACA;IACA;IACA;IACA;IACA,IAAI,UAAU,GAAG;IACjB;IACA,QAAQ,IAAI,CAAC,eAAe,EAAE,UAAU,IAAI;IAC5C,QAAQ,IAAI,CAAC,iBAAiB,EAAE,UAAU,IAAI;;IAE9C,QAAQ,IAAI,CAAC,SAAS,GAAG,CAAC,OAAO,KAAK,CAAC,CAAC;IACxC,QAAQ,MAAM,CAAC,mBAAmB,CAAC,QAAQ,EAAE,IAAI,CAAC,mBAAmB,EAAE,IAAI,CAAC;IAC5E,QAAQ,MAAM,CAAC,mBAAmB,CAAC,QAAQ,EAAE,IAAI,CAAC,mBAAmB,CAAC;;IAEtE,QAAQ,IAAI,MAAM,CAAC,cAAc,EAAE;IACnC,YAAY,MAAM,CAAC,cAAc,CAAC,mBAAmB,CAAC,QAAQ,EAAE,IAAI,CAAC,mBAAmB,CAAC;IACzF,YAAY,MAAM,CAAC,cAAc,CAAC,mBAAmB,CAAC,QAAQ,EAAE,IAAI,CAAC,mBAAmB,CAAC;IACzF,QAAQ;;IAER,QAAQ,IAAI,CAAC,eAAe,GAAG,IAAI;IACnC,QAAQ,IAAI,CAAC,iBAAiB,GAAG,IAAI;IACrC,QAAQ,IAAI,CAAC,OAAO,GAAG,IAAI;IAC3B,IAAI;IACJ;;ICvJA;IACA;IACA;IACA;IACA;IACA;IACO,MAAM,KAAK,CAAC;IACnB;IACA,IAAI,aAAa,GAAG,IAAI;;IAExB,IAAI,OAAO,GAAG,IAAI;;IAElB;IACA,IAAI,IAAI,GAAG,IAAI;;IAEf,IAAI,QAAQ,GAAG,EAAE;;IAEjB,IAAI,MAAM,GAAG,KAAK;;IAElB;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,IAAI,KAAK,GAAG;IAChB,QAAQ,kCAAkC,CAAC,IAAI,CAAC,aAAa,EAAE,YAAY,CAAC,OAAO,CAAC;IACpF,IAAI;;IAEJ;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,WAAW,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI,EAAE,IAAI,GAAG,IAAI,EAAE;IAC5D,QAAQ,IAAI,CAAC,OAAO,GAAG,OAAO;IAC9B,QAAQ,IAAI,CAAC,aAAa,GAAG,aAAa;IAC1C,QAAQ,IAAI,CAAC,IAAI,GAAG,IAAI;IACxB,IAAI;;IAEJ;IACA;IACA;IACA;IACA;IACA,IAAI,MAAM,CAAC,aAAa,EAAE;IAC1B,QAAQ,IAAI,CAAC,aAAa,GAAG,aAAa;IAC1C,QAAQ,IAAI,CAAC,eAAe,EAAE;IAC9B,IAAI;;IAEJ;IACA;IACA;IACA;IACA,IAAI,eAAe,GAAG,EAAE;IACxB;;ICzDA;IACA;IACA;IACA;IACO,MAAM,IAAI,CAAC;IAClB;IACA,IAAI,MAAM,GAAG,IAAI;;IAEjB;IACA;IACA;IACA;IACA;IACA,IAAI,WAAW,CAAC,MAAM,EAAE;IACxB,QAAQ,IAAI,CAAC,MAAM,GAAG,MAAM;IAC5B,IAAI;;IAEJ;IACA;IACA;IACA;IACA,IAAI,MAAM,GAAG,CAAC;IACd;IACA;IACA;IACA;IACA;IACA,IAAI,MAAM,GAAG,CAAC;;IAEd;IACA,IAAI,IAAI,GAAG,IAAI;;IAEf;IACA;IACA;IACA;IACA;IACA,IAAI,OAAO,GAAG;IACd,QAAQ,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI;IAC7B,IAAI;;IAEJ;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,MAAM,CAAC,GAAG,EAAE;IAChB,QAAQ,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;IAClC,IAAI;;IAEJ;IACA;IACA;IACA;IACA;IACA,IAAI,OAAO,GAAG;IACd,QAAQ,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI;IAC7B,IAAI;IACJ;;IC1DA;IACA;IACA;IACO,MAAM,SAAS,SAAS,IAAI,CAAC;IACpC;IACA,IAAI,IAAI;;IAER;IACA;IACA;IACA;IACA,IAAI,MAAM,GAAG;IACb,QAAQ,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;IAC7C;IACA,QAAQ,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC;IACnC,YAAY,SAAS,EAAE;IACvB,gBAAgB,GAAG,EAAE;IACrB,oBAAoB,IAAI,EAAE,KAAK;IAC/B,oBAAoB,SAAS,EAAE,CAAC,oBAAoB,CAAC;IACrD,oBAAoB,IAAI,EAAE,OAAO;IACjC,oBAAoB,cAAc,EAAE,CAAC,KAAK,EAAE,QAAQ,CAAC,OAAO,CAAC;IAC7D,oBAAoB,EAAE,EAAE,CAAC,KAAK,EAAE,QAAQ,CAAC,MAAM;IAC/C,iBAAiB;IACjB,gBAAgB,KAAK,EAAE;IACvB,oBAAoB,WAAW,EAAE;IACjC,wBAAwB,GAAG,EAAE;IAC7B,4BAA4B,IAAI,EAAE,KAAK;IACvC,4BAA4B,SAAS,EAAE,CAAC,2BAA2B,CAAC;IACpE,4BAA4B,IAAI,EAAE,cAAc;IAChD,4BAA4B,EAAE,EAAE,CAAC,KAAK,EAAE,QAAQ,CAAC,OAAO;IACxD;IACA,qBAAqB;IACrB,oBAAoB,UAAU,EAAE;IAChC,wBAAwB,GAAG,EAAE;IAC7B,4BAA4B,IAAI,EAAE,KAAK;IACvC,4BAA4B,SAAS,EAAE,CAAC,0BAA0B,CAAC;IACnE,4BAA4B,IAAI,EAAE;IAClC;IACA;IACA;IACA;IACA,SAAS,CAAC;;IAEV,QAAQ,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;IAC/C,IAAI;;IAEJ;IACA;IACA;IACA,IAAI,MAAM,GAAG;IACb,QAAQ,IAAI,CAAC,WAAW,EAAE;IAC1B,IAAI;;IAEJ;IACA;IACA;IACA;IACA;IACA,IAAI,WAAW,CAAC,KAAK,GAAG,IAAI,EAAE;IAC9B,QAAQ,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW;IACnD,QAAQ,IAAI,KAAK,KAAK,IAAI,EAAE;IAC5B,YAAY,QAAQ,CAAC,WAAW,GAAG,KAAK;IACxC,QAAQ;IACR,IAAI;;IAEJ;IACA;IACA;IACA;IACA;IACA,IAAI,iBAAiB,GAAG;IACxB,QAAQ,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU;IACxC,IAAI;;IAEJ;IACA;IACA;IACA;IACA,IAAI,gBAAgB,GAAG;IACvB,QAAQ,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU;IAC/C,QAAQ,MAAM,YAAY,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ;IACtD,aAAa,MAAM,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC/D;IACA,QAAQ,MAAM,SAAS,GAAG,YAAY,CAAC,MAAM,GAAG,CAAC;IACjD,QAAQ,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,SAAS,CAAC;IAC3D,IAAI;;IAEJ;IACA;IACA;IACA;IACA;IACA,IAAI,YAAY,CAAC,SAAS,EAAE;IAC5B,QAAQ,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,WAAW,EAAE,SAAS,CAAC;IAC/D,QAAQ,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,YAAY;IAC/C,YAAY,eAAe;IAC3B,YAAY,SAAS,GAAG,OAAO,GAAG;IAClC,SAAS;IACT,IAAI;IACJ;;IClGA;IACA;IACA;IACO,MAAM,UAAU,SAAS,IAAI,CAAC;IACrC;IACA,IAAI,IAAI;;IAER,IAAI,UAAU,GAAG,KAAK;IACtB,IAAI,QAAQ,GAAG,KAAK;IACpB,IAAI,YAAY,GAAG,IAAI;;IAEvB;IACA;IACA;IACA;IACA,IAAI,MAAM,GAAG;IACb,QAAQ,MAAM,SAAS,GAAG,CAAC,0BAA0B,CAAC;IACtD,QAAQ,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;IAC3C,QAAQ,MAAM,OAAO,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;;IAE1C,QAAQ,IAAI,IAAI,CAAC,UAAU,EAAE;IAC7B,YAAY,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC;IACtC,QAAQ;;IAER,QAAQ,IAAI,IAAI,CAAC,QAAQ,EAAE;IAC3B,YAAY,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC;IACvC,YAAY,SAAS,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,IAAI,CAAC,YAAY,EAAE,aAAa,CAAC,CAAC,CAAC;IACvE,QAAQ;;IAER,QAAQ,MAAM,cAAc,GAAG;IAC/B,YAAY,WAAW,EAAE;IACzB,gBAAgB,GAAG,EAAE;IACrB,oBAAoB,IAAI,EAAE,OAAO;IACjC,oBAAoB,IAAI,EAAE,IAAI,CAAC,UAAU,GAAG,UAAU,GAAG,OAAO;IAChE,oBAAoB,SAAS,EAAE,cAAc;IAC7C,oBAAoB,EAAE,EAAE;IACxB;IACA,aAAa;IACb,YAAY,IAAI,IAAI,CAAC,QAAQ,IAAI;IACjC,gBAAgB,WAAW,EAAE;IAC7B,gBAAgB,GAAG,EAAE;IACrB,oBAAoB,IAAI,EAAE,KAAK;IAC/B,oBAAoB,SAAS,EAAE,cAAc;IAC7C,oBAAoB,KAAK,EAAE;IAC3B,wBAAwB,KAAK,EAAE,IAAI,CAAC,YAAY,EAAE,UAAU,IAAI,MAAM;IACtE,wBAAwB,MAAM,EAAE,IAAI,CAAC,YAAY,EAAE,WAAW,IAAI,MAAM;IACxE,wBAAwB,YAAY,EAAE,IAAI,CAAC,YAAY,EAAE,iBAAiB,IAAI;IAC9E;IACA;IACA;IACA,aAAa,CAAC;IACd,YAAY,WAAW,EAAE;IACzB,gBAAgB,GAAG,EAAE;IACrB,gBAAgB,IAAI,EAAE,OAAO;IAC7B,gBAAgB,OAAO,EAAE,OAAO;IAChC,gBAAgB,SAAS,EAAE;IAC3B,oBAAoB,CAAC,eAAe,EAAE,IAAI,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC;IACtE,oBAAoB,CAAC,iBAAiB,EAAE,IAAI,CAAC,YAAY,EAAE,WAAW,CAAC;IACvE;IACA,iBAAiB;IACjB,gBAAgB,KAAK,EAAE;IACvB,oBAAoB,YAAY,EAAE,EAAE,GAAG,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE;IACxD;IACA;IACA,SAAS;;IAET,QAAQ,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC;IACnC,YAAY,UAAU,EAAE;IACxB,gBAAgB,GAAG,EAAE;IACrB,oBAAoB,IAAI,EAAE,KAAK;IAC/B,oBAAoB,EAAE,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC;IAC/C,oBAAoB,SAAS,EAAE,SAAS;IACxC,oBAAoB,IAAI,EAAE,QAAQ;IAClC,oBAAoB,YAAY,EAAE,OAAO;IACzC,oBAAoB,QAAQ,EAAE;IAC9B,iBAAiB;IACjB,gBAAgB,KAAK,EAAE;IACvB;IACA,SAAS,CAAC;;IAEV,QAAQ,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;;IAE/C,QAAQ,IAAI,CAAC,gBAAgB,EAAE;IAC/B,IAAI;;IAEJ;IACA;IACA;IACA,IAAI,MAAM,GAAG;IACb,QAAQ,IAAI,CAAC,gBAAgB,EAAE;IAC/B,IAAI;;IAEJ;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,gBAAgB,GAAG;IACvB,QAAQ,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI;IAC3B,QAAQ,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE;;IAE3B,QAAQ,MAAM,IAAI,IAAI,CAAC,CAAC,IAAI;IAC5B,QAAQ,MAAM,KAAK,GAAG,CAAC,CAAC,IAAI,EAAE,WAAW;IACzC,QAAQ,MAAM,KAAK,GAAG,CAAC,CAAC,IAAI,EAAE,WAAW;IACzC,QAAQ,MAAM,UAAU,KAAK,CAAC,CAAC,IAAI,CAAC,UAAU;IAC9C,QAAQ,MAAM,QAAQ,OAAO,CAAC,CAAC,IAAI,CAAC,QAAQ;IAC5C,QAAQ,MAAM,QAAQ,OAAO,IAAI,CAAC,YAAY,EAAE,aAAa,IAAI,OAAO;IACxE,QAAQ,MAAM,UAAU,KAAK,IAAI,CAAC,YAAY,EAAE,UAAU,SAAS,MAAM;IACzE,QAAQ,MAAM,WAAW,IAAI,IAAI,CAAC,YAAY,EAAE,WAAW,QAAQ,MAAM;IACzE,QAAQ,MAAM,WAAW,IAAI,IAAI,CAAC,YAAY,EAAE,iBAAiB,IAAI,KAAK;IAC1E,QAAQ,MAAM,MAAM,SAAS,IAAI,CAAC,YAAY,EAAE,WAAW,QAAQ,QAAQ;IAC3E,QAAQ,MAAM,MAAM,SAAS,IAAI,CAAC,YAAY,EAAE,WAAW,QAAQ,MAAM;;IAEzE,QAAQ,MAAM,WAAW,GAAG,CAAC,0BAA0B,CAAC;IACxD,QAAQ,IAAI,UAAU,EAAE,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC;IACpD,QAAQ,IAAI,QAAQ,EAAE;IACtB,YAAY,WAAW,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC;IAC9D,QAAQ;IACR,QAAQ,IAAI,CAAC,SAAS,GAAG,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC;;IAE9C,QAAQ,IAAI,KAAK,EAAE;IACnB,YAAY,MAAM,WAAW,GAAG,UAAU,GAAG,UAAU,GAAG,OAAO;IACjE,YAAY,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW,EAAE,KAAK,CAAC,IAAI,GAAG,WAAW;IACpE,QAAQ;;IAER,QAAQ,IAAI,KAAK,EAAE;IACnB,YAAY,KAAK,CAAC,SAAS,GAAG,CAAC,eAAe,EAAE,MAAM,CAAC,kBAAkB,EAAE,MAAM,CAAC,CAAC;IACnF,QAAQ;;IAER,QAAQ,IAAI,KAAK,GAAG,CAAC,CAAC,IAAI,EAAE,WAAW;IACvC,QAAQ,IAAI,QAAQ,EAAE;IACtB,YAAY,IAAI,CAAC,KAAK,EAAE;IACxB,gBAAgB,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;IACrD,gBAAgB,KAAK,CAAC,SAAS,GAAG,cAAc;IAChD,gBAAgB,IAAI,KAAK,IAAI,KAAK,CAAC,aAAa,EAAE,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,KAAK,CAAC;IACjF,qBAAqB,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;IAC5C,gBAAgB,CAAC,CAAC,IAAI,CAAC,WAAW,GAAG,KAAK;IAC1C,YAAY;IACZ,YAAY,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK;IACrC,YAAY,KAAK,CAAC,KAAK,UAAU,UAAU;IAC3C,YAAY,KAAK,CAAC,MAAM,SAAS,WAAW;IAC5C,YAAY,KAAK,CAAC,YAAY,GAAG,WAAW;IAC5C,QAAQ,CAAC,MAAM,IAAI,KAAK,EAAE;IAC1B,YAAY,KAAK,CAAC,MAAM,EAAE;IAC1B,YAAY,CAAC,CAAC,IAAI,CAAC,WAAW,GAAG,IAAI;IACrC,QAAQ;IACR,IAAI;IACJ;;ICnJA;IACA;IACA;IACO,MAAM,WAAW,SAAS,KAAK,CAAC;IACvC,IAAI,eAAe,GAAG,EAAE;IACxB,IAAI,uBAAuB,GAAG,EAAE;IAChC,IAAI,wBAAwB,GAAG,EAAE;IACjC,IAAI,QAAQ,GAAG,IAAI;IACnB,IAAI,YAAY,GAAG,KAAK;;IAExB;IACA,IAAI,KAAK,GAAG;IACZ;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,IAAI,QAAQ,GAAG;IACnB,QAAQ,OAAO,IAAI,CAAC,OAAO,EAAE,MAAM,IAAI,IAAI,CAAC,OAAO,EAAE,KAAK,IAAI,EAAE;IAChE,IAAI;IACJ;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,IAAI,QAAQ,GAAG;IACnB,QAAQ,OAAO,CAAC,CAAC,IAAI,CAAC,QAAQ;IAC9B,IAAI;IACJ;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,IAAI,KAAK,GAAG;IAChB,QAAQ,OAAO,IAAI,CAAC,aAAa,CAAC,KAAK;IACvC,IAAI;IACJ;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,IAAI,QAAQ,GAAG;IACnB,OAAO,OAAO,IAAI,CAAC,aAAa,CAAC,QAAQ;IACzC,IAAI;IACJ;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,IAAI,QAAQ,CAAC,KAAK,EAAE;IACxB,QAAQ,IAAI,CAAC,kBAAkB,GAAG,KAAK;IACvC;IACA,QAAQ,OAAO,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,GAAG,IAAI,CAAC,eAAe,CAAC;IACjE,IAAI;IACJ;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,IAAI,OAAO,GAAG;IAClB,QAAQ,OAAO,IAAI,CAAC,QAAQ;IAC5B,IAAI;IACJ;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,IAAI,OAAO,CAAC,KAAK,EAAE;IACvB,QAAQ,IAAI,IAAI,CAAC,QAAQ,KAAK,KAAK,EAAE;IACrC,QAAQ,IAAI,CAAC,QAAQ,GAAG,KAAK;IAC7B;IACA,QAAQ,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE;IACzC,QAAQ,IAAI,IAAI,EAAE;IAClB,YAAY,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC;IACjD,QAAQ;;IAER,QAAQ,OAAO,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,GAAG,IAAI,CAAC,wBAAwB,CAAC;IAC1E,IAAI;IACJ;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,IAAI,kBAAkB,GAAG;IAC7B,QAAQ,OAAO,IAAI,CAAC,QAAQ;IAC5B,IAAI;IACJ;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,IAAI,kBAAkB,CAAC,KAAK,EAAE;IAClC,QAAQ,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,aAAa,CAAC;IACpD,QAAQ,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE;IACzC;IACA,QAAQ,IAAI,GAAG,EAAE;IACjB,YAAY,GAAG,CAAC,OAAO,GAAG,KAAK;IAC/B,QAAQ;;IAER,QAAQ,IAAI,IAAI,EAAE;IAClB,YAAY,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC;IACrD,YAAY,IAAI,CAAC,YAAY,CAAC,eAAe,EAAE,KAAK,GAAG,MAAM,GAAG,OAAO,CAAC;IACxE,YAAY,IAAI,CAAC,aAAa,CAAC,eAAe,CAAC,UAAU,EAAE,CAAC,CAAC,KAAK,CAAC;IACnE,QAAQ;IACR;IACA,QAAQ,IAAI,CAAC,aAAa,CAAC,QAAQ,GAAG,KAAK;IAC3C,QAAQ,OAAO,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,GAAG,IAAI,CAAC,uBAAuB,CAAC;IACzE,IAAI;IACJ;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,IAAI,IAAI,GAAG;IACf,QAAQ,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,IAAI,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC;IACrF,QAAQ,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS,GAAG,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;IACnE,IAAI;IACJ;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,IAAI,WAAW,GAAG;IACtB,QAAQ,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;IAC3F,IAAI;IACJ;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,IAAI,OAAO,GAAG;IAClB,QAAQ,OAAO,IAAI,CAAC,aAAa,CAAC,OAAO,IAAI,EAAE;IAC/C,IAAI;;IAEJ;IACA;IACA;IACA;IACA;IACA,IAAI,IAAI,WAAW,GAAG;IACtB,QAAQ,OAAO,IAAI,CAAC,YAAY;IAChC,IAAI;IACJ;;IAEA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,IAAI,WAAW,CAAC,KAAK,EAAE;IAC3B,QAAQ,MAAM,GAAG,GAAG,CAAC,CAAC,KAAK;IAC3B,QAAQ,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,OAAO,IAAI;;IAE3C,QAAQ,IAAI,IAAI,CAAC,YAAY,KAAK,GAAG,EAAE;IACvC,YAAY,IAAI,CAAC,YAAY,GAAG,GAAG;IACnC,QAAQ;;IAER,QAAQ,IAAI,IAAI,EAAE;IAClB,YAAY,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,WAAW,EAAE,GAAG,CAAC;IACnD,QAAQ;IACR,IAAI;;IAEJ;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,UAAU,CAAC,QAAQ,EAAE;IACzB,QAAQ,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC;IAC3C,IAAI;IACJ;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,kBAAkB,CAAC,QAAQ,EAAE;IACjC,QAAQ,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,QAAQ,CAAC;IACnD,IAAI;IACJ;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,mBAAmB,CAAC,QAAQ,EAAE;IAClC,QAAQ,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,QAAQ,CAAC;IACpD,IAAI;IACJ;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,eAAe,GAAG;IACtB,QAAQ,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC;IAC7D,QAAQ,IAAI,YAAY,EAAE;IAC1B,YAAY,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE;IACxC,gBAAgB,YAAY,CAAC,SAAS,GAAG,IAAI,CAAC,IAAI;IAClD,YAAY;IACZ,iBAAiB;IACjB,gBAAgB,YAAY,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW;IAC3D,YAAY;IACZ,QAAQ;;IAER,QAAQ,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC;IACxD,QAAQ,IAAI,QAAQ,IAAI,IAAI,CAAC,QAAQ,EAAE;IACvC,YAAY,QAAQ,CAAC,GAAG,GAAG,IAAI,CAAC,QAAQ;IACxC,YAAY,QAAQ,CAAC,GAAG,GAAG,IAAI,CAAC,IAAI;IACpC,QAAQ;IACR;IACA,QAAQ,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,aAAa,CAAC,QAAQ;IAC7D,IAAI;IACJ;;ICtOA;IACA;IACA;IACO,MAAM,UAAU,SAAS,KAAK,CAAC;IACtC,IAAI,KAAK,GAAG,EAAE;IACd;IACA,IAAI,KAAK,GAAG,EAAE;IACd,IAAI,SAAS,GAAG,KAAK;IACrB,IAAI,uBAAuB,GAAG,EAAE;;IAEhC;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,WAAW,CAAC,OAAO,EAAE,aAAa,EAAE;IACxC,QAAQ,KAAK,CAAC,OAAO,EAAE,aAAa,CAAC;IACrC,QAAQ,IAAI,aAAa,EAAE;IAC3B,YAAY,IAAI,CAAC,KAAK,GAAG,aAAa,CAAC,KAAK;IAC5C,YAAY,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,OAAO,EAAE,SAAS,CAAC;IAClF,QAAQ;IACR,IAAI;;IAEJ;IACA;IACA;IACA;IACA;IACA,IAAI,IAAI,KAAK,GAAG;IAChB,QAAQ,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC;IACjD,IAAI;;IAEJ;IACA;IACA;IACA;IACA;IACA,IAAI,IAAI,aAAa,GAAG;IACxB,QAAQ,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,IAAI,IAAI,CAAC,QAAQ,CAAC;IACvD,IAAI;;IAEJ;IACA;IACA;IACA;IACA;IACA,IAAI,IAAI,YAAY,GAAG;IACvB,QAAQ,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC;IACtD,IAAI;;IAEJ;IACA;IACA;IACA;IACA;IACA,IAAI,IAAI,eAAe,GAAG;IAC1B,QAAQ,OAAO,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC;IAC3C,IAAI;;IAEJ;IACA;IACA;IACA;IACA;IACA,IAAI,MAAM,CAAC,aAAa,EAAE;IAC1B,QAAQ,IAAI,CAAC,KAAK,GAAG,aAAa,CAAC,KAAK;IACxC,QAAQ,IAAI,IAAI,CAAC,IAAI,EAAE;IACvB,YAAY,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC;IAC7C,QAAQ;IACR,IAAI;;IAEJ;IACA;IACA;IACA;IACA,IAAI,eAAe,GAAG;IACtB,QAAQ,IAAI,IAAI,CAAC,IAAI,EAAE;IACvB,YAAY,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC;IAC7C,YAAY,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC;IAClD,QAAQ;IACR,IAAI;;IAEJ;IACA;IACA;IACA;IACA;IACA,IAAI,kBAAkB,CAAC,QAAQ,EAAE;IACjC,QAAQ,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,QAAQ,CAAC;IACnD,IAAI;;IAEJ;IACA;IACA;IACA,IAAI,cAAc,GAAG;IACrB,QAAQ,IAAI,CAAC,SAAS,GAAG,CAAC,IAAI,CAAC,SAAS;IACxC,QAAQ,IAAI,IAAI,CAAC,IAAI,EAAE;IACvB,YAAY,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC;IAClD,QAAQ;IACR,QAAQ,OAAO,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,IAAI,CAAC,uBAAuB,CAAC;IAClF,IAAI;;IAEJ;IACA;IACA;IACA;IACA;IACA,IAAI,OAAO,CAAC,WAAW,EAAE;IACzB,QAAQ,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC;IACpC,QAAQ,WAAW,CAAC,KAAK,GAAG,IAAI;IAChC,IAAI;;IAEJ;IACA;IACA;IACA;IACA;IACA,IAAI,UAAU,CAAC,WAAW,EAAE;IAC5B,QAAQ,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC;IACrD,QAAQ,IAAI,KAAK,GAAG,EAAE,EAAE;IACxB,YAAY,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;IACvC,YAAY,WAAW,CAAC,KAAK,GAAG,IAAI;IACpC,QAAQ;IACR,IAAI;;IAEJ;IACA;IACA;IACA;IACA,IAAI,gBAAgB,GAAG;IACvB,QAAQ,IAAI,IAAI,CAAC,IAAI,EAAE;IACvB,YAAY,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE;IACxC,QAAQ;IACR,IAAI;IACJ;;IC3IA;IACA;IACA;IACA;IACO,MAAM,OAAO,CAAC;IACrB;IACA,IAAI,KAAK,GAAG,EAAE;IACd,IAAI,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC;;IAEtC,IAAI,WAAW,GAAG,KAAK;;;IAGvB;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,WAAW,CAAC,KAAK,GAAG,EAAE,EAAE;IAC5B,QAAQ,IAAI,CAAC,KAAK,GAAG,KAAK;IAC1B,QAAQ,IAAI,CAAC,MAAM,EAAE;IACrB,IAAI;;IAEJ;IACA;IACA;IACA;IACA,IAAI,MAAM,GAAG,CAAC;;IAEd;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE;IACzC,QAAQ,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;IAC1B,YAAY,MAAM,CAAC,MAAM,EAAE;IAC3B,QAAQ;IACR,aAAa;IACb,YAAY,MAAM,CAAC,MAAM,EAAE;IAC3B,QAAQ;IACR,IAAI;;IAEJ;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,cAAc,CAAC,QAAQ,EAAE,QAAQ,EAAE;IACvC,QAAQ,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,EAAE,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;IACtF,IAAI;;IAEJ;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,aAAa,CAAC,QAAQ,EAAE,QAAQ,EAAE;IACtC,QAAQ,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,EAAE,QAAQ,CAAC;IAChF,IAAI;;IAEJ;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,UAAU,CAAC,QAAQ,EAAE,GAAG,MAAM,EAAE;IACpC,QAAQ,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,EAAE,GAAG,MAAM,CAAC;IAC1E,IAAI;;IAEJ;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,YAAY,CAAC,QAAQ,EAAE,GAAG,MAAM,EAAE;IACtC,QAAQ,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,EAAE,GAAG,MAAM,CAAC;IAC7E,IAAI;;;IAGJ;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,UAAU,CAAC,MAAM,EAAE,IAAI,EAAE;IAC7B,QAAQ,OAAO,IAAI;IACnB,IAAI;;IAEJ;IACA;IACA;IACA;IACA;IACA,IAAI,SAAS,GAAG;IAChB,QAAQ,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM;IAChC,IAAI;;IAEJ;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,QAAQ,CAAC,KAAK,EAAE;IACpB,QAAQ,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,KAAK,CAAC;IACzC,QAAQ,IAAI,CAAC,KAAK,GAAG,KAAK;IAC1B,QAAQ,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,KAAK,CAAC;IACvC,IAAI;;IAEJ;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,cAAc,CAAC,KAAK,EAAE;IAC1B,QAAQ,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;IAC5B,IAAI;;IAEJ;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,kBAAkB,CAAC,MAAM,EAAE;IAC/B,QAAQ,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,SAAS,EAAE,EAAE,KAAK,EAAE,EAAE;IAC/D,YAAY,IAAI,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI;IAC/C,YAAY,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE;IAC3C,gBAAgB,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACnE,YAAY;IACZ,YAAY,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC;;IAE/D,YAAY,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,IAAI;IAC3C,QAAQ;IACR,IAAI;;IAEJ;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,UAAU,CAAC,KAAK,EAAE,EAAE;IACxB;;IC9JA;IACA;IACA;IACA;IACO,MAAM,YAAY,CAAC;IAC1B;IACA,IAAI,cAAc,GAAG,EAAE;;IAEvB;IACA,IAAI,YAAY;;IAEhB;IACA,IAAI,kBAAkB;;IAEtB;IACA,IAAI,iBAAiB;;IAErB;IACA,IAAI,uBAAuB;;IAE3B,IAAI,OAAO,GAAG,IAAI;IAClB;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,WAAW,CAAC,OAAO,EAAE;IACzB,QAAQ,IAAI,CAAC,OAAO,GAAG,OAAO;IAC9B,IAAI;;IAEJ;IACA;IACA;IACA;IACA;IACA,IAAI,YAAY,CAAC,OAAO,EAAE;IAC1B,QAAQ,IAAI,CAAC,YAAY,GAAG,OAAO;IACnC,IAAI;;IAEJ;IACA;IACA;IACA;IACA;IACA,IAAI,iBAAiB,CAAC,YAAY,EAAE;IACpC,QAAQ,IAAI,CAAC,iBAAiB,GAAG,YAAY;IAC7C,IAAI;;IAEJ;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,oBAAoB,CAAC,SAAS,EAAE;IACpC,QAAQ,IAAI,CAAC,cAAc,GAAG,EAAE;IAChC,QAAQ,IAAI,YAAY,GAAG,IAAI;IAC/B;IACA,QAAQ,SAAS,CAAC,OAAO,CAAC,IAAI,IAAI;IAClC,YAAY,IAAI,IAAI,CAAC,OAAO,KAAK,UAAU,EAAE;IAC7C,gBAAgB,YAAY,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC;IACjE,gBAAgB,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,YAAY,CAAC;IACtD,YAAY,CAAC;IACb,iBAAiB,IAAI,IAAI,CAAC,OAAO,KAAK,QAAQ,EAAE;IAChD,gBAAgB,MAAM,WAAW,GAAG,IAAI,WAAW,CAAC,IAAI,CAAC,OAAO,oCAAoC,IAAI,EAAE;IAC1G;IACA,gBAAgB,IAAI,IAAI,CAAC,eAAe,CAAC,IAAI,YAAY;IACzD,oBAAoB,IAAI,CAAC,eAAe,CAAC,KAAK,YAAY,CAAC,aAAa,EAAE;IAC1E,oBAAoB,YAAY,CAAC,OAAO,CAAC,WAAW,CAAC;IACrD,oBAAoB,WAAW,CAAC,KAAK,GAAG,YAAY;IACpD,gBAAgB,CAAC,MAAM;IACvB,oBAAoB,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC;IACzD,oBAAoB,YAAY,GAAG,IAAI;IACvC,gBAAgB;IAChB,YAAY;IACZ,QAAQ,CAAC,CAAC;;IAEV,QAAQ,OAAO,IAAI,CAAC,cAAc;IAClC,IAAI;;IAEJ;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,OAAO,CAAC,SAAS,EAAE;IACvB,QAAQ,IAAI,CAAC,oBAAoB,CAAC,SAAS,CAAC;;IAE5C,QAAQ,IAAI,IAAI,CAAC,kBAAkB,EAAE;IACrC,YAAY,IAAI,CAAC,kBAAkB,CAAC,cAAc,CAAC,IAAI,CAAC,cAAc,CAAC;IACvE,QAAQ;;IAER,QAAQ,IAAI,CAAC,OAAO,EAAE;IACtB,IAAI;;IAEJ;IACA;IACA;IACA;IACA,IAAI,MAAM,GAAG;IACb,QAAQ,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE;IACtC;IACA,QAAQ,IAAI,CAAC,OAAO,EAAE;IACtB,IAAI;;IAEJ;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,IAAI,CAAC,WAAW,EAAE,UAAU,GAAG,EAAE,EAAE,eAAe,GAAG,EAAE,EAAE;IAC7D,QAAQ,IAAI,CAAC,kBAAkB,GAAG,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,cAAc,CAAC;IAC5E,QAAQ,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,kBAAkB,EAAE,UAAU,CAAC;;IAE1D,QAAQ,IAAI,CAAC,uBAAuB,GAAG,IAAI,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC;IAC9E,QAAQ,IAAI,CAAC,uBAAuB,CAAC,UAAU,CAAC,IAAI,CAAC,kBAAkB,CAAC;IACxE,QAAQ,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,uBAAuB,EAAE,eAAe,CAAC;IACpE,IAAI;;IAEJ;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,MAAM,CAAC,SAAS,EAAE;IACtB,QAAQ,MAAM,SAAS,GAAG,IAAI,CAAC,cAAc;IAC7C,QAAQ,MAAM,SAAS,GAAG,EAAE;IAC5B;IACA,QAAQ,MAAM,WAAW,GAAG,IAAI,GAAG,EAAE;IACrC,QAAQ,MAAM,YAAY,GAAG,IAAI,GAAG,EAAE;IACtC;IACA,QAAQ,SAAS,CAAC,OAAO,CAAC,KAAK,IAAI;IACnC,YAAY,IAAI,KAAK,YAAY,UAAU,EAAE;IAC7C,gBAAgB,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC;IACnD,YAAY,CAAC,MAAM,IAAI,KAAK,YAAY,WAAW,EAAE;IACrD,gBAAgB,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC;IACpD,YAAY;IACZ,QAAQ,CAAC,CAAC;;IAEV,QAAQ,IAAI,YAAY,GAAG,IAAI;IAC/B,QAAQ,IAAI,QAAQ,GAAG,CAAC;;IAExB,QAAQ,SAAS,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,KAAK,KAAK;IAC3C,YAAY,IAAI,IAAI,CAAC,OAAO,KAAK,UAAU,EAAE;IAC7C,gBAAgB,IAAI,QAAQ,uCAAuC,IAAI,CAAC;IACxE,gBAAgB,MAAM,aAAa,GAAG,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC;IACrE;IACA,gBAAgB,IAAI,aAAa,EAAE;IACnC,oBAAoB,aAAa,CAAC,MAAM,CAAC,QAAQ,CAAC;IAClD,oBAAoB,aAAa,CAAC,QAAQ,GAAG,QAAQ;IACrD,oBAAoB,aAAa,CAAC,KAAK,GAAG,EAAE;IAC5C,oBAAoB,YAAY,GAAG,aAAa;IAChD,oBAAoB,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC;IACjD,oBAAoB,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;IACtD,gBAAgB,CAAC,MAAM;IACvB,oBAAoB,YAAY,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC;IACzE,oBAAoB,YAAY,CAAC,QAAQ,GAAG,QAAQ;IACpD,oBAAoB,SAAS,CAAC,IAAI,CAAC,YAAY,CAAC;IAChD,gBAAgB;IAChB,gBAAgB,QAAQ,EAAE;IAC1B,YAAY;IACZ,iBAAiB,IAAI,IAAI,CAAC,OAAO,KAAK,QAAQ,EAAE;IAChD,gBAAgB,IAAI,QAAQ,qCAAqC,IAAI,CAAC;IACtE,gBAAgB,MAAM,cAAc,GAAG,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC;IACvE;IACA,gBAAgB,IAAI,cAAc,EAAE;IACpC,oBAAoB,cAAc,CAAC,MAAM,CAAC,QAAQ,CAAC;IACnD,oBAAoB,cAAc,CAAC,QAAQ,GAAG,QAAQ;IACtD;IACA,oBAAoB,IAAI,QAAQ,CAAC,eAAe,CAAC,IAAI,YAAY,EAAE;IACnE,wBAAwB,YAAY,CAAC,OAAO,CAAC,cAAc,CAAC;IAC5D,wBAAwB,cAAc,CAAC,KAAK,GAAG,YAAY;IAC3D,oBAAoB,CAAC,MAAM;IAC3B,wBAAwB,cAAc,CAAC,KAAK,GAAG,IAAI;IACnD,wBAAwB,SAAS,CAAC,IAAI,CAAC,cAAc,CAAC;IACtD,oBAAoB;IACpB;IACA,oBAAoB,YAAY,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;IACvD,gBAAgB,CAAC,MAAM;IACvB,oBAAoB,MAAM,SAAS,GAAG,IAAI,WAAW,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC;IAC7E,oBAAoB,SAAS,CAAC,QAAQ,GAAG,QAAQ;IACjD;IACA,oBAAoB,IAAI,QAAQ,CAAC,eAAe,CAAC,IAAI,YAAY,EAAE;IACnE,wBAAwB,YAAY,CAAC,OAAO,CAAC,SAAS,CAAC;IACvD,wBAAwB,SAAS,CAAC,KAAK,GAAG,YAAY;IACtD,oBAAoB,CAAC,MAAM;IAC3B,wBAAwB,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC;IACjD,oBAAoB;IACpB,gBAAgB;IAChB,gBAAgB,QAAQ,EAAE;IAC1B,YAAY;IACZ,QAAQ,CAAC,CAAC;;IAEV,QAAQ,WAAW,CAAC,OAAO,CAAC,YAAY,IAAI;IAC5C,YAAY,IAAI,YAAY,CAAC,IAAI,EAAE;IACnC,gBAAgB,YAAY,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,MAAM,EAAE;IACrD,YAAY;IACZ,QAAQ,CAAC,CAAC;IACV;IACA,QAAQ,YAAY,CAAC,OAAO,CAAC,aAAa,IAAI;IAC9C,YAAY,IAAI,aAAa,CAAC,IAAI,EAAE;IACpC,gBAAgB,aAAa,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,MAAM,EAAE;IACtD,YAAY;IACZ,QAAQ,CAAC,CAAC;;IAEV,QAAQ,IAAI,CAAC,cAAc,GAAG,SAAS;IACvC;IACA,QAAQ,IAAI,IAAI,CAAC,kBAAkB,EAAE;IACrC,YAAY,IAAI,CAAC,kBAAkB,CAAC,UAAU,CAAC,IAAI,CAAC,cAAc,CAAC;IACnE,QAAQ;;IAER,QAAQ,IAAI,CAAC,SAAS,EAAE;IACxB,QAAQ,IAAI,CAAC,OAAO,EAAE;IACtB,IAAI;;IAEJ;IACA;IACA;IACA;IACA,IAAI,SAAS,GAAG,EAAE;;IAElB;IACA;IACA;IACA;IACA;IACA,IAAI,SAAS,CAAC,KAAK,EAAE;IACrB,QAAQ,IAAI,CAAC,kBAAkB,CAAC,WAAW,GAAG,KAAK;IACnD,IAAI;;IAEJ;IACA;IACA;IACA;IACA,IAAI,OAAO,GAAG;IACd,QAAQ,IAAI,CAAC,IAAI,CAAC,uBAAuB,EAAE;IAC3C,QAAQ,IAAI,CAAC,uBAAuB,CAAC,OAAO,EAAE;IAC9C,QAAQ,IAAI,CAAC,SAAS,EAAE;IACxB,IAAI;;IAEJ;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,YAAY,GAAG;IACnB,QAAQ,OAAO;IACf,YAAY,SAAS,EAAE,IAAI,CAAC,cAAc;IAC1C,YAAY,OAAO,EAAE,IAAI,CAAC,kBAAkB;IAC5C,YAAY,YAAY,EAAE,IAAI,CAAC;IAC/B,SAAS;IACT,IAAI;;IAEJ;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,eAAe,CAAC,UAAU,EAAE;IAChC,QAAQ,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC,UAAU,CAAC;IACxD,IAAI;;IAEJ;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,cAAc,CAAC,UAAU,EAAE;IAC/B,QAAQ,IAAI,CAAC,kBAAkB,CAAC,UAAU,CAAC,UAAU,CAAC;IACtD,IAAI;IACJ;;IC3RA;IACA;IACA;IACO,MAAM,UAAU,CAAC;IACxB;IACA;IACA;IACA,IAAI,IAAI,GAAG,IAAI;;IAEf,IAAI,OAAO,GAAG,IAAI;;IAElB;IACA;IACA;IACA;IACA,IAAI,WAAW,CAAC,OAAO,GAAG,IAAI,EAAE;IAChC,QAAQ,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;IACrC,IAAI;;IAEJ;IACA;IACA;IACA;IACA;IACA,IAAI,IAAI,CAAC,OAAO,EAAE;IAClB,QAAQ,IAAI,CAAC,OAAO,GAAG,OAAO;IAC9B;IACA,QAAQ,IAAI,CAAC,IAAI,kCAAkC,IAAI,CAAC,WAAW,CAAC;IACpE,YAAY,IAAI,EAAE,KAAK;IACvB,YAAY,SAAS,EAAE,CAAC,0BAA0B,EAAE,MAAM,CAAC;IAC3D,YAAY,IAAI,EAAE,QAAQ;IAC1B,YAAY,QAAQ,EAAE;IACtB,SAAS,CAAC,CAAC;IACX,IAAI;;IAEJ;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,IAAI,CAAC,IAAI,GAAG,QAAQ,EAAE;IAC1B,QAAQ,MAAM,IAAI,GAAG,IAAI,KAAK,UAAU;IACxC,cAAc,IAAI,CAAC,OAAO,CAAC,YAAY;IACvC,cAAc,IAAI,CAAC,OAAO,CAAC,UAAU;IACrC;IACA,QAAQ,IAAI,CAAC,IAAI,CAAC,WAAW,GAAG,IAAI;IACpC,QAAQ,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC;IAC1C,IAAI;;IAEJ;IACA;IACA;IACA,IAAI,IAAI,GAAG;IACX,QAAQ,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC;IACvC,IAAI;;IAEJ;IACA;IACA;IACA;IACA;IACA,IAAI,IAAI,SAAS,GAAG;IACpB,QAAQ,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC;IACpD,IAAI;IACJ;;ICjEO,MAAM,YAAY,CAAC;;IAE1B;IACA,IAAI,IAAI,GAAG,IAAI;IACf;IACA,IAAI,OAAO,GAAG,IAAI;;IAElB;IACA;IACA;IACA;IACA,IAAI,WAAW,CAAC,OAAO,GAAG,IAAI,EAAE;IAChC,QAAQ,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACtC,IAAI;IACJ;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,IAAI,CAAC,OAAO,EAAE;IAClB,QAAQ,IAAI,CAAC,OAAO,GAAG,OAAO;IAC9B,QAAQ,IAAI,CAAC,IAAI,iCAAiC,IAAI,CAAC,WAAW,CAAC;IACnE,YAAY,IAAI,EAAE,KAAK;IACvB,YAAY,SAAS,EAAE,CAAC,4BAA4B,EAAE,MAAM,CAAC;IAC7D,YAAY,WAAW,EAAE,OAAO,CAAC,WAAW;IAC5C,YAAY,IAAI,EAAE,QAAQ;IAC1B,YAAY,QAAQ,EAAE;IACtB,SAAS,CAAC,CAAC;IACX,IAAI;;IAEJ;IACA;IACA;IACA;IACA;IACA,IAAI,IAAI,CAAC,QAAQ,EAAE;IACnB,QAAQ,IAAI,CAAC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW;IACxD,QAAQ,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,EAAE,QAAQ,CAAC;IACrD,QAAQ,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC;IAC1C,IAAI;;IAEJ;IACA;IACA;IACA,IAAI,IAAI,GAAG;IACX,QAAQ,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC;IACvC,IAAI;;IAEJ;IACA;IACA;IACA;IACA;IACA,IAAI,IAAI,SAAS,GAAG;IACpB,QAAQ,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC;IACpD,IAAI;IACJ;;ICrDA;IACA;IACA;IACO,MAAM,YAAY,SAAS,OAAO,CAAC;IAC1C,IAAI,UAAU,GAAG,KAAK;IACtB,IAAI,2BAA2B,GAAG,EAAE;IACpC,IAAI,sBAAsB,GAAG,EAAE;IAC/B;IACA,IAAI,mBAAmB,GAAG,IAAI;;IAE9B;IACA,IAAI,MAAM,GAAG,EAAE;;IAEf;IACA,IAAI,WAAW,GAAG,EAAE;;IAEpB,IAAI,WAAW,CAAC,KAAK,GAAG,EAAE,EAAE;IAC5B,QAAQ,KAAK,CAAC,KAAK,CAAC;IACpB,QAAQ,IAAI,CAAC,mBAAmB,EAAE;IAClC,IAAI;;IAEJ;IACA;IACA;IACA,IAAI,mBAAmB,GAAG;IAC1B,QAAQ,IAAI,CAAC,WAAW,GAAG,EAAE;IAC7B,QAAQ,IAAI,CAAC,MAAM,GAAG,EAAE;;IAExB,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,IAAI;IACnC,YAAY,IAAI,IAAI,YAAY,UAAU,EAAE;IAC5C,gBAAgB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;IACtC,gBAAgB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC;IACpD,YAAY,CAAC,MAAM,IAAI,IAAI,YAAY,WAAW,EAAE;IACpD,gBAAgB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;IAC3C,YAAY;IACZ,QAAQ,CAAC,CAAC;IACV,IAAI;;IAEJ;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,UAAU,CAAC,MAAM,EAAE,IAAI,EAAE;IAC7B,QAAQ,IAAI,IAAI,YAAY,UAAU,EAAE;IACxC,YAAY,OAAO,IAAI,SAAS,CAAC,MAAM,CAAC;IACxC,QAAQ,CAAC,MAAM;IACf,YAAY,OAAO,IAAI,UAAU,CAAC,MAAM,CAAC;IACzC,QAAQ;IACR,IAAI;IACJ;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE;IACzC,QAAQ,IAAI,CAAC,QAAQ,GAAG,QAAQ;IAChC;IACA,QAAQ,IAAI,IAAI,YAAY,UAAU,EAAE;IACxC,YAAY,IAAI,CAAC,gBAAgB,CAAC,IAAI,4BAA4B,MAAM,GAAG,QAAQ,CAAC;IACpF,QAAQ,CAAC,MAAM,IAAI,IAAI,YAAY,WAAW,EAAE;IAChD,YAAY,IAAI,CAAC,iBAAiB,CAAC,IAAI,6BAA6B,MAAM,GAAG,QAAQ,CAAC;IACtF,QAAQ;;IAER,QAAQ,IAAI,CAAC,MAAM,GAAG,IAAI;IAC1B,IAAI;IACJ;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,gBAAgB,CAAC,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAE;IACtD,QAAQ,KAAK,CAAC,YAAY,CAAC,UAAU,EAAE,SAAS,EAAE,QAAQ,CAAC;IAC3D,QAAQ,UAAU,CAAC,IAAI,GAAG,SAAS;;IAEnC,QAAQ,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC,aAAa,CAAC;IACtD,QAAQ,MAAM,CAAC,WAAW,GAAG,UAAU,CAAC,KAAK;;IAE7C,QAAQ,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE;IAChC,YAAY,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,SAAS;IAC3C,YAAY,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,MAAM;IACnD,gBAAgB,UAAU,CAAC,cAAc,EAAE;IAC3C,YAAY,CAAC,CAAC;;IAEd,YAAY,UAAU,CAAC,kBAAkB,CAAC,CAAC,QAAQ,EAAE,KAAK,EAAE,SAAS,KAAK;IAC1E,gBAAgB,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,IAAI;IAC/C,oBAAoB,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,EAAE,OAAO,EAAE;IAC3D,oBAAoB,IAAI,OAAO,EAAE;IACjC,wBAAwB,OAAO,CAAC,KAAK,CAAC,OAAO,GAAG,SAAS,GAAG,MAAM,GAAG,EAAE;IACvE,oBAAoB;IACpB,gBAAgB,CAAC,CAAC;IAClB,gBAAgB,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,SAAS,CAAC;IACxD,YAAY,CAAC,CAAC;IACd,QAAQ;;IAER,QAAQ,MAAM,cAAc,GAAG,SAAS,CAAC,iBAAiB,EAAE;IAC5D,QAAQ,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,GAAG,KAAK;IACvD,YAAY,IAAI,YAAY,GAAG,WAAW,CAAC,IAAI;IAC/C,YAAY,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE;IACrC,gBAAgB,YAAY,GAAG,IAAI,UAAU,CAAC,cAAc,CAAC;IAC7D,YAAY;IACZ,YAAY,IAAI,CAAC,iBAAiB,CAAC,WAAW,EAAE,YAAY,EAAE,GAAG,CAAC;IAClE,YAAY,WAAW,CAAC,MAAM,GAAG,IAAI;IACrC,QAAQ,CAAC,CAAC;;IAEV,QAAQ,SAAS,CAAC,YAAY,CAAC,UAAU,CAAC,SAAS,CAAC;IACpD,QAAQ,SAAS,CAAC,gBAAgB,EAAE;IACpC,IAAI;;IAEJ;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,iBAAiB,CAAC,WAAW,EAAE,YAAY,EAAE,QAAQ,EAAE;IAC3D,QAAQ,YAAY,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU;IACjD,QAAQ,YAAY,CAAC,QAAQ,GAAG,WAAW,CAAC,QAAQ;IACpD,QAAQ,YAAY,CAAC,YAAY,GAAG;IACpC,YAAY,UAAU,EAAE,WAAW,CAAC,OAAO,CAAC,UAAU;IACtD,YAAY,WAAW,EAAE,WAAW,CAAC,OAAO,CAAC,WAAW;IACxD,YAAY,iBAAiB,EAAE,WAAW,CAAC,OAAO,CAAC,iBAAiB;IACpE,YAAY,aAAa,EAAE,WAAW,CAAC,OAAO,CAAC,aAAa;IAC5D,YAAY,WAAW,EAAE,WAAW,CAAC,OAAO,CAAC,WAAW;IACxD,YAAY,WAAW,EAAE,WAAW,CAAC,OAAO,CAAC;IAC7C,SAAS;;IAET,QAAQ,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE;IACjC,YAAY,KAAK,CAAC,YAAY,CAAC,WAAW,EAAE,YAAY,EAAE,QAAQ,CAAC;IACnE,QAAQ,CAAC,MAAM;IACf,YAAY,YAAY,CAAC,MAAM,EAAE;IACjC,QAAQ;;IAER,QAAQ,WAAW,CAAC,IAAI,GAAG,YAAY;;IAEvC,QAAQ,IAAI,WAAW,CAAC,QAAQ,EAAE;IAClC,YAAY,MAAM,QAAQ,GAAG,YAAY,CAAC,MAAM,CAAC,aAAa,CAAC;IAC/D,YAAY,IAAI,QAAQ,EAAE;IAC1B,gBAAgB,QAAQ,CAAC,GAAG,GAAG,WAAW,CAAC,QAAQ;IACnD,gBAAgB,QAAQ,CAAC,GAAG,GAAG,WAAW,CAAC,IAAI;IAC/C,YAAY;IACZ,QAAQ;;IAER,QAAQ,YAAY,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,SAAS,GAAG,WAAW,CAAC,IAAI;;IAExE,QAAQ,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE;IACjC,YAAY,YAAY,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,gBAAgB,CAAC,OAAO,EAAE,CAAC,EAAE,KAAK;IAChF,gBAAgB,EAAE,CAAC,eAAe,EAAE;IACpC,gBAAgB,EAAE,CAAC,cAAc,EAAE;;IAEnC,gBAAgB,IAAI,IAAI,CAAC,WAAW,EAAE;;IAEtC,gBAAgB,IAAI,IAAI,CAAC,UAAU,EAAE;IACrC,oBAAoB,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC;IAC/C,oBAAoB,UAAU,CAAC,MAAM;IACrC,wBAAwB,WAAW,CAAC,QAAQ,GAAG,CAAC,WAAW,CAAC,QAAQ;IACpE,oBAAoB,CAAC,EAAE,CAAC,CAAC;IACzB,gBAAgB,CAAC,MAAM,IAAI,WAAW,CAAC,QAAQ,KAAK,IAAI,EAAE;IAC1D,oBAAoB,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC;IAC/C,oBAAoB,UAAU,CAAC,MAAM;IACrC,wBAAwB,IAAI,IAAI,CAAC,mBAAmB,EAAE;IACtD,4BAA4B,IAAI,CAAC,mBAAmB,CAAC,QAAQ,GAAG,KAAK;IACrE,wBAAwB;IACxB,wBAAwB,WAAW,CAAC,QAAQ,GAAG,IAAI;IACnD,oBAAoB,CAAC,EAAE,CAAC,CAAC;IACzB,gBAAgB;IAChB,YAAY,CAAC,CAAC;;IAEd,YAAY,YAAY,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,KAAK,GAAG,WAAW,CAAC,WAAW;;IAE7E,YAAY,YAAY,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,gBAAgB,CAAC,YAAY,EAAE,MAAM;IACnF,gBAAgB,IAAI,IAAI,CAAC,WAAW,EAAE;IACtC,gBAAgB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,KAAK,CAAC;IAC/E,YAAY,CAAC,CAAC;;IAEd,YAAY,WAAW,CAAC,UAAU,CAAC,CAAC,QAAQ,EAAE,EAAE,EAAE,QAAQ,KAAK;IAC/D,gBAAgB,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC;IAC3C,YAAY,CAAC,CAAC;;IAEd,YAAY,WAAW,CAAC,kBAAkB,CAAC,CAAC,QAAQ,EAAE,EAAE,EAAE,QAAQ,KAAK;IACvE,gBAAgB,IAAI,QAAQ,EAAE;IAC9B,oBAAoB,IAAI,CAAC,mBAAmB,GAAG,WAAW;IAC1D,gBAAgB;IAChB,gBAAgB,IAAI,CAAC,UAAU,CAAC,mBAAmB,CAAC;IACpD,YAAY,CAAC,CAAC;;IAEd,YAAY,WAAW,CAAC,mBAAmB,CAAC,CAAC,QAAQ,EAAE,KAAK,EAAE,OAAO,KAAK;IAC1E,gBAAgB,IAAI,KAAK,CAAC,KAAK,EAAE;IACjC,oBAAoB,KAAK,CAAC,KAAK,CAAC,gBAAgB,EAAE;IAClD,gBAAgB;IAChB,gBAAgB,IAAI,CAAC,wBAAwB,EAAE;IAC/C,YAAY,CAAC,CAAC;IACd,QAAQ;;IAER,QAAQ,IAAI,WAAW,CAAC,QAAQ,EAAE;IAClC,YAAY,IAAI,CAAC,mBAAmB,GAAG,WAAW;IAClD,YAAY,WAAW,CAAC,kBAAkB,GAAG,IAAI;IACjD,QAAQ;IACR,IAAI;IACJ;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,QAAQ,CAAC,KAAK,EAAE;IACpB,QAAQ,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,KAAK,CAAC;IACzC,QAAQ,IAAI,CAAC,KAAK,GAAG,KAAK;IAC1B,QAAQ,IAAI,CAAC,mBAAmB,EAAE;IAClC,QAAQ,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,KAAK,CAAC;IACvC,IAAI;IACJ;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,cAAc,CAAC,KAAK,EAAE;IAC1B,QAAQ,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;IAC5B,IAAI;IACJ;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,UAAU,CAAC,KAAK,EAAE;IACtB,QAAQ,IAAI,CAAC,KAAK,GAAG,KAAK;IAC1B,QAAQ,IAAI,CAAC,mBAAmB,EAAE;IAClC,IAAI;IACJ;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,gBAAgB,GAAG;IACvB,QAAQ,OAAO,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,IAAI,IAAI,CAAC,QAAQ,CAAC;IAC7D,IAAI;;IAEJ;IACA;IACA;IACA;IACA;IACA,IAAI,eAAe,GAAG;IACtB,QAAQ,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,QAAQ,CAAC;IAC3D,IAAI;;IAEJ;IACA;IACA;IACA;IACA;IACA,IAAI,QAAQ,CAAC,SAAS,EAAE;IACxB,QAAQ,IAAI,IAAI,CAAC,UAAU,EAAE;IAC7B,YAAY,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,IAAI;IAC7C,gBAAgB,IAAI,CAAC,QAAQ,GAAG,SAAS;IACzC,YAAY,CAAC,CAAC;IACd,QAAQ;IACR,IAAI;;IAEJ;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,mBAAmB,CAAC,QAAQ,EAAE;IAClC,QAAQ,IAAI,CAAC,2BAA2B,CAAC,IAAI,CAAC,QAAQ,CAAC;IACvD,IAAI;;IAEJ;IACA;IACA;IACA;IACA,IAAI,wBAAwB,GAAG;IAC/B,QAAQ,MAAM,YAAY,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM;IACjF,QAAQ,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM;;IAElD,QAAQ,IAAI,CAAC,2BAA2B,CAAC,OAAO,CAAC,QAAQ,IAAI;IAC7D,YAAY,QAAQ,CAAC;IACrB,gBAAgB,YAAY;IAC5B,gBAAgB,UAAU;IAC1B,gBAAgB,UAAU,EAAE,YAAY,GAAG,CAAC;IAC5C,gBAAgB,OAAO,EAAE,UAAU,KAAK;IACxC,aAAa,CAAC;IACd,QAAQ,CAAC,CAAC;IACV,IAAI;;IAEJ;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,kBAAkB,GAAG;IACzB,QAAQ,MAAM,YAAY,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM;IACjF,QAAQ,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM;;IAElD,QAAQ,OAAO;IACf,YAAY,YAAY;IACxB,YAAY,UAAU;IACtB,YAAY,UAAU,EAAE,YAAY,GAAG,CAAC;IACxC,YAAY,OAAO,EAAE,UAAU,KAAK;IACpC,SAAS;IACT,IAAI;;IAEJ;IACA;IACA;IACA,IAAI,cAAc,GAAG;IACrB,QAAQ,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;IAC5B,IAAI;;IAEJ;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,QAAQ,CAAC,SAAS,EAAE,cAAc,GAAG,IAAI,EAAE;IAC/C,QAAQ,MAAM,cAAc,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC;IAC1E,QAAQ,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC,EAAE;;IAEzC,QAAQ,IAAI,mBAAmB,GAAG,cAAc,CAAC,SAAS;IAC1D,YAAY,GAAG,IAAI,GAAG,KAAK,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,sBAAsB;IACvE,SAAS;;IAET,QAAQ,IAAI,mBAAmB,KAAK,EAAE,EAAE,mBAAmB,GAAG,EAAE;;IAEhE,QAAQ,IAAI,gBAAgB,GAAG,mBAAmB,GAAG,SAAS;;IAE9D,QAAQ,IAAI,gBAAgB,IAAI,cAAc,CAAC,MAAM,EAAE,gBAAgB,GAAG,CAAC;IAC3E,QAAQ,IAAI,gBAAgB,GAAG,CAAC,EAAE,gBAAgB,GAAG,cAAc,CAAC,MAAM,GAAG,CAAC;;IAE9E,QAAQ,MAAM,UAAU,GAAG,cAAc,CAAC,gBAAgB,CAAC;IAC3D,QAAQ,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,UAAU,CAAC;;IAE9D,QAAQ,IAAI,CAAC,YAAY,CAAC,SAAS,EAAE,cAAc,CAAC;IACpD,IAAI;;IAEJ;IACA;IACA;IACA;IACA,IAAI,iBAAiB,GAAG;IACxB,QAAQ,IAAI,IAAI,CAAC,sBAAsB,GAAG,EAAE,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,sBAAsB,CAAC,EAAE;IAC/F,YAAY,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,sBAAsB,CAAC;IACtE,YAAY,IAAI,IAAI,CAAC,OAAO,EAAE;IAC9B,gBAAgB,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE;IACnD,gBAAgB,IAAI,MAAM,EAAE,MAAM,CAAC,KAAK,EAAE;IAC1C,YAAY;IACZ,QAAQ;IACR,IAAI;;IAEJ;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,YAAY,CAAC,MAAM,EAAE,cAAc,GAAG,IAAI,EAAE;IAChD,QAAQ,IAAI,KAAK,GAAG,CAAC;IACrB,QAAQ,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE;IACxC,YAAY,KAAK,GAAG,MAAM;IAC1B,QAAQ,CAAC,MAAM,IAAI,MAAM,YAAY,WAAW,EAAE;IAClD,YAAY,MAAM,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC;IACvD,YAAY,KAAK,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACpC,QAAQ,CAAC,MAAM;IACf,YAAY,KAAK,GAAG,CAAC;IACrB,QAAQ;IACR;IACA,QAAQ,IAAI,IAAI,CAAC,sBAAsB,GAAG,EAAE,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,sBAAsB,CAAC,EAAE;IAC/F,YAAY,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC,WAAW,GAAG,KAAK;IAC7E,QAAQ;;IAER,QAAQ,KAAK,IAAI,CAAC,GAAG,KAAK,EAAE,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;IAC9D,YAAY,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;IAC5C,YAAY,IAAI,IAAI,CAAC,OAAO,EAAE;IAC9B,gBAAgB,IAAI,CAAC,WAAW,GAAG,IAAI;IACvC,gBAAgB,IAAI,CAAC,sBAAsB,GAAG,CAAC;;IAE/C,gBAAgB,IAAI,cAAc,EAAE;IACpC,oBAAoB,MAAM,EAAE,GAAG,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE;IACnD,oBAAoB,IAAI,EAAE,EAAE;IAC5B,wBAAwB,EAAE,CAAC,cAAc,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC;IAClF,oBAAoB;IACpB,gBAAgB;;IAEhB,gBAAgB,IAAI,CAAC,iBAAiB,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;IACnE,gBAAgB;IAChB,YAAY;IACZ,QAAQ;IACR,IAAI;;IAEJ;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,iBAAiB,CAAC,KAAK,EAAE,EAAE,EAAE,CAAC;;IAElC;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,iBAAiB,CAAC,KAAK,EAAE,SAAS,EAAE,CAAC;IACzC;;ICzaA;IACA;IACA;IACO,MAAM,KAAK,CAAC;IACnB;IACA,IAAI,aAAa;;IAEjB;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,WAAW,CAAC,MAAM,GAAG,IAAI,EAAE,OAAO,GAAG,IAAI,EAAE,YAAY,GAAG,IAAI,EAAE;IACpE,QAAQ,IAAI,CAAC,aAAa,GAAG,YAAY;IACzC,QAAQ,IAAI,MAAM,IAAI,OAAO,EAAE;IAC/B,YAAY,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC;IACtC,QAAQ;IACR,IAAI;;IAEJ,IAAI,OAAO,GAAG,IAAI;IAClB,IAAI,SAAS,GAAG,KAAK;;IAErB;IACA;IACA;IACA,IAAI,aAAa,GAAG,IAAI;IACxB;IACA;IACA;IACA;IACA,IAAI,IAAI,GAAG,IAAI;;IAEf;IACA;IACA;IACA,IAAI,OAAO,GAAG,IAAI;;IAElB;IACA;IACA;IACA,IAAI,YAAY;;IAEhB,IAAI,OAAO,GAAG,IAAI;;IAElB;IACA;IACA;IACA,IAAI,YAAY,GAAG,IAAI;;IAEvB;IACA;IACA;IACA,IAAI,UAAU,GAAG,IAAI;;IAErB;IACA;IACA;IACA,IAAI,YAAY,GAAG,IAAI;;IAEvB;IACA;IACA;IACA,IAAI,YAAY,GAAG,IAAI;;IAEvB;IACA;IACA;IACA,IAAI,iBAAiB,GAAG,IAAI;;IAE5B,IAAI,eAAe,GAAG,IAAI;;IAE1B;IACA;IACA;IACA,IAAI,eAAe,GAAG,IAAI;IAC1B;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE;IAC1B,QAAQ,IAAI,CAAC,YAAY,GAAG,IAAI,YAAY,CAAC,OAAO,CAAC;IACrD,QAAQ,IAAI,CAAC,UAAU,GAAG,IAAI,UAAU,CAAC,OAAO,CAAC;IACjD,QAAQ,IAAI,CAAC,YAAY,GAAG,IAAI,YAAY,CAAC,OAAO,CAAC;IACrD;IACA,QAAQ,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC;IAC3C,YAAY,cAAc,EAAE;IAC5B,gBAAgB,GAAG,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,oBAAoB,EAAE,KAAK,EAAE,CAAC,SAAS,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC;IAC5G,gBAAgB,KAAK,EAAE;IACvB,oBAAoB,YAAY,EAAE;IAClC,wBAAwB,GAAG,EAAE,IAAI,CAAC,YAAY,CAAC;IAC/C,qBAAqB;IACrB,oBAAoB,gBAAgB,EAAE;IACtC,wBAAwB,GAAG,EAAE,CAAC,EAAE,EAAE,OAAO,CAAC,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,gCAAgC,EAAE,IAAI,EAAE,SAAS;IAC9H,qBAAqB;IACrB,oBAAoB,YAAY,EAAE;IAClC,wBAAwB,GAAG,EAAE,IAAI,CAAC,YAAY,CAAC;IAC/C,qBAAqB;IACrB,oBAAoB,UAAU,EAAE;IAChC,wBAAwB,GAAG,EAAE,IAAI,CAAC,UAAU,CAAC;IAC7C;IACA;IACA;IACA,SAAS,CAAC;IACV;IACA,QAAQ,IAAI,CAAC,IAAI,GAAG,WAAW,CAAC,IAAI;IACpC,QAAQ,IAAI,CAAC,iBAAiB,GAAG,WAAW,CAAC,IAAI,CAAC,gBAAgB;IAClE,QAAQ,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC;IAChD,QAAQ,IAAI,CAAC,OAAO,GAAG,OAAO;IAC9B;IACA,QAAQ,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC,UAAU,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;IACvF,QAAQ,MAAM,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC,YAAY,EAAE;IAC7D,QAAQ,IAAI,CAAC,aAAa,GAAG,WAAW,CAAC,OAAO;IAChD,QAAQ,IAAI,CAAC,YAAY,GAAG,WAAW,CAAC,YAAY;;IAEpD,QAAQ,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,MAAM;IAC5C,YAAY,WAAW,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC;IAC9C,QAAQ,CAAC,CAAC;IACV,QAAQ,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,MAAM;IAC9C,YAAY,WAAW,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC;IAC/C,QAAQ,CAAC,CAAC;;IAEV,QAAQ,IAAI,CAAC,qBAAqB,EAAE;IACpC,IAAI;;IAEJ;IACA;IACA;IACA;IACA,IAAI,MAAM,WAAW,GAAG;IACxB,QAAQ,YAAY,CAAC,IAAI,CAAC,eAAe,CAAC;;IAE1C,QAAQ,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,IAAI,CAAC;IAC1C,QAAQ,IAAI,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,KAAK,KAAK,EAAE;IACtE,QAAQ,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,kBAAkB,EAAE,CAAC,UAAU,CAAC;IAClF;IACA,QAAQ,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE;IAChC,QAAQ,IAAI,CAAC,aAAa,EAAE;IAC5B,IAAI;;IAEJ;IACA;IACA;IACA;IACA,IAAI,MAAM,WAAW,GAAG;IACxB,QAAQ,YAAY,CAAC,IAAI,CAAC,eAAe,CAAC;;IAE1C,QAAQ,IAAI,CAAC,eAAe,GAAG,UAAU,CAAC,MAAM;IAChD,YAAY,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,KAAK,CAAC;IAC/C,YAAY,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE;IACpC;IACA,YAAY,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,kBAAkB,EAAE;IACjE,YAAY,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC;IACzC;IACA,YAAY,IAAI,CAAC,aAAa,EAAE;IAChC,QAAQ,CAAC,EAAE,GAAG,CAAC;IACf,IAAI;;IAEJ;IACA;IACA;IACA;IACA,IAAI,qBAAqB,GAAG;IAC5B,QAAQ,IAAI,CAAC,aAAa,CAAC,mBAAmB,CAAC,CAAC,KAAK,KAAK;IAC1D,YAAY,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC;IACzC,QAAQ,CAAC,CAAC;IACV;IACA,QAAQ,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,OAAO,EAAE,MAAM;IACxD,YAAY,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,kBAAkB,EAAE;IACjE,YAAY,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC;;IAEzC,YAAY,IAAI,CAAC,aAAa,EAAE;IAChC,QAAQ,CAAC,CAAC;IACV,IAAI;;IAEJ;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,iBAAiB,CAAC,KAAK,GAAG,IAAI,EAAE;IACpC,QAAQ,IAAI,CAAC,KAAK,EAAE;IACpB,YAAY,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,kBAAkB,EAAE;IAC3D,QAAQ;;IAER,QAAQ,IAAI,KAAK,EAAE,OAAO,EAAE;IAC5B,YAAY,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC;IAC1C,YAAY,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC;IACxD,YAAY,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE;IACpC,QAAQ,CAAC,MAAM,IAAI,KAAK,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE;IAC/C,YAAY,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC;IAC5C,YAAY,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC;IACxD,YAAY,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE;IACpC,QAAQ,CAAC,MAAM;IACf,YAAY,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE;IAClC,YAAY,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC;IAC3D,YAAY,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE;IACvC,QAAQ;IACR,IAAI;;IAEJ;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,qBAAqB,CAAC,QAAQ,EAAE,QAAQ,EAAE;IAC9C,QAAQ,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC7D,IAAI;;IAEJ;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,oBAAoB,CAAC,QAAQ,EAAE,QAAQ,EAAE;IAC7C,QAAQ,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC5D,IAAI;;IAEJ;IACA;IACA;IACA;IACA;IACA,IAAI,aAAa,CAAC,WAAW,EAAE;IAC/B,QAAQ,IAAI,CAAC,OAAO,GAAG,WAAW;IAClC,IAAI;;IAEJ;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,IAAI,CAAC,QAAQ,GAAG,IAAI,EAAE;IAC1B,QAAQ,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;IAC7B,YAAY,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;IAChD,YAAY,IAAI,CAAC,SAAS,GAAG,IAAI;;IAEjC,YAAY,IAAI,CAAC,YAAY,GAAG,IAAI,qBAAqB,EAAE;IAC3D,YAAY,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC;;IAE9C,YAAY,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,WAAW,EAAE,CAAC,CAAC,KAAK;IAC3D,gBAAgB,CAAC,CAAC,eAAe,EAAE;IACnC,gBAAgB,CAAC,CAAC,cAAc,EAAE;IAClC,YAAY,CAAC,CAAC;IACd,QAAQ;;IAER,QAAQ,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE;IACnC,QAAQ,IAAI,CAAC,iBAAiB,EAAE;IAChC;IACA,QAAQ,MAAM,QAAQ,GAAG,IAAI,CAAC,kBAAkB,EAAE;IAClD,QAAQ,MAAM,CAAC,QAAQ,EAAE,GAAG,EAAE,SAAS,EAAE,UAAU,CAAC,GAAG,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC;IACxF;IACA,QAAQ,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;IAC5B,YAAY,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,aAAa;IAChD,YAAY,OAAO,EAAE,MAAM;IAC3B,YAAY,KAAK,EAAE,QAAQ,CAAC,KAAK;IACjC,YAAY,IAAI,EAAE,QAAQ,CAAC,IAAI;IAC/B,YAAY,GAAG,EAAE,GAAG;IACpB,YAAY,SAAS,EAAE,SAAS;IAChC,YAAY,UAAU,EAAE,UAAU;IAClC,YAAY,QAAQ,EAAE,QAAQ;IAC9B,YAAY,UAAU,EAAE,MAAM;IAC9B,gBAAgB,IAAI,CAAC,YAAY,CAAC,SAAS,GAAG,CAAC,WAAW,KAAK,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC;IAC9F,gBAAgB,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC;IAChF,gBAAgB,QAAQ,IAAI,QAAQ,EAAE;IACtC,YAAY;IACZ,SAAS,CAAC;IACV,IAAI;;IAEJ;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,KAAK,CAAC,QAAQ,GAAG,IAAI,EAAE;IAC3B,QAAQ,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;IAC7B,YAAY;IACZ,QAAQ;;IAER,QAAQ,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE;IACtC;IACA,QAAQ,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC;IAC9B,YAAY,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,aAAa;IAChD,YAAY,UAAU,EAAE;IACxB,SAAS,CAAC;IACV,IAAI;;IAEJ;IACA;IACA;IACA;IACA,IAAI,aAAa,GAAG;IACpB,QAAQ,IAAI,IAAI,CAAC,SAAS,EAAE;IAC5B,YAAY,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE;IACvC,QAAQ;IACR,IAAI;;IAEJ;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,mBAAmB,CAAC,gBAAgB,EAAE,OAAO,EAAE;IACnD,QAAQ,IAAI,CAAC,eAAe,GAAG,YAAY;IAC3C,YAAY,MAAM,KAAK,GAAG,gBAAgB,CAAC,kBAAkB,EAAE;IAC/D;IACA,YAAY,IAAI,CAAC,KAAK,CAAC,mBAAmB,EAAE;IAC5C,gBAAgB;IAChB,YAAY;;IAEZ,YAAY,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI;IACvC,YAAY,MAAM,SAAS,GAAG,SAAS,CAAC,SAAS;IACjD,YAAY,MAAM,YAAY,GAAG,SAAS,CAAC,YAAY;IACvD,YAAY,MAAM,YAAY,GAAG,SAAS,CAAC,YAAY;IACvD;IACA,YAAY,IAAI,YAAY,GAAG,SAAS,GAAG,YAAY,GAAG,GAAG,EAAE;IAC/D,gBAAgB,IAAI,CAAC,KAAK,CAAC,SAAS,IAAI,KAAK,CAAC,OAAO,EAAE;IACvD,oBAAoB,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC,QAAQ,EAAE;IACpE;IACA,oBAAoB,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,OAAO,EAAE;IAC3D,wBAAwB,OAAO,CAAC,GAAG,CAAC,YAAY,EAAE,MAAM,CAAC,OAAO,CAAC;IACjE,oBAAoB;IACpB,gBAAgB;IAChB,YAAY;IACZ,QAAQ,CAAC;;IAET,QAAQ,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,IAAI,CAAC,eAAe,CAAC;IAClE,IAAI;;IAEJ;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,kBAAkB,GAAG;IACzB,QAAQ,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS;IAC/D,QAAQ,MAAM,IAAI,GAAG,SAAS,CAAC,qBAAqB,EAAE;IACtD,QAAQ,MAAM,KAAK,GAAG,MAAM,CAAC,gBAAgB,CAAC,SAAS,CAAC;;IAExD,QAAQ,MAAM,EAAE,GAAG,MAAM,CAAC,cAAc;IACxC,QAAQ,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,EAAE;IACnC;IACA,QAAQ,MAAM,eAAe,GAAG,EAAE,IAAI,MAAM,GAAG,EAAE,CAAC,SAAS,GAAG,CAAC;IAC/D,QAAQ,MAAM,eAAe,GAAG,EAAE,IAAI,MAAM,GAAG,EAAE,CAAC,UAAU,GAAG,CAAC;;IAEhE,QAAQ,OAAO;IACf,YAAY,KAAK,EAAE,IAAI,CAAC,KAAK;IAC7B,YAAY,MAAM,EAAE,IAAI,CAAC,MAAM;IAC/B,YAAY,GAAG,EAAE,IAAI,CAAC,GAAG,GAAG,eAAe;IAC3C,YAAY,IAAI,EAAE,IAAI,CAAC,IAAI,GAAG,eAAe;IAC7C,YAAY,OAAO,EAAE;IACrB,gBAAgB,GAAG,EAAE,UAAU,CAAC,KAAK,CAAC,UAAU,CAAC;IACjD,gBAAgB,KAAK,EAAE,UAAU,CAAC,KAAK,CAAC,YAAY,CAAC;IACrD,gBAAgB,MAAM,EAAE,UAAU,CAAC,KAAK,CAAC,aAAa,CAAC;IACvD,gBAAgB,IAAI,EAAE,UAAU,CAAC,KAAK,CAAC,WAAW,CAAC;IACnD,aAAa;IACb,YAAY,MAAM,EAAE;IACpB,gBAAgB,GAAG,EAAE,UAAU,CAAC,KAAK,CAAC,cAAc,CAAC;IACrD,gBAAgB,KAAK,EAAE,UAAU,CAAC,KAAK,CAAC,gBAAgB,CAAC;IACzD,gBAAgB,MAAM,EAAE,UAAU,CAAC,KAAK,CAAC,iBAAiB,CAAC;IAC3D,gBAAgB,IAAI,EAAE,UAAU,CAAC,KAAK,CAAC,eAAe,CAAC;IACvD;IACA,SAAS;IACT,IAAI;;IAEJ;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,kBAAkB,CAAC,QAAQ,EAAE;IACjC,QAAQ,MAAM,EAAE,GAAG,MAAM,CAAC,cAAc;IACxC,QAAQ,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,EAAE;IACnC,QAAQ,MAAM,cAAc,GAAG,EAAE,EAAE,MAAM,IAAI,MAAM,CAAC,WAAW;IAC/D,QAAQ,MAAM,eAAe,GAAG,EAAE,IAAI,MAAM,GAAG,EAAE,CAAC,SAAS,GAAG,CAAC;;IAE/D,QAAQ,MAAM,GAAG,GAAG,CAAC;IACrB,QAAQ,MAAM,UAAU,GAAG,EAAE;IAC7B;IACA,QAAQ,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,mBAAmB,CAAC,MAAM,CAAC;IACnE,QAAQ,MAAM,aAAa,GAAG,UAAU,CAAC,YAAY;;IAErD,QAAQ,MAAM,eAAe,GAAG,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,GAAG;IAC3E,QAAQ,MAAM,eAAe,GAAG,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,IAAI,GAAG;;IAE9E,QAAQ,MAAM,UAAU,GAAG,cAAc,IAAI,QAAQ,CAAC,GAAG,GAAG,QAAQ,CAAC,MAAM,CAAC,GAAG,GAAG;IAClF,QAAQ,MAAM,UAAU,GAAG,QAAQ,CAAC,GAAG,GAAG,GAAG;;IAE7C,QAAQ,IAAI,QAAQ,GAAG,QAAQ;IAC/B,QAAQ,IAAI,SAAS,GAAG,eAAe;IACvC,QAAQ,IAAI,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,SAAS,CAAC;IAC3D,QAAQ,MAAM,SAAS,GAAG,UAAU,GAAG,UAAU;IACjD;IACA,QAAQ,IAAI,UAAU,IAAI,eAAe,GAAG,SAAS,IAAI,eAAe,GAAG,SAAS,IAAI,UAAU,EAAE;IACpG,YAAY,QAAQ,GAAG,QAAQ;IAC/B,YAAY,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,GAAG,UAAU,EAAE,eAAe,CAAC;IAC1E,QAAQ,CAAC;IACT,aAAa,IAAI,UAAU,IAAI,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,eAAe,CAAC,EAAE;IACtE,YAAY,QAAQ,GAAG,KAAK;IAC5B,YAAY,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,GAAG,UAAU,EAAE,eAAe,CAAC;IAC1E,QAAQ;IACR,aAAa;IACb,YAAY,IAAI,UAAU,IAAI,UAAU,EAAE;IAC1C,gBAAgB,QAAQ,GAAG,QAAQ;IACnC,gBAAgB,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,GAAG,UAAU,EAAE,eAAe,CAAC;IAC9E,YAAY,CAAC,MAAM;IACnB,gBAAgB,QAAQ,GAAG,KAAK;IAChC,gBAAgB,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,GAAG,UAAU,EAAE,eAAe,CAAC;IAC9E,YAAY;IACZ,QAAQ;;IAER,QAAQ,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,SAAS,CAAC;IACvD;IACA,QAAQ,MAAM,GAAG,GAAG,QAAQ,KAAK;IACjC,eAAe,QAAQ,CAAC,GAAG,GAAG,QAAQ,CAAC,MAAM,GAAG,GAAG,GAAG,eAAe;IACrE,eAAe,QAAQ,CAAC,GAAG,GAAG,UAAU,GAAG,GAAG,GAAG,eAAe,CAAC;;IAEjE,QAAQ,OAAO,CAAC,QAAQ,EAAE,GAAG,EAAE,SAAS,EAAE,UAAU,EAAE,aAAa,CAAC;IACpE,IAAI;;IAEJ;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,aAAa,CAAC,QAAQ,EAAE;IAC5B,QAAQ,MAAM,CAAC,QAAQ,EAAE,GAAG,EAAE,SAAS,EAAE,UAAU,CAAC,GAAG,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC;IACxF;IACA,QAAQ,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;IAC5B,YAAY,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,aAAa;IAChD,YAAY,KAAK,EAAE,QAAQ,CAAC,KAAK;IACjC,YAAY,IAAI,EAAE,QAAQ,CAAC,IAAI;IAC/B,YAAY,GAAG,EAAE,GAAG;IACpB,YAAY,SAAS,EAAE,SAAS;IAChC,YAAY,UAAU,EAAE,UAAU;IAClC,YAAY,QAAQ,EAAE,QAAQ;IAC9B,YAAY,OAAO,EAAE;IACrB,SAAS,CAAC;IACV,IAAI;IACJ;;ICpdA;IACA;IACA;IACO,MAAM,SAAS,CAAC;IACvB;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,WAAW,CAAC,OAAO,GAAG,IAAI,EAAE;IAChC,QAAQ,IAAI,CAAC,OAAO,GAAG,OAAO;IAC9B,QAAQ,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;IACrC,IAAI;;IAEJ;IACA;IACA;IACA,IAAI,WAAW,GAAG,IAAI;;IAEtB;IACA;IACA;IACA,IAAI,IAAI,GAAG,IAAI;;IAEf;IACA;IACA;IACA,IAAI,WAAW,GAAG,IAAI;;IAEtB;IACA;IACA;IACA,IAAI,QAAQ,GAAG,IAAI;;IAEnB,IAAI,OAAO,GAAG,IAAI;;IAElB,IAAI,UAAU,GAAG,IAAI;IACrB,IAAI,OAAO,GAAG,IAAI;IAClB,IAAI,KAAK,GAAG,IAAI;IAChB;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,IAAI,CAAC,OAAO,EAAE;IAClB,QAAQ,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC;IAC1C,YAAY,SAAS,EAAE;IACvB,gBAAgB,GAAG,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,wBAAwB,EAAE,MAAM,CAAC,CAAC;IACjF,gBAAgB,KAAK,EAAE;IACvB,oBAAoB,WAAW,EAAE;IACjC,wBAAwB,GAAG,EAAE;IAC7B,4BAA4B,EAAE,EAAE,IAAI,CAAC,YAAY,EAAE;IACnD,4BAA4B,IAAI,EAAE,OAAO;IACzC,4BAA4B,IAAI,EAAE,QAAQ;IAC1C,4BAA4B,SAAS,EAAE,CAAC,8BAA8B,CAAC;IACvE,4BAA4B,WAAW,EAAE,OAAO,CAAC,WAAW;IAC5D,4BAA4B,IAAI,EAAE,WAAW;IAC7C,4BAA4B,YAAY,EAAE,OAAO,CAAC,SAAS;IAC3D,4BAA4B,gBAAgB,EAAE;IAC9C;IACA;IACA;IACA;IACA,SAAS,CAAC;IACV,QAAQ,IAAI,CAAC,IAAI,kCAAkC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;IACzE,QAAQ,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW;;IAE5D,QAAQ,IAAI,YAAY,GAAG,KAAK;;IAEhC;IACA,QAAQ,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW;;IAE7D,QAAQ,WAAW,CAAC,gBAAgB,CAAC,WAAW,EAAE,CAAC,CAAC,KAAK;IACzD,YAAY,CAAC,CAAC,eAAe,EAAE;IAC/B,QAAQ,CAAC,CAAC;IACV,QAAQ,WAAW,CAAC,gBAAgB,CAAC,SAAS,EAAE,CAAC,CAAC,KAAK;IACvD,YAAY,CAAC,CAAC,eAAe,EAAE;IAC/B,QAAQ,CAAC,CAAC;IACV,QAAQ,WAAW,CAAC,gBAAgB,CAAC,SAAS,EAAE,CAAC,CAAC,KAAK;IACvD,YAAY,YAAY,GAAG,KAAK;IAChC,YAAY,IAAI,CAAC,CAAC,GAAG,KAAK,WAAW,IAAI,CAAC,CAAC,GAAG,KAAK,KAAK,EAAE;IAC1D,gBAAgB,CAAC,CAAC,cAAc,EAAE;IAClC,gBAAgB,CAAC,CAAC,eAAe,EAAE;IACnC,gBAAgB,YAAY,GAAG,IAAI;IACnC,gBAAgB,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC;IACpC,YAAY,CAAC;IACb,iBAAiB,IAAI,CAAC,CAAC,GAAG,KAAK,SAAS,EAAE;IAC1C,gBAAgB,CAAC,CAAC,cAAc,EAAE;IAClC,gBAAgB,CAAC,CAAC,eAAe,EAAE;IACnC,gBAAgB,YAAY,GAAG,IAAI;IACnC,gBAAgB,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;IACrC,YAAY,CAAC;IACb,iBAAiB,IAAI,CAAC,CAAC,GAAG,KAAK,OAAO,EAAE;IACxC,gBAAgB,CAAC,CAAC,cAAc,EAAE;IAClC,gBAAgB,CAAC,CAAC,eAAe,EAAE;IACnC,gBAAgB,YAAY,GAAG,IAAI;IACnC,gBAAgB,IAAI,CAAC,OAAO,IAAI;IAChC,YAAY;IACZ,iBAAiB,IAAI,CAAC,CAAC,GAAG,KAAK,QAAQ,EAAE;IACzC,gBAAgB,CAAC,CAAC,cAAc,EAAE;IAClC,gBAAgB,CAAC,CAAC,eAAe,EAAE;IACnC,gBAAgB,YAAY,GAAG,IAAI;IACnC,gBAAgB,IAAI,CAAC,KAAK,IAAI;IAC9B,YAAY;IACZ,QAAQ,CAAC,CAAC;IACV,QAAQ,WAAW,CAAC,gBAAgB,CAAC,OAAO,EAAE,CAAC,CAAC,KAAK;IACrD,YAAY,IAAI,YAAY,EAAE;IAC9B,gBAAgB;IAChB,YAAY;IACZ;IACA,YAAY,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,IAAI,CAAC;IACzF,QAAQ,CAAC,CAAC;IACV,IAAI;;IAEJ;IACA;IACA;IACA;IACA,IAAI,IAAI,GAAG;IACX,QAAQ,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC;IAC1C,QAAQ,IAAI,CAAC,WAAW,CAAC,QAAQ,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU;IAC5D,QAAQ,IAAI,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE;IACrC,YAAY,qBAAqB,CAAC,MAAM;IACxC,gBAAgB,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE;IACxC,YAAY,CAAC,CAAC;IACd,QAAQ;IACR,IAAI;;IAEJ;IACA;IACA;IACA,IAAI,IAAI,GAAG;IACX,QAAQ,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC;IACvC,IAAI;;IAEJ;IACA;IACA;IACA;IACA;IACA,IAAI,KAAK,CAAC,SAAS,GAAG,IAAI,EAAE;IAC5B,QAAQ,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,GAAG,EAAE;IACpD,QAAQ,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,CAAC;IACrD,IAAI;;IAEJ;IACA;IACA;IACA;IACA;IACA,IAAI,cAAc,CAAC,KAAK,EAAE;IAC1B,QAAQ,IAAI,CAAC,WAAW,CAAC,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;IAC5D,IAAI;;IAEJ;IACA;IACA;IACA;IACA;IACA,IAAI,mBAAmB,CAAC,EAAE,EAAE;IAC5B,QAAQ,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,uBAAuB,EAAE,EAAE,CAAC;IAClE,IAAI;IACJ;;ICvKA;IACA;IACA;IACO,SAAS,QAAQ,CAAC,KAAK,EAAE;IAChC,IAAI,OAAO,IAAI,MAAM;IACrB;IACA;IACA;IACA,QAAQ,OAAO;IACf,QAAQ,QAAQ,GAAG,IAAI;IACvB,QAAQ,cAAc,GAAG,IAAI;IAC7B,QAAQ,YAAY,GAAG,KAAK;IAC5B;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,QAAQ,WAAW,CAAC,KAAK,GAAG,IAAI,EAAE;IAClC,YAAY,IAAI,KAAK,EAAE;IACvB,gBAAgB,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;IACtC,YAAY;IACZ,QAAQ;;IAER;IACA;IACA;IACA;IACA;IACA;IACA,QAAQ,UAAU,CAAC,KAAK,EAAE;IAC1B,YAAY,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;IAC3C,gBAAgB,IAAI,CAAC,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;IAC5D,YAAY,CAAC,MAAM;IACnB,gBAAgB,IAAI,CAAC,OAAO,GAAG,KAAK;IACpC,YAAY;IACZ,QAAQ;;IAER;IACA;IACA;IACA;IACA;IACA;IACA,QAAQ,MAAM,GAAG;IACjB,YAAY,IAAI,IAAI,CAAC,QAAQ,EAAE;IAC/B,gBAAgB,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC;IAC3C,gBAAgB,IAAI,CAAC,QAAQ,GAAG,IAAI;IACpC,YAAY;IACZ,YAAY,IAAI,IAAI,CAAC,cAAc,EAAE;IACrC,gBAAgB,YAAY,CAAC,IAAI,CAAC,cAAc,CAAC;IACjD,gBAAgB,IAAI,CAAC,cAAc,GAAG,IAAI;IAC1C,YAAY;IACZ,YAAY,IAAI,CAAC,YAAY,GAAG,KAAK;IACrC,YAAY,OAAO,IAAI;IACvB,QAAQ;;IAER;IACA;IACA;IACA;IACA;IACA,QAAQ,mBAAmB,CAAC,OAAO,GAAG,MAAM,EAAE;IAC9C,YAAY,MAAM,cAAc,GAAG;IACnC,gBAAgB,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO;IACnD,gBAAgB,UAAU,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,UAAU;IACzD,gBAAgB,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ;IACrD,gBAAgB,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM;IACjD,gBAAgB,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK;IAC/C,aAAa;;IAEb,YAAY,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE;IAC9C,gBAAgB,OAAO,EAAE,OAAO;IAChC,gBAAgB,UAAU,EAAE,QAAQ;IACpC,gBAAgB,QAAQ,EAAE,OAAO;IACjC,gBAAgB,MAAM,EAAE,aAAa;IACrC,gBAAgB,KAAK,EAAE;IACvB,aAAa,CAAC;;IAEd,YAAY,MAAM,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC;IAC1E,YAAY,MAAM,cAAc,GAAG,UAAU,CAAC,gBAAgB,CAAC,cAAc,CAAC;IAC9E,YAAY,MAAM,iBAAiB,GAAG,UAAU,CAAC,gBAAgB,CAAC,iBAAiB,CAAC;;IAEpF,YAAY,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,GAAG,cAAc,GAAG,iBAAiB;;IAE/F,YAAY,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,qBAAqB,EAAE;IAC7D;IACA,YAAY,MAAM,UAAU,GAAG;IAC/B,gBAAgB,KAAK,EAAE,IAAI,CAAC,KAAK;IACjC,gBAAgB,MAAM,EAAE,IAAI,CAAC,MAAM,GAAG,cAAc,GAAG,iBAAiB;IACxE,gBAAgB,YAAY,EAAE;IAC9B,aAAa;;IAEb,YAAY,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,cAAc,CAAC;;IAE7D,YAAY,OAAO,UAAU;IAC7B,QAAQ;;IAER;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,QAAQ,MAAM,CAAC,MAAM,EAAE;IACvB,YAAY,IAAI,CAAC,MAAM,EAAE;IACzB,YAAY,IAAI,CAAC,YAAY,GAAG,IAAI;;IAEpC,YAAY,MAAM;IAClB,gBAAgB,QAAQ,GAAG,GAAG;IAC9B,gBAAgB,OAAO,GAAG,MAAM;IAChC,gBAAgB,KAAK;IACrB,gBAAgB,IAAI;IACpB,gBAAgB,GAAG;IACnB,gBAAgB,SAAS;IACzB,gBAAgB,UAAU;IAC1B,gBAAgB,QAAQ,GAAG,QAAQ;IACnC,gBAAgB;IAChB,aAAa,GAAG,MAAM;;IAEtB,YAAY,MAAM,UAAU,GAAG,QAAQ,KAAK,QAAQ;IACpD,kBAAkB,GAAG;IACrB,kBAAkB,GAAG,GAAG,UAAU;;IAElC,YAAY,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE;IAC9C,gBAAgB,OAAO,EAAE,OAAO;IAChC,gBAAgB,KAAK,EAAE,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC;IACnC,gBAAgB,IAAI,EAAE,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC;IACjC,gBAAgB,GAAG,EAAE,CAAC,EAAE,UAAU,CAAC,EAAE,CAAC;IACtC,gBAAgB,SAAS,EAAE,CAAC,EAAE,SAAS,CAAC,EAAE,CAAC;IAC3C,gBAAgB,MAAM,EAAE,KAAK;IAC7B,gBAAgB,OAAO,EAAE,GAAG;IAC5B,gBAAgB,QAAQ,EAAE,QAAQ;IAClC,gBAAgB,UAAU,EAAE;IAC5B,aAAa,CAAC;;IAEd,YAAY,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,cAAc,EAAE,QAAQ,KAAK,KAAK,CAAC;IAC7E,YAAY,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,iBAAiB,EAAE,QAAQ,KAAK,QAAQ,CAAC;;IAEnF,YAAY,qBAAqB,CAAC,MAAM;IACxC,gBAAgB,MAAM,YAAY,GAAG,UAAU,IAAI,SAAS;IAC5D;IACA,gBAAgB,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE;IAClD,oBAAoB,UAAU,EAAE,CAAC,IAAI,EAAE,QAAQ,CAAC,WAAW,EAAE,QAAQ,CAAC,YAAY,EAAE,QAAQ,CAAC,EAAE,CAAC;IAChG,oBAAoB,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC;IACnC,oBAAoB,MAAM,EAAE,CAAC,EAAE,UAAU,CAAC,EAAE,CAAC;IAC7C,oBAAoB,OAAO,EAAE,GAAG;IAChC,oBAAoB,QAAQ,EAAE,YAAY,GAAG,MAAM,GAAG;IACtD,iBAAiB,CAAC;;IAElB,gBAAgB,IAAI,CAAC,QAAQ,GAAG,UAAU,CAAC,MAAM;IACjD,oBAAoB,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,UAAU,GAAG,MAAM;IAC1D,oBAAoB,IAAI,CAAC,YAAY,GAAG,KAAK;IAC7C,oBAAoB,UAAU,IAAI,UAAU,EAAE;IAC9C,gBAAgB,CAAC,EAAE,QAAQ,CAAC;IAC5B,YAAY,CAAC,CAAC;;IAEd,YAAY,OAAO,IAAI;IACvB,QAAQ;;IAER;IACA;IACA;IACA;IACA;IACA;IACA;IACA,QAAQ,QAAQ,CAAC,MAAM,EAAE;IACzB,YAAY,IAAI,CAAC,MAAM,EAAE;IACzB,YAAY,IAAI,CAAC,YAAY,GAAG,IAAI;;IAEpC,YAAY,MAAM;IAClB,gBAAgB,QAAQ,GAAG,GAAG;IAC9B,gBAAgB;IAChB,aAAa,GAAG,MAAM;;IAEtB,YAAY,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY;IAC3D,YAAY,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS;IACrD,YAAY,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,cAAc,CAAC,GAAG,KAAK,GAAG,QAAQ;IAC/F,YAAY,MAAM,YAAY,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,IAAI,CAAC;;IAE5F,YAAY,MAAM,QAAQ,GAAG,QAAQ,KAAK,KAAK;IAC/C,kBAAkB,UAAU,GAAG;IAC/B,kBAAkB,UAAU;;IAE5B,YAAY,qBAAqB,CAAC,MAAM;IACxC,gBAAgB,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE;IAClD,oBAAoB,UAAU,EAAE,CAAC,OAAO,EAAE,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,YAAY,EAAE,QAAQ,CAAC,EAAE,CAAC;IAChG,oBAAoB,MAAM,EAAE,KAAK;IACjC,oBAAoB,GAAG,EAAE,CAAC,EAAE,QAAQ,CAAC,EAAE,CAAC;IACxC,oBAAoB,OAAO,EAAE,GAAG;IAChC,oBAAoB,QAAQ,EAAE,YAAY,GAAG,MAAM,GAAG;IACtD,iBAAiB,CAAC;;IAElB,gBAAgB,IAAI,CAAC,QAAQ,GAAG,UAAU,CAAC,MAAM;IACjD,oBAAoB,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE;IACtD,wBAAwB,OAAO,EAAE,MAAM;IACvC,wBAAwB,UAAU,EAAE;IACpC,qBAAqB,CAAC;IACtB,oBAAoB,IAAI,CAAC,YAAY,GAAG,KAAK;IAC7C,oBAAoB,UAAU,IAAI,UAAU,EAAE;IAC9C,gBAAgB,CAAC,EAAE,QAAQ,CAAC;IAC5B,YAAY,CAAC,CAAC;;IAEd,YAAY,OAAO,IAAI;IACvB,QAAQ;;IAER;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,QAAQ,cAAc,CAAC,MAAM,EAAE;IAC/B,YAAY,IAAI,CAAC,MAAM,EAAE;IACzB,YAAY,IAAI,CAAC,YAAY,GAAG,IAAI;;IAEpC,YAAY,MAAM;IAClB,gBAAgB,QAAQ,GAAG,GAAG;IAC9B,gBAAgB,OAAO,GAAG,OAAO;IACjC,gBAAgB;IAChB,aAAa,GAAG,MAAM;;IAEtB,YAAY,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE;IAC9C,gBAAgB,UAAU,EAAE,MAAM;IAClC,gBAAgB,OAAO,EAAE,OAAO;IAChC,gBAAgB,KAAK,EAAE;IACvB,aAAa,CAAC;;IAEd,YAAY,MAAM,QAAQ,GAAG,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC,KAAK;IACpE;IACA,YAAY,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE;IAC9C,gBAAgB,KAAK,EAAE;IACvB,aAAa,CAAC;;IAEd,YAAY,qBAAqB,CAAC,MAAM;IACxC,gBAAgB,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE;IAClD,oBAAoB,UAAU,EAAE,CAAC,MAAM,EAAE,QAAQ,CAAC,EAAE,CAAC;IACrD,oBAAoB,KAAK,EAAE,CAAC,EAAE,QAAQ,CAAC,EAAE,CAAC;IAC1C,oBAAoB,QAAQ,EAAE;IAC9B,iBAAiB,CAAC;IAClB,YAAY,CAAC,CAAC;;IAEd,YAAY,IAAI,CAAC,QAAQ,GAAG,UAAU,CAAC,MAAM;IAC7C,gBAAgB,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE;IAClD,oBAAoB,KAAK,EAAE,IAAI;IAC/B,oBAAoB,QAAQ,EAAE,IAAI;IAClC,oBAAoB,UAAU,EAAE;IAChC,iBAAiB,CAAC;IAClB,gBAAgB,IAAI,CAAC,YAAY,GAAG,KAAK;IACzC,gBAAgB,UAAU,IAAI,UAAU,EAAE;IAC1C,YAAY,CAAC,EAAE,QAAQ,CAAC;;IAExB,YAAY,OAAO,IAAI;IACvB,QAAQ;;IAER;IACA;IACA;IACA;IACA;IACA;IACA;IACA,QAAQ,cAAc,CAAC,MAAM,EAAE;IAC/B,YAAY,IAAI,CAAC,MAAM,EAAE;IACzB,YAAY,IAAI,CAAC,YAAY,GAAG,IAAI;;IAEpC,YAAY,MAAM;IAClB,gBAAgB,QAAQ,GAAG,GAAG;IAC9B,gBAAgB;IAChB,aAAa,GAAG,MAAM;;IAEtB,YAAY,MAAM,QAAQ,GAAG,IAAI,CAAC,mBAAmB,EAAE,CAAC,KAAK;;IAE7D,YAAY,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE;IAC9C,gBAAgB,UAAU,EAAE,MAAM;IAClC,gBAAgB,KAAK,EAAE,CAAC,EAAE,QAAQ,CAAC,EAAE;IACrC,aAAa,CAAC;;IAEd,YAAY,qBAAqB,CAAC,MAAM;IACxC,gBAAgB,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE;IAClD,oBAAoB,UAAU,EAAE,CAAC,MAAM,EAAE,QAAQ,CAAC,EAAE,CAAC;IACrD,oBAAoB,KAAK,EAAE,CAAC,GAAG,CAAC;IAChC,oBAAoB,QAAQ,EAAE;IAC9B,iBAAiB,CAAC;IAClB,YAAY,CAAC,CAAC;;IAEd,YAAY,IAAI,CAAC,QAAQ,GAAG,UAAU,CAAC,MAAM;IAC7C,gBAAgB,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE;IAClD,oBAAoB,KAAK,EAAE,IAAI;IAC/B,oBAAoB,QAAQ,EAAE,IAAI;IAClC,oBAAoB,UAAU,EAAE,IAAI;IACpC,oBAAoB,OAAO,EAAE;IAC7B,iBAAiB,CAAC;IAClB,gBAAgB,IAAI,CAAC,YAAY,GAAG,KAAK;IACzC,gBAAgB,UAAU,IAAI,UAAU,EAAE;IAC1C,YAAY,CAAC,EAAE,QAAQ,CAAC;;IAExB,YAAY,OAAO,IAAI;IACvB,QAAQ;;IAER;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,QAAQ,MAAM,CAAC,MAAM,EAAE;IACvB,YAAY,IAAI,IAAI,CAAC,cAAc,EAAE;IACrC,gBAAgB,YAAY,CAAC,IAAI,CAAC,cAAc,CAAC;IACjD,YAAY;;IAEZ,YAAY,MAAM;IAClB,gBAAgB,QAAQ,GAAG,GAAG;IAC9B,gBAAgB,KAAK;IACrB,gBAAgB,IAAI;IACpB,gBAAgB,GAAG;IACnB,gBAAgB,SAAS;IACzB,gBAAgB,UAAU;IAC1B,gBAAgB,QAAQ,GAAG,QAAQ;IACnC,gBAAgB,OAAO,GAAG,IAAI;IAC9B,gBAAgB;IAChB,aAAa,GAAG,MAAM;;IAEtB,YAAY,MAAM,eAAe,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,cAAc,CAAC,GAAG,KAAK,GAAG,QAAQ;IACtG,YAAY,MAAM,iBAAiB,GAAG,eAAe,KAAK,QAAQ;IAClE,YAAY,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,GAAG,SAAS;;IAEtE,YAAY,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,cAAc,EAAE,QAAQ,KAAK,KAAK,CAAC;IAC7E,YAAY,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,iBAAiB,EAAE,QAAQ,KAAK,QAAQ,CAAC;IACnF;IACA,YAAY,IAAI,iBAAiB,EAAE;IACnC,gBAAgB,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,UAAU,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,oBAAoB,EAAE,QAAQ,CAAC,wBAAwB,EAAE,QAAQ,CAAC,YAAY,CAAC;IAC/I,YAAY;;IAEZ,YAAY,qBAAqB,CAAC,MAAM;IACxC,gBAA+B,IAAI,CAAC,OAAO,CAAC;IAC5C,gBAAgB,MAAM,MAAM,GAAG;IAC/B,oBAAoB,KAAK,EAAE,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC;IACvC,oBAAoB,IAAI,EAAE,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC;IACrC,oBAAoB,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC;IACnC,oBAAoB,SAAS,EAAE,CAAC,EAAE,SAAS,CAAC,EAAE,CAAC;IAC/C,oBAAoB,MAAM,EAAE,CAAC,EAAE,UAAU,CAAC,EAAE,CAAC;IAC7C,oBAAoB,SAAS,EAAE,YAAY,GAAG,MAAM,GAAG;IACvD,iBAAiB;;IAEjB,gBAAgB,IAAI,OAAO,KAAK,iBAAiB,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,GAAG;IAC7G,oBAAoB,MAAM,CAAC,UAAU,GAAG,CAAC,OAAO,EAAE,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,CAAC;IACjF,gBAAgB,CAAC,MAAM;IACvB,oBAAoB,IAAI,CAAC,cAAc,GAAG,UAAU,CAAC,MAAM;IAC3D,wBAAwB,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,UAAU,GAAG,MAAM;IAC9D,oBAAoB,CAAC,EAAE,QAAQ,CAAC;IAChC,gBAAgB;;IAEhB,gBAAgB,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC;;IAEzD,gBAAgB,IAAI,OAAO,KAAK,iBAAiB,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,EAAE;IAC5G,oBAAoB,IAAI,CAAC,cAAc,GAAG,UAAU,CAAC,MAAM;IAC3D,wBAAwB,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,UAAU,GAAG,MAAM;IAC9D,wBAAwB,IAAI,iBAAiB,EAAE;IAC/C,4BAA4B,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,UAAU;IAChE,wBAAwB;IACxB,wBAAwB,UAAU,IAAI,UAAU,EAAE;IAClD,oBAAoB,CAAC,EAAE,QAAQ,CAAC;IAChC,gBAAgB,CAAC,MAAM;IACvB,oBAAoB,IAAI,iBAAiB,EAAE;IAC3C,wBAAwB,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,UAAU;IAC5D,oBAAoB;IACpB,oBAAoB,UAAU,IAAI,UAAU,EAAE;IAC9C,gBAAgB;IAChB,YAAY,CAAC,CAAC;;IAEd,YAAY,OAAO,IAAI;IACvB,QAAQ;;IAER;IACA;IACA;IACA;IACA,QAAQ,IAAI,WAAW,GAAG;IAC1B,YAAY,OAAO,IAAI,CAAC,YAAY;IACpC,QAAQ;IACR,KAAK,CAAC,KAAK,CAAC;IACZ;;ICnZA;IACA;IACA;IACA;IACA;IACO,MAAM,YAAY,CAAC;IAC1B;IACA;IACA;IACA,IAAI,WAAW,GAAG,IAAI;;IAEtB;IACA;IACA;IACA,IAAI,OAAO,GAAG,IAAI;;IAElB;IACA;IACA;IACA;IACA;IACA,IAAI,WAAW,CAAC,WAAW,GAAG,IAAI,EAAE;IACpC,QAAQ,IAAI,CAAC,WAAW,GAAG,WAAW;IACtC,IAAI;IACJ;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,OAAO,CAAC,WAAW,EAAE;IACzB,QAAQ,IAAI,CAAC,WAAW,GAAG,WAAW;IACtC,IAAI;IACJ;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,UAAU,CAAC,OAAO,EAAE;IACxB,QAAQ,IAAI,CAAC,OAAO,GAAG,OAAO;;IAE9B,QAAQ,OAAO,CAAC,cAAc,CAAC,OAAO,EAAE,MAAM;IAC9C,YAAY,IAAI,CAAC,KAAK,EAAE;IACxB,QAAQ,CAAC,CAAC;;IAEV,QAAQ,OAAO,CAAC,aAAa,CAAC,OAAO,EAAE,MAAM;IAC7C,YAAY,IAAI,CAAC,MAAM,EAAE;IACzB,QAAQ,CAAC,CAAC;;IAEV,QAAQ,IAAI,CAAC,MAAM,EAAE;IACrB,IAAI;;IAEJ;IACA;IACA;IACA;IACA,IAAI,KAAK,GAAG;IACZ,QAAQ,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;IAC/B,QAAQ,IAAI,CAAC,WAAW,CAAC,eAAe,EAAE;IAC1C,IAAI;;IAEJ;IACA;IACA;IACA;IACA,IAAI,MAAM,GAAG;IACb,QAAQ,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;;IAEhD,QAAQ,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC;IACzD,IAAI;;IAEJ;IACA;IACA;IACA;IACA,IAAI,OAAO,GAAG;IACd,QAAQ,IAAI,CAAC,MAAM,EAAE;IACrB,IAAI;IACJ;;IC7EA;IACA;IACA;IACO,MAAM,YAAY,CAAC;IAC1B;IACA;IACA;IACA,IAAI,WAAW,GAAG,IAAI;;IAEtB;IACA;IACA;IACA,IAAI,IAAI,GAAG,IAAI;;IAEf,IAAI,OAAO,GAAG,IAAI;;IAElB;IACA,IAAI,YAAY;;IAEhB;IACA,IAAI,UAAU;;IAEd;IACA,IAAI,YAAY;;IAEhB;IACA;IACA;IACA;IACA;IACA,IAAI,WAAW,CAAC,OAAO,GAAG,IAAI,EAAE;IAChC,QAAQ,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;IACrC,IAAI;;IAEJ;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,IAAI,CAAC,OAAO,EAAE;IAClB,QAAQ,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC;IAC1C,YAAY,YAAY,EAAE;IAC1B,gBAAgB,GAAG,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,2BAA2B,EAAE,MAAM,CAAC,EAAE,SAAS,EAAE,CAAC,GAAG,KAAK;IACzG,oBAAoB,GAAG,CAAC,eAAe,EAAE;IACzC,gBAAgB,CAAC;IACjB;IACA,SAAS,CAAC;IACV,QAAQ,IAAI,CAAC,IAAI,kCAAkC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;IACzE,QAAQ,IAAI,CAAC,OAAO,GAAG,OAAO;IAC9B,IAAI;;IAEJ;IACA;IACA;IACA;IACA;IACA,IAAI,OAAO,CAAC,YAAY,EAAE;IAC1B,QAAQ,IAAI,CAAC,YAAY,GAAG,YAAY;IACxC,QAAQ,IAAI,CAAC,UAAU,kCAAkC,YAAY,CAAC,aAAa,CAAC;;IAEpF,QAAQ,IAAI,CAAC,eAAe,EAAE;IAC9B,IAAI;;IAEJ;IACA;IACA;IACA;IACA,IAAI,eAAe,GAAG;IACtB,QAAQ,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,cAAc,IAAI,KAAK,GAAG,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE;IAC3I,IAAI;;IAEJ;IACA;IACA;IACA;IACA;IACA,IAAI,eAAe,CAAC,YAAY,EAAE;IAClC,QAAQ,IAAI,CAAC,YAAY,GAAG,YAAY;IACxC,IAAI;;IAEJ;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,YAAY,CAAC,UAAU,EAAE;IAC7B,QAAQ,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE;IACnC;IACA,QAAQ,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE;IAC5D,YAAY,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC;;IAE9C,YAAY,UAAU,CAAC,OAAO,CAAC,SAAS,IAAI;IAC5C,gBAAgB,IAAI,CAAC,SAAS,CAAC;IAC/B,oBAAoB,aAAa,EAAE;IACnC,wBAAwB,GAAG,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,gBAAgB,CAAC,CAAC;IACzE,wBAAwB,KAAK,EAAE;IAC/B,4BAA4B,MAAM,EAAE;IACpC,gCAAgC,GAAG,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,uBAAuB,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,qBAAqB,CAAC,EAAE,SAAS,CAAC,WAAW,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,qBAAqB,CAAC,EAAE,SAAS,CAAC,WAAW,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,GAAG,KAAK;IAChR,oCAAoC,IAAI,CAAC,YAAY,CAAC,eAAe,CAAC,QAAQ,CAAC;IAC/E,oCAAoC,UAAU,CAAC,MAAM;IACrD,wCAAwC,SAAS,CAAC,QAAQ,GAAG,KAAK;IAClE,oCAAoC,CAAC,EAAE,EAAE,CAAC;IAC1C,gCAAgC,CAAC;IACjC,6BAA6B;IAC7B,4BAA4B,OAAO,EAAE;IACrC,gCAAgC,GAAG,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,wBAAwB,CAAC,EAAE,SAAS,EAAE,SAAS,CAAC,IAAI;IACpH;IACA;IACA;IACA,iBAAiB,EAAE,IAAI,CAAC,IAAI,CAAC;IAC7B,YAAY,CAAC,CAAC;IACd,QAAQ;IACR,aAAa;IACb,YAAY,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC;IAC3C,QAAQ;IACR,QAAQ,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,QAAQ,CAAC;IACzC,IAAI;IACJ;;ICtHO,MAAM,gBAAgB,CAAC;IAC9B,IAAI,OAAO;IACX;IACA,IAAI,aAAa;;IAEjB,IAAI,WAAW,GAAG,IAAI;;IAEtB,IAAI,gBAAgB,GAAG,IAAI;;IAE3B;IACA,IAAI,MAAM,GAAG,IAAI;IACjB;IACA,IAAI,gBAAgB,GAAG;IACvB,QAAQ,WAAW,EAAE,CAAC;IACtB,QAAQ,UAAU,EAAE,CAAC;IACrB,QAAQ,OAAO,EAAE,KAAK;IACtB,QAAQ,SAAS,EAAE,KAAK;IACxB,QAAQ,cAAc,EAAE,EAAE;IAC1B,QAAQ,mBAAmB,EAAE;IAC7B,KAAK;;IAEL;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,WAAW,CAAC,aAAa,EAAE,YAAY,EAAE;IAC7C,QAAQ,IAAI,CAAC,OAAO,GAAG,aAAa;IACpC,QAAQ,IAAI,CAAC,aAAa,GAAG,YAAY;IACzC,IAAI;;IAEJ;IACA;IACA;IACA;IACA;IACA,IAAI,MAAM,GAAG;IACb,QAAQ,OAAO,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC;IACnC,IAAI;;IAEJ;IACA;IACA;IACA;IACA;IACA,IAAI,OAAO,CAAC,MAAM,EAAE;IACpB,QAAQ,IAAI,CAAC,WAAW,GAAG,MAAM;IACjC,IAAI;;IAEJ;IACA;IACA;IACA;IACA;IACA,IAAI,QAAQ,CAAC,aAAa,EAAE;IAC5B,QAAQ,IAAI,CAAC,MAAM,GAAG,aAAa;IACnC,IAAI;;;IAGJ;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,kBAAkB,GAAG;IACzB,QAAQ,OAAO,EAAE,GAAG,IAAI,CAAC,gBAAgB,EAAE;IAC3C,IAAI;;IAEJ;IACA;IACA;IACA;IACA,IAAI,eAAe,GAAG;IACtB,QAAQ,IAAI,CAAC,gBAAgB,GAAG;IAChC,YAAY,WAAW,EAAE,CAAC;IAC1B,YAAY,UAAU,EAAE,CAAC;IACzB,YAAY,OAAO,EAAE,KAAK;IAC1B,YAAY,SAAS,EAAE,KAAK;IAC5B,YAAY,cAAc,EAAE,EAAE;IAC9B,YAAY,mBAAmB,EAAE,IAAI,CAAC,gBAAgB,CAAC;IACvD,SAAS;IACT,IAAI;;IAEJ;IACA;IACA;IACA;IACA,IAAI,KAAK,GAAG;IACZ,QAAQ,IAAI,CAAC,gBAAgB,CAAC,cAAc,GAAG,EAAE;IACjD,QAAQ,MAAM,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC,aAAa,CAAC,YAAY,EAAE;IAC/D,QAAQ,MAAM,WAAW,GAAG,EAAE;IAC9B,QAAQ,KAAK,MAAM,CAAC,IAAI,SAAS,EAAE;IACnC,YAAY,IAAI,CAAC,YAAY,WAAW,EAAE,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC;IAC7D,iBAAiB,IAAI,CAAC,YAAY,UAAU,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC;IACpG,QAAQ;IACR,QAAQ,WAAW,CAAC,OAAO,CAAC,GAAG,IAAI,EAAE,GAAG,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IAC3D,IAAI;;IAEJ;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,MAAM,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,KAAK,EAAE;IAC1C,QAAQ,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,WAAW,EAAE;IAClD,YAAY,OAAO,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,MAAM,CAAC;IACpD,QAAQ;IACR,QAAQ,OAAO,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC;IACzC,IAAI;;IAEJ;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,MAAM,QAAQ,GAAG;IACrB,QAAQ,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;IACpD,YAAY,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,kBAAkB,EAAE;IAClE,QAAQ;;IAER,QAAQ,IAAI,IAAI,CAAC,gBAAgB,CAAC,SAAS,EAAE;IAC7C,YAAY,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,iBAAiB,EAAE;IACjE,QAAQ;;IAER,QAAQ,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,mBAAmB,EAAE;IACxD,YAAY,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,wBAAwB,EAAE;IACxE,QAAQ;;IAER,QAAQ,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE;IAC5C,YAAY,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,cAAc,EAAE;IAC9D,QAAQ;;IAER,QAAQ,IAAI,CAAC,gBAAgB,CAAC,WAAW,EAAE;IAC3C,QAAQ,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,gBAAgB,CAAC,cAAc,EAAE,IAAI,CAAC;IAC3E,IAAI;;IAEJ;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,MAAM,YAAY,CAAC,OAAO,EAAE;IAChC,QAAQ,IAAI,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,EAAE;IAChD,YAAY,IAAI,CAAC,gBAAgB,CAAC,cAAc,GAAG,OAAO;IAC1D,QAAQ;IACR;IACA,QAAQ,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE;IACzD,QAAQ,MAAM,OAAO,GAAG,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC;;IAEpD,QAAQ,MAAM,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC,aAAa,CAAC,YAAY,EAAE;IAC/D,QAAQ,MAAM,WAAW,GAAG,EAAE;IAC9B,QAAQ,KAAK,MAAM,CAAC,IAAI,SAAS,EAAE;IACnC,YAAY,IAAI,CAAC,YAAY,WAAW,EAAE;IAC1C,gBAAgB,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC;IACnC,YAAY,CAAC,MAAM,IAAI,CAAC,YAAY,UAAU,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE;IAC1E,gBAAgB,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC;IAC5C,YAAY;IACZ,QAAQ;;IAER,QAAQ,IAAI,eAAe,GAAG,KAAK;IACnC,QAAQ,WAAW,CAAC,OAAO,CAAC,GAAG,IAAI;IACnC,YAAY,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,WAAW,IAAI,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE;IAChF,YAAY,MAAM,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC;IACtD,YAAY,MAAM,SAAS;IAC3B,gBAAgB,KAAK,KAAK,EAAE;IAC5B,gBAAgB,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;IACpC,gBAAgB,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC;IACxC,YAAY,GAAG,CAAC,OAAO,GAAG,SAAS;IACnC,YAAY,IAAI,SAAS,EAAE,eAAe,GAAG,IAAI;IACjD,QAAQ,CAAC,CAAC;;IAEV,QAAQ,OAAO;IACf,YAAY,OAAO,EAAE,IAAI;IACzB,YAAY,UAAU,EAAE,eAAe;IACvC,YAAY,OAAO,EAAE,WAAW,CAAC,MAAM,KAAK;IAC5C,SAAS;IACT,IAAI;;IAEJ;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,oBAAoB,CAAC,OAAO,EAAE;IAClC,QAAQ,IAAI,OAAO,KAAK,IAAI,CAAC,gBAAgB,CAAC,cAAc,EAAE;IAC9D,YAAY,OAAO,IAAI;IACvB,QAAQ;IACR,QAAQ,OAAO,KAAK;IACpB,IAAI;;IAEJ;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,MAAM,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,KAAK,EAAE;IAC/C,QAAQ,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW;;IAEpC,QAAQ,IAAI,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,EAAE;IAChD,YAAY,IAAI,CAAC,eAAe,EAAE;IAClC,YAAY,IAAI,CAAC,gBAAgB,CAAC,cAAc,GAAG,OAAO;IAC1D,YAAY,MAAM,GAAG,KAAK;IAC1B,QAAQ;;IAER,QAAQ,IAAI,CAAC,gBAAgB,CAAC,SAAS,GAAG,IAAI;IAC9C,QAAQ,IAAI,CAAC,MAAM,EAAE,WAAW,EAAE;;IAElC,QAAQ,IAAI,CAAC,gBAAgB,EAAE,KAAK,EAAE;IACtC,QAAQ,IAAI,CAAC,gBAAgB,GAAG,IAAI,eAAe,EAAE;;IAErD,QAAQ,MAAM,IAAI,GAAG,IAAI,CAAC,gBAAgB,CAAC,WAAW;IACtD;IACA,QAAQ,MAAM,cAAc,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,eAAe;IACtE,aAAa,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK;IACjC,aAAa,IAAI,CAAC,GAAG,CAAC;IACtB;IACA,QAAQ,IAAI,OAAO;IACnB,QAAQ,IAAI,OAAO,GAAG,CAAC,IAAI,KAAK,UAAU,EAAE;IAC5C,YAAY,OAAO,GAAG,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC;IAC7C,YAAY,IAAI,OAAO,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE;IACnD,gBAAgB,OAAO,CAAC,aAAa,GAAG,cAAc;IACtD,YAAY;IACZ,QAAQ,CAAC,MAAM;IACf,YAAY,OAAO,GAAG;IACtB,gBAAgB,MAAM,EAAE,OAAO;IAC/B,gBAAgB,IAAI,EAAE,IAAI;IAC1B,gBAAgB,aAAa,EAAE,cAAc;IAC7C,gBAAgB,IAAI,GAAG,CAAC,IAAI,IAAI,EAAE;IAClC,aAAa;IACb,QAAQ;;IAER,QAAQ,IAAI;IACZ,YAAY,IAAI,QAAQ;;IAExB,YAAY,IAAI,GAAG,CAAC,MAAM,KAAK,MAAM,EAAE;IACvC,gBAAgB,MAAM,QAAQ,GAAG,IAAI,eAAe,EAAE;IACtD,gBAAgB,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,GAAG,IAAI;IACpD,oBAAoB,QAAQ,CAAC,MAAM,CAAC,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC;IACtD,gBAAgB,CAAC,CAAC;;IAElB,gBAAgB,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE;IAChD,oBAAoB,MAAM,EAAE,MAAM;IAClC,oBAAoB,IAAI,EAAE,QAAQ;IAClC,oBAAoB,OAAO,EAAE,EAAE,cAAc,EAAE,mCAAmC,EAAE;IACpF,oBAAoB,MAAM,EAAE,IAAI,CAAC,gBAAgB,CAAC;IAClD,iBAAiB,CAAC;IAClB,YAAY,CAAC,MAAM;IACnB,gBAAgB,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE;IACtE,gBAAgB,QAAQ,GAAG,MAAM,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE;IAC/D,oBAAoB,MAAM,EAAE,IAAI,CAAC,gBAAgB,CAAC;IAClD,iBAAiB,CAAC;IAClB,YAAY;;IAEZ,YAAY,IAAI,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE;IAC5C;IACA,YAAY,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC;IACpD;IACA,YAAY,IAAI,MAAM,CAAC,aAAa,EAAE;IACtC,gBAAgB,IAAI,CAAC,gBAAgB,CAAC,mBAAmB,GAAG,IAAI;IAChE,gBAAgB,IAAI,CAAC,gBAAgB,CAAC,WAAW,GAAG,MAAM,CAAC,IAAI;IAC/D,gBAAgB,IAAI,CAAC,gBAAgB,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU;IACpE,gBAAgB,IAAI,CAAC,gBAAgB,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO;IAC9D,YAAY,CAAC,MAAM;IACnB,gBAAgB,IAAI,CAAC,gBAAgB,CAAC,mBAAmB,GAAG,KAAK;IACjE,YAAY;;IAEZ,YAAY,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,YAAY,EAAE,MAAM,CAAC;IACzE;IACA,YAAY,IAAI,CAAC,gBAAgB,CAAC,SAAS,GAAG,KAAK;IACnD,YAAY,IAAI,CAAC,MAAM,EAAE,WAAW,EAAE;;IAEtC,YAAY,OAAO;IACnB,gBAAgB,OAAO,EAAE,IAAI;IAC7B,gBAAgB,UAAU,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC;IACnD,gBAAgB,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC;IAClD,gBAAgB,aAAa,EAAE,MAAM,CAAC,aAAa;IACnD,gBAAgB,OAAO,EAAE,MAAM,CAAC,OAAO;IACvC,gBAAgB,WAAW,EAAE,MAAM,CAAC,IAAI;IACxC,gBAAgB,UAAU,EAAE,MAAM,CAAC;IACnC,aAAa;IACb,QAAQ,CAAC,CAAC,OAAO,KAAK,EAAE;IACxB,YAAY,IAAI,CAAC,gBAAgB,CAAC,SAAS,GAAG,KAAK;IACnD,YAAY,IAAI,CAAC,MAAM,EAAE,WAAW,EAAE;IACtC;IACA,YAAY,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY,EAAE;IAC7C,gBAAgB,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,iBAAiB,EAAE;IACrE,YAAY;IACZ;IACA,YAAY,OAAO,CAAC,KAAK,CAAC,oBAAoB,EAAE,KAAK,CAAC;IACtD,YAAY,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE;IAC7D,QAAQ;IACR,IAAI;;IAEJ;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,cAAc,CAAC,IAAI,EAAE;IACzB,QAAQ,IAAI,KAAK,GAAG,EAAE;IACtB,QAAQ,IAAI,aAAa,GAAG,KAAK;IACjC,QAAQ,IAAI,IAAI,GAAG,CAAC;IACpB,QAAQ,IAAI,UAAU,GAAG,CAAC;IAC1B,QAAQ,IAAI,OAAO,GAAG,KAAK;;IAE3B,QAAQ,IAAI,IAAI,CAAC,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE;IACvD,YAAY,KAAK,GAAG,IAAI,CAAC,MAAM;IAC/B,YAAY,IAAI,OAAO,IAAI,CAAC,IAAI,KAAK,WAAW,EAAE;IAClD,gBAAgB,aAAa,GAAG,IAAI;IACpC,gBAAgB,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;IAC/C,gBAAgB,UAAU,GAAG,QAAQ,CAAC,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;IAC9E,gBAAgB,OAAO,GAAG,IAAI,GAAG,UAAU,GAAG,CAAC;IAC/C,YAAY;IACZ,QAAQ;IACR,aAAa,IAAI,IAAI,CAAC,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;IACxD,YAAY,KAAK,GAAG,IAAI,CAAC,IAAI;IAC7B,YAAY,IAAI,OAAO,IAAI,CAAC,IAAI,KAAK,WAAW,EAAE;IAClD,gBAAgB,aAAa,GAAG,IAAI;IACpC,gBAAgB,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;IAC/C,gBAAgB,UAAU,GAAG,QAAQ,CAAC,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;IAC9E,gBAAgB,OAAO,GAAG,IAAI,CAAC,OAAO,KAAK,IAAI,GAAG,UAAU,GAAG,CAAC,CAAC;IACjE,YAAY;IACZ,QAAQ;IACR,aAAa,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;IACtC,YAAY,KAAK,GAAG,IAAI;IACxB,QAAQ;IACR,aAAa,IAAI,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;IAC1D,YAAY,KAAK,GAAG,IAAI,CAAC,KAAK;IAC9B,YAAY,IAAI,IAAI,CAAC,UAAU,EAAE;IACjC,gBAAgB,aAAa,GAAG,IAAI;IACpC,gBAAgB,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC;IAC1D,gBAAgB,UAAU,GAAG,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU,IAAI,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC;IACpG,gBAAgB,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,KAAK,IAAI,GAAG,UAAU,GAAG,CAAC,CAAC;IAC5E,YAAY;IACZ,QAAQ;;IAER,QAAQ,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,IAAI;IAClC,YAAY,IAAI,IAAI,YAAY,iBAAiB,IAAI,IAAI,YAAY,mBAAmB,EAAE;IAC1F,gBAAgB,OAAO,IAAI;IAC3B,YAAY;;IAEZ,YAAY,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,EAAE;IACtF,gBAAgB,OAAO;IACvB,oBAAoB,IAAI,EAAE,UAAU;IACpC,oBAAoB,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,IAAI,EAAE;IACtE,oBAAoB,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,EAAE;IACzC,oBAAoB,OAAO,EAAE,CAAC,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,KAAK,IAAI,EAAE,EAAE,GAAG,CAAC,GAAG,KAAK;IAC5E,wBAAwB,KAAK,EAAE,GAAG,CAAC,KAAK,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,GAAG,IAAI,EAAE;IACnE,wBAAwB,IAAI,EAAE,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,KAAK,IAAI,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,KAAK,IAAI,EAAE;IAClF,wBAAwB,QAAQ,EAAE,GAAG,CAAC,QAAQ,IAAI,KAAK;IACvD,wBAAwB,IAAI,EAAE,GAAG,CAAC,IAAI,KAAK,GAAG,CAAC,MAAM,GAAG,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,EAAE;IACnF,qBAAqB,CAAC;IACtB,iBAAiB;IACjB,YAAY;;IAEZ,YAAY,IAAI,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,EAAE;IACtC,YAAY,IAAI,IAAI,EAAE,MAAM,EAAE;IAC9B,gBAAgB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM;IACzC,YAAY;IACZ;IACA,YAAY,OAAO;IACnB,gBAAgB,IAAI,EAAE,QAAQ;IAC9B,gBAAgB,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,GAAG,IAAI,EAAE;IAC9D,gBAAgB,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,IAAI,EAAE;IAC9E,gBAAgB,QAAQ,EAAE,IAAI,CAAC,QAAQ,IAAI,KAAK;IAChD,gBAAgB,IAAI,EAAE;IACtB,aAAa;IACb,QAAQ,CAAC,CAAC;;IAEV,QAAQ,OAAO;IACf,YAAY,KAAK;IACjB,YAAY,aAAa;IACzB,YAAY,IAAI;IAChB,YAAY,UAAU;IACtB,YAAY;IACZ,SAAS;IACT,IAAI;;IAEJ;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,gBAAgB,CAAC,KAAK,EAAE,YAAY,EAAE,MAAM,GAAG,KAAK,EAAE;IAC1D,QAAQ,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO;IACnC;IACA,QAAQ,IAAI,WAAW,GAAG,EAAE;IAC5B,QAAQ,IAAI,YAAY,EAAE;IAC1B,YAAY,WAAW,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC;IAC9E,QAAQ;;IAER,QAAQ,IAAI,CAAC,MAAM,EAAE;IACrB,YAAY,MAAM,CAAC,SAAS,GAAG,EAAE;IACjC,QAAQ;;IAER,QAAQ,KAAK,CAAC,OAAO,CAAC,IAAI,IAAI;IAC9B,YAAY,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,QAAQ,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE;IAC7G,gBAAgB;IAChB,YAAY;;IAEZ,YAAY,IAAI,IAAI,YAAY,iBAAiB,IAAI,IAAI,YAAY,mBAAmB,EAAE;IAC1F,gBAAgB,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC;IACxC,gBAAgB;IAChB,YAAY;;IAEZ,YAAY,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU,EAAE;IAC1C,gBAAgB,MAAM,QAAQ,GAAG,QAAQ,CAAC,aAAa,CAAC,UAAU,CAAC;IACnE,gBAAgB,QAAQ,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK;;IAE3C,gBAAgB,IAAI,IAAI,CAAC,IAAI,EAAE;IAC/B,oBAAoB,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,GAAG,IAAI;IAC1D,wBAAwB,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;IAC9D,oBAAoB,CAAC,CAAC;IACtB,gBAAgB;;IAEhB,gBAAgB,IAAI,IAAI,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE;IACjE,oBAAoB,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,IAAI;IAChD,wBAAwB,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC;IACvE,wBAAwB,MAAM,CAAC,KAAK,GAAG,GAAG,CAAC,KAAK;IAChD,wBAAwB,MAAM,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI;;IAE9C,wBAAwB,IAAI,GAAG,CAAC,IAAI,EAAE;IACtC,4BAA4B,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,GAAG,IAAI;IACjE,gCAAgC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC;IACnE,4BAA4B,CAAC,CAAC;IAC9B,wBAAwB;;IAExB,wBAAwB,IAAI,GAAG,CAAC,QAAQ,KAAK,YAAY,IAAI,WAAW,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE;IAClG,4BAA4B,MAAM,CAAC,QAAQ,GAAG,IAAI;IAClD,wBAAwB;;IAExB,wBAAwB,QAAQ,CAAC,WAAW,CAAC,MAAM,CAAC;IACpD,oBAAoB,CAAC,CAAC;IACtB,gBAAgB;;IAEhB,gBAAgB,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC;IAC5C,YAAY;IACZ,iBAAiB;IACjB,gBAAgB,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC;IAC/D,gBAAgB,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK;IACzC,gBAAgB,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI;IACvC;IACA,gBAAgB,IAAI,IAAI,CAAC,IAAI,EAAE;IAC/B,oBAAoB,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,GAAG,IAAI;IAC1D,wBAAwB,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;IAC5D,oBAAoB,CAAC,CAAC;IACtB,gBAAgB;;IAEhB,gBAAgB,IAAI,IAAI,CAAC,QAAQ,KAAK,YAAY,IAAI,WAAW,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE;IAC3F,oBAAoB,MAAM,CAAC,QAAQ,GAAG,IAAI;IAC1C,gBAAgB;;IAEhB,gBAAgB,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC;IAC1C,YAAY;IACZ,QAAQ,CAAC,CAAC;;IAEV,QAAQ,MAAM,CAAC,aAAa,CAAC,IAAI,WAAW,CAAC,iBAAiB,CAAC,CAAC;IAChE,IAAI;IACJ;;ICzgBO,MAAM,cAAc,CAAC;IAC5B;IACA,IAAI,SAAS;;IAEb;IACA,IAAI,OAAO;;IAEX,IAAI,cAAc,GAAG,IAAI;;IAEzB;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,WAAW,CAAC,MAAM,EAAE;IACxB,QAAQ,IAAI,CAAC,SAAS,GAAG,IAAI,gBAAgB,CAAC,MAAM;IACpD,YAAY,YAAY,CAAC,IAAI,CAAC,cAAc,CAAC;IAC7C,YAAY,IAAI,CAAC,cAAc,GAAG,UAAU,CAAC,MAAM;IACnD,gBAAgB,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;IACtC,YAAY,CAAC,EAAE,EAAE,CAAC;IAClB,QAAQ,CAAC,CAAC;;IAEV,QAAQ,IAAI,CAAC,OAAO,GAAG,MAAM;;IAE7B,QAAQ,MAAM,CAAC,gBAAgB,CAAC,iBAAiB,EAAE,MAAM;IACzD,YAAY,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;IAClC,QAAQ,CAAC,CAAC;IACV,IAAI;;IAEJ;IACA;IACA;IACA;IACA,IAAI,OAAO,GAAG;IACd,QAAQ,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE;IAC7C,YAAY,SAAS,EAAE,IAAI;IAC3B,YAAY,OAAO,EAAE,KAAK;;IAE1B,YAAY,UAAU,EAAE,IAAI;IAC5B,YAAY,eAAe,EAAE,CAAC,UAAU,EAAE,OAAO,EAAE,UAAU;IAC7D,SAAS,CAAC;IACV,IAAI;;IAEJ;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,SAAS,CAAC,OAAO,EAAE,EAAE;;IAEzB;IACA;IACA;IACA,IAAI,UAAU,GAAG;IACjB,QAAQ,YAAY,CAAC,IAAI,CAAC,cAAc,CAAC;IACzC,QAAQ,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE;IACnC,IAAI;IACJ;;IC5DO,MAAM,eAAe,CAAC;IAC7B;IACA,IAAI,SAAS;;IAEb;IACA,IAAI,QAAQ;;IAEZ,IAAI,cAAc,GAAG,IAAI;;IAEzB;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,WAAW,CAAC,OAAO,EAAE;IACzB,QAAQ,IAAI,CAAC,QAAQ,GAAG,OAAO;;IAE/B,QAAQ,IAAI,CAAC,SAAS,GAAG,IAAI,gBAAgB,CAAC,CAAC,SAAS,KAAK;IAC7D,YAAY,IAAI,cAAc,GAAG,KAAK;;IAEtC,YAAY,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE;IAC9C,gBAAgB;IAChB,oBAAoB,QAAQ,CAAC,IAAI,KAAK,YAAY;IAClD,oBAAoB,QAAQ,CAAC,aAAa,EAAE,UAAU,CAAC,OAAO;IAC9D,kBAAkB;IAClB,oBAAoB,cAAc,GAAG,IAAI;IACzC,oBAAoB;IACpB,gBAAgB;IAChB,YAAY;;IAEZ,YAAY,IAAI,CAAC,cAAc,EAAE;;IAEjC,YAAY,YAAY,CAAC,IAAI,CAAC,cAAc,CAAC;IAC7C,YAAY,IAAI,CAAC,cAAc,GAAG,UAAU,CAAC,MAAM;IACnD,gBAAgB,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;IAC5D,YAAY,CAAC,EAAE,EAAE,CAAC;IAClB,QAAQ,CAAC,CAAC;;IAEV,QAAQ,OAAO,CAAC,gBAAgB,CAAC,iBAAiB,EAAE,MAAM;IAC1D,YAAY,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;IACxD,QAAQ,CAAC,CAAC;IACV,IAAI;;IAEJ;IACA;IACA;IACA;IACA,IAAI,OAAO,GAAG;IACd,QAAQ,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE;IAC9C,YAAY,UAAU,EAAE,IAAI;IAC5B,YAAY,iBAAiB,EAAE;IAC/B,SAAS,CAAC;IACV,IAAI;;IAEJ;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,SAAS,CAAC,OAAO,EAAE;IACvB;IACA,IAAI;;IAEJ;IACA;IACA;IACA,IAAI,UAAU,GAAG;IACjB,QAAQ,YAAY,CAAC,IAAI,CAAC,cAAc,CAAC;IACzC,QAAQ,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE;IACnC,IAAI;IACJ;;ICtDA;IACA;IACA;IACO,MAAM,SAAS,CAAC;IACvB;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,WAAW,CAAC,MAAM,GAAG,IAAI,EAAE,SAAS,GAAG,IAAI,EAAE;IACjD,QAAQ,MAAM,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,SAAS,CAAC;IAC9C,IAAI;IACJ,IAAI,SAAS,GAAG,EAAE;IAClB,IAAI,QAAQ,GAAG,IAAI;;IAEnB;IACA,IAAI,IAAI,GAAG,IAAI;;IAEf,IAAI,OAAO,GAAG,IAAI;;IAElB;IACA,IAAI,kBAAkB,GAAG,IAAI;;IAE7B,IAAI,MAAM,GAAG,KAAK;;IAElB,IAAI,aAAa,GAAG,KAAK;;IAEzB,IAAI,cAAc,GAAG,KAAK;;IAE1B;IACA,IAAI,SAAS,GAAG,IAAI;;IAEpB;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,IAAI,UAAU,GAAG;IACrB,QAAQ,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ;IACpC,IAAI;IACJ,IAAI,IAAI,UAAU,CAAC,KAAK,EAAE;IAC1B,QAAQ,IAAI,CAAC,OAAO,CAAC,QAAQ,GAAG,KAAK;IACrC,QAAQ,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,UAAU,EAAE,KAAK,CAAC;IACrD,QAAQ,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,eAAe,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC;IACjE,QAAQ,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,eAAe,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC;IACrF,IAAI;;IAEJ;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,IAAI,UAAU,GAAG;IACrB,QAAQ,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ;IACpC,IAAI;IACJ,IAAI,IAAI,UAAU,CAAC,KAAK,EAAE;IAC1B,QAAQ,IAAI,CAAC,OAAO,CAAC,QAAQ,GAAG,KAAK;IACrC,QAAQ,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,UAAU,EAAE,KAAK,CAAC;IACrD,IAAI;;IAEJ;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,IAAI,SAAS,GAAG;IACpB,QAAQ,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO;IACnC,IAAI;IACJ,IAAI,IAAI,SAAS,CAAC,KAAK,EAAE;IACzB,QAAQ,IAAI,CAAC,OAAO,CAAC,OAAO,GAAG,KAAK;IACpC,QAAQ,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC;IACvD,IAAI;;;IAGJ;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,IAAI,CAAC,MAAM,EAAE,SAAS,EAAE;IAC5B,QAAQ;IACR,YAAY,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC;IACjD,YAAY,OAAO,GAAG,SAAS,CAAC,OAAO;IACvC,YAAY,WAAW,GAAG,IAAI,WAAW,CAAC,OAAO,CAAC;IAClD,YAAY,SAAS,GAAG,IAAI,SAAS,EAAE;IACvC,YAAY,SAAS,GAAG,IAAI,SAAS,CAAC,OAAO,CAAC;IAC9C,YAAY,QAAQ,GAAGA,QAAiB,EAAE;IAC1C,YAAY,kBAAkB,GAAG,IAAI,YAAY,CAAC,OAAO,CAAC;IAC1D,YAAY,YAAY,GAAG,IAAI,YAAY,CAAC,OAAO,CAAC;IACpD,YAAY,gBAAgB,GAAG,IAAI,gBAAgB;IACnD,gBAAgB,MAAM;IACtB,gBAAgB;IAChB,aAAa;IACb,YAAY,cAAc,GAAG,IAAI,cAAc,CAAC,MAAM,CAAC;IACvD,YAAY,eAAe,GAAG,IAAI,eAAe,CAAC,MAAM;IACxD;IACA;IACA,QAAQ,IAAI,CAAC,SAAS,GAAG,SAAS;IAClC,QAAQ,IAAI,CAAC,OAAO,GAAG,OAAO;;IAE9B,QAAQ,WAAW,CAAC,IAAI,CAAC,EAAE,GAAG,OAAO,CAAC,WAAW;;IAEjD,QAAQ,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;IACzC,YAAY,SAAS,EAAE;IACvB,gBAAgB,GAAG,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,mBAAmB,CAAC;IAClE,gBAAgB,KAAK,EAAE;IACvB,oBAAoB,SAAS,EAAE;IAC/B,wBAAwB,GAAG,EAAE;IAC7B,4BAA4B,IAAI,EAAE,KAAK;IACvC,4BAA4B,SAAS,EAAE,mBAAmB;IAC1D,4BAA4B,QAAQ,EAAE,CAAC;IACvC,4BAA4B,IAAI,EAAE,UAAU;IAC5C,4BAA4B,YAAY,EAAE,OAAO;IACjD,4BAA4B,cAAc,EAAE,OAAO,CAAC,WAAW;IAC/D,4BAA4B,YAAY,EAAE,OAAO,CAAC,SAAS;IAC3D,4BAA4B,YAAY,EAAE,MAAM;IAChD,4BAA4B,mBAAmB,EAAE,OAAO,CAAC,QAAQ,GAAG,MAAM,GAAG,OAAO;IACpF,4BAA4B,SAAS,EAAE,CAAC,CAAC,KAAK;IAC9C,gCAAgC,IAAI,CAAC,CAAC,GAAG,KAAK,OAAO,IAAI,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC,GAAG,KAAK,WAAW,EAAE;IACjG,oCAAoC,CAAC,CAAC,cAAc,EAAE;IACtD,oCAAoC,IAAI,CAAC,SAAS,EAAE,EAAE,IAAI,EAAE;IAC5D,gCAAgC;IAChC,4BAA4B;IAC5B,yBAAyB;IACzB,wBAAwB,KAAK,EAAE;IAC/B,4BAA4B,WAAW,EAAE;IACzC,gCAAgC,GAAG,EAAE,WAAW,CAAC;IACjD,6BAA6B;IAC7B,4BAA4B,SAAS,EAAE;IACvC,gCAAgC,GAAG,EAAE,SAAS,CAAC;IAC/C,6BAA6B;IAC7B,4BAA4B,SAAS,EAAE;IACvC,gCAAgC,GAAG,EAAE,SAAS,CAAC;IAC/C;IACA;IACA;IACA;IACA;IACA,SAAS,CAAC;IACV;IACA,QAAQ,IAAI,CAAC,SAAS,GAAG,SAAS;;IAElC,QAAQ,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI;;IAEvC,QAAQ,MAAM,CAAC,UAAU,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC;;IAEzD,QAAQ,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC;;IAEhE,QAAQ,YAAY,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC;IACtD,QAAQ,YAAY,CAAC,eAAe,CAAC,kBAAkB,CAAC;;IAExD,QAAQ,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC,WAAW,EAAE,CAAC,CAAC,KAAK;IACtE,YAAY,CAAC,CAAC,eAAe,EAAE;IAC/B,YAAY,CAAC,CAAC,cAAc,EAAE;IAC9B,QAAQ,CAAC,CAAC;;IAEV,QAAQ,SAAS,CAAC,SAAS,CAAC,MAAM,EAAE,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC;;IAE7D,QAAQ,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC;;IAEpC;IACA,QAAQ,kBAAkB,CAAC,YAAY,CAAC,YAAY,CAAC;IACrD,QAAQ,kBAAkB,CAAC,iBAAiB,CAAC,YAAY,CAAC;IAC1D,QAAQ,kBAAkB,CAAC,oBAAoB,CAAC,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC;IAChF,QAAQ,kBAAkB,CAAC,SAAS,GAAG,MAAM;IAC7C,YAAY,SAAS,CAAC,KAAK,CAAC,aAAa,EAAE;IAC3C,QAAQ,CAAC;IACT;IACA,QAAQ,IAAI,CAAC,kBAAkB,GAAG,kBAAkB;;IAEpD,QAAQ,SAAS,CAAC,gBAAgB,GAAG,gBAAgB;;IAErD,QAAQ,SAAS,CAAC,WAAW,GAAG,WAAW;IAC3C,QAAQ,SAAS,CAAC,SAAS,GAAG,SAAS;IACvC,QAAQ,SAAS,CAAC,KAAK,GAAG,IAAI,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE,kBAAkB,CAAC;IACxE,QAAQ,SAAS,CAAC,KAAK,CAAC,aAAa,CAAC,QAAQ,CAAC;IAC/C,QAAQ,SAAS,CAAC,KAAK,CAAC,mBAAmB,CAAC,gBAAgB,EAAE,OAAO,CAAC;IACtE,QAAQ,SAAS,CAAC,KAAK,CAAC,oBAAoB,CAAC,UAAU,EAAE,MAAM;IAC/D,YAAY,IAAI,CAAC,SAAS,EAAE,EAAE,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC;IAChD,QAAQ,CAAC,CAAC;IACV,QAAQ,SAAS,CAAC,KAAK,CAAC,oBAAoB,CAAC,mBAAmB,EAAE,MAAM;IACxE,YAAY,IAAI,CAAC,SAAS,EAAE,EAAE,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC;IACjD,QAAQ,CAAC,CAAC;IACV,QAAQ,SAAS,CAAC,KAAK,CAAC,qBAAqB,CAAC,QAAQ,EAAE,MAAM;IAC9D,YAAY,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,SAAS,EAAE,EAAE,KAAK,IAAI,EAAE;IACzD,QAAQ,CAAC,CAAC;IACV,QAAQ,SAAS,CAAC,SAAS,GAAG,SAAS;IACvC,QAAQ,SAAS,CAAC,QAAQ,GAAG,QAAQ;IACrC,QAAQ,SAAS,CAAC,aAAa,GAAG,MAAM;IACxC,QAAQ,SAAS,CAAC,YAAY,GAAG,YAAY;IAC7C,QAAQ,IAAI,CAAC,SAAS,EAAE,EAAE,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC;;IAE7C,QAAQ,cAAc,CAAC,OAAO,EAAE;IAChC,QAAQ,cAAc,CAAC,SAAS,GAAG,OAAO,IAAI;IAC9C,YAAY,kBAAkB,CAAC,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC;IACvE,YAAY,IAAI,CAAC,SAAS,EAAE,EAAE,WAAW,EAAE;IAC3C,QAAQ,CAAC;IACT,QAAQ,SAAS,CAAC,cAAc,GAAG,cAAc;;IAEjD,QAAQ,SAAS,CAAC,eAAe,GAAG,eAAe;IACnD,QAAQ,eAAe,CAAC,OAAO,EAAE;IACjC;IACA,QAAQ,MAAM,CAAC,gBAAgB,CAAC,iBAAiB,EAAE,MAAM;IACzD,YAAY,kBAAkB,CAAC,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC;IACtE,YAAY,IAAI,CAAC,SAAS,EAAE,EAAE,WAAW,EAAE;IAC3C,YAAY,SAAS,CAAC,KAAK,EAAE,aAAa,IAAI;IAC9C,QAAQ,CAAC,CAAC;;IAEV,QAAQ,eAAe,CAAC,SAAS,GAAG,OAAO,IAAI;IAC/C,YAAY,IAAI,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,UAAU,EAAE;IAC1E,gBAAgB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,QAAQ,CAAC;IACvE,YAAY;;IAEZ,YAAY,IAAI,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,UAAU,EAAE;IAC1E,gBAAgB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,QAAQ,CAAC;IACvE,YAAY;;IAEZ,YAAY,IAAI,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,SAAS,EAAE;IACxE,gBAAgB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,OAAO,IAAI,GAAG,CAAC;IAC5E,YAAY;IACZ,QAAQ;;IAER,QAAQ,IAAI,OAAO,CAAC,IAAI,EAAE;IAC1B,YAAY,gBAAgB,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC;IAClD,QAAQ;;IAER,QAAQ,MAAM,aAAa,GAAG,SAAS,CAAC,KAAK,CAAC,aAAa;;IAE3D,QAAQ,IAAI,YAAY,GAAG,CAAC,OAAO,EAAE,SAAS,KAAK;IACnD,YAAY,IAAI,CAAC,SAAS,IAAI,OAAO,IAAI,EAAE,EAAE;IAC7C,gBAAgB,gBAAgB,CAAC,KAAK,EAAE;IACxC,YAAY;IACZ,iBAAiB;IACjB,gBAAgB,IAAI,OAAO,IAAI,EAAE,EAAE;IACnC,oBAAoB,IAAI,CAAC,cAAc,GAAG,IAAI;IAC9C,gBAAgB;IAChB,gBAAgB,gBAAgB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK;IAClE,oBAAoB,SAAS,CAAC,KAAK,CAAC,aAAa,EAAE;IACnD;IACA,oBAAoB,IAAI,MAAM,CAAC,UAAU,EAAE;IAC3C,wBAAwB,UAAU,CAAC,MAAM;IACzC,4BAA4B,aAAa,CAAC,cAAc,EAAE;IAC1D,wBAAwB,CAAC,EAAE,OAAO,CAAC,aAAa,CAAC;IACjD,oBAAoB;IACpB,gBAAgB,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,IAAI;IAClC,oBAAoB,OAAO,CAAC,KAAK,CAAC,eAAe,EAAE,KAAK,CAAC;IACzD,gBAAgB,CAAC,CAAC;IAClB,YAAY;IACZ,QAAQ;IACR,QAAQ,IAAI,iBAAiB,GAAG,IAAI;IACpC,QAAQ,SAAS,CAAC,QAAQ,GAAG,CAAC,OAAO,EAAE,SAAS,KAAK;IACrD,YAAY,IAAI,CAAC,gBAAgB,CAAC,oBAAoB,CAAC,OAAO,CAAC,EAAE;IACjE,gBAAgB;IAChB,YAAY;;IAEZ,YAAY,IAAI,gBAAgB,CAAC,MAAM,EAAE,EAAE;IAC3C,gBAAgB,YAAY,CAAC,iBAAiB,CAAC;IAC/C,gBAAgB,SAAS,CAAC,KAAK,CAAC,WAAW,EAAE;;IAE7C,gBAAgB,iBAAiB,GAAG,UAAU,CAAC,MAAM;IACrD,oBAAoB,YAAY,CAAC,OAAO,EAAE,SAAS,CAAC;IACpD,gBAAgB,CAAC,EAAE,OAAO,CAAC,eAAe,CAAC;IAC3C,YAAY;IACZ,iBAAiB;IACjB,gBAAgB,YAAY,CAAC,OAAO,EAAE,SAAS,CAAC;IAChD,YAAY;IACZ,QAAQ,CAAC;;IAET,QAAQ,gBAAgB,CAAC,QAAQ,CAAC,SAAS,CAAC,KAAK,CAAC;IAClD,QAAQ,SAAS,CAAC,UAAU,GAAG,CAAC,SAAS,KAAK;IAC9C,YAAY,aAAa,CAAC,QAAQ,CAAC,SAAS,CAAC;IAC7C,QAAQ,CAAC;;IAET,QAAQ,SAAS,CAAC,OAAO,GAAG,MAAM;IAClC,YAAY,aAAa,CAAC,iBAAiB,EAAE;IAC7C,QAAQ,CAAC;;IAET,QAAQ,aAAa,CAAC,iBAAiB,GAAG,CAAC,KAAK,EAAE,EAAE,KAAK;IACzD,YAAY,SAAS,CAAC,mBAAmB,CAAC,EAAE,CAAC;IAC7C,QAAQ;;IAER,QAAQ,aAAa,CAAC,iBAAiB,GAAG,MAAM;IAChD,YAAY,SAAS,CAAC,KAAK,CAAC,aAAa,EAAE;IAC3C,QAAQ;;IAER,QAAQ,SAAS,CAAC,KAAK,GAAG,MAAM;IAChC,YAAY,IAAI,CAAC,SAAS,EAAE,EAAE,KAAK,EAAE;IACrC,YAAY,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE;IAC5C,QAAQ,CAAC;;IAET,QAAQ,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,QAAQ,CAAC;IAC/D,QAAQ,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,QAAQ,CAAC;IAC/D,IAAI;;IAEJ;IACA;IACA;IACA;IACA;IACA,IAAI,MAAM,GAAG;IACb,QAAQ,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,IAAI,EAAE;IAC9C,QAAQ,MAAM,EAAE,cAAc,EAAE,eAAe,EAAE,GAAG,SAAS;IAC7D,QAAQ,IAAI,cAAc,EAAE,UAAU,EAAE,cAAc,CAAC,UAAU,EAAE;IACnE,QAAQ,IAAI,eAAe,EAAE,UAAU,EAAE,eAAe,CAAC,UAAU,EAAE;IACrE,IAAI;IACJ;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,SAAS,GAAG;IAChB,QAAQ,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS;IACxC,QAAQ,MAAM,SAAS,GAAG,IAAI;IAC9B,QAAQ,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,aAAa,CAAC;IACpE,QAAQ,IAAI,CAAC,SAAS,EAAE;IACxB,YAAY,OAAO,IAAI;IACvB,QAAQ;IACR,QAAQ,MAAM,aAAa,GAAG,SAAS,CAAC,OAAO;IAC/C,QAAQ,IAAI,IAAI,GAAG;IACnB,YAAY,IAAI,WAAW,GAAG;IAC9B,gBAAgB,OAAO,SAAS,CAAC,WAAW,CAAC,GAAG,EAAE;IAClD,YAAY,CAAC;IACb,YAAY,IAAI,WAAW,CAAC,KAAK,EAAE;IACnC,gBAAgB,SAAS,CAAC,WAAW,EAAE,GAAG,CAAC,KAAK,CAAC;IACjD,gBAAgB,SAAS,CAAC,SAAS,EAAE,cAAc,CAAC,KAAK,CAAC;IAC1D,YAAY,CAAC;IACb,YAAY,IAAI,QAAQ,GAAG;IAC3B,gBAAgB,OAAO,SAAS,CAAC,QAAQ;IACzC,YAAY,CAAC;IACb,YAAY,IAAI,KAAK,CAAC,KAAK,EAAE;IAC7B,gBAAgB,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC;IAChD,YAAY,CAAC;IACb,YAAY,IAAI,KAAK,GAAG;IACxB,gBAAgB,IAAI,SAAS,GAAG,IAAI,CAAC,UAAU;IAC/C;IACA,gBAAgB,MAAM,SAAS,GAAG,SAAS,CAAC,MAAM;IAClD,gBAAgB,OAAO,SAAS,GAAG,CAAC,GAAG,SAAS,IAAI,SAAS,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;IACvF,YAAY,CAAC;IACb,YAAY,IAAI,UAAU,GAAG;IAC7B,gBAAgB,IAAI,SAAS,GAAG,EAAE;IAClC,gBAAgB,SAAS,CAAC,cAAc,EAAE,CAAC,OAAO,CAAC,YAAY,IAAI;IACnE,oBAAoB,YAAY,CAAC,UAAU,CAAC,KAAK,SAAS,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC;IACvF,gBAAgB,CAAC,CAAC;IAClB,gBAAgB,OAAO,SAAS;IAChC,YAAY,CAAC;IACb,YAAY,IAAI,WAAW,GAAG;IAC9B,gBAAgB,MAAM,eAAe,GAAG,aAAa,CAAC,eAAe;IACrE,gBAAgB,IAAI,SAAS,GAAG,IAAI,CAAC,UAAU;;IAE/C,gBAAgB,OAAO,SAAS,CAAC,IAAI,CAAC,eAAe,CAAC;IACtD,YAAY,CAAC;IACb,YAAY,IAAI,YAAY,GAAG;IAC/B,gBAAgB,IAAI,SAAS,GAAG,EAAE;IAClC,gBAAgB,SAAS,CAAC,cAAc,EAAE,CAAC,OAAO,CAAC,YAAY,IAAI;IACnE,oBAAoB,YAAY,CAAC,UAAU,CAAC,KAAK,SAAS,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IAC9E,gBAAgB,CAAC,CAAC;IAClB,gBAAgB,OAAO,SAAS;IAChC,YAAY,CAAC;IACb,YAAY,IAAI,IAAI,GAAG;IACvB,gBAAgB,IAAI,SAAS,GAAG,EAAE;IAClC,gBAAgB,SAAS,CAAC,cAAc,EAAE,CAAC,OAAO,CAAC,WAAW,IAAI;IAClE,oBAAoB,WAAW,CAAC,UAAU,CAAC,KAAK,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC;IACpF,gBAAgB,CAAC,CAAC;IAClB,gBAAgB,OAAO,SAAS;IAChC,YAAY,CAAC;IACb,YAAY,IAAI,SAAS,GAAG;IAC5B,gBAAgB,IAAI,SAAS,GAAG,EAAE;IAClC,gBAAgB,SAAS,CAAC,cAAc,EAAE,CAAC,OAAO,CAAC,WAAW,IAAI;IAClE,oBAAoB,WAAW,CAAC,UAAU,CAAC,KAAK,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC;IACpF,gBAAgB,CAAC,CAAC;IAClB;IACA,gBAAgB,MAAM,SAAS,GAAG,SAAS,CAAC,MAAM;IAClD,gBAAgB,OAAO,SAAS,GAAG,CAAC,GAAG,SAAS,IAAI,SAAS,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;IACvF,YAAY,CAAC;IACb,YAAY,IAAI,MAAM,GAAG;IACzB,gBAAgB,OAAO,SAAS,CAAC,MAAM;IACvC,YAAY,CAAC;IACb,YAAY,SAAS,CAAC,QAAQ,EAAE,OAAO,GAAG,IAAI,EAAE;IAChD,gBAAgB,IAAI,aAAa,CAAC,QAAQ,IAAI,aAAa,CAAC,WAAW,GAAG,CAAC,EAAE;IAC7E,oBAAoB,IAAI,SAAS,CAAC,cAAc,EAAE,CAAC,MAAM,GAAG,aAAa,CAAC,WAAW,EAAE;IACvF,wBAAwB;IACxB,oBAAoB;IACpB,gBAAgB;;IAEhB,gBAAgB,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE;IAC/E,oBAAoB;IACpB,gBAAgB;;IAEhB,gBAAgB,IAAI,OAAO,EAAE;IAC7B,oBAAoB,MAAM,iBAAiB,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,EAAE,GAAG,aAAa,CAAC,EAAE,CAAC,YAAY,CAAC;IACzG,oBAAoB,IAAI,iBAAiB,CAAC,QAAQ,EAAE;IACpD,wBAAwB;IACxB,oBAAoB;;IAEpB,oBAAoB,SAAS,CAAC,QAAQ,GAAG,IAAI,CAAC,KAAK;IACnD,gBAAgB;;IAEhB,gBAAgB,SAAS,CAAC,cAAc,EAAE,CAAC,OAAO,CAAC,WAAW,IAAI;IAClE,oBAAoB,WAAW,CAAC,oBAAoB,CAAC,GAAG,IAAI;IAC5D,gBAAgB,CAAC,CAAC;IAClB;IACA,gBAAgB,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC;IAC3C,YAAY,CAAC;IACb,YAAY,WAAW,CAAC,QAAQ,EAAE,OAAO,GAAG,IAAI,EAAE;IAClD,gBAAgB,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE;IAC/E,oBAAoB;IACpB,gBAAgB;;IAEhB,gBAAgB,IAAI,OAAO,EAAE;IAC7B,oBAAoB,MAAM,iBAAiB,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,EAAE,GAAG,aAAa,CAAC,EAAE,CAAC,YAAY,CAAC;IACzG,oBAAoB,IAAI,iBAAiB,CAAC,QAAQ,EAAE;IACpD,wBAAwB;IACxB,oBAAoB;;IAEpB,oBAAoB,SAAS,CAAC,QAAQ,GAAG,IAAI,CAAC,KAAK;IACnD,gBAAgB;;IAEhB,gBAAgB,SAAS,CAAC,cAAc,EAAE,CAAC,OAAO,CAAC,WAAW,IAAI;IAClE,oBAAoB,WAAW,CAAC,oBAAoB,CAAC,GAAG,KAAK;IAC7D,gBAAgB,CAAC,CAAC;IAClB;IACA,gBAAgB,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC;IAC3C,YAAY,CAAC;IACb,YAAY,QAAQ,CAAC,QAAQ,GAAG,IAAI,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI,EAAE,KAAK,GAAG,KAAK,EAAE;IAC5E,gBAAgB,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,KAAK,GAAG,CAAC,KAAK,CAAC,CAAC;;IAE1D,gBAAgB,IAAI,aAAa,CAAC,QAAQ,IAAI,aAAa,CAAC,WAAW,GAAG,CAAC,EAAE;IAC7E,oBAAoB,IAAI,KAAK,CAAC,MAAM,GAAG,aAAa,CAAC,WAAW,EAAE;IAClE,wBAAwB;IACxB,oBAAoB;IACpB,gBAAgB;;IAEhB,gBAAgB,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,EAAE;IAChE,oBAAoB;IACpB,gBAAgB;;IAEhB,gBAAgB,IAAI,OAAO,EAAE;IAC7B,oBAAoB,MAAM,iBAAiB,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,EAAE,GAAG,aAAa,CAAC,EAAE,CAAC,YAAY,CAAC;IACzG,oBAAoB,IAAI,iBAAiB,CAAC,QAAQ,EAAE;IACpD,wBAAwB;IACxB,oBAAoB;;IAEpB,oBAAoB,SAAS,CAAC,QAAQ,GAAG,IAAI,CAAC,KAAK;IACnD,gBAAgB;;IAEhB,gBAAgB,SAAS,CAAC,cAAc,EAAE,CAAC,OAAO,CAAC,WAAW,IAAI;IAClE,oBAAoB,WAAW,CAAC,oBAAoB,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,WAAW,CAAC,OAAO,CAAC,CAAC;IAClG,gBAAgB,CAAC,CAAC;IAClB;IACA,gBAAgB,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC;IAC5C,oBAAoB,SAAS,CAAC,aAAa,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC;IAC5D,gBAAgB;IAChB;IACA,gBAAgB,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC;IAC3C,YAAY,CAAC;IACb,YAAY,IAAI,GAAG;IACnB,gBAAgB,IAAI,SAAS,CAAC,MAAM,EAAE,OAAO,KAAK;IAClD,gBAAgB,IAAI,WAAW,GAAG,SAAS,CAAC,SAAS,CAAC,IAAI,EAAE;IAC5D,gBAAgB,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE;IAC1C;IACA,oBAAoB,MAAM,UAAU,GAAG,WAAW,CAAC,KAAK,EAAE;IAC1D,oBAAoB,IAAI,UAAU,CAAC,QAAQ,EAAE;IAC7C,wBAAwB,OAAO,KAAK;IACpC,oBAAoB;IACpB,gBAAgB;;IAEhB,gBAAgB,IAAI,IAAI,CAAC,QAAQ,EAAE;IACnC,oBAAoB,OAAO,KAAK;IAChC,gBAAgB;IAChB;IACA,gBAAgB,MAAM,eAAe,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,EAAE,GAAG,aAAa,CAAC,EAAE,CAAC,UAAU,CAAC;IACjG,gBAAgB,IAAI,eAAe,CAAC,QAAQ,EAAE;IAC9C,oBAAoB,OAAO,KAAK;IAChC,gBAAgB;;IAEhB,gBAAgB,SAAS,CAAC,MAAM,GAAG,IAAI;IACvC,gBAAgB,SAAS,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC;;IAErD,gBAAgB,MAAM,OAAO,GAAG,SAAS,CAAC,KAAK,CAAC,aAAa;IAC7D,gBAAgB,MAAM,cAAc,GAAG,OAAO,CAAC,eAAe,EAAE;IAChE,gBAAgB,IAAI,cAAc,EAAE;IACpC,oBAAoB,OAAO,CAAC,YAAY,CAAC,cAAc,EAAE,KAAK,CAAC;IAC/D,gBAAgB,CAAC,MAAM;IACvB,oBAAoB,OAAO,CAAC,cAAc,EAAE;IAC5C,gBAAgB;;IAEhB,gBAAgB,IAAI,CAAC,CAAC,SAAS,CAAC,aAAa,IAAI,SAAS,CAAC,cAAc,KAAK,aAAa,EAAE,IAAI,EAAE;IACnG,oBAAoB,SAAS,CAAC,KAAK,CAAC,WAAW,EAAE;IACjD,oBAAoB,SAAS,CAAC,aAAa,GAAG,IAAI;IAClD,oBAAoB,SAAS,CAAC,cAAc,GAAG,KAAK;IACpD;IACA,oBAAoB,UAAU,CAAC,MAAM;IACrC,wBAAwB,IAAI,CAAC,SAAS,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,gBAAgB,EAAE;IAC7E,wBAAwB,SAAS,CAAC,gBAAgB,CAAC,MAAM,CAAC,EAAE;IAC5D,6BAA6B,IAAI,CAAC,MAAM,SAAS,CAAC,KAAK,EAAE,aAAa,IAAI;IAC1E,6BAA6B,KAAK,CAAC,GAAG,IAAI,OAAO,CAAC,KAAK,CAAC,0BAA0B,EAAE,GAAG,CAAC,CAAC;IACzF,oBAAoB,CAAC,EAAE,aAAa,CAAC,aAAa,CAAC;IACnD,gBAAgB;IAChB;IACA,gBAAgB,SAAS,CAAC,KAAK,CAAC,IAAI,EAAE;IACtC,gBAAgB,SAAS,CAAC,SAAS,CAAC,IAAI,EAAE;;IAE1C,gBAAgB,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,eAAe,EAAE,MAAM,CAAC;IAC9E;IACA,gBAAgB,OAAO,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,EAAE,GAAG,aAAa,CAAC,EAAE,CAAC,IAAI,CAAC;;IAEnE,gBAAgB,OAAO,IAAI;IAC3B,YAAY,CAAC;IACb,YAAY,KAAK,GAAG;IACpB,gBAAgB,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,OAAO,KAAK;;IAEnD,gBAAgB,MAAM,gBAAgB,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,EAAE,GAAG,aAAa,CAAC,EAAE,CAAC,WAAW,CAAC;IACnG,gBAAgB,IAAI,gBAAgB,CAAC,QAAQ,EAAE;IAC/C,oBAAoB,OAAO,KAAK;IAChC,gBAAgB;IAChB;IACA,gBAAgB,SAAS,CAAC,MAAM,GAAG,KAAK;IACxC;IACA,gBAAgB,SAAS,CAAC,SAAS,CAAC,WAAW,CAAC,KAAK,CAAC;IACtD,gBAAgB,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM;IAC5C,oBAAoB,SAAS,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC;IACpD,gBAAgB,CAAC,CAAC;IAClB,gBAAgB,SAAS,CAAC,SAAS,CAAC,IAAI,EAAE;IAC1C,gBAAgB,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,eAAe,EAAE,OAAO,CAAC;;IAE/E,gBAAgB,OAAO,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,EAAE,GAAG,aAAa,CAAC,EAAE,CAAC,KAAK,CAAC;;IAEpE,gBAAgB,OAAO,IAAI;IAC3B,YAAY,CAAC;IACb,YAAY,MAAM,GAAG;IACrB,gBAAgB,IAAI,SAAS,CAAC,MAAM,EAAE;IACtC,oBAAoB,IAAI,CAAC,KAAK,EAAE;IAChC,gBAAgB;IAChB,qBAAqB;IACrB,oBAAoB,IAAI,CAAC,IAAI,EAAE;IAC/B,gBAAgB;IAChB,YAAY,CAAC;IACb,YAAY,MAAM,CAAC,QAAQ,GAAG,IAAI,EAAE,UAAU,GAAG,IAAI,EAAE;IACvD,gBAAgB,IAAI,UAAU,EAAE;IAChC,oBAAoB,IAAI,aAAa,CAAC,QAAQ,IAAI,aAAa,CAAC,WAAW,GAAG,CAAC,EAAE;IACjF,wBAAwB,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,aAAa,CAAC,WAAW,EAAE;IAChF,4BAA4B,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,KAAK,EAAE,IAAI,CAAC;IAC3E,wBAAwB;IACxB,oBAAoB;;IAEpB,oBAAoB,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,EAAE;IACxD,wBAAwB,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,KAAK,EAAE,IAAI,CAAC;IACvE,wBAAwB;IACxB,oBAAoB;;IAEpB,oBAAoB,MAAM,iBAAiB,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,aAAa,CAAC,EAAE,CAAC,YAAY,CAAC;IACrH;IACA,oBAAoB,IAAI,iBAAiB,CAAC,QAAQ,EAAE;IACpD,wBAAwB,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC;IACjE,wBAAwB;IACxB,oBAAoB;IACpB,gBAAgB;;IAEhB,gBAAgB,IAAI,CAAC,WAAW,EAAE;IAClC,gBAAgB,SAAS,CAAC,YAAY,CAAC,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC;IACtE,gBAAgB,IAAI,UAAU,EAAE;IAChC,oBAAoB,IAAI,SAAS,CAAC,aAAa,EAAE;IACjD,wBAAwB,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,aAAa,EAAE,QAAQ,CAAC;IAC1E,oBAAoB;IACpB,oBAAoB,OAAO,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,aAAa,CAAC,EAAE,CAAC,MAAM,CAAC;;IAErF,oBAAoB,IAAI,SAAS,CAAC,OAAO,CAAC,SAAS,EAAE;IACrD,wBAAwB,IAAI,CAAC,KAAK,EAAE;IACpC,oBAAoB;IACpB,gBAAgB;IAChB,YAAY,CAAC;IACb,YAAY,WAAW,GAAG;IAC1B,gBAAgB,IAAI,IAAI,GAAG,aAAa,CAAC,WAAW;IACpD,gBAAgB,IAAI,CAAC,aAAa,CAAC,QAAQ,IAAI,SAAS,CAAC,cAAc,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE;IACtF,oBAAoB,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IACvC,gBAAgB;IAChB,gBAAgB,IAAI,KAAK,aAAa,CAAC,WAAW;IAClD;IACA,gBAAgB,SAAS,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC;IACtD,gBAAgB,SAAS,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC;IACxD,YAAY,CAAC;IACb,YAAY,EAAE,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE;IAC1C,gBAAgB,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE;IAChD,oBAAoB,aAAa,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE;IAClD,gBAAgB;IAChB,gBAAgB,aAAa,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC;IACtD,YAAY,CAAC;IACb,YAAY,IAAI,CAAC,QAAQ,EAAE,GAAG,EAAE;IAChC,gBAAgB,SAAS,CAAC,gBAAgB,CAAC,OAAO,CAAC,GAAG,CAAC;IACvD,YAAY;IACZ,SAAS;;IAET,QAAQ,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,UAAU,EAAE,YAAY,CAAC;IAC1D,QAAQ,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,UAAU,EAAE,YAAY,CAAC;IAC1D,QAAQ,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,SAAS,EAAE,WAAW,CAAC;;IAExD,QAAQ,OAAO,IAAI;IACnB,IAAI;;IAEJ;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,aAAa,CAAC,GAAG,EAAE,IAAI,EAAE,WAAW,EAAE;IAC1C,QAAQ,MAAM,SAAS,GAAG,IAAI;;IAE9B,QAAQ,MAAM,CAAC,cAAc,CAAC,GAAG,EAAE,IAAI,EAAE;IACzC,YAAY,GAAG,GAAG,EAAE,OAAO,SAAS,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;IACpD,YAAY,GAAG,CAAC,KAAK,EAAE;IACvB,gBAAgB,SAAS,CAAC,WAAW,CAAC,GAAG,KAAK;IAC9C,gBAAgB,SAAS,CAAC,SAAS,CAAC,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,KAAK;IACvE,YAAY,CAAC;IACb,YAAY,UAAU,EAAE,IAAI;IAC5B,YAAY,YAAY,EAAE;IAC1B,SAAS,CAAC;IACV,IAAI;;IAEJ;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,cAAc,CAAC,UAAU,GAAG,IAAI,EAAE;IACtC,QAAQ,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,OAAO,EAAE;;IAE/C,QAAQ,MAAM,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC,kBAAkB,CAAC,YAAY,EAAE;;IAEpE,QAAQ,MAAM,WAAW,GAAG,EAAE;IAC9B,QAAQ,KAAK,MAAM,CAAC,IAAI,SAAS,EAAE;IACnC,YAAY,IAAI,CAAC,YAAY,WAAW,EAAE;IAC1C,gBAAgB,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC;IACnC,YAAY,CAAC,MAAM,IAAI,CAAC,YAAY,UAAU,EAAE;IAChD,gBAAgB,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,MAAM,EAAE;IAC9D,oBAAoB,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC;IAChD,gBAAgB;IAChB,YAAY;IACZ,QAAQ;;IAER,QAAQ,IAAI,OAAO,UAAU,KAAK,SAAS,EAAE;IAC7C,YAAY,OAAO,WAAW,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,KAAK,UAAU,CAAC;IACrE,QAAQ;IACR,QAAQ,OAAO,WAAW;IAC1B,IAAI;IACJ;;ICprBA;IACA;IACA;IACO,MAAM,uBAAuB,CAAC;IACrC,IAAI,SAAS,GAAG,KAAK;IACrB;IACA,IAAI,SAAS,GAAG,IAAI;;IAEpB;IACA,IAAI,QAAQ,GAAG,EAAE;;IAEjB;IACA;IACA;IACA;IACA;IACA,IAAI,QAAQ,CAAC,MAAM,EAAE;IACrB,QAAQ,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC;IAClC,IAAI;;IAEJ;IACA;IACA;IACA,IAAI,WAAW,GAAG;IAClB,QAAQ,IAAI,CAAC,QAAQ,GAAG,EAAE;IAC1B,IAAI;;IAEJ;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,KAAK,CAAC,GAAG,EAAE;IACf,QAAQ,IAAI,IAAI,CAAC,SAAS,EAAE;IAC5B,YAAY;IACZ,QAAQ;IACR,QAAQ,IAAI,CAAC,SAAS,GAAG,IAAI;IAC7B,QAAQ,MAAM,QAAQ,GAAG,GAAG,CAAC,WAAW,EAAE;IAC1C,QAAQ,MAAM,QAAQ,GAAG,GAAG,CAAC,WAAW,EAAE;IAC1C,QAAQ,IAAI,CAAC,SAAS,GAAG,IAAI,gBAAgB,CAAC,CAAC,SAAS,KAAK;IAC7D,YAAY,SAAS,CAAC,OAAO,CAAC,CAAC,QAAQ,KAAK;IAC5C,gBAAgB,QAAQ,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,IAAI,KAAK;IACtD,oBAAoB,MAAM,OAAO,+BAA+B,IAAI,CAAC;IACrE,oBAAoB,IAAI,OAAO,CAAC,QAAQ,KAAK,CAAC,EAAE;IAChD,wBAAwB,IAAI,OAAO,CAAC,OAAO,KAAK,QAAQ,EAAE;IAC1D,4BAA4B,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC;IACjD,wBAAwB;IACxB;IACA,wBAAwB,MAAM,OAAO,GAAG,OAAO,CAAC,gBAAgB,CAAC,QAAQ,CAAC;IAC1E,wBAAwB,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,KAAK;IACpD,4BAA4B,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;IAChD,wBAAwB,CAAC,CAAC;IAC1B,oBAAoB;IACpB,gBAAgB,CAAC,CAAC;IAClB,YAAY,CAAC,CAAC;IACd,QAAQ,CAAC,CAAC;;IAEV,QAAQ,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,EAAE;IAC9C,YAAY,SAAS,EAAE,IAAI;IAC3B,YAAY,OAAO,EAAE;IACrB,SAAS,CAAC;IACV,IAAI;;IAEJ;IACA;IACA;IACA;IACA,IAAI,IAAI,GAAG;IACX,QAAQ,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;IAC7B,YAAY;IACZ,QAAQ;IACR,QAAQ,IAAI,CAAC,SAAS,GAAG,KAAK;IAC9B,QAAQ,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE;IACnC,QAAQ,IAAI,CAAC,SAAS,GAAG,IAAI;IAC7B,IAAI;;IAEJ;IACA;IACA;IACA;IACA;IACA,IAAI,OAAO,CAAC,OAAO,EAAE;IACrB,QAAQ,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,IAAI;IACxC,YAAY,MAAM,CAAC,OAAO,CAAC;IAC3B,QAAQ,CAAC,CAAC;IACV,IAAI;IACJ;;IClFA;IACA;IACA;IACO,MAAM,SAAS,CAAC;IACvB;IACA,IAAI,UAAU,GAAG,IAAI;;IAErB,IAAI,OAAO,aAAa,GAAG,IAAI,GAAG,EAAE;;IAEpC;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,OAAO,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE;IAChC,QAAQ,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,gBAAgB,EAAE,EAAE,OAAO,CAAC;;IAEpE,QAAQ,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,CAAC;;IAE9C,QAAQ,MAAM,SAAS,GAAG,IAAI;IAC9B,QAAQ,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,EAAE;IAC7C,QAAQ,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,SAAS,EAAE,MAAM;IACtD,YAAY,OAAO,CAAC,SAAS,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,OAAO,CAAC,EAAE,CAAC,IAAI,CAAC;IAC1E,YAAY,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,SAAS,CAAC;IACrD,YAAY,OAAO,CAAC,EAAE,CAAC,IAAI,GAAG,EAAE;IAChC,QAAQ,CAAC,CAAC;IACV;IACA;IACA,QAAQ,MAAM,cAAc,uCAAuC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;IAC3F;IACA,QAAQ,cAAc,CAAC,OAAO,CAAC,IAAI,IAAI;IACvC,YAAY,CAAC,WAAW;IACxB,gBAAgB,IAAI,QAAQ,IAAI,IAAI,CAAC,OAAO,EAAE;IAC9C,oBAAoB,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC;IAChD,oBAAoB,IAAI,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE;IAC5D,wBAAwB,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC;IACxD,oBAAoB;IACpB,gBAAgB;IAChB,YAAY,CAAC,GAAG;IAChB,QAAQ,CAAC,CAAC;;IAEV,QAAQ,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;IACtD,YAAY,IAAI,CAAC,gBAAgB,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC;IAC/C,QAAQ;IACR,IAAI;;IAEJ;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,OAAO,IAAI,CAAC,KAAK,GAAG,GAAG,EAAE;IAC7B,QAAQ,IAAI,OAAO,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE;;IAEvC,QAAQ,IAAI,KAAK,IAAI,GAAG,EAAE;IAC1B,YAAY,KAAK,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC;IACtD,YAAY,IAAI,KAAK,IAAI,EAAE,EAAE;IAC7B,gBAAgB,OAAO,OAAO;IAC9B,YAAY;IACZ,QAAQ;;IAER,QAAQ,MAAM,IAAI,iCAAiC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;IAC3E,QAAQ,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,EAAE;IAC9B,YAAY,OAAO,OAAO;IAC1B,QAAQ;IACR;IACA,QAAQ,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACjD,QAAQ,IAAI,CAAC,MAAM,EAAE;IACrB,YAAY,OAAO,OAAO;IAC1B,QAAQ;IACR;IACA,QAAQ,KAAK,IAAI,UAAU,IAAI,MAAM,CAAC,MAAM,EAAE;IAC9C,YAAY,OAAO,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM;IAC/E,QAAQ;IACR,QAAQ,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;IAClC;IACA,QAAQ,IAAI,OAAO,EAAE;IACrB;IACA,YAAY,IAAI,QAAQ,GAAG,EAAE;IAC7B,YAAY,KAAK,IAAI,SAAS,IAAI,OAAO,EAAE;;IAE3C;IACA,gBAAgB,MAAM,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC;IACjD;IACA,gBAAgB,QAAQ,MAAM,CAAC,IAAI;IACnC,oBAAoB,KAAK,SAAS;IAClC,wBAAwB,IAAI,CAAC,kBAAkB,CAAC,QAAQ,EAAE,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC;IAC5E,wBAAwB;IACxB;IACA,oBAAoB,KAAK,MAAM;IAC/B,wBAAwB,IAAI,CAAC,mBAAmB,CAAC,QAAQ,EAAE,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC;IAC7E,wBAAwB;IAIxB;IACA,YAAY;IACZ;IACA,YAAY,QAAQ,CAAC,OAAO,GAAG,KAAK;IACpC,YAAY,OAAO,QAAQ;IAC3B,QAAQ;IACR,IAAI;;IAEJ;IACA;IACA;IACA;IACA,IAAI,OAAO,QAAQ,GAAG;IACtB,QAAQ,IAAI,CAAC,UAAU,GAAG,IAAI,uBAAuB,EAAE;IACvD,QAAQ,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,aAAa,KAAK;IACpD,YAAY,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,KAAK,KAAK;IAC3D,gBAAgB,IAAI;IACpB,oBAAoB,IAAI,aAAa,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;IACtD,wBAAwB,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE,OAAO,CAAC;IACnE,oBAAoB;IACpB,gBAAgB,CAAC,CAAC,OAAO,KAAK,EAAE;IAChC,oBAAoB,OAAO,CAAC,IAAI,CAAC,CAAC,kBAAkB,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC;IACrE,gBAAgB;IAChB,YAAY,CAAC,CAAC;IACd,QAAQ,CAAC,CAAC;IACV,QAAQ,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,QAAQ,CAAC;IACvC,IAAI;;IAEJ;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,OAAO,OAAO,CAAC,MAAM,GAAG,IAAI,EAAE;IAClC,QAAQ,IAAI,MAAM,KAAK,IAAI,EAAE;IAC7B,YAAY,IAAI,CAAC,UAAU,EAAE;IAC7B,QAAQ,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE;IAC/C,YAAY,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC;IACvC,QAAQ,CAAC,MAAM,IAAI,MAAM,YAAY,iBAAiB,EAAE;IACxD,YAAY,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC;IACvC,QAAQ;IACR,IAAI;;IAEJ;IACA;IACA;IACA;IACA,IAAI,OAAO,UAAU,GAAG;IACxB,QAAQ,MAAM,cAAc,GAAG,IAAI,CAAC,gBAAgB,EAAE;IACtD;IACA,QAAQ,cAAc,CAAC,OAAO,CAAC,KAAK,IAAI;IACxC,YAAY,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC;IACtC,QAAQ,CAAC,CAAC;;IAEV,QAAQ,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE;IAClC,QAAQ,IAAI,CAAC,gBAAgB,EAAE,CAAC,MAAM,GAAG,CAAC;;IAE1C,QAAQ,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE;IAC9B,IAAI;;IAEJ;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,OAAO,cAAc,CAAC,KAAK,EAAE;IACjC,QAAQ,MAAM,cAAc,uCAAuC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;IAC3F;IACA,QAAQ,cAAc,CAAC,OAAO,CAAC,OAAO,IAAI;IAC1C,YAAY,IAAI,OAAO,CAAC,OAAO,KAAK,QAAQ,EAAE;IAC9C,gBAAgB,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC;IAC5C,YAAY;IACZ,QAAQ,CAAC,CAAC;;IAEV,QAAQ,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,KAAK,CAAC;IACxC,QAAQ,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,EAAE;IAChD,QAAQ,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC;IAC7C,QAAQ,IAAI,KAAK,GAAG,EAAE,EAAE;IACxB,YAAY,QAAQ,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;IACrC,QAAQ;IACR,IAAI;;IAEJ;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,OAAO,cAAc,CAAC,aAAa,EAAE;IACzC,QAAQ,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC;IACxD,QAAQ,IAAI,CAAC,OAAO,EAAE;;IAEtB,QAAQ,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE,OAAO,CAAC;;IAEnD,QAAQ,MAAM,YAAY,GAAG,CAAC,CAAC,IAAI,CAAC,UAAU;IAC9C,QAAQ,IAAI,YAAY,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE;;IAEhD,QAAQ,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;;IAEpD,QAAQ,MAAM,OAAO,GAAG,OAAO,CAAC,SAAS,EAAE,OAAO,IAAI,aAAa,CAAC,aAAa;;IAEjF,QAAQ,aAAa,CAAC,KAAK,CAAC,OAAO,GAAG,EAAE;IACxC,QAAQ,aAAa,CAAC,KAAK,CAAC,UAAU,GAAG,EAAE;IAC3C,QAAQ,aAAa,CAAC,QAAQ,GAAG,KAAK;IACtC,QAAQ,OAAO,aAAa,CAAC,OAAO,CAAC,WAAW;;IAEhD,QAAQ,IAAI,OAAO,IAAI,OAAO,CAAC,UAAU,EAAE;IAC3C,YAAY,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,aAAa,EAAE,OAAO,CAAC;IACnE,QAAQ,CAAC,MAAM;IACf,YAAY,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC;IACpD,QAAQ;;IAER,QAAQ,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC;;IAE3C,QAAQ,IAAI,YAAY,IAAI,IAAI,CAAC,aAAa,CAAC,IAAI,GAAG,CAAC,EAAE;IACzD,YAAY,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,QAAQ,CAAC;IAC3C,QAAQ;IACR,IAAI;;IAEJ;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;;IAEA;IACA;IACA;IACA;;IAEA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,OAAO,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE;IAClC,QAAQ,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC;IAClC,QAAQ,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC;IACjC,IAAI;;IAEJ;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,OAAO,cAAc,CAAC,aAAa,EAAE,OAAO,EAAE;IAClD,QAAQ,IAAI,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,IAAI,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,EAAE;IACpF,YAAY,OAAO,KAAK;IACxB,QAAQ;IACR;IACA,QAAQ,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;IACzC,QAAQ,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE,OAAO,CAAC;IACpE,QAAQ,WAAW,CAAC,IAAI,GAAG;IAC3B,QAAQ,WAAW,CAAC,SAAS,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,WAAW,CAAC;IACzD,QAAQ,WAAW,CAAC,WAAW,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,YAAY,CAAC;IAC5D,QAAQ,MAAM,OAAO,GAAG,CAAC,OAAO,EAAE,WAAW,CAAC;IAC9C;IACA,QAAQ,IAAI,CAAC,YAAY,CAAC,aAAa,EAAE,OAAO,CAAC;IACjD,QAAQ,MAAM,SAAS,GAAG,IAAI,SAAS,CAAC,aAAa,EAAE,IAAI,CAAC;IAC5D,QAAQ,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC,SAAS;IAC/C,QAAQ,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,SAAS,EAAE;IAC9C,QAAQ,OAAO,CAAC,IAAI,GAAG,SAAS;;IAEhC,QAAQ,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,gBAAgB,CAAC,SAAS,EAAE,MAAM;IACnE,YAAY,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE;IACnC,QAAQ,CAAC,CAAC;;IAEV,QAAQ,OAAO,IAAI;IACnB,IAAI;;IAEJ;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,OAAO,cAAc,CAAC,UAAU,EAAE,MAAM,EAAE;IAC9C,QAAQ,MAAM,UAAU,GAAG,MAAM,CAAC,wBAAwB,CAAC,MAAM,EAAE,UAAU,CAAC;IAC9E,QAAQ,IAAI,IAAI,GAAG,UAAU;;IAE7B,QAAQ,IAAI,UAAU,CAAC,GAAG,KAAK,UAAU,CAAC,GAAG,IAAI,OAAO,MAAM,CAAC,UAAU,CAAC,KAAK,UAAU,CAAC,EAAE;IAC5F,YAAY,IAAI,GAAG,SAAS;IAC5B,QAAQ;IACR,aAAa,IAAI,OAAO,MAAM,CAAC,UAAU,CAAC,KAAK,UAAU,EAAE;IAC3D,YAAY,IAAI,GAAG,MAAM;IACzB,QAAQ;;IAER,QAAQ,OAAO;IACf,YAAY,IAAI;IAChB,YAAY,IAAI,EAAE;IAClB;IACA,IAAI;;IAEJ;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,OAAO,kBAAkB,CAAC,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE;IACjD,QAAQ,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,IAAI,EAAE;IAC5C,YAAY,GAAG,GAAG;IAClB,gBAAgB,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACxD,gBAAgB,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC;IAC1C,YAAY,CAAC;IACb,YAAY,GAAG,CAAC,KAAK,EAAE;IACvB,gBAAgB,GAAG,CAAC,OAAO,CAAC,EAAE,IAAI;IAClC,oBAAoB,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC;IACxD,oBAAoB,IAAI,MAAM,EAAE;IAChC,wBAAwB,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,KAAK;IACnD,oBAAoB;IACpB,gBAAgB,CAAC,CAAC;IAClB,YAAY,CAAC;IACb,YAAY,UAAU,EAAE,IAAI;IAC5B,YAAY,YAAY,EAAE;IAC1B,SAAS,CAAC;IACV,IAAI;;IAEJ;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,OAAO,mBAAmB,CAAC,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE;IAClD,QAAQ,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,KAAK;IACtC,YAAY,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,GAAG,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;IAC7D,gBAAgB,MAAM,EAAE,GAAG,GAAG,CAAC,KAAK,CAAC;IACrC,gBAAgB,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC;IACpD,gBAAgB,IAAI,CAAC,MAAM,EAAE;IAC7B,oBAAoB;IACpB,gBAAgB;IAChB,gBAAgB,MAAM,QAAQ,GAAG,OAAO,CAAC,eAAe,EAAE;IAC1D,gBAAgB,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,QAAQ,EAAE,GAAG,MAAM;IAChE,gBAAgB,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,UAAU,EAAE;IAChD,oBAAoB;IACpB,gBAAgB;IAChB,YAAY;IACZ,YAAY,OAAO,MAAM;IACzB,QAAQ;IACR,IAAI;IACJ;;ICjYA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACO,SAAS,cAAc,CAAC,QAAQ,EAAE;IACzC,IAAI,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,OAAO,KAAK;IACnD;IACA,IAAI,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC,QAAQ,EAAE;IACvD,QAAQ,OAAO,CAAC,IAAI;IACpB,YAAY,CAAC,CAAC,EAAE,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC;IAC7E,YAAY,CAAC,+DAA+D;IAC5E,SAAS;IACT,QAAQ,OAAO,IAAI;IACnB,IAAI;IACJ;IACA,IAAI,MAAM,CAAC,QAAQ,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE;IAC7C,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC,SAAS,GAAG,IAAI;IACrC,IAAI,OAAO,KAAK;IAChB;;IAEA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACO,SAAS,UAAU,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE;IAC/C,IAAI,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE;IACvC;IACA,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,QAAQ,GAAG,IAAI;IAChC,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,GAAG,KAAK;IAClC,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,GAAG,OAAO;IACpC;IACA,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC;IACpC;IACA,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAC/B;IACA,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,EAAE,OAAO,CAAC,oBAAoB,CAAC,CAAC;IAC5D;;AClBY,UAAC,OAAO,GAAG;AACX,UAAC,IAAI,GAAG;;IAEpB,MAAM,aAAa,GAAG,cAAc,CAAC,IAAI,CAAC;;IAE1C;IACA;IACA;IACA;IACA;IACA;IACA;IACO,SAAS,IAAI,CAAC,KAAK,EAAE,OAAO,GAAG,EAAE,EAAE;IAC1C,IAAI,IAAI,aAAa,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,MAAM,CAAC,IAAI,CAAC,EAAE;IACxE,QAAQ,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC;IAChD,IAAI;;IAEJ,IAAI,SAAS,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC;IAClC;;IAEA;IACA;IACA;IACA;IACA;IACA;IACA;IACO,SAAS,IAAI,CAAC,KAAK,EAAE;IAC5B,IAAI,IAAI,aAAa,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,MAAM,CAAC,IAAI,CAAC,EAAE;IACxE,QAAQ,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC;IACvC,IAAI;;IAEJ,IAAI,OAAO,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC;IAChC;;IAEA;IACA;IACA;IACA;IACA;IACA;IACA;IACO,SAAS,OAAO,CAAC,KAAK,EAAE;IAC/B,IAAI,IAAI,aAAa,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,MAAM,CAAC,IAAI,CAAC,EAAE;IACxE,QAAQ,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC;IAC1C,IAAI;;IAEJ,IAAI,OAAO,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC;IACnC;;IAEA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACO,SAAS,MAAM,CAAC,KAAK,EAAE,OAAO,GAAG,EAAE,EAAE;IAC5C,IAAI,IAAI,aAAa,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,MAAM,CAAC,IAAI,CAAC,EAAE;IACxE,QAAQ,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC;IAClD,IAAI;;IAEJ,IAAI,OAAO,SAAS,CAAC,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC;IAC3C;;IAEA;IACA;IACA;IACA;IACA;IACA;IACA;IACO,SAAS,QAAQ,CAAC,OAAO,EAAE;IAClC,IAAI,IAAI,aAAa,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,MAAM,CAAC,IAAI,CAAC,EAAE;IACxE,QAAQ,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC;IAC7C,IAAI;;IAEJ,IAAI,OAAO,QAAQ,CAAC,OAAO,CAAC;IAC5B;;IAEA,IAAI,CAAC,aAAa,EAAE;IACpB,IAAI,IAAI,WAAW,GAAG,KAAK;;IAE3B,IAAI,SAAS,IAAI,GAAG;IACpB,QAAQ,IAAI,WAAW,EAAE;IACzB,QAAQ,WAAW,GAAG,IAAI;IAC1B;IACA,QAAQ,QAAQ,CAAC,gBAAgB,CAAC,WAAW,EAAE,MAAM;IACrD,YAAY,MAAM,IAAI,GAAG,IAAI,CAAC,gBAAgB,EAAE;IAChD,YAAY,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE;IACjC,gBAAgB,MAAM,QAAQ,GAAG,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAChE,gBAAgB,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE;IACvC,oBAAoB,QAAQ,CAAC,KAAK,EAAE;IACpC,gBAAgB;IAChB,YAAY;IACZ,QAAQ,CAAC,CAAC;;IAEV,QAAQ,SAAS,CAAC,QAAQ,EAAE;IAC5B;IACA,QAAQ,UAAU,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC;IACrF,IAAI;;IAEJ,IAAI,IAAI,QAAQ,CAAC,UAAU,KAAK,SAAS,EAAE;IAC3C,QAAQ,QAAQ,CAAC,gBAAgB,CAAC,kBAAkB,EAAE,IAAI,CAAC;IAC3D,IAAI,CAAC,MAAM;IACX,QAAQ,IAAI,EAAE;IACd,IAAI;IACJ;;;;;;;;;;;;;;"}