mtrl 0.6.3 → 0.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/drawer/api.d.ts +54 -0
- package/dist/components/drawer/config.d.ts +106 -0
- package/dist/components/drawer/constants.d.ts +97 -0
- package/dist/components/drawer/drawer.d.ts +59 -0
- package/dist/components/drawer/features/headline.d.ts +17 -0
- package/dist/components/drawer/features/index.d.ts +3 -0
- package/dist/components/drawer/features/items.d.ts +18 -0
- package/dist/components/drawer/features/state.d.ts +18 -0
- package/dist/components/drawer/index.d.ts +6 -0
- package/dist/components/drawer/types.d.ts +233 -0
- package/dist/components/index.d.ts +2 -3
- package/dist/components/menu/constants.d.ts +2 -0
- package/dist/components/menu/features/opener.d.ts +1 -1
- package/dist/components/menu/types.d.ts +14 -0
- package/dist/components/progress/types.d.ts +8 -0
- package/dist/index.cjs +10 -20
- package/dist/index.cjs.map +20 -26
- package/dist/index.js +10 -20
- package/dist/index.js.map +20 -26
- package/dist/package.json +1 -1
- package/dist/styles.css +2 -2
- package/package.json +1 -4
- package/src/styles/components/_button-group.scss +1 -1
- package/src/styles/components/_button.scss +1 -1
- package/src/styles/components/_drawer.scss +611 -0
- package/src/styles/components/_extended-fab.scss +1 -1
- package/src/styles/components/_fab.scss +1 -1
- package/src/styles/components/_icon-button.scss +1 -1
- package/src/styles/components/_menu.scss +25 -0
- package/src/styles/components/_segmented-button.scss +1 -1
- package/src/styles/main.scss +1 -0
package/dist/index.cjs.map
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../src/core/compose/pipe.ts", "../src/core/compose/base.ts", "../src/core/dom/attributes.ts", "../src/core/config.ts", "../src/core/dom/classes.ts", "../src/core/dom/create.ts", "../src/core/utils/mobile.ts", "../src/core/compose/component.ts", "../src/core/state/emitter.ts", "../src/core/compose/features/events.ts", "../src/core/compose/features/text.ts", "../src/core/compose/features/icon.ts", "../src/core/compose/features/variant.ts", "../src/core/compose/features/size.ts", "../src/core/compose/features/position.ts", "../src/core/compose/features/constants.ts", "../src/core/compose/features/ripple.ts", "../src/core/compose/features/input.ts", "../src/core/compose/features/checkable.ts", "../src/core/compose/features/style.ts", "../src/core/compose/utils/type-guards.ts", "../src/core/compose/features/textinput.ts", "../src/core/compose/features/textlabel.ts", "../src/core/compose/features/track.ts", "../src/core/state/events.ts", "../src/core/compose/features/withEvents.ts", "../src/core/utils/performance.ts", "../src/core/compose/features/throttle.ts", "../src/core/compose/features/debounce.ts", "../src/core/compose/features/disabled.ts", "../src/core/compose/features/lifecycle.ts", "../src/core/compose/features/index.ts", "../src/core/compose/index.ts", "../src/core/config/global.ts", "../src/core/config/component.ts", "../src/components/badge/constants.ts", "../src/components/badge/config.ts", "../src/components/badge/features.ts", "../src/components/badge/api.ts", "../src/components/badge/badge.ts", "../src/components/badge/index.ts", "../src/core/dom/events.ts", "../src/core/dom/index.ts", "../src/components/progress/constants.ts", "../src/core/utils/object.ts", "../src/core/utils/background.ts", "../src/core/utils/theme.ts", "../src/core/utils/color.ts", "../src/core/utils/index.ts", "../src/core/canvas/resize.ts", "../src/components/progress/features/circular.ts", "../src/components/progress/features/linear.ts", "../src/components/progress/features/canvas.ts", "../src/components/progress/features/state.ts", "../src/components/progress/api.ts", "../src/components/progress/config.ts", "../src/components/progress/progress.ts", "../src/components/button/features/progress.ts", "../src/core/state/store.ts", "../src/core/state/lifecycle.ts", "../src/core/state/disabled.ts", "../src/core/canvas/drawing.ts", "../src/core/canvas/animation.ts", "../src/core/canvas/utils.ts", "../src/core/canvas/index.ts", "../src/core/index.ts", "../src/components/button/api.ts", "../src/components/button/constants.ts", "../src/components/button/config.ts", "../src/components/button/button.ts", "../src/components/button/index.ts", "../src/components/index.ts", "../src/components/bottom-app-bar/bottom-app-bar.ts", "../src/components/bottom-app-bar/config.ts", "../src/components/bottom-app-bar/constants.ts", "../src/components/bottom-app-bar/index.ts", "../src/components/button-group/button-group.ts", "../src/components/button-group/config.ts", "../src/components/button-group/constants.ts", "../src/components/card/card.ts", "../src/components/card/api.ts", "../src/components/card/config.ts", "../src/components/card/content.ts", "../src/components/card/constants.ts", "../src/components/card/features.ts", "../src/components/carousel/carousel.ts", "../src/components/carousel/constants.ts", "../src/components/carousel/features/slides.ts", "../src/components/carousel/features/drag.ts", "../src/components/carousel/api.ts", "../src/components/carousel/config.ts", "../src/components/checkbox/checkbox.ts", "../src/components/checkbox/api.ts", "../src/components/checkbox/config.ts", "../src/components/chips/chip/chip.ts", "../src/components/chips/chip/api.ts", "../src/components/chips/chip/config.ts", "../src/components/chips/chips.ts", "../src/components/chips/features/container.ts", "../src/components/chips/features/chip-items.ts", "../src/components/chips/constants.ts", "../src/components/chips/features/controller.ts", "../src/components/chips/features/dom.ts", "../src/components/chips/api.ts", "../src/components/chips/config.ts", "../src/components/datepicker/datepicker.ts", "../src/components/datepicker/types.ts", "../src/components/datepicker/utils.ts", "../src/components/datepicker/api.ts", "../src/components/datepicker/config.ts", "../src/components/datepicker/render.ts", "../src/components/dialog/dialog.ts", "../src/components/dialog/config.ts", "../src/components/dialog/features.ts", "../src/components/divider/divider.ts", "../src/components/divider/config.ts", "../src/components/divider/features.ts", "../src/components/dialog/api.ts", "../src/components/fab/fab.ts", "../src/components/fab/api.ts", "../src/components/fab/config.ts", "../src/components/extended-fab/extended-fab.ts", "../src/components/extended-fab/api.ts", "../src/components/extended-fab/config.ts", "../src/components/icon-button/icon-button.ts", "../src/components/icon-button/features/toggle.ts", "../src/components/icon-button/api.ts", "../src/components/icon-button/config.ts", "../src/components/icon-button/constants.ts", "../src/components/list/list.ts", "../src/components/list/constants.ts", "../src/components/list/features/renderer.ts", "../src/components/list/features/selection.ts", "../src/components/list/api.ts", "../src/components/list/config.ts", "../src/components/menu/menu.ts", "../src/components/menu/features/controller.ts", "../src/components/menu/features/opener.ts", "../src/components/menu/features/position.ts", "../src/components/menu/features/keyboard.ts", "../src/components/menu/features/submenu.ts", "../src/components/menu/api.ts", "../src/components/menu/config.ts", "../src/components/menu/constants.ts", "../src/components/navigation/navigation.ts", "../src/components/navigation/api.ts", "../src/components/navigation/constants.ts", "../src/components/navigation/nav-item.ts", "../src/components/navigation/features/items.ts", "../src/components/navigation/types.ts", "../src/components/navigation/features/controller.ts", "../src/components/navigation/config.ts", "../src/components/navigation/system/state.ts", "../src/components/navigation/system/core.ts", "../src/components/navigation/system/events.ts", "../src/components/navigation/system/mobile.ts", "../src/components/navigation/system/index.ts", "../src/components/progress/index.ts", "../src/components/radios/radios.ts", "../src/components/radios/radio.ts", "../src/components/radios/api.ts", "../src/components/radios/config.ts", "../src/components/search/search.ts", "../src/components/search/constants.ts", "../src/components/search/features/structure.ts", "../src/components/search/features/states.ts", "../src/components/search/features/input.ts", "../src/components/search/features/suggestions.ts", "../src/components/search/api.ts", "../src/components/search/config.ts", "../src/components/select/select.ts", "../src/components/textfield/textfield.ts", "../src/components/textfield/api.ts", "../src/components/textfield/features/leading-icon.ts", "../src/components/textfield/features/trailing-icon.ts", "../src/components/textfield/features/prefix-text.ts", "../src/components/textfield/features/suffix-text.ts", "../src/components/textfield/features/supporting-text.ts", "../src/components/textfield/features/placement.ts", "../src/components/textfield/features/density.ts", "../src/components/textfield/features/error.ts", "../src/components/textfield/config.ts", "../src/components/textfield/constants.ts", "../src/components/select/features.ts", "../src/components/select/api.ts", "../src/components/select/config.ts", "../src/components/select/constants.ts", "../src/components/segmented-button/segmented-button.ts", "../src/components/segmented-button/config.ts", "../src/components/segmented-button/constants.ts", "../src/components/segmented-button/segment.ts", "../src/components/sheet/sheet.ts", "../src/components/sheet/types.ts", "../src/components/sheet/features/position.ts", "../src/components/sheet/features/content.ts", "../src/components/sheet/features/title.ts", "../src/components/sheet/features/state.ts", "../src/components/sheet/features/gestures.ts", "../src/components/sheet/api.ts", "../src/components/sheet/config.ts", "../src/components/sheet/constants.ts", "../src/components/slider/slider.ts", "../src/components/slider/features/range.ts", "../src/components/slider/constants.ts", "../src/components/slider/features/states.ts", "../src/components/slider/features/handlers.ts", "../src/components/slider/features/controller.ts", "../src/components/slider/features/canvas.ts", "../src/components/slider/features/dom.ts", "../src/core/dom/utils.ts", "../src/components/slider/api.ts", "../src/components/slider/config.ts", "../src/components/snackbar/snackbar.ts", "../src/components/snackbar/features.ts", "../src/components/snackbar/constants.ts", "../src/components/snackbar/position.ts", "../src/components/snackbar/api.ts", "../src/components/snackbar/queue.ts", "../src/components/snackbar/config.ts", "../src/components/switch/switch.ts", "../src/components/switch/api.ts", "../src/components/switch/features.ts", "../src/components/switch/config.ts", "../src/components/tabs/tabs.ts", "../src/components/tabs/tab.ts", "../src/components/tabs/constants.ts", "../src/components/tabs/config.ts", "../src/components/tabs/api.ts", "../src/components/tabs/utils.ts", "../src/components/tabs/indicator.ts", "../src/components/tabs/features.ts", "../src/components/tabs/state.ts", "../src/components/tabs/index.ts", "../src/components/timepicker/timepicker.ts", "../src/components/timepicker/config.ts", "../src/components/timepicker/constants.ts", "../src/components/timepicker/utils.ts", "../src/components/timepicker/clockdial.ts", "../src/components/timepicker/render.ts", "../src/components/timepicker/api.ts", "../src/components/top-app-bar/top-app-bar.ts", "../src/components/top-app-bar/config.ts", "../src/components/top-app-bar/constants.ts", "../src/components/top-app-bar/index.ts", "../src/components/tooltip/tooltip.ts", "../src/components/tooltip/types.ts", "../src/components/tooltip/api.ts", "../src/components/tooltip/config.ts", "../src/components/tooltip/constants.ts", "../src/index.ts"],
|
|
3
|
+
"sources": ["../src/core/compose/pipe.ts", "../src/core/compose/base.ts", "../src/core/dom/attributes.ts", "../src/core/config.ts", "../src/core/dom/classes.ts", "../src/core/dom/create.ts", "../src/core/utils/mobile.ts", "../src/core/compose/component.ts", "../src/core/state/emitter.ts", "../src/core/compose/features/events.ts", "../src/core/compose/features/text.ts", "../src/core/compose/features/icon.ts", "../src/core/compose/features/variant.ts", "../src/core/compose/features/size.ts", "../src/core/compose/features/position.ts", "../src/core/compose/features/constants.ts", "../src/core/compose/features/ripple.ts", "../src/core/compose/features/input.ts", "../src/core/compose/features/checkable.ts", "../src/core/compose/features/style.ts", "../src/core/compose/utils/type-guards.ts", "../src/core/compose/features/textinput.ts", "../src/core/compose/features/textlabel.ts", "../src/core/compose/features/track.ts", "../src/core/state/events.ts", "../src/core/compose/features/withEvents.ts", "../src/core/utils/performance.ts", "../src/core/compose/features/throttle.ts", "../src/core/compose/features/debounce.ts", "../src/core/compose/features/disabled.ts", "../src/core/compose/features/lifecycle.ts", "../src/core/compose/features/index.ts", "../src/core/compose/index.ts", "../src/core/config/global.ts", "../src/core/config/component.ts", "../src/components/badge/constants.ts", "../src/components/badge/config.ts", "../src/components/badge/features.ts", "../src/components/badge/api.ts", "../src/components/badge/badge.ts", "../src/components/badge/index.ts", "../src/core/dom/events.ts", "../src/core/dom/index.ts", "../src/components/progress/constants.ts", "../src/core/utils/object.ts", "../src/core/utils/background.ts", "../src/core/utils/theme.ts", "../src/core/utils/color.ts", "../src/core/utils/index.ts", "../src/core/canvas/resize.ts", "../src/components/progress/features/circular.ts", "../src/components/progress/features/linear.ts", "../src/components/progress/features/canvas.ts", "../src/components/progress/features/state.ts", "../src/components/progress/api.ts", "../src/components/progress/config.ts", "../src/components/progress/progress.ts", "../src/components/button/features/progress.ts", "../src/core/state/store.ts", "../src/core/state/lifecycle.ts", "../src/core/state/disabled.ts", "../src/core/canvas/drawing.ts", "../src/core/canvas/animation.ts", "../src/core/canvas/utils.ts", "../src/core/canvas/index.ts", "../src/core/index.ts", "../src/components/button/api.ts", "../src/components/button/constants.ts", "../src/components/button/config.ts", "../src/components/button/button.ts", "../src/components/button/index.ts", "../src/components/index.ts", "../src/components/bottom-app-bar/bottom-app-bar.ts", "../src/components/bottom-app-bar/config.ts", "../src/components/bottom-app-bar/constants.ts", "../src/components/bottom-app-bar/index.ts", "../src/components/button-group/button-group.ts", "../src/components/button-group/config.ts", "../src/components/button-group/constants.ts", "../src/components/card/card.ts", "../src/components/card/api.ts", "../src/components/card/config.ts", "../src/components/card/content.ts", "../src/components/card/constants.ts", "../src/components/card/features.ts", "../src/components/carousel/carousel.ts", "../src/components/carousel/constants.ts", "../src/components/carousel/features/slides.ts", "../src/components/carousel/features/drag.ts", "../src/components/carousel/api.ts", "../src/components/carousel/config.ts", "../src/components/checkbox/checkbox.ts", "../src/components/checkbox/api.ts", "../src/components/checkbox/config.ts", "../src/components/chips/chip/chip.ts", "../src/components/chips/chip/api.ts", "../src/components/chips/chip/config.ts", "../src/components/chips/chips.ts", "../src/components/chips/features/container.ts", "../src/components/chips/features/chip-items.ts", "../src/components/chips/constants.ts", "../src/components/chips/features/controller.ts", "../src/components/chips/features/dom.ts", "../src/components/chips/api.ts", "../src/components/chips/config.ts", "../src/components/datepicker/datepicker.ts", "../src/components/datepicker/types.ts", "../src/components/datepicker/utils.ts", "../src/components/datepicker/api.ts", "../src/components/datepicker/config.ts", "../src/components/datepicker/render.ts", "../src/components/dialog/dialog.ts", "../src/components/dialog/config.ts", "../src/components/dialog/features.ts", "../src/components/divider/divider.ts", "../src/components/divider/config.ts", "../src/components/divider/features.ts", "../src/components/dialog/api.ts", "../src/components/drawer/drawer.ts", "../src/components/drawer/constants.ts", "../src/components/drawer/features/items.ts", "../src/components/drawer/features/state.ts", "../src/components/drawer/features/headline.ts", "../src/components/drawer/api.ts", "../src/components/drawer/config.ts", "../src/components/fab/fab.ts", "../src/components/fab/api.ts", "../src/components/fab/config.ts", "../src/components/extended-fab/extended-fab.ts", "../src/components/extended-fab/api.ts", "../src/components/extended-fab/config.ts", "../src/components/icon-button/icon-button.ts", "../src/components/icon-button/features/toggle.ts", "../src/components/icon-button/api.ts", "../src/components/icon-button/config.ts", "../src/components/icon-button/constants.ts", "../src/components/list/list.ts", "../src/components/list/constants.ts", "../src/components/list/features/renderer.ts", "../src/components/list/features/selection.ts", "../src/components/list/api.ts", "../src/components/list/config.ts", "../src/components/menu/menu.ts", "../src/components/menu/features/controller.ts", "../src/components/menu/features/opener.ts", "../src/components/menu/features/position.ts", "../src/components/menu/features/keyboard.ts", "../src/components/menu/features/submenu.ts", "../src/components/menu/api.ts", "../src/components/menu/config.ts", "../src/components/menu/constants.ts", "../src/components/progress/index.ts", "../src/components/radios/radios.ts", "../src/components/radios/radio.ts", "../src/components/radios/api.ts", "../src/components/radios/config.ts", "../src/components/search/search.ts", "../src/components/search/constants.ts", "../src/components/search/features/structure.ts", "../src/components/search/features/states.ts", "../src/components/search/features/input.ts", "../src/components/search/features/suggestions.ts", "../src/components/search/api.ts", "../src/components/search/config.ts", "../src/components/select/select.ts", "../src/components/textfield/textfield.ts", "../src/components/textfield/api.ts", "../src/components/textfield/features/leading-icon.ts", "../src/components/textfield/features/trailing-icon.ts", "../src/components/textfield/features/prefix-text.ts", "../src/components/textfield/features/suffix-text.ts", "../src/components/textfield/features/supporting-text.ts", "../src/components/textfield/features/placement.ts", "../src/components/textfield/features/density.ts", "../src/components/textfield/features/error.ts", "../src/components/textfield/config.ts", "../src/components/textfield/constants.ts", "../src/components/select/features.ts", "../src/components/select/api.ts", "../src/components/select/config.ts", "../src/components/select/constants.ts", "../src/components/segmented-button/segmented-button.ts", "../src/components/segmented-button/config.ts", "../src/components/segmented-button/constants.ts", "../src/components/segmented-button/segment.ts", "../src/components/sheet/sheet.ts", "../src/components/sheet/types.ts", "../src/components/sheet/features/position.ts", "../src/components/sheet/features/content.ts", "../src/components/sheet/features/title.ts", "../src/components/sheet/features/state.ts", "../src/components/sheet/features/gestures.ts", "../src/components/sheet/api.ts", "../src/components/sheet/config.ts", "../src/components/sheet/constants.ts", "../src/components/slider/slider.ts", "../src/components/slider/features/range.ts", "../src/components/slider/constants.ts", "../src/components/slider/features/states.ts", "../src/components/slider/features/handlers.ts", "../src/components/slider/features/controller.ts", "../src/components/slider/features/canvas.ts", "../src/components/slider/features/dom.ts", "../src/core/dom/utils.ts", "../src/components/slider/api.ts", "../src/components/slider/config.ts", "../src/components/snackbar/snackbar.ts", "../src/components/snackbar/features.ts", "../src/components/snackbar/constants.ts", "../src/components/snackbar/position.ts", "../src/components/snackbar/api.ts", "../src/components/snackbar/queue.ts", "../src/components/snackbar/config.ts", "../src/components/switch/switch.ts", "../src/components/switch/api.ts", "../src/components/switch/features.ts", "../src/components/switch/config.ts", "../src/components/tabs/tabs.ts", "../src/components/tabs/tab.ts", "../src/components/tabs/constants.ts", "../src/components/tabs/config.ts", "../src/components/tabs/api.ts", "../src/components/tabs/utils.ts", "../src/components/tabs/indicator.ts", "../src/components/tabs/features.ts", "../src/components/tabs/state.ts", "../src/components/tabs/index.ts", "../src/components/timepicker/timepicker.ts", "../src/components/timepicker/config.ts", "../src/components/timepicker/constants.ts", "../src/components/timepicker/utils.ts", "../src/components/timepicker/clockdial.ts", "../src/components/timepicker/render.ts", "../src/components/timepicker/api.ts", "../src/components/top-app-bar/top-app-bar.ts", "../src/components/top-app-bar/config.ts", "../src/components/top-app-bar/constants.ts", "../src/components/top-app-bar/index.ts", "../src/components/tooltip/tooltip.ts", "../src/components/tooltip/types.ts", "../src/components/tooltip/api.ts", "../src/components/tooltip/config.ts", "../src/components/tooltip/constants.ts", "../src/index.ts"],
|
|
4
4
|
"sourcesContent": [
|
|
5
5
|
"// src/core/compose/pipe.ts\n/**\n * @namespace compose\n * @description Core composition utilities for creating and combining components\n */\n\n/**\n * Performs left-to-right function composition.\n * Each function takes the return value of the previous function as its input.\n *\n * @memberof compose\n * @function pipe\n * @param {...Function} fns - Functions to compose\n * @returns {Function} Composed function that passes its argument through the pipeline\n *\n * @example\n * const addOne = x => x + 1;\n * const double = x => x * 2;\n * const addOneThenDouble = pipe(addOne, double);\n * console.log(addOneThenDouble(3)); // Output: 8\n */\nexport const pipe = <T>(...fns: Array<(arg: any) => any>) => \n (x: T): any => fns.reduce((v, f) => f(v), x);\n\n/**\n * Performs right-to-left function composition.\n * This is the mathematical composition order: (f ∘ g)(x) = f(g(x))\n *\n * @memberof compose\n * @function compose\n * @param {...Function} fns - Functions to compose\n * @returns {Function} Composed function following mathematical composition order\n *\n * @example\n * const addOne = x => x + 1;\n * const double = x => x * 2;\n * const doubleTheAddOne = compose(addOne, double);\n * console.log(doubleTheAddOne(3)); // Output: 7\n */\nexport const compose = <T>(...fns: Array<(arg: any) => any>) => \n (x: T): any => fns.reduceRight((v, f) => f(v), x);\n\n/**\n * Creates a function that applies transformations to an object with shared context.\n * Useful for applying multiple transformations while maintaining a shared state.\n *\n * @memberof compose\n * @function transform\n * @param {...Function} transformers - Functions that transform the object\n * @returns {Function} Function that applies all transformations with shared context\n *\n * @example\n * const withName = (obj, context) => ({ ...obj, name: context.name });\n * const withAge = (obj, context) => ({ ...obj, age: context.age });\n * const createPerson = transform(withName, withAge);\n *\n * const person = createPerson({}, { name: 'John', age: 30 });\n * // Result: { name: 'John', age: 30 }\n */\nexport const transform = <T, C = Record<string, any>>(\n ...transformers: Array<(obj: T, context: C) => Partial<T>>\n) => (obj: T, context: C = {} as C): T => \n transformers.reduce(\n (acc, transformer) => ({\n ...acc,\n ...transformer(acc, context)\n }), \n obj\n );\n\n/**\n * @typedef {Object} TransformContext\n * @property {any} [key] - Any contextual data needed by transformers\n */",
|
|
6
6
|
"// src/core/compose/base.ts\n\n/**\n * Configuration for component creation\n */\nexport interface ComponentConfig {\n [key: string]: any;\n}\n\n/**\n * Basic component interface\n */\nexport interface Component {\n /**\n * Component element\n */\n element: HTMLElement | null;\n \n /**\n * Component configuration\n */\n config: ComponentConfig;\n \n /**\n * Setup method\n * @returns Component for chaining\n */\n setup: () => Component;\n}\n\n/**\n * Creates a basic component with minimal structure\n * \n * @param config - Component configuration\n * @returns Basic component structure\n */\nexport const createComponent = (config: ComponentConfig = {}): Component => ({\n element: null,\n config,\n setup() {\n return this;\n }\n});",
|
|
7
7
|
"// src/core/dom/attributes.ts\n/**\n * @module core/dom\n * @description DOM attribute helpers\n */\n\n/**\n * Set attributes on an element with performance optimizations\n * Fast path for single attribute, efficient iteration for multiple\n *\n * @param {HTMLElement} element - Element to set attributes on\n * @param {Record<string, any>} attributes - Attributes to set\n * @returns {HTMLElement} The element for chaining\n */\nexport const setAttributes = (\n element: HTMLElement,\n attributes: Record<string, any> = {}\n): HTMLElement => {\n if (!attributes) return element;\n\n // Fast path: single attribute - avoid Object.keys overhead\n const keys = Object.keys(attributes);\n if (keys.length === 1) {\n const value = attributes[keys[0]];\n if (value != null) {\n element.setAttribute(keys[0], String(value));\n }\n return element;\n }\n\n // General case: multiple attributes - for...in is faster than Object.entries\n for (const key in attributes) {\n const value = attributes[key];\n if (value != null) {\n element.setAttribute(key, String(value));\n }\n }\n\n return element;\n};\n\n/**\n * Remove attributes from an element\n * Standard for loop is fastest for array iteration\n *\n * @param {HTMLElement} element - Element to remove attributes from\n * @param {string[]} attributes - Attributes to remove\n * @returns {HTMLElement} The element for chaining\n */\nexport const removeAttributes = (\n element: HTMLElement,\n attributes: string[] = []\n): HTMLElement => {\n // Standard for loop is fastest for array iteration\n for (let i = 0; i < attributes.length; i++) {\n element.removeAttribute(attributes[i]);\n }\n return element;\n};\n\n/**\n * Batch attribute operations for better performance when setting many attributes\n * Single pass through operations array for optimal performance\n *\n * @param {HTMLElement} element - Element to modify\n * @param {Array<{action: \"set\" | \"remove\", key: string, value?: any}>} operations - Array of attribute operations\n * @returns {HTMLElement} The element for chaining\n */\nexport const batchAttributes = (\n element: HTMLElement,\n operations: Array<{\n action: \"set\" | \"remove\";\n key: string;\n value?: any;\n }>\n): HTMLElement => {\n // Process all operations in a single pass for optimal performance\n for (let i = 0; i < operations.length; i++) {\n const op = operations[i];\n if (op.action === \"set\" && op.value != null) {\n element.setAttribute(op.key, String(op.value));\n } else if (op.action === \"remove\") {\n element.removeAttribute(op.key);\n }\n }\n return element;\n};\n\n/**\n * Check if element has attribute\n * @param element - Element to check\n * @param attribute - Attribute name to check\n * @returns True if element has the attribute\n */\nexport const hasAttribute = (\n element: HTMLElement,\n attribute: string\n): boolean => element.hasAttribute(attribute);\n\n/**\n * Get attribute value with default\n * @param element - Element to get attribute from\n * @param attribute - Attribute name\n * @param defaultValue - Default value if attribute doesn't exist\n * @returns Attribute value or default\n */\nexport const getAttribute = (\n element: HTMLElement,\n attribute: string,\n defaultValue: string = \"\"\n): string => element.getAttribute(attribute) ?? defaultValue;\n",
|
|
8
8
|
"// src/core/config.ts\n\n/**\n * Library prefix used for all components\n */\nexport const PREFIX = 'mtrl';\n\n/**\n * Gets a prefixed component class name\n * @param type - Component type\n * @returns Prefixed class name\n */\nexport const getComponentClass = (type: string): string => `${PREFIX}-${type}`;\n\n/**\n * Gets a BEM modifier class name\n * @param baseClass - Base class name\n * @param modifier - Modifier name\n * @returns Modifier class name\n */\nexport const getModifierClass = (baseClass: string, modifier: string): string => `${baseClass}--${modifier}`;\n\n/**\n * Gets a BEM element class name\n * @param baseClass - Base class name\n * @param element - Element name\n * @returns Element class name\n */\nexport const getElementClass = (baseClass: string, element: string): string => `${baseClass}-${element}`;\n\n/**\n * Component type identifiers\n */\nexport enum COMPONENTS {\n BUTTON = 'button',\n TEXTFIELD = 'textfield',\n CONTAINER = 'container',\n SNACKBAR = 'snackbar',\n SWITCH = 'switch'\n}\n\n/**\n * Theme configuration interface\n */\nexport interface ThemeConfig {\n /**\n * Theme name\n */\n name: string;\n \n /**\n * Theme CSS variables\n */\n variables: Record<string, string>;\n \n /**\n * Theme variants\n */\n variants: Record<string, any>;\n}\n\n/**\n * Component configuration interface\n */\nexport interface ComponentConfig {\n prefix: string;\n type: string;\n baseClass: string;\n getClass: () => string;\n getModifierClass: (modifier: string) => string;\n getElementClass: (element: string) => string;\n withTheme: (theme: string) => ThemedComponentConfig;\n withVariants: (...variants: string[]) => VariantComponentConfig;\n withStates: (...states: string[]) => StateComponentConfig;\n}\n\n/**\n * Themed component configuration interface\n */\nexport interface ThemedComponentConfig extends ComponentConfig {\n theme: string;\n getThemeClass: (variant: string) => string;\n getCssVariables: () => Record<string, string>;\n}\n\n/**\n * Variant component configuration interface\n */\nexport interface VariantComponentConfig extends ComponentConfig {\n variants: string[];\n hasVariant: (variant: string) => boolean;\n getVariantClass: (variant: string) => string | null;\n}\n\n/**\n * State component configuration interface\n */\nexport interface StateComponentConfig extends ComponentConfig {\n states: string[];\n getStateClass: (state: string) => string | null;\n}\n\n/**\n * Creates a component configuration object\n * @param type - Component type\n * @returns Component configuration interface\n */\nexport const createComponentConfig = (type: string): ComponentConfig => {\n const baseClass = `${PREFIX}-${type}`;\n\n // Create the base config object\n const config: ComponentConfig = {\n prefix: PREFIX,\n type,\n baseClass,\n\n // Class name generators\n getClass: () => baseClass,\n getModifierClass: (modifier) => `${baseClass}--${modifier}`,\n getElementClass: (element) => `${baseClass}-${element}`,\n\n // Theme support\n withTheme: (theme) => ({\n ...config,\n theme,\n getThemeClass: (variant) => `${baseClass}--theme-${theme}-${variant}`,\n getCssVariables: () => ({}) // Empty implementation as placeholder\n }),\n\n // Variant support\n withVariants: (...variants) => ({\n ...config,\n variants,\n hasVariant: (variant) => variants.includes(variant),\n getVariantClass: (variant) =>\n variants.includes(variant) ? `${baseClass}--${variant}` : null\n }),\n\n // State support\n withStates: (...states) => ({\n ...config,\n states,\n getStateClass: (state) =>\n states.includes(state) ? `${baseClass}--state-${state}` : null\n })\n };\n\n return config;\n};\n\n/**\n * Common component states\n */\nexport enum STATES {\n DISABLED = 'disabled',\n FOCUSED = 'focused',\n ACTIVE = 'active',\n LOADING = 'loading',\n ERROR = 'error'\n}\n\n/**\n * CSS class generation utilities\n */\nexport const classNames = {\n /**\n * Creates a BEM-style class name\n * @param block - Block name\n * @param element - Element name\n * @param modifier - Modifier name\n * @returns BEM class name\n */\n bem: (block: string, element?: string, modifier?: string): string => {\n let className = block;\n if (element) className += `-${element}`;\n if (modifier) className += `--${modifier}`;\n return className;\n },\n\n /**\n * Joins class names, filtering out falsy values\n * @param classes - Class names to join\n * @returns Joined class names\n */\n join: (...classes: (string | undefined | null | false)[]): string => \n classes.filter(Boolean).join(' ')\n};\n\n/**\n * Creates a themed component configuration\n * @param type - Component type\n * @param theme - Theme configuration\n * @returns Themed component configuration\n */\nexport const createThemedComponent = (type: string, theme: ThemeConfig): ThemedComponentConfig => {\n const config = createComponentConfig(type);\n\n return {\n ...config,\n theme: theme.name,\n\n // Theme-specific class generators\n getThemeClass: (variant) =>\n `${config.getClass()}--theme-${theme.name}${variant ? `-${variant}` : ''}`,\n\n // Theme CSS variables\n getCssVariables: () =>\n Object.entries(theme.variables).reduce((acc, [key, value]) => ({\n ...acc,\n [`--${PREFIX}-${type}-${key}`]: value\n }), {} as Record<string, string>)\n };\n};",
|
|
9
|
-
"// src/core/dom/classes.ts\n/**\n * @module core/dom\n * @description DOM manipulation utilities optimized for performance\n */\n\nimport { PREFIX } from \"../config\";\n\n// Constant for prefix with dash for better performance\nconst PREFIX_WITH_DASH = `${PREFIX}-`;\n\n// Cache for frequently used class combinations to avoid repeated processing\nconst classCache = new Map<string, string[]>();\nconst MAX_CACHE_SIZE = 500;\n\n/**\n * Normalize classes to array of unique strings with optimization and caching\n * - String with space-separated classes\n * - Array of strings\n * - Mixed array of strings and space-separated classes\n *\n * @param {...(string | string[])} classes - Classes to normalize\n * @returns {string[]} Array of unique, non-empty class names\n */\nexport const normalizeClasses = (\n ...classes: (string | string[])[]\n): string[] => {\n // Fast path 1: Empty input\n if (classes.length === 0) return [];\n\n // Fast path 2: Single string without spaces - most common case\n if (classes.length === 1 && typeof classes[0] === \"string\") {\n const input = classes[0];\n if (!input) return [];\n if (!input.includes(\" \")) return [input];\n\n // Check cache for single string with spaces\n if (classCache.has(input)) {\n return classCache.get(input)!;\n }\n }\n\n // Optimized processing - single pass with minimal allocations\n const seen = new Set<string>();\n const result: string[] = [];\n\n for (const cls of classes) {\n if (typeof cls === \"string\" && cls) {\n // Fast path for single class\n if (!cls.includes(\" \")) {\n if (!seen.has(cls)) {\n seen.add(cls);\n result.push(cls);\n }\n } else {\n // Split space-separated classes efficiently\n cls.split(\" \").forEach((c) => {\n const trimmed = c.trim();\n if (trimmed && !seen.has(trimmed)) {\n seen.add(trimmed);\n result.push(trimmed);\n }\n });\n }\n } else if (Array.isArray(cls)) {\n // Process array of classes\n cls.forEach((c) => {\n if (typeof c === \"string\" && c && !seen.has(c)) {\n seen.add(c);\n result.push(c);\n }\n });\n }\n }\n\n // Cache result for single string inputs to avoid repeated processing\n if (\n classes.length === 1 &&\n typeof classes[0] === \"string\" &&\n result.length <= 10\n ) {\n if (classCache.size < MAX_CACHE_SIZE) {\n classCache.set(classes[0], result);\n }\n }\n\n return result;\n};\n\n/**\n * Add prefixed classes to element with optimizations\n * Automatically adds prefix to classes that don't already have it\n * Optimized for minimal DOM interactions and single-class scenarios\n *\n * @param {HTMLElement} element - Target element\n * @param {...(string | string[])} classes - Classes to add\n * @returns {HTMLElement} Modified element for chaining\n */\nexport const addClass = (\n element: HTMLElement,\n ...classes: (string | string[])[]\n): HTMLElement => {\n // Fast path 1: Empty classes\n if (classes.length === 0) return element;\n\n // Handle the case where an array is passed directly (not spread)\n // This happens when addClass(element, [\"class1\", \"class2\"]) is called\n if (classes.length === 1 && Array.isArray(classes[0])) {\n return addClass(element, ...classes[0]);\n }\n\n // Fast path 2: Single string class - most common case\n if (classes.length === 1 && typeof classes[0] === \"string\") {\n const cls = classes[0];\n if (cls && !cls.includes(\" \")) {\n const prefixed = cls.startsWith(PREFIX_WITH_DASH)\n ? cls\n : PREFIX_WITH_DASH + cls;\n // Safety check: ensure no spaces were introduced by prefixing\n if (!prefixed.includes(\" \")) {\n element.classList.add(prefixed);\n return element;\n }\n }\n }\n\n // Full processing for complex cases\n const normalized = normalizeClasses(...classes);\n for (const cls of normalized) {\n const prefixed = cls.startsWith(PREFIX_WITH_DASH)\n ? cls\n : PREFIX_WITH_DASH + cls;\n\n // Safety check: ensure no spaces in class token (prevents DOMTokenList errors)\n if (prefixed.includes(\" \")) {\n // Split further if needed (shouldn't happen if normalizeClasses works correctly)\n prefixed.split(\" \").forEach((c) => {\n const trimmed = c.trim();\n if (trimmed) element.classList.add(trimmed);\n });\n } else {\n element.classList.add(prefixed);\n }\n }\n\n return element;\n};\n\n/**\n * Remove prefixed classes from element with optimizations\n * Handles exact class names as specified with automatic prefixing\n * Optimized for single-class scenarios and batch operations\n *\n * @param {HTMLElement} element - Target element\n * @param {...(string | string[])} classes - Classes to remove\n * @returns {HTMLElement} Modified element for chaining\n */\nexport const removeClass = (\n element: HTMLElement,\n ...classes: (string | string[])[]\n): HTMLElement => {\n // Fast path 1: Empty classes\n if (classes.length === 0) return element;\n\n // Handle the case where an array is passed directly (not spread)\n if (classes.length === 1 && Array.isArray(classes[0])) {\n return removeClass(element, ...classes[0]);\n }\n\n // Fast path 2: Single string class - most common case\n if (classes.length === 1 && typeof classes[0] === \"string\") {\n const cls = classes[0];\n if (cls && !cls.includes(\" \")) {\n const prefixed = cls.startsWith(PREFIX_WITH_DASH)\n ? cls\n : PREFIX_WITH_DASH + cls;\n // Safety check: ensure no spaces were introduced by prefixing\n if (!prefixed.includes(\" \")) {\n element.classList.remove(prefixed);\n return element;\n }\n }\n }\n\n // Full processing for complex cases\n const normalized = normalizeClasses(...classes);\n for (const cls of normalized) {\n const prefixed = cls.startsWith(PREFIX_WITH_DASH)\n ? cls\n : PREFIX_WITH_DASH + cls;\n\n // Safety check: ensure no spaces in class token\n if (prefixed.includes(\" \")) {\n prefixed.split(\" \").forEach((c) => {\n const trimmed = c.trim();\n if (trimmed) element.classList.remove(trimmed);\n });\n } else {\n element.classList.remove(prefixed);\n }\n }\n\n return element;\n};\n\n/**\n * Toggle prefixed classes on element with optimizations\n * Automatically adds prefix to classes that don't already have it\n * Optimized for single-class scenarios\n *\n * @param {HTMLElement} element - Target element\n * @param {...(string | string[])} classes - Classes to toggle\n * @returns {HTMLElement} Modified element for chaining\n */\nexport const toggleClass = (\n element: HTMLElement,\n ...classes: (string | string[])[]\n): HTMLElement => {\n // Handle the case where an array is passed directly (not spread)\n if (classes.length === 1 && Array.isArray(classes[0])) {\n return toggleClass(element, ...classes[0]);\n }\n\n // Fast path: Single string class - most common case\n if (classes.length === 1 && typeof classes[0] === \"string\") {\n const cls = classes[0];\n if (cls && !cls.includes(\" \")) {\n const prefixed = cls.startsWith(PREFIX_WITH_DASH)\n ? cls\n : PREFIX_WITH_DASH + cls;\n // Safety check: ensure no spaces were introduced by prefixing\n if (!prefixed.includes(\" \")) {\n element.classList.toggle(prefixed);\n return element;\n }\n }\n }\n\n // Full processing for complex cases\n const normalized = normalizeClasses(...classes);\n for (const cls of normalized) {\n const prefixed = cls.startsWith(PREFIX_WITH_DASH)\n ? cls\n : PREFIX_WITH_DASH + cls;\n\n // Safety check: ensure no spaces in class token\n if (prefixed.includes(\" \")) {\n prefixed.split(\" \").forEach((c) => {\n const trimmed = c.trim();\n if (trimmed) element.classList.toggle(trimmed);\n });\n } else {\n element.classList.toggle(prefixed);\n }\n }\n\n return element;\n};\n\n/**\n * Check if element has all specified prefixed classes with optimizations\n * Automatically adds prefix to classes that don't already have it\n * Returns true only if ALL specified classes are present\n *\n * @param {HTMLElement} element - Target element\n * @param {...(string | string[])} classes - Classes to check\n * @returns {boolean} True if element has all specified classes\n */\nexport const hasClass = (\n element: HTMLElement,\n ...classes: (string | string[])[]\n): boolean => {\n // Fast path: Empty classes - vacuously true\n if (classes.length === 0) return true;\n\n // Handle the case where an array is passed directly (not spread)\n if (classes.length === 1 && Array.isArray(classes[0])) {\n return hasClass(element, ...classes[0]);\n }\n\n // Fast path: Single string class - most common case\n if (classes.length === 1 && typeof classes[0] === \"string\") {\n const cls = classes[0];\n if (cls && !cls.includes(\" \")) {\n const prefixed = cls.startsWith(PREFIX_WITH_DASH)\n ? cls\n : PREFIX_WITH_DASH + cls;\n // Safety check: ensure no spaces were introduced by prefixing\n if (!prefixed.includes(\" \")) {\n return element.classList.contains(prefixed);\n }\n }\n }\n\n // Full processing for complex cases\n const normalized = normalizeClasses(...classes);\n for (const cls of normalized) {\n const prefixed = cls.startsWith(PREFIX_WITH_DASH)\n ? cls\n : PREFIX_WITH_DASH + cls;\n\n // Safety check: ensure no spaces in class token\n if (prefixed.includes(\" \")) {\n // For hasClass, all space-separated tokens must exist\n const tokens = prefixed\n .split(\" \")\n .map((c) => c.trim())\n .filter(Boolean);\n for (const token of tokens) {\n if (!element.classList.contains(token)) {\n return false;\n }\n }\n } else {\n if (!element.classList.contains(prefixed)) {\n return false;\n }\n }\n }\n\n return true;\n};\n",
|
|
9
|
+
"// src/core/dom/classes.ts\n/**\n * @module core/dom\n * @description DOM manipulation utilities optimized for performance\n */\n\nimport { PREFIX } from \"../config\";\n\n// Constant for prefix with dash for better performance\nconst PREFIX_WITH_DASH = `${PREFIX}-`;\n\n// Cache for frequently used class combinations to avoid repeated processing\nconst classCache = new Map<string, string[]>();\nconst MAX_CACHE_SIZE = 500;\n\n/**\n * Normalize classes to array of unique strings with optimization and caching\n * - String with space-separated classes\n * - Array of strings\n * - Mixed array of strings and space-separated classes\n *\n * @param {...(string | string[])} classes - Classes to normalize\n * @returns {string[]} Array of unique, non-empty class names\n */\nexport const normalizeClasses = (\n ...classes: (string | string[])[]\n): string[] => {\n // Fast path 1: Empty input\n if (classes.length === 0) return [];\n\n // Fast path 2: Single string without spaces - most common case\n if (classes.length === 1 && typeof classes[0] === \"string\") {\n const input = classes[0];\n if (!input) return [];\n if (!input.includes(\" \")) return [input];\n\n // Check cache for single string with spaces\n if (classCache.has(input)) {\n return classCache.get(input)!;\n }\n }\n\n // Optimized processing - single pass with minimal allocations\n const seen = new Set<string>();\n const result: string[] = [];\n\n for (const cls of classes) {\n if (typeof cls === \"string\" && cls) {\n // Fast path for single class\n if (!cls.includes(\" \")) {\n if (!seen.has(cls)) {\n seen.add(cls);\n result.push(cls);\n }\n } else {\n // Split space-separated classes efficiently\n cls.split(\" \").forEach((c) => {\n const trimmed = c.trim();\n if (trimmed && !seen.has(trimmed)) {\n seen.add(trimmed);\n result.push(trimmed);\n }\n });\n }\n } else if (Array.isArray(cls)) {\n // Process array of classes\n cls.forEach((c) => {\n if (typeof c === \"string\" && c) {\n // Split space-separated classes, same as top-level strings\n c.split(\" \").forEach((part) => {\n const trimmed = part.trim();\n if (trimmed && !seen.has(trimmed)) {\n seen.add(trimmed);\n result.push(trimmed);\n }\n });\n }\n });\n }\n }\n\n // Cache result for single string inputs to avoid repeated processing\n if (\n classes.length === 1 &&\n typeof classes[0] === \"string\" &&\n result.length <= 10\n ) {\n if (classCache.size < MAX_CACHE_SIZE) {\n classCache.set(classes[0], result);\n }\n }\n\n return result;\n};\n\n/**\n * Add prefixed classes to element with optimizations\n * Automatically adds prefix to classes that don't already have it\n * Optimized for minimal DOM interactions and single-class scenarios\n *\n * @param {HTMLElement} element - Target element\n * @param {...(string | string[])} classes - Classes to add\n * @returns {HTMLElement} Modified element for chaining\n */\nexport const addClass = (\n element: HTMLElement,\n ...classes: (string | string[])[]\n): HTMLElement => {\n // Fast path 1: Empty classes\n if (classes.length === 0) return element;\n\n // Handle the case where an array is passed directly (not spread)\n // This happens when addClass(element, [\"class1\", \"class2\"]) is called\n if (classes.length === 1 && Array.isArray(classes[0])) {\n return addClass(element, ...classes[0]);\n }\n\n // Fast path 2: Single string class - most common case\n if (classes.length === 1 && typeof classes[0] === \"string\") {\n const cls = classes[0];\n if (cls && !cls.includes(\" \")) {\n const prefixed = cls.startsWith(PREFIX_WITH_DASH)\n ? cls\n : PREFIX_WITH_DASH + cls;\n // Safety check: ensure no spaces were introduced by prefixing\n if (!prefixed.includes(\" \")) {\n element.classList.add(prefixed);\n return element;\n }\n }\n }\n\n // Full processing for complex cases\n const normalized = normalizeClasses(...classes);\n for (const cls of normalized) {\n const prefixed = cls.startsWith(PREFIX_WITH_DASH)\n ? cls\n : PREFIX_WITH_DASH + cls;\n\n // Safety check: ensure no spaces in class token (prevents DOMTokenList errors)\n if (prefixed.includes(\" \")) {\n // Split further if needed (shouldn't happen if normalizeClasses works correctly)\n prefixed.split(\" \").forEach((c) => {\n const trimmed = c.trim();\n if (trimmed) element.classList.add(trimmed);\n });\n } else {\n element.classList.add(prefixed);\n }\n }\n\n return element;\n};\n\n/**\n * Remove prefixed classes from element with optimizations\n * Handles exact class names as specified with automatic prefixing\n * Optimized for single-class scenarios and batch operations\n *\n * @param {HTMLElement} element - Target element\n * @param {...(string | string[])} classes - Classes to remove\n * @returns {HTMLElement} Modified element for chaining\n */\nexport const removeClass = (\n element: HTMLElement,\n ...classes: (string | string[])[]\n): HTMLElement => {\n // Fast path 1: Empty classes\n if (classes.length === 0) return element;\n\n // Handle the case where an array is passed directly (not spread)\n if (classes.length === 1 && Array.isArray(classes[0])) {\n return removeClass(element, ...classes[0]);\n }\n\n // Fast path 2: Single string class - most common case\n if (classes.length === 1 && typeof classes[0] === \"string\") {\n const cls = classes[0];\n if (cls && !cls.includes(\" \")) {\n const prefixed = cls.startsWith(PREFIX_WITH_DASH)\n ? cls\n : PREFIX_WITH_DASH + cls;\n // Safety check: ensure no spaces were introduced by prefixing\n if (!prefixed.includes(\" \")) {\n element.classList.remove(prefixed);\n return element;\n }\n }\n }\n\n // Full processing for complex cases\n const normalized = normalizeClasses(...classes);\n for (const cls of normalized) {\n const prefixed = cls.startsWith(PREFIX_WITH_DASH)\n ? cls\n : PREFIX_WITH_DASH + cls;\n\n // Safety check: ensure no spaces in class token\n if (prefixed.includes(\" \")) {\n prefixed.split(\" \").forEach((c) => {\n const trimmed = c.trim();\n if (trimmed) element.classList.remove(trimmed);\n });\n } else {\n element.classList.remove(prefixed);\n }\n }\n\n return element;\n};\n\n/**\n * Toggle prefixed classes on element with optimizations\n * Automatically adds prefix to classes that don't already have it\n * Optimized for single-class scenarios\n *\n * @param {HTMLElement} element - Target element\n * @param {...(string | string[])} classes - Classes to toggle\n * @returns {HTMLElement} Modified element for chaining\n */\nexport const toggleClass = (\n element: HTMLElement,\n ...classes: (string | string[])[]\n): HTMLElement => {\n // Handle the case where an array is passed directly (not spread)\n if (classes.length === 1 && Array.isArray(classes[0])) {\n return toggleClass(element, ...classes[0]);\n }\n\n // Fast path: Single string class - most common case\n if (classes.length === 1 && typeof classes[0] === \"string\") {\n const cls = classes[0];\n if (cls && !cls.includes(\" \")) {\n const prefixed = cls.startsWith(PREFIX_WITH_DASH)\n ? cls\n : PREFIX_WITH_DASH + cls;\n // Safety check: ensure no spaces were introduced by prefixing\n if (!prefixed.includes(\" \")) {\n element.classList.toggle(prefixed);\n return element;\n }\n }\n }\n\n // Full processing for complex cases\n const normalized = normalizeClasses(...classes);\n for (const cls of normalized) {\n const prefixed = cls.startsWith(PREFIX_WITH_DASH)\n ? cls\n : PREFIX_WITH_DASH + cls;\n\n // Safety check: ensure no spaces in class token\n if (prefixed.includes(\" \")) {\n prefixed.split(\" \").forEach((c) => {\n const trimmed = c.trim();\n if (trimmed) element.classList.toggle(trimmed);\n });\n } else {\n element.classList.toggle(prefixed);\n }\n }\n\n return element;\n};\n\n/**\n * Check if element has all specified prefixed classes with optimizations\n * Automatically adds prefix to classes that don't already have it\n * Returns true only if ALL specified classes are present\n *\n * @param {HTMLElement} element - Target element\n * @param {...(string | string[])} classes - Classes to check\n * @returns {boolean} True if element has all specified classes\n */\nexport const hasClass = (\n element: HTMLElement,\n ...classes: (string | string[])[]\n): boolean => {\n // Fast path: Empty classes - vacuously true\n if (classes.length === 0) return true;\n\n // Handle the case where an array is passed directly (not spread)\n if (classes.length === 1 && Array.isArray(classes[0])) {\n return hasClass(element, ...classes[0]);\n }\n\n // Fast path: Single string class - most common case\n if (classes.length === 1 && typeof classes[0] === \"string\") {\n const cls = classes[0];\n if (cls && !cls.includes(\" \")) {\n const prefixed = cls.startsWith(PREFIX_WITH_DASH)\n ? cls\n : PREFIX_WITH_DASH + cls;\n // Safety check: ensure no spaces were introduced by prefixing\n if (!prefixed.includes(\" \")) {\n return element.classList.contains(prefixed);\n }\n }\n }\n\n // Full processing for complex cases\n const normalized = normalizeClasses(...classes);\n for (const cls of normalized) {\n const prefixed = cls.startsWith(PREFIX_WITH_DASH)\n ? cls\n : PREFIX_WITH_DASH + cls;\n\n // Safety check: ensure no spaces in class token\n if (prefixed.includes(\" \")) {\n // For hasClass, all space-separated tokens must exist\n const tokens = prefixed\n .split(\" \")\n .map((c) => c.trim())\n .filter(Boolean);\n for (const token of tokens) {\n if (!element.classList.contains(token)) {\n return false;\n }\n }\n } else {\n if (!element.classList.contains(prefixed)) {\n return false;\n }\n }\n }\n\n return true;\n};\n",
|
|
10
10
|
"// src/core/dom/create.ts\n/**\n * @module core/dom\n * @description DOM manipulation utilities\n */\n\nimport { setAttributes } from \"./attributes\";\nimport { addClass } from \"./classes\";\n\n/**\n * Event handler function type\n */\nexport type EventHandler = (event: Event) => void;\n\n/**\n * Event condition type\n */\nexport type EventCondition =\n | boolean\n | ((context: any, event: Event) => boolean);\n\n/**\n * Element type that can be either HTMLElement or SVGElement\n */\nexport type DOMElement = HTMLElement | SVGElement;\n\n/**\n * Options for element creation with comprehensive configuration\n */\nexport interface CreateElementOptions {\n /** HTML tag name */\n tag?: string;\n /** Container to append element to */\n container?: HTMLElement | null;\n /** Inner HTML content */\n html?: string;\n /** Text content */\n text?: string;\n // Common HTML attributes\n /** Element ID */\n id?: string;\n /** Form element name */\n name?: string;\n /** Element title (native browser tooltip on hover) */\n title?: string;\n /** Keyboard navigation order (-1 to remove from tab order, 0+ for custom order) */\n tabIndex?: number;\n /** Inline styles (string or object) */\n style?: string | Partial<CSSStyleDeclaration>;\n // Data attributes\n /** Dataset attributes (e.g., { name: 'value' } → data-name=\"value\") */\n data?: Record<string, string>;\n // ARIA attributes for accessibility\n /** ARIA role (e.g., 'button', 'menuitem', 'dialog') */\n role?: string;\n /** Accessible label for screen readers */\n ariaLabel?: string;\n /** ID of element that describes this element */\n ariaDescribedBy?: string;\n /** ID of element that labels this element */\n ariaLabelledBy?: string;\n /** Hide from screen readers */\n ariaHidden?: boolean;\n /** CSS classes (will be automatically prefixed with 'mtrl-') - alias for className */\n class?: string | string[];\n /** CSS classes (will be automatically prefixed with 'mtrl-') - alias for class */\n className?: string | string[];\n /** CSS classes that will NOT be prefixed - added as-is to the element */\n rawClass?: string | string[];\n /** HTML attributes */\n attributes?: Record<string, any>;\n /** Events to forward when component has emit method */\n forwardEvents?: Record<string, EventCondition>;\n /** Callback after element creation */\n onCreate?: (element: HTMLElement, context?: any) => void;\n /** Component context */\n context?: any;\n /** Additional attributes via spread */\n [key: string]: any;\n}\n\n/**\n * Options for SVG element creation\n */\nexport interface CreateSVGElementOptions\n extends Omit<CreateElementOptions, \"container\" | \"onCreate\"> {\n container?: DOMElement | null;\n onCreate?: (element: SVGElement, context?: any) => void;\n}\n\n/**\n * Event handler storage\n */\nexport interface EventHandlerStorage {\n [eventName: string]: EventHandler;\n}\n\n/**\n * SVG element tags\n */\nconst SVG_TAGS = [\n \"svg\",\n \"circle\",\n \"ellipse\",\n \"line\",\n \"path\",\n \"polygon\",\n \"polyline\",\n \"rect\",\n \"g\",\n \"text\",\n \"tspan\",\n \"textPath\",\n \"defs\",\n \"clipPath\",\n \"mask\",\n \"pattern\",\n \"marker\",\n \"linearGradient\",\n \"radialGradient\",\n \"stop\",\n \"use\",\n \"foreignObject\",\n];\n\n/**\n * Touch events that should use passive listeners for better scroll performance\n */\nconst PASSIVE_TOUCH_EVENTS = new Set([\"touchstart\", \"touchmove\"]);\n\n/**\n * Set up event forwarding for an element\n */\nconst setupEventForwarding = (\n element: HTMLElement | SVGElement,\n forwardEvents: Record<string, EventCondition>,\n context: any,\n): void => {\n if (!forwardEvents || (!context?.emit && !context?.on)) return;\n\n (element as any).__eventHandlers = {};\n\n for (const nativeEvent in forwardEvents) {\n const eventConfig = forwardEvents[nativeEvent];\n const handler = (event: Event) => {\n let shouldForward = true;\n\n if (typeof eventConfig === \"function\") {\n try {\n shouldForward = eventConfig({ ...context, element }, event);\n } catch (error) {\n console.warn(`Error in event condition for ${nativeEvent}:`, error);\n shouldForward = false;\n }\n } else {\n shouldForward = Boolean(eventConfig);\n }\n\n if (shouldForward && context.emit) {\n context.emit(nativeEvent, { event, element, originalEvent: event });\n }\n };\n\n (element as any).__eventHandlers[nativeEvent] = handler;\n\n // Use passive listeners for touch events to avoid scroll-blocking warnings\n const options = PASSIVE_TOUCH_EVENTS.has(nativeEvent)\n ? { passive: true }\n : undefined;\n element.addEventListener(nativeEvent, handler, options);\n }\n};\n\n/**\n * Element pool for reusing elements\n */\nclass ElementPool {\n private pools = new Map<string, HTMLElement[]>();\n private maxSize = 20;\n\n acquire(tag: string = \"div\"): HTMLElement {\n const pool = this.pools.get(tag);\n if (pool?.length) {\n const element = pool.pop()!;\n element.className = \"\";\n element.innerHTML = \"\";\n element.removeAttribute(\"id\");\n Object.keys(element.dataset).forEach(\n (key) => delete element.dataset[key],\n );\n return element;\n }\n return document.createElement(tag);\n }\n\n release(element: HTMLElement): void {\n const tag = element.tagName.toLowerCase();\n let pool = this.pools.get(tag);\n\n if (!pool) {\n pool = [];\n this.pools.set(tag, pool);\n }\n\n if (pool.length < this.maxSize) {\n this.cleanElement(element);\n pool.push(element);\n }\n }\n\n private cleanElement(element: HTMLElement): void {\n const handlers = (element as any).__eventHandlers;\n if (handlers) {\n for (const event in handlers) {\n element.removeEventListener(event, handlers[event]);\n }\n delete (element as any).__eventHandlers;\n }\n\n element.className = \"\";\n element.innerHTML = \"\";\n element.removeAttribute(\"id\");\n Object.keys(element.dataset).forEach((key) => delete element.dataset[key]);\n element.parentNode?.removeChild(element);\n }\n}\n\nconst elementPool = new ElementPool();\n\n/**\n * Create an HTML element with comprehensive options and optimizations\n * Fast paths for common scenarios, full feature support for complex cases\n *\n * @param {CreateElementOptions} options - Element creation options\n * @returns {HTMLElement} Created HTML element\n */\nexport const createElement = (\n options: CreateElementOptions = {},\n): HTMLElement => {\n // Fast path 1: Empty options - return basic div\n if (!options || Object.keys(options).length === 0) {\n return document.createElement(\"div\");\n }\n\n // Fast path 2: String tag only (legacy support)\n if (typeof options === \"string\") {\n return document.createElement(options);\n }\n\n // Create base element\n const element = document.createElement(options.tag || \"div\");\n\n // Apply basic properties first for optimal performance\n if (options.html) element.innerHTML = options.html;\n else if (options.text) element.textContent = options.text;\n\n // Common HTML attributes\n if (options.id) element.id = options.id;\n if (options.name) element.setAttribute(\"name\", options.name);\n if (options.title) element.title = options.title;\n if (options.tabIndex !== undefined) element.tabIndex = options.tabIndex;\n\n // Inline styles (string or object)\n if (options.style) {\n if (typeof options.style === \"string\") {\n element.setAttribute(\"style\", options.style);\n } else {\n Object.assign(element.style, options.style);\n }\n }\n\n // ARIA attributes\n if (options.role) element.setAttribute(\"role\", options.role);\n if (options.ariaLabel) element.setAttribute(\"aria-label\", options.ariaLabel);\n if (options.ariaDescribedBy)\n element.setAttribute(\"aria-describedby\", options.ariaDescribedBy);\n if (options.ariaLabelledBy)\n element.setAttribute(\"aria-labelledby\", options.ariaLabelledBy);\n if (options.ariaHidden !== undefined)\n element.setAttribute(\"aria-hidden\", String(options.ariaHidden));\n\n // Apply classes with automatic prefixing and raw classes\n const classSource = options.className || options.class;\n if (classSource) addClass(element, classSource);\n if (options.rawClass) {\n const classes = Array.isArray(options.rawClass)\n ? options.rawClass\n : options.rawClass.split(\" \");\n element.classList.add(...classes.filter(Boolean));\n }\n\n // Apply data attributes efficiently using Object.assign\n if (options.data) {\n Object.assign(element.dataset, options.data);\n }\n\n // Apply structured attributes\n if (options.attributes) {\n setAttributes(element, options.attributes);\n }\n\n // Apply other attributes from options spread (rest parameters)\n for (const key in options) {\n if (\n ![\n \"tag\",\n \"container\",\n \"html\",\n \"text\",\n \"id\",\n \"name\",\n \"title\",\n \"tabIndex\",\n \"style\",\n \"role\",\n \"ariaLabel\",\n \"ariaDescribedBy\",\n \"ariaLabelledBy\",\n \"ariaHidden\",\n \"data\",\n \"class\",\n \"className\",\n \"rawClass\",\n \"attributes\",\n \"forwardEvents\",\n \"onCreate\",\n \"context\",\n ].includes(key)\n ) {\n const value = options[key];\n if (value != null) {\n element.setAttribute(key, String(value));\n }\n }\n }\n\n // Set up event forwarding if configured\n if (options.forwardEvents) {\n setupEventForwarding(element, options.forwardEvents, options.context);\n }\n\n // Finalize: append to container and call onCreate callback\n if (options.container) options.container.appendChild(element);\n if (options.onCreate) options.onCreate(element, options.context);\n\n return element;\n};\n\n/**\n * Create a pooled HTML element\n * @param options - Element creation options\n * @returns Created HTML element from pool\n */\nexport const createElementPooled = (\n options: CreateElementOptions = {},\n): HTMLElement => {\n const element = elementPool.acquire(options.tag || \"div\");\n\n // Apply properties similar to createElement but skip creating new element\n if (options.html) element.innerHTML = options.html;\n else if (options.text) element.textContent = options.text;\n if (options.id) element.id = options.id;\n\n const classSource = options.className || options.class;\n if (classSource) addClass(element, classSource);\n\n if (options.data) Object.assign(element.dataset, options.data);\n if (options.attributes) setAttributes(element, options.attributes);\n if (options.forwardEvents)\n setupEventForwarding(element, options.forwardEvents, options.context);\n if (options.container) options.container.appendChild(element);\n if (options.onCreate) options.onCreate(element, options.context);\n\n return element;\n};\n\n/**\n * Release an element back to the pool\n * @param element - Element to release\n */\nexport const releaseElement = (element: HTMLElement): void => {\n elementPool.release(element);\n};\n\n/**\n * Create an SVG element\n * @param options - SVG element creation options\n * @returns Created SVG element\n */\nexport const createSVGElement = (\n options: CreateSVGElementOptions = {},\n): SVGElement => {\n const element = document.createElementNS(\n \"http://www.w3.org/2000/svg\",\n options.tag || \"svg\",\n ) as SVGElement;\n\n if (options.text) element.textContent = options.text;\n if (options.id) element.id = options.id;\n if (options.attributes) setAttributes(element as any, options.attributes);\n if (options.forwardEvents)\n setupEventForwarding(element, options.forwardEvents, options.context);\n if (options.container) options.container.appendChild(element);\n if (options.onCreate) options.onCreate(element, options.context);\n\n return element;\n};\n\n/**\n * Remove event handlers from an element\n * @param element - Element to clean up\n */\nexport const removeEventHandlers = (\n element: HTMLElement | SVGElement,\n): void => {\n const handlers = (element as any).__eventHandlers;\n if (handlers) {\n for (const event in handlers) {\n element.removeEventListener(event, handlers[event]);\n }\n delete (element as any).__eventHandlers;\n }\n};\n\n// Type augmentation for event handler storage\ndeclare global {\n interface HTMLElement {\n __eventHandlers?: EventHandlerStorage;\n }\n interface SVGElement {\n __eventHandlers?: EventHandlerStorage;\n }\n}\n",
|
|
11
11
|
"// src/core/utils/mobile.ts\n\n/**\n * Mobile device detection and capability checks\n * This provides a centralized way to handle mobile-specific features and behaviors\n */\n\n/**\n * Interface for normalized event properties\n */\nexport interface NormalizedEvent {\n clientX: number;\n clientY: number;\n pageX: number;\n pageY: number;\n target: EventTarget;\n preventDefault: () => void;\n stopPropagation: () => void;\n type: string;\n}\n\n/**\n * Detects if the current device is likely a mobile device\n * Uses a combination of user agent and screen size checks for reliability\n */\nexport const isMobileDevice = (): boolean => {\n const userAgent = /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(\n navigator.userAgent\n );\n const screenSize = window.innerWidth <= 768;\n return userAgent || screenSize;\n};\n\n/**\n * Options for passive event listeners\n */\nexport const PASSIVE_EVENTS: AddEventListenerOptions = { passive: true };\n\n/**\n * Configuration constants for mobile interactions\n * Following WCAG guidelines and touch interaction best practices\n */\nexport const TOUCH_CONFIG = {\n TARGET_SIZE: 44, // Minimum touch target size in pixels (WCAG standard)\n FEEDBACK_DURATION: 200, // Duration of touch feedback animation in ms\n TAP_THRESHOLD: 250, // Maximum duration for a touch to be considered a tap\n SWIPE_THRESHOLD: 50 // Minimum distance for a touch to be considered a swipe\n};\n\n/**\n * Accessibility-minded touch target sizes\n * Based on WCAG guidelines for touch targets\n */\nexport const TOUCH_TARGETS = {\n MINIMUM: 44, // Minimum recommended size in pixels\n COMFORTABLE: 48, // Comfortable touch target size\n LARGE: 56 // Large touch target for primary actions\n};\n\n/**\n * Detects if the current device supports touch events\n */\nexport const hasTouchSupport = (): boolean => {\n return 'ontouchstart' in window || navigator.maxTouchPoints > 0;\n};\n\n/**\n * Type guard for TouchEvent\n */\nfunction isTouchEvent(event: Event): event is TouchEvent {\n return 'touches' in event;\n}\n\n/**\n * Type guard for MouseEvent\n */\nfunction isMouseEvent(event: Event): event is MouseEvent {\n return 'clientX' in event && 'clientY' in event;\n}\n\n/**\n * Normalizes both mouse and touch events into a consistent format\n * This allows components to handle interactions uniformly\n */\nexport const normalizeEvent = (event: Event): NormalizedEvent => {\n // Handle TouchEvent\n if (isTouchEvent(event) && event.touches.length > 0) {\n const touch = event.touches[0];\n return {\n clientX: touch.clientX,\n clientY: touch.clientY,\n pageX: touch.pageX,\n pageY: touch.pageY,\n target: event.target as EventTarget,\n preventDefault: () => event.preventDefault(),\n stopPropagation: () => event.stopPropagation(),\n type: event.type\n };\n }\n \n // Handle MouseEvent\n if (isMouseEvent(event)) {\n return {\n clientX: event.clientX,\n clientY: event.clientY,\n pageX: event.pageX,\n pageY: event.pageY,\n target: event.target as EventTarget,\n preventDefault: () => event.preventDefault(),\n stopPropagation: () => event.stopPropagation(),\n type: event.type\n };\n }\n \n // Fallback for other event types\n return {\n clientX: 0,\n clientY: 0,\n pageX: 0,\n pageY: 0,\n target: event.target as EventTarget,\n preventDefault: () => event.preventDefault(),\n stopPropagation: () => event.stopPropagation(),\n type: event.type\n };\n};",
|
|
12
12
|
"// src/core/compose/component.ts\n/**\n * @module core/compose/component\n * @description Core utilities for component composition and creation with built-in mobile support\n */\n\nimport {\n createElement,\n CreateElementOptions,\n removeEventHandlers,\n} from \"../dom/create\";\nimport {\n normalizeEvent,\n hasTouchSupport,\n TOUCH_CONFIG,\n PASSIVE_EVENTS,\n} from \"../utils/mobile\";\n\n/**\n * Touch state interface to track touch interactions\n */\nexport interface TouchState {\n startTime: number;\n startPosition: { x: number; y: number };\n isTouching: boolean;\n activeTarget: EventTarget | null;\n}\n\n/**\n * Base component interface with prefix utilities\n */\nexport interface BaseComponent {\n config: Record<string, any>;\n componentName?: string;\n getClass: (name: string) => string;\n getModifierClass: (base: string, modifier: string) => string;\n getElementClass: (base: string, element: string) => string;\n touchState: TouchState;\n updateTouchState: (event: Event, status: \"start\" | \"end\") => void;\n}\n\n/**\n * Element component extends base with element\n */\nexport interface ElementComponent extends BaseComponent {\n element: HTMLElement;\n addClass: (...classes: string[]) => ElementComponent;\n destroy: () => void;\n}\n\n/**\n * Options for withElement enhancer\n */\nexport interface WithElementOptions {\n tag?: string;\n componentName?: string;\n attributes?: Record<string, any>;\n className?: string | string[];\n // Common HTML attributes\n id?: string; // Element ID\n name?: string; // Form element name\n title?: string; // Tooltip text (native browser tooltip on hover)\n tabIndex?: number; // Keyboard navigation order (-1 to remove from tab order, 0+ for custom order)\n style?: string | Partial<CSSStyleDeclaration>; // Inline styles (string or object)\n // Data attributes\n data?: Record<string, string>; // Data attributes (e.g., { name: 'value' } → data-name=\"value\")\n // ARIA attributes for accessibility\n role?: string; // ARIA role (e.g., 'button', 'menuitem', 'dialog')\n ariaLabel?: string; // Accessible label for screen readers\n ariaDescribedBy?: string; // ID of element that describes this element\n ariaLabelledBy?: string; // ID of element that labels this element\n ariaHidden?: boolean; // Hide from screen readers\n forwardEvents?: Record<\n string,\n boolean | ((component: any, event: Event) => boolean)\n >;\n interactive?: boolean;\n parent?: HTMLElement | string;\n}\n\n/**\n * Creates helper functions for managing CSS class names with a prefix\n * @param {string} prefix - Prefix to apply to class names\n * @returns {Object} Class name utilities\n */\nconst withPrefix = (prefix: string) => ({\n /**\n * Gets a prefixed class name\n * @param {string} name - Base class name\n * @returns {string} Prefixed class name\n */\n getClass: (name: string): string => `${prefix}-${name}`,\n\n /**\n * Gets a prefixed modifier class name\n * @param {string} base - Base class name\n * @param {string} modifier - Modifier name\n * @returns {string} Prefixed modifier class\n */\n getModifierClass: (base: string, modifier: string): string =>\n `${base}--${modifier}`,\n\n /**\n * Gets a prefixed element class name\n * @param {string} base - Base class name\n * @param {string} element - Element name\n * @returns {string} Prefixed element class\n */\n getElementClass: (base: string, element: string): string =>\n `${base}-${element}`,\n});\n\n/**\n * Creates a base component with configuration and prefix utilities.\n * This forms the foundation for all components in the system.\n *\n * @param {Object} config - Component configuration\n * @returns {BaseComponent} Base component with prefix utilities\n */\nexport const createBase = (\n config: Record<string, any> = {},\n): BaseComponent => ({\n config,\n componentName: config.componentName,\n ...withPrefix(config.prefix || \"mtrl\"),\n\n /**\n * Manages the touch interaction state for the component.\n */\n touchState: {\n startTime: 0,\n startPosition: { x: 0, y: 0 },\n isTouching: false,\n activeTarget: null,\n },\n\n /**\n * Updates the component's touch state based on user interactions.\n * Tracks touch position and timing for gesture recognition.\n */\n updateTouchState(event: Event, status: \"start\" | \"end\"): void {\n // Cast to MouseEvent as a safe fallback when working with general Events\n const normalized = normalizeEvent(event as MouseEvent);\n\n if (status === \"start\") {\n this.touchState = {\n startTime: Date.now(),\n startPosition: {\n x: normalized.clientX,\n y: normalized.clientY,\n },\n isTouching: true,\n activeTarget: normalized.target,\n };\n } else if (status === \"end\") {\n this.touchState.isTouching = false;\n this.touchState.activeTarget = null;\n }\n },\n});\n\n/**\n * Higher-order function that adds a DOM element to a component\n * @param {WithElementOptions} options - Element creation options\n * @returns {Function} Component enhancer\n */\nexport const withElement =\n (options: WithElementOptions = {}) =>\n <T extends BaseComponent>(component: T): T & ElementComponent => {\n /**\n * Handles the start of a touch interaction.\n */\n const handleTouchStart = (event: Event): void => {\n base.updateTouchState(event, \"start\");\n element.classList.add(`${base.getClass(\"touch-active\")}`);\n\n if (options.forwardEvents?.touchstart && \"emit\" in component) {\n (component as any).emit(\"touchstart\", normalizeEvent(event));\n }\n };\n\n /**\n * Handles the end of a touch interaction.\n */\n const handleTouchEnd = (event: Event): void => {\n if (!base.touchState.isTouching) return;\n\n const touchDuration = Date.now() - base.touchState.startTime;\n element.classList.remove(`${base.getClass(\"touch-active\")}`);\n base.updateTouchState(event, \"end\");\n\n // Emit tap event for short touches\n if (touchDuration < TOUCH_CONFIG.TAP_THRESHOLD && \"emit\" in component) {\n (component as any).emit(\"tap\", normalizeEvent(event));\n }\n\n if (options.forwardEvents?.touchend && \"emit\" in component) {\n (component as any).emit(\"touchend\", normalizeEvent(event));\n }\n };\n\n /**\n * Handles touch movement.\n */\n const handleTouchMove = (event: Event): void => {\n if (!base.touchState.isTouching) return;\n\n const normalized = normalizeEvent(event);\n const deltaX = normalized.clientX - base.touchState.startPosition.x;\n const deltaY = normalized.clientY - base.touchState.startPosition.y;\n\n // Detect and emit swipe gestures\n if (\n Math.abs(deltaX) > TOUCH_CONFIG.SWIPE_THRESHOLD &&\n \"emit\" in component\n ) {\n (component as any).emit(\"swipe\", {\n direction: deltaX > 0 ? \"right\" : \"left\",\n deltaX,\n deltaY,\n });\n }\n\n if (options.forwardEvents?.touchmove && \"emit\" in component) {\n (component as any).emit(\"touchmove\", { ...normalized, deltaX, deltaY });\n }\n };\n\n // Get the base component for reference\n const base = component;\n\n // Check for parent in component config\n let parent = component.config.parent || options.parent;\n\n // Handle string selectors\n if (typeof parent === \"string\") {\n parent = document.querySelector(parent) as HTMLElement | null;\n }\n\n // Create element options from component options\n const elementOptions: CreateElementOptions = {\n tag: options.tag || \"div\",\n className: [\n base.getClass(\n options.componentName || base.componentName || \"component\",\n ),\n hasTouchSupport() && options.interactive\n ? base.getClass(\"interactive\")\n : null,\n ...(Array.isArray(options.className)\n ? options.className\n : [options.className]),\n ].filter(Boolean),\n attributes: options.attributes || {},\n // Common HTML attributes\n id: options.id,\n name: options.name,\n title: options.title,\n tabIndex: options.tabIndex,\n style: options.style,\n // Data attributes\n data: options.data,\n // ARIA attributes\n role: options.role,\n ariaLabel: options.ariaLabel,\n ariaDescribedBy: options.ariaDescribedBy,\n ariaLabelledBy: options.ariaLabelledBy,\n ariaHidden: options.ariaHidden,\n forwardEvents: options.forwardEvents || {},\n context: component, // Pass component as context for events\n container: parent, // Pass to createElement's container option (internal use)\n };\n\n // Create the element with appropriate classes\n const element = createElement(elementOptions);\n\n // Add event listeners only if touch is supported and the component is interactive\n if (hasTouchSupport() && options.interactive) {\n element.addEventListener(\"touchstart\", handleTouchStart, PASSIVE_EVENTS);\n element.addEventListener(\"touchend\", handleTouchEnd);\n element.addEventListener(\"touchmove\", handleTouchMove, PASSIVE_EVENTS);\n }\n\n return {\n ...component,\n element,\n\n /**\n * Adds CSS classes to the element\n * @param {...string} classes - CSS classes to add\n * @returns {ElementComponent} Component instance for chaining\n */\n addClass(...classes: string[]): ElementComponent {\n element.classList.add(...classes.filter(Boolean));\n return this;\n },\n\n /**\n * Removes the element and cleans up event listeners.\n * Ensures proper resource cleanup when the component is destroyed.\n */\n destroy(): void {\n if (hasTouchSupport() && options.interactive) {\n element.removeEventListener(\"touchstart\", handleTouchStart);\n element.removeEventListener(\"touchend\", handleTouchEnd);\n element.removeEventListener(\"touchmove\", handleTouchMove);\n }\n\n // Clean up any registered event handlers using our new utility\n removeEventHandlers(element);\n\n element.remove();\n },\n };\n };\n",
|
|
@@ -56,7 +56,7 @@
|
|
|
56
56
|
"/**\n * Linear progress drawing functionality\n */\n\nimport { ProgressConfig, ProgressShape } from \"../types\";\nimport { PROGRESS_WAVE, PROGRESS_MEASUREMENTS } from \"../constants\";\nimport { getThemeColor } from \"../../../core/utils\";\nimport { getStrokeWidth, getWaveAmplitude, CanvasContext } from \"./canvas\";\n\n// Helper to set common stroke styles\nconst setStrokeStyle = (\n ctx: CanvasRenderingContext2D,\n strokeWidth: number,\n color: string\n): void => {\n ctx.strokeStyle = color;\n ctx.lineWidth = strokeWidth;\n ctx.lineCap = \"round\";\n};\n\n// Helper to draw a line segment (straight or wavy)\nconst drawLine = (\n ctx: CanvasRenderingContext2D,\n startX: number,\n endX: number,\n centerY: number,\n isWavy: boolean,\n animationTime: number,\n waveConfig: { amplitude: number; frequency: number; speed: number }\n): void => {\n ctx.beginPath();\n\n if (!isWavy || waveConfig.amplitude === 0) {\n ctx.moveTo(startX, centerY);\n ctx.lineTo(endX, centerY);\n } else {\n let lastX = startX;\n for (let x = startX; x <= endX; x += 1) {\n const phase = x * waveConfig.frequency + animationTime * waveConfig.speed;\n const sineWave = Math.sin(phase);\n const smoothedWave =\n Math.sign(sineWave) *\n Math.pow(Math.abs(sineWave), PROGRESS_WAVE.LINEAR.POWER);\n const y = centerY + smoothedWave * waveConfig.amplitude;\n\n if (x === startX) {\n ctx.moveTo(x, y);\n } else {\n ctx.lineTo(x, y);\n }\n lastX = x;\n }\n\n // Ensure we always draw to the end point\n if (lastX < endX) {\n const phase =\n endX * waveConfig.frequency + animationTime * waveConfig.speed;\n const sineWave = Math.sin(phase);\n const smoothedWave =\n Math.sign(sineWave) *\n Math.pow(Math.abs(sineWave), PROGRESS_WAVE.LINEAR.POWER);\n const y = centerY + smoothedWave * waveConfig.amplitude;\n ctx.lineTo(endX, y);\n }\n }\n\n ctx.stroke();\n};\n\n// Helper for indeterminate animation timing\nconst getSegmentScale = (time: number, thresholds: number[]): number => {\n const [t1, t2, t3] = thresholds;\n if (time <= t1) {\n return 0.08 + (0.661479 - 0.08) * (time / t1);\n } else if (time <= t2) {\n return 0.661479;\n } else if (t3 && time <= t3) {\n return 0.661479;\n }\n return t3 ? 0.661479 - (0.661479 - 0.08) * ((time - t3) / (1 - t3)) : 0.08;\n};\n\nconst getSegmentTranslate = (\n time: number,\n keyframes: [number, number][]\n): number => {\n for (let i = 0; i < keyframes.length - 1; i++) {\n const [t1, v1] = keyframes[i];\n const [t2, v2] = keyframes[i + 1];\n if (time <= t2) {\n const t = (time - t1) / (t2 - t1);\n return v1 + (v2 - v1) * t;\n }\n }\n const [lastT, lastV] = keyframes[keyframes.length - 1];\n return lastV + (220 - lastV) * ((time - lastT) / (1 - lastT));\n};\n\n/**\n * Draws linear progress on canvas with shape support\n */\nexport const drawLinearProgress = (\n context: CanvasContext,\n config: ProgressConfig,\n value: number,\n max: number,\n buffer: number,\n isIndeterminate: boolean,\n animationTime: number = 0,\n showStopIndicator: boolean = true,\n currentShape: ProgressShape = \"flat\"\n): void => {\n const { ctx, width, height } = context;\n const strokeWidth = getStrokeWidth(config.thickness);\n const centerY = height / 2;\n const isWavy = currentShape === \"wavy\";\n const edgeGap = strokeWidth / 2;\n const availableWidth = width - edgeGap * 2;\n const gapWidth = PROGRESS_MEASUREMENTS.LINEAR.GAP;\n const percentage = value / max;\n\n // Apply minimum percentage to ensure visibility (same as circular progress)\n const minProgressPercentage = 0.001; // 0.1% minimum to show progress is ready\n const actualPercentage = Math.max(percentage, minProgressPercentage);\n\n const progressEnd = edgeGap + availableWidth * actualPercentage;\n\n // Clear canvas\n ctx.clearRect(0, 0, width, height);\n\n // Common colors\n const primaryColor = getThemeColor(\"sys-color-primary\", {\n fallback: \"#6750A4\",\n });\n const trackColor = getThemeColor(\"sys-color-primary-rgb\", {\n alpha: 0.12,\n fallback: \"rgba(103, 80, 164, 0.12)\",\n });\n\n if (isIndeterminate) {\n const cycleDuration = 2000;\n const normalizedTime = (animationTime % cycleDuration) / cycleDuration;\n\n // Define gap size early\n const indeterminateGap = gapWidth * 2 + strokeWidth / 2; // Double the gap constant + stroke adjustment\n\n // Calculate segment positions using helpers\n const primaryScale = getSegmentScale(normalizedTime, [0.3665, 0.6915]);\n const primaryTranslate = getSegmentTranslate(normalizedTime, [\n [0, -120],\n [0.2, 0],\n [0.5915, 83.6714],\n ]);\n\n const secondaryScale =\n normalizedTime <= 0.5\n ? 0\n : getSegmentScale(normalizedTime, [0.8335, null, 0.8335]);\n const secondaryTranslate =\n normalizedTime <= 0.5\n ? -54.8889\n : getSegmentTranslate(normalizedTime, [\n [0.5, -54.8889],\n [0.7, 25.0389],\n [0.85, 83.6714],\n ]);\n\n // Calculate visible bounds\n const rawSegments = [\n {\n scale: primaryScale,\n translate: primaryTranslate,\n start: Math.max(\n edgeGap,\n edgeGap + (availableWidth * primaryTranslate) / 100\n ),\n end: Math.min(\n width - edgeGap,\n edgeGap +\n (availableWidth * primaryTranslate) / 100 +\n availableWidth * primaryScale\n ),\n },\n {\n scale: secondaryScale,\n translate: secondaryTranslate,\n start: Math.max(\n edgeGap,\n edgeGap + (availableWidth * secondaryTranslate) / 100\n ),\n end: Math.min(\n width - edgeGap,\n edgeGap +\n (availableWidth * secondaryTranslate) / 100 +\n availableWidth * secondaryScale\n ),\n },\n ].filter((s) => s.end > s.start);\n\n // Sort segments by start position\n const segments = rawSegments.sort((a, b) => a.start - b.start);\n\n // Check for overlapping segments and merge if needed\n const mergedSegments = [];\n for (let i = 0; i < segments.length; i++) {\n const segment = segments[i];\n\n if (mergedSegments.length === 0) {\n mergedSegments.push({ ...segment });\n } else {\n const lastMerged = mergedSegments[mergedSegments.length - 1];\n\n // Check if current segment overlaps with the last merged segment\n if (segment.start <= lastMerged.end + indeterminateGap) {\n // Merge segments by extending the end\n lastMerged.end = Math.max(lastMerged.end, segment.end);\n } else {\n // No overlap, add as new segment\n mergedSegments.push({ ...segment });\n }\n }\n }\n\n // Draw track segments\n setStrokeStyle(ctx, strokeWidth, trackColor);\n\n // Minimum visible segment length to avoid artifacts\n const minSegmentLength = strokeWidth;\n\n if (mergedSegments.length === 0) {\n // No active segments, draw full track\n drawLine(ctx, edgeGap, width - edgeGap, centerY, false, 0, {\n amplitude: 0,\n frequency: 0,\n speed: 0,\n });\n } else {\n // Draw track before first segment\n const firstStart = mergedSegments[0].start;\n if (firstStart - edgeGap > indeterminateGap + minSegmentLength) {\n drawLine(\n ctx,\n edgeGap,\n firstStart - indeterminateGap,\n centerY,\n false,\n 0,\n { amplitude: 0, frequency: 0, speed: 0 }\n );\n }\n\n // Draw track between segments (only if we have 2 segments)\n if (mergedSegments.length === 2) {\n const gap = mergedSegments[1].start - mergedSegments[0].end;\n if (gap > 2 * indeterminateGap + minSegmentLength) {\n drawLine(\n ctx,\n mergedSegments[0].end + indeterminateGap,\n mergedSegments[1].start - indeterminateGap,\n centerY,\n false,\n 0,\n { amplitude: 0, frequency: 0, speed: 0 }\n );\n }\n }\n\n // Draw track after last segment\n const lastSegment = mergedSegments[mergedSegments.length - 1];\n const lastEnd = lastSegment.end;\n if (width - edgeGap - lastEnd > indeterminateGap + minSegmentLength) {\n drawLine(\n ctx,\n lastEnd + indeterminateGap,\n width - edgeGap,\n centerY,\n false,\n 0,\n { amplitude: 0, frequency: 0, speed: 0 }\n );\n }\n }\n\n // Draw progress segments\n setStrokeStyle(ctx, strokeWidth, primaryColor);\n const waveConfig = {\n amplitude: isWavy\n ? getWaveAmplitude(\n strokeWidth,\n PROGRESS_WAVE.LINEAR.INDETERMINATE_AMPLITUDE\n )\n : 0,\n frequency:\n (PROGRESS_WAVE.LINEAR.INDETERMINATE_FREQUENCY * 2 * Math.PI) / 100,\n speed: 0,\n };\n\n mergedSegments.forEach((segment) => {\n drawLine(\n ctx,\n segment.start,\n segment.end,\n centerY,\n isWavy,\n animationTime,\n waveConfig\n );\n });\n\n return;\n }\n\n // Determinate progress\n const startTransitionEnd = PROGRESS_WAVE.LINEAR.START_TRANSITION_END;\n const endTransitionStart = PROGRESS_WAVE.LINEAR.END_TRANSITION_START;\n\n // Calculate the gap offset (half of total gap on each side)\n const gapOffset = (gapWidth + strokeWidth) / 2;\n\n // Draw track\n setStrokeStyle(ctx, strokeWidth, trackColor);\n const trackStart =\n percentage === 0\n ? edgeGap + strokeWidth + gapWidth\n : Math.min(progressEnd + gapOffset, width - edgeGap);\n\n drawLine(ctx, trackStart, width - edgeGap, centerY, false, 0, {\n amplitude: 0,\n frequency: 0,\n speed: 0,\n });\n\n // Draw progress indicator\n setStrokeStyle(ctx, strokeWidth, primaryColor);\n\n const indicatorEnd =\n percentage >= 1\n ? width - edgeGap // Full width at 100%\n : Math.max(edgeGap, progressEnd - gapOffset);\n\n // Special handling for zero percentage to ensure minimal dot\n let finalIndicatorEnd: number;\n if (percentage === 0) {\n // Fixed minimal size for zero progress\n finalIndicatorEnd = edgeGap + (isWavy ? 0.1 : 0);\n } else {\n // Ensure minimum visible length for non-zero progress\n const minNonZeroLength = strokeWidth / 2;\n finalIndicatorEnd = Math.max(edgeGap + minNonZeroLength, indicatorEnd);\n }\n\n // Calculate wave amplitude for transitions\n let waveAmplitude = isWavy\n ? getWaveAmplitude(strokeWidth, PROGRESS_WAVE.LINEAR.AMPLITUDE)\n : 0;\n if (isWavy) {\n // No amplitude at zero if there's a start transition\n if (percentage === 0 && startTransitionEnd > 0) {\n waveAmplitude = 0;\n } else if (actualPercentage <= startTransitionEnd) {\n // Apply amplitude transition at start\n waveAmplitude *= Math.pow(actualPercentage / startTransitionEnd, 2);\n } else if (actualPercentage >= endTransitionStart) {\n // Apply amplitude transition at end\n waveAmplitude *= Math.pow(\n (1 - actualPercentage) / (1 - endTransitionStart),\n 2\n );\n }\n }\n\n drawLine(ctx, edgeGap, finalIndicatorEnd, centerY, isWavy, animationTime, {\n amplitude: waveAmplitude,\n frequency: (PROGRESS_WAVE.LINEAR.FREQUENCY * 2 * Math.PI) / 100,\n speed: (PROGRESS_WAVE.LINEAR.SPEED * 2 * Math.PI) / 1000,\n });\n\n // Draw buffer\n if (buffer > 0 && buffer > value) {\n setStrokeStyle(\n ctx,\n strokeWidth,\n getThemeColor(\"sys-color-secondary-container\", { fallback: \"#E8DEF8\" })\n );\n const bufferEnd = edgeGap + availableWidth * (buffer / max);\n drawLine(ctx, progressEnd, bufferEnd, centerY, false, 0, {\n amplitude: 0,\n frequency: 0,\n speed: 0,\n });\n }\n\n // Draw stop indicator\n if (percentage < 1 && showStopIndicator) {\n // Scale indicator radius with stroke width, max 2px\n const indicatorRadius = Math.min(strokeWidth * 0.5, 2);\n ctx.beginPath();\n ctx.arc(width - edgeGap, centerY, indicatorRadius, 0, 2 * Math.PI);\n ctx.fillStyle = primaryColor;\n ctx.fill();\n }\n};\n",
|
|
57
57
|
"// src/components/progress/features/canvas.ts\n\nimport { ProgressConfig, ProgressThickness, ProgressShape } from \"../types\";\nimport {\n PROGRESS_CLASSES,\n PROGRESS_VARIANTS,\n PROGRESS_MEASUREMENTS,\n PROGRESS_THICKNESS,\n PROGRESS_WAVE,\n} from \"../constants\";\nimport { getThemeColor } from \"../../../core/utils\";\nimport { observeCanvasResize } from \"../../../core/canvas/resize\";\nimport { drawCircularProgress } from \"./circular\";\nimport { drawLinearProgress } from \"./linear\";\n\n/**\n * Canvas dimensions and drawing context\n */\nexport interface CanvasContext {\n canvas: HTMLCanvasElement;\n ctx: CanvasRenderingContext2D;\n width: number;\n height: number;\n pixelRatio: number;\n}\n\n/**\n * Component with canvas capabilities\n */\ninterface CanvasComponent {\n element: HTMLElement;\n canvas: HTMLCanvasElement;\n ctx: CanvasRenderingContext2D;\n getClass: (name: string) => string;\n draw: () => void;\n resize: () => void;\n [key: string]: unknown;\n}\n\n/**\n * Base component interface for withCanvas\n */\ninterface BaseComponent {\n element: HTMLElement;\n getClass: (name: string) => string;\n lifecycle?: {\n init?: () => void;\n destroy?: () => void;\n };\n state?: {\n value?: number;\n max?: number;\n buffer?: number;\n indeterminate?: boolean;\n [key: string]: unknown;\n };\n // Animation properties that will be added\n animationId?: number | null;\n wavyAnimationId?: number | null;\n valueAnimationId?: number | null;\n animationTime?: number;\n setIndeterminate?: (indeterminate: boolean) => void;\n [key: string]: unknown;\n}\n\n/**\n * Gets the stroke width for a given thickness preset or custom value\n */\nexport const getStrokeWidth = (\n thickness: ProgressThickness = \"thin\"\n): number => {\n if (typeof thickness === \"number\") {\n return thickness;\n }\n\n return thickness === \"thick\"\n ? PROGRESS_THICKNESS.THICK\n : PROGRESS_THICKNESS.THIN;\n};\n\n/**\n * Calculates wave amplitude based on stroke width\n * Uses thickness 4 as the baseline (where amplitude is perfect)\n */\nexport const getWaveAmplitude = (\n strokeWidth: number,\n baseAmplitude: number,\n maxAmplitude?: number\n): number => {\n // Use thickness 4 as baseline (perfect amplitude)\n const baselineThickness = 4;\n\n // Formula with dampening factor for gentler scaling\n // The 0.3 factor makes the scaling very subtle\n const scaleFactor =\n 1 +\n (0.3 * (baselineThickness - strokeWidth)) /\n (strokeWidth + baselineThickness);\n\n const amplitude = baseAmplitude * scaleFactor;\n return maxAmplitude ? Math.min(amplitude, maxAmplitude) : amplitude;\n};\n\n/**\n * Updates canvas dimensions based on current thickness\n */\nconst updateCanvasDimensions = (\n canvas: HTMLCanvasElement,\n context: CanvasContext,\n isCircular: boolean,\n config?: ProgressConfig\n): void => {\n const pixelRatio = window.devicePixelRatio || 1;\n const strokeWidth = getStrokeWidth(config?.thickness);\n const { ctx } = context;\n\n if (isCircular) {\n const size = Math.max(\n 24,\n Math.min(config?.size ?? PROGRESS_MEASUREMENTS.CIRCULAR.SIZE, 240)\n );\n\n // Calculate wave amplitude using the same logic as in drawCircularProgress\n let waveAmplitude = 0;\n if (config?.shape === \"wavy\") {\n const baseRadius = size / 2 - strokeWidth / 2;\n const amplitudePercent = config?.indeterminate\n ? PROGRESS_WAVE.CIRCULAR.INDETERMINATE_AMPLITUDE\n : PROGRESS_WAVE.CIRCULAR.AMPLITUDE;\n const baseAmplitude = baseRadius * (amplitudePercent / 100);\n waveAmplitude = getWaveAmplitude(strokeWidth, baseAmplitude);\n }\n\n const adjustedSize = size + waveAmplitude * 2;\n\n canvas.style.width = canvas.style.height = `${adjustedSize}px`;\n canvas.width = canvas.height = Math.round(adjustedSize * pixelRatio);\n context.width = context.height = adjustedSize;\n } else {\n const progressElement = canvas.parentElement;\n if (!progressElement) return;\n\n const width = Math.max(\n progressElement.getBoundingClientRect().width ||\n progressElement.offsetWidth,\n 200\n );\n\n // Calculate extra height needed for waves based on actual amplitude\n let extraHeight = 0;\n if (config?.shape === \"wavy\") {\n const baseAmplitude = PROGRESS_WAVE.LINEAR.AMPLITUDE;\n const waveAmplitude = getWaveAmplitude(strokeWidth, baseAmplitude);\n extraHeight = Math.ceil(waveAmplitude * 2); // Space for wave peaks above and below\n }\n\n const height = strokeWidth + extraHeight;\n\n canvas.style.width = `${width}px`;\n canvas.style.height = `${height}px`;\n canvas.width = Math.round(width * pixelRatio);\n canvas.height = Math.round(height * pixelRatio);\n\n context.width = width;\n context.height = height;\n }\n\n ctx.setTransform(1, 0, 0, 1, 0, 0);\n ctx.scale(pixelRatio, pixelRatio);\n};\n\n/**\n * Sets up canvas with proper pixel ratio and dimensions\n */\nconst setupCanvas = (\n canvas: HTMLCanvasElement,\n isCircular: boolean,\n config?: ProgressConfig\n): CanvasContext => {\n const context: CanvasContext = {\n canvas,\n ctx: canvas.getContext(\"2d\")!,\n width: 0,\n height: 0,\n pixelRatio: window.devicePixelRatio || 1,\n };\n\n updateCanvasDimensions(canvas, context, isCircular, config);\n return context;\n};\n\n/**\n * Adds canvas functionality to replace complex DOM structure\n */\nexport const withCanvas =\n (config: ProgressConfig) =>\n (component: BaseComponent): CanvasComponent => {\n const variant = config.variant;\n const isCircular = variant === PROGRESS_VARIANTS.CIRCULAR;\n\n // Create canvas element\n const canvas = document.createElement(\"canvas\");\n canvas.className = `${component.getClass(\n PROGRESS_CLASSES.CONTAINER\n )}-canvas`;\n canvas.style.maxWidth = \"100%\";\n canvas.style.maxHeight = \"100%\";\n canvas.style.boxSizing = \"border-box\";\n\n component.element.appendChild(canvas);\n\n // Setup canvas context\n let canvasContext: CanvasContext | null = null;\n let resizeCleanup: (() => void) | null = null;\n let themeChangeCleanup: (() => void) | null = null;\n\n // Current values - managed by API\n let currentThickness = config.thickness;\n let currentShape = config.shape;\n let currentSize = config.size ?? PROGRESS_MEASUREMENTS.CIRCULAR.SIZE;\n\n // Track animated value for smooth transitions\n let animatedValue = config.value ?? 0;\n let targetValue = animatedValue;\n let lastSetValueTime = 0;\n\n const initializeCanvas = (): boolean => {\n try {\n canvasContext = setupCanvas(canvas, isCircular, {\n ...config,\n thickness: currentThickness,\n shape: currentShape,\n size: currentSize,\n });\n component.ctx = canvasContext.ctx;\n return true;\n } catch (error) {\n console.warn(\"Canvas initialization failed:\", error);\n return false;\n }\n };\n\n // Try to initialize immediately\n if (!initializeCanvas()) {\n requestAnimationFrame(() => {\n if (!initializeCanvas()) {\n setTimeout(initializeCanvas, 100);\n }\n });\n }\n\n // Store canvas references and animation state\n component.canvas = canvas;\n component.animationTime = 0;\n component.animationId = null;\n component.wavyAnimationId = null;\n component.valueAnimationId = null;\n component.currentShape = currentShape;\n\n // Animation loop for indeterminate progress\n const startIndeterminateAnimation = (timeOffset: number = 0): void => {\n if (!component.state?.indeterminate) return;\n\n if (component.animationId) {\n cancelAnimationFrame(component.animationId);\n component.animationId = null;\n }\n\n // Store the animation start time\n let animationStartTime = 0;\n\n const animate = (timestamp: number): void => {\n if (!component.state?.indeterminate) {\n stopIndeterminateAnimation();\n return;\n }\n\n if (animationStartTime === 0) {\n animationStartTime = timestamp - timeOffset;\n }\n\n const relativeTime = timestamp - animationStartTime;\n component.animationTime = relativeTime;\n draw(relativeTime);\n component.animationId = requestAnimationFrame(animate);\n };\n\n component.animationId = requestAnimationFrame(animate);\n };\n\n const stopIndeterminateAnimation = (): void => {\n if (component.animationId) {\n cancelAnimationFrame(component.animationId);\n component.animationId = null;\n }\n };\n\n // Animation loop for wavy progress\n const startWavyAnimation = (timeOffset: number = 0): void => {\n if (component.wavyAnimationId) {\n cancelAnimationFrame(component.wavyAnimationId);\n component.wavyAnimationId = null;\n }\n\n // Store the animation start time\n let animationStartTime = 0;\n\n const animate = (timestamp: number): void => {\n if (animationStartTime === 0) {\n animationStartTime = timestamp - timeOffset;\n }\n\n const relativeTime = timestamp - animationStartTime;\n component.animationTime = relativeTime;\n draw(relativeTime);\n component.wavyAnimationId = requestAnimationFrame(animate);\n };\n\n component.wavyAnimationId = requestAnimationFrame(animate);\n };\n\n const stopWavyAnimation = (): void => {\n if (component.wavyAnimationId) {\n cancelAnimationFrame(component.wavyAnimationId);\n component.wavyAnimationId = null;\n }\n };\n\n // Drawing function with animation support\n const draw = (animationTime: number = 0): void => {\n if (!canvasContext) return;\n\n const state = component.state;\n const value = state?.value ?? config.value ?? 0;\n const max = state?.max ?? config.max ?? 100;\n const buffer = state?.buffer ?? config.buffer ?? 0;\n const isIndeterminate =\n state?.indeterminate ?? config.indeterminate ?? false;\n\n const currentConfig = {\n ...config,\n thickness: currentThickness,\n shape: currentShape,\n size: currentSize,\n };\n\n updateCanvasDimensions(canvas, canvasContext, isCircular, currentConfig);\n\n const drawValue = isIndeterminate || !state ? value : animatedValue;\n\n if (isCircular) {\n drawCircularProgress(\n canvasContext,\n currentConfig,\n drawValue,\n max,\n isIndeterminate,\n animationTime,\n currentShape\n );\n } else {\n drawLinearProgress(\n canvasContext,\n currentConfig,\n drawValue,\n max,\n buffer,\n isIndeterminate,\n animationTime,\n true,\n currentShape\n );\n }\n };\n\n // Resize function\n const resize = (): void => {\n if (!canvasContext) return;\n\n try {\n const newContext = setupCanvas(canvas, isCircular, {\n ...config,\n thickness: currentThickness,\n shape: currentShape,\n size: currentSize,\n });\n component.ctx = newContext.ctx;\n Object.assign(canvasContext, newContext);\n draw();\n } catch (error) {\n console.warn(\"Canvas resize failed:\", error);\n }\n };\n\n // Setup observers\n resizeCleanup = observeCanvasResize(component.element, canvas, () => {\n if (component.element.offsetWidth > 0 || isCircular) {\n resize();\n }\n });\n\n const cleanup = getThemeColor(\"sys-color-primary\", { onThemeChange: draw });\n themeChangeCleanup = typeof cleanup === \"function\" ? cleanup : null;\n\n // Initial draw and setup animation if needed\n const initialDraw = (): void => {\n if (!canvasContext) {\n requestAnimationFrame(initialDraw);\n return;\n }\n\n draw();\n\n // Start appropriate animation\n if (component.state?.indeterminate) {\n if (currentShape === \"wavy\" || !isCircular) {\n startWavyAnimation();\n } else {\n startIndeterminateAnimation();\n }\n } else if (currentShape === \"wavy\") {\n startWavyAnimation();\n }\n };\n\n requestAnimationFrame(initialDraw);\n\n // Helper to update config and redraw\n const updateConfigAndDraw = (updates: Partial<ProgressConfig>) => {\n if (!canvasContext) return;\n\n const currentConfig = {\n ...config,\n thickness: currentThickness,\n shape: currentShape,\n size: currentSize,\n ...updates,\n };\n\n updateCanvasDimensions(canvas, canvasContext, isCircular, currentConfig);\n draw();\n };\n\n // Add setThickness method to component\n component.setThickness = (thickness: ProgressThickness) => {\n currentThickness = thickness;\n updateConfigAndDraw({ thickness });\n };\n\n // Add setSize and getSize API to returned component\n component.setSize = (size: number) => {\n if (!isCircular) return;\n currentSize = Math.max(24, Math.min(size, 240));\n updateConfigAndDraw({ size: currentSize });\n };\n\n component.getSize = () => (isCircular ? currentSize : undefined);\n\n // Update currentShape in setShape\n component.setShape = (shape: ProgressShape) => {\n // Don't do anything if shape hasn't changed\n if (currentShape === shape) return;\n\n currentShape = shape;\n component.currentShape = currentShape;\n\n updateConfigAndDraw({ shape });\n\n // For indeterminate mode, we need to switch animation types\n // but preserve the current animation time\n if (component.state?.indeterminate) {\n const currentAnimationTime = component.animationTime || 0;\n\n // Stop current animations\n stopWavyAnimation();\n stopIndeterminateAnimation();\n\n // Start the appropriate animation with time offset\n if (shape === \"wavy\" || !isCircular) {\n startWavyAnimation(currentAnimationTime);\n } else {\n startIndeterminateAnimation(currentAnimationTime);\n }\n } else if (shape === \"wavy\") {\n // For determinate wavy, start wavy animation if not already running\n if (!component.wavyAnimationId) {\n startWavyAnimation();\n }\n } else {\n // For determinate non-wavy, stop wavy animation\n stopWavyAnimation();\n }\n\n // Force a redraw\n draw(component.animationTime || 0);\n };\n\n // Update setValue method to handle rapid updates better\n component.setValue = (value: number, animate: boolean = true) => {\n targetValue = Math.max(0, Math.min(component.state.max, value));\n\n if (component.state.indeterminate) {\n component.setIndeterminate(false);\n }\n\n // If animation is already running and we want to animate, just update the target\n if (component.valueAnimationId && animate) {\n // Update target, existing animation will handle it\n return;\n }\n\n if (component.valueAnimationId) {\n cancelAnimationFrame(component.valueAnimationId);\n component.valueAnimationId = null;\n }\n\n if (!animate) {\n animatedValue = targetValue;\n draw();\n // Don't restart wavy animation if it's already running\n if (\n currentShape === \"wavy\" &&\n !component.state.indeterminate &&\n !component.wavyAnimationId\n ) {\n startWavyAnimation();\n }\n // Emit complete event if reached max\n if (targetValue >= component.state.max) {\n component.element.dispatchEvent(\n new CustomEvent(\"complete\", {\n detail: { value: targetValue, max: component.state.max },\n })\n );\n }\n return;\n }\n\n const startValue = animatedValue;\n const startTime = performance.now();\n\n // Calculate adaptive duration based on update frequency\n const timeSinceLastCall = startTime - lastSetValueTime;\n let duration = 300; // Default duration\n\n if (timeSinceLastCall < 300 && lastSetValueTime > 0) {\n // If updates are coming faster than our animation, speed it up\n duration = Math.max(100, timeSinceLastCall * 0.9); // 90% of update interval, min 100ms\n }\n\n lastSetValueTime = startTime;\n\n const animateValue = (currentTime: number) => {\n const elapsed = currentTime - startTime;\n const progress = Math.min(elapsed / duration, 1);\n const easedProgress =\n progress < 0.5\n ? 4 * progress * progress * progress\n : 1 - Math.pow(-2 * progress + 2, 3) / 2;\n\n animatedValue = startValue + (targetValue - startValue) * easedProgress;\n\n // Always use the current animation time if wavy is running\n if (!component.wavyAnimationId || currentShape !== \"wavy\") {\n draw(currentTime);\n }\n\n if (progress < 1) {\n component.valueAnimationId = requestAnimationFrame(animateValue);\n } else {\n animatedValue = targetValue;\n component.valueAnimationId = null;\n\n // Start wavy animation if needed and not already running\n if (\n currentShape === \"wavy\" &&\n !component.state.indeterminate &&\n !component.wavyAnimationId\n ) {\n startWavyAnimation();\n }\n\n // Emit complete event if reached max\n if (targetValue >= component.state.max) {\n component.element.dispatchEvent(\n new CustomEvent(\"complete\", {\n detail: { value: targetValue, max: component.state.max },\n })\n );\n }\n }\n };\n\n component.valueAnimationId = requestAnimationFrame(animateValue);\n };\n\n // Add setIndeterminate method to component\n component.setIndeterminate = (indeterminate: boolean) => {\n if (!component.state) {\n console.warn(\"[Progress] No state available for setIndeterminate\");\n return;\n }\n\n component.state.indeterminate = indeterminate;\n\n if (indeterminate) {\n // Stop value animation\n if (component.valueAnimationId) {\n cancelAnimationFrame(component.valueAnimationId);\n component.valueAnimationId = null;\n }\n\n animatedValue = component.state.value;\n\n // Start appropriate animation\n if (currentShape === \"wavy\" || !isCircular) {\n startWavyAnimation();\n } else {\n startIndeterminateAnimation();\n }\n } else {\n // Stopping indeterminate mode\n animatedValue = component.state.value;\n\n // Stop indeterminate animation\n stopIndeterminateAnimation();\n\n // For wavy shape, keep or start wavy animation\n if (currentShape === \"wavy\") {\n if (!component.wavyAnimationId) {\n startWavyAnimation();\n }\n } else {\n stopWavyAnimation();\n }\n\n draw();\n }\n };\n\n // Add hide method to component\n component.hide = () => {\n component.element.classList.add(\n component.getClass(PROGRESS_CLASSES.TRANSITION)\n );\n component.element.style.opacity = \"0\";\n\n const onTransitionEnd = () => {\n component.element.style.display = \"none\";\n component.element.removeEventListener(\"transitionend\", onTransitionEnd);\n };\n component.element.addEventListener(\"transitionend\", onTransitionEnd);\n\n // Stop all animations\n [\n component.animationId,\n component.wavyAnimationId,\n component.valueAnimationId,\n ].forEach((id) => {\n if (id) cancelAnimationFrame(id as number);\n });\n component.animationId =\n component.wavyAnimationId =\n component.valueAnimationId =\n null;\n\n return component;\n };\n\n // Add show method to component\n component.show = () => {\n component.element.classList.add(\n component.getClass(PROGRESS_CLASSES.TRANSITION)\n );\n component.element.style.display = \"\";\n component.element.style.opacity = \"0\";\n component.element.offsetHeight; // Force reflow\n component.element.style.opacity = \"1\";\n\n // Restart animations\n if (component.state?.indeterminate) {\n if (currentShape === \"wavy\" || !isCircular) {\n startWavyAnimation();\n } else {\n startIndeterminateAnimation();\n }\n } else if (currentShape === \"wavy\") {\n startWavyAnimation();\n }\n\n return component;\n };\n\n // Add isVisible method to component\n component.isVisible = () =>\n component.element.style.display !== \"none\" &&\n component.element.style.opacity !== \"0\";\n\n // Cleanup on destroy\n if (component.lifecycle) {\n const originalDestroy = component.lifecycle.destroy || (() => {});\n component.lifecycle.destroy = () => {\n if (resizeCleanup) resizeCleanup();\n if (themeChangeCleanup) themeChangeCleanup();\n\n // Stop all animations\n [\n component.animationId,\n component.wavyAnimationId,\n component.valueAnimationId,\n ].forEach((id) => {\n if (id) cancelAnimationFrame(id as number);\n });\n\n originalDestroy();\n };\n }\n\n // Expose animation methods\n Object.assign(component, {\n startWavyAnimation,\n stopWavyAnimation,\n startIndeterminateAnimation,\n stopIndeterminateAnimation,\n });\n\n return {\n ...component,\n canvas,\n get ctx() {\n return canvasContext?.ctx;\n },\n draw,\n resize,\n };\n };\n",
|
|
58
58
|
"// src/components/progress/features/state.ts - Canvas-compatible state management\n\nimport { ProgressConfig, ProgressShape } from \"../types\";\nimport { PROGRESS_CLASSES, PROGRESS_SHAPES } from \"../constants\";\nimport { addClass } from \"../../../core/dom\";\n\n/**\n * Progress component state\n */\ninterface ProgressState {\n value: number;\n max: number;\n buffer: number;\n indeterminate: boolean;\n thickness: number | string; // Allow both number and string for thickness\n shape: ProgressShape;\n labelFormatter: (value: number, max: number) => string;\n label?: HTMLElement;\n showLabel?: boolean;\n}\n\n/**\n * Component with lifecycle methods and canvas drawing\n */\ninterface ComponentWithLifecycle {\n element: HTMLElement;\n canvas?: HTMLCanvasElement;\n draw?: () => void;\n lifecycle?: {\n init?: () => void;\n destroy?: () => void;\n };\n getClass?: (name: string) => string;\n // API methods that may be available after full composition\n setIndeterminate?: (indeterminate: boolean) => unknown;\n setValue?: (value: number) => unknown;\n setBuffer?: (buffer: number) => unknown;\n setShape?: (shape: ProgressShape) => unknown;\n showLabel?: () => unknown;\n setThickness?: (thickness: number | string) => unknown;\n state?: ProgressState;\n [key: string]: any;\n}\n\n/**\n * Adds state management for canvas-based progress component\n *\n * @param config Progress configuration\n * @returns Component enhancer with state management\n */\nexport const withState =\n (config: ProgressConfig) =>\n (\n component: ComponentWithLifecycle\n ): ComponentWithLifecycle & { state: ProgressState } => {\n // Apply indeterminate class immediately if needed\n if (config.indeterminate && component.element) {\n addClass(component.element, PROGRESS_CLASSES.INDETERMINATE);\n component.element.removeAttribute(\"aria-valuenow\");\n }\n\n // Remove any existing thickness classes - we'll handle thickness via canvas\n if (component.element) {\n const containerClass =\n component.getClass?.(PROGRESS_CLASSES.CONTAINER) || \"\";\n component.element.classList.remove(\n `${containerClass}--thin`,\n `${containerClass}--thick`\n );\n }\n\n // Apply shape class immediately if needed (linear only)\n if (\n config.shape &&\n config.shape !== PROGRESS_SHAPES.FLAT &&\n component.element\n ) {\n const isCircular = component.element.classList.contains(\n component.getClass?.(PROGRESS_CLASSES.CIRCULAR) || \"\"\n );\n if (!isCircular) {\n const containerClass =\n component.getClass?.(PROGRESS_CLASSES.CONTAINER) || \"\";\n addClass(component.element, `${containerClass}--${config.shape}`);\n }\n }\n\n // Initialize state values\n const state: ProgressState = {\n value: config.value ?? 0,\n max: config.max ?? 100,\n buffer: config.buffer ?? 0,\n indeterminate: config.indeterminate === true,\n // Store thickness as is (string or number) to maintain the original value\n thickness: config.thickness ?? \"thin\",\n shape: config.shape ?? PROGRESS_SHAPES.FLAT,\n labelFormatter:\n config.labelFormatter ??\n ((v: number, m: number): string => `${Math.round((v / m) * 100)}%`),\n showLabel: config.showLabel,\n };\n\n // Store original lifecycle hooks if they exist\n const originalInit = component.lifecycle?.init;\n const originalDestroy = component.lifecycle?.destroy;\n\n // Add state to component\n component.state = state;\n\n // Add lifecycle hooks\n component.lifecycle = {\n init: () => {\n // Schedule API initialization for next frame\n // This ensures all features and API methods are properly attached\n requestAnimationFrame(() => {\n try {\n // Initialize API state based on configuration\n if (state.indeterminate) {\n component.setIndeterminate?.(true);\n } else {\n component.setValue?.(state.value);\n if (config.buffer !== undefined) {\n component.setBuffer?.(state.buffer);\n }\n }\n\n // Set initial shape if configured (and not default)\n if (state.shape !== PROGRESS_SHAPES.FLAT && component.setShape) {\n component.setShape(state.shape);\n }\n\n // Initialize thickness\n if (state.thickness) {\n // If API is available, use it to set thickness\n if (component.setThickness) {\n component.setThickness(state.thickness);\n } else {\n // Otherwise, just store it in state and let canvas handle it\n component.state.thickness = state.thickness;\n }\n }\n } catch (error) {\n console.error(\"Error initializing progress state:\", error);\n }\n });\n\n if (originalInit) originalInit();\n },\n destroy: () => {\n if (originalDestroy) originalDestroy();\n },\n };\n\n return {\n ...component,\n state,\n };\n };\n",
|
|
59
|
-
"// src/components/progress/api.ts - Canvas-based API\n\nimport { ProgressComponent, ProgressThickness, ProgressShape } from \"./types\";\nimport {\n PROGRESS_CLASSES,\n PROGRESS_EVENTS,\n PROGRESS_THICKNESS,\n PROGRESS_SHAPES,\n} from \"./constants\";\nimport { addClass, removeClass } from \"../../core/dom\";\n\n/**\n * Canvas component interface for API\n */\ninterface CanvasComponent {\n element: HTMLElement;\n canvas: HTMLCanvasElement;\n getClass: (name: string) => string;\n label?: HTMLElement;\n state?: {\n label?: HTMLElement;\n showLabel?: boolean;\n value?: number;\n max?: number;\n buffer?: number;\n indeterminate?: boolean;\n thickness?: number | string;\n shape?: ProgressShape;\n labelFormatter?: (value: number, max: number) => string;\n };\n draw?: () => void;\n setThickness?: (thickness: ProgressThickness) => void;\n setShape?: (shape: ProgressShape) => void;\n setValue?: (value: number, animate: boolean) => void;\n setSize?: (size: number) => void;\n getSize?: () => number | undefined;\n hide?: () => void;\n show?: () => void;\n isVisible?: () => boolean;\n startIndeterminateAnimation?: () => void;\n stopIndeterminateAnimation?: () => void;\n}\n\n/**\n * API configuration options for canvas-based progress component\n */\ninterface ApiOptions {\n value: {\n getValue: () => number;\n setValue: (value: number) => void;\n getMax: () => number;\n };\n buffer: {\n getBuffer: () => number;\n setBuffer: (value: number) => void;\n };\n disabled: {\n enable: () => void;\n disable: () => void;\n isDisabled: () => boolean;\n };\n label: {\n show?: () => void;\n hide?: () => void;\n format?: (formatter: (value: number, max: number) => string) => void;\n formatter?: (value: number, max: number) => string;\n };\n thickness?: {\n getThickness: () => number;\n setThickness: (thickness: ProgressThickness) => void;\n };\n shape?: {\n getShape: () => ProgressShape;\n setShape: (shape: ProgressShape) => void;\n };\n state: {\n setIndeterminate: (indeterminate: boolean) => void;\n isIndeterminate: () => boolean;\n };\n lifecycle: {\n destroy: () => void;\n };\n}\n\n/**\n * Enhances a canvas-based progress component with a streamlined API\n */\nexport const withAPI =\n (options: ApiOptions) =>\n (comp: CanvasComponent): ProgressComponent => {\n // Get element references\n const { element, getClass, canvas } = comp;\n\n // Determine variant once\n const isCircular = element.classList.contains(\n getClass(PROGRESS_CLASSES.CIRCULAR)\n );\n\n // Create event emitter helper\n const emitEvent = (name: string, detail: Record<string, unknown>): void => {\n element.dispatchEvent(new CustomEvent(name, { detail }));\n };\n\n // Update progress and redraw canvas\n const updateProgress = (value: number, max: number): void => {\n // Update ARIA attribute\n element.setAttribute(\"aria-valuenow\", value.toString());\n\n // Update label if present\n const label = comp.label;\n if (label) {\n const formatter =\n options.label?.formatter ||\n ((v: number, m: number) => `${Math.round((v / m) * 100)}%`);\n label.textContent = formatter(value, max);\n }\n\n // Redraw canvas using component's draw function\n if (typeof comp.draw === \"function\") {\n comp.draw();\n }\n };\n\n // Handle indeterminate state by toggling CSS classes and animations\n const handleIndeterminateState = (indeterminate: boolean): void => {\n if (indeterminate) {\n addClass(element, PROGRESS_CLASSES.INDETERMINATE);\n element.removeAttribute(\"aria-valuenow\");\n\n // Start indeterminate animation for linear progress (if not wavy)\n if (!isCircular) {\n const currentShape =\n options.shape?.getShape() || PROGRESS_SHAPES.FLAT;\n if (currentShape !== \"wavy\" && comp.startIndeterminateAnimation) {\n comp.startIndeterminateAnimation();\n }\n }\n } else {\n removeClass(element, PROGRESS_CLASSES.INDETERMINATE);\n\n // Stop indeterminate animation (but keep wavy animation if shape is wavy)\n if (comp.stopIndeterminateAnimation) {\n comp.stopIndeterminateAnimation();\n }\n }\n\n // Always redraw for state change\n if (typeof comp.draw === \"function\") {\n comp.draw();\n }\n };\n\n // Initialize indeterminate state if needed\n if (options.state.isIndeterminate()) {\n handleIndeterminateState(true);\n }\n\n // Build the API\n const api: ProgressComponent = {\n // Element references\n element,\n track: canvas as unknown as SVGElement,\n indicator: canvas as unknown as SVGElement,\n buffer: canvas as unknown as SVGElement,\n getClass,\n\n // Value management\n getValue() {\n return options.value.getValue();\n },\n\n setValue(value: number, animate: boolean = true): ProgressComponent {\n const prevValue = options.value.getValue();\n const max = options.value.getMax();\n options.value.setValue(value);\n if (prevValue !== value) {\n // Don't call updateProgress here as comp.setValue will handle the drawing\n // Only update ARIA and label here\n element.setAttribute(\"aria-valuenow\", value.toString());\n\n // Update label if present\n const label = comp.label;\n if (label) {\n const formatter =\n options.label?.formatter ||\n ((v: number, m: number) => `${Math.round((v / m) * 100)}%`);\n label.textContent = formatter(value, max);\n }\n\n const detail = { value, max };\n emitEvent(PROGRESS_EVENTS.CHANGE, detail);\n\n // Call the component's setValue to handle animation and completion\n if (comp.setValue && typeof comp.setValue === \"function\") {\n comp.setValue(value, animate);\n } else {\n // Fallback: update progress immediately\n updateProgress(value, max);\n }\n }\n\n return api;\n },\n\n getMax() {\n return options.value.getMax();\n },\n\n // Buffer management\n getBuffer: () => options.buffer.getBuffer(),\n setBuffer(value: number): ProgressComponent {\n options.buffer.setBuffer(value);\n if (\n !options.state.isIndeterminate() &&\n typeof comp.draw === \"function\"\n ) {\n comp.draw();\n }\n return api;\n },\n\n // Indeterminate state\n setIndeterminate(indeterminate: boolean): ProgressComponent {\n const wasIndeterminate = options.state.isIndeterminate();\n if (wasIndeterminate === indeterminate) return api;\n\n options.state.setIndeterminate(indeterminate);\n handleIndeterminateState(indeterminate);\n\n return api;\n },\n isIndeterminate: () => options.state.isIndeterminate(),\n\n // Label management\n showLabel(): ProgressComponent {\n if (options.label?.show) options.label.show();\n return api;\n },\n hideLabel(): ProgressComponent {\n if (options.label?.hide) options.label.hide();\n return api;\n },\n setLabelFormatter(\n formatter: (value: number, max: number) => string\n ): ProgressComponent {\n if (options.label?.format) options.label.format(formatter);\n const label = comp.label || comp.state?.label;\n if (label) {\n label.textContent = formatter(\n options.value.getValue(),\n options.value.getMax()\n );\n }\n return api;\n },\n\n // Thickness and shape management\n getThickness(): number {\n return options.thickness?.getThickness() || PROGRESS_THICKNESS.THIN;\n },\n setThickness(thickness: ProgressThickness): ProgressComponent {\n // Update internal state\n if (options.thickness) {\n options.thickness.setThickness(thickness);\n }\n\n // Call component's setThickness to update canvas\n if (comp.setThickness) {\n comp.setThickness(thickness);\n }\n\n return api;\n },\n getShape(): ProgressShape {\n if (options.shape && typeof options.shape.getShape === \"function\") {\n return options.shape.getShape();\n }\n return PROGRESS_SHAPES.FLAT;\n },\n setShape(shape: ProgressShape): ProgressComponent {\n comp.setShape?.(shape);\n return api;\n },\n\n // Size management (circular only)\n setSize(size: number): ProgressComponent {\n if (comp.setSize) {\n comp.setSize(size);\n }\n return api;\n },\n getSize(): number | undefined {\n return comp.getSize ? comp.getSize() : undefined;\n },\n\n // State management\n enable(): ProgressComponent {\n options.disabled.enable();\n return api;\n },\n disable(): ProgressComponent {\n options.disabled.disable();\n return api;\n },\n isDisabled: options.disabled.isDisabled,\n\n // Visibility management\n hide(): ProgressComponent {\n if (comp.hide) {\n comp.hide();\n }\n return api;\n },\n show(): ProgressComponent {\n if (comp.show) {\n comp.show();\n }\n return api;\n },\n isVisible(): boolean {\n return comp.isVisible\n ? comp.isVisible()\n : element.style.display !== \"none\";\n },\n\n // Event handling\n on(event: string, handler: Function): ProgressComponent {\n element.addEventListener(event, handler as EventListener);\n return api;\n },\n off(event: string, handler: Function): ProgressComponent {\n element.removeEventListener(event, handler as EventListener);\n return api;\n },\n\n // Extension methods\n addClass(...classes: string[]): ProgressComponent {\n classes.forEach((className) => element.classList.add(className));\n return api;\n },\n\n // Cleanup\n destroy(): void {\n options.lifecycle.destroy();\n },\n\n // Required property objects\n disabled: {\n enable(): void {\n options.disabled.enable();\n },\n disable(): void {\n options.disabled.disable();\n },\n isDisabled: options.disabled.isDisabled,\n },\n\n lifecycle: {\n destroy(): void {\n options.lifecycle.destroy();\n },\n },\n };\n\n // Initialize label if showLabel is true in config\n if (comp.state?.showLabel === true) {\n // Call the show method to create and display the label\n if (options.label?.show) {\n options.label.show();\n }\n }\n\n return api;\n };\n",
|
|
59
|
+
"// src/components/progress/api.ts - Canvas-based API\n\nimport { ProgressComponent, ProgressThickness, ProgressShape } from \"./types\";\nimport {\n PROGRESS_CLASSES,\n PROGRESS_EVENTS,\n PROGRESS_THICKNESS,\n PROGRESS_SHAPES,\n} from \"./constants\";\nimport { addClass, removeClass } from \"../../core/dom\";\n\n/**\n * Canvas component interface for API\n */\ninterface CanvasComponent {\n element: HTMLElement;\n canvas: HTMLCanvasElement;\n getClass: (name: string) => string;\n label?: HTMLElement;\n state?: {\n label?: HTMLElement;\n showLabel?: boolean;\n value?: number;\n max?: number;\n buffer?: number;\n indeterminate?: boolean;\n thickness?: number | string;\n shape?: ProgressShape;\n labelFormatter?: (value: number, max: number) => string;\n };\n draw?: () => void;\n setThickness?: (thickness: ProgressThickness) => void;\n setShape?: (shape: ProgressShape) => void;\n setValue?: (value: number, animate: boolean) => void;\n setSize?: (size: number) => void;\n getSize?: () => number | undefined;\n hide?: () => void;\n show?: () => void;\n isVisible?: () => boolean;\n startIndeterminateAnimation?: () => void;\n stopIndeterminateAnimation?: () => void;\n}\n\n/**\n * API configuration options for canvas-based progress component\n */\ninterface ApiOptions {\n value: {\n getValue: () => number;\n setValue: (value: number) => void;\n getMax: () => number;\n };\n buffer: {\n getBuffer: () => number;\n setBuffer: (value: number) => void;\n };\n disabled: {\n enable: () => void;\n disable: () => void;\n isDisabled: () => boolean;\n };\n label: {\n show?: () => void;\n hide?: () => void;\n format?: (formatter: (value: number, max: number) => string) => void;\n formatter?: (value: number, max: number) => string;\n };\n thickness?: {\n getThickness: () => number;\n setThickness: (thickness: ProgressThickness) => void;\n };\n shape?: {\n getShape: () => ProgressShape;\n setShape: (shape: ProgressShape) => void;\n };\n state: {\n setIndeterminate: (indeterminate: boolean) => void;\n isIndeterminate: () => boolean;\n };\n lifecycle: {\n destroy: () => void;\n };\n}\n\n/**\n * Enhances a canvas-based progress component with a streamlined API\n */\nexport const withAPI =\n (options: ApiOptions) =>\n (comp: CanvasComponent): ProgressComponent => {\n // Get element references\n const { element, getClass, canvas } = comp;\n\n // Determine variant once\n const isCircular = element.classList.contains(\n getClass(PROGRESS_CLASSES.CIRCULAR),\n );\n\n // Create event emitter helper\n const emitEvent = (name: string, detail: Record<string, unknown>): void => {\n element.dispatchEvent(new CustomEvent(name, { detail }));\n };\n\n // Update progress and redraw canvas\n const updateProgress = (value: number, max: number): void => {\n // Update ARIA attribute\n element.setAttribute(\"aria-valuenow\", value.toString());\n\n // Update label if present\n const label = comp.label;\n if (label) {\n const formatter =\n options.label?.formatter ||\n ((v: number, m: number) => `${Math.round((v / m) * 100)}%`);\n label.textContent = formatter(value, max);\n }\n\n // Redraw canvas using component's draw function\n if (typeof comp.draw === \"function\") {\n comp.draw();\n }\n };\n\n // Handle indeterminate state by toggling CSS classes and animations\n const handleIndeterminateState = (indeterminate: boolean): void => {\n if (indeterminate) {\n addClass(element, PROGRESS_CLASSES.INDETERMINATE);\n element.removeAttribute(\"aria-valuenow\");\n\n // Start indeterminate animation for linear progress (if not wavy)\n if (!isCircular) {\n const currentShape =\n options.shape?.getShape() || PROGRESS_SHAPES.FLAT;\n if (currentShape !== \"wavy\" && comp.startIndeterminateAnimation) {\n comp.startIndeterminateAnimation();\n }\n }\n } else {\n removeClass(element, PROGRESS_CLASSES.INDETERMINATE);\n\n // Stop indeterminate animation (but keep wavy animation if shape is wavy)\n if (comp.stopIndeterminateAnimation) {\n comp.stopIndeterminateAnimation();\n }\n }\n\n // Always redraw for state change\n if (typeof comp.draw === \"function\") {\n comp.draw();\n }\n };\n\n // Initialize indeterminate state if needed\n if (options.state.isIndeterminate()) {\n handleIndeterminateState(true);\n }\n\n // Build the API\n const api: ProgressComponent = {\n // Element references\n element,\n track: canvas as unknown as SVGElement,\n indicator: canvas as unknown as SVGElement,\n buffer: canvas as unknown as SVGElement,\n getClass,\n\n // Value management\n getValue() {\n return options.value.getValue();\n },\n\n setValue(value: number, animate: boolean = true): ProgressComponent {\n const prevValue = options.value.getValue();\n const max = options.value.getMax();\n options.value.setValue(value);\n if (prevValue !== value) {\n // Don't call updateProgress here as comp.setValue will handle the drawing\n // Only update ARIA and label here\n element.setAttribute(\"aria-valuenow\", value.toString());\n\n // Update label if present\n const label = comp.label;\n if (label) {\n const formatter =\n options.label?.formatter ||\n ((v: number, m: number) => `${Math.round((v / m) * 100)}%`);\n label.textContent = formatter(value, max);\n }\n\n const detail = { value, max };\n emitEvent(PROGRESS_EVENTS.CHANGE, detail);\n\n // Call the component's setValue to handle animation and completion\n if (comp.setValue && typeof comp.setValue === \"function\") {\n comp.setValue(value, animate);\n } else {\n // Fallback: update progress immediately\n updateProgress(value, max);\n }\n }\n\n return api;\n },\n\n getMax() {\n return options.value.getMax();\n },\n\n // Buffer management\n getBuffer: () => options.buffer.getBuffer(),\n setBuffer(value: number): ProgressComponent {\n options.buffer.setBuffer(value);\n if (\n !options.state.isIndeterminate() &&\n typeof comp.draw === \"function\"\n ) {\n comp.draw();\n }\n return api;\n },\n\n // Indeterminate state\n setIndeterminate(indeterminate: boolean): ProgressComponent {\n const wasIndeterminate = options.state.isIndeterminate();\n if (wasIndeterminate === indeterminate) return api;\n\n options.state.setIndeterminate(indeterminate);\n handleIndeterminateState(indeterminate);\n\n return api;\n },\n isIndeterminate: () => options.state.isIndeterminate(),\n\n // Label management\n showLabel(): ProgressComponent {\n if (options.label?.show) options.label.show();\n return api;\n },\n hideLabel(): ProgressComponent {\n if (options.label?.hide) options.label.hide();\n return api;\n },\n setLabelFormatter(\n formatter: (value: number, max: number) => string,\n ): ProgressComponent {\n if (options.label?.format) options.label.format(formatter);\n const label = comp.label || comp.state?.label;\n if (label) {\n label.textContent = formatter(\n options.value.getValue(),\n options.value.getMax(),\n );\n }\n return api;\n },\n\n // Thickness and shape management\n getThickness(): number {\n return options.thickness?.getThickness() || PROGRESS_THICKNESS.THIN;\n },\n setThickness(thickness: ProgressThickness): ProgressComponent {\n // Update internal state\n if (options.thickness) {\n options.thickness.setThickness(thickness);\n }\n\n // Call component's setThickness to update canvas\n if (comp.setThickness) {\n comp.setThickness(thickness);\n }\n\n return api;\n },\n getShape(): ProgressShape {\n if (options.shape && typeof options.shape.getShape === \"function\") {\n return options.shape.getShape();\n }\n return PROGRESS_SHAPES.FLAT;\n },\n setShape(shape: ProgressShape): ProgressComponent {\n comp.setShape?.(shape);\n return api;\n },\n\n // Size management (circular only)\n setSize(size: number): ProgressComponent {\n if (comp.setSize) {\n comp.setSize(size);\n }\n return api;\n },\n getSize(): number | undefined {\n return comp.getSize ? comp.getSize() : undefined;\n },\n\n // State management\n enable(): ProgressComponent {\n options.disabled.enable();\n return api;\n },\n disable(): ProgressComponent {\n options.disabled.disable();\n return api;\n },\n isDisabled: options.disabled.isDisabled,\n\n // Visibility management\n hide(): ProgressComponent {\n if (comp.hide) {\n comp.hide();\n }\n return api;\n },\n show(): ProgressComponent {\n if (comp.show) {\n comp.show();\n }\n return api;\n },\n isVisible(): boolean {\n return comp.isVisible\n ? comp.isVisible()\n : element.style.display !== \"none\";\n },\n\n // Event handling\n on(event: string, handler: Function): ProgressComponent {\n element.addEventListener(event, handler as EventListener);\n return api;\n },\n off(event: string, handler: Function): ProgressComponent {\n element.removeEventListener(event, handler as EventListener);\n return api;\n },\n\n // Extension methods\n addClass(...classes: string[]): ProgressComponent {\n classes.forEach((className) => element.classList.add(className));\n return api;\n },\n\n // Paint synchronization\n painted(): Promise<void> {\n return new Promise((resolve) =>\n requestAnimationFrame(() => requestAnimationFrame(() => resolve())),\n );\n },\n\n // Cleanup\n destroy(): void {\n options.lifecycle.destroy();\n },\n\n // Required property objects\n disabled: {\n enable(): void {\n options.disabled.enable();\n },\n disable(): void {\n options.disabled.disable();\n },\n isDisabled: options.disabled.isDisabled,\n },\n\n lifecycle: {\n destroy(): void {\n options.lifecycle.destroy();\n },\n },\n };\n\n // Initialize label if showLabel is true in config\n if (comp.state?.showLabel === true) {\n // Call the show method to create and display the label\n if (options.label?.show) {\n options.label.show();\n }\n }\n\n return api;\n };\n",
|
|
60
60
|
"// src/components/progress/config.ts - Simplified for canvas\n\nimport {\n createComponentConfig,\n createElementConfig,\n} from \"../../core/config/component\";\nimport { ProgressConfig, ProgressThickness, ProgressShape } from \"./types\";\nimport {\n PROGRESS_CLASSES,\n PROGRESS_VARIANTS,\n PROGRESS_SHAPES,\n PROGRESS_THICKNESS,\n PROGRESS_DEFAULTS,\n} from \"./constants\";\n\n/**\n * Default configuration for the Progress component\n */\nexport const defaultConfig: ProgressConfig = {\n variant: PROGRESS_DEFAULTS.VARIANT,\n value: PROGRESS_DEFAULTS.VALUE,\n max: PROGRESS_DEFAULTS.MAX,\n buffer: PROGRESS_DEFAULTS.BUFFER,\n showLabel: PROGRESS_DEFAULTS.SHOW_LABEL,\n thickness: \"thin\",\n shape: PROGRESS_DEFAULTS.SHAPE,\n};\n\n/**\n * Creates the base configuration for the Progress component\n * with all defaults applied (no complex schema needed for canvas)\n *\n * @param config User-provided configuration\n * @returns Complete configuration with defaults\n */\nexport const createBaseConfig = (\n config: ProgressConfig = {}\n): ProgressConfig => {\n // Create configuration with defaults - no schema needed for canvas approach\n return createComponentConfig(\n defaultConfig,\n config,\n \"progress\"\n ) as ProgressConfig;\n};\n\n/**\n * Generates element configuration for the Progress container\n * Canvas will be added by withCanvas feature\n *\n * @param {ProgressConfig} config - Progress configuration\n * @returns {Object} Element configuration object for withElement\n */\nexport const getElementConfig = (config: ProgressConfig) => {\n const isIndeterminate = config.indeterminate === true;\n const isCircular = config.variant === PROGRESS_VARIANTS.CIRCULAR;\n\n // Create the attributes object\n const attributes: Record<string, any> = {\n role: \"progressbar\",\n \"aria-valuemin\": \"0\",\n \"aria-valuemax\": (config.max || 100).toString(),\n };\n\n // Only add aria-valuenow if not indeterminate\n if (!isIndeterminate && config.value !== undefined) {\n attributes[\"aria-valuenow\"] = config.value.toString();\n }\n\n // Only add disabled attribute if it's explicitly true\n if (config.disabled === true) {\n attributes[\"aria-disabled\"] = \"true\";\n }\n\n // Build class list\n const classList = [\n config.class,\n PROGRESS_CLASSES.CONTAINER,\n isCircular ? PROGRESS_CLASSES.CIRCULAR : PROGRESS_CLASSES.LINEAR,\n ].filter(Boolean);\n\n // Add shape class for linear progress\n if (!isCircular && config.shape && config.shape !== PROGRESS_SHAPES.FLAT) {\n classList.push(`${PROGRESS_CLASSES.CONTAINER}--${config.shape}`);\n }\n\n return createElementConfig(config, {\n tag: \"div\",\n attributes,\n className: classList,\n });\n};\n\n/**\n * Creates API configuration for the Progress component\n */\nexport const getApiConfig = (comp) => {\n // Use component's state directly\n if (!comp.state) {\n comp.state = {\n value: 0,\n max: 100,\n buffer: 0,\n indeterminate: false,\n thickness: \"thin\",\n shape: PROGRESS_DEFAULTS.SHAPE,\n labelFormatter: (v, m) => `${Math.round((v / m) * 100)}%`,\n };\n }\n\n return {\n value: {\n getValue: () => comp.state.value,\n setValue: (value: number) => {\n if (comp.state) {\n // Clamp value between 0 and max\n const clampedValue = Math.max(0, Math.min(comp.state.max, value));\n // Store the previous value for animation\n comp.state.previousValue = comp.state.value;\n // Update the state value\n comp.state.value = clampedValue;\n // Update label if it exists\n if (comp.state.label) {\n comp.state.label.textContent = comp.state.labelFormatter(\n clampedValue,\n comp.state.max\n );\n }\n // Trigger animation through canvas component\n if (typeof comp.setValue === \"function\") {\n comp.setValue(clampedValue);\n } else if (comp.draw) {\n // Fallback to immediate redraw if setValue is not available\n comp.draw();\n }\n }\n },\n getMax: () => comp.state.max,\n },\n buffer: {\n getBuffer: () => comp.state.buffer,\n setBuffer: (value: number) => {\n comp.state.buffer = Math.max(0, Math.min(comp.state.max, value));\n },\n },\n disabled: {\n enable: () => comp.disabled?.enable?.() || undefined,\n disable: () => comp.disabled?.disable?.() || undefined,\n isDisabled: () => comp.disabled?.isDisabled?.() || false,\n },\n label: {\n show: () => {\n if (!comp.state.label) {\n const label = document.createElement(\"div\");\n label.className = `${comp.getClass(PROGRESS_CLASSES.LABEL)}`;\n label.textContent = comp.state.labelFormatter(\n comp.state.value,\n comp.state.max\n );\n comp.element.appendChild(label);\n comp.state.label = label;\n comp.label = label;\n }\n },\n hide: () => {\n if (comp.state.label) {\n comp.state.label.remove();\n comp.state.label = undefined;\n comp.label = undefined;\n }\n },\n format: (formatter) => {\n comp.state.labelFormatter = formatter;\n },\n formatter: comp.state.labelFormatter,\n },\n thickness: {\n getThickness: () => {\n const thickness = comp.state.thickness;\n if (thickness === \"thin\") {\n return PROGRESS_THICKNESS.THIN;\n } else if (thickness === \"thick\") {\n return PROGRESS_THICKNESS.THICK;\n } else if (typeof thickness === \"number\") {\n return thickness;\n }\n return PROGRESS_THICKNESS.THIN;\n },\n setThickness: (thickness: ProgressThickness) => {\n comp.state.thickness = thickness;\n if (comp.draw) {\n comp.draw();\n }\n },\n },\n shape: {\n getShape: () => comp.state.shape,\n setShape: (shape: ProgressShape) => {\n comp.state.shape = shape;\n if (comp.setShape) {\n comp.setShape(shape);\n }\n },\n },\n state: {\n setIndeterminate: (indeterminate: boolean) => {\n if (comp.state) {\n comp.state.indeterminate = indeterminate;\n if (typeof comp.setIndeterminate === \"function\") {\n comp.setIndeterminate(indeterminate);\n } else if (comp.draw) {\n comp.draw();\n }\n }\n },\n isIndeterminate: () => comp.state.indeterminate,\n },\n lifecycle: {\n destroy: () => comp.lifecycle?.destroy?.() || undefined,\n },\n };\n};\n\nexport default defaultConfig;\n",
|
|
61
61
|
"// src/components/progress/progress.ts\n\nimport { pipe } from \"../../core/compose\";\nimport { createBase, withElement } from \"../../core/compose/component\";\nimport {\n withEvents,\n withVariant,\n withDisabled,\n withLifecycle,\n} from \"../../core/compose/features\";\nimport { withCanvas } from \"./features/canvas\";\nimport { withState } from \"./features/state\";\nimport { withAPI } from \"./api\";\nimport { ProgressConfig, ProgressComponent } from \"./types\";\nimport { createBaseConfig, getElementConfig, getApiConfig } from \"./config\";\n\n/**\n * Creates a new Progress component using canvas rendering\n * @param {ProgressConfig} config - Progress configuration object\n * @returns {ProgressComponent} Progress component instance\n *\n * @example\n * ```ts\n * // Create a linear determinate progress bar\n * const progress = createProgress({\n * variant: 'linear',\n * value: 42,\n * showLabel: true\n * });\n *\n * // Create an indeterminate circular progress\n * const loader = createProgress({\n * variant: 'circular',\n * indeterminate: true\n * });\n * ```\n */\nconst createProgress = (config: ProgressConfig = {}): ProgressComponent => {\n // Create base configuration\n const baseConfig = createBaseConfig(config);\n\n try {\n // Create the component with the pipe pattern using canvas instead of complex DOM\n const component = pipe(\n createBase,\n withEvents(),\n withElement(getElementConfig(baseConfig)), // Simple container element\n withVariant(baseConfig), // Add variant classes\n withDisabled(baseConfig), // Add disabled state\n withState(baseConfig), // Add state management first\n withCanvas(baseConfig), // Add canvas rendering after state\n (comp) => {\n // Add API after both state and canvas\n return withAPI(getApiConfig(comp))(comp);\n },\n withLifecycle()\n )(baseConfig);\n\n // Initialize the component lifecycle if it has an init method\n if (component.lifecycle?.init) {\n component.lifecycle.init();\n }\n\n return component;\n } catch (error) {\n console.error(\"Progress creation error:\", error);\n throw new Error(`Failed to create progress: ${(error as Error).message}`);\n }\n};\n\nexport default createProgress;\n",
|
|
62
62
|
"// src/components/button/features/progress.ts\nimport type { ProgressConfig, ProgressComponent } from \"../../progress/types\";\nimport { addClass, removeClass } from \"../../../core/dom\";\nimport { ButtonConfig } from \"../types\";\n\n/**\n * Component with progress capabilities\n */\ninterface ProgressEnhancedComponent {\n element: HTMLElement;\n icon?: any;\n getClass: (name: string) => string;\n progress?: ProgressComponent;\n disabled?: {\n enable: () => void;\n disable: () => void;\n };\n setText?: (text: string) => any;\n getText?: () => string;\n [key: string]: any;\n}\n\n/**\n * Dynamically imports and creates a progress component\n * @param config Progress configuration\n * @returns Promise resolving to the progress component\n */\nconst createProgressLazy = async (\n config: ProgressConfig\n): Promise<ProgressComponent> => {\n // Dynamic import directly from progress.ts to avoid index re-exports\n const { default: createProgress } = await import(\"../../progress/progress\");\n return createProgress(config);\n};\n\n/**\n * Adds progress functionality to a button component\n *\n * @param config - Button configuration with progress options\n * @returns Component enhancer function\n */\nexport const withProgress =\n (config: ButtonConfig) =>\n (component: ProgressEnhancedComponent): ProgressEnhancedComponent => {\n // Skip if no progress config\n if (!config.progress) {\n return component;\n }\n\n // Extract event handlers if present\n let progressEventHandlers: Record<string, Function> = {};\n\n // Determine progress configuration\n const progressConfig: ProgressConfig =\n typeof config.progress === \"boolean\"\n ? { variant: \"circular\", size: 20, thickness: 2, indeterminate: true }\n : (() => {\n const { on, ...restConfig } = config.progress as any;\n if (on) {\n progressEventHandlers = on;\n }\n return {\n variant: \"circular\",\n size: 20,\n thickness: 2,\n indeterminate: true,\n ...restConfig,\n };\n })();\n\n // Progress will be created lazily\n let progress: ProgressComponent | null = null;\n let progressPromise: Promise<ProgressComponent> | null = null;\n let isLoading = false;\n let originalText = \"\";\n\n // Helper to ensure progress is loaded\n const ensureProgress = async (): Promise<ProgressComponent> => {\n if (progress) return progress;\n\n if (!progressPromise) {\n progressPromise = createProgressLazy(progressConfig).then((p) => {\n progress = p;\n\n // Add button-specific class to the progress element\n addClass(progress.element, component.getClass(\"button-progress\"));\n\n // Initially hide progress\n progress.element.style.display = \"none\";\n\n // Attach event handlers if any were provided\n Object.entries(progressEventHandlers).forEach(([event, handler]) => {\n progress!.on(event, handler);\n });\n\n // Store progress reference\n component.progress = progress;\n\n return progress;\n });\n }\n\n return progressPromise;\n };\n\n // Helper to get insertion point for progress\n const getProgressInsertionPoint = () => {\n // Try to insert after icon if it exists\n const iconElement = component.element.querySelector(\n `.${component.getClass(\"button-icon\")}`\n );\n if (iconElement && iconElement.nextSibling) {\n return iconElement.nextSibling;\n }\n\n // Otherwise insert at the beginning\n return component.element.firstChild;\n };\n\n // Add progress methods that lazy-load the progress component\n component.showProgress = async function () {\n const p = await ensureProgress();\n\n if (p.element) {\n // Ensure progress element is in the DOM\n if (!component.element.contains(p.element)) {\n const insertPoint = getProgressInsertionPoint();\n if (insertPoint) {\n component.element.insertBefore(p.element, insertPoint);\n } else {\n component.element.appendChild(p.element);\n }\n }\n\n p.element.style.display = \"\";\n addClass(\n component.element,\n `${component.getClass(\"button\")}--progress`\n );\n\n // Hide the icon if it exists\n const iconElement = component.element.querySelector(\n `.${component.getClass(\"button-icon\")}`\n );\n if (iconElement instanceof HTMLElement) {\n iconElement.style.display = \"none\";\n }\n }\n return component;\n };\n\n // Synchronous wrapper for convenience\n component.showProgressSync = function () {\n component.showProgress();\n return component;\n };\n\n component.hideProgress = async function () {\n // If progress hasn't been created yet, just return\n if (!progress) return component;\n\n progress.element.style.display = \"none\";\n removeClass(\n component.element,\n `${component.getClass(\"button\")}--progress`\n );\n\n // Show the icon again if it exists\n const iconElement = component.element.querySelector(\n `.${component.getClass(\"button-icon\")}`\n );\n if (iconElement instanceof HTMLElement) {\n iconElement.style.display = \"\";\n }\n\n return component;\n };\n\n // Synchronous wrapper\n component.hideProgressSync = function () {\n component.hideProgress();\n return component;\n };\n\n component.setProgress = async function (value: number) {\n const p = await ensureProgress();\n p.setValue(value);\n return component;\n };\n\n // Synchronous wrapper\n component.setProgressSync = function (value: number) {\n component.setProgress(value);\n return component;\n };\n\n component.setIndeterminate = async function (indeterminate: boolean) {\n const p = await ensureProgress();\n p.setIndeterminate(indeterminate);\n return component;\n };\n\n // Synchronous wrapper\n component.setIndeterminateSync = function (indeterminate: boolean) {\n component.setIndeterminate(indeterminate);\n return component;\n };\n\n component.setLoading = async function (loading: boolean, text?: string) {\n if (loading && !isLoading) {\n // Store original text if we have setText method\n if (component.setText && component.getText) {\n originalText = component.getText();\n }\n isLoading = true;\n await component.showProgress();\n // Call disable on the internal disabled manager\n if (component.disabled?.disable) {\n component.disabled.disable();\n }\n if (text && component.setText) {\n component.setText(text);\n }\n } else if (!loading && isLoading) {\n isLoading = false;\n await component.hideProgress();\n // Call enable on the internal disabled manager\n if (component.disabled?.enable) {\n component.disabled.enable();\n }\n if (text && component.setText) {\n component.setText(text);\n } else if (originalText && component.setText) {\n component.setText(originalText);\n }\n }\n return component;\n };\n\n // Synchronous wrapper - most commonly used\n component.setLoadingSync = function (loading: boolean, text?: string) {\n component.setLoading(loading, text);\n return component;\n };\n\n // Update destroy to clean up progress if it was created\n if (component.lifecycle) {\n const originalDestroy = component.lifecycle.destroy;\n component.lifecycle.destroy = () => {\n if (progress) {\n progress.destroy();\n }\n if (progress && progress.element.parentNode) {\n progress.element.parentNode.removeChild(progress.element);\n }\n originalDestroy();\n };\n }\n\n // If showProgress is true, initialize immediately\n if (config.showProgress) {\n ensureProgress().then(() => {\n component.showProgress();\n });\n }\n\n return component;\n };\n",
|
|
@@ -73,7 +73,7 @@
|
|
|
73
73
|
"// src/components/button/config.ts\nimport {\n createComponentConfig,\n createElementConfig,\n} from \"../../core/config/component\";\nimport { ButtonConfig } from \"./types\";\nimport {\n BUTTON_VARIANTS,\n BUTTON_TYPES,\n DEFAULT_RIPPLE_CONFIG,\n BUTTON_SIZES,\n BUTTON_SHAPES,\n} from \"./constants\";\n\n/**\n * Default configuration for the Button component.\n * These values will be used when not explicitly specified by the user.\n *\n * @category Components\n */\nexport const defaultConfig: ButtonConfig = {\n variant: BUTTON_VARIANTS.FILLED,\n size: BUTTON_SIZES.S,\n shape: BUTTON_SHAPES.ROUND,\n disabled: false,\n type: BUTTON_TYPES.BUTTON,\n ripple: true, // Explicitly enable ripple effects by default\n rippleConfig: {\n duration: DEFAULT_RIPPLE_CONFIG.DURATION,\n timing: DEFAULT_RIPPLE_CONFIG.TIMING,\n opacity: DEFAULT_RIPPLE_CONFIG.OPACITY as [string, string],\n },\n};\n\n/**\n * Creates the base configuration for Button component by merging user-provided\n * config with default values. Global configuration is automatically applied\n * by createComponentConfig.\n *\n * @param {ButtonConfig} config - User provided configuration\n * @returns {ButtonConfig} Complete configuration with defaults applied\n * @category Components\n * @internal\n */\nexport const createBaseConfig = (config: ButtonConfig = {}): ButtonConfig =>\n createComponentConfig(defaultConfig, config, \"button\") as ButtonConfig;\n\n/**\n * Generates element configuration for the Button component.\n * This function creates the necessary attributes and configuration\n * for the DOM element creation process.\n *\n * @param {ButtonConfig} config - Button configuration\n * @returns {Object} Element configuration object for withElement\n * @category Components\n * @internal\n */\nexport const getElementConfig = (config: ButtonConfig) => {\n // Create the attributes object\n const attributes: Record<string, string | boolean | undefined> = {\n type: config.type || \"button\",\n };\n\n // Only add disabled attribute if it's explicitly true\n if (config.disabled === true) {\n attributes.disabled = true;\n }\n\n // Add value attribute only if it exists\n if (config.value !== undefined) {\n attributes.value = config.value;\n }\n\n // Add aria-label attribute for accessibility\n if (config.ariaLabel) {\n attributes[\"aria-label\"] = config.ariaLabel;\n }\n\n return createElementConfig(config, {\n tag: \"button\",\n attributes,\n className: config.class,\n forwardEvents: {\n click: (component: { element: HTMLButtonElement }) =>\n !component.element.disabled,\n focus: true,\n blur: true,\n },\n });\n};\n\n/**\n * Creates API configuration for the Button component.\n * This connects the core component features (like disabled state)\n * to the public API methods exposed to users.\n *\n * @param {Object} comp - Component with disabled and lifecycle features\n * @returns {Object} API configuration object\n * @category Components\n * @internal\n */\nexport const getApiConfig = (comp: {\n disabled: {\n enable: () => void;\n disable: () => void;\n isDisabled: () => boolean;\n };\n lifecycle: { destroy: () => void };\n}) => ({\n disabled: {\n enable: () => comp.disabled.enable(),\n disable: () => comp.disabled.disable(),\n isDisabled: () => comp.disabled.isDisabled(),\n },\n lifecycle: {\n destroy: () => comp.lifecycle.destroy(),\n },\n});\n\nexport default defaultConfig;\n",
|
|
74
74
|
"// src/components/button/button.ts\nimport { pipe } from \"../../core/compose\";\nimport { createBase, withElement } from \"../../core/compose/component\";\nimport {\n withEvents,\n withText,\n withIcon,\n withVariant,\n withSize,\n withRipple,\n withDisabled,\n withLifecycle,\n} from \"../../core/compose/features\";\nimport { withProgress } from \"./features/progress\";\nimport { withAPI } from \"./api\";\nimport { ButtonConfig } from \"./types\";\nimport { createBaseConfig, getElementConfig, getApiConfig } from \"./config\";\n\n/**\n * Creates a new Button component with the specified configuration.\n *\n * The Button component implements support for different variants, states, and features.\n * It follows accessibility best practices and provides a rich API for state management.\n *\n * The Button component is created using a functional composition pattern,\n * applying various features through the pipe function. This approach allows\n * for flexible and modular component construction.\n *\n * @param {ButtonConfig} config - Configuration options for the button\n * This can include text content, icon options, variant styling, disabled state,\n * and other button properties. See {@link ButtonConfig} for available options.\n *\n * @returns {ButtonComponent} A fully configured button component instance with\n * all requested features applied. The returned component has methods for\n * manipulation, event handling, and lifecycle management.\n *\n * @throws {Error} Throws an error if button creation fails for any reason\n *\n * @example\n * ```ts\n * // Create a button with integrated progress\n * const submitButton = createButton({\n * text: 'Submit',\n * variant: 'filled',\n * progress: {\n * variant: 'circular',\n * size: 18,\n * indeterminate: true\n * }\n * });\n *\n * // Create a square button with different sizes\n * const squareButton = createButton({\n * text: 'Square Button',\n * variant: 'tonal',\n * shape: 'square',\n * size: 'm' // Square buttons have size-specific corner radius\n * });\n *\n * // Synchronous usage (common for UI interactions)\n * submitButton.on('click', () => {\n * submitButton.setLoadingSync(true, 'Submitting...');\n *\n * // Simulate async work\n * setTimeout(() => {\n * submitButton.setLoadingSync(false, 'Submit');\n * }, 2000);\n * });\n *\n * // Asynchronous usage (when you need to ensure progress is loaded)\n * submitButton.on('click', async () => {\n * await submitButton.setLoading(true, 'Processing...');\n * await submitButton.setProgress(50);\n * // ... more async operations\n * await submitButton.setLoading(false, 'Done');\n * });\n * ```\n *\n * @category Components\n */\nconst createButton = (config: ButtonConfig = {}) => {\n const baseConfig = createBaseConfig(config);\n try {\n const button = pipe(\n createBase,\n withEvents(),\n withElement(getElementConfig(baseConfig)),\n withVariant(baseConfig),\n withSize(baseConfig),\n withText(baseConfig),\n withIcon(baseConfig),\n withDisabled(baseConfig),\n withProgress(baseConfig),\n withRipple(baseConfig),\n withLifecycle(),\n (component) => {\n if (baseConfig.shape && component.element) {\n const className = `${baseConfig.prefix}-${baseConfig.componentName}--${baseConfig.shape}`;\n component.element.classList.add(className);\n }\n return component;\n },\n (comp) => withAPI(getApiConfig(comp))(comp)\n )(baseConfig);\n return button;\n } catch (error) {\n console.error(\"Button creation error:\", error);\n throw new Error(`Failed to create button: ${(error as Error).message}`);\n }\n};\n\nexport default createButton;\n",
|
|
75
75
|
"// src/components/button/index.ts\n\n/**\n * Button component module\n * @module components/button\n */\n\nexport { default } from \"./button\";\nexport type { ButtonConfig, ButtonComponent, ButtonVariant } from \"./types\";\nexport type { ButtonSize, ButtonShape } from \"./constants\";\n",
|
|
76
|
-
"// src/components/index.ts\n/**\n * Component library exports\n *\n * This file exports all component creators and their types.\n * Constants are NOT re-exported here to enable proper tree-shaking.\n * Import constants directly from component paths if needed.\n *\n * @packageDocumentation\n */\n\n// ============================================================================\n// Component Creators\n// ============================================================================\n\nexport { default as createBadge } from \"./badge\";\nexport { default as createBottomAppBar } from \"./bottom-app-bar\";\nexport { default as createButton } from \"./button\";\nexport { default as createButtonGroup } from \"./button-group\";\nexport { default as createCard } from \"./card\";\nexport { default as createCarousel } from \"./carousel\";\nexport { default as createCheckbox } from \"./checkbox\";\nexport { createChip, createChips } from \"./chips\";\nexport { default as createDatePicker } from \"./datepicker\";\nexport { default as createDialog } from \"./dialog\";\nexport { createDivider } from \"./divider\";\nexport { default as
|
|
76
|
+
"// src/components/index.ts\n/**\n * Component library exports\n *\n * This file exports all component creators and their types.\n * Constants are NOT re-exported here to enable proper tree-shaking.\n * Import constants directly from component paths if needed.\n *\n * @packageDocumentation\n */\n\n// ============================================================================\n// Component Creators\n// ============================================================================\n\nexport { default as createBadge } from \"./badge\";\nexport { default as createBottomAppBar } from \"./bottom-app-bar\";\nexport { default as createButton } from \"./button\";\nexport { default as createButtonGroup } from \"./button-group\";\nexport { default as createCard } from \"./card\";\nexport { default as createCarousel } from \"./carousel\";\nexport { default as createCheckbox } from \"./checkbox\";\nexport { createChip, createChips } from \"./chips\";\nexport { default as createDatePicker } from \"./datepicker\";\nexport { default as createDialog } from \"./dialog\";\nexport { createDivider } from \"./divider\";\nexport { default as createDrawer } from \"./drawer\";\nexport { default as createFab } from \"./fab\";\nexport { default as createExtendedFab } from \"./extended-fab\";\nexport { default as createIconButton } from \"./icon-button\";\nexport { default as createList } from \"./list\";\nexport { default as createMenu } from \"./menu\";\n\nexport { default as createProgress } from \"./progress\";\nexport { default as createRadios } from \"./radios\";\nexport { default as createSearch } from \"./search\";\nexport { default as createSelect } from \"./select\";\nexport { default as createSegmentedButton } from \"./segmented-button\";\nexport { createSegment } from \"./segmented-button/segment\";\nexport { default as createSheet } from \"./sheet\";\nexport { default as createSlider } from \"./slider\";\nexport { default as createSnackbar } from \"./snackbar\";\nexport { default as createSwitch } from \"./switch\";\nexport { default as createTabs } from \"./tabs\";\nexport { createTab } from \"./tabs/tab\";\nexport { default as createTextfield } from \"./textfield\";\nexport { default as createTimePicker } from \"./timepicker\";\nexport { default as createTopAppBar } from \"./top-app-bar\";\nexport { default as createTooltip } from \"./tooltip\";\n\n// Card content components\nexport {\n createCardContent,\n createCardHeader,\n createCardActions,\n createCardMedia,\n} from \"./card/content\";\n\n// ============================================================================\n// Type Exports (these are erased at compile time, zero bundle impact)\n// ============================================================================\n\n// Badge\nexport type { BadgeConfig, BadgeComponent } from \"./badge/types\";\n\n// Bottom App Bar\nexport type { BottomAppBarConfig, BottomAppBar } from \"./bottom-app-bar/types\";\n\n// Button\nexport type {\n ButtonConfig,\n ButtonComponent,\n ButtonVariant,\n} from \"./button/types\";\n\n// Button Group\nexport type {\n ButtonGroupConfig,\n ButtonGroupComponent,\n ButtonGroupItemConfig,\n ButtonGroupEvent,\n ButtonGroupEventType,\n ButtonGroupVariant,\n ButtonGroupOrientation,\n ButtonGroupDensity,\n} from \"./button-group/types\";\n\n// Card\nexport type { CardSchema } from \"./card/types\";\n\n// Carousel\nexport type { CarouselConfig, CarouselComponent } from \"./carousel/types\";\n\n// Checkbox\nexport type { CheckboxConfig, CheckboxComponent } from \"./checkbox/types\";\n\n// Chips\nexport type {\n ChipConfig,\n ChipComponent,\n ChipVariant,\n ChipsConfig,\n ChipsComponent,\n} from \"./chips/types\";\n\n// Datepicker\nexport type { DatePickerConfig, DatePickerComponent } from \"./datepicker/types\";\n\n// Dialog\nexport type { DialogConfig, DialogComponent } from \"./dialog/types\";\n\n// Drawer\nexport type {\n DrawerConfig,\n DrawerComponent,\n DrawerVariant,\n DrawerPosition,\n DrawerItemConfig,\n DrawerSelectEvent,\n} from \"./drawer/types\";\n\n// Divider\nexport type { DividerConfig } from \"./divider/config\";\nexport type { DividerComponent } from \"./divider/types\";\n\n// FAB\nexport type { FabConfig, FabComponent } from \"./fab/types\";\n\n// Extended FAB\nexport type {\n ExtendedFabConfig,\n ExtendedFabComponent,\n} from \"./extended-fab/types\";\n\n// Icon Button\nexport type {\n IconButtonConfig,\n IconButtonComponent,\n} from \"./icon-button/types\";\n\n// List\nexport type {\n ListConfig,\n ListComponent,\n SelectEvent as ListSelectEvent,\n LoadEvent,\n} from \"./list/types\";\n\n// Menu\nexport type { MenuConfig, MenuComponent, MenuItem } from \"./menu/types\";\n\n// Progress\nexport type {\n ProgressConfig,\n ProgressComponent,\n ProgressShape,\n} from \"./progress/types\";\n\n// Radios\nexport type {\n RadiosConfig,\n RadiosComponent,\n RadioOptionConfig,\n} from \"./radios/types\";\n\n// Search\nexport type { SearchConfig, SearchComponent } from \"./search/types\";\n\n// Select\nexport type {\n SelectConfig,\n SelectComponent,\n SelectOption,\n SelectEvent,\n SelectChangeEvent,\n} from \"./select/types\";\n\n// Segmented Button\nexport type {\n SegmentedButtonConfig,\n SegmentedButtonComponent,\n} from \"./segmented-button/types\";\n\n// Sheet\nexport type { SheetConfig, SheetComponent } from \"./sheet/types\";\n\n// Slider\nexport type {\n SliderConfig,\n SliderComponent,\n SliderEvent,\n} from \"./slider/types\";\n\n// Snackbar\nexport type { SnackbarConfig, SnackbarComponent } from \"./snackbar/types\";\n\n// Switch\nexport type { SwitchConfig, SwitchComponent } from \"./switch/types\";\n\n// Tabs\nexport type {\n TabsConfig,\n TabsComponent,\n TabConfig,\n TabComponent,\n} from \"./tabs/types\";\n\n// Textfield\nexport type { TextfieldConfig, TextfieldComponent } from \"./textfield/types\";\n\n// Timepicker\nexport type { TimePickerConfig, TimePickerComponent } from \"./timepicker/types\";\n\n// Top App Bar\nexport type { TopAppBarConfig, TopAppBar } from \"./top-app-bar/types\";\n\n// Tooltip\nexport type { TooltipConfig, TooltipComponent } from \"./tooltip/types\";\n",
|
|
77
77
|
"// src/components/bottom-app-bar/bottom-app-bar.ts\n/**\n * @module components/bottom-app-bar\n * @description Bottom app bar implementation\n */\n\nimport {\n createBase,\n withElement,\n withEvents,\n withLifecycle,\n} from \"../../core/compose\";\n\nimport { createConfig } from \"./config\";\nimport { BottomAppBar, BottomAppBarConfig } from \"./types\";\n\n/**\n * Creates a bottom app bar component\n *\n * @param {BottomAppBarConfig} config - Configuration options\n * @returns {BottomAppBar} Bottom app bar component instance\n */\nexport const createBottomAppBar = (\n config: BottomAppBarConfig = {}\n): BottomAppBar => {\n // Process configuration with defaults\n const componentConfig = createConfig(config);\n\n // Create base component\n const component = createBase(componentConfig);\n\n // Create actions container\n const actionsContainer = document.createElement(\"div\");\n actionsContainer.className = `${component.getClass(\n \"bottom-app-bar\"\n )}-actions`;\n\n // FAB container for proper positioning\n const fabContainer = document.createElement(\"div\");\n fabContainer.className = `${component.getClass(\n \"bottom-app-bar\"\n )}-fab-container`;\n\n // Apply Element enhancer\n const enhancedComponent = withElement({\n tag: componentConfig.tag,\n componentName: \"bottom-app-bar\",\n className: [\n componentConfig.hasFab\n ? `${component.getClass(\"bottom-app-bar\")}--with-fab`\n : \"\",\n componentConfig.fabPosition === \"center\"\n ? `${component.getClass(\"bottom-app-bar\")}--fab-center`\n : \"\",\n componentConfig.class,\n ],\n attributes: {\n role: \"toolbar\",\n \"aria-label\": \"Bottom app bar\",\n },\n interactive: true,\n })(component);\n\n // Apply events enhancer for component events\n const withEventsComponent = withEvents()(enhancedComponent);\n\n // Apply lifecycle enhancer for cleanup\n const withLifecycleComponent = withLifecycle()(withEventsComponent);\n\n // Append actions and FAB containers to the main element\n withLifecycleComponent.element.appendChild(actionsContainer);\n withLifecycleComponent.element.appendChild(fabContainer);\n\n // Flag to track visibility\n let isVisible = true;\n\n // Previous scroll position for determining scroll direction\n let prevScrollY = window.scrollY;\n\n // Handle scrolling behavior if autoHide is enabled\n if (componentConfig.autoHide) {\n const handleScroll = () => {\n const currentScrollY = window.scrollY;\n\n // Determine scroll direction\n if (currentScrollY > prevScrollY + 10) {\n // Scrolling down - hide the bottom bar\n if (isVisible) {\n bottomBar.hide();\n componentConfig.onVisibilityChange?.(false);\n }\n } else if (currentScrollY < prevScrollY - 10) {\n // Scrolling up - show the bottom bar\n if (!isVisible) {\n bottomBar.show();\n componentConfig.onVisibilityChange?.(true);\n }\n }\n\n prevScrollY = currentScrollY;\n };\n\n // Add scroll event listener\n window.addEventListener(\"scroll\", handleScroll, { passive: true });\n\n // Clean up event listener on destroy\n const originalDestroy = withLifecycleComponent.lifecycle.destroy;\n withLifecycleComponent.lifecycle.destroy = () => {\n window.removeEventListener(\"scroll\", handleScroll);\n originalDestroy();\n };\n }\n\n const bottomBar: BottomAppBar = {\n ...withLifecycleComponent,\n\n addAction(button: HTMLElement) {\n actionsContainer.appendChild(button);\n return this;\n },\n\n addFab(fab: HTMLElement) {\n // Clear existing FAB if any\n fabContainer.innerHTML = \"\";\n\n // Add the new FAB\n fabContainer.appendChild(fab);\n\n // Update component class to indicate it has a FAB\n this.element.classList.add(\n `${component.getClass(\"bottom-app-bar\")}--with-fab`\n );\n\n return this;\n },\n\n show() {\n this.element.classList.remove(\n `${component.getClass(\"bottom-app-bar\")}--hidden`\n );\n isVisible = true;\n return this;\n },\n\n hide() {\n this.element.classList.add(\n `${component.getClass(\"bottom-app-bar\")}--hidden`\n );\n isVisible = false;\n return this;\n },\n\n isVisible() {\n return isVisible;\n },\n\n getActionsContainer() {\n return actionsContainer;\n },\n };\n\n // Set the appropriate styles for transitions if needed\n if (componentConfig.autoHide && componentConfig.transitionDuration) {\n bottomBar.element.style.transition = `transform ${componentConfig.transitionDuration}ms ease-in-out`;\n }\n\n return bottomBar;\n};\n",
|
|
78
78
|
"// src/components/bottom-app-bar/config.ts\n/**\n * @module components/bottom-app-bar\n * @description Configuration for bottom app bar component\n */\n\nimport { createComponentConfig } from \"../../core/config/component\";\nimport { BottomAppBarConfig } from \"./types\";\nimport { FAB_POSITIONS, DEFAULT_TRANSITION_DURATION } from \"./constants\";\n\n/**\n * Default configuration for bottom app bar\n */\nexport const defaultConfig: Partial<BottomAppBarConfig> = {\n tag: \"div\",\n hasFab: false,\n fabPosition: FAB_POSITIONS.END,\n autoHide: false,\n transitionDuration: DEFAULT_TRANSITION_DURATION,\n};\n\n/**\n * Creates the configuration for a bottom app bar component\n *\n * @param {BottomAppBarConfig} config - User provided configuration\n * @returns {BottomAppBarConfig} Complete configuration with defaults applied\n */\nexport const createConfig = (\n config: BottomAppBarConfig = {} as BottomAppBarConfig\n): BottomAppBarConfig =>\n createComponentConfig(\n defaultConfig,\n config,\n \"bottom-app-bar\"\n ) as BottomAppBarConfig;\n",
|
|
79
79
|
"// src/components/bottom-app-bar/constants.ts\n\n/**\n * FAB position constants for Bottom App Bar\n */\nexport const FAB_POSITIONS = {\n CENTER: 'center',\n END: 'end'\n} as const;\n\n/**\n * Default transition duration for show/hide animations\n */\nexport const DEFAULT_TRANSITION_DURATION = 300;\n\n/**\n * CSS class names used in the bottom app bar component\n */\nexport const BOTTOM_APP_BAR_CLASSES = {\n ROOT: 'bottom-app-bar',\n ACTIONS: 'bottom-app-bar-actions',\n FAB_CONTAINER: 'bottom-app-bar-fab',\n HIDDEN: 'bottom-app-bar--hidden',\n FAB_CENTER: 'bottom-app-bar--fab-center',\n FAB_END: 'bottom-app-bar--fab-end'\n} as const;",
|
|
@@ -115,11 +115,18 @@
|
|
|
115
115
|
"// src/components/datepicker/render.ts\nimport {\n MONTH_NAMES,\n MONTH_NAMES_SHORT,\n DAY_NAMES,\n TODAY_CLASS,\n SELECTED_CLASS,\n OUTSIDE_MONTH_CLASS,\n RANGE_START_CLASS,\n RANGE_END_CLASS,\n RANGE_MIDDLE_CLASS,\n} from \"./types\";\nimport { CalendarDate } from \"./types\";\nimport { generateCalendarDates, generateYearRange } from \"./utils\";\nimport { createElement } from \"../../core/dom/create\";\n\n/**\n * Renders the calendar header with navigation controls\n * @param {Object} params - Rendering parameters\n * @returns {HTMLElement} Calendar header element\n */\nexport const renderHeader = ({\n currentMonth,\n currentYear,\n currentView,\n prefix,\n emit,\n}: any): HTMLElement => {\n const header = createElement({\n tag: \"div\",\n className: `${prefix}-datepicker-header`,\n });\n\n // Month selector\n const monthButton = createElement({\n tag: \"button\",\n className: `${prefix}-datepicker-month-selector`,\n text: MONTH_NAMES[currentMonth],\n attributes: {\n type: \"button\",\n \"aria-label\": \"Select month\",\n },\n });\n\n // Year selector\n const yearButton = createElement({\n tag: \"button\",\n className: `${prefix}-datepicker-year-selector`,\n text: currentYear.toString(),\n attributes: {\n type: \"button\",\n \"aria-label\": \"Select year\",\n },\n });\n\n // Navigation controls container\n const navControls = createElement({\n tag: \"div\",\n className: `${prefix}-datepicker-nav-controls`,\n });\n\n // Previous button\n const prevButton = createElement({\n tag: \"button\",\n className: `${prefix}-datepicker-prev-btn`,\n html: '<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><polyline points=\"15 18 9 12 15 6\"></polyline></svg>',\n attributes: {\n type: \"button\",\n \"aria-label\":\n currentView === \"day\"\n ? \"Previous month\"\n : currentView === \"month\"\n ? \"Previous year\"\n : \"Previous year range\",\n },\n });\n\n // Next button\n const nextButton = createElement({\n tag: \"button\",\n className: `${prefix}-datepicker-next-btn`,\n html: '<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><polyline points=\"9 18 15 12 9 6\"></polyline></svg>',\n attributes: {\n type: \"button\",\n \"aria-label\":\n currentView === \"day\"\n ? \"Next month\"\n : currentView === \"month\"\n ? \"Next year\"\n : \"Next year range\",\n },\n });\n\n // Event listeners\n monthButton.addEventListener(\"click\", (event) => {\n // Prevent event from bubbling up\n event.stopPropagation();\n emit(\"viewChange\", { view: \"month\" });\n });\n\n yearButton.addEventListener(\"click\", (event) => {\n // Prevent event from bubbling up\n event.stopPropagation();\n emit(\"viewChange\", { view: \"year\" });\n });\n\n prevButton.addEventListener(\"click\", (event) => {\n // Prevent event from bubbling up\n event.stopPropagation();\n\n if (currentView === \"day\") {\n emit(\"prevMonth\");\n } else if (currentView === \"month\") {\n emit(\"prevYear\");\n } else {\n emit(\"prevYearRange\");\n }\n });\n\n nextButton.addEventListener(\"click\", (event) => {\n // Prevent event from bubbling up\n event.stopPropagation();\n\n if (currentView === \"day\") {\n emit(\"nextMonth\");\n } else if (currentView === \"month\") {\n emit(\"nextYear\");\n } else {\n emit(\"nextYearRange\");\n }\n });\n\n // Add buttons to container\n header.appendChild(monthButton);\n header.appendChild(yearButton);\n\n navControls.appendChild(prevButton);\n navControls.appendChild(nextButton);\n header.appendChild(navControls);\n\n return header;\n};\n\n/**\n * Renders the days of the week (S, M, T, etc.)\n * @param {string} prefix - CSS class prefix\n * @returns {HTMLElement} Weekdays element\n */\nexport const renderWeekdays = (prefix: string): HTMLElement => {\n const weekdaysRow = createElement({\n tag: \"div\",\n className: `${prefix}-datepicker-weekdays`,\n });\n\n DAY_NAMES.forEach((day) => {\n const dayElement = createElement({\n tag: \"span\",\n className: `${prefix}-datepicker-weekday`,\n text: day,\n });\n weekdaysRow.appendChild(dayElement);\n });\n\n return weekdaysRow;\n};\n\n/**\n * Renders the calendar days\n * @param {Object} params - Rendering parameters\n * @returns {HTMLElement} Calendar days element\n */\nexport const renderDays = ({\n currentYear,\n currentMonth,\n selectedDate,\n rangeEndDate,\n minDate,\n maxDate,\n prefix,\n emit,\n}: any): HTMLElement => {\n const daysGrid = createElement({\n tag: \"div\",\n className: `${prefix}-datepicker-days`,\n });\n\n const calendarDates = generateCalendarDates(\n currentYear,\n currentMonth,\n selectedDate,\n rangeEndDate,\n minDate,\n maxDate\n );\n\n calendarDates.forEach((calendarDate: CalendarDate) => {\n const classNames = [\n `${prefix}-datepicker-day`,\n calendarDate.isCurrentMonth ? \"\" : OUTSIDE_MONTH_CLASS,\n calendarDate.isToday ? TODAY_CLASS : \"\",\n calendarDate.isSelected ? SELECTED_CLASS : \"\",\n calendarDate.isDisabled ? \"disabled\" : \"\",\n calendarDate.isRangeStart ? RANGE_START_CLASS : \"\",\n calendarDate.isRangeEnd ? RANGE_END_CLASS : \"\",\n calendarDate.isRangeMiddle ? RANGE_MIDDLE_CLASS : \"\",\n ]\n .filter(Boolean)\n .join(\" \");\n\n const dayElement = createElement({\n tag: \"button\",\n className: classNames,\n text: calendarDate.day.toString(),\n attributes: {\n type: \"button\",\n \"aria-label\": calendarDate.date.toLocaleDateString(),\n \"aria-selected\": calendarDate.isSelected ? \"true\" : \"false\",\n \"aria-disabled\": calendarDate.isDisabled ? \"true\" : \"false\",\n \"data-date\": calendarDate.date.toISOString(),\n disabled: calendarDate.isDisabled,\n },\n });\n\n // Event listener\n dayElement.addEventListener(\"click\", (event) => {\n // Prevent event from bubbling up\n event.stopPropagation();\n\n if (!calendarDate.isDisabled) {\n emit(\"dateSelected\", { date: calendarDate.date });\n }\n });\n\n daysGrid.appendChild(dayElement);\n });\n\n return daysGrid;\n};\n\n/**\n * Renders the month selection view\n * @param {Object} params - Rendering parameters\n * @returns {HTMLElement} Month selection element\n */\nexport const renderMonthSelection = ({\n currentMonth,\n prefix,\n emit,\n}: any): HTMLElement => {\n const monthsGrid = createElement({\n tag: \"div\",\n className: `${prefix}-datepicker-months`,\n });\n\n MONTH_NAMES_SHORT.forEach((month, index) => {\n const isSelected = index === currentMonth;\n\n const monthElement = createElement({\n tag: \"button\",\n className: `${prefix}-datepicker-month ${\n isSelected ? SELECTED_CLASS : \"\"\n }`,\n text: month,\n attributes: {\n type: \"button\",\n \"aria-selected\": isSelected ? \"true\" : \"false\",\n \"data-month\": index.toString(),\n },\n });\n\n monthElement.addEventListener(\"click\", (event) => {\n // Prevent event from bubbling up\n event.stopPropagation();\n emit(\"monthSelected\", { month: index });\n });\n\n monthsGrid.appendChild(monthElement);\n });\n\n return monthsGrid;\n};\n\n/**\n * Renders the year selection view\n * @param {Object} params - Rendering parameters\n * @returns {HTMLElement} Year selection element\n */\nexport const renderYearSelection = ({\n currentYear,\n prefix,\n emit,\n}: any): HTMLElement => {\n const yearsGrid = createElement({\n tag: \"div\",\n className: `${prefix}-datepicker-years`,\n });\n\n const yearRange = generateYearRange(currentYear, 10);\n\n yearRange.forEach((year) => {\n const isSelected = year === currentYear;\n\n const yearElement = createElement({\n tag: \"button\",\n className: `${prefix}-datepicker-year ${\n isSelected ? SELECTED_CLASS : \"\"\n }`,\n text: year.toString(),\n attributes: {\n type: \"button\",\n \"aria-selected\": isSelected ? \"true\" : \"false\",\n \"data-year\": year.toString(),\n },\n });\n\n yearElement.addEventListener(\"click\", (event) => {\n // Prevent event from bubbling up\n event.stopPropagation();\n emit(\"yearSelected\", { year });\n });\n\n yearsGrid.appendChild(yearElement);\n });\n\n return yearsGrid;\n};\n\n/**\n * Renders the footer with action buttons\n * @param {Object} params - Rendering parameters\n * @returns {HTMLElement} Footer element\n */\nexport const renderFooter = ({ prefix, emit }: any): HTMLElement => {\n const footer = createElement({\n tag: \"div\",\n className: `${prefix}-datepicker-footer`,\n });\n\n // Cancel button\n const cancelButton = createElement({\n tag: \"button\",\n className: `${prefix}-datepicker-cancel ${prefix}-button ${prefix}-button--text`,\n text: \"Cancel\",\n attributes: {\n type: \"button\",\n },\n });\n\n // OK button\n const okButton = createElement({\n tag: \"button\",\n className: `${prefix}-datepicker-ok ${prefix}-button ${prefix}-button--text`,\n text: \"OK\",\n attributes: {\n type: \"button\",\n },\n });\n\n cancelButton.addEventListener(\"click\", (event) => {\n // Prevent event from bubbling up\n event.stopPropagation();\n emit(\"cancel\");\n });\n\n okButton.addEventListener(\"click\", (event) => {\n // Prevent event from bubbling up\n event.stopPropagation();\n emit(\"confirm\");\n });\n\n footer.appendChild(cancelButton);\n footer.appendChild(okButton);\n\n return footer;\n};\n\n/**\n * Renders a complete calendar view\n * @param {Object} state - Current datepicker state\n * @param {Function} emit - Event emission function\n * @returns {HTMLElement} Rendered calendar\n */\nexport const renderCalendar = (state: any, emit: Function): HTMLElement => {\n const {\n prefix,\n currentView,\n currentMonth,\n currentYear,\n selectedDate,\n rangeEndDate,\n minDate,\n maxDate,\n variant,\n } = state;\n\n // Create calendar container\n const calendar = createElement({\n tag: \"div\",\n className: `${prefix}-datepicker-calendar-content`,\n });\n\n // Render header\n const header = renderHeader({\n currentMonth,\n currentYear,\n currentView,\n prefix,\n emit,\n });\n calendar.appendChild(header);\n\n // Render content based on current view\n if (currentView === \"day\") {\n const weekdays = renderWeekdays(prefix);\n calendar.appendChild(weekdays);\n\n const days = renderDays({\n currentYear,\n currentMonth,\n selectedDate,\n rangeEndDate,\n minDate,\n maxDate,\n prefix,\n emit,\n });\n calendar.appendChild(days);\n } else if (currentView === \"month\") {\n const months = renderMonthSelection({\n currentMonth,\n prefix,\n emit,\n });\n calendar.appendChild(months);\n } else if (currentView === \"year\") {\n const years = renderYearSelection({\n currentYear,\n prefix,\n emit,\n });\n calendar.appendChild(years);\n }\n\n // Only add footer for modal variants\n if (variant !== \"docked\") {\n const footer = renderFooter({\n prefix,\n emit,\n });\n calendar.appendChild(footer);\n }\n\n return calendar;\n};\n",
|
|
116
116
|
"// src/components/dialog/dialog.ts\n/**\n * Dialog Component Implementation\n * \n * This module implements a Material Design 3 dialog component that can be\n * used for alerts, confirmations, form submissions, and complex interactions.\n * \n * The implementation supports various features including:\n * - Multiple size variants (small, medium, large, fullwidth, fullscreen)\n * - Multiple animation styles\n * - Custom buttons with configurable actions\n * - Dividers for visual separation\n * - Confirmation dialog patterns\n * - Event handling for dialog lifecycle\n * \n * @module components/dialog\n * @category Components\n */\n\nimport { pipe } from '../../core/compose';\nimport { createBase, withElement } from '../../core/compose/component';\nimport { withEvents, withLifecycle } from '../../core/compose/features';\nimport { \n withStructure, \n withVisibility, \n withContent, \n withButtons, \n withSize,\n withConfirm,\n withDivider // Simplified to single divider feature\n} from './features';\nimport { withAPI } from './api';\nimport { DialogConfig, DialogComponent } from './types';\nimport { createBaseConfig, getElementConfig, getApiConfig } from './config';\n\n/**\n * Creates a new Dialog component with the specified configuration.\n * \n * Dialogs are modal windows that appear in front of app content to\n * provide critical information or ask for decisions. They inform\n * users about specific tasks and may contain critical information,\n * require decisions, or involve multiple tasks.\n * \n * @param {DialogConfig} config - Configuration options for the dialog\n * @returns {DialogComponent} A fully configured dialog component instance\n * @throws {Error} Throws an error if dialog creation fails\n * \n * @category Components\n * \n * @example\n * // Create a basic dialog with title and content\n * const infoDialog = createDialog({\n * title: 'Information',\n * content: 'Your changes have been saved.',\n * size: 'small',\n * buttons: [\n * { text: 'OK', variant: 'text', closeDialog: true }\n * ]\n * });\n * \n * document.body.appendChild(infoDialog.element);\n * infoDialog.open();\n * \n * @example\n * // Create a form dialog with multiple buttons\n * const formDialog = createDialog({\n * title: 'Edit Profile',\n * content: '<form id=\"profile-form\">...</form>',\n * size: 'medium',\n * closeOnEscape: true,\n * closeOnOverlayClick: false,\n * buttons: [\n * { \n * text: 'Save', \n * variant: 'filled', \n * onClick: (event, dialog) => {\n * const form = document.getElementById('profile-form');\n * if(form.checkValidity()) {\n * saveProfile(form);\n * dialog.close();\n * }\n * }\n * },\n * { text: 'Cancel', variant: 'text', closeDialog: true }\n * ]\n * });\n * \n * @example\n * // Create a confirmation dialog using the Promise-based API\n * async function confirmAction() {\n * const dialog = createDialog();\n * const confirmed = await dialog.confirm({\n * title: 'Confirm Action',\n * message: 'Are you sure you want to proceed?',\n * confirmText: 'Yes, proceed',\n * cancelText: 'No, cancel'\n * });\n * \n * if (confirmed) {\n * // User clicked the confirm button\n * performAction();\n * }\n * }\n */\nconst createDialog = (config: DialogConfig = {}): DialogComponent => {\n const baseConfig = createBaseConfig(config);\n\n try {\n // Create the dialog through functional composition\n // Each function in the pipe adds specific features to the component\n const dialog = pipe(\n createBase, // Base component\n withEvents(), // Event handling\n withElement(getElementConfig(baseConfig)), // DOM element\n withStructure(baseConfig), // Dialog structure (overlay, header, content, footer)\n withVisibility(), // Open/close functionality\n withContent(), // Content management\n withButtons(), // Footer buttons\n withSize(), // Size variants\n withDivider(), // Header/content divider\n withConfirm(), // Confirmation dialog helpers\n withLifecycle(), // Lifecycle management\n comp => withAPI(getApiConfig(comp))(comp) // Public API\n )(baseConfig);\n\n // Register event handlers from config\n if (baseConfig.on) {\n Object.entries(baseConfig.on).forEach(([event, handler]) => {\n if (typeof handler === 'function') {\n dialog.on(event, handler);\n }\n });\n }\n\n return dialog;\n } catch (error) {\n console.error('Dialog creation error:', error);\n throw new Error(`Failed to create dialog: ${(error as Error).message}`);\n }\n};\n\nexport default createDialog;",
|
|
117
117
|
"// src/components/dialog/config.ts\nimport { \n createComponentConfig, \n createElementConfig\n} from '../../core/config/component';\nimport { DialogConfig } from './types';\n\n/**\n * Default configuration for the Dialog component\n */\nexport const defaultConfig: DialogConfig = {\n size: 'medium',\n animation: 'scale',\n footerAlignment: 'right',\n open: false,\n closeButton: true,\n closeOnOverlayClick: true,\n closeOnEscape: true,\n modal: true,\n autofocus: true,\n trapFocus: true,\n divider: false, // Default to no divider\n animationDuration: 150,\n buttons: []\n};\n\n/**\n * Creates the base configuration for Dialog component\n * @param {DialogConfig} config - User provided configuration\n * @returns {DialogConfig} Complete configuration with defaults applied\n */\nexport const createBaseConfig = (config: DialogConfig = {}): DialogConfig => \n createComponentConfig(defaultConfig, config, 'dialog') as DialogConfig;\n\n/**\n * Generates element configuration for the Dialog component\n * @param {DialogConfig} config - Dialog configuration\n * @returns {Object} Element configuration object for withElement\n */\nexport const getElementConfig = (config: DialogConfig) => {\n return createElementConfig(config, {\n tag: 'div',\n attributes: {},\n className: config.class\n });\n};\n\n/**\n * Generates element configuration for the Dialog overlay\n * @param {DialogConfig} config - Dialog configuration\n * @returns {Object} Element configuration object for overlay\n */\nexport const getOverlayConfig = (config: DialogConfig) => {\n return {\n tag: 'div',\n attributes: {\n 'aria-modal': config.modal === false ? false : true,\n 'role': 'dialog',\n 'tabindex': -1\n },\n className: ''\n };\n};\n\n/**\n * Creates API configuration for the Dialog component\n * @param {Object} comp - Component with dialog features\n * @returns {Object} API configuration object\n */\nexport const getApiConfig = (comp) => ({\n visibility: {\n open: () => comp.visibility.open(),\n close: () => comp.visibility.close(),\n toggle: (visible?: boolean) => comp.visibility.toggle(visible),\n isOpen: () => comp.visibility.isOpen()\n },\n content: {\n setTitle: (title: string) => comp.content.setTitle(title),\n getTitle: () => comp.content.getTitle(),\n setSubtitle: (subtitle: string) => comp.content.setSubtitle(subtitle),\n getSubtitle: () => comp.content.getSubtitle(),\n setContent: (content: string) => comp.content.setContent(content),\n getContent: () => comp.content.getContent(),\n getHeaderElement: () => comp.content.getHeaderElement(),\n getContentElement: () => comp.content.getContentElement(),\n getFooterElement: () => comp.content.getFooterElement()\n },\n buttons: {\n addButton: (button) => comp.buttons.addButton(button),\n removeButton: (indexOrText) => comp.buttons.removeButton(indexOrText),\n getButtons: () => comp.buttons.getButtons(),\n setFooterAlignment: (alignment) => comp.buttons.setFooterAlignment(alignment)\n },\n focus: {\n trapFocus: () => comp.focus.trapFocus(),\n releaseFocus: () => comp.focus.releaseFocus()\n },\n size: {\n setSize: (size) => comp.size.setSize(size)\n },\n divider: {\n toggleDivider: (show) => comp.divider.toggleDivider(show),\n hasDivider: () => comp.divider.hasDivider()\n },\n events: {\n // Use the direct component methods from withEvents()\n on: (event, handler) => comp.on(event, handler),\n off: (event, handler) => comp.off(event, handler),\n trigger: (event, data) => comp.emit(event, data)\n },\n lifecycle: {\n destroy: () => comp.lifecycle.destroy()\n }\n});\n\nexport default defaultConfig;",
|
|
118
|
-
"// src/components/dialog/features.ts (partial updated code)\n\nimport { getOverlayConfig } from \"./config\";\nimport { DialogConfig, DialogButton } from \"./types\";\nimport createButton from \"../button\";\nimport { createDivider } from \"../divider\"; // Import the divider component\nimport { addClass, removeClass } from \"../../core/dom/classes\";\n\nconst DIALOG_EVENTS = {\n OPEN: \"open\",\n CLOSE: \"close\",\n BEFORE_OPEN: \"beforeopen\",\n BEFORE_CLOSE: \"beforeclose\",\n AFTER_OPEN: \"afteropen\",\n AFTER_CLOSE: \"afterclose\",\n};\n\n/**\n * Creates the dialog DOM structure with proper divider handling\n * @param config Dialog configuration\n * @returns Component enhancer with DOM structure\n */\nexport const withStructure = (config: DialogConfig) => (component) => {\n // Create the overlay element\n const overlayConfig = getOverlayConfig(config);\n const overlay = document.createElement(overlayConfig.tag || \"div\");\n\n // Add overlay classes\n overlay.classList.add(component.getClass(\"dialog-overlay\"));\n\n // Set overlay attributes safely\n if (\n overlayConfig.attributes &&\n typeof overlayConfig.attributes === \"object\"\n ) {\n Object.entries(overlayConfig.attributes).forEach(([key, value]) => {\n if (key && typeof key === \"string\" && value !== undefined) {\n overlay.setAttribute(key, String(value));\n }\n });\n }\n\n // Set custom z-index if provided\n if (config.zIndex) {\n overlay.style.zIndex = String(config.zIndex);\n }\n\n // Create internal structure\n const createHeader = () => {\n const header = document.createElement(\"div\");\n header.classList.add(component.getClass(\"dialog-header\"));\n\n const headerContent = document.createElement(\"div\");\n headerContent.classList.add(component.getClass(\"dialog-header-content\"));\n header.appendChild(headerContent);\n\n if (config.title) {\n const title = document.createElement(\"h2\");\n title.classList.add(component.getClass(\"dialog-header-title\"));\n title.textContent = config.title;\n headerContent.appendChild(title);\n }\n\n if (config.subtitle) {\n const subtitle = document.createElement(\"p\");\n subtitle.classList.add(component.getClass(\"dialog-header-subtitle\"));\n subtitle.textContent = config.subtitle;\n headerContent.appendChild(subtitle);\n }\n\n if (config.closeButton !== false) {\n const closeButton = document.createElement(\"button\");\n closeButton.classList.add(component.getClass(\"dialog-header-close\"));\n closeButton.setAttribute(\"aria-label\", \"Close dialog\");\n closeButton.innerHTML = `\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\"></line>\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\"></line>\n </svg>\n `;\n\n // Close button click handler with event-based communication\n closeButton.addEventListener(\"click\", (e) => {\n e.preventDefault();\n e.stopPropagation();\n\n // Use the dialog:close custom event which will be listened for in withVisibility\n if (component && component.emit) {\n component.emit(\"dialog:close\", { source: \"closeButton\" });\n }\n });\n\n header.appendChild(closeButton);\n }\n\n return header;\n };\n\n const createContent = () => {\n const content = document.createElement(\"div\");\n content.classList.add(component.getClass(\"dialog-content\"));\n\n if (config.content) {\n content.innerHTML = config.content;\n }\n\n return content;\n };\n\n const createFooter = () => {\n const footer = document.createElement(\"div\");\n footer.classList.add(component.getClass(\"dialog-footer\"));\n\n // Apply footer alignment\n const alignment = config.footerAlignment || \"right\";\n if (alignment !== \"right\") {\n addClass(footer, `${component.getClass(\"dialog-footer\")}--${alignment}`);\n }\n\n // Add buttons if provided\n if (Array.isArray(config.buttons) && config.buttons.length > 0) {\n config.buttons.forEach((buttonConfig) =>\n addButton(footer, buttonConfig, component),\n );\n }\n\n return footer;\n };\n\n const createDividerElement = () => {\n const divider = createDivider({\n variant: \"full-width\",\n class: component.getClass(\"dialog-divider\"),\n });\n return divider;\n };\n\n // Create the dialog structure\n const header = createHeader();\n const content = createContent();\n const footer =\n Array.isArray(config.buttons) && config.buttons.length > 0\n ? createFooter()\n : null;\n\n // Add dialog classes to the main component element\n addClass(component.element, component.getClass(\"dialog\"));\n\n // Apply size class\n const size = config.size || \"medium\";\n if (size !== \"medium\") {\n addClass(component.element, `${component.getClass(\"dialog\")}--${size}`);\n }\n\n // Apply animation class\n const animation = config.animation || \"scale\";\n if (animation !== \"scale\") {\n addClass(\n component.element,\n `${component.getClass(\"dialog\")}--${animation}`,\n );\n }\n\n // Add header to dialog\n component.element.appendChild(header);\n\n // Create divider elements if configured\n let headerDivider = null;\n let footerDivider = null;\n\n if (config.divider) {\n // Add header divider (between header and content)\n headerDivider = createDividerElement();\n headerDivider.element.classList.add(\n component.getClass(\"dialog-header-divider\"),\n );\n component.element.appendChild(headerDivider.element);\n\n // If footer exists, add footer divider (between content and footer)\n if (footer) {\n footerDivider = createDividerElement();\n footerDivider.element.classList.add(\n component.getClass(\"dialog-footer-divider\"),\n );\n }\n }\n\n // Add content to dialog\n component.element.appendChild(content);\n\n // Add footer divider before footer if it exists\n if (footerDivider) {\n component.element.appendChild(footerDivider.element);\n }\n\n // Add footer to dialog if exists\n if (footer) {\n component.element.appendChild(footer);\n }\n\n // Add the dialog element to the overlay\n overlay.appendChild(component.element);\n\n // Add overlay to container or document.body\n const container = config.container || document.body;\n container.appendChild(overlay);\n\n // Store elements in component\n return {\n ...component,\n overlay,\n structure: {\n header,\n content,\n footer,\n headerDivider,\n footerDivider,\n container,\n },\n };\n};\n\n/**\n * Add methods to manage dividers\n * @returns Component enhancer with divider management features\n */\nexport const withDivider = () => (component) => {\n return {\n ...component,\n divider: {\n /**\n * Shows or hides the dividers\n * @param show Whether to show the dividers\n * @returns Component instance for chaining\n */\n toggleDivider(show) {\n // Handle header divider\n if (show && !component.structure.headerDivider) {\n // Create and add header divider\n const headerDivider = createDivider({\n variant: \"full-width\",\n class: `${component.getClass(\n \"dialog-divider\",\n )} ${component.getClass(\"dialog-header-divider\")}`,\n });\n\n // Insert after header, before content\n component.element.insertBefore(\n headerDivider.element,\n component.structure.content,\n );\n\n component.structure.headerDivider = headerDivider;\n\n // If footer exists, add footer divider\n if (\n component.structure.footer &&\n !component.structure.footerDivider\n ) {\n const footerDivider = createDivider({\n variant: \"full-width\",\n class: `${component.getClass(\n \"dialog-divider\",\n )} ${component.getClass(\"dialog-footer-divider\")}`,\n });\n\n // Insert before footer\n component.element.insertBefore(\n footerDivider.element,\n component.structure.footer,\n );\n\n component.structure.footerDivider = footerDivider;\n }\n } else if (!show) {\n // Remove header divider if it exists\n if (component.structure.headerDivider) {\n component.structure.headerDivider.element.remove();\n component.structure.headerDivider = null;\n }\n\n // Remove footer divider if it exists\n if (component.structure.footerDivider) {\n component.structure.footerDivider.element.remove();\n component.structure.footerDivider = null;\n }\n }\n\n return component;\n },\n\n /**\n * Checks if the dialog has dividers\n * @returns Whether the dialog has dividers\n */\n hasDivider() {\n return component.structure.headerDivider !== null;\n },\n },\n };\n};\n\n/**\n * Adds button to dialog footer\n * @param footer Footer element\n * @param buttonConfig Button configuration\n * @param component Dialog component\n */\nconst addButton = (\n footer: HTMLElement,\n buttonConfig: DialogButton,\n component: any,\n) => {\n const {\n text,\n variant = \"text\", // Using string literal directly instead of BUTTON_VARIANTS.TEXT\n onClick,\n closeDialog = true,\n autofocus = false,\n attributes = {},\n } = buttonConfig;\n\n const button = createButton({\n text,\n variant,\n ...attributes,\n });\n\n // Button click handler with event-based communication\n button.on(\"click\", (event) => {\n let shouldClose = closeDialog;\n\n // Call onClick handler if provided\n if (typeof onClick === \"function\") {\n try {\n const result = onClick(event, component);\n if (result === false) {\n shouldClose = false;\n }\n } catch (err) {\n console.error(\"Error in onClick handler:\", err);\n }\n }\n\n // Close dialog if needed - using event-based communication\n if (shouldClose) {\n if (component && component.emit) {\n component.emit(\"dialog:close\", { source: \"button\", text });\n }\n }\n });\n\n // Set autofocus if needed\n if (autofocus) {\n button.element.setAttribute(\"autofocus\", \"true\");\n }\n\n footer.appendChild(button.element);\n\n // Store button instance\n if (!component._buttons) {\n component._buttons = [];\n }\n\n component._buttons.push({\n config: buttonConfig,\n instance: button,\n });\n};\n\n/**\n * Add visibility control to dialog\n * @returns Component enhancer with visibility features\n */\nexport const withVisibility = () => (component) => {\n // Initial state\n const isOpen = component.config.open === true;\n\n // Setup animation duration\n const animationDuration = component.config.animationDuration || 150;\n\n // Helper functions to handle focus trap\n const focusableElements =\n 'button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])';\n let previouslyFocusedElement: HTMLElement | null = null;\n\n const trapFocus = () => {\n if (!component.config.trapFocus) return;\n\n const focusableContent =\n component.element.querySelectorAll(focusableElements);\n if (focusableContent.length === 0) return;\n\n const firstFocusableElement = focusableContent[0] as HTMLElement;\n const lastFocusableElement = focusableContent[\n focusableContent.length - 1\n ] as HTMLElement;\n\n // Focus the first element if autofocus is enabled\n if (component.config.autofocus) {\n // Check for a button with autofocus attribute\n const autofocusElement = component.element.querySelector(\n \"[autofocus]\",\n ) as HTMLElement;\n if (autofocusElement) {\n autofocusElement.focus();\n } else {\n firstFocusableElement.focus();\n }\n }\n\n // Set up the keyboard trap\n component.element.addEventListener(\"keydown\", handleKeyDown);\n\n function handleKeyDown(e: KeyboardEvent) {\n const isTabPressed = e.key === \"Tab\";\n\n if (!isTabPressed) return;\n\n if (e.shiftKey) {\n // If shift + tab pressed and focus is on first element, move to last\n if (document.activeElement === firstFocusableElement) {\n lastFocusableElement.focus();\n e.preventDefault();\n }\n } else {\n // If tab pressed and focus is on last element, move to first\n if (document.activeElement === lastFocusableElement) {\n firstFocusableElement.focus();\n e.preventDefault();\n }\n }\n }\n };\n\n const releaseFocus = () => {\n if (!component.config.trapFocus) return;\n\n component.element.removeEventListener(\"keydown\", handleKeyDown);\n\n // Restore focus to previously focused element\n if (previouslyFocusedElement) {\n previouslyFocusedElement.focus();\n previouslyFocusedElement = null;\n }\n\n function handleKeyDown() {}\n };\n\n const setupEvents = () => {\n // Handle overlay click\n if (component.config.closeOnOverlayClick !== false) {\n component.overlay.addEventListener(\"click\", handleOverlayClick);\n }\n\n // Handle Escape key\n if (component.config.closeOnEscape !== false) {\n document.addEventListener(\"keydown\", handleEscKey);\n }\n };\n\n const cleanupEvents = () => {\n component.overlay.removeEventListener(\"click\", handleOverlayClick);\n document.removeEventListener(\"keydown\", handleEscKey);\n };\n\n function handleOverlayClick(e: MouseEvent) {\n // Only close if the click was directly on the overlay\n if (e.target === component.overlay) {\n visibility.close();\n }\n }\n\n function handleEscKey(e: KeyboardEvent) {\n if (e.key === \"Escape\" && visibility.isOpen()) {\n visibility.close();\n }\n }\n\n // Setup initial state\n if (isOpen) {\n addClass(\n component.overlay,\n `${component.getClass(\"dialog-overlay\")}--visible`,\n );\n addClass(component.element, `${component.getClass(\"dialog\")}--visible`);\n\n // Setup focus trap and events\n trapFocus();\n setupEvents();\n }\n\n // Create visibility object with clean methods\n const visibility = {\n open() {\n // Don't do anything if already open\n if (this.isOpen()) return;\n\n // Store the currently focused element\n previouslyFocusedElement = document.activeElement as HTMLElement;\n\n // Trigger before open event\n const beforeOpenEvent = {\n dialog: component,\n defaultPrevented: false,\n preventDefault: () => {\n beforeOpenEvent.defaultPrevented = true;\n },\n };\n\n if (typeof component.emit === \"function\") {\n component.emit(DIALOG_EVENTS.BEFORE_OPEN, beforeOpenEvent);\n }\n\n // If event was prevented, don't open\n if (beforeOpenEvent.defaultPrevented) return;\n\n // Add to DOM if needed\n if (component.overlay && !component.overlay.parentNode) {\n const container = component.structure.container || document.body;\n container.appendChild(component.overlay);\n }\n\n // Show the overlay\n addClass(\n component.overlay,\n `${component.getClass(\"dialog-overlay\")}--visible`,\n );\n\n // Show the dialog\n setTimeout(() => {\n addClass(component.element, `${component.getClass(\"dialog\")}--visible`);\n\n // Setup focus trap and events\n trapFocus();\n setupEvents();\n\n // Trigger open event\n if (typeof component.emit === \"function\") {\n component.emit(DIALOG_EVENTS.OPEN, { dialog: component });\n\n setTimeout(() => {\n component.emit(DIALOG_EVENTS.AFTER_OPEN, { dialog: component });\n }, animationDuration);\n }\n }, 10);\n },\n\n close() {\n // console.log(\"Dialog close method called\");\n\n // Trigger before close event\n const beforeCloseEvent = {\n dialog: component,\n defaultPrevented: false,\n preventDefault: () => {\n beforeCloseEvent.defaultPrevented = true;\n },\n };\n\n if (typeof component.emit === \"function\") {\n component.emit(DIALOG_EVENTS.BEFORE_CLOSE, beforeCloseEvent);\n }\n\n // If event was prevented, don't close\n if (beforeCloseEvent.defaultPrevented) {\n console.log(\"Dialog close prevented by event handler\");\n return;\n }\n\n // Get class names\n const dialogVisibleClass = `${component.getClass(\"dialog\")}--visible`;\n const overlayVisibleClass = `${component.getClass(\n \"dialog-overlay\",\n )}--visible`;\n\n // Remove dialog visible class\n removeClass(component.element, dialogVisibleClass);\n\n // Remove overlay visible class\n removeClass(component.overlay, overlayVisibleClass);\n\n // Release focus and cleanup events\n releaseFocus();\n cleanupEvents();\n\n // Trigger close events\n if (typeof component.emit === \"function\") {\n component.emit(DIALOG_EVENTS.CLOSE, { dialog: component });\n }\n\n // Remove from DOM after animation completes\n setTimeout(() => {\n if (component.overlay && component.overlay.parentNode) {\n component.overlay.parentNode.removeChild(component.overlay);\n }\n\n if (typeof component.emit === \"function\") {\n component.emit(DIALOG_EVENTS.AFTER_CLOSE, { dialog: component });\n }\n }, animationDuration);\n },\n\n toggle(open?: boolean) {\n if (open === undefined) {\n this.isOpen() ? this.close() : this.open();\n } else if (open) {\n this.open();\n } else {\n this.close();\n }\n },\n\n isOpen() {\n return component.element.classList.contains(\n `${component.getClass(\"dialog\")}--visible`,\n );\n },\n };\n\n // Set up event listener for the dialog:close event\n if (component && component.on) {\n component.on(\"dialog:close\", () => {\n visibility.close();\n });\n }\n\n return {\n ...component,\n visibility,\n };\n};\n\n/**\n * Adds content management features to dialog\n * @returns Component enhancer with content features\n */\nexport const withContent = () => (component) => {\n const headerElement = component.structure.header;\n const contentElement = component.structure.content;\n const footerElement = component.structure.footer;\n\n return {\n ...component,\n content: {\n /**\n * Sets dialog title\n * @param title Title text\n */\n setTitle(title: string) {\n let titleElement = headerElement.querySelector(\n `.${component.getClass(\"dialog-header-title\")}`,\n );\n\n if (!titleElement && title) {\n // Create title element if it doesn't exist\n titleElement = document.createElement(\"h2\");\n titleElement.classList.add(component.getClass(\"dialog-header-title\"));\n headerElement\n .querySelector(`.${component.getClass(\"dialog-header-content\")}`)\n .appendChild(titleElement);\n }\n\n if (titleElement) {\n titleElement.textContent = title;\n }\n },\n\n /**\n * Gets dialog title\n * @returns Title text\n */\n getTitle() {\n const titleElement = headerElement.querySelector(\n `.${component.getClass(\"dialog-header-title\")}`,\n );\n return titleElement ? titleElement.textContent || \"\" : \"\";\n },\n\n /**\n * Sets dialog subtitle\n * @param subtitle Subtitle text\n */\n setSubtitle(subtitle: string) {\n let subtitleElement = headerElement.querySelector(\n `.${component.getClass(\"dialog-header-subtitle\")}`,\n );\n\n if (!subtitleElement && subtitle) {\n // Create subtitle element if it doesn't exist\n subtitleElement = document.createElement(\"p\");\n subtitleElement.classList.add(\n component.getClass(\"dialog-header-subtitle\"),\n );\n headerElement\n .querySelector(`.${component.getClass(\"dialog-header-content\")}`)\n .appendChild(subtitleElement);\n }\n\n if (subtitleElement) {\n subtitleElement.textContent = subtitle;\n }\n },\n\n /**\n * Gets dialog subtitle\n * @returns Subtitle text\n */\n getSubtitle() {\n const subtitleElement = headerElement.querySelector(\n `.${component.getClass(\"dialog-header-subtitle\")}`,\n );\n return subtitleElement ? subtitleElement.textContent || \"\" : \"\";\n },\n\n /**\n * Sets dialog content\n * @param content Content HTML\n */\n setContent(content: string) {\n contentElement.innerHTML = content;\n },\n\n /**\n * Gets dialog content\n * @returns Content HTML\n */\n getContent() {\n return contentElement.innerHTML;\n },\n\n /**\n * Gets dialog header element\n * @returns Header element\n */\n getHeaderElement() {\n return headerElement;\n },\n\n /**\n * Gets dialog content element\n * @returns Content element\n */\n getContentElement() {\n return contentElement;\n },\n\n /**\n * Gets dialog footer element\n * @returns Footer element\n */\n getFooterElement() {\n return footerElement;\n },\n },\n };\n};\n\n/**\n * Adds button management features to dialog\n * @returns Component enhancer with button features\n */\nexport const withButtons = () => (component) => {\n // Initialize buttons array if not already done\n if (!component._buttons) {\n component._buttons = [];\n }\n\n return {\n ...component,\n buttons: {\n /**\n * Adds a button to the dialog footer\n * @param button Button configuration\n */\n addButton(button: DialogButton) {\n // Create footer if it doesn't exist\n let footer = component.structure.footer;\n\n if (!footer) {\n footer = document.createElement(\"div\");\n footer.classList.add(component.getClass(\"dialog-footer\"));\n\n // Apply footer alignment\n const alignment = component.config.footerAlignment || \"right\";\n if (alignment !== \"right\") {\n addClass(\n footer,\n `${component.getClass(\"dialog-footer\")}--${alignment}`,\n );\n }\n\n component.element.appendChild(footer);\n component.structure.footer = footer;\n }\n\n // Add the button\n addButton(footer, button, component);\n },\n\n /**\n * Removes a button by index or text\n * @param indexOrText Button index or text\n */\n removeButton(indexOrText: number | string) {\n if (typeof indexOrText === \"number\") {\n // Remove by index\n if (indexOrText >= 0 && indexOrText < component._buttons.length) {\n const button = component._buttons[indexOrText];\n button.instance.destroy();\n component._buttons.splice(indexOrText, 1);\n }\n } else {\n // Remove by text\n const index = component._buttons.findIndex(\n (button) => button.config.text === indexOrText,\n );\n\n if (index !== -1) {\n const button = component._buttons[index];\n button.instance.destroy();\n component._buttons.splice(index, 1);\n }\n }\n\n // If no buttons left, remove footer\n if (component._buttons.length === 0 && component.structure.footer) {\n component.element.removeChild(component.structure.footer);\n component.structure.footer = null;\n }\n },\n\n /**\n * Gets all footer buttons\n * @returns Array of button configurations\n */\n getButtons() {\n return component._buttons.map((button) => button.config);\n },\n\n /**\n * Sets footer alignment\n * @param alignment Footer alignment\n */\n setFooterAlignment(alignment: string) {\n if (!component.structure.footer) return;\n\n // Define all possible alignments\n const ALL_ALIGNMENTS = [\"right\", \"left\", \"center\", \"space-between\"];\n\n // Remove existing alignment classes\n ALL_ALIGNMENTS.forEach((align) => {\n if (align !== \"right\") {\n removeClass(\n component.structure.footer,\n `${component.getClass(\"dialog-footer\")}--${align}`,\n );\n }\n });\n\n // Add new alignment class if not right (default)\n if (alignment !== \"right\") {\n addClass(\n component.structure.footer,\n `${component.getClass(\"dialog-footer\")}--${alignment}`,\n );\n }\n },\n },\n };\n};\n\n/**\n * Adds size management features to dialog\n * @returns Component enhancer with size features\n */\nexport const withSize = () => (component) => {\n return {\n ...component,\n size: {\n /**\n * Sets dialog size\n * @param size Size variant\n */\n setSize(size: string) {\n // Define all possible sizes\n const ALL_SIZES = [\n \"small\",\n \"medium\",\n \"large\",\n \"fullwidth\",\n \"fullscreen\",\n ];\n\n // Remove existing size classes\n ALL_SIZES.forEach((sizeValue) => {\n removeClass(\n component.element,\n `${component.getClass(\"dialog\")}--${sizeValue}`,\n );\n });\n\n // Add new size class if not medium (default)\n if (size !== \"medium\") {\n addClass(\n component.element,\n `${component.getClass(\"dialog\")}--${size}`,\n );\n }\n },\n },\n };\n};\n\n/**\n * Adds confirmation dialog features\n * @returns Component enhancer with confirm feature\n */\nexport const withConfirm = () => (component) => {\n return {\n ...component,\n confirm(options) {\n return new Promise((resolve) => {\n const {\n title = \"Confirm\",\n message,\n confirmText = \"Yes\",\n cancelText = \"No\",\n // Use string literals directly\n confirmVariant = \"filled\",\n cancelVariant = \"text\",\n size = \"small\",\n } = options;\n\n // Set dialog properties\n component.content.setTitle(title);\n component.content.setContent(`<p>${message}</p>`);\n component.size.setSize(size);\n\n // Clear existing buttons\n component._buttons.forEach((button) => button.instance.destroy());\n component._buttons = [];\n\n // Add confirm and cancel buttons\n component.buttons.addButton({\n text: confirmText,\n variant: confirmVariant,\n onClick: () => {\n resolve(true);\n },\n });\n\n component.buttons.addButton({\n text: cancelText,\n variant: cancelVariant,\n onClick: () => {\n resolve(false);\n },\n });\n\n // Open the dialog\n component.visibility.open();\n });\n },\n };\n};\n",
|
|
118
|
+
"// src/components/dialog/features.ts (partial updated code)\n\nimport { getOverlayConfig } from \"./config\";\nimport { DialogConfig, DialogButton } from \"./types\";\nimport createButton from \"../button\";\nimport { createDivider } from \"../divider\"; // Import the divider component\nimport { addClass, removeClass } from \"../../core/dom/classes\";\n\nconst DIALOG_EVENTS = {\n OPEN: \"open\",\n CLOSE: \"close\",\n BEFORE_OPEN: \"beforeopen\",\n BEFORE_CLOSE: \"beforeclose\",\n AFTER_OPEN: \"afteropen\",\n AFTER_CLOSE: \"afterclose\",\n};\n\n/**\n * Creates the dialog DOM structure with proper divider handling\n * @param config Dialog configuration\n * @returns Component enhancer with DOM structure\n */\nexport const withStructure = (config: DialogConfig) => (component) => {\n // Create the overlay element\n const overlayConfig = getOverlayConfig(config);\n const overlay = document.createElement(overlayConfig.tag || \"div\");\n\n // Add overlay classes\n overlay.classList.add(component.getClass(\"dialog-overlay\"));\n\n // Set overlay attributes safely\n if (\n overlayConfig.attributes &&\n typeof overlayConfig.attributes === \"object\"\n ) {\n Object.entries(overlayConfig.attributes).forEach(([key, value]) => {\n if (key && typeof key === \"string\" && value !== undefined) {\n overlay.setAttribute(key, String(value));\n }\n });\n }\n\n // Set custom z-index if provided\n if (config.zIndex) {\n overlay.style.zIndex = String(config.zIndex);\n }\n\n // Create internal structure\n const createHeader = () => {\n const header = document.createElement(\"div\");\n header.classList.add(component.getClass(\"dialog-header\"));\n\n const headerContent = document.createElement(\"div\");\n headerContent.classList.add(component.getClass(\"dialog-header-content\"));\n header.appendChild(headerContent);\n\n if (config.title) {\n const title = document.createElement(\"h2\");\n title.classList.add(component.getClass(\"dialog-header-title\"));\n title.textContent = config.title;\n headerContent.appendChild(title);\n }\n\n if (config.subtitle) {\n const subtitle = document.createElement(\"p\");\n subtitle.classList.add(component.getClass(\"dialog-header-subtitle\"));\n subtitle.textContent = config.subtitle;\n headerContent.appendChild(subtitle);\n }\n\n if (config.closeButton !== false) {\n const closeButton = document.createElement(\"button\");\n closeButton.classList.add(component.getClass(\"dialog-header-close\"));\n closeButton.setAttribute(\"aria-label\", \"Close dialog\");\n closeButton.innerHTML = `\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\"></line>\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\"></line>\n </svg>\n `;\n\n // Close button click handler with event-based communication\n closeButton.addEventListener(\"click\", (e) => {\n e.preventDefault();\n e.stopPropagation();\n\n // Use the dialog:close custom event which will be listened for in withVisibility\n if (component && component.emit) {\n component.emit(\"dialog:close\", { source: \"closeButton\" });\n }\n });\n\n header.appendChild(closeButton);\n }\n\n return header;\n };\n\n const createContent = () => {\n const content = document.createElement(\"div\");\n content.classList.add(component.getClass(\"dialog-content\"));\n\n if (config.content) {\n content.innerHTML = config.content;\n }\n\n return content;\n };\n\n const createFooter = () => {\n const footer = document.createElement(\"div\");\n footer.classList.add(component.getClass(\"dialog-footer\"));\n\n // Apply footer alignment\n const alignment = config.footerAlignment || \"right\";\n if (alignment !== \"right\") {\n addClass(footer, `${component.getClass(\"dialog-footer\")}--${alignment}`);\n }\n\n // Add buttons if provided\n if (Array.isArray(config.buttons) && config.buttons.length > 0) {\n config.buttons.forEach((buttonConfig) =>\n addButton(footer, buttonConfig, component),\n );\n }\n\n return footer;\n };\n\n const createDividerElement = () => {\n const divider = createDivider({\n variant: \"full-width\",\n class: component.getClass(\"dialog-divider\"),\n });\n return divider;\n };\n\n // Create the dialog structure\n const header = createHeader();\n const content = createContent();\n const footer =\n Array.isArray(config.buttons) && config.buttons.length > 0\n ? createFooter()\n : null;\n\n // Add dialog classes to the main component element\n addClass(component.element, component.getClass(\"dialog\"));\n\n // Apply size class\n const size = config.size || \"medium\";\n if (size !== \"medium\") {\n addClass(component.element, `${component.getClass(\"dialog\")}--${size}`);\n }\n\n // Apply animation class\n const animation = config.animation || \"scale\";\n if (animation !== \"scale\") {\n addClass(\n component.element,\n `${component.getClass(\"dialog\")}--${animation}`,\n );\n }\n\n // Add header to dialog\n component.element.appendChild(header);\n\n // Create divider elements if configured\n let headerDivider = null;\n let footerDivider = null;\n\n if (config.divider) {\n // Add header divider (between header and content)\n headerDivider = createDividerElement();\n headerDivider.element.classList.add(\n component.getClass(\"dialog-header-divider\"),\n );\n component.element.appendChild(headerDivider.element);\n\n // If footer exists, add footer divider (between content and footer)\n if (footer) {\n footerDivider = createDividerElement();\n footerDivider.element.classList.add(\n component.getClass(\"dialog-footer-divider\"),\n );\n }\n }\n\n // Add content to dialog\n component.element.appendChild(content);\n\n // Add footer divider before footer if it exists\n if (footerDivider) {\n component.element.appendChild(footerDivider.element);\n }\n\n // Add footer to dialog if exists\n if (footer) {\n component.element.appendChild(footer);\n }\n\n // Add the dialog element to the overlay\n overlay.appendChild(component.element);\n\n // Add overlay to container or document.body\n const container = config.container || document.body;\n container.appendChild(overlay);\n\n // Store elements in component\n return {\n ...component,\n overlay,\n structure: {\n header,\n content,\n footer,\n headerDivider,\n footerDivider,\n container,\n },\n };\n};\n\n/**\n * Add methods to manage dividers\n * @returns Component enhancer with divider management features\n */\nexport const withDivider = () => (component) => {\n return {\n ...component,\n divider: {\n /**\n * Shows or hides the dividers\n * @param show Whether to show the dividers\n * @returns Component instance for chaining\n */\n toggleDivider(show) {\n // Handle header divider\n if (show && !component.structure.headerDivider) {\n // Create and add header divider\n const headerDivider = createDivider({\n variant: \"full-width\",\n class: `${component.getClass(\n \"dialog-divider\",\n )} ${component.getClass(\"dialog-header-divider\")}`,\n });\n\n // Insert after header, before content\n component.element.insertBefore(\n headerDivider.element,\n component.structure.content,\n );\n\n component.structure.headerDivider = headerDivider;\n\n // If footer exists, add footer divider\n if (\n component.structure.footer &&\n !component.structure.footerDivider\n ) {\n const footerDivider = createDivider({\n variant: \"full-width\",\n class: `${component.getClass(\n \"dialog-divider\",\n )} ${component.getClass(\"dialog-footer-divider\")}`,\n });\n\n // Insert before footer\n component.element.insertBefore(\n footerDivider.element,\n component.structure.footer,\n );\n\n component.structure.footerDivider = footerDivider;\n }\n } else if (!show) {\n // Remove header divider if it exists\n if (component.structure.headerDivider) {\n component.structure.headerDivider.element.remove();\n component.structure.headerDivider = null;\n }\n\n // Remove footer divider if it exists\n if (component.structure.footerDivider) {\n component.structure.footerDivider.element.remove();\n component.structure.footerDivider = null;\n }\n }\n\n return component;\n },\n\n /**\n * Checks if the dialog has dividers\n * @returns Whether the dialog has dividers\n */\n hasDivider() {\n return component.structure.headerDivider !== null;\n },\n },\n };\n};\n\n/**\n * Adds button to dialog footer\n * @param footer Footer element\n * @param buttonConfig Button configuration\n * @param component Dialog component\n */\nconst addButton = (\n footer: HTMLElement,\n buttonConfig: DialogButton,\n component: any,\n) => {\n const {\n text,\n variant = \"text\", // Using string literal directly instead of BUTTON_VARIANTS.TEXT\n onClick,\n closeDialog = true,\n autofocus = false,\n attributes = {},\n } = buttonConfig;\n\n const button = createButton({\n text,\n variant,\n ...attributes,\n });\n\n // Button click handler with event-based communication\n button.on(\"click\", (event) => {\n let shouldClose = closeDialog;\n\n // Call onClick handler if provided\n if (typeof onClick === \"function\") {\n try {\n const result = onClick(event, component);\n if (result === false) {\n shouldClose = false;\n }\n } catch (err) {\n console.error(\"Error in onClick handler:\", err);\n }\n }\n\n // Close dialog if needed - using event-based communication\n if (shouldClose) {\n if (component && component.emit) {\n component.emit(\"dialog:close\", { source: \"button\", text });\n }\n }\n });\n\n // Set autofocus if needed\n if (autofocus) {\n button.element.setAttribute(\"autofocus\", \"true\");\n }\n\n footer.appendChild(button.element);\n\n // Store button instance\n if (!component._buttons) {\n component._buttons = [];\n }\n\n component._buttons.push({\n config: buttonConfig,\n instance: button,\n });\n};\n\n/**\n * Add visibility control to dialog\n * @returns Component enhancer with visibility features\n */\nexport const withVisibility = () => (component) => {\n // Initial state\n const isOpen = component.config.open === true;\n\n // Setup animation duration\n const animationDuration = component.config.animationDuration || 150;\n\n // Helper functions to handle focus trap\n const focusableElements =\n 'button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])';\n let previouslyFocusedElement: HTMLElement | null = null;\n let mouseDownOnOverlay = false;\n\n const trapFocus = () => {\n if (!component.config.trapFocus) return;\n\n const focusableContent =\n component.element.querySelectorAll(focusableElements);\n if (focusableContent.length === 0) return;\n\n const firstFocusableElement = focusableContent[0] as HTMLElement;\n const lastFocusableElement = focusableContent[\n focusableContent.length - 1\n ] as HTMLElement;\n\n // Focus the first element if autofocus is enabled\n if (component.config.autofocus) {\n // Check for a button with autofocus attribute\n const autofocusElement = component.element.querySelector(\n \"[autofocus]\",\n ) as HTMLElement;\n if (autofocusElement) {\n autofocusElement.focus();\n } else {\n firstFocusableElement.focus();\n }\n }\n\n // Set up the keyboard trap\n component.element.addEventListener(\"keydown\", handleKeyDown);\n\n function handleKeyDown(e: KeyboardEvent) {\n const isTabPressed = e.key === \"Tab\";\n\n if (!isTabPressed) return;\n\n if (e.shiftKey) {\n // If shift + tab pressed and focus is on first element, move to last\n if (document.activeElement === firstFocusableElement) {\n lastFocusableElement.focus();\n e.preventDefault();\n }\n } else {\n // If tab pressed and focus is on last element, move to first\n if (document.activeElement === lastFocusableElement) {\n firstFocusableElement.focus();\n e.preventDefault();\n }\n }\n }\n };\n\n const releaseFocus = () => {\n if (!component.config.trapFocus) return;\n\n component.element.removeEventListener(\"keydown\", handleKeyDown);\n\n // Restore focus to previously focused element\n if (previouslyFocusedElement) {\n previouslyFocusedElement.focus();\n previouslyFocusedElement = null;\n }\n\n function handleKeyDown() {}\n };\n\n const setupEvents = () => {\n // Handle overlay close: require both mousedown and mouseup on overlay\n // to prevent accidental closes when dragging from dialog content to overlay\n if (component.config.closeOnOverlayClick !== false) {\n component.overlay.addEventListener(\"mousedown\", handleOverlayMouseDown);\n document.addEventListener(\"mouseup\", handleOverlayMouseUp);\n }\n\n // Handle Escape key\n if (component.config.closeOnEscape !== false) {\n document.addEventListener(\"keydown\", handleEscKey);\n }\n };\n\n const cleanupEvents = () => {\n component.overlay.removeEventListener(\"mousedown\", handleOverlayMouseDown);\n document.removeEventListener(\"mouseup\", handleOverlayMouseUp);\n document.removeEventListener(\"keydown\", handleEscKey);\n };\n\n function handleOverlayMouseDown(e: MouseEvent) {\n // Track that mousedown started on the overlay itself\n mouseDownOnOverlay = e.target === component.overlay;\n }\n\n function handleOverlayMouseUp(e: MouseEvent) {\n // Only close if both mousedown and mouseup were on the overlay\n if (mouseDownOnOverlay && e.target === component.overlay) {\n visibility.close();\n }\n mouseDownOnOverlay = false;\n }\n\n function handleEscKey(e: KeyboardEvent) {\n if (e.key === \"Escape\" && visibility.isOpen()) {\n visibility.close();\n }\n }\n\n // Setup initial state\n if (isOpen) {\n addClass(\n component.overlay,\n `${component.getClass(\"dialog-overlay\")}--visible`,\n );\n addClass(component.element, `${component.getClass(\"dialog\")}--visible`);\n\n // Setup focus trap and events\n trapFocus();\n setupEvents();\n }\n\n // Create visibility object with clean methods\n const visibility = {\n open() {\n // Don't do anything if already open\n if (this.isOpen()) return;\n\n // Store the currently focused element\n previouslyFocusedElement = document.activeElement as HTMLElement;\n\n // Trigger before open event\n const beforeOpenEvent = {\n dialog: component,\n defaultPrevented: false,\n preventDefault: () => {\n beforeOpenEvent.defaultPrevented = true;\n },\n };\n\n if (typeof component.emit === \"function\") {\n component.emit(DIALOG_EVENTS.BEFORE_OPEN, beforeOpenEvent);\n }\n\n // If event was prevented, don't open\n if (beforeOpenEvent.defaultPrevented) return;\n\n // Add to DOM if needed\n if (component.overlay && !component.overlay.parentNode) {\n const container = component.structure.container || document.body;\n container.appendChild(component.overlay);\n }\n\n // Show the overlay\n addClass(\n component.overlay,\n `${component.getClass(\"dialog-overlay\")}--visible`,\n );\n\n // Show the dialog\n setTimeout(() => {\n addClass(component.element, `${component.getClass(\"dialog\")}--visible`);\n\n // Setup focus trap and events\n trapFocus();\n setupEvents();\n\n // Trigger open event\n if (typeof component.emit === \"function\") {\n component.emit(DIALOG_EVENTS.OPEN, { dialog: component });\n\n setTimeout(() => {\n component.emit(DIALOG_EVENTS.AFTER_OPEN, { dialog: component });\n }, animationDuration);\n }\n }, 10);\n },\n\n close() {\n // console.log(\"Dialog close method called\");\n\n // Trigger before close event\n const beforeCloseEvent = {\n dialog: component,\n defaultPrevented: false,\n preventDefault: () => {\n beforeCloseEvent.defaultPrevented = true;\n },\n };\n\n if (typeof component.emit === \"function\") {\n component.emit(DIALOG_EVENTS.BEFORE_CLOSE, beforeCloseEvent);\n }\n\n // If event was prevented, don't close\n if (beforeCloseEvent.defaultPrevented) {\n console.log(\"Dialog close prevented by event handler\");\n return;\n }\n\n // Get class names\n const dialogVisibleClass = `${component.getClass(\"dialog\")}--visible`;\n const overlayVisibleClass = `${component.getClass(\n \"dialog-overlay\",\n )}--visible`;\n\n // Remove dialog visible class\n removeClass(component.element, dialogVisibleClass);\n\n // Remove overlay visible class\n removeClass(component.overlay, overlayVisibleClass);\n\n // Release focus and cleanup events\n releaseFocus();\n cleanupEvents();\n\n // Trigger close events\n if (typeof component.emit === \"function\") {\n component.emit(DIALOG_EVENTS.CLOSE, { dialog: component });\n }\n\n // Remove from DOM after animation completes\n setTimeout(() => {\n if (component.overlay && component.overlay.parentNode) {\n component.overlay.parentNode.removeChild(component.overlay);\n }\n\n if (typeof component.emit === \"function\") {\n component.emit(DIALOG_EVENTS.AFTER_CLOSE, { dialog: component });\n }\n }, animationDuration);\n },\n\n toggle(open?: boolean) {\n if (open === undefined) {\n this.isOpen() ? this.close() : this.open();\n } else if (open) {\n this.open();\n } else {\n this.close();\n }\n },\n\n isOpen() {\n return component.element.classList.contains(\n `${component.getClass(\"dialog\")}--visible`,\n );\n },\n };\n\n // Set up event listener for the dialog:close event\n if (component && component.on) {\n component.on(\"dialog:close\", () => {\n visibility.close();\n });\n }\n\n return {\n ...component,\n visibility,\n };\n};\n\n/**\n * Adds content management features to dialog\n * @returns Component enhancer with content features\n */\nexport const withContent = () => (component) => {\n const headerElement = component.structure.header;\n const contentElement = component.structure.content;\n const footerElement = component.structure.footer;\n\n return {\n ...component,\n content: {\n /**\n * Sets dialog title\n * @param title Title text\n */\n setTitle(title: string) {\n let titleElement = headerElement.querySelector(\n `.${component.getClass(\"dialog-header-title\")}`,\n );\n\n if (!titleElement && title) {\n // Create title element if it doesn't exist\n titleElement = document.createElement(\"h2\");\n titleElement.classList.add(component.getClass(\"dialog-header-title\"));\n headerElement\n .querySelector(`.${component.getClass(\"dialog-header-content\")}`)\n .appendChild(titleElement);\n }\n\n if (titleElement) {\n titleElement.textContent = title;\n }\n },\n\n /**\n * Gets dialog title\n * @returns Title text\n */\n getTitle() {\n const titleElement = headerElement.querySelector(\n `.${component.getClass(\"dialog-header-title\")}`,\n );\n return titleElement ? titleElement.textContent || \"\" : \"\";\n },\n\n /**\n * Sets dialog subtitle\n * @param subtitle Subtitle text\n */\n setSubtitle(subtitle: string) {\n let subtitleElement = headerElement.querySelector(\n `.${component.getClass(\"dialog-header-subtitle\")}`,\n );\n\n if (!subtitleElement && subtitle) {\n // Create subtitle element if it doesn't exist\n subtitleElement = document.createElement(\"p\");\n subtitleElement.classList.add(\n component.getClass(\"dialog-header-subtitle\"),\n );\n headerElement\n .querySelector(`.${component.getClass(\"dialog-header-content\")}`)\n .appendChild(subtitleElement);\n }\n\n if (subtitleElement) {\n subtitleElement.textContent = subtitle;\n }\n },\n\n /**\n * Gets dialog subtitle\n * @returns Subtitle text\n */\n getSubtitle() {\n const subtitleElement = headerElement.querySelector(\n `.${component.getClass(\"dialog-header-subtitle\")}`,\n );\n return subtitleElement ? subtitleElement.textContent || \"\" : \"\";\n },\n\n /**\n * Sets dialog content\n * @param content Content HTML\n */\n setContent(content: string) {\n contentElement.innerHTML = content;\n },\n\n /**\n * Gets dialog content\n * @returns Content HTML\n */\n getContent() {\n return contentElement.innerHTML;\n },\n\n /**\n * Gets dialog header element\n * @returns Header element\n */\n getHeaderElement() {\n return headerElement;\n },\n\n /**\n * Gets dialog content element\n * @returns Content element\n */\n getContentElement() {\n return contentElement;\n },\n\n /**\n * Gets dialog footer element\n * @returns Footer element\n */\n getFooterElement() {\n return footerElement;\n },\n },\n };\n};\n\n/**\n * Adds button management features to dialog\n * @returns Component enhancer with button features\n */\nexport const withButtons = () => (component) => {\n // Initialize buttons array if not already done\n if (!component._buttons) {\n component._buttons = [];\n }\n\n return {\n ...component,\n buttons: {\n /**\n * Adds a button to the dialog footer\n * @param button Button configuration\n */\n addButton(button: DialogButton) {\n // Create footer if it doesn't exist\n let footer = component.structure.footer;\n\n if (!footer) {\n footer = document.createElement(\"div\");\n footer.classList.add(component.getClass(\"dialog-footer\"));\n\n // Apply footer alignment\n const alignment = component.config.footerAlignment || \"right\";\n if (alignment !== \"right\") {\n addClass(\n footer,\n `${component.getClass(\"dialog-footer\")}--${alignment}`,\n );\n }\n\n component.element.appendChild(footer);\n component.structure.footer = footer;\n }\n\n // Add the button\n addButton(footer, button, component);\n },\n\n /**\n * Removes a button by index or text\n * @param indexOrText Button index or text\n */\n removeButton(indexOrText: number | string) {\n if (typeof indexOrText === \"number\") {\n // Remove by index\n if (indexOrText >= 0 && indexOrText < component._buttons.length) {\n const button = component._buttons[indexOrText];\n button.instance.destroy();\n component._buttons.splice(indexOrText, 1);\n }\n } else {\n // Remove by text\n const index = component._buttons.findIndex(\n (button) => button.config.text === indexOrText,\n );\n\n if (index !== -1) {\n const button = component._buttons[index];\n button.instance.destroy();\n component._buttons.splice(index, 1);\n }\n }\n\n // If no buttons left, remove footer\n if (component._buttons.length === 0 && component.structure.footer) {\n component.element.removeChild(component.structure.footer);\n component.structure.footer = null;\n }\n },\n\n /**\n * Gets all footer buttons\n * @returns Array of button configurations\n */\n getButtons() {\n return component._buttons.map((button) => button.config);\n },\n\n /**\n * Sets footer alignment\n * @param alignment Footer alignment\n */\n setFooterAlignment(alignment: string) {\n if (!component.structure.footer) return;\n\n // Define all possible alignments\n const ALL_ALIGNMENTS = [\"right\", \"left\", \"center\", \"space-between\"];\n\n // Remove existing alignment classes\n ALL_ALIGNMENTS.forEach((align) => {\n if (align !== \"right\") {\n removeClass(\n component.structure.footer,\n `${component.getClass(\"dialog-footer\")}--${align}`,\n );\n }\n });\n\n // Add new alignment class if not right (default)\n if (alignment !== \"right\") {\n addClass(\n component.structure.footer,\n `${component.getClass(\"dialog-footer\")}--${alignment}`,\n );\n }\n },\n },\n };\n};\n\n/**\n * Adds size management features to dialog\n * @returns Component enhancer with size features\n */\nexport const withSize = () => (component) => {\n return {\n ...component,\n size: {\n /**\n * Sets dialog size\n * @param size Size variant\n */\n setSize(size: string) {\n // Define all possible sizes\n const ALL_SIZES = [\n \"small\",\n \"medium\",\n \"large\",\n \"fullwidth\",\n \"fullscreen\",\n ];\n\n // Remove existing size classes\n ALL_SIZES.forEach((sizeValue) => {\n removeClass(\n component.element,\n `${component.getClass(\"dialog\")}--${sizeValue}`,\n );\n });\n\n // Add new size class if not medium (default)\n if (size !== \"medium\") {\n addClass(\n component.element,\n `${component.getClass(\"dialog\")}--${size}`,\n );\n }\n },\n },\n };\n};\n\n/**\n * Adds confirmation dialog features\n * @returns Component enhancer with confirm feature\n */\nexport const withConfirm = () => (component) => {\n return {\n ...component,\n confirm(options) {\n return new Promise((resolve) => {\n const {\n title = \"Confirm\",\n message,\n confirmText = \"Yes\",\n cancelText = \"No\",\n // Use string literals directly\n confirmVariant = \"filled\",\n cancelVariant = \"text\",\n size = \"small\",\n } = options;\n\n // Set dialog properties\n component.content.setTitle(title);\n component.content.setContent(`<p>${message}</p>`);\n component.size.setSize(size);\n\n // Clear existing buttons\n component._buttons.forEach((button) => button.instance.destroy());\n component._buttons = [];\n\n // Add confirm and cancel buttons\n component.buttons.addButton({\n text: confirmText,\n variant: confirmVariant,\n onClick: () => {\n resolve(true);\n },\n });\n\n component.buttons.addButton({\n text: cancelText,\n variant: cancelVariant,\n onClick: () => {\n resolve(false);\n },\n });\n\n // Open the dialog\n component.visibility.open();\n });\n },\n };\n};\n",
|
|
119
119
|
"// src/components/divider/divider.ts\nimport { createBase, withElement, pipe, withVariant } from \"../../core/compose\";\nimport { DividerConfig, createBaseConfig } from \"./config\";\nimport { withOrientation, withInset, withStyle } from \"./features\";\nimport { DividerComponent } from \"./types\";\n\n/**\n * Creates a new Divider component with the specified configuration.\n *\n * Dividers are thin lines that separate content into distinct sections following\n * Material Design 3 guidelines. They can be horizontal or vertical, and offer\n * various customization options for inset, thickness, and color.\n *\n * @param config - Divider configuration options\n * @returns Divider component instance with methods for managing appearance and behavior\n *\n * @throws {Error} If divider creation fails due to invalid configuration\n *\n * @category Components\n *\n * @example\n * ```typescript\n * // Create a basic horizontal divider\n * const divider = createDivider();\n * container.appendChild(divider.element);\n *\n * // Create a vertical divider with custom styling\n * const separator = createDivider({\n * orientation: 'vertical',\n * thickness: 2,\n * color: '#2196F3',\n * variant: 'middle-inset',\n * insetStart: 8,\n * insetEnd: 8\n * });\n *\n * // Later, change the divider's appearance\n * divider.setColor('var(--md-sys-color-outline)');\n * divider.setThickness(1);\n * divider.setVariant('inset');\n * ```\n */\nexport const createDivider = (config: DividerConfig = {}): DividerComponent => {\n // Process configuration\n const processedConfig = createBaseConfig(config);\n\n // Create component through composition\n return pipe(\n createBase,\n withElement({\n tag: \"hr\",\n componentName: \"divider\",\n className: config.class,\n }),\n withOrientation(processedConfig),\n withVariant(processedConfig),\n withInset(processedConfig),\n withStyle(processedConfig)\n )(processedConfig) as DividerComponent;\n};\n",
|
|
120
120
|
"// src/components/divider/config.ts\nimport { createComponentConfig } from '../../core/config/component';\n\n/**\n * Configuration options for divider components\n * \n * Controls the appearance, orientation, and behavior of Material Design 3 dividers.\n * \n * @category Components\n */\nexport interface DividerConfig {\n /**\n * CSS class prefix (defaults to 'mtrl')\n * \n * Used for generating BEM-style class names for the component\n */\n prefix?: string;\n \n /**\n * CSS class to add to the divider\n * \n * Additional classes for custom styling needs.\n * Can be a single class string or an array of class strings.\n * \n * @example 'my-custom-divider' or ['my-custom-divider', 'special-spacing']\n */\n class?: string | string[];\n \n /**\n * Orientation of the divider\n * \n * - 'horizontal': Creates a horizontal line (default)\n * - 'vertical': Creates a vertical line\n * \n * @default 'horizontal'\n * \n * @example\n * ```typescript\n * // Create a vertical divider\n * createDivider({ orientation: 'vertical' })\n * ```\n */\n orientation?: 'horizontal' | 'vertical';\n \n /**\n * Variant of the divider\n * \n * Controls how the divider is inset within its container:\n * - 'full-width': Spans the entire width/height (default)\n * - 'inset': Adds space at the start (left for horizontal, top for vertical)\n * - 'middle-inset': Adds space at both start and end\n * \n * Most commonly used in lists to align dividers with text content.\n * \n * @default 'full-width'\n * \n * @example\n * ```typescript\n * // Create a list divider with left inset\n * createDivider({ variant: 'inset' })\n * ```\n */\n variant?: 'full-width' | 'inset' | 'middle-inset';\n \n /**\n * Custom inset value (left margin for horizontal, top margin for vertical)\n * \n * Overrides the default inset spacing at the start of the divider.\n * Only applies when variant is 'inset' or 'middle-inset'.\n * \n * @default 16 for 'inset' and 'middle-inset' variants\n * \n * @example\n * ```typescript\n * // Create a divider with 24px left inset\n * createDivider({ variant: 'inset', insetStart: 24 })\n * ```\n */\n insetStart?: number;\n \n /**\n * Custom inset end value (right margin for horizontal, bottom margin for vertical)\n * \n * Overrides the default inset spacing at the end of the divider.\n * Only applies when variant is 'middle-inset'.\n * \n * @default 0 for 'inset', 16 for 'middle-inset'\n * \n * @example\n * ```typescript\n * // Create a divider with custom insets on both sides\n * createDivider({ variant: 'middle-inset', insetStart: 16, insetEnd: 24 })\n * ```\n */\n insetEnd?: number;\n \n /**\n * Color of the divider\n * \n * Sets a custom color for the divider. Accepts any valid CSS color value.\n * By default, dividers use the 'outline-variant' color from the Material theme.\n * \n * @example\n * ```typescript\n * // Create a blue divider\n * createDivider({ color: '#2196F3' })\n * \n * // Create a divider with a semi-transparent color\n * createDivider({ color: 'rgba(0, 0, 0, 0.12)' })\n * ```\n */\n color?: string;\n \n /**\n * Thickness of the divider in pixels\n * \n * Controls the thickness (height for horizontal, width for vertical) of the divider.\n * Material Design 3 typically uses 1px thickness for dividers.\n * \n * @default 1\n * \n * @example\n * ```typescript\n * // Create a bold divider\n * createDivider({ thickness: 2 })\n * ```\n */\n thickness?: number;\n \n /**\n * Used internally for component composition\n * \n * @internal\n */\n componentName?: string;\n}\n\n/**\n * Default configuration for dividers\n * \n * @internal\n */\nexport const defaultConfig: Partial<DividerConfig> = {\n orientation: 'horizontal',\n variant: 'full-width',\n thickness: 1\n};\n\n/**\n * Creates a base configuration object for divider\n * \n * Merges user-provided configuration with default values and ensures\n * all required properties have values.\n * \n * @param config - User provided configuration\n * @returns Complete configuration with defaults applied\n * \n * @internal\n */\nexport const createBaseConfig = (config: DividerConfig = {}): DividerConfig => {\n return createComponentConfig(\n defaultConfig as DividerConfig,\n config,\n 'divider'\n );\n};",
|
|
121
121
|
"// src/components/divider/features.ts\nimport { BaseComponent, ElementComponent } from '../../core/compose';\nimport { DividerConfig } from './config';\nimport { DividerComponent } from './types';\n\n/**\n * Adds orientation functionality to divider\n * \n * Higher-order function that enhances a component with the ability to be\n * oriented horizontally (default) or vertically. Controls the appropriate\n * CSS classes and dimensional styling based on orientation.\n * \n * @param config - Divider configuration\n * @returns Function that enhances a component with orientation capabilities\n * \n * @internal\n */\nexport const withOrientation = (config: DividerConfig) => \n <C extends ElementComponent & BaseComponent>(component: C): C & Partial<DividerComponent> => {\n const orientation = config.orientation || 'horizontal';\n \n // Apply the orientation class\n component.element.classList.add(`${component.getClass('divider')}--${orientation}`);\n \n // Set styles based on orientation and thickness\n const thickness = config.thickness || 1;\n \n if (orientation === 'horizontal') {\n component.element.style.height = `${thickness}px`;\n component.element.style.width = '100%';\n } else {\n component.element.style.width = `${thickness}px`;\n component.element.style.height = '100%';\n }\n \n return {\n ...component,\n \n getOrientation() {\n return orientation;\n },\n \n setOrientation(newOrientation: 'horizontal' | 'vertical') {\n // Remove existing orientation class\n component.element.classList.remove(`${component.getClass('divider')}--${orientation}`);\n \n // Add new orientation class\n component.element.classList.add(`${component.getClass('divider')}--${newOrientation}`);\n \n // Update styles\n if (newOrientation === 'horizontal') {\n component.element.style.height = `${thickness}px`;\n component.element.style.width = '100%';\n \n // Reset vertical styles\n component.element.style.marginTop = '';\n component.element.style.marginBottom = '';\n } else {\n component.element.style.width = `${thickness}px`;\n component.element.style.height = '100%';\n \n // Reset horizontal styles\n component.element.style.marginLeft = '';\n component.element.style.marginRight = '';\n }\n \n return this as unknown as DividerComponent;\n }\n };\n };\n\n/**\n * Adds inset functionality to divider\n * \n * Higher-order function that enhances a component with the ability to have\n * customized inset spacing. Supports three variants (full-width, inset, middle-inset)\n * and allows fine-grained control over start and end insets.\n * \n * Insets are applied as margins in the appropriate direction based on orientation:\n * - For horizontal dividers: left/right margins\n * - For vertical dividers: top/bottom margins\n * \n * @param config - Divider configuration\n * @returns Function that enhances a component with inset capabilities\n * \n * @internal\n */\nexport const withInset = (config: DividerConfig) => \n <C extends ElementComponent & Partial<DividerComponent>>(component: C): C & Partial<DividerComponent> => {\n const variant = config.variant || 'full-width';\n const orientation = config.orientation || 'horizontal';\n \n // Apply inset styles based on variant\n if (variant === 'inset' || variant === 'middle-inset') {\n if (orientation === 'horizontal') {\n const insetStart = config.insetStart !== undefined ? config.insetStart : 16;\n const insetEnd = config.insetEnd !== undefined ? config.insetEnd : (variant === 'middle-inset' ? 16 : 0);\n \n component.element.style.marginLeft = `${insetStart}px`;\n component.element.style.marginRight = `${insetEnd}px`;\n } else {\n const insetStart = config.insetStart !== undefined ? config.insetStart : 16;\n const insetEnd = config.insetEnd !== undefined ? config.insetEnd : (variant === 'middle-inset' ? 16 : 0);\n \n component.element.style.marginTop = `${insetStart}px`;\n component.element.style.marginBottom = `${insetEnd}px`;\n }\n }\n \n return {\n ...component,\n \n getVariant() {\n return variant as 'full-width' | 'inset' | 'middle-inset';\n },\n \n setVariant(newVariant: 'full-width' | 'inset' | 'middle-inset') {\n // Remove existing variant class\n component.element.classList.remove(`${component.getClass('divider')}--${variant}`);\n \n // Add new variant class\n component.element.classList.add(`${component.getClass('divider')}--${newVariant}`);\n \n // Update styles\n const currentOrientation = component.getOrientation ? component.getOrientation() : orientation;\n \n if (newVariant === 'full-width') {\n if (currentOrientation === 'horizontal') {\n component.element.style.marginLeft = '';\n component.element.style.marginRight = '';\n } else {\n component.element.style.marginTop = '';\n component.element.style.marginBottom = '';\n }\n } else {\n const insetStart = config.insetStart !== undefined ? config.insetStart : 16;\n const insetEnd = config.insetEnd !== undefined ? config.insetEnd : (newVariant === 'middle-inset' ? 16 : 0);\n \n if (currentOrientation === 'horizontal') {\n component.element.style.marginLeft = `${insetStart}px`;\n component.element.style.marginRight = `${insetEnd}px`;\n } else {\n component.element.style.marginTop = `${insetStart}px`;\n component.element.style.marginBottom = `${insetEnd}px`;\n }\n }\n \n return this as unknown as DividerComponent;\n },\n \n setInset(insetStart?: number, insetEnd?: number) {\n const currentOrientation = component.getOrientation ? component.getOrientation() : orientation;\n const currentVariant = component.getVariant ? component.getVariant() : variant;\n \n if (currentVariant !== 'full-width') {\n if (currentOrientation === 'horizontal') {\n if (insetStart !== undefined) {\n component.element.style.marginLeft = `${insetStart}px`;\n }\n \n if (insetEnd !== undefined) {\n component.element.style.marginRight = `${insetEnd}px`;\n }\n } else {\n if (insetStart !== undefined) {\n component.element.style.marginTop = `${insetStart}px`;\n }\n \n if (insetEnd !== undefined) {\n component.element.style.marginBottom = `${insetEnd}px`;\n }\n }\n }\n \n return this as unknown as DividerComponent;\n }\n };\n };\n\n/**\n * Adds style customization to divider\n * \n * Higher-order function that enhances a component with visual customization\n * capabilities, including:\n * - Custom thickness (height for horizontal, width for vertical dividers)\n * - Custom colors (background-color CSS property)\n * \n * These styling options allow dividers to be visually adapted to different\n * design requirements while maintaining Material Design principles.\n * \n * @param config - Divider configuration\n * @returns Function that enhances a component with style capabilities\n * \n * @internal\n */\nexport const withStyle = (config: DividerConfig) => \n <C extends ElementComponent & Partial<DividerComponent>>(component: C): C & Partial<DividerComponent> => {\n // Apply custom color if provided\n if (config.color) {\n component.element.style.backgroundColor = config.color;\n }\n \n // Apply thickness\n const thickness = config.thickness || 1;\n const orientation = config.orientation || 'horizontal';\n \n if (orientation === 'horizontal') {\n component.element.style.height = `${thickness}px`;\n } else {\n component.element.style.width = `${thickness}px`;\n }\n \n return {\n ...component,\n \n setThickness(newThickness: number) {\n const currentOrientation = component.getOrientation ? component.getOrientation() : orientation;\n \n if (currentOrientation === 'horizontal') {\n component.element.style.height = `${newThickness}px`;\n } else {\n component.element.style.width = `${newThickness}px`;\n }\n \n return this as unknown as DividerComponent;\n },\n \n setColor(color: string) {\n component.element.style.backgroundColor = color;\n return this as unknown as DividerComponent;\n }\n };\n };",
|
|
122
122
|
"// src/components/dialog/api.ts (partial update)\nimport { DialogComponent, DialogEvent, DialogButton, DialogConfirmOptions, DialogFooterAlignment, DialogSize, DialogEventType } from './types';\nimport { removeClass } from '../../core/dom/classes';\n\ninterface ApiOptions {\n visibility: {\n open: () => void;\n close: () => void;\n toggle: (open?: boolean) => void;\n isOpen: () => boolean;\n };\n content: {\n setTitle: (title: string) => void;\n getTitle: () => string;\n setSubtitle: (subtitle: string) => void;\n getSubtitle: () => string;\n setContent: (content: string) => void;\n getContent: () => string;\n getHeaderElement: () => HTMLElement | null;\n getContentElement: () => HTMLElement | null;\n getFooterElement: () => HTMLElement | null;\n };\n buttons: {\n addButton: (button: DialogButton) => void;\n removeButton: (indexOrText: number | string) => void;\n getButtons: () => DialogButton[];\n setFooterAlignment: (alignment: DialogFooterAlignment | string) => void;\n };\n focus: {\n trapFocus: () => void;\n releaseFocus: () => void;\n };\n size: {\n setSize: (size: DialogSize | string) => void;\n };\n divider: {\n toggleDivider: (show: boolean) => void;\n hasDivider: () => boolean;\n };\n events: {\n on: (event: string, handler: Function) => void;\n off: (event: string, handler: Function) => void;\n trigger: (event: string, data: any) => void;\n };\n lifecycle: {\n destroy: () => void;\n };\n}\n\ninterface ComponentWithElements {\n element: HTMLElement;\n overlay: HTMLElement;\n getClass: (name: string) => string;\n confirm?: (options: DialogConfirmOptions) => Promise<boolean>;\n}\n\n/**\n * Enhances a dialog component with API methods\n * @param {ApiOptions} options - API configuration options\n * @returns {Function} Higher-order function that adds API methods to component\n * @internal This is an internal utility for the Dialog component\n */\nexport const withAPI = (options: ApiOptions) => \n (component: ComponentWithElements): DialogComponent => ({\n ...component as any,\n \n /**\n * Opens the dialog\n * @returns {DialogComponent} Dialog component instance for chaining\n */\n open() {\n options.visibility.open();\n return this;\n },\n \n /**\n * Closes the dialog\n * @returns {DialogComponent} Dialog component instance for chaining\n */\n close() {\n options.visibility.close();\n return this;\n },\n \n /**\n * Toggles dialog open/closed state\n * @param {boolean} [open] - Optional flag to force open state\n * @returns {DialogComponent} Dialog component instance for chaining\n */\n toggle(open?: boolean) {\n options.visibility.toggle(open);\n return this;\n },\n \n /**\n * Checks if dialog is open\n * @returns {boolean} True if dialog is open\n */\n isOpen() {\n return options.visibility.isOpen();\n },\n \n /**\n * Sets dialog title\n * @param {string} title - Title text\n * @returns {DialogComponent} Dialog component instance for chaining\n */\n setTitle(title: string) {\n options.content.setTitle(title);\n return this;\n },\n \n /**\n * Gets dialog title\n * @returns {string} Title text\n */\n getTitle() {\n return options.content.getTitle();\n },\n \n /**\n * Sets dialog subtitle\n * @param {string} subtitle - Subtitle text\n * @returns {DialogComponent} Dialog component instance for chaining\n */\n setSubtitle(subtitle: string) {\n options.content.setSubtitle(subtitle);\n return this;\n },\n \n /**\n * Gets dialog subtitle\n * @returns {string} Subtitle text\n */\n getSubtitle() {\n return options.content.getSubtitle();\n },\n\n /**\n * Sets dialog content\n * @param {string} content - Content HTML\n * @returns {DialogComponent} Dialog component instance for chaining\n */\n setContent(content: string) {\n options.content.setContent(content);\n return this;\n },\n \n /**\n * Gets dialog content\n * @returns {string} Content HTML\n */\n getContent() {\n return options.content.getContent();\n },\n \n /**\n * Adds a button to the dialog footer\n * @param {DialogButton} button - Button configuration\n * @returns {DialogComponent} Dialog component instance for chaining\n */\n addButton(button: DialogButton) {\n options.buttons.addButton(button);\n return this;\n },\n \n /**\n * Removes a button by index or text\n * @param {number|string} indexOrText - Button index or text\n * @returns {DialogComponent} Dialog component instance for chaining\n */\n removeButton(indexOrText: number | string) {\n options.buttons.removeButton(indexOrText);\n return this;\n },\n \n /**\n * Gets all footer buttons\n * @returns {DialogButton[]} Array of button configurations\n */\n getButtons() {\n return options.buttons.getButtons();\n },\n \n /**\n * Sets footer alignment\n * @param {string} alignment - Footer alignment\n * @returns {DialogComponent} Dialog component instance for chaining\n */\n setFooterAlignment(alignment: DialogFooterAlignment | string) {\n options.buttons.setFooterAlignment(alignment);\n return this;\n },\n\n /**\n * Shows or hides the divider\n * @param {boolean} show - Whether to show the divider\n * @returns {DialogComponent} Dialog component instance for chaining\n */\n toggleDivider(show: boolean) {\n options.divider.toggleDivider(show);\n return this;\n },\n \n /**\n * Checks if the dialog has a divider\n * @returns {boolean} True if the dialog has a divider\n */\n hasDivider() {\n return options.divider.hasDivider();\n },\n\n /**\n * Sets dialog size\n * @param {string} size - Size variant\n * @returns {DialogComponent} Dialog component instance for chaining\n */\n setSize(size: DialogSize | string) {\n options.size.setSize(size);\n return this;\n },\n \n /**\n * Adds event listener\n * @param {string} event - Event name\n * @param {Function} handler - Event handler\n * @returns {DialogComponent} Dialog component instance for chaining\n */\n on(event: DialogEventType | string, handler: (event: DialogEvent) => void) {\n options.events.on(event, handler);\n return this;\n },\n \n /**\n * Removes event listener\n * @param {string} event - Event name\n * @param {Function} handler - Event handler\n * @returns {DialogComponent} Dialog component instance for chaining\n */\n off(event: DialogEventType | string, handler: (event: DialogEvent) => void) {\n options.events.off(event, handler);\n return this;\n },\n \n /**\n * Gets dialog header element\n * @returns {HTMLElement|null} Header element\n */\n getHeaderElement() {\n return options.content.getHeaderElement();\n },\n \n /**\n * Gets dialog content element\n * @returns {HTMLElement|null} Content element\n */\n getContentElement() {\n return options.content.getContentElement();\n },\n \n /**\n * Gets dialog footer element\n * @returns {HTMLElement|null} Footer element\n */\n getFooterElement() {\n return options.content.getFooterElement();\n },\n \n /**\n * Creates a confirmation dialog with Yes/No buttons\n * @param {DialogConfirmOptions} options - Confirmation dialog options\n * @returns {Promise<boolean>} Promise resolving to user choice (true for confirm, false for cancel)\n */\n confirm(options?: DialogConfirmOptions) {\n if (component.confirm) {\n return component.confirm(options || { message: 'Are you sure?' });\n }\n \n // Fallback if confirm feature is not available\n return Promise.resolve(false);\n },\n \n /**\n * Destroys the dialog and removes it from DOM\n */\n destroy() {\n // Close the dialog first if it's open\n console.log('destroy', this.isOpen());\n if (this.isOpen()) {\n // We'll handle removal directly rather than calling this.close()\n // to avoid animation delay in critical cleanup\n const dialogVisibleClass = `${component.getClass('dialog')}--visible`;\n const overlayVisibleClass = `${component.getClass('dialog-overlay')}--visible`;\n \n // Remove visibility classes using core utilities\n removeClass(component.element, dialogVisibleClass);\n removeClass(component.overlay, overlayVisibleClass);\n \n // Call any cleanup needed\n if (options.focus && options.focus.releaseFocus) {\n options.focus.releaseFocus();\n }\n }\n \n // Call lifecycle destroy\n options.lifecycle.destroy();\n \n // Immediately remove from DOM\n if (component.overlay && component.overlay.parentNode) {\n component.overlay.parentNode.removeChild(component.overlay);\n }\n },\n \n // Pass through element references\n element: component.element,\n overlay: component.overlay\n });",
|
|
123
|
+
"// src/components/drawer/drawer.ts\nimport { pipe } from \"../../core/compose\";\nimport { createBase, withElement } from \"../../core/compose/component\";\nimport {\n withEvents,\n withVariant,\n withLifecycle,\n} from \"../../core/compose/features\";\nimport { withItems, withState, withHeadline } from \"./features\";\nimport { withAPI } from \"./api\";\nimport { DrawerConfig } from \"./types\";\nimport { createBaseConfig, getElementConfig, getApiConfig } from \"./config\";\nimport { DRAWER_DEFAULTS } from \"./constants\";\n\n/**\n * Creates a new Drawer component with the specified configuration.\n *\n * The Drawer component implements Material Design 3 navigation drawer with\n * support for standard (inline) and modal (overlay) variants. It provides\n * navigation destinations with icons, labels, badges, dividers, and section\n * labels following the MD3 specification.\n *\n * The Drawer component is created using a functional composition pattern,\n * applying various features through the pipe function.\n *\n * @param {DrawerConfig} config - Configuration options for the drawer\n * This can include variant, items, headline, position, open state,\n * and other drawer properties. See {@link DrawerConfig} for available options.\n *\n * @returns {DrawerComponent} A fully configured drawer component instance with\n * all requested features applied. The returned component has methods for\n * state management, item selection, and lifecycle management.\n *\n * @throws {Error} Throws an error if drawer creation fails for any reason\n *\n * @example\n * ```ts\n * // Create a standard navigation drawer\n * const drawer = createDrawer({\n * variant: 'standard',\n * headline: 'Mail',\n * open: true,\n * items: [\n * { id: 'inbox', label: 'Inbox', icon: '<svg>...</svg>', badge: '24', active: true },\n * { id: 'outbox', label: 'Outbox', icon: '<svg>...</svg>' },\n * { type: 'divider' },\n * { type: 'section', label: 'Labels' },\n * { id: 'family', label: 'Family', icon: '<svg>...</svg>' },\n * ],\n * onSelect: (event) => console.log('Selected:', event.id),\n * });\n *\n * document.body.appendChild(drawer.element);\n *\n * // Create a modal drawer\n * const modalDrawer = createDrawer({\n * variant: 'modal',\n * headline: 'Navigation',\n * items: [\n * { id: 'home', label: 'Home', icon: '<svg>...</svg>', active: true },\n * { id: 'settings', label: 'Settings', icon: '<svg>...</svg>' },\n * ],\n * });\n *\n * document.body.appendChild(modalDrawer.element);\n * modalDrawer.open();\n * ```\n *\n * @category Components\n */\nconst createDrawer = (config: DrawerConfig = {}) => {\n const baseConfig = createBaseConfig(config);\n\n try {\n const drawer = pipe(\n createBase,\n withEvents(),\n withElement(getElementConfig(baseConfig)),\n withVariant(baseConfig),\n withHeadline(baseConfig),\n withItems(baseConfig),\n withState(baseConfig),\n withLifecycle(),\n // Assemble the DOM structure\n (component) => {\n const sheetEl = document.createElement(\"div\");\n sheetEl.className = component.getClass(\"drawer__sheet\");\n\n // Set drawer width as a CSS custom property on the root.\n // The sheet reads it via var(--drawer-width) in CSS.\n // The standard variant also uses it to animate the root width.\n const width = baseConfig.width;\n const widthValue = width\n ? typeof width === \"number\"\n ? `${width}px`\n : width\n : `${DRAWER_DEFAULTS.WIDTH}px`;\n component.element.style.setProperty(\"--drawer-width\", widthValue);\n\n // Append headline if present\n if (component.headlineElement) {\n sheetEl.appendChild(component.headlineElement);\n }\n\n // Append items container\n if (component.itemsContainer) {\n sheetEl.appendChild(component.itemsContainer);\n }\n\n // For modal variant, insert scrim before the sheet in the root element\n if (component.scrimElement) {\n component.element.appendChild(component.scrimElement);\n }\n\n // Append sheet to root element\n component.element.appendChild(sheetEl);\n\n // Apply position class\n const position = baseConfig.position || \"start\";\n component.element.classList.add(\n `${component.getClass(\"drawer\")}--${position}`,\n );\n\n return component;\n },\n (comp) => withAPI(getApiConfig(comp))(comp),\n )(baseConfig);\n\n return drawer;\n } catch (error) {\n console.error(\"Drawer creation error:\", error);\n throw new Error(`Failed to create drawer: ${(error as Error).message}`);\n }\n};\n\nexport default createDrawer;\n",
|
|
124
|
+
"// src/components/drawer/constants.ts\n\n/**\n * Drawer variants matching MD3 navigation drawer specification\n */\nexport const DRAWER_VARIANTS = {\n /** Standard drawer — inline, can be permanently visible or toggled */\n STANDARD: \"standard\",\n /** Modal drawer — overlays content with scrim, for compact/medium screens */\n MODAL: \"modal\",\n} as const;\n\n/**\n * Drawer positions (anchor edge)\n */\nexport const DRAWER_POSITIONS = {\n /** Start edge (left in LTR, right in RTL) — default per MD3 */\n START: \"start\",\n /** End edge (right in LTR, left in RTL) */\n END: \"end\",\n} as const;\n\n/**\n * Drawer item types for the items configuration array\n */\nexport const DRAWER_ITEM_TYPES = {\n /** Navigation destination item */\n ITEM: \"item\",\n /** Visual separator between groups */\n DIVIDER: \"divider\",\n /** Section label / subhead for grouping */\n SECTION: \"section\",\n} as const;\n\n/**\n * Drawer events\n */\nexport const DRAWER_EVENTS = {\n /** Fired when the drawer opens */\n OPEN: \"open\",\n /** Fired when the drawer closes */\n CLOSE: \"close\",\n /** Fired when a navigation item is selected */\n SELECT: \"select\",\n} as const;\n\n/**\n * CSS classes used by the drawer component\n */\nexport const DRAWER_CLASSES = {\n /** Root container */\n ROOT: \"drawer\",\n /** Scrim overlay (modal variant only) */\n SCRIM: \"drawer__scrim\",\n /** Inner sheet / panel */\n SHEET: \"drawer__sheet\",\n /** Headline text */\n HEADLINE: \"drawer__headline\",\n /** Scrollable items container */\n ITEMS: \"drawer__items\",\n /** Single navigation item */\n ITEM: \"drawer__item\",\n /** Item icon */\n ITEM_ICON: \"drawer__item-icon\",\n /** Item label text */\n ITEM_LABEL: \"drawer__item-label\",\n /** Item badge */\n ITEM_BADGE: \"drawer__item-badge\",\n /** Active indicator shape */\n ACTIVE_INDICATOR: \"drawer__active-indicator\",\n /** Dense/compact variant */\n DENSE: \"drawer--dense\",\n /** Divider separator */\n DIVIDER: \"drawer__divider\",\n /** Section label */\n SECTION_LABEL: \"drawer__section-label\",\n} as const;\n\n/**\n * Default animation configuration\n */\nexport const DRAWER_ANIMATION = {\n /** Animation duration in milliseconds */\n DURATION: 300,\n /** Easing for opening */\n EASING_OPEN: \"cubic-bezier(0.0, 0.0, 0.2, 1.0)\",\n /** Easing for closing */\n EASING_CLOSE: \"cubic-bezier(0.3, 0.0, 1.0, 1.0)\",\n} as const;\n\n/**\n * Drawer default values\n */\nexport const DRAWER_DEFAULTS = {\n /** Default variant */\n VARIANT: DRAWER_VARIANTS.STANDARD,\n /** Default position */\n POSITION: DRAWER_POSITIONS.START,\n /** Whether drawer is open by default */\n OPEN: false,\n /** Whether modal can be dismissed via scrim */\n DISMISSIBLE: true,\n /** Default drawer width in pixels */\n WIDTH: 360,\n} as const;\n",
|
|
125
|
+
"// src/components/drawer/features/items.ts\n\nimport { DrawerConfig, DrawerItemConfig, DrawerSelectEvent } from \"../types\";\nimport { DRAWER_EVENTS } from \"../constants\";\n\n/**\n * Component shape expected by withItems\n */\ninterface ItemsBaseComponent {\n element: HTMLElement;\n getClass: (name: string) => string;\n emit: (event: string, data?: unknown) => void;\n [key: string]: unknown;\n}\n\n/**\n * Creates a single navigation item element\n */\nconst createItemElement = (\n item: DrawerItemConfig,\n getClass: (name: string) => string,\n): HTMLElement => {\n const el = document.createElement(\"button\");\n el.className = getClass(\"drawer__item\");\n el.setAttribute(\"role\", \"tab\");\n el.setAttribute(\"tabindex\", \"-1\");\n\n if (item.id) {\n el.dataset.id = item.id;\n }\n\n if (item.disabled) {\n el.disabled = true;\n el.setAttribute(\"aria-disabled\", \"true\");\n }\n\n // Active indicator (background shape)\n const indicator = document.createElement(\"span\");\n indicator.className = getClass(\"drawer__active-indicator\");\n el.appendChild(indicator);\n\n // Icon (optional, placed before label)\n if (item.icon) {\n const iconEl = document.createElement(\"span\");\n iconEl.className = getClass(\"drawer__item-icon\");\n iconEl.innerHTML = item.icon;\n el.appendChild(iconEl);\n }\n\n // Label text\n if (item.label) {\n const labelEl = document.createElement(\"span\");\n labelEl.className = getClass(\"drawer__item-label\");\n labelEl.textContent = item.label;\n el.appendChild(labelEl);\n }\n\n // Badge (optional, placed after label)\n if (item.badge) {\n const badgeEl = document.createElement(\"span\");\n badgeEl.className = getClass(\"drawer__item-badge\");\n badgeEl.textContent = item.badge;\n el.appendChild(badgeEl);\n }\n\n // Active state\n if (item.active) {\n el.classList.add(`${getClass(\"drawer__item\")}--active`);\n el.setAttribute(\"aria-selected\", \"true\");\n el.setAttribute(\"tabindex\", \"0\");\n } else {\n el.setAttribute(\"aria-selected\", \"false\");\n }\n\n return el;\n};\n\n/**\n * Creates a divider element\n */\nconst createDividerElement = (\n getClass: (name: string) => string,\n): HTMLElement => {\n const el = document.createElement(\"hr\");\n el.className = getClass(\"drawer__divider\");\n el.setAttribute(\"role\", \"separator\");\n return el;\n};\n\n/**\n * Creates a section label element\n */\nconst createSectionElement = (\n item: DrawerItemConfig,\n getClass: (name: string) => string,\n): HTMLElement => {\n const el = document.createElement(\"div\");\n el.className = getClass(\"drawer__section-label\");\n el.textContent = item.label || item.sectionLabel || \"\";\n return el;\n};\n\n/**\n * Adds item management functionality to the drawer component\n *\n * @param config - Drawer configuration\n * @returns Component enhancer function\n */\nexport const withItems =\n (config: DrawerConfig) =>\n (component: ItemsBaseComponent): ItemsBaseComponent => {\n let currentItems: DrawerItemConfig[] = config.items || [];\n let activeId: string | null = null;\n let itemsContainer: HTMLElement | null = null;\n\n // Find initial active item\n const initialActive = currentItems.find(\n (item) =>\n item.type !== \"divider\" && item.type !== \"section\" && item.active,\n );\n if (initialActive?.id) {\n activeId = initialActive.id;\n }\n\n /**\n * Renders all items into the items container\n */\n const renderItems = (): void => {\n if (!itemsContainer) return;\n\n // Clear existing items\n itemsContainer.innerHTML = \"\";\n\n let navIndex = 0;\n\n currentItems.forEach((item) => {\n const type = item.type || \"item\";\n\n if (type === \"divider\") {\n itemsContainer!.appendChild(createDividerElement(component.getClass));\n return;\n }\n\n if (type === \"section\") {\n itemsContainer!.appendChild(\n createSectionElement(item, component.getClass),\n );\n return;\n }\n\n // Navigation item\n const itemEl = createItemElement(item, component.getClass);\n itemEl.dataset.navIndex = String(navIndex);\n navIndex++;\n\n // Click handler\n itemEl.addEventListener(\"click\", (e: Event) => {\n if (item.id && !item.disabled) {\n setActive(item.id);\n\n const selectEvent: DrawerSelectEvent = {\n id: item.id,\n label: item.label || \"\",\n index: parseInt(itemEl.dataset.navIndex || \"0\", 10),\n originalEvent: e,\n };\n\n component.emit(DRAWER_EVENTS.SELECT, selectEvent);\n\n if (config.onSelect) {\n config.onSelect(selectEvent);\n }\n }\n });\n\n itemsContainer!.appendChild(itemEl);\n });\n\n // Set first item as tabbable if no active item\n if (!activeId) {\n const firstItem = itemsContainer.querySelector(\n `.${component.getClass(\"drawer__item\")}`,\n ) as HTMLElement;\n if (firstItem) {\n firstItem.setAttribute(\"tabindex\", \"0\");\n }\n }\n };\n\n /**\n * Sets the active item by id\n */\n const setActive = (id: string): void => {\n if (!itemsContainer) return;\n\n const activeClass = `${component.getClass(\"drawer__item\")}--active`;\n\n // Deactivate all items\n const allItems = itemsContainer.querySelectorAll(\n `.${component.getClass(\"drawer__item\")}`,\n );\n allItems.forEach((el) => {\n el.classList.remove(activeClass);\n el.setAttribute(\"aria-selected\", \"false\");\n el.setAttribute(\"tabindex\", \"-1\");\n });\n\n // Clear or activate\n if (!id) {\n activeId = null;\n\n // Ensure first item is tabbable when nothing is active\n const firstItem = itemsContainer.querySelector(\n `.${component.getClass(\"drawer__item\")}`,\n ) as HTMLElement;\n if (firstItem) {\n firstItem.setAttribute(\"tabindex\", \"0\");\n }\n } else {\n // Activate the target item\n const targetItem = itemsContainer.querySelector(\n `[data-id=\"${id}\"]`,\n ) as HTMLElement;\n if (targetItem) {\n targetItem.classList.add(activeClass);\n targetItem.setAttribute(\"aria-selected\", \"true\");\n targetItem.setAttribute(\"tabindex\", \"0\");\n activeId = id;\n }\n }\n\n // Update the items config to reflect new active state\n currentItems = currentItems.map((item) => ({\n ...item,\n active: item.id === id,\n }));\n };\n\n /**\n * Gets the active item id\n */\n const getActive = (): string | null => activeId;\n\n /**\n * Sets the items and re-renders\n */\n const setItems = (items: DrawerItemConfig[]): void => {\n currentItems = items;\n\n // Recalculate active id\n const active = items.find(\n (item) =>\n item.type !== \"divider\" && item.type !== \"section\" && item.active,\n );\n activeId = active?.id || null;\n\n renderItems();\n };\n\n /**\n * Gets the current items configuration\n */\n const getItems = (): DrawerItemConfig[] => currentItems;\n\n /**\n * Sets badge text on a specific item\n */\n const setBadge = (id: string, badge: string): void => {\n if (!itemsContainer) return;\n\n const itemEl = itemsContainer.querySelector(\n `[data-id=\"${id}\"]`,\n ) as HTMLElement;\n if (!itemEl) return;\n\n let badgeEl = itemEl.querySelector(\n `.${component.getClass(\"drawer__item-badge\")}`,\n ) as HTMLElement;\n\n if (badge) {\n if (!badgeEl) {\n badgeEl = document.createElement(\"span\");\n badgeEl.className = component.getClass(\"drawer__item-badge\");\n itemEl.appendChild(badgeEl);\n }\n badgeEl.textContent = badge;\n } else if (badgeEl) {\n badgeEl.remove();\n }\n\n // Update items config\n currentItems = currentItems.map((item) =>\n item.id === id ? { ...item, badge } : item,\n );\n };\n\n // Setup keyboard navigation within items\n const handleKeydown = (e: KeyboardEvent): void => {\n if (!itemsContainer) return;\n\n const items = Array.from(\n itemsContainer.querySelectorAll(\n `.${component.getClass(\"drawer__item\")}:not([disabled])`,\n ),\n ) as HTMLElement[];\n\n if (!items.length) return;\n\n const currentIndex = items.indexOf(document.activeElement as HTMLElement);\n\n let nextIndex = -1;\n\n switch (e.key) {\n case \"ArrowDown\":\n e.preventDefault();\n nextIndex = currentIndex < items.length - 1 ? currentIndex + 1 : 0;\n break;\n case \"ArrowUp\":\n e.preventDefault();\n nextIndex = currentIndex > 0 ? currentIndex - 1 : items.length - 1;\n break;\n case \"Home\":\n e.preventDefault();\n nextIndex = 0;\n break;\n case \"End\":\n e.preventDefault();\n nextIndex = items.length - 1;\n break;\n case \"Enter\":\n case \" \":\n e.preventDefault();\n if (currentIndex >= 0) {\n items[currentIndex].click();\n }\n return;\n default:\n return;\n }\n\n if (nextIndex >= 0 && nextIndex < items.length) {\n items.forEach((item) => item.setAttribute(\"tabindex\", \"-1\"));\n items[nextIndex].setAttribute(\"tabindex\", \"0\");\n items[nextIndex].focus();\n }\n };\n\n // Create the items container and render\n itemsContainer = document.createElement(\"div\");\n itemsContainer.className = component.getClass(\"drawer__items\");\n itemsContainer.setAttribute(\"role\", \"tablist\");\n itemsContainer.setAttribute(\"aria-orientation\", \"vertical\");\n itemsContainer.addEventListener(\"keydown\", handleKeydown);\n\n renderItems();\n\n return {\n ...component,\n itemsContainer,\n drawerItems: {\n setActive,\n getActive,\n setItems,\n getItems,\n setBadge,\n renderItems,\n },\n };\n };\n",
|
|
126
|
+
"// src/components/drawer/features/state.ts\nimport { DrawerConfig } from \"../types\";\nimport { DRAWER_EVENTS } from \"../constants\";\n\n/**\n * Component shape expected by withState\n */\ninterface StateBaseComponent {\n element: HTMLElement;\n getClass: (name: string) => string;\n emit: (event: string, data?: unknown) => void;\n [key: string]: unknown;\n}\n\n/**\n * Adds open/close state management, scrim, and keyboard dismiss to the drawer\n *\n * @param config - Drawer configuration\n * @returns Component enhancer function\n */\nexport const withState =\n (config: DrawerConfig) =>\n (component: StateBaseComponent): StateBaseComponent => {\n const isModal = config.variant === \"modal\";\n const dismissible = config.dismissible !== false;\n let isOpen = config.open === true;\n let scrimElement: HTMLElement | null = null;\n\n // Create scrim element for modal variant\n if (isModal) {\n scrimElement = document.createElement(\"div\");\n scrimElement.className = component.getClass(\"drawer__scrim\");\n\n if (dismissible) {\n scrimElement.addEventListener(\"click\", () => {\n close();\n });\n }\n }\n\n // Keyboard handler for Escape key (modal only)\n const handleKeydown = (e: KeyboardEvent): void => {\n if (e.key === \"Escape\" && isOpen && isModal && dismissible) {\n e.preventDefault();\n close();\n }\n };\n\n if (isModal) {\n document.addEventListener(\"keydown\", handleKeydown);\n }\n\n /**\n * Opens the drawer\n */\n function open(): void {\n if (isOpen) return;\n\n isOpen = true;\n component.element.classList.add(`${component.getClass(\"drawer\")}--open`);\n\n if (isModal && scrimElement) {\n scrimElement.classList.add(\n `${component.getClass(\"drawer__scrim\")}--visible`,\n );\n // Prevent body scroll when modal is open\n document.body.style.overflow = \"hidden\";\n }\n\n // Set focus on first item or the drawer itself\n requestAnimationFrame(() => {\n const firstItem = component.element.querySelector(\n `.${component.getClass(\"drawer__item\")}[tabindex=\"0\"]`,\n ) as HTMLElement;\n if (firstItem) {\n firstItem.focus();\n } else {\n component.element.focus();\n }\n });\n\n component.emit(DRAWER_EVENTS.OPEN);\n\n if (config.onOpen) {\n config.onOpen();\n }\n }\n\n /**\n * Closes the drawer\n */\n function close(): void {\n if (!isOpen) return;\n\n isOpen = false;\n component.element.classList.remove(\n `${component.getClass(\"drawer\")}--open`,\n );\n\n if (isModal && scrimElement) {\n scrimElement.classList.remove(\n `${component.getClass(\"drawer__scrim\")}--visible`,\n );\n document.body.style.overflow = \"\";\n }\n\n component.emit(DRAWER_EVENTS.CLOSE);\n\n if (config.onClose) {\n config.onClose();\n }\n }\n\n /**\n * Toggles the drawer open/closed\n */\n function toggle(): void {\n if (isOpen) {\n close();\n } else {\n open();\n }\n }\n\n // Apply initial open state\n if (isOpen) {\n component.element.classList.add(`${component.getClass(\"drawer\")}--open`);\n if (isModal && scrimElement) {\n scrimElement.classList.add(\n `${component.getClass(\"drawer__scrim\")}--visible`,\n );\n }\n }\n\n return {\n ...component,\n scrimElement,\n drawerState: {\n open,\n close,\n toggle,\n isOpen: () => isOpen,\n },\n // Add cleanup for keyboard listener\n _stateCleanup: () => {\n if (isModal) {\n document.removeEventListener(\"keydown\", handleKeydown);\n if (scrimElement && scrimElement.parentNode) {\n scrimElement.parentNode.removeChild(scrimElement);\n }\n document.body.style.overflow = \"\";\n }\n },\n };\n };\n",
|
|
127
|
+
"// src/components/drawer/features/headline.ts\nimport { DrawerConfig } from \"../types\";\n\n/**\n * Component shape expected by withHeadline\n */\ninterface HeadlineBaseComponent {\n element: HTMLElement;\n getClass: (name: string) => string;\n [key: string]: unknown;\n}\n\n/**\n * Adds headline management to the drawer component\n *\n * @param config - Drawer configuration\n * @returns Component enhancer function\n */\nexport const withHeadline =\n (config: DrawerConfig) =>\n (component: HeadlineBaseComponent): HeadlineBaseComponent => {\n let headlineElement: HTMLElement | null = null;\n let headlineText: string = config.headline || \"\";\n\n // Create headline element if text is provided\n if (headlineText) {\n headlineElement = document.createElement(\"div\");\n headlineElement.className = component.getClass(\"drawer__headline\");\n headlineElement.textContent = headlineText;\n }\n\n /**\n * Sets the headline text\n */\n const setHeadline = (text: string): void => {\n headlineText = text;\n\n if (text) {\n if (!headlineElement) {\n headlineElement = document.createElement(\"div\");\n headlineElement.className = component.getClass(\"drawer__headline\");\n }\n headlineElement.textContent = text;\n } else if (headlineElement && headlineElement.parentNode) {\n headlineElement.parentNode.removeChild(headlineElement);\n headlineElement = null;\n }\n };\n\n /**\n * Gets the headline text\n */\n const getHeadline = (): string => headlineText;\n\n return {\n ...component,\n headlineElement,\n drawerHeadline: {\n setHeadline,\n getHeadline,\n getElement: () => headlineElement,\n },\n };\n };\n",
|
|
128
|
+
"// src/components/drawer/api.ts\nimport { DrawerComponent, DrawerItemConfig } from './types';\nimport { addClass } from '../../core';\n\n/**\n * API configuration options for drawer component\n * @category Components\n * @internal\n */\ninterface ApiOptions {\n state: {\n open: () => void;\n close: () => void;\n toggle: () => void;\n isOpen: () => boolean;\n };\n items: {\n setActive: (id: string) => void;\n getActive: () => string | null;\n setItems: (items: DrawerItemConfig[] | undefined) => void;\n getItems: () => DrawerItemConfig[] | undefined;\n setBadge: (id: string, badge: string) => void;\n };\n headline: {\n setHeadline: (text: string) => void;\n getHeadline: () => string;\n };\n lifecycle: {\n destroy: () => void;\n };\n}\n\n/**\n * Component with required elements and methods for API enhancement\n * @category Components\n * @internal\n */\ninterface ComponentWithElements {\n element: HTMLElement;\n getClass: (name: string) => string;\n on?: (event: string, handler: Function) => ComponentWithElements;\n off?: (event: string, handler: Function) => ComponentWithElements;\n addClass?: (...classes: string[]) => ComponentWithElements;\n}\n\n/**\n * Enhances a drawer component with public API methods.\n * This follows the higher-order function pattern to add public API methods\n * to the component, making them available to the end user.\n *\n * All methods that modify the component return the component for chaining.\n *\n * @param {ApiOptions} options - API configuration options\n * @returns {Function} Higher-order function that adds API methods to component\n * @category Components\n * @internal This is an internal utility for the Drawer component\n */\nexport const withAPI =\n ({ state, items, headline, lifecycle }: ApiOptions) =>\n (component: ComponentWithElements): DrawerComponent => {\n const drawerComponent: DrawerComponent = {\n element: component.element,\n getClass: component.getClass,\n\n lifecycle,\n\n // ----------------------------------------------------------------\n // Event methods\n // ----------------------------------------------------------------\n\n on(event: string, handler: Function) {\n if (component.on) {\n component.on(event, handler);\n }\n return drawerComponent;\n },\n\n off(event: string, handler: Function) {\n if (component.off) {\n component.off(event, handler);\n }\n return drawerComponent;\n },\n\n addClass(...classes: string[]) {\n if (component.addClass) {\n component.addClass(...classes);\n } else {\n addClass(component.element, ...classes);\n }\n return drawerComponent;\n },\n\n // ----------------------------------------------------------------\n // State methods\n // ----------------------------------------------------------------\n\n open() {\n state.open();\n return drawerComponent;\n },\n\n close() {\n state.close();\n return drawerComponent;\n },\n\n toggle() {\n state.toggle();\n return drawerComponent;\n },\n\n isOpen() {\n return state.isOpen();\n },\n\n // ----------------------------------------------------------------\n // Item methods\n // ----------------------------------------------------------------\n\n setActive(id: string) {\n items.setActive(id);\n return drawerComponent;\n },\n\n getActive() {\n return items.getActive();\n },\n\n setItems(newItems: DrawerItemConfig[]) {\n items.setItems(newItems);\n return drawerComponent;\n },\n\n getItems() {\n return (items.getItems() || []) as DrawerItemConfig[];\n },\n\n setBadge(id: string, badge: string) {\n items.setBadge(id, badge);\n return drawerComponent;\n },\n\n // ----------------------------------------------------------------\n // Headline methods\n // ----------------------------------------------------------------\n\n setHeadline(text: string) {\n headline.setHeadline(text);\n return drawerComponent;\n },\n\n getHeadline() {\n return headline.getHeadline();\n },\n\n // ----------------------------------------------------------------\n // Lifecycle\n // ----------------------------------------------------------------\n\n destroy() {\n lifecycle.destroy();\n },\n };\n\n return drawerComponent;\n };\n",
|
|
129
|
+
"// src/components/drawer/config.ts\nimport {\n createComponentConfig,\n createElementConfig,\n} from \"../../core/config/component\";\nimport { DrawerConfig } from \"./types\";\nimport { DRAWER_DEFAULTS } from \"./constants\";\n\n/**\n * Default configuration for the Drawer component.\n * These values will be used when not explicitly specified by the user.\n *\n * @category Components\n */\nexport const defaultConfig: DrawerConfig = {\n variant: DRAWER_DEFAULTS.VARIANT,\n position: DRAWER_DEFAULTS.POSITION,\n open: DRAWER_DEFAULTS.OPEN,\n dismissible: DRAWER_DEFAULTS.DISMISSIBLE,\n width: DRAWER_DEFAULTS.WIDTH,\n items: [],\n};\n\n/**\n * Creates the base configuration for the Drawer component by merging\n * user-provided config with default values. Global configuration is\n * automatically applied by createComponentConfig.\n *\n * @param {DrawerConfig} config - User provided configuration\n * @returns {DrawerConfig} Complete configuration with defaults applied\n * @category Components\n * @internal\n */\nexport const createBaseConfig = (config: DrawerConfig = {}): DrawerConfig =>\n createComponentConfig(defaultConfig, config, \"drawer\") as DrawerConfig;\n\n/**\n * Generates element configuration for the Drawer component.\n * This function creates the necessary attributes and configuration\n * for the DOM element creation process.\n *\n * @param {DrawerConfig} config - Drawer configuration\n * @returns {Object} Element configuration object for withElement\n * @category Components\n * @internal\n */\nexport const getElementConfig = (config: DrawerConfig) => {\n const isModal = config.variant === \"modal\";\n\n const attributes: Record<string, string | boolean | undefined> = {};\n\n // Modal drawers are dialogs; standard drawers are navigation landmarks\n if (isModal) {\n attributes.role = \"dialog\";\n attributes[\"aria-modal\"] = \"true\";\n } else {\n attributes.role = \"navigation\";\n }\n\n if (config.ariaLabel) {\n attributes[\"aria-label\"] = config.ariaLabel;\n }\n\n return createElementConfig(config, {\n tag: \"aside\",\n attributes,\n className: [\n config.dense ? `${config.prefix}-drawer--dense` : null,\n config.class,\n ].filter(Boolean),\n forwardEvents: {\n click: true,\n keydown: true,\n },\n });\n};\n\n/**\n * Creates API configuration for the Drawer component.\n * This connects the core component features (state, items, headline)\n * to the public API methods exposed to users.\n *\n * @param {Object} comp - Component with all features applied\n * @returns {Object} API configuration object\n * @category Components\n * @internal\n */\nexport const getApiConfig = (comp: {\n drawerState: {\n open: () => void;\n close: () => void;\n toggle: () => void;\n isOpen: () => boolean;\n };\n drawerItems: {\n setActive: (id: string) => void;\n getActive: () => string | null;\n setItems: (items: DrawerConfig[\"items\"]) => void;\n getItems: () => DrawerConfig[\"items\"];\n setBadge: (id: string, badge: string) => void;\n };\n drawerHeadline: {\n setHeadline: (text: string) => void;\n getHeadline: () => string;\n };\n lifecycle: {\n destroy: () => void;\n };\n _stateCleanup?: () => void;\n}) => ({\n state: {\n open: () => comp.drawerState.open(),\n close: () => comp.drawerState.close(),\n toggle: () => comp.drawerState.toggle(),\n isOpen: () => comp.drawerState.isOpen(),\n },\n items: {\n setActive: (id: string) => comp.drawerItems.setActive(id),\n getActive: () => comp.drawerItems.getActive(),\n setItems: (items: DrawerConfig[\"items\"]) =>\n comp.drawerItems.setItems(items || []),\n getItems: () => comp.drawerItems.getItems(),\n setBadge: (id: string, badge: string) =>\n comp.drawerItems.setBadge(id, badge),\n },\n headline: {\n setHeadline: (text: string) => comp.drawerHeadline.setHeadline(text),\n getHeadline: () => comp.drawerHeadline.getHeadline(),\n },\n lifecycle: {\n destroy: () => {\n if (comp._stateCleanup) {\n comp._stateCleanup();\n }\n comp.lifecycle.destroy();\n },\n },\n});\n\nexport default defaultConfig;\n",
|
|
123
130
|
"// src/components/fab/fab.ts\nimport { pipe } from '../../core/compose';\nimport { createBase, withElement } from '../../core/compose/component';\nimport {\n withEvents,\n withIcon,\n withVariant,\n withRipple,\n withDisabled,\n withLifecycle\n} from '../../core/compose/features';\nimport { withAPI } from './api';\nimport { FabConfig, FabComponent } from './types';\nimport { createBaseConfig, getElementConfig, getApiConfig } from './config';\n\n/**\n * Creates a new Floating Action Button (FAB) component\n * \n * Floating Action Buttons (FABs) represent the primary action in an application.\n * They're circular buttons that float above the UI, and typically contain an icon.\n * FABs follow Material Design 3 guidelines with support for multiple variants,\n * sizes, and positioning options.\n * \n * @param {FabConfig} config - FAB configuration object\n * @returns {FabComponent} FAB component instance\n * \n * @throws {Error} If the FAB cannot be created due to invalid configuration\n * \n * @category Components\n * \n * @example\n * ```typescript\n * // Create a default FAB with a plus icon\n * const fab = createFab({\n * icon: '<svg viewBox=\"0 0 24 24\"><path d=\"M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z\"/></svg>',\n * ariaLabel: 'Add new item'\n * });\n * \n * // Create a small FAB with a custom position\n * const smallFab = createFab({\n * size: 'small',\n * icon: '<svg>...</svg>',\n * variant: 'secondary',\n * position: 'bottom-right'\n * });\n * \n * // Add click handler and attach to DOM\n * fab.on('click', () => {\n * console.log('FAB clicked');\n * });\n * document.body.appendChild(fab.element);\n * \n * // Later, update the FAB's appearance\n * fab.setIcon('<span class=\"material-icons\">edit</span>');\n * fab.setPosition('bottom-left');\n * ```\n */\nconst createFab = (config: FabConfig = {}): FabComponent => {\n const fabConfig = createBaseConfig(config);\n\n try {\n const fab = pipe(\n createBase,\n withEvents(),\n withElement(getElementConfig(fabConfig)),\n withVariant(fabConfig),\n withIcon(fabConfig),\n withDisabled(fabConfig),\n withRipple(fabConfig),\n withLifecycle(),\n comp => withAPI(getApiConfig(comp))(comp)\n )(fabConfig);\n \n return fab;\n } catch (error) {\n console.error('FAB creation error:', error);\n throw new Error(`Failed to create FAB: ${(error as Error).message}`);\n }\n};\n\nexport default createFab;",
|
|
124
131
|
"// src/components/fab/api.ts\nimport { FabComponent } from './types';\n\n/**\n * API configuration options for the FAB component\n * \n * @category Components\n * @internal\n */\ninterface ApiOptions {\n /**\n * Disabled state management API\n */\n disabled: {\n /** Enables the component */\n enable: () => void;\n /** Disables the component */\n disable: () => void;\n };\n \n /**\n * Lifecycle management API\n */\n lifecycle: {\n /** Destroys the component */\n destroy: () => void;\n };\n \n /**\n * Base class name for the FAB\n */\n className: string;\n}\n\n/**\n * Base component with element properties\n * \n * @category Components\n * @internal\n */\ninterface ComponentWithElements {\n /** The DOM element */\n element: HTMLElement;\n \n /** Icon management */\n icon: {\n /** Sets icon HTML content */\n setIcon: (html: string) => any;\n /** Gets icon HTML content */\n getIcon: () => string;\n /** Gets icon DOM element */\n getElement: () => HTMLElement | null;\n };\n \n /** Gets a class name with component's prefix */\n getClass: (name: string) => string;\n}\n\n/**\n * Enhances a FAB component with public API methods\n * \n * Higher-order function that adds the full public API to the FAB component,\n * exposing methods for changing appearance, handling state, and managing position.\n * \n * @param {ApiOptions} options - API configuration options\n * @returns {Function} Higher-order function that adds API methods to component\n * \n * @category Components\n * @internal\n */\nexport const withAPI = ({ disabled, lifecycle, className }: ApiOptions) => \n (component: ComponentWithElements): FabComponent => ({\n ...component as any,\n element: component.element as HTMLButtonElement,\n \n getValue: () => (component.element as HTMLButtonElement).value,\n \n setValue(value: string) {\n (component.element as HTMLButtonElement).value = value;\n return this;\n },\n \n enable() {\n disabled.enable();\n return this;\n },\n \n disable() {\n disabled.disable();\n return this;\n },\n \n setIcon(icon: string) {\n component.icon.setIcon(icon);\n return this;\n },\n \n getIcon() {\n return component.icon.getIcon();\n },\n \n setPosition(position: string) {\n // First remove any existing position classes\n const positions = ['top-right', 'top-left', 'bottom-right', 'bottom-left'];\n positions.forEach(pos => {\n component.element.classList.remove(`${className}--${pos}`);\n });\n \n // Add new position class\n component.element.classList.add(`${className}--${position}`);\n return this;\n },\n \n getPosition() {\n const positions = ['top-right', 'top-left', 'bottom-right', 'bottom-left'];\n for (const pos of positions) {\n if (component.element.classList.contains(`${className}--${pos}`)) {\n return pos;\n }\n }\n return null;\n },\n \n lower() {\n component.element.classList.add(`${className}--lowered`);\n return this;\n },\n \n raise() {\n component.element.classList.remove(`${className}--lowered`);\n return this;\n },\n \n destroy() {\n lifecycle.destroy();\n }\n });",
|
|
125
132
|
"// src/components/fab/config.ts\nimport {\n createComponentConfig,\n createElementConfig,\n} from \"../../core/config/component\";\nimport { FabConfig } from \"./types\";\n\n/**\n * Default configuration for the FAB component\n *\n * Provides reasonable defaults for creating FABs\n * according to Material Design 3 guidelines.\n *\n * @category Components\n * @internal\n */\nexport const defaultConfig: FabConfig = {\n variant: \"primary\",\n size: \"default\",\n type: \"button\",\n ripple: true,\n};\n\n/**\n * Creates the base configuration for FAB component\n *\n * Merges user-provided configuration with default values and validates\n * the configuration to ensure all required properties have values.\n *\n * @param {FabConfig} config - User provided configuration\n * @returns {FabConfig} Complete configuration with defaults applied\n *\n * @category Components\n * @internal\n */\nexport const createBaseConfig = (config: FabConfig = {}): FabConfig =>\n createComponentConfig(defaultConfig, config, \"fab\") as FabConfig;\n\n/**\n * Generates element configuration for the FAB component\n *\n * Transforms the user-friendly FabConfig into the internal format required\n * by the withElement function. Creates all the appropriate CSS classes and attributes\n * needed to properly render the FAB in the DOM.\n *\n * @param {FabConfig} config - FAB configuration\n * @returns {Object} Element configuration object for withElement\n *\n * @category Components\n * @internal\n */\nexport const getElementConfig = (config: FabConfig) => {\n // Create the attributes object\n const attributes: Record<string, any> = {\n type: config.type || \"button\",\n \"aria-label\": config.ariaLabel || (config.icon ? \"action\" : undefined),\n };\n\n // Only add disabled attribute if it's explicitly true\n if (config.disabled === true) {\n attributes.disabled = true;\n }\n\n // Create component-specific classes that don't need prefixing (they already include the prefix)\n const componentClasses = [];\n\n // Add size class\n componentClasses.push(`fab--${config.size || \"default\"}`);\n\n // Add animation class if specified\n if (config.animate) {\n componentClasses.push(`fab--animate-enter`);\n }\n\n // Add position class if specified\n if (config.position) {\n componentClasses.push(`fab--${config.position}`);\n }\n\n // Add disabled class if specified\n if (config.disabled === true) {\n componentClasses.push(`fab--disabled`);\n }\n\n // Create a new config with our component classes added to className\n const enhancedConfig = {\n ...config,\n className: componentClasses,\n };\n\n return createElementConfig(enhancedConfig, {\n tag: \"button\",\n attributes,\n forwardEvents: {\n click: (component) => !component.element.disabled,\n focus: true,\n blur: true,\n },\n interactive: true,\n });\n};\n\n/**\n * Creates API configuration for the FAB component\n *\n * Provides access to various component sub-features like disabled state\n * and lifecycle management.\n *\n * @param {Object} comp - Component with disabled and lifecycle features\n * @returns {Object} API configuration object for withAPI\n *\n * @category Components\n * @internal\n */\nexport const getApiConfig = (comp: any) => ({\n disabled: {\n enable: () => comp.disabled.enable(),\n disable: () => comp.disabled.disable(),\n },\n lifecycle: {\n destroy: () => comp.lifecycle.destroy(),\n },\n className: comp.getClass(\"fab\"),\n});\n\nexport default defaultConfig;\n",
|
|
@@ -139,26 +146,13 @@
|
|
|
139
146
|
"// src/components/list/config.ts\n\nimport {\n createComponentConfig,\n createElementConfig as coreCreateElementConfig,\n} from \"../../core/config/component\";\nimport { LIST_CLASSES } from \"./constants\";\nimport { ListConfig } from \"./types\";\n\n/**\n * Default configuration for the List component\n */\nexport const defaultConfig: Partial<ListConfig> = {\n // Static data\n items: [],\n\n // Behavior settings\n trackSelection: true,\n multiSelect: false,\n animate: false,\n};\n\n/**\n * Creates the base configuration for List component\n * @param {ListConfig} config - User provided configuration\n * @returns {Object} Complete configuration with defaults applied\n */\nexport const createBaseConfig = (config: Partial<ListConfig> = {}) => {\n // Validate required props\n if (!Array.isArray(config.items) && !config.renderItem) {\n throw new Error(\"List requires either items array or renderItem function\");\n }\n\n // If items are provided but no renderItem, create a default renderer\n if (\n Array.isArray(config.items) &&\n config.items.length > 0 &&\n !config.renderItem\n ) {\n config.renderItem = (item) => {\n const element = document.createElement(\"div\");\n element.className = \"mtrl-list-item\";\n element.textContent =\n item.text ||\n item.title ||\n item.headline ||\n item.name ||\n item.id ||\n String(item);\n return element;\n };\n }\n\n // Create component config with defaults\n return createComponentConfig(defaultConfig, config, \"list\");\n};\n\n/**\n * Generates element configuration for the List component\n * @param {Object} config - List configuration\n * @returns {Object} Element configuration object for withElement\n */\nexport const getElementConfig = (config) => {\n const attributes = {\n role: \"list\",\n tabindex: \"0\",\n };\n\n // Add ARIA attributes for accessibility\n if (config.ariaLabel) {\n attributes[\"aria-label\"] = config.ariaLabel;\n }\n\n // Create element config\n return coreCreateElementConfig(config, {\n tag: \"div\",\n attributes: attributes,\n className: [LIST_CLASSES.CONTAINER, config.class],\n forwardEvents: {\n scroll: true,\n keydown: true,\n },\n });\n};\n\n/**\n * Creates API configuration for the List component\n * @param {Object} component - Component with list features\n * @param {Object} config - Base configuration\n * @returns {Object} API configuration object\n */\nexport const getApiConfig = (component, config) => ({\n list: {\n refresh: component.list?.refresh,\n getItems: component.list?.getItems,\n getAllItems: component.list?.getAllItems,\n getVisibleItems: component.list?.getVisibleItems,\n scrollToItem: component.list?.scrollToItem,\n scrollToIndex: component.list?.scrollToIndex,\n isLoading: () => false, // Simple lists are never loading\n hasNextPage: () => false, // Simple lists don't paginate\n },\n selection: {\n getSelectedItems: component.getSelectedItems,\n getSelectedItemIds: component.getSelectedItemIds,\n isItemSelected: component.isItemSelected,\n selectItem: component.selectItem,\n deselectItem: component.deselectItem,\n clearSelection: component.clearSelection,\n setSelection: component.setSelection,\n },\n events: {\n on: component.on,\n off: component.off,\n },\n lifecycle: {\n destroy: component.lifecycle?.destroy,\n },\n config: {\n animate: config?.animate,\n },\n});\n\nexport default defaultConfig;\n",
|
|
140
147
|
"// src/components/menu/menu.ts\n\nimport { pipe } from \"../../core/compose\";\nimport { createBase, withElement } from \"../../core/compose/component\";\nimport { withEvents, withLifecycle } from \"../../core/compose/features\";\nimport {\n withController,\n withOpener,\n withPosition,\n withKeyboard,\n withSubmenu,\n} from \"./features\";\nimport { withAPI } from \"./api\";\nimport { MenuConfig, MenuComponent } from \"./types\";\nimport { createBaseConfig, getElementConfig, getApiConfig } from \"./config\";\n\n/**\n * Creates a new Menu component with the specified configuration.\n *\n * The Menu component implements the Material Design 3 menu specifications,\n * providing a flexible dropdown menu system with support for nested menus,\n * keyboard navigation, and ARIA accessibility.\n *\n * Menus are built using a functional composition pattern, applying various\n * features through the pipe function for a modular architecture.\n *\n * The menu element is not added to the DOM until it's opened, and it's removed\n * from the DOM when closed, following best practices for dropdown menus.\n *\n * @param {MenuConfig} config - Configuration options for the menu\n * This must include an opener element or selector, and an array of menu items.\n * See {@link MenuConfig} for all available options.\n *\n * @returns {MenuComponent} A fully configured menu component instance with\n * all requested features applied. The returned component has methods for\n * menu manipulation, event handling, and lifecycle management.\n *\n * @throws {Error} Throws an error if menu creation fails or if required\n * configuration (like opener) is missing.\n *\n * @category Components\n */\nconst createMenu = (config: MenuConfig): MenuComponent => {\n try {\n // Validate and create the base configuration\n const baseConfig = createBaseConfig(config);\n\n // Create the component through functional composition\n const menu = pipe(\n createBase, // Base component\n withEvents(), // Event handling\n withElement(getElementConfig(baseConfig)), // DOM element\n withPosition(baseConfig), // Position management\n withKeyboard(), // Keyboard navigation\n withSubmenu(baseConfig), // Submenu management\n withController(baseConfig), // Menu controller\n withOpener(baseConfig), // Opener management\n withLifecycle(), // Lifecycle management\n (comp) => withAPI(getApiConfig(comp))(comp), // Public API\n )(baseConfig);\n\n // Register event handlers from config\n if (baseConfig.on && typeof menu.on === \"function\") {\n Object.entries(baseConfig.on).forEach(([event, handler]) => {\n if (typeof handler === \"function\") {\n menu.on(event, handler);\n }\n });\n }\n\n // The menu will be added to the DOM when opened and removed when closed\n\n return menu;\n } catch (error) {\n console.error(\"Menu creation error:\", error);\n throw new Error(`Failed to create menu: ${(error as Error).message}`);\n }\n};\n\nexport default createMenu;\n",
|
|
141
148
|
"// src/components/menu/features/controller.ts\n\nimport { MenuConfig, MenuItem, MenuDivider, MenuSelectEvent } from \"../types\";\n\nlet ignoreNextDocumentClick = false;\n\n/**\n * Adds controller functionality to the menu component\n * Manages state, rendering, positioning, and event handling\n *\n * @param config - Menu configuration\n * @returns Component enhancer with menu controller functionality\n */\nconst withController = (config: MenuConfig) => (component) => {\n if (!component.element) {\n console.warn(\"Cannot initialize menu controller: missing element\");\n return component;\n }\n\n // Initialize state\n const state = {\n visible: config.visible || false,\n items: config.items || [],\n position: config.position,\n selectedItemId: null as string | null,\n activeItemIndex: -1,\n component,\n };\n\n // Create event helpers\n const eventHelpers = {\n triggerEvent(eventName: string, data: any = {}, originalEvent?: Event) {\n const eventData = {\n menu: state.component,\n ...data,\n originalEvent,\n preventDefault: () => {\n eventData.defaultPrevented = true;\n },\n defaultPrevented: false,\n };\n\n component.emit(eventName, eventData);\n return eventData;\n },\n };\n\n /**\n * Gets the opener element from config\n */\n const getOpenerElement = (): HTMLElement => {\n // First try to get the resolved opener from the opener feature\n if (component.opener && typeof component.opener.getOpener === \"function\") {\n return component.opener.getOpener();\n }\n\n // Fall back to config opener for initial positioning\n const { opener } = config;\n\n if (typeof opener === \"string\") {\n const element = document.querySelector(opener);\n if (!element) {\n console.warn(`Menu opener not found: ${opener}`);\n return null;\n }\n return element as HTMLElement;\n }\n\n // Handle component with element property\n if (typeof opener === \"object\" && opener !== null && \"element\" in opener) {\n return opener.element;\n }\n\n // Handle direct HTML element\n return opener as HTMLElement;\n };\n\n /**\n * Creates a DOM element for a menu item\n */\n const createMenuItem = (item: MenuItem, index: number): HTMLElement => {\n const itemElement = document.createElement(\"li\");\n const itemClass = `${component.getClass(\"menu-item\")}`;\n\n itemElement.className = itemClass;\n itemElement.setAttribute(\"role\", \"menuitem\");\n itemElement.setAttribute(\"tabindex\", \"-1\"); // Set to -1 by default, will update when needed\n itemElement.setAttribute(\"data-id\", item.id);\n itemElement.setAttribute(\"data-index\", index.toString());\n\n if (item.disabled) {\n itemElement.classList.add(`${itemClass}--disabled`);\n itemElement.setAttribute(\"aria-disabled\", \"true\");\n } else {\n itemElement.setAttribute(\"aria-disabled\", \"false\");\n }\n\n if (state.selectedItemId && item.id === state.selectedItemId) {\n itemElement.classList.add(`${itemClass}--selected`);\n itemElement.setAttribute(\"aria-selected\", \"true\");\n } else {\n itemElement.setAttribute(\"aria-selected\", \"false\");\n }\n\n if (item.hasSubmenu) {\n itemElement.classList.add(`${itemClass}--submenu`);\n itemElement.setAttribute(\"aria-haspopup\", \"true\");\n itemElement.setAttribute(\"aria-expanded\", \"false\");\n }\n\n // Create content container for flexible layout\n const contentContainer = document.createElement(\"span\");\n contentContainer.className = `${component.getClass(\"menu-item-content\")}`;\n\n // Add icon if provided\n if (item.icon) {\n const iconElement = document.createElement(\"span\");\n iconElement.className = `${component.getClass(\"menu-item-icon\")}`;\n iconElement.innerHTML = item.icon;\n contentContainer.appendChild(iconElement);\n }\n\n // Add text\n const textElement = document.createElement(\"span\");\n textElement.className = `${component.getClass(\"menu-item-text\")}`;\n textElement.textContent = item.text;\n contentContainer.appendChild(textElement);\n\n // Add shortcut if provided\n if (item.shortcut) {\n const shortcutElement = document.createElement(\"span\");\n shortcutElement.className = `${component.getClass(\"menu-item-shortcut\")}`;\n shortcutElement.textContent = item.shortcut;\n contentContainer.appendChild(shortcutElement);\n }\n\n itemElement.appendChild(contentContainer);\n\n // Add event listeners\n if (!item.disabled) {\n // Mouse events\n itemElement.addEventListener(\"click\", (e) =>\n handleItemClick(e, item, index),\n );\n\n // Additional keyboard event handler for accessibility\n itemElement.addEventListener(\"keydown\", (e) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n handleItemClick(e, item, index);\n }\n });\n\n // Focus handling\n itemElement.addEventListener(\"focus\", () => {\n state.activeItemIndex = index;\n });\n\n if (item.hasSubmenu && config.openSubmenuOnHover) {\n // Use submenu feature for hover handling\n itemElement.addEventListener(\"mouseenter\", () => {\n if (component.submenu) {\n component.submenu.handleSubmenuHover(item, index, itemElement);\n }\n });\n\n itemElement.addEventListener(\"mouseleave\", (e) => {\n if (component.submenu) {\n component.submenu.handleSubmenuLeave(e);\n }\n });\n }\n }\n\n return itemElement;\n };\n\n /**\n * Creates a DOM element for a menu divider\n */\n const createDivider = (divider: MenuDivider, index: number): HTMLElement => {\n const dividerElement = document.createElement(\"li\");\n dividerElement.className = `${component.getClass(\"menu-divider\")}`;\n dividerElement.setAttribute(\"role\", \"separator\");\n dividerElement.setAttribute(\"data-index\", index.toString());\n\n if (divider.id) {\n dividerElement.setAttribute(\"id\", divider.id);\n }\n\n return dividerElement;\n };\n\n /**\n * Renders the menu items\n */\n const renderMenuItems = (): void => {\n const menuList = document.createElement(\"ul\");\n menuList.className = `${component.getClass(\"menu-list\")}`;\n menuList.setAttribute(\"role\", \"menu\");\n\n // Create items\n state.items.forEach((item, index) => {\n if (\"type\" in item && item.type === \"divider\") {\n menuList.appendChild(createDivider(item, index));\n } else {\n menuList.appendChild(createMenuItem(item as MenuItem, index));\n }\n });\n\n // Clear and append\n component.element.innerHTML = \"\";\n component.element.appendChild(menuList);\n };\n\n /**\n * Find a menu item by its ID in the items array\n */\n const findItemById = (id: string): MenuItem | null => {\n // Search in top-level items\n for (const item of state.items) {\n if (\"id\" in item && item.id === id) {\n return item as MenuItem;\n }\n\n // Search in submenu items\n if (\"submenu\" in item && Array.isArray((item as MenuItem).submenu)) {\n for (const subItem of (item as MenuItem).submenu) {\n if (\"id\" in subItem && subItem.id === id) {\n return subItem as MenuItem;\n }\n }\n }\n }\n\n return null;\n };\n\n /**\n * Handles click on a menu item\n */\n const handleItemClick = (\n e: MouseEvent | KeyboardEvent,\n item: MenuItem,\n index: number,\n ): void => {\n e.preventDefault();\n e.stopPropagation();\n\n // Don't process if disabled\n if (item.disabled) return;\n\n if (item.hasSubmenu && component.submenu) {\n // Delegate to submenu feature\n component.submenu.handleSubmenuClick(\n item,\n index,\n e.currentTarget as HTMLElement,\n );\n return;\n }\n\n // Trigger select event\n const selectEvent = eventHelpers.triggerEvent(\n \"select\",\n {\n item,\n itemId: item.id,\n itemData: item.data,\n },\n e,\n ) as MenuSelectEvent;\n\n // Close menu if needed\n if (config.closeOnSelect && !selectEvent.defaultPrevented) {\n closeMenu(e, true);\n }\n };\n\n /**\n * Updates the selected state of menu items\n * @param itemId - The ID of the item to mark as selected, or null to clear selection\n */\n const updateSelectedState = (itemId: string | null): void => {\n if (!component.element) return;\n\n // Get all menu items\n const menuItems = component.element.querySelectorAll(\n `.${component.getClass(\"menu-item\")}`,\n ) as NodeListOf<HTMLElement>;\n\n // Update selected state for each item\n menuItems.forEach((item) => {\n const currentItemId = item.getAttribute(\"data-id\");\n\n if (currentItemId === itemId) {\n item.classList.add(`${component.getClass(\"menu-item--selected\")}`);\n item.setAttribute(\"aria-selected\", \"true\");\n } else {\n item.classList.remove(`${component.getClass(\"menu-item--selected\")}`);\n item.setAttribute(\"aria-selected\", \"false\");\n }\n });\n\n // Also update state\n state.selectedItemId = itemId;\n };\n\n /**\n * Opens the menu\n * @param {Event} [event] - Optional event that triggered the open\n * @param {'mouse'|'keyboard'} [interactionType='mouse'] - Type of interaction that triggered the open\n */\n const openMenu = (\n event?: Event,\n interactionType: \"mouse\" | \"keyboard\" = \"mouse\",\n ): void => {\n if (state.visible) return;\n\n // Update state\n state.visible = true;\n\n // First, remove any existing document click listener\n document.removeEventListener(\"click\", handleDocumentClick);\n\n // Step 1: Add the menu to the DOM if it's not already there with initial hidden state\n if (!component.element.parentNode) {\n // Apply explicit initial styling to ensure it doesn't flash\n component.element.classList.remove(\n `${component.getClass(\"menu--visible\")}`,\n );\n component.element.setAttribute(\"aria-hidden\", \"true\");\n component.element.style.transform = \"scaleY(0)\";\n component.element.style.opacity = \"0\";\n\n // Add to DOM - use container if provided, otherwise use document.body\n const container = config.container || document.body;\n container.appendChild(component.element);\n }\n\n // Step 2: Use a small delay to ensure DOM operations are complete\n setTimeout(() => {\n // Position the menu now that it's in the DOM\n const openerElement = getOpenerElement();\n if (openerElement && component.position) {\n component.position.positionMenu(openerElement);\n }\n\n // Set attributes for accessibility\n component.element.setAttribute(\"aria-hidden\", \"false\");\n\n // Remove the inline styles we added\n component.element.style.transform = \"\";\n component.element.style.opacity = \"\";\n\n // Force a reflow before adding the visible class\n void component.element.getBoundingClientRect();\n\n // Add visible class to start the CSS transition\n component.element.classList.add(`${component.getClass(\"menu--visible\")}`);\n\n // Step 4: Set up initial focus based on interaction type\n setTimeout(() => {\n if (component.keyboard && component.keyboard.handleInitialFocus) {\n component.keyboard.handleInitialFocus(\n component.element,\n interactionType,\n );\n } else {\n // Fallback if keyboard module isn't available\n if (interactionType === \"keyboard\") {\n // Find all focusable items\n const items = Array.from(\n component.element.querySelectorAll(\n `.${component.getClass(\"menu-item\")}:not(.${component.getClass(\n \"menu-item--disabled\",\n )})`,\n ),\n ) as HTMLElement[];\n\n if (items.length > 0) {\n // Make sure ALL items are focusable with tabindex -1\n items.forEach((item) => {\n item.tabIndex = -1;\n });\n\n // Only set first item as regularly focusable\n items[0].tabIndex = 0;\n\n // Focus the first item\n items[0].focus();\n } else {\n // If no items, focus the menu itself\n component.element.tabIndex = 0;\n component.element.focus();\n }\n } else {\n // For mouse interaction, make the menu focusable but don't auto-focus\n component.element.tabIndex = -1;\n\n // Still make the first item focusable for keyboard navigation after mouse open\n const items = Array.from(\n component.element.querySelectorAll(\n `.${component.getClass(\"menu-item\")}:not(.${component.getClass(\n \"menu-item--disabled\",\n )})`,\n ),\n ) as HTMLElement[];\n\n if (items.length > 0) {\n items.forEach((item) => {\n item.tabIndex = -1;\n });\n items[0].tabIndex = 0;\n }\n }\n }\n }, 100);\n\n // Add the document click handler on the next event loop\n // after the current click is fully processed\n setTimeout(() => {\n if (config.closeOnClickOutside && state.visible) {\n document.addEventListener(\"click\", handleDocumentClick);\n }\n\n // Add other document events normally\n if (config.closeOnEscape) {\n document.addEventListener(\"keydown\", handleDocumentKeydown);\n }\n window.addEventListener(\"resize\", handleWindowResize, {\n passive: true,\n });\n window.addEventListener(\"scroll\", handleWindowScroll, {\n passive: true,\n });\n }, 0);\n }, 20); // Short delay for browser to process\n\n // Trigger event\n eventHelpers.triggerEvent(\"open\", {}, event);\n };\n\n /**\n * Closes the menu\n * @param {Event} [event] - Optional event that triggered the close\n * @param {boolean} [restoreFocus=true] - Whether to restore focus to the opener element\n */\n const closeMenu = (event?: Event, restoreFocus: boolean = true): void => {\n if (!state.visible) return;\n\n // Emit pre-close event for other features to react\n component.emit(\"menu-closing\", { event, restoreFocus });\n\n // Close any open submenu first using the submenu feature\n if (component.submenu) {\n component.submenu.closeAllSubmenus();\n }\n\n setTimeout(() => {\n // Update state\n state.visible = false;\n\n // Set attributes\n component.element.setAttribute(\"aria-hidden\", \"true\");\n component.element.classList.remove(\n `${component.getClass(\"menu--visible\")}`,\n );\n\n // Remove document events\n document.removeEventListener(\"click\", handleDocumentClick);\n document.removeEventListener(\"keydown\", handleDocumentKeydown);\n window.removeEventListener(\"resize\", handleWindowResize);\n window.removeEventListener(\"scroll\", handleWindowScroll);\n\n // Trigger event\n eventHelpers.triggerEvent(\n \"close\",\n {\n restoreFocus: restoreFocus,\n },\n event,\n );\n\n // Remove from DOM after animation completes\n setTimeout(() => {\n if (component.element.parentNode && !state.visible) {\n component.element.parentNode.removeChild(component.element);\n }\n }, 300); // Match the animation duration in CSS\n }, 50);\n };\n\n /**\n * Toggles the menu\n */\n const toggleMenu = (\n event?: Event,\n interactionType: \"mouse\" | \"keyboard\" = \"mouse\",\n ): void => {\n if (state.visible) {\n closeMenu(event);\n } else {\n // Determine interaction type from event\n if (event) {\n if (event instanceof KeyboardEvent) {\n interactionType = \"keyboard\";\n } else if (event instanceof MouseEvent) {\n interactionType = \"mouse\";\n }\n }\n openMenu(event, interactionType);\n }\n };\n\n /**\n * Handles document click\n */\n const handleDocumentClick = (e: MouseEvent): void => {\n // If we should ignore this click (happens right after opening), reset the flag and return\n if (ignoreNextDocumentClick) {\n ignoreNextDocumentClick = false;\n return;\n }\n\n // Don't close if clicked inside menu\n if (component.element.contains(e.target as Node)) {\n return;\n }\n\n // Check if clicked on opener element\n const opener = getOpenerElement();\n if (opener && opener.contains(e.target as Node)) {\n return;\n }\n\n // Don't close if clicked inside a submenu\n if (component.submenu && component.submenu.hasOpenSubmenu()) {\n const activeSubmenus = component.submenu.getActiveSubmenus();\n for (const submenu of activeSubmenus) {\n if (submenu.element.contains(e.target as Node)) {\n return;\n }\n }\n }\n\n // Close menu\n closeMenu(e, false);\n };\n\n /**\n * Handles document keydown\n */\n const handleDocumentKeydown = (e: KeyboardEvent): void => {\n // Check if the event target is already inside the menu or submenu\n const isTargetInsideMenu = component.element.contains(e.target as Node);\n const isTargetInsideSubmenu =\n component.submenu &&\n component.submenu.hasOpenSubmenu() &&\n component.submenu\n .getActiveSubmenus()\n .some((s) => s.element.contains(e.target as Node));\n\n // If the event target is inside the menu/submenu, the dedicated menu keydown handler\n // will already process it, so we only need to handle Escape here\n if (state.visible) {\n if (isTargetInsideMenu || isTargetInsideSubmenu) {\n // Only handle Escape at the document level for menu items\n if (e.key === \"Escape\") {\n e.preventDefault();\n closeMenu(e, true);\n }\n } else {\n // If target is outside menu, but menu is open, handle all keyboard navigation\n if (component.keyboard && component.keyboard.handleMenuKeydown) {\n component.keyboard.handleMenuKeydown(e, state, {\n closeMenu,\n closeSubmenu: component.submenu\n ? component.submenu.closeSubmenu\n : null,\n findItemById,\n handleSubmenuClick: component.submenu\n ? component.submenu.handleSubmenuClick\n : null,\n handleNestedSubmenuClick: component.submenu\n ? component.submenu.handleNestedSubmenuClick\n : null,\n });\n }\n }\n }\n };\n\n /**\n * Handles window resize\n */\n const handleWindowResize = (): void => {\n if (state.visible) {\n if (config.closeOnResize) {\n // Close menu on resize (better UX for select components)\n closeMenu(undefined, true);\n } else {\n // Reposition menu on resize (default behavior)\n const openerElement = getOpenerElement();\n if (openerElement && component.position) {\n component.position.positionMenu(openerElement);\n }\n }\n }\n };\n\n /**\n * Handles window scroll\n */\n const handleWindowScroll = (): void => {\n if (state.visible) {\n // Use requestAnimationFrame to optimize scroll performance\n window.requestAnimationFrame(() => {\n // Reposition the main menu to stay attached to opener when scrolling\n const openerElement = getOpenerElement();\n if (openerElement && component.position) {\n component.position.positionMenu(openerElement);\n }\n });\n }\n };\n\n /**\n * Sets up the menu\n */\n const initMenu = () => {\n // Set up menu structure\n renderMenuItems();\n\n // Set up keyboard navigation if available\n if (component.keyboard && component.keyboard.setupKeyboardHandlers) {\n component.keyboard.setupKeyboardHandlers(component.element, state, {\n closeMenu,\n closeSubmenu: component.submenu ? component.submenu.closeSubmenu : null,\n findItemById,\n handleSubmenuClick: component.submenu\n ? component.submenu.handleSubmenuClick\n : null,\n handleNestedSubmenuClick: component.submenu\n ? component.submenu.handleNestedSubmenuClick\n : null,\n });\n }\n\n // Position if visible\n if (state.visible) {\n const openerElement = getOpenerElement();\n if (openerElement && component.position) {\n component.position.positionMenu(openerElement);\n }\n\n // Show immediately\n component.element.classList.add(`${component.getClass(\"menu--visible\")}`);\n\n // Set up document events\n if (config.closeOnClickOutside) {\n document.addEventListener(\"click\", handleDocumentClick);\n }\n if (config.closeOnEscape) {\n document.addEventListener(\"keydown\", handleDocumentKeydown);\n }\n window.addEventListener(\"resize\", handleWindowResize);\n window.addEventListener(\"scroll\", handleWindowScroll);\n }\n };\n\n // Handle create-menu-items events for submenu feature\n component.on(\"create-menu-items\", (event) => {\n const { items, container, onItemCreated } = event;\n\n items.forEach((item, index) => {\n let element;\n if (\"type\" in item && item.type === \"divider\") {\n element = createDivider(item, index);\n } else {\n element = createMenuItem(item as MenuItem, index);\n }\n container.appendChild(element);\n if (onItemCreated) {\n onItemCreated(element);\n }\n });\n });\n\n // Initialize after DOM is ready\n setTimeout(initMenu, 0);\n\n // Register with lifecycle if available\n if (component.lifecycle) {\n const originalDestroy = component.lifecycle.destroy || (() => {});\n component.lifecycle.destroy = () => {\n // Clean up document events\n document.removeEventListener(\"click\", handleDocumentClick);\n document.removeEventListener(\"keydown\", handleDocumentKeydown);\n window.removeEventListener(\"resize\", handleWindowResize);\n window.removeEventListener(\"scroll\", handleWindowScroll);\n\n originalDestroy();\n };\n }\n\n // Return enhanced component\n return {\n ...component,\n menu: {\n open: (\n event?: Event,\n interactionType: \"mouse\" | \"keyboard\" = \"mouse\",\n ) => {\n openMenu(event, interactionType);\n return component;\n },\n\n close: (event?: Event, restoreFocus = true) => {\n closeMenu(event, restoreFocus);\n return component;\n },\n\n toggle: (\n event?: Event,\n interactionType: \"mouse\" | \"keyboard\" = \"mouse\",\n ) => {\n toggleMenu(event, interactionType);\n return component;\n },\n\n isOpen: () => state.visible,\n\n setItems: (items) => {\n state.items = items;\n renderMenuItems();\n return component;\n },\n\n getItems: () => state.items,\n\n setPosition: (position) => {\n state.position = position;\n if (state.visible) {\n const openerElement = getOpenerElement();\n if (openerElement && component.position) {\n component.position.positionMenu(openerElement);\n }\n }\n return component;\n },\n\n getPosition: () => state.position,\n\n setSelected: (itemId: string | null) => {\n updateSelectedState(itemId);\n return component;\n },\n\n getSelected: () => state.selectedItemId,\n },\n };\n};\n\nexport default withController;\n",
|
|
142
|
-
"// src/components/menu/features/opener.ts\n\nimport { MenuConfig } from '../types';\n\n/**\n * Adds opener functionality to menu component\n * Manages the relationship between menu and its opener element\n * \n * @param config - Menu configuration\n * @returns Component enhancer with opener management functionality\n */\nconst withOpener = (config: MenuConfig) => component => {\n if (!component.element) {\n console.warn('Cannot initialize menu opener: missing element');\n return component;\n }\n\n // Track keyboard navigation state\n let isTabNavigation = false;\n\n // Add an event listener to detect Tab key navigation\n document.addEventListener('keydown', (e: KeyboardEvent) => {\n // Set flag when Tab key is pressed\n isTabNavigation = e.key === 'Tab';\n \n // Reset flag after a short delay\n setTimeout(() => {\n isTabNavigation = false;\n }, 100);\n });\n\n // Track opener state\n const state = {\n openerElement: null as HTMLElement,\n openerComponent: null as any,\n activeClass: '' // Store the appropriate active class based on element type\n };\n\n /**\n * Resolves the opener element from string, direct reference, or component\n * Handles components with element property, components with getElement() method,\n * or DOM elements directly\n */\n const resolveOpener = (opener: any): { element: HTMLElement, component: any } => {\n if (!opener) return { element: null, component: null };\n\n // Handle string selector\n if (typeof opener === 'string') {\n const element = document.querySelector(opener);\n if (!element) {\n console.warn(`Menu opener not found: ${opener}`);\n return { element: null, component: null };\n }\n return { element: element as HTMLElement, component: null };\n }\n \n // Handle component with element property (most common case)\n if (typeof opener === 'object' && opener !== null) {\n // Case 1: Component with element property\n if ('element' in opener && opener.element instanceof HTMLElement) {\n return { element: opener.element, component: opener };\n }\n \n // Case 2: Component with getElement method\n if ('getElement' in opener && typeof opener.getElement === 'function') {\n const element = opener.getElement();\n if (element instanceof HTMLElement) {\n return { element, component: opener };\n }\n }\n \n // Case 3: Component with input property (like textfield)\n if ('input' in opener && opener.input instanceof HTMLElement) {\n return { element: opener.input, component: opener };\n }\n \n // Case 4: Direct HTML element\n if (opener instanceof HTMLElement) {\n return { element: opener, component: null };\n }\n }\n\n console.warn('Invalid opener type:', opener);\n return { element: null, component: null };\n };\n\n /**\n * Determine the appropriate active class based on element type\n */\n const determineActiveClass = (element: HTMLElement): string => {\n // Check if this is one of our component types\n const classPrefix = component.getClass('').split('-')[0];\n \n // Check element tag and classes to determine appropriate active class\n if (element.tagName === 'BUTTON') {\n return `${classPrefix}-button--active`;\n } else if (element.classList.contains(`${classPrefix}-chip`)) {\n return `${classPrefix}-chip--selected`;\n } else if (element.classList.contains(`${classPrefix}-textfield`) || \n element.classList.contains(`${classPrefix}-select`)) {\n return `${classPrefix}-textfield--focused`;\n } else {\n // Default active class for other elements\n return `${classPrefix}-menu-opener--active`;\n }\n };\n\n /**\n * Sets up opener click handler for toggling menu\n */\n const setupOpenerEvents = (openerData: { element: HTMLElement, component: any }): void => {\n const { element: openerElement, component: openerComponent } = openerData;\n \n if (!openerElement) return;\n\n // Remove previously attached event if any\n if (state.openerElement && state.openerElement !== openerElement) {\n cleanup();\n }\n\n // Store references\n state.openerElement = openerElement;\n state.openerComponent = openerComponent;\n \n // Determine the appropriate active class for this opener\n state.activeClass = determineActiveClass(openerElement);\n\n // Add click handler\n openerElement.addEventListener('click', handleOpenerClick);\n \n // Add keyboard handlers\n openerElement.addEventListener('keydown', handleOpenerKeydown);\n \n // Add blur/focusout handler to close menu when opener loses focus\n openerElement.addEventListener('blur', handleOpenerBlur);\n \n // Add ARIA attributes\n openerElement.setAttribute('aria-haspopup', 'true');\n openerElement.setAttribute('aria-expanded', 'false');\n \n // Get menu ID or generate one\n let menuId = component.element.id;\n if (!menuId) {\n menuId = `menu-${Date.now()}-${Math.floor(Math.random() * 1000)}`;\n component.element.id = menuId;\n }\n \n // Connect menu and opener with ARIA\n openerElement.setAttribute('aria-controls', menuId);\n };\n\n /**\n * Applies active visual state to opener\n */\n const setOpenerActive = (active: boolean): void => {\n if (!state.openerElement) return;\n \n // Case 1: Component with setActive method (like our button component)\n if (state.openerComponent && typeof state.openerComponent.setActive === 'function') {\n state.openerComponent.setActive(active);\n return;\n }\n \n // Case 2: Component with selected property (like our chip component)\n if (state.openerComponent && 'selected' in state.openerComponent) {\n state.openerComponent.selected = active;\n return;\n }\n \n // Case 3: Textfield component with focus/blur methods\n if (state.openerComponent && typeof state.openerComponent.focus === 'function' && \n typeof state.openerComponent.blur === 'function') {\n if (active) {\n state.openerComponent.focus();\n } else {\n state.openerComponent.blur();\n }\n return;\n }\n \n // Case 4: Standard DOM element fallback with classes\n if (state.openerElement.classList) {\n if (active) {\n state.openerElement.classList.add(state.activeClass);\n } else {\n state.openerElement.classList.remove(state.activeClass);\n }\n }\n };\n\n /**\n * Restores focus to the opener properly\n * Handles both component and element cases\n */\n const restoreFocusToOpener = (): void => {\n // Skip if we don't have a valid opener\n if (!state.openerElement) return;\n \n // Case 1: Component with focus method\n if (state.openerComponent && typeof state.openerComponent.focus === 'function') {\n requestAnimationFrame(() => {\n state.openerComponent.focus();\n });\n return;\n }\n \n // Case\n \n // Case 2: Component with input that can be focused (like textfield)\n if (state.openerComponent && \n 'input' in state.openerComponent && \n state.openerComponent.input instanceof HTMLElement) {\n requestAnimationFrame(() => {\n state.openerComponent.input.focus();\n });\n return;\n }\n \n // Case 3: Default - focus the element directly\n requestAnimationFrame(() => {\n state.openerElement.focus();\n });\n };\n\n /**\n * Handles opener element click\n */\n const handleOpenerClick = (e: MouseEvent): void => {\n e.preventDefault();\n \n // Toggle menu visibility with mouse interaction type\n if (component.menu) {\n const isOpen = component.menu.isOpen();\n \n if (isOpen) {\n component.menu.close(e);\n } else {\n component.menu.open(e, 'mouse');\n }\n }\n };\n \n /**\n * Handles keyboard events on the opener element\n */\n const handleOpenerKeydown = (e: KeyboardEvent): void => {\n // Only handle events if we have a menu controller\n if (!component.menu) return;\n \n // Determine if menu is currently open\n const isOpen = component.menu.isOpen();\n \n switch (e.key) {\n case 'Enter':\n case ' ': // Space\n case 'ArrowDown':\n case 'Down':\n // Prevent default browser behavior\n e.preventDefault();\n \n // Open menu if closed, with keyboard interaction type\n if (!isOpen) {\n component.menu.open(e, 'keyboard');\n }\n break;\n \n case 'Escape':\n // Close the menu if it's open\n if (isOpen) {\n e.preventDefault();\n component.menu.close(e);\n }\n break;\n \n case 'ArrowUp':\n case 'Up':\n e.preventDefault();\n \n // Special case: open menu with focus on last item\n if (!isOpen) {\n component.menu.open(e, 'keyboard');\n \n // Wait for menu to open and grab the last item\n setTimeout(() => {\n const items = component.element.querySelectorAll(\n `.${component.getClass('menu-item')}:not(.${component.getClass('menu-item--disabled')})`\n ) as NodeListOf<HTMLElement>;\n \n if (items.length > 0) {\n // Reset tabindex for all items\n items.forEach(item => item.setAttribute('tabindex', '-1'));\n \n // Set the last item as active\n const lastItem = items[items.length - 1];\n lastItem.setAttribute('tabindex', '0');\n lastItem.focus();\n }\n }, 100);\n }\n break;\n }\n };\n\n /**\n * Handles opener blur/focusout events\n */\n const handleOpenerBlur = (e: FocusEvent): void => {\n // Only handle events if we have a menu controller and menu is open\n if (!component.menu || !component.menu.isOpen()) return;\n \n // Get the related target (element receiving focus)\n const relatedTarget = e.relatedTarget as HTMLElement;\n \n // If this is tab navigation, always close the menu regardless of next focus target\n if (isTabNavigation) {\n setTimeout(() => {\n // Verify menu is still open (may have been closed in the meantime)\n if (component.menu && component.menu.isOpen()) {\n // Close the menu but don't restore focus\n component.menu.close(e, false);\n }\n }, 10);\n return;\n }\n \n // For non-tab navigation (like mouse clicks):\n // Don't close if focus is moving to any of these:\n // 1. To the menu itself\n // 2. To a child of the menu\n // 3. To another menu button/opener\n if (relatedTarget) {\n // Check if focus moved to menu or its children\n if (component.element.contains(relatedTarget)) {\n return;\n }\n \n // Check if focus moved to another menu button/opener (has aria-haspopup)\n if (relatedTarget.getAttribute('aria-haspopup') === 'true' || \n relatedTarget.closest('[aria-haspopup=\"true\"]')) {\n return;\n }\n }\n \n // Wait a brief moment to ensure we're not in the middle of another operation\n // This helps prevent conflicts with click handlers\n setTimeout(() => {\n // Verify menu is still open (may have been closed in the meantime)\n if (component.menu && component.menu.isOpen()) {\n // Close the menu but don't restore focus since focus has moved elsewhere\n component.menu.close(e, false);\n }\n }, 50);\n };\n\n /**\n * Removes event listeners from opener\n */\n const cleanup = (): void => {\n if (state.openerElement) {\n state.openerElement.removeEventListener('click', handleOpenerClick);\n state.openerElement.removeEventListener('keydown', handleOpenerKeydown);\n state.openerElement.removeEventListener('blur', handleOpenerBlur);\n state.openerElement.removeAttribute('aria-haspopup');\n state.openerElement.removeAttribute('aria-expanded');\n state.openerElement.removeAttribute('aria-controls');\n \n // Clean up active state if present\n setOpenerActive(false);\n }\n \n // Reset state\n state.openerComponent = null;\n state.openerElement = null;\n state.activeClass = '';\n };\n\n // Initialize with provided opener\n const { element, component: openerComponent } = resolveOpener(config.opener);\n setupOpenerEvents({ element, component: openerComponent });\n\n // Register with lifecycle if available\n if (component.lifecycle) {\n const originalDestroy = component.lifecycle.destroy || (() => {});\n component.lifecycle.destroy = () => {\n cleanup();\n originalDestroy();\n };\n }\n\n // Listen for menu state changes to update opener\n component.on('open', () => {\n if (state.openerElement) {\n state.openerElement.setAttribute('aria-expanded', 'true');\n setOpenerActive(true);\n }\n });\n\n component.on('close', (event) => {\n if (state.openerElement) {\n // Always update ARIA attributes\n state.openerElement.setAttribute('aria-expanded', 'false');\n setOpenerActive(false);\n \n // Handle focus restoration when requested\n if (event.restoreFocus && !isTabNavigation) {\n restoreFocusToOpener();\n }\n }\n });\n\n // Return enhanced component\n return {\n ...component,\n opener: {\n /**\n * Sets a new opener element\n * @param opener - New opener element, selector, or component\n * @returns Component for chaining\n */\n setOpener(opener: any) {\n const resolved = resolveOpener(opener);\n if (resolved.element) {\n setupOpenerEvents(resolved);\n }\n return component;\n },\n \n /**\n * Gets the current opener element\n * @returns Current opener element\n */\n getOpener() {\n return state.openerElement;\n },\n \n /**\n * Gets the current opener component if available\n * @returns Current opener component or null\n */\n getOpenerComponent() {\n return state.openerComponent;\n },\n \n /**\n * Sets the active state of the opener\n * @param active - Whether opener should appear active\n * @returns Component for chaining\n */\n setActive(active: boolean) {\n setOpenerActive(active);\n return component;\n },\n \n /**\n * Restores focus to the opener\n * @returns Component for chaining\n */\n focus() {\n restoreFocusToOpener();\n return component;\n }\n }\n };\n};\n\nexport default withOpener;",
|
|
149
|
+
"// src/components/menu/features/opener.ts\n\nimport { MenuConfig } from \"../types\";\n\n/**\n * Adds opener functionality to menu component\n * Manages the relationship between menu and its opener element\n *\n * @param config - Menu configuration\n * @returns Component enhancer with opener management functionality\n */\nconst withOpener = (config: MenuConfig) => (component) => {\n if (!component.element) {\n console.warn(\"Cannot initialize menu opener: missing element\");\n return component;\n }\n\n // Track keyboard navigation state\n let isTabNavigation = false;\n\n // Add an event listener to detect Tab key navigation\n document.addEventListener(\"keydown\", (e: KeyboardEvent) => {\n // Set flag when Tab key is pressed\n isTabNavigation = e.key === \"Tab\";\n\n // Reset flag after a short delay\n setTimeout(() => {\n isTabNavigation = false;\n }, 100);\n });\n\n // Track opener state\n const state = {\n openerElement: null as HTMLElement,\n openerComponent: null as any,\n activeClass: \"\", // Store the appropriate active class based on element type\n };\n\n /**\n * Resolves the opener element from string, direct reference, or component\n * Handles components with element property, components with getElement() method,\n * or DOM elements directly\n */\n const resolveOpener = (\n opener: any,\n ): { element: HTMLElement; component: any } => {\n if (!opener) return { element: null, component: null };\n\n // Handle string selector\n if (typeof opener === \"string\") {\n const element = document.querySelector(opener);\n if (!element) {\n console.warn(`Menu opener not found: ${opener}`);\n return { element: null, component: null };\n }\n return { element: element as HTMLElement, component: null };\n }\n\n // Handle component with element property (most common case)\n if (typeof opener === \"object\" && opener !== null) {\n // Case 1: Component with element property\n if (\"element\" in opener && opener.element instanceof HTMLElement) {\n return { element: opener.element, component: opener };\n }\n\n // Case 2: Component with getElement method\n if (\"getElement\" in opener && typeof opener.getElement === \"function\") {\n const element = opener.getElement();\n if (element instanceof HTMLElement) {\n return { element, component: opener };\n }\n }\n\n // Case 3: Component with input property (like textfield)\n if (\"input\" in opener && opener.input instanceof HTMLElement) {\n return { element: opener.input, component: opener };\n }\n\n // Case 4: Direct HTML element\n if (opener instanceof HTMLElement) {\n return { element: opener, component: null };\n }\n }\n\n console.warn(\"Invalid opener type:\", opener);\n return { element: null, component: null };\n };\n\n /**\n * Determine the appropriate active class based on element type\n */\n const determineActiveClass = (element: HTMLElement): string => {\n // Check if this is one of our component types\n const classPrefix = component.getClass(\"\").split(\"-\")[0];\n\n // Check element tag and classes to determine appropriate active class\n if (element.tagName === \"BUTTON\") {\n return `${classPrefix}-button--active`;\n } else if (element.classList.contains(`${classPrefix}-chip`)) {\n return `${classPrefix}-chip--selected`;\n } else if (\n element.classList.contains(`${classPrefix}-textfield`) ||\n element.classList.contains(`${classPrefix}-select`)\n ) {\n return `${classPrefix}-textfield--focused`;\n } else {\n // Default active class for other elements\n return `${classPrefix}-menu-opener--active`;\n }\n };\n\n /**\n * Sets up opener click handler for toggling menu\n */\n const setupOpenerEvents = (openerData: {\n element: HTMLElement;\n component: any;\n }): void => {\n const { element: openerElement, component: openerComponent } = openerData;\n\n if (!openerElement) return;\n\n // Remove previously attached event if any\n if (state.openerElement && state.openerElement !== openerElement) {\n cleanup();\n }\n\n // Store references\n state.openerElement = openerElement;\n state.openerComponent = openerComponent;\n\n // Determine the appropriate active class for this opener\n state.activeClass = determineActiveClass(openerElement);\n\n // When manualOpen is true, the opener is only used for positioning —\n // the consumer calls open()/close() themselves.\n if (!config.manualOpen) {\n // Add click handler\n openerElement.addEventListener(\"click\", handleOpenerClick);\n\n // Add keyboard handlers\n openerElement.addEventListener(\"keydown\", handleOpenerKeydown);\n\n // Add blur/focusout handler to close menu when opener loses focus\n openerElement.addEventListener(\"blur\", handleOpenerBlur);\n }\n\n // Add ARIA attributes\n openerElement.setAttribute(\"aria-haspopup\", \"true\");\n openerElement.setAttribute(\"aria-expanded\", \"false\");\n\n // Get menu ID or generate one\n let menuId = component.element.id;\n if (!menuId) {\n menuId = `menu-${Date.now()}-${Math.floor(Math.random() * 1000)}`;\n component.element.id = menuId;\n }\n\n // Connect menu and opener with ARIA\n openerElement.setAttribute(\"aria-controls\", menuId);\n };\n\n /**\n * Applies active visual state to opener\n */\n const setOpenerActive = (active: boolean): void => {\n if (!state.openerElement) return;\n\n // Case 1: Component with setActive method (like our button component)\n if (\n state.openerComponent &&\n typeof state.openerComponent.setActive === \"function\"\n ) {\n state.openerComponent.setActive(active);\n return;\n }\n\n // Case 2: Component with selected property (like our chip component)\n if (state.openerComponent && \"selected\" in state.openerComponent) {\n state.openerComponent.selected = active;\n return;\n }\n\n // Case 3: Textfield component with focus/blur methods\n if (\n state.openerComponent &&\n typeof state.openerComponent.focus === \"function\" &&\n typeof state.openerComponent.blur === \"function\"\n ) {\n if (active) {\n state.openerComponent.focus();\n } else {\n state.openerComponent.blur();\n }\n return;\n }\n\n // Case 4: Standard DOM element fallback with classes\n if (state.openerElement.classList) {\n if (active) {\n state.openerElement.classList.add(state.activeClass);\n } else {\n state.openerElement.classList.remove(state.activeClass);\n }\n }\n };\n\n /**\n * Restores focus to the opener properly\n * Handles both component and element cases\n */\n const restoreFocusToOpener = (): void => {\n // Skip if we don't have a valid opener\n if (!state.openerElement) return;\n\n // Case 1: Component with focus method\n if (\n state.openerComponent &&\n typeof state.openerComponent.focus === \"function\"\n ) {\n requestAnimationFrame(() => {\n state.openerComponent.focus();\n });\n return;\n }\n\n // Case\n\n // Case 2: Component with input that can be focused (like textfield)\n if (\n state.openerComponent &&\n \"input\" in state.openerComponent &&\n state.openerComponent.input instanceof HTMLElement\n ) {\n requestAnimationFrame(() => {\n state.openerComponent.input.focus();\n });\n return;\n }\n\n // Case 3: Default - focus the element directly\n requestAnimationFrame(() => {\n state.openerElement.focus();\n });\n };\n\n /**\n * Handles opener element click\n */\n const handleOpenerClick = (e: MouseEvent): void => {\n e.preventDefault();\n\n // Toggle menu visibility with mouse interaction type\n if (component.menu) {\n const isOpen = component.menu.isOpen();\n\n if (isOpen) {\n component.menu.close(e);\n } else {\n component.menu.open(e, \"mouse\");\n }\n }\n };\n\n /**\n * Handles keyboard events on the opener element\n */\n const handleOpenerKeydown = (e: KeyboardEvent): void => {\n // Only handle events if we have a menu controller\n if (!component.menu) return;\n\n // Determine if menu is currently open\n const isOpen = component.menu.isOpen();\n\n switch (e.key) {\n case \"Enter\":\n case \" \": // Space\n case \"ArrowDown\":\n case \"Down\":\n // Prevent default browser behavior\n e.preventDefault();\n\n // Open menu if closed, with keyboard interaction type\n if (!isOpen) {\n component.menu.open(e, \"keyboard\");\n }\n break;\n\n case \"Escape\":\n // Close the menu if it's open\n if (isOpen) {\n e.preventDefault();\n component.menu.close(e);\n }\n break;\n\n case \"ArrowUp\":\n case \"Up\":\n e.preventDefault();\n\n // Special case: open menu with focus on last item\n if (!isOpen) {\n component.menu.open(e, \"keyboard\");\n\n // Wait for menu to open and grab the last item\n setTimeout(() => {\n const items = component.element.querySelectorAll(\n `.${component.getClass(\"menu-item\")}:not(.${component.getClass(\"menu-item--disabled\")})`,\n ) as NodeListOf<HTMLElement>;\n\n if (items.length > 0) {\n // Reset tabindex for all items\n items.forEach((item) => item.setAttribute(\"tabindex\", \"-1\"));\n\n // Set the last item as active\n const lastItem = items[items.length - 1];\n lastItem.setAttribute(\"tabindex\", \"0\");\n lastItem.focus();\n }\n }, 100);\n }\n break;\n }\n };\n\n /**\n * Handles opener blur/focusout events\n */\n const handleOpenerBlur = (e: FocusEvent): void => {\n // Only handle events if we have a menu controller and menu is open\n if (!component.menu || !component.menu.isOpen()) return;\n\n // Get the related target (element receiving focus)\n const relatedTarget = e.relatedTarget as HTMLElement;\n\n // If this is tab navigation, always close the menu regardless of next focus target\n if (isTabNavigation) {\n setTimeout(() => {\n // Verify menu is still open (may have been closed in the meantime)\n if (component.menu && component.menu.isOpen()) {\n // Close the menu but don't restore focus\n component.menu.close(e, false);\n }\n }, 10);\n return;\n }\n\n // For non-tab navigation (like mouse clicks):\n // Don't close if focus is moving to any of these:\n // 1. To the menu itself\n // 2. To a child of the menu\n // 3. To another menu button/opener\n if (relatedTarget) {\n // Check if focus moved to menu or its children\n if (component.element.contains(relatedTarget)) {\n return;\n }\n\n // Check if focus moved to another menu button/opener (has aria-haspopup)\n if (\n relatedTarget.getAttribute(\"aria-haspopup\") === \"true\" ||\n relatedTarget.closest('[aria-haspopup=\"true\"]')\n ) {\n return;\n }\n }\n\n // Wait a brief moment to ensure we're not in the middle of another operation\n // This helps prevent conflicts with click handlers\n setTimeout(() => {\n // Verify menu is still open (may have been closed in the meantime)\n if (component.menu && component.menu.isOpen()) {\n // Close the menu but don't restore focus since focus has moved elsewhere\n component.menu.close(e, false);\n }\n }, 50);\n };\n\n /**\n * Removes event listeners from opener\n */\n const cleanup = (): void => {\n if (state.openerElement) {\n if (!config.manualOpen) {\n state.openerElement.removeEventListener(\"click\", handleOpenerClick);\n state.openerElement.removeEventListener(\"keydown\", handleOpenerKeydown);\n state.openerElement.removeEventListener(\"blur\", handleOpenerBlur);\n }\n state.openerElement.removeAttribute(\"aria-haspopup\");\n state.openerElement.removeAttribute(\"aria-expanded\");\n state.openerElement.removeAttribute(\"aria-controls\");\n\n // Clean up active state if present\n setOpenerActive(false);\n }\n\n // Reset state\n state.openerComponent = null;\n state.openerElement = null;\n state.activeClass = \"\";\n };\n\n // Initialize with provided opener\n const { element, component: openerComponent } = resolveOpener(config.opener);\n setupOpenerEvents({ element, component: openerComponent });\n\n // Register with lifecycle if available\n if (component.lifecycle) {\n const originalDestroy = component.lifecycle.destroy || (() => {});\n component.lifecycle.destroy = () => {\n cleanup();\n originalDestroy();\n };\n }\n\n // Listen for menu state changes to update opener\n component.on(\"open\", () => {\n if (state.openerElement) {\n state.openerElement.setAttribute(\"aria-expanded\", \"true\");\n setOpenerActive(true);\n }\n });\n\n component.on(\"close\", (event) => {\n if (state.openerElement) {\n // Always update ARIA attributes\n state.openerElement.setAttribute(\"aria-expanded\", \"false\");\n setOpenerActive(false);\n\n // Handle focus restoration when requested\n if (event.restoreFocus && !isTabNavigation) {\n restoreFocusToOpener();\n }\n }\n });\n\n // Return enhanced component\n return {\n ...component,\n opener: {\n /**\n * Sets a new opener element\n * @param opener - New opener element, selector, or component\n * @returns Component for chaining\n */\n setOpener(opener: any) {\n const resolved = resolveOpener(opener);\n if (resolved.element) {\n setupOpenerEvents(resolved);\n }\n return component;\n },\n\n /**\n * Gets the current opener element\n * @returns Current opener element\n */\n getOpener() {\n return state.openerElement;\n },\n\n /**\n * Gets the current opener component if available\n * @returns Current opener component or null\n */\n getOpenerComponent() {\n return state.openerComponent;\n },\n\n /**\n * Sets the active state of the opener\n * @param active - Whether opener should appear active\n * @returns Component for chaining\n */\n setActive(active: boolean) {\n setOpenerActive(active);\n return component;\n },\n\n /**\n * Restores focus to the opener\n * @returns Component for chaining\n */\n focus() {\n restoreFocusToOpener();\n return component;\n },\n },\n };\n};\n\nexport default withOpener;\n",
|
|
143
150
|
"// src/components/menu/features/position.ts\n\nimport { MenuConfig } from \"../types\";\n\n/**\n * Menu position helper\n * Provides functions for positioning menus and submenus\n */\nexport const createPositioner = (component, config: MenuConfig) => {\n /**\n * Positions the menu relative to its opener\n * Ensures the menu maintains proper spacing from viewport edges\n * Makes sure the menu stays attached to opener during scrolling\n *\n * @param menuElement - The menu element to position\n * @param openerElement - The element to opener against\n * @param preferredPosition - The preferred position\n * @param isSubmenu - Whether this is a submenu (affects positioning logic)\n */\n const positionElement = (\n menuElement: HTMLElement,\n openerElement: HTMLElement,\n preferredPosition: string,\n isSubmenu = false,\n ): void => {\n if (!menuElement || !openerElement) return;\n\n // Check if menu is inside a container (not document.body)\n const hasContainer = config.container && config.container !== document.body;\n\n // Ensure menu is positioned absolutely for proper scroll behavior\n menuElement.style.position = \"absolute\";\n\n // Get current scroll position - critical for absolute positioning that tracks opener\n // When inside a container, we position relative to the container, not the viewport\n const scrollX = hasContainer\n ? 0\n : window.pageXOffset || document.documentElement.scrollLeft;\n const scrollY = hasContainer\n ? 0\n : window.pageYOffset || document.documentElement.scrollTop;\n\n // Get opener measurements first (needed for width calculation)\n const openerRect = openerElement.getBoundingClientRect();\n\n // Make a copy of the menu for measurement without affecting the real menu\n const tempMenu = menuElement.cloneNode(true) as HTMLElement;\n\n // Make the temp menu visible but not displayed for measurement\n tempMenu.style.visibility = \"hidden\";\n tempMenu.style.display = \"block\";\n tempMenu.style.position = \"absolute\";\n tempMenu.style.top = \"0\";\n tempMenu.style.left = \"0\";\n tempMenu.style.transform = \"none\";\n tempMenu.style.opacity = \"0\";\n tempMenu.style.pointerEvents = \"none\";\n tempMenu.classList.add(`${component.getClass(\"menu--visible\")}`); // Add visible class for proper dimensions\n\n // Apply width to temp menu BEFORE measuring if config specifies 100% width\n // This ensures we measure with the correct width on first open\n if (config.width === \"100%\" && !isSubmenu) {\n tempMenu.style.width = `${openerRect.width}px`;\n }\n\n // Add it to the DOM temporarily (use container if available for accurate measurement)\n const measureContainer = config.container || document.body;\n measureContainer.appendChild(tempMenu);\n\n // Get measurements\n const menuRect = tempMenu.getBoundingClientRect();\n const viewportWidth = window.innerWidth;\n const viewportHeight = window.innerHeight;\n\n // Remove the temp element after measurements\n measureContainer.removeChild(tempMenu);\n\n // Get values needed for calculations\n const offset = config.offset !== undefined ? config.offset : 8;\n\n // Calculate position based on position\n let top = 0;\n let left = 0;\n let calculatedPosition = preferredPosition;\n\n // Different positioning logic for main menu vs submenu\n if (isSubmenu) {\n // Default position is to the right of parent\n calculatedPosition = preferredPosition || \"right-start\";\n\n // Check if this would push the submenu out of the viewport\n if (\n calculatedPosition.startsWith(\"right\") &&\n openerRect.right + menuRect.width + offset > viewportWidth - 16\n ) {\n // Flip to the left side if it doesn't fit on the right\n calculatedPosition = calculatedPosition.replace(\"right\", \"left\");\n } else if (\n calculatedPosition.startsWith(\"left\") &&\n openerRect.left - menuRect.width - offset < 16\n ) {\n // Flip to the right side if it doesn't fit on the left\n calculatedPosition = calculatedPosition.replace(\"left\", \"right\");\n }\n\n // Check vertical positioning as well for submenus\n // If submenu would extend beyond the bottom of the viewport, adjust positioning\n if (openerRect.top + menuRect.height > viewportHeight - 48) {\n if (calculatedPosition === \"right-start\") {\n calculatedPosition = \"right-end\";\n } else if (calculatedPosition === \"left-start\") {\n calculatedPosition = \"left-end\";\n }\n }\n } else {\n // For main menu, follow the standard position calculation\n // First determine correct position based on original position\n switch (preferredPosition) {\n case \"top-start\":\n case \"top\":\n case \"top-end\":\n // Check if enough space above\n if (openerRect.top < menuRect.height + offset + 48) {\n // Not enough space above, flip to bottom\n calculatedPosition = preferredPosition.replace(\"top\", \"bottom\");\n }\n break;\n\n case \"bottom-start\":\n case \"bottom\":\n case \"bottom-end\":\n // Check if enough space below\n if (\n openerRect.bottom + menuRect.height + offset + 48 >\n viewportHeight\n ) {\n // Not enough space below, check if more space above\n if (openerRect.top > viewportHeight - openerRect.bottom) {\n // More space above, flip to top\n calculatedPosition = preferredPosition.replace(\"bottom\", \"top\");\n }\n }\n break;\n\n // Specifically handle right-start, right, left-start, and left positions\n case \"right-start\":\n case \"right\":\n case \"left-start\":\n case \"left\":\n // Check if enough space below for these side positions\n if (openerRect.bottom + menuRect.height > viewportHeight - 48) {\n // Not enough space below, shift the menu upward\n if (preferredPosition === \"right-start\") {\n calculatedPosition = \"right-end\";\n } else if (preferredPosition === \"left-start\") {\n calculatedPosition = \"left-end\";\n } else if (preferredPosition === \"right\") {\n // For center aligned, shift up by half menu height plus some spacing\n top =\n openerRect.top - (menuRect.height - openerRect.height) - offset;\n } else if (preferredPosition === \"left\") {\n // For center aligned, shift up by half menu height plus some spacing\n top =\n openerRect.top - (menuRect.height - openerRect.height) - offset;\n }\n }\n break;\n }\n }\n\n // Reset any existing position classes\n const positionClasses = [\n \"position-top\",\n \"position-bottom\",\n \"position-right\",\n \"position-left\",\n ];\n\n positionClasses.forEach((posClass) => {\n menuElement.classList.remove(\n `${component.getClass(\"menu\")}--${posClass}`,\n );\n });\n\n // Determine transform origin based on vertical position\n // Start by checking the calculated position to determine transform origin\n const menuAppearsAboveOpener =\n calculatedPosition.startsWith(\"top\") ||\n calculatedPosition === \"right-end\" ||\n calculatedPosition === \"left-end\" ||\n (calculatedPosition === \"right\" && top < openerRect.top) ||\n (calculatedPosition === \"left\" && top < openerRect.top);\n\n if (menuAppearsAboveOpener) {\n menuElement.classList.add(`${component.getClass(\"menu\")}--position-top`);\n } else if (calculatedPosition.startsWith(\"left\")) {\n menuElement.classList.add(`${component.getClass(\"menu\")}--position-left`);\n } else if (calculatedPosition.startsWith(\"right\")) {\n menuElement.classList.add(\n `${component.getClass(\"menu\")}--position-right`,\n );\n } else {\n menuElement.classList.add(\n `${component.getClass(\"menu\")}--position-bottom`,\n );\n }\n\n // Position calculation - important: getBoundingClientRect() returns values relative to viewport\n // We need to add scroll position to get absolute position (unless we have a container)\n // When inside a container, position relative to the container\n const containerRect =\n hasContainer && config.container\n ? config.container.getBoundingClientRect()\n : { top: 0, left: 0, right: 0, bottom: 0 };\n\n // Calculate offsets - when in a container, subtract container position\n const offsetX = hasContainer ? -containerRect.left : scrollX;\n const offsetY = hasContainer ? -containerRect.top : scrollY;\n\n switch (calculatedPosition) {\n case \"top-start\":\n top = openerRect.top + offsetY - menuRect.height - offset;\n left = openerRect.left + offsetX;\n break;\n case \"top\":\n top = openerRect.top + offsetY - menuRect.height - offset;\n left =\n openerRect.left + offsetX + openerRect.width / 2 - menuRect.width / 2;\n break;\n case \"top-end\":\n top = openerRect.top + offsetY - menuRect.height - offset;\n left = openerRect.right + offsetX - menuRect.width;\n break;\n case \"right-start\":\n top = openerRect.top + offsetY;\n left = openerRect.right + offsetX + offset;\n break;\n case \"right\":\n // Custom top position might be set above; only set if not already defined\n if (top === 0) {\n top =\n openerRect.top +\n offsetY +\n openerRect.height / 2 -\n menuRect.height / 2;\n } else {\n top += offsetY;\n }\n left = openerRect.right + offsetX + offset;\n break;\n case \"right-end\":\n top = openerRect.bottom + offsetY - menuRect.height;\n left = openerRect.right + offsetX + offset;\n break;\n case \"bottom-start\":\n top = openerRect.bottom + offsetY + offset;\n left = openerRect.left + offsetX;\n break;\n case \"bottom\":\n top = openerRect.bottom + offsetY + offset;\n left =\n openerRect.left + offsetX + openerRect.width / 2 - menuRect.width / 2;\n break;\n case \"bottom-end\":\n top = openerRect.bottom + offsetY + offset;\n left = openerRect.right + offsetX - menuRect.width;\n break;\n case \"left-start\":\n top = openerRect.top + offsetY;\n left = openerRect.left + offsetX - menuRect.width - offset;\n break;\n case \"left\":\n // Custom top position might be set above; only set if not already defined\n if (top === 0) {\n top =\n openerRect.top +\n offsetY +\n openerRect.height / 2 -\n menuRect.height / 2;\n } else {\n top += offsetY;\n }\n left = openerRect.left + offsetX - menuRect.width - offset;\n break;\n case \"left-end\":\n top = openerRect.bottom + offsetY - menuRect.height;\n left = openerRect.left + offsetX - menuRect.width - offset;\n break;\n }\n\n // Ensure the menu has proper spacing from viewport edges\n // Skip viewport edge checks when inside a container\n if (hasContainer) {\n // For container-based positioning, just apply the calculated positions\n menuElement.style.top = `${top}px`;\n menuElement.style.left = `${left}px`;\n\n // For 'width: 100%' configuration, match the opener width\n if (config.width === \"100%\" && !isSubmenu) {\n menuElement.style.width = `${openerRect.width}px`;\n }\n\n // Apply maxHeight if configured\n if (config.maxHeight) {\n menuElement.style.maxHeight = config.maxHeight;\n }\n\n return; // Exit early for container-based menus\n }\n\n // Top edge spacing - ensure the menu doesn't go above the viewport + padding\n const minTopSpacing = 48; // Minimum distance from top of viewport\n if (top - scrollY < minTopSpacing) {\n top = minTopSpacing + scrollY;\n }\n\n // Bottom edge spacing - ensure the menu doesn't go below the viewport - padding\n const viewportBottomMargin = 48; // Minimum space from bottom of viewport\n const bottomEdge = top - scrollY + menuRect.height;\n\n if (bottomEdge > viewportHeight - viewportBottomMargin) {\n // Option 1: We could adjust the top position\n // top = scrollY + viewportHeight - viewportBottomMargin - menuRect.height;\n\n // Option 2: Instead of moving the menu, adjust its height to fit (better UX)\n const availableHeight =\n viewportHeight - (top - scrollY) - viewportBottomMargin;\n\n // Set a minimum height to prevent tiny menus\n const minMenuHeight = Math.min(menuRect.height, 100);\n const newMaxHeight = Math.max(availableHeight, minMenuHeight);\n\n // Update maxHeight to fit within viewport\n menuElement.style.maxHeight = `${newMaxHeight}px`;\n\n // If user has explicitly set a maxHeight, respect it if smaller\n if (config.maxHeight) {\n const configMaxHeight = parseInt(config.maxHeight, 10);\n if (\n !isNaN(configMaxHeight) &&\n configMaxHeight < parseInt(menuElement.style.maxHeight || \"0\", 10)\n ) {\n menuElement.style.maxHeight = config.maxHeight;\n }\n }\n } else {\n // If there's plenty of space, use the config's maxHeight (if provided)\n if (config.maxHeight) {\n menuElement.style.maxHeight = config.maxHeight;\n }\n }\n\n // For 'width: 100%' configuration, match the opener width\n if (config.width === \"100%\" && !isSubmenu) {\n menuElement.style.width = `${openerRect.width}px`;\n }\n\n // Apply final positions, ensuring menu stays within viewport\n // The position is absolute, not fixed, so it must account for scroll\n const finalTop = Math.max(minTopSpacing + scrollY, top);\n const finalLeft = Math.max(16 + scrollX, left);\n\n menuElement.style.top = `${finalTop}px`;\n menuElement.style.left = `${finalLeft}px`;\n\n // Make sure menu doesn't extend past right edge\n if (finalLeft - scrollX + menuRect.width > viewportWidth - 16) {\n // If we're going past the right edge, set right with fixed distance from edge\n menuElement.style.left = \"auto\";\n menuElement.style.right = \"16px\";\n }\n };\n\n /**\n * Positions the main menu relative to its opener\n */\n const positionMenu = (openerElement: HTMLElement): void => {\n if (!openerElement || !component.element) return;\n positionElement(component.element, openerElement, config.position, false);\n };\n\n /**\n * Positions a submenu relative to its parent menu item\n * For deeply nested submenus, alternates side placement (right/left)\n * @param submenuElement - The submenu element to position\n * @param parentItemElement - The parent menu item element\n * @param level - Nesting level for calculating position\n */\n const positionSubmenu = (\n submenuElement: HTMLElement,\n parentItemElement: HTMLElement,\n level: number = 1,\n ): void => {\n if (!submenuElement || !parentItemElement) return;\n\n // Alternate between right and left positioning for deeper nesting levels\n // This helps prevent menus from cascading off the screen\n const prefPosition = level % 2 === 1 ? \"right-start\" : \"left-start\";\n\n // Use higher z-index for deeper nested menus to ensure proper layering\n submenuElement.style.zIndex = `${1000 + level * 10}`;\n\n positionElement(submenuElement, parentItemElement, prefPosition, true);\n };\n\n return {\n positionMenu,\n positionSubmenu,\n positionElement,\n };\n};\n\n/**\n * Adds positioning functionality to the menu component\n *\n * @param config - Menu configuration options\n * @returns Component enhancer with positioning functionality\n */\nconst withPosition = (config: MenuConfig) => (component) => {\n // Do nothing if no element\n if (!component.element) {\n return component;\n }\n\n // Create the positioner\n const positioner = createPositioner(component, config);\n\n // Return enhanced component\n return {\n ...component,\n position: positioner,\n };\n};\n\nexport default withPosition;\n",
|
|
144
151
|
"// src/components/menu/features/keyboard.ts\n\nimport { MenuItem } from \"../types\";\n\n/**\n * Keyboard navigation handler for menus\n * Manages focus management and keyboard interactions for accessibility\n */\nexport const createKeyboardNavigation = (component) => {\n // Track tab navigation state\n let isTabNavigation = false;\n\n // Typeahead search state\n let typeaheadBuffer = \"\";\n let typeaheadTimeout: ReturnType<typeof setTimeout> | null = null;\n const TYPEAHEAD_DELAY = 500; // Reset buffer after 500ms of no typing\n\n // Add event listener to detect Tab key navigation\n const setupTabKeyDetection = () => {\n document.addEventListener(\"keydown\", (e: KeyboardEvent) => {\n // Set flag when Tab key is pressed\n isTabNavigation = e.key === \"Tab\";\n\n // Reset flag after a short delay\n setTimeout(() => {\n isTabNavigation = false;\n }, 100);\n });\n };\n\n // Call setup once\n setupTabKeyDetection();\n\n /**\n * Gets all focusable elements in the document\n * Useful for Tab navigation management\n */\n const getFocusableElements = (): HTMLElement[] => {\n // Query all potentially focusable elements\n const focusableElementsString =\n 'a[href], button:not([disabled]), input:not([disabled]), select:not([disabled]), textarea:not([disabled]), [tabindex]:not([tabindex=\"-1\"])';\n const elements = document.querySelectorAll(\n focusableElementsString,\n ) as NodeListOf<HTMLElement>;\n\n // Convert to array and filter out hidden elements\n return Array.from(elements).filter((element) => {\n return (\n element.offsetParent !== null && !element.classList.contains(\"hidden\")\n );\n });\n };\n\n /**\n * Resets the typeahead search buffer\n */\n const resetTypeahead = (): void => {\n typeaheadBuffer = \"\";\n if (typeaheadTimeout) {\n clearTimeout(typeaheadTimeout);\n typeaheadTimeout = null;\n }\n };\n\n /**\n * Sets up initial focus within the menu\n * @param menuElement - The menu element to set focus within\n * @param interactionType - Type of interaction that opened the menu\n */\n const handleInitialFocus = (\n menuElement: HTMLElement,\n interactionType: \"keyboard\" | \"mouse\",\n ): void => {\n // Reset typeahead when menu opens\n resetTypeahead();\n\n if (interactionType === \"keyboard\") {\n // Find all focusable items\n const items = Array.from(\n menuElement.querySelectorAll(\n `.${component.getClass(\"menu-item\")}:not(.${component.getClass(\n \"menu-item--disabled\",\n )})`,\n ),\n ) as HTMLElement[];\n\n if (items.length > 0) {\n // Set tabindex on first item and focus it\n items[0].setAttribute(\"tabindex\", \"0\");\n items[0].focus();\n } else {\n // If no items, focus the menu itself\n menuElement.setAttribute(\"tabindex\", \"0\");\n menuElement.focus();\n }\n } else {\n // For mouse interaction, make the menu focusable but don't auto-focus\n menuElement.setAttribute(\"tabindex\", \"-1\");\n\n // Still set up the first item as focusable\n const firstItem = menuElement.querySelector(\n `.${component.getClass(\"menu-item\")}:not(.${component.getClass(\n \"menu-item--disabled\",\n )})`,\n ) as HTMLElement;\n if (firstItem) {\n firstItem.setAttribute(\"tabindex\", \"0\");\n }\n }\n };\n\n /**\n * Handles keydown events on the menu or submenu\n */\n const handleMenuKeydown = (\n e: KeyboardEvent,\n state: any,\n actions: {\n closeMenu: (event: Event, restoreFocus?: boolean) => void;\n closeSubmenu: (level: number) => void;\n findItemById: (id: string) => MenuItem | null;\n handleSubmenuClick: (\n item: MenuItem,\n index: number,\n itemElement: HTMLElement,\n ) => void;\n handleNestedSubmenuClick: (\n item: MenuItem,\n index: number,\n itemElement: HTMLElement,\n ) => void;\n },\n ): void => {\n // Determine if this event is from the main menu or a submenu\n const isSubmenu =\n state.activeSubmenu && state.activeSubmenu.contains(e.target as Node);\n\n // Get the appropriate menu element\n const menuElement = isSubmenu ? state.activeSubmenu : component.element;\n\n // Get all non-disabled menu items from the current menu\n const items = Array.from(\n menuElement.querySelectorAll(\n `.${component.getClass(\"menu-item\")}:not(.${component.getClass(\n \"menu-item--disabled\",\n )})`,\n ),\n ) as HTMLElement[];\n\n if (items.length === 0) return;\n\n // Find the currently focused item\n const focusedElement = document.activeElement as HTMLElement;\n let focusedItemIndex = -1;\n\n if (focusedElement && items.includes(focusedElement)) {\n focusedItemIndex = items.indexOf(focusedElement);\n }\n\n // Simplified focus function\n const focusItem = (index: number) => {\n if (items[index]) {\n items[index].focus();\n }\n };\n\n // Handle typeahead search for printable characters\n if (e.key.length === 1 && !e.ctrlKey && !e.metaKey && !e.altKey) {\n e.preventDefault();\n e.stopPropagation();\n\n // Add character to buffer\n typeaheadBuffer += e.key.toLowerCase();\n\n // Clear existing timeout\n if (typeaheadTimeout) {\n clearTimeout(typeaheadTimeout);\n }\n\n // Set timeout to reset buffer\n typeaheadTimeout = setTimeout(() => {\n typeaheadBuffer = \"\";\n typeaheadTimeout = null;\n }, TYPEAHEAD_DELAY);\n\n // Find matching item\n const matchIndex = items.findIndex((item) => {\n const textElement = item.querySelector(\n `.${component.getClass(\"menu-item-text\")}`,\n );\n const text = textElement?.textContent?.toLowerCase() || \"\";\n return text.startsWith(typeaheadBuffer);\n });\n\n if (matchIndex !== -1) {\n focusItem(matchIndex);\n } else if (typeaheadBuffer.length > 1) {\n // If no match with multiple chars, try just the last character\n const lastChar = typeaheadBuffer.slice(-1);\n const singleCharMatch = items.findIndex((item) => {\n const textElement = item.querySelector(\n `.${component.getClass(\"menu-item-text\")}`,\n );\n const text = textElement?.textContent?.toLowerCase() || \"\";\n return text.startsWith(lastChar);\n });\n\n if (singleCharMatch !== -1) {\n typeaheadBuffer = lastChar; // Reset buffer to just this char\n focusItem(singleCharMatch);\n }\n }\n\n return;\n }\n\n switch (e.key) {\n case \"ArrowDown\":\n case \"Down\":\n e.preventDefault();\n e.stopPropagation();\n if (focusedItemIndex < 0) {\n focusItem(0);\n } else if (focusedItemIndex < items.length - 1) {\n focusItem(focusedItemIndex + 1);\n } else {\n focusItem(0); // Wrap to first\n }\n break;\n\n case \"ArrowUp\":\n case \"Up\":\n e.preventDefault();\n e.stopPropagation();\n if (focusedItemIndex < 0) {\n focusItem(items.length - 1);\n } else if (focusedItemIndex > 0) {\n focusItem(focusedItemIndex - 1);\n } else {\n focusItem(items.length - 1); // Wrap to last\n }\n break;\n\n case \"Home\":\n e.preventDefault();\n e.stopPropagation();\n focusItem(0);\n break;\n\n case \"End\":\n e.preventDefault();\n e.stopPropagation();\n focusItem(items.length - 1);\n break;\n\n case \"Enter\":\n case \" \":\n e.preventDefault();\n e.stopPropagation();\n if (focusedItemIndex >= 0) {\n items[focusedItemIndex].click();\n }\n break;\n\n case \"ArrowRight\":\n case \"Right\":\n e.preventDefault();\n e.stopPropagation();\n if (isSubmenu) {\n // In a submenu, right arrow opens nested submenus\n if (\n focusedItemIndex >= 0 &&\n items[focusedItemIndex].classList.contains(\n `${component.getClass(\"menu-item--submenu\")}`,\n )\n ) {\n const itemElement = items[focusedItemIndex];\n const itemIndex = parseInt(\n itemElement.getAttribute(\"data-index\"),\n 10,\n );\n const parentMenu = itemElement.closest(\n `.${component.getClass(\"menu--submenu\")}`,\n );\n const parentItemId = parentMenu?.getAttribute(\"data-parent-item\");\n\n // Find the parent item in the items array to get its submenu\n const parentItem = actions.findItemById(parentItemId);\n if (parentItem && parentItem.submenu) {\n const itemData = parentItem.submenu[itemIndex] as MenuItem;\n actions.handleNestedSubmenuClick(\n itemData,\n itemIndex,\n itemElement,\n );\n }\n }\n } else {\n // In main menu, right arrow opens a submenu\n if (\n focusedItemIndex >= 0 &&\n items[focusedItemIndex].classList.contains(\n `${component.getClass(\"menu-item--submenu\")}`,\n )\n ) {\n // Get the correct menu item data\n const itemElement = items[focusedItemIndex];\n const itemIndex = parseInt(\n itemElement.getAttribute(\"data-index\"),\n 10,\n );\n const itemData = state.items[itemIndex] as MenuItem;\n\n // Open submenu\n actions.handleSubmenuClick(itemData, itemIndex, itemElement);\n }\n }\n break;\n\n case \"ArrowLeft\":\n case \"Left\":\n e.preventDefault();\n e.stopPropagation();\n if (isSubmenu) {\n // In a submenu, left arrow returns to the parent menu\n if (state.activeSubmenuItem) {\n // Store the reference to the parent item before closing the submenu\n const parentItem = state.activeSubmenuItem;\n\n // Get the current level\n const currentLevel = parseInt(\n menuElement.getAttribute(\"data-level\") || \"1\",\n 10,\n );\n\n // Close this level of submenu\n actions.closeSubmenu(currentLevel);\n\n // Focus the parent item after closing\n if (parentItem) {\n parentItem.focus();\n }\n } else {\n actions.closeSubmenu(1);\n }\n }\n break;\n\n case \"Escape\":\n e.preventDefault();\n e.stopPropagation();\n if (isSubmenu) {\n // In a submenu, Escape closes just the submenu\n if (state.activeSubmenuItem) {\n // Store the reference to the parent item before closing the submenu\n const parentItem = state.activeSubmenuItem;\n\n // Get the current level\n const currentLevel = parseInt(\n menuElement.getAttribute(\"data-level\") || \"1\",\n 10,\n );\n\n // Close this level of submenu\n actions.closeSubmenu(currentLevel);\n\n // Focus the parent item after closing\n if (parentItem) {\n parentItem.focus();\n }\n } else {\n actions.closeSubmenu(1);\n }\n } else {\n // In main menu, Escape closes the entire menu and restores focus to opener\n actions.closeMenu(e, true);\n }\n break;\n\n case \"Tab\":\n // Clear typeahead buffer when closing\n typeaheadBuffer = \"\";\n if (typeaheadTimeout) {\n clearTimeout(typeaheadTimeout);\n typeaheadTimeout = null;\n }\n\n // Close the menu when tabbing out and move focus to next focusable element\n e.preventDefault();\n\n // Find the opener element\n const openerElement = component.opener?.getOpener?.();\n\n // Always close the menu\n actions.closeMenu(e, true); // Pass true to restore focus to opener\n\n // If we want to move to the next/previous focusable element after the opener:\n if (openerElement) {\n // Let the browser focus the opener first (happens because we passed true above)\n // Then we can optionally set a timeout to move to next element\n setTimeout(() => {\n // Optional: If you want to move focus to next/prev element after restoring to opener\n if (e.shiftKey) {\n // For shift+tab, we could let natural tabbing continue from the opener\n } else {\n // For tab, we could programmatically focus the next element\n const focusableElements = getFocusableElements();\n const openerIndex = focusableElements.indexOf(openerElement);\n if (\n openerIndex >= 0 &&\n openerIndex < focusableElements.length - 1\n ) {\n focusableElements[openerIndex + 1].focus();\n }\n }\n }, 0);\n }\n break;\n }\n };\n\n /**\n * Set up keydown handler for a menu element\n */\n const setupKeyboardHandlers = (\n menuElement: HTMLElement,\n state: any,\n actions: any,\n ) => {\n // Make all menu items focusable via keyboard navigation\n const items = menuElement.querySelectorAll(\n `.${component.getClass(\"menu-item\")}:not(.${component.getClass(\n \"menu-item--disabled\",\n )})`,\n ) as NodeListOf<HTMLElement>;\n items.forEach((item) => {\n item.tabIndex = -1;\n });\n\n // Set first item as focusable\n if (items.length > 0) {\n items[0].tabIndex = 0;\n }\n\n menuElement.addEventListener(\"keydown\", (e) =>\n handleMenuKeydown(e, state, actions),\n );\n };\n\n /**\n * Checks if current interaction is tab navigation\n */\n const isTabNavigationActive = () => isTabNavigation;\n\n // Return the public API\n return {\n handleInitialFocus,\n handleMenuKeydown,\n setupKeyboardHandlers,\n isTabNavigationActive,\n getFocusableElements,\n resetTypeahead,\n };\n};\n\n/**\n * Adds keyboard navigation functionality to the menu component\n *\n * @param config - Menu configuration\n * @returns Component enhancer with keyboard navigation functionality\n */\nconst withKeyboard = () => (component) => {\n if (!component.element) {\n return component;\n }\n\n // Create keyboard navigation controller\n const keyboard = createKeyboardNavigation(component);\n\n // Return enhanced component\n return {\n ...component,\n keyboard,\n };\n};\n\nexport default withKeyboard;\n",
|
|
145
152
|
"// src/components/menu/features/submenu.ts\n\nimport { MenuConfig, MenuItem } from \"../types\";\n\n/**\n * Adds submenu functionality to the menu component\n * Manages creation, positioning, and interaction with nested submenus\n *\n * @param config - Menu configuration\n * @returns Component enhancer with submenu functionality\n */\nconst withSubmenu = (config: MenuConfig) => (component) => {\n if (!component.element) {\n console.warn(\"Cannot initialize menu submenu: missing element\");\n return component;\n }\n\n // Initialize submenu state\n const state = {\n activeSubmenu: null as HTMLElement,\n activeSubmenuItem: null as HTMLElement,\n submenuLevel: 0, // Track nesting level of submenus\n activeSubmenus: [] as Array<{\n element: HTMLElement;\n menuItem: HTMLElement;\n level: number;\n isOpening: boolean; // Track if submenu is in opening transition\n }>,\n submenuTimer: null,\n hoverIntent: {\n timer: null,\n activeItem: null,\n },\n component,\n };\n\n /**\n * Clean up hover intent timer\n */\n const clearHoverIntent = () => {\n if (state.hoverIntent.timer) {\n clearTimeout(state.hoverIntent.timer);\n state.hoverIntent.timer = null;\n state.hoverIntent.activeItem = null;\n }\n };\n\n /**\n * Clear submenu close timer\n */\n const clearSubmenuTimer = () => {\n if (state.submenuTimer) {\n clearTimeout(state.submenuTimer);\n state.submenuTimer = null;\n }\n };\n\n /**\n * Handles hover on a submenu item\n */\n const handleSubmenuHover = (\n item: MenuItem,\n index: number,\n itemElement: HTMLElement\n ): void => {\n if (!config.openSubmenuOnHover || !item.hasSubmenu) return;\n\n // Clear any existing timers\n clearHoverIntent();\n clearSubmenuTimer();\n\n // Set hover intent\n state.hoverIntent.activeItem = itemElement;\n state.hoverIntent.timer = setTimeout(() => {\n const isCurrentlyHovered = itemElement.matches(\":hover\");\n if (isCurrentlyHovered) {\n // Only close and reopen if this is a different submenu item\n if (state.activeSubmenuItem !== itemElement) {\n openSubmenu(item, index, itemElement);\n }\n }\n state.hoverIntent.timer = null;\n }, 100);\n };\n\n /**\n * Handles mouse leave from submenu\n */\n const handleSubmenuLeave = (): void => {\n // Clear hover intent\n clearHoverIntent();\n\n // Don't close immediately to allow moving to submenu\n clearSubmenuTimer();\n\n // Set a timer to close the submenu if not re-entered\n state.submenuTimer = setTimeout(() => {\n // Check if mouse is over the submenu or the parent menu item\n const submenuElement = state.activeSubmenu;\n const menuItemElement = state.activeSubmenuItem;\n\n if (submenuElement && menuItemElement) {\n const overSubmenu = submenuElement.matches(\":hover\");\n const overMenuItem = menuItemElement.matches(\":hover\");\n\n if (!overSubmenu && !overMenuItem) {\n closeSubmenu(state.submenuLevel);\n }\n }\n\n state.submenuTimer = null;\n }, 300);\n };\n\n /**\n * Handles click on a submenu item\n */\n const handleSubmenuClick = (\n item: MenuItem,\n index: number,\n itemElement: HTMLElement\n ): void => {\n if (!item.submenu || !item.hasSubmenu) return;\n\n // Check if the submenu is already open\n const isOpen = itemElement.getAttribute(\"aria-expanded\") === \"true\";\n\n // Find if any submenu is currently in opening transition\n const anySubmenuTransitioning = state.activeSubmenus.some(\n (s) => s.isOpening\n );\n\n // Completely ignore clicks during any submenu transition\n if (anySubmenuTransitioning) {\n return;\n }\n\n if (isOpen) {\n // Close submenu - only if fully open\n // Find the closest submenu level\n const currentLevel = parseInt(\n itemElement\n .closest(`.${component.getClass(\"menu--submenu\")}`)\n ?.getAttribute(\"data-level\") || \"0\",\n 10\n );\n\n // Close this level + 1 and deeper\n closeSubmenu(currentLevel + 1);\n\n // Reset expanded state\n itemElement.setAttribute(\"aria-expanded\", \"false\");\n } else {\n // Open new submenu\n openSubmenu(item, index, itemElement);\n }\n };\n\n /**\n * Handles keyboard-triggered nested submenu click\n */\n const handleNestedSubmenuClick = (\n item: MenuItem,\n index: number,\n itemElement: HTMLElement\n ): void => {\n if (!item.submenu || !item.hasSubmenu) return;\n\n // Check if the submenu is already open\n const isOpen = itemElement.getAttribute(\"aria-expanded\") === \"true\";\n\n // Find if any submenu is currently in opening transition\n const anySubmenuTransitioning = state.activeSubmenus.some(\n (s) => s.isOpening\n );\n\n // Completely ignore clicks during any submenu transition\n if (anySubmenuTransitioning) {\n return;\n }\n\n if (isOpen) {\n // Find the closest submenu level\n const currentLevel = parseInt(\n itemElement\n .closest(`.${component.getClass(\"menu--submenu\")}`)\n ?.getAttribute(\"data-level\") || \"1\",\n 10\n );\n\n // Close submenus at and deeper than the next level\n closeSubmenu(currentLevel + 1);\n } else {\n // Open the nested submenu\n openSubmenu(item, index, itemElement);\n }\n };\n\n /**\n * Opens a submenu with proper animation and positioning\n */\n const openSubmenu = (\n item: MenuItem,\n index: number,\n itemElement: HTMLElement\n ): void => {\n if (!item.submenu || !item.hasSubmenu) return;\n\n // Get current level of the submenu we're opening\n const currentLevel = itemElement.closest(\n `.${component.getClass(\"menu--submenu\")}`\n )\n ? parseInt(\n itemElement\n .closest(`.${component.getClass(\"menu--submenu\")}`)\n .getAttribute(\"data-level\") || \"0\",\n 10\n ) + 1\n : 1;\n\n // Close any deeper level submenus first, preserving the current level\n closeSubmenu(currentLevel);\n\n // Check if this submenu is already in opening state - if so, do nothing\n const existingSubmenuIndex = state.activeSubmenus.findIndex(\n (s) => s.menuItem === itemElement && s.isOpening\n );\n if (existingSubmenuIndex >= 0) {\n return; // Already opening this submenu, don't restart the process\n }\n\n // Set expanded state\n itemElement.setAttribute(\"aria-expanded\", \"true\");\n\n // Create submenu element with proper classes and attributes\n const submenuElement = document.createElement(\"div\");\n submenuElement.className = `${component.getClass(\n \"menu\"\n )} ${component.getClass(\"menu--submenu\")}`;\n submenuElement.setAttribute(\"role\", \"menu\");\n submenuElement.setAttribute(\"tabindex\", \"-1\");\n submenuElement.setAttribute(\"data-level\", currentLevel.toString());\n submenuElement.setAttribute(\"data-parent-item\", item.id);\n\n // Increase z-index for each level of submenu\n submenuElement.style.zIndex = `${1000 + currentLevel * 10}`;\n\n // Create submenu list\n const submenuList = document.createElement(\"ul\");\n submenuList.className = `${component.getClass(\"menu-list\")}`;\n\n // Create submenu items\n const submenuItems = [];\n\n // Use event to get menu items created properly\n component.emit(\"create-menu-items\", {\n items: item.submenu,\n container: submenuList,\n level: currentLevel,\n onItemCreated: (itemElement) => {\n if (\n !itemElement.classList.contains(\n `${component.getClass(\"menu-item--disabled\")}`\n )\n ) {\n submenuItems.push(itemElement);\n }\n },\n });\n\n submenuElement.appendChild(submenuList);\n\n // Add to DOM to enable measurement and transitions\n document.body.appendChild(submenuElement);\n\n // Position the submenu using position component\n if (component.position && component.position.positionSubmenu) {\n component.position.positionSubmenu(\n submenuElement,\n itemElement,\n currentLevel\n );\n }\n\n // Setup keyboard navigation if available\n if (component.keyboard && component.keyboard.setupKeyboardHandlers) {\n component.keyboard.setupKeyboardHandlers(\n submenuElement,\n { activeSubmenus: state.activeSubmenus },\n {\n closeSubmenu,\n handleNestedSubmenuClick,\n }\n );\n }\n\n // Add mouseenter event to prevent closing\n submenuElement.addEventListener(\"mouseenter\", () => {\n clearSubmenuTimer();\n });\n\n // Add mouseleave event to handle closing\n submenuElement.addEventListener(\"mouseleave\", () => {\n handleSubmenuLeave();\n });\n\n // Update state with active submenu\n state.activeSubmenu = submenuElement;\n state.activeSubmenuItem = itemElement;\n\n // Add to active submenus array to maintain hierarchy\n state.activeSubmenus.push({\n element: submenuElement,\n menuItem: itemElement,\n level: currentLevel,\n isOpening: true, // Mark as in opening transition\n });\n\n // Update submenu level\n state.submenuLevel = currentLevel;\n\n // Add document events for this submenu\n document.addEventListener(\"click\", handleDocumentClickForSubmenu);\n window.addEventListener(\"resize\", handleWindowResizeForSubmenu, {\n passive: true,\n });\n window.addEventListener(\"scroll\", handleWindowScrollForSubmenu, {\n passive: true,\n });\n\n // Make visible with animation\n requestAnimationFrame(() => {\n submenuElement.classList.add(`${component.getClass(\"menu--visible\")}`);\n\n // Wait for transition to complete before marking as fully opened\n setTimeout(() => {\n // Find this submenu in the active submenus array and update its state\n const index = state.activeSubmenus.findIndex(\n (s) => s.element === submenuElement\n );\n if (index !== -1) {\n state.activeSubmenus[index].isOpening = false;\n }\n\n // Focus the first item in the submenu if keyboard navigation is being used\n if (submenuItems.length > 0) {\n // If we're at level 2 or above, we should always focus the first item\n if (currentLevel >= 2 || document.activeElement === itemElement) {\n submenuItems[0].setAttribute(\"tabindex\", \"0\");\n submenuItems[0].focus();\n }\n }\n }, 300); // Adjust to match your transition duration\n });\n\n // Emit event for other features to react\n component.emit(\"submenu-opened\", {\n submenuElement,\n parentItem: itemElement,\n level: currentLevel,\n item,\n });\n };\n\n /**\n * Closes submenus at or deeper than the specified level\n * @param level - The level to start closing from\n */\n const closeSubmenu = (level: number): void => {\n // Clear any hover intent or submenu timers\n clearHoverIntent();\n clearSubmenuTimer();\n\n // Find submenus at or deeper than the specified level\n const submenuIndicesToRemove = [];\n\n // Identify which submenus to remove, working from deepest level first\n for (let i = state.activeSubmenus.length - 1; i >= 0; i--) {\n if (state.activeSubmenus[i].level >= level) {\n const submenuToClose = state.activeSubmenus[i];\n\n // Set aria-expanded attribute to false on the parent menu item\n if (submenuToClose.menuItem) {\n submenuToClose.menuItem.setAttribute(\"aria-expanded\", \"false\");\n }\n\n // Hide with animation\n submenuToClose.element.classList.remove(\n `${component.getClass(\"menu--visible\")}`\n );\n\n // Schedule for removal\n setTimeout(() => {\n if (submenuToClose.element.parentNode) {\n submenuToClose.element.parentNode.removeChild(\n submenuToClose.element\n );\n }\n }, 200);\n\n // Mark for removal from state\n submenuIndicesToRemove.push(i);\n }\n }\n\n // Remove the closed submenus from state\n submenuIndicesToRemove.forEach((index) => {\n state.activeSubmenus.splice(index, 1);\n });\n\n // Update active submenu references based on what's left\n if (state.activeSubmenus.length > 0) {\n const deepestRemaining =\n state.activeSubmenus[state.activeSubmenus.length - 1];\n state.activeSubmenu = deepestRemaining.element;\n state.activeSubmenuItem = deepestRemaining.menuItem;\n state.submenuLevel = deepestRemaining.level;\n\n // If the parent menu item still has focus, keep it focused\n if (deepestRemaining.menuItem) {\n deepestRemaining.menuItem.focus();\n }\n } else {\n state.activeSubmenu = null;\n state.activeSubmenuItem = null;\n state.submenuLevel = 0;\n }\n\n // Emit event for other features to react\n component.emit(\"submenu-closed\", { level });\n };\n\n /**\n * Closes all submenus\n */\n const closeAllSubmenus = (): void => {\n // Clear timers\n clearHoverIntent();\n clearSubmenuTimer();\n\n if (state.activeSubmenus.length === 0) return;\n\n // Close all active submenus\n [...state.activeSubmenus].forEach((submenu) => {\n // Remove expanded state from parent item\n if (submenu.menuItem) {\n submenu.menuItem.setAttribute(\"aria-expanded\", \"false\");\n }\n\n // Remove submenu element with animation\n submenu.element.classList.remove(\n `${component.getClass(\"menu--visible\")}`\n );\n\n // Remove after animation\n setTimeout(() => {\n if (submenu.element.parentNode) {\n submenu.element.parentNode.removeChild(submenu.element);\n }\n }, 200);\n });\n\n // Clear state\n state.activeSubmenu = null;\n state.activeSubmenuItem = null;\n state.activeSubmenus = [];\n state.submenuLevel = 0;\n\n // Remove document events\n document.removeEventListener(\"click\", handleDocumentClickForSubmenu);\n window.removeEventListener(\"resize\", handleWindowResizeForSubmenu);\n window.removeEventListener(\"scroll\", handleWindowScrollForSubmenu);\n\n // Emit event for other features to react\n component.emit(\"all-submenus-closed\", {});\n };\n\n /**\n * Handles document click for submenu\n */\n const handleDocumentClickForSubmenu = (e: MouseEvent): void => {\n if (!state.activeSubmenu) return;\n\n const submenuElement = state.activeSubmenu;\n const menuItemElement = state.activeSubmenuItem;\n\n // Check if click was inside submenu or parent menu item\n if (\n submenuElement.contains(e.target as Node) ||\n (menuItemElement && menuItemElement.contains(e.target as Node))\n ) {\n return;\n }\n\n // Close submenu if clicked outside\n closeAllSubmenus();\n };\n\n /**\n * Handles window resize for submenu\n */\n const handleWindowResizeForSubmenu = (): void => {\n // Reposition open submenu on resize\n if (state.activeSubmenu && state.activeSubmenuItem && component.position) {\n component.position.positionSubmenu(\n state.activeSubmenu,\n state.activeSubmenuItem,\n state.submenuLevel\n );\n }\n };\n\n /**\n * Handles window scroll for submenu\n */\n const handleWindowScrollForSubmenu = (): void => {\n // Use requestAnimationFrame to optimize scroll performance\n window.requestAnimationFrame(() => {\n // Only reposition if we have an active submenu\n if (\n state.activeSubmenu &&\n state.activeSubmenuItem &&\n component.position\n ) {\n component.position.positionSubmenu(\n state.activeSubmenu,\n state.activeSubmenuItem,\n state.submenuLevel\n );\n }\n });\n };\n\n /**\n * Checks if any submenu is currently open\n */\n const hasOpenSubmenu = (): boolean => {\n return state.activeSubmenus.length > 0;\n };\n\n /**\n * Gets current submenu nesting level\n */\n const getSubmenuLevel = (): number => {\n return state.submenuLevel;\n };\n\n /**\n * Gets currently active submenu elements\n */\n const getActiveSubmenus = (): Array<{\n element: HTMLElement;\n menuItem: HTMLElement;\n level: number;\n isOpening: boolean;\n }> => {\n return [...state.activeSubmenus];\n };\n\n // Register with lifecycle if available\n if (component.lifecycle) {\n const originalDestroy = component.lifecycle.destroy || (() => {});\n component.lifecycle.destroy = () => {\n // Clean up timers\n clearHoverIntent();\n clearSubmenuTimer();\n\n // Clean up submenu event listeners\n document.removeEventListener(\"click\", handleDocumentClickForSubmenu);\n window.removeEventListener(\"resize\", handleWindowResizeForSubmenu);\n window.removeEventListener(\"scroll\", handleWindowScrollForSubmenu);\n\n // Clean up submenu elements\n if (state.activeSubmenus.length > 0) {\n state.activeSubmenus.forEach((submenu) => {\n if (submenu.element.parentNode) {\n submenu.element.parentNode.removeChild(submenu.element);\n }\n });\n }\n\n originalDestroy();\n };\n }\n\n // Listen for menu close event to also close submenus\n component.on(\"menu-closing\", () => {\n closeAllSubmenus();\n });\n\n // Return enhanced component\n return {\n ...component,\n submenu: {\n openSubmenu,\n closeSubmenu,\n closeAllSubmenus,\n handleSubmenuClick,\n handleNestedSubmenuClick,\n handleSubmenuHover,\n handleSubmenuLeave,\n hasOpenSubmenu,\n getSubmenuLevel,\n getActiveSubmenus,\n },\n };\n};\n\nexport default withSubmenu;\n",
|
|
146
153
|
"// src/components/menu/api.ts\n\nimport { MenuComponent, MenuContent, MenuPosition, MenuEvents } from \"./types\";\n\n/**\n * API configuration options for menu component\n * @category Components\n * @internal\n */\ninterface ApiOptions {\n menu: {\n open: (event?: Event, interactionType?: \"mouse\" | \"keyboard\") => void;\n close: (\n event?: Event,\n restoreFocus?: boolean,\n skipAnimation?: boolean\n ) => void;\n toggle: (event?: Event, interactionType?: \"mouse\" | \"keyboard\") => void;\n isOpen: () => boolean;\n setItems: (items: MenuContent[]) => void;\n getItems: () => MenuContent[];\n setPosition: (position: MenuPosition) => void;\n getPosition: () => MenuPosition;\n setSelected: (itemId: string) => void;\n getSelected: () => string | null;\n };\n opener: {\n setOpener: (opener: HTMLElement | string) => void;\n getOpener: () => HTMLElement;\n };\n submenu?: {\n hasOpenSubmenu: () => boolean;\n closeAllSubmenus: () => void;\n };\n events?: {\n on: <T extends keyof MenuEvents>(event: T, handler: MenuEvents[T]) => void;\n off: <T extends keyof MenuEvents>(event: T, handler: MenuEvents[T]) => void;\n };\n lifecycle: {\n destroy: () => void;\n };\n}\n\n/**\n * Component with required elements and methods for API enhancement\n * @category Components\n * @internal\n */\ninterface ComponentWithElements {\n element: HTMLElement;\n on?: <T extends keyof MenuEvents>(event: T, handler: MenuEvents[T]) => void;\n off?: <T extends keyof MenuEvents>(event: T, handler: MenuEvents[T]) => void;\n emit?: (event: string, data: unknown) => void;\n}\n\n/**\n * Enhances a menu component with API methods.\n * This follows the higher-order function pattern to add public API methods\n * to the component, making them available to the end user.\n *\n * @param {ApiOptions} options - API configuration options\n * @returns {Function} Higher-order function that adds API methods to component\n * @category Components\n * @internal This is an internal utility for the Menu component\n */\nconst withAPI =\n ({ menu, opener, events, lifecycle }: ApiOptions) =>\n (component: ComponentWithElements): MenuComponent => {\n // Create the enhanced component\n const menuComponent: MenuComponent = {\n element: component.element,\n\n /**\n * Opens the menu\n * @param event - Optional event that triggered the open\n * @param interactionType - The type of interaction that triggered the open ('mouse' or 'keyboard')\n * @returns Menu component for chaining\n */\n open(event?: Event, interactionType: \"mouse\" | \"keyboard\" = \"mouse\") {\n // Determine interaction type from event if not explicitly provided\n if (event && !interactionType) {\n if (event instanceof KeyboardEvent) {\n interactionType = \"keyboard\";\n }\n }\n\n menu.open(event, interactionType);\n return this;\n },\n\n /**\n * Closes the menu\n * @param event - Optional event that triggered the close\n * @returns Menu component for chaining\n */\n close(\n event?: Event,\n restoreFocus: boolean = true,\n skipAnimation: boolean = false\n ) {\n menu.close(event, restoreFocus, skipAnimation);\n return this;\n },\n\n /**\n * Toggles the menu's open state\n * @param event - Optional event that triggered the toggle\n * @param interactionType - The type of interaction that triggered the toggle\n * @returns Menu component for chaining\n */\n toggle(event?: Event, interactionType?: \"mouse\" | \"keyboard\") {\n // Determine interaction type from event if not explicitly provided\n if (event && !interactionType) {\n if (event instanceof KeyboardEvent) {\n interactionType = \"keyboard\";\n } else if (event instanceof MouseEvent) {\n interactionType = \"mouse\";\n }\n }\n\n menu.toggle(event, interactionType);\n return this;\n },\n\n /**\n * Checks if the menu is currently open\n * @returns True if the menu is open\n */\n isOpen() {\n return menu.isOpen();\n },\n\n /**\n * Updates the menu items\n * @param items - New array of menu items and dividers\n * @returns Menu component for chaining\n */\n setItems(items: MenuContent[]) {\n menu.setItems(items);\n return this;\n },\n\n /**\n * Gets the current menu items\n * @returns Array of current menu items and dividers\n */\n getItems() {\n return menu.getItems();\n },\n\n /**\n * Updates the menu's opener element\n * @param openerElement - New opener element or selector\n * @returns Menu component for chaining\n */\n setOpener(openerElement: HTMLElement | string) {\n opener.setOpener(openerElement);\n return this;\n },\n\n /**\n * Gets the current opener element\n * @returns Current opener element\n */\n getOpener() {\n return opener.getOpener();\n },\n\n /**\n * Updates the menu's position\n * @param position - New position value\n * @returns Menu component for chaining\n */\n setPosition(position: MenuPosition) {\n menu.setPosition(position);\n return this;\n },\n\n /**\n * Gets the current menu position\n * @returns Current position\n */\n getPosition() {\n return menu.getPosition();\n },\n\n /**\n * Sets the selected menu item\n * @param itemId - ID of the menu item to mark as selected\n * @returns Menu component for chaining\n */\n setSelected(itemId: string) {\n menu.setSelected(itemId);\n return this;\n },\n\n /**\n * Gets the currently selected menu item's ID\n * @returns ID of the selected menu item or null if none is selected\n */\n getSelected() {\n return menu.getSelected();\n },\n\n /**\n * Adds an event listener to the menu\n * @param event - Event name ('open', 'close', 'select')\n * @param handler - Event handler function\n * @returns Menu component for chaining\n */\n on<T extends keyof MenuEvents>(event: T, handler: MenuEvents[T]) {\n if (events?.on) {\n events.on(event, handler);\n } else if (component.on) {\n component.on(event, handler);\n }\n return this;\n },\n\n /**\n * Removes an event listener from the menu\n * @param event - Event name\n * @param handler - Event handler function\n * @returns Menu component for chaining\n */\n off<T extends keyof MenuEvents>(event: T, handler: MenuEvents[T]) {\n if (events?.off) {\n events.off(event, handler);\n } else if (component.off) {\n component.off(event, handler);\n }\n return this;\n },\n\n /**\n * Destroys the menu component and cleans up resources\n */\n destroy() {\n lifecycle.destroy();\n },\n };\n\n return menuComponent;\n };\n\nexport { withAPI };\n",
|
|
147
|
-
"// src/components/menu/config.ts\n\nimport {\n createComponentConfig,\n createElementConfig,\n} from \"../../core/config/component\";\nimport { MenuConfig } from \"./types\";\nimport { MENU_DEFAULTS, MENU_CLASSES } from \"./constants\";\n\n/**\n * Default configuration for the Menu component\n * These values will be used when not explicitly specified by the user.\n *\n * @category Components\n */\n\nexport const defaultConfig: Partial<MenuConfig> = {\n items: [],\n position: MENU_DEFAULTS.POSITION,\n closeOnSelect: MENU_DEFAULTS.CLOSE_ON_SELECT,\n closeOnClickOutside: MENU_DEFAULTS.CLOSE_ON_CLICK_OUTSIDE,\n closeOnEscape: MENU_DEFAULTS.CLOSE_ON_ESCAPE,\n openSubmenuOnHover: MENU_DEFAULTS.OPEN_SUBMENU_ON_HOVER,\n offset: MENU_DEFAULTS.OFFSET,\n autoFlip: MENU_DEFAULTS.AUTO_FLIP,\n visible: false,\n};\n\n/**\n * Creates the base configuration for Menu component by merging user-provided\n * config with default values.\n *\n * @param {MenuConfig} config - User provided configuration\n * @returns {MenuConfig} Complete configuration with defaults applied\n * @category Components\n * @internal\n */\nexport const createBaseConfig = (config: MenuConfig): MenuConfig => {\n // First, ensure we have an opener element\n if (!config.opener) {\n throw new Error(\"Menu component requires an opener element or selector\");\n }\n\n // Apply default configuration\n return createComponentConfig(defaultConfig, config, \"menu\") as MenuConfig;\n};\n\n/**\n * Generates element configuration for the Menu component.\n * This function creates the necessary attributes and configuration\n * for the DOM element creation process.\n *\n * @param {MenuConfig} config - Menu configuration\n * @returns {Object} Element configuration object for withElement\n * @category Components\n * @internal\n */\nexport const getElementConfig = (config: MenuConfig) => {\n // Custom styles based on configuration\n const styles: Record<string, string> = {};\n\n if (config.width) {\n styles.width = config.width;\n }\n\n if (config.maxHeight) {\n styles.maxHeight = config.maxHeight;\n }\n\n // Element attributes\n const attributes: Record<string, any> = {\n role: \"menu\",\n tabindex: \"-1\",\n \"aria-hidden\": (!config.visible).toString(),\n style: Object.entries(styles)\n .map(([key, value]) => `${key}: ${value}`)\n .join(\";\"),\n };\n\n return createElementConfig(config, {\n tag: \"div\",\n attributes,\n className: [\n config.visible ? MENU_CLASSES.VISIBLE : null,\n config.class,\n ].filter(Boolean),\n forwardEvents: {\n keydown: true,\n },\n });\n};\n\n/**\n * Creates API configuration for the Menu component.\n * This connects the core component features to the public API.\n *\n * @param {Object} component - Component with menu features\n * @returns {Object} API configuration object\n * @category Components\n * @internal\n */\nexport const getApiConfig = (component) => ({\n menu: {\n open: (event, interactionType) =>\n component.menu?.open(event, interactionType),\n close: (event, restoreFocus, skipAnimation) =>\n component.menu?.close(event, restoreFocus, skipAnimation),\n toggle: (event, interactionType) =>\n component.menu?.toggle(event, interactionType),\n isOpen: () => component.menu?.isOpen() || false,\n setItems: (items) => component.menu?.setItems(items),\n getItems: () => component.menu?.getItems() || [],\n setPosition: (position) => component.menu?.setPosition(position),\n getPosition: () => component.menu?.getPosition(),\n setSelected: (itemId) => component.menu?.setSelected(itemId),\n getSelected: () => component.menu?.getSelected(),\n },\n opener: {\n setOpener: (opener) => component.opener?.setOpener(opener),\n getOpener: () => component.opener?.getOpener(),\n },\n submenu: {\n hasOpenSubmenu: () => component.submenu?.hasOpenSubmenu() || false,\n closeAllSubmenus: () => component.submenu?.closeAllSubmenus(),\n },\n events: {\n on: (event, handler) => component.on?.(event, handler),\n off: (event, handler) => component.off?.(event, handler),\n },\n lifecycle: {\n destroy: () => component.lifecycle?.destroy(),\n },\n});\n\nexport default defaultConfig;\n",
|
|
148
|
-
"// src/components/menu/constants.ts\n\n/**\n * Menu position options for alignment relative to opener element\n */\nexport const MENU_POSITION = {\n /** Places menu below the opener, aligned to left edge */\n BOTTOM_START:
|
|
149
|
-
"// src/components/navigation/navigation.ts\nimport { pipe } from \"../../core/compose\";\nimport { createBase, withElement } from \"../../core/compose/component\";\nimport {\n withEvents,\n withDisabled,\n withLifecycle,\n withVariant,\n withPosition,\n} from \"../../core/compose/features\";\nimport { withAPI } from \"./api\";\nimport { withNavItems } from \"./features/items\";\nimport { withController } from \"./features/controller\";\nimport { NavigationConfig, NavigationComponent } from \"./types\";\nimport { createBaseConfig, getElementConfig, getApiConfig } from \"./config\";\n\n/**\n * Sets up proper ARIA roles based on navigation variant\n * @param {NavigationComponent} nav - Navigation component\n * @param {NavigationConfig} config - Navigation configuration\n */\nconst setupAccessibility = (\n nav: NavigationComponent,\n config: NavigationConfig\n): void => {\n const { element } = nav;\n const variant = config.variant || \"rail\";\n const prefix = config.prefix || \"mtrl\";\n\n // Set appropriate aria-label\n element.setAttribute(\"aria-label\", config.ariaLabel || \"Main Navigation\");\n\n // For bar navigation (bottom or top nav)\n if (variant === \"bar\") {\n // If bar navigation is acting as tabs\n const hasNestedItems =\n config.items?.some((item) => item.items?.length) || false;\n\n if (!hasNestedItems) {\n element.setAttribute(\"role\", \"tablist\");\n element.setAttribute(\"aria-orientation\", \"horizontal\");\n } else {\n element.setAttribute(\"role\", \"menubar\");\n element.setAttribute(\"aria-orientation\", \"horizontal\");\n }\n }\n // For rail and drawer navigation\n else {\n // Use standard navigation landmark\n element.setAttribute(\"role\", \"navigation\");\n }\n\n // Set hidden state for modal drawers if needed\n if (\n (variant === \"modal\" ||\n (variant === \"drawer\" && config.behavior === \"dismissible\")) &&\n !config.expanded\n ) {\n element.classList.add(`${prefix}-nav--hidden`);\n }\n};\n\n/**\n * Creates a new Navigation component\n * @param {NavigationConfig} config - Navigation configuration\n * @returns {NavigationComponent} Navigation component instance\n */\nconst createNavigation = (\n config: NavigationConfig = {}\n): NavigationComponent => {\n const baseConfig = createBaseConfig(config);\n\n try {\n const navigation = pipe(\n createBase,\n // First add events system - MUST be before other features that use events\n withEvents(),\n // Then add the element and other features\n withElement(getElementConfig(baseConfig)),\n // Add core features\n withVariant(baseConfig),\n withPosition(baseConfig),\n // Add navigation-specific features\n withNavItems(baseConfig),\n // Add controller for event delegation AFTER items are set up\n withController(baseConfig),\n // Add standard component features\n withDisabled(baseConfig),\n withLifecycle(),\n // Finally add the API - this must be last to include all features\n (comp) => withAPI(getApiConfig(comp))(comp)\n )(baseConfig);\n\n const nav = navigation as NavigationComponent;\n\n // Set up proper ARIA roles and relationships\n setupAccessibility(nav, baseConfig);\n\n // Implement any initialization logic\n if (baseConfig.disabled) {\n nav.disable();\n }\n\n // Add explicit component identifier for debugging\n nav.element.dataset.componentType = \"navigation\";\n if (baseConfig.variant) {\n nav.element.dataset.variant = baseConfig.variant;\n }\n\n return nav;\n } catch (error) {\n throw new Error(\n `Failed to create navigation: ${\n error instanceof Error ? error.message : String(error)\n }`\n );\n }\n};\n\nexport default createNavigation;\n",
|
|
150
|
-
"// src/components/navigation/api.ts\nimport { NavigationComponent, NavItemConfig, NavItemData, BaseComponent, ApiOptions } from './types';\n\n/**\n * Enhances a component with navigation-specific API methods\n * @param {ApiOptions} options - API configuration options\n * @returns {Function} Higher-order function that adds API methods to component\n */\nexport const withAPI = (options: ApiOptions) => \n (component: BaseComponent): NavigationComponent => {\n \n const navComponent = {\n ...component,\n element: component.element,\n items: component.items || new Map(),\n \n // Basic item operations\n addItem(config: NavItemConfig): NavigationComponent {\n if (typeof component.addItem === 'function') {\n component.addItem(config);\n }\n return this;\n },\n \n removeItem(id: string): NavigationComponent {\n if (typeof component.removeItem === 'function') {\n component.removeItem(id);\n }\n return this;\n },\n \n getItem(id: string): NavItemData | undefined {\n if (typeof component.getItem === 'function') {\n return component.getItem(id);\n }\n return this.items.get(id);\n },\n \n getAllItems(): NavItemData[] {\n if (typeof component.getAllItems === 'function') {\n return component.getAllItems();\n }\n return Array.from(this.items.values());\n },\n \n // Path and active item management\n getActive(): NavItemData | null {\n if (typeof component.getActive === 'function') {\n return component.getActive();\n }\n return null;\n },\n \n getItemPath(id: string): string[] {\n if (typeof component.getItemPath === 'function') {\n return component.getItemPath(id);\n }\n return [];\n },\n \n setActive(id: string): NavigationComponent {\n // Use the controller if available for consistent handling\n if (typeof component.handleItemClick === 'function') {\n component.handleItemClick(id);\n } else if (typeof component.setActive === 'function') {\n component.setActive(id);\n } else {\n // Fallback if setActive is not available\n const item = this.items.get(id);\n if (item && item.element) {\n // Emit a change event to propagate the state change\n if (component.emit) {\n component.emit('change', {\n id,\n item,\n source: 'api'\n });\n }\n }\n }\n return this;\n },\n \n // Navigation state management\n enable(): NavigationComponent {\n if (options.disabled.enable) {\n options.disabled.enable();\n }\n return this;\n },\n \n disable(): NavigationComponent {\n if (options.disabled.disable) {\n options.disabled.disable();\n }\n return this;\n },\n \n expand(): NavigationComponent {\n this.element.classList.remove(`${this.element.className.split(' ')[0]}--hidden`);\n this.element.setAttribute('aria-hidden', 'false');\n \n if (component.emit) {\n component.emit('expanded', { source: 'api' });\n }\n return this;\n },\n \n collapse(): NavigationComponent {\n this.element.classList.add(`${this.element.className.split(' ')[0]}--hidden`);\n this.element.setAttribute('aria-hidden', 'true');\n \n if (component.emit) {\n component.emit('collapsed', { source: 'api' });\n }\n return this;\n },\n \n isExpanded(): boolean {\n return !this.element.classList.contains(`${this.element.className.split(' ')[0]}--hidden`);\n },\n \n toggle(): NavigationComponent {\n return this.isExpanded() ? this.collapse() : this.expand();\n },\n \n // Event handling\n on(event: string, handler: Function): NavigationComponent {\n if (component.on) {\n component.on(event, handler);\n }\n return this;\n },\n \n off(event: string, handler: Function): NavigationComponent {\n if (component.off) {\n component.off(event, handler);\n }\n return this;\n },\n \n // Destruction\n destroy(): void {\n if (options.lifecycle.destroy) {\n options.lifecycle.destroy();\n }\n }\n };\n \n // Return the enhanced component\n \n return navComponent;\n };\n\nexport default withAPI;",
|
|
151
|
-
"// src/components/navigation/constants.ts\n\n/**\n * Navigation variants following Material Design 3\n */\nexport const NAV_VARIANTS = {\n /** Navigation rail - thin vertical bar with icons and optional labels */\n RAIL: 'rail',\n /** Drawer navigation - wider drawer that can expand/collapse */\n DRAWER: 'drawer',\n /** Bar navigation - horizontal navigation bar */\n BAR: 'bar',\n /** Modal navigation - floating navigation that appears on demand */\n MODAL: 'modal',\n /** Standard navigation - basic navigation layout */\n STANDARD: 'standard'\n} as const;\n\n/**\n * Navigation positions\n */\nexport const NAV_POSITIONS = {\n /** Left side of the screen */\n LEFT: 'left',\n /** Right side of the screen */\n RIGHT: 'right',\n /** Top of the screen */\n TOP: 'top',\n /** Bottom of the screen */\n BOTTOM: 'bottom'\n} as const;\n\n/**\n * Navigation behaviors\n */\nexport const NAV_BEHAVIORS = {\n /** Fixed in place, always visible */\n FIXED: 'fixed',\n /** Can be dismissed/hidden */\n DISMISSIBLE: 'dismissible',\n /** Modal overlay that can be opened/closed */\n MODAL: 'modal'\n} as const;\n\n/**\n * Navigation item states\n */\nexport const NAV_ITEM_STATES = {\n /** Currently selected item */\n ACTIVE: 'active',\n /** Item cannot be interacted with */\n DISABLED: 'disabled',\n /** Item with children is expanded */\n EXPANDED: 'expanded',\n /** Item with children is collapsed */\n COLLAPSED: 'collapsed',\n /** Mouse is hovering over the item */\n HOVERED: 'hovered',\n /** Item has keyboard focus */\n FOCUSED: 'focused',\n /** Item is being pressed */\n PRESSED: 'pressed'\n} as const;\n\n/**\n * Navigation event names\n */\nexport const NAV_EVENTS = {\n /** Fired when an item is selected */\n CHANGE: 'change',\n /** Fired when navigation is expanded */\n EXPAND: 'expand',\n /** Fired when navigation is collapsed */\n COLLAPSE: 'collapse',\n /** Fired when a nested item group is expanded */\n GROUP_EXPAND: 'group:expand',\n /** Fired when a nested item group is collapsed */\n GROUP_COLLAPSE: 'group:collapse'\n} as const;\n\n/**\n * Default configuration values\n */\nexport const NAV_DEFAULTS = {\n /** Default navigation variant */\n VARIANT: NAV_VARIANTS.STANDARD,\n /** Default navigation position */\n POSITION: NAV_POSITIONS.LEFT,\n /** Default navigation behavior */\n BEHAVIOR: NAV_BEHAVIORS.FIXED,\n /** Whether navigation is expanded by default */\n EXPANDED: false,\n /** Whether to show item labels by default */\n SHOW_LABELS: true,\n /** Whether scrim is enabled for modal navigation */\n SCRIM_ENABLED: true\n} as const;\n\n/**\n * CSS classes for navigation elements\n */\nexport const NAV_CLASSES = {\n /** Container element */\n CONTAINER: 'nav',\n /** Navigation variant class prefix */\n VARIANT_PREFIX: 'nav--',\n /** Navigation position class prefix */\n POSITION_PREFIX: 'nav--pos-',\n /** Navigation behavior class prefix */\n BEHAVIOR_PREFIX: 'nav--',\n /** Expanded state class */\n EXPANDED: 'nav--expanded',\n /** Disabled state class */\n DISABLED: 'nav--disabled',\n /** Navigation item */\n ITEM: 'nav-item',\n /** Item container (wrapper) */\n ITEM_CONTAINER: 'nav-item-container',\n /** Navigation item icon */\n ICON: 'nav-item-icon',\n /** Navigation item text label */\n LABEL: 'nav-item-label',\n /** Navigation item badge */\n BADGE: 'nav-item-badge',\n /** Navigation divider */\n DIVIDER: 'nav-divider',\n /** Modal background scrim */\n SCRIM: 'nav-scrim',\n /** Navigation item group */\n GROUP: 'nav-group',\n /** Group title */\n GROUP_TITLE: 'nav-group-title',\n /** Item subtitle */\n SUBTITLE: 'nav-subtitle',\n /** Container for nested items */\n NESTED_CONTAINER: 'nav-nested-container',\n /** Nested navigation item */\n NESTED_ITEM: 'nav-nested-item',\n /** Icon for expanding/collapsing nested items */\n EXPAND_ICON: 'nav-expand-icon',\n /** Active state class */\n ACTIVE: 'nav-item--active',\n /** Disabled state class */\n ITEM_DISABLED: 'nav-item--disabled'\n} as const;",
|
|
152
|
-
"// src/components/navigation/nav-item.ts\nimport { NavItemConfig } from './types';\nimport { NAV_CLASSES } from './constants';\n\n/**\n * Creates an expand/collapse icon element\n * @param {string} prefix - CSS class prefix\n * @returns {HTMLElement} Expand icon element\n */\nexport const createExpandIcon = (prefix: string): HTMLElement => {\n const icon = document.createElement('span');\n icon.className = `${prefix}-${NAV_CLASSES.EXPAND_ICON}`;\n icon.innerHTML = `\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\">\n <polyline points=\"9 18 15 12 9 6\"></polyline>\n </svg>\n `;\n return icon;\n};\n\n/**\n * Creates a nested items container\n * @param {NavItemConfig[]} items - Nested items configuration\n * @param {string} prefix - CSS class prefix\n * @param {Function} createItem - Item creation function\n * @returns {HTMLElement} Nested items container\n */\nexport const createNestedContainer = (\n items: NavItemConfig[], \n prefix: string, \n createItem: (config: NavItemConfig, container: HTMLElement, prefix: string) => HTMLElement\n): HTMLElement => {\n const container = document.createElement('div');\n container.className = `${prefix}-${NAV_CLASSES.NESTED_CONTAINER}`;\n \n // Use appropriate role for nested menu\n container.setAttribute('role', 'menu');\n container.hidden = true;\n\n items.forEach(itemConfig => {\n createItem(itemConfig, container, prefix);\n });\n\n return container;\n};\n\n/**\n * Creates a navigation item element\n * @param {NavItemConfig} config - Item configuration\n * @param {HTMLElement} container - Container element\n * @param {string} prefix - CSS class prefix\n * @returns {HTMLElement} Created navigation item\n */\nexport const createNavItem = (\n config: NavItemConfig, \n container: HTMLElement, \n prefix: string\n): HTMLElement => {\n const itemContainer = document.createElement('div');\n itemContainer.className = `${prefix}-${NAV_CLASSES.ITEM_CONTAINER}`;\n\n // Determine if parent container uses tabs or menu role pattern\n const isMenuContext = container.getAttribute('role') === 'menu';\n const isTabContext = container.getAttribute('role') === 'tablist';\n const isDrawerVariant = container.closest(`.${prefix}-nav--drawer, .${prefix}-nav--drawer-modal, .${prefix}-nav--drawer-standard`) !== null;\n \n // Create the item element\n const itemElement = document.createElement('button');\n itemElement.className = `${prefix}-${NAV_CLASSES.ITEM}`;\n itemElement.type = 'button'; // Ensure it's a button type for proper behavior\n \n // Set appropriate role based on context and items\n if (config.items?.length) {\n if (isDrawerVariant) {\n // For expandable drawer items with nested items\n itemElement.setAttribute('role', 'button');\n itemElement.setAttribute('aria-expanded', config.expanded ? 'true' : 'false');\n itemElement.setAttribute('aria-haspopup', 'menu');\n } else {\n // For non-drawer variants with nested items\n itemElement.setAttribute('role', 'button');\n }\n } else if (isMenuContext) {\n // For menu items\n itemElement.setAttribute('role', 'menuitem');\n } else if (isTabContext) {\n // For tab items\n itemElement.setAttribute('role', 'tab');\n itemElement.setAttribute('aria-selected', config.active ? 'true' : 'false');\n itemElement.setAttribute('tabindex', config.active ? '0' : '-1');\n } \n // For plain navigation buttons, we don't need to set the role since buttons have inherent semantics\n\n if (config.id) {\n itemElement.dataset.id = config.id;\n }\n\n if (config.disabled) {\n itemElement.disabled = true;\n itemElement.setAttribute('aria-disabled', 'true');\n }\n\n // Add icon if provided\n if (config.icon) {\n const icon = document.createElement('span');\n icon.className = `${prefix}-${NAV_CLASSES.ICON}`;\n icon.innerHTML = config.icon;\n itemElement.appendChild(icon);\n }\n\n // Add label if provided - CONVERTED TO ANCHOR FOR SEO\n if (config.label) {\n // Create anchor instead of span for the label\n const label = document.createElement('a');\n label.className = `${prefix}-${NAV_CLASSES.LABEL}`;\n label.textContent = config.label;\n label.href = `/${config.id}`; // Create path based on ID\n \n // Ensure the anchor looks the same as a span would\n label.style.textDecoration = 'none';\n label.style.color = 'inherit';\n label.style.pointerEvents = 'none'; // Let the button handle click events\n \n // Add SEO attributes\n label.setAttribute('title', config.label);\n \n itemElement.appendChild(label);\n itemElement.setAttribute('aria-label', config.label);\n }\n\n // Add badge if provided\n if (config.badge) {\n const badge = document.createElement('span');\n badge.className = `${prefix}-${NAV_CLASSES.BADGE}`;\n badge.textContent = config.badge;\n // Use appropriate aria labeling\n badge.setAttribute('aria-label', `${config.badge} notifications`);\n itemElement.appendChild(badge);\n }\n\n // Mark active state with appropriate semantics\n if (config.active && !config.items?.length) {\n itemElement.classList.add(`${prefix}-${NAV_CLASSES.ACTIVE}`);\n \n // Use aria-current for standard navigation\n if (!isTabContext) {\n itemElement.setAttribute('aria-current', 'page');\n }\n }\n\n itemContainer.appendChild(itemElement);\n\n // Handle nested items - only for drawer variant\n if (config.items?.length && isDrawerVariant) {\n const expandIcon = createExpandIcon(prefix);\n itemElement.appendChild(expandIcon);\n\n const nestedContainer = createNestedContainer(config.items, prefix, createNavItem);\n nestedContainer.hidden = !config.expanded;\n itemContainer.appendChild(nestedContainer);\n\n // Handle expand/collapse\n itemElement.addEventListener('click', (event) => {\n event.stopPropagation();\n const isExpanded = itemElement.getAttribute('aria-expanded') === 'true';\n itemElement.setAttribute('aria-expanded', (!isExpanded).toString());\n nestedContainer.hidden = isExpanded;\n\n // Toggle expand icon rotation\n if (expandIcon.style) {\n expandIcon.style.transform = isExpanded ? '' : 'rotate(90deg)';\n }\n });\n }\n\n container.appendChild(itemContainer);\n return itemElement;\n};\n\n/**\n * Recursively gets all nested items from a navigation item\n * @param {HTMLElement} item - Navigation item element\n * @param {string} prefix - CSS class prefix\n * @returns {Array<HTMLElement>} Array of all nested items\n */\nexport const getAllNestedItems = (item: HTMLElement, prefix: string): HTMLElement[] => {\n const container = item.closest(`.${prefix}-${NAV_CLASSES.ITEM_CONTAINER}`);\n if (!container) return [];\n\n const nestedContainer = container.querySelector(`.${prefix}-${NAV_CLASSES.NESTED_CONTAINER}`);\n if (!nestedContainer) return [];\n\n const items = Array.from(nestedContainer.querySelectorAll(`.${prefix}-${NAV_CLASSES.ITEM}`)) as HTMLElement[];\n return items.reduce((acc: HTMLElement[], nestedItem: HTMLElement) => {\n return [...acc, nestedItem, ...getAllNestedItems(nestedItem, prefix)];\n }, []);\n};",
|
|
153
|
-
"// src/components/navigation/features/items.ts\nimport { createNavItem, getAllNestedItems } from \"../nav-item\";\nimport { NavItemConfig, BaseComponent } from \"../types\";\nimport type { NavItemData } from \"../types\";\nimport { NAV_CLASSES, NAV_EVENTS } from \"../constants\";\n\n/**\n * Interface for a component with items management capabilities\n * @internal\n */\ninterface ItemsComponent extends BaseComponent {\n items: Map<string, NavItemData>;\n addItem: (config: NavItemConfig) => ItemsComponent;\n removeItem: (id: string) => ItemsComponent;\n getItem: (id: string) => NavItemData | undefined;\n getAllItems: () => NavItemData[];\n getActive: () => NavItemData | null;\n getItemPath: (id: string) => string[];\n setActive: (id: string) => ItemsComponent;\n}\n\n/**\n * Interface for navigation configuration\n * @internal\n */\ninterface NavigationConfig {\n prefix?: string;\n items?: NavItemConfig[];\n debug?: boolean;\n [key: string]: any;\n}\n\n/**\n * Helper to get element ID or component type\n * @internal\n */\nfunction getElementId(\n element: HTMLElement | null,\n prefix: string\n): string | null {\n if (!element) return null;\n\n // Try to get data-id\n const id = element.getAttribute(\"data-id\");\n if (id) return id;\n\n // Try to identify by component class\n if (element.classList.contains(`${prefix}-nav--rail`)) return \"rail\";\n if (element.classList.contains(`${prefix}-nav--drawer`)) return \"drawer\";\n\n return null;\n}\n\n/**\n * Adds navigation items management to a component\n * @param {NavigationConfig} config - Navigation configuration\n * @returns {Function} Component enhancer function\n */\nexport const withNavItems =\n (config: NavigationConfig) =>\n (component: BaseComponent): ItemsComponent => {\n const items = new Map<string, NavItemData>();\n let activeItem: NavItemData | null = null;\n const prefix = config.prefix || \"mtrl\";\n\n /**\n * Recursively stores items in the items Map\n * @param {NavItemConfig} itemConfig - Item configuration\n * @param {HTMLElement} item - Created item element\n */\n const storeItem = (itemConfig: NavItemConfig, item: HTMLElement): void => {\n items.set(itemConfig.id, { element: item, config: itemConfig });\n\n if (itemConfig.items?.length) {\n itemConfig.items.forEach((nestedConfig) => {\n const container = item.closest(\n `.${prefix}-${NAV_CLASSES.ITEM_CONTAINER}`\n );\n if (container) {\n const nestedContainer = container.querySelector(\n `.${prefix}-${NAV_CLASSES.NESTED_CONTAINER}`\n );\n if (nestedContainer) {\n const nestedItem = nestedContainer.querySelector(\n `[data-id=\"${nestedConfig.id}\"]`\n ) as HTMLElement;\n if (nestedItem) {\n storeItem(nestedConfig, nestedItem);\n }\n }\n }\n });\n }\n };\n\n /**\n * Updates the active state for an item\n * @param {HTMLElement} item - Item element to activate\n * @param {NavItemData} itemData - Item data\n * @param {boolean} active - Whether to make active or inactive\n */\n const updateActiveState = (\n item: HTMLElement,\n itemData: NavItemData,\n active: boolean\n ): void => {\n // Determine the correct active attribute based on role\n const role = item.getAttribute(\"role\");\n\n if (active) {\n item.classList.add(`${prefix}-${NAV_CLASSES.ACTIVE}`);\n\n // Set appropriate attribute based on role\n if (role === \"tab\") {\n item.setAttribute(\"aria-selected\", \"true\");\n item.setAttribute(\"tabindex\", \"0\");\n } else if (!item.getAttribute(\"aria-haspopup\")) {\n // Use aria-current for navigation items that aren't expandable\n item.setAttribute(\"aria-current\", \"page\");\n }\n } else {\n item.classList.remove(`${prefix}-${NAV_CLASSES.ACTIVE}`);\n\n // Remove appropriate attribute based on role\n if (role === \"tab\") {\n item.setAttribute(\"aria-selected\", \"false\");\n item.setAttribute(\"tabindex\", \"-1\");\n } else if (item.hasAttribute(\"aria-current\")) {\n item.removeAttribute(\"aria-current\");\n }\n }\n };\n\n // Create initial items\n if (config.items) {\n config.items.forEach((itemConfig) => {\n const item = createNavItem(itemConfig, component.element, prefix);\n storeItem(itemConfig, item);\n\n if (itemConfig.active) {\n activeItem = { element: item, config: itemConfig };\n updateActiveState(item, activeItem, true);\n }\n });\n }\n\n // Set up enhanced event handling for mouse events\n if (component.emit) {\n // Mouse over event handler\n component.element.addEventListener(\n \"mouseover\",\n (event: MouseEvent) => {\n // Find the closest item with data-id\n const target = event.target as HTMLElement;\n const item = target.closest(`[data-id]`) as HTMLElement;\n if (item) {\n const id = item.dataset.id;\n if (id) {\n component.emit(\"mouseover\", {\n id,\n clientX: event.clientX,\n clientY: event.clientY,\n target: item,\n item: items.get(id),\n });\n }\n }\n },\n { passive: true }\n );\n\n // Mouse enter event\n component.element.addEventListener(\n \"mouseenter\",\n (event: MouseEvent) => {\n const componentId =\n component.element.dataset.id || component.componentName || \"nav\";\n\n component.emit(\"mouseenter\", {\n clientX: event.clientX,\n clientY: event.clientY,\n id: componentId,\n });\n },\n { passive: true }\n );\n\n // Mouse leave event\n component.element.addEventListener(\"mouseleave\", (event: MouseEvent) => {\n const relatedTarget = event.relatedTarget as HTMLElement;\n const relatedTargetId = getElementId(relatedTarget, prefix);\n const componentId =\n component.element.dataset.id || component.componentName || \"nav\";\n\n component.emit(\"mouseleave\", {\n clientX: event.clientX,\n clientY: event.clientY,\n relatedTargetId,\n id: componentId,\n });\n });\n }\n\n // Clean up when component is destroyed\n if (component.lifecycle) {\n const originalDestroy = component.lifecycle.destroy;\n component.lifecycle.destroy = () => {\n items.clear();\n if (originalDestroy) {\n originalDestroy();\n }\n };\n }\n\n /**\n * Gets the path to an item (parent IDs and the item's own ID)\n * @param {string} id - Item ID to get path for\n * @returns {Array<string>} Array of parent item IDs including the item's own ID\n */\n const getItemPath = (id: string): string[] => {\n // Always include the item's own ID in the path\n const path: string[] = [id];\n const currentItem = items.get(id);\n\n if (!currentItem) {\n return path; // Still return [id] even if item not found in map\n }\n\n // First, find the item container that contains this element\n const itemContainer = currentItem.element.closest(\n `.${prefix}-${NAV_CLASSES.ITEM_CONTAINER}`\n );\n if (!itemContainer) {\n return path;\n }\n\n // Then find the parent element of the item container\n const parentElement = itemContainer.parentElement;\n\n // If parent element is not a nested container, this is a root-level item\n // Just return the item's own ID\n if (\n !parentElement ||\n !parentElement.classList.contains(\n `${prefix}-${NAV_CLASSES.NESTED_CONTAINER}`\n )\n ) {\n return path;\n }\n\n // We're dealing with a nested item - find its ancestors\n let currentNestedContainer = parentElement;\n\n while (currentNestedContainer) {\n // Find the parent item container\n const parentItemContainer = currentNestedContainer.parentElement;\n\n if (\n !parentItemContainer ||\n !parentItemContainer.classList.contains(\n `${prefix}-${NAV_CLASSES.ITEM_CONTAINER}`\n )\n ) {\n break;\n }\n\n // Find the parent item button/element\n const parentItem = parentItemContainer.querySelector(\n `.${prefix}-${NAV_CLASSES.ITEM}[data-id]`\n );\n\n if (!parentItem) {\n break;\n }\n\n const parentId = parentItem.getAttribute(\"data-id\");\n\n if (!parentId) {\n break;\n }\n\n // Add to the beginning of path (since we're going up the tree)\n // This puts ancestors before the item's own ID\n path.unshift(parentId);\n\n // Move up to the next level - find the container of this parent's container\n const grandparentElement = parentItemContainer.parentElement;\n\n if (\n !grandparentElement ||\n !grandparentElement.classList.contains(\n `${prefix}-${NAV_CLASSES.NESTED_CONTAINER}`\n )\n ) {\n break;\n }\n\n currentNestedContainer = grandparentElement;\n }\n\n return path;\n };\n\n return {\n ...component,\n items,\n\n addItem(itemConfig: NavItemConfig) {\n if (items.has(itemConfig.id)) return this;\n\n const item = createNavItem(itemConfig, component.element, prefix);\n storeItem(itemConfig, item);\n\n if (itemConfig.active) {\n this.setActive(itemConfig.id);\n }\n\n if (component.emit) {\n component.emit(\"itemAdded\", {\n id: itemConfig.id,\n item: { element: item, config: itemConfig },\n });\n }\n return this;\n },\n\n removeItem(id: string) {\n const item = items.get(id);\n if (!item) return this;\n\n // Remove all nested items first\n const nestedItems = getAllNestedItems(item.element, prefix);\n nestedItems.forEach((nestedItem) => {\n const nestedId = nestedItem.dataset.id;\n if (nestedId) items.delete(nestedId);\n });\n\n if (activeItem?.config.id === id) {\n activeItem = null;\n }\n\n // Remove the entire item container\n const container = item.element.closest(\n `.${prefix}-${NAV_CLASSES.ITEM_CONTAINER}`\n );\n if (container) {\n container.remove();\n }\n items.delete(id);\n\n if (component.emit) {\n component.emit(\"itemRemoved\", { id, item });\n }\n return this;\n },\n\n getItem: (id: string) => items.get(id),\n getAllItems: () => Array.from(items.values()),\n getActive: () => activeItem,\n getItemPath: (id: string) => getItemPath(id),\n\n setActive(id: string) {\n const item = items.get(id);\n if (!item || item.config.disabled) return this;\n\n if (activeItem) {\n updateActiveState(activeItem.element, activeItem, false);\n }\n\n updateActiveState(item.element, item, true);\n activeItem = item;\n\n // Ensure all parent items are expanded\n const path = getItemPath(id);\n path.forEach((parentId) => {\n const parentItem = items.get(parentId);\n if (parentItem) {\n const parentButton = parentItem.element;\n const container = parentButton.closest(\n `.${prefix}-${NAV_CLASSES.ITEM_CONTAINER}`\n );\n if (container) {\n const nestedContainer = container.querySelector(\n `.${prefix}-${NAV_CLASSES.NESTED_CONTAINER}`\n ) as HTMLElement;\n if (nestedContainer) {\n parentButton.setAttribute(\"aria-expanded\", \"true\");\n nestedContainer.hidden = false;\n }\n }\n }\n });\n\n if (component.emit) {\n component.emit(NAV_EVENTS.CHANGE, {\n id,\n item,\n previousItem: activeItem,\n path: getItemPath(id),\n });\n }\n return this;\n },\n };\n };\n",
|
|
154
|
-
"// src/components/navigation/types.ts\n\n/**\n * Navigation variants following Material Design 3\n * @category Components\n */\nexport type NavVariant = 'rail' | 'drawer' | 'bar' | 'modal' | 'standard';\n\n/**\n * Navigation variants enum\n * @category Components\n */\nexport const NAV_VARIANTS: Record<string, NavVariant> = {\n RAIL: 'rail',\n DRAWER: 'drawer',\n BAR: 'bar',\n MODAL: 'modal',\n STANDARD: 'standard'\n} as const;\n\n/**\n * Navigation positions\n * @category Components\n */\nexport type NavPosition = 'left' | 'right' | 'top' | 'bottom';\n\n/**\n * Navigation positions enum\n * @category Components\n */\nexport const NAV_POSITIONS: Record<string, NavPosition> = {\n LEFT: 'left',\n RIGHT: 'right',\n TOP: 'top',\n BOTTOM: 'bottom'\n} as const;\n\n/**\n * Navigation behaviors\n * @category Components\n */\nexport type NavBehavior = 'fixed' | 'dismissible' | 'modal';\n\n/**\n * Navigation behaviors enum\n * @category Components\n */\nexport const NAV_BEHAVIORS: Record<string, NavBehavior> = {\n FIXED: 'fixed',\n DISMISSIBLE: 'dismissible',\n MODAL: 'modal'\n} as const;\n\n/**\n * Navigation item state\n * @category Components\n */\nexport type NavItemState = 'active' | 'disabled' | 'expanded' | 'collapsed' | 'hovered' | 'focused' | 'pressed';\n\n/**\n * Navigation element class names\n * Used internally to maintain consistent class names\n * @internal\n */\nexport const NavClass = {\n ITEM: 'nav-item',\n ITEM_CONTAINER: 'nav-item-container',\n ICON: 'nav-item-icon',\n LABEL: 'nav-item-label',\n BADGE: 'nav-item-badge',\n DIVIDER: 'nav-divider',\n SCRIM: 'nav-scrim',\n GROUP: 'nav-group',\n GROUP_TITLE: 'nav-group-title',\n SUBTITLE: 'nav-subtitle',\n NESTED_CONTAINER: 'nav-nested-container',\n NESTED_ITEM: 'nav-nested-item',\n EXPAND_ICON: 'nav-expand-icon'\n} as const;\n\n/**\n * Navigation item configuration\n */\nexport interface NavItemConfig {\n /** Unique identifier for the item */\n id: string;\n \n /** Icon HTML content */\n icon?: string;\n \n /** Text label */\n label?: string;\n \n /** Badge text */\n badge?: string;\n \n /** Whether the item is disabled */\n disabled?: boolean;\n \n /** Whether the item is active */\n active?: boolean;\n \n /** Whether nested items are expanded */\n expanded?: boolean;\n \n /** Subtitle text (for drawer items) */\n subtitle?: string;\n \n /** Group ID this item belongs to */\n groupId?: string;\n \n /** Nested navigation items */\n items?: NavItemConfig[];\n}\n\n/**\n * Navigation group configuration\n */\nexport interface NavGroupConfig {\n /** Unique identifier for the group */\n id: string;\n \n /** Group title text */\n title: string;\n \n /** Whether the group is expanded */\n expanded?: boolean;\n}\n\n/**\n * Navigation item data\n */\nexport interface NavItemData {\n /** The item's DOM element */\n element: HTMLElement;\n \n /** Item configuration */\n config: NavItemConfig;\n}\n\n/**\n * Navigation change event data\n */\nexport interface NavChangeEvent {\n /** ID of the selected item */\n id: string;\n \n /** Selected item data */\n item: NavItemData;\n \n /** Previously selected item data */\n previousItem?: NavItemData | null;\n \n /** Path of parent item IDs */\n path: string[];\n}\n\n/**\n * Configuration interface for the Navigation component\n */\nexport interface NavigationConfig {\n /** Navigation variant */\n variant?: NavVariant | string;\n \n /** Navigation position */\n position?: NavPosition | string;\n \n /** Navigation behavior */\n behavior?: NavBehavior | string;\n \n /** Navigation items */\n items?: NavItemConfig[];\n \n /** Navigation groups */\n groups?: NavGroupConfig[];\n \n /** Whether the navigation is disabled */\n disabled?: boolean;\n \n /** Whether the navigation is expanded (for drawer) */\n expanded?: boolean;\n \n /** Whether to show item labels */\n showLabels?: boolean;\n \n /** Whether to enable background scrim (for modal drawer) */\n scrimEnabled?: boolean;\n \n /** Additional CSS classes */\n class?: string;\n \n /** Accessibility label */\n ariaLabel?: string;\n \n /** Component prefix for class names */\n prefix?: string;\n \n /** Component name */\n componentName?: string;\n}\n\n/**\n * Navigation component interface\n */\nexport interface NavigationComponent {\n /** The navigation's DOM element */\n element: HTMLElement;\n \n /** Map of navigation items */\n items: Map<string, NavItemData>;\n \n /** Adds a navigation item */\n addItem: (config: NavItemConfig) => NavigationComponent;\n \n /** Removes a navigation item */\n removeItem: (id: string) => NavigationComponent;\n \n /** Gets a navigation item by ID */\n getItem: (id: string) => NavItemData | undefined;\n \n /** Gets all navigation items */\n getAllItems: () => NavItemData[];\n \n /** Gets the active navigation item */\n getActive: () => NavItemData | null;\n \n /** Gets the path to an item (parent IDs) */\n getItemPath: (id: string) => string[];\n \n /** Sets the active navigation item */\n setActive: (id: string) => NavigationComponent;\n \n /** Enables the navigation */\n enable: () => NavigationComponent;\n \n /** Disables the navigation */\n disable: () => NavigationComponent;\n \n /** Expands the navigation (for drawer) */\n expand: () => NavigationComponent;\n \n /** Collapses the navigation (for drawer) */\n collapse: () => NavigationComponent;\n \n /** Checks if the navigation is expanded */\n isExpanded: () => boolean;\n \n /** Toggles the navigation expansion state */\n toggle: () => NavigationComponent;\n \n /** Adds an event listener */\n on: (event: string, handler: Function) => NavigationComponent;\n \n /** Removes an event listener */\n off: (event: string, handler: Function) => NavigationComponent;\n \n /** Destroys the navigation component */\n destroy: () => void;\n}\n\n/**\n * Base component interface\n */\nexport interface BaseComponent {\n element: HTMLElement;\n prefix?: string;\n items?: Map<string, NavItemData>;\n emit?: (event: string, data: any) => void;\n on?: (event: string, handler: Function) => any;\n off?: (event: string, handler: Function) => any;\n lifecycle?: {\n destroy: () => void;\n };\n disabled?: {\n enable: () => any;\n disable: () => any;\n };\n [key: string]: any;\n}\n\n/**\n * API options interface\n */\nexport interface ApiOptions {\n disabled: {\n enable: () => void;\n disable: () => void;\n };\n lifecycle: {\n destroy: () => void;\n };\n}",
|
|
155
|
-
"// src/components/navigation/features/controller.ts\nimport { BaseComponent, NavClass } from \"../types\";\n\n/**\n * Configuration interface for controller feature\n */\ninterface ControllerConfig {\n /** Component prefix for class names */\n prefix?: string;\n\n /** Debug mode flag */\n debug?: boolean;\n\n /** Component name */\n componentName?: string;\n\n /** Additional configuration options */\n [key: string]: any;\n}\n\n/**\n * Enhanced component with controller capabilities\n */\ninterface ControllerComponent extends BaseComponent {\n /** Handler method for item click events */\n handleItemClick: (id: string) => void;\n}\n\n/**\n * Adds event delegation controller to a navigation component\n * This centralizes event handling for all navigation items\n *\n * @param {ControllerConfig} config - Controller configuration\n * @returns {Function} Component enhancer function\n */\nexport const withController =\n (config: ControllerConfig) =>\n (component: BaseComponent): ControllerComponent => {\n const prefix = config.prefix || \"mtrl\";\n\n /**\n * Updates the active state for an item\n * @param {HTMLElement} item - Item element to activate\n * @param {boolean} active - Whether to make active or inactive\n */\n const updateItemState = (item: HTMLElement, active: boolean): void => {\n // Safety check - ensure item exists\n if (!item) return;\n\n // Determine the correct active attribute based on role\n const role = item.getAttribute(\"role\");\n\n if (active) {\n item.classList.add(`${prefix}-${NavClass.ITEM}--active`);\n\n // Set appropriate attribute based on role\n if (role === \"tab\") {\n item.setAttribute(\"aria-selected\", \"true\");\n item.setAttribute(\"tabindex\", \"0\");\n } else if (!item.getAttribute(\"aria-haspopup\")) {\n // Use aria-current for navigation items that aren't expandable\n item.setAttribute(\"aria-current\", \"page\");\n }\n } else {\n item.classList.remove(`${prefix}-${NavClass.ITEM}--active`);\n\n // Remove appropriate attribute based on role\n if (role === \"tab\") {\n item.setAttribute(\"aria-selected\", \"false\");\n item.setAttribute(\"tabindex\", \"-1\");\n } else if (item.hasAttribute(\"aria-current\")) {\n item.removeAttribute(\"aria-current\");\n }\n }\n };\n\n /**\n * Handle expandable item toggle\n * @param {HTMLElement} item - Expandable item element\n * @returns {boolean} Whether the item was expandable and handled\n */\n const handleExpandableItem = (item: HTMLElement): boolean => {\n const isExpandable = item.getAttribute(\"aria-expanded\") !== null;\n if (!isExpandable) return false;\n\n // Toggle expanded state\n const isExpanded = item.getAttribute(\"aria-expanded\") === \"true\";\n item.setAttribute(\"aria-expanded\", (!isExpanded).toString());\n\n // Find and toggle nested container - use flexible selectors\n const container = item.closest(\n `.${prefix}-${NavClass.ITEM_CONTAINER}, .mtrl-nav-item-container`\n );\n if (container) {\n const nestedContainer = container.querySelector(\n `.${prefix}-${NavClass.NESTED_CONTAINER}, .mtrl-nav-nested-container`\n );\n if (nestedContainer) {\n (nestedContainer as HTMLElement).hidden = isExpanded;\n\n // Also toggle expand icon rotation if present\n const expandIcon = item.querySelector(\n `.${prefix}-${NavClass.EXPAND_ICON}, .mtrl-nav-expand-icon`\n );\n if (expandIcon && (expandIcon as HTMLElement).style) {\n (expandIcon as HTMLElement).style.transform = isExpanded\n ? \"\"\n : \"rotate(90deg)\";\n }\n }\n }\n\n // For expandable items, we still emit a change event\n const id = (item as HTMLElement).dataset.id;\n if (id && component.emit) {\n component.emit(\"expandToggle\", {\n id,\n expanded: !isExpanded,\n });\n }\n\n return true;\n };\n\n // Create the enhanced component with handleItemClick method\n const enhancedComponent: ControllerComponent = {\n ...component,\n\n /**\n * Handler method for item click events\n * @param {string} id - ID of the clicked item\n */\n handleItemClick(id: string) {\n if (!component.items) {\n return;\n }\n\n const itemData = component.items.get(id);\n if (!itemData) {\n return;\n }\n\n // Find the currently active item by DOM query instead of relying on getActive\n const activeElement = component.element.querySelector(\n `.${prefix}-${NavClass.ITEM}--active, .mtrl-nav-item--active`\n );\n\n // Check if this item is already active - prevent infinite loops\n // if (activeElement && activeElement === itemData.element) {\n // return;\n // }\n\n // Deactivate previous active item if found\n if (activeElement) {\n updateItemState(activeElement as HTMLElement, false);\n }\n\n // Make sure itemData.element exists before updating\n if (itemData.element) {\n updateItemState(itemData.element, true);\n }\n\n // Emit change event\n if (component.emit) {\n // Get the path to the item (for nested items)\n const path = component.getItemPath ? component.getItemPath(id) : [];\n\n component.emit(\"change\", {\n id,\n item: itemData,\n previousItem: activeElement\n ? {\n element: activeElement as HTMLElement,\n config: { id: (activeElement as HTMLElement).dataset.id },\n }\n : null,\n path,\n source: \"userAction\",\n });\n }\n },\n };\n\n // Set up click event delegation for all navigation items\n component.element.addEventListener(\"click\", (event: Event) => {\n const target = event.target as HTMLElement;\n\n // Use more flexible selectors that match actual DOM structure\n const item = target.closest(\n `.${prefix}-${NavClass.ITEM}, .mtrl-nav-item`\n ) as HTMLElement;\n\n if (!item) {\n // Fallback to elements with data-id attribute\n const itemByDataId = target.closest(\"[data-id]\") as HTMLElement;\n if (!itemByDataId) {\n return;\n }\n }\n\n // Use the found item or fallback\n const navItem = item || (target.closest(\"[data-id]\") as HTMLElement);\n\n if (\n navItem.hasAttribute(\"disabled\") ||\n navItem.getAttribute(\"aria-disabled\") === \"true\"\n ) {\n return;\n }\n\n // Get the ID from the data attribute\n const id = navItem.dataset.id;\n if (!id) {\n return;\n }\n\n // Handle expandable items first\n if (handleExpandableItem(navItem)) {\n return;\n }\n\n // Let the enhanced component handle normal item activation\n enhancedComponent.handleItemClick(id);\n });\n\n // Add keyboard support for navigation\n component.element.addEventListener(\"keydown\", (event: KeyboardEvent) => {\n // Only handle specific keys\n if (\n ![\n \"Enter\",\n \" \",\n \"ArrowUp\",\n \"ArrowDown\",\n \"ArrowLeft\",\n \"ArrowRight\",\n \"Home\",\n \"End\",\n ].includes(event.key)\n ) {\n return;\n }\n\n const isVertical = [\"rail\", \"drawer\"].includes(component.variant || \"\");\n const isHorizontal = [\"bar\"].includes(component.variant || \"\");\n\n // Handle Enter/Space for activation\n if (event.key === \"Enter\" || event.key === \" \") {\n const item = document.activeElement as HTMLElement;\n if (item && item.classList.contains(`${prefix}-${NavClass.ITEM}`)) {\n event.preventDefault();\n\n const id = item.dataset.id;\n if (id) {\n item.click(); // Trigger a click event for the item\n }\n }\n return;\n }\n\n // Get all focusable navigation items - use flexible selector\n const items = Array.from(\n component.element.querySelectorAll(\n `.${prefix}-${NavClass.ITEM}:not([disabled]):not([aria-disabled=\"true\"]), \n .mtrl-nav-item:not([disabled]):not([aria-disabled=\"true\"])`\n )\n ) as HTMLElement[];\n\n if (items.length === 0) return;\n\n // Find the currently focused item\n const focusedItem = document.activeElement as HTMLElement;\n const focusedIndex = items.indexOf(focusedItem);\n\n // Handle navigation keys\n let newIndex = -1;\n\n if (\n (isVertical &&\n (event.key === \"ArrowDown\" || event.key === \"ArrowRight\")) ||\n (isHorizontal && event.key === \"ArrowRight\")\n ) {\n newIndex = focusedIndex < 0 ? 0 : (focusedIndex + 1) % items.length;\n } else if (\n (isVertical &&\n (event.key === \"ArrowUp\" || event.key === \"ArrowLeft\")) ||\n (isHorizontal && event.key === \"ArrowLeft\")\n ) {\n newIndex =\n focusedIndex < 0\n ? items.length - 1\n : (focusedIndex - 1 + items.length) % items.length;\n } else if (event.key === \"Home\") {\n newIndex = 0;\n } else if (event.key === \"End\") {\n newIndex = items.length - 1;\n }\n\n if (newIndex >= 0) {\n event.preventDefault();\n items[newIndex].focus();\n }\n });\n\n return enhancedComponent;\n };\n\nexport default withController;\n",
|
|
156
|
-
"// src/components/navigation/config.ts\nimport {\n createComponentConfig,\n createElementConfig,\n} from \"../../core/config/component\";\nimport { NavigationConfig, BaseComponent, ApiOptions } from \"./types\";\nimport { NAV_DEFAULTS, NAV_CLASSES } from \"./constants\";\n\n/**\n * Default configuration for the Navigation component\n */\nexport const defaultConfig: NavigationConfig = {\n variant: NAV_DEFAULTS.VARIANT,\n position: NAV_DEFAULTS.POSITION,\n behavior: NAV_DEFAULTS.BEHAVIOR,\n items: [],\n showLabels: NAV_DEFAULTS.SHOW_LABELS,\n scrimEnabled: NAV_DEFAULTS.SCRIM_ENABLED,\n};\n\n/**\n * Creates the base configuration for Navigation component\n * @param {NavigationConfig} config - User provided configuration\n * @returns {NavigationConfig} Complete configuration with defaults applied\n */\nexport const createBaseConfig = (\n config: NavigationConfig = {}\n): NavigationConfig =>\n createComponentConfig(defaultConfig, config, \"nav\") as NavigationConfig;\n\n/**\n * Generates element configuration for the Navigation component\n * @param {NavigationConfig} config - Navigation configuration\n * @returns {Object} Element configuration object for withElement\n */\nexport const getElementConfig = (config: NavigationConfig) => {\n // Build class list - start with the variant class\n const variantClass = config.variant\n ? `${config.prefix}-${NAV_CLASSES.VARIANT_PREFIX}${config.variant}`\n : \"\";\n\n // Add position class if specified\n const positionClass = config.position\n ? `${config.prefix}-${NAV_CLASSES.POSITION_PREFIX}${config.position}`\n : \"\";\n\n // Add user-provided classes\n const userClass = config.class || \"\";\n\n // Combine all classes\n const classNames = [variantClass, positionClass, userClass].filter(Boolean);\n\n return createElementConfig(config, {\n tag: \"nav\",\n attributes: {\n role: \"navigation\",\n \"aria-label\": config.ariaLabel || \"Main Navigation\",\n },\n className: classNames,\n });\n};\n\n/**\n * Creates API configuration for the Navigation component\n * @param {BaseComponent} comp - Component with disabled and lifecycle features\n * @returns {ApiOptions} API configuration object\n */\nexport const getApiConfig = (comp: BaseComponent): ApiOptions => ({\n disabled: {\n enable: comp.disabled?.enable || (() => {}),\n disable: comp.disabled?.disable || (() => {}),\n },\n lifecycle: {\n destroy: comp.lifecycle?.destroy || (() => {}),\n },\n});\n\nexport default defaultConfig;\n",
|
|
157
|
-
"// src/components/navigation/system/state.ts\n\nimport { NavigationSystemConfig, NavigationSystemState } from './types';\n\n/**\n * Create the initial state for the navigation system\n * \n * @param options - Configuration options\n * @returns Initial system state\n */\nexport const createInitialState = (options: NavigationSystemConfig = {}): NavigationSystemState => {\n return {\n rail: null,\n drawer: null,\n activeSection: options.activeSection || null,\n activeSubsection: options.activeSubsection || null,\n items: options.items || {},\n mouseInDrawer: false,\n mouseInRail: false,\n hoverTimer: null,\n closeTimer: null,\n processingChange: false,\n isMobile: false,\n overlayElement: null,\n closeButtonElement: null,\n resizeObserver: null,\n outsideClickHandler: null,\n outsideClickHandlerSet: false\n };\n};\n\n/**\n * Create default configuration with sensible defaults\n * \n * @param options - User-provided configuration\n * @returns Complete configuration with defaults\n */\nexport const createConfig = (options: NavigationSystemConfig = {}): Required<Pick<NavigationSystemConfig, \n 'animateDrawer' | 'showLabelsOnRail' | 'hideDrawerOnClick' | 'expanded' | \n 'hoverDelay' | 'closeDelay' | 'railOptions' | 'drawerOptions'>> => {\n return {\n // Display options\n animateDrawer: options.animateDrawer !== false,\n showLabelsOnRail: options.showLabelsOnRail !== false,\n hideDrawerOnClick: options.hideDrawerOnClick || false,\n expanded: options.expanded === true,\n \n // Timing options (ms)\n hoverDelay: options.hoverDelay || 200,\n closeDelay: options.closeDelay || 100,\n \n // Component options\n railOptions: options.railOptions || {},\n drawerOptions: options.drawerOptions || {}\n };\n};\n\n/**\n * Create mobile configuration with defaults\n * \n * @param options - User-provided configuration\n * @returns Mobile-specific configuration\n */\nexport const createMobileConfig = (options: NavigationSystemConfig = {}): Required<Pick<NavigationSystemConfig, \n 'breakpoint' | 'lockBodyScroll' | 'hideOnClickOutside' | 'enableSwipeGestures' | \n 'optimizeForTouch' | 'overlayClass' | 'closeButtonClass' | 'bodyLockClass'>> => {\n return {\n breakpoint: options.breakpoint || 960,\n lockBodyScroll: options.lockBodyScroll !== false,\n hideOnClickOutside: options.hideOnClickOutside !== false,\n enableSwipeGestures: options.enableSwipeGestures !== false,\n optimizeForTouch: options.optimizeForTouch !== false,\n overlayClass: options.overlayClass || 'mtrl-nav-overlay',\n closeButtonClass: options.closeButtonClass || 'mtrl-nav-close-btn',\n bodyLockClass: options.bodyLockClass || 'mtrl-body-drawer-open'\n };\n};",
|
|
158
|
-
"// src/components/navigation/system/core.ts\n\nimport { NavigationSystemState, NavigationItem } from \"./types\";\nimport { isMobileDevice } from \"../../../core/utils/mobile\";\nimport createNavigation from \"../navigation\";\n\n/**\n * Update drawer content for a specific section WITHOUT changing visibility\n *\n * @param state - System state\n * @param sectionId - Section ID to display\n * @param showDrawer - Function to show the drawer\n * @param hideDrawer - Function to hide the drawer\n */\nexport const updateDrawerContent = (\n state: NavigationSystemState,\n sectionId: string,\n showDrawer: () => void,\n hideDrawer: () => void\n): void => {\n if (!state.drawer || !sectionId || !state.items[sectionId]) {\n return;\n }\n\n // Get section items\n const sectionData = state.items[sectionId];\n const items = sectionData.items || [];\n\n // If no items, hide drawer and exit\n if (items.length === 0) {\n hideDrawer();\n return;\n }\n\n // Clear existing drawer items first using the API\n const currentItems = state.drawer.getAllItems();\n if (currentItems?.length > 0) {\n currentItems.forEach((item: any) => {\n state.drawer.removeItem(item.config.id);\n });\n }\n\n // Add new items to drawer through the API\n items.forEach((item: NavigationItem) => {\n state.drawer.addItem(item);\n });\n\n // Show the drawer\n showDrawer();\n};\n\n/**\n * Creates the rail navigation component\n *\n * @param state - System state\n * @param config - System configuration\n * @returns Rail navigation component\n */\nexport const createRailNavigation = (\n state: NavigationSystemState,\n config: any\n): any => {\n // Build rail items from sections\n const railItems = Object.keys(state.items || {}).map((sectionId) => ({\n id: sectionId,\n label: state.items[sectionId]?.label || sectionId,\n icon: state.items[sectionId]?.icon || \"\",\n active: sectionId === state.activeSection,\n }));\n\n // Create the rail component\n const rail = createNavigation({\n variant: \"rail\",\n position: \"left\",\n showLabels: config.showLabelsOnRail,\n items: railItems,\n ...config.railOptions,\n });\n\n document.body.appendChild(rail.element);\n return rail;\n};\n\n/**\n * Creates the drawer navigation component\n *\n * @param state - System state\n * @param config - System configuration\n * @returns Drawer navigation component\n */\nexport const createDrawerNavigation = (\n state: NavigationSystemState,\n config: any\n): any => {\n // Create the drawer component (initially empty)\n const drawer = createNavigation({\n variant: \"drawer\",\n position: \"left\",\n items: [], // Start empty\n ...config.drawerOptions,\n });\n\n document.body.appendChild(drawer.element);\n\n // Mark drawer with identifier\n drawer.element.dataset.id = \"drawer\";\n\n // IMPORTANT: Make drawer initially hidden unless explicitly expanded\n if (!config.expanded) {\n drawer.element.classList.add(\"mtrl-nav--hidden\");\n drawer.element.setAttribute(\"aria-hidden\", \"true\");\n }\n\n return drawer;\n};\n\n/**\n * Shows the drawer with mobile-specific behaviors\n *\n * @param state - System state\n * @param mobileConfig - Mobile configuration\n */\nexport const showDrawer = (\n state: NavigationSystemState,\n mobileConfig: any\n): void => {\n if (!state.drawer) return;\n\n state.drawer.element.classList.remove(\"mtrl-nav--hidden\");\n state.drawer.element.setAttribute(\"aria-hidden\", \"false\");\n\n // Apply mobile-specific behaviors\n if (state.isMobile) {\n if (state.overlayElement) {\n state.overlayElement.classList.add(\"active\");\n state.overlayElement.setAttribute(\"aria-hidden\", \"false\");\n }\n\n // Lock body scroll if enabled\n if (mobileConfig.lockBodyScroll) {\n document.body.classList.add(mobileConfig.bodyLockClass);\n }\n\n // Ensure close button is visible\n if (state.closeButtonElement) {\n state.closeButtonElement.style.display = \"flex\";\n }\n }\n};\n\n/**\n * Hides the drawer with mobile-specific behaviors\n *\n * @param state - System state\n * @param mobileConfig - Mobile configuration\n */\nexport const hideDrawer = (\n state: NavigationSystemState,\n mobileConfig: any\n): void => {\n if (!state.drawer) return;\n\n state.drawer.element.classList.add(\"mtrl-nav--hidden\");\n state.drawer.element.setAttribute(\"aria-hidden\", \"true\");\n\n // Remove mobile-specific effects\n if (state.overlayElement) {\n state.overlayElement.classList.remove(\"active\");\n state.overlayElement.setAttribute(\"aria-hidden\", \"true\");\n }\n\n // Unlock body scroll\n if (mobileConfig.lockBodyScroll) {\n document.body.classList.remove(mobileConfig.bodyLockClass);\n }\n};\n\n/**\n * Checks if drawer is visible\n *\n * @param state - System state\n * @returns true if drawer is visible\n */\nexport const isDrawerVisible = (state: NavigationSystemState): boolean => {\n if (!state.drawer) return false;\n return !state.drawer.element.classList.contains(\"mtrl-nav--hidden\");\n};\n\n/**\n * Checks and updates the mobile state\n *\n * @param state - System state\n * @param mobileConfig - Mobile configuration\n * @param setupMobileMode - Function to set up mobile mode\n * @param teardownMobileMode - Function to tear down mobile mode\n * @param systemApi - Reference to the public system API\n */\nexport const checkMobileState = (\n state: NavigationSystemState,\n mobileConfig: any,\n setupMobileMode: () => void,\n teardownMobileMode: () => void,\n systemApi: any\n): void => {\n const prevState = state.isMobile;\n state.isMobile =\n window.innerWidth <= mobileConfig.breakpoint || isMobileDevice();\n\n // If state changed, adjust UI\n if (prevState !== state.isMobile) {\n if (state.isMobile) {\n // Switched to mobile mode\n setupMobileMode();\n } else {\n // Switched to desktop mode\n teardownMobileMode();\n }\n\n // Emit a view change event\n if (systemApi.onViewChange) {\n systemApi.onViewChange({\n mobile: state.isMobile,\n previousMobile: prevState,\n width: window.innerWidth,\n });\n }\n }\n};\n\n/**\n * Clean up resources when the system is destroyed\n *\n * @param state - System state\n */\nexport const cleanupResources = (state: NavigationSystemState): void => {\n // Clean up overlay\n if (state.overlayElement && state.overlayElement.parentNode) {\n state.overlayElement.parentNode.removeChild(state.overlayElement);\n state.overlayElement = null;\n }\n\n // Destroy components\n if (state.rail) {\n state.rail.destroy();\n state.rail = null;\n }\n\n if (state.drawer) {\n state.drawer.destroy();\n state.drawer = null;\n }\n\n // Reset state\n state.activeSection = null;\n state.activeSubsection = null;\n state.mouseInDrawer = false;\n state.mouseInRail = false;\n state.processingChange = false;\n state.isMobile = false;\n};\n\n/**\n * Navigate to a specific section and subsection\n *\n * @param state - System state\n * @param section - Section ID\n * @param subsection - Subsection ID (optional)\n * @param silent - Whether to suppress change events\n */\nexport const navigateTo = (\n state: NavigationSystemState,\n section: string,\n subsection?: string,\n silent?: boolean\n): void => {\n // Skip if section doesn't exist\n if (!section || !state.items[section]) {\n return;\n }\n\n // Check if we're already on this section and subsection\n if (\n state.activeSection === section &&\n state.activeSubsection === subsection\n ) {\n return;\n }\n\n // Update active section\n state.activeSection = section;\n\n // Update rail if it exists\n if (state.rail) {\n state.rail.setActive(section, silent);\n }\n\n // Update active subsection if specified\n if (subsection && state.drawer) {\n state.activeSubsection = subsection;\n state.drawer.setActive(subsection, silent);\n }\n};\n",
|
|
159
|
-
"// src/components/navigation/system/events.ts\n\nimport { NavigationSystemState } from \"./types\";\n\n/**\n * Registers rail navigation event handlers\n *\n * @param state - System state\n * @param config - System configuration\n * @param updateDrawerContent - Function to update drawer content\n * @param showDrawer - Function to show the drawer\n * @param hideDrawer - Function to hide the drawer\n * @param systemApi - Reference to the public system API\n */\nexport const registerRailEvents = (\n state: NavigationSystemState,\n config: any,\n updateDrawerContent: (sectionId: string) => void,\n showDrawer: () => void,\n hideDrawer: () => void,\n systemApi: any\n): void => {\n const rail = state.rail;\n if (!rail) return;\n\n // Register for change events - will listen for when rail items are clicked\n rail.on(\"change\", (event: any) => {\n // Extract ID from event data\n const id = event?.id;\n\n if (!id || state.processingChange) {\n return;\n }\n\n // Check if this is a user action\n const isUserAction = event?.source === \"userAction\";\n\n // Set processing flag to prevent loops\n state.processingChange = true;\n\n // Update active section\n state.activeSection = id;\n\n // Handle internally first - update drawer content\n updateDrawerContent(id);\n\n // Then notify external handlers\n if (systemApi.onSectionChange && isUserAction) {\n systemApi.onSectionChange(id, {\n source: isUserAction ? \"userClick\" : \"programmatic\",\n });\n }\n\n // Clear the processing flag after a delay\n setTimeout(() => {\n state.processingChange = false;\n }, 50);\n });\n\n rail.on(\"mouseover\", (event: any) => {\n const id = event?.id;\n\n // Set rail mouse state\n state.mouseInRail = true;\n\n // Clear any existing hover timer\n clearTimeout(state.hoverTimer as number);\n state.hoverTimer = null;\n\n // Only schedule drawer operations if there's an ID\n if (id) {\n // Check if this section has items\n if (state.items[id]?.items?.length > 0) {\n // Has items - schedule drawer opening\n state.hoverTimer = window.setTimeout(() => {\n updateDrawerContent(id);\n }, config.hoverDelay) as unknown as number;\n } else {\n // No items - hide drawer after a delay to prevent flickering\n state.closeTimer = window.setTimeout(() => {\n // Only hide if we're still in the rail but not in the drawer\n if (state.mouseInRail && !state.mouseInDrawer) {\n hideDrawer();\n }\n }, config.hoverDelay) as unknown as number;\n }\n }\n });\n\n rail.on(\"mouseenter\", () => {\n state.mouseInRail = true;\n\n // Clear any pending drawer close timer when entering rail\n clearTimeout(state.closeTimer as number);\n state.closeTimer = null;\n });\n\n rail.on(\"mouseleave\", () => {\n state.mouseInRail = false;\n\n // Clear any existing hover timer\n clearTimeout(state.hoverTimer as number);\n state.hoverTimer = null;\n\n // Only set timer to hide drawer if we're not in drawer either\n if (!state.mouseInDrawer) {\n state.closeTimer = window.setTimeout(() => {\n // Double-check we're still not in rail or drawer before hiding\n if (!state.mouseInRail && !state.mouseInDrawer) {\n hideDrawer();\n }\n }, config.closeDelay) as unknown as number;\n }\n });\n};\n\n/**\n * Registers drawer navigation event handlers\n *\n * @param state - System state\n * @param config - System configuration\n * @param hideDrawer - Function to hide the drawer\n * @param systemApi - Reference to the public system API\n */\nexport const registerDrawerEvents = (\n state: NavigationSystemState,\n config: any,\n hideDrawer: () => void,\n systemApi: any\n): void => {\n const drawer = state.drawer;\n if (!drawer) return;\n\n // Use the component's native event system\n if (typeof drawer.on === \"function\") {\n // Handle item selection\n drawer.on(\"change\", (event: any) => {\n const id = event.id;\n\n state.activeSubsection = id;\n\n // If configuration specifies to hide drawer on click, do so\n if (config.hideDrawerOnClick) {\n hideDrawer();\n }\n\n // Emit item selection event\n if (systemApi.onItemSelect) {\n systemApi.onItemSelect(event);\n }\n });\n\n // Handle mouseenter/mouseleave for drawer\n drawer.on(\"mouseenter\", () => {\n state.mouseInDrawer = true;\n\n // Clear any hover and close timers\n clearTimeout(state.hoverTimer as number);\n clearTimeout(state.closeTimer as number);\n state.hoverTimer = null;\n state.closeTimer = null;\n });\n\n drawer.on(\"mouseleave\", () => {\n state.mouseInDrawer = false;\n\n // Only set timer to hide drawer if we're not in rail\n if (!state.mouseInRail) {\n state.closeTimer = window.setTimeout(() => {\n // Double-check we're still not in drawer or rail before hiding\n if (!state.mouseInDrawer && !state.mouseInRail) {\n hideDrawer();\n }\n }, config.closeDelay) as unknown as number;\n }\n });\n }\n};\n\n/**\n * Sets up window resize and orientation change handling\n *\n * @param state - System state\n * @param checkMobileState - Function to check and update mobile state\n */\nexport const setupResponsiveHandling = (\n state: NavigationSystemState,\n checkMobileState: () => void\n): void => {\n // Setup responsive behavior\n if (window.ResizeObserver) {\n // Use ResizeObserver for better performance\n state.resizeObserver = new ResizeObserver(() => {\n checkMobileState();\n });\n state.resizeObserver.observe(document.body);\n } else {\n // Fallback to window resize event\n window.addEventListener(\"resize\", checkMobileState);\n }\n\n // Listen for orientation changes on mobile\n window.addEventListener(\"orientationchange\", () => {\n // Small delay to ensure dimensions have updated\n setTimeout(checkMobileState, 100);\n });\n};\n\n/**\n * Cleans up all event handlers and resources\n *\n * @param state - System state\n * @param checkMobileState - Function reference to remove event handlers\n */\nexport const cleanupEvents = (\n state: NavigationSystemState,\n checkMobileState: () => void\n): void => {\n // Clean up resize observer\n if (state.resizeObserver) {\n state.resizeObserver.disconnect();\n state.resizeObserver = null;\n } else {\n window.removeEventListener(\"resize\", checkMobileState);\n }\n\n // Remove orientation change listener\n window.removeEventListener(\"orientationchange\", checkMobileState);\n\n // Remove outside click handler\n if (state.outsideClickHandler) {\n const eventType = \"ontouchend\" in window ? \"touchend\" : \"click\";\n document.removeEventListener(eventType, state.outsideClickHandler);\n }\n\n // Clear timers\n clearTimeout(state.hoverTimer as number);\n clearTimeout(state.closeTimer as number);\n state.hoverTimer = null;\n state.closeTimer = null;\n};\n",
|
|
160
|
-
"// src/components/navigation/system/mobile.ts\n\nimport { NavigationSystemState } from './types';\nimport { \n hasTouchSupport, \n normalizeEvent,\n TOUCH_CONFIG,\n TOUCH_TARGETS \n} from '../../../core/utils/mobile';\n\n/**\n * Creates and appends overlay element for mobile\n *\n * @param state - System state\n * @param mobileConfig - Mobile configuration\n * @param hideDrawer - Function to hide the drawer\n * @returns Overlay element\n */\nexport const createOverlay = (\n state: NavigationSystemState, \n mobileConfig: any, \n hideDrawer: () => void\n): HTMLElement => {\n if (state.overlayElement) return state.overlayElement;\n \n state.overlayElement = document.createElement('div');\n state.overlayElement.className = mobileConfig.overlayClass;\n state.overlayElement.setAttribute('aria-hidden', 'true');\n document.body.appendChild(state.overlayElement);\n \n state.overlayElement.addEventListener('click', (event) => {\n if (event.target === state.overlayElement) {\n hideDrawer();\n }\n });\n \n return state.overlayElement;\n};\n\n/**\n * Creates and adds close button to the drawer\n *\n * @param state - System state\n * @param mobileConfig - Mobile configuration\n * @param hideDrawer - Function to hide the drawer\n * @returns Close button element\n */\nexport const createCloseButton = (\n state: NavigationSystemState, \n mobileConfig: any, \n hideDrawer: () => void\n): HTMLElement | null => {\n if (!state.drawer || state.closeButtonElement) return null;\n \n state.closeButtonElement = document.createElement('button');\n state.closeButtonElement.className = mobileConfig.closeButtonClass;\n state.closeButtonElement.setAttribute('aria-label', 'Close navigation');\n state.closeButtonElement.innerHTML = `\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\"></line>\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\"></line>\n </svg>\n `;\n \n // Handle click event\n state.closeButtonElement.addEventListener('click', () => {\n hideDrawer();\n });\n \n // Apply touch-friendly styles if needed\n if (hasTouchSupport() && mobileConfig.optimizeForTouch) {\n state.closeButtonElement.style.minWidth = `${TOUCH_TARGETS.COMFORTABLE}px`;\n state.closeButtonElement.style.minHeight = `${TOUCH_TARGETS.COMFORTABLE}px`;\n \n // Add touch feedback\n state.closeButtonElement.addEventListener('touchstart', () => {\n state.closeButtonElement.classList.add('active');\n }, { passive: true });\n \n state.closeButtonElement.addEventListener('touchend', () => {\n setTimeout(() => {\n state.closeButtonElement.classList.remove('active');\n }, TOUCH_CONFIG.FEEDBACK_DURATION);\n }, { passive: true });\n }\n \n state.drawer.element.appendChild(state.closeButtonElement);\n return state.closeButtonElement;\n};\n\n/**\n * Sets up mobile mode features\n *\n * @param state - System state\n * @param mobileConfig - Mobile configuration\n * @param hideDrawer - Function to hide the drawer\n * @param isDrawerVisible - Function to check if drawer is visible\n */\nexport const setupMobileMode = (\n state: NavigationSystemState, \n mobileConfig: any, \n hideDrawer: () => void,\n isDrawerVisible: () => boolean\n): void => {\n const drawer = state.drawer;\n const rail = state.rail;\n \n if (!drawer || !rail) return;\n \n // Create mobile UI elements\n createOverlay(state, mobileConfig, hideDrawer);\n createCloseButton(state, mobileConfig, hideDrawer);\n \n // Setup outside click handling\n setupOutsideClickHandling(state, mobileConfig, hideDrawer, isDrawerVisible);\n \n // Setup touch gestures if enabled\n if (mobileConfig.enableSwipeGestures && hasTouchSupport()) {\n setupTouchGestures(state, hideDrawer, isDrawerVisible);\n }\n \n // Hide drawer initially in mobile mode\n hideDrawer();\n};\n\n/**\n * Sets up outside click handling for mobile\n *\n * @param state - System state\n * @param mobileConfig - Mobile configuration\n * @param hideDrawer - Function to hide the drawer\n * @param isDrawerVisible - Function to check if drawer is visible\n */\nexport const setupOutsideClickHandling = (\n state: NavigationSystemState, \n mobileConfig: any, \n hideDrawer: () => void,\n isDrawerVisible: () => boolean\n): void => {\n if (!mobileConfig.hideOnClickOutside) return;\n \n // Only set up once\n if (state.outsideClickHandlerSet) return;\n state.outsideClickHandlerSet = true;\n \n // Use either click or touchend event depending on device capability\n const eventType = hasTouchSupport() ? 'touchend' : 'click';\n \n // The handler function\n const handleOutsideClick = (event: Event) => {\n if (!state.isMobile || !isDrawerVisible()) return;\n \n const normalizedEvent = normalizeEvent(event as MouseEvent | TouchEvent);\n const target = normalizedEvent.target as HTMLElement;\n \n // Don't close if clicking on drawer, rail, or excluded elements\n if (state.drawer.element.contains(target) || \n state.rail.element.contains(target)) {\n return;\n }\n \n // Close drawer - it's an outside click/touch\n hideDrawer();\n };\n \n // Store handler for cleanup\n state.outsideClickHandler = handleOutsideClick;\n \n // Add listener\n document.addEventListener(eventType, handleOutsideClick,\n hasTouchSupport() ? { passive: true } : false);\n};\n\n/**\n * Sets up touch gestures for mobile\n *\n * @param state - System state\n * @param hideDrawer - Function to hide the drawer\n * @param isDrawerVisible - Function to check if drawer is visible\n */\nexport const setupTouchGestures = (\n state: NavigationSystemState, \n hideDrawer: () => void,\n isDrawerVisible: () => boolean,\n showDrawer?: () => void\n): void => {\n const drawer = state.drawer;\n const rail = state.rail;\n \n if (!drawer || !rail) return;\n \n let touchStartX = 0;\n let touchStartY = 0;\n \n // Rail swipe right to open drawer\n rail.element.addEventListener('touchstart', (event: TouchEvent) => {\n const touch = event.touches[0];\n touchStartX = touch.clientX;\n touchStartY = touch.clientY;\n }, { passive: true });\n \n rail.element.addEventListener('touchmove', (event: TouchEvent) => {\n if (!state.isMobile || isDrawerVisible() || !showDrawer) return;\n \n const touch = event.touches[0];\n const deltaX = touch.clientX - touchStartX;\n const deltaY = touch.clientY - touchStartY;\n \n // Only consider horizontal swipes\n if (Math.abs(deltaX) > Math.abs(deltaY) && \n deltaX > TOUCH_CONFIG.SWIPE_THRESHOLD) {\n showDrawer();\n }\n }, { passive: true });\n \n // Drawer swipe left to close\n drawer.element.addEventListener('touchstart', (event: TouchEvent) => {\n const touch = event.touches[0];\n touchStartX = touch.clientX;\n touchStartY = touch.clientY;\n }, { passive: true });\n \n // Use touchmove with transform for visual feedback\n drawer.element.addEventListener('touchmove', (event: TouchEvent) => {\n if (!state.isMobile || !isDrawerVisible()) return;\n \n const touch = event.touches[0];\n const deltaX = touch.clientX - touchStartX;\n \n // Only apply transform for leftward swipes\n if (deltaX < 0) {\n // Apply transform with resistance\n drawer.element.style.transform = `translateX(${deltaX / 2}px)`;\n \n // Close if threshold reached\n if (deltaX < -TOUCH_CONFIG.SWIPE_THRESHOLD) {\n hideDrawer();\n }\n }\n }, { passive: true });\n \n // Reset transforms when touch ends\n drawer.element.addEventListener('touchend', () => {\n if (drawer.element.style.transform) {\n drawer.element.style.transition = 'transform 0.2s ease';\n drawer.element.style.transform = '';\n \n setTimeout(() => {\n drawer.element.style.transition = '';\n }, 200);\n }\n }, { passive: true });\n};\n\n/**\n * Tears down mobile-specific features\n *\n * @param state - System state\n * @param mobileConfig - Mobile configuration\n */\nexport const teardownMobileMode = (\n state: NavigationSystemState, \n mobileConfig: any\n): void => {\n // Hide overlay\n if (state.overlayElement) {\n state.overlayElement.classList.remove('active');\n state.overlayElement.setAttribute('aria-hidden', 'true');\n }\n \n // Hide close button\n if (state.closeButtonElement) {\n state.closeButtonElement.style.display = 'none';\n }\n \n // Remove body scroll lock if applied\n document.body.classList.remove(mobileConfig.bodyLockClass);\n};",
|
|
161
|
-
"// src/components/navigation/system/index.ts\n\nimport { NavigationSystemConfig, NavigationSystem } from \"./types\";\n\nimport { createInitialState, createConfig, createMobileConfig } from \"./state\";\n\nimport {\n createRailNavigation,\n createDrawerNavigation,\n updateDrawerContent,\n showDrawer as showDrawerCore,\n hideDrawer as hideDrawerCore,\n isDrawerVisible as isDrawerVisibleCore,\n checkMobileState as checkMobileStateCore,\n cleanupResources,\n navigateTo as navigateToCore,\n} from \"./core\";\n\nimport {\n registerRailEvents,\n registerDrawerEvents,\n setupResponsiveHandling,\n cleanupEvents,\n} from \"./events\";\n\nimport {\n setupMobileMode as setupMobileModeCore,\n teardownMobileMode,\n} from \"./mobile\";\n\n/**\n * Creates a complete navigation system with synchronized rail and drawer components\n *\n * @param options - System configuration options\n * @returns Navigation system API\n */\nexport const createNavigationSystem = (\n options: NavigationSystemConfig = {}\n): NavigationSystem => {\n // Initialize state and configuration\n const state = createInitialState(options);\n const config = createConfig(options);\n const mobileConfig = createMobileConfig(options);\n\n // Create system API object with placeholders\n const system: NavigationSystem = {\n initialize: () => system,\n cleanup: () => {},\n navigateTo: () => {},\n getRail: () => state.rail,\n getDrawer: () => state.drawer,\n getActiveSection: () => state.activeSection,\n getActiveSubsection: () => state.activeSubsection,\n showDrawer: () => {},\n hideDrawer: () => {},\n isDrawerVisible: () => false,\n configure: () => system,\n setProcessingChange: () => {},\n isProcessingChange: () => false,\n isMobile: () => state.isMobile,\n checkMobileState: () => {},\n onSectionChange: undefined,\n onItemSelect: undefined,\n onViewChange: undefined,\n };\n\n // Implementation functions that use the state\n const showDrawer = () => showDrawerCore(state, mobileConfig);\n const hideDrawer = () => hideDrawerCore(state, mobileConfig);\n const isDrawerVisible = () => isDrawerVisibleCore(state);\n\n const updateDrawerContentWrapper = (sectionId: string) => {\n updateDrawerContent(state, sectionId, showDrawer, hideDrawer);\n };\n\n const setupMobileMode = () => {\n setupMobileModeCore(state, mobileConfig, hideDrawer, isDrawerVisible);\n };\n\n const checkMobileState = () => {\n checkMobileStateCore(\n state,\n mobileConfig,\n setupMobileMode,\n () => teardownMobileMode(state, mobileConfig),\n system\n );\n };\n\n const navigateTo = (\n section: string,\n subsection?: string,\n silent?: boolean\n ) => {\n navigateToCore(state, section, subsection, silent);\n };\n\n // Implementation of the initialize method\n const initialize = (): NavigationSystem => {\n // Create rail component\n state.rail = createRailNavigation(state, config);\n\n // Create drawer component\n state.drawer = createDrawerNavigation(state, config);\n\n // Register event handlers\n registerRailEvents(\n state,\n config,\n updateDrawerContentWrapper,\n showDrawer,\n hideDrawer,\n system\n );\n registerDrawerEvents(state, config, hideDrawer, system);\n\n // Set up responsive behavior\n setupResponsiveHandling(state, checkMobileState);\n\n // Set active section if specified\n if (options.activeSection && state.items[options.activeSection]) {\n state.activeSection = options.activeSection;\n\n if (state.rail) {\n state.rail.setActive(options.activeSection);\n }\n\n // Update drawer content without showing it\n updateDrawerContentWrapper(options.activeSection);\n\n // Only show drawer if expanded is explicitly true\n if (options.expanded === true) {\n showDrawer();\n } else {\n // Explicitly ensure drawer is hidden\n hideDrawer();\n }\n }\n\n // Check initial mobile state\n checkMobileState();\n\n return system;\n };\n\n // Implementation of the cleanup method\n const cleanup = (): void => {\n cleanupEvents(state, checkMobileState);\n cleanupResources(state);\n };\n\n // Configure method implementation\n const configure = (\n newConfig: Partial<NavigationSystemConfig>\n ): NavigationSystem => {\n Object.assign(options, newConfig);\n Object.assign(config, createConfig({ ...options, ...newConfig }));\n Object.assign(\n mobileConfig,\n createMobileConfig({ ...options, ...newConfig })\n );\n return system;\n };\n\n // Assign implementations to system object\n system.initialize = initialize;\n system.cleanup = cleanup;\n system.navigateTo = navigateTo;\n system.showDrawer = showDrawer;\n system.hideDrawer = hideDrawer;\n system.isDrawerVisible = isDrawerVisible;\n system.configure = configure;\n system.setProcessingChange = (isProcessing: boolean) => {\n state.processingChange = isProcessing;\n };\n system.isProcessingChange = () => state.processingChange;\n system.isMobile = () => state.isMobile;\n system.checkMobileState = checkMobileState;\n\n // Return the uninitialized system\n return system;\n};\n\nexport default createNavigationSystem;\n\n// Re-export types for external use\nexport * from \"./types\";\n",
|
|
154
|
+
"// src/components/menu/config.ts\n\nimport {\n createComponentConfig,\n createElementConfig,\n} from \"../../core/config/component\";\nimport { MenuConfig } from \"./types\";\nimport { MENU_DEFAULTS, MENU_CLASSES } from \"./constants\";\n\n/**\n * Default configuration for the Menu component\n * These values will be used when not explicitly specified by the user.\n *\n * @category Components\n */\n\nexport const defaultConfig: Partial<MenuConfig> = {\n items: [],\n position: MENU_DEFAULTS.POSITION,\n closeOnSelect: MENU_DEFAULTS.CLOSE_ON_SELECT,\n closeOnClickOutside: MENU_DEFAULTS.CLOSE_ON_CLICK_OUTSIDE,\n closeOnEscape: MENU_DEFAULTS.CLOSE_ON_ESCAPE,\n openSubmenuOnHover: MENU_DEFAULTS.OPEN_SUBMENU_ON_HOVER,\n offset: MENU_DEFAULTS.OFFSET,\n autoFlip: MENU_DEFAULTS.AUTO_FLIP,\n visible: false,\n};\n\n/**\n * Creates the base configuration for Menu component by merging user-provided\n * config with default values.\n *\n * @param {MenuConfig} config - User provided configuration\n * @returns {MenuConfig} Complete configuration with defaults applied\n * @category Components\n * @internal\n */\nexport const createBaseConfig = (config: MenuConfig): MenuConfig => {\n // First, ensure we have an opener element\n if (!config.opener) {\n throw new Error(\"Menu component requires an opener element or selector\");\n }\n\n // Apply default configuration\n return createComponentConfig(defaultConfig, config, \"menu\") as MenuConfig;\n};\n\n/**\n * Generates element configuration for the Menu component.\n * This function creates the necessary attributes and configuration\n * for the DOM element creation process.\n *\n * @param {MenuConfig} config - Menu configuration\n * @returns {Object} Element configuration object for withElement\n * @category Components\n * @internal\n */\nexport const getElementConfig = (config: MenuConfig) => {\n // Custom styles based on configuration\n const styles: Record<string, string> = {};\n\n if (config.width) {\n styles.width = config.width;\n }\n\n if (config.maxHeight) {\n styles.maxHeight = config.maxHeight;\n }\n\n // Element attributes\n const attributes: Record<string, any> = {\n role: \"menu\",\n tabindex: \"-1\",\n \"aria-hidden\": (!config.visible).toString(),\n style: Object.entries(styles)\n .map(([key, value]) => `${key}: ${value}`)\n .join(\";\"),\n };\n\n return createElementConfig(config, {\n tag: \"div\",\n attributes,\n className: [\n config.visible ? MENU_CLASSES.VISIBLE : null,\n config.dense ? `${config.prefix}-menu--dense` : null,\n config.class,\n ].filter(Boolean),\n forwardEvents: {\n keydown: true,\n },\n });\n};\n\n/**\n * Creates API configuration for the Menu component.\n * This connects the core component features to the public API.\n *\n * @param {Object} component - Component with menu features\n * @returns {Object} API configuration object\n * @category Components\n * @internal\n */\nexport const getApiConfig = (component) => ({\n menu: {\n open: (event, interactionType) =>\n component.menu?.open(event, interactionType),\n close: (event, restoreFocus, skipAnimation) =>\n component.menu?.close(event, restoreFocus, skipAnimation),\n toggle: (event, interactionType) =>\n component.menu?.toggle(event, interactionType),\n isOpen: () => component.menu?.isOpen() || false,\n setItems: (items) => component.menu?.setItems(items),\n getItems: () => component.menu?.getItems() || [],\n setPosition: (position) => component.menu?.setPosition(position),\n getPosition: () => component.menu?.getPosition(),\n setSelected: (itemId) => component.menu?.setSelected(itemId),\n getSelected: () => component.menu?.getSelected(),\n },\n opener: {\n setOpener: (opener) => component.opener?.setOpener(opener),\n getOpener: () => component.opener?.getOpener(),\n },\n submenu: {\n hasOpenSubmenu: () => component.submenu?.hasOpenSubmenu() || false,\n closeAllSubmenus: () => component.submenu?.closeAllSubmenus(),\n },\n events: {\n on: (event, handler) => component.on?.(event, handler),\n off: (event, handler) => component.off?.(event, handler),\n },\n lifecycle: {\n destroy: () => component.lifecycle?.destroy(),\n },\n});\n\nexport default defaultConfig;\n",
|
|
155
|
+
"// src/components/menu/constants.ts\n\n/**\n * Menu position options for alignment relative to opener element\n */\nexport const MENU_POSITION = {\n /** Places menu below the opener, aligned to left edge */\n BOTTOM_START: \"bottom-start\",\n /** Places menu below the opener, centered */\n BOTTOM: \"bottom\",\n /** Places menu below the opener, aligned to right edge */\n BOTTOM_END: \"bottom-end\",\n /** Places menu above the opener, aligned to left edge */\n TOP_START: \"top-start\",\n /** Places menu above the opener, centered */\n TOP: \"top\",\n /** Places menu above the opener, aligned to right edge */\n TOP_END: \"top-end\",\n /** Places menu to the right of the opener, aligned to top edge */\n RIGHT_START: \"right-start\",\n /** Places menu to the right of the opener, centered */\n RIGHT: \"right\",\n /** Places menu to the right of the opener, aligned to bottom edge */\n RIGHT_END: \"right-end\",\n /** Places menu to the left of the opener, aligned to top edge */\n LEFT_START: \"left-start\",\n /** Places menu to the left of the opener, centered */\n LEFT: \"left\",\n /** Places menu to the left of the opener, aligned to bottom edge */\n LEFT_END: \"left-end\",\n} as const;\n\n/**\n * Default configuration values for menus\n */\nexport const MENU_DEFAULTS = {\n /** Default menu position */\n POSITION: MENU_POSITION.BOTTOM_START,\n /** Default offset from the opener (in pixels) */\n OFFSET: 0,\n /** Close menu when an item is selected */\n CLOSE_ON_SELECT: true,\n /** Close menu when clicking outside */\n CLOSE_ON_CLICK_OUTSIDE: true,\n /** Close menu when escape key is pressed */\n CLOSE_ON_ESCAPE: true,\n /** Open submenus on hover */\n OPEN_SUBMENU_ON_HOVER: true,\n /** Automatically flip menu position to stay in viewport */\n AUTO_FLIP: true,\n} as const;\n\n/**\n * Interaction types for menu opening/closing\n */\nexport const MENU_INTERACTION_TYPES = {\n /** Interaction via mouse or touch */\n MOUSE: \"mouse\",\n /** Interaction via keyboard */\n KEYBOARD: \"keyboard\",\n} as const;\n\n/**\n * Menu item types\n */\nexport const MENU_ITEM_TYPES = {\n /** Standard interactive menu item */\n ITEM: \"item\",\n /** Non-interactive dividing line */\n DIVIDER: \"divider\",\n} as const;\n\n/**\n * Menu event names\n */\nexport const MENU_EVENTS = {\n /** Fired when the menu is opened */\n OPEN: \"open\",\n /** Fired when the menu is closed */\n CLOSE: \"close\",\n /** Fired when a menu item is selected */\n SELECT: \"select\",\n} as const;\n\n/**\n * CSS classes for menu elements\n */\nexport const MENU_CLASSES = {\n /** Menu container */\n CONTAINER: \"menu\",\n /** Visible menu */\n VISIBLE: \"menu--visible\",\n /** Menu inner container */\n INNER: \"menu__inner\",\n /** Individual menu item */\n ITEM: \"menu__item\",\n /** Disabled menu item */\n ITEM_DISABLED: \"menu__item--disabled\",\n /** Selected menu item */\n ITEM_SELECTED: \"menu__item--selected\",\n /** Menu item with submenu */\n ITEM_HAS_SUBMENU: \"menu__item--has-submenu\",\n /** Divider */\n DIVIDER: \"menu__divider\",\n /** Item icon */\n ITEM_ICON: \"menu__item-icon\",\n /** Item text */\n ITEM_TEXT: \"menu__item-text\",\n /** Item keyboard shortcut */\n ITEM_SHORTCUT: \"menu__item-shortcut\",\n /** Submenu indicator */\n SUBMENU_INDICATOR: \"menu__submenu-indicator\",\n /** Dense/compact variant */\n DENSE: \"menu--dense\",\n} as const;\n",
|
|
162
156
|
"// src/components/progress/index.ts\n\nexport { default } from \"./progress\";\nexport { ProgressConfig, ProgressComponent, ProgressShape } from \"./types\";\n",
|
|
163
157
|
"// src/components/radios/radios.ts\nimport { pipe } from \"../../core/compose\";\nimport { createBase, withElement } from \"../../core/compose/component\";\nimport {\n withEvents,\n withDisabled,\n withLifecycle,\n} from \"../../core/compose/features\";\nimport { withRadio } from \"./radio\";\nimport { withAPI } from \"./api\";\nimport { RadiosConfig, RadiosComponent } from \"./types\";\nimport { createBaseConfig, getElementConfig, getApiConfig } from \"./config\";\n\n/**\n * Creates a new Radios component\n * @param {RadiosConfig} config - Radios configuration object\n * @returns {RadiosComponent} Radios component instance\n */\nconst createRadios = (config: RadiosConfig): RadiosComponent => {\n // Ensure name is provided\n if (!config.name) {\n config.name = `radios-${Math.random().toString(36).substring(2, 9)}`;\n }\n\n const baseConfig = createBaseConfig(config);\n\n try {\n // First add events support before radio functionality\n const radios = pipe(\n createBase,\n withEvents(), // Make sure this runs first to provide events\n withElement(getElementConfig(baseConfig)),\n withRadio(baseConfig),\n withDisabled(baseConfig),\n withLifecycle(),\n (comp) => withAPI(getApiConfig(comp))(comp)\n )(baseConfig);\n\n return radios as RadiosComponent;\n } catch (error) {\n console.error(\"Radios creation error:\", error);\n throw new Error(\n `Failed to create radios component: ${(error as Error).message}`\n );\n }\n};\n\nexport default createRadios;\n",
|
|
164
158
|
"// src/components/radios/radio.ts\nimport { RadiosConfig, RadioOptionConfig, RadioItem } from './types';\n\n/**\n * Creates a feature that adds radio functionality to a component\n * @param {RadiosConfig} config - Configuration with radio options\n * @returns {Function} Higher-order function that adds radio to component\n */\nexport const withRadio = (config: RadiosConfig) => (component) => {\n const radios: RadioItem[] = [];\n const radiosClass = component.getClass('radios');\n let selectedValue = config.value || '';\n \n // Add direction class\n component.element.classList.add(\n `${radiosClass}--${config.direction || 'vertical'}`\n );\n \n // Setup disabled state if needed\n if (config.disabled) {\n component.element.classList.add(`${radiosClass}--disabled`);\n }\n \n /**\n * Creates a radio item DOM structure\n * @param {RadioOptionConfig} option - Radio option configuration\n * @returns {RadioItem} Radio item object\n */\n const createRadioItem = (option: RadioOptionConfig): RadioItem => {\n // Create container\n const radioContainer = document.createElement('div');\n radioContainer.classList.add(`${radiosClass}-item`);\n \n // Create input\n const input = document.createElement('input');\n input.type = 'radio';\n input.name = config.name;\n input.value = option.value;\n input.classList.add(`${radiosClass}-input`);\n \n // Set checked state if value matches\n if (selectedValue === option.value) {\n input.checked = true;\n }\n \n // Set disabled state if needed\n if (config.disabled || option.disabled) {\n input.disabled = true;\n radioContainer.classList.add(`${radiosClass}-item--disabled`);\n }\n \n // Create label\n const label = document.createElement('label');\n label.classList.add(`${radiosClass}-label`);\n \n // Create a container for the radio visual\n const radioControl = document.createElement('span');\n radioControl.classList.add(`${radiosClass}-control`);\n \n // Create the radio circle\n const radioCircle = document.createElement('span');\n radioCircle.classList.add(`${radiosClass}-circle`);\n \n // Add ripple container if ripple is enabled\n if (config.ripple !== false) {\n const rippleContainer = document.createElement('span');\n rippleContainer.classList.add(`${radiosClass}-ripple`);\n radioControl.appendChild(rippleContainer);\n }\n \n // Add circle to control\n radioControl.appendChild(radioCircle);\n \n // Create text span\n const textSpan = document.createElement('span');\n textSpan.classList.add(`${radiosClass}-text`);\n textSpan.textContent = option.label;\n \n // Set label position\n if (option.labelBefore) {\n label.classList.add(`${radiosClass}-label--before`);\n label.appendChild(textSpan);\n label.appendChild(radioControl);\n } else {\n label.appendChild(radioControl);\n label.appendChild(textSpan);\n }\n \n // Setup ID for label-input connection\n const inputId = `${radiosClass}-${option.value}-${Math.random().toString(36).substring(2, 9)}`;\n input.id = inputId;\n label.htmlFor = inputId;\n \n // Add elements to container\n radioContainer.appendChild(input);\n radioContainer.appendChild(label);\n \n // Add change event listener\n const handleChange = (e) => {\n if (input.checked) {\n selectedValue = option.value;\n \n // Update other radio inputs\n radios.forEach(radio => {\n if (radio.input !== input) {\n radio.input.checked = false;\n }\n });\n \n // Safely emit change event if events exist\n if (component.events && typeof component.events.emit === 'function') {\n component.events.emit('change', {\n value: option.value,\n originalEvent: e,\n option\n });\n } else if (typeof component.on === 'function') {\n // Fallback to trigger handlers directly if they were registered with on()\n const changeEvent = new CustomEvent('change', {\n detail: {\n value: option.value,\n originalEvent: e,\n option\n }\n });\n component.element.dispatchEvent(changeEvent);\n }\n }\n };\n \n input.addEventListener('change', handleChange);\n \n // Return radio item\n return {\n element: radioContainer,\n input,\n label,\n config: option,\n destroy: () => {\n input.removeEventListener('change', handleChange);\n if (radioContainer.parentNode) {\n radioContainer.parentNode.removeChild(radioContainer);\n }\n }\n };\n };\n \n /**\n * Adds a radio option to the radios component\n * @param {RadioOptionConfig} option - Radio option configuration\n * @returns {Component} The component for chaining\n */\n const addOption = (option: RadioOptionConfig) => {\n // Create radio item\n const radioItem = createRadioItem(option);\n \n // Add to DOM\n component.element.appendChild(radioItem.element);\n \n // Add to radios array\n radios.push(radioItem);\n \n return component;\n };\n \n /**\n * Removes a radio option from the radios component\n * @param {string} value - Value of the radio to remove\n * @returns {Component} The component for chaining\n */\n const removeOption = (value: string) => {\n const index = radios.findIndex(radio => radio.config.value === value);\n \n if (index !== -1) {\n // Get radio item\n const radioItem = radios[index];\n \n // Remove from DOM and cleanup\n radioItem.destroy();\n \n // Remove from array\n radios.splice(index, 1);\n \n // If we removed the selected value, reset the selection\n if (selectedValue === value) {\n selectedValue = '';\n }\n }\n \n return component;\n };\n \n // Initialize radios from config\n if (config.options && Array.isArray(config.options)) {\n config.options.forEach(option => addOption(option));\n }\n \n // Create events object if it doesn't exist\n if (!component.events) {\n component.events = {\n on: (event, handler) => {\n component.element.addEventListener(event, (e) => handler(e.detail));\n },\n off: (event, handler) => {\n component.element.removeEventListener(event, handler);\n },\n emit: (event, data) => {\n const customEvent = new CustomEvent(event, { detail: data });\n component.element.dispatchEvent(customEvent);\n }\n };\n }\n \n // Return enhanced component\n return {\n ...component,\n radios,\n \n getValue: () => selectedValue,\n \n setValue: (value: string) => {\n selectedValue = value;\n \n radios.forEach(radio => {\n radio.input.checked = radio.config.value === value;\n });\n \n return component;\n },\n \n getSelected: () => {\n const selected = radios.find(radio => radio.config.value === selectedValue);\n return selected ? selected.config : null;\n },\n \n addOption,\n removeOption,\n \n enable: () => {\n component.element.classList.remove(`${radiosClass}--disabled`);\n \n radios.forEach(radio => {\n radio.input.disabled = radio.config.disabled || false;\n if (!radio.config.disabled) {\n radio.element.classList.remove(`${radiosClass}-item--disabled`);\n }\n });\n \n return component;\n },\n \n disable: () => {\n component.element.classList.add(`${radiosClass}--disabled`);\n \n radios.forEach(radio => {\n radio.input.disabled = true;\n radio.element.classList.add(`${radiosClass}-item--disabled`);\n });\n \n return component;\n },\n \n enableOption: (value: string) => {\n const radio = radios.find(r => r.config.value === value);\n \n if (radio) {\n radio.config.disabled = false;\n radio.input.disabled = component.element.classList.contains(`${radiosClass}--disabled`);\n \n if (!radio.input.disabled) {\n radio.element.classList.remove(`${radiosClass}-item--disabled`);\n }\n }\n \n return component;\n },\n \n disableOption: (value: string) => {\n const radio = radios.find(r => r.config.value === value);\n \n if (radio) {\n radio.config.disabled = true;\n radio.input.disabled = true;\n radio.element.classList.add(`${radiosClass}-item--disabled`);\n }\n \n return component;\n }\n };\n};\n\nexport default withRadio;",
|
|
@@ -208,12 +202,12 @@
|
|
|
208
202
|
"// src/components/slider/constants.ts\n\n/**\n * Available slider color variants\n * @category Components\n */\nexport const SLIDER_COLORS = {\n /** Primary color variant */\n PRIMARY: 'primary',\n /** Secondary color variant */\n SECONDARY: 'secondary',\n /** Tertiary color variant */\n TERTIARY: 'tertiary',\n /** Error color variant */\n ERROR: 'error'\n} as const;\n\n/**\n * Available slider size variants\n * @category Components\n */\nexport const SLIDER_SIZES = {\n /** Extra small size (default) - 16px track height */\n XS: 16,\n /** Small size - 24px track height */\n S: 24,\n /** Medium size - 40px track height */\n M: 40,\n /** Large size - 56px track height */\n L: 56,\n /** Extra large size - 96px track height */\n XL: 80\n} as const;\n\n/**\n * Slider component size type\n * @category Components\n */\nexport type SliderSize = keyof typeof SLIDER_SIZES | number;\n\n/**\n * Slider component measurements\n * @category Components\n */\nexport const SLIDER_MEASUREMENTS = {\n /** Handle size in pixels */\n HANDLE_SIZE: 16,\n /** Handle height for XS and S sizes in pixels */\n SMALL_HANDLE_HEIGHT: 48,\n /** Handle height offset for M, L, XL sizes (added to track height) */\n HANDLE_HEIGHT_OFFSET: 16,\n /** Minimum container height in pixels */\n MIN_HEIGHT: 40,\n /** Track border radius in pixels */\n TRACK_RADIUS: 3,\n /** External track radius for XS and S sizes in pixels */\n SMALL_TRACK_EXTERNAL_RADIUS: 10,\n /** External track radius ratio for M, L, XL sizes (multiplied by track height) */\n LARGE_TRACK_RADIUS_RATIO: 0.35,\n /** Tick size in pixels */\n TICK_SIZE: 4,\n /** Dot size in pixels */\n DOT_SIZE: 4,\n /** Handle gap pixels */\n HANDLE_GAP: 8,\n /** Handle gap reduction when pressed in pixels */\n HANDLE_GAP_PRESSED_REDUCTION: 2,\n /** Center gap pixels for centered sliders */\n CENTER_GAP: 4,\n /** Edge padding in pixels */\n EDGE_PADDING: 7\n} as const;\n\n/**\n * Available slider events\n * @category Components\n */\nexport const SLIDER_EVENTS = {\n /** Fired when slider value changes and interaction completes */\n CHANGE: 'change',\n /** Fired during dragging as value changes */\n INPUT: 'input',\n /** Fired when slider receives focus */\n FOCUS: 'focus',\n /** Fired when slider loses focus */\n BLUR: 'blur',\n /** Fired when interaction starts */\n START: 'start',\n /** Fired when interaction ends */\n END: 'end'\n} as const;\n\n/**\n * Position options for slider label and icon\n * @category Components\n */\nexport const SLIDER_POSITIONS = {\n /** Position at the start */\n START: 'start',\n /** Position at the end */\n END: 'end'\n} as const;\n\n/**\n * Default slider configuration values\n * @category Components\n */\nexport const SLIDER_DEFAULTS = {\n /** Minimum value */\n MIN: 0,\n /** Maximum value */\n MAX: 100,\n /** Starting value */\n VALUE: 0,\n /** Step increment size */\n STEP: 1,\n /** Whether slider is disabled */\n DISABLED: false,\n /** Default color variant */\n COLOR: SLIDER_COLORS.PRIMARY,\n /** Default size variant */\n SIZE: 'XS',\n /** Whether to show tick marks */\n TICKS: false,\n /** Whether to show value while dragging */\n SHOW_VALUE: true,\n /** Whether to snap to steps during dragging */\n SNAP_TO_STEPS: true,\n /** Whether slider is a range slider (two handles) */\n RANGE: false,\n /** Whether slider is a centered slider (active track from center) */\n CENTERED: false,\n /** Default icon position */\n ICON_POSITION: SLIDER_POSITIONS.START,\n /** Default label position */\n LABEL_POSITION: SLIDER_POSITIONS.START\n} as const;\n\n/**\n * CSS class names used by the slider component\n * @category Components\n */\nexport const SLIDER_CLASSES = {\n /** Root element class */\n ROOT: 'slider',\n /** Container for slider track and handles */\n CONTAINER: 'slider__container',\n /** Filled track portion class */\n FILL: 'slider__fill',\n /** Handle element class */\n HANDLE: 'slider__handle',\n /** Second handle element class (for range slider) */\n HANDLE_SECOND: 'slider__handle--second',\n /** Tick marks container class */\n LABEL: 'slider__label',\n /** Value display class */\n VALUE: 'slider__value',\n /** Icon container class */\n ICON: 'slider__icon',\n /** Disabled state class */\n DISABLED: 'slider--disabled',\n /** Focused state class */\n FOCUSED: 'slider--focused',\n /** Dragging state class */\n DRAGGING: 'slider--dragging',\n /** Range slider variant class */\n RANGE: 'slider--range',\n /** Primary color variant class */\n PRIMARY: 'slider--primary',\n /** Secondary color variant class */\n SECONDARY: 'slider--secondary',\n /** Tertiary color variant class */\n TERTIARY: 'slider--tertiary',\n /** Error color variant class */\n ERROR: 'slider--error'\n} as const;",
|
|
209
203
|
"// src/components/slider/features/states.ts\nimport { SLIDER_COLORS, SliderColor } from \"../types\";\nimport { SLIDER_SIZES, SliderSize } from \"../constants\";\nimport { SliderConfig } from \"../types\";\n\n/**\n * Add state management features to slider component\n * Combines appearance and disabled functionality into a single feature\n *\n * @param config Slider configuration\n * @returns Component enhancer with state management features\n */\nexport const withStates = (config: SliderConfig) => (component) => {\n // Track initial disabled state\n const isDisabled = config.disabled === true;\n\n // Apply initial disabled state if needed\n if (isDisabled) {\n setTimeout(() => {\n disableComponent();\n }, 0);\n }\n\n /**\n * Disables the component\n */\n function disableComponent() {\n component.element.classList.add(\n `${component.getClass(\"slider\")}--disabled`\n );\n component.element.setAttribute(\"aria-disabled\", \"true\");\n\n // Ensure handles cannot receive focus when disabled\n if (component.structure?.handle) {\n component.structure.handle.tabIndex = -1;\n component.structure.handle.setAttribute(\"aria-disabled\", \"true\");\n }\n\n if (config.range && component.structure?.secondHandle) {\n component.structure.secondHandle.tabIndex = -1;\n component.structure.secondHandle.setAttribute(\"aria-disabled\", \"true\");\n }\n\n // Redraw canvas with disabled colors\n if (component.drawCanvas) {\n component.drawCanvas();\n }\n }\n\n /**\n * Enables the component\n */\n function enableComponent() {\n component.element.classList.remove(\n `${component.getClass(\"slider\")}--disabled`\n );\n component.element.setAttribute(\"aria-disabled\", \"false\");\n\n // Re-enable focus on handles\n if (component.structure?.handle) {\n component.structure.handle.tabIndex = 0;\n component.structure.handle.setAttribute(\"aria-disabled\", \"false\");\n }\n\n if (config.range && component.structure?.secondHandle) {\n component.structure.secondHandle.tabIndex = 0;\n component.structure.secondHandle.setAttribute(\"aria-disabled\", \"false\");\n }\n\n // Redraw canvas with enabled colors\n if (component.drawCanvas) {\n component.drawCanvas();\n }\n }\n\n /**\n * Gets the active color class\n */\n function getActiveColor() {\n return (\n Object.values(SLIDER_COLORS).find((colorName) =>\n component.element.classList.contains(\n `${component.getClass(\"slider\")}--${colorName}`\n )\n ) || SLIDER_COLORS.PRIMARY\n );\n }\n\n /**\n * Gets the active size class\n */\n function getActiveSize() {\n // Check for size class names on the element\n const sizeKeys = Object.keys(SLIDER_SIZES) as Array<\n keyof typeof SLIDER_SIZES\n >;\n const foundKey = sizeKeys.find((sizeKey) =>\n component.element.classList.contains(\n `${component.getClass(\"slider\")}--${sizeKey.toLowerCase()}`\n )\n );\n return foundKey || \"XS\"; // Default to 'XS' (extra small)\n }\n\n // Return enhanced component\n return {\n ...component,\n\n // Disabled state management\n disabled: {\n /**\n * Enables the component\n * @returns Disabled manager for chaining\n */\n enable() {\n enableComponent();\n return this;\n },\n\n /**\n * Disables the component\n * @returns Disabled manager for chaining\n */\n disable() {\n disableComponent();\n return this;\n },\n\n /**\n * Checks if component is disabled\n * @returns True if disabled\n */\n isDisabled() {\n return component.element.classList.contains(\n `${component.getClass(\"slider\")}--disabled`\n );\n },\n },\n\n // Appearance management\n appearance: {\n /**\n * Sets slider color\n * @param color Color variant\n * @returns Appearance manager for chaining\n */\n setColor(color: SliderColor) {\n // Remove existing color classes\n Object.values(SLIDER_COLORS).forEach((colorName) => {\n component.element.classList.remove(\n `${component.getClass(\"slider\")}--${colorName}`\n );\n });\n\n // Add new color class if not primary (default)\n if (color !== SLIDER_COLORS.PRIMARY) {\n component.element.classList.add(\n `${component.getClass(\"slider\")}--${color}`\n );\n }\n\n return this;\n },\n\n /**\n * Gets slider color\n * @returns Current color name\n */\n getColor() {\n return getActiveColor();\n },\n\n /**\n * Sets slider size\n * @param size Size variant\n * @returns Appearance manager for chaining\n */\n setSize(size: SliderSize) {\n // Remove existing size classes\n const sizeKeys = Object.keys(SLIDER_SIZES) as Array<\n keyof typeof SLIDER_SIZES\n >;\n sizeKeys.forEach((sizeKey) => {\n component.element.classList.remove(\n `${component.getClass(\"slider\")}--${sizeKey.toLowerCase()}`\n );\n });\n\n // Determine the size key to use\n let sizeKey: string;\n if (typeof size === \"string\" && size in SLIDER_SIZES) {\n sizeKey = size;\n } else if (typeof size === \"number\") {\n // Find the key that matches this value\n const entry = Object.entries(SLIDER_SIZES).find(\n ([, value]) => value === size\n );\n sizeKey = entry ? entry[0] : \"XS\";\n } else {\n sizeKey = \"XS\"; // Default\n }\n\n // Add new size class\n component.element.classList.add(\n `${component.getClass(\"slider\")}--${sizeKey.toLowerCase()}`\n );\n\n return this;\n },\n\n /**\n * Gets slider size\n * @returns Current size name\n */\n getSize() {\n return getActiveSize();\n },\n\n /**\n * Shows or hides tick marks\n * @param show Whether to show ticks\n * @returns Appearance manager for chaining\n */\n showTicks(show: boolean) {\n config.ticks = show;\n\n // Regenerate ticks if slider is initialized\n if (component.slider) {\n component.slider.regenerateTicks();\n }\n\n return this;\n },\n\n /**\n * Shows or hides current value bubble during interaction\n * @param show Whether to show value bubble\n * @returns Appearance manager for chaining\n */\n showCurrentValue(show: boolean) {\n config.showValue = show;\n return this;\n },\n },\n };\n};\n",
|
|
210
204
|
"// src/components/slider/features/handlers.ts\nimport { SLIDER_EVENTS } from \"../types\";\nimport { SliderConfig } from \"../types\";\n\n/**\n * Create consolidated event handlers for slider component (mouse, touch, keyboard)\n *\n * @param config Slider configuration\n * @param state Slider state object\n * @param uiRenderer UI renderer interface from controller\n * @param eventHelpers Event helper methods\n * @returns Event handlers for all slider interactions\n */\nexport const createHandlers = (\n config: SliderConfig,\n state,\n uiRenderer,\n eventHelpers,\n) => {\n // Get required elements from structure (with fallbacks)\n // Check both direct component properties (from withDom) and components object (legacy)\n const components = state.component?.components || {};\n const component = state.component || {};\n\n // Extract needed components from both locations for backward compatibility\n const container = component.container || components.container || null;\n const handle = component.handle || components.handle || null;\n const valueBubble = component.valueBubble || components.valueBubble || null;\n const secondHandle =\n component.secondHandle || components.secondHandle || null;\n const secondValueBubble =\n component.secondValueBubble || components.secondValueBubble || null;\n\n // Get required helper methods (with fallbacks)\n const {\n getValueFromPosition = () => 0,\n roundToStep = (value) => value,\n clamp = (value) => value,\n showValueBubble = () => {},\n render = () => {},\n } = uiRenderer;\n\n const { triggerEvent = () => ({ defaultPrevented: false }) } = eventHelpers;\n\n // Track whether a real drag has started\n let hasActualDragStarted = false;\n let initialX = 0;\n const DRAG_THRESHOLD = 3;\n\n // Last focused handle tracker for keyboard navigation\n let lastFocusedHandle = null;\n\n // Bubble management\n const clearBubbleHideTimer = () => {\n if (state.valueHideTimer) {\n clearTimeout(state.valueHideTimer);\n state.valueHideTimer = null;\n }\n };\n\n const hideAllBubbles = () => {\n clearBubbleHideTimer();\n if (valueBubble) showValueBubble(valueBubble, false);\n if (secondValueBubble) showValueBubble(secondValueBubble, false);\n };\n\n const showActiveBubble = (bubble) => {\n hideAllBubbles();\n if (bubble && config.showValue) showValueBubble(bubble, true);\n };\n\n const hideActiveBubble = (bubble, delay = 0) => {\n clearBubbleHideTimer();\n if (!bubble || !config.showValue) return;\n\n if (delay > 0) {\n state.valueHideTimer = setTimeout(() => {\n showValueBubble(bubble, false);\n }, delay);\n } else {\n showValueBubble(bubble, false);\n }\n };\n\n // Focus management\n const clearKeyboardFocus = () => {\n // Clear local focus indicators\n if (handle)\n handle.classList.remove(\n `${state.component.getClass(\"slider-handle\")}--focused`,\n );\n if (secondHandle)\n secondHandle.classList.remove(\n `${state.component.getClass(\"slider-handle\")}--focused`,\n );\n\n // Clear global focus indicators\n try {\n const focusClass = state.component.getClass(\"slider-handle--focused\");\n document.querySelectorAll(`.${focusClass}`).forEach((el) => {\n el.classList.remove(focusClass);\n });\n\n if (\n document.activeElement?.classList.contains(\n state.component.getClass(\"slider-handle\"),\n )\n ) {\n (document.activeElement as HTMLElement).blur();\n }\n } catch (error) {\n console.warn(\"Error clearing keyboard focus:\", error);\n }\n };\n\n /**\n * Handle mouse/touch down on a handle\n */\n const handleHandleMouseDown = (e, isSecondHandle = false) => {\n // Check if disabled\n if (\n !state.component ||\n (state.component.disabled && state.component.disabled.isDisabled())\n ) {\n return;\n }\n\n // Only preventDefault for mouse events to allow passive touchstart\n if (e.type === \"mousedown\") {\n e.preventDefault();\n }\n e.stopPropagation();\n\n hideAllBubbles();\n clearKeyboardFocus();\n\n // Capture initial position\n initialX = e.type.includes(\"touch\") ? e.touches[0].clientX : e.clientX;\n\n // Setup drag state\n state.dragging = false;\n state.pressed = true; // Set pressed state immediately\n hasActualDragStarted = false;\n state.activeHandle = isSecondHandle ? \"second\" : \"first\"; // Track which handle\n state.activeBubble = isSecondHandle ? secondValueBubble : valueBubble;\n\n // Show bubble immediately\n showActiveBubble(state.activeBubble);\n\n // Add global event listeners\n document.addEventListener(\"mousemove\", handleMouseMove);\n document.addEventListener(\"mouseup\", handleMouseUp);\n document.addEventListener(\"touchmove\", handleMouseMove, { passive: false });\n document.addEventListener(\"touchend\", handleMouseUp);\n\n render();\n triggerEvent(SLIDER_EVENTS.START, e);\n };\n\n /**\n * Handle mouse/touch down on the track\n */\n const handleTrackMouseDown = (e) => {\n // Check if disabled\n if (\n !state.component ||\n (state.component.disabled && state.component.disabled.isDisabled()) ||\n !container\n ) {\n return;\n }\n\n // Only preventDefault for mouse events to allow passive touchstart\n if (e.type === \"mousedown\") {\n e.preventDefault();\n }\n hideAllBubbles();\n clearKeyboardFocus();\n\n // Determine which handle to move\n let isSecondHandle = false;\n\n try {\n const position = e.type.includes(\"touch\")\n ? e.touches[0].clientX\n : e.clientX;\n\n // Calculate value at click position and apply constraints\n let newValue = getValueFromPosition(position);\n if (config.snapToSteps && state.step > 0)\n newValue = roundToStep(newValue);\n newValue = clamp(newValue, state.min, state.max);\n\n if (config.range && state.secondValue !== null) {\n // For range slider, move the closest handle\n const distToFirst = Math.abs(newValue - state.value);\n const distToSecond = Math.abs(newValue - state.secondValue);\n\n isSecondHandle = distToSecond < distToFirst;\n isSecondHandle\n ? (state.secondValue = newValue)\n : (state.value = newValue);\n } else {\n // Single handle slider - use setValue API for centered sliders to ensure animation\n if (\n config.centered &&\n state.component.slider &&\n state.component.slider.setValue\n ) {\n // Use the API method which handles previousValue tracking and animation\n state.component.slider.setValue(newValue, false); // false to not trigger event yet\n } else {\n // Regular slider - direct update\n state.value = newValue;\n }\n }\n\n // Update UI and trigger events\n render();\n triggerEvent(SLIDER_EVENTS.INPUT, e);\n } catch (error) {\n console.warn(\"Error handling track click:\", error);\n }\n\n // Set active elements\n state.activeHandle = isSecondHandle ? \"second\" : \"first\";\n state.activeBubble = isSecondHandle ? secondValueBubble : valueBubble;\n\n // Store the initial position\n initialX = e.type.includes(\"touch\") ? e.touches[0].clientX : e.clientX;\n\n // For centered sliders, delay starting drag to allow animation\n if (config.centered && !config.range) {\n // Show bubble\n showActiveBubble(state.activeBubble);\n\n // Add event listeners but don't start dragging yet\n document.addEventListener(\"mousemove\", handleMouseMove);\n document.addEventListener(\"mouseup\", handleMouseUp);\n document.addEventListener(\"touchmove\", handleMouseMove, {\n passive: false,\n });\n document.addEventListener(\"touchend\", handleMouseUp);\n\n // Don't set pressed state for track clicks\n state.pressed = false;\n\n triggerEvent(SLIDER_EVENTS.START, e);\n } else {\n // For non-centered sliders, start drag but don't set pressed since it's a track click\n state.dragging = false;\n state.pressed = false; // Don't set pressed for track clicks\n hasActualDragStarted = false;\n\n // Show bubble\n showActiveBubble(state.activeBubble);\n\n // Add event listeners\n document.addEventListener(\"mousemove\", handleMouseMove);\n document.addEventListener(\"mouseup\", handleMouseUp);\n document.addEventListener(\"touchmove\", handleMouseMove, {\n passive: false,\n });\n document.addEventListener(\"touchend\", handleMouseUp);\n\n render();\n triggerEvent(SLIDER_EVENTS.START, e);\n }\n };\n\n /**\n * Handle mouse/touch move during drag\n */\n const handleMouseMove = (e) => {\n if (!state.activeHandle || !container) return;\n e.preventDefault();\n\n try {\n // Get current position\n const currentX = e.type.includes(\"touch\")\n ? e.touches[0].clientX\n : e.clientX;\n\n // Determine if we've started a real drag\n if (\n !hasActualDragStarted &&\n Math.abs(currentX - initialX) >= DRAG_THRESHOLD\n ) {\n hasActualDragStarted = true;\n state.dragging = true;\n state.component.element.classList.add(\n `${state.component.getClass(\"slider\")}--dragging`,\n );\n }\n\n // Calculate new value and apply constraints\n let newValue = getValueFromPosition(currentX);\n if (config.snapToSteps && state.step > 0)\n newValue = roundToStep(newValue);\n newValue = clamp(newValue, state.min, state.max);\n\n // Handle crossing points and handle swapping for range sliders\n const isSecondHandle = state.activeHandle === \"second\";\n\n if (config.range && state.secondValue !== null) {\n if (isSecondHandle) {\n // Second handle is active\n if (newValue >= state.value) {\n state.secondValue = newValue;\n } else {\n // Handles are crossed, swap them\n hideActiveBubble(state.activeBubble, 0);\n state.secondValue = state.value;\n state.value = newValue;\n state.activeHandle = \"first\";\n state.activeBubble = valueBubble;\n showActiveBubble(state.activeBubble);\n }\n } else {\n // First handle is active\n if (newValue <= state.secondValue) {\n state.value = newValue;\n } else {\n // Handles are crossed, swap them\n hideActiveBubble(state.activeBubble, 0);\n state.value = state.secondValue;\n state.secondValue = newValue;\n state.activeHandle = \"second\";\n state.activeBubble = secondValueBubble;\n showActiveBubble(state.activeBubble);\n }\n }\n } else {\n // Regular slider - update previousValue for centered sliders\n if (config.centered) {\n state.previousValue = state.value;\n }\n state.value = newValue;\n }\n\n render();\n triggerEvent(SLIDER_EVENTS.INPUT, e);\n } catch (error) {\n console.warn(\"Error during slider drag:\", error);\n }\n };\n\n /**\n * Handle mouse/touch up after drag\n */\n const handleMouseUp = (e) => {\n if (!state.activeHandle) return;\n e.preventDefault();\n\n // Reset drag states\n state.dragging = false;\n state.pressed = false; // Clear pressed state\n hasActualDragStarted = false;\n state.component.element.classList.remove(\n `${state.component.getClass(\"slider\")}--dragging`,\n );\n\n // Hide bubble with delay\n hideActiveBubble(state.activeBubble, 1000);\n\n // Remove global event listeners\n document.removeEventListener(\"mousemove\", handleMouseMove);\n document.removeEventListener(\"mouseup\", handleMouseUp);\n document.removeEventListener(\"touchmove\", handleMouseMove);\n document.removeEventListener(\"touchend\", handleMouseUp);\n\n // Reset active handle and update UI\n state.activeHandle = null;\n render();\n\n // Trigger events\n triggerEvent(SLIDER_EVENTS.CHANGE, e);\n triggerEvent(SLIDER_EVENTS.END, e);\n };\n\n /**\n * Handle keyboard input\n */\n const handleKeyDown = (e, isSecondHandle = false) => {\n if (state.component.disabled && state.component.disabled.isDisabled())\n return;\n\n const step = state.step || 1;\n let newValue = isSecondHandle ? state.secondValue : state.value;\n const stepSize = e.shiftKey ? step * 10 : step;\n\n // Handle tab key separately\n if (e.key === \"Tab\") return;\n\n let valueChanged = false;\n\n switch (e.key) {\n case \"ArrowRight\":\n case \"ArrowUp\":\n e.preventDefault();\n newValue = Math.min(newValue + stepSize, state.max);\n valueChanged = true;\n break;\n\n case \"ArrowLeft\":\n case \"ArrowDown\":\n e.preventDefault();\n newValue = Math.max(newValue - stepSize, state.min);\n valueChanged = true;\n break;\n\n case \"Home\":\n e.preventDefault();\n newValue = state.min;\n valueChanged = true;\n break;\n\n case \"End\":\n e.preventDefault();\n newValue = state.max;\n valueChanged = true;\n break;\n\n case \"PageUp\":\n e.preventDefault();\n newValue = Math.min(newValue + step * 10, state.max);\n valueChanged = true;\n break;\n\n case \"PageDown\":\n e.preventDefault();\n newValue = Math.max(newValue - step * 10, state.min);\n valueChanged = true;\n break;\n\n default:\n return; // Exit if not a handled key\n }\n\n if (!valueChanged) return;\n\n // Update active bubble reference\n state.activeBubble = isSecondHandle ? secondValueBubble : valueBubble;\n\n // Show value bubble during keyboard interaction\n showActiveBubble(state.activeBubble);\n\n // Update the value\n if (isSecondHandle) {\n state.secondValue = newValue;\n } else {\n // Track previousValue for centered sliders\n if (config.centered) {\n state.previousValue = state.value;\n }\n state.value = newValue;\n }\n\n // Update UI and trigger events\n render();\n triggerEvent(SLIDER_EVENTS.INPUT, e);\n triggerEvent(SLIDER_EVENTS.CHANGE, e);\n };\n\n /**\n * Handle focus events\n */\n const handleFocus = (e, isSecondHandle = false) => {\n if (state.component.disabled && state.component.disabled.isDisabled())\n return;\n\n // Track the currently focused handle\n const currentHandle = isSecondHandle ? secondHandle : handle;\n\n // Hide previous bubble if switching between handles\n if (lastFocusedHandle && lastFocusedHandle !== currentHandle) {\n hideAllBubbles();\n }\n\n lastFocusedHandle = currentHandle;\n\n // Add focus class and show bubble\n currentHandle.classList.add(\n `${state.component.getClass(\"slider-handle\")}--focused`,\n );\n showActiveBubble(isSecondHandle ? secondValueBubble : valueBubble);\n state.activeBubble = isSecondHandle ? secondValueBubble : valueBubble;\n\n triggerEvent(SLIDER_EVENTS.FOCUS, e);\n };\n\n /**\n * Handle blur events\n */\n const handleBlur = (e, isSecondHandle = false) => {\n const handleElement = isSecondHandle ? secondHandle : handle;\n handleElement.classList.remove(\n `${state.component.getClass(\"slider-handle\")}--focused`,\n );\n\n // Only hide bubble if not tabbing to another handle\n const relatedTarget = e.relatedTarget;\n const otherHandle = isSecondHandle ? handle : secondHandle;\n\n if (!relatedTarget || relatedTarget !== otherHandle) {\n hideActiveBubble(isSecondHandle ? secondValueBubble : valueBubble, 200);\n }\n\n triggerEvent(SLIDER_EVENTS.BLUR, e);\n };\n\n /**\n * Set up all event listeners\n */\n const setupEventListeners = () => {\n if (!state.component || !handle) {\n console.warn(\n \"Cannot set up event listeners: missing component or handle\",\n );\n return;\n }\n\n // Use container for track events instead of track for better UX\n container.addEventListener(\"mousedown\", handleTrackMouseDown);\n container.addEventListener(\"touchstart\", handleTrackMouseDown, {\n passive: true,\n });\n\n // Handle events\n handle.addEventListener(\"mousedown\", (e) =>\n handleHandleMouseDown(e, false),\n );\n handle.addEventListener(\n \"touchstart\",\n (e) => handleHandleMouseDown(e, false),\n { passive: true },\n );\n handle.addEventListener(\"keydown\", (e) => handleKeyDown(e, false));\n handle.addEventListener(\"focus\", (e) => handleFocus(e, false));\n handle.addEventListener(\"blur\", (e) => handleBlur(e, false));\n\n // Second handle events for range slider\n if (config.range && secondHandle) {\n secondHandle.addEventListener(\"mousedown\", (e) =>\n handleHandleMouseDown(e, true),\n );\n secondHandle.addEventListener(\n \"touchstart\",\n (e) => handleHandleMouseDown(e, true),\n { passive: true },\n );\n secondHandle.addEventListener(\"keydown\", (e) => handleKeyDown(e, true));\n secondHandle.addEventListener(\"focus\", (e) => handleFocus(e, true));\n secondHandle.addEventListener(\"blur\", (e) => handleBlur(e, true));\n }\n };\n\n /**\n * Clean up all event listeners\n */\n const cleanupEventListeners = () => {\n if (!state.component) return;\n\n // Clean up container listeners\n if (container) {\n container.removeEventListener(\"mousedown\", handleTrackMouseDown);\n container.removeEventListener(\"touchstart\", handleTrackMouseDown);\n }\n\n // Clean up handle listeners\n if (handle) {\n handle.removeEventListener(\"mousedown\", (e) =>\n handleHandleMouseDown(e, false),\n );\n handle.removeEventListener(\"touchstart\", (e) =>\n handleHandleMouseDown(e, false),\n );\n handle.removeEventListener(\"keydown\", (e) => handleKeyDown(e, false));\n handle.removeEventListener(\"focus\", (e) => handleFocus(e, false));\n handle.removeEventListener(\"blur\", (e) => handleBlur(e, false));\n }\n\n // Clean up second handle listeners\n if (config.range && secondHandle) {\n secondHandle.removeEventListener(\"mousedown\", (e) =>\n handleHandleMouseDown(e, true),\n );\n secondHandle.removeEventListener(\"touchstart\", (e) =>\n handleHandleMouseDown(e, true),\n );\n secondHandle.removeEventListener(\"keydown\", (e) =>\n handleKeyDown(e, true),\n );\n secondHandle.removeEventListener(\"focus\", (e) => handleFocus(e, true));\n secondHandle.removeEventListener(\"blur\", (e) => handleBlur(e, true));\n }\n\n // Clean up document listeners\n document.removeEventListener(\"mousemove\", handleMouseMove);\n document.removeEventListener(\"mouseup\", handleMouseUp);\n document.removeEventListener(\"touchmove\", handleMouseMove);\n document.removeEventListener(\"touchend\", handleMouseUp);\n };\n\n // Return consolidated handlers\n return {\n // Mouse/Touch handlers\n handleHandleMouseDown,\n handleTrackMouseDown,\n handleMouseMove,\n handleMouseUp,\n\n // Keyboard handlers\n handleKeyDown,\n handleFocus,\n handleBlur,\n\n // Event management\n setupEventListeners,\n cleanupEventListeners,\n\n // Bubble management\n showActiveBubble,\n hideActiveBubble,\n hideAllBubbles,\n clearKeyboardFocus,\n };\n};\n",
|
|
211
|
-
"// src/components/slider/features/controller.ts\nimport { SLIDER_EVENTS } from \"../types\";\nimport { SliderConfig } from \"../types\";\nimport { SLIDER_MEASUREMENTS } from \"../constants\";\nimport { createHandlers } from \"./handlers\";\n\n/**\n * Add controller functionality to slider component\n * Manages state, events, user interactions, and UI rendering\n *\n * @param config Slider configuration\n * @returns Component enhancer with slider controller functionality\n */\nexport const withController = (config: SliderConfig) => (component) => {\n // Ensure component has required properties\n if (!component.element) {\n console.warn(\"Cannot initialize slider controller: missing element\");\n return component;\n }\n\n // Initialize state with current config\n const state = {\n component,\n value: config.value !== undefined ? config.value : 0,\n secondValue: config.secondValue !== undefined ? config.secondValue : null,\n min: config.min !== undefined ? config.min : 0,\n max: config.max !== undefined ? config.max : 100,\n step: config.step !== undefined ? config.step : 1,\n dragging: false,\n pressed: false, // Track if handle is pressed (mouse down)\n activeHandle: null, // Track which handle is active (null, 'first', 'second')\n activeBubble: null,\n valueHideTimer: null,\n };\n\n // Create event helpers\n const eventHelpers = {\n triggerEvent(eventName, originalEvent = null) {\n const eventData = {\n slider: state.component,\n value: state.value,\n secondValue: state.secondValue,\n originalEvent,\n preventDefault: () => {\n eventData.defaultPrevented = true;\n },\n defaultPrevented: false,\n };\n\n state.component.emit(eventName, eventData);\n return eventData;\n },\n };\n\n //=============================================================================\n // UI RENDERING FUNCTIONS\n //=============================================================================\n\n /**\n * Gets required components from state, safely handling missing components\n */\n const getComponents = () => {\n // Return empty object if component is missing\n if (!state.component) {\n return {};\n }\n\n // Get components from both direct properties (withDom) and components object (legacy)\n const components = state.component.components || {};\n const component = state.component;\n\n return {\n container: component.container || components.container,\n handle: component.handle || components.handle,\n valueBubble: component.valueBubble || components.valueBubble,\n secondHandle: component.secondHandle || components.secondHandle,\n secondValueBubble:\n component.secondValueBubble || components.secondValueBubble,\n // Include any other components that might exist\n ...components,\n };\n };\n\n /**\n * Calculates percentage position for a value\n * Maps from value space (min-max) to percentage space (0-100)\n */\n const getPercentage = (value) => {\n const range = state.max - state.min;\n return range === 0 ? 0 : ((value - state.min) / range) * 100;\n };\n\n /**\n * Gets track dimensions and constraints for positioning calculations\n * Handles edge constraints and padding for proper handle positioning\n */\n const getTrackDimensions = () => {\n const components = getComponents();\n const { handle, container } = components;\n\n if (!handle || !container) return null;\n\n try {\n const handleRect = handle.getBoundingClientRect();\n const containerRect = container.getBoundingClientRect();\n const handleSize = handleRect.width || SLIDER_MEASUREMENTS.HANDLE_SIZE;\n const trackSize = containerRect.width;\n\n // Use EDGE_PADDING for consistent edge constraints\n const edgeConstraint =\n (SLIDER_MEASUREMENTS.EDGE_PADDING / trackSize) * 100;\n const paddingPixels = state.activeHandle ? 6 : 8;\n const paddingPercent = (paddingPixels / trackSize) * 100;\n\n return { handleSize, trackSize, edgeConstraint, paddingPercent };\n } catch (error) {\n console.warn(\"Error calculating track dimensions:\", error);\n return {\n handleSize: SLIDER_MEASUREMENTS.HANDLE_SIZE,\n trackSize: 200,\n edgeConstraint: 3, // 6px / 200px * 100\n paddingPercent: 4,\n };\n }\n };\n\n /**\n * Maps value percentage to visual position with edge constraints\n * Ensures handles stay within the visible track area\n */\n const mapValueToVisualPercent = (valuePercent, trackSize = 200) => {\n // Calculate edge constraint using EDGE_PADDING\n const edgeConstraint = (SLIDER_MEASUREMENTS.EDGE_PADDING / trackSize) * 100;\n const minEdge = edgeConstraint;\n const maxEdge = 100 - edgeConstraint;\n const visualRange = maxEdge - minEdge;\n\n if (valuePercent <= 0) return minEdge;\n if (valuePercent >= 100) return maxEdge;\n return minEdge + (valuePercent / 100) * visualRange;\n };\n\n /**\n * Gets slider value from a position on the track\n * Maps from pixel position to slider value\n */\n const getValueFromPosition = (position) => {\n const components = getComponents();\n const { handle, container } = components;\n\n if (!handle || !container) return state.min;\n\n try {\n const containerRect = container.getBoundingClientRect();\n const range = state.max - state.min;\n\n // Use EDGE_PADDING for consistent edge constraints\n const leftEdge = containerRect.left + SLIDER_MEASUREMENTS.EDGE_PADDING;\n const rightEdge = containerRect.right - SLIDER_MEASUREMENTS.EDGE_PADDING;\n const effectiveWidth = rightEdge - leftEdge;\n\n const adjustedPosition = Math.max(\n leftEdge,\n Math.min(rightEdge, position)\n );\n const percentageFromLeft = (adjustedPosition - leftEdge) / effectiveWidth;\n\n return state.min + percentageFromLeft * range;\n } catch (error) {\n console.warn(\"Error calculating value from position:\", error);\n return state.min;\n }\n };\n\n /**\n * Rounds a value to the nearest step\n * Used for discrete sliders\n */\n const roundToStep = (value) => {\n const step = state.step;\n if (!step || step <= 0) return value;\n\n const steps = Math.round((value - state.min) / step);\n return state.min + steps * step;\n };\n\n /**\n * Clamps a value between min and max\n * Ensures values stay within valid range\n */\n const clamp = (value, min, max) => Math.min(Math.max(value, min), max);\n\n /**\n * Updates handle and bubble positions\n * Positions elements according to current state values\n */\n const updateHandlePositions = () => {\n const components = getComponents();\n const { handle, container, valueBubble, secondHandle, secondValueBubble } =\n components;\n\n if (!handle || !container) return;\n\n const dims = getTrackDimensions();\n if (!dims) return;\n\n const { trackSize } = dims;\n\n // Update main handle position\n const percent = getPercentage(state.value);\n const adjustedPercent = mapValueToVisualPercent(percent, trackSize);\n\n handle.style.left = `${adjustedPercent}%`;\n handle.style.transform = \"translate(-50%, -50%)\";\n\n if (valueBubble) {\n valueBubble.style.left = `${adjustedPercent}%`;\n valueBubble.style.transform = \"translateX(-50%)\";\n }\n\n // Update second handle if range slider\n if (config.range && secondHandle && state.secondValue !== null) {\n const secondPercent = getPercentage(state.secondValue);\n const adjustedSecondPercent = mapValueToVisualPercent(\n secondPercent,\n trackSize\n );\n\n secondHandle.style.left = `${adjustedSecondPercent}%`;\n secondHandle.style.transform = \"translate(-50%, -50%)\";\n\n if (secondValueBubble) {\n secondValueBubble.style.left = `${adjustedSecondPercent}%`;\n secondValueBubble.style.transform = \"translateX(-50%)\";\n }\n }\n\n // Update ARIA attributes\n if (handle) {\n handle.setAttribute(\"aria-valuenow\", String(state.value));\n }\n };\n\n /**\n * Updates value bubble content\n * Applies formatting to displayed values\n */\n const updateValueBubbles = () => {\n const components = getComponents();\n const { valueBubble, secondValueBubble } = components;\n\n if (!valueBubble) return;\n\n const formatter = config.valueFormatter || ((value) => value.toString());\n valueBubble.textContent = formatter(state.value);\n\n if (config.range && secondValueBubble && state.secondValue !== null) {\n secondValueBubble.textContent = formatter(state.secondValue);\n }\n };\n\n /**\n * Shows or hides value bubble\n * Controls visibility for value indicators\n */\n const showValueBubble = (bubbleElement, show) => {\n if (!bubbleElement || !config.showValue) return;\n\n const bubbleClass = state.component.getClass(\"slider-value\");\n bubbleElement.classList[show ? \"add\" : \"remove\"](`${bubbleClass}--visible`);\n };\n\n /**\n * Generates tick marks\n * NOTE: Ticks are now rendered via canvas, this just clears any DOM ticks\n */\n const generateTicks = () => {\n // Canvas handles tick rendering - no DOM manipulation needed\n };\n\n /**\n * Updates active state of tick marks\n * NOTE: Ticks are now rendered via canvas, so this is no longer needed\n */\n const updateTicks = () => {\n // Canvas handles tick rendering - no DOM manipulation needed\n };\n\n /**\n * Renders all UI elements to match current state\n * Central method for keeping UI in sync with state\n */\n const render = () => {\n try {\n updateHandlePositions();\n updateValueBubbles();\n\n // Trigger canvas redraw if available\n if (component.drawCanvas) {\n // Pass the current state directly to canvas\n component.drawCanvas(state);\n }\n } catch (error) {\n console.warn(\"Error rendering UI:\", error);\n }\n };\n\n // Create UI renderer interface for event handlers\n const uiRenderer = {\n getPercentage,\n getValueFromPosition,\n roundToStep,\n clamp,\n showValueBubble,\n updateUi: render, // For backward compatibility\n render,\n };\n\n // Create event handlers with our renderer\n const handlers = createHandlers(config, state, uiRenderer, eventHelpers);\n\n // Initialize slider controller\n const initController = () => {\n try {\n // Verify we have the necessary components\n const components = getComponents();\n\n if (!components.handle) {\n console.warn(\n \"Cannot initialize slider controller: missing required handle component\"\n );\n return;\n }\n\n // Set ARIA attributes\n component.element.setAttribute(\"aria-valuemin\", String(state.min));\n component.element.setAttribute(\"aria-valuemax\", String(state.max));\n component.element.setAttribute(\"aria-valuenow\", String(state.value));\n\n const { handle, secondHandle } = components;\n\n // Set handle attributes\n if (handle) {\n handle.setAttribute(\"aria-valuemin\", String(state.min));\n handle.setAttribute(\"aria-valuemax\", String(state.max));\n handle.setAttribute(\"aria-valuenow\", String(state.value));\n\n if (config.range && secondHandle && state.secondValue !== null) {\n secondHandle.setAttribute(\"aria-valuemin\", String(state.min));\n secondHandle.setAttribute(\"aria-valuemax\", String(state.max));\n secondHandle.setAttribute(\"aria-valuenow\", String(state.secondValue));\n }\n }\n\n // Setup event listeners\n handlers.setupEventListeners();\n\n // Initial UI update\n render();\n } catch (error) {\n console.error(\"Error initializing slider controller:\", error);\n }\n };\n\n // Register with lifecycle if available\n if (component.lifecycle) {\n const originalDestroy = component.lifecycle.destroy || (() => {});\n component.lifecycle.destroy = () => {\n handlers.cleanupEventListeners();\n originalDestroy();\n };\n }\n\n // Schedule initialization after current execution completes\n setTimeout(() => {\n initController();\n }, 0);\n\n // Return enhanced component\n return {\n ...component,\n // Provide controller API under 'slider' property for backward compatibility\n slider: {\n /**\n * Sets slider value\n * @param value New value\n * @param triggerEvent Whether to trigger change event\n * @returns Slider controller for chaining\n */\n setValue(value, triggerEvent = true) {\n const newValue = clamp(value, state.min, state.max);\n\n state.value = newValue;\n render();\n\n if (triggerEvent) {\n eventHelpers.triggerEvent(SLIDER_EVENTS.CHANGE);\n }\n\n return this;\n },\n\n /**\n * Gets slider value\n * @returns Current value\n */\n getValue() {\n return state.value;\n },\n\n /**\n * Sets secondary slider value (for range slider)\n * @param value New secondary value\n * @param triggerEvent Whether to trigger change event\n * @returns Slider controller for chaining\n */\n setSecondValue(value, triggerEvent = true) {\n if (!config.range) return this;\n\n const newValue = clamp(value, state.min, state.max);\n state.secondValue = newValue;\n render();\n\n if (triggerEvent) {\n eventHelpers.triggerEvent(SLIDER_EVENTS.CHANGE);\n }\n\n return this;\n },\n\n /**\n * Gets secondary slider value\n * @returns Current secondary value or null\n */\n getSecondValue() {\n return config.range ? state.secondValue : null;\n },\n\n /**\n * Sets slider minimum value\n * @param min New minimum value\n * @returns Slider controller for chaining\n */\n setMin(min) {\n state.min = min;\n\n // Update ARIA attributes if elements exist\n component.element.setAttribute(\"aria-valuemin\", String(min));\n const components = getComponents();\n if (components.handle) {\n components.handle.setAttribute(\"aria-valuemin\", String(min));\n }\n\n if (config.range && components.secondHandle) {\n components.secondHandle.setAttribute(\"aria-valuemin\", String(min));\n }\n\n // Clamp values to new min\n if (state.value < min) state.value = min;\n if (\n config.range &&\n state.secondValue !== null &&\n state.secondValue < min\n ) {\n state.secondValue = min;\n }\n\n // Regenerate ticks if needed\n if (config.ticks || config.tickLabels) {\n generateTicks();\n }\n\n render();\n return this;\n },\n\n /**\n * Gets slider minimum value\n * @returns Current minimum value\n */\n getMin() {\n return state.min;\n },\n\n /**\n * Sets slider maximum value\n * @param max New maximum value\n * @returns Slider controller for chaining\n */\n setMax(max) {\n state.max = max;\n\n // Update ARIA attributes if elements exist\n component.element.setAttribute(\"aria-valuemax\", String(max));\n const components = getComponents();\n if (components.handle) {\n components.handle.setAttribute(\"aria-valuemax\", String(max));\n }\n\n if (config.range && components.secondHandle) {\n components.secondHandle.setAttribute(\"aria-valuemax\", String(max));\n }\n\n // Clamp values to new max\n if (state.value > max) state.value = max;\n if (\n config.range &&\n state.secondValue !== null &&\n state.secondValue > max\n ) {\n state.secondValue = max;\n }\n\n // Regenerate ticks if needed\n if (config.ticks || config.tickLabels) {\n generateTicks();\n }\n\n render();\n return this;\n },\n\n /**\n * Gets slider maximum value\n * @returns Current maximum value\n */\n getMax() {\n return state.max;\n },\n\n /**\n * Sets slider step size\n * @param step New step size\n * @returns Slider controller for chaining\n */\n setStep(step) {\n state.step = step;\n\n // Add or remove discrete class\n component.element.classList[step > 0 ? \"add\" : \"remove\"](\n `${component.getClass(\"slider\")}--discrete`\n );\n\n // Regenerate ticks if needed\n if (config.ticks || config.tickLabels) {\n generateTicks();\n updateTicks();\n }\n\n return this;\n },\n\n /**\n * Gets slider step size\n * @returns Current step size\n */\n getStep() {\n return state.step;\n },\n\n /**\n * Regenerate tick marks and labels\n * NOTE: Canvas handles tick rendering, this just triggers a redraw\n * @returns Slider controller for chaining\n */\n regenerateTicks() {\n render(); // Canvas will redraw ticks based on current state\n return this;\n },\n\n /**\n * Update all UI elements\n * @returns Slider controller for chaining\n */\n updateUi() {\n render();\n return this;\n },\n },\n };\n};\n",
|
|
205
|
+
"// src/components/slider/features/controller.ts\nimport { SLIDER_EVENTS } from \"../types\";\nimport { SliderConfig } from \"../types\";\nimport { SLIDER_MEASUREMENTS } from \"../constants\";\nimport { createHandlers } from \"./handlers\";\n\n/**\n * Add controller functionality to slider component\n * Manages state, events, user interactions, and UI rendering\n *\n * @param config Slider configuration\n * @returns Component enhancer with slider controller functionality\n */\nexport const withController = (config: SliderConfig) => (component) => {\n // Ensure component has required properties\n if (!component.element) {\n console.warn(\"Cannot initialize slider controller: missing element\");\n return component;\n }\n\n // Initialize state with current config\n const state = {\n component,\n value: config.value !== undefined ? config.value : 0,\n secondValue: config.secondValue !== undefined ? config.secondValue : null,\n min: config.min !== undefined ? config.min : 0,\n max: config.max !== undefined ? config.max : 100,\n step: config.step !== undefined ? config.step : 1,\n dragging: false,\n pressed: false, // Track if handle is pressed (mouse down)\n activeHandle: null, // Track which handle is active (null, 'first', 'second')\n activeBubble: null,\n valueHideTimer: null,\n };\n\n // Create event helpers\n const eventHelpers = {\n triggerEvent(eventName, originalEvent = null) {\n const eventData = {\n slider: state.component,\n value: state.value,\n secondValue: state.secondValue,\n originalEvent,\n preventDefault: () => {\n eventData.defaultPrevented = true;\n },\n defaultPrevented: false,\n };\n\n state.component.emit(eventName, eventData);\n return eventData;\n },\n };\n\n //=============================================================================\n // UI RENDERING FUNCTIONS\n //=============================================================================\n\n /**\n * Gets required components from state, safely handling missing components\n */\n const getComponents = () => {\n // Return empty object if component is missing\n if (!state.component) {\n return {};\n }\n\n // Get components from both direct properties (withDom) and components object (legacy)\n const components = state.component.components || {};\n const component = state.component;\n\n return {\n container: component.container || components.container,\n handle: component.handle || components.handle,\n valueBubble: component.valueBubble || components.valueBubble,\n secondHandle: component.secondHandle || components.secondHandle,\n secondValueBubble:\n component.secondValueBubble || components.secondValueBubble,\n // Include any other components that might exist\n ...components,\n };\n };\n\n /**\n * Calculates percentage position for a value\n * Maps from value space (min-max) to percentage space (0-100)\n */\n const getPercentage = (value) => {\n const range = state.max - state.min;\n return range === 0 ? 0 : ((value - state.min) / range) * 100;\n };\n\n /**\n * Gets track dimensions and constraints for positioning calculations\n * Handles edge constraints and padding for proper handle positioning\n */\n const getTrackDimensions = () => {\n const components = getComponents();\n const { handle, container } = components;\n\n if (!handle || !container) return null;\n\n try {\n const handleRect = handle.getBoundingClientRect();\n const containerRect = container.getBoundingClientRect();\n const handleSize = handleRect.width || SLIDER_MEASUREMENTS.HANDLE_SIZE;\n const trackSize = containerRect.width;\n\n // Use EDGE_PADDING for consistent edge constraints\n const edgeConstraint =\n (SLIDER_MEASUREMENTS.EDGE_PADDING / trackSize) * 100;\n const paddingPixels = state.activeHandle ? 6 : 8;\n const paddingPercent = (paddingPixels / trackSize) * 100;\n\n return { handleSize, trackSize, edgeConstraint, paddingPercent };\n } catch (error) {\n console.warn(\"Error calculating track dimensions:\", error);\n return {\n handleSize: SLIDER_MEASUREMENTS.HANDLE_SIZE,\n trackSize: 200,\n edgeConstraint: 3, // 6px / 200px * 100\n paddingPercent: 4,\n };\n }\n };\n\n /**\n * Maps value percentage to visual position with edge constraints\n * Ensures handles stay within the visible track area\n */\n const mapValueToVisualPercent = (valuePercent, trackSize = 200) => {\n // Calculate edge constraint using EDGE_PADDING\n const edgeConstraint = (SLIDER_MEASUREMENTS.EDGE_PADDING / trackSize) * 100;\n const minEdge = edgeConstraint;\n const maxEdge = 100 - edgeConstraint;\n const visualRange = maxEdge - minEdge;\n\n if (valuePercent <= 0) return minEdge;\n if (valuePercent >= 100) return maxEdge;\n return minEdge + (valuePercent / 100) * visualRange;\n };\n\n /**\n * Gets slider value from a position on the track\n * Maps from pixel position to slider value\n */\n const getValueFromPosition = (position) => {\n const components = getComponents();\n const { handle, container } = components;\n\n if (!handle || !container) return state.min;\n\n try {\n const containerRect = container.getBoundingClientRect();\n const range = state.max - state.min;\n\n // Use EDGE_PADDING for consistent edge constraints\n const leftEdge = containerRect.left + SLIDER_MEASUREMENTS.EDGE_PADDING;\n const rightEdge = containerRect.right - SLIDER_MEASUREMENTS.EDGE_PADDING;\n const effectiveWidth = rightEdge - leftEdge;\n\n const adjustedPosition = Math.max(\n leftEdge,\n Math.min(rightEdge, position),\n );\n const percentageFromLeft = (adjustedPosition - leftEdge) / effectiveWidth;\n\n return state.min + percentageFromLeft * range;\n } catch (error) {\n console.warn(\"Error calculating value from position:\", error);\n return state.min;\n }\n };\n\n /**\n * Rounds a value to the nearest step\n * Used for discrete sliders\n */\n const roundToStep = (value) => {\n const step = state.step;\n if (!step || step <= 0) return value;\n\n const steps = Math.round((value - state.min) / step);\n return state.min + steps * step;\n };\n\n /**\n * Clamps a value between min and max\n * Ensures values stay within valid range\n */\n const clamp = (value, min, max) => Math.min(Math.max(value, min), max);\n\n /**\n * Updates handle and bubble positions\n * Positions elements according to current state values\n */\n const updateHandlePositions = () => {\n const components = getComponents();\n const { handle, container, valueBubble, secondHandle, secondValueBubble } =\n components;\n\n if (!handle || !container) return;\n\n const dims = getTrackDimensions();\n if (!dims) return;\n\n const { trackSize } = dims;\n\n // Update main handle position\n const percent = getPercentage(state.value);\n const adjustedPercent = mapValueToVisualPercent(percent, trackSize);\n\n handle.style.left = `${adjustedPercent}%`;\n handle.style.transform = \"translate(-50%, -50%)\";\n\n if (valueBubble) {\n valueBubble.style.left = `${adjustedPercent}%`;\n valueBubble.style.transform = \"translateX(-50%)\";\n }\n\n // Update second handle if range slider\n if (config.range && secondHandle && state.secondValue !== null) {\n const secondPercent = getPercentage(state.secondValue);\n const adjustedSecondPercent = mapValueToVisualPercent(\n secondPercent,\n trackSize,\n );\n\n secondHandle.style.left = `${adjustedSecondPercent}%`;\n secondHandle.style.transform = \"translate(-50%, -50%)\";\n\n if (secondValueBubble) {\n secondValueBubble.style.left = `${adjustedSecondPercent}%`;\n secondValueBubble.style.transform = \"translateX(-50%)\";\n }\n }\n\n // Update ARIA attributes\n if (handle) {\n handle.setAttribute(\"aria-valuenow\", String(state.value));\n }\n };\n\n /**\n * Updates value bubble content\n * Applies formatting to displayed values\n */\n const updateValueBubbles = () => {\n const components = getComponents();\n const { valueBubble, secondValueBubble } = components;\n\n if (!valueBubble) return;\n\n const formatter = config.valueFormatter || ((value) => value.toString());\n valueBubble.textContent = formatter(state.value);\n\n if (config.range && secondValueBubble && state.secondValue !== null) {\n secondValueBubble.textContent = formatter(state.secondValue);\n }\n };\n\n /**\n * Shows or hides value bubble\n * Controls visibility for value indicators\n */\n const showValueBubble = (bubbleElement, show) => {\n if (!bubbleElement || !config.showValue) return;\n\n const bubbleClass = state.component.getClass(\"slider-value\");\n bubbleElement.classList[show ? \"add\" : \"remove\"](`${bubbleClass}--visible`);\n };\n\n /**\n * Generates tick marks\n * NOTE: Ticks are now rendered via canvas, this just clears any DOM ticks\n */\n const generateTicks = () => {\n // Canvas handles tick rendering - no DOM manipulation needed\n };\n\n /**\n * Updates active state of tick marks\n * NOTE: Ticks are now rendered via canvas, so this is no longer needed\n */\n const updateTicks = () => {\n // Canvas handles tick rendering - no DOM manipulation needed\n };\n\n /**\n * Renders all UI elements to match current state\n * Central method for keeping UI in sync with state\n */\n const render = () => {\n try {\n updateHandlePositions();\n updateValueBubbles();\n\n // Trigger canvas redraw if available\n if (component.drawCanvas) {\n // Pass the current state directly to canvas\n component.drawCanvas(state);\n }\n } catch (error) {\n console.warn(\"Error rendering UI:\", error);\n }\n };\n\n // Create UI renderer interface for event handlers\n const uiRenderer = {\n getPercentage,\n getValueFromPosition,\n roundToStep,\n clamp,\n showValueBubble,\n updateUi: render, // For backward compatibility\n render,\n };\n\n // Create event handlers with our renderer\n const handlers = createHandlers(config, state, uiRenderer, eventHelpers);\n\n // Initialize slider controller\n const initController = () => {\n try {\n // Verify we have the necessary components\n const components = getComponents();\n\n if (!components.handle) {\n console.warn(\n \"Cannot initialize slider controller: missing required handle component\",\n );\n return;\n }\n\n const { handle, secondHandle } = components;\n\n // Set handle attributes\n if (handle) {\n handle.setAttribute(\"aria-valuemin\", String(state.min));\n handle.setAttribute(\"aria-valuemax\", String(state.max));\n handle.setAttribute(\"aria-valuenow\", String(state.value));\n\n if (config.range && secondHandle && state.secondValue !== null) {\n secondHandle.setAttribute(\"aria-valuemin\", String(state.min));\n secondHandle.setAttribute(\"aria-valuemax\", String(state.max));\n secondHandle.setAttribute(\"aria-valuenow\", String(state.secondValue));\n }\n }\n\n // Setup event listeners\n handlers.setupEventListeners();\n\n // Initial UI update\n render();\n } catch (error) {\n console.error(\"Error initializing slider controller:\", error);\n }\n };\n\n // Register with lifecycle if available\n if (component.lifecycle) {\n const originalDestroy = component.lifecycle.destroy || (() => {});\n component.lifecycle.destroy = () => {\n handlers.cleanupEventListeners();\n originalDestroy();\n };\n }\n\n // Schedule initialization after current execution completes\n setTimeout(() => {\n initController();\n }, 0);\n\n // Return enhanced component\n return {\n ...component,\n // Provide controller API under 'slider' property for backward compatibility\n slider: {\n /**\n * Sets slider value\n * @param value New value\n * @param triggerEvent Whether to trigger change event\n * @returns Slider controller for chaining\n */\n setValue(value, triggerEvent = true) {\n const newValue = clamp(value, state.min, state.max);\n\n state.value = newValue;\n render();\n\n if (triggerEvent) {\n eventHelpers.triggerEvent(SLIDER_EVENTS.CHANGE);\n }\n\n return this;\n },\n\n /**\n * Gets slider value\n * @returns Current value\n */\n getValue() {\n return state.value;\n },\n\n /**\n * Sets secondary slider value (for range slider)\n * @param value New secondary value\n * @param triggerEvent Whether to trigger change event\n * @returns Slider controller for chaining\n */\n setSecondValue(value, triggerEvent = true) {\n if (!config.range) return this;\n\n const newValue = clamp(value, state.min, state.max);\n state.secondValue = newValue;\n render();\n\n if (triggerEvent) {\n eventHelpers.triggerEvent(SLIDER_EVENTS.CHANGE);\n }\n\n return this;\n },\n\n /**\n * Gets secondary slider value\n * @returns Current secondary value or null\n */\n getSecondValue() {\n return config.range ? state.secondValue : null;\n },\n\n /**\n * Sets slider minimum value\n * @param min New minimum value\n * @returns Slider controller for chaining\n */\n setMin(min) {\n state.min = min;\n\n // Update ARIA attributes on handles\n const components = getComponents();\n if (components.handle) {\n components.handle.setAttribute(\"aria-valuemin\", String(min));\n }\n\n if (config.range && components.secondHandle) {\n components.secondHandle.setAttribute(\"aria-valuemin\", String(min));\n }\n\n // Clamp values to new min\n if (state.value < min) state.value = min;\n if (\n config.range &&\n state.secondValue !== null &&\n state.secondValue < min\n ) {\n state.secondValue = min;\n }\n\n // Regenerate ticks if needed\n if (config.ticks || config.tickLabels) {\n generateTicks();\n }\n\n render();\n return this;\n },\n\n /**\n * Gets slider minimum value\n * @returns Current minimum value\n */\n getMin() {\n return state.min;\n },\n\n /**\n * Sets slider maximum value\n * @param max New maximum value\n * @returns Slider controller for chaining\n */\n setMax(max) {\n state.max = max;\n\n // Update ARIA attributes on handles\n const components = getComponents();\n if (components.handle) {\n components.handle.setAttribute(\"aria-valuemax\", String(max));\n }\n\n if (config.range && components.secondHandle) {\n components.secondHandle.setAttribute(\"aria-valuemax\", String(max));\n }\n\n // Clamp values to new max\n if (state.value > max) state.value = max;\n if (\n config.range &&\n state.secondValue !== null &&\n state.secondValue > max\n ) {\n state.secondValue = max;\n }\n\n // Regenerate ticks if needed\n if (config.ticks || config.tickLabels) {\n generateTicks();\n }\n\n render();\n return this;\n },\n\n /**\n * Gets slider maximum value\n * @returns Current maximum value\n */\n getMax() {\n return state.max;\n },\n\n /**\n * Sets slider step size\n * @param step New step size\n * @returns Slider controller for chaining\n */\n setStep(step) {\n state.step = step;\n\n // Add or remove discrete class\n component.element.classList[step > 0 ? \"add\" : \"remove\"](\n `${component.getClass(\"slider\")}--discrete`,\n );\n\n // Regenerate ticks if needed\n if (config.ticks || config.tickLabels) {\n generateTicks();\n updateTicks();\n }\n\n return this;\n },\n\n /**\n * Gets slider step size\n * @returns Current step size\n */\n getStep() {\n return state.step;\n },\n\n /**\n * Regenerate tick marks and labels\n * NOTE: Canvas handles tick rendering, this just triggers a redraw\n * @returns Slider controller for chaining\n */\n regenerateTicks() {\n render(); // Canvas will redraw ticks based on current state\n return this;\n },\n\n /**\n * Update all UI elements\n * @returns Slider controller for chaining\n */\n updateUi() {\n render();\n return this;\n },\n },\n };\n};\n",
|
|
212
206
|
"import { SliderConfig, SliderColor } from \"../types\";\nimport { getThemeColor, colorToRGBA } from \"../../../core/utils\";\nimport {\n observeCanvasResize,\n clipRoundedRect,\n fillRoundedRectLR,\n clearCanvas,\n easeOutCubic,\n ANIMATION_DURATIONS,\n CanvasContext,\n createCanvasContext,\n updateCanvasDimensions as updateCanvasDims,\n initializeCanvasWithRetry,\n createStyledCanvas,\n createCanvasThemeObserver,\n} from \"../../../core/canvas\";\nimport { SLIDER_SIZES, SLIDER_MEASUREMENTS, SliderSize } from \"../constants\";\n\n/**\n * Animation state for smooth transitions\n */\ninterface AnimationState {\n // Current animated values\n animatedValue: number;\n animatedSecondValue: number | null;\n\n // Target values\n targetValue: number;\n targetSecondValue: number | null;\n\n // Start values for current animation\n startValue: number;\n startSecondValue: number | null;\n\n // Animation timing\n startTime: number;\n duration: number;\n animationFrame: number | null;\n}\n\n/**\n * Component with canvas capabilities\n */\ninterface CanvasSliderComponent {\n element: HTMLElement;\n canvas: HTMLCanvasElement;\n ctx: CanvasRenderingContext2D;\n getClass: (name: string) => string;\n drawCanvas: (state?: any) => void;\n resize: () => void;\n animationState?: AnimationState;\n [key: string]: any;\n}\n\n/**\n * Checks if component is disabled\n */\nconst isDisabled = (component?: any): boolean =>\n component?.disabled?.isDisabled?.() ||\n component?.element?.classList?.contains?.(\n `${component?.getClass?.(\"slider\")}--disabled`\n ) ||\n false;\n\n/**\n * Gets colors based on state and element type\n */\nconst getColors = (\n config: SliderConfig,\n component?: any,\n elementType: \"track\" | \"tick\" | \"dot\" = \"track\"\n) => {\n const disabled = isDisabled(component);\n const variant = config.color || \"primary\";\n\n if (disabled) {\n const onSurfaceColor = getThemeColor(\"sys-color-on-surface\", {\n fallback: \"#000000\",\n });\n return {\n primary: colorToRGBA(onSurfaceColor, 0.38),\n secondary: colorToRGBA(onSurfaceColor, 0.12),\n };\n }\n\n if (elementType === \"tick\") {\n return {\n primary: getThemeColor(`sys-color-on-${variant}`, {\n fallback: \"#ffffff\",\n }),\n secondary: getThemeColor(`sys-color-${variant}`, { fallback: \"#1976d2\" }),\n };\n }\n\n const primaryColor = getThemeColor(`sys-color-${variant}`, {\n fallback: \"#1976d2\",\n });\n return {\n primary: primaryColor,\n secondary: colorToRGBA(primaryColor, 0.24),\n };\n};\n\n/**\n * Calculates value percentage\n */\nconst getValuePercent = (value: number, min: number, max: number): number =>\n ((value - min) / (max - min)) * 100;\n\n/**\n * Draws a track segment if width > 0\n */\nconst drawTrackSegment = (\n ctx: CanvasRenderingContext2D,\n x: number,\n y: number,\n width: number,\n height: number,\n radius: number,\n color: string\n) => {\n if (width > 0) {\n fillRoundedRectLR(ctx, x, y, width, height, radius, radius, color);\n }\n};\n\n/**\n * Gets the track height value from the size config\n */\nexport const getTrackHeight = (size?: SliderSize): number => {\n if (typeof size === \"number\") {\n return Math.max(size, SLIDER_SIZES.XS);\n }\n\n if (typeof size === \"string\" && size in SLIDER_SIZES) {\n return SLIDER_SIZES[size as keyof typeof SLIDER_SIZES];\n }\n\n return SLIDER_SIZES.XS; // Default to XS\n};\n\n/**\n * Gets the handle height based on the slider size\n */\nexport const getHandleHeight = (size?: SliderSize): number => {\n const trackHeight = getTrackHeight(size);\n\n // For XS and S sizes, use SMALL_HANDLE_HEIGHT constant\n if (trackHeight <= SLIDER_SIZES.S) {\n return SLIDER_MEASUREMENTS.SMALL_HANDLE_HEIGHT;\n }\n\n // For M, L, XL sizes, handle height is larger than track by HANDLE_HEIGHT_OFFSET\n return trackHeight + SLIDER_MEASUREMENTS.HANDLE_HEIGHT_OFFSET;\n};\n\n/**\n * Gets the external track radius based on the slider size\n */\nexport const getExternalTrackRadius = (size?: SliderSize): number => {\n const trackHeight = getTrackHeight(size);\n\n // For XS and S sizes, use SMALL_TRACK_EXTERNAL_RADIUS constant\n if (trackHeight <= SLIDER_SIZES.S) {\n return SLIDER_MEASUREMENTS.SMALL_TRACK_EXTERNAL_RADIUS;\n }\n\n // For M, L, XL sizes, use track height multiplied by ratio\n return trackHeight * SLIDER_MEASUREMENTS.LARGE_TRACK_RADIUS_RATIO;\n};\n\n/**\n * Updates canvas dimensions based on current size\n */\nconst updateCanvasDimensions = (\n canvas: HTMLCanvasElement,\n context: CanvasContext,\n config?: SliderConfig\n): void => {\n const trackHeight = getTrackHeight(config?.size);\n const handleHeight = getHandleHeight(config?.size);\n\n const sliderElement = canvas.parentElement;\n if (!sliderElement) return;\n\n const width = Math.max(\n sliderElement.getBoundingClientRect().width || sliderElement.offsetWidth,\n 200\n );\n const height = Math.max(\n handleHeight + 20,\n trackHeight + 32,\n SLIDER_MEASUREMENTS.MIN_HEIGHT\n );\n\n // Update container height\n sliderElement.style.height = `${height}px`;\n\n // Use shared utility to update canvas dimensions\n updateCanvasDims(context, width, height);\n};\n\n/**\n * Sets up canvas with proper pixel ratio and dimensions\n */\nconst setupCanvas = (\n canvas: HTMLCanvasElement,\n config?: SliderConfig\n): CanvasContext => {\n const sliderElement = canvas.parentElement;\n if (!sliderElement) {\n throw new Error(\"Canvas must have a parent element\");\n }\n\n const trackHeight = getTrackHeight(config?.size);\n const handleHeight = getHandleHeight(config?.size);\n const width = Math.max(\n sliderElement.getBoundingClientRect().width || sliderElement.offsetWidth,\n 200\n );\n const height = Math.max(\n handleHeight + 20,\n trackHeight + 32,\n SLIDER_MEASUREMENTS.MIN_HEIGHT\n );\n\n // Update container height\n sliderElement.style.height = `${height}px`;\n\n // Use shared utility to create canvas context\n return createCanvasContext(canvas, width, height);\n};\n\n/**\n * Maps value percentage to visual position with edge constraints\n */\nconst mapValueToVisualPercent = (\n valuePercent: number,\n trackWidth: number\n): number => {\n const edgeConstraint = (SLIDER_MEASUREMENTS.EDGE_PADDING / trackWidth) * 100;\n const minEdge = edgeConstraint;\n const maxEdge = 100 - edgeConstraint;\n const visualRange = maxEdge - minEdge;\n\n if (valuePercent <= 0) return minEdge;\n if (valuePercent >= 100) return maxEdge;\n return minEdge + (valuePercent / 100) * visualRange;\n};\n\n/**\n * Draws track segments on canvas\n */\nconst drawTracks = (\n ctx: CanvasRenderingContext2D,\n width: number,\n height: number,\n config: SliderConfig,\n state: any,\n component?: any\n) => {\n const trackY = height / 2;\n const trackHeight = getTrackHeight(config.size);\n const containerRadius = getExternalTrackRadius(config.size); // Container radius for clipping\n const trackRadius = SLIDER_MEASUREMENTS.TRACK_RADIUS; // Uniform 2px radius for all tracks\n\n // Create clipping region with container radius (mimics CSS overflow: hidden with border-radius)\n const restoreClip = clipRoundedRect(\n ctx,\n 0,\n trackY - trackHeight / 2,\n width,\n trackHeight,\n containerRadius\n );\n\n // Get colors based on state\n const { primary: primaryColor, secondary: inactiveColor } = getColors(\n config,\n component\n );\n\n // Get value percentages\n const valuePercent = getValuePercent(state.value, state.min, state.max);\n const adjustedPercent = mapValueToVisualPercent(valuePercent, width);\n\n // Fixed pixel gaps - instantly reduce by HANDLE_GAP_PRESSED_REDUCTION when pressed\n const gapReduction = state.pressed\n ? SLIDER_MEASUREMENTS.HANDLE_GAP_PRESSED_REDUCTION\n : 0;\n const handleGapPixels = SLIDER_MEASUREMENTS.HANDLE_GAP - gapReduction;\n const centerGapPixels = SLIDER_MEASUREMENTS.CENTER_GAP;\n const halfCenterGapPercent = (centerGapPixels / 2 / width) * 100;\n const paddingPercent = (handleGapPixels / width) * 100;\n\n if (config.centered) {\n // Calculate center position\n const zeroPercent = getValuePercent(0, state.min, state.max);\n const adjustedZeroPercent = mapValueToVisualPercent(zeroPercent, width);\n\n // Check if handle is near center\n const handleNearCenter =\n Math.abs(adjustedPercent - adjustedZeroPercent) < paddingPercent;\n const isPositive = state.value >= 0;\n\n if (handleNearCenter) {\n // Handle at center - draw start and remaining tracks only\n\n // Start track (left side)\n const startWidth = ((adjustedPercent - paddingPercent) / 100) * width;\n if (startWidth > 0) {\n drawTrackSegment(\n ctx,\n 0,\n trackY - trackHeight / 2,\n startWidth,\n trackHeight,\n trackRadius,\n inactiveColor\n );\n }\n\n // Remaining track (right side)\n const remainingX = ((adjustedPercent + paddingPercent) / 100) * width;\n const remainingWidth = width - remainingX;\n if (remainingWidth > 0) {\n drawTrackSegment(\n ctx,\n remainingX,\n trackY - trackHeight / 2,\n remainingWidth,\n trackHeight,\n trackRadius,\n inactiveColor\n );\n }\n } else if (isPositive) {\n // Positive value - active track from center to handle\n\n // Start track (from minimum to center)\n const startWidth =\n ((adjustedZeroPercent - halfCenterGapPercent) / 100) * width;\n if (startWidth > 0) {\n drawTrackSegment(\n ctx,\n 0,\n trackY - trackHeight / 2,\n startWidth,\n trackHeight,\n trackRadius,\n inactiveColor\n );\n }\n\n // Active track (from center to handle)\n const activeX =\n ((adjustedZeroPercent + halfCenterGapPercent) / 100) * width;\n const activeWidth =\n ((adjustedPercent - paddingPercent) / 100) * width - activeX;\n if (activeWidth > 0) {\n drawTrackSegment(\n ctx,\n activeX,\n trackY - trackHeight / 2,\n activeWidth,\n trackHeight,\n trackRadius,\n primaryColor\n );\n }\n\n // Remaining track (from handle to maximum)\n const remainingX = ((adjustedPercent + paddingPercent) / 100) * width;\n const remainingWidth = width - remainingX;\n if (remainingWidth > 0) {\n drawTrackSegment(\n ctx,\n remainingX,\n trackY - trackHeight / 2,\n remainingWidth,\n trackHeight,\n trackRadius,\n inactiveColor\n );\n }\n } else {\n // Negative value - active track from handle to center\n\n // Start track (from minimum to handle)\n const startWidth = ((adjustedPercent - paddingPercent) / 100) * width;\n if (startWidth > 0) {\n drawTrackSegment(\n ctx,\n 0,\n trackY - trackHeight / 2,\n startWidth,\n trackHeight,\n trackRadius,\n inactiveColor\n );\n }\n\n // Active track (from handle to center)\n const activeX = ((adjustedPercent + paddingPercent) / 100) * width;\n const activeWidth =\n ((adjustedZeroPercent - halfCenterGapPercent) / 100) * width - activeX;\n if (activeWidth > 0) {\n drawTrackSegment(\n ctx,\n activeX,\n trackY - trackHeight / 2,\n activeWidth,\n trackHeight,\n trackRadius,\n primaryColor\n );\n }\n\n // Remaining track (from center to maximum)\n const remainingX =\n ((adjustedZeroPercent + halfCenterGapPercent) / 100) * width;\n const remainingWidth = width - remainingX;\n if (remainingWidth > 0) {\n drawTrackSegment(\n ctx,\n remainingX,\n trackY - trackHeight / 2,\n remainingWidth,\n trackHeight,\n trackRadius,\n inactiveColor\n );\n }\n }\n } else if (config.range && state.secondValue !== null) {\n // Range slider\n const secondPercent = getValuePercent(\n state.secondValue,\n state.min,\n state.max\n );\n const adjustedSecondPercent = mapValueToVisualPercent(secondPercent, width);\n\n const lowerPercent = Math.min(adjustedPercent, adjustedSecondPercent);\n const higherPercent = Math.max(adjustedPercent, adjustedSecondPercent);\n\n // Determine which handle is at lower/higher position\n const firstHandleIsLower = adjustedPercent <= adjustedSecondPercent;\n\n // Apply gap reduction only to the active handle\n const firstHandleGapReduction =\n state.pressed && state.activeHandle === \"first\"\n ? SLIDER_MEASUREMENTS.HANDLE_GAP_PRESSED_REDUCTION\n : 0;\n const secondHandleGapReduction =\n state.pressed && state.activeHandle === \"second\"\n ? SLIDER_MEASUREMENTS.HANDLE_GAP_PRESSED_REDUCTION\n : 0;\n\n const firstHandleGapPixels =\n SLIDER_MEASUREMENTS.HANDLE_GAP - firstHandleGapReduction;\n const secondHandleGapPixels =\n SLIDER_MEASUREMENTS.HANDLE_GAP - secondHandleGapReduction;\n\n const lowerHandleGapPercent = firstHandleIsLower\n ? (firstHandleGapPixels / width) * 100\n : (secondHandleGapPixels / width) * 100;\n\n const higherHandleGapPercent = firstHandleIsLower\n ? (secondHandleGapPixels / width) * 100\n : (firstHandleGapPixels / width) * 100;\n\n // Inactive track before first handle\n const startWidth = ((lowerPercent - lowerHandleGapPercent) / 100) * width;\n if (startWidth > 0) {\n drawTrackSegment(\n ctx,\n 0,\n trackY - trackHeight / 2,\n startWidth,\n trackHeight,\n trackRadius,\n inactiveColor\n );\n }\n\n // Active track between handles\n const activeX = ((lowerPercent + lowerHandleGapPercent) / 100) * width;\n const activeWidth =\n ((higherPercent - higherHandleGapPercent) / 100) * width - activeX;\n\n if (activeWidth > trackHeight) {\n // Only show if handles aren't too close\n drawTrackSegment(\n ctx,\n activeX,\n trackY - trackHeight / 2,\n activeWidth,\n trackHeight,\n trackRadius,\n primaryColor\n );\n }\n\n // Inactive track after second handle\n const remainingX = ((higherPercent + higherHandleGapPercent) / 100) * width;\n const remainingWidth = width - remainingX;\n if (remainingWidth > 0) {\n drawTrackSegment(\n ctx,\n remainingX,\n trackY - trackHeight / 2,\n remainingWidth,\n trackHeight,\n trackRadius,\n inactiveColor\n );\n }\n } else {\n // Single handle slider\n\n // Active track (from start to handle)\n const activeWidth = ((adjustedPercent - paddingPercent) / 100) * width;\n if (activeWidth > 0) {\n drawTrackSegment(\n ctx,\n 0,\n trackY - trackHeight / 2,\n activeWidth,\n trackHeight,\n trackRadius,\n primaryColor\n );\n }\n\n // Remaining track (from handle to end)\n const remainingX = ((adjustedPercent + paddingPercent) / 100) * width;\n const remainingWidth = width - remainingX;\n if (remainingWidth > 0) {\n drawTrackSegment(\n ctx,\n remainingX,\n trackY - trackHeight / 2,\n remainingWidth,\n trackHeight,\n trackRadius,\n inactiveColor\n );\n }\n }\n\n // Restore canvas state (removes clipping)\n restoreClip();\n};\n\n/**\n * Draws tick marks on canvas\n */\nconst drawTicks = (\n ctx: CanvasRenderingContext2D,\n width: number,\n height: number,\n config: SliderConfig,\n state: any,\n component?: any\n) => {\n if (!config.ticks) return;\n\n const tickSize = SLIDER_MEASUREMENTS.TICK_SIZE;\n const y = height / 2;\n\n // Get colors based on state\n const { primary: tickActiveColor, secondary: tickInactiveColor } = getColors(\n config,\n component,\n \"tick\"\n );\n\n // Calculate tick values\n const numSteps = Math.floor((state.max - state.min) / state.step);\n\n for (let i = 0; i <= numSteps; i++) {\n const value = state.min + i * state.step;\n if (value > state.max) continue;\n\n // Get position with edge constraints\n const percent = getValuePercent(value, state.min, state.max);\n const adjustedPercent = mapValueToVisualPercent(percent, width);\n const x = (adjustedPercent / 100) * width;\n\n // Skip tick if it's at handle position\n const isAtHandle = Math.abs(value - state.value) < state.step * 0.1;\n const isAtSecondHandle =\n config.range &&\n state.secondValue !== null &&\n Math.abs(value - state.secondValue) < state.step * 0.1;\n\n if (isAtHandle || isAtSecondHandle) continue;\n\n // Determine if tick is active\n let isActive = false;\n\n if (config.centered) {\n isActive =\n state.value >= 0\n ? value >= 0 && value <= state.value\n : value >= state.value && value <= 0;\n } else if (config.range && state.secondValue !== null) {\n const lowerValue = Math.min(state.value, state.secondValue);\n const higherValue = Math.max(state.value, state.secondValue);\n isActive = value >= lowerValue && value <= higherValue;\n } else {\n isActive = value <= state.value;\n }\n\n // Draw tick\n ctx.fillStyle = isActive ? tickActiveColor : tickInactiveColor;\n ctx.globalAlpha = isActive ? 1 : 0.5;\n ctx.beginPath();\n ctx.arc(x, y, tickSize / 2, 0, Math.PI * 2);\n ctx.fill();\n }\n\n ctx.globalAlpha = 1;\n};\n\n/**\n * Draws dots at track ends\n */\nconst drawDots = (\n ctx: CanvasRenderingContext2D,\n width: number,\n height: number,\n config: SliderConfig,\n component?: any\n) => {\n // Don't draw dots for discrete sliders (sliders with ticks)\n if (config.ticks) return;\n\n const dotSize = SLIDER_MEASUREMENTS.DOT_SIZE;\n const y = height / 2;\n const padding = SLIDER_MEASUREMENTS.EDGE_PADDING;\n\n // Get colors based on state\n const { primary: dotColor } = getColors(config, component, \"dot\");\n\n // For continuous sliders, only draw end dot\n ctx.fillStyle = dotColor;\n ctx.beginPath();\n ctx.arc(width - padding, y, dotSize / 2, 0, Math.PI * 2);\n ctx.fill();\n};\n\n/**\n * Main drawing function\n */\nconst draw = (\n context: CanvasContext,\n config: SliderConfig,\n state: any,\n component?: any\n): void => {\n const { ctx, width, height } = context;\n\n // Skip drawing if canvas has no dimensions\n if (width === 0 || height === 0) return;\n\n // Clear canvas\n clearCanvas(ctx, width, height);\n\n // Draw in order: dots, tracks, ticks\n drawDots(ctx, width, height, config, component);\n drawTracks(ctx, width, height, config, state, component);\n drawTicks(ctx, width, height, config, state, component);\n};\n\n/**\n * Updates handle sizes based on slider size\n */\nconst updateHandleSizes = (component: any, size: SliderSize): void => {\n const handleHeight = getHandleHeight(size);\n\n // Check both component.handle (from withDom) and component.components.handle (legacy)\n const handle = component.handle || component.components?.handle;\n const secondHandle =\n component.secondHandle || component.components?.secondHandle;\n\n if (handle) {\n handle.style.height = `${handleHeight}px`;\n handle.style.transform = \"translate(-50%, -50%)\";\n }\n if (secondHandle) {\n secondHandle.style.height = `${handleHeight}px`;\n secondHandle.style.transform = \"translate(-50%, -50%)\";\n }\n};\n\n/**\n * Creates state object from various sources\n */\nconst createState = (\n controllerState?: any,\n component?: any,\n lastKnownState?: any\n): any => {\n if (controllerState) {\n return {\n value: controllerState.value,\n secondValue: controllerState.secondValue,\n min: controllerState.min,\n max: controllerState.max,\n step: controllerState.step,\n pressed: controllerState.pressed || false,\n activeHandle: controllerState.activeHandle || null,\n };\n }\n\n if (component?.slider) {\n return {\n value: component.slider.getValue(),\n secondValue: component.slider.getSecondValue(),\n min: component.slider.getMin(),\n max: component.slider.getMax(),\n step: component.slider.getStep(),\n pressed: false,\n activeHandle: null,\n };\n }\n\n return (\n lastKnownState || {\n value: 0,\n secondValue: null,\n min: 0,\n max: 100,\n step: 1,\n pressed: false,\n activeHandle: null,\n }\n );\n};\n\n/**\n * Adds canvas functionality for slider visuals\n * Keeps handle and value bubble as DOM elements for accessibility\n */\nexport const withCanvas =\n (config: SliderConfig) =>\n (component: any): CanvasSliderComponent => {\n // Create canvas element using shared utility\n const canvas = createStyledCanvas(\n `${component.getClass(\"slider-canvas\")}`,\n { zIndex: \"1\" } // Ensure canvas is above track but below handle\n );\n\n // Insert canvas as first child (behind interactive elements)\n const container = component.container || component.components?.container;\n if (container) {\n container.insertBefore(canvas, container.firstChild);\n } else {\n component.element.appendChild(canvas);\n }\n\n // Setup canvas context\n let canvasContext: CanvasContext | null = null;\n let resizeCleanup: (() => void) | null = null;\n let themeCleanup: (() => void) | null = null;\n\n // Current size - managed by API\n let currentSize = config.size || \"XS\";\n\n // Store last known state for theme changes\n let lastKnownState = createState(null, component, {\n value: config.value || 0,\n secondValue: config.secondValue || null,\n min: config.min || 0,\n max: config.max || 100,\n step: config.step || 1,\n pressed: false,\n activeHandle: null,\n });\n\n // Initialize animation state\n const animationState: AnimationState = {\n animatedValue: lastKnownState.value,\n animatedSecondValue: lastKnownState.secondValue,\n targetValue: lastKnownState.value,\n targetSecondValue: lastKnownState.secondValue,\n startValue: lastKnownState.value,\n startSecondValue: lastKnownState.secondValue,\n startTime: 0,\n duration: ANIMATION_DURATIONS.MEDIUM,\n animationFrame: null,\n };\n\n component.animationState = animationState;\n\n // Initialize canvas with retry mechanism\n initializeCanvasWithRetry(\n () => {\n try {\n canvasContext = setupCanvas(canvas, {\n ...config,\n size: currentSize,\n });\n component.ctx = canvasContext.ctx;\n return true;\n } catch (error) {\n console.warn(\"Slider canvas initialization failed:\", error);\n return false;\n }\n },\n () => {\n // Set initial handle sizes after successful initialization\n updateHandleSizes(component, currentSize);\n }\n );\n\n // Add color class to component element if not primary\n if (config.color && config.color !== \"primary\") {\n component.element.classList.add(\n `${component.getClass(\"slider\")}--${config.color}`\n );\n }\n\n // Store canvas reference\n component.canvas = canvas;\n\n // Helper to draw with current animated state\n const drawAnimatedState = () => {\n if (!canvasContext) return;\n draw(\n canvasContext,\n {\n ...config,\n size: currentSize,\n },\n {\n ...lastKnownState,\n value: animationState.animatedValue,\n secondValue: animationState.animatedSecondValue,\n },\n component\n );\n };\n\n // Animation loop function\n const animate = (currentTime?: number): void => {\n if (!canvasContext) return;\n\n // If no currentTime provided, use performance.now()\n const now = currentTime || performance.now();\n const elapsed = now - animationState.startTime;\n const progress = Math.min(elapsed / animationState.duration, 1);\n const easedProgress = easeOutCubic(progress);\n\n // Update animated values\n const startValue = animationState.startValue;\n const targetValue = animationState.targetValue;\n animationState.animatedValue =\n startValue + (targetValue - startValue) * easedProgress;\n\n if (\n animationState.targetSecondValue !== null &&\n animationState.animatedSecondValue !== null\n ) {\n const startSecondValue = animationState.startSecondValue;\n const targetSecondValue = animationState.targetSecondValue;\n animationState.animatedSecondValue =\n startSecondValue +\n (targetSecondValue - startSecondValue) * easedProgress;\n }\n\n // Draw with animated values\n drawAnimatedState();\n\n // Continue animation if not complete\n if (progress < 1) {\n animationState.animationFrame = requestAnimationFrame((time) =>\n animate(time)\n );\n } else {\n animationState.animationFrame = null;\n }\n };\n\n // Drawing function\n const drawCanvas = (controllerState?: any): void => {\n if (!canvasContext) {\n console.warn(\"Canvas context not ready\");\n return;\n }\n\n // Update dimensions in case size changed\n updateCanvasDimensions(canvas, canvasContext, {\n ...config,\n size: currentSize,\n });\n\n // Get current state - prefer passed state, then slider API, then last known state\n let state;\n let isDragging = false;\n\n if (controllerState) {\n // Use state passed from controller and update last known state\n state = {\n value: controllerState.value,\n secondValue: controllerState.secondValue,\n min: controllerState.min,\n max: controllerState.max,\n step: controllerState.step,\n pressed: controllerState.pressed || false,\n activeHandle: controllerState.activeHandle || null,\n };\n isDragging = controllerState.dragging || false;\n lastKnownState = { ...state };\n } else if (component.slider) {\n // Fallback to slider API and update last known state\n state = {\n value: component.slider.getValue(),\n secondValue: component.slider.getSecondValue(),\n min: component.slider.getMin(),\n max: component.slider.getMax(),\n step: component.slider.getStep(),\n };\n lastKnownState = { ...state };\n } else {\n // Use last known state as fallback\n state = { ...lastKnownState };\n }\n\n // Check if we need to animate (skip animation when dragging)\n const valueChanged = state.value !== animationState.targetValue;\n const secondValueChanged =\n state.secondValue !== animationState.targetSecondValue;\n\n if ((valueChanged || secondValueChanged) && !isDragging) {\n // Capture start values before updating targets\n animationState.startValue = animationState.animatedValue;\n animationState.startSecondValue = animationState.animatedSecondValue;\n\n // Update target values\n animationState.targetValue = state.value;\n animationState.targetSecondValue = state.secondValue;\n\n // Cancel any existing animation\n if (animationState.animationFrame) {\n cancelAnimationFrame(animationState.animationFrame);\n }\n\n // Start new animation\n animationState.startTime = performance.now();\n\n // Draw first frame immediately to sync with handle movement\n animate();\n } else if (isDragging) {\n // When dragging, update values immediately without animation\n animationState.animatedValue = state.value;\n animationState.animatedSecondValue = state.secondValue;\n animationState.targetValue = state.value;\n animationState.targetSecondValue = state.secondValue;\n animationState.startValue = state.value;\n animationState.startSecondValue = state.secondValue;\n\n // Cancel any ongoing animation\n if (animationState.animationFrame) {\n cancelAnimationFrame(animationState.animationFrame);\n animationState.animationFrame = null;\n }\n\n // Draw immediately\n draw(\n canvasContext,\n {\n ...config,\n size: currentSize,\n },\n controllerState || state,\n component\n );\n } else {\n // No animation needed, draw current state\n draw(\n canvasContext,\n {\n ...config,\n size: currentSize,\n },\n controllerState || state,\n component\n );\n }\n };\n\n // Resize function\n const resize = (): void => {\n if (!canvasContext) return;\n\n try {\n const newContext = setupCanvas(canvas, {\n ...config,\n size: currentSize,\n });\n component.ctx = newContext.ctx;\n Object.assign(canvasContext, newContext);\n\n // Redraw with current animated values\n drawAnimatedState();\n } catch (error) {\n console.warn(\"Slider canvas resize failed:\", error);\n }\n };\n\n // Setup observers\n resizeCleanup = observeCanvasResize(component.element, canvas, resize);\n\n // Observe theme changes\n const onThemeChange = () => drawAnimatedState();\n\n themeCleanup = createCanvasThemeObserver(\n config.color || \"primary\",\n onThemeChange\n );\n\n // Initial draw\n requestAnimationFrame(() => {\n drawCanvas();\n });\n\n // Extend component with canvas methods\n component.drawCanvas = drawCanvas;\n component.resize = resize;\n\n // Add setSize method\n component.setSize = (size: SliderSize) => {\n currentSize = size;\n if (canvasContext) {\n updateCanvasDimensions(canvas, canvasContext, {\n ...config,\n size: currentSize,\n });\n // Redraw with current animated values\n drawAnimatedState();\n }\n\n // Update handle sizes\n updateHandleSizes(component, currentSize);\n };\n\n // Add getSize method\n component.getSize = () => currentSize;\n\n // Update color method\n const originalSetColor = component.appearance?.setColor;\n if (originalSetColor) {\n component.appearance.setColor = (color: SliderColor) => {\n originalSetColor(color);\n\n // Remove old color class if not primary\n if (config.color && config.color !== \"primary\") {\n component.element.classList.remove(\n `${component.getClass(\"slider\")}--${config.color}`\n );\n }\n\n // Add new color class if not primary\n if (color && color !== \"primary\") {\n component.element.classList.add(\n `${component.getClass(\"slider\")}--${color}`\n );\n }\n\n config.color = color;\n\n // Clean up old theme observer\n if (themeCleanup) {\n themeCleanup();\n themeCleanup = null;\n }\n\n // Set up new theme observer for the new color\n themeCleanup = createCanvasThemeObserver(color, onThemeChange);\n\n // Redraw with new color\n drawCanvas();\n };\n }\n\n // Clean up on destroy\n if (component.lifecycle) {\n const originalDestroy = component.lifecycle.destroy || (() => {});\n component.lifecycle.destroy = () => {\n if (resizeCleanup) resizeCleanup();\n if (themeCleanup) themeCleanup();\n if (animationState.animationFrame) {\n cancelAnimationFrame(animationState.animationFrame);\n }\n originalDestroy();\n };\n }\n\n return component as CanvasSliderComponent;\n };\n",
|
|
213
|
-
"import { createElement } from \"../../../core/dom/create\";\nimport { setStyles } from \"../../../core/dom/utils\";\nimport { SliderConfig } from \"../types\";\nimport { ElementComponent } from \"../../../core/compose/component\";\n\n/**\n * Creates the inner slider DOM structure using optimized createElement\n * This works alongside withElement to create slider-specific inner elements\n *\n * @param config Slider configuration\n * @returns Component enhancement function\n */\nexport const withDom =\n (config: SliderConfig) =>\n <T extends ElementComponent>(\n component: T
|
|
207
|
+
"import { createElement } from \"../../../core/dom/create\";\nimport { setStyles } from \"../../../core/dom/utils\";\nimport { SliderConfig } from \"../types\";\nimport { ElementComponent } from \"../../../core/compose/component\";\n\n/**\n * Creates the inner slider DOM structure using optimized createElement\n * This works alongside withElement to create slider-specific inner elements\n *\n * @param config Slider configuration\n * @returns Component enhancement function\n */\nexport const withDom =\n (config: SliderConfig) =>\n <T extends ElementComponent>(\n component: T,\n ): T & {\n container: HTMLElement;\n handle: HTMLElement;\n valueBubble: HTMLElement;\n secondHandle?: HTMLElement;\n secondValueBubble?: HTMLElement;\n getContainer: () => HTMLElement;\n getHandle: () => HTMLElement;\n getValueBubble: () => HTMLElement;\n getSecondHandle?: () => HTMLElement | null;\n getSecondValueBubble?: () => HTMLElement | null;\n } => {\n // Get prefixed class names\n const getClass = (className: string) => component.getClass(className);\n\n // Set default values\n const min = config.min || 0;\n const max = config.max || 100;\n const value = config.value !== undefined ? config.value : min;\n const isDisabled = config.disabled === true;\n const formatter = config.valueFormatter || ((val) => val.toString());\n\n // Calculate initial position\n const valuePercent = ((value - min) / (max - min)) * 100;\n\n // Create the slider container inside the main element\n const container = createElement({\n tag: \"div\",\n className: getClass(\"slider-container\"),\n container: component.element,\n });\n\n // Apply styles using setStyles\n setStyles(container, {\n position: \"relative\", // For canvas absolute positioning\n });\n\n // Build accessible label for handles\n const label = config.label || \"\";\n const handleLabel = config.range && label ? `${label} minimum` : label;\n const secondHandleLabel = label ? `${label} maximum` : \"\";\n\n // Create the main handle (kept as DOM for accessibility)\n const handleAttributes: Record<string, string> = {\n role: \"slider\",\n \"aria-valuemin\": String(min),\n \"aria-valuemax\": String(max),\n \"aria-valuenow\": String(value),\n \"aria-orientation\": \"horizontal\",\n tabindex: isDisabled ? \"-1\" : \"0\",\n \"aria-disabled\": isDisabled ? \"true\" : \"false\",\n \"data-value\": String(value),\n \"data-handle-index\": \"0\",\n };\n\n if (handleLabel) {\n handleAttributes[\"aria-label\"] = handleLabel;\n }\n\n const handle = createElement({\n tag: \"div\",\n className: getClass(\"slider-handle\"),\n attributes: handleAttributes,\n container: container,\n });\n\n // Apply handle positioning\n setStyles(handle, {\n left: `${valuePercent}%`,\n });\n\n // Create the value bubble (kept as DOM for text rendering)\n const valueBubble = createElement({\n tag: \"div\",\n className: getClass(\"slider-value\"),\n attributes: {\n \"aria-hidden\": \"true\",\n \"data-handle-index\": \"0\",\n },\n text: formatter(value),\n container: container,\n });\n\n // Apply value bubble positioning\n setStyles(valueBubble, {\n left: `${valuePercent}%`,\n });\n\n // Create second handle and value bubble for range sliders\n let secondHandle: HTMLElement | undefined;\n let secondValueBubble: HTMLElement | undefined;\n\n if (config.range) {\n const secondValue =\n config.secondValue !== undefined ? config.secondValue : max;\n const secondValuePercent = ((secondValue - min) / (max - min)) * 100;\n\n // Create the second handle\n const secondHandleAttributes: Record<string, string> = {\n role: \"slider\",\n \"aria-valuemin\": String(min),\n \"aria-valuemax\": String(max),\n \"aria-valuenow\": String(secondValue),\n \"aria-orientation\": \"horizontal\",\n tabindex: isDisabled ? \"-1\" : \"0\",\n \"aria-disabled\": isDisabled ? \"true\" : \"false\",\n \"data-value\": String(secondValue),\n \"data-handle-index\": \"1\",\n };\n\n if (secondHandleLabel) {\n secondHandleAttributes[\"aria-label\"] = secondHandleLabel;\n }\n\n secondHandle = createElement({\n tag: \"div\",\n className: getClass(\"slider-handle\"),\n attributes: secondHandleAttributes,\n container: container,\n });\n\n // Apply second handle positioning\n setStyles(secondHandle, {\n left: `${secondValuePercent}%`,\n });\n\n // Create the second value bubble\n secondValueBubble = createElement({\n tag: \"div\",\n className: getClass(\"slider-value\"),\n attributes: {\n \"aria-hidden\": \"true\",\n \"data-handle-index\": \"1\",\n },\n text: formatter(secondValue),\n container: container,\n });\n\n // Apply second value bubble positioning\n setStyles(secondValueBubble, {\n left: `${secondValuePercent}%`,\n });\n }\n\n // Return enhanced component with inner elements\n return {\n ...component,\n container,\n handle,\n valueBubble,\n secondHandle,\n secondValueBubble,\n\n // Add DOM query methods for compatibility\n getContainer: () => container,\n getHandle: () => handle,\n getValueBubble: () => valueBubble,\n getSecondHandle: () => secondHandle || null,\n getSecondValueBubble: () => secondValueBubble || null,\n };\n };\n",
|
|
214
208
|
"// src/core/dom/utils.ts\n\n// Import optimized normalizeClasses from classes module\nexport { normalizeClasses } from \"./classes\";\n\n/**\n * Creates a DOM element with attributes\n *\n * @param tag - Element tag name\n * @param attributes - Element attributes\n * @returns Created element\n */\nexport const createElement = <T extends HTMLElement>(\n tag: string,\n attributes: Record<string, any> = {}\n): T => {\n const element = document.createElement(tag) as T;\n\n Object.entries(attributes).forEach(([key, value]) => {\n if (key === \"className\") {\n element.className = value;\n } else if (key === \"style\" && typeof value === \"object\") {\n Object.assign(element.style, value);\n } else if (key === \"data\" && typeof value === \"object\") {\n Object.entries(value).forEach(([dataKey, dataValue]) => {\n element.dataset[dataKey] = String(dataValue);\n });\n } else if (key === \"children\" && Array.isArray(value)) {\n value.forEach((child) => {\n if (child instanceof Node) {\n element.appendChild(child);\n } else if (child != null) {\n element.appendChild(document.createTextNode(String(child)));\n }\n });\n } else if (key.startsWith(\"on\") && typeof value === \"function\") {\n const eventName = key.slice(2).toLowerCase();\n element.addEventListener(eventName, value);\n } else if (value !== null && value !== undefined) {\n element.setAttribute(key, String(value));\n }\n });\n\n return element;\n};\n\n/**\n * Sets inline styles on an element\n *\n * @param element - Target element\n * @param styles - Styles to set\n * @returns Modified element\n */\nexport const setStyles = <T extends HTMLElement>(\n element: T,\n styles: Partial<CSSStyleDeclaration>\n): T => {\n Object.assign(element.style, styles);\n return element;\n};\n\n/**\n * Checks if an element matches a selector\n *\n * @param element - Element to check\n * @param selector - CSS selector\n * @returns Whether element matches selector\n */\nexport const matches = (element: Element, selector: string): boolean => {\n return element.matches(selector);\n};\n\n/**\n * Finds the closest ancestor matching a selector\n *\n * @param element - Starting element\n * @param selector - CSS selector\n * @returns Matching ancestor or null\n */\nexport const closest = <T extends HTMLElement>(\n element: Element,\n selector: string\n): T | null => {\n return element.closest(selector) as T | null;\n};\n",
|
|
215
209
|
"// src/components/slider/api.ts\nimport { SliderComponent, SliderEvent } from \"./types\";\nimport { SLIDER_COLORS, SLIDER_EVENTS } from \"./types\";\nimport { SliderSize } from \"./constants\";\n\n/**\n * API options interface - structured by feature area\n */\ninterface ApiOptions {\n slider: {\n setValue: (value: number, triggerEvent?: boolean) => any;\n getValue: () => number;\n setSecondValue: (value: number, triggerEvent?: boolean) => any;\n getSecondValue: () => number | null;\n setMin: (min: number) => any;\n getMin: () => number;\n setMax: (max: number) => any;\n getMax: () => number;\n setStep: (step: number) => any;\n getStep: () => number;\n regenerateTicks: () => any;\n };\n disabled: {\n enable: () => void;\n disable: () => void;\n isDisabled: () => boolean;\n };\n appearance: {\n setColor: (color: string) => void;\n getColor: () => string;\n setSize: (size: SliderSize) => void;\n getSize: () => string;\n showTicks: (show: boolean) => void;\n showCurrentValue: (show: boolean) => void;\n };\n text: {\n setText: (text: string) => void;\n getText: () => string;\n };\n icon: {\n setIcon: (html: string) => void;\n getIcon: () => string;\n };\n events: {\n on: (event: string, handler: Function) => void;\n off: (event: string, handler: Function) => void;\n };\n lifecycle: {\n destroy: () => void;\n };\n}\n\n/**\n * Enhances a slider component with a streamlined API\n * @param {ApiOptions} options - API configuration options\n * @returns {Function} Higher-order function that adds API methods to component\n * @internal This is an internal utility for the Slider component\n */\nexport const withAPI =\n (options: ApiOptions) =>\n (component: { element: HTMLElement }): SliderComponent => {\n return {\n ...(component as any),\n\n // Element access\n element: component.element,\n\n // Value management\n setValue(value: number, triggerEvent: boolean = true) {\n options.slider.setValue(value, triggerEvent);\n return this;\n },\n\n getValue() {\n return options.slider.getValue();\n },\n\n setSecondValue(value: number, triggerEvent: boolean = true) {\n options.slider.setSecondValue(value, triggerEvent);\n return this;\n },\n\n getSecondValue() {\n return options.slider.getSecondValue();\n },\n\n // Range management\n setMin(min: number) {\n options.slider.setMin(min);\n return this;\n },\n\n getMin() {\n return options.slider.getMin();\n },\n\n setMax(max: number) {\n options.slider.setMax(max);\n return this;\n },\n\n getMax() {\n return options.slider.getMax();\n },\n\n setStep(step: number) {\n options.slider.setStep(step);\n return this;\n },\n\n getStep() {\n return options.slider.getStep();\n },\n\n // State management\n enable() {\n options.disabled.enable();\n return this;\n },\n\n disable() {\n options.disabled.disable();\n return this;\n },\n\n isDisabled() {\n return options.disabled.isDisabled();\n },\n\n // Appearance management\n setColor(\n color:\n | keyof typeof SLIDER_COLORS\n | (typeof SLIDER_COLORS)[keyof typeof SLIDER_COLORS]\n ) {\n options.appearance.setColor(color);\n return this;\n },\n\n getColor() {\n return options.appearance.getColor();\n },\n\n setSize(size: SliderSize) {\n options.appearance.setSize(size);\n return this;\n },\n\n getSize() {\n return options.appearance.getSize();\n },\n\n showTicks(show: boolean) {\n options.appearance.showTicks(show);\n return this;\n },\n\n showCurrentValue(show: boolean) {\n options.appearance.showCurrentValue(show);\n return this;\n },\n\n // Label and icon management\n setLabel(text: string) {\n if (options.text?.setText) options.text.setText(text);\n return this;\n },\n\n getLabel() {\n return options.text?.getText ? options.text.getText() : \"\";\n },\n\n setIcon(iconHtml: string) {\n if (options.icon?.setIcon) options.icon.setIcon(iconHtml);\n return this;\n },\n\n getIcon() {\n return options.icon?.getIcon ? options.icon.getIcon() : \"\";\n },\n\n // Event management\n on(\n event:\n | keyof typeof SLIDER_EVENTS\n | (typeof SLIDER_EVENTS)[keyof typeof SLIDER_EVENTS],\n handler: (event: SliderEvent) => void\n ) {\n if (options.events?.on) options.events.on(event, handler);\n return this;\n },\n\n off(\n event:\n | keyof typeof SLIDER_EVENTS\n | (typeof SLIDER_EVENTS)[keyof typeof SLIDER_EVENTS],\n handler: (event: SliderEvent) => void\n ) {\n if (options.events?.off) options.events.off(event, handler);\n return this;\n },\n\n // Lifecycle management\n destroy() {\n if (options.lifecycle?.destroy) options.lifecycle.destroy();\n },\n };\n };\n",
|
|
216
|
-
"// src/components/slider/config.ts\nimport {\n createComponentConfig,\n createElementConfig,\n} from \"../../core/config/component\";\nimport { SliderConfig } from \"./types\";\nimport { SLIDER_DEFAULTS } from \"./constants\";\n\n/**\n * Default configuration for the Slider component\n */\nexport const defaultConfig: SliderConfig = {\n min: SLIDER_DEFAULTS.MIN,\n max: SLIDER_DEFAULTS.MAX,\n value: SLIDER_DEFAULTS.VALUE,\n step: SLIDER_DEFAULTS.STEP,\n disabled: SLIDER_DEFAULTS.DISABLED,\n color: SLIDER_DEFAULTS.COLOR,\n size: SLIDER_DEFAULTS.SIZE,\n ticks: SLIDER_DEFAULTS.TICKS,\n showValue: SLIDER_DEFAULTS.SHOW_VALUE,\n snapToSteps: SLIDER_DEFAULTS.SNAP_TO_STEPS,\n range: SLIDER_DEFAULTS.RANGE,\n centered: SLIDER_DEFAULTS.CENTERED,\n iconPosition: SLIDER_DEFAULTS.ICON_POSITION,\n labelPosition: SLIDER_DEFAULTS.LABEL_POSITION,\n valueFormatter: (value) => value.toString(),\n};\n\n/**\n * Creates the base configuration for Slider component\n * @param {SliderConfig} config - User provided configuration\n * @returns {SliderConfig} Complete configuration with defaults applied\n */\nexport const createBaseConfig = (config: SliderConfig = {}): SliderConfig => {\n // Create the base config with defaults applied\n const baseConfig = createComponentConfig(\n defaultConfig,\n config,\n \"slider\"
|
|
210
|
+
"// src/components/slider/config.ts\nimport {\n createComponentConfig,\n createElementConfig,\n} from \"../../core/config/component\";\nimport { SliderConfig } from \"./types\";\nimport { SLIDER_DEFAULTS } from \"./constants\";\n\n/**\n * Default configuration for the Slider component\n */\nexport const defaultConfig: SliderConfig = {\n min: SLIDER_DEFAULTS.MIN,\n max: SLIDER_DEFAULTS.MAX,\n value: SLIDER_DEFAULTS.VALUE,\n step: SLIDER_DEFAULTS.STEP,\n disabled: SLIDER_DEFAULTS.DISABLED,\n color: SLIDER_DEFAULTS.COLOR,\n size: SLIDER_DEFAULTS.SIZE,\n ticks: SLIDER_DEFAULTS.TICKS,\n showValue: SLIDER_DEFAULTS.SHOW_VALUE,\n snapToSteps: SLIDER_DEFAULTS.SNAP_TO_STEPS,\n range: SLIDER_DEFAULTS.RANGE,\n centered: SLIDER_DEFAULTS.CENTERED,\n iconPosition: SLIDER_DEFAULTS.ICON_POSITION,\n labelPosition: SLIDER_DEFAULTS.LABEL_POSITION,\n valueFormatter: (value) => value.toString(),\n};\n\n/**\n * Creates the base configuration for Slider component\n * @param {SliderConfig} config - User provided configuration\n * @returns {SliderConfig} Complete configuration with defaults applied\n */\nexport const createBaseConfig = (config: SliderConfig = {}): SliderConfig => {\n // Create the base config with defaults applied\n const baseConfig = createComponentConfig(\n defaultConfig,\n config,\n \"slider\",\n ) as SliderConfig;\n\n // Schema is no longer needed as we use direct DOM creation\n\n return baseConfig;\n};\n\n/**\n * Generates element configuration for the Slider component\n * @param {SliderConfig} config - Slider configuration\n * @returns {Object} Element configuration object for withElement\n */\nexport const getElementConfig = (config: SliderConfig) => {\n const classes = [\n \"slider\",\n config.class,\n config.disabled ? \"slider--disabled\" : \"\",\n config.size && config.size !== \"XS\"\n ? `slider--${\n typeof config.size === \"string\"\n ? config.size.toLowerCase()\n : config.size\n }`\n : \"\",\n config.color && config.color !== \"primary\" ? `slider--${config.color}` : \"\",\n config.range ? \"slider--range\" : \"\",\n config.centered ? \"slider--centered\" : \"\",\n config.icon ? \"slider--icon\" : \"\",\n ]\n .filter(Boolean)\n .join(\" \");\n\n // Root element is a presentational wrapper — ARIA slider attributes\n // belong on the handle elements (set in dom.ts), not here.\n const attributes: Record<string, string> = {\n tabindex: \"-1\",\n };\n\n if (config.disabled) {\n attributes[\"aria-disabled\"] = \"true\";\n }\n\n return createElementConfig(config, {\n tag: \"div\",\n attributes,\n className: classes,\n forwardEvents: {\n click: true,\n keydown: true,\n touchstart: true,\n touchmove: true,\n touchend: true,\n mousedown: true,\n mousemove: true,\n mouseup: true,\n },\n interactive: true,\n });\n};\n\n/**\n * Creates API configuration for the Slider component\n * @param {Object} comp - Component with slider features\n * @returns {Object} API configuration object\n */\nexport const getApiConfig = (comp) => ({\n slider: {\n setValue: (v, t) => comp.slider?.setValue(v, t),\n getValue: () => comp.slider?.getValue() ?? 0,\n setSecondValue: (v, t) => comp.slider?.setSecondValue(v, t),\n getSecondValue: () => comp.slider?.getSecondValue() ?? null,\n setMin: (m) => comp.slider?.setMin(m),\n getMin: () => comp.slider?.getMin() ?? 0,\n setMax: (m) => comp.slider?.setMax(m),\n getMax: () => comp.slider?.getMax() ?? 100,\n setStep: (s) => comp.slider?.setStep(s),\n getStep: () => comp.slider?.getStep() ?? 1,\n regenerateTicks: () => comp.slider?.regenerateTicks?.(),\n },\n disabled: {\n enable: () => comp.disabled?.enable?.(),\n disable: () => comp.disabled?.disable?.(),\n isDisabled: () => comp.disabled?.isDisabled?.() ?? false,\n },\n appearance: {\n setColor: (c) => comp.appearance?.setColor?.(c),\n getColor: () => comp.appearance?.getColor?.() ?? \"primary\",\n setSize: (s) => comp.setSize?.(s),\n getSize: () => comp.getSize?.() ?? \"XS\",\n showTicks: (s) => comp.appearance?.showTicks?.(s),\n showCurrentValue: (s) => comp.appearance?.showCurrentValue?.(s),\n },\n text: {\n setText: (t) => comp.label?.setText?.(t),\n getText: () => comp.label?.getText?.() ?? \"\",\n },\n icon: {\n setIcon: (h) => comp.icon?.setIcon?.(h),\n getIcon: () => comp.icon?.getIcon?.() ?? \"\",\n },\n events: {\n on: (e, h) => comp.on?.(e, h),\n off: (e, h) => comp.off?.(e, h),\n },\n lifecycle: {\n destroy: () => comp.lifecycle?.destroy?.(),\n },\n});\n",
|
|
217
211
|
"// src/components/snackbar/snackbar.ts\nimport { pipe } from '../../core/compose';\nimport { createBase, withElement } from '../../core/compose/component';\nimport { withActionButton, withDismissTimer } from './features';\nimport { withPosition } from './position';\nimport {\n withEvents,\n withText,\n withVariant,\n withLifecycle\n} from '../../core/compose/features';\nimport { withAPI } from './api';\nimport { createSnackbarQueue } from './queue';\nimport { SnackbarConfig, SnackbarComponent, SnackbarQueue } from './types';\nimport {\n createBaseConfig,\n getElementConfig,\n getTextConfig,\n getApiConfig\n} from './config';\n\n// Create a single queue instance to be shared across all snackbars\nconst queue: SnackbarQueue = createSnackbarQueue();\n\n/**\n * Creates a new Snackbar component\n * @param {SnackbarConfig} config - Snackbar configuration\n * @returns {SnackbarComponent} Snackbar component instance\n */\nconst createSnackbar = (config: SnackbarConfig): SnackbarComponent => {\n if (!config.message) {\n throw new Error('Snackbar message is required');\n }\n\n const baseConfig = createBaseConfig(config);\n\n try {\n const snackbar = pipe(\n createBase,\n withEvents(),\n withElement(getElementConfig(baseConfig)),\n withVariant(baseConfig),\n withPosition(baseConfig),\n withText(getTextConfig(baseConfig)),\n withActionButton(baseConfig),\n withLifecycle(),\n // First apply timer\n withDismissTimer(baseConfig),\n // Then apply API which needs timer\n comp => withAPI(getApiConfig(comp, queue))(comp)\n )(baseConfig);\n\n return snackbar as SnackbarComponent;\n } catch (error) {\n console.error('Snackbar creation error:', error instanceof Error ? error.message : String(error));\n throw new Error(`Failed to create snackbar: ${error instanceof Error ? error.message : String(error)}`);\n }\n};\n\nexport default createSnackbar;",
|
|
218
212
|
"// src/components/snackbar/features.ts\nimport { BaseComponent, SnackbarConfig, SnackbarTimer } from './types';\n\n/**\n * Adds action button to snackbar\n * @param {SnackbarConfig} config - Component configuration\n * @returns {Function} Higher-order function that adds action button\n */\nexport const withActionButton = (config: SnackbarConfig) => \n (component: BaseComponent): BaseComponent => {\n if (!config.action) return component;\n\n const button = document.createElement('button');\n button.className = `${config.prefix}-snackbar-action`;\n button.textContent = config.action;\n\n component.element.appendChild(button);\n\n return {\n ...component,\n actionButton: button\n };\n };\n\n/**\n * Adds auto-dismiss timer functionality\n * @param {SnackbarConfig} config - Component configuration\n * @returns {Function} Higher-order function that adds timer features\n */\nexport const withDismissTimer = (config: SnackbarConfig) => \n (component: BaseComponent): BaseComponent => {\n let timeoutId: number | null = null;\n\n const startTimer = (): void => {\n // Clear any existing timer\n if (timeoutId) {\n clearTimeout(timeoutId);\n timeoutId = null;\n }\n\n // Only start timer if duration is positive and numeric\n if (typeof config.duration === 'number' && config.duration > 0) {\n timeoutId = window.setTimeout(() => {\n if (component.element && component.emit) {\n component.emit('dismiss');\n }\n }, config.duration);\n }\n };\n\n const stopTimer = (): void => {\n if (timeoutId) {\n clearTimeout(timeoutId);\n timeoutId = null;\n }\n };\n\n // Clean up on destroy\n const originalDestroy = component.lifecycle?.destroy;\n if (component.lifecycle) {\n component.lifecycle.destroy = () => {\n stopTimer();\n if (originalDestroy) {\n originalDestroy.call(component.lifecycle);\n }\n };\n }\n\n return {\n ...component,\n timer: {\n start: startTimer,\n stop: stopTimer\n } as SnackbarTimer\n };\n };",
|
|
219
213
|
"// src/components/snackbar/constants.ts\n\n/**\n * Snackbar visual variants\n * @category Components\n */\nexport const SNACKBAR_VARIANTS = {\n /** Basic snackbar with just text */\n BASIC: 'basic',\n /** Snackbar with an action button */\n ACTION: 'action'\n} as const;\n\n/**\n * Snackbar display positions\n * @category Components\n */\nexport const SNACKBAR_POSITIONS = {\n /** Centered position (default) */\n CENTER: 'center',\n /** Start-aligned position */\n START: 'start',\n /** End-aligned position */\n END: 'end'\n} as const;\n\n/**\n * Snackbar visibility states\n * @category Components\n */\nexport const SNACKBAR_STATES = {\n /** Snackbar is visible */\n VISIBLE: 'visible',\n /** Snackbar is hidden */\n HIDDEN: 'hidden'\n} as const;\n\n/**\n * Snackbar event types\n * @category Components\n */\nexport const SNACKBAR_EVENTS = {\n /** Fired when snackbar opens */\n OPEN: 'open',\n /** Fired when snackbar closes */\n CLOSE: 'close',\n /** Fired when action button is clicked */\n ACTION: 'action',\n /** Fired when auto-dismiss timer completes */\n DISMISS: 'dismiss'\n} as const;\n\n/**\n * Default configuration values for snackbar\n * @category Components\n */\nexport const SNACKBAR_DEFAULTS = {\n /** Default visual variant */\n VARIANT: SNACKBAR_VARIANTS.BASIC,\n /** Default display position */\n POSITION: SNACKBAR_POSITIONS.CENTER,\n /** Default display duration in milliseconds (4 seconds) */\n DURATION: 4000,\n /** Default z-index for snackbars */\n Z_INDEX: 1000,\n /** Default animation duration in milliseconds */\n ANIMATION_DURATION: 300\n} as const;\n\n/**\n * CSS class names used by the snackbar component\n * @category Components\n */\nexport const SNACKBAR_CLASSES = {\n /** Root element class */\n ROOT: 'snackbar',\n /** Basic variant class */\n BASIC: 'snackbar--basic',\n /** Action variant class */\n ACTION: 'snackbar--action',\n /** Center position class */\n CENTER: 'snackbar--center',\n /** Start position class */\n START: 'snackbar--start',\n /** End position class */\n END: 'snackbar--end',\n /** Visible state class */\n VISIBLE: 'snackbar--visible',\n /** Hidden state class */\n HIDDEN: 'snackbar--hidden',\n /** Message text class */\n MESSAGE: 'snackbar__message',\n /** Action button class */\n ACTION_BUTTON: 'snackbar__action'\n} as const;",
|
|
@@ -253,7 +247,7 @@
|
|
|
253
247
|
"// src/components/tooltip/constants.ts\n\n/**\n * Tooltip positions\n * @category Components\n */\nexport const TOOLTIP_POSITIONS = {\n /** Position above the target element */\n TOP: 'top',\n /** Position to the right of the target element */\n RIGHT: 'right',\n /** Position below the target element */\n BOTTOM: 'bottom',\n /** Position to the left of the target element */\n LEFT: 'left',\n /** Position above and aligned to the start of the target */\n TOP_START: 'top-start',\n /** Position above and aligned to the end of the target */\n TOP_END: 'top-end',\n /** Position to the right and aligned to the start of the target */\n RIGHT_START: 'right-start',\n /** Position to the right and aligned to the end of the target */\n RIGHT_END: 'right-end',\n /** Position below and aligned to the start of the target */\n BOTTOM_START: 'bottom-start',\n /** Position below and aligned to the end of the target */\n BOTTOM_END: 'bottom-end',\n /** Position to the left and aligned to the start of the target */\n LEFT_START: 'left-start',\n /** Position to the left and aligned to the end of the target */\n LEFT_END: 'left-end'\n} as const;\n\n/**\n * Tooltip visual variants\n * @category Components\n */\nexport const TOOLTIP_VARIANTS = {\n /** Standard tooltip with background and arrow */\n DEFAULT: 'default',\n /** Rich tooltip with support for HTML content */\n RICH: 'rich',\n /** Plain text tooltip with minimal styling */\n PLAIN: 'plain'\n} as const;\n\n/**\n * Tooltip events\n * @category Components\n */\nexport const TOOLTIP_EVENTS = {\n /** Fired when tooltip becomes visible */\n SHOW: 'show',\n /** Fired when tooltip becomes hidden */\n HIDE: 'hide',\n /** Fired when mouse enters target element */\n ENTER: 'enter',\n /** Fired when mouse leaves target element */\n LEAVE: 'leave'\n} as const;\n\n/**\n * Default configuration values for tooltip\n * @category Components\n */\nexport const TOOLTIP_DEFAULTS = {\n /** Default tooltip position */\n POSITION: TOOLTIP_POSITIONS.BOTTOM,\n /** Default visual variant */\n VARIANT: TOOLTIP_VARIANTS.DEFAULT,\n /** Default visibility state */\n VISIBLE: false,\n /** Default show delay in milliseconds */\n SHOW_DELAY: 300,\n /** Default hide delay in milliseconds */\n HIDE_DELAY: 100,\n /** Default offset from target in pixels */\n OFFSET: 8,\n /** Default arrow size in pixels */\n ARROW_SIZE: 8,\n /** Whether to show tooltip on focus by default */\n SHOW_ON_FOCUS: true,\n /** Whether to show tooltip on hover by default */\n SHOW_ON_HOVER: true,\n /** Whether to allow rich HTML content by default */\n RICH: false\n} as const;\n\n/**\n * CSS class names used by the tooltip component\n * @category Components\n */\nexport const TOOLTIP_CLASSES = {\n /** Root element class */\n ROOT: 'tooltip',\n /** Container for the tooltip content */\n CONTAINER: 'tooltip-container',\n /** Arrow element class */\n ARROW: 'tooltip-arrow',\n /** Content element class */\n CONTENT: 'tooltip-content',\n /** Visible state class */\n VISIBLE: 'tooltip--visible',\n /** Hidden state class */\n HIDDEN: 'tooltip--hidden',\n /** Default variant class */\n DEFAULT: 'tooltip--default',\n /** Rich variant class */\n RICH: 'tooltip--rich',\n /** Plain variant class */\n PLAIN: 'tooltip--plain',\n /** Position prefix - append position name (e.g. tooltip--top) */\n POSITION_PREFIX: 'tooltip--'\n} as const;",
|
|
254
248
|
"// src/index.ts\n/**\n * Main mtrl library exports\n *\n * @packageDocumentation\n */\n\nexport * from \"./components\";\nexport * from \"./core\";\n\n// Import from core\nimport {\n addClass,\n removeClass,\n hasClass,\n toggleClass,\n throttle,\n debounce,\n once,\n PREFIX,\n createComponentConfig,\n createElementConfig,\n setComponentDefaults,\n getComponentDefaults,\n setGlobalDefaults,\n clearGlobalDefaults,\n} from \"./core\";\n\n// Export all \"create*\" functions\nexport {\n addClass,\n removeClass,\n hasClass,\n toggleClass,\n throttle,\n debounce,\n once,\n PREFIX,\n createComponentConfig,\n createElementConfig,\n // Global configuration functions\n setComponentDefaults,\n getComponentDefaults,\n setGlobalDefaults,\n clearGlobalDefaults,\n};\n\n// NOTE: Constants are no longer exported from the main entry point\n// to enable proper tree-shaking. Import constants directly from\n// component paths:\n//\n// Before (no longer works):\n// import { BUTTON_VARIANTS } from 'mtrl'\n//\n// After:\n// import { BUTTON_VARIANTS } from 'mtrl/components/button/constants'\n//\n// Or use the component's index which re-exports its constants:\n// import { BUTTON_VARIANTS } from 'mtrl/components/button'\n"
|
|
255
249
|
],
|
|
256
|
-
"mappings": "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",
|
|
257
|
-
"debugId": "
|
|
250
|
+
"mappings": "+fAqBa,EAAO,IAAO,IACzB,CAAC,IAAc,EAAI,OAAO,CAAC,EAAG,IAAM,EAAE,CAAC,EAAG,CAAC,EAiBhC,GAAU,IAAO,IAC5B,CAAC,IAAc,EAAI,YAAY,CAAC,EAAG,IAAM,EAAE,CAAC,EAAG,CAAC,EAmBrC,GAAY,IACpB,IACA,CAAC,EAAQ,EAAa,CAAC,IAC1B,EAAa,OACX,CAAC,EAAK,KAAiB,IAClB,KACA,EAAY,EAAK,CAAO,CAC7B,GACA,CACF,MChCW,GAAkB,CAAC,EAA0B,CAAC,KAAkB,CAC3E,QAAS,KACT,SACA,KAAK,EAAG,CACN,OAAO,KAEX,OC5Ba,GAAgB,CAC3B,EACA,EAAkC,CAAC,IACnB,CAChB,GAAI,CAAC,EAAY,OAAO,EAGxB,IAAM,EAAO,OAAO,KAAK,CAAU,EACnC,GAAI,EAAK,SAAW,EAAG,CACrB,IAAM,EAAQ,EAAW,EAAK,IAC9B,GAAI,GAAS,KACX,EAAQ,aAAa,EAAK,GAAI,OAAO,CAAK,CAAC,EAE7C,OAAO,EAIT,QAAW,KAAO,EAAY,CAC5B,IAAM,EAAQ,EAAW,GACzB,GAAI,GAAS,KACX,EAAQ,aAAa,EAAK,OAAO,CAAK,CAAC,EAI3C,OAAO,GAWI,GAAmB,CAC9B,EACA,EAAuB,CAAC,IACR,CAEhB,QAAS,EAAI,EAAG,EAAI,EAAW,OAAQ,IACrC,EAAQ,gBAAgB,EAAW,EAAE,EAEvC,OAAO,GAWI,GAAkB,CAC7B,EACA,IAKgB,CAEhB,QAAS,EAAI,EAAG,EAAI,EAAW,OAAQ,IAAK,CAC1C,IAAM,EAAK,EAAW,GACtB,GAAI,EAAG,SAAW,OAAS,EAAG,OAAS,KACrC,EAAQ,aAAa,EAAG,IAAK,OAAO,EAAG,KAAK,CAAC,EACxC,QAAI,EAAG,SAAW,SACvB,EAAQ,gBAAgB,EAAG,GAAG,EAGlC,OAAO,GASI,GAAe,CAC1B,EACA,IACY,EAAQ,aAAa,CAAS,EAS/B,GAAe,CAC1B,EACA,EACA,EAAuB,KACZ,EAAQ,aAAa,CAAS,GAAK,MCzGnC,EAAS,OAOT,GAAoB,CAAC,IAAyB,QAAa,IAQ3D,GAAmB,CAAC,EAAmB,IAA6B,GAAG,MAAc,IAQrF,GAAkB,CAAC,EAAmB,IAA4B,GAAG,KAAa,IAKnF,GAwHA,GAWC,kBAnIN,CAAK,IAAL,CACL,SAAS,SACT,YAAY,YACZ,YAAY,YACZ,WAAW,WACX,SAAS,WALC,UAwHL,CAAK,IAAL,CACL,WAAW,WACX,UAAU,UACV,SAAS,SACT,UAAU,UACV,QAAQ,UALE,SAWC,GAAa,CAQxB,IAAK,CAAC,EAAe,EAAkB,IAA8B,CACnE,IAAI,EAAY,EAChB,GAAI,EAAS,GAAa,IAAI,IAC9B,GAAI,EAAU,GAAa,KAAK,IAChC,OAAO,GAQT,KAAM,IAAI,IACR,EAAQ,OAAO,OAAO,EAAE,KAAK,GAAG,CACpC,QCjLM,GAGA,GACA,GAAiB,IAWV,GAAmB,IAC3B,IACU,CAEb,GAAI,EAAQ,SAAW,EAAG,MAAO,CAAC,EAGlC,GAAI,EAAQ,SAAW,GAAK,OAAO,EAAQ,KAAO,SAAU,CAC1D,IAAM,EAAQ,EAAQ,GACtB,GAAI,CAAC,EAAO,MAAO,CAAC,EACpB,GAAI,CAAC,EAAM,SAAS,GAAG,EAAG,MAAO,CAAC,CAAK,EAGvC,GAAI,GAAW,IAAI,CAAK,EACtB,OAAO,GAAW,IAAI,CAAK,EAK/B,IAAM,EAAO,IAAI,IACX,EAAmB,CAAC,EAE1B,QAAW,KAAO,EAChB,GAAI,OAAO,IAAQ,UAAY,EAE7B,GAAI,CAAC,EAAI,SAAS,GAAG,GACnB,GAAI,CAAC,EAAK,IAAI,CAAG,EACf,EAAK,IAAI,CAAG,EACZ,EAAO,KAAK,CAAG,EAIjB,OAAI,MAAM,GAAG,EAAE,QAAQ,CAAC,IAAM,CAC5B,IAAM,EAAU,EAAE,KAAK,EACvB,GAAI,GAAW,CAAC,EAAK,IAAI,CAAO,EAC9B,EAAK,IAAI,CAAO,EAChB,EAAO,KAAK,CAAO,EAEtB,EAEE,QAAI,MAAM,QAAQ,CAAG,EAE1B,EAAI,QAAQ,CAAC,IAAM,CACjB,GAAI,OAAO,IAAM,UAAY,EAE3B,EAAE,MAAM,GAAG,EAAE,QAAQ,CAAC,IAAS,CAC7B,IAAM,EAAU,EAAK,KAAK,EAC1B,GAAI,GAAW,CAAC,EAAK,IAAI,CAAO,EAC9B,EAAK,IAAI,CAAO,EAChB,EAAO,KAAK,CAAO,EAEtB,EAEJ,EAKL,GACE,EAAQ,SAAW,GACnB,OAAO,EAAQ,KAAO,UACtB,EAAO,QAAU,IAEjB,GAAI,GAAW,KAAO,GACpB,GAAW,IAAI,EAAQ,GAAI,CAAM,EAIrC,OAAO,GAYI,EAAW,CACtB,KACG,IACa,CAEhB,GAAI,EAAQ,SAAW,EAAG,OAAO,EAIjC,GAAI,EAAQ,SAAW,GAAK,MAAM,QAAQ,EAAQ,EAAE,EAClD,OAAO,EAAS,EAAS,GAAG,EAAQ,EAAE,EAIxC,GAAI,EAAQ,SAAW,GAAK,OAAO,EAAQ,KAAO,SAAU,CAC1D,IAAM,EAAM,EAAQ,GACpB,GAAI,GAAO,CAAC,EAAI,SAAS,GAAG,EAAG,CAC7B,IAAM,EAAW,EAAI,WAAW,EAAgB,EAC5C,EACA,GAAmB,EAEvB,GAAI,CAAC,EAAS,SAAS,GAAG,EAExB,OADA,EAAQ,UAAU,IAAI,CAAQ,EACvB,GAMb,IAAM,EAAa,GAAiB,GAAG,CAAO,EAC9C,QAAW,KAAO,EAAY,CAC5B,IAAM,EAAW,EAAI,WAAW,EAAgB,EAC5C,EACA,GAAmB,EAGvB,GAAI,EAAS,SAAS,GAAG,EAEvB,EAAS,MAAM,GAAG,EAAE,QAAQ,CAAC,IAAM,CACjC,IAAM,EAAU,EAAE,KAAK,EACvB,GAAI,EAAS,EAAQ,UAAU,IAAI,CAAO,EAC3C,EAED,OAAQ,UAAU,IAAI,CAAQ,EAIlC,OAAO,GAYI,GAAc,CACzB,KACG,IACa,CAEhB,GAAI,EAAQ,SAAW,EAAG,OAAO,EAGjC,GAAI,EAAQ,SAAW,GAAK,MAAM,QAAQ,EAAQ,EAAE,EAClD,OAAO,GAAY,EAAS,GAAG,EAAQ,EAAE,EAI3C,GAAI,EAAQ,SAAW,GAAK,OAAO,EAAQ,KAAO,SAAU,CAC1D,IAAM,EAAM,EAAQ,GACpB,GAAI,GAAO,CAAC,EAAI,SAAS,GAAG,EAAG,CAC7B,IAAM,EAAW,EAAI,WAAW,EAAgB,EAC5C,EACA,GAAmB,EAEvB,GAAI,CAAC,EAAS,SAAS,GAAG,EAExB,OADA,EAAQ,UAAU,OAAO,CAAQ,EAC1B,GAMb,IAAM,EAAa,GAAiB,GAAG,CAAO,EAC9C,QAAW,KAAO,EAAY,CAC5B,IAAM,EAAW,EAAI,WAAW,EAAgB,EAC5C,EACA,GAAmB,EAGvB,GAAI,EAAS,SAAS,GAAG,EACvB,EAAS,MAAM,GAAG,EAAE,QAAQ,CAAC,IAAM,CACjC,IAAM,EAAU,EAAE,KAAK,EACvB,GAAI,EAAS,EAAQ,UAAU,OAAO,CAAO,EAC9C,EAED,OAAQ,UAAU,OAAO,CAAQ,EAIrC,OAAO,GAYI,GAAc,CACzB,KACG,IACa,CAEhB,GAAI,EAAQ,SAAW,GAAK,MAAM,QAAQ,EAAQ,EAAE,EAClD,OAAO,GAAY,EAAS,GAAG,EAAQ,EAAE,EAI3C,GAAI,EAAQ,SAAW,GAAK,OAAO,EAAQ,KAAO,SAAU,CAC1D,IAAM,EAAM,EAAQ,GACpB,GAAI,GAAO,CAAC,EAAI,SAAS,GAAG,EAAG,CAC7B,IAAM,EAAW,EAAI,WAAW,EAAgB,EAC5C,EACA,GAAmB,EAEvB,GAAI,CAAC,EAAS,SAAS,GAAG,EAExB,OADA,EAAQ,UAAU,OAAO,CAAQ,EAC1B,GAMb,IAAM,EAAa,GAAiB,GAAG,CAAO,EAC9C,QAAW,KAAO,EAAY,CAC5B,IAAM,EAAW,EAAI,WAAW,EAAgB,EAC5C,EACA,GAAmB,EAGvB,GAAI,EAAS,SAAS,GAAG,EACvB,EAAS,MAAM,GAAG,EAAE,QAAQ,CAAC,IAAM,CACjC,IAAM,EAAU,EAAE,KAAK,EACvB,GAAI,EAAS,EAAQ,UAAU,OAAO,CAAO,EAC9C,EAED,OAAQ,UAAU,OAAO,CAAQ,EAIrC,OAAO,GAYI,GAAW,CACtB,KACG,IACS,CAEZ,GAAI,EAAQ,SAAW,EAAG,MAAO,GAGjC,GAAI,EAAQ,SAAW,GAAK,MAAM,QAAQ,EAAQ,EAAE,EAClD,OAAO,GAAS,EAAS,GAAG,EAAQ,EAAE,EAIxC,GAAI,EAAQ,SAAW,GAAK,OAAO,EAAQ,KAAO,SAAU,CAC1D,IAAM,EAAM,EAAQ,GACpB,GAAI,GAAO,CAAC,EAAI,SAAS,GAAG,EAAG,CAC7B,IAAM,EAAW,EAAI,WAAW,EAAgB,EAC5C,EACA,GAAmB,EAEvB,GAAI,CAAC,EAAS,SAAS,GAAG,EACxB,OAAO,EAAQ,UAAU,SAAS,CAAQ,GAMhD,IAAM,EAAa,GAAiB,GAAG,CAAO,EAC9C,QAAW,KAAO,EAAY,CAC5B,IAAM,EAAW,EAAI,WAAW,EAAgB,EAC5C,EACA,GAAmB,EAGvB,GAAI,EAAS,SAAS,GAAG,EAAG,CAE1B,IAAM,EAAS,EACZ,MAAM,GAAG,EACT,IAAI,CAAC,IAAM,EAAE,KAAK,CAAC,EACnB,OAAO,OAAO,EACjB,QAAW,KAAS,EAClB,GAAI,CAAC,EAAQ,UAAU,SAAS,CAAK,EACnC,MAAO,GAIX,QAAI,CAAC,EAAQ,UAAU,SAAS,CAAQ,EACtC,MAAO,GAKb,MAAO,kBAhUT,KAGM,GAAmB,GAAG,KAGtB,GAAa,IAAI,MCoKvB,MAAM,EAAY,CACR,MAAQ,IAAI,IACZ,QAAU,GAElB,OAAO,CAAC,EAAc,MAAoB,CACxC,IAAM,EAAO,KAAK,MAAM,IAAI,CAAG,EAC/B,GAAI,GAAM,OAAQ,CAChB,IAAM,EAAU,EAAK,IAAI,EAOzB,OANA,EAAQ,UAAY,GACpB,EAAQ,UAAY,GACpB,EAAQ,gBAAgB,IAAI,EAC5B,OAAO,KAAK,EAAQ,OAAO,EAAE,QAC3B,CAAC,IAAQ,OAAO,EAAQ,QAAQ,EAClC,EACO,EAET,OAAO,SAAS,cAAc,CAAG,EAGnC,OAAO,CAAC,EAA4B,CAClC,IAAM,EAAM,EAAQ,QAAQ,YAAY,EACpC,EAAO,KAAK,MAAM,IAAI,CAAG,EAE7B,GAAI,CAAC,EACH,EAAO,CAAC,EACR,KAAK,MAAM,IAAI,EAAK,CAAI,EAG1B,GAAI,EAAK,OAAS,KAAK,QACrB,KAAK,aAAa,CAAO,EACzB,EAAK,KAAK,CAAO,EAIb,YAAY,CAAC,EAA4B,CAC/C,IAAM,EAAY,EAAgB,gBAClC,GAAI,EAAU,CACZ,QAAW,KAAS,EAClB,EAAQ,oBAAoB,EAAO,EAAS,EAAM,EAEpD,OAAQ,EAAgB,gBAG1B,EAAQ,UAAY,GACpB,EAAQ,UAAY,GACpB,EAAQ,gBAAgB,IAAI,EAC5B,OAAO,KAAK,EAAQ,OAAO,EAAE,QAAQ,CAAC,IAAQ,OAAO,EAAQ,QAAQ,EAAI,EACzE,EAAQ,YAAY,YAAY,CAAO,EAE3C,KAjGM,GAKA,GAAuB,CAC3B,EACA,EACA,IACS,CACT,GAAI,CAAC,GAAkB,CAAC,GAAS,MAAQ,CAAC,GAAS,GAAK,OAEvD,EAAgB,gBAAkB,CAAC,EAEpC,QAAW,KAAe,EAAe,CACvC,IAAM,EAAc,EAAc,GAC5B,EAAU,CAAC,IAAiB,CAChC,IAAI,EAAgB,GAEpB,GAAI,OAAO,IAAgB,WACzB,GAAI,CACF,EAAgB,EAAY,IAAK,EAAS,SAAQ,EAAG,CAAK,EAC1D,MAAO,EAAO,CACd,QAAQ,KAAK,gCAAgC,KAAgB,CAAK,EAClE,EAAgB,GAGlB,OAAgB,QAAQ,CAAW,EAGrC,GAAI,GAAiB,EAAQ,KAC3B,EAAQ,KAAK,EAAa,CAAE,QAAO,UAAS,cAAe,CAAM,CAAC,GAIrE,EAAgB,gBAAgB,GAAe,EAGhD,IAAM,EAAU,GAAqB,IAAI,CAAW,EAChD,CAAE,QAAS,EAAK,EAChB,OACJ,EAAQ,iBAAiB,EAAa,EAAS,CAAO,IA0DpD,GASO,EAAgB,CAC3B,EAAgC,CAAC,IACjB,CAEhB,GAAI,CAAC,GAAW,OAAO,KAAK,CAAO,EAAE,SAAW,EAC9C,OAAO,SAAS,cAAc,KAAK,EAIrC,GAAI,OAAO,IAAY,SACrB,OAAO,SAAS,cAAc,CAAO,EAIvC,IAAM,EAAU,SAAS,cAAc,EAAQ,KAAO,KAAK,EAG3D,GAAI,EAAQ,KAAM,EAAQ,UAAY,EAAQ,KACzC,QAAI,EAAQ,KAAM,EAAQ,YAAc,EAAQ,KAGrD,GAAI,EAAQ,GAAI,EAAQ,GAAK,EAAQ,GACrC,GAAI,EAAQ,KAAM,EAAQ,aAAa,OAAQ,EAAQ,IAAI,EAC3D,GAAI,EAAQ,MAAO,EAAQ,MAAQ,EAAQ,MAC3C,GAAI,EAAQ,WAAa,OAAW,EAAQ,SAAW,EAAQ,SAG/D,GAAI,EAAQ,MACV,GAAI,OAAO,EAAQ,QAAU,SAC3B,EAAQ,aAAa,QAAS,EAAQ,KAAK,EAE3C,YAAO,OAAO,EAAQ,MAAO,EAAQ,KAAK,EAK9C,GAAI,EAAQ,KAAM,EAAQ,aAAa,OAAQ,EAAQ,IAAI,EAC3D,GAAI,EAAQ,UAAW,EAAQ,aAAa,aAAc,EAAQ,SAAS,EAC3E,GAAI,EAAQ,gBACV,EAAQ,aAAa,mBAAoB,EAAQ,eAAe,EAClE,GAAI,EAAQ,eACV,EAAQ,aAAa,kBAAmB,EAAQ,cAAc,EAChE,GAAI,EAAQ,aAAe,OACzB,EAAQ,aAAa,cAAe,OAAO,EAAQ,UAAU,CAAC,EAGhE,IAAM,EAAc,EAAQ,WAAa,EAAQ,MACjD,GAAI,EAAa,EAAS,EAAS,CAAW,EAC9C,GAAI,EAAQ,SAAU,CACpB,IAAM,EAAU,MAAM,QAAQ,EAAQ,QAAQ,EAC1C,EAAQ,SACR,EAAQ,SAAS,MAAM,GAAG,EAC9B,EAAQ,UAAU,IAAI,GAAG,EAAQ,OAAO,OAAO,CAAC,EAIlD,GAAI,EAAQ,KACV,OAAO,OAAO,EAAQ,QAAS,EAAQ,IAAI,EAI7C,GAAI,EAAQ,WACV,GAAc,EAAS,EAAQ,UAAU,EAI3C,QAAW,KAAO,EAChB,GACE,CAAC,CACC,MACA,YACA,OACA,OACA,KACA,OACA,QACA,WACA,QACA,OACA,YACA,kBACA,iBACA,aACA,OACA,QACA,YACA,WACA,aACA,gBACA,WACA,SACF,EAAE,SAAS,CAAG,EACd,CACA,IAAM,EAAQ,EAAQ,GACtB,GAAI,GAAS,KACX,EAAQ,aAAa,EAAK,OAAO,CAAK,CAAC,EAM7C,GAAI,EAAQ,cACV,GAAqB,EAAS,EAAQ,cAAe,EAAQ,OAAO,EAItE,GAAI,EAAQ,UAAW,EAAQ,UAAU,YAAY,CAAO,EAC5D,GAAI,EAAQ,SAAU,EAAQ,SAAS,EAAS,EAAQ,OAAO,EAE/D,OAAO,GA4CI,GAAmB,CAC9B,EAAmC,CAAC,IACrB,CACf,IAAM,EAAU,SAAS,gBACvB,6BACA,EAAQ,KAAO,KACjB,EAEA,GAAI,EAAQ,KAAM,EAAQ,YAAc,EAAQ,KAChD,GAAI,EAAQ,GAAI,EAAQ,GAAK,EAAQ,GACrC,GAAI,EAAQ,WAAY,GAAc,EAAgB,EAAQ,UAAU,EACxE,GAAI,EAAQ,cACV,GAAqB,EAAS,EAAQ,cAAe,EAAQ,OAAO,EACtE,GAAI,EAAQ,UAAW,EAAQ,UAAU,YAAY,CAAO,EAC5D,GAAI,EAAQ,SAAU,EAAQ,SAAS,EAAS,EAAQ,OAAO,EAE/D,OAAO,GAOI,GAAsB,CACjC,IACS,CACT,IAAM,EAAY,EAAgB,gBAClC,GAAI,EAAU,CACZ,QAAW,KAAS,EAClB,EAAQ,oBAAoB,EAAO,EAAS,EAAM,EAEpD,OAAQ,EAAgB,gCA7Z5B,KAyHM,GAAuB,IAAI,IAAI,CAAC,aAAc,WAAW,CAAC,EAmG1D,GAAc,IAAI,KC9JxB,SAAS,EAAY,CAAC,EAAmC,CACvD,MAAO,YAAa,EAMtB,SAAS,EAAY,CAAC,EAAmC,CACvD,MAAO,YAAa,GAAS,YAAa,MAzC/B,GAMA,GAoBA,GAAkB,IAAe,CAC5C,MAAO,iBAAkB,QAAU,UAAU,eAAiB,GAqBnD,GAAiB,CAAC,IAAkC,CAE/D,GAAI,GAAa,CAAK,GAAK,EAAM,QAAQ,OAAS,EAAG,CACnD,IAAM,EAAQ,EAAM,QAAQ,GAC5B,MAAO,CACL,QAAS,EAAM,QACf,QAAS,EAAM,QACf,MAAO,EAAM,MACb,MAAO,EAAM,MACb,OAAQ,EAAM,OACd,eAAgB,IAAM,EAAM,eAAe,EAC3C,gBAAiB,IAAM,EAAM,gBAAgB,EAC7C,KAAM,EAAM,IACd,EAIF,GAAI,GAAa,CAAK,EACpB,MAAO,CACL,QAAS,EAAM,QACf,QAAS,EAAM,QACf,MAAO,EAAM,MACb,MAAO,EAAM,MACb,OAAQ,EAAM,OACd,eAAgB,IAAM,EAAM,eAAe,EAC3C,gBAAiB,IAAM,EAAM,gBAAgB,EAC7C,KAAM,EAAM,IACd,EAIF,MAAO,CACL,QAAS,EACT,QAAS,EACT,MAAO,EACP,MAAO,EACP,OAAQ,EAAM,OACd,eAAgB,IAAM,EAAM,eAAe,EAC3C,gBAAiB,IAAM,EAAM,gBAAgB,EAC7C,KAAM,EAAM,IACd,iBAxFW,GAA0C,CAAE,QAAS,EAAK,EAM1D,GAAe,CAC1B,YAAa,GACb,kBAAmB,IACnB,cAAe,IACf,gBAAiB,EACnB,QCsCM,GAAa,CAAC,KAAoB,CAMtC,SAAU,CAAC,IAAyB,GAAG,KAAU,IAQjD,iBAAkB,CAAC,EAAc,IAC/B,GAAG,MAAS,IAQd,gBAAiB,CAAC,EAAc,IAC9B,GAAG,KAAQ,GACf,GASa,EAAa,CACxB,EAA8B,CAAC,KACZ,CACnB,SACA,cAAe,EAAO,iBACnB,GAAW,EAAO,QAAU,MAAM,EAKrC,WAAY,CACV,UAAW,EACX,cAAe,CAAE,EAAG,EAAG,EAAG,CAAE,EAC5B,WAAY,GACZ,aAAc,IAChB,EAMA,gBAAgB,CAAC,EAAc,EAA+B,CAE5D,IAAM,EAAa,GAAe,CAAmB,EAErD,GAAI,IAAW,QACb,KAAK,WAAa,CAChB,UAAW,KAAK,IAAI,EACpB,cAAe,CACb,EAAG,EAAW,QACd,EAAG,EAAW,OAChB,EACA,WAAY,GACZ,aAAc,EAAW,MAC3B,EACK,QAAI,IAAW,MACpB,KAAK,WAAW,WAAa,GAC7B,KAAK,WAAW,aAAe,KAGrC,GAOa,EACX,CAAC,EAA8B,CAAC,IAChC,CAA0B,IAAuC,CAI/D,IAAM,EAAmB,CAAC,IAAuB,CAI/C,GAHA,EAAK,iBAAiB,EAAO,OAAO,EACpC,EAAQ,UAAU,IAAI,GAAG,EAAK,SAAS,cAAc,GAAG,EAEpD,EAAQ,eAAe,YAAc,SAAU,EAChD,EAAkB,KAAK,aAAc,GAAe,CAAK,CAAC,GAOzD,EAAiB,CAAC,IAAuB,CAC7C,GAAI,CAAC,EAAK,WAAW,WAAY,OAEjC,IAAM,EAAgB,KAAK,IAAI,EAAI,EAAK,WAAW,UAKnD,GAJA,EAAQ,UAAU,OAAO,GAAG,EAAK,SAAS,cAAc,GAAG,EAC3D,EAAK,iBAAiB,EAAO,KAAK,EAG9B,EAAgB,GAAa,eAAiB,SAAU,EACzD,EAAkB,KAAK,MAAO,GAAe,CAAK,CAAC,EAGtD,GAAI,EAAQ,eAAe,UAAY,SAAU,EAC9C,EAAkB,KAAK,WAAY,GAAe,CAAK,CAAC,GAOvD,EAAkB,CAAC,IAAuB,CAC9C,GAAI,CAAC,EAAK,WAAW,WAAY,OAEjC,IAAM,EAAa,GAAe,CAAK,EACjC,EAAS,EAAW,QAAU,EAAK,WAAW,cAAc,EAC5D,EAAS,EAAW,QAAU,EAAK,WAAW,cAAc,EAGlE,GACE,KAAK,IAAI,CAAM,EAAI,GAAa,iBAChC,SAAU,EAET,EAAkB,KAAK,QAAS,CAC/B,UAAW,EAAS,EAAI,QAAU,OAClC,SACA,QACF,CAAC,EAGH,GAAI,EAAQ,eAAe,WAAa,SAAU,EAC/C,EAAkB,KAAK,YAAa,IAAK,EAAY,SAAQ,QAAO,CAAC,GAKpE,EAAO,EAGT,EAAS,EAAU,OAAO,QAAU,EAAQ,OAGhD,GAAI,OAAO,IAAW,SACpB,EAAS,SAAS,cAAc,CAAM,EAIxC,IAAM,EAAuC,CAC3C,IAAK,EAAQ,KAAO,MACpB,UAAW,CACT,EAAK,SACH,EAAQ,eAAiB,EAAK,eAAiB,WACjD,EACA,GAAgB,GAAK,EAAQ,YACzB,EAAK,SAAS,aAAa,EAC3B,KACJ,GAAI,MAAM,QAAQ,EAAQ,SAAS,EAC/B,EAAQ,UACR,CAAC,EAAQ,SAAS,CACxB,EAAE,OAAO,OAAO,EAChB,WAAY,EAAQ,YAAc,CAAC,EAEnC,GAAI,EAAQ,GACZ,KAAM,EAAQ,KACd,MAAO,EAAQ,MACf,SAAU,EAAQ,SAClB,MAAO,EAAQ,MAEf,KAAM,EAAQ,KAEd,KAAM,EAAQ,KACd,UAAW,EAAQ,UACnB,gBAAiB,EAAQ,gBACzB,eAAgB,EAAQ,eACxB,WAAY,EAAQ,WACpB,cAAe,EAAQ,eAAiB,CAAC,EACzC,QAAS,EACT,UAAW,CACb,EAGM,EAAU,EAAc,CAAc,EAG5C,GAAI,GAAgB,GAAK,EAAQ,YAC/B,EAAQ,iBAAiB,aAAc,EAAkB,EAAc,EACvE,EAAQ,iBAAiB,WAAY,CAAc,EACnD,EAAQ,iBAAiB,YAAa,EAAiB,EAAc,EAGvE,MAAO,IACF,EACH,UAOA,QAAQ,IAAI,EAAqC,CAE/C,OADA,EAAQ,UAAU,IAAI,GAAG,EAAQ,OAAO,OAAO,CAAC,EACzC,MAOT,OAAO,EAAS,CACd,GAAI,GAAgB,GAAK,EAAQ,YAC/B,EAAQ,oBAAoB,aAAc,CAAgB,EAC1D,EAAQ,oBAAoB,WAAY,CAAc,EACtD,EAAQ,oBAAoB,YAAa,CAAe,EAI1D,GAAoB,CAAO,EAE3B,EAAQ,OAAO,EAEnB,gBAnTJ,KAKA,WCmCa,GAAgB,IAAe,CAC1C,IAAM,EAAS,IAAI,IAEnB,MAAO,CAOL,GAAI,CAAC,EAAe,IAA0C,CAC5D,IAAM,EAAY,EAAO,IAAI,CAAK,GAAK,CAAC,EAGxC,OAFA,EAAO,IAAI,EAAO,CAAC,GAAG,EAAW,CAAQ,CAAC,EAEnC,IAAM,CACX,IAAM,EAAY,EAAO,IAAI,CAAK,GAAK,CAAC,EACxC,EAAO,IAAI,EAAO,EAAU,OAAO,KAAM,IAAO,CAAQ,CAAC,IAS7D,GAAG,CAAC,EAAe,EAA+B,CAChD,IAAM,EAAY,EAAO,IAAI,CAAK,GAAK,CAAC,EACxC,EAAO,IAAI,EAAO,EAAU,OAAO,KAAM,IAAO,CAAQ,CAAC,GAQ3D,KAAM,CAAC,KAAkB,IAAsB,EAC3B,EAAO,IAAI,CAAK,GAAK,CAAC,GAC9B,QAAQ,KAAM,EAAG,GAAG,CAAI,CAAC,GAMrC,MAAO,IAAY,CACjB,EAAO,MAAM,EAEjB,OCjDW,EAAa,IACxB,CAA0B,IAAqC,CAC7D,IAAM,EAAmB,GAAc,EAEvC,MAAO,IACF,EACH,EAAE,CAAC,EAAe,EAAmC,CAEnD,OADA,EAAQ,GAAG,EAAO,CAAO,EAClB,MAGT,GAAG,CAAC,EAAe,EAAmC,CAEpD,OADA,EAAQ,IAAI,EAAO,CAAO,EACnB,MAGT,IAAI,CAAC,EAAe,EAAY,CAE9B,OADA,EAAQ,KAAK,EAAO,CAAI,EACjB,KAEX,qBCaE,GAAa,CAAC,EAAsB,EAAqB,CAAC,IAAmB,CACjF,IAAI,EAAkC,KAChC,EAAS,EAAO,QAAU,OAK1B,EAAgB,CAAC,IAAiC,CACtD,IAAM,EAAO,SAAS,cAAc,MAAM,EAG1C,OAFA,EAAK,UAAY,GAAG,KAAU,EAAO,eAAiB,mBACtD,EAAK,YAAc,EACZ,GAGT,MAAO,CAML,OAAO,CAAC,EAA2B,CACjC,GAAI,CAAC,GAAe,EAKlB,GAHA,EAAc,EAAc,CAAI,EAG5B,EAAO,cACT,EAAQ,aAAa,EAAa,EAAO,aAAa,EAEtD,OAAQ,YAAY,CAAW,EAE5B,QAAI,EAET,EAAY,YAAc,EAE5B,OAAO,MAOT,OAAO,EAAW,CAChB,OAAO,EAAc,EAAY,aAAe,GAAK,IAOvD,UAAU,EAAuB,CAC/B,OAAO,EAEX,GASW,GAAW,CAAuB,IAC7C,CAA6B,IAAoC,CAE/D,IAAM,EAAO,GAAW,EAAU,QAAS,CACzC,OAAQ,EAAO,OACf,cAAe,EAAO,eAAiB,WACzC,CAAC,EAGD,GAAI,EAAO,KACT,EAAK,QAAQ,EAAO,IAAI,EAI1B,MAAO,IACF,EACH,MACF,OCrEE,GAAa,CACjB,EACA,EAAqB,CAAC,IACN,CAChB,IAAI,EAAkC,KAChC,EAAS,EAAO,QAAU,OAK1B,EAAoB,CAAC,IAA8B,CACvD,IAAM,EAAS,SAAS,cAAc,MAAM,EAC5C,EAAO,UAAY,GAAG,SAGtB,IAAM,EAAiB,GAAG,KACxB,EAAO,eAAiB,mBAK1B,GAHA,EAAO,UAAU,IAAI,CAAc,EAG/B,EAAO,aACT,EAAO,UAAU,IAAI,GAAG,MAAmB,EAAO,cAAc,EAIlE,GAAI,EAAO,SACT,EAAO,UAAU,IAAI,GAAG,WAAgB,EAAO,UAAU,EAI3D,OADA,EAAO,UAAY,EACZ,GAGT,MAAO,CAML,OAAO,CAAC,EAA2B,CACjC,GAAI,CAAC,GAAe,EAKlB,GAHA,EAAc,EAAkB,CAAI,EAGhC,EAAO,eAAiB,MAC1B,EAAQ,YAAY,CAAW,EAC1B,KAEL,IAAM,EAAe,EAAQ,cAC3B,YAAY,KAAU,EAAO,eAAiB,qBAChD,EACA,GAAI,EAEF,GAAI,EAAa,YACf,EAAQ,aAAa,EAAa,EAAa,WAAW,EAE1D,OAAQ,YAAY,CAAW,EAIjC,OAAQ,aAAa,EAAa,EAAQ,UAAU,EAGnD,QAAI,GAAe,EAExB,EAAY,UAAY,EAE1B,OAAO,MAOT,OAAO,EAAW,CAChB,OAAO,EAAc,EAAY,UAAY,IAO/C,UAAU,EAAuB,CAC/B,OAAO,EAEX,GASW,GACX,CAAuB,IACvB,CAA6B,IAAoC,CAE/D,IAAM,EAAO,GAAW,EAAU,QAAS,CACzC,OAAQ,EAAO,OACf,cAAe,EAAO,eAAiB,YACvC,aAAc,EAAO,aACrB,SAAU,EAAO,QACnB,CAAC,EAGD,GAAI,EAAO,KACT,EAAK,QAAQ,EAAO,IAAI,EAI1B,GAAI,EAAU,gBAAkB,UAAY,EAAO,MAAQ,EAAO,KAChE,EAAU,QAAQ,UAAU,IAAI,GAAG,EAAU,SAAS,QAAQ,SAAS,EAIzE,MAAO,IACF,EACH,MACF,OC3LS,GACX,CAA0B,IAC1B,CAA6B,IAAoB,CAC/C,GAAI,EAAO,SAAW,EAAU,QAAS,CAEvC,IAAM,EAAY,GAAG,EAAO,UAAU,EAAO,kBAAkB,EAAO,UACtE,EAAU,QAAQ,UAAU,IAAI,CAAS,EAE3C,OAAO,OCRE,GACX,CAAuB,IACvB,CAA6B,IAAoB,CAC/C,GAAI,EAAO,MAAQ,EAAU,QAAS,CAEpC,IAAM,EAAY,GAAG,EAAO,UAAU,EAAO,kBAAkB,EAAO,OACtE,EAAU,QAAQ,UAAU,IAAI,CAAS,EAE3C,OAAO,OCrBC,GAmDC,GAAe,CAA2B,IACrD,CAA6B,IAAwC,CACnE,GAAI,CAAC,EAAO,UAAY,CAAC,EAAU,QACjC,OAAO,EAIT,IAAM,EACJ,GAAU,EAAO,SAAS,YAAY,IACtC,EAAO,SAEH,EAAY,GAAG,EAAO,UAAU,EAAO,kBAAkB,IAoB/D,OAnBA,EAAU,QAAQ,UAAU,IAAI,CAAS,EAmBlC,IACF,EACH,SAnBuC,CACvC,WAAW,CAAC,EAAqB,CAC/B,IAAM,EAAc,EACd,EAAe,GAAG,EAAO,UAAU,EAAO,kBAAkB,IAC5D,EAAe,GAAG,EAAO,UAAU,EAAO,kBAAkB,IAKlE,OAHA,EAAU,QAAQ,UAAU,OAAO,CAAY,EAC/C,EAAU,QAAQ,UAAU,IAAI,CAAY,EAErC,MAGT,WAAW,EAAG,CACZ,OAAO,EAEX,CAKA,kBArFG,CAAK,IAAL,CACL,OAAO,OACP,QAAQ,QACR,MAAM,MACN,SAAS,SACT,QAAQ,QACR,MAAM,MACN,SAAS,WAPC,eCFA,GAaC,GASA,kBAtBN,CAAK,IAAL,CACL,SAAS,SACT,OAAO,OACP,UAAU,UACV,WAAW,WACX,cAAc,cACd,WAAW,mCAND,SAaC,GAAgB,CAC3B,SAAU,IACV,OAAQ,iCACR,QAAS,CAAC,MAAO,GAAG,CACtB,EAKa,GAAgB,CAC3B,SAAU,CACR,KAAM,SACN,QAAS,EACT,QAAS,GAAc,QACzB,EACA,OAAQ,CACN,KAAM,SACN,KAAM,OAAO,OAAO,EAAa,EACjC,QAAS,GAAc,MACzB,EACA,QAAS,CACP,KAAM,QACN,MAAO,CACL,KAAM,SACN,QAAS,mBACX,EACA,SAAU,EACV,SAAU,EACV,QAAS,GAAc,OACzB,CACF,QCyBM,GAAe,CAAC,EAAuB,CAAC,IAAwB,CACpE,IAAM,EAAU,IACX,MACA,EACH,QAAS,EAAO,SAAW,GAAc,OAC3C,EAGM,EAAgB,IAAI,QAEtB,EAAwC,CAAC,EAEvC,EAAsB,IAAsB,CAChD,IAAM,EAAS,SAAS,cAAc,KAAK,EAG3C,OAFA,EAAO,UAAY,GAAG,gBAEf,GAGH,EAAsB,CAAC,EAAe,IAAiC,CAC3E,GAAI,OAAO,SAAS,mBAAqB,WACvC,SAAS,iBAAiB,EAAO,CAAO,EACxC,EAAkB,KAAK,CAAE,QAAO,SAAQ,CAAC,GAIvC,EAAyB,CAC7B,EACA,IACS,CACT,GAAI,OAAO,SAAS,sBAAwB,WAC1C,SAAS,oBAAoB,EAAO,CAAO,EAC3C,EAAoB,EAAkB,OACpC,CAAC,IACC,EAAE,EAAS,QAAU,GAAS,EAAS,UAAY,EACvD,GAIE,EAAU,CAAC,EAAmB,IAAiC,CACnE,GAAI,CAAC,GAAa,CAAC,EAAU,kBAAmB,OAEhD,IAAM,EAAkB,EAAU,kBAC5B,EAAS,EAAU,sBAAsB,EACzC,EAAS,EAAoB,EAI7B,EAAO,KAAK,IAAI,EAAO,MAAO,EAAO,MAAM,EAAI,EAG/C,EAAI,EAAM,QAAU,EAAO,KAAO,EAAO,EACzC,EAAI,EAAM,QAAU,EAAO,IAAM,EAAO,EAG9C,OAAO,OAAO,EAAO,MAAO,CAC1B,MAAO,GAAG,MACV,OAAQ,GAAG,MACX,KAAM,GAAG,MACT,IAAK,GAAG,KACV,CAAC,EAGD,EAAgB,YAAY,CAAM,EAGlC,EAAO,aAGP,sBAAsB,IAAM,CAC1B,EAAO,UAAU,IAAI,QAAQ,EAC9B,EAED,IAAM,EAAU,IAAM,CAEpB,EAAuB,UAAW,CAAO,EACzC,EAAuB,aAAc,CAAO,EAG5C,EAAO,UAAU,OAAO,QAAQ,EAChC,EAAO,UAAU,IAAI,UAAU,EAG/B,WAAW,IAAM,CACf,GAAI,EAAO,WACT,EAAO,WAAW,YAAY,CAAM,EAGtC,EAAc,IAAI,CAAS,GAAG,OAAO,CAAM,GAC1C,EAAQ,QAAQ,GAGrB,EAAoB,UAAW,CAAO,EACtC,EAAoB,aAAc,CAAO,GAG3C,MAAO,CACL,MAAO,CAAC,IAA+B,CACrC,GAAI,CAAC,EAAS,OAId,GADwB,OAAO,iBAAiB,CAAO,EAAE,WACjC,SACtB,EAAQ,MAAM,SAAW,WAI3B,IAAI,EAAkB,EAAQ,cAAc,IAAI,UAAe,EAC/D,GAAI,CAAC,EACH,EAAkB,SAAS,cAAc,KAAK,EAC9C,EAAgB,UAAY,GAAG,WAC/B,EAAQ,YAAY,CAAe,EAIrC,EAAQ,kBAAoB,EAG5B,EAAc,IAAI,EAAS,IAAI,GAAK,EAGpC,IAAM,EAAmB,CAAC,IAAkB,EAAQ,EAAG,CAAO,EAG9D,GAAI,CAAC,EAAQ,iBACX,EAAQ,iBAAmB,CAAC,EAE9B,EAAQ,iBAAiB,KAAK,CAAgB,EAE9C,EAAQ,iBAAiB,YAAa,CAAgB,GAGxD,QAAS,CAAC,IAA+B,CACvC,GAAI,CAAC,EAAS,OASd,GANA,EAAkB,QAAQ,EAAG,QAAO,aAAc,CAChD,EAAuB,EAAO,CAAO,EACtC,EACD,EAAoB,CAAC,EAGjB,EAAQ,iBACV,EAAQ,iBAAiB,QAAQ,CAAC,IAAY,CAC5C,EAAQ,oBAAoB,YAAa,CAAO,EACjD,EACD,EAAQ,iBAAmB,CAAC,EAI9B,GAAI,EAAc,IAAI,CAAO,EAAG,CAC9B,IAAM,EAAU,EAAc,IAAI,CAAO,EACzC,GAAI,EACF,EAAQ,QAAQ,CAAC,IAAW,CAC1B,GAAI,EAAO,WACT,EAAO,WAAW,YAAY,CAAM,EAEvC,EAEH,EAAc,OAAO,CAAO,EAI9B,GAAI,EAAQ,mBAAqB,EAAQ,kBAAkB,WACzD,EAAQ,kBAAkB,WAAW,YACnC,EAAQ,iBACV,EACA,OAAO,EAAQ,kBAGrB,GAiBW,GACX,CAAgC,IAChC,CACE,IACwB,CACxB,GAAI,CAAC,EAAO,OAAQ,OAAO,EAE3B,IAAM,EAAiB,GAAa,EAAO,YAAY,EAMvD,GAHA,EAAe,MAAM,EAAU,OAAO,EAGlC,EAAU,UAAW,CACvB,IAAM,EAAgB,EAAU,UAAU,MACpC,EAAkB,EAAU,UAAU,QAE5C,EAAU,UAAU,MAAQ,IAAM,CAChC,EAAc,KAAK,EAAU,SAAS,GAIxC,EAAU,UAAU,QAAU,IAAM,CAClC,EAAe,QAAQ,EAAU,OAAO,EACxC,EAAgB,KAAK,EAAU,SAAS,GAI5C,MAAO,IACF,EACH,OAAQ,CACV,iBA/RJ,KACA,OCwDA,SAAS,EAAO,CAAC,EAAgD,CAC/D,MAAO,SAAU,GAAa,OAAO,EAAU,OAAS,eAsC7C,GACX,CAAwB,EAAY,CAAC,IACrC,CAA6B,IAAqC,CAChE,IAAM,EAAQ,SAAS,cAAc,OAAO,EACtC,EAAO,EAAU,eAAiB,YACxC,EAAM,KAAO,WACb,EAAM,UAAY,GAAG,EAAU,SAAS,CAAI,UAG5C,EAAM,MAAM,SAAW,WACvB,EAAM,MAAM,QAAU,IACtB,EAAM,MAAM,OAAS,UAIrB,EAAU,QAAQ,aAAa,OAAQ,cAAc,EACrD,EAAM,aAAa,OAAQ,CAAI,EAE/B,IAAM,EAA2D,CAC/D,KAAM,EAAO,KACb,QAAS,EAAO,QAChB,SAAU,EAAO,SACjB,SAAU,EAAO,SACjB,MAAO,EAAO,OAAS,KACvB,aAAc,EAAO,OAAS,EAAO,SACvC,EAwCA,OAtCA,OAAO,QAAQ,CAAU,EAAE,QAAQ,EAAE,EAAK,KAAW,CACnD,GAAI,IAAU,MAAQ,IAAU,OAC9B,GAAI,IAAQ,YAAc,IAAU,GAClC,EAAM,SAAW,GACjB,EAAM,aAAa,WAAY,MAAM,EAEhC,QAAI,IAAU,GACnB,EAAM,aAAa,EAAK,CAAG,EAE3B,OAAM,aAAa,EAAK,OAAO,CAAK,CAAC,EAG1C,EAGD,EAAM,iBAAiB,SAAU,CAAC,IAAU,CAC1C,GAAI,GAAQ,CAAS,EACnB,EAAU,KAAK,SAAU,CACvB,QAAS,EAAM,QACf,MAAO,EAAM,MACb,YAAa,CACf,CAAC,EAEJ,EAGD,EAAM,iBAAiB,UAAW,CAAC,IAAU,CAC3C,GAAI,EAAM,MAAQ,KAAO,EAAM,MAAQ,SAErC,GADA,EAAM,eAAe,EACjB,CAAC,EAAM,SACT,EAAM,QAAU,CAAC,EAAM,QACvB,EAAM,cAAc,IAAI,MAAM,SAAU,CAAE,QAAS,EAAK,CAAC,CAAC,GAG/D,EAED,EAAU,QAAQ,YAAY,CAAK,EAE5B,IACF,EACH,QAMA,SAAU,IAAM,EAAM,MAOtB,QAAQ,CAAC,EAAe,CAEtB,GADA,EAAM,MAAQ,EACV,GAAQ,CAAS,EACnB,EAAU,KAAK,QAAS,CAAE,OAAM,CAAC,EAEnC,OAAO,KAEX,OCvHS,GACX,CAA4B,EAAY,CAAC,IACzC,CAA2B,IAAyC,CAClE,GAAI,CAAC,EAAU,MAAO,OAAO,EAG7B,IAAM,EAAgB,EAAU,eAAiB,YAK3C,EAAqB,IAAY,CACrC,EAAU,QAAQ,UAAU,OAC1B,GAAG,EAAU,SAAS,CAAa,aACnC,EAAU,MAAM,OAClB,GAIF,GAAI,EAAO,UAAY,OACrB,EAAU,MAAM,QAAU,EAAO,QAOnC,GAHA,EAAmB,EAGf,EAAU,KACZ,EAAU,KAAK,SAAU,CAAkB,EA8D7C,MAAO,IACF,EACH,UA7DkC,CAMlC,KAAK,EAAG,CACN,GAAI,CAAC,EAAU,MAAM,QACnB,EAAU,MAAM,QAAU,GAC1B,EAAmB,EACnB,EAAU,OAAO,SAAU,CACzB,QAAS,GACT,MAAO,EAAU,MAAM,KACzB,CAAC,EAEH,OAAO,MAQT,OAAO,EAAG,CACR,GAAI,EAAU,MAAM,QAClB,EAAU,MAAM,QAAU,GAC1B,EAAmB,EACnB,EAAU,OAAO,SAAU,CACzB,QAAS,GACT,MAAO,EAAU,MAAM,KACzB,CAAC,EAEH,OAAO,MAQT,MAAM,EAAG,CAOP,OANA,EAAU,MAAM,QAAU,CAAC,EAAU,MAAM,QAC3C,EAAmB,EACnB,EAAU,OAAO,SAAU,CACzB,QAAS,EAAU,MAAM,QACzB,MAAO,EAAU,MAAM,KACzB,CAAC,EACM,MAOT,SAAS,EAAG,CACV,OAAO,EAAU,MAAM,QAE3B,CAKA,OC9IS,GAAY,CAAwB,EAAY,CAAC,IAC5D,CAA6B,IAAoB,CAC/C,GAAI,EAAO,QACT,EAAU,QAAQ,UAAU,IAAI,GAAG,EAAU,SAAS,QAAQ,MAAM,EAAO,SAAS,EAGtF,GAAI,EAAO,KACT,EAAU,QAAQ,UAAU,IAAI,GAAG,EAAU,SAAS,QAAQ,MAAM,EAAO,MAAM,EAGnF,OAAO,GCHJ,SAAS,EAAY,CAAC,EAAqD,CAChF,MAAO,cAAe,GACf,EAAU,WACV,OAAO,EAAU,YAAc,UAC/B,YAAa,EAAU,WACvB,OAAO,EAAU,UAAU,UAAY,WAMzC,SAAS,EAAO,CAAC,EAAgD,CACtE,MAAO,SAAU,GAAa,OAAO,EAAU,OAAS,eCgF7C,GACX,CAA4B,EAAY,CAAC,IACzC,CAA6B,IAAyC,CACpE,IAAM,EAAc,EAAO,WAAa,EAAO,OAAS,YAClD,EAAQ,SAAS,cAAc,EAAc,WAAa,OAAO,EAIvE,EAAM,UAAY,GAAG,EAAU,SAAS,WAAW,UAGnD,IAAM,EAAoE,CACxE,KAAM,EAAO,KACb,SAAU,EAAO,SACjB,SAAU,EAAO,SACjB,UAAW,EAAO,UAClB,QAAS,EAAO,QAChB,aAAc,EAAO,aACrB,MAAO,EAAO,OAAS,GACvB,YAAa,EAAO,aAAe,GACrC,EAGA,GAAI,CAAC,EACH,EAAW,KAAO,EAAO,MAAQ,OAGjC,OAAW,aAAe,YAG5B,OAAO,QAAQ,CAAU,EAAE,QAAQ,EAAE,EAAK,KAAW,CACnD,GAAI,IAAU,MAAQ,IAAU,OAC9B,GAAI,OAAO,IAAU,WACnB,GAAI,EACF,EAAM,aAAa,EAAK,EAAE,EAG5B,OAAM,aAAa,EAAK,OAAO,CAAK,CAAC,EAG1C,EAGD,IAAM,EAAmB,IAAe,CACtC,IAAM,EAAU,CAAC,EAAM,MAKvB,OAJA,EAAU,QAAQ,UAAU,OAC1B,GAAG,EAAU,SAAS,WAAW,WACjC,CACF,EACO,GAIH,EAAmB,CAAC,EAAsB,KAAe,CAK7D,IAAM,EAAW,EAAM,OAAS,EAAM,MAAM,OAAS,EAG/C,EAAoB,EAAM,QAAQ,mBAAmB,EAIrD,EADgB,OAAO,iBAAiB,CAAK,EACrB,gBACxB,EACJ,IAAY,sBACZ,IAAY,sBACZ,IAAY,oBACZ,IAAY,yBAGd,GAAI,GAAY,GAAqB,GAMnC,GALA,EAAU,QAAQ,UAAU,OAC1B,GAAG,EAAU,SAAS,WAAW,UACnC,EAIE,GACA,GAAQ,CAAS,IAChB,GAAqB,GAEtB,EAAU,KAAK,QAAS,CACtB,MAAO,EAAM,MACb,QAAS,GACT,aAAc,EAChB,CAAC,IAMH,EAA4C,KAGhD,GAAI,OAAO,iBAAqB,IAC9B,EAAmB,IAAI,iBAAiB,CAAC,IAAc,CACrD,EAAU,QAAQ,CAAC,IAAa,CAC9B,GACE,EAAS,OAAS,eACjB,EAAS,gBAAkB,SAC1B,EAAS,gBAAkB,mBAE7B,EAAiB,EAAI,EAExB,EACF,EAGD,EAAiB,QAAQ,EAAO,CAC9B,WAAY,GACZ,gBAAiB,CAAC,QAAS,kBAAmB,cAAc,CAC9D,CAAC,EAuEH,GAnEA,EAAM,iBAAiB,QAAS,IAAM,CAIpC,GAHA,EAAU,QAAQ,UAAU,IAC1B,GAAG,EAAU,SAAS,WAAW,YACnC,EACI,GAAQ,CAAS,EACnB,EAAU,KAAK,QAAS,CAAE,QAAS,EAAiB,CAAE,CAAC,EAGzD,EAAiB,EAAK,EACvB,EAED,EAAM,iBAAiB,OAAQ,IAAM,CAInC,GAHA,EAAU,QAAQ,UAAU,OAC1B,GAAG,EAAU,SAAS,WAAW,YACnC,EACI,GAAQ,CAAS,EACnB,EAAU,KAAK,OAAQ,CAAE,QAAS,EAAiB,CAAE,CAAC,EAGxD,EAAiB,EAAK,EACvB,EAED,EAAM,iBAAiB,QAAS,IAAM,CACpC,GAAI,GAAQ,CAAS,EACnB,EAAU,KAAK,QAAS,CACtB,MAAO,EAAM,MACb,QAAS,EAAiB,EAC1B,aAAc,EAChB,CAAC,EAED,OAAiB,EAEpB,EAGD,EAAM,iBAAiB,SAAU,IAAM,CACrC,IAAM,EAAU,EAAiB,EAEjC,GADA,EAAiB,EAAK,EAClB,GAAQ,CAAS,EACnB,EAAU,KAAK,SAAU,CACvB,MAAO,EAAM,MACb,UACA,aAAc,EAAM,UAAU,mBAAmB,GAAK,EACxD,CAAC,EAEJ,EAGD,EAAM,iBAAiB,iBAAkB,CAAC,IAAsB,CAC9D,GACE,EAAE,gBAAkB,mBACpB,EAAE,eAAe,SAAS,UAAU,EAEpC,EAAiB,EAEpB,EAGD,EAAiB,EAIjB,WAAW,IAAM,CACf,EAAiB,EAAK,GACrB,CAAC,EAGA,EACF,EAAU,QAAQ,UAAU,IAC1B,GAAG,EAAU,SAAS,WAAW,cACnC,EAMF,GAHA,EAAU,QAAQ,YAAY,CAAK,EAG/B,GAAa,CAAS,EAAG,CAC3B,IAAM,EAAkB,EAAU,UAAU,QAC5C,EAAU,UAAU,QAAU,IAAM,CAElC,GAAI,EACF,EAAiB,WAAW,EAE9B,EAAM,OAAO,EACb,EAAgB,KAAK,EAAU,SAAS,GAI5C,MAAO,IACF,EACH,QACA,QAAQ,CAAC,EAAe,CAGtB,OAFA,EAAM,MAAQ,GAAS,GACvB,EAAiB,EACV,MAET,QAAQ,EAAG,CACT,OAAO,EAAM,OAEf,YAAY,CAAC,EAAc,EAAe,CAExC,OADA,EAAM,aAAa,EAAM,CAAK,EACvB,MAET,YAAY,CAAC,EAAc,CACzB,OAAO,EAAM,aAAa,CAAI,GAEhC,eAAe,CAAC,EAAc,CAE5B,OADA,EAAM,gBAAgB,CAAI,EACnB,KAEX,qBCtRS,GACX,CAA4B,EAAY,CAAC,IACzC,CAA6B,IAAqC,CAChE,GAAI,CAAC,EAAO,MAAO,OAAO,EAE1B,IAAM,EAAe,SAAS,cAAc,OAAO,EAC7C,EAAW,EAAO,eAAiB,QAIzC,GAHA,EAAa,UAAY,GAAG,EAAO,UAAU,EAAO,uBAAuB,EAAO,UAAU,EAAO,wBAAwB,IAC3H,EAAa,YAAc,EAAO,MAE9B,IAAa,QAEf,GAAI,EAAU,QAAQ,WACpB,EAAU,QAAQ,aAChB,EACA,EAAU,QAAQ,UACpB,EAEA,OAAU,QAAQ,YAAY,CAAY,EAI5C,OAAU,QAAQ,YAAY,CAAY,EAG5C,GAAI,GAAY,EAAU,gBAAkB,SAC1C,EAAU,QAAQ,UAAU,IAC1B,GAAG,EAAO,UAAU,EAAO,wBAAwB,GACrD,EAgBF,MAAO,IACF,EACH,MAf0B,CAC1B,OAAO,CAAC,EAAc,CAEpB,OADA,EAAa,YAAc,EACpB,MAET,OAAO,EAAG,CACR,OAAO,EAAa,aAAe,IAErC,UAAU,EAAG,CACX,OAAO,EAEX,CAKA,OCnEE,GAAe;AAAA;AAAA;AAAA,QAWR,GAAY,CAAwB,IAC/C,CAA6B,IAAqC,CAChE,IAAM,EAAQ,SAAS,cAAc,MAAM,EAC3C,EAAM,UAAY,GAAG,EAAO,UAAU,EAAO,sBAE7C,IAAM,EAAQ,SAAS,cAAc,MAAM,EAK3C,GAJA,EAAM,UAAY,GAAG,EAAO,UAAU,EAAO,sBAC7C,EAAM,YAAY,CAAK,EAGnB,EAAO,OAAS,OAAQ,CAC1B,IAAM,EAAO,SAAS,cAAc,MAAM,EAC1C,EAAK,UAAY,GAAG,EAAO,UAAU,EAAO,2BAC5C,EAAK,UAAY,EAAO,MAAQ,GAChC,EAAM,YAAY,CAAI,EAKxB,OAFA,EAAU,QAAQ,YAAY,CAAK,EAE5B,IACF,EACH,QACA,OACF,OCzCS,GAAqB,CAAC,IAA4C,CAC7E,IAAM,EAAW,IAAI,IAErB,MAAO,CAOL,EAAE,CAAC,EAAe,EAAsD,CAGtE,OAFA,EAAQ,iBAAiB,EAAO,CAAwB,EACxD,EAAS,IAAI,EAAS,CAAK,EACpB,MAST,GAAG,CAAC,EAAe,EAAsD,CAGvE,OAFA,EAAQ,oBAAoB,EAAO,CAAwB,EAC3D,EAAS,OAAO,CAAO,EAChB,MAMT,OAAO,EAAS,CACd,EAAS,QAAQ,CAAC,EAAO,IAAY,CACnC,EAAQ,oBAAoB,EAAO,CAAwB,EAC5D,EACD,EAAS,MAAM,GAOjB,WAAW,EAA0C,CACnD,OAAO,IAAI,IAAI,CAAQ,EAE3B,OC5BW,GACX,CAAC,IACD,CAA6B,IAA6C,CACxE,IAAM,EAAS,GAAmB,GAAU,EAAU,OAAO,EAGvD,EAAuC,CAK3C,YAAY,CAAC,EAAqC,CAIhD,OAHA,OAAO,QAAQ,CAAS,EAAE,QAAQ,EAAE,EAAO,KAAa,CACtD,EAAO,GAAG,EAAO,CAAc,EAChC,EACM,MAOT,eAAe,CAAC,EAAqC,CAInD,OAHA,OAAO,QAAQ,CAAS,EAAE,QAAQ,EAAE,EAAO,KAAa,CACtD,EAAO,IAAI,EAAO,CAAc,EACjC,EACM,MAQT,IAAI,CAAC,EAAe,EAAmB,CACrC,IAAM,EAAiB,CAAC,IAAa,CACnC,EAAQ,CAAC,EACT,EAAO,IAAI,EAAO,CAAqB,GAGzC,OADA,EAAO,GAAG,EAAO,CAAqB,EAC/B,MAMT,EAAE,CAAC,EAAe,EAAmB,CAEnC,OADA,EAAO,GAAG,EAAO,CAAc,EACxB,MAMT,GAAG,CAAC,EAAe,EAAmB,CAEpC,OADA,EAAO,IAAI,EAAO,CAAc,EACzB,MAMT,OAAO,EAAG,CACR,EAAO,QAAQ,EAEnB,EAGA,GAAI,GAAa,CAAS,EAAG,CAC3B,IAAM,EAAkB,EAAU,UAAU,QAC5C,EAAU,UAAU,QAAU,IAAM,CAClC,EAAO,QAAQ,EACf,EAAgB,KAAK,EAAU,SAAS,GAI5C,MAAO,IACF,EACH,OAAQ,EACR,GAAI,EAAe,GAAG,KAAK,CAAc,EACzC,IAAK,EAAe,IAAI,KAAK,CAAc,CAC7C,qBC/GS,GAAW,CACtB,EACA,EACA,EAAqD,CAAC,IACf,CACvC,IAAI,EAAyB,KACzB,EAAW,GACP,UAAU,GAAM,WAAW,IAAS,EAE5C,OAAO,QAAQ,IAAe,EAA2B,CACvD,IAAM,EAAM,KAAK,IAAI,EAErB,GAAI,CAAC,GAAY,CAAC,EAChB,EAAW,EAGb,IAAM,EAAY,GAAQ,EAAM,GAEhC,GAAI,GAAa,GAAK,EAAY,EAAM,CACtC,GAAI,EACF,aAAa,CAAO,EACpB,EAAU,KAGZ,EAAW,EACX,EAAG,MAAM,KAAM,CAAI,EACd,QAAI,CAAC,GAAW,EACrB,EAAU,OAAO,WAAW,IAAM,CAChC,EAAW,EAAU,KAAK,IAAI,EAAI,EAClC,EAAU,KACV,EAAG,MAAM,KAAM,CAAI,GAClB,CAAS,IA8BL,GAAW,CACtB,EACA,EACA,EAAmD,CAAC,IACb,CACvC,IAAI,EAAyB,KACzB,EAAiC,KACjC,EAAgB,KAChB,EACA,EAA8B,KAC9B,EAAiB,GAEb,UAAU,GAAO,WAAY,EAG/B,EAAe,CAAC,IAA0B,CAC9C,IAAM,EAAoB,GAAQ,GAAgB,GAC5C,EAAsB,EAAO,EAEnC,MACE,CAAC,GACD,GAAqB,GACrB,EAAoB,GACnB,IAAY,QAAa,GAAuB,GAK/C,EAAa,CAAC,IAAgC,CAClD,IAAM,EAAO,EACP,EAAU,EAMhB,OAJA,EAAW,EAAW,KACtB,EAAiB,EAEjB,EAAS,EAAG,MAAM,EAAS,CAAI,EACxB,GAIH,EAAe,CAAC,IAAgC,CAGpD,GAFA,EAAU,KAEN,EACF,OAAO,EAAW,CAAI,EAGxB,OAAO,GAIH,EAAc,CAAC,IAAgC,CAQnD,OAPA,EAAiB,EAGjB,EAAU,OAAO,WAAW,IAAM,CAChC,EAAa,KAAK,IAAI,CAAC,GACtB,CAAI,EAEA,EAAU,EAAW,CAAI,EAAI,GAItC,OAAO,QAAQ,IAAe,EAAoC,CAChE,IAAM,EAAO,KAAK,IAAI,EAChB,EAAa,EAAa,CAAI,EAMpC,GAJA,EAAW,EACX,EAAW,KACX,EAAe,EAEX,EAAY,CACd,GAAI,IAAY,KACd,OAAO,EAAY,CAAI,EAGzB,GAAI,IAAY,OAEd,EAAU,OAAO,WAAW,IAAM,CAChC,IAAM,EAAU,KAAK,IAAI,EACzB,GAAI,EAAa,CAAO,EACtB,OAAO,EAAa,CAAO,GAE5B,KAAK,IAAI,EAAM,GAAW,EAAO,EAAe,CAAC,EAIxD,GAAI,IAAY,KACd,EAAU,OAAO,WAAW,IAAM,CAChC,EAAa,KAAK,IAAI,CAAC,GACtB,CAAI,EAGT,OAAO,IAuBE,GAAO,CAClB,IACgD,CAChD,IAAI,EAAS,GACT,EAEJ,OAAO,QAAQ,IAAe,EAAoC,CAChE,GAAI,CAAC,EACH,EAAS,GACT,EAAS,EAAG,MAAM,KAAM,CAAI,EAG9B,OAAO,QCrIE,GACX,CAAC,EAAyB,CAAC,IAC3B,CAA6B,IAAwC,CAEnE,IAAM,EAMF,CAAC,EAKC,EAAoB,CACxB,EACA,EACA,EACA,EAAqD,CAAC,IAC5B,CAE1B,GAAI,EAAkB,GACpB,EAAqB,CAAK,EAI5B,IAAM,EAAY,GAAS,EAAS,EAAM,CAAO,EAWjD,OARA,EAAU,QAAQ,iBAAiB,EAAO,CAA0B,EAGpE,EAAkB,GAAS,CACzB,SAAU,EACV,UAAW,CACb,EAEO,GAMH,EAAuB,CAAC,IAAyC,CACrE,IAAM,EAAU,EAAkB,GAElC,GAAI,EACF,EAAU,QAAQ,oBAAoB,EAAO,EAAQ,SAAS,EAC9D,OAAO,EAAkB,GAG3B,OAAO,GAIT,GAAI,GAAa,CAAS,EAAG,CAC3B,IAAM,EAAkB,EAAU,UAAU,QAE5C,EAAU,UAAU,QAAU,IAAM,CAElC,OAAO,KAAK,CAAiB,EAAE,QAAQ,CAAC,IAAU,CAChD,IAAM,EAAU,EAAkB,GAClC,EAAU,QAAQ,oBAAoB,EAAO,EAAQ,SAAS,EAC/D,EAGD,EAAgB,KAAK,EAAU,SAAS,GAK5C,GAAI,EAAO,gBACT,OAAO,QAAQ,EAAO,eAAe,EAAE,QAAQ,EAAE,EAAO,KAAc,CACpE,EACE,EACA,EAAS,QACT,EAAS,KACT,EAAS,OACX,EACD,EAIH,IAAM,EAAoB,IACrB,EACH,oBACA,sBACF,EAEA,OAAO,iBCxJX,SAAS,EAAY,CAAC,EAAqD,CACzE,MAAO,cAAe,GACf,EAAU,WACV,OAAO,EAAU,YAAc,UAC/B,YAAa,EAAU,WACvB,OAAO,EAAU,UAAU,UAAY,eA0EnC,GAAe,CAAC,EAAyB,CAAC,IACrD,CAA6B,IAAwC,CAEnE,IAAM,EAGD,CAAC,EAKA,EAAoB,CACxB,EACA,EACA,EACA,EAAmD,CAAC,IAC1B,CAE1B,GAAI,EAAkB,GACpB,EAAqB,CAAK,EAI5B,IAAM,EAAY,GAAS,EAAS,EAAM,CAAO,EAWjD,OARA,EAAU,QAAQ,iBAAiB,EAAO,CAA0B,EAGpE,EAAkB,GAAS,CACzB,SAAU,EACV,UAAW,CACb,EAEO,GAMH,EAAuB,CAAC,IAAyC,CACrE,IAAM,EAAU,EAAkB,GAElC,GAAI,EACF,EAAU,QAAQ,oBAAoB,EAAO,EAAQ,SAAS,EAC9D,OAAO,EAAkB,GAG3B,OAAO,GAIT,GAAI,GAAa,CAAS,EAAG,CAC3B,IAAM,EAAkB,EAAU,UAAU,QAE5C,EAAU,UAAU,QAAU,IAAM,CAElC,OAAO,KAAK,CAAiB,EAAE,QAAQ,KAAS,CAC9C,IAAM,EAAU,EAAkB,GAClC,EAAU,QAAQ,oBAAoB,EAAO,EAAQ,SAAS,EAC/D,EAGD,EAAgB,KAAK,EAAU,SAAS,GAK5C,GAAI,EAAO,gBACT,OAAO,QAAQ,EAAO,eAAe,EAAE,QAAQ,EAAE,EAAO,KAAc,CACpE,EACE,EACA,EAAS,QACT,EAAS,KACT,EAAS,OACX,EACD,EAIH,IAAM,EAAoB,IACrB,EACH,oBACA,sBACF,EAEA,OAAO,iBCjLX,SAAS,EAAmB,CAAC,EAAiD,CAC5E,MAAO,UAAW,GACX,EAAU,iBAAiB,aAC1B,aAAc,EAAU,UAsDrB,GAAe,CAA2B,IACrD,CAA6B,IAAwC,CAEnE,IAAM,EAAgB,GAAG,EAAU,SAAS,EAAO,eAAiB,EAAU,eAAiB,WAAW,cAGpG,EAA4B,CAChC,MAAM,EAAG,CAGP,GAFA,EAAU,QAAQ,UAAU,OAAO,CAAa,EAE5C,GAAoB,CAAS,EAC/B,EAAU,MAAM,SAAW,GAC3B,EAAU,MAAM,gBAAgB,UAAU,EACrC,KAGL,IAAM,EAAqB,EAAU,QACrC,GAAI,aAAc,EAChB,EAAmB,SAAW,GAEhC,EAAU,QAAQ,gBAAgB,UAAU,EAG9C,OAAO,MAGT,OAAO,EAAG,CAGR,GAFA,EAAU,QAAQ,UAAU,IAAI,CAAa,EAEzC,GAAoB,CAAS,EAC/B,EAAU,MAAM,SAAW,GAC3B,EAAU,MAAM,aAAa,WAAY,MAAM,EAC1C,KAEL,IAAM,EAAqB,EAAU,QACrC,GAAI,aAAc,EAChB,EAAmB,SAAW,GAEhC,EAAU,QAAQ,aAAa,WAAY,MAAM,EAGnD,OAAO,MAGT,MAAM,EAAG,CACP,GAAI,KAAK,WAAW,EAClB,KAAK,OAAO,EAEZ,UAAK,QAAQ,EAEf,OAAO,MAGT,UAAU,EAAG,CACX,GAAI,GAAoB,CAAS,EAC/B,OAAO,EAAU,MAAM,SAIzB,IAAM,EAAqB,EAAU,QACrC,MAAQ,aAAc,GAAuB,EAAmB,SAEpE,EAGA,GAAI,EAAO,SAET,sBAAsB,IAAM,CAC1B,EAAS,QAAQ,EAClB,EAGH,MAAO,IACF,EACH,UACF,GCxGJ,SAAS,EAAS,CAAC,EAAkD,CACnE,MAAO,WAAY,GACZ,EAAU,QACV,OAAO,EAAU,SAAW,UAC5B,YAAa,EAAU,QACvB,OAAO,EAAU,OAAO,UAAY,WAG7C,SAAS,EAAO,CAAC,EAAgD,CAC/D,MAAO,SAAU,GACV,EAAU,MACV,OAAO,EAAU,OAAS,UAC1B,eAAgB,EAAU,MAC1B,OAAO,EAAU,KAAK,aAAe,WAG9C,SAAS,EAAO,CAAC,EAAgD,CAC/D,MAAO,SAAU,GACV,EAAU,MACV,OAAO,EAAU,OAAS,UAC1B,eAAgB,EAAU,MAC1B,OAAO,EAAU,KAAK,aAAe,eAsEjC,EAAgB,IAC3B,CAA6B,IAAyC,CACpE,IAAI,EAAU,GACR,EAAmB,GAAc,EA2DvC,MAAO,IACF,EACH,UA3D2B,CAE3B,QAAS,CAAC,IAAwB,EAAQ,GAAG,QAAS,CAAO,EAC7D,UAAW,CAAC,IAAwB,EAAQ,GAAG,UAAW,CAAO,EAEjE,MAAO,IAAM,CACX,GAAI,CAAC,EACH,EAAU,GACV,EAAQ,KAAK,OAAO,GAIxB,QAAS,IAAM,CACb,GAAI,EACF,EAAU,GACV,EAAQ,KAAK,SAAS,EACtB,EAAQ,MAAM,GAIlB,UAAW,IAAM,EAGjB,OAAO,EAAG,CAER,GAAI,EACF,KAAK,QAAQ,EAIf,GAAI,GAAU,CAAS,EACrB,EAAU,OAAO,QAAQ,EAI3B,GAAI,GAAQ,CAAS,EAAG,CACtB,IAAM,EAAc,EAAU,KAAK,WAAW,EAC9C,GAAI,EACF,EAAY,OAAO,EAKvB,GAAI,GAAQ,CAAS,EAAG,CACtB,IAAM,EAAc,EAAU,KAAK,WAAW,EAC9C,GAAI,EACF,EAAY,OAAO,EAKvB,GAAI,EAAU,QACZ,EAAU,QAAQ,OAAO,EAG/B,CAKA,8BC/LJ,KAKA,KACA,KAIA,KAGA,KAEA,KACA,KAIA,oBCfA,IACA,MCyCO,SAAS,EAAwD,CACtE,EACA,EACM,CACN,GAAY,GAAa,EASpB,SAAS,EAAwD,CACtE,EACuB,CACvB,OAAO,GAAY,IAAc,CAAC,EAgB7B,SAAS,EAAiB,CAAC,EAA4C,CAC5E,OAAO,OAAO,GAAa,CAAO,EAM7B,SAAS,EAAmB,EAAS,CAC1C,OAAO,KAAK,EAAW,EAAE,QAAQ,KAAO,CACtC,OAAO,GAAY,GACpB,MA3DG,oBAAkC,CAAC,QCa5B,EAAwB,CACnC,EACA,EAAkC,CAAC,EACnC,IACwB,CAExB,IAAM,EAAiB,GAAqB,CAAoB,EAG1D,EACJ,EAAW,YAAc,OACrB,EAAW,UACX,EAAW,MACX,EACJ,EAAS,YAAc,OAAY,EAAS,UAAY,EAAS,MAM7D,EAAS,IACV,KACA,KACA,EAEH,gBACA,OAAQ,EAER,UAAW,IAAkB,OAAY,EAAgB,CAC3D,EAGA,GAAI,UAAW,GAAU,EAAO,YAAc,OAC5C,OAAO,EAAO,MAGhB,OAAO,GA0EI,EAAsB,CACjC,EACA,IAYG,CAEH,IAAM,EAAgB,EAAO,WAAa,EAAO,MAC3C,EAAiB,EAAQ,UAGzB,EAAqB,CACzB,GAAI,MAAM,QAAQ,CAAa,EAAI,EAAgB,CAAC,CAAa,EACjE,GAAI,MAAM,QAAQ,CAAc,EAAI,EAAiB,CAAC,CAAc,CACtE,EAAE,OAAO,OAAO,EAGV,EAAoB,EAAQ,YAAc,CAAC,EAEjD,MAAO,CACL,IAAK,EAAQ,IACb,cAAe,EAAO,cACtB,WAAY,EACZ,UAAW,EAAmB,OAAS,EAAI,EAAqB,OAChE,SAAU,EAAO,SAEjB,GAAI,EAAO,GACX,KAAM,EAAO,KACb,MAAO,EAAO,MACd,SAAU,EAAO,SACjB,MAAO,EAAO,MAEd,KAAM,EAAO,KAEb,KAAM,EAAO,KACb,UAAW,EAAO,UAClB,gBAAiB,EAAO,gBACxB,eAAgB,EAAO,eACvB,WAAY,EAAO,WACnB,KAAM,EAAQ,KACd,KAAM,EAAQ,KACd,cAAe,EAAQ,eAAiB,CAAC,EACzC,YAAa,EAAQ,WACvB,gBA/MF,KACA,WCKa,GASA,GAaA,GAUA,GAAuB,gBAhCvB,GAAiB,CAC5B,MAAO,QACP,MAAO,OACT,EAMa,GAAe,CAC1B,MAAO,QACP,QAAS,UACT,UAAW,YACX,SAAU,WACV,QAAS,UACT,QAAS,UACT,KAAM,MACR,EAKa,GAAkB,CAC7B,UAAW,YACX,SAAU,WACV,aAAc,eACd,YAAa,aACf,QCfa,GAsBA,GAAmB,CAAC,EAAsB,CAAC,IACtD,EAAsB,GAAe,EAAQ,OAAO,EAYzC,GAAmB,CAAC,IAAwB,CAEvD,IAAM,EAAwD,CAAC,EAG/D,GAAI,EAAO,UAAY,QACrB,EAAW,KAAO,SAIpB,IAAM,EACJ,EAAO,UAAY,QACf,GACA,GAAiB,EAAO,OAAS,GAAI,EAAO,GAAG,EAErD,OAAO,EAAoB,EAAQ,CACjC,IAAK,OACL,aACA,UAAW,EAAO,MAClB,KAAM,CACR,CAAC,GAaU,GAAe,CAAC,KAUtB,CACL,WAAY,CACV,KAAM,IAAM,EAAK,WAAW,KAAK,EACjC,KAAM,IAAM,EAAK,WAAW,KAAK,EACjC,OAAQ,CAAC,IAAsB,EAAK,WAAW,OAAO,CAAO,EAC7D,UAAW,IAAM,EAAK,WAAW,UAAU,CAC7C,EACA,UAAW,CACT,QAAS,IAAM,EAAK,UAAU,QAAQ,CACxC,CACF,GAmBa,GAAmB,CAC9B,EACA,IACW,CAEX,GAAI,IAAU,QAAa,IAAU,MAAQ,IAAU,GACrD,MAAO,GAGT,IAAI,EAAiB,OAAO,CAAK,EAE3B,EAAe,OAAO,CAAK,EAGjC,GAAI,IAAQ,QAAa,CAAC,MAAM,CAAY,GAAK,EAAe,EAC9D,EAAiB,GAAG,KAItB,GAAI,EAAe,OAAS,GAAsB,CAGhD,IAAM,EAAe,OAAO,CAAK,EACjC,GAAI,CAAC,MAAM,CAAY,EACrB,GAAI,GAAgB,KAClB,EAAiB,OAGjB,OACE,EAAe,UAAU,EAAG,GAAuB,CAAC,EAAI,IAI5D,OAAiB,EAAe,UAAU,EAAG,EAAoB,EAIrE,OAAO,iBAlKT,IAKA,KAaa,GAA6B,CAExC,QAAS,GAAe,MAExB,MAAO,GAAa,MAEpB,SAAU,GAAgB,UAE1B,MAAO,GAEP,QAAS,EACX,QCzBM,GAAgB,QAChB,GAAgB,QAGhB,GAAc,QAGd,GAAqB,YAMd,GAAiB,IAAM,KAAa,CAK/C,GAHgB,EAAU,OAAO,UAAY,GAI3C,EAAU,QAAQ,UAAU,IAAI,GAAG,EAAU,SAAS,OAAO,cAAc,EAG7E,MAAO,IACF,EACH,WAAY,CAIV,IAAI,EAAG,CACL,EAAU,QAAQ,UAAU,OAAO,GAAG,EAAU,SAAS,OAAO,cAAc,GAMhF,IAAI,EAAG,CACL,EAAU,QAAQ,UAAU,IAAI,GAAG,EAAU,SAAS,OAAO,cAAc,GAO7E,MAAM,CAAC,EAAmB,CACxB,GAAI,IAAY,OACd,EAAU,QAAQ,UAAU,OAAO,GAAG,EAAU,SAAS,OAAO,cAAc,EACzE,QAAI,EACT,KAAK,KAAK,EAEV,UAAK,KAAK,GAQd,SAAS,EAAG,CACV,MAAO,CAAC,EAAU,QAAQ,UAAU,SAAS,GAAG,EAAU,SAAS,OAAO,cAAc,EAE5F,CACF,GAQW,GAAc,CAAC,IAAwB,KAAa,CAE/D,IAAM,EAAU,EAAO,SAAW,GAMlC,GAHA,EAAU,QAAQ,UAAU,IAAI,GAAG,EAAU,SAAS,OAAO,MAAM,GAAS,EAGxE,IAAY,GACd,EAAU,QAAQ,YAAc,GAChC,EAAU,QAAQ,aAAa,cAAe,MAAM,EAMpD,QAHA,EAAU,QAAQ,aAAa,OAAQ,QAAQ,EAG3C,EAAO,QAAU,QAAa,EAAO,QAAU,GAAI,CAErD,IAAM,EAAiB,GAAiB,EAAO,MAAO,EAAO,GAAG,EAChE,EAAU,QAAQ,YAAc,EAIpC,OAAO,GAQI,GAAY,CAAC,IAAwB,KAAa,CAE7D,IAAM,EAAQ,EAAO,OAAS,GAK9B,OAFA,EAAU,QAAQ,UAAU,IAAI,GAAG,EAAU,SAAS,OAAO,MAAM,GAAO,EAEnE,GAQI,GAAe,CAAC,IAAwB,KAAa,CAEhE,IAAM,EAAW,EAAO,UAAY,GAMpC,GAHA,EAAU,QAAQ,UAAU,IAAI,GAAG,EAAU,SAAS,OAAO,MAAM,GAAU,EAGzE,EAAO,OACT,EAAU,QAAQ,UAAU,IAAI,GAAG,EAAU,SAAS,OAAO,eAAe,EAG9E,OAAO,GAQI,GAAU,CAAC,IAAwB,KAAa,CAE3D,GAAI,EAAO,MAAQ,QAAa,EAAO,UAAY,GACjD,OAAO,EAOT,GAHA,EAAU,OAAO,IAAM,EAAO,IAG1B,EAAO,QAAU,QAAa,EAAO,QAAU,GAAI,CACrD,IAAM,EAAiB,GAAiB,EAAO,MAAO,EAAO,GAAG,EAIhE,GAHA,EAAU,QAAQ,YAAc,EAG5B,OAAO,EAAO,QAAU,UAAY,EAAO,MAAQ,EAAO,IAC5D,EAAU,QAAQ,UAAU,IAAI,GAAG,EAAU,SAAS,OAAO,aAAa,EAI9E,OAAO,GAQI,GAAiB,CAAC,IAAwB,KAAa,CAElE,GAAI,CAAC,EAAO,OACV,OAAO,EAIT,IAAM,EAAU,SAAS,cAAc,KAAK,EAC5C,EAAQ,UAAU,IAAI,EAAU,SAAS,eAAe,CAAC,EAGzD,EAAQ,MAAM,SAAW,WAGzB,IAAM,EAAS,EAAO,OAAO,WAC7B,GAAI,EACF,EAAO,aAAa,EAAS,EAAO,MAAM,EAC1C,EAAQ,YAAY,EAAO,MAAM,EACjC,EAAQ,YAAY,EAAU,OAAO,EAGrC,EAAU,QAAU,EAGtB,OAAO,iBA9LT,WC6CM,GAAgB,QAGhB,GAWA,GAGA,GAYO,GACX,EAAG,aAAY,eACf,CAAC,IAAqD,CACpD,IAAM,EAAiC,CAErC,QAAS,EAAU,QACnB,QAAS,EAAU,QACnB,SAAU,EAAU,SAOpB,QAAQ,CAAC,EAAwB,CAI/B,GAHA,EAAU,OAAO,MAAQ,EAGrB,EAAU,OAAO,UAAY,GAE/B,OADA,EAAU,QAAQ,YAAc,GACzB,EAIT,IAAM,EAAiB,GAAiB,EAAO,EAAU,OAAO,GAAG,EAOnE,GANA,EAAU,QAAQ,YAAc,EAGhC,EAAU,QAAQ,UAAU,OAC1B,GAAG,EAAU,SAAS,OAAO,aAC/B,EAEE,OAAO,IAAU,UACjB,EAAU,OAAO,MAAQ,QACzB,EAAQ,EAAU,OAAO,IAEzB,EAAU,QAAQ,UAAU,IAC1B,GAAG,EAAU,SAAS,OAAO,aAC/B,EAIF,GAAI,IAAmB,IAAM,IAAmB,IAC9C,EAAe,KAAK,EAEpB,OAAe,KAAK,EAGtB,OAAO,GAOT,QAAQ,EAAG,CACT,OAAO,EAAU,QAAQ,aAAe,IAQ1C,UAAU,CAAC,EAA0B,CACnC,OAAO,EAAe,SAAS,CAAO,GAOxC,UAAU,EAAG,CACX,OAAO,EAAe,SAAS,GAOjC,IAAI,EAAG,CAEL,OADA,EAAW,KAAK,EACT,GAOT,IAAI,EAAG,CAEL,OADA,EAAW,KAAK,EACT,GAQT,MAAM,CAAC,EAAmB,CAExB,OADA,EAAW,OAAO,CAAO,EAClB,GAOT,SAAS,EAAG,CACV,OAAO,EAAW,UAAU,GAS9B,MAAM,CAAC,EAAa,CAIlB,GAHA,EAAU,OAAO,IAAM,EAGnB,EAAU,OAAO,QAAU,OAC7B,EAAe,SAAS,EAAU,OAAO,KAAK,EAGhD,OAAO,GAQT,QAAQ,CAAC,EAA4B,CAYnC,OAVA,GAAW,QAAQ,CAAC,IAAc,CAChC,EAAU,QAAQ,UAAU,OAC1B,GAAG,EAAU,SAAS,OAAO,MAAM,GACrC,EACD,EAGD,EAAU,QAAQ,UAAU,IAC1B,GAAG,EAAU,SAAS,OAAO,MAAM,GACrC,EACO,GAQT,UAAU,CAAC,EAAgC,CAiBzC,GAfA,GAAa,QAAQ,CAAC,IAAgB,CACpC,EAAU,QAAQ,UAAU,OAC1B,GAAG,EAAU,SAAS,OAAO,MAAM,GACrC,EACD,EAGD,EAAU,QAAQ,UAAU,IAC1B,GAAG,EAAU,SAAS,OAAO,MAAM,GACrC,EAGA,EAAU,OAAO,QAAU,EAGvB,IAAY,GACd,EAAU,QAAQ,YAAc,GAChC,EAAU,QAAQ,aAAa,cAAe,MAAM,EAKpD,QAHA,EAAU,QAAQ,aAAa,OAAQ,QAAQ,EAG3C,EAAU,OAAO,QAAU,OAC7B,EAAe,SAAS,EAAU,OAAO,KAAK,EAIlD,OAAO,GAQT,WAAW,CAAC,EAAkC,CAa5C,OAXA,GAAc,QAAQ,CAAC,IAAY,CACjC,EAAU,QAAQ,UAAU,OAC1B,GAAG,EAAU,SAAS,OAAO,MAAM,GACrC,EACD,EAGD,EAAU,QAAQ,UAAU,IAC1B,GAAG,EAAU,SAAS,OAAO,MAAM,GACrC,EAEO,GAQT,QAAQ,CAAC,EAAqB,CAE5B,GACE,EAAU,SACV,EAAU,QAAQ,SAAS,EAAU,OAAO,EAE5C,EAAU,QAAQ,YAAY,EAAU,OAAO,EAIjD,IAAM,EAAU,SAAS,cAAc,KAAK,EAC5C,EAAQ,UAAU,IAAI,EAAU,SAAS,eAAe,CAAC,EACzD,EAAQ,MAAM,SAAW,WAGzB,IAAM,EAAS,EAAO,WACtB,GAAI,EACF,EAAO,aAAa,EAAS,CAAM,EACnC,EAAQ,YAAY,CAAM,EAC1B,EAAQ,YAAY,EAAU,OAAO,EAGrC,EAAU,QAAQ,UAAU,IAC1B,GAAG,EAAU,SAAS,OAAO,eAC/B,EAGA,EAAU,QAAU,EACpB,EAAe,QAAU,EAG3B,OAAO,GAOT,MAAM,EAAG,CACP,GACE,EAAU,SACV,EAAU,QAAQ,SAAS,EAAU,OAAO,EAG5C,EAAU,QAAQ,YAAY,EAAU,OAAO,EAG/C,EAAU,QAAQ,UAAU,OAC1B,GAAG,EAAU,SAAS,OAAO,eAC/B,EAGA,SAAS,KAAK,YAAY,EAAU,OAAO,EAG3C,EAAU,QAAU,OACpB,EAAe,QAAU,OAG3B,OAAO,GAMT,OAAO,EAAG,CAIR,GAHA,EAAU,QAAQ,EAGd,EAAU,QAAS,CACrB,IAAM,EAAS,EAAU,QAAQ,WAC3B,EAAS,EAAU,QAAQ,WAEjC,GAAI,GAAU,EACZ,EAAO,aAAa,EAAQ,EAAU,OAAO,IAMnD,SAAU,IAAI,IAAsB,CAElC,OADA,EAAU,SAAS,GAAG,CAAO,EACtB,GAET,YAAa,IAAI,IAAsB,CAErC,OADA,EAAU,YAAY,GAAG,CAAO,EACzB,GAET,GAAI,CAAC,EAAe,IAAsB,CAExC,OADA,EAAU,GAAG,EAAO,CAAO,EACpB,GAET,IAAK,CAAC,EAAe,IAAsB,CAEzC,OADA,EAAU,IAAI,EAAO,CAAO,EACrB,EAEX,EAEA,OAAO,iBA3XX,KA2CM,GAAa,CACjB,QACA,UACA,YACA,WACA,UACA,UACA,MACF,EAGM,GAAe,CAAC,QAAS,OAAO,EAGhC,GAAgB,CAAC,YAAa,WAAY,eAAgB,aAAa,QCcvE,GAAc,CAAC,EAAsB,CAAC,IAAsB,CAChE,IAAM,EAAa,GAAiB,CAAM,EAE1C,GAAI,CAgBF,OAdc,EACZ,EACA,EAAW,EACX,EAAY,GAAiB,CAAU,CAAC,EACxC,GAAY,CAAU,EACtB,GAAU,CAAU,EACpB,GAAa,CAAU,EACvB,GAAQ,CAAU,EAClB,GAAe,EACf,GAAe,CAAU,EACzB,EAAc,EACd,KAAQ,GAAQ,GAAa,CAAI,CAAC,EAAE,CAAI,CAC1C,EAAE,CAAU,EAGZ,MAAO,EAAO,CAEd,MADA,QAAQ,MAAM,wBAAyB,CAAK,EAClC,MAAM,2BAA4B,EAAgB,SAAS,IAI1D,iBAvGf,IACA,IACA,IAIA,KAQA,KAEA,KAuFe,sBC/Ff,WCoEa,GAAqB,CAAC,IAAuC,CAExE,IAAM,EAAW,IAAI,IAQf,EAAkB,CAAC,EAAe,IACtC,GAAG,KAAS,EAAQ,SAAS,IAQzB,EAAiB,CAAC,EAAwB,IAAiC,CAAC,IAAa,CAC7F,GAAI,CACF,EAAQ,CAAC,EACT,MAAO,EAAO,CACd,QAAQ,MAAM,YAAY,aAAkB,CAAK,IAS/C,EAAqB,CAAC,EAAe,IAAiC,CAC1E,GAAI,CACF,EAAQ,oBAAoB,EAAO,CAAO,EAC1C,MAAO,EAAO,CACd,QAAQ,KAAK,oBAAoB,cAAmB,CAAK,IAI7D,MAAO,CAQL,EAAmB,CAAC,EAAe,EAAyB,EAAmC,CAAC,EAAiB,CAC/G,IAAM,EAAW,EAAe,EAA0B,CAAK,EACzD,EAAK,EAAgB,EAAO,CAAwB,EAU1D,OARA,EAAS,IAAI,EAAI,CACf,SAAU,EACV,WACA,QACA,SACF,CAAC,EAED,EAAQ,iBAAiB,EAAO,EAAU,CAAO,EAC1C,MAST,GAAoB,CAAC,EAAe,EAAuC,CACzE,IAAM,EAAK,EAAgB,EAAO,CAAwB,EACpD,EAAS,EAAS,IAAI,CAAE,EAE9B,GAAI,EACF,EAAmB,EAAO,EAAO,QAAQ,EACzC,EAAS,OAAO,CAAE,EAEpB,OAAO,MAOT,KAAK,EAAiB,CAIpB,OAHA,EAAS,QAAQ,EAAG,WAAU,WAAY,CACxC,EAAmB,EAAO,CAAQ,EACnC,EACM,MAOT,MAAM,EAAiB,CAIrB,OAHA,EAAS,QAAQ,EAAG,WAAU,QAAO,aAAc,CACjD,EAAQ,iBAAiB,EAAO,EAAU,CAAO,EAClD,EACM,MAMT,OAAO,EAAS,CACd,EAAS,QAAQ,EAAG,WAAU,WAAY,CACxC,EAAmB,EAAO,CAAQ,EACnC,EACD,EAAS,MAAM,GAOjB,WAAW,EAA6B,CACtC,OAAO,IAAI,IAAI,CAAQ,GASzB,UAA2B,CAAC,EAAe,EAAkC,CAC3E,IAAM,EAAK,EAAgB,EAAO,CAAwB,EAC1D,OAAO,EAAS,IAAI,CAAE,EAE1B,iBC7MF,KAUA,WCPa,GAUA,GAUA,GAUA,GAoBA,GA2BA,GAqBA,GAUA,iBA5GA,GAAoB,CAE/B,OAAQ,SAER,SAAU,UACZ,EAKa,GAAkB,CAE7B,KAAM,OAEN,KAAM,MACR,EAKa,GAAkB,CAE7B,OAAQ,SAER,SAAU,UACZ,EAKa,GAAoB,CAE/B,QAAS,SAET,MAAO,EAEP,IAAK,IAEL,OAAQ,EAER,MAAO,OAEP,WAAY,GAEZ,cAAe,EACjB,EAKa,GAAmB,CAE9B,UAAW,WAEX,OAAQ,mBAER,SAAU,qBAEV,MAAO,kBAEP,UAAW,sBAEX,OAAQ,mBAER,MAAO,kBAEP,cAAe,0BAEf,SAAU,qBAEV,KAAM,iBACN,WAAY,sBACd,EAKa,GAAwB,CACnC,OAAQ,CACN,WAAY,EACZ,IAAK,EACL,eAAgB,EAChB,OAAQ,CACV,EACA,SAAU,CACR,KAAM,GACN,IAAK,CACP,EACA,OAAQ,CAEN,aAAc,CAChB,CACF,EAMa,GAAqB,CAEhC,KAAM,EAEN,MAAO,CACT,EAKa,GAAgB,CAE3B,OAAQ,CAEN,UAAW,EAEX,MAAO,EAEP,UAAW,EAEX,wBAAyB,EAEzB,wBAAyB,EAEzB,MAAO,IAEP,qBAAsB,EAEtB,qBAAsB,IACxB,EAEA,SAAU,CAER,UAAW,EAEX,wBAAyB,EAEzB,MAAO,EAEP,UAAW,GAEX,wBAAyB,GAEzB,MAAO,IAEP,qBAAsB,EAEtB,qBAAsB,IACxB,CACF,QCjJa,GAAW,CAAC,IAAiD,CACxE,OAAO,QACL,GACA,OAAO,IAAU,UACjB,OAAO,eAAe,CAAK,IAAM,OAAO,eAAe,CAAC,CAAC,CAC3D,GASW,GAAW,CAAyC,EAAQ,IAAgC,CAKvG,IAAM,EAHiB,EAAK,QAAQ,aAAc,KAAK,EAEtB,QAAQ,MAAO,EAAE,EAC3B,MAAM,GAAG,EAE5B,EAAc,EAElB,QAAS,EAAI,EAAG,EAAI,EAAK,OAAQ,EAAI,EAAG,EAAE,EAAG,CAC3C,IAAM,EAAM,EAAK,GACjB,GAAI,KAAO,EACT,EAAS,EAAO,GAEhB,YAIJ,OAAO,OCLI,GAAyB,CAAC,EAAsB,EAAW,KAAyB,CAE/F,GAAI,CAAC,GAAW,EAAE,aAAmB,aACnC,MAAO,CAAE,MAAO,GAAI,QAAS,IAAK,EAIpC,IAAI,EAAQ,EACR,EAAqC,EAEzC,MAAO,GAAkB,EAAQ,EAAU,CAGzC,IAAI,EADkB,OAAO,iBAAiB,CAAc,EAChC,gBAG5B,GAAI,EAAQ,WAAW,MAAM,EAAG,CAC9B,IAAM,EAAW,EAAQ,MAAM,mBAAmB,EAClD,GAAI,EAAU,CACZ,IAAM,EAAU,EAAS,GACzB,EAAU,OAAO,iBAAiB,SAAS,eAAe,EAAE,iBAAiB,CAAO,EAAE,KAAK,GAAK,eAKpG,GAAI,GACA,IAAY,eACZ,IAAY,oBACZ,IAAY,gBACd,MAAO,CAAE,MAAO,EAAS,QAAS,CAAe,EAInD,EAAiB,EAAe,cAChC,IAIF,IAAM,EAAa,OAAO,iBAAiB,SAAS,IAAI,EAAE,gBAC1D,GAAI,IAAe,eAAiB,IAAe,mBACjD,MAAO,CAAE,MAAO,EAAY,QAAS,SAAS,IAAK,EAIrD,MAAO,CAAE,MAAO,qBAAsB,QAAS,IAAK,iBCC/C,SAAS,EAAa,CAC3B,EACA,EAKQ,CACR,IAAM,EAAkB,KAAK,KAAU,IAGvC,GAAI,GAAS,cACX,GAAc,EAAQ,aAAa,EAKrC,IAAI,EADe,iBAAiB,SAAS,IAAI,EAC1B,iBAAiB,CAAe,EAAE,KAAK,EAG9D,GAAI,CAAC,EAEH,EADmB,iBAAiB,SAAS,eAAe,EACzC,iBAAiB,CAAe,EAAE,KAAK,EAI5D,GAAI,CAAC,GAAS,GAAS,SAAU,OAAO,EAAQ,SAChD,GAAI,CAAC,EAAO,MAAO,GAGnB,GAAI,OAAO,GAAS,QAAU,UAAY,oBAAoB,KAAK,CAAK,EACtE,MAAO,QAAQ,MAAU,EAAQ,SAInC,GAAI,OAAO,GAAS,QAAU,UAAY,8BAA8B,KAAK,CAAK,EAAG,CACnF,IAAM,EAAM,EAAM,QAAQ,IAAK,EAAE,EAC7B,EAAG,EAAG,EACV,GAAI,EAAI,SAAW,EACjB,EAAI,SAAS,EAAI,GAAK,EAAI,GAAI,EAAE,EAChC,EAAI,SAAS,EAAI,GAAK,EAAI,GAAI,EAAE,EAChC,EAAI,SAAS,EAAI,GAAK,EAAI,GAAI,EAAE,EAEhC,OAAI,SAAS,EAAI,UAAU,EAAG,CAAC,EAAG,EAAE,EACpC,EAAI,SAAS,EAAI,UAAU,EAAG,CAAC,EAAG,EAAE,EACpC,EAAI,SAAS,EAAI,UAAU,EAAG,CAAC,EAAG,EAAE,EAEtC,MAAO,QAAQ,MAAM,MAAM,MAAM,EAAQ,SAG3C,OAAO,MA7HH,GAGF,GAAyC,KAKvC,GAAqB,IAAY,CACrC,GAAI,GAAe,OAEnB,GAAgB,IAAI,iBAAiB,CAAC,IAAc,CAClD,QAAW,KAAY,EACrB,GACE,EAAS,OAAS,eACjB,EAAS,gBAAkB,cAAgB,EAAS,gBAAkB,mBACvE,CAEA,GAAqB,QAAQ,KAAY,EAAS,CAAC,EACnD,OAGL,EAGD,GAAc,QAAQ,SAAS,KAAM,CACnC,WAAY,GACZ,gBAAiB,CAAC,aAAc,iBAAiB,CACnD,CAAC,GAQU,GAAgB,CAAC,IAAgD,CAE5E,GAAI,CAAC,GACH,GAAmB,EAMrB,OAHA,GAAqB,IAAI,CAAQ,EAG1B,IAAM,CACX,GAAqB,OAAO,CAAQ,kBAlDxC,KAIM,GAAuB,IAAI,IAiIjC,GAAI,OAAO,OAAW,IACpB,OAAO,iBAAiB,SAAU,IAAM,CACtC,GAAI,GACF,GAAc,WAAW,EACzB,GAAgB,KAElB,GAAqB,MAAM,EAC5B,QC/HU,GAAc,CAAC,EAAe,IAA4B,CAGrE,IAAM,EADS,SAAS,cAAc,QAAQ,EAC3B,WAAW,IAAI,EAClC,GAAI,CAAC,EAAK,MAAO,iBAAiB,KAGlC,EAAI,UAAY,EAChB,IAAM,EAAgB,EAAI,UAG1B,GAAI,EAAc,WAAW,GAAG,EAAG,CACjC,IAAM,EAAM,EAAc,UAAU,CAAC,EAC/B,EAAI,SAAS,EAAI,UAAU,EAAG,CAAC,EAAG,EAAE,EACpC,EAAI,SAAS,EAAI,UAAU,EAAG,CAAC,EAAG,EAAE,EACpC,EAAI,SAAS,EAAI,UAAU,EAAG,CAAC,EAAG,EAAE,EAC1C,MAAO,QAAQ,MAAM,MAAM,MAAM,KAInC,GAAI,EAAc,WAAW,KAAK,EAAG,CACnC,IAAM,EAAQ,EAAc,MAAM,MAAM,EACxC,GAAI,EAAO,CACT,IAAO,EAAG,EAAG,GAAK,EAClB,MAAO,QAAQ,MAAM,MAAM,MAAM,MAKrC,MAAO,iBAAiB,UC3Bb,GAAO,CAClB,EACA,IAEA,CAAC,EAAQ,IACP,EAAU,EAAK,CAAO,EAAI,EAAY,EAAK,CAAO,EAAI,EAO7C,GAAa,IAAI,IAC5B,EAAQ,OAAO,OAAO,EAAE,KAAK,GAAG,gBAzBlC,KACA,KAEA,WCQa,GAAsB,CACjC,EACA,EACA,IACiB,CAEjB,IAAI,EAA2B,KAGzB,EAAkB,IAAY,CAClC,GAAI,EAAW,aAAa,CAAS,EACrC,EAAY,OAAO,WAAW,IAAM,CAClC,EAAS,GACR,GAAG,GAIR,GAAI,OAAO,eAAmB,IAAa,CACzC,IAAM,EAAW,IAAI,eAAe,CAAC,IAAY,CAC/C,QAAW,KAAS,EAAS,CAC3B,IAAQ,SAAU,EAAM,YAClB,EAAe,WAAW,EAAO,MAAM,OAAS,GAAG,EAGzD,GAAI,KAAK,IAAI,EAAQ,CAAY,EAAI,EACnC,EAAgB,GAGrB,EAKD,OAFA,EAAS,QAAQ,CAAO,EAEjB,IAAM,CACX,GAAI,EAAW,aAAa,CAAS,EACrC,EAAS,WAAW,GAKtB,YADA,OAAO,iBAAiB,SAAU,CAAe,EAC1C,IAAM,CACX,GAAI,EAAW,aAAa,CAAS,EACrC,OAAO,oBAAoB,SAAU,CAAe,QC3CpD,GAAc,CAClB,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,IACS,CACT,IAAM,EAAQ,KAAK,IAAI,IAAK,KAAK,IAAI,EAAW,CAAU,EAAI,EAAE,EAC1D,GAAa,EAAW,GAAc,EAGtC,EAAa,GAAc,SAAS,MAAQ,EAAI,KAAK,GAAM,KAEjE,EAAI,UAAU,EAEd,QAAS,EAAI,EAAG,GAAK,EAAO,IAAK,CAC/B,IAAM,EAAQ,EAAa,EAAY,EAGjC,EAAQ,EAAQ,EAAgB,EAAgB,EAChD,EAAW,KAAK,IAAI,CAAK,EAQzB,EAJJ,KAAK,KAAK,CAAQ,EAClB,KAAK,IAAI,KAAK,IAAI,CAAQ,EAAG,GAAc,SAAS,KAAK,EAGnB,EAClC,EAAgB,EAAa,EAE7B,EAAI,EAAU,EAAgB,KAAK,IAAI,CAAK,EAC5C,EAAI,EAAU,EAAgB,KAAK,IAAI,CAAK,EAElD,GAAI,IAAM,EACR,EAAI,OAAO,EAAG,CAAC,EAEf,OAAI,OAAO,EAAG,CAAC,EAInB,EAAI,OAAO,GAMA,GAAuB,CAClC,EACA,EACA,EACA,EACA,EACA,EAAwB,EACxB,EAA8B,SACrB,CACT,IAAQ,MAAK,QAAO,UAAW,EACzB,EAAc,GAAe,EAAO,SAAS,EAC7C,EAAS,IAAiB,OAG1B,EAAgB,KAAK,IAAI,EAAO,CAAM,EAEtC,EAAmB,EACrB,GAAc,SAAS,wBACvB,GAAc,SAAS,UAIrB,EAAa,EAAgB,EAAI,EAAc,EAG/C,EAAgB,GAAc,EAAmB,KAGjD,EAAgB,EAClB,GAAiB,EAAa,CAAa,EAC3C,EAEE,EAAS,EAAa,EACtB,EAAU,EAAQ,EAClB,EAAU,EAAS,EAGzB,EAAI,UAAU,EAAG,EAAG,EAAO,CAAM,EAIjC,IAAM,GADW,GAAsB,SAAS,IAAM,EAAI,GAC3B,EACzB,EAAa,CAAC,KAAK,GAAK,EACxB,EAAW,EAAI,KAAK,GAAK,EAG/B,EAAI,UAAY,EAChB,EAAI,QAAU,QACd,EAAI,SAAW,QAGf,IAAM,EAAgB,EAClB,GAAc,SAAS,wBACvB,GAAc,SAAS,UAE3B,GAAI,EAAiB,CAGnB,IAAM,GAAW,EADG,UAId,EAAe,CAAC,KAAyB,CAC7C,IAAM,GAAiB,IAAQ,IAAM,GAAO,EAAI,EAAI,GAAO,EAK3D,MAAO,OAAS,OAHd,GAAiB,IACb,EAAI,GAAiB,GACrB,EAAI,KAAK,IAAI,GAAK,GAAiB,EAAG,CAAC,EAAI,IAI7C,EAAc,IAAc,CAEhC,IAAM,GAAgB,EAAgB,KAAQ,EAAI,KAAK,GACjD,GAAkB,KAAK,MAAM,EAhBjB,IAgB4C,EACxD,GAAiB,EAjBL,UAmBd,GAAqB,EACzB,GAAI,GAAgB,IAAK,CACvB,IAAM,IAAuB,GAAgB,KAAO,EAKpD,GAAqB,OAHnB,GAAsB,IAClB,EAAI,GAAsB,GAC1B,EAAI,KAAK,IAAI,GAAK,GAAsB,EAAG,CAAC,EAAI,GAIxD,OACE,IACC,GAAkB,MAAQ,IAAsB,EAAI,KAAK,IAKxD,EAAY,EAAa,EAAO,EAAI,EAAI,KAAK,GAC7C,EAAW,EAAY,EAGvB,GAAW,EAAa,EACxB,GAAS,GAAW,EAI1B,EAAI,YAAc,GAAc,wBAAyB,CACvD,MAAO,KACP,SAAU,0BACZ,CAAC,EAID,EAAI,UAAU,EAEd,IAAM,GAAgB,EAAc,EAepC,GAdA,EAAI,IACF,EACA,EACA,EACA,GAAS,GACT,GAAW,GAAgB,EAAI,KAAK,EACtC,EACA,EAAI,OAAO,EAGX,EAAI,YAAc,GAAc,oBAAqB,CACnD,SAAU,SACZ,CAAC,EAEG,EACF,GACE,EACA,EACA,EACA,EACA,GACA,GACA,EACA,EACA,CACF,EAEA,OAAI,UAAU,EACd,EAAI,IAAI,EAAS,EAAS,EAAQ,GAAU,EAAM,EAClD,EAAI,OAAO,EAGb,OAIF,IAAM,EAAa,EAAQ,EAErB,EAAmB,KAAK,IAAI,EADT,KACqC,EAGxD,EAAqB,KACvB,EAAoB,EAExB,GAAI,GAAc,EAAoB,CAEpC,IAAM,GACH,EAAa,IAAuB,EAAI,GACrC,GAAgB,EAAqB,EAC3C,EAAoB,EAAW,EAAc,GAI/C,GAAI,EAAa,KAAM,CAGrB,IAAM,GADc,EAAa,EAAoB,EACpB,EAAc,EAGzC,EAAW,EAAa,EAAW,EAAc,EAGvD,GAAI,GAAa,EACf,EAAI,YAAc,GAAc,wBAAyB,CACvD,MAAO,KACP,SAAU,0BACZ,CAAC,EACD,EAAI,UAAU,EACd,EAAI,IAAI,EAAS,EAAS,EAAQ,GAAY,CAAQ,EACtD,EAAI,OAAO,EAKf,EAAI,YAAc,GAAc,oBAAqB,CAAE,SAAU,SAAU,CAAC,EAG5E,IAAI,EAAwB,EAC5B,GAAI,EAAQ,CACV,IAAM,EAAqB,GAAc,SAAS,qBAC5C,GAAqB,GAAc,SAAS,qBAGlD,GAAI,IAAe,GAAK,EAAqB,EAC3C,EAAwB,EACnB,QAAI,EAAa,GAAK,GAAc,EAAoB,CAE7D,IAAM,EAAqB,EAAa,EACxC,EAAwB,EAAgB,KAAK,IAAI,EAAoB,CAAC,EACjE,QAAI,GAAc,GAAoB,CAE3C,IAAM,GACH,EAAa,KAAuB,EAAI,IACrC,EAAgB,EAAI,KAAK,IAAI,EAAI,EAAoB,CAAC,EAC5D,EAAwB,GAAiB,EAAI,GAI/C,GAAI,GAAc,EAChB,EAAwB,EAK5B,IAAM,EAAgB,EAChB,GAAc,EAAa,EAAoB,EAErD,GAAI,EACF,GACE,EACA,EACA,EACA,EACA,EACA,GACA,EACA,EACA,CACF,EAEA,OAAI,UAAU,EACd,EAAI,IAAI,EAAS,EAAS,EAAQ,EAAe,EAAW,EAC5D,EAAI,OAAO,iBArSf,KACA,KACA,WCGM,GAAiB,CACrB,EACA,EACA,IACS,CACT,EAAI,YAAc,EAClB,EAAI,UAAY,EAChB,EAAI,QAAU,SAIV,GAAW,CACf,EACA,EACA,EACA,EACA,EACA,EACA,IACS,CAGT,GAFA,EAAI,UAAU,EAEV,CAAC,GAAU,EAAW,YAAc,EACtC,EAAI,OAAO,EAAQ,CAAO,EAC1B,EAAI,OAAO,EAAM,CAAO,EACnB,KACL,IAAI,EAAQ,EACZ,QAAS,EAAI,EAAQ,GAAK,EAAM,GAAK,EAAG,CACtC,IAAM,EAAQ,EAAI,EAAW,UAAY,EAAgB,EAAW,MAC9D,EAAW,KAAK,IAAI,CAAK,EACzB,EACJ,KAAK,KAAK,CAAQ,EAClB,KAAK,IAAI,KAAK,IAAI,CAAQ,EAAG,GAAc,OAAO,KAAK,EACnD,EAAI,EAAU,EAAe,EAAW,UAE9C,GAAI,IAAM,EACR,EAAI,OAAO,EAAG,CAAC,EAEf,OAAI,OAAO,EAAG,CAAC,EAEjB,EAAQ,EAIV,GAAI,EAAQ,EAAM,CAChB,IAAM,EACJ,EAAO,EAAW,UAAY,EAAgB,EAAW,MACrD,EAAW,KAAK,IAAI,CAAK,EACzB,EACJ,KAAK,KAAK,CAAQ,EAClB,KAAK,IAAI,KAAK,IAAI,CAAQ,EAAG,GAAc,OAAO,KAAK,EACnD,EAAI,EAAU,EAAe,EAAW,UAC9C,EAAI,OAAO,EAAM,CAAC,GAItB,EAAI,OAAO,GAIP,GAAkB,CAAC,EAAc,IAAiC,CACtE,IAAO,EAAI,EAAI,GAAM,EACrB,GAAI,GAAQ,EACV,MAAO,MAAQ,oBAAoB,EAAO,GACrC,QAAI,GAAQ,EACjB,MAAO,UACF,QAAI,GAAM,GAAQ,EACvB,MAAO,UAET,OAAO,EAAK,SAAY,qBAAqB,EAAO,IAAO,EAAI,IAAO,MAGlE,GAAsB,CAC1B,EACA,IACW,CACX,QAAS,EAAI,EAAG,EAAI,EAAU,OAAS,EAAG,IAAK,CAC7C,IAAO,EAAI,GAAM,EAAU,IACpB,EAAI,GAAM,EAAU,EAAI,GAC/B,GAAI,GAAQ,EAAI,CACd,IAAM,GAAK,EAAO,IAAO,EAAK,GAC9B,OAAO,GAAM,EAAK,GAAM,GAG5B,IAAO,EAAO,GAAS,EAAU,EAAU,OAAS,GACpD,OAAO,GAAS,IAAM,KAAW,EAAO,IAAU,EAAI,KAM3C,GAAqB,CAChC,EACA,EACA,EACA,EACA,EACA,EACA,EAAwB,EACxB,EAA6B,GAC7B,EAA8B,SACrB,CACT,IAAQ,MAAK,QAAO,UAAW,EACzB,EAAc,GAAe,EAAO,SAAS,EAC7C,EAAU,EAAS,EACnB,EAAS,IAAiB,OAC1B,EAAU,EAAc,EACxB,EAAiB,EAAQ,EAAU,EACnC,EAAW,GAAsB,OAAO,IACxC,EAAa,EAAQ,EAGrB,EAAwB,MACxB,EAAmB,KAAK,IAAI,EADJ,KACqC,EAE7D,EAAc,EAAU,EAAiB,EAG/C,EAAI,UAAU,EAAG,EAAG,EAAO,CAAM,EAGjC,IAAM,EAAe,GAAc,oBAAqB,CACtD,SAAU,SACZ,CAAC,EACK,EAAa,GAAc,wBAAyB,CACxD,MAAO,KACP,SAAU,0BACZ,CAAC,EAED,GAAI,EAAiB,CAEnB,IAAM,GAAkB,EADF,UAIhB,EAAmB,EAAW,EAAI,EAAc,EAGhD,GAAe,GAAgB,GAAgB,CAAC,OAAQ,MAAM,CAAC,EAC/D,EAAmB,GAAoB,GAAgB,CAC3D,CAAC,EAAG,IAAI,EACR,CAAC,IAAK,CAAC,EACP,CAAC,OAAQ,OAAO,CAClB,CAAC,EAEK,EACJ,IAAkB,IACd,EACA,GAAgB,GAAgB,CAAC,OAAQ,KAAM,MAAM,CAAC,EACtD,EACJ,IAAkB,IACd,SACA,GAAoB,GAAgB,CAClC,CAAC,IAAK,QAAQ,EACd,CAAC,IAAK,OAAO,EACb,CAAC,KAAM,OAAO,CAChB,CAAC,EAmCD,GAhCc,CAClB,CACE,MAAO,GACP,UAAW,EACX,MAAO,KAAK,IACV,EACA,EAAW,EAAiB,EAAoB,GAClD,EACA,IAAK,KAAK,IACR,EAAQ,EACR,EACG,EAAiB,EAAoB,IACtC,EAAiB,EACrB,CACF,EACA,CACE,MAAO,EACP,UAAW,EACX,MAAO,KAAK,IACV,EACA,EAAW,EAAiB,EAAsB,GACpD,EACA,IAAK,KAAK,IACR,EAAQ,EACR,EACG,EAAiB,EAAsB,IACxC,EAAiB,CACrB,CACF,CACF,EAAE,OAAO,CAAC,KAAM,GAAE,IAAM,GAAE,KAAK,EAGF,KAAK,CAAC,GAAG,KAAM,GAAE,MAAQ,GAAE,KAAK,EAGvD,GAAiB,CAAC,EACxB,QAAS,GAAI,EAAG,GAAI,GAAS,OAAQ,KAAK,CACxC,IAAM,GAAU,GAAS,IAEzB,GAAI,GAAe,SAAW,EAC5B,GAAe,KAAK,IAAK,EAAQ,CAAC,EAC7B,KACL,IAAM,GAAa,GAAe,GAAe,OAAS,GAG1D,GAAI,GAAQ,OAAS,GAAW,IAAM,EAEpC,GAAW,IAAM,KAAK,IAAI,GAAW,IAAK,GAAQ,GAAG,EAGrD,QAAe,KAAK,IAAK,EAAQ,CAAC,GAMxC,GAAe,EAAK,EAAa,CAAU,EAG3C,IAAM,GAAmB,EAEzB,GAAI,GAAe,SAAW,EAE5B,GAAS,EAAK,EAAS,EAAQ,EAAS,EAAS,GAAO,EAAG,CACzD,UAAW,EACX,UAAW,EACX,MAAO,CACT,CAAC,EACI,KAEL,IAAM,GAAa,GAAe,GAAG,MACrC,GAAI,GAAa,EAAU,EAAmB,GAC5C,GACE,EACA,EACA,GAAa,EACb,EACA,GACA,EACA,CAAE,UAAW,EAAG,UAAW,EAAG,MAAO,CAAE,CACzC,EAIF,GAAI,GAAe,SAAW,GAE5B,GADY,GAAe,GAAG,MAAQ,GAAe,GAAG,IAC9C,EAAI,EAAmB,GAC/B,GACE,EACA,GAAe,GAAG,IAAM,EACxB,GAAe,GAAG,MAAQ,EAC1B,EACA,GACA,EACA,CAAE,UAAW,EAAG,UAAW,EAAG,MAAO,CAAE,CACzC,EAMJ,IAAM,GADc,GAAe,GAAe,OAAS,GAC/B,IAC5B,GAAI,EAAQ,EAAU,GAAU,EAAmB,GACjD,GACE,EACA,GAAU,EACV,EAAQ,EACR,EACA,GACA,EACA,CAAE,UAAW,EAAG,UAAW,EAAG,MAAO,CAAE,CACzC,EAKJ,GAAe,EAAK,EAAa,CAAY,EAC7C,IAAM,GAAa,CACjB,UAAW,EACP,GACE,EACA,GAAc,OAAO,uBACvB,EACA,EACJ,UACG,GAAc,OAAO,wBAA0B,EAAI,KAAK,GAAM,IACjE,MAAO,CACT,EAEA,GAAe,QAAQ,CAAC,KAAY,CAClC,GACE,EACA,GAAQ,MACR,GAAQ,IACR,EACA,EACA,EACA,EACF,EACD,EAED,OAIF,IAAM,EAAqB,GAAc,OAAO,qBAC1C,EAAqB,GAAc,OAAO,qBAG1C,GAAa,EAAW,GAAe,EAG7C,GAAe,EAAK,EAAa,CAAU,EAC3C,IAAM,EACJ,IAAe,EACX,EAAU,EAAc,EACxB,KAAK,IAAI,EAAc,EAAW,EAAQ,CAAO,EAEvD,GAAS,EAAK,EAAY,EAAQ,EAAS,EAAS,GAAO,EAAG,CAC5D,UAAW,EACX,UAAW,EACX,MAAO,CACT,CAAC,EAGD,GAAe,EAAK,EAAa,CAAY,EAE7C,IAAM,EACJ,GAAc,EACV,EAAQ,EACR,KAAK,IAAI,EAAS,EAAc,CAAS,EAG3C,EACJ,GAAI,IAAe,EAEjB,EAAoB,GAAW,EAAS,IAAM,GACzC,KAEL,IAAM,EAAmB,EAAc,EACvC,EAAoB,KAAK,IAAI,EAAU,EAAkB,CAAY,EAIvE,IAAI,EAAgB,EAChB,GAAiB,EAAa,GAAc,OAAO,SAAS,EAC5D,EACJ,GAAI,GAEF,GAAI,IAAe,GAAK,EAAqB,EAC3C,EAAgB,EACX,QAAI,GAAoB,EAE7B,GAAiB,KAAK,IAAI,EAAmB,EAAoB,CAAC,EAC7D,QAAI,GAAoB,EAE7B,GAAiB,KAAK,KACnB,EAAI,IAAqB,EAAI,GAC9B,CACF,EAWJ,GAPA,GAAS,EAAK,EAAS,EAAmB,EAAS,EAAQ,EAAe,CACxE,UAAW,EACX,UAAY,GAAc,OAAO,UAAY,EAAI,KAAK,GAAM,IAC5D,MAAQ,GAAc,OAAO,MAAQ,EAAI,KAAK,GAAM,IACtD,CAAC,EAGG,EAAS,GAAK,EAAS,EAAO,CAChC,GACE,EACA,EACA,GAAc,gCAAiC,CAAE,SAAU,SAAU,CAAC,CACxE,EACA,IAAM,EAAY,EAAU,GAAkB,EAAS,GACvD,GAAS,EAAK,EAAa,EAAW,EAAS,GAAO,EAAG,CACvD,UAAW,EACX,UAAW,EACX,MAAO,CACT,CAAC,EAIH,GAAI,EAAa,GAAK,EAAmB,CAEvC,IAAM,EAAkB,KAAK,IAAI,EAAc,IAAK,CAAC,EACrD,EAAI,UAAU,EACd,EAAI,IAAI,EAAQ,EAAS,EAAS,EAAiB,EAAG,EAAI,KAAK,EAAE,EACjE,EAAI,UAAY,EAChB,EAAI,KAAK,kBA1Yb,KACA,KACA,WC6Da,GAAiB,CAC5B,EAA+B,SACpB,CACX,GAAI,OAAO,IAAc,SACvB,OAAO,EAGT,OAAO,IAAc,QACjB,GAAmB,MACnB,GAAmB,MAOZ,GAAmB,CAC9B,EACA,EACA,IACW,CAMX,IAAM,EACJ,EACC,KANuB,EAMI,IACzB,EAPqB,GASpB,EAAY,EAAgB,EAClC,OAAO,EAAe,KAAK,IAAI,EAAW,CAAY,EAAI,GAMtD,GAAyB,CAC7B,EACA,EACA,EACA,IACS,CACT,IAAM,EAAa,OAAO,kBAAoB,EACxC,EAAc,GAAe,GAAQ,SAAS,GAC5C,OAAQ,EAEhB,GAAI,EAAY,CACd,IAAM,EAAO,KAAK,IAChB,GACA,KAAK,IAAI,GAAQ,MAAQ,GAAsB,SAAS,KAAM,GAAG,CACnE,EAGI,EAAgB,EACpB,GAAI,GAAQ,QAAU,OAAQ,CAC5B,IAAM,EAAa,EAAO,EAAI,EAAc,EACtC,EAAmB,GAAQ,cAC7B,GAAc,SAAS,wBACvB,GAAc,SAAS,UACrB,EAAgB,GAAc,EAAmB,KACvD,EAAgB,GAAiB,EAAa,CAAa,EAG7D,IAAM,EAAe,EAAO,EAAgB,EAE5C,EAAO,MAAM,MAAQ,EAAO,MAAM,OAAS,GAAG,MAC9C,EAAO,MAAQ,EAAO,OAAS,KAAK,MAAM,EAAe,CAAU,EACnE,EAAQ,MAAQ,EAAQ,OAAS,EAC5B,KACL,IAAM,EAAkB,EAAO,cAC/B,GAAI,CAAC,EAAiB,OAEtB,IAAM,EAAQ,KAAK,IACjB,EAAgB,sBAAsB,EAAE,OACtC,EAAgB,YAClB,GACF,EAGI,EAAc,EAClB,GAAI,GAAQ,QAAU,OAAQ,CAC5B,IAAM,EAAgB,GAAc,OAAO,UACrC,EAAgB,GAAiB,EAAa,CAAa,EACjE,EAAc,KAAK,KAAK,EAAgB,CAAC,EAG3C,IAAM,EAAS,EAAc,EAE7B,EAAO,MAAM,MAAQ,GAAG,MACxB,EAAO,MAAM,OAAS,GAAG,MACzB,EAAO,MAAQ,KAAK,MAAM,EAAQ,CAAU,EAC5C,EAAO,OAAS,KAAK,MAAM,EAAS,CAAU,EAE9C,EAAQ,MAAQ,EAChB,EAAQ,OAAS,EAGnB,EAAI,aAAa,EAAG,EAAG,EAAG,EAAG,EAAG,CAAC,EACjC,EAAI,MAAM,EAAY,CAAU,GAM5B,GAAc,CAClB,EACA,EACA,IACkB,CAClB,IAAM,EAAyB,CAC7B,SACA,IAAK,EAAO,WAAW,IAAI,EAC3B,MAAO,EACP,OAAQ,EACR,WAAY,OAAO,kBAAoB,CACzC,EAGA,OADA,GAAuB,EAAQ,EAAS,EAAY,CAAM,EACnD,GAMI,GACX,CAAC,IACD,CAAC,IAA8C,CAE7C,IAAM,EADU,EAAO,UACQ,GAAkB,SAG3C,EAAS,SAAS,cAAc,QAAQ,EAC9C,EAAO,UAAY,GAAG,EAAU,SAC9B,GAAiB,SACnB,WACA,EAAO,MAAM,SAAW,OACxB,EAAO,MAAM,UAAY,OACzB,EAAO,MAAM,UAAY,aAEzB,EAAU,QAAQ,YAAY,CAAM,EAGpC,IAAI,EAAsC,KACtC,EAAqC,KACrC,EAA0C,KAG1C,EAAmB,EAAO,UAC1B,EAAe,EAAO,MACtB,EAAc,EAAO,MAAQ,GAAsB,SAAS,KAG5D,EAAgB,EAAO,OAAS,EAChC,EAAc,EACd,EAAmB,EAEjB,EAAmB,IAAe,CACtC,GAAI,CAQF,OAPA,EAAgB,GAAY,EAAQ,EAAY,IAC3C,EACH,UAAW,EACX,MAAO,EACP,KAAM,CACR,CAAC,EACD,EAAU,IAAM,EAAc,IACvB,GACP,MAAO,EAAO,CAEd,OADA,QAAQ,KAAK,gCAAiC,CAAK,EAC5C,KAKX,GAAI,CAAC,EAAiB,EACpB,sBAAsB,IAAM,CAC1B,GAAI,CAAC,EAAiB,EACpB,WAAW,EAAkB,GAAG,EAEnC,EAIH,EAAU,OAAS,EACnB,EAAU,cAAgB,EAC1B,EAAU,YAAc,KACxB,EAAU,gBAAkB,KAC5B,EAAU,iBAAmB,KAC7B,EAAU,aAAe,EAGzB,IAAM,EAA8B,CAAC,EAAqB,IAAY,CACpE,GAAI,CAAC,EAAU,OAAO,cAAe,OAErC,GAAI,EAAU,YACZ,qBAAqB,EAAU,WAAW,EAC1C,EAAU,YAAc,KAI1B,IAAI,EAAqB,EAEnB,EAAU,CAAC,IAA4B,CAC3C,GAAI,CAAC,EAAU,OAAO,cAAe,CACnC,EAA2B,EAC3B,OAGF,GAAI,IAAuB,EACzB,EAAqB,EAAY,EAGnC,IAAM,EAAe,EAAY,EACjC,EAAU,cAAgB,EAC1B,EAAK,CAAY,EACjB,EAAU,YAAc,sBAAsB,CAAO,GAGvD,EAAU,YAAc,sBAAsB,CAAO,GAGjD,EAA6B,IAAY,CAC7C,GAAI,EAAU,YACZ,qBAAqB,EAAU,WAAW,EAC1C,EAAU,YAAc,MAKtB,EAAqB,CAAC,EAAqB,IAAY,CAC3D,GAAI,EAAU,gBACZ,qBAAqB,EAAU,eAAe,EAC9C,EAAU,gBAAkB,KAI9B,IAAI,EAAqB,EAEnB,EAAU,CAAC,IAA4B,CAC3C,GAAI,IAAuB,EACzB,EAAqB,EAAY,EAGnC,IAAM,EAAe,EAAY,EACjC,EAAU,cAAgB,EAC1B,EAAK,CAAY,EACjB,EAAU,gBAAkB,sBAAsB,CAAO,GAG3D,EAAU,gBAAkB,sBAAsB,CAAO,GAGrD,EAAoB,IAAY,CACpC,GAAI,EAAU,gBACZ,qBAAqB,EAAU,eAAe,EAC9C,EAAU,gBAAkB,MAK1B,EAAO,CAAC,EAAwB,IAAY,CAChD,GAAI,CAAC,EAAe,OAEpB,IAAM,EAAQ,EAAU,MAClB,EAAQ,GAAO,OAAS,EAAO,OAAS,EACxC,EAAM,GAAO,KAAO,EAAO,KAAO,IAClC,EAAS,GAAO,QAAU,EAAO,QAAU,EAC3C,EACJ,GAAO,eAAiB,EAAO,eAAiB,GAE5C,EAAgB,IACjB,EACH,UAAW,EACX,MAAO,EACP,KAAM,CACR,EAEA,GAAuB,EAAQ,EAAe,EAAY,CAAa,EAEvE,IAAM,EAAY,GAAmB,CAAC,EAAQ,EAAQ,EAEtD,GAAI,EACF,GACE,EACA,EACA,EACA,EACA,EACA,EACA,CACF,EAEA,QACE,EACA,EACA,EACA,EACA,EACA,EACA,EACA,GACA,CACF,GAKE,EAAS,IAAY,CACzB,GAAI,CAAC,EAAe,OAEpB,GAAI,CACF,IAAM,EAAa,GAAY,EAAQ,EAAY,IAC9C,EACH,UAAW,EACX,MAAO,EACP,KAAM,CACR,CAAC,EACD,EAAU,IAAM,EAAW,IAC3B,OAAO,OAAO,EAAe,CAAU,EACvC,EAAK,EACL,MAAO,EAAO,CACd,QAAQ,KAAK,wBAAyB,CAAK,IAK/C,EAAgB,GAAoB,EAAU,QAAS,EAAQ,IAAM,CACnE,GAAI,EAAU,QAAQ,YAAc,GAAK,EACvC,EAAO,EAEV,EAED,IAAM,EAAU,GAAc,oBAAqB,CAAE,cAAe,CAAK,CAAC,EAC1E,EAAqB,OAAO,IAAY,WAAa,EAAU,KAG/D,IAAM,EAAc,IAAY,CAC9B,GAAI,CAAC,EAAe,CAClB,sBAAsB,CAAW,EACjC,OAMF,GAHA,EAAK,EAGD,EAAU,OAAO,cACnB,GAAI,IAAiB,QAAU,CAAC,EAC9B,EAAmB,EAEnB,OAA4B,EAEzB,QAAI,IAAiB,OAC1B,EAAmB,GAIvB,sBAAsB,CAAW,EAGjC,IAAM,EAAsB,CAAC,IAAqC,CAChE,GAAI,CAAC,EAAe,OAEpB,IAAM,EAAgB,IACjB,EACH,UAAW,EACX,MAAO,EACP,KAAM,KACH,CACL,EAEA,GAAuB,EAAQ,EAAe,EAAY,CAAa,EACvE,EAAK,GAmQP,GA/PA,EAAU,aAAe,CAAC,IAAiC,CACzD,EAAmB,EACnB,EAAoB,CAAE,WAAU,CAAC,GAInC,EAAU,QAAU,CAAC,IAAiB,CACpC,GAAI,CAAC,EAAY,OACjB,EAAc,KAAK,IAAI,GAAI,KAAK,IAAI,EAAM,GAAG,CAAC,EAC9C,EAAoB,CAAE,KAAM,CAAY,CAAC,GAG3C,EAAU,QAAU,IAAO,EAAa,EAAc,OAGtD,EAAU,SAAW,CAAC,IAAyB,CAE7C,GAAI,IAAiB,EAAO,OAS5B,GAPA,EAAe,EACf,EAAU,aAAe,EAEzB,EAAoB,CAAE,OAAM,CAAC,EAIzB,EAAU,OAAO,cAAe,CAClC,IAAM,EAAuB,EAAU,eAAiB,EAOxD,GAJA,EAAkB,EAClB,EAA2B,EAGvB,IAAU,QAAU,CAAC,EACvB,EAAmB,CAAoB,EAEvC,OAA4B,CAAoB,EAE7C,QAAI,IAAU,QAEnB,GAAI,CAAC,EAAU,gBACb,EAAmB,EAIrB,OAAkB,EAIpB,EAAK,EAAU,eAAiB,CAAC,GAInC,EAAU,SAAW,CAAC,EAAe,EAAmB,KAAS,CAG/D,GAFA,EAAc,KAAK,IAAI,EAAG,KAAK,IAAI,EAAU,MAAM,IAAK,CAAK,CAAC,EAE1D,EAAU,MAAM,cAClB,EAAU,iBAAiB,EAAK,EAIlC,GAAI,EAAU,kBAAoB,EAEhC,OAGF,GAAI,EAAU,iBACZ,qBAAqB,EAAU,gBAAgB,EAC/C,EAAU,iBAAmB,KAG/B,GAAI,CAAC,EAAS,CAIZ,GAHA,EAAgB,EAChB,EAAK,EAGH,IAAiB,QACjB,CAAC,EAAU,MAAM,eACjB,CAAC,EAAU,gBAEX,EAAmB,EAGrB,GAAI,GAAe,EAAU,MAAM,IACjC,EAAU,QAAQ,cAChB,IAAI,YAAY,WAAY,CAC1B,OAAQ,CAAE,MAAO,EAAa,IAAK,EAAU,MAAM,GAAI,CACzD,CAAC,CACH,EAEF,OAGF,IAAM,EAAa,EACb,EAAY,YAAY,IAAI,EAG5B,EAAoB,EAAY,EAClC,EAAW,IAEf,GAAI,EAAoB,KAAO,EAAmB,EAEhD,EAAW,KAAK,IAAI,IAAK,EAAoB,GAAG,EAGlD,EAAmB,EAEnB,IAAM,EAAe,CAAC,IAAwB,CAC5C,IAAM,GAAU,EAAc,EACxB,EAAW,KAAK,IAAI,GAAU,EAAU,CAAC,EACzC,GACJ,EAAW,IACP,EAAI,EAAW,EAAW,EAC1B,EAAI,KAAK,IAAI,GAAK,EAAW,EAAG,CAAC,EAAI,EAK3C,GAHA,EAAgB,GAAc,EAAc,GAAc,GAGtD,CAAC,EAAU,iBAAmB,IAAiB,OACjD,EAAK,CAAW,EAGlB,GAAI,EAAW,EACb,EAAU,iBAAmB,sBAAsB,CAAY,EAC1D,KAKL,GAJA,EAAgB,EAChB,EAAU,iBAAmB,KAI3B,IAAiB,QACjB,CAAC,EAAU,MAAM,eACjB,CAAC,EAAU,gBAEX,EAAmB,EAIrB,GAAI,GAAe,EAAU,MAAM,IACjC,EAAU,QAAQ,cAChB,IAAI,YAAY,WAAY,CAC1B,OAAQ,CAAE,MAAO,EAAa,IAAK,EAAU,MAAM,GAAI,CACzD,CAAC,CACH,IAKN,EAAU,iBAAmB,sBAAsB,CAAY,GAIjE,EAAU,iBAAmB,CAAC,IAA2B,CACvD,GAAI,CAAC,EAAU,MAAO,CACpB,QAAQ,KAAK,oDAAoD,EACjE,OAKF,GAFA,EAAU,MAAM,cAAgB,EAE5B,EAAe,CAEjB,GAAI,EAAU,iBACZ,qBAAqB,EAAU,gBAAgB,EAC/C,EAAU,iBAAmB,KAM/B,GAHA,EAAgB,EAAU,MAAM,MAG5B,IAAiB,QAAU,CAAC,EAC9B,EAAmB,EAEnB,OAA4B,EAEzB,KAQL,GANA,EAAgB,EAAU,MAAM,MAGhC,EAA2B,EAGvB,IAAiB,QACnB,GAAI,CAAC,EAAU,gBACb,EAAmB,EAGrB,OAAkB,EAGpB,EAAK,IAKT,EAAU,KAAO,IAAM,CACrB,EAAU,QAAQ,UAAU,IAC1B,EAAU,SAAS,GAAiB,UAAU,CAChD,EACA,EAAU,QAAQ,MAAM,QAAU,IAElC,IAAM,EAAkB,IAAM,CAC5B,EAAU,QAAQ,MAAM,QAAU,OAClC,EAAU,QAAQ,oBAAoB,gBAAiB,CAAe,GAiBxE,OAfA,EAAU,QAAQ,iBAAiB,gBAAiB,CAAe,EAGnE,CACE,EAAU,YACV,EAAU,gBACV,EAAU,gBACZ,EAAE,QAAQ,CAAC,IAAO,CAChB,GAAI,EAAI,qBAAqB,CAAY,EAC1C,EACD,EAAU,YACR,EAAU,gBACV,EAAU,iBACR,KAEG,GAIT,EAAU,KAAO,IAAM,CAUrB,GATA,EAAU,QAAQ,UAAU,IAC1B,EAAU,SAAS,GAAiB,UAAU,CAChD,EACA,EAAU,QAAQ,MAAM,QAAU,GAClC,EAAU,QAAQ,MAAM,QAAU,IAClC,EAAU,QAAQ,aAClB,EAAU,QAAQ,MAAM,QAAU,IAG9B,EAAU,OAAO,cACnB,GAAI,IAAiB,QAAU,CAAC,EAC9B,EAAmB,EAEnB,OAA4B,EAEzB,QAAI,IAAiB,OAC1B,EAAmB,EAGrB,OAAO,GAIT,EAAU,UAAY,IACpB,EAAU,QAAQ,MAAM,UAAY,QACpC,EAAU,QAAQ,MAAM,UAAY,IAGlC,EAAU,UAAW,CACvB,IAAM,EAAkB,EAAU,UAAU,UAAY,IAAM,IAC9D,EAAU,UAAU,QAAU,IAAM,CAClC,GAAI,EAAe,EAAc,EACjC,GAAI,EAAoB,EAAmB,EAG3C,CACE,EAAU,YACV,EAAU,gBACV,EAAU,gBACZ,EAAE,QAAQ,CAAC,IAAO,CAChB,GAAI,EAAI,qBAAqB,CAAY,EAC1C,EAED,EAAgB,GAYpB,OAPA,OAAO,OAAO,EAAW,CACvB,qBACA,oBACA,8BACA,4BACF,CAAC,EAEM,IACF,EACH,YACI,IAAG,EAAG,CACR,OAAO,GAAe,KAExB,OACA,QACF,iBA3tBJ,KAOA,KAEA,KACA,WCqCa,GACX,CAAC,IACD,CACE,IACsD,CAEtD,GAAI,EAAO,eAAiB,EAAU,QACpC,EAAS,EAAU,QAAS,GAAiB,aAAa,EAC1D,EAAU,QAAQ,gBAAgB,eAAe,EAInD,GAAI,EAAU,QAAS,CACrB,IAAM,EACJ,EAAU,WAAW,GAAiB,SAAS,GAAK,GACtD,EAAU,QAAQ,UAAU,OAC1B,GAAG,UACH,GAAG,UACL,EAIF,GACE,EAAO,OACP,EAAO,QAAU,GAAgB,MACjC,EAAU,SAKV,GAAI,CAHe,EAAU,QAAQ,UAAU,SAC7C,EAAU,WAAW,GAAiB,QAAQ,GAAK,EACrD,EACiB,CACf,IAAM,EACJ,EAAU,WAAW,GAAiB,SAAS,GAAK,GACtD,EAAS,EAAU,QAAS,GAAG,MAAmB,EAAO,OAAO,GAKpE,IAAM,EAAuB,CAC3B,MAAO,EAAO,OAAS,EACvB,IAAK,EAAO,KAAO,IACnB,OAAQ,EAAO,QAAU,EACzB,cAAe,EAAO,gBAAkB,GAExC,UAAW,EAAO,WAAa,OAC/B,MAAO,EAAO,OAAS,GAAgB,KACvC,eACE,EAAO,iBACN,CAAC,EAAW,IAAsB,GAAG,KAAK,MAAO,EAAI,EAAK,GAAG,MAChE,UAAW,EAAO,SACpB,EAGM,EAAe,EAAU,WAAW,KACpC,EAAkB,EAAU,WAAW,QAiD7C,OA9CA,EAAU,MAAQ,EAGlB,EAAU,UAAY,CACpB,KAAM,IAAM,CAmCV,GAhCA,sBAAsB,IAAM,CAC1B,GAAI,CAEF,GAAI,EAAM,cACR,EAAU,mBAAmB,EAAI,EAGjC,QADA,EAAU,WAAW,EAAM,KAAK,EAC5B,EAAO,SAAW,OACpB,EAAU,YAAY,EAAM,MAAM,EAKtC,GAAI,EAAM,QAAU,GAAgB,MAAQ,EAAU,SACpD,EAAU,SAAS,EAAM,KAAK,EAIhC,GAAI,EAAM,UAER,GAAI,EAAU,aACZ,EAAU,aAAa,EAAM,SAAS,EAGtC,OAAU,MAAM,UAAY,EAAM,UAGtC,MAAO,EAAO,CACd,QAAQ,MAAM,qCAAsC,CAAK,GAE5D,EAEG,EAAc,EAAa,GAEjC,QAAS,IAAM,CACb,GAAI,EAAiB,EAAgB,EAEzC,EAEO,IACF,EACH,OACF,iBAzJJ,KACA,WCmFa,GACX,CAAC,IACD,CAAC,IAA6C,CAE5C,IAAQ,UAAS,WAAU,UAAW,EAGhC,EAAa,EAAQ,UAAU,SACnC,EAAS,GAAiB,QAAQ,CACpC,EAGM,EAAY,CAAC,EAAc,IAA0C,CACzE,EAAQ,cAAc,IAAI,YAAY,EAAM,CAAE,QAAO,CAAC,CAAC,GAInD,EAAiB,CAAC,EAAe,IAAsB,CAE3D,EAAQ,aAAa,gBAAiB,EAAM,SAAS,CAAC,EAGtD,IAAM,EAAQ,EAAK,MACnB,GAAI,EAAO,CACT,IAAM,EACJ,EAAQ,OAAO,YACd,CAAC,EAAW,IAAc,GAAG,KAAK,MAAO,EAAI,EAAK,GAAG,MACxD,EAAM,YAAc,EAAU,EAAO,CAAG,EAI1C,GAAI,OAAO,EAAK,OAAS,WACvB,EAAK,KAAK,GAKR,EAA2B,CAAC,IAAiC,CACjE,GAAI,GAKF,GAJA,EAAS,EAAS,GAAiB,aAAa,EAChD,EAAQ,gBAAgB,eAAe,EAGnC,CAAC,GAGH,IADE,EAAQ,OAAO,SAAS,GAAK,GAAgB,QAC1B,QAAU,EAAK,4BAClC,EAAK,4BAA4B,GAOrC,QAHA,GAAY,EAAS,GAAiB,aAAa,EAG/C,EAAK,2BACP,EAAK,2BAA2B,EAKpC,GAAI,OAAO,EAAK,OAAS,WACvB,EAAK,KAAK,GAKd,GAAI,EAAQ,MAAM,gBAAgB,EAChC,EAAyB,EAAI,EAI/B,IAAM,EAAyB,CAE7B,UACA,MAAO,EACP,UAAW,EACX,OAAQ,EACR,WAGA,QAAQ,EAAG,CACT,OAAO,EAAQ,MAAM,SAAS,GAGhC,QAAQ,CAAC,EAAe,EAAmB,GAAyB,CAClE,IAAM,EAAY,EAAQ,MAAM,SAAS,EACnC,EAAM,EAAQ,MAAM,OAAO,EAEjC,GADA,EAAQ,MAAM,SAAS,CAAK,EACxB,IAAc,EAAO,CAGvB,EAAQ,aAAa,gBAAiB,EAAM,SAAS,CAAC,EAGtD,IAAM,EAAQ,EAAK,MACnB,GAAI,EAAO,CACT,IAAM,EACJ,EAAQ,OAAO,YACd,CAAC,EAAW,IAAc,GAAG,KAAK,MAAO,EAAI,EAAK,GAAG,MACxD,EAAM,YAAc,EAAU,EAAO,CAAG,EAG1C,IAAM,EAAS,CAAE,QAAO,KAAI,EAI5B,GAHA,EAAU,GAAgB,OAAQ,CAAM,EAGpC,EAAK,UAAY,OAAO,EAAK,WAAa,WAC5C,EAAK,SAAS,EAAO,CAAO,EAG5B,OAAe,EAAO,CAAG,EAI7B,OAAO,GAGT,MAAM,EAAG,CACP,OAAO,EAAQ,MAAM,OAAO,GAI9B,UAAW,IAAM,EAAQ,OAAO,UAAU,EAC1C,SAAS,CAAC,EAAkC,CAE1C,GADA,EAAQ,OAAO,UAAU,CAAK,EAE5B,CAAC,EAAQ,MAAM,gBAAgB,GAC/B,OAAO,EAAK,OAAS,WAErB,EAAK,KAAK,EAEZ,OAAO,GAIT,gBAAgB,CAAC,EAA2C,CAE1D,GADyB,EAAQ,MAAM,gBAAgB,IAC9B,EAAe,OAAO,EAK/C,OAHA,EAAQ,MAAM,iBAAiB,CAAa,EAC5C,EAAyB,CAAa,EAE/B,GAET,gBAAiB,IAAM,EAAQ,MAAM,gBAAgB,EAGrD,SAAS,EAAsB,CAC7B,GAAI,EAAQ,OAAO,KAAM,EAAQ,MAAM,KAAK,EAC5C,OAAO,GAET,SAAS,EAAsB,CAC7B,GAAI,EAAQ,OAAO,KAAM,EAAQ,MAAM,KAAK,EAC5C,OAAO,GAET,iBAAiB,CACf,EACmB,CACnB,GAAI,EAAQ,OAAO,OAAQ,EAAQ,MAAM,OAAO,CAAS,EACzD,IAAM,EAAQ,EAAK,OAAS,EAAK,OAAO,MACxC,GAAI,EACF,EAAM,YAAc,EAClB,EAAQ,MAAM,SAAS,EACvB,EAAQ,MAAM,OAAO,CACvB,EAEF,OAAO,GAIT,YAAY,EAAW,CACrB,OAAO,EAAQ,WAAW,aAAa,GAAK,GAAmB,MAEjE,YAAY,CAAC,EAAiD,CAE5D,GAAI,EAAQ,UACV,EAAQ,UAAU,aAAa,CAAS,EAI1C,GAAI,EAAK,aACP,EAAK,aAAa,CAAS,EAG7B,OAAO,GAET,QAAQ,EAAkB,CACxB,GAAI,EAAQ,OAAS,OAAO,EAAQ,MAAM,WAAa,WACrD,OAAO,EAAQ,MAAM,SAAS,EAEhC,OAAO,GAAgB,MAEzB,QAAQ,CAAC,EAAyC,CAEhD,OADA,EAAK,WAAW,CAAK,EACd,GAIT,OAAO,CAAC,EAAiC,CACvC,GAAI,EAAK,QACP,EAAK,QAAQ,CAAI,EAEnB,OAAO,GAET,OAAO,EAAuB,CAC5B,OAAO,EAAK,QAAU,EAAK,QAAQ,EAAI,QAIzC,MAAM,EAAsB,CAE1B,OADA,EAAQ,SAAS,OAAO,EACjB,GAET,OAAO,EAAsB,CAE3B,OADA,EAAQ,SAAS,QAAQ,EAClB,GAET,WAAY,EAAQ,SAAS,WAG7B,IAAI,EAAsB,CACxB,GAAI,EAAK,KACP,EAAK,KAAK,EAEZ,OAAO,GAET,IAAI,EAAsB,CACxB,GAAI,EAAK,KACP,EAAK,KAAK,EAEZ,OAAO,GAET,SAAS,EAAY,CACnB,OAAO,EAAK,UACR,EAAK,UAAU,EACf,EAAQ,MAAM,UAAY,QAIhC,EAAE,CAAC,EAAe,EAAsC,CAEtD,OADA,EAAQ,iBAAiB,EAAO,CAAwB,EACjD,GAET,GAAG,CAAC,EAAe,EAAsC,CAEvD,OADA,EAAQ,oBAAoB,EAAO,CAAwB,EACpD,GAIT,QAAQ,IAAI,EAAsC,CAEhD,OADA,EAAQ,QAAQ,CAAC,IAAc,EAAQ,UAAU,IAAI,CAAS,CAAC,EACxD,GAIT,OAAO,EAAkB,CACvB,OAAO,IAAI,QAAQ,CAAC,IAClB,sBAAsB,IAAM,sBAAsB,IAAM,EAAQ,CAAC,CAAC,CACpE,GAIF,OAAO,EAAS,CACd,EAAQ,UAAU,QAAQ,GAI5B,SAAU,CACR,MAAM,EAAS,CACb,EAAQ,SAAS,OAAO,GAE1B,OAAO,EAAS,CACd,EAAQ,SAAS,QAAQ,GAE3B,WAAY,EAAQ,SAAS,UAC/B,EAEA,UAAW,CACT,OAAO,EAAS,CACd,EAAQ,UAAU,QAAQ,EAE9B,CACF,EAGA,GAAI,EAAK,OAAO,YAAc,IAE5B,GAAI,EAAQ,OAAO,KACjB,EAAQ,MAAM,KAAK,EAIvB,OAAO,iBAxXX,KAMA,WCSa,GAiBA,GAAmB,CAC9B,EAAyB,CAAC,IACP,CAEnB,OAAO,EACL,GACA,EACA,UACF,GAUW,GAAmB,CAAC,IAA2B,CAC1D,IAAM,EAAkB,EAAO,gBAAkB,GAC3C,EAAa,EAAO,UAAY,GAAkB,SAGlD,EAAkC,CACtC,KAAM,cACN,gBAAiB,IACjB,iBAAkB,EAAO,KAAO,KAAK,SAAS,CAChD,EAGA,GAAI,CAAC,GAAmB,EAAO,QAAU,OACvC,EAAW,iBAAmB,EAAO,MAAM,SAAS,EAItD,GAAI,EAAO,WAAa,GACtB,EAAW,iBAAmB,OAIhC,IAAM,EAAY,CAChB,EAAO,MACP,GAAiB,UACjB,EAAa,GAAiB,SAAW,GAAiB,MAC5D,EAAE,OAAO,OAAO,EAGhB,GAAI,CAAC,GAAc,EAAO,OAAS,EAAO,QAAU,GAAgB,KAClE,EAAU,KAAK,GAAG,GAAiB,cAAc,EAAO,OAAO,EAGjE,OAAO,EAAoB,EAAQ,CACjC,IAAK,MACL,aACA,UAAW,CACb,CAAC,GAMU,GAAe,CAAC,IAAS,CAEpC,GAAI,CAAC,EAAK,MACR,EAAK,MAAQ,CACX,MAAO,EACP,IAAK,IACL,OAAQ,EACR,cAAe,GACf,UAAW,OACX,MAAO,GAAkB,MACzB,eAAgB,CAAC,EAAG,IAAM,GAAG,KAAK,MAAO,EAAI,EAAK,GAAG,IACvD,EAGF,MAAO,CACL,MAAO,CACL,SAAU,IAAM,EAAK,MAAM,MAC3B,SAAU,CAAC,IAAkB,CAC3B,GAAI,EAAK,MAAO,CAEd,IAAM,EAAe,KAAK,IAAI,EAAG,KAAK,IAAI,EAAK,MAAM,IAAK,CAAK,CAAC,EAMhE,GAJA,EAAK,MAAM,cAAgB,EAAK,MAAM,MAEtC,EAAK,MAAM,MAAQ,EAEf,EAAK,MAAM,MACb,EAAK,MAAM,MAAM,YAAc,EAAK,MAAM,eACxC,EACA,EAAK,MAAM,GACb,EAGF,GAAI,OAAO,EAAK,WAAa,WAC3B,EAAK,SAAS,CAAY,EACrB,QAAI,EAAK,KAEd,EAAK,KAAK,IAIhB,OAAQ,IAAM,EAAK,MAAM,GAC3B,EACA,OAAQ,CACN,UAAW,IAAM,EAAK,MAAM,OAC5B,UAAW,CAAC,IAAkB,CAC5B,EAAK,MAAM,OAAS,KAAK,IAAI,EAAG,KAAK,IAAI,EAAK,MAAM,IAAK,CAAK,CAAC,EAEnE,EACA,SAAU,CACR,OAAQ,IAAM,EAAK,UAAU,SAAS,GAAK,OAC3C,QAAS,IAAM,EAAK,UAAU,UAAU,GAAK,OAC7C,WAAY,IAAM,EAAK,UAAU,aAAa,GAAK,EACrD,EACA,MAAO,CACL,KAAM,IAAM,CACV,GAAI,CAAC,EAAK,MAAM,MAAO,CACrB,IAAM,EAAQ,SAAS,cAAc,KAAK,EAC1C,EAAM,UAAY,GAAG,EAAK,SAAS,GAAiB,KAAK,IACzD,EAAM,YAAc,EAAK,MAAM,eAC7B,EAAK,MAAM,MACX,EAAK,MAAM,GACb,EACA,EAAK,QAAQ,YAAY,CAAK,EAC9B,EAAK,MAAM,MAAQ,EACnB,EAAK,MAAQ,IAGjB,KAAM,IAAM,CACV,GAAI,EAAK,MAAM,MACb,EAAK,MAAM,MAAM,OAAO,EACxB,EAAK,MAAM,MAAQ,OACnB,EAAK,MAAQ,QAGjB,OAAQ,CAAC,IAAc,CACrB,EAAK,MAAM,eAAiB,GAE9B,UAAW,EAAK,MAAM,cACxB,EACA,UAAW,CACT,aAAc,IAAM,CAClB,IAAM,EAAY,EAAK,MAAM,UAC7B,GAAI,IAAc,OAChB,OAAO,GAAmB,KACrB,QAAI,IAAc,QACvB,OAAO,GAAmB,MACrB,QAAI,OAAO,IAAc,SAC9B,OAAO,EAET,OAAO,GAAmB,MAE5B,aAAc,CAAC,IAAiC,CAE9C,GADA,EAAK,MAAM,UAAY,EACnB,EAAK,KACP,EAAK,KAAK,EAGhB,EACA,MAAO,CACL,SAAU,IAAM,EAAK,MAAM,MAC3B,SAAU,CAAC,IAAyB,CAElC,GADA,EAAK,MAAM,MAAQ,EACf,EAAK,SACP,EAAK,SAAS,CAAK,EAGzB,EACA,MAAO,CACL,iBAAkB,CAAC,IAA2B,CAC5C,GAAI,EAAK,OAEP,GADA,EAAK,MAAM,cAAgB,EACvB,OAAO,EAAK,mBAAqB,WACnC,EAAK,iBAAiB,CAAa,EAC9B,QAAI,EAAK,KACd,EAAK,KAAK,IAIhB,gBAAiB,IAAM,EAAK,MAAM,aACpC,EACA,UAAW,CACT,QAAS,IAAM,EAAK,WAAW,UAAU,GAAK,MAChD,CACF,iBA1NF,IAKA,KAWa,GAAgC,CAC3C,QAAS,GAAkB,QAC3B,MAAO,GAAkB,MACzB,IAAK,GAAkB,IACvB,OAAQ,GAAkB,OAC1B,UAAW,GAAkB,WAC7B,UAAW,OACX,MAAO,GAAkB,KAC3B,0CCWM,GAAiB,CAAC,EAAyB,CAAC,IAAyB,CAEzE,IAAM,EAAa,GAAiB,CAAM,EAE1C,GAAI,CAEF,IAAM,EAAY,EAChB,EACA,EAAW,EACX,EAAY,GAAiB,CAAU,CAAC,EACxC,GAAY,CAAU,EACtB,GAAa,CAAU,EACvB,GAAU,CAAU,EACpB,GAAW,CAAU,EACrB,CAAC,IAAS,CAER,OAAO,GAAQ,GAAa,CAAI,CAAC,EAAE,CAAI,GAEzC,EAAc,CAChB,EAAE,CAAU,EAGZ,GAAI,EAAU,WAAW,KACvB,EAAU,UAAU,KAAK,EAG3B,OAAO,EACP,MAAO,EAAO,CAEd,MADA,QAAQ,MAAM,2BAA4B,CAAK,EACrC,MAAM,8BAA+B,EAAgB,SAAS,IAI7D,iBApEf,IACA,IACA,IAMA,KACA,KACA,KAEA,KAwDe,YC3CT,GAAqB,MACzB,IAC+B,CAE/B,IAAQ,QAAS,GAAmB,8CACpC,OAAO,EAAe,CAAM,GASjB,GACX,CAAC,IACD,CAAC,IAAoE,CAEnE,GAAI,CAAC,EAAO,SACV,OAAO,EAIT,IAAI,EAAkD,CAAC,EAGjD,EACJ,OAAO,EAAO,WAAa,UACvB,CAAE,QAAS,WAAY,KAAM,GAAI,UAAW,EAAG,cAAe,EAAK,GAClE,IAAM,CACL,IAAQ,QAAO,GAAe,EAAO,SACrC,GAAI,EACF,EAAwB,EAE1B,MAAO,CACL,QAAS,WACT,KAAM,GACN,UAAW,EACX,cAAe,MACZ,CACL,IACC,EAGL,EAAqC,KACrC,EAAqD,KACrD,EAAY,GACZ,EAAe,GAGb,EAAiB,SAAwC,CAC7D,GAAI,EAAU,OAAO,EAErB,GAAI,CAAC,EACH,EAAkB,GAAmB,CAAc,EAAE,KAAK,CAAC,IAAM,CAiB/D,OAhBA,EAAW,EAGX,EAAS,EAAS,QAAS,EAAU,SAAS,iBAAiB,CAAC,EAGhE,EAAS,QAAQ,MAAM,QAAU,OAGjC,OAAO,QAAQ,CAAqB,EAAE,QAAQ,EAAE,EAAO,KAAa,CAClE,EAAU,GAAG,EAAO,CAAO,EAC5B,EAGD,EAAU,SAAW,EAEd,EACR,EAGH,OAAO,GAIH,EAA4B,IAAM,CAEtC,IAAM,EAAc,EAAU,QAAQ,cACpC,IAAI,EAAU,SAAS,aAAa,GACtC,EACA,GAAI,GAAe,EAAY,YAC7B,OAAO,EAAY,YAIrB,OAAO,EAAU,QAAQ,YAkI3B,GA9HA,EAAU,aAAe,cAAe,EAAG,CACzC,IAAM,EAAI,MAAM,EAAe,EAE/B,GAAI,EAAE,QAAS,CAEb,GAAI,CAAC,EAAU,QAAQ,SAAS,EAAE,OAAO,EAAG,CAC1C,IAAM,EAAc,EAA0B,EAC9C,GAAI,EACF,EAAU,QAAQ,aAAa,EAAE,QAAS,CAAW,EAErD,OAAU,QAAQ,YAAY,EAAE,OAAO,EAI3C,EAAE,QAAQ,MAAM,QAAU,GAC1B,EACE,EAAU,QACV,GAAG,EAAU,SAAS,QAAQ,aAChC,EAGA,IAAM,EAAc,EAAU,QAAQ,cACpC,IAAI,EAAU,SAAS,aAAa,GACtC,EACA,GAAI,aAAuB,YACzB,EAAY,MAAM,QAAU,OAGhC,OAAO,GAIT,EAAU,iBAAmB,QAAS,EAAG,CAEvC,OADA,EAAU,aAAa,EAChB,GAGT,EAAU,aAAe,cAAe,EAAG,CAEzC,GAAI,CAAC,EAAU,OAAO,EAEtB,EAAS,QAAQ,MAAM,QAAU,OACjC,GACE,EAAU,QACV,GAAG,EAAU,SAAS,QAAQ,aAChC,EAGA,IAAM,EAAc,EAAU,QAAQ,cACpC,IAAI,EAAU,SAAS,aAAa,GACtC,EACA,GAAI,aAAuB,YACzB,EAAY,MAAM,QAAU,GAG9B,OAAO,GAIT,EAAU,iBAAmB,QAAS,EAAG,CAEvC,OADA,EAAU,aAAa,EAChB,GAGT,EAAU,YAAc,cAAe,CAAC,EAAe,CAGrD,OAFU,MAAM,EAAe,GAC7B,SAAS,CAAK,EACT,GAIT,EAAU,gBAAkB,QAAS,CAAC,EAAe,CAEnD,OADA,EAAU,YAAY,CAAK,EACpB,GAGT,EAAU,iBAAmB,cAAe,CAAC,EAAwB,CAGnE,OAFU,MAAM,EAAe,GAC7B,iBAAiB,CAAa,EACzB,GAIT,EAAU,qBAAuB,QAAS,CAAC,EAAwB,CAEjE,OADA,EAAU,iBAAiB,CAAa,EACjC,GAGT,EAAU,WAAa,cAAe,CAAC,EAAkB,EAAe,CACtE,GAAI,GAAW,CAAC,EAAW,CAEzB,GAAI,EAAU,SAAW,EAAU,QACjC,EAAe,EAAU,QAAQ,EAKnC,GAHA,EAAY,GACZ,MAAM,EAAU,aAAa,EAEzB,EAAU,UAAU,QACtB,EAAU,SAAS,QAAQ,EAE7B,GAAI,GAAQ,EAAU,QACpB,EAAU,QAAQ,CAAI,EAEnB,QAAI,CAAC,GAAW,EAAW,CAIhC,GAHA,EAAY,GACZ,MAAM,EAAU,aAAa,EAEzB,EAAU,UAAU,OACtB,EAAU,SAAS,OAAO,EAE5B,GAAI,GAAQ,EAAU,QACpB,EAAU,QAAQ,CAAI,EACjB,QAAI,GAAgB,EAAU,QACnC,EAAU,QAAQ,CAAY,EAGlC,OAAO,GAIT,EAAU,eAAiB,QAAS,CAAC,EAAkB,EAAe,CAEpE,OADA,EAAU,WAAW,EAAS,CAAI,EAC3B,GAIL,EAAU,UAAW,CACvB,IAAM,EAAkB,EAAU,UAAU,QAC5C,EAAU,UAAU,QAAU,IAAM,CAClC,GAAI,EACF,EAAS,QAAQ,EAEnB,GAAI,GAAY,EAAS,QAAQ,WAC/B,EAAS,QAAQ,WAAW,YAAY,EAAS,OAAO,EAE1D,EAAgB,GAKpB,GAAI,EAAO,aACT,EAAe,EAAE,KAAK,IAAM,CAC1B,EAAU,aAAa,EACxB,EAGH,OAAO,iBAxQX,WC8Ea,GAAc,CACzB,EAAkB,CAAC,EACnB,EAA2B,CAAC,IACf,CACb,IAAI,EAAQ,IAAK,CAAa,EACxB,EAAmB,GAAc,EACjC,EAAgB,IAAI,IACpB,EAAa,EAAQ,YAAc,CAAC,EAEpC,EAAkB,CAAC,EAAa,IAAsB,CAC1D,EAAQ,KAAK,SAAU,EAAU,CAAQ,GAGrC,EAAkB,CAAC,EAAa,IAAmB,CACvD,OAAO,EAAW,OAAO,CAAC,EAAO,IAAO,EAAG,EAAO,CAAQ,EAAG,CAAQ,GAGvE,MAAO,CAKL,SAAU,IAAS,CACjB,IAAM,EAAqC,CAAC,EAI5C,OAHA,EAAc,QAAQ,CAAC,EAAS,IAAQ,CACtC,EAAc,GAAO,EAAQ,CAAK,EACnC,EACM,IAAK,KAAU,CAAc,GAOtC,SAAU,CAAC,IAA0C,CACnD,IAAM,EAAW,IAAK,CAAM,EACtB,EAAW,OAAO,IAAW,WAC/B,EAAO,CAAK,EACZ,IAAK,KAAU,CAAO,EAE1B,EAAQ,EAAgB,EAAe,CAAQ,EAC/C,EAAgB,EAAO,CAAQ,GAQjC,UAAW,CAAC,IACV,EAAQ,GAAG,SAAU,CAAQ,EAQ/B,OAAQ,CAAsB,EAAQ,IAAiD,CAErF,OADA,EAAc,IAAI,EAAK,CAAW,EAC3B,IAAM,CACX,EAAc,OAAO,CAAG,IAS5B,OAAQ,CAAI,IAAgC,EAAS,CAAK,EAK1D,MAAO,IAAY,CACjB,EAAQ,IAAK,CAAa,EAC1B,EAAgB,EAAO,CAAC,CAAM,EAElC,GAUW,GAAoB,CAAgC,EAAa,IAAmB,CAW/F,OAVA,QAAQ,IAAI,gBAAiB,CAC3B,IAAK,EACL,IAAK,EACL,KAAM,OAAO,KAAK,CAAQ,EAAE,OAAO,CAAC,EAAK,IAAQ,CAC/C,GAAI,EAAS,KAAS,EAAS,GAC7B,EAAI,GAAO,CAAE,KAAM,EAAS,GAAM,GAAI,EAAS,EAAK,EAEtD,OAAO,GACN,CAAC,CAA2C,CACjD,CAAC,EACM,GASI,GAAiB,CAAI,IAChC,CAAC,IACC,OAAO,KAAK,CAAK,EAAE,OAAO,CAAC,EAAK,IAAQ,CACtC,GAAI,EAAU,EAAM,GAAM,CAAG,EAC3B,EAAI,GAAO,EAAM,GAEnB,OAAO,GACN,CAAC,CAAsB,oBCjIjB,GAAkB,CAC7B,EACA,EAA8B,CAAC,IACV,CACrB,IAAI,EAAU,GACR,EAAmB,GAAc,EAEvC,MAAO,CAEL,QAAS,CAAC,IAAwB,EAAQ,GAAG,QAAS,CAAO,EAC7D,UAAW,CAAC,IAAwB,EAAQ,GAAG,UAAW,CAAO,EAEjE,MAAO,IAAM,CACX,GAAI,CAAC,EACH,EAAU,GACV,EAAQ,KAAK,OAAO,GAIxB,QAAS,IAAM,CACb,GAAI,EACF,EAAU,GACV,EAAQ,KAAK,SAAS,EACtB,EAAQ,MAAM,GAIlB,UAAW,IAAM,EAGjB,OAAO,EAAG,CAER,GAAI,EACF,KAAK,QAAQ,EAIf,GAAI,EAAS,OACX,EAAS,OAAO,QAAQ,EAI1B,GAAI,EAAS,KAAM,CACjB,IAAM,EAAc,EAAS,KAAK,WAAW,EAC7C,GAAI,EACF,EAAY,OAAO,EAKvB,GAAI,EAAS,KAAM,CACjB,IAAM,EAAc,EAAS,KAAK,WAAW,EAC7C,GAAI,EACF,EAAY,OAAO,EAKvB,GAAI,EACF,EAAQ,OAAO,EAGrB,qBC5FW,GAAiB,CAAC,IAAwC,CACrE,MAAO,CAKL,MAAM,EAAG,CAGP,OAFC,EAAiD,SAAW,GAC7D,EAAQ,gBAAgB,UAAU,EAC3B,MAOT,OAAO,EAAG,CAGR,OAFC,EAAiD,SAAW,GAC7D,EAAQ,aAAa,WAAY,MAAM,EAChC,MAOT,MAAM,EAAG,CACP,GAAK,EAAiD,SACpD,KAAK,OAAO,EAEZ,UAAK,QAAQ,EAEf,OAAO,MAOT,UAAU,EAAG,CACX,OAAQ,EAAiD,WAAa,GAE1E,OCjEW,GAAwB,CACnC,EACA,EACA,EACA,EACA,EACA,IACS,CACT,GAAI,EAAQ,GAAK,EAAS,EAAG,OAG7B,IAAM,EAAQ,OAAO,IAAW,SAC5B,CAAC,EAAQ,EAAQ,EAAQ,CAAM,EAC/B,GAEG,EAAI,EAAI,EAAI,GAAM,EAEzB,EAAI,UAAU,EACd,EAAI,OAAO,EAAI,EAAI,CAAC,EACpB,EAAI,OAAO,EAAI,EAAQ,EAAI,CAAC,EAC5B,EAAI,iBAAiB,EAAI,EAAO,EAAG,EAAI,EAAO,EAAI,CAAE,EACpD,EAAI,OAAO,EAAI,EAAO,EAAI,EAAS,CAAE,EACrC,EAAI,iBAAiB,EAAI,EAAO,EAAI,EAAQ,EAAI,EAAQ,EAAI,EAAI,CAAM,EACtE,EAAI,OAAO,EAAI,EAAI,EAAI,CAAM,EAC7B,EAAI,iBAAiB,EAAG,EAAI,EAAQ,EAAG,EAAI,EAAS,CAAE,EACtD,EAAI,OAAO,EAAG,EAAI,CAAE,EACpB,EAAI,iBAAiB,EAAG,EAAG,EAAI,EAAI,CAAC,EACpC,EAAI,UAAU,GAaH,GAAkB,CAC7B,EACA,EACA,EACA,EACA,EACA,EACA,IACS,CAET,GADA,EAAI,KAAK,EACL,EAAW,EAAI,UAAY,EAC/B,GAAsB,EAAK,EAAG,EAAG,EAAO,EAAQ,CAAM,EACtD,EAAI,KAAK,EACT,EAAI,QAAQ,GAaD,GAAkB,CAC7B,EACA,EACA,EACA,EACA,EACA,IACiB,CAMjB,OALA,EAAI,KAAK,EACT,GAAsB,EAAK,EAAG,EAAG,EAAO,EAAQ,CAAM,EACtD,EAAI,KAAK,EAGF,IAAM,EAAI,QAAQ,GAed,GAAoB,CAC/B,EACA,EACA,EACA,EACA,EACA,EACA,EACA,IACS,CACT,GAAI,EAAQ,GAAK,EAAS,EAAG,OAG7B,GADA,EAAI,KAAK,EACL,EAAW,EAAI,UAAY,EAE/B,EAAI,UAAU,EAEd,EAAI,OAAO,EAAI,EAAY,CAAC,EAC5B,EAAI,OAAO,EAAI,EAAQ,EAAa,CAAC,EAErC,EAAI,iBAAiB,EAAI,EAAO,EAAG,EAAI,EAAO,EAAI,CAAW,EAE7D,EAAI,OAAO,EAAI,EAAO,EAAI,EAAS,CAAW,EAE9C,EAAI,iBAAiB,EAAI,EAAO,EAAI,EAAQ,EAAI,EAAQ,EAAa,EAAI,CAAM,EAE/E,EAAI,OAAO,EAAI,EAAY,EAAI,CAAM,EAErC,EAAI,iBAAiB,EAAG,EAAI,EAAQ,EAAG,EAAI,EAAS,CAAU,EAE9D,EAAI,OAAO,EAAG,EAAI,CAAU,EAE5B,EAAI,iBAAiB,EAAG,EAAG,EAAI,EAAY,CAAC,EAC5C,EAAI,UAAU,EAEd,EAAI,KAAK,EACT,EAAI,QAAQ,GAUD,GAAc,CACzB,EACA,EACA,EACA,IACS,CACT,GAAI,EACF,EAAI,UAAY,EAChB,EAAI,SAAS,EAAG,EAAG,EAAO,CAAM,EAEhC,OAAI,UAAU,EAAG,EAAG,EAAO,CAAM,OC7JxB,GAAe,CAAC,IAAsB,CAQjD,IAAI,EAAI,EACR,QAAS,EAAI,EAAG,EAAI,EAAG,IAAK,CAK1B,IAAM,EAAK,EAAI,EAGT,EALK,KAGA,EAAK,GAJL,oBAMc,EAPd,mBAOwB,EAAI,EACjC,EAAK,kBAAS,EAAK,oBAAS,EARvB,mBAUX,GAAI,KAAK,IAAI,CAAC,EAAI,QAAS,MAC3B,EAAI,EAAI,EAAI,EAId,IAAM,EAAK,EACL,EAAK,EAAkB,EACvB,EAAK,EAAI,EAAK,EAEd,EAAK,EAAI,EACT,EAAK,EAAK,EAEhB,OAAO,EAAK,EAAK,EAAK,EAAK,EAAK,GAMrB,GAUA,iBAVA,GAAsB,CACjC,MAAO,IACP,OAAQ,IACR,KAAM,IACN,WAAY,GACd,EAKa,GAAmB,CAC9B,OAAQ,CAAC,IAAc,EACvB,OAAQ,CAAC,IAAc,EAAI,EAC3B,QAAS,CAAC,IAAc,GAAK,EAAI,GACjC,UAAW,CAAC,IAAc,EAAI,IAAM,EAAI,EAAI,EAAI,IAAM,EAAI,EAAI,GAAK,EACnE,iBAAkB,EACpB,IC0EO,MAAM,EAAsB,CACzB,YAA6B,KAMrC,KAAK,CAAC,EAA6C,CACjD,KAAK,KAAK,EAEV,IAAM,EAAU,CAAC,IAAsB,CACrC,EAAS,CAAS,EAClB,KAAK,YAAc,sBAAsB,CAAO,GAGlD,KAAK,YAAc,sBAAsB,CAAO,EAMlD,IAAI,EAAS,CACX,GAAI,KAAK,cAAgB,KACvB,qBAAqB,KAAK,WAAW,EACrC,KAAK,YAAc,QAOnB,UAAS,EAAY,CACvB,OAAO,KAAK,cAAgB,KAEhC,CAKO,MAAM,EAAe,CAClB,iBAAsC,CAAC,EAK/C,GAAG,CAAC,EAAgD,CAClD,GAAI,EACF,KAAK,iBAAiB,KAAK,CAAO,EAOtC,OAAO,EAAS,CACd,KAAK,iBAAiB,QAAQ,KAAM,EAAG,CAAC,EACxC,KAAK,iBAAmB,CAAC,EAE7B,KA5Ka,GAAsB,CACjC,EACA,EACA,IACkB,CAClB,IAAM,EAAa,OAAO,kBAAoB,EACxC,EAAM,EAAO,WAAW,IAAI,EAclC,OAXA,EAAO,MAAM,MAAQ,GAAG,MACxB,EAAO,MAAM,OAAS,GAAG,MAGzB,EAAO,MAAQ,KAAK,MAAM,EAAQ,CAAU,EAC5C,EAAO,OAAS,KAAK,MAAM,EAAS,CAAU,EAG9C,EAAI,aAAa,EAAG,EAAG,EAAG,EAAG,EAAG,CAAC,EACjC,EAAI,MAAM,EAAY,CAAU,EAEzB,CACL,SACA,MACA,QACA,SACA,YACF,GAUW,GAAyB,CACpC,EACA,EACA,IACS,CACT,IAAQ,SAAQ,MAAK,cAAe,EAGpC,EAAO,MAAM,MAAQ,GAAG,MACxB,EAAO,MAAM,OAAS,GAAG,MAGzB,EAAO,MAAQ,KAAK,MAAM,EAAQ,CAAU,EAC5C,EAAO,OAAS,KAAK,MAAM,EAAS,CAAU,EAG9C,EAAQ,MAAQ,EAChB,EAAQ,OAAS,EAGjB,EAAI,aAAa,EAAG,EAAG,EAAG,EAAG,EAAG,CAAC,EACjC,EAAI,MAAM,EAAY,CAAU,GAUrB,GAA4B,CACvC,EACA,IACY,CAEZ,GAAI,EAAO,EAET,OADA,IAAY,EACL,GAiBT,OAbA,sBAAsB,IAAM,CAC1B,GAAI,EAAO,EACT,IAAY,EAGZ,gBAAW,IAAM,CACf,GAAI,EAAO,EACT,IAAY,GAEb,GAAG,EAET,EAEM,IAUI,GAA4B,CACvC,EACA,IACwB,CACxB,IAAM,EAAU,GAAc,aAAa,IAAS,CAClD,cAAe,CACjB,CAAC,EACD,OAAO,OAAO,IAAY,WAAa,EAAU,MAyEtC,GAAqB,CAChC,EACA,EAAiD,CAAC,IAC5B,CACtB,IAAM,EAAS,SAAS,cAAc,QAAQ,EAW9C,OAVA,EAAO,UAAY,EAEnB,OAAO,OAAO,EAAO,MAAO,CAC1B,SAAU,WACV,MAAO,OACP,OAAQ,OACR,cAAe,UACZ,CACL,CAAC,EAEM,iBAzNT,qBCOA,KACA,qBCiBA,IAEA,KASA,KAiBA,KAWA,KASA,KA1DA,IAGA,KA6BA,KAGA,WCqBa,GACX,EAAG,WAAU,eACb,CAAC,IAAsD,CAErD,IAAM,EAAU,CACd,QAAS,CAAC,IAAoB,CAE5B,OADA,EAAU,KAAK,QAAQ,CAAO,EACvB,GAET,QAAS,IAAM,EAAU,KAAK,QAAQ,EACtC,WAAY,IAAM,EAAU,KAAK,WAAW,CAC9C,EAEM,EAAU,CACd,QAAS,CAAC,IAAiB,CAEzB,OADA,EAAU,KAAK,QAAQ,CAAI,EACpB,GAET,QAAS,IAAM,EAAU,KAAK,QAAQ,EACtC,WAAY,IAAM,EAAU,KAAK,WAAW,CAC9C,EAEM,EAAmC,CACvC,QAAS,EAAU,QACnB,KAAM,EACN,KAAM,EACN,WACA,YACA,SAAU,EAAU,SAEpB,GAAI,CAAC,EAAe,IAAsB,CACxC,GAAI,EAAU,GACZ,EAAU,GAAG,EAAO,CAAO,EAE7B,OAAO,GAGT,IAAK,CAAC,EAAe,IAAsB,CACzC,GAAI,EAAU,IACZ,EAAU,IAAI,EAAO,CAAO,EAE9B,OAAO,GAGT,SAAU,IAAI,IAAsB,CAClC,GAAI,EAAU,SACZ,EAAU,SAAS,GAAG,CAAO,EAE7B,OAAS,EAAU,QAAS,GAAG,CAAO,EAExC,OAAO,GAOT,SAAU,IAAO,EAAU,QAA8B,MAOzD,QAAQ,CAAC,EAAe,CAEtB,OADC,EAAU,QAA8B,MAAQ,EAC1C,GAOT,MAAM,EAAG,CAEP,OADA,EAAS,OAAO,EACT,GAOT,OAAO,EAAG,CAER,OADA,EAAS,QAAQ,EACV,GAQT,OAAO,CAAC,EAAiB,CAEvB,OADA,EAAU,KAAK,QAAQ,CAAO,EACvB,GAOT,OAAO,EAAG,CACR,OAAO,EAAU,KAAK,QAAQ,GAOhC,OAAO,EAAG,CACR,IAAM,EAAc,EAAU,KAAK,WAAW,EAC9C,MACE,CAAC,CAAC,GACF,CAAC,CAAC,EAAY,UAAU,KAAK,GAC7B,CAAC,CAAC,EAAY,YAUlB,OAAO,CAAC,EAAc,CACpB,IAAM,EAAW,EAAU,eAAiB,SACtC,EAAc,EAAU,SAAS,CAAQ,EAC/C,GAAI,CAAC,EAAM,CAET,IAAM,EAAc,EAAU,KAAK,WAAW,EAC9C,GAAI,GAAe,EAAY,WAC7B,EAAY,WAAW,YAAY,CAAW,EAG9C,EAAU,KAAK,WAAa,IAAM,KAClC,EAAU,KAAK,QAAU,IAAM,GAGjC,EAAU,QAAQ,UAAU,OAAO,GAAG,SAAmB,EACpD,QAAI,CAAC,EAAgB,QAAQ,EAAG,CAErC,IAAM,EAAiB,SAAS,cAAc,MAAM,EAKpD,GAJA,EAAe,UAAY,GAAG,EAAU,SAAS,aAAa,IAC9D,EAAe,UAAY,EAGvB,EAAU,QAAQ,WACpB,EAAU,QAAQ,aAChB,EACA,EAAU,QAAQ,UACpB,EAEA,OAAU,QAAQ,YAAY,CAAc,EAI9C,EAAU,KAAK,WAAa,IAAM,EAClC,EAAU,KAAK,QAAU,IAAM,EAC/B,EAAU,QAAQ,UAAU,IAAI,GAAG,SAAmB,EACjD,KAEL,IAAM,EAAc,EAAU,KAAK,WAAW,EAC9C,GAAI,EACF,EAAY,UAAY,EAI5B,OAAO,GAOT,OAAO,EAAG,CACR,OAAO,EAAgB,QAAQ,EAAI,EAAU,KAAK,QAAQ,EAAI,IAQhE,UAAU,CAAC,EAAiB,CAC1B,IAAM,EAAW,EAAU,eAAiB,SACtC,EAAc,EAAU,SAAS,CAAQ,EAgB/C,MAbuB,CACrB,SACA,QACA,WACA,WACA,MACF,EAAE,IAAI,CAAC,IAAM,GAAG,MAAgB,GAAG,EAEpB,QAAQ,CAAC,IAAQ,CAC9B,EAAU,QAAQ,UAAU,OAAO,CAAG,EACvC,EAED,EAAU,QAAQ,UAAU,IAAI,GAAG,MAAgB,GAAS,EACrD,GAOT,UAAU,EAAG,CACX,IAAM,EAAW,EAAU,eAAiB,SACtC,EAAc,EAAU,SAAS,CAAQ,EACzC,EAAW,CAAC,SAAU,QAAS,WAAY,WAAY,MAAM,EAGnE,QAAW,KAAW,EACpB,GACE,EAAU,QAAQ,UAAU,SAAS,GAAG,MAAgB,GAAS,EAEjE,OAAO,EAKX,MAAO,UAOT,OAAO,EAAG,CACR,IAAM,EAAW,EAAU,eAAiB,SACtC,EAAc,EAAU,SAAS,CAAQ,EACzC,EAAQ,CAAC,KAAM,IAAK,IAAK,IAAK,IAAI,EAGxC,QAAW,KAAQ,EACjB,GAAI,EAAU,QAAQ,UAAU,SAAS,GAAG,MAAgB,GAAM,EAChE,OAAO,EAKX,MAAO,KAQT,OAAO,CAAC,EAAc,CACpB,IAAM,EAAW,EAAU,eAAiB,SACtC,EAAc,EAAU,SAAS,CAAQ,EAY/C,MAToB,CAAC,KAAM,IAAK,IAAK,IAAK,IAAI,EAAE,IAC9C,CAAC,IAAM,GAAG,MAAgB,GAC5B,EAEY,QAAQ,CAAC,IAAQ,CAC3B,EAAU,QAAQ,UAAU,OAAO,CAAG,EACvC,EAED,EAAU,QAAQ,UAAU,IAAI,GAAG,MAAgB,GAAM,EAClD,GAOT,QAAQ,EAAG,CACT,IAAM,EAAW,EAAU,eAAiB,SACtC,EAAc,EAAU,SAAS,CAAQ,EACzC,EAAS,CAAC,QAAS,QAAQ,EAGjC,QAAW,KAAS,EAClB,GACE,EAAU,QAAQ,UAAU,SAAS,GAAG,MAAgB,GAAO,EAE/D,OAAO,EAKX,MAAO,SAQT,QAAQ,CAAC,EAAe,CACtB,IAAM,EAAW,EAAU,eAAiB,SACtC,EAAc,EAAU,SAAS,CAAQ,EAY/C,MATqB,CAAC,QAAS,QAAQ,EAAE,IACvC,CAAC,IAAM,GAAG,MAAgB,GAC5B,EAEa,QAAQ,CAAC,IAAQ,CAC5B,EAAU,QAAQ,UAAU,OAAO,CAAG,EACvC,EAED,EAAU,QAAQ,UAAU,IAAI,GAAG,MAAgB,GAAO,EACnD,GAUT,SAAS,CAAC,EAAiB,CACzB,GAAI,EACF,EAAU,QAAQ,UAAU,IAC1B,GAAG,EAAU,SAAS,QAAQ,WAChC,EAEA,OAAU,QAAQ,UAAU,OAC1B,GAAG,EAAU,SAAS,QAAQ,WAChC,EAEF,OAAO,GAQT,YAAY,CAAC,EAAe,CAE1B,OADA,EAAU,QAAQ,aAAa,aAAc,CAAK,EAC3C,GAMT,OAAO,EAAG,CACR,EAAU,QAAQ,EAEtB,EAGA,GAAI,EAAU,SACZ,EAAgB,SAAW,EAAU,SAGvC,GAAI,EAAU,aACZ,EAAgB,aAAe,SAAY,CAEzC,OADA,MAAM,EAAU,aAAc,EACvB,GAIX,GAAI,EAAU,iBACZ,EAAgB,iBAAmB,IAAM,CAEvC,OADA,EAAU,iBAAkB,EACrB,GAIX,GAAI,EAAU,aACZ,EAAgB,aAAe,SAAY,CAEzC,OADA,MAAM,EAAU,aAAc,EACvB,GAIX,GAAI,EAAU,iBACZ,EAAgB,iBAAmB,IAAM,CAEvC,OADA,EAAU,iBAAkB,EACrB,GAIX,GAAI,EAAU,YACZ,EAAgB,YAAc,MAAO,IAAkB,CAErD,OADA,MAAM,EAAU,YAAa,CAAK,EAC3B,GAIX,GAAI,EAAU,gBACZ,EAAgB,gBAAkB,CAAC,IAAkB,CAEnD,OADA,EAAU,gBAAiB,CAAK,EACzB,GAIX,GAAI,EAAU,iBACZ,EAAgB,iBAAmB,MAAO,IAA2B,CAEnE,OADA,MAAM,EAAU,iBAAkB,CAAa,EACxC,GAIX,GAAI,EAAU,qBACZ,EAAgB,qBAAuB,CAAC,IAA2B,CAEjE,OADA,EAAU,qBAAsB,CAAa,EACtC,GAIX,GAAI,EAAU,WACZ,EAAgB,WAAa,MAAO,EAAkB,IAAkB,CAEtE,OADA,MAAM,EAAU,WAAY,EAAS,CAAI,EAClC,GAIX,GAAI,EAAU,eACZ,EAAgB,eAAiB,CAAC,EAAkB,IAAkB,CAEpE,OADA,EAAU,eAAgB,EAAS,CAAI,EAChC,GAIX,OAAO,iBA9eX,WCGa,GAiBA,GAuBA,GAgBA,GAqBA,iBA7EA,GAAkB,CAE7B,OAAQ,SAER,MAAO,QAEP,SAAU,WAEV,SAAU,WAEV,KAAM,MACR,EAMa,GAAe,CAE1B,GAAI,KAEJ,EAAG,IAEH,EAAG,IAEH,EAAG,IAEH,GAAI,IACN,EAYa,GAAgB,CAE3B,MAAO,QAEP,OAAQ,QACV,EAWa,GAAe,CAC1B,OAAQ,SACR,OAAQ,SACR,MAAO,OACT,EAiBa,GAAwB,CACnC,SAAU,IACV,OAAQ,iCACR,QAAS,CAAC,MAAO,GAAG,CACtB,QClEa,GAwBA,GAAmB,CAAC,EAAuB,CAAC,IACvD,EAAsB,GAAe,EAAQ,QAAQ,EAY1C,GAAmB,CAAC,IAAyB,CAExD,IAAM,EAA2D,CAC/D,KAAM,EAAO,MAAQ,QACvB,EAGA,GAAI,EAAO,WAAa,GACtB,EAAW,SAAW,GAIxB,GAAI,EAAO,QAAU,OACnB,EAAW,MAAQ,EAAO,MAI5B,GAAI,EAAO,UACT,EAAW,cAAgB,EAAO,UAGpC,OAAO,EAAoB,EAAQ,CACjC,IAAK,SACL,aACA,UAAW,EAAO,MAClB,cAAe,CACb,MAAO,CAAC,IACN,CAAC,EAAU,QAAQ,SACrB,MAAO,GACP,KAAM,EACR,CACF,CAAC,GAaU,GAAe,CAAC,KAOtB,CACL,SAAU,CACR,OAAQ,IAAM,EAAK,SAAS,OAAO,EACnC,QAAS,IAAM,EAAK,SAAS,QAAQ,EACrC,WAAY,IAAM,EAAK,SAAS,WAAW,CAC7C,EACA,UAAW,CACT,QAAS,IAAM,EAAK,UAAU,QAAQ,CACxC,CACF,iBApHA,IAKA,KAca,GAA8B,CACzC,QAAS,GAAgB,OACzB,KAAM,GAAa,EACnB,MAAO,GAAc,MACrB,SAAU,GACV,KAAM,GAAa,OACnB,OAAQ,GACR,aAAc,CACZ,SAAU,GAAsB,SAChC,OAAQ,GAAsB,OAC9B,QAAS,GAAsB,OACjC,CACF,QCgDM,GAAe,CAAC,EAAuB,CAAC,IAAM,CAClD,IAAM,EAAa,GAAiB,CAAM,EAC1C,GAAI,CAsBF,OArBe,EACb,EACA,EAAW,EACX,EAAY,GAAiB,CAAU,CAAC,EACxC,GAAY,CAAU,EACtB,GAAS,CAAU,EACnB,GAAS,CAAU,EACnB,GAAS,CAAU,EACnB,GAAa,CAAU,EACvB,GAAa,CAAU,EACvB,GAAW,CAAU,EACrB,EAAc,EACd,CAAC,IAAc,CACb,GAAI,EAAW,OAAS,EAAU,QAAS,CACzC,IAAM,EAAY,GAAG,EAAW,UAAU,EAAW,kBAAkB,EAAW,QAClF,EAAU,QAAQ,UAAU,IAAI,CAAS,EAE3C,OAAO,GAET,CAAC,IAAS,GAAQ,GAAa,CAAI,CAAC,EAAE,CAAI,CAC5C,EAAE,CAAU,EAEZ,MAAO,EAAO,CAEd,MADA,QAAQ,MAAM,yBAA0B,CAAK,EACnC,MAAM,4BAA6B,EAAgB,SAAS,IAI3D,iBA9Gf,IACA,IACA,IAUA,KACA,KAEA,KA+Fe,wDCxGf,4mFCQA,KCTA,ICAA,ICDO,IAAM,GAAgB,CAC3B,OAAQ,SACR,IAAK,KACP,EAKa,GAA8B,IDApC,IAAM,GAA6C,CACxD,IAAK,MACL,OAAQ,GACR,YAAa,GAAc,IAC3B,SAAU,GACV,mBAAoB,EACtB,EAQa,GAAe,CAC1B,EAA6B,CAAC,IAE9B,EACE,GACA,EACA,gBACF,EDZK,IAAM,GAAqB,CAChC,EAA6B,CAAC,IACb,CAEjB,IAAM,EAAkB,GAAa,CAAM,EAGrC,EAAY,EAAW,CAAe,EAGtC,EAAmB,SAAS,cAAc,KAAK,EACrD,EAAiB,UAAY,GAAG,EAAU,SACxC,gBACF,YAGA,IAAM,EAAe,SAAS,cAAc,KAAK,EACjD,EAAa,UAAY,GAAG,EAAU,SACpC,gBACF,kBAGA,IAAM,EAAoB,EAAY,CACpC,IAAK,EAAgB,IACrB,cAAe,iBACf,UAAW,CACT,EAAgB,OACZ,GAAG,EAAU,SAAS,gBAAgB,cACtC,GACJ,EAAgB,cAAgB,SAC5B,GAAG,EAAU,SAAS,gBAAgB,gBACtC,GACJ,EAAgB,KAClB,EACA,WAAY,CACV,KAAM,UACN,aAAc,gBAChB,EACA,YAAa,EACf,CAAC,EAAE,CAAS,EAGN,EAAsB,EAAW,EAAE,CAAiB,EAGpD,EAAyB,EAAc,EAAE,CAAmB,EAGlE,EAAuB,QAAQ,YAAY,CAAgB,EAC3D,EAAuB,QAAQ,YAAY,CAAY,EAGvD,IAAI,EAAY,GAGZ,EAAc,OAAO,QAGzB,GAAI,EAAgB,SAAU,CAC5B,IAAM,EAAe,IAAM,CACzB,IAAM,EAAiB,OAAO,QAG9B,GAAI,EAAiB,EAAc,IAEjC,GAAI,EACF,EAAU,KAAK,EACf,EAAgB,qBAAqB,EAAK,EAEvC,QAAI,EAAiB,EAAc,IAExC,GAAI,CAAC,EACH,EAAU,KAAK,EACf,EAAgB,qBAAqB,EAAI,EAI7C,EAAc,GAIhB,OAAO,iBAAiB,SAAU,EAAc,CAAE,QAAS,EAAK,CAAC,EAGjE,IAAM,EAAkB,EAAuB,UAAU,QACzD,EAAuB,UAAU,QAAU,IAAM,CAC/C,OAAO,oBAAoB,SAAU,CAAY,EACjD,EAAgB,GAIpB,IAAM,EAA0B,IAC3B,EAEH,SAAS,CAAC,EAAqB,CAE7B,OADA,EAAiB,YAAY,CAAM,EAC5B,MAGT,MAAM,CAAC,EAAkB,CAYvB,OAVA,EAAa,UAAY,GAGzB,EAAa,YAAY,CAAG,EAG5B,KAAK,QAAQ,UAAU,IACrB,GAAG,EAAU,SAAS,gBAAgB,aACxC,EAEO,MAGT,IAAI,EAAG,CAKL,OAJA,KAAK,QAAQ,UAAU,OACrB,GAAG,EAAU,SAAS,gBAAgB,WACxC,EACA,EAAY,GACL,MAGT,IAAI,EAAG,CAKL,OAJA,KAAK,QAAQ,UAAU,IACrB,GAAG,EAAU,SAAS,gBAAgB,WACxC,EACA,EAAY,GACL,MAGT,SAAS,EAAG,CACV,OAAO,GAGT,mBAAmB,EAAG,CACpB,OAAO,EAEX,EAGA,GAAI,EAAgB,UAAY,EAAgB,mBAC9C,EAAU,QAAQ,MAAM,WAAa,aAAa,EAAgB,mCAGpE,OAAO,GG9JT,IAAe,MJSf,KKdA,IACA,IAEA,KCJA,ICIO,IAAM,GAAwB,CAEnC,OAAQ,SAER,MAAO,QAEP,SAAU,WAEV,SAAU,WAEV,KAAM,MACR,EAKa,GAA4B,CAEvC,WAAY,aAEZ,SAAU,UACZ,EAMa,GAAuB,CAElC,QAAS,UAET,YAAa,cAEb,QAAS,SACX,EAiBO,IAAM,GAAwB,CAEnC,QAAS,GAAsB,SAE/B,YAAa,GAA0B,WAEvC,QAAS,GAAqB,QAE9B,OAAQ,GAER,YAAa,GAEb,gBAAiB,IAEjB,cAAe,+BAEf,eAAgB,CAAC,MAAO,GAAG,CAC7B,EAgDO,IAAM,GAAuB,EACjC,GAAqB,SAAU,IAC/B,GAAqB,aAAc,IACnC,GAAqB,SAAU,EAClC,EAMa,GAAqB,EAC/B,GAAqB,SAAU,IAC/B,GAAqB,aAAc,IACnC,GAAqB,SAAU,EAClC,EDpHO,IAAM,GAA6C,CACxD,QAAS,GAAsB,QAC/B,YAAa,GAAsB,YACnC,QAAS,GAAsB,QAC/B,OAAQ,GAAsB,OAC9B,WAAY,GAAsB,YAClC,SAAU,GACV,QAAS,CAAC,CACZ,EAQa,GAAmB,CAC9B,EAA4B,CAAC,IAE7B,EACE,GACA,EACA,cACF,EAQW,GAAqB,CAAC,IAA8B,CAC/D,IAAM,EAAU,EAAO,SAAW,GAAsB,QAClD,EAAc,EAAO,aAAe,GAAsB,YAC1D,EAAU,EAAO,SAAW,GAAsB,QAExD,MAAO,CACL,IAAK,MACL,cAAe,eACf,WAAY,CACV,KAAM,QACN,aAAc,EAAO,WAAa,eAClC,eAAgB,EAChB,mBAAoB,EACpB,eAAgB,CAClB,EACA,UAAW,CACT,EAAO,MACP,EAAO,SAAW,GAAG,EAAO,gCAAkC,KAC9D,GAAG,EAAO,wBAAwB,IAClC,GAAG,EAAO,wBAAwB,IAClC,IAAY,GAAqB,QAC7B,GAAG,EAAO,gCAAgC,IAC1C,KACJ,EAAO,WAAa,GAAG,EAAO,mCAAqC,IACrE,EACA,YAAa,EACf,GASW,GAAmB,CAC9B,IAC2B,CAC3B,IAAM,EAAS,GAAqB,IAAY,GAAqB,QAC/D,EAAS,GAAmB,IAAY,GAAmB,QAEjE,MAAO,CACL,wBAAyB,GAAG,MAC5B,wBAAyB,GAAG,KAC9B,GAYW,GAAkB,CAC7B,EACA,EACA,EACA,IACG,CACH,IAAM,EAAU,IAAU,EACpB,EAAS,IAAU,EAAQ,EAC3B,EAAW,IAAU,EAGvB,EAAgB,GACpB,GAAI,EACF,EAAgB,GAAG,EAAY,sCAC1B,QAAI,EACT,EAAgB,GAAG,EAAY,qCAC1B,QAAI,EACT,EAAgB,GAAG,EAAY,oCAE/B,OAAgB,GAAG,EAAY,sCAGjC,MAAO,IACF,EACH,QAAS,EAAY,QACrB,SAAU,EAAY,UAAY,EAAa,SAC/C,OAAQ,EAAY,OACpB,aAAc,EAAY,aAC1B,MAAO,CACL,GAAG,EAAY,8BACf,EACA,EAAa,KACf,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,CAC5B,GDjEF,IAAM,GAAoB,CAAC,EAA4B,CAAC,IAA4B,CAElF,IAAM,EAAa,GAAiB,CAAM,EACpC,EAAU,GAAc,EAG1B,EAAqC,EAAW,SAAW,GAAsB,QACjF,EAA6C,EAAW,aAAe,GAAsB,YAC7F,EAAqC,EAAW,SAAW,GAAsB,QAErF,GAAI,CAEF,IAAM,EAAY,EAChB,EACA,EAAW,EACX,EAAY,GAAmB,CAAU,CAAC,EAC1C,EAAc,CAChB,EAAE,CAAU,EAGN,EAAgB,GAAiB,CAAc,EACrD,OAAO,QAAQ,CAAa,EAAE,QAAQ,EAAE,EAAM,KAAW,CACvD,EAAU,QAAQ,MAAM,YAAY,EAAM,CAAK,EAChD,EAGD,IAAM,EAA6B,CAAC,EAC9B,EAAgB,EAAW,SAAW,CAAC,EACvC,EAAe,EAAc,OAEnC,EAAc,QAAQ,CAAC,EAAc,IAAU,CAE7C,IAAM,EAAiB,GACrB,EACA,EACA,EACA,CACF,EAGM,EAAS,GAAa,CAAc,EAGzC,EAAe,aAAe,EAC9B,EAAe,YAAc,EAG9B,EAAO,GAAG,QAAS,CAAC,IAAyB,CAC3C,GAAI,CAAC,EAAO,UAAU,WAAW,EAAG,CAClC,IAAM,EAA+B,CACnC,YAAa,EACb,OAAQ,EACR,MAAO,EACP,cAAe,CACjB,EACA,EAAQ,KAAK,QAAS,CAAU,GAEnC,EAGD,EAAO,GAAG,QAAS,CAAC,IAAyB,CAC3C,IAAM,EAA+B,CACnC,YAAa,EACb,OAAQ,EACR,MAAO,EACP,cAAe,CACjB,EACA,EAAQ,KAAK,QAAS,CAAU,EACjC,EAGD,EAAO,GAAG,OAAQ,CAAC,IAAyB,CAC1C,IAAM,EAA+B,CACnC,YAAa,EACb,OAAQ,EACR,MAAO,EACP,cAAe,CACjB,EACA,EAAQ,KAAK,OAAQ,CAAU,EAChC,EAGD,EAAU,QAAQ,YAAY,EAAO,OAAO,EAC5C,EAAQ,KAAK,CAAM,EACpB,EAOD,IAAM,EAAgB,CAAC,IAAgC,CAE9B,CAAC,SAAU,QAAS,WAAY,WAAY,MAAM,EAC1D,QAAQ,KAAK,CAC1B,EAAU,QAAQ,UAAU,OAAO,GAAG,EAAW,wBAAwB,GAAG,EAC7E,EACD,EAAU,QAAQ,UAAU,IAAI,GAAG,EAAW,wBAAwB,GAAS,EAC/E,EAAU,QAAQ,aAAa,eAAgB,CAAO,EAGtD,EAAQ,QAAQ,KAAU,CACxB,EAAO,WAAW,CAAO,EAC1B,EAED,EAAiB,GAQb,EAAoB,CAAC,IAAwC,CACjE,EAAU,QAAQ,UAAU,OAC1B,GAAG,EAAW,kCACd,GAAG,EAAW,+BAChB,EACA,EAAU,QAAQ,UAAU,IAAI,GAAG,EAAW,wBAAwB,GAAa,EACnF,EAAU,QAAQ,aAAa,mBAAoB,CAAW,EAC9D,EAAqB,GAQjB,EAAgB,CAAC,IAAgC,CASrD,GAPA,OAAO,OAAO,EAAoB,EAAE,QAAQ,KAAK,CAC/C,GAAI,IAAM,GAAqB,QAC7B,EAAU,QAAQ,UAAU,OAAO,GAAG,EAAW,gCAAgC,GAAG,EAEvF,EAGG,IAAY,GAAqB,QACnC,EAAU,QAAQ,UAAU,IAAI,GAAG,EAAW,gCAAgC,GAAS,EAIzF,EAAU,QAAQ,aAAa,eAAgB,CAAO,EAGtD,IAAM,EAAgB,GAAiB,CAAO,EAC9C,OAAO,QAAQ,CAAa,EAAE,QAAQ,EAAE,EAAM,KAAW,CACvD,EAAU,QAAQ,MAAM,YAAY,EAAM,CAAK,EAChD,EAED,EAAiB,GAIb,EAAoC,CACxC,QAAS,EAAU,QACnB,UAEA,SAAS,CAAC,EAAe,CACvB,OAAO,EAAQ,IAGjB,aAAa,CAAC,EAAY,CACxB,OAAO,EAAQ,KAAK,KAAU,CAC5B,IAAM,EAAU,EAAe,aAC/B,OAAO,GAAQ,KAAO,GAAM,GAAQ,QAAU,EAC/C,GAGH,UAAU,EAAG,CACX,OAAO,GAGT,UAAU,CAAC,EAA6B,CAEtC,OADA,EAAc,CAAO,EACd,MAGT,cAAc,EAAG,CACf,OAAO,GAGT,cAAc,CAAC,EAAqC,CAElD,OADA,EAAkB,CAAW,EACtB,MAGT,UAAU,EAAG,CACX,OAAO,GAGT,UAAU,CAAC,EAA6B,CAEtC,OADA,EAAc,CAAO,EACd,MAGT,MAAM,EAAG,CASP,OARA,EAAU,QAAQ,UAAU,OAAO,GAAG,EAAW,+BAA+B,EAChF,EAAQ,QAAQ,KAAU,CAGxB,GAAI,CADY,EAAe,cAClB,SACX,EAAO,OAAO,EAEjB,EACM,MAGT,OAAO,EAAG,CAKR,OAJA,EAAU,QAAQ,UAAU,IAAI,GAAG,EAAW,+BAA+B,EAC7E,EAAQ,QAAQ,KAAU,CACxB,EAAO,QAAQ,EAChB,EACM,MAGT,YAAY,CAAC,EAAe,CAC1B,IAAM,EAAS,EAAQ,GACvB,GAAI,EACF,EAAO,OAAO,EAEhB,OAAO,MAGT,aAAa,CAAC,EAAe,CAC3B,IAAM,EAAS,EAAQ,GACvB,GAAI,EACF,EAAO,QAAQ,EAEjB,OAAO,MAGT,EAAE,CAAC,EAAO,EAAS,CAEjB,OADA,EAAQ,GAAG,EAAO,CAAO,EAClB,MAGT,GAAG,CAAC,EAAO,EAAS,CAElB,OADA,EAAQ,IAAI,EAAO,CAAO,EACnB,MAGT,OAAO,EAAG,CAER,EAAQ,QAAQ,KAAU,CACxB,EAAO,QAAQ,EAChB,EAGD,EAAQ,OAAS,EAGjB,EAAQ,MAAM,EAGd,EAAU,UAAU,QAAQ,EAEhC,EAEA,OAAO,EACP,MAAO,EAAO,CAEd,MADA,QAAQ,MAAM,+BAAgC,CAAK,EACzC,MAAM,kCAAmC,EAAgB,SAAS,IAIjE,MGpVf,IACA,IACA,ICSO,IAAM,GAAU,EAAG,eAA4B,CAAC,KAA6C,IAC/F,EACH,QAAS,EAAU,QAgBnB,UAAU,CAAC,EAA4C,CACrD,GAAI,GAAkB,EAAe,UAAU,SAAS,GAAG,EAAU,SAAS,MAAM,WAAW,EAC7F,EAAU,QAAQ,YAAY,CAAc,EAE9C,OAAO,MAkBT,SAAS,CAAC,EAA2C,CACnD,GAAI,GAAiB,EAAc,UAAU,SAAS,GAAG,EAAU,SAAS,MAAM,UAAU,EAAG,CAE7F,IAAM,EAAiB,EAAU,QAAQ,cAAc,IAAI,EAAU,SAAS,MAAM,UAAU,EAC9F,GAAI,EACF,EAAe,OAAO,EAMxB,GAFqB,EAAU,QAAQ,cAAc,IAAI,EAAU,SAAS,MAAM,SAAS,EAEzE,CAGhB,IAAM,EAAgB,EAAU,QAAQ,iBAAiB,IAAI,EAAU,SAAS,MAAM,SAAS,EACzF,EAAY,EAAc,EAAc,OAAS,GAGvD,GAAI,EAAU,YACZ,EAAU,QAAQ,aAAa,EAAe,EAAU,WAAW,EAEnE,OAAU,QAAQ,YAAY,CAAa,EAI7C,OAAU,QAAQ,aAAa,EAAe,EAAU,QAAQ,UAAU,EAG9E,OAAO,MAuBT,QAAQ,CAAC,EAA2B,EAA6B,MAAsB,CACrF,GAAI,GAAgB,EAAa,UAAU,SAAS,GAAG,EAAU,SAAS,MAAM,SAAS,EACvF,GAAI,IAAa,MACf,EAAU,QAAQ,aAAa,EAAc,EAAU,QAAQ,UAAU,EAEzE,OAAU,QAAQ,YAAY,CAAY,EAG9C,OAAO,MA0BT,UAAU,CAAC,EAA4C,CACrD,GAAI,GAAkB,EAAe,UAAU,SAAS,GAAG,EAAU,SAAS,MAAM,WAAW,EAAG,CAEhG,IAAM,EAAkB,EAAU,QAAQ,cAAc,IAAI,EAAU,SAAS,MAAM,WAAW,EAChG,GAAI,EACF,EAAgB,OAAO,EAIzB,EAAU,QAAQ,YAAY,CAAc,EAE9C,OAAO,MAsBT,aAAa,CAAC,EAA+D,CAI3E,GAHA,EAAU,QAAQ,aAAa,YAAa,MAAM,EAClD,EAAU,QAAQ,aAAa,eAAgB,OAAO,EAElD,OAAO,IAAsB,WAC/B,EAAU,QAAQ,iBAAiB,YAAa,CAAC,IAAiB,CAChE,EAAU,QAAQ,aAAa,eAAgB,MAAM,EACrD,EAAkB,CAAC,EACpB,EAED,EAAU,QAAQ,iBAAiB,UAAW,IAAM,CAClD,EAAU,QAAQ,aAAa,eAAgB,OAAO,EACvD,EAGH,OAAO,MAkBT,KAAK,EAAkB,CAErB,OADA,EAAU,QAAQ,MAAM,EACjB,MAaT,OAAO,EAAS,CACd,EAAU,QAAQ,EAEtB,GC5NA,ICAA,KACA,IACA,IACA,KAwBO,IAAM,GAAoB,CAAC,EAA4B,CAAC,IAAmB,CAChF,IAAM,EAAa,IACd,EACH,cAAe,eACf,OAAQ,CACV,EAEA,GAAI,CAGF,IAAM,EAAU,EACd,EACA,EAAY,CACV,IAAK,MACL,cAAe,eACf,UAAW,CACT,EAAO,MACP,EAAO,UAAY,GAAQ,GAAG,6BAAoC,IACpE,EACA,WAAY,CACV,KAAQ,SAER,MAAS,iCACX,CACF,CAAC,CACH,EAAE,CAAU,EAGZ,GAAI,EAAO,KACT,EAAQ,QAAQ,UAAY,EAAO,KAC9B,QAAI,EAAO,KAEhB,EAAQ,QAAQ,UAAY,MAAM,EAAO,WAI3C,GAAI,MAAM,QAAQ,EAAO,QAAQ,EAC/B,EAAO,SAAS,QAAQ,KAAS,CAC/B,GAAI,aAAiB,YACnB,EAAQ,QAAQ,YAAY,CAAK,EAEpC,EAOH,OAFA,EAAQ,QAAQ,UAAU,IAAI,eAAe,EAEtC,EAAQ,QACf,MAAO,EAAO,CAEd,MADA,QAAQ,MAAM,+BAAgC,aAAiB,MAAQ,EAAM,QAAU,OAAO,CAAK,CAAC,EAC1F,MAAM,kCAAkC,aAAiB,MAAQ,EAAM,QAAU,OAAO,CAAK,GAAG,IA0BjG,GAAmB,CAAC,EAA2B,CAAC,IAAmB,CAC9E,IAAM,EAAa,IACd,EACH,cAAe,cACf,OAAQ,CACV,EAEA,GAAI,CACF,IAAM,EAAS,EACb,EACA,EAAY,CACV,IAAK,MACL,cAAe,cACf,UAAW,EAAO,MAClB,WAAY,CACV,KAAQ,UACR,aAAc,GAChB,CACF,CAAC,CACH,EAAE,CAAU,EAGN,EAAgB,EAAc,CAClC,IAAK,MACL,UAAW,GAAG,qBACd,UAAW,EAAO,OACpB,CAAC,EAGD,GAAI,EAAO,MAAO,CAChB,EAAc,CACZ,IAAK,KACL,UAAW,GAAG,sBACd,KAAM,EAAO,MACb,UAAW,EACX,WAAY,CACV,GAAI,GAAG,EAAO,QAAQ,IAAM,qBAC9B,CACF,CAAC,EAGD,IAAM,EAAa,EAAO,QAAQ,QAAQ,IAAI,QAAa,EAC3D,GAAI,GAAc,CAAC,EAAW,aAAa,iBAAiB,EAC1D,EAAW,aAAa,kBAAmB,GAAG,EAAO,QAAQ,IAAM,qBAAqB,EAK5F,GAAI,EAAO,SACT,EAAc,CACZ,IAAK,KACL,UAAW,GAAG,yBACd,KAAM,EAAO,SACb,UAAW,CACb,CAAC,EAIH,GAAI,EAAO,OAAQ,CACjB,IAAM,EAAgB,OAAO,EAAO,SAAW,SAC3C,EAAc,CACd,IAAK,MACL,UAAW,GAAG,uBACd,KAAM,EAAO,MACf,CAAC,EACC,EAAO,OAGL,EAAY,EAAc,cAAc,KAAK,EACnD,GAAI,GAAa,CAAC,EAAU,aAAa,KAAK,EAC5C,EAAU,aAAa,MAAO,EAAE,EAChC,EAAU,aAAa,cAAe,MAAM,EAG9C,EAAO,QAAQ,aAAa,EAAe,EAAO,QAAQ,UAAU,EAItE,GAAI,EAAO,OAAQ,CACjB,IAAM,EAAgB,OAAO,EAAO,SAAW,SAC3C,EAAc,CACd,IAAK,MACL,UAAW,GAAG,uBACd,KAAM,EAAO,MACf,CAAC,EACC,EAAO,OAEX,EAAO,QAAQ,YAAY,CAAa,EAG1C,OAAO,EAAO,QACd,MAAO,EAAO,CAEd,MADA,QAAQ,MAAM,8BAA+B,aAAiB,MAAQ,EAAM,QAAU,OAAO,CAAK,CAAC,EACzF,MAAM,iCAAiC,aAAiB,MAAQ,EAAM,QAAU,OAAO,CAAK,GAAG,IA4BhG,GAAoB,CAAC,EAA4B,CAAC,IAAmB,CAChF,IAAM,EAAa,IACd,EACH,cAAe,eACf,OAAQ,CACV,EAEA,GAAI,CACF,IAAM,EAAU,EACd,EACA,EAAY,CACV,IAAK,MACL,cAAe,eACf,UAAW,CACT,EAAO,MACP,EAAO,UAAY,GAAG,6BAAoC,KAC1D,EAAO,SAAW,GAAG,2BAAkC,KACvD,EAAO,MAAQ,GAAG,mBAAwB,EAAO,QAAU,IAC7D,EACA,WAAY,CACV,KAAQ,OACV,CACF,CAAC,CACH,EAAE,CAAU,EAGZ,GAAI,MAAM,QAAQ,EAAO,OAAO,EAC9B,EAAO,QAAQ,QAAQ,CAAC,EAAQ,IAAU,CACxC,GAAI,aAAkB,YAAa,CAEjC,GAAI,CAAC,EAAO,aAAa,YAAY,GACjC,CAAC,EAAO,aAAa,iBAAiB,GACtC,EAAO,aAAa,KAAK,IAAM,GACjC,EAAO,aAAa,aAAc,UAAU,EAAQ,GAAG,EAGzD,EAAQ,QAAQ,YAAY,CAAM,GAErC,EAGH,OAAO,EAAQ,QACf,MAAO,EAAO,CAEd,MADA,QAAQ,MAAM,+BAAgC,aAAiB,MAAQ,EAAM,QAAU,OAAO,CAAK,CAAC,EAC1F,MAAM,kCAAkC,aAAiB,MAAQ,EAAM,QAAU,OAAO,CAAK,GAAG,IA0BjG,GAAkB,CAAC,EAA0B,CAAC,IAAmB,CAC5E,IAAM,EAAa,IACd,EACH,cAAe,aACf,OAAQ,CACV,EAEA,GAAI,CACF,IAAM,EAAQ,EACZ,EACA,EAAY,CACV,IAAK,MACL,cAAe,aACf,UAAW,CACT,EAAO,MACP,EAAO,YAAc,GAAG,iBAAsB,EAAO,YAAY,QAAQ,IAAK,GAAG,IAAM,KACvF,EAAO,QAAU,GAAG,wBAA+B,IACrD,CACF,CAAC,CACH,EAAE,CAAU,EAGZ,GAAI,EAAO,mBAAmB,YAC5B,EAAM,QAAQ,YAAY,EAAO,OAAO,EAGrC,QAAI,EAAO,IAAK,CACnB,IAAM,EAAM,SAAS,cAAc,KAAK,EAMxC,GALA,EAAI,IAAM,EAAO,IACjB,EAAI,UAAY,GAAG,mBAGnB,EAAI,IAAM,EAAO,KAAO,GACpB,CAAC,EAAO,IAEV,EAAI,aAAa,cAAe,MAAM,EAGxC,EAAM,QAAQ,YAAY,CAAG,EAG/B,OAAO,EAAM,QACb,MAAO,EAAO,CAEd,MADA,QAAQ,MAAM,6BAA8B,aAAiB,MAAQ,EAAM,QAAU,OAAO,CAAK,CAAC,EACxF,MAAM,gCAAgC,aAAiB,MAAQ,EAAM,QAAU,OAAO,CAAK,GAAG,IC5UrG,IAAM,GAAgB,CAC3B,SAAU,WACV,OAAQ,SACR,SAAU,UACZ,EAMa,GAAkB,CAC7B,OAAQ,EACR,OAAQ,EACR,OAAQ,EACR,OAAQ,CACV,EFFO,IAAM,GAA4B,CACvC,QAAS,GAAc,SACvB,YAAa,GACb,UAAW,GACX,UAAW,GACX,UAAW,EACb,EAgBa,GAAsB,CAAC,IAAmC,CACrE,IAAM,EAA8B,IAAK,CAAO,EAGhD,GAAI,EAAO,OACT,EAAgB,aAAe,EAAO,OAGxC,GAAI,EAAO,QACT,EAAgB,cAAgB,EAAO,QAGzC,GAAI,EAAO,MACT,EAAgB,YAAc,EAAO,MAGvC,GAAI,EAAO,QACT,EAAgB,cAAgB,EAAO,QAGzC,OAAO,GAYI,GAA2B,CACtC,EACA,IACS,CAET,GACE,EAAO,cACN,CAAC,EAAO,YAAY,UAAY,EAAO,YAAY,WAAa,OACjE,CACA,IAAM,EAAe,GAAgB,IAChC,EAAO,YACV,SAAU,MACZ,CAAC,EACD,EAAK,SAAS,EAAc,KAAK,EAInC,GAAI,EAAO,aAAc,CACvB,IAAM,EAAgB,GAAiB,EAAO,YAAY,EAC1D,EAAK,UAAU,CAAa,EAI9B,GAAI,EAAO,cAAe,CACxB,IAAM,EAAiB,GAAkB,EAAO,aAAa,EAC7D,EAAK,WAAW,CAAc,EAIhC,GAAI,EAAO,aAAe,EAAO,YAAY,WAAa,SAAU,CAClE,IAAM,EAAe,GAAgB,IAChC,EAAO,YACV,SAAU,MACZ,CAAC,EACD,EAAK,SAAS,EAAc,QAAQ,EAItC,GAAI,EAAO,cAAe,CACxB,IAAM,EAAiB,GAAkB,EAAO,aAAa,EAC7D,EAAK,WAAW,CAAc,EAIhC,GAAI,MAAM,QAAQ,EAAO,OAAO,GAAK,EAAO,QAAQ,OAAS,0CAExD,KAAK,EAAG,QAAS,KAAmB,CAEnC,IAAM,EAAgB,EAAO,QAAS,IACpC,CAAC,IAAiB,EAAa,CAAY,EAAE,OAC/C,EAGM,EAAiB,GAAkB,CACvC,QAAS,EACT,MAAO,EAAO,eAAe,OAAS,KACxC,CAAC,EAGD,EAAK,WAAW,CAAc,EAC/B,EACA,MAAM,CAAC,IAAU,CAChB,QAAQ,MAAM,4BAA6B,CAAK,EACjD,GAcM,GAAmB,CAAC,EAAqB,CAAC,IACrD,EAAsB,GAAe,EAAQ,MAAM,EAYxC,GAAmB,CAAC,IAAuB,CACtD,IAAM,EAAgB,EAAO,aAAe,EAAO,UAC7C,EAAc,EAAgB,SAAW,SAGzC,EAAyC,CAAC,EAChD,GAAI,EAAO,KAET,OAAO,QAAQ,EAAO,IAAI,EAAE,QAAQ,EAAE,EAAK,KAAW,CACpD,GAAI,IAAU,OAAW,CAEvB,IAAM,EAAW,EAAI,WAAW,OAAO,EAAI,EAAM,QAAQ,IACzD,EAAe,GAAY,GAE9B,EAIH,GAAI,CAAC,EAAe,MAAW,CAAC,EAAO,MAAM,KAC3C,EAAe,KAAU,EAI3B,GAAI,GAAiB,CAAC,EAAe,SACnC,EAAe,SAAc,IAG/B,OAAO,EAAoB,EAAQ,CACjC,IAAK,MACL,UAAW,CACT,EAAO,MACP,EAAO,UAAY,GAAG,EAAO,0BAA4B,KACzD,EAAgB,GAAG,EAAO,2BAA6B,IACzD,EACA,WAAY,EACZ,cAAe,CACb,MAAO,IAAM,CAAC,CAAC,EAAO,UACtB,WAAY,IAAM,CAAC,CAAC,EACpB,WAAY,IAAM,CAAC,CAAC,EACpB,QAAS,IAAM,CAAC,CAAC,EACjB,MAAO,IAAM,CAAC,CAAC,EACf,KAAM,IAAM,CAAC,CAAC,CAChB,EACA,YAAa,CACf,CAAC,GAYU,GAAe,CAAC,KAAe,CAC1C,UAAW,CACT,QAAS,IAAM,EAAK,WAAW,UAAU,CAC3C,CACF,GAQa,GAAwB,GAaxB,GAA0B,CAAC,IAAuC,CAC7E,IAAM,EAAS,EAAK,OAIpB,GAHsB,EAAO,aAAe,EAAO,UAKjD,EAAK,QAAQ,iBAAiB,aAAc,IAAM,CAChD,GAAI,EAAO,UAAY,GAAc,SACnC,EAAK,QAAQ,MAAM,YACjB,mBACA,OAAO,GAAsB,MAAM,CACrC,EAEH,EAED,EAAK,QAAQ,iBAAiB,aAAc,IAAM,CAChD,GAAI,EAAO,UAAY,GAAc,SACnC,EAAK,QAAQ,MAAM,YACjB,mBACA,OAAO,GAAsB,MAAM,CACrC,EAEH,EAGD,EAAK,QAAQ,iBAAiB,UAAW,CAAC,IAAqB,CAE7D,IAAK,EAAE,MAAQ,SAAW,EAAE,MAAQ,MAAQ,EAAO,UACjD,EAAE,eAAe,EACjB,EAAK,QAAQ,MAAM,EAEtB,EAGD,EAAK,QAAQ,iBAAiB,QAAS,IAAM,CAC3C,EAAK,QAAQ,UAAU,IAAI,GAAG,EAAK,SAAS,MAAM,YAAY,EAC/D,EAED,EAAK,QAAQ,iBAAiB,OAAQ,IAAM,CAC1C,EAAK,QAAQ,UAAU,OAAO,GAAG,EAAK,SAAS,MAAM,YAAY,EAClE,EAIH,GAAI,EAAO,UACT,EAAK,QAAQ,aAAa,YAAa,MAAM,EAE7C,EAAK,QAAQ,iBAAiB,YAAa,CAAC,IAAiB,CAS3D,GARA,EAAK,QAAQ,MAAM,YACjB,mBACA,OAAO,GAAsB,MAAM,CACrC,EACA,EAAK,QAAQ,UAAU,IAAI,GAAG,EAAK,SAAS,MAAM,aAAa,EAC/D,EAAK,OAAO,YAAa,CAAE,MAAO,CAAE,CAAC,EAGjC,EAAE,aAAc,CAElB,IAAM,EACJ,EAAK,QAAQ,cAAc,IAAI,EAAK,SAAS,MAAM,gBAAgB,GAC/D,aAAe,OACrB,EAAE,aAAa,QAAQ,aAAc,CAAS,GAEjD,EAED,EAAK,QAAQ,iBAAiB,UAAW,CAAC,IAAiB,CACzD,EAAK,QAAQ,MAAM,YACjB,mBACA,OAAO,GAAsB,MAAM,CACrC,EACA,EAAK,QAAQ,UAAU,OAAO,GAAG,EAAK,SAAS,MAAM,aAAa,EAClE,EAAK,OAAO,UAAW,CAAE,MAAO,CAAE,CAAC,EACpC,EAGH,OAAO,GG5KF,IAAM,GAAgB,CAAC,IAA4C,CAIxE,GAHe,EAAU,OAGd,UAAY,WACrB,EAAU,QAAQ,MAAM,YACtB,mBACA,OAAO,GAAsB,MAAM,CACrC,EAEA,OAAU,QAAQ,MAAM,YACtB,mBACA,OAAO,GAAsB,MAAM,CACrC,EAGF,OAAO,GLjFT,IAAM,GAAa,CAAC,EAAqB,CAAC,IAAqB,CAE7D,IAAM,EAAkB,GAAoB,CAAM,EAC5C,EAAa,GAAiB,CAAe,EAEnD,GAAI,CAEF,IAAM,EAAO,EACX,EACA,EAAW,EACX,EAAY,GAAiB,CAAU,CAAC,EACxC,GAAY,CAAU,EACtB,EAAW,UAAY,GAAW,CAAU,EAAI,CAAC,IAAqB,EACtE,EAAc,EACd,GACA,GACA,KAAQ,GAAQ,GAAa,CAAI,CAAC,EAAE,CAAI,CAC1C,EAAE,CAAU,EAKZ,OAFA,GAAyB,EAAM,CAAe,EAEvC,EACP,MAAO,EAAO,CAEd,MADA,QAAQ,MAAM,uBAAwB,aAAiB,MAAQ,EAAM,QAAU,OAAO,CAAK,CAAC,EAClF,MAAM,0BAA0B,aAAiB,MAAQ,EAAM,QAAU,OAAO,CAAK,GAAG,IAIvF,MMjGf,IACA,IACA,ICRO,IAAM,GAAmB,CAM9B,aAAc,eAOd,YAAa,cAOb,KAAM,OAON,YAAa,aACf,EAUa,GAA4B,CAMvC,QAAS,UAOT,KAAM,MACR,EA2BO,IAAM,GAAuB,CAElC,MAAO,QAEP,KAAM,OAEN,KAAM,MACR,EAea,GAAkB,CAE7B,aAAc,eAEd,cAAe,gBAEf,OAAQ,QACV,EAUa,GAAoB,CAE/B,cAAe,EAEf,KAAM,GAEN,WAAY,GAAqB,MAEjC,oBAAqB,IAErB,cAAe,GAEf,IAAK,EAEL,OAAQ,GAAiB,aAEzB,gBAAiB,GAA0B,KAE3C,iBAAkB,GAOlB,YAAa,EAEV,GAAiB,cAAe,CAC/B,MAAO,IACP,OAAQ,IACR,MAAO,EACT,GAEC,GAAiB,aAAc,CAC9B,MAAO,IACP,OAAQ,IACR,MAAO,GACT,GAEC,GAAiB,MAAO,CACvB,MAAO,IACP,OAAQ,IACR,MAAO,EACT,GAEC,GAAiB,aAAc,CAC9B,MAAO,OACP,OAAQ,OACR,MAAO,MACT,CACF,CACF,ECtKO,IAAM,GAAa,CAAC,IAA2B,CAAC,IAAc,CAEnE,IAAM,EAAoB,IAAK,CAAU,EAGnC,EAAyB,EAAO,QAAU,GAAkB,OAG5D,EAAsB,IAAM,CAChC,IAAM,EAAU,SAAS,cAAc,KAAK,EAM5C,OALA,EAAQ,UAAY,GAAG,EAAU,SAAS,UAAU,YAGpD,EAAQ,QAAQ,OAAS,EACzB,EAAU,QAAQ,YAAY,CAAO,EAC9B,GAIH,EAAkB,SAAS,cAAc,KAAK,EAMpD,GALA,EAAgB,UAAY,GAAG,EAAU,SAAS,UAAU,WAC5D,EAAgB,aAAa,OAAQ,MAAM,EAC3C,EAAgB,aAAa,aAAc,iBAAiB,EAGxD,EAAO,iBAAmB,OAC5B,EAAgB,QAAQ,WAAa,OAIvC,EAAgB,QAAQ,IAAM,GAAG,EAAO,KAAO,GAAkB,MAGjE,IAAM,EAAU,EAAoB,EACpC,EAAQ,YAAY,CAAe,EAGnC,IAAI,EAAe,EAAO,cAAgB,EACtC,EAAa,EACX,EAAwB,CAAC,EACzB,EAA6B,CAAC,EAQpC,SAAS,CAAkB,CAAC,EAA6C,CAEvE,GAAI,EAAU,IAAQ,KACpB,OAAO,EAAU,GAAO,KAI1B,OAAQ,OACD,eAEH,GAAI,IAAU,GAAK,IAAU,EAAG,MAAO,QACvC,GAAI,IAAU,EAAG,MAAO,SACxB,MAAO,YAEJ,cAEH,MAAO,YAEJ,OAEH,OAAO,IAAU,EAAI,QAAU,YAE5B,cAEH,MAAO,gBAGP,MAAO,SAQb,SAAS,CAAgB,EAAG,CAE1B,IAAM,EAAiB,EAAgB,YAGnC,EACF,OAAO,GAAkB,YAAY,GAAQ,QAAU,SAClD,GAAkB,YAAY,GAAQ,MACvC,EAEF,EACF,OAAO,GAAkB,YAAY,GAAQ,SAAW,SACnD,GAAkB,YAAY,GAAQ,OACvC,EAAiB,KAEnB,EACF,OAAO,GAAkB,YAAY,GAAQ,QAAU,SAClD,GAAkB,YAAY,GAAQ,MACvC,GAAkB,iBAGxB,GACE,EAAO,mBACP,OAAO,EAAO,oBAAsB,SAEpC,EAAa,KAAK,IAAI,EAAY,EAAO,iBAAiB,EAI5D,GAAI,EAAO,gBAAkB,OAAO,EAAO,iBAAmB,SAC5D,EAAa,EAAO,eAItB,GAAI,IAAW,cACb,EAAa,EACb,EAAc,EACd,EAAa,EAIf,EAAO,QAAQ,CAAC,EAAS,IAAU,CACjC,IAAM,EAAO,EAAmB,CAAK,EAGrC,OAAQ,OACD,QACH,EAAQ,MAAM,MAAQ,GAAG,MACzB,UACG,SACH,EAAQ,MAAM,MAAQ,GAAG,MACzB,UACG,QACH,EAAQ,MAAM,MAAQ,GAAG,MACzB,MAIJ,EAAQ,UAAY,GAAG,EAAU,SAC/B,UACF,WAAW,EAAU,SAAS,UAAU,YAAY,IAGpD,IAAM,EAAU,EAAQ,cACtB,IAAI,EAAU,SAAS,UAAU,eACnC,EACM,EAAS,EAAQ,cACrB,IAAI,EAAU,SAAS,UAAU,qBACnC,EAEA,GAAI,EACF,GAAI,IAAS,SAAW,IAAW,cACjC,EAAQ,UAAU,IAAI,iBAAiB,EAEvC,OAAQ,UAAU,OAAO,iBAAiB,EAI9C,GAAI,EACF,GACE,IAAS,SACR,IAAS,UAAY,IAAW,eAEjC,EAAO,UAAU,IAAI,iBAAiB,EAEtC,OAAO,UAAU,OAAO,iBAAiB,EAG9C,EAUH,SAAS,CAAe,CAAC,EAAsB,EAA6B,CAC1E,IAAM,EAAe,SAAS,cAAc,KAAK,EACjD,EAAa,UAAY,GAAG,EAAU,SAAS,UAAU,UACzD,EAAa,aAAa,OAAQ,UAAU,EAC5C,EAAa,aAAa,uBAAwB,OAAO,EAGzD,EAAa,QAAQ,aAAe,GAClC,EAAO,cAAgB,GAAkB,gBAI3C,IAAM,EAAiB,SAAS,cAAc,KAAK,EACnD,EAAe,UAAY,GAAG,EAAU,SAAS,UAAU,gBAG3D,IAAM,EAAQ,SAAS,cAAc,KAAK,EAM1C,GALA,EAAM,IAAM,EAAM,MAClB,EAAM,IAAM,EAAM,OAAS,iBAC3B,EAAe,YAAY,CAAK,EAG5B,EAAM,OAAQ,CAChB,IAAM,EAAU,SAAS,cAAc,KAAK,EAE5C,GADA,EAAQ,UAAY,GAAG,EAAU,SAAS,UAAU,kBAChD,EAAM,OACR,EAAQ,MAAM,gBAAkB,EAAM,OAExC,EAAe,YAAY,CAAO,EAIpC,IAAM,EAAmB,SAAS,cAAc,KAAK,EAMrD,GALA,EAAiB,UAAY,GAAG,EAAU,SACxC,UACF,kBAGI,EAAM,MAAO,CACf,IAAM,EAAQ,SAAS,cAAc,KAAK,EAM1C,GALA,EAAM,UAAY,GAAG,EAAU,SAAS,UAAU,gBAClD,EAAM,YAAc,EAAM,MAItB,IAAW,cACb,EAAiB,YAAY,CAAK,EAElC,OAAe,YAAY,CAAK,EAKpC,GAAI,EAAM,YAAa,CACrB,IAAM,EAAc,SAAS,cAAc,KAAK,EAChD,EAAY,UAAY,GAAG,EAAU,SACnC,UACF,sBACA,EAAY,YAAc,EAAM,YAChC,EAAiB,YAAY,CAAW,EAI1C,GAAI,EAAM,WAAY,CACpB,IAAM,EAAS,SAAS,cAAc,GAAG,EAIzC,GAHA,EAAO,UAAY,GAAG,EAAU,SAAS,UAAU,iBACnD,EAAO,YAAc,EAAM,WAEvB,EAAM,UACR,EAAO,KAAO,EAAM,UAGtB,GAAI,EAAM,OACR,EAAO,MAAM,gBAAkB,EAAM,OAGvC,EAAiB,YAAY,CAAM,EAOrC,GAJA,EAAa,YAAY,CAAc,EACvC,EAAa,YAAY,CAAgB,EAGrC,IAAU,QAAa,GAAS,GAAK,GAAS,EAAU,OAC1D,EAAU,OAAO,EAAO,EAAG,CAAK,EAEhC,OAAU,KAAK,CAAK,EAItB,GAAI,IAAU,QAAa,GAAS,GAAK,GAAS,EAAO,OACvD,GAAI,EAAQ,EAAO,OACjB,EAAgB,aAAa,EAAc,EAAO,EAAM,EACxD,EAAO,OAAO,EAAO,EAAG,CAAY,EAEpC,OAAgB,YAAY,CAAY,EACxC,EAAO,KAAK,CAAY,EAG1B,OAAgB,YAAY,CAAY,EACxC,EAAO,KAAK,CAAY,EAQ1B,OALA,IAGA,EAAiB,EAEV,EAOT,IAAM,EAAiB,IAAM,CAC3B,GAAI,EAAO,cAAgB,GAAO,OAElC,IAAM,EAAc,SAAS,cAAc,KAAK,EAChD,EAAY,UAAY,GAAG,EAAU,SAAS,UAAU,aACxD,EAAY,aAAa,OAAQ,QAAQ,EACzC,EAAY,aAAa,WAAY,GAAG,EACxC,EAAY,aAAa,aAAc,gBAAgB,EAEvD,IAAM,EAAc,SAAS,cAAc,MAAM,EACjD,EAAY,YAAc,WAE1B,EAAY,YAAY,CAAW,EACnC,EAAQ,YAAY,CAAW,EAE/B,EAAY,iBAAiB,QAAS,IAAM,CAC1C,GAAI,EAAO,WAAa,OAAO,EAAO,YAAc,WAClD,EAAO,UAAU,EAEpB,EAGD,EAAY,iBAAiB,UAAW,CAAC,IAAU,CACjD,GAAI,EAAM,MAAQ,SAAW,EAAM,MAAQ,IAAK,CAC9C,GAAI,EAAO,WAAa,OAAO,EAAO,YAAc,WAClD,EAAO,UAAU,EAEnB,EAAM,eAAe,GAExB,GAIH,GAAI,EAAO,QAAU,EAAO,OAAO,OAAS,EAC1C,EAAO,OAAO,QAAQ,CAAC,IAAU,CAC/B,EAAgB,CAAK,EACtB,EAKH,GAAI,EAAO,cAAgB,IAAS,IAAW,cAC7C,EAAe,EAIjB,IAAM,EAAe,IAAM,CACzB,EAAiB,EAGjB,IAAM,EAAc,IAAI,YAAY,GAAgB,OAAQ,CAC1D,OAAQ,CAAE,MAAO,EAAgB,WAAY,CAC/C,CAAC,EACD,EAAU,QAAQ,cAAc,CAAW,GAI7C,OAAO,iBAAiB,SAAU,CAAY,EAG9C,WAAW,EAAkB,CAAC,EAQ9B,IAAM,EAAO,CAAC,IAAkB,CAE9B,GAAI,EAAQ,GAAK,GAAS,EACxB,GAAI,EAAO,KAET,GAAI,EAAQ,EACV,EAAQ,EAAa,EAErB,OAAQ,EAIV,YAAO,EAKX,GAAI,IAAiB,EAAO,CAE1B,IAAM,EAAc,IAAI,YAAY,GAAgB,aAAc,CAChE,OAAQ,CAAE,cAAe,EAAc,UAAW,CAAM,CAC1D,CAAC,EACD,EAAU,QAAQ,cAAc,CAAW,EAG3C,EAAe,EAGf,EAAO,QAAQ,CAAC,EAAS,IAAM,CAC7B,GAAI,IAAM,EACR,EAAQ,UAAU,IAChB,GAAG,EAAU,SAAS,UAAU,iBAClC,EACA,EAAQ,aAAa,eAAgB,MAAM,EAE3C,OAAQ,UAAU,OAChB,GAAG,EAAU,SAAS,UAAU,iBAClC,EACA,EAAQ,gBAAgB,cAAc,EAEzC,EAGD,IAAM,EAAW,EAAO,iBAAmB,OAAS,SAAW,OAG/D,GAAI,EAAO,GAET,GAAI,IAAW,QAAU,EAAO,SAAU,CACxC,IAAM,EAAa,EAAO,GAAO,YAC3B,EAAiB,EAAgB,YACjC,EAAa,EAAO,GAAO,WAEjC,EAAgB,SAAS,CACvB,KAAM,EAAa,EAAiB,EAAI,EAAa,EACrD,UACF,CAAC,EAGD,OAAO,GAAO,eAAe,CAC3B,WACA,MAAO,UACP,OAAQ,OACV,CAAC,EAKL,IAAM,EAAa,IAAI,YAAY,GAAgB,cAAe,CAChE,OAAQ,CAAE,cAAa,CACzB,CAAC,EACD,EAAU,QAAQ,cAAc,CAAU,EAG5C,OAAO,GA2NT,GAnNA,OAAO,OAAO,EAAmB,CAC/B,OAAQ,CACN,SAAU,CAAC,EAAsB,IAAmB,CAElD,OADA,EAAgB,EAAO,CAAK,EACrB,EAAkB,QAG3B,YAAa,CAAC,IAAkB,CAC9B,GAAI,GAAS,GAAK,EAAQ,EAAO,OAAQ,CAOvC,GANA,EAAgB,YAAY,EAAO,EAAM,EACzC,EAAO,OAAO,EAAO,CAAC,EACtB,EAAU,OAAO,EAAO,CAAC,EACzB,IAGI,GAAgB,EAClB,EAAe,EAAa,EAG9B,GAAI,EAAe,EACjB,EAAe,EAIjB,EAAiB,EAGnB,OAAO,EAAkB,QAG3B,YAAa,CAAC,EAAe,IAAyB,CACpD,GAAI,GAAS,GAAK,EAAQ,EAAO,OAAQ,CAEvC,EAAU,GAAS,EAGnB,IAAM,EAAe,EAAO,GAGtB,EAAe,EAAa,cAAc,KAAK,EACrD,GAAI,EACF,EAAa,IAAM,EAAM,MACzB,EAAa,IAAM,EAAM,OAAS,iBAIpC,IAAM,EAAe,EAAa,cAChC,IAAI,EAAU,SAAS,UAAU,eACnC,EACA,GAAI,GAAgB,EAAM,MACxB,EAAa,YAAc,EAAM,MAInC,IAAM,EAAqB,EAAa,cACtC,IAAI,EAAU,SAAS,UAAU,qBACnC,EACA,GAAI,GAAsB,EAAM,YAC9B,EAAmB,YAAc,EAAM,YAIzC,IAAM,EAAiB,EAAa,cAClC,IAAI,EAAU,SAAS,UAAU,iBACnC,EACA,GAAI,GAAkB,EAAM,OACzB,EAA+B,MAAM,gBACpC,EAAM,OAIV,IAAM,EAAgB,EAAa,cACjC,IAAI,EAAU,SAAS,UAAU,gBACnC,EACA,GAAI,EACF,GAAI,EAAM,WAAY,CAGpB,GAFA,EAAc,YAAc,EAAM,WAE9B,EAAM,UACP,EAAoC,KAAO,EAAM,UAGpD,GAAI,EAAM,OACP,EAA8B,MAAM,gBACnC,EAAM,OAIV,OAAc,eAAe,YAAY,CAAa,EAEnD,QAAI,EAAM,WAAY,CAE3B,IAAM,EAAmB,EAAa,cACpC,IAAI,EAAU,SAAS,UAAU,iBACnC,EACA,GAAI,EAAkB,CACpB,IAAM,EAAS,SAAS,cAAc,GAAG,EAMzC,GALA,EAAO,UAAY,GAAG,EAAU,SAC9B,UACF,iBACA,EAAO,YAAc,EAAM,WAEvB,EAAM,UACR,EAAO,KAAO,EAAM,UAGtB,GAAI,EAAM,OACR,EAAO,MAAM,gBAAkB,EAAM,OAGvC,EAAiB,YAAY,CAAM,GAKvC,GAAI,EAAM,KACR,EAAiB,EAIrB,OAAO,EAAkB,QAG3B,SAAU,CAAC,IAAkB,CAC3B,GAAI,GAAS,GAAK,EAAQ,EAAU,OAClC,OAAO,EAAU,GAEnB,OAAO,MAGT,SAAU,IAAM,EAEhB,YAAa,IAAM,CAAC,GAAG,CAAM,CAC/B,EAEA,kBACA,YACA,UAEA,gBAAiB,IAAM,EAEvB,OACA,KAlJW,IAAM,EAAK,EAAe,CAAC,EAmJtC,KAlJW,IAAM,EAAK,EAAe,CAAC,EAoJtC,WAAY,IAAM,CAEhB,OADA,EAAO,KAAO,GACP,GAGT,YAAa,IAAM,CAEjB,OADA,EAAO,KAAO,GACP,GAGT,gBAAiB,CAAC,IAAmB,CAKnC,OAJA,EAAO,aAAe,EACtB,EAAO,QAAQ,CAAC,IAAU,CACxB,EAAM,QAAQ,aAAe,GAAG,IACjC,EACM,GAGT,OAAQ,CAAC,IAAgB,CAGvB,OAFA,EAAO,IAAM,EACb,EAAgB,QAAQ,IAAM,GAAG,IAC1B,GAGT,aAAc,CAAC,IAA8B,CAuB3C,OArBA,EAAO,OAAS,EAGhB,EAAQ,QAAQ,OAAS,EACzB,EAAU,QAAQ,QAAQ,OAAS,EAGnC,OAAO,OAAO,EAAgB,EAAE,QAAQ,CAAC,IAAgB,CACvD,EAAU,QAAQ,UAAU,OAC1B,GAAG,EAAU,SAAS,UAAU,aAAa,GAC/C,EACD,EAGD,EAAU,QAAQ,UAAU,IAC1B,GAAG,EAAU,SAAS,UAAU,aAAa,GAC/C,EAGA,EAAiB,EAEV,GAIT,UAAW,IACL,EAAU,WAAa,CAAC,EAC5B,QAAS,IAAM,CAKb,GAHA,OAAO,oBAAoB,SAAU,CAAY,EAG7C,EAAU,WAAa,EAAU,UAAU,QAC7C,EAAU,UAAU,QAAQ,EAGlC,CACF,CAAC,EAGG,EAAO,WACT,EAAU,QAAQ,UAAU,IAC1B,GAAG,EAAU,SAAS,UAAU,iBAAiB,EAAO,YAC1D,EAIF,GAAI,EAAO,iBAAmB,OAC5B,EAAgB,iBAAiB,SAAU,IAAM,CAE/C,aAAa,EAAkB,aAAgB,EAE/C,EAAkB,cAAmB,WAAW,IAAM,CAEpD,IAAI,EAAe,EACf,EAAkB,IAEhB,EAAgB,EAAgB,WAChC,EAAiB,EAAgB,YAgBvC,GAdA,EAAO,QAAQ,CAAC,EAAO,IAAU,CAE/B,IAAM,EADY,EAAM,WACQ,EAAM,YAAc,EAC9C,EAAkB,EAAgB,EAAiB,EAEnD,EAAW,KAAK,IAAI,EAAc,CAAe,EAEvD,GAAI,EAAW,EACb,EAAkB,EAClB,EAAe,EAElB,EAGG,IAAiB,EAAc,CACjC,EAAe,EAGf,EAAO,QAAQ,CAAC,EAAS,IAAM,CAC7B,GAAI,IAAM,EACR,EAAQ,UAAU,IAChB,GAAG,EAAU,SAAS,UAAU,iBAClC,EACA,EAAQ,aAAa,eAAgB,MAAM,EAE3C,OAAQ,UAAU,OAChB,GAAG,EAAU,SAAS,UAAU,iBAClC,EACA,EAAQ,gBAAgB,cAAc,EAEzC,EAGD,IAAM,EAAQ,IAAI,YAAY,GAAgB,cAAe,CAC3D,OAAQ,CAAE,cAAa,CACzB,CAAC,EACD,EAAU,QAAQ,cAAc,CAAK,IAEtC,GAAG,EACP,EAGH,OAAO,GCptBF,IAAM,GAAW,CAAC,IAA2B,CAAC,IAAc,CACjE,IAAI,EACA,EACA,EACA,EAAa,GACb,EAAW,EACX,EAAgB,EAChB,EAGE,EAAiB,EAAO,gBAAkB,UAG1C,EAAoB,CAAC,IAAwB,CAEjD,GAAI,EAAM,SAAW,EAAG,OAGxB,qBAAqB,CAAc,EAEnC,EAAS,EAAM,QACf,EAAkB,EAAU,gBAAgB,WAC5C,EAAW,EACX,EAAa,GACb,EAAgB,KAAK,IAAI,EACzB,EAAW,EAGX,EAAU,gBAAgB,QAAQ,YAAc,OAChD,EAAU,QAAQ,QAAQ,SAAW,OAGrC,EAAU,gBAAgB,MAAM,eAAiB,OAGjD,EAAU,QAAQ,kBAAkB,EAAM,SAAS,EAGnD,EAAM,eAAe,GAGjB,EAAoB,CAAC,IAAwB,CACjD,GAAI,CAAC,EAAY,OAGjB,IAAM,EAAK,EAAM,QAAU,EAG3B,EAAU,gBAAgB,WAAa,EAAkB,EAGzD,IAAM,EAAM,KAAK,IAAI,EACf,EAAK,EAAM,EAEjB,GAAI,EAAK,EAEP,GADW,EAAM,QAAU,GACX,EAGlB,EAAW,EAAM,QACjB,EAAgB,EAEhB,EAAM,eAAe,GAOjB,EAAmB,IAAM,CAC7B,IAAM,EAAgB,EAAU,OAAO,YAAY,EAC7C,EAAiB,EAAU,gBAAgB,YAC3C,EAAa,EAAU,gBAAgB,WAGvC,EAAa,EAAO,SAAW,QAAU,EAAO,SAElD,EAAkB,EAClB,EAAkB,IAuBtB,OApBA,EAAc,QAAQ,CAAC,IAAU,CAC/B,IAAI,EAEJ,GAAI,EAGF,EADoB,EAAM,WAAa,EAAM,YAAc,EAC5B,EAAiB,EAGhD,OAAiB,EAAM,WAGzB,IAAM,EAAW,KAAK,IAAI,EAAiB,CAAU,EAErD,GAAI,EAAW,EACb,EAAkB,EAClB,EAAkB,EAErB,EAEM,GASH,EAAgB,CACpB,EACA,EACA,IACG,CACH,IAAM,EAAY,KAAK,IAAI,EACrB,EAAW,EAAc,EAI3B,EAAW,IAEf,GAAI,KAAK,IAAI,CAAa,EAAI,IAE5B,EAAW,KAAK,IAAI,EAAU,GAAG,EAGnC,IAAM,EAAc,IAAM,CACxB,IAAM,EAAU,KAAK,IAAI,EAAI,EACzB,EAAW,KAAK,IAAI,EAAU,EAAU,CAAC,EAG7C,EAAW,EAAI,KAAK,IAAI,EAAI,EAAU,CAAC,EAEvC,IAAM,EAAkB,EAAgB,EAAW,EAGnD,GAFA,EAAU,gBAAgB,WAAa,EAEnC,EAAW,EACb,EAAiB,sBAAsB,CAAW,GAItD,EAAiB,sBAAsB,CAAW,GAG9C,EAAkB,CAAC,IAAwB,CAC/C,GAAI,CAAC,EAAY,OASjB,GAPA,EAAa,GACb,OAAO,EAAU,QAAQ,QAAQ,SAGjC,EAAU,QAAQ,sBAAsB,EAAM,SAAS,EAGnD,IAAmB,OAAQ,CAE7B,IAAM,EAAe,EAAiB,EAGtC,EACE,EAAU,gBAAgB,WAC1B,EACA,CACF,EACK,QAAI,KAAK,IAAI,CAAQ,EAAI,IAAK,CAEnC,IAAM,EAAmB,EAAW,IAC9B,EACJ,EAAU,gBAAgB,WAAa,EAEzC,EACE,EAAU,gBAAgB,WAC1B,EACA,CACF,EAIF,EAAW,EAGX,WAAW,IAAM,CACf,EAAU,gBAAgB,MAAM,eAAiB,IAChD,CAAC,GAGA,EAAsB,CAAC,IAAwB,CACnD,GAAI,EACF,EAAa,GACb,OAAO,EAAU,QAAQ,QAAQ,SACjC,EAAU,QAAQ,sBAAsB,EAAM,SAAS,EAGvD,EAAU,gBAAgB,MAAM,eAAiB,IAQ/C,EAAc,CAAC,IAAsB,CAEzC,GAAI,EAAO,SAAW,cAEpB,OAIF,EAAM,eAAe,EAMrB,IAAM,GAHQ,EAAM,QAAU,EAAM,QAGJ,IAGhC,GAAI,IAAmB,OAErB,EAAU,gBAAgB,YAAc,EAGxC,aAAa,EAAU,gBAAmB,EAG1C,EAAU,iBAAsB,WAAW,IAAM,CAC/C,IAAM,EAAe,EAAiB,EAGtC,EAAc,EAAU,gBAAgB,WAAY,EAAc,CAAC,GAClE,GAAG,EAGN,OAAU,gBAAgB,YAAc,GAQtC,EAAsB,IAAM,CAEhC,GACE,EAAO,SAAW,gBAClB,CAAC,EAAU,QAAQ,QAAQ,eAE3B,OAGF,IAAM,EAAS,EAAU,OAAO,YAAY,EACtC,EAAiB,EAAU,gBAAgB,YAC3C,EAAa,EAAU,gBAAgB,WAE7C,EAAO,QAAQ,CAAC,IAAU,CACxB,IAAwB,WAAlB,EACmB,YAAnB,GAAa,EAGb,EAAe,EAAY,EAAa,EACxC,EAAmB,EAAa,EAAiB,EACjD,EAAqB,EAAe,EAGpC,EAAqB,KAAK,IAC9B,GACA,KAAK,IAAI,EAAG,GAAsB,EAAiB,EAAE,CACvD,EAIM,EAAa,EAAM,cACvB,IAAI,EAAU,SAAS,UAAU,mBACnC,EACA,GAAI,EACD,EAA2B,MAAM,UAAY,cAC5C,EAAqB,OAG1B,GAIG,EAAe,IAAM,CAEzB,EAAoB,GAItB,GAAI,EAAO,SAAW,eACpB,EAAU,QAAQ,QAAQ,eAAiB,OAI7C,EAAU,QAAQ,QAAQ,MAAQ,OAGlC,EAAU,gBAAgB,iBAAiB,cAAe,CAAiB,EAC3E,OAAO,iBAAiB,cAAe,CAAiB,EACxD,OAAO,iBAAiB,YAAa,CAAe,EACpD,OAAO,iBAAiB,gBAAiB,CAAmB,EAG5D,EAAU,gBAAgB,iBAAiB,QAAS,EAAa,CAC/D,QAAS,EACX,CAAC,EAGD,EAAU,gBAAgB,iBAAiB,SAAU,EAAc,CACjE,QAAS,EACX,CAAC,EAGD,IAAM,EAAgB,CAAC,IAAyB,CAE9C,GAAI,EAAU,UAAY,SAAS,cACjC,OAGF,OAAQ,EAAM,SACP,YACH,GAAI,EAAU,KACZ,EAAU,KAAK,EAGf,OAAU,gBAAgB,SAAS,CACjC,KAAM,KACN,SAAU,IAAmB,OAAS,SAAW,MACnD,CAAC,EAEH,EAAM,eAAe,EACrB,UAEG,aACH,GAAI,EAAU,KACZ,EAAU,KAAK,EAGf,OAAU,gBAAgB,SAAS,CACjC,KAAM,IACN,SAAU,IAAmB,OAAS,SAAW,MACnD,CAAC,EAEH,EAAM,eAAe,EACrB,UAEG,OAEH,GAAI,EAAU,KACZ,EAAU,KAAK,CAAC,EAElB,EAAM,eAAe,EACrB,UAEG,MAEH,GAAI,EAAU,MAAQ,EAAU,OAAO,SACrC,EAAU,KAAK,EAAU,OAAO,SAAS,EAAI,CAAC,EAEhD,EAAM,eAAe,EACrB,QAYN,OAPA,EAAU,QAAQ,aAAa,WAAY,GAAG,EAC9C,EAAU,QAAQ,iBAAiB,UAAW,CAAa,EAG3D,EAAU,QAAQ,aAAa,aAAc,UAAU,EAGhD,IACF,EAGH,UAAW,IACN,EAAU,UACb,QAAS,IAAM,CAqBb,GAnBA,qBAAqB,CAAc,EAGnC,EAAU,gBAAgB,oBACxB,cACA,CACF,EACA,OAAO,oBAAoB,cAAe,CAAiB,EAC3D,OAAO,oBAAoB,YAAa,CAAe,EACvD,OAAO,oBAAoB,gBAAiB,CAAmB,EAG/D,EAAU,gBAAgB,oBAAoB,QAAS,CAAW,EAClE,EAAU,gBAAgB,oBAAoB,SAAU,CAAY,EAGpE,EAAU,QAAQ,oBAAoB,UAAW,CAAa,EAG1D,EAAU,WAAa,EAAU,UAAU,QAC7C,EAAU,UAAU,QAAQ,EAGlC,CACF,GCxXK,IAAM,GACX,CAAC,IACD,CAAC,IAAwD,CAEvD,IAAM,EAAkC,CACtC,QAAS,EAAU,QAEnB,OAAQ,CACN,SAAU,CAAC,EAAsB,IAAmB,CAElD,OADA,EAAQ,OAAO,SAAS,EAAO,CAAK,EAC7B,EAAa,QAEtB,YAAa,CAAC,IAAkB,CAE9B,OADA,EAAQ,OAAO,YAAY,CAAK,EACzB,EAAa,QAEtB,YAAa,CAAC,EAAe,IAAyB,CAEpD,OADA,EAAQ,OAAO,YAAY,EAAO,CAAK,EAChC,EAAa,QAEtB,SAAU,CAAC,IAAwC,CACjD,GACE,EAAU,WACV,GAAS,GACT,EAAQ,EAAU,UAAU,OAE5B,OAAO,EAAU,UAAU,GAE7B,OAAO,MAET,SAAU,EAAQ,OAAO,SACzB,YAAa,EAAQ,OAAO,WAC9B,EAEA,UAAW,CACT,QAAS,EAAQ,UAAU,OAC7B,EAEA,SAAU,EAAU,SAEpB,IAAI,EAAG,CAEL,OADA,EAAU,KAAK,EACR,MAGT,IAAI,EAAG,CAEL,OADA,EAAU,KAAK,EACR,MAGT,IAAI,CAAC,EAAe,CAElB,OADA,EAAU,KAAK,CAAK,EACb,MAGT,gBAAiB,EAAU,gBAE3B,QAAQ,CAAC,EAAsB,EAAgB,CAE7C,OADA,EAAQ,OAAO,SAAS,EAAO,CAAK,EAC7B,MAGT,WAAW,CAAC,EAAe,CAEzB,OADA,EAAQ,OAAO,YAAY,CAAK,EACzB,MAGT,UAAU,EAAG,CAEX,OADA,EAAU,WAAW,EACd,MAGT,WAAW,EAAG,CAEZ,OADA,EAAU,YAAY,EACf,MAGT,eAAe,CAAC,EAAgB,CAC9B,GAAI,EAAU,gBACZ,EAAU,gBAAgB,CAAM,EAElC,OAAO,MAGT,MAAM,CAAC,EAAa,CAClB,GAAI,EAAU,OACZ,EAAU,OAAO,CAAG,EAEtB,OAAO,MAGT,OAAO,EAAG,CACR,EAAQ,UAAU,QAAQ,GAI5B,EAAE,CAAC,EAAe,EAAmB,CACnC,GAAI,EAAU,GACZ,EAAU,GAAG,EAAO,CAAO,EACtB,QAAI,EAAU,QAAQ,iBAC3B,EAAU,QAAQ,iBAAiB,EAAO,CAAwB,EAEpE,OAAO,MAGT,GAAG,CAAC,EAAe,EAAmB,CACpC,GAAI,EAAU,IACZ,EAAU,IAAI,EAAO,CAAO,EACvB,QAAI,EAAU,QAAQ,oBAC3B,EAAU,QAAQ,oBAChB,EACA,CACF,EAEF,OAAO,MAGT,QAAQ,IAAI,EAAmB,CAC7B,GAAI,EAAU,SACZ,EAAU,SAAS,GAAG,CAAO,EAE7B,OAAQ,QAAQ,CAAC,IAAQ,EAAU,QAAQ,UAAU,IAAI,CAAG,CAAC,EAE/D,OAAO,KAEX,EAEA,OAAO,GCrKX,IAUO,IAAM,GAAgC,CAC3C,aAAc,GAAkB,cAChC,KAAM,GAAkB,KACxB,WAAY,GAAqB,MACjC,mBAAoB,GAAkB,oBACtC,aAAc,GAAkB,cAChC,IAAK,GAAkB,IACvB,OAAQ,WACR,YAAa,EACf,EAOa,GAAmB,CAAC,EAAyB,CAAC,IACzD,EAAsB,GAAe,EAAQ,UAAU,EAO5C,GAAmB,CAAC,IAA2B,CAE1D,IAAM,EAAkC,CACtC,KAAM,SACN,uBAAwB,WACxB,YAAa,QACf,EAGM,EAAiB,CACrB,kBAAmB,EAAO,WAC1B,YAAa,EAAO,KAAO,OAAS,OACtC,EAEA,OAAO,EAAoB,EAAQ,CACjC,IAAK,MACL,WAAY,IAAK,KAAe,CAAe,EAC/C,UAAW,EAAO,MAClB,cAAe,CACb,QAAS,GACT,MAAO,GACP,KAAM,EACR,CACF,CAAC,GL6BI,IAAM,GAAiB,CAC5B,EAAyB,CAAC,IACJ,CAEtB,EAAO,OAAS,EAAO,QAAU,eACjC,EAAO,eACL,EAAO,gBAAkB,GAAyB,EAAO,MAAM,EAEjE,IAAM,EAAa,GAAiB,CAAM,EAE1C,GAAI,CAUF,IAAM,EAAoB,IAPJ,EACpB,EACA,EAAW,EACX,EAAY,GAAiB,CAAU,CAAC,CAC1C,EAAE,CAAU,CAGiC,EAG7C,GAAkB,EAAmB,CAAM,EAG3C,IAAM,EAAkB,GAAW,CAAU,EAAE,CAAiB,EAG1D,EAAoB,GAAS,CAAU,EAAE,CAAe,EACxD,EAAyB,EAAc,EAAE,CAAiB,EAG1D,EAAY,CAChB,OAAQ,CACN,SAAU,EAAuB,OAAO,SACxC,YAAa,EAAuB,OAAO,YAC3C,YAAa,EAAuB,OAAO,YAC3C,SAAU,EAAuB,OAAO,SACxC,YAAa,EAAuB,OAAO,WAC7C,EACA,UAAW,CACT,QAAS,EAAuB,UAAU,OAC5C,CACF,EAGM,EAAW,GAAQ,CAAS,EAAE,CAAsB,EAM1D,OAHA,EAAS,QAAQ,QAAQ,OAAS,EAAO,OACzC,EAAS,QAAQ,QAAQ,eAAiB,EAAO,eAE1C,EACP,MAAO,EAAO,CAEd,MADA,QAAQ,MAAM,2BAA4B,CAAK,EACrC,MAAM,8BAA+B,EAAgB,SAAS,IAe5E,SAAS,EAAwB,CAC/B,EACwB,CACxB,OAAQ,OAED,mBACA,WACA,cACH,MAAO,WAGJ,cACH,MAAO,kBAIP,MAAO,WAgBb,SAAS,EAAiB,CAAC,EAAgB,EAA8B,CAOvE,OALA,EAAU,QAAQ,UAAU,IAC1B,GAAG,EAAU,SAAS,UAAU,aAAa,EAAO,QACtD,EAGQ,EAAO,YACR,eAGH,EAAU,QAAQ,QAAQ,eAAiB,OAC3C,EAAU,QAAQ,QAAQ,OAAS,eACnC,UAEG,cAGH,EAAU,QAAQ,MAAM,SAAW,UACnC,EAAU,QAAQ,QAAQ,OAAS,cACnC,UAEG,OAOH,GAJA,EAAU,QAAQ,QAAQ,eAAiB,OAC3C,EAAU,QAAQ,QAAQ,OAAS,OAG/B,EAAO,SACT,EAAU,QAAQ,QAAQ,SAAW,OAEvC,UAEG,cAGH,EAAU,QAAQ,MAAM,MAAQ,OAChC,EAAU,QAAQ,MAAM,OAAS,OACjC,EAAU,QAAQ,MAAM,SAAW,QACnC,EAAU,QAAQ,MAAM,UAAY,QACpC,EAAU,QAAQ,QAAQ,eAAiB,OAC3C,EAAU,QAAQ,QAAQ,OAAS,cAGnC,EAAO,eAAiB,OACxB,MAIJ,GAAI,EAAO,iBAAmB,OAC5B,EAAU,QAAQ,QAAQ,WAAa,OAEvC,OAAU,QAAQ,QAAQ,WAAa,QAI3C,IAAe,MM3Of,IACA,IACA,ICNO,IAAM,GACX,EAAG,WAAU,YAAW,eACxB,CAAC,KAAiD,IAC5C,EACJ,QAAS,EAAU,QACnB,MAAO,EAAU,MAGjB,QAAQ,EAAY,CAClB,OAAO,EAAU,UAAU,GAG7B,QAAQ,CAAC,EAA4C,CAEnD,GAAI,OAAO,IAAU,UACnB,GAAI,EACF,EAAU,MAAM,EAEhB,OAAU,QAAQ,EAIjB,QAAI,OAAO,IAAU,SAExB,GADoB,IAAU,QAAU,IAAU,IAEhD,EAAU,MAAM,EAEhB,OAAU,QAAQ,EAGtB,OAAO,MAIT,iBAAiB,EAAW,CAC1B,OAAO,EAAU,OAAO,OAAS,IAGnC,iBAAiB,CAAC,EAAkC,CAClD,GAAI,EAAU,MACZ,EAAU,MAAM,MAAQ,EAE1B,OAAO,MAIT,KAAK,EAAsB,CAEzB,OADA,EAAU,MAAM,EACT,MAGT,OAAO,EAAsB,CAE3B,OADA,EAAU,QAAQ,EACX,MAGT,MAAM,EAAsB,CAE1B,OADA,EAAU,OAAO,EACV,MAGT,SAAS,EAAY,CACnB,OAAO,EAAU,UAAU,GAG7B,gBAAgB,CAAC,EAAmC,CAElD,OADA,EAAU,mBAAmB,CAAK,EAC3B,MAIT,QAAQ,CAAC,EAAiC,CAExC,OADA,EAAU,MAAM,QAAQ,CAAI,EACrB,MAGT,QAAQ,EAAW,CACjB,OAAO,EAAU,MAAM,QAAQ,GAAK,IAItC,EAAE,CAAC,EAAe,EAAsC,CAEtD,OADA,EAAU,KAAK,EAAO,CAAO,EACtB,MAGT,GAAG,CAAC,EAAe,EAAsC,CAEvD,OADA,EAAU,MAAM,EAAO,CAAO,EACvB,MAIT,MAAM,EAAsB,CAE1B,OADA,EAAS,OAAO,EACT,MAGT,OAAO,EAAsB,CAE3B,OADA,EAAS,QAAQ,EACV,MAGT,OAAO,EAAS,CACd,EAAU,QAAQ,EAEtB,GChHF,IASO,IAAM,GAAgC,CAC3C,QAAS,SACT,cAAe,KACjB,EAOa,GAAmB,CAAC,EAAyB,CAAC,IACzD,EAAsB,GAAe,EAAQ,UAAU,EAO5C,GAAmB,CAAC,IAC/B,EAAoB,EAAQ,CAC1B,IAAK,MACL,UAAW,EAAO,MAClB,YAAa,EACf,CAAC,EAMU,GACX,CAAC,IACD,CAAC,IAA4C,CAC3C,IAAM,EAAO,SAAS,cAAc,MAAM,EAS1C,OARA,EAAK,UAAY,GAAG,EAAO,uBAC3B,EAAK,UAAY;AAAA;AAAA;AAAA;AAAA,IAMjB,EAAU,QAAQ,YAAY,CAAI,EAC3B,GAOE,GACX,CAAC,IACD,CAAC,IAA4C,CAC3C,IAAM,EAAW,EAAO,eAAiB,MACnC,EAAgB,GAAG,EAAO,0BAA0B,IAI1D,OAFA,EAAU,QAAQ,UAAU,IAAI,CAAa,EAEtC,GAQE,GAAe,CAAC,KAAqC,CAChE,SAAU,CACR,OAAQ,EAAK,UAAU,OACvB,QAAS,EAAK,UAAU,OAC1B,EACA,UAAW,CACT,QAAS,EAAK,WAAW,OAC3B,EACA,UAAW,CACT,MAAO,EAAK,WAAW,MACvB,QAAS,EAAK,WAAW,QACzB,OAAQ,EAAK,WAAW,OACxB,UAAW,EAAK,WAAW,SAC7B,CACF,GF1CA,IAAM,GAAuB,CAAC,EAA2C,IAA0C,CACjH,IAAM,EAAW,GAAc,CAAM,EAAE,CAAS,EAGhD,GAAI,EAAO,cACT,EAAS,MAAM,cAAgB,GAUjC,OANA,EAAS,iBAAmB,CAAC,IAAmB,CAG9C,OAFA,EAAS,MAAM,cAAgB,EAC/B,EAAS,QAAQ,UAAU,OAAO,GAAG,EAAO,iCAAkC,CAAK,EAC5E,GAGF,GAuDH,GAAiB,CAAC,EAAyB,CAAC,IAAyB,CACzE,IAAM,EAAa,GAAiB,CAAM,EAE1C,GAAI,CAiBF,OAdiB,EACf,EACA,EAAW,EACX,EAAY,GAAiB,CAAU,CAAC,EACxC,GAAU,CAAU,EACpB,GAAc,CAAU,EACxB,GAAc,CAA6B,EAC3C,GAAkB,CAAU,EAC5B,KAAa,GAAqB,EAA6C,CAAU,EACzF,GAAa,CAAU,EACvB,EAAc,EACd,KAAQ,GAAQ,GAAa,CAAI,CAAC,EAAE,CAAI,CAC1C,EAAE,CAAU,EAGZ,MAAO,EAAO,CAEd,MADA,QAAQ,MAAM,2BAA4B,aAAiB,MAAQ,EAAM,QAAU,OAAO,CAAK,CAAC,EACtF,MAAM,8BAA8B,aAAiB,MAAQ,EAAM,QAAU,OAAO,CAAK,GAAG,IAI3F,MG9If,IACA,IACA,ICqBO,IAAM,GACX,EAAG,WAAU,eACb,CAAC,IAAoD,CAEnD,IAAI,EAAa,EAAU,QAAQ,UAAU,SAC3C,GAAG,EAAU,SAAS,MAAM,aAC9B,EAGI,EAAY,EAAU,QAAQ,aAAa,YAAY,GAAK,KAG1D,EAA8B,CAClC,SACA,WACA,WACA,SACA,SACA,QACA,YACF,EACI,EAAqC,KAGzC,QAAW,KAAK,EACd,GACE,EAAU,QAAQ,UAAU,SAC1B,GAAG,EAAU,SAAS,MAAM,MAAM,GACpC,EACA,CACA,EAAiB,EACjB,MAIJ,MAAO,IACD,EACJ,QAAS,EAAU,QAEnB,QAAQ,EAAG,CAET,IAAM,EAAY,EAAU,QAAQ,aAAa,YAAY,EAG7D,GAAI,IAAc,KAEhB,OADA,EAAY,EACL,EAIT,GAAI,IAAc,KAEhB,OADA,EAAU,QAAQ,aAAa,aAAc,CAAS,EAC/C,EAIT,IAAM,EAAc,EAAU,QAAQ,cACpC,IAAI,EAAU,SAAS,MAAM,QAC/B,EACA,GAAI,GAAe,EAAY,YAAa,CAE1C,IAAM,EAAO,EAAY,YACzB,GAAI,EAAK,SAAS,QAAQ,EACxB,EAAY,EAAK,QAAQ,SAAU,EAAE,EAAE,YAAY,EAEnD,OAAY,EAAK,YAAY,EAAE,QAAQ,OAAQ,GAAG,EAKpD,OADA,EAAU,QAAQ,aAAa,aAAc,CAAS,EAC/C,EAGT,OAAO,MAGT,QAAQ,CAAC,EAAe,CACtB,GAAI,IAAU,MAAQ,IAAU,OAC9B,EAAY,EACZ,EAAU,QAAQ,aAAa,aAAc,CAAK,EAElD,OAAY,KACZ,EAAU,QAAQ,gBAAgB,YAAY,EAEhD,OAAO,MAGT,UAAU,EAAG,CACX,OAAO,EAAU,QAAQ,aAAa,eAAe,IAAM,QAG7D,MAAM,EAAG,CAOP,OANA,EAAS,OAAO,EAChB,EAAU,QAAQ,UAAU,OAC1B,GAAG,EAAU,SAAS,MAAM,aAC9B,EACA,EAAU,QAAQ,aAAa,gBAAiB,OAAO,EACvD,EAAU,QAAQ,aAAa,WAAY,GAAG,EACvC,MAGT,OAAO,EAAG,CAOR,OANA,EAAS,QAAQ,EACjB,EAAU,QAAQ,UAAU,IAC1B,GAAG,EAAU,SAAS,MAAM,aAC9B,EACA,EAAU,QAAQ,aAAa,gBAAiB,MAAM,EACtD,EAAU,QAAQ,aAAa,WAAY,IAAI,EACxC,MAGT,OAAO,CAAC,EAAiB,CACvB,IAAM,EAAoB,IAAI,EAAU,SAAS,MAAM,YACjD,EACJ,EAAU,QAAQ,cAAc,CAAiB,GACjD,EAAU,QAEN,EAAe,IAAI,EAAU,SAAS,MAAM,SAC9C,EAAc,EAAU,QAAQ,cAAc,CAAY,EAE9D,GAAI,CAAC,GAAe,EAAS,CAC3B,EAAc,SAAS,cAAc,MAAM,EAC3C,EAAY,UAAY,GAAG,EAAU,SAAS,MAAM,SAGpD,IAAM,EAAc,EAAU,QAAQ,cACpC,IAAI,EAAU,SAAS,MAAM,gBAC/B,EACA,GAAI,EACF,EAAiB,aAAa,EAAa,EAAY,WAAW,EAElE,OAAiB,aACf,EACA,EAAiB,UACnB,EAIJ,GAAI,GAIF,GAHA,EAAY,YAAc,GAAW,GAGjC,CAAC,GAAW,EAAY,WAC1B,EAAY,WAAW,YAAY,CAAW,EAIlD,OAAO,MAGT,OAAO,EAAG,CACR,IAAM,EAAc,EAAU,QAAQ,cACpC,IAAI,EAAU,SAAS,MAAM,QAC/B,EACA,OAAO,EAAc,EAAY,aAAe,GAAK,IAGvD,OAAO,CAAC,EAAc,CACpB,OAAO,KAAK,eAAe,CAAI,GAGjC,OAAO,EAAG,CACR,IAAM,EAAc,EAAU,QAAQ,cACpC,IAAI,EAAU,SAAS,MAAM,gBAC/B,EACA,OAAO,EAAc,EAAY,UAAY,IAG/C,cAAc,CAAC,EAAc,CAC3B,IAAM,EACJ,EAAU,QAAQ,cAChB,IAAI,EAAU,SAAS,MAAM,WAC/B,GAAK,EAAU,QACX,EAAsB,IAAI,EAAU,SAAS,MAAM,iBACrD,EACF,EAAU,QAAQ,cAAc,CAAmB,EAErD,GAAI,CAAC,GAAsB,EACzB,EAAqB,SAAS,cAAc,MAAM,EAClD,EAAmB,UAAY,GAAG,EAAU,SAAS,MAAM,iBAG3D,EAAiB,aACf,EACA,EAAiB,UACnB,EAGF,GAAI,GAIF,GAHA,EAAmB,UAAY,GAAQ,GAGnC,CAAC,GAAQ,EAAmB,WAC9B,EAAmB,WAAW,YAAY,CAAkB,EAIhE,OAAO,MAGT,eAAe,CAAC,EAAc,EAAyC,CACrE,IAAM,EACJ,EAAU,QAAQ,cAChB,IAAI,EAAU,SAAS,MAAM,WAC/B,GAAK,EAAU,QACX,EAAuB,IAAI,EAAU,SAAS,MAAM,kBACtD,EACF,EAAU,QAAQ,cAAc,CAAoB,EAEtD,GAAI,CAAC,GAAuB,GAQ1B,GAPA,EAAsB,SAAS,cAAc,MAAM,EACnD,EAAoB,UAAY,GAAG,EAAU,SAAS,MAAM,kBAG5D,EAAiB,YAAY,CAAmB,EAG5C,EACF,EAAoB,iBAAiB,QAAS,CAAC,IAAM,CACnD,EAAE,gBAAgB,EAClB,EAAQ,IAAgC,EACzC,EAIL,GAAI,GAIF,GAHA,EAAoB,UAAY,GAAQ,GAGpC,CAAC,GAAQ,EAAoB,WAC/B,EAAoB,WAAW,YAAY,CAAmB,EAIlE,OAAO,MAGT,UAAU,EAAG,CACX,OAAO,GAGT,WAAW,CAAC,EAAmB,CAG7B,GAFA,EAAa,CAAC,CAAC,EAEX,EACF,EAAU,QAAQ,UAAU,IAC1B,GAAG,EAAU,SAAS,MAAM,aAC9B,EACA,EAAU,QAAQ,aAAa,gBAAiB,MAAM,EAEtD,OAAU,QAAQ,UAAU,OAC1B,GAAG,EAAU,SAAS,MAAM,aAC9B,EACA,EAAU,QAAQ,aAAa,gBAAiB,OAAO,EAGzD,OAAO,MAGT,cAAc,EAAG,CACf,OAAO,KAAK,YAAY,CAAC,CAAU,GAGrC,UAAU,EAAG,CACX,OAAO,GAGT,UAAU,CAAC,EAAsB,CAE/B,GAAI,EACF,EAAU,QAAQ,UAAU,OAC1B,GAAG,EAAU,SAAS,MAAM,MAAM,GACpC,EAIF,GAAI,EACF,EAAU,QAAQ,UAAU,IAC1B,GAAG,EAAU,SAAS,MAAM,MAAM,GACpC,EAIF,OADA,EAAiB,EACV,MAGT,OAAO,EAAG,CACR,EAAU,QAAQ,EAEtB,GCxTJ,IA0BO,IAAM,GAA4B,CACvC,QAAS,SACT,OAAQ,EACV,EAOa,GAAmB,CAAC,EAAqB,CAAC,IACrD,EAAsB,GAAe,EAAQ,MAAM,EAOxC,GAAmB,CAAC,IAAuB,CAEtD,IAAM,EAAkC,CACtC,KAAM,SACN,SAAU,GACZ,EAGA,GAAI,EAAO,WAAa,GACtB,EAAW,iBAAmB,OAIhC,GAAI,EAAO,WAAa,GACtB,EAAW,iBAAmB,OACzB,QAAI,EAAO,WAAa,GAC7B,EAAW,iBAAmB,QAIhC,IAAM,EAAY,CAChB,EAAO,MACP,EAAO,SAAW,GAAG,EAAO,wBAA0B,IACxD,EAEA,OAAO,EAAoB,EAAQ,CACjC,IAAK,MACL,aACA,YACA,cAAe,CACb,MAAO,CAAC,IACN,EAAU,QAAQ,aAAa,eAAe,IAAM,OACtD,QAAS,CAAC,EAA0B,IAAyB,CAE3D,GAAI,EAAM,MAAQ,KAAO,EAAM,MAAQ,QAGrC,OAFA,EAAM,eAAe,EACrB,EAAU,QAAQ,MAAM,EACjB,GAET,MAAO,IAET,MAAO,GACP,KAAM,EACR,CACF,CAAC,GAQU,GAAe,CAAC,KAAyB,CACpD,SAAU,CACR,OAAQ,IAAM,EAAK,UAAU,OAAO,EACpC,QAAS,IAAM,EAAK,UAAU,QAAQ,CACxC,EACA,UAAW,CACT,QAAS,IAAM,EAAK,WAAW,UAAU,CAC3C,CACF,GFtFA,IAAM,GAAa,CAAC,EAAqB,CAAC,IAAqB,CAC7D,IAAM,EAAa,GAAiB,CAAM,EAE1C,GAAI,CAEF,IAAM,EAAO,EACX,EACA,EAAW,EACX,EAAY,GAAiB,CAAU,CAAC,EACxC,GAAY,CAAU,EACtB,GAAa,CAAU,EACvB,GAAW,CAAU,EACrB,EAAc,CAChB,EAAE,CAAU,EAGN,EAAmB,SAAS,cAAc,KAAK,EASrD,GARA,EAAiB,UAAY,GAAG,EAAK,SAAS,MAAM,YACpD,EAAiB,MAAM,QAAU,OACjC,EAAiB,MAAM,WAAa,SACpC,EAAiB,MAAM,IAAM,MAC7B,EAAiB,MAAM,MAAQ,OAC/B,EAAK,QAAQ,YAAY,CAAgB,EAGrC,EAAO,aAAe,EAAO,KAAM,CACrC,IAAM,EAAqB,SAAS,cAAc,MAAM,EACxD,EAAmB,UAAY,GAAG,EAAK,SAAS,MAAM,iBACtD,EAAmB,UAAY,EAAO,aAAe,EAAO,MAAQ,GACpE,EAAiB,YAAY,CAAkB,EAIjD,GAAI,EAAO,KAAM,CACf,IAAM,EAAc,SAAS,cAAc,MAAM,EACjD,EAAY,UAAY,GAAG,EAAK,SAAS,MAAM,SAC/C,EAAY,YAAc,EAAO,KACjC,EAAiB,YAAY,CAAW,EAI1C,GAAI,EAAO,aAAc,CACvB,IAAM,EAAsB,SAAS,cAAc,MAAM,EAKzD,GAJA,EAAoB,UAAY,GAAG,EAAK,SAAS,MAAM,kBACvD,EAAoB,UAAY,EAAO,aAGnC,EAAO,oBACT,EAAoB,iBAAiB,QAAS,CAAC,IAAM,CACnD,EAAE,gBAAgB,EAClB,EAAO,oBAAoB,CAAgC,EAC5D,EAGH,EAAiB,YAAY,CAAmB,EAIlD,GAAI,EAAO,SACT,EAAK,QAAQ,UAAU,IAAI,GAAG,EAAK,SAAS,MAAM,aAAa,EAC/D,EAAK,QAAQ,aAAa,gBAAiB,MAAM,EAInD,GAAI,EAAO,MACT,EAAK,QAAQ,aAAa,aAAc,EAAO,KAAK,EAItD,IAAM,EAAe,GAAQ,GAAa,CAAI,CAAC,EAAE,CAAI,EAGrD,GAAI,CAAC,EAAK,QAAQ,aAAa,YAAY,GAAK,EAAO,KACrD,EAAa,SAAS,EAWxB,IALE,EAAO,UAAY,UACnB,EAAO,UAAY,UACnB,EAAO,UAAY,cACnB,EAAO,aAEkB,CAAC,EAAO,iBACjC,EAAK,QAAQ,iBAAiB,QAAS,IAAM,CAC3C,GAAI,EAAa,WAAW,EAAG,OAE/B,IAAM,EAAc,EAAa,WAAW,EAC5C,EAAa,eAAe,EAC5B,IAAM,EAAgB,EAAa,WAAW,EAG9C,GAAI,EAAO,UAAY,IAAgB,EACrC,EAAO,SAAS,EAAe,CAAY,EAI7C,GAAI,EAAO,SACT,EAAO,SAAS,CAAY,EAE/B,EAGH,OAAO,EACP,MAAO,EAAO,CAEd,MADA,QAAQ,MAAM,uBAAwB,CAAK,EACjC,MAAM,0BAA2B,EAAgB,SAAS,IAIzD,MGhIf,IACA,ICMO,IAAM,GAAgB,CAAC,IAAwB,KAAa,CAEjE,IAAM,EAAQ,CACZ,WAAY,EAAO,aAAe,GAClC,SAAU,EAAO,WAAa,EAChC,EAEA,MAAO,IACF,EAGH,OAAQ,CAMN,aAAa,CAAC,EAAuB,CAGnC,GAFA,EAAM,WAAa,EAEf,EAAU,QACZ,GAAI,EACF,EAAU,QAAQ,UAAU,IAAI,GAAG,EAAU,SAAS,OAAO,eAAe,EAE5E,OAAU,QAAQ,UAAU,OAAO,GAAG,EAAU,SAAS,OAAO,eAAe,EAInF,OAAO,MAOT,YAAY,EAAG,CACb,OAAO,EAAM,YAQf,WAAW,CAAC,EAAqB,CAG/B,GAFA,EAAM,SAAW,EAEb,EAAU,QACZ,GAAI,EACF,EAAU,QAAQ,UAAU,IAAI,GAAG,EAAU,SAAS,OAAO,aAAa,EAE1E,OAAU,QAAQ,UAAU,OAAO,GAAG,EAAU,SAAS,OAAO,aAAa,EAIjF,OAAO,MAOT,UAAU,EAAG,CACX,OAAO,EAAM,SAEjB,CACF,GClEK,IAAM,GAAgB,CAAC,IAAwB,CAAC,IAAc,CAInE,MAAO,IACF,EACH,cAJoB,CAAC,EAOrB,SAAS,EAAG,CACV,GAAI,OAAO,EAAU,YAAc,WACjC,EAAU,UAAU,EAItB,GAAI,MAAM,QAAQ,EAAO,KAAK,GAAK,EAAO,MAAM,OAAS,EACvD,EAAO,MAAM,QAAQ,CAAC,IAAe,CACnC,KAAK,OAAO,UAAU,CAAU,EACjC,EAGP,GCqBK,IAAM,GAAe,CAE1B,OAAQ,SAGR,IAAK,MAGL,OAAQ,QACV,EChDO,IAAM,GAAiB,CAAC,IAAwB,CAAC,IAAc,CAEpE,GAAI,CAAC,EAAU,QAEb,OADA,QAAQ,KAAK,qDAAqD,EAC3D,EAIT,IAAM,EAAiB,CACrB,OAAQ,CAAC,EACT,IAAK,CAAC,EACN,OAAQ,CAAC,CACX,EAGI,EAAmB,GAOjB,EAAgB,CAAC,KAAc,IAAS,CAC5C,GAAI,EAAe,GACjB,EAAe,GAAW,QAAQ,CAAC,IAAY,EAAQ,GAAG,CAAI,CAAC,GAI7D,EAAkB,CAAC,IAAgC,CAEvD,GAAI,EAAa,WAAW,EAC1B,EAAa,QAAQ,UAAU,IAC7B,GAAG,EAAU,SAAS,MAAM,aAC9B,EACA,EAAa,QAAQ,aAAa,gBAAiB,MAAM,EAEzD,OAAa,QAAQ,UAAU,OAC7B,GAAG,EAAU,SAAS,MAAM,aAC9B,EACA,EAAa,QAAQ,aAAa,gBAAiB,OAAO,EAG5D,GAAI,CAAC,EAAO,aAcV,GAZA,EAAU,cAAc,QAAQ,CAAC,IAAwB,CACvD,GAAI,IAAS,GAAgB,EAAK,WAAW,EAC3C,EAAK,YAAY,EAAK,EACtB,EAAK,QAAQ,UAAU,OACrB,GAAG,EAAU,SAAS,MAAM,aAC9B,EACA,EAAK,QAAQ,aAAa,gBAAiB,OAAO,EAErD,EAIG,CAAC,EAAa,WAAW,GAAK,EAAiB,EAAE,SAAW,EAC9D,EAAa,YAAY,EAAI,EAC7B,EAAa,QAAQ,UAAU,IAC7B,GAAG,EAAU,SAAS,MAAM,aAC9B,EACA,EAAa,QAAQ,aAAa,gBAAiB,MAAM,EAW7D,IAAM,EAHgB,EAAU,cAAc,OAAO,CAAC,IACpD,EAAK,WAAW,CAClB,EACqC,IAAI,CAAC,IAAS,EAAK,SAAS,CAAC,EAC5D,EAAe,EAAe,EAAa,SAAS,EAAI,KAG9D,GAAI,OAAO,EAAO,WAAa,WAC7B,EAAO,SAAS,EAAgB,CAAY,EAI9C,EAAc,GAAa,OAAQ,EAAgB,CAAY,GAO3D,EAA2B,CAAC,IAAU,CAC1C,GAAI,EAAU,cAAc,SAAW,EAAG,OAG1C,GACE,CAAC,CACC,YACA,aACA,UACA,YACA,QACA,GACF,EAAE,SAAS,EAAM,GAAG,EAEpB,OAIF,GAAI,EAAM,MAAQ,SAAW,EAAM,MAAQ,KACzC,GACE,GAAoB,GACpB,EAAmB,EAAU,cAAc,OAC3C,CACA,EAAM,eAAe,EACrB,IAAM,EAAO,EAAU,cAAc,GACrC,GAAI,CAAC,EAAK,WAAW,EAAG,CAItB,GAHA,EAAK,eAAe,EAGhB,EAAK,WAAW,EAClB,EAAK,QAAQ,UAAU,IACrB,GAAG,EAAU,SAAS,MAAM,aAC9B,EACA,EAAK,QAAQ,aAAa,gBAAiB,MAAM,EAEjD,OAAK,QAAQ,UAAU,OACrB,GAAG,EAAU,SAAS,MAAM,aAC9B,EACA,EAAK,QAAQ,aAAa,gBAAiB,OAAO,EAGpD,EAAgB,CAAI,EAEtB,QAKJ,GACE,CAAC,YAAa,aAAc,UAAW,WAAW,EAAE,SAAS,EAAM,GAAG,EACtE,CACA,EAAM,eAAe,EACrB,IAAM,EAAa,EAAU,QAAU,EAAU,OAAO,WAAW,EAC/D,EAAW,EAGf,GAAI,IAAqB,GACvB,EAAW,EAGX,QACG,GAAc,EAAM,MAAQ,WAC5B,CAAC,GAAc,EAAM,MAAQ,YAE9B,EAAW,KAAK,IAAI,EAAG,EAAmB,CAAC,EACtC,QACJ,GAAc,EAAM,MAAQ,aAC5B,CAAC,GAAc,EAAM,MAAQ,aAE9B,EAAW,KAAK,IACd,EAAU,cAAc,OAAS,EACjC,EAAmB,CACrB,EAKJ,GAAI,IAAa,EAAkB,CAEjC,GACE,GAAoB,GACpB,EAAmB,EAAU,cAAc,OAE3C,EAAU,cAAc,GAAkB,QAAQ,KAAK,EAQzD,GAJA,EAAmB,EACnB,EAAU,cAAc,GAAkB,QAAQ,MAAM,EAGpD,EAAU,QAAU,EAAU,OAAO,aAAa,EACpD,EAAa,CAAgB,KAU/B,EAAe,CAAC,IAAgB,CAEpC,GAAI,EADiB,EAAU,QAAU,EAAU,OAAO,aAAa,GACpD,OAEnB,IAAM,EACJ,OAAO,IAAgB,SACnB,EACA,EAAU,cAAc,QAAQ,CAAW,EAEjD,GAAI,GAAS,GAAK,EAAQ,EAAU,cAAc,OAAQ,CACxD,IAAM,EAAc,EAAU,cAAc,GAAO,QAC7C,EAAY,EAAU,eAAiB,EAAU,QAGjD,EAAgB,EAAU,sBAAsB,EAChD,EAAW,EAAY,sBAAsB,EAInD,GAFmB,EAAU,QAAU,EAAU,OAAO,WAAW,EAEnD,CAEd,IAAM,EACJ,EAAY,UACZ,EAAU,UACV,EAAc,OAAS,EACvB,EAAS,OAAS,EAEpB,EAAU,SAAS,CACjB,IAAK,KAAK,IAAI,EAAG,CAAS,EAC1B,SAAU,QACZ,CAAC,EACI,KAEL,IAAM,EACJ,EAAY,WACZ,EAAU,WACV,EAAc,MAAQ,EACtB,EAAS,MAAQ,EAEnB,EAAU,SAAS,CACjB,KAAM,KAAK,IAAI,EAAG,CAAU,EAC5B,SAAU,QACZ,CAAC,KAUD,EAAU,CAAC,IAAe,CAG9B,IAAM,EAAe,GAAW,IAC3B,EACH,iBAAkB,GAElB,SAAU,EAAW,QACvB,CAAC,EAGK,EAAY,EAAU,eAAiB,EAAU,QAGjD,EAAW,SAAS,uBAAuB,EAoCjD,OAnCA,EAAS,YAAY,EAAa,OAAO,EACzC,EAAU,YAAY,CAAQ,EAE9B,EAAU,cAAc,KAAK,CAAY,EAGzC,EAAa,QAAQ,iBAAiB,QAAS,IAAM,CACnD,GAAI,CAAC,EAAa,WAAW,EAAG,CAI9B,GAHA,EAAa,eAAe,EAGxB,EAAa,WAAW,EAC1B,EAAa,QAAQ,UAAU,IAC7B,GAAG,EAAU,SAAS,MAAM,aAC9B,EACA,EAAa,QAAQ,aAAa,gBAAiB,MAAM,EAEzD,OAAa,QAAQ,UAAU,OAC7B,GAAG,EAAU,SAAS,MAAM,aAC9B,EACA,EAAa,QAAQ,aAAa,gBAAiB,OAAO,EAG5D,EAAgB,CAAY,EAG5B,EAAmB,EAAU,cAAc,QAAQ,CAAY,GAElE,EAED,EAAa,QAAQ,iBAAiB,UAAW,CAAwB,EAGzE,EAAc,GAAa,IAAK,CAAY,EAErC,GAOH,EAAa,CAAC,IAAgB,CAClC,IAAM,EACJ,OAAO,IAAgB,SACnB,EACA,EAAU,cAAc,QAAQ,CAAW,EAEjD,GAAI,GAAS,GAAK,EAAQ,EAAU,cAAc,OAAQ,CACxD,IAAM,EAAO,EAAU,cAAc,GASrC,GANA,EAAc,GAAa,OAAQ,CAAI,EAEvC,EAAK,QAAQ,EACb,EAAU,cAAc,OAAO,EAAO,CAAC,EAGnC,IAAU,EACZ,EAAmB,GACd,QAAI,EAAQ,EACjB,MASA,EAAW,IAAM,CACrB,MAAO,CAAC,GAAG,EAAU,aAAa,GAO9B,EAAmB,IAAM,CAC7B,OAAO,EAAU,cAAc,OAAO,CAAC,IACrC,EAAK,WAAW,CAClB,GAOI,EAAoB,IAAM,CAC9B,OAAO,EAAiB,EAAE,IAAI,CAAC,IAAwB,EAAK,SAAS,CAAC,GAQlE,EAAgB,CACpB,EACA,EAAe,GACf,EAAY,CAAC,EAAO,cACjB,CACH,IAAM,EAAa,MAAM,QAAQ,CAAM,EAAI,EAAS,CAAC,CAAM,EACvD,EAAmB,GAEvB,GAAI,EAEF,EAAU,cAAc,QAAQ,CAAC,IAAwB,CACvD,IAAM,EAAY,EAAK,SAAS,EAEhC,GAAI,CADiB,EAAW,SAAS,CAAS,GAC7B,EAAK,WAAW,EACnC,EAAK,YAAY,EAAK,EACtB,EAAK,QAAQ,UAAU,OACrB,GAAG,EAAU,SAAS,MAAM,aAC9B,EACA,EAAK,QAAQ,aAAa,gBAAiB,OAAO,EAClD,EAAmB,GAEtB,EAgBH,GAZA,EAAU,cAAc,QAAQ,CAAC,IAAwB,CACvD,IAAM,EAAY,EAAK,SAAS,EAEhC,GADqB,EAAW,SAAS,CAAS,GAC9B,CAAC,EAAK,WAAW,EACnC,EAAK,YAAY,EAAI,EACrB,EAAK,QAAQ,UAAU,IAAI,GAAG,EAAU,SAAS,MAAM,aAAa,EACpE,EAAK,QAAQ,aAAa,gBAAiB,MAAM,EACjD,EAAmB,GAEtB,EAGG,GAAoB,EAAc,CACpC,IAAM,EAAiB,EAAkB,EACzC,EAAc,GAAa,OAAQ,EAAgB,IAAI,IAQrD,EAAiB,CAAC,EAAe,KAAS,CAE9C,IAAM,EADiB,EAAkB,EACD,OAAS,EASjD,GAPA,EAAU,cAAc,QAAQ,CAAC,IAAwB,CACvD,EAAK,YAAY,EAAK,EACtB,EAAK,QAAQ,UAAU,OAAO,GAAG,EAAU,SAAS,MAAM,aAAa,EACvE,EAAK,QAAQ,aAAa,gBAAiB,OAAO,EACnD,EAGG,GAAoB,EACtB,EAAc,GAAa,OAAQ,CAAC,EAAG,IAAI,GAOzC,EAA2B,IAAM,CAErC,EAAU,cAAc,QAAQ,CAAC,IAAwB,CACvD,EAAK,QAAQ,iBAAiB,UAAW,CAAwB,EAClE,GAMG,EAA4B,IAAM,CACtC,EAAU,cAAc,QAAQ,CAAC,IAAwB,CACvD,EAAK,QAAQ,oBAAoB,UAAW,CAAwB,EACrE,GAOH,GAHA,EAAyB,EAGrB,EAAU,QACZ,EAAU,QAAQ,iBAAiB,UAAW,CAAwB,EAIxE,GAAI,EAAU,UAAW,CACvB,IAAM,EAAkB,EAAU,UAAU,UAAY,IAAM,IAE9D,EAAU,UAAU,QAAU,IAAM,CAElC,EAAU,cAAc,QAAQ,CAAC,IAAwB,CACvD,EAAK,QAAQ,oBAAoB,UAAW,CAAwB,EACrE,EAGD,EAAU,cAAc,QAAQ,CAAC,IAAwB,EAAK,QAAQ,CAAC,EACvE,EAAU,cAAc,OAAS,EAGjC,OAAO,KAAK,CAAc,EAAE,QAAQ,CAAC,IAAU,CAC7C,EAAe,GAAS,CAAC,EAC1B,EAGD,EAAgB,GAIpB,MAAO,IACF,EAEH,MAAO,CACL,UACA,aACA,WACA,mBACA,oBACA,gBACA,iBACA,cACF,EAEA,SAAU,CACR,OAAQ,EACR,QAAS,CACX,EAEA,EAAE,CAAC,EAAO,EAAS,CACjB,GAAI,CAAC,EAAe,GAClB,EAAe,GAAS,CAAC,EAI3B,OADA,EAAe,GAAO,KAAK,CAAO,EAC3B,MAET,GAAG,CAAC,EAAO,EAAS,CAClB,GAAI,EAAe,GAAQ,CACzB,IAAM,EAAQ,EAAe,GAAO,QAAQ,CAAO,EACnD,GAAI,IAAU,GACZ,EAAe,GAAO,OAAO,EAAO,CAAC,EAGzC,OAAO,KAEX,GCpgBF,KAWO,IAAM,GACX,CAAC,IACD,CACE,IAMG,CAEH,IAAM,EAAW,CAAC,IAAsB,EAAU,SAAS,CAAS,EAG9D,EAAW,EAAO,OAAS,EAAO,MAAM,KAAK,EAAE,OAAS,EACxD,EAAgB,EAAO,eAAiB,QAG1C,EACJ,GAAI,EACF,EAAQ,EAAc,CACpB,IAAK,QACL,UAAW,EAAS,aAAa,EACjC,KAAM,EAAO,MACb,UAAW,EAAU,OACvB,CAAC,EAIH,IAAM,EAAgB,EAAc,CAClC,IAAK,MACL,UAAW,EAAS,iBAAiB,EACrC,UAAW,EAAU,OACvB,CAAC,EAGD,MAAO,IACF,EACH,gBACA,QAGA,iBAAkB,IAAM,EACxB,SAAU,IAAM,GAAS,IAC3B,GCJG,IAAM,GACX,CAAC,IACD,CAAC,IAAwD,CACvD,MAAO,IACD,EAGJ,QAAS,EAAU,QAGnB,OAAO,CAAC,EAAY,CAClB,GAAI,EAAQ,OAAS,OAAO,EAAQ,MAAM,UAAY,WACpD,EAAQ,MAAM,QAAQ,CAAU,EAElC,OAAO,MAGT,UAAU,CAAC,EAAa,CACtB,GAAI,EAAQ,OAAS,OAAO,EAAQ,MAAM,aAAe,WACvD,EAAQ,MAAM,WAAW,CAAW,EAEtC,OAAO,MAGT,QAAQ,EAAG,CACT,GAAI,EAAQ,OAAS,OAAO,EAAQ,MAAM,WAAa,WACrD,OAAO,EAAQ,MAAM,SAAS,EAEhC,MAAO,CAAC,GAGV,gBAAgB,EAAG,CACjB,GACE,EAAQ,OACR,OAAO,EAAQ,MAAM,mBAAqB,WAE1C,OAAO,EAAQ,MAAM,iBAAiB,EAExC,MAAO,CAAC,GAGV,iBAAiB,EAAG,CAClB,GACE,EAAQ,OACR,OAAO,EAAQ,MAAM,oBAAsB,WAE3C,OAAO,EAAQ,MAAM,kBAAkB,EAEzC,MAAO,CAAC,GAOV,QAAQ,EAA6B,CACnC,GACE,EAAQ,OACR,OAAO,EAAQ,MAAM,oBAAsB,WAC3C,CACA,IAAM,EAAS,EAAQ,MAAM,kBAAkB,EAE/C,GAAI,CAAC,EAAQ,QAAQ,YACnB,OAAO,EAAO,OAAS,EAAI,EAAO,GAAK,KAGzC,OAAO,EAET,OAAO,EAAQ,QAAQ,YAAc,CAAC,EAAI,MAQ5C,QAAQ,CAAC,EAA8C,CACrD,GACE,EAAQ,OACR,OAAO,EAAQ,MAAM,gBAAkB,WACvC,CAEA,GAAI,EAAQ,MAAM,eAChB,EAAQ,MAAM,eAAe,EAI/B,IAAI,EAAuB,CAAC,EAC5B,GAAI,GACF,GAAI,MAAM,QAAQ,CAAM,EACtB,EAAa,EAAO,OAAO,CAAC,IAAM,GAAK,MAAQ,IAAM,EAAE,EAClD,QAAI,OAAO,IAAW,UAAY,IAAW,GAClD,EAAa,CAAC,CAAM,EAKxB,GAAI,EAAW,OAAS,EACtB,EAAQ,MAAM,cAAc,EAAY,EAAK,EAGjD,OAAO,MAST,aAAa,CAAC,EAAQ,EAAe,GAAM,CACzC,GACE,EAAQ,OACR,OAAO,EAAQ,MAAM,gBAAkB,WAEvC,EAAQ,MAAM,cAAc,EAAQ,CAAY,EAElD,OAAO,MAGT,cAAc,EAAG,CACf,GACE,EAAQ,OACR,OAAO,EAAQ,MAAM,iBAAmB,WAExC,EAAQ,MAAM,eAAe,EAE/B,OAAO,MAIT,aAAa,CAAC,EAAc,CAC1B,GACE,EAAQ,QACR,OAAO,EAAQ,OAAO,gBAAkB,WAExC,EAAQ,OAAO,cAAc,CAAY,EAE3C,OAAO,MAGT,WAAW,CAAC,EAAY,CACtB,GACE,EAAQ,QACR,OAAO,EAAQ,OAAO,cAAgB,WAEtC,EAAQ,OAAO,YAAY,CAAU,EAEvC,OAAO,MAIT,QAAQ,CAAC,EAAM,CACb,GAAI,EAAQ,OAAS,OAAO,EAAQ,MAAM,UAAY,WACpD,EAAQ,MAAM,QAAQ,CAAI,EAE5B,OAAO,MAGT,QAAQ,EAAG,CACT,GAAI,EAAQ,OAAS,OAAO,EAAQ,MAAM,UAAY,WACpD,OAAO,EAAQ,MAAM,QAAQ,EAE/B,MAAO,IAGT,gBAAgB,CAAC,EAAU,CACzB,GAAI,EAAQ,OAAS,OAAO,EAAQ,MAAM,cAAgB,WACxD,EAAQ,MAAM,YAAY,CAAQ,EAEpC,OAAO,MAGT,gBAAgB,EAAG,CACjB,GAAI,EAAQ,OAAS,OAAO,EAAQ,MAAM,cAAgB,WACxD,OAAO,EAAQ,MAAM,YAAY,EAEnC,MAAO,SAIT,YAAY,CAAC,EAAa,CACxB,GAAI,EAAQ,OAAS,OAAO,EAAQ,MAAM,eAAiB,WACzD,EAAQ,MAAM,aAAa,CAAW,EAExC,OAAO,MAGT,wBAAwB,EAAG,CACzB,GACE,EAAQ,UACR,OAAO,EAAQ,SAAS,2BAA6B,WAErD,EAAQ,SAAS,yBAAyB,EAE5C,OAAO,MAIT,EAAE,CAAC,EAAO,EAAS,CACjB,GAAI,EAAQ,QAAU,OAAO,EAAQ,OAAO,KAAO,WACjD,EAAQ,OAAO,GAAG,EAAO,CAAO,EAElC,OAAO,MAGT,GAAG,CAAC,EAAO,EAAS,CAClB,GAAI,EAAQ,QAAU,OAAO,EAAQ,OAAO,MAAQ,WAClD,EAAQ,OAAO,IAAI,EAAO,CAAO,EAEnC,OAAO,MAIT,OAAO,EAAG,CACR,GACE,EAAQ,WACR,OAAO,EAAQ,UAAU,UAAY,WAErC,EAAQ,UAAU,QAAQ,EAGhC,GChRJ,IASO,IAAM,GAA6B,CACxC,MAAO,CAAC,EACR,WAAY,GACZ,SAAU,GACV,YAAa,GACb,SAAU,KACV,SAAU,KACV,cAAe,OACjB,EAOa,GAAmB,CAAC,EAAsB,CAAC,IAAmB,CAQzE,OANmB,EACjB,GACA,EACA,OACF,GAUW,GAAmB,CAAC,IAAwB,CAEvD,IAAM,EAAa,EAAO,aAAe,GACnC,EAAW,EAAO,WAAa,GAC/B,EAAgB,EAAO,cAAgB,GACvC,EAAW,EAAO,OAAS,EAAO,MAAM,KAAK,EAAE,OAAS,EACxD,EAAgB,EAAO,eAAiB,QAExC,EAAU,CACd,QACA,EAAO,MACP,EAAa,oBAAsB,GACnC,EAAW,kBAAoB,GAC/B,EAAW,oBAAsB,GACjC,GAAY,IAAkB,MAAQ,mBAAqB,EAC7D,EACG,OAAO,OAAO,EACd,KAAK,GAAG,EAEX,OAAO,EAAoB,EAAQ,CACjC,IAAK,MACL,WAAY,CACV,KAAM,QACN,uBAAwB,EAAgB,OAAS,OACnD,EACA,UAAW,CACb,CAAC,GASU,GAAe,CAAC,EAAM,KAA0B,CAC3D,OAAQ,CACN,YAAa,GAAQ,aAAe,EACtC,EACA,MAAO,CACL,QAAS,QAAS,CAAC,EAAY,CAC7B,GAAI,EAAK,OAAS,OAAO,EAAK,MAAM,UAAY,WAC9C,OAAO,EAAK,MAAM,QAAQ,CAAU,EAEtC,OAAO,MAET,WAAY,CAAC,IAAgB,EAAK,OAAO,aAAa,CAAW,EACjE,SAAU,IAAM,EAAK,OAAO,WAAW,GAAK,CAAC,EAC7C,iBAAkB,IAAM,EAAK,OAAO,mBAAmB,GAAK,CAAC,EAC7D,kBAAmB,IAAM,EAAK,OAAO,oBAAoB,GAAK,CAAC,EAC/D,cAAe,CAAC,IAAW,EAAK,OAAO,gBAAgB,CAAM,EAC7D,eAAgB,IAAM,EAAK,OAAO,iBAAiB,EACnD,aAAc,CAAC,IAAgB,EAAK,OAAO,eAAe,CAAW,CACvE,EACA,OAAQ,CACN,cAAe,CAAC,IAAiB,EAAK,QAAQ,gBAAgB,CAAY,EAC1E,aAAc,IAAM,EAAK,QAAQ,eAAe,GAAK,GACrD,YAAa,CAAC,IAAe,EAAK,QAAQ,cAAc,CAAU,EAClE,WAAY,IAAM,EAAK,QAAQ,aAAa,GAAK,EACnD,EACA,MAAO,CACL,QAAS,CAAC,IAAM,EAAK,OAAO,UAAU,CAAC,EACvC,QAAS,IAAM,EAAK,OAAO,UAAU,GAAK,GAC1C,YAAa,CAAC,IAAM,EAAK,OAAO,cAAc,CAAC,EAC/C,YAAa,IAAM,EAAK,OAAO,cAAc,GAAK,OACpD,EACA,SAAU,CACR,yBAA0B,IAAM,EAAK,UAAU,SAAS,EACxD,0BAA2B,IAAM,EAAK,UAAU,UAAU,CAC5D,EACA,OAAQ,CACN,GAAI,CAAC,EAAG,IAAM,EAAK,KAAK,EAAG,CAAC,EAC5B,IAAK,CAAC,EAAG,IAAM,EAAK,MAAM,EAAG,CAAC,CAChC,EACA,UAAW,CACT,QAAS,IAAM,EAAK,WAAW,UAAU,CAC3C,CACF,GP1FA,IAAM,GAAc,CAAC,EAAsB,CAAC,IAAsB,CAEhE,IAAM,EAAa,GAAiB,CAAM,EAE1C,GAAI,CAEF,IAAM,EAAY,EAEhB,EACA,EAAW,EAGX,EAAY,GAAiB,CAAU,CAAC,EAExC,GAAc,CAAU,EACxB,GAAc,CAAU,EAGxB,GAAQ,CAAU,EAGlB,GAAe,CAAU,EACzB,EAAc,CAChB,EAAE,CAAU,EAGN,EAAa,GAAa,EAAW,CAAU,EAG/C,EAAQ,GAAQ,CAAU,EAAE,CAAS,EAG3C,GAAI,EAAW,IAAM,OAAO,EAAM,KAAO,WACvC,OAAO,QAAQ,EAAW,EAAE,EAAE,QAAQ,EAAE,EAAO,KAAa,CAC1D,GAAI,OAAO,IAAY,WACrB,EAAM,GAAG,EAAO,CAAO,EAE1B,EAKH,GAAI,MAAM,QAAQ,EAAW,KAAK,GAAK,EAAW,MAAM,OAAS,EAC/D,EAAW,MAAM,QAAQ,CAAC,IAAe,CACvC,EAAM,QAAQ,CAAU,EACzB,EAGH,OAAO,EACP,MAAO,EAAO,CAEd,MADA,QAAQ,MAAM,wBAAyB,CAAK,EAClC,MAAM,0BAA2B,EAAgB,SAAS,IAIzD,MQlFf,KACA,IACA,IACA,ICoBO,IAAM,GAAY,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,GAAG,EAM9C,GAAc,CACzB,UAAW,WAAY,QAAS,QAChC,MAAO,OAAQ,OAAQ,SACvB,YAAa,UAAW,WAAY,UACtC,EAMa,GAAoB,CAC/B,MAAO,MAAO,MAAO,MACrB,MAAO,MAAO,MAAO,MACrB,MAAO,MAAO,MAAO,KACvB,EAMa,GAAsB,aAMtB,GAAc,QAMd,GAAiB,WAMjB,GAAsB,gBAMtB,GAAoB,cAMpB,GAAkB,YAMlB,GAAqB,eC9E3B,IAAM,GAAY,CAAC,IAA4C,CACpE,GAAI,CAAC,EAAM,OAAO,KAGlB,GAAI,aAAgB,KAClB,OAAO,MAAM,EAAK,QAAQ,CAAC,EAAI,KAAO,EAIxC,GAAI,OAAO,IAAS,SAAU,CAE5B,IAAM,EAAa,IAAI,KAAK,CAAI,EAChC,OAAO,MAAM,EAAW,QAAQ,CAAC,EAAI,KAAO,EAG9C,OAAO,MAWI,GAAa,CAAC,EAAmB,EAAiB,eAAyB,CACtF,GAAI,CAAC,GAAQ,EAAE,aAAgB,OAAS,MAAM,EAAK,QAAQ,CAAC,EAC1D,MAAO,GAGT,IAAI,EAAS,GACT,EAAI,EAER,MAAO,EAAI,EAAO,OAEhB,GAAI,EAAO,UAAU,EAAG,EAAE,CAAC,IAAM,OAE/B,GAAU,GAAY,EAAK,SAAS,GACpC,GAAK,EAEF,QAAI,EAAO,UAAU,EAAG,EAAE,CAAC,IAAM,MAEpC,GAAU,GAAkB,EAAK,SAAS,GAC1C,GAAK,EAEF,QAAI,EAAO,UAAU,EAAG,EAAE,CAAC,IAAM,KAEpC,IAAW,EAAK,SAAS,EAAI,GAAG,SAAS,EAAE,SAAS,EAAG,GAAG,EAC1D,GAAK,EAEF,QAAI,EAAO,UAAU,EAAG,EAAE,CAAC,IAAM,IAEpC,GAAW,EAAK,SAAS,EAAI,EAC7B,GAAK,EAEF,QAAI,EAAO,UAAU,EAAG,EAAE,CAAC,IAAM,OAEpC,GAAU,EAAK,YAAY,EAC3B,GAAK,EAEF,QAAI,EAAO,UAAU,EAAG,EAAE,CAAC,IAAM,KAEpC,GAAU,EAAK,YAAY,EAAE,SAAS,EAAE,MAAM,EAAE,EAChD,GAAK,EAEF,QAAI,EAAO,UAAU,EAAG,EAAE,CAAC,IAAM,KAEpC,GAAU,EAAK,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAG,GAAG,EACnD,GAAK,EAEF,QAAI,EAAO,UAAU,EAAG,EAAE,CAAC,IAAM,IAEpC,GAAU,EAAK,QAAQ,EACvB,GAAK,EAIL,QAAU,EAAO,GACjB,GAAK,EAIT,OAAO,GASI,GAAiB,CAAC,EAAc,IAA0B,CACrE,OAAO,IAAI,KAAK,EAAM,EAAQ,EAAG,CAAC,EAAE,QAAQ,GASjC,GAAqB,CAAC,EAAc,IAA0B,CACzE,OAAO,IAAI,KAAK,EAAM,EAAO,CAAC,EAAE,OAAO,GAS5B,GAAY,CAAC,EAAa,IAAyB,CAC9D,OACE,EAAM,QAAQ,IAAM,EAAM,QAAQ,GAClC,EAAM,SAAS,IAAM,EAAM,SAAS,GACpC,EAAM,YAAY,IAAM,EAAM,YAAY,GAWjC,GAAgB,CAAC,EAAY,EAAiB,IAA2B,CACpF,IAAM,EAAY,EAAK,QAAQ,EAC/B,OAAO,GAAa,EAAU,QAAQ,GAAK,GAAa,EAAQ,QAAQ,GAa7D,GAAwB,CACnC,EACA,EACA,EAA4B,KAC5B,EAA4B,KAC5B,EAAuB,KACvB,EAAuB,OACJ,CACnB,IAAM,EAAQ,IAAI,KAClB,EAAM,SAAS,EAAG,EAAG,EAAG,CAAC,EAEzB,IAAM,EAAyB,CAAC,EAG1B,EAAW,GAAmB,EAAM,CAAK,EACzC,EAAkB,GAAe,EAAM,EAAQ,CAAC,EAGtD,QAAS,EAAI,EAAW,EAAG,GAAK,EAAG,IAAK,CACtC,IAAM,EAAO,IAAI,KAAK,EAAM,EAAQ,EAAG,EAAkB,CAAC,EACpD,EACH,GAAW,EAAO,GAClB,GAAW,EAAO,EAErB,EAAO,KAAK,CACV,OACA,IAAK,EAAK,QAAQ,EAClB,eAAgB,GAChB,QAAS,GAAU,EAAM,CAAK,EAC9B,WAAY,EAAe,GAAU,EAAM,CAAY,EAAI,GAC3D,YACF,CAAC,EAIH,IAAM,EAAc,GAAe,EAAM,CAAK,EAC9C,QAAS,EAAI,EAAG,GAAK,EAAa,IAAK,CACrC,IAAM,EAAO,IAAI,KAAK,EAAM,EAAO,CAAC,EAC9B,EAAa,EAAe,GAAU,EAAM,CAAY,EAAI,GAC5D,EACH,GAAW,EAAO,GAClB,GAAW,EAAO,EAEf,EAA6B,CACjC,OACA,IAAK,EACL,eAAgB,GAChB,QAAS,GAAU,EAAM,CAAK,EAC9B,aACA,YACF,EAGA,GAAI,GAAgB,EAClB,EAAa,aAAe,GAAU,EAAM,CAAY,EACxD,EAAa,WAAa,GAAU,EAAM,CAAY,EACtD,EAAa,cAAgB,GAAc,EAAM,EAAc,CAAY,GACzE,CAAC,EAAa,cAAgB,CAAC,EAAa,WAGhD,EAAO,KAAK,CAAY,EAK1B,IAAM,EADkB,GACgB,EAAO,OAE/C,QAAS,EAAI,EAAG,GAAK,EAAe,IAAK,CACvC,IAAM,EAAO,IAAI,KAAK,EAAM,EAAQ,EAAG,CAAC,EAClC,EACH,GAAW,EAAO,GAClB,GAAW,EAAO,EAErB,EAAO,KAAK,CACV,OACA,IAAK,EACL,eAAgB,GAChB,QAAS,GAAU,EAAM,CAAK,EAC9B,WAAY,EAAe,GAAU,EAAM,CAAY,EAAI,GAC3D,YACF,CAAC,EAGH,OAAO,GASI,GAAoB,CAAC,EAAqB,EAAgB,KAAiB,CACtF,IAAM,EAAkB,CAAC,EACnB,EAAY,EAAc,EAC1B,EAAU,EAAc,EAE9B,QAAS,EAAO,EAAW,GAAQ,EAAS,IAC1C,EAAM,KAAK,CAAI,EAGjB,OAAO,GAqBF,IAAM,GAAY,CAAC,EAAY,IAAyB,CAC7D,IAAM,EAAS,IAAI,KAAK,CAAI,EAE5B,OADA,EAAO,SAAS,EAAO,SAAS,EAAI,CAAM,EACnC,GCxQF,IAAM,GACX,CAAC,GAAc,WAAU,YAAW,YACpC,CAAC,IAAwC,CAEvC,IAAM,EAAW,CACf,QAAQ,CAAC,EAAkB,CACzB,IAAM,EAAY,GAAU,CAAI,EAChC,GAAI,CAAC,EAAW,OAEhB,EAAM,aAAe,EAAU,SAAS,EACxC,EAAM,YAAc,EAAU,YAAY,EAG1C,EAAM,eAAe,GAGvB,SAAS,EAAS,CAChB,IAAM,EAAU,GACd,IAAI,KAAK,EAAM,YAAa,EAAM,aAAc,CAAC,EACjD,CACF,EACA,EAAM,aAAe,EAAQ,SAAS,EACtC,EAAM,YAAc,EAAQ,YAAY,EAGxC,EAAM,eAAe,GAGvB,SAAS,EAAS,CAChB,IAAM,EAAU,GACd,IAAI,KAAK,EAAM,YAAa,EAAM,aAAc,CAAC,EACjD,EACF,EACA,EAAM,aAAe,EAAQ,SAAS,EACtC,EAAM,YAAc,EAAQ,YAAY,EAGxC,EAAM,eAAe,GAGvB,QAAQ,EAAS,CACf,EAAM,aAAe,EAGrB,EAAM,eAAe,GAGvB,QAAQ,EAAS,CACf,EAAM,aAAe,EAGrB,EAAM,eAAe,GAGvB,WAAW,EAAS,CAClB,EAAM,YAAc,MACpB,EAAM,eAAe,GAGvB,aAAa,EAAS,CACpB,EAAM,YAAc,QACpB,EAAM,eAAe,GAGvB,YAAY,EAAS,CACnB,EAAM,YAAc,OACpB,EAAM,eAAe,GAGvB,cAAc,EAAW,CACvB,OAAO,EAAM,YAEjB,EAEA,MAAO,IACD,EACJ,QAAS,EAAU,QACnB,MAAO,EAAM,MACb,WAEA,IAAI,EAAwB,CAI1B,OAHA,EAAM,OAAS,GACf,EAAM,OAAO,EACb,EAAO,KAAK,OAAQ,CAAE,MAAO,KAAK,SAAS,CAAE,CAAC,EACvC,MAGT,KAAK,EAAwB,CAI3B,OAHA,EAAM,OAAS,GACf,EAAM,OAAO,EACb,EAAO,KAAK,QAAS,CAAE,MAAO,KAAK,SAAS,CAAE,CAAC,EACxC,MAGT,QAAQ,EAA+B,CACrC,GAAI,CAAC,EAAM,aAAc,OAAO,KAGhC,GAAI,EAAM,gBAAkB,SAAW,EAAM,aAC3C,MAAO,CAAC,IAAI,KAAK,EAAM,YAAY,EAAG,IAAI,KAAK,EAAM,YAAY,CAAC,EAIpE,OAAO,IAAI,KAAK,EAAM,YAAY,GAGpC,QAAQ,CACN,EACqB,CAErB,GAAI,MAAM,QAAQ,CAAK,GAAK,EAAM,gBAAkB,QAAS,CAC3D,IAAM,EAAQ,GAAU,EAAM,EAAE,EAC1B,EAAM,GAAU,EAAM,EAAE,EAE9B,GAAI,GAAS,EAAK,CAKhB,GAJA,EAAM,aAAe,EACrB,EAAM,aAAe,EAGjB,EAAQ,EACV,EAAM,aAAe,EACrB,EAAM,aAAe,EAOvB,GAHA,EAAM,iBAAiB,EAGnB,EAAM,OAER,EAAM,aAAe,EAAM,aAAa,SAAS,EACjD,EAAM,YAAc,EAAM,aAAa,YAAY,EACnD,EAAM,eAAe,EAGvB,EAAO,KAAK,SAAU,CACpB,MAAO,KAAK,SAAS,EACrB,eAAgB,KAAK,kBAAkB,CACzC,CAAC,EAGH,OAAO,KAIT,IAAM,EAAa,GAAU,CAAsB,EACnD,GAAI,EAAY,CAQd,GAPA,EAAM,aAAe,EACrB,EAAM,aAAe,KAGrB,EAAM,iBAAiB,EAGnB,EAAM,OACR,EAAM,aAAe,EAAW,SAAS,EACzC,EAAM,YAAc,EAAW,YAAY,EAC3C,EAAM,eAAe,EAGvB,EAAO,KAAK,SAAU,CACpB,MAAO,KAAK,SAAS,EACrB,eAAgB,KAAK,kBAAkB,CACzC,CAAC,EAGH,OAAO,MAGT,iBAAiB,EAAW,CAC1B,GAAI,CAAC,EAAM,aAAc,MAAO,GAGhC,GAAI,EAAM,gBAAkB,SAAW,EAAM,aAAc,CACzD,IAAM,EAAW,GAAW,EAAM,aAAc,EAAM,UAAU,EAC1D,EAAS,GAAW,EAAM,aAAc,EAAM,UAAU,EAC9D,MAAO,GAAG,OAAc,IAI1B,OAAO,GAAW,EAAM,aAAc,EAAM,UAAU,GAGxD,KAAK,EAAwB,CAK3B,GAJA,EAAM,aAAe,KACrB,EAAM,aAAe,KACrB,EAAM,iBAAiB,EAEnB,EAAM,OACR,EAAM,eAAe,EAIvB,OADA,EAAO,KAAK,SAAU,CAAE,MAAO,KAAM,eAAgB,EAAG,CAAC,EAClD,MAGT,MAAM,EAAwB,CAG5B,OAFA,EAAS,OAAO,EAChB,EAAM,MAAM,SAAW,GAChB,MAGT,OAAO,EAAwB,CAG7B,OAFA,EAAS,QAAQ,EACjB,EAAM,MAAM,SAAW,GAChB,MAGT,UAAU,CAAC,EAA0C,CACnD,IAAM,EAAa,GAAU,CAAI,EACjC,GAAI,GAIF,GAHA,EAAM,QAAU,EAGZ,EAAM,OACR,EAAM,eAAe,EAGzB,OAAO,MAGT,UAAU,CAAC,EAA0C,CACnD,IAAM,EAAa,GAAU,CAAI,EACjC,GAAI,GAIF,GAHA,EAAM,QAAU,EAGZ,EAAM,OACR,EAAM,eAAe,EAGzB,OAAO,MAGT,OAAO,EAAS,CAKd,GAHA,SAAS,oBAAoB,QAAS,EAAM,mBAAmB,EAG3D,EAAM,iBAAmB,EAAM,gBAAgB,WACjD,EAAM,gBAAgB,WAAW,YAAY,EAAM,eAAe,EAIpE,EAAU,QAAQ,GAGpB,EAAE,CAAC,EAAe,EAAwC,CAExD,OADA,EAAO,GAAG,EAAO,CAAO,EACjB,MAGT,GAAG,CAAC,EAAe,EAAwC,CAEzD,OADA,EAAO,IAAI,EAAO,CAAO,EAClB,KAEX,GC1QJ,IASO,IAAM,GAAkC,CAC7C,QAAS,SACT,YAAa,MACb,cAAe,SACf,WAAY,GACZ,QAAS,EACX,EAOa,GAAmB,CAC9B,EAA2B,CAAC,IACP,CACrB,IAAM,EAAa,EACjB,GACA,EACA,YACF,EAGA,GAAI,EAAW,gBAAkB,OAC/B,EAAW,cAAgB,EAAW,UAAY,SAGpD,OAAO,GAQI,GAAqB,CAAC,IAA6B,CAC9D,OAAO,EAAoB,EAAQ,CACjC,IAAK,MACL,WAAY,CACV,KAAM,cACN,aAAc,cACd,SAAU,IACZ,EACA,UAAW,CAAC,GAAG,EAAO,8BAA+B,EAAO,KAAK,EACjE,cAAe,CACb,QAAS,GACT,MAAO,EACT,EACA,YAAa,EACf,CAAC,GAQU,GAAiB,CAAC,IAA6B,CAE1D,IAAM,EAAkC,CACtC,KAAM,OACN,YAAa,EAAO,aAAe,EAAO,WAC1C,aAAc,MACd,SAAU,EACZ,EAGA,GAAI,EAAO,WAAa,GACtB,EAAW,SAAW,GAGxB,OAAO,EAAoB,EAAQ,CACjC,IAAK,QACL,aACA,UAAW,GAAG,EAAO,0BACrB,cAAe,CACb,MAAO,GACP,KAAM,GACN,MAAO,EACT,EACA,YAAa,EACf,CAAC,GAQU,GAAoB,CAAC,IAA6B,CAC7D,OAAO,EAAoB,EAAQ,CACjC,IAAK,MACL,WAAY,CACV,KAAM,SACN,aAAc,EAAO,UAAY,SAAW,OAAS,OACvD,EACA,UAAW,CACT,GAAG,EAAO,6BACV,GAAG,EAAO,qBAAqB,EAAO,UACtC,EAAO,gBAAkB,QACrB,GAAG,EAAO,0BACV,EACN,EACA,cAAe,CACb,QAAS,GACT,MAAO,EACT,CACF,CAAC,GAQU,GAAe,CAAC,KAAe,CAC1C,SAAU,CACR,OAAQ,IAAM,EAAK,SAAS,OAAO,EACnC,QAAS,IAAM,EAAK,SAAS,QAAQ,CACvC,EACA,UAAW,CACT,QAAS,IAAM,EAAK,UAAU,QAAQ,CACxC,EACA,OAAQ,CACN,GAAI,EAAK,GACT,IAAK,EAAK,IACV,KAAM,EAAK,IACb,CACF,GC5HA,KAOO,IAAM,GAAe,EAC1B,eACA,cACA,cACA,SACA,UACsB,CACtB,IAAM,EAAS,EAAc,CAC3B,IAAK,MACL,UAAW,GAAG,qBAChB,CAAC,EAGK,EAAc,EAAc,CAChC,IAAK,SACL,UAAW,GAAG,8BACd,KAAM,GAAY,GAClB,WAAY,CACV,KAAM,SACN,aAAc,cAChB,CACF,CAAC,EAGK,EAAa,EAAc,CAC/B,IAAK,SACL,UAAW,GAAG,6BACd,KAAM,EAAY,SAAS,EAC3B,WAAY,CACV,KAAM,SACN,aAAc,aAChB,CACF,CAAC,EAGK,EAAc,EAAc,CAChC,IAAK,MACL,UAAW,GAAG,2BAChB,CAAC,EAGK,EAAa,EAAc,CAC/B,IAAK,SACL,UAAW,GAAG,wBACd,KAAM,4OACN,WAAY,CACV,KAAM,SACN,aACE,IAAgB,MACZ,iBACA,IAAgB,QAChB,gBACA,qBACR,CACF,CAAC,EAGK,EAAa,EAAc,CAC/B,IAAK,SACL,UAAW,GAAG,wBACd,KAAM,2OACN,WAAY,CACV,KAAM,SACN,aACE,IAAgB,MACZ,aACA,IAAgB,QAChB,YACA,iBACR,CACF,CAAC,EAiDD,OA9CA,EAAY,iBAAiB,QAAS,CAAC,IAAU,CAE/C,EAAM,gBAAgB,EACtB,EAAK,aAAc,CAAE,KAAM,OAAQ,CAAC,EACrC,EAED,EAAW,iBAAiB,QAAS,CAAC,IAAU,CAE9C,EAAM,gBAAgB,EACtB,EAAK,aAAc,CAAE,KAAM,MAAO,CAAC,EACpC,EAED,EAAW,iBAAiB,QAAS,CAAC,IAAU,CAI9C,GAFA,EAAM,gBAAgB,EAElB,IAAgB,MAClB,EAAK,WAAW,EACX,QAAI,IAAgB,QACzB,EAAK,UAAU,EAEf,OAAK,eAAe,EAEvB,EAED,EAAW,iBAAiB,QAAS,CAAC,IAAU,CAI9C,GAFA,EAAM,gBAAgB,EAElB,IAAgB,MAClB,EAAK,WAAW,EACX,QAAI,IAAgB,QACzB,EAAK,UAAU,EAEf,OAAK,eAAe,EAEvB,EAGD,EAAO,YAAY,CAAW,EAC9B,EAAO,YAAY,CAAU,EAE7B,EAAY,YAAY,CAAU,EAClC,EAAY,YAAY,CAAU,EAClC,EAAO,YAAY,CAAW,EAEvB,GAQI,GAAiB,CAAC,IAAgC,CAC7D,IAAM,EAAc,EAAc,CAChC,IAAK,MACL,UAAW,GAAG,uBAChB,CAAC,EAWD,OATA,GAAU,QAAQ,CAAC,IAAQ,CACzB,IAAM,EAAa,EAAc,CAC/B,IAAK,OACL,UAAW,GAAG,uBACd,KAAM,CACR,CAAC,EACD,EAAY,YAAY,CAAU,EACnC,EAEM,GAQI,GAAa,EACxB,cACA,eACA,eACA,eACA,UACA,UACA,SACA,UACsB,CACtB,IAAM,EAAW,EAAc,CAC7B,IAAK,MACL,UAAW,GAAG,mBAChB,CAAC,EAoDD,OAlDsB,GACpB,EACA,EACA,EACA,EACA,EACA,CACF,EAEc,QAAQ,CAAC,IAA+B,CACpD,IAAM,EAAa,CACjB,GAAG,mBACH,EAAa,eAAiB,GAAK,GACnC,EAAa,QAAU,GAAc,GACrC,EAAa,WAAa,GAAiB,GAC3C,EAAa,WAAa,WAAa,GACvC,EAAa,aAAe,GAAoB,GAChD,EAAa,WAAa,GAAkB,GAC5C,EAAa,cAAgB,GAAqB,EACpD,EACG,OAAO,OAAO,EACd,KAAK,GAAG,EAEL,EAAa,EAAc,CAC/B,IAAK,SACL,UAAW,EACX,KAAM,EAAa,IAAI,SAAS,EAChC,WAAY,CACV,KAAM,SACN,aAAc,EAAa,KAAK,mBAAmB,EACnD,gBAAiB,EAAa,WAAa,OAAS,QACpD,gBAAiB,EAAa,WAAa,OAAS,QACpD,YAAa,EAAa,KAAK,YAAY,EAC3C,SAAU,EAAa,UACzB,CACF,CAAC,EAGD,EAAW,iBAAiB,QAAS,CAAC,IAAU,CAI9C,GAFA,EAAM,gBAAgB,EAElB,CAAC,EAAa,WAChB,EAAK,eAAgB,CAAE,KAAM,EAAa,IAAK,CAAC,EAEnD,EAED,EAAS,YAAY,CAAU,EAChC,EAEM,GAQI,GAAuB,EAClC,eACA,SACA,UACsB,CACtB,IAAM,EAAa,EAAc,CAC/B,IAAK,MACL,UAAW,GAAG,qBAChB,CAAC,EA2BD,OAzBA,GAAkB,QAAQ,CAAC,EAAO,IAAU,CAC1C,IAAM,EAAa,IAAU,EAEvB,EAAe,EAAc,CACjC,IAAK,SACL,UAAW,GAAG,sBACZ,EAAa,GAAiB,KAEhC,KAAM,EACN,WAAY,CACV,KAAM,SACN,gBAAiB,EAAa,OAAS,QACvC,aAAc,EAAM,SAAS,CAC/B,CACF,CAAC,EAED,EAAa,iBAAiB,QAAS,CAAC,IAAU,CAEhD,EAAM,gBAAgB,EACtB,EAAK,gBAAiB,CAAE,MAAO,CAAM,CAAC,EACvC,EAED,EAAW,YAAY,CAAY,EACpC,EAEM,GAQI,GAAsB,EACjC,cACA,SACA,UACsB,CACtB,IAAM,EAAY,EAAc,CAC9B,IAAK,MACL,UAAW,GAAG,oBAChB,CAAC,EA6BD,OA3BkB,GAAkB,EAAa,EAAE,EAEzC,QAAQ,CAAC,IAAS,CAC1B,IAAM,EAAa,IAAS,EAEtB,EAAc,EAAc,CAChC,IAAK,SACL,UAAW,GAAG,qBACZ,EAAa,GAAiB,KAEhC,KAAM,EAAK,SAAS,EACpB,WAAY,CACV,KAAM,SACN,gBAAiB,EAAa,OAAS,QACvC,YAAa,EAAK,SAAS,CAC7B,CACF,CAAC,EAED,EAAY,iBAAiB,QAAS,CAAC,IAAU,CAE/C,EAAM,gBAAgB,EACtB,EAAK,eAAgB,CAAE,MAAK,CAAC,EAC9B,EAED,EAAU,YAAY,CAAW,EAClC,EAEM,GAQI,GAAe,EAAG,SAAQ,UAA6B,CAClE,IAAM,EAAS,EAAc,CAC3B,IAAK,MACL,UAAW,GAAG,qBAChB,CAAC,EAGK,EAAe,EAAc,CACjC,IAAK,SACL,UAAW,GAAG,uBAA4B,YAAiB,iBAC3D,KAAM,SACN,WAAY,CACV,KAAM,QACR,CACF,CAAC,EAGK,EAAW,EAAc,CAC7B,IAAK,SACL,UAAW,GAAG,mBAAwB,YAAiB,iBACvD,KAAM,KACN,WAAY,CACV,KAAM,QACR,CACF,CAAC,EAiBD,OAfA,EAAa,iBAAiB,QAAS,CAAC,IAAU,CAEhD,EAAM,gBAAgB,EACtB,EAAK,QAAQ,EACd,EAED,EAAS,iBAAiB,QAAS,CAAC,IAAU,CAE5C,EAAM,gBAAgB,EACtB,EAAK,SAAS,EACf,EAED,EAAO,YAAY,CAAY,EAC/B,EAAO,YAAY,CAAQ,EAEpB,GASI,GAAiB,CAAC,EAAY,IAAgC,CACzE,IACE,SACA,cACA,eACA,cACA,eACA,eACA,UACA,UACA,WACE,EAGE,EAAW,EAAc,CAC7B,IAAK,MACL,UAAW,GAAG,+BAChB,CAAC,EAGK,EAAS,GAAa,CAC1B,eACA,cACA,cACA,SACA,MACF,CAAC,EAID,GAHA,EAAS,YAAY,CAAM,EAGvB,IAAgB,MAAO,CACzB,IAAM,EAAW,GAAe,CAAM,EACtC,EAAS,YAAY,CAAQ,EAE7B,IAAM,EAAO,GAAW,CACtB,cACA,eACA,eACA,eACA,UACA,UACA,SACA,MACF,CAAC,EACD,EAAS,YAAY,CAAI,EACpB,QAAI,IAAgB,QAAS,CAClC,IAAM,EAAS,GAAqB,CAClC,eACA,SACA,MACF,CAAC,EACD,EAAS,YAAY,CAAM,EACtB,QAAI,IAAgB,OAAQ,CACjC,IAAM,EAAQ,GAAoB,CAChC,cACA,SACA,MACF,CAAC,EACD,EAAS,YAAY,CAAK,EAI5B,GAAI,IAAY,SAAU,CACxB,IAAM,EAAS,GAAa,CAC1B,SACA,MACF,CAAC,EACD,EAAS,YAAY,CAAM,EAG7B,OAAO,GL/aT,KAOA,IAAM,GAAmB,CACvB,EAA2B,CAAC,IACJ,CACxB,IAAM,EAAa,GAAiB,CAAM,EAE1C,GAAI,CAEF,IAAM,EAAa,CACjB,OAAQ,GACR,aAAc,KACd,aAAc,KACd,YAAa,EAAW,YACxB,aAAc,IAAI,KAAK,EAAE,SAAS,EAClC,YAAa,IAAI,KAAK,EAAE,YAAY,EACpC,QAAS,EAAW,QAAU,GAAU,EAAW,OAAO,EAAI,KAC9D,QAAS,EAAW,QAAU,GAAU,EAAW,OAAO,EAAI,KAC9D,WAAY,EAAW,WACvB,QAAS,EAAW,QACpB,cAAe,EAAW,cAC1B,cAAe,EAAW,cAC1B,OAAQ,EAAW,QAAU,EAC7B,gBAAiB,KACjB,MAAO,KAEP,gBAAgB,EAAS,CACvB,GAAI,CAAC,KAAK,MAAO,OAEjB,GAAI,CAAC,KAAK,aAAc,CACtB,KAAK,MAAM,MAAQ,GACnB,OAIF,GAAI,KAAK,gBAAkB,SAAW,KAAK,aAAc,CACvD,IAAM,EAAW,GAAW,KAAK,aAAc,KAAK,UAAU,EACxD,EAAS,GAAW,KAAK,aAAc,KAAK,UAAU,EAC5D,KAAK,MAAM,MAAQ,GAAG,OAAc,IACpC,OAIF,KAAK,MAAM,MAAQ,GAAW,KAAK,aAAc,KAAK,UAAU,GAGlE,cAAc,EAAS,CACrB,GAAI,CAAC,KAAK,QAAU,CAAC,KAAK,gBAAiB,OAG3C,KAAK,gBAAgB,UAAY,GAGjC,IAAM,EAAW,GAAe,KAAM,CAAC,EAAO,IAAS,CACrD,OAAQ,OACD,eACH,KAAK,oBAAoB,EAAK,IAAI,EAClC,UAEG,gBACH,KAAK,aAAe,EAAK,MACzB,KAAK,YAAc,MACnB,KAAK,eAAe,EACpB,UAEG,eACH,KAAK,YAAc,EAAK,KACxB,KAAK,YAAc,QACnB,KAAK,eAAe,EACpB,UAEG,aACH,KAAK,YAAc,EAAK,KACxB,KAAK,eAAe,EACpB,UAEG,YACH,KAAK,UAAU,EACf,UAEG,YACH,KAAK,UAAU,EACf,UAEG,WACH,KAAK,SAAS,EACd,UAEG,WACH,KAAK,SAAS,EACd,UAEG,gBACH,KAAK,aAAe,GACpB,KAAK,eAAe,EACpB,UAEG,gBACH,KAAK,aAAe,GACpB,KAAK,eAAe,EACpB,UAEG,SACH,KAAK,OAAS,GACd,KAAK,OAAO,EACZ,UAEG,UACH,KAAK,OAAS,GACd,KAAK,OAAO,EACZ,OAEL,EAED,KAAK,gBAAgB,YAAY,CAAQ,GAG3C,mBAAmB,CAAC,EAAkB,CAEpC,GAAI,KAAK,gBAAkB,QAEzB,GAAI,CAAC,KAAK,cAAiB,KAAK,cAAgB,KAAK,aACnD,KAAK,aAAe,EACpB,KAAK,aAAe,KAGjB,KAEH,GAAI,EAAO,KAAK,aACd,KAAK,aAAe,KAAK,aACzB,KAAK,aAAe,EAEpB,UAAK,aAAe,EAItB,GAAI,KAAK,cACP,KAAK,OAAS,GASlB,QAHA,KAAK,aAAe,EAGhB,KAAK,cACP,KAAK,OAAS,GAKlB,KAAK,iBAAiB,EAGtB,KAAK,eAAe,EAGpB,EAAU,KAAK,SAAU,CACvB,MAAO,KAAK,aACZ,aAAc,KAAK,aACnB,eAAgB,KAAK,MAAM,KAC7B,CAAC,GAGH,SAAS,EAAS,CAChB,GAAI,KAAK,eAAiB,EACxB,KAAK,aAAe,GACpB,KAAK,cAEL,UAAK,eAEP,KAAK,eAAe,GAGtB,SAAS,EAAS,CAChB,GAAI,KAAK,eAAiB,GACxB,KAAK,aAAe,EACpB,KAAK,cAEL,UAAK,eAEP,KAAK,eAAe,GAGtB,QAAQ,EAAS,CACf,KAAK,cACL,KAAK,eAAe,GAGtB,QAAQ,EAAS,CACf,KAAK,cACL,KAAK,eAAe,GAGtB,MAAM,EAAS,CAEb,GAAI,KAAK,gBACP,GAAI,KAAK,OACP,KAAK,gBAAgB,MAAM,QAAU,QACrC,KAAK,eAAe,EAGpB,WAAW,IAAM,CACf,KAAK,gBAAgB,MAAM,GAC1B,EAAE,EAEL,UAAK,gBAAgB,MAAM,QAAU,OAI7C,EAGA,GAAI,EAAW,MACb,GACE,MAAM,QAAQ,EAAW,KAAK,GAC9B,EAAW,gBAAkB,QAC7B,CACA,IAAM,EAAQ,GAAU,EAAW,MAAM,EAAE,EACrC,EAAM,GAAU,EAAW,MAAM,EAAE,EAEzC,GAAI,GAAS,EACX,EAAM,aAAe,EACrB,EAAM,aAAe,EAGrB,EAAM,aAAe,EAAM,SAAS,EACpC,EAAM,YAAc,EAAM,YAAY,EAEnC,KACL,IAAM,EAAO,GAAU,EAAW,KAAsB,EACxD,GAAI,EACF,EAAM,aAAe,EACrB,EAAM,aAAe,EAAK,SAAS,EACnC,EAAM,YAAc,EAAK,YAAY,EAM3C,IAAM,EAAY,EAChB,EACA,EAAW,EACX,EAAY,GAAmB,CAAU,CAAC,EAC1C,GAAa,CAAU,EACvB,EAAc,CAChB,EAAE,CAAU,EAGN,EAAiB,EACrB,EACA,EAAY,GAAe,CAAU,CAAC,CACxC,EAAE,CAAU,EAEZ,EAAM,MAAQ,EAAe,QAC7B,EAAU,QAAQ,YAAY,EAAM,KAAK,EAGzC,EAAM,iBAAiB,EAGvB,IAAM,EAAiB,GAAkB,CAAU,EA2CnD,OA1CA,EAAM,gBAAkB,EAAc,CACpC,IAAK,MACL,UAAW,EAAe,UAC1B,WAAY,EAAe,UAC7B,CAAC,EAGD,EAAM,gBAAgB,MAAM,QAAU,OAGtC,EAAU,QAAQ,YAAY,EAAM,eAAe,EAGnD,EAAM,MAAM,iBAAiB,QAAS,IAAM,CAC1C,GAAI,CAAC,EAAU,QAAQ,UAAU,SAAS,UAAU,EAIlD,GAHA,EAAM,OAAS,CAAC,EAAM,OACtB,EAAM,OAAO,EAET,EAAM,OACR,EAAU,KAAK,OAAQ,CAAE,MAAO,EAAM,YAAa,CAAC,EAEpD,OAAU,KAAK,QAAS,CAAE,MAAO,EAAM,YAAa,CAAC,EAG1D,EAGD,EAAM,gBAAgB,iBAAiB,QAAS,CAAC,IAAU,CAEzD,EAAM,gBAAgB,EACvB,EAGD,SAAS,iBAAiB,QAAS,CAAC,IAAU,CAC5C,GAAI,EAAM,QAAU,CAAC,EAAU,QAAQ,SAAS,EAAM,MAAc,EAClE,EAAM,OAAS,GACf,EAAM,OAAO,EACb,EAAU,KAAK,QAAS,CAAE,MAAO,EAAM,YAAa,CAAC,EAExD,EAGM,GAAQ,EAAO,GAAa,CAAS,CAAC,EAAE,CAAS,EACxD,MAAO,EAAO,CAEd,MADA,QAAQ,MAAM,6BAA8B,CAAK,EACvC,MAAM,gCAAiC,EAAgB,SAAS,IAI/D,MM/Tf,IACA,IACA,ICpBA,IASO,IAAM,GAA8B,CACzC,KAAM,SACN,UAAW,QACX,gBAAiB,QACjB,KAAM,GACN,YAAa,GACb,oBAAqB,GACrB,cAAe,GACf,MAAO,GACP,UAAW,GACX,UAAW,GACX,QAAS,GACT,kBAAmB,IACnB,QAAS,CAAC,CACZ,EAOa,GAAmB,CAAC,EAAuB,CAAC,IACvD,EAAsB,GAAe,EAAQ,QAAQ,EAO1C,GAAmB,CAAC,IAAyB,CACxD,OAAO,EAAoB,EAAQ,CACjC,IAAK,MACL,WAAY,CAAC,EACb,UAAW,EAAO,KACpB,CAAC,GAQU,GAAmB,CAAC,IAAyB,CACxD,MAAO,CACL,IAAK,MACL,WAAY,CACV,aAAc,EAAO,QAAU,GAAQ,GAAQ,GAC/C,KAAQ,SACR,SAAY,EACd,EACA,UAAW,EACb,GAQW,GAAe,CAAC,KAAU,CACrC,WAAY,CACV,KAAM,IAAM,EAAK,WAAW,KAAK,EACjC,MAAO,IAAM,EAAK,WAAW,MAAM,EACnC,OAAQ,CAAC,IAAsB,EAAK,WAAW,OAAO,CAAO,EAC7D,OAAQ,IAAM,EAAK,WAAW,OAAO,CACvC,EACA,QAAS,CACP,SAAU,CAAC,IAAkB,EAAK,QAAQ,SAAS,CAAK,EACxD,SAAU,IAAM,EAAK,QAAQ,SAAS,EACtC,YAAa,CAAC,IAAqB,EAAK,QAAQ,YAAY,CAAQ,EACpE,YAAa,IAAM,EAAK,QAAQ,YAAY,EAC5C,WAAY,CAAC,IAAoB,EAAK,QAAQ,WAAW,CAAO,EAChE,WAAY,IAAM,EAAK,QAAQ,WAAW,EAC1C,iBAAkB,IAAM,EAAK,QAAQ,iBAAiB,EACtD,kBAAmB,IAAM,EAAK,QAAQ,kBAAkB,EACxD,iBAAkB,IAAM,EAAK,QAAQ,iBAAiB,CACxD,EACA,QAAS,CACP,UAAW,CAAC,IAAW,EAAK,QAAQ,UAAU,CAAM,EACpD,aAAc,CAAC,IAAgB,EAAK,QAAQ,aAAa,CAAW,EACpE,WAAY,IAAM,EAAK,QAAQ,WAAW,EAC1C,mBAAoB,CAAC,IAAc,EAAK,QAAQ,mBAAmB,CAAS,CAC9E,EACA,MAAO,CACL,UAAW,IAAM,EAAK,MAAM,UAAU,EACtC,aAAc,IAAM,EAAK,MAAM,aAAa,CAC9C,EACA,KAAM,CACJ,QAAS,CAAC,IAAS,EAAK,KAAK,QAAQ,CAAI,CAC3C,EACA,QAAS,CACP,cAAe,CAAC,IAAS,EAAK,QAAQ,cAAc,CAAI,EACxD,WAAY,IAAM,EAAK,QAAQ,WAAW,CAC5C,EACA,OAAQ,CAEN,GAAI,CAAC,EAAO,IAAY,EAAK,GAAG,EAAO,CAAO,EAC9C,IAAK,CAAC,EAAO,IAAY,EAAK,IAAI,EAAO,CAAO,EAChD,QAAS,CAAC,EAAO,IAAS,EAAK,KAAK,EAAO,CAAI,CACjD,EACA,UAAW,CACT,QAAS,IAAM,EAAK,UAAU,QAAQ,CACxC,CACF,GC7GA,KCHA,ICAA,IA6IO,IAAM,GAAwC,CACnD,YAAa,aACb,QAAS,aACT,UAAW,CACb,EAaa,GAAmB,CAAC,EAAwB,CAAC,IAAqB,CAC7E,OAAO,EACL,GACA,EACA,SACF,GCnJK,IAAM,GAAkB,CAAC,IAC9B,CAA6C,IAAgD,CAC3F,IAAM,EAAc,EAAO,aAAe,aAG1C,EAAU,QAAQ,UAAU,IAAI,GAAG,EAAU,SAAS,SAAS,MAAM,GAAa,EAGlF,IAAM,EAAY,EAAO,WAAa,EAEtC,GAAI,IAAgB,aAClB,EAAU,QAAQ,MAAM,OAAS,GAAG,MACpC,EAAU,QAAQ,MAAM,MAAQ,OAEhC,OAAU,QAAQ,MAAM,MAAQ,GAAG,MACnC,EAAU,QAAQ,MAAM,OAAS,OAGnC,MAAO,IACF,EAEH,cAAc,EAAG,CACf,OAAO,GAGT,cAAc,CAAC,EAA2C,CAQxD,GANA,EAAU,QAAQ,UAAU,OAAO,GAAG,EAAU,SAAS,SAAS,MAAM,GAAa,EAGrF,EAAU,QAAQ,UAAU,IAAI,GAAG,EAAU,SAAS,SAAS,MAAM,GAAgB,EAGjF,IAAmB,aACrB,EAAU,QAAQ,MAAM,OAAS,GAAG,MACpC,EAAU,QAAQ,MAAM,MAAQ,OAGhC,EAAU,QAAQ,MAAM,UAAY,GACpC,EAAU,QAAQ,MAAM,aAAe,GAEvC,OAAU,QAAQ,MAAM,MAAQ,GAAG,MACnC,EAAU,QAAQ,MAAM,OAAS,OAGjC,EAAU,QAAQ,MAAM,WAAa,GACrC,EAAU,QAAQ,MAAM,YAAc,GAGxC,OAAO,KAEX,GAmBS,GAAY,CAAC,IACxB,CAAyD,IAAgD,CACvG,IAAM,EAAU,EAAO,SAAW,aAC5B,EAAc,EAAO,aAAe,aAG1C,GAAI,IAAY,SAAW,IAAY,eACrC,GAAI,IAAgB,aAAc,CAChC,IAAM,EAAa,EAAO,aAAe,OAAY,EAAO,WAAa,GACnE,EAAW,EAAO,WAAa,OAAY,EAAO,SAAY,IAAY,eAAiB,GAAK,EAEtG,EAAU,QAAQ,MAAM,WAAa,GAAG,MACxC,EAAU,QAAQ,MAAM,YAAc,GAAG,MACpC,KACL,IAAM,EAAa,EAAO,aAAe,OAAY,EAAO,WAAa,GACnE,EAAW,EAAO,WAAa,OAAY,EAAO,SAAY,IAAY,eAAiB,GAAK,EAEtG,EAAU,QAAQ,MAAM,UAAY,GAAG,MACvC,EAAU,QAAQ,MAAM,aAAe,GAAG,MAI9C,MAAO,IACF,EAEH,UAAU,EAAG,CACX,OAAO,GAGT,UAAU,CAAC,EAAqD,CAE9D,EAAU,QAAQ,UAAU,OAAO,GAAG,EAAU,SAAS,SAAS,MAAM,GAAS,EAGjF,EAAU,QAAQ,UAAU,IAAI,GAAG,EAAU,SAAS,SAAS,MAAM,GAAY,EAGjF,IAAM,EAAqB,EAAU,eAAiB,EAAU,eAAe,EAAI,EAEnF,GAAI,IAAe,aACjB,GAAI,IAAuB,aACzB,EAAU,QAAQ,MAAM,WAAa,GACrC,EAAU,QAAQ,MAAM,YAAc,GAEtC,OAAU,QAAQ,MAAM,UAAY,GACpC,EAAU,QAAQ,MAAM,aAAe,GAEpC,KACL,IAAM,EAAa,EAAO,aAAe,OAAY,EAAO,WAAa,GACnE,EAAW,EAAO,WAAa,OAAY,EAAO,SAAY,IAAe,eAAiB,GAAK,EAEzG,GAAI,IAAuB,aACzB,EAAU,QAAQ,MAAM,WAAa,GAAG,MACxC,EAAU,QAAQ,MAAM,YAAc,GAAG,MAEzC,OAAU,QAAQ,MAAM,UAAY,GAAG,MACvC,EAAU,QAAQ,MAAM,aAAe,GAAG,MAI9C,OAAO,MAGT,QAAQ,CAAC,EAAqB,EAAmB,CAC/C,IAAM,EAAqB,EAAU,eAAiB,EAAU,eAAe,EAAI,EAGnF,IAFuB,EAAU,WAAa,EAAU,WAAW,EAAI,KAEhD,aACrB,GAAI,IAAuB,aAAc,CACvC,GAAI,IAAe,OACjB,EAAU,QAAQ,MAAM,WAAa,GAAG,MAG1C,GAAI,IAAa,OACf,EAAU,QAAQ,MAAM,YAAc,GAAG,MAEtC,KACL,GAAI,IAAe,OACjB,EAAU,QAAQ,MAAM,UAAY,GAAG,MAGzC,GAAI,IAAa,OACf,EAAU,QAAQ,MAAM,aAAe,GAAG,MAKhD,OAAO,KAEX,GAmBS,GAAY,CAAC,IACxB,CAAyD,IAAgD,CAEvG,GAAI,EAAO,MACT,EAAU,QAAQ,MAAM,gBAAkB,EAAO,MAInD,IAAM,EAAY,EAAO,WAAa,EAChC,EAAc,EAAO,aAAe,aAE1C,GAAI,IAAgB,aAClB,EAAU,QAAQ,MAAM,OAAS,GAAG,MAEpC,OAAU,QAAQ,MAAM,MAAQ,GAAG,MAGrC,MAAO,IACF,EAEH,YAAY,CAAC,EAAsB,CAGjC,IAF2B,EAAU,eAAiB,EAAU,eAAe,EAAI,KAExD,aACzB,EAAU,QAAQ,MAAM,OAAS,GAAG,MAEpC,OAAU,QAAQ,MAAM,MAAQ,GAAG,MAGrC,OAAO,MAGT,QAAQ,CAAC,EAAe,CAEtB,OADA,EAAU,QAAQ,MAAM,gBAAkB,EACnC,KAEX,GF7LG,IAAM,GAAgB,CAAC,EAAwB,CAAC,IAAwB,CAE7E,IAAM,EAAkB,GAAiB,CAAM,EAG/C,OAAO,EACL,EACA,EAAY,CACV,IAAK,KACL,cAAe,UACf,UAAW,EAAO,KACpB,CAAC,EACD,GAAgB,CAAe,EAC/B,GAAY,CAAe,EAC3B,GAAU,CAAe,EACzB,GAAU,CAAe,CAC3B,EAAE,CAAe,GDpDnB,KAEA,IAAM,GAAgB,CACpB,KAAM,OACN,MAAO,QACP,YAAa,aACb,aAAc,cACd,WAAY,YACZ,YAAa,YACf,EAOa,GAAgB,CAAC,IAAyB,CAAC,IAAc,CAEpE,IAAM,EAAgB,GAAiB,CAAM,EACvC,EAAU,SAAS,cAAc,EAAc,KAAO,KAAK,EAMjE,GAHA,EAAQ,UAAU,IAAI,EAAU,SAAS,gBAAgB,CAAC,EAIxD,EAAc,YACd,OAAO,EAAc,aAAe,SAEpC,OAAO,QAAQ,EAAc,UAAU,EAAE,QAAQ,EAAE,EAAK,KAAW,CACjE,GAAI,GAAO,OAAO,IAAQ,UAAY,IAAU,OAC9C,EAAQ,aAAa,EAAK,OAAO,CAAK,CAAC,EAE1C,EAIH,GAAI,EAAO,OACT,EAAQ,MAAM,OAAS,OAAO,EAAO,MAAM,EAI7C,IAAM,EAAe,IAAM,CACzB,IAAM,EAAS,SAAS,cAAc,KAAK,EAC3C,EAAO,UAAU,IAAI,EAAU,SAAS,eAAe,CAAC,EAExD,IAAM,EAAgB,SAAS,cAAc,KAAK,EAIlD,GAHA,EAAc,UAAU,IAAI,EAAU,SAAS,uBAAuB,CAAC,EACvE,EAAO,YAAY,CAAa,EAE5B,EAAO,MAAO,CAChB,IAAM,EAAQ,SAAS,cAAc,IAAI,EACzC,EAAM,UAAU,IAAI,EAAU,SAAS,qBAAqB,CAAC,EAC7D,EAAM,YAAc,EAAO,MAC3B,EAAc,YAAY,CAAK,EAGjC,GAAI,EAAO,SAAU,CACnB,IAAM,EAAW,SAAS,cAAc,GAAG,EAC3C,EAAS,UAAU,IAAI,EAAU,SAAS,wBAAwB,CAAC,EACnE,EAAS,YAAc,EAAO,SAC9B,EAAc,YAAY,CAAQ,EAGpC,GAAI,EAAO,cAAgB,GAAO,CAChC,IAAM,EAAc,SAAS,cAAc,QAAQ,EACnD,EAAY,UAAU,IAAI,EAAU,SAAS,qBAAqB,CAAC,EACnE,EAAY,aAAa,aAAc,cAAc,EACrD,EAAY,UAAY;AAAA;AAAA;AAAA;AAAA;AAAA,QAQxB,EAAY,iBAAiB,QAAS,CAAC,IAAM,CAK3C,GAJA,EAAE,eAAe,EACjB,EAAE,gBAAgB,EAGd,GAAa,EAAU,KACzB,EAAU,KAAK,eAAgB,CAAE,OAAQ,aAAc,CAAC,EAE3D,EAED,EAAO,YAAY,CAAW,EAGhC,OAAO,GAGH,EAAgB,IAAM,CAC1B,IAAM,EAAU,SAAS,cAAc,KAAK,EAG5C,GAFA,EAAQ,UAAU,IAAI,EAAU,SAAS,gBAAgB,CAAC,EAEtD,EAAO,QACT,EAAQ,UAAY,EAAO,QAG7B,OAAO,GAGH,EAAe,IAAM,CACzB,IAAM,EAAS,SAAS,cAAc,KAAK,EAC3C,EAAO,UAAU,IAAI,EAAU,SAAS,eAAe,CAAC,EAGxD,IAAM,EAAY,EAAO,iBAAmB,QAC5C,GAAI,IAAc,QAChB,EAAS,EAAQ,GAAG,EAAU,SAAS,eAAe,MAAM,GAAW,EAIzE,GAAI,MAAM,QAAQ,EAAO,OAAO,GAAK,EAAO,QAAQ,OAAS,EAC3D,EAAO,QAAQ,QAAQ,CAAC,IACtB,GAAU,EAAQ,EAAc,CAAS,CAC3C,EAGF,OAAO,GAGH,EAAuB,IAAM,CAKjC,OAJgB,GAAc,CAC5B,QAAS,aACT,MAAO,EAAU,SAAS,gBAAgB,CAC5C,CAAC,GAKG,EAAS,EAAa,EACtB,EAAU,EAAc,EACxB,EACJ,MAAM,QAAQ,EAAO,OAAO,GAAK,EAAO,QAAQ,OAAS,EACrD,EAAa,EACb,KAGN,EAAS,EAAU,QAAS,EAAU,SAAS,QAAQ,CAAC,EAGxD,IAAM,EAAO,EAAO,MAAQ,SAC5B,GAAI,IAAS,SACX,EAAS,EAAU,QAAS,GAAG,EAAU,SAAS,QAAQ,MAAM,GAAM,EAIxE,IAAM,EAAY,EAAO,WAAa,QACtC,GAAI,IAAc,QAChB,EACE,EAAU,QACV,GAAG,EAAU,SAAS,QAAQ,MAAM,GACtC,EAIF,EAAU,QAAQ,YAAY,CAAM,EAGpC,IAAI,EAAgB,KAChB,EAAgB,KAEpB,GAAI,EAAO,SAST,GAPA,EAAgB,EAAqB,EACrC,EAAc,QAAQ,UAAU,IAC9B,EAAU,SAAS,uBAAuB,CAC5C,EACA,EAAU,QAAQ,YAAY,EAAc,OAAO,EAG/C,EACF,EAAgB,EAAqB,EACrC,EAAc,QAAQ,UAAU,IAC9B,EAAU,SAAS,uBAAuB,CAC5C,EAQJ,GAHA,EAAU,QAAQ,YAAY,CAAO,EAGjC,EACF,EAAU,QAAQ,YAAY,EAAc,OAAO,EAIrD,GAAI,EACF,EAAU,QAAQ,YAAY,CAAM,EAItC,EAAQ,YAAY,EAAU,OAAO,EAGrC,IAAM,EAAY,EAAO,WAAa,SAAS,KAI/C,OAHA,EAAU,YAAY,CAAO,EAGtB,IACF,EACH,UACA,UAAW,CACT,SACA,UACA,SACA,gBACA,gBACA,WACF,CACF,GAOW,GAAc,IAAM,CAAC,IAAc,CAC9C,MAAO,IACF,EACH,QAAS,CAMP,aAAa,CAAC,EAAM,CAElB,GAAI,GAAQ,CAAC,EAAU,UAAU,cAAe,CAE9C,IAAM,EAAgB,GAAc,CAClC,QAAS,aACT,MAAO,GAAG,EAAU,SAClB,gBACF,KAAK,EAAU,SAAS,uBAAuB,GACjD,CAAC,EAWD,GARA,EAAU,QAAQ,aAChB,EAAc,QACd,EAAU,UAAU,OACtB,EAEA,EAAU,UAAU,cAAgB,EAIlC,EAAU,UAAU,QACpB,CAAC,EAAU,UAAU,cACrB,CACA,IAAM,EAAgB,GAAc,CAClC,QAAS,aACT,MAAO,GAAG,EAAU,SAClB,gBACF,KAAK,EAAU,SAAS,uBAAuB,GACjD,CAAC,EAGD,EAAU,QAAQ,aAChB,EAAc,QACd,EAAU,UAAU,MACtB,EAEA,EAAU,UAAU,cAAgB,GAEjC,QAAI,CAAC,EAAM,CAEhB,GAAI,EAAU,UAAU,cACtB,EAAU,UAAU,cAAc,QAAQ,OAAO,EACjD,EAAU,UAAU,cAAgB,KAItC,GAAI,EAAU,UAAU,cACtB,EAAU,UAAU,cAAc,QAAQ,OAAO,EACjD,EAAU,UAAU,cAAgB,KAIxC,OAAO,GAOT,UAAU,EAAG,CACX,OAAO,EAAU,UAAU,gBAAkB,KAEjD,CACF,GASI,GAAY,CAChB,EACA,EACA,IACG,CACH,IACE,OACA,UAAU,OACV,UACA,cAAc,GACd,YAAY,GACZ,aAAa,CAAC,GACZ,EAEE,EAAS,GAAa,CAC1B,OACA,aACG,CACL,CAAC,EA2BD,GAxBA,EAAO,GAAG,QAAS,CAAC,IAAU,CAC5B,IAAI,EAAc,EAGlB,GAAI,OAAO,IAAY,WACrB,GAAI,CAEF,GADe,EAAQ,EAAO,CAAS,IACxB,GACb,EAAc,GAEhB,MAAO,EAAK,CACZ,QAAQ,MAAM,4BAA6B,CAAG,EAKlD,GAAI,GACF,GAAI,GAAa,EAAU,KACzB,EAAU,KAAK,eAAgB,CAAE,OAAQ,SAAU,MAAK,CAAC,GAG9D,EAGG,EACF,EAAO,QAAQ,aAAa,YAAa,MAAM,EAMjD,GAHA,EAAO,YAAY,EAAO,OAAO,EAG7B,CAAC,EAAU,SACb,EAAU,SAAW,CAAC,EAGxB,EAAU,SAAS,KAAK,CACtB,OAAQ,EACR,SAAU,CACZ,CAAC,GAOU,GAAiB,IAAM,CAAC,IAAc,CAEjD,IAAM,EAAS,EAAU,OAAO,OAAS,GAGnC,EAAoB,EAAU,OAAO,mBAAqB,IAG1D,EACJ,2EACE,EAA+C,KAC/C,EAAqB,GAEnB,EAAY,IAAM,CACtB,GAAI,CAAC,EAAU,OAAO,UAAW,OAEjC,IAAM,EACJ,EAAU,QAAQ,iBARpB,0EAQsD,EACtD,GAAI,EAAiB,SAAW,EAAG,OAEnC,IAAM,EAAwB,EAAiB,GACzC,EAAuB,EAC3B,EAAiB,OAAS,GAI5B,GAAI,EAAU,OAAO,UAAW,CAE9B,IAAM,EAAmB,EAAU,QAAQ,cACzC,aACF,EACA,GAAI,EACF,EAAiB,MAAM,EAEvB,OAAsB,MAAM,EAKhC,EAAU,QAAQ,iBAAiB,UAAW,CAAa,EAE3D,SAAS,CAAa,CAAC,EAAkB,CAGvC,GAFqB,EAAE,MAAQ,MAEZ,OAEnB,GAAI,EAAE,UAEJ,GAAI,SAAS,gBAAkB,EAC7B,EAAqB,MAAM,EAC3B,EAAE,eAAe,EAInB,QAAI,SAAS,gBAAkB,EAC7B,EAAsB,MAAM,EAC5B,EAAE,eAAe,IAMnB,EAAe,IAAM,CACzB,GAAI,CAAC,EAAU,OAAO,UAAW,OAKjC,GAHA,EAAU,QAAQ,oBAAoB,UAAW,CAAa,EAG1D,EACF,EAAyB,MAAM,EAC/B,EAA2B,KAG7B,SAAS,CAAa,EAAG,IAGrB,EAAc,IAAM,CAGxB,GAAI,EAAU,OAAO,sBAAwB,GAC3C,EAAU,QAAQ,iBAAiB,YAAa,CAAsB,EACtE,SAAS,iBAAiB,UAAW,CAAoB,EAI3D,GAAI,EAAU,OAAO,gBAAkB,GACrC,SAAS,iBAAiB,UAAW,CAAY,GAI/C,EAAgB,IAAM,CAC1B,EAAU,QAAQ,oBAAoB,YAAa,CAAsB,EACzE,SAAS,oBAAoB,UAAW,CAAoB,EAC5D,SAAS,oBAAoB,UAAW,CAAY,GAGtD,SAAS,CAAsB,CAAC,EAAe,CAE7C,EAAqB,EAAE,SAAW,EAAU,QAG9C,SAAS,CAAoB,CAAC,EAAe,CAE3C,GAAI,GAAsB,EAAE,SAAW,EAAU,QAC/C,EAAW,MAAM,EAEnB,EAAqB,GAGvB,SAAS,CAAY,CAAC,EAAkB,CACtC,GAAI,EAAE,MAAQ,UAAY,EAAW,OAAO,EAC1C,EAAW,MAAM,EAKrB,GAAI,EACF,EACE,EAAU,QACV,GAAG,EAAU,SAAS,gBAAgB,YACxC,EACA,EAAS,EAAU,QAAS,GAAG,EAAU,SAAS,QAAQ,YAAY,EAGtE,EAAU,EACV,EAAY,EAId,IAAM,EAAa,CACjB,IAAI,EAAG,CAEL,GAAI,KAAK,OAAO,EAAG,OAGnB,EAA2B,SAAS,cAGpC,IAAM,EAAkB,CACtB,OAAQ,EACR,iBAAkB,GAClB,eAAgB,IAAM,CACpB,EAAgB,iBAAmB,GAEvC,EAEA,GAAI,OAAO,EAAU,OAAS,WAC5B,EAAU,KAAK,GAAc,YAAa,CAAe,EAI3D,GAAI,EAAgB,iBAAkB,OAGtC,GAAI,EAAU,SAAW,CAAC,EAAU,QAAQ,YACxB,EAAU,UAAU,WAAa,SAAS,MAClD,YAAY,EAAU,OAAO,EAIzC,EACE,EAAU,QACV,GAAG,EAAU,SAAS,gBAAgB,YACxC,EAGA,WAAW,IAAM,CAQf,GAPA,EAAS,EAAU,QAAS,GAAG,EAAU,SAAS,QAAQ,YAAY,EAGtE,EAAU,EACV,EAAY,EAGR,OAAO,EAAU,OAAS,WAC5B,EAAU,KAAK,GAAc,KAAM,CAAE,OAAQ,CAAU,CAAC,EAExD,WAAW,IAAM,CACf,EAAU,KAAK,GAAc,WAAY,CAAE,OAAQ,CAAU,CAAC,GAC7D,CAAiB,GAErB,EAAE,GAGP,KAAK,EAAG,CAIN,IAAM,EAAmB,CACvB,OAAQ,EACR,iBAAkB,GAClB,eAAgB,IAAM,CACpB,EAAiB,iBAAmB,GAExC,EAEA,GAAI,OAAO,EAAU,OAAS,WAC5B,EAAU,KAAK,GAAc,aAAc,CAAgB,EAI7D,GAAI,EAAiB,iBAAkB,CACrC,QAAQ,IAAI,yCAAyC,EACrD,OAIF,IAAM,EAAqB,GAAG,EAAU,SAAS,QAAQ,aACnD,EAAsB,GAAG,EAAU,SACvC,gBACF,aAaA,GAVA,GAAY,EAAU,QAAS,CAAkB,EAGjD,GAAY,EAAU,QAAS,CAAmB,EAGlD,EAAa,EACb,EAAc,EAGV,OAAO,EAAU,OAAS,WAC5B,EAAU,KAAK,GAAc,MAAO,CAAE,OAAQ,CAAU,CAAC,EAI3D,WAAW,IAAM,CACf,GAAI,EAAU,SAAW,EAAU,QAAQ,WACzC,EAAU,QAAQ,WAAW,YAAY,EAAU,OAAO,EAG5D,GAAI,OAAO,EAAU,OAAS,WAC5B,EAAU,KAAK,GAAc,YAAa,CAAE,OAAQ,CAAU,CAAC,GAEhE,CAAiB,GAGtB,MAAM,CAAC,EAAgB,CACrB,GAAI,IAAS,OACX,KAAK,OAAO,EAAI,KAAK,MAAM,EAAI,KAAK,KAAK,EACpC,QAAI,EACT,KAAK,KAAK,EAEV,UAAK,MAAM,GAIf,MAAM,EAAG,CACP,OAAO,EAAU,QAAQ,UAAU,SACjC,GAAG,EAAU,SAAS,QAAQ,YAChC,EAEJ,EAGA,GAAI,GAAa,EAAU,GACzB,EAAU,GAAG,eAAgB,IAAM,CACjC,EAAW,MAAM,EAClB,EAGH,MAAO,IACF,EACH,YACF,GAOW,GAAc,IAAM,CAAC,IAAc,CAC9C,IAAM,EAAgB,EAAU,UAAU,OACpC,EAAiB,EAAU,UAAU,QACrC,EAAgB,EAAU,UAAU,OAE1C,MAAO,IACF,EACH,QAAS,CAKP,QAAQ,CAAC,EAAe,CACtB,IAAI,EAAe,EAAc,cAC/B,IAAI,EAAU,SAAS,qBAAqB,GAC9C,EAEA,GAAI,CAAC,GAAgB,EAEnB,EAAe,SAAS,cAAc,IAAI,EAC1C,EAAa,UAAU,IAAI,EAAU,SAAS,qBAAqB,CAAC,EACpE,EACG,cAAc,IAAI,EAAU,SAAS,uBAAuB,GAAG,EAC/D,YAAY,CAAY,EAG7B,GAAI,EACF,EAAa,YAAc,GAQ/B,QAAQ,EAAG,CACT,IAAM,EAAe,EAAc,cACjC,IAAI,EAAU,SAAS,qBAAqB,GAC9C,EACA,OAAO,EAAe,EAAa,aAAe,GAAK,IAOzD,WAAW,CAAC,EAAkB,CAC5B,IAAI,EAAkB,EAAc,cAClC,IAAI,EAAU,SAAS,wBAAwB,GACjD,EAEA,GAAI,CAAC,GAAmB,EAEtB,EAAkB,SAAS,cAAc,GAAG,EAC5C,EAAgB,UAAU,IACxB,EAAU,SAAS,wBAAwB,CAC7C,EACA,EACG,cAAc,IAAI,EAAU,SAAS,uBAAuB,GAAG,EAC/D,YAAY,CAAe,EAGhC,GAAI,EACF,EAAgB,YAAc,GAQlC,WAAW,EAAG,CACZ,IAAM,EAAkB,EAAc,cACpC,IAAI,EAAU,SAAS,wBAAwB,GACjD,EACA,OAAO,EAAkB,EAAgB,aAAe,GAAK,IAO/D,UAAU,CAAC,EAAiB,CAC1B,EAAe,UAAY,GAO7B,UAAU,EAAG,CACX,OAAO,EAAe,WAOxB,gBAAgB,EAAG,CACjB,OAAO,GAOT,iBAAiB,EAAG,CAClB,OAAO,GAOT,gBAAgB,EAAG,CACjB,OAAO,EAEX,CACF,GAOW,GAAc,IAAM,CAAC,IAAc,CAE9C,GAAI,CAAC,EAAU,SACb,EAAU,SAAW,CAAC,EAGxB,MAAO,IACF,EACH,QAAS,CAKP,SAAS,CAAC,EAAsB,CAE9B,IAAI,EAAS,EAAU,UAAU,OAEjC,GAAI,CAAC,EAAQ,CACX,EAAS,SAAS,cAAc,KAAK,EACrC,EAAO,UAAU,IAAI,EAAU,SAAS,eAAe,CAAC,EAGxD,IAAM,EAAY,EAAU,OAAO,iBAAmB,QACtD,GAAI,IAAc,QAChB,EACE,EACA,GAAG,EAAU,SAAS,eAAe,MAAM,GAC7C,EAGF,EAAU,QAAQ,YAAY,CAAM,EACpC,EAAU,UAAU,OAAS,EAI/B,GAAU,EAAQ,EAAQ,CAAS,GAOrC,YAAY,CAAC,EAA8B,CACzC,GAAI,OAAO,IAAgB,UAEzB,GAAI,GAAe,GAAK,EAAc,EAAU,SAAS,OACxC,EAAU,SAAS,GAC3B,SAAS,QAAQ,EACxB,EAAU,SAAS,OAAO,EAAa,CAAC,EAErC,KAEL,IAAM,EAAQ,EAAU,SAAS,UAC/B,CAAC,IAAW,EAAO,OAAO,OAAS,CACrC,EAEA,GAAI,IAAU,GACG,EAAU,SAAS,GAC3B,SAAS,QAAQ,EACxB,EAAU,SAAS,OAAO,EAAO,CAAC,EAKtC,GAAI,EAAU,SAAS,SAAW,GAAK,EAAU,UAAU,OACzD,EAAU,QAAQ,YAAY,EAAU,UAAU,MAAM,EACxD,EAAU,UAAU,OAAS,MAQjC,UAAU,EAAG,CACX,OAAO,EAAU,SAAS,IAAI,CAAC,IAAW,EAAO,MAAM,GAOzD,kBAAkB,CAAC,EAAmB,CACpC,GAAI,CAAC,EAAU,UAAU,OAAQ,OAgBjC,GAbuB,CAAC,QAAS,OAAQ,SAAU,eAAe,EAGnD,QAAQ,CAAC,IAAU,CAChC,GAAI,IAAU,QACZ,GACE,EAAU,UAAU,OACpB,GAAG,EAAU,SAAS,eAAe,MAAM,GAC7C,EAEH,EAGG,IAAc,QAChB,EACE,EAAU,UAAU,OACpB,GAAG,EAAU,SAAS,eAAe,MAAM,GAC7C,EAGN,CACF,GAOW,GAAW,IAAM,CAAC,IAAc,CAC3C,MAAO,IACF,EACH,KAAM,CAKJ,OAAO,CAAC,EAAc,CAmBpB,GAjBkB,CAChB,QACA,SACA,QACA,YACA,YACF,EAGU,QAAQ,CAAC,IAAc,CAC/B,GACE,EAAU,QACV,GAAG,EAAU,SAAS,QAAQ,MAAM,GACtC,EACD,EAGG,IAAS,SACX,EACE,EAAU,QACV,GAAG,EAAU,SAAS,QAAQ,MAAM,GACtC,EAGN,CACF,GAOW,GAAc,IAAM,CAAC,IAAc,CAC9C,MAAO,IACF,EACH,OAAO,CAAC,EAAS,CACf,OAAO,IAAI,QAAQ,CAAC,IAAY,CAC9B,IACE,QAAQ,UACR,UACA,cAAc,MACd,aAAa,KAEb,iBAAiB,SACjB,gBAAgB,OAChB,OAAO,SACL,EAGJ,EAAU,QAAQ,SAAS,CAAK,EAChC,EAAU,QAAQ,WAAW,MAAM,OAAa,EAChD,EAAU,KAAK,QAAQ,CAAI,EAG3B,EAAU,SAAS,QAAQ,CAAC,IAAW,EAAO,SAAS,QAAQ,CAAC,EAChE,EAAU,SAAW,CAAC,EAGtB,EAAU,QAAQ,UAAU,CAC1B,KAAM,EACN,QAAS,EACT,QAAS,IAAM,CACb,EAAQ,EAAI,EAEhB,CAAC,EAED,EAAU,QAAQ,UAAU,CAC1B,KAAM,EACN,QAAS,EACT,QAAS,IAAM,CACb,EAAQ,EAAK,EAEjB,CAAC,EAGD,EAAU,WAAW,KAAK,EAC3B,EAEL,GI58BF,KA4DO,IAAM,GAAU,CAAC,IACtB,CAAC,KAAuD,IACnD,EAMH,IAAI,EAAG,CAEL,OADA,EAAQ,WAAW,KAAK,EACjB,MAOT,KAAK,EAAG,CAEN,OADA,EAAQ,WAAW,MAAM,EAClB,MAQT,MAAM,CAAC,EAAgB,CAErB,OADA,EAAQ,WAAW,OAAO,CAAI,EACvB,MAOT,MAAM,EAAG,CACP,OAAO,EAAQ,WAAW,OAAO,GAQnC,QAAQ,CAAC,EAAe,CAEtB,OADA,EAAQ,QAAQ,SAAS,CAAK,EACvB,MAOT,QAAQ,EAAG,CACT,OAAO,EAAQ,QAAQ,SAAS,GAQlC,WAAW,CAAC,EAAkB,CAE5B,OADA,EAAQ,QAAQ,YAAY,CAAQ,EAC7B,MAOT,WAAW,EAAG,CACZ,OAAO,EAAQ,QAAQ,YAAY,GAQrC,UAAU,CAAC,EAAiB,CAE1B,OADA,EAAQ,QAAQ,WAAW,CAAO,EAC3B,MAOT,UAAU,EAAG,CACX,OAAO,EAAQ,QAAQ,WAAW,GAQpC,SAAS,CAAC,EAAsB,CAE9B,OADA,EAAQ,QAAQ,UAAU,CAAM,EACzB,MAQT,YAAY,CAAC,EAA8B,CAEzC,OADA,EAAQ,QAAQ,aAAa,CAAW,EACjC,MAOT,UAAU,EAAG,CACX,OAAO,EAAQ,QAAQ,WAAW,GAQpC,kBAAkB,CAAC,EAA2C,CAE5D,OADA,EAAQ,QAAQ,mBAAmB,CAAS,EACrC,MAQT,aAAa,CAAC,EAAe,CAE3B,OADA,EAAQ,QAAQ,cAAc,CAAI,EAC3B,MAOT,UAAU,EAAG,CACX,OAAO,EAAQ,QAAQ,WAAW,GAQpC,OAAO,CAAC,EAA2B,CAEjC,OADA,EAAQ,KAAK,QAAQ,CAAI,EAClB,MAST,EAAE,CAAC,EAAiC,EAAuC,CAEzE,OADA,EAAQ,OAAO,GAAG,EAAO,CAAO,EACzB,MAST,GAAG,CAAC,EAAiC,EAAuC,CAE1E,OADA,EAAQ,OAAO,IAAI,EAAO,CAAO,EAC1B,MAOT,gBAAgB,EAAG,CACjB,OAAO,EAAQ,QAAQ,iBAAiB,GAO1C,iBAAiB,EAAG,CAClB,OAAO,EAAQ,QAAQ,kBAAkB,GAO3C,gBAAgB,EAAG,CACjB,OAAO,EAAQ,QAAQ,iBAAiB,GAQ1C,OAAO,CAAC,EAAgC,CACtC,GAAI,EAAU,QACZ,OAAO,EAAU,QAAQ,GAAW,CAAE,QAAS,eAAgB,CAAC,EAIlE,OAAO,QAAQ,QAAQ,EAAK,GAM9B,OAAO,EAAG,CAGR,GADA,QAAQ,IAAI,UAAW,KAAK,OAAO,CAAC,EAChC,KAAK,OAAO,EAAG,CAGjB,IAAM,EAAqB,GAAG,EAAU,SAAS,QAAQ,aACnD,EAAsB,GAAG,EAAU,SAAS,gBAAgB,aAOlE,GAJA,GAAY,EAAU,QAAS,CAAkB,EACjD,GAAY,EAAU,QAAS,CAAmB,EAG9C,EAAQ,OAAS,EAAQ,MAAM,aACjC,EAAQ,MAAM,aAAa,EAQ/B,GAHA,EAAQ,UAAU,QAAQ,EAGtB,EAAU,SAAW,EAAU,QAAQ,WACzC,EAAU,QAAQ,WAAW,YAAY,EAAU,OAAO,GAK9D,QAAS,EAAU,QACnB,QAAS,EAAU,OACrB,GNpNF,IAAM,GAAe,CAAC,EAAuB,CAAC,IAAuB,CACnE,IAAM,EAAa,GAAiB,CAAM,EAE1C,GAAI,CAGF,IAAM,EAAS,EACb,EACA,EAAW,EACX,EAAY,GAAiB,CAAU,CAAC,EACxC,GAAc,CAAU,EACxB,GAAe,EACf,GAAY,EACZ,GAAY,EACZ,GAAS,EACT,GAAY,EACZ,GAAY,EACZ,EAAc,EACd,KAAQ,GAAQ,GAAa,CAAI,CAAC,EAAE,CAAI,CAC1C,EAAE,CAAU,EAGZ,GAAI,EAAW,GACb,OAAO,QAAQ,EAAW,EAAE,EAAE,QAAQ,EAAE,EAAO,KAAa,CAC1D,GAAI,OAAO,IAAY,WACrB,EAAO,GAAG,EAAO,CAAO,EAE3B,EAGH,OAAO,EACP,MAAO,EAAO,CAEd,MADA,QAAQ,MAAM,yBAA0B,CAAK,EACnC,MAAM,4BAA6B,EAAgB,SAAS,IAI3D,MO5If,IACA,IACA,ICEO,IAAM,GAAkB,CAE7B,SAAU,WAEV,MAAO,OACT,EAKa,GAAmB,CAE9B,MAAO,QAEP,IAAK,KACP,EAiBO,IAAM,GAAgB,CAE3B,KAAM,OAEN,MAAO,QAEP,OAAQ,QACV,EAiDO,IAAM,GAAkB,CAE7B,QAAS,GAAgB,SAEzB,SAAU,GAAiB,MAE3B,KAAM,GAEN,YAAa,GAEb,MAAO,GACT,ECtFA,IAAM,GAAoB,CACxB,EACA,IACgB,CAChB,IAAM,EAAK,SAAS,cAAc,QAAQ,EAK1C,GAJA,EAAG,UAAY,EAAS,cAAc,EACtC,EAAG,aAAa,OAAQ,KAAK,EAC7B,EAAG,aAAa,WAAY,IAAI,EAE5B,EAAK,GACP,EAAG,QAAQ,GAAK,EAAK,GAGvB,GAAI,EAAK,SACP,EAAG,SAAW,GACd,EAAG,aAAa,gBAAiB,MAAM,EAIzC,IAAM,EAAY,SAAS,cAAc,MAAM,EAK/C,GAJA,EAAU,UAAY,EAAS,0BAA0B,EACzD,EAAG,YAAY,CAAS,EAGpB,EAAK,KAAM,CACb,IAAM,EAAS,SAAS,cAAc,MAAM,EAC5C,EAAO,UAAY,EAAS,mBAAmB,EAC/C,EAAO,UAAY,EAAK,KACxB,EAAG,YAAY,CAAM,EAIvB,GAAI,EAAK,MAAO,CACd,IAAM,EAAU,SAAS,cAAc,MAAM,EAC7C,EAAQ,UAAY,EAAS,oBAAoB,EACjD,EAAQ,YAAc,EAAK,MAC3B,EAAG,YAAY,CAAO,EAIxB,GAAI,EAAK,MAAO,CACd,IAAM,EAAU,SAAS,cAAc,MAAM,EAC7C,EAAQ,UAAY,EAAS,oBAAoB,EACjD,EAAQ,YAAc,EAAK,MAC3B,EAAG,YAAY,CAAO,EAIxB,GAAI,EAAK,OACP,EAAG,UAAU,IAAI,GAAG,EAAS,cAAc,WAAW,EACtD,EAAG,aAAa,gBAAiB,MAAM,EACvC,EAAG,aAAa,WAAY,GAAG,EAE/B,OAAG,aAAa,gBAAiB,OAAO,EAG1C,OAAO,GAMH,GAAuB,CAC3B,IACgB,CAChB,IAAM,EAAK,SAAS,cAAc,IAAI,EAGtC,OAFA,EAAG,UAAY,EAAS,iBAAiB,EACzC,EAAG,aAAa,OAAQ,WAAW,EAC5B,GAMH,GAAuB,CAC3B,EACA,IACgB,CAChB,IAAM,EAAK,SAAS,cAAc,KAAK,EAGvC,OAFA,EAAG,UAAY,EAAS,uBAAuB,EAC/C,EAAG,YAAc,EAAK,OAAS,EAAK,cAAgB,GAC7C,GASI,GACX,CAAC,IACD,CAAC,IAAsD,CACrD,IAAI,EAAmC,EAAO,OAAS,CAAC,EACpD,EAA0B,KAC1B,EAAqC,KAGnC,EAAgB,EAAa,KACjC,CAAC,IACC,EAAK,OAAS,WAAa,EAAK,OAAS,WAAa,EAAK,MAC/D,EACA,GAAI,GAAe,GACjB,EAAW,EAAc,GAM3B,IAAM,EAAc,IAAY,CAC9B,GAAI,CAAC,EAAgB,OAGrB,EAAe,UAAY,GAE3B,IAAI,EAAW,EA8Cf,GA5CA,EAAa,QAAQ,CAAC,IAAS,CAC7B,IAAM,EAAO,EAAK,MAAQ,OAE1B,GAAI,IAAS,UAAW,CACtB,EAAgB,YAAY,GAAqB,EAAU,QAAQ,CAAC,EACpE,OAGF,GAAI,IAAS,UAAW,CACtB,EAAgB,YACd,GAAqB,EAAM,EAAU,QAAQ,CAC/C,EACA,OAIF,IAAM,EAAS,GAAkB,EAAM,EAAU,QAAQ,EACzD,EAAO,QAAQ,SAAW,OAAO,CAAQ,EACzC,IAGA,EAAO,iBAAiB,QAAS,CAAC,IAAa,CAC7C,GAAI,EAAK,IAAM,CAAC,EAAK,SAAU,CAC7B,EAAU,EAAK,EAAE,EAEjB,IAAM,EAAiC,CACrC,GAAI,EAAK,GACT,MAAO,EAAK,OAAS,GACrB,MAAO,SAAS,EAAO,QAAQ,UAAY,IAAK,EAAE,EAClD,cAAe,CACjB,EAIA,GAFA,EAAU,KAAK,GAAc,OAAQ,CAAW,EAE5C,EAAO,SACT,EAAO,SAAS,CAAW,GAGhC,EAED,EAAgB,YAAY,CAAM,EACnC,EAGG,CAAC,EAAU,CACb,IAAM,EAAY,EAAe,cAC/B,IAAI,EAAU,SAAS,cAAc,GACvC,EACA,GAAI,EACF,EAAU,aAAa,WAAY,GAAG,IAQtC,EAAY,CAAC,IAAqB,CACtC,GAAI,CAAC,EAAgB,OAErB,IAAM,EAAc,GAAG,EAAU,SAAS,cAAc,YAaxD,GAViB,EAAe,iBAC9B,IAAI,EAAU,SAAS,cAAc,GACvC,EACS,QAAQ,CAAC,IAAO,CACvB,EAAG,UAAU,OAAO,CAAW,EAC/B,EAAG,aAAa,gBAAiB,OAAO,EACxC,EAAG,aAAa,WAAY,IAAI,EACjC,EAGG,CAAC,EAAI,CACP,EAAW,KAGX,IAAM,EAAY,EAAe,cAC/B,IAAI,EAAU,SAAS,cAAc,GACvC,EACA,GAAI,EACF,EAAU,aAAa,WAAY,GAAG,EAEnC,KAEL,IAAM,EAAa,EAAe,cAChC,aAAa,KACf,EACA,GAAI,EACF,EAAW,UAAU,IAAI,CAAW,EACpC,EAAW,aAAa,gBAAiB,MAAM,EAC/C,EAAW,aAAa,WAAY,GAAG,EACvC,EAAW,EAKf,EAAe,EAAa,IAAI,CAAC,KAAU,IACtC,EACH,OAAQ,EAAK,KAAO,CACtB,EAAE,GAME,EAAY,IAAqB,EAKjC,EAAW,CAAC,IAAoC,CACpD,EAAe,EAOf,EAJe,EAAM,KACnB,CAAC,IACC,EAAK,OAAS,WAAa,EAAK,OAAS,WAAa,EAAK,MAC/D,GACmB,IAAM,KAEzB,EAAY,GAMR,EAAW,IAA0B,EAKrC,EAAW,CAAC,EAAY,IAAwB,CACpD,GAAI,CAAC,EAAgB,OAErB,IAAM,EAAS,EAAe,cAC5B,aAAa,KACf,EACA,GAAI,CAAC,EAAQ,OAEb,IAAI,EAAU,EAAO,cACnB,IAAI,EAAU,SAAS,oBAAoB,GAC7C,EAEA,GAAI,EAAO,CACT,GAAI,CAAC,EACH,EAAU,SAAS,cAAc,MAAM,EACvC,EAAQ,UAAY,EAAU,SAAS,oBAAoB,EAC3D,EAAO,YAAY,CAAO,EAE5B,EAAQ,YAAc,EACjB,QAAI,EACT,EAAQ,OAAO,EAIjB,EAAe,EAAa,IAAI,CAAC,IAC/B,EAAK,KAAO,EAAK,IAAK,EAAM,OAAM,EAAI,CACxC,GAII,EAAgB,CAAC,IAA2B,CAChD,GAAI,CAAC,EAAgB,OAErB,IAAM,EAAQ,MAAM,KAClB,EAAe,iBACb,IAAI,EAAU,SAAS,cAAc,mBACvC,CACF,EAEA,GAAI,CAAC,EAAM,OAAQ,OAEnB,IAAM,EAAe,EAAM,QAAQ,SAAS,aAA4B,EAEpE,EAAY,GAEhB,OAAQ,EAAE,SACH,YACH,EAAE,eAAe,EACjB,EAAY,EAAe,EAAM,OAAS,EAAI,EAAe,EAAI,EACjE,UACG,UACH,EAAE,eAAe,EACjB,EAAY,EAAe,EAAI,EAAe,EAAI,EAAM,OAAS,EACjE,UACG,OACH,EAAE,eAAe,EACjB,EAAY,EACZ,UACG,MACH,EAAE,eAAe,EACjB,EAAY,EAAM,OAAS,EAC3B,UACG,YACA,IAEH,GADA,EAAE,eAAe,EACb,GAAgB,EAClB,EAAM,GAAc,MAAM,EAE5B,eAEA,OAGJ,GAAI,GAAa,GAAK,EAAY,EAAM,OACtC,EAAM,QAAQ,CAAC,IAAS,EAAK,aAAa,WAAY,IAAI,CAAC,EAC3D,EAAM,GAAW,aAAa,WAAY,GAAG,EAC7C,EAAM,GAAW,MAAM,GAa3B,OARA,EAAiB,SAAS,cAAc,KAAK,EAC7C,EAAe,UAAY,EAAU,SAAS,eAAe,EAC7D,EAAe,aAAa,OAAQ,SAAS,EAC7C,EAAe,aAAa,mBAAoB,UAAU,EAC1D,EAAe,iBAAiB,UAAW,CAAa,EAExD,EAAY,EAEL,IACF,EACH,iBACA,YAAa,CACX,YACA,YACA,WACA,WACA,WACA,aACF,CACF,GC3VG,IAAM,GACX,CAAC,IACD,CAAC,IAAsD,CACrD,IAAM,EAAU,EAAO,UAAY,QAC7B,EAAc,EAAO,cAAgB,GACvC,EAAS,EAAO,OAAS,GACzB,EAAmC,KAGvC,GAAI,GAIF,GAHA,EAAe,SAAS,cAAc,KAAK,EAC3C,EAAa,UAAY,EAAU,SAAS,eAAe,EAEvD,EACF,EAAa,iBAAiB,QAAS,IAAM,CAC3C,EAAM,EACP,EAKL,IAAM,EAAgB,CAAC,IAA2B,CAChD,GAAI,EAAE,MAAQ,UAAY,GAAU,GAAW,EAC7C,EAAE,eAAe,EACjB,EAAM,GAIV,GAAI,EACF,SAAS,iBAAiB,UAAW,CAAa,EAMpD,SAAS,CAAI,EAAS,CACpB,GAAI,EAAQ,OAKZ,GAHA,EAAS,GACT,EAAU,QAAQ,UAAU,IAAI,GAAG,EAAU,SAAS,QAAQ,SAAS,EAEnE,GAAW,EACb,EAAa,UAAU,IACrB,GAAG,EAAU,SAAS,eAAe,YACvC,EAEA,SAAS,KAAK,MAAM,SAAW,SAiBjC,GAbA,sBAAsB,IAAM,CAC1B,IAAM,EAAY,EAAU,QAAQ,cAClC,IAAI,EAAU,SAAS,cAAc,iBACvC,EACA,GAAI,EACF,EAAU,MAAM,EAEhB,OAAU,QAAQ,MAAM,EAE3B,EAED,EAAU,KAAK,GAAc,IAAI,EAE7B,EAAO,OACT,EAAO,OAAO,EAOlB,SAAS,CAAK,EAAS,CACrB,GAAI,CAAC,EAAQ,OAOb,GALA,EAAS,GACT,EAAU,QAAQ,UAAU,OAC1B,GAAG,EAAU,SAAS,QAAQ,SAChC,EAEI,GAAW,EACb,EAAa,UAAU,OACrB,GAAG,EAAU,SAAS,eAAe,YACvC,EACA,SAAS,KAAK,MAAM,SAAW,GAKjC,GAFA,EAAU,KAAK,GAAc,KAAK,EAE9B,EAAO,QACT,EAAO,QAAQ,EAOnB,SAAS,CAAM,EAAS,CACtB,GAAI,EACF,EAAM,EAEN,OAAK,EAKT,GAAI,GAEF,GADA,EAAU,QAAQ,UAAU,IAAI,GAAG,EAAU,SAAS,QAAQ,SAAS,EACnE,GAAW,EACb,EAAa,UAAU,IACrB,GAAG,EAAU,SAAS,eAAe,YACvC,EAIJ,MAAO,IACF,EACH,eACA,YAAa,CACX,OACA,QACA,SACA,OAAQ,IAAM,CAChB,EAEA,cAAe,IAAM,CACnB,GAAI,EAAS,CAEX,GADA,SAAS,oBAAoB,UAAW,CAAa,EACjD,GAAgB,EAAa,WAC/B,EAAa,WAAW,YAAY,CAAY,EAElD,SAAS,KAAK,MAAM,SAAW,IAGrC,GCvIG,IAAM,GACX,CAAC,IACD,CAAC,IAA4D,CAC3D,IAAI,EAAsC,KACtC,EAAuB,EAAO,UAAY,GAG9C,GAAI,EACF,EAAkB,SAAS,cAAc,KAAK,EAC9C,EAAgB,UAAY,EAAU,SAAS,kBAAkB,EACjE,EAAgB,YAAc,EA0BhC,MAAO,IACF,EACH,kBACA,eAAgB,CACd,YAxBgB,CAAC,IAAuB,CAG1C,GAFA,EAAe,EAEX,EAAM,CACR,GAAI,CAAC,EACH,EAAkB,SAAS,cAAc,KAAK,EAC9C,EAAgB,UAAY,EAAU,SAAS,kBAAkB,EAEnE,EAAgB,YAAc,EACzB,QAAI,GAAmB,EAAgB,WAC5C,EAAgB,WAAW,YAAY,CAAe,EACtD,EAAkB,MAclB,YAPgB,IAAc,EAQ9B,WAAY,IAAM,CACpB,CACF,GC5DJ,KAuDO,IAAM,GACX,EAAG,QAAO,QAAO,WAAU,eAC3B,CAAC,IAAsD,CACrD,IAAM,EAAmC,CACvC,QAAS,EAAU,QACnB,SAAU,EAAU,SAEpB,YAMA,EAAE,CAAC,EAAe,EAAmB,CACnC,GAAI,EAAU,GACZ,EAAU,GAAG,EAAO,CAAO,EAE7B,OAAO,GAGT,GAAG,CAAC,EAAe,EAAmB,CACpC,GAAI,EAAU,IACZ,EAAU,IAAI,EAAO,CAAO,EAE9B,OAAO,GAGT,QAAQ,IAAI,EAAmB,CAC7B,GAAI,EAAU,SACZ,EAAU,SAAS,GAAG,CAAO,EAE7B,OAAS,EAAU,QAAS,GAAG,CAAO,EAExC,OAAO,GAOT,IAAI,EAAG,CAEL,OADA,EAAM,KAAK,EACJ,GAGT,KAAK,EAAG,CAEN,OADA,EAAM,MAAM,EACL,GAGT,MAAM,EAAG,CAEP,OADA,EAAM,OAAO,EACN,GAGT,MAAM,EAAG,CACP,OAAO,EAAM,OAAO,GAOtB,SAAS,CAAC,EAAY,CAEpB,OADA,EAAM,UAAU,CAAE,EACX,GAGT,SAAS,EAAG,CACV,OAAO,EAAM,UAAU,GAGzB,QAAQ,CAAC,EAA8B,CAErC,OADA,EAAM,SAAS,CAAQ,EAChB,GAGT,QAAQ,EAAG,CACT,OAAQ,EAAM,SAAS,GAAK,CAAC,GAG/B,QAAQ,CAAC,EAAY,EAAe,CAElC,OADA,EAAM,SAAS,EAAI,CAAK,EACjB,GAOT,WAAW,CAAC,EAAc,CAExB,OADA,EAAS,YAAY,CAAI,EAClB,GAGT,WAAW,EAAG,CACZ,OAAO,EAAS,YAAY,GAO9B,OAAO,EAAG,CACR,EAAU,QAAQ,EAEtB,EAEA,OAAO,GCpKX,IAaO,IAAM,GAA8B,CACzC,QAAS,GAAgB,QACzB,SAAU,GAAgB,SAC1B,KAAM,GAAgB,KACtB,YAAa,GAAgB,YAC7B,MAAO,GAAgB,MACvB,MAAO,CAAC,CACV,EAYa,GAAmB,CAAC,EAAuB,CAAC,IACvD,EAAsB,GAAe,EAAQ,QAAQ,EAY1C,GAAmB,CAAC,IAAyB,CACxD,IAAM,EAAU,EAAO,UAAY,QAE7B,EAA2D,CAAC,EAGlE,GAAI,EACF,EAAW,KAAO,SAClB,EAAW,cAAgB,OAE3B,OAAW,KAAO,aAGpB,GAAI,EAAO,UACT,EAAW,cAAgB,EAAO,UAGpC,OAAO,EAAoB,EAAQ,CACjC,IAAK,QACL,aACA,UAAW,CACT,EAAO,MAAQ,GAAG,EAAO,uBAAyB,KAClD,EAAO,KACT,EAAE,OAAO,OAAO,EAChB,cAAe,CACb,MAAO,GACP,QAAS,EACX,CACF,CAAC,GAaU,GAAe,CAAC,KAsBtB,CACL,MAAO,CACL,KAAM,IAAM,EAAK,YAAY,KAAK,EAClC,MAAO,IAAM,EAAK,YAAY,MAAM,EACpC,OAAQ,IAAM,EAAK,YAAY,OAAO,EACtC,OAAQ,IAAM,EAAK,YAAY,OAAO,CACxC,EACA,MAAO,CACL,UAAW,CAAC,IAAe,EAAK,YAAY,UAAU,CAAE,EACxD,UAAW,IAAM,EAAK,YAAY,UAAU,EAC5C,SAAU,CAAC,IACT,EAAK,YAAY,SAAS,GAAS,CAAC,CAAC,EACvC,SAAU,IAAM,EAAK,YAAY,SAAS,EAC1C,SAAU,CAAC,EAAY,IACrB,EAAK,YAAY,SAAS,EAAI,CAAK,CACvC,EACA,SAAU,CACR,YAAa,CAAC,IAAiB,EAAK,eAAe,YAAY,CAAI,EACnE,YAAa,IAAM,EAAK,eAAe,YAAY,CACrD,EACA,UAAW,CACT,QAAS,IAAM,CACb,GAAI,EAAK,cACP,EAAK,cAAc,EAErB,EAAK,UAAU,QAAQ,EAE3B,CACF,GNnEA,IAAM,GAAe,CAAC,EAAuB,CAAC,IAAM,CAClD,IAAM,EAAa,GAAiB,CAAM,EAE1C,GAAI,CAuDF,OAtDe,EACb,EACA,EAAW,EACX,EAAY,GAAiB,CAAU,CAAC,EACxC,GAAY,CAAU,EACtB,GAAa,CAAU,EACvB,GAAU,CAAU,EACpB,GAAU,CAAU,EACpB,EAAc,EAEd,CAAC,IAAc,CACb,IAAM,EAAU,SAAS,cAAc,KAAK,EAC5C,EAAQ,UAAY,EAAU,SAAS,eAAe,EAKtD,IAAM,EAAQ,EAAW,MACnB,EAAa,EACf,OAAO,IAAU,SACf,GAAG,MACH,EACF,GAAG,GAAgB,UAIvB,GAHA,EAAU,QAAQ,MAAM,YAAY,iBAAkB,CAAU,EAG5D,EAAU,gBACZ,EAAQ,YAAY,EAAU,eAAe,EAI/C,GAAI,EAAU,eACZ,EAAQ,YAAY,EAAU,cAAc,EAI9C,GAAI,EAAU,aACZ,EAAU,QAAQ,YAAY,EAAU,YAAY,EAItD,EAAU,QAAQ,YAAY,CAAO,EAGrC,IAAM,EAAW,EAAW,UAAY,QAKxC,OAJA,EAAU,QAAQ,UAAU,IAC1B,GAAG,EAAU,SAAS,QAAQ,MAAM,GACtC,EAEO,GAET,CAAC,IAAS,GAAQ,GAAa,CAAI,CAAC,EAAE,CAAI,CAC5C,EAAE,CAAU,EAGZ,MAAO,EAAO,CAEd,MADA,QAAQ,MAAM,yBAA0B,CAAK,EACnC,MAAM,4BAA6B,EAAgB,SAAS,IAI3D,MOtIf,IACA,IACA,ICmEO,IAAM,GAAU,EAAG,WAAU,YAAW,eAC7C,CAAC,KAAoD,IAChD,EACH,QAAS,EAAU,QAEnB,SAAU,IAAO,EAAU,QAA8B,MAEzD,QAAQ,CAAC,EAAe,CAEtB,OADC,EAAU,QAA8B,MAAQ,EAC1C,MAGT,MAAM,EAAG,CAEP,OADA,EAAS,OAAO,EACT,MAGT,OAAO,EAAG,CAER,OADA,EAAS,QAAQ,EACV,MAGT,OAAO,CAAC,EAAc,CAEpB,OADA,EAAU,KAAK,QAAQ,CAAI,EACpB,MAGT,OAAO,EAAG,CACR,OAAO,EAAU,KAAK,QAAQ,GAGhC,WAAW,CAAC,EAAkB,CAS5B,MAPkB,CAAC,YAAa,WAAY,eAAgB,aAAa,EAC/D,QAAQ,KAAO,CACvB,EAAU,QAAQ,UAAU,OAAO,GAAG,MAAc,GAAK,EAC1D,EAGD,EAAU,QAAQ,UAAU,IAAI,GAAG,MAAc,GAAU,EACpD,MAGT,WAAW,EAAG,CACZ,IAAM,EAAY,CAAC,YAAa,WAAY,eAAgB,aAAa,EACzE,QAAW,KAAO,EAChB,GAAI,EAAU,QAAQ,UAAU,SAAS,GAAG,MAAc,GAAK,EAC7D,OAAO,EAGX,OAAO,MAGT,KAAK,EAAG,CAEN,OADA,EAAU,QAAQ,UAAU,IAAI,GAAG,YAAoB,EAChD,MAGT,KAAK,EAAG,CAEN,OADA,EAAU,QAAQ,UAAU,OAAO,GAAG,YAAoB,EACnD,MAGT,OAAO,EAAG,CACR,EAAU,QAAQ,EAEtB,GCvIF,IAeO,IAAM,GAA2B,CACtC,QAAS,UACT,KAAM,UACN,KAAM,SACN,OAAQ,EACV,EAca,GAAmB,CAAC,EAAoB,CAAC,IACpD,EAAsB,GAAe,EAAQ,KAAK,EAevC,GAAmB,CAAC,IAAsB,CAErD,IAAM,EAAkC,CACtC,KAAM,EAAO,MAAQ,SACrB,aAAc,EAAO,YAAc,EAAO,KAAO,SAAW,OAC9D,EAGA,GAAI,EAAO,WAAa,GACtB,EAAW,SAAW,GAIxB,IAAM,EAAmB,CAAC,EAM1B,GAHA,EAAiB,KAAK,QAAQ,EAAO,MAAQ,WAAW,EAGpD,EAAO,QACT,EAAiB,KAAK,oBAAoB,EAI5C,GAAI,EAAO,SACT,EAAiB,KAAK,QAAQ,EAAO,UAAU,EAIjD,GAAI,EAAO,WAAa,GACtB,EAAiB,KAAK,eAAe,EAIvC,IAAM,EAAiB,IAClB,EACH,UAAW,CACb,EAEA,OAAO,EAAoB,EAAgB,CACzC,IAAK,SACL,aACA,cAAe,CACb,MAAO,CAAC,IAAc,CAAC,EAAU,QAAQ,SACzC,MAAO,GACP,KAAM,EACR,EACA,YAAa,EACf,CAAC,GAeU,GAAe,CAAC,KAAe,CAC1C,SAAU,CACR,OAAQ,IAAM,EAAK,SAAS,OAAO,EACnC,QAAS,IAAM,EAAK,SAAS,QAAQ,CACvC,EACA,UAAW,CACT,QAAS,IAAM,EAAK,UAAU,QAAQ,CACxC,EACA,UAAW,EAAK,SAAS,KAAK,CAChC,GFlEA,IAAM,GAAY,CAAC,EAAoB,CAAC,IAAoB,CAC1D,IAAM,EAAY,GAAiB,CAAM,EAEzC,GAAI,CAaF,OAZY,EACV,EACA,EAAW,EACX,EAAY,GAAiB,CAAS,CAAC,EACvC,GAAY,CAAS,EACrB,GAAS,CAAS,EAClB,GAAa,CAAS,EACtB,GAAW,CAAS,EACpB,EAAc,EACd,KAAQ,GAAQ,GAAa,CAAI,CAAC,EAAE,CAAI,CAC1C,EAAE,CAAS,EAGX,MAAO,EAAO,CAEd,MADA,QAAQ,MAAM,sBAAuB,CAAK,EAChC,MAAM,yBAA0B,EAAgB,SAAS,IAIxD,MG/Ef,IACA,IACA,ICwFO,IAAM,GAAU,EAAG,WAAU,YAAW,OAAM,eACnD,CAAC,KAA4D,IACxD,EACH,QAAS,EAAU,QAEnB,SAAU,IAAO,EAAU,QAA8B,MAEzD,QAAQ,CAAC,EAAe,CAEtB,OADC,EAAU,QAA8B,MAAQ,EAC1C,MAGT,MAAM,EAAG,CAEP,OADA,EAAS,OAAO,EACT,MAGT,OAAO,EAAG,CAER,OADA,EAAS,QAAQ,EACV,MAGT,OAAO,CAAC,EAAc,CAEpB,OADA,EAAU,KAAK,QAAQ,CAAI,EACpB,MAGT,OAAO,EAAG,CACR,OAAO,EAAU,KAAK,QAAQ,GAGhC,OAAO,CAAC,EAAiB,CAEvB,OADA,EAAK,QAAQ,CAAO,EACb,MAGT,OAAO,EAAG,CACR,OAAO,EAAK,QAAQ,GAGtB,WAAW,CAAC,EAAkB,CAS5B,MAPkB,CAAC,YAAa,WAAY,eAAgB,aAAa,EAC/D,QAAQ,KAAO,CACvB,EAAU,QAAQ,UAAU,OAAO,GAAG,MAAc,GAAK,EAC1D,EAGD,EAAU,QAAQ,UAAU,IAAI,GAAG,MAAc,GAAU,EACpD,MAGT,WAAW,EAAG,CACZ,IAAM,EAAY,CAAC,YAAa,WAAY,eAAgB,aAAa,EACzE,QAAW,KAAO,EAChB,GAAI,EAAU,QAAQ,UAAU,SAAS,GAAG,MAAc,GAAK,EAC7D,OAAO,EAGX,OAAO,MAGT,KAAK,EAAG,CAEN,OADA,EAAU,QAAQ,UAAU,IAAI,GAAG,YAAoB,EAChD,MAGT,KAAK,EAAG,CAEN,OADA,EAAU,QAAQ,UAAU,OAAO,GAAG,YAAoB,EACnD,MAGT,QAAQ,EAAG,CACT,EAAU,QAAQ,UAAU,IAAI,GAAG,cAAsB,EAGzD,IAAM,EAAQ,IAAI,YAAY,WAAY,CACxC,QAAS,GACT,WAAY,EACd,CAAC,EAGD,OAFA,EAAU,QAAQ,cAAc,CAAK,EAE9B,MAGT,MAAM,EAAG,CACP,EAAU,QAAQ,UAAU,OAAO,GAAG,cAAsB,EAG5D,IAAM,EAAQ,IAAI,YAAY,SAAU,CACtC,QAAS,GACT,WAAY,EACd,CAAC,EAGD,OAFA,EAAU,QAAQ,cAAc,CAAK,EAE9B,MAGT,OAAO,EAAG,CACR,EAAU,QAAQ,EAEtB,GC/LF,IAeO,IAAM,GAAmC,CAC9C,QAAS,UACT,KAAM,SACN,OAAQ,GACR,aAAc,QACd,MAAO,OACT,EAca,GAAmB,CAC9B,EAA4B,CAAC,IAE7B,EACE,GACA,EACA,cACF,EAeW,GAAmB,CAAC,IAA8B,CAE7D,IAAM,EAAkC,CACtC,KAAM,EAAO,MAAQ,SACrB,aACE,EAAO,WAAa,EAAO,OAAS,EAAO,KAAO,SAAW,OACjE,EAGM,EAAa,CAAC,GAAG,EAAO,qBAAqB,EAGnD,GAAI,EAAO,QACT,EAAW,KAAK,GAAG,EAAO,wBAAwB,EAAO,SAAS,EAIpE,GAAI,EAAO,MACT,EAAW,KAAK,GAAG,EAAO,wBAAwB,EAAO,OAAO,EAIlE,GAAI,EAAO,QACT,EAAW,KAAK,GAAG,EAAO,oCAAoC,EAIhE,GAAI,EAAO,SACT,EAAW,KAAK,GAAG,EAAO,wBAAwB,EAAO,UAAU,EAIrE,GAAI,EAAO,iBACT,EAAW,KAAK,GAAG,EAAO,kCAAkC,EAI9D,GAAI,EAAO,MACT,EAAW,KAAK,EAAO,KAAK,EAI9B,GAAI,EAAO,WAAa,GACtB,EAAW,SAAW,GACtB,EAAW,KAAK,GAAG,EAAO,+BAA+B,EAG3D,OAAO,EAAoB,EAAQ,CACjC,IAAK,SACL,aACA,UAAW,EACX,cAAe,CACb,MAAO,CAAC,IAAc,CAAC,EAAU,QAAQ,SACzC,MAAO,GACP,KAAM,EACR,EACA,YAAa,EACf,CAAC,GAeU,GAAe,CAAC,KAAe,CAC1C,SAAU,CACR,OAAQ,IAAM,EAAK,SAAS,OAAO,EACnC,QAAS,IAAM,EAAK,SAAS,QAAQ,CACvC,EACA,UAAW,CACT,QAAS,IAAM,EAAK,UAAU,QAAQ,CACxC,EACA,UAAW,EAAK,SAAS,cAAc,EACvC,KAAM,CACJ,QAAS,CAAC,IAAiB,EAAK,KAAK,QAAQ,CAAI,EACjD,QAAS,IAAM,EAAK,KAAK,QAAQ,CACnC,CACF,GFrEA,IAAM,GAAoB,CAAC,EAA4B,CAAC,IAA4B,CAClF,IAAM,EAAY,GAAiB,CAAM,EAGnC,EAAsB,CAAC,IAA0C,CACrE,GAAI,EAAU,iBAAkB,CAC9B,IAAI,EAAc,OAAO,QACrB,EAAU,GACR,EAAkB,GAElB,EAAe,IAAM,CACzB,GAAI,CAAC,EACH,OAAO,sBAAsB,IAAM,CACjC,IAAM,EAAiB,OAAO,QACxB,EAAc,EAAiB,EAGrC,GAAI,EAAc,EAChB,EAAU,SAAS,EAGhB,QAAI,EAAc,CAAC,EACtB,EAAU,OAAO,EAGnB,GAAI,GAAkB,EACpB,EAAU,OAAO,EAGnB,EAAc,EACd,EAAU,GACX,EAED,EAAU,IAKd,OAAO,iBAAiB,SAAU,EAAc,CAAE,QAAS,EAAK,CAAC,EAGjE,sBAAsB,IAAM,CAC1B,EAAU,OAAO,EAClB,EAGD,IAAM,EAAkB,EAAU,QAClC,EAAU,QAAU,IAAM,CACxB,OAAO,oBAAoB,SAAU,CAAY,EACjD,EAAgB,KAAK,CAAS,KAKpC,GAAI,CACF,IAAM,EAAc,EAClB,EACA,EAAW,EACX,EAAY,GAAiB,CAAS,CAAC,EACvC,GAAY,CAAS,EACrB,GAAS,CAAS,EAClB,GAAS,CAAS,EAClB,GAAa,CAAS,EACtB,GAAW,CAAS,EACpB,EAAc,EACd,KAAQ,GAAQ,GAAa,CAAI,CAAC,EAAE,CAAI,CAC1C,EAAE,CAAS,EAKX,OAFA,EAAoB,CAAW,EAExB,EACP,MAAO,EAAO,CAEd,MADA,QAAQ,MAAM,+BAAgC,CAAK,EACzC,MAAM,kCAAmC,EAAgB,SAAS,IAIjE,MGtJf,IACA,IACA,ICuJO,IAAM,GACX,CAAyB,IACzB,CAA8B,IAAsC,CAElE,GAAI,CAAC,EAAO,OACV,MAAO,IACF,EACH,YAAa,CACX,OAAQ,QAAS,EAAG,CAClB,OAAO,MAET,SAAU,QAAS,EAAG,CACpB,OAAO,MAET,OAAQ,QAAS,EAAG,CAClB,OAAO,MAET,WAAY,IAAM,GAClB,SAAU,IAAM,GAChB,QAAS,QAAS,EAAG,CACnB,OAAO,MAET,gBAAiB,QAAS,EAAG,CAC3B,OAAO,MAET,gBAAiB,IAAM,EACzB,CACF,EAGF,IAAM,EAAS,EAAO,QAAU,OAC1B,EAAgB,EAAO,eAAiB,cACxC,EAAgB,GAAG,KAAU,cAG/B,EAAa,EAAO,UAAY,GAChC,EAAiB,EAAO,MAAQ,GAChC,EAAe,EAAO,cAAgB,GAKpC,EAAa,IAAY,CAC7B,GAAI,CAAC,EAAU,KAAM,OAErB,IAAM,EACJ,GAAc,EAAe,EAAe,EAC9C,GAAI,EACF,EAAU,KAAK,QAAQ,CAAU,GAO/B,EAAoB,IAAY,CACpC,EAAU,QAAQ,aAAa,eAAgB,OAAO,CAAU,CAAC,GAI7D,EAA6B,CACjC,MAAM,EAAG,CACP,GAAI,CAAC,EACH,EAAa,GACb,EAAU,QAAQ,UAAU,IAAI,CAAa,EAC7C,EAAW,EACX,EAAkB,EAEpB,OAAO,MAGT,QAAQ,EAAG,CACT,GAAI,EACF,EAAa,GACb,EAAU,QAAQ,UAAU,OAAO,CAAa,EAChD,EAAW,EACX,EAAkB,EAEpB,OAAO,MAGT,MAAM,EAAG,CACP,GAAI,EACF,KAAK,SAAS,EAEd,UAAK,OAAO,EAEd,OAAO,MAGT,UAAU,EAAG,CACX,OAAO,GAGT,QAAQ,EAAG,CACT,MAAO,IAGT,OAAO,CAAC,EAAc,CAEpB,GADA,EAAiB,EACb,CAAC,EACH,EAAW,EAEb,OAAO,MAGT,eAAe,CAAC,EAAc,CAE5B,GADA,EAAe,EACX,EACF,EAAW,EAEb,OAAO,MAGT,eAAe,EAAG,CAChB,OAAO,EAEX,EAGA,GAAI,EACF,EAAU,QAAQ,UAAU,IAAI,CAAa,EAC7C,EAAkB,EAClB,EAAW,EAEX,OAAkB,EAIpB,IAAM,EAAgB,EAAO,gBAAkB,GAEzC,EAAc,IAAY,CAC9B,EAAY,OAAO,EAGnB,IAAM,EAAQ,IAAI,YAAY,SAAU,CACtC,QAAS,GACT,OAAQ,CAAE,SAAU,CAAW,CACjC,CAAC,EACD,EAAU,QAAQ,cAAc,CAAK,GAGvC,GAAI,EACF,EAAU,QAAQ,iBAAiB,QAAS,CAAW,EAIzD,IAAM,EAAkB,EAAU,WAAW,QAC7C,GAAI,EAAU,UACZ,EAAU,UAAU,QAAU,IAAM,CAClC,GAAI,EACF,EAAU,QAAQ,oBAAoB,QAAS,CAAW,EAE5D,GAAI,EACF,EAAgB,GAKtB,MAAO,IACF,EACH,aACF,GC1NG,IAAM,GACX,EAAG,WAAU,YAAW,iBACxB,CAAC,IAA0D,CACzD,IAAM,EAAW,EAAU,eAAiB,cACtC,EAAY,EAAU,SAAS,CAAQ,EAGvC,EAAU,CACd,QAAS,CAAC,IAAiB,CAEzB,OADA,EAAU,KAAK,QAAQ,CAAI,EACpB,GAET,QAAS,IAAM,EAAU,KAAK,QAAQ,EACtC,WAAY,IAAM,EAAU,KAAK,WAAW,CAC9C,EAGM,EAA2C,CAC/C,QAAS,EAAU,QACnB,KAAM,EAEN,SAAU,CACR,OAAQ,IAAM,EAAS,OAAO,EAC9B,QAAS,IAAM,EAAS,QAAQ,EAChC,WAAY,IAAM,EAAS,WAAW,CACxC,EAEA,UAAW,CACT,QAAS,IAAM,EAAU,QAAQ,CACnC,EAEA,SAAU,EAAU,SAEpB,SAAU,IAAO,EAAU,QAA8B,MAEzD,QAAQ,CAAC,EAAe,CAEtB,OADC,EAAU,QAA8B,MAAQ,EAC1C,GAGT,UAAU,EAAG,CACX,IAAM,EAAgC,CACpC,SACA,QACA,WACA,UACF,EACA,QAAW,KAAW,EACpB,GACE,EAAU,QAAQ,UAAU,SAAS,GAAG,MAAc,GAAS,EAE/D,OAAO,EAGX,MAAO,YAGT,UAAU,CAAC,EAAqC,CAM9C,MALiB,CAAC,SAAU,QAAS,WAAY,UAAU,EAClD,QAAQ,CAAC,IAAM,CACtB,EAAU,QAAQ,UAAU,OAAO,GAAG,MAAc,GAAG,EACxD,EACD,EAAU,QAAQ,UAAU,IAAI,GAAG,MAAc,GAAS,EACnD,GAGT,OAAO,EAAG,CACR,IAAM,EAA0B,CAAC,KAAM,IAAK,IAAK,IAAK,IAAI,EAC1D,QAAW,KAAQ,EACjB,GAAI,EAAU,QAAQ,UAAU,SAAS,GAAG,MAAc,GAAM,EAC9D,OAAO,EAGX,MAAO,KAGT,OAAO,CAAC,EAA+B,CAKrC,GAJc,CAAC,KAAM,IAAK,IAAK,IAAK,IAAI,EAClC,QAAQ,CAAC,IAAM,CACnB,EAAU,QAAQ,UAAU,OAAO,GAAG,MAAc,GAAG,EACxD,EACG,IAAS,IACX,EAAU,QAAQ,UAAU,IAAI,GAAG,MAAc,GAAM,EAEzD,OAAO,GAGT,QAAQ,EAAG,CACT,IAAM,EAA4B,CAAC,QAAS,QAAQ,EACpD,QAAW,KAAS,EAClB,GAAI,EAAU,QAAQ,UAAU,SAAS,GAAG,MAAc,GAAO,EAC/D,OAAO,EAGX,MAAO,SAGT,QAAQ,CAAC,EAAiC,CAKxC,GAJe,CAAC,QAAS,QAAQ,EAC1B,QAAQ,CAAC,IAAM,CACpB,EAAU,QAAQ,UAAU,OAAO,GAAG,MAAc,GAAG,EACxD,EACG,IAAU,QACZ,EAAU,QAAQ,UAAU,IAAI,GAAG,MAAc,GAAO,EAE1D,OAAO,GAGT,QAAQ,EAAG,CACT,IAAM,EAA4B,CAAC,SAAU,UAAW,MAAM,EAC9D,QAAW,KAAS,EAClB,GAAI,EAAU,QAAQ,UAAU,SAAS,GAAG,MAAc,GAAO,EAC/D,OAAO,EAGX,MAAO,WAGT,QAAQ,CAAC,EAAiC,CAKxC,GAJe,CAAC,SAAU,UAAW,MAAM,EACpC,QAAQ,CAAC,IAAM,CACpB,EAAU,QAAQ,UAAU,OAAO,GAAG,MAAc,GAAG,EACxD,EACG,IAAU,UACZ,EAAU,QAAQ,UAAU,IAAI,GAAG,MAAc,GAAO,EAE1D,OAAO,GAGT,MAAM,EAAG,CAEP,OADA,EAAS,OAAO,EACT,GAGT,OAAO,EAAG,CAER,OADA,EAAS,QAAQ,EACV,GAGT,OAAO,CAAC,EAAc,CAEpB,GAAI,GAAa,SAAS,GAAK,CAAC,EAAY,WAAW,EACrD,EAAY,QAAQ,CAAI,EAG1B,OADA,EAAU,KAAK,QAAQ,CAAI,EACpB,GAGT,OAAO,EAAG,CACR,OAAO,EAAU,KAAK,QAAQ,GAGhC,eAAe,CAAC,EAAc,CAC5B,GAAI,EACF,EAAY,gBAAgB,CAAI,EAElC,OAAO,GAGT,eAAe,EAAG,CAChB,OAAO,GAAa,gBAAgB,GAAK,IAG3C,QAAQ,EAAG,CACT,OAAO,GAAa,SAAS,GAAK,IAGpC,MAAM,EAAG,CACP,GAAI,EACF,EAAY,OAAO,EAErB,OAAO,GAGT,QAAQ,EAAG,CACT,GAAI,EACF,EAAY,SAAS,EAEvB,OAAO,GAGT,cAAc,EAAG,CACf,GAAI,EACF,EAAY,OAAO,EAErB,OAAO,GAGT,UAAU,EAAG,CACX,OAAO,GAAa,WAAW,GAAK,IAGtC,YAAY,CAAC,EAAe,CAE1B,OADA,EAAU,QAAQ,aAAa,aAAc,CAAK,EAC3C,GAGT,OAAO,EAAG,CACR,EAAU,QAAQ,GAGpB,EAAE,CAAC,EAAe,EAAmB,CACnC,GAAI,EAAU,GACZ,EAAU,GAAG,EAAO,CAAO,EAE3B,OAAU,QAAQ,iBAAiB,EAAO,CAAwB,EAEpE,OAAO,GAGT,GAAG,CAAC,EAAe,EAAmB,CACpC,GAAI,EAAU,IACZ,EAAU,IAAI,EAAO,CAAO,EAE5B,OAAU,QAAQ,oBAChB,EACA,CACF,EAEF,OAAO,GAGT,QAAQ,IAAI,EAAmB,CAC7B,GAAI,EAAU,SACZ,EAAU,SAAS,GAAG,CAAO,EAE7B,OAAQ,QAAQ,CAAC,IAAQ,EAAU,QAAQ,UAAU,IAAI,CAAG,CAAC,EAE/D,OAAO,GAGT,WAAW,IAAI,EAAmB,CAChC,GAAI,EAAU,YACZ,EAAU,YAAY,GAAG,CAAO,EAEhC,OAAQ,QAAQ,CAAC,IAAQ,EAAU,QAAQ,UAAU,OAAO,CAAG,CAAC,EAElE,OAAO,EAEX,EAEA,OAAO,GClVX,ICSO,IAAM,GAAuB,CAElC,OAAQ,SAER,MAAO,QAEP,SAAU,WAEV,SAAU,UACZ,EAkBa,GAAoB,CAE/B,GAAI,KAEJ,EAAG,IAEH,EAAG,IAEH,EAAG,IAEH,GAAI,IACN,EAaa,GAAqB,CAEhC,MAAO,QAEP,OAAQ,QACV,EAkBa,GAAqB,CAEhC,OAAQ,SAER,QAAS,UAET,KAAM,MACR,EAUa,GAAoB,CAC/B,OAAQ,SACR,OAAQ,SACR,MAAO,OACT,EAqBO,IAAM,GAAwB,CACnC,SAAU,IACV,OAAQ,iCACR,QAAS,CAAC,MAAO,GAAG,CACtB,ED1GO,IAAM,GAAkC,CAC7C,QAAS,GAAqB,SAC9B,KAAM,GAAkB,EACxB,MAAO,GAAmB,MAC1B,MAAO,GAAmB,QAC1B,SAAU,GACV,KAAM,GAAkB,OACxB,OAAQ,GACR,SAAU,GACV,OAAQ,GACR,QAAS,GACT,aAAc,CACZ,SAAU,GAAsB,SAChC,OAAQ,GAAsB,OAC9B,QAAS,GAAsB,OACjC,CACF,EAca,GAAmB,CAC9B,EAA2B,CAAC,IAE5B,EACE,GACA,EACA,aACF,EAeW,GAAmB,CAAC,IAA6B,CAE5D,IAAM,EAA2D,CAC/D,KAAM,EAAO,MAAQ,QACvB,EAGA,GAAI,EAAO,UACT,EAAW,cAAgB,EAAO,UAIpC,GAAI,EAAO,OACT,EAAW,gBAAkB,EAAO,SAAW,OAAS,QAI1D,GAAI,EAAO,WAAa,GACtB,EAAW,SAAW,GAIxB,GAAI,EAAO,QAAU,OACnB,EAAW,MAAQ,EAAO,MAI5B,IAAM,EAA6B,CAAC,EAGpC,GAAI,EAAO,MAAQ,EAAO,OAAS,IACjC,EAAiB,KAAK,gBAAgB,EAAO,MAAM,EAIrD,GAAI,EAAO,OAAS,EAAO,QAAU,QACnC,EAAiB,KAAK,gBAAgB,EAAO,OAAO,EAItD,GAAI,EAAO,OAAS,EAAO,QAAU,UACnC,EAAiB,KAAK,gBAAgB,EAAO,OAAO,EAItD,GAAI,EAAO,OACT,EAAiB,KAAK,qBAAqB,EAI7C,GAAI,EAAO,QAAU,EAAO,SAC1B,EAAiB,KAAK,uBAAuB,EAI/C,GAAI,EAAO,WAAa,GACtB,EAAiB,KAAK,uBAAuB,EAI/C,IAAM,EAAc,EAAO,WAAa,EAAO,MACzC,EAAgB,CACpB,GAAG,EACH,GAAI,MAAM,QAAQ,CAAW,EACzB,EACA,EACE,CAAC,CAAW,EACZ,CAAC,CACT,EAGM,EAAiB,IAClB,EACH,UAAW,CACb,EAEA,OAAO,EAAoB,EAAgB,CACzC,IAAK,SACL,aACA,cAAe,CACb,MAAO,CAAC,IACN,CAAC,EAAU,QAAQ,SACrB,MAAO,GACP,KAAM,EACR,EACA,YAAa,EACf,CAAC,GAeU,GAAe,CAAC,KAiBtB,CACL,SAAU,CACR,OAAQ,IAAM,EAAK,SAAS,OAAO,EACnC,QAAS,IAAM,EAAK,SAAS,QAAQ,EACrC,WAAY,IAAM,EAAK,SAAS,WAAW,CAC7C,EACA,UAAW,CACT,QAAS,IAAM,EAAK,UAAU,QAAQ,CACxC,EACA,YAAa,EAAK,WACpB,GHxGA,IAAM,GAAmB,CAAC,EAA2B,CAAC,IAA2B,CAC/E,IAAM,EAAa,GAAiB,CAAM,EAE1C,GAAI,CA+BF,OA9BmB,EACjB,EACA,EAAW,EACX,EAAY,GAAiB,CAAU,CAAC,EACxC,GAAY,CAAU,EACtB,GAAS,CAAU,EACnB,GAAS,CAAU,EACnB,GAAa,CAAU,EACvB,GAAW,CAAU,EACrB,GAAW,CAAU,EACrB,EAAc,EAEd,CAAC,IAAc,CACb,GAAI,EAAW,OAAS,EAAW,QAAU,SAAW,EAAU,QAAS,CACzE,IAAM,EAAY,GAAG,EAAW,UAAU,EAAW,kBAAkB,EAAW,QAClF,EAAU,QAAQ,UAAU,IAAI,CAAS,EAE3C,OAAO,GAGT,CAAC,IAAc,CACb,GAAI,EAAW,OAAS,EAAW,QAAU,WAAa,EAAU,QAAS,CAC3E,IAAM,EAAY,GAAG,EAAW,UAAU,EAAW,kBAAkB,EAAW,QAClF,EAAU,QAAQ,UAAU,IAAI,CAAS,EAE3C,OAAO,GAET,CAAC,IAAS,GAAQ,GAAa,CAAI,CAAC,EAAE,CAAI,CAC5C,EAAE,CAAU,EAGZ,MAAO,EAAO,CAEd,MADA,QAAQ,MAAM,6BAA8B,CAAK,EACvC,MAAM,iCAAkC,EAAgB,SAAS,IAIhE,MK3If,IACA,ICyCO,IAAM,GAAc,CAEzB,OAAQ,SAER,KAAM,OAEN,OAAQ,QACV,EAiBO,IAAM,GAAe,CAE1B,UAAW,iBAEX,KAAM,OAEN,KAAM,YAEN,SAAU,sBAEV,QAAS,gBAET,MAAO,aACT,ECvEO,IAAM,GAAe,CAAC,IAAW,KAAa,CACnD,GAAI,CAAC,EAAU,QAEb,OADA,QAAQ,KAAK,kDAAkD,EACxD,EAGT,IAAM,EAAQ,EAAO,OAAS,CAAC,EACzB,EAAiB,EAAO,WAGxB,EAAgB,SAAS,cAAc,KAAK,EAClD,EAAc,UAAY,oBAC1B,EAAc,aAAa,OAAQ,MAAM,EAEzC,EAAU,QAAQ,YAAY,CAAa,EAK3C,SAAS,CAAiB,CAAC,EAAM,EAAO,CACtC,IAAM,EAAU,SAAS,cAAc,KAAK,EAC5C,EAAQ,UAAY,GAAa,KACjC,EAAQ,aAAa,OAAQ,UAAU,EAGvC,IAAM,EAAU,SAAS,cAAc,KAAK,EAC5C,EAAQ,UAAY,yBAEpB,IAAM,EAAO,SAAS,cAAc,KAAK,EAOzC,OANA,EAAK,UAAY,sBACjB,EAAK,YAAc,EAAK,MAAQ,EAAK,OAAS,EAAK,UAAY,EAAK,MAAQ,EAAK,IAAM,OAAO,CAAI,EAElG,EAAQ,YAAY,CAAI,EACxB,EAAQ,YAAY,CAAO,EAEpB,EAMT,IAAM,EAAiB,IAAM,CAI3B,GAFA,EAAc,UAAY,GAEtB,CAAC,GAAS,EAAM,SAAW,EAAG,CAChC,EAAc,UAAY,8CAC1B,OAIF,IAAM,EAAW,SAAS,uBAAuB,EAEjD,EAAM,QAAQ,CAAC,EAAM,IAAU,CAC7B,GAAI,GAAQ,KAAM,OAGlB,IAAM,EAAU,EACZ,EAAe,EAAM,CAAK,EAC1B,EAAkB,EAAM,CAAK,EAEjC,GAAI,CAAC,EAAS,OAGd,GAAI,CAAC,EAAQ,UAAU,SAAS,GAAa,IAAI,EAC/C,EAAQ,UAAU,IAAI,GAAa,IAAI,EAGzC,GAAI,CAAC,EAAQ,aAAa,MAAM,EAC9B,EAAQ,aAAa,OAAQ,UAAU,EAIzC,IAAM,EAAS,GAAM,IAAM,OAAO,CAAK,EACvC,GAAI,CAAC,EAAQ,aAAa,SAAS,EACjC,EAAQ,aAAa,UAAW,CAAM,EAGxC,EAAS,YAAY,CAAO,EAC7B,EAED,EAAc,YAAY,CAAQ,EAGlC,EAAU,OAAO,GAAY,KAAM,CACjC,QACA,QAAS,GACT,QAAS,GACT,QAAS,GACT,WACF,CAAC,EAED,QAAQ,IAAI,yBAAc,EAAM,uBAAuB,GAMnD,EAAe,CAAC,EAAQ,EAAW,QAAS,EAAU,KAAU,CACpE,IAAM,EAAU,EAAc,cAAc,aAAa,KAAU,EACnE,GAAI,EACF,EAAQ,eAAe,CACrB,SAAU,EAAU,SAAW,OAC/B,MAAO,IAAa,SAAW,SAAW,IAAa,MAAQ,MAAQ,OACzE,CAAC,GAOC,EAAgB,CAAC,EAAO,EAAW,QAAS,EAAU,KAAU,CACpE,GAAI,EAAQ,GAAK,GAAS,EAAM,OAAQ,OAExC,IAAM,EAAU,EAAc,SAAS,GACvC,GAAI,EACF,EAAQ,eAAe,CACrB,SAAU,EAAU,SAAW,OAC/B,MAAO,IAAa,SAAW,SAAW,IAAa,MAAQ,MAAQ,OACzE,CAAC,GAQL,GAHA,EAAe,EAGX,EAAU,WAAW,QAAS,CAChC,IAAM,EAAkB,EAAU,UAAU,QAC5C,EAAU,UAAU,QAAU,IAAM,CAClC,EAAc,UAAY,GAC1B,EAAgB,GAKpB,MAAO,IACF,EACH,KAAM,CAEJ,SAAU,IAAM,EAChB,YAAa,IAAM,EACnB,gBAAiB,IAAM,EACvB,QAAS,EAGT,eACA,gBAGA,SAAU,IAAM,QAAQ,QAAQ,CAAE,QAAS,GAAO,MAAO,CAAC,CAAE,CAAC,EAC7D,SAAU,IAAM,QAAQ,QAAQ,CAAE,QAAS,GAAO,MAAO,CAAC,CAAE,CAAC,EAC7D,aAAc,IAAM,QAAQ,QAAQ,CAAE,QAAS,GAAO,MAAO,CAAC,CAAE,CAAC,EACjE,WAAY,IAAM,QAAQ,QAAQ,CAAE,QAAS,GAAO,MAAO,CAAC,CAAE,CAAC,EAC/D,eAAgB,IAAM,QAAQ,QAAQ,CAAE,QAAS,GAAO,MAAO,CAAC,CAAE,CAAC,EACnE,iBAAkB,CAAC,EAAQ,EAAU,IAAY,CAE/C,OADA,EAAa,EAAQ,EAAU,CAAO,EAC/B,QAAQ,QAAQ,GAEzB,mBAAoB,IAAM,IAAM,GAChC,aAAc,IAAM,IAAM,GAC1B,eAAgB,IAAM,EACtB,YAAa,IAAM,EAAM,OACzB,cAAe,IAAM,KACrB,UAAW,IAAM,GACjB,UAAW,IAAM,GACjB,YAAa,IAAM,EACrB,CACF,GAGa,MCnLf,KACA,KASO,IAAM,GAAgB,CAAC,IAAW,CAAC,IAAc,CACtD,GAAI,CAAC,EAAU,SAAW,CAAC,EAAO,eAChC,MAAO,IACF,EAEH,iBAAkB,IAAM,CAAC,EACzB,mBAAoB,IAAM,CAAC,EAC3B,eAAgB,IAAM,GACtB,WAAY,IAAM,EAClB,aAAc,IAAM,EACpB,eAAgB,IAAM,EACtB,aAAc,IAAM,CACtB,EAIF,IAAM,EAAgB,IAAI,IAG1B,GAAI,MAAM,QAAQ,EAAO,gBAAgB,EACvC,EAAO,iBAAiB,QAAQ,CAAC,IAAO,EAAc,IAAI,OAAO,CAAE,CAAC,CAAC,EAIvE,GAAI,MAAM,QAAQ,EAAO,KAAK,EAC5B,EAAO,MAAM,QAAQ,CAAC,EAAM,IAAU,CACpC,GAAI,GAAM,SAAU,CAClB,IAAM,EAAS,EAAK,IAAM,OAAO,CAAK,EACtC,EAAc,IAAI,OAAO,CAAM,CAAC,GAEnC,EAMH,IAAM,EAAsB,IAAM,EACX,EAAU,SAAS,iBAAiB,WAAW,GAAK,CAAC,GAC7D,QAAQ,CAAC,IAAO,CAC3B,IAAM,EAAS,EAAG,aAAa,SAAS,EAClC,EAAa,EAAc,IAAI,CAAM,EAE3C,GAAI,GAAc,CAAC,GAAS,EAAmB,GAAa,QAAQ,EAClE,EAAS,EAAmB,GAAa,QAAQ,EAC5C,QAAI,CAAC,GAAc,GAAS,EAAmB,GAAa,QAAQ,EACzE,GAAY,EAAmB,GAAa,QAAQ,EAEvD,GAMG,EAAkB,CAAC,IAAM,CAC7B,IAAM,EAAc,EAAE,OAAO,QAAQ,WAAW,EAChD,GAAI,CAAC,EAAa,OAElB,IAAM,EAAS,EAAY,aAAa,SAAS,EACjD,GAAI,CAAC,EAAQ,OAGb,IAAM,EAAQ,EAAU,MAAM,SAAS,GAAK,CAAC,EACzC,EAAO,EAAM,KAAK,CAAC,IAAM,OAAO,GAAG,EAAE,IAAM,CAAM,EAGrD,GAAI,CAAC,EAAM,CACT,IAAM,EAAQ,SAAS,EAAQ,EAAE,EACjC,GAAI,CAAC,MAAM,CAAK,GAAK,GAAS,GAAK,EAAQ,EAAM,OAC/C,EAAO,EAAM,GAIjB,GAAI,CAAC,EAAM,CACT,QAAQ,KAAK,0BAA0B,GAAQ,EAC/C,OAIF,IAAM,EAAiB,CACrB,OACA,QAAS,EACT,cAAe,EACf,YACA,eAAgB,IAAM,CACpB,EAAe,iBAAmB,IAEpC,iBAAkB,EACpB,EAMA,GAHA,EAAU,OAAO,GAAY,OAAQ,CAAc,EAG/C,EAAe,iBAAkB,OAGrC,GAAI,EAAO,YACT,GAAI,EAAc,IAAI,CAAM,EAC1B,EAAc,OAAO,CAAM,EAC3B,GAAY,EAA4B,GAAa,QAAQ,EAE7D,OAAc,IAAI,CAAM,EACxB,EAAS,EAA4B,GAAa,QAAQ,EAEvD,KAEL,IAAM,EAAsB,GAAS,EAA4B,GAAa,QAAQ,EAQtF,GALqB,EAAU,QAAQ,iBAAiB,IAAI,KAAU,GAAa,UAAU,EAChF,QAAQ,CAAC,IAAO,GAAY,EAAmB,GAAa,QAAQ,CAAC,EAClF,EAAc,MAAM,EAGhB,CAAC,EACH,EAAc,IAAI,CAAM,EACxB,EAAS,EAA4B,GAAa,QAAQ,IAQ1D,EAAkB,CAAC,EAAQ,IAAa,CAC5C,IAAM,EAAW,OAAO,CAAM,EAE9B,GAAI,EACF,EAAc,IAAI,CAAQ,EAE1B,OAAc,OAAO,CAAQ,EAI/B,IAAM,EAAc,EAAU,QAAQ,cAAc,aAAa,KAAY,EAC7E,GAAI,GACF,GAAI,GAAY,CAAC,GAAS,EAA4B,GAAa,QAAQ,EACzE,EAAS,EAA4B,GAAa,QAAQ,EACrD,QAAI,CAAC,GAAY,GAAS,EAA4B,GAAa,QAAQ,EAChF,GAAY,EAA4B,GAAa,QAAQ,IAYnE,GANA,EAAU,QAAQ,iBAAiB,QAAS,CAAe,EAG3D,WAAW,EAAqB,EAAE,EAG9B,EAAU,WAAW,QAAS,CAChC,IAAM,EAAkB,EAAU,UAAU,QAC5C,EAAU,UAAU,QAAU,IAAM,CAClC,EAAU,QAAQ,oBAAoB,QAAS,CAAe,EAC9D,EAAgB,GAKpB,MAAO,IACF,EACH,iBAAkB,IAAM,CAEtB,OADc,EAAU,MAAM,SAAS,GAAK,CAAC,GAChC,OAAO,CAAC,EAAM,IAAU,CACnC,IAAM,EAAS,GAAM,IAAM,OAAO,CAAK,EACvC,OAAO,EAAc,IAAI,OAAO,CAAM,CAAC,EACxC,GAEH,mBAAoB,IAAM,MAAM,KAAK,CAAa,EAClD,eAAgB,CAAC,IAAW,EAAc,IAAI,OAAO,CAAM,CAAC,EAC5D,WAAY,CAAC,IAAW,CAEtB,OADA,EAAgB,EAAQ,EAAI,EACrB,GAET,aAAc,CAAC,IAAW,CAExB,OADA,EAAgB,EAAQ,EAAK,EACtB,GAET,eAAgB,IAAM,CACpB,GAAI,EAAc,KAAO,EACvB,EAAc,MAAM,EACpB,EAAU,QACP,iBAAiB,IAAI,KAAU,GAAa,UAAU,EACtD,QAAQ,CAAC,IAAO,GAAY,EAAmB,GAAa,QAAQ,CAAC,EAE1E,OAAO,GAET,aAAc,CAAC,IAAY,CAEzB,GADA,EAAc,MAAM,EAChB,MAAM,QAAQ,CAAO,EACvB,EAAQ,QAAQ,CAAC,IAAW,EAAc,IAAI,OAAO,CAAM,CAAC,CAAC,EAG/D,OADA,EAAoB,EACb,EAEX,GAGa,MCzJR,IAAM,GACX,EAAG,OAAM,YAAW,SAAQ,YAAW,YACvC,CAAC,KAAsC,IAClC,EACH,QAAS,EAAU,QAMnB,QAAS,SAAY,CAEnB,OADA,EAAK,QAAQ,EACN,GAOT,YAAa,IAAM,EAAK,YAAY,EAMpC,gBAAiB,IAAM,EAAK,gBAAgB,EAS5C,aAAc,CACZ,EACA,EACA,IACG,CACH,IAAM,EAAgB,IAAY,OAAY,EAAU,GAAQ,SAAW,GAE3E,OADA,EAAK,aAAa,EAAQ,EAAU,CAAa,EAC1C,GAUT,cAAe,MACb,EACA,EACA,IACG,CACH,IAAM,EAAgB,IAAY,OAAY,EAAU,GAAQ,SAAW,GAE3E,OADA,EAAK,cAAc,EAAO,EAAU,CAAa,EAC1C,GAOT,UAAW,IAAM,EAAK,UAAU,EAMhC,YAAa,IAAM,EAAK,YAAY,EAMpC,iBAAkB,IAAM,EAAU,iBAAiB,EAMnD,mBAAoB,IAAM,EAAU,mBAAmB,EAOvD,eAAgB,CAAC,IAA4B,EAAU,eAAe,CAAM,EAO5E,WAAY,CAAC,IAA4B,CAEvC,OADA,EAAU,WAAW,CAAM,EACpB,GAQT,aAAc,CAAC,IAA4B,CAEzC,OADA,EAAU,aAAa,CAAM,EACtB,GAOT,eAAgB,IAAM,CAEpB,OADA,EAAU,eAAe,EAClB,GAQT,aAAc,CAAC,IAAiC,CAE9C,OADA,EAAU,aAAa,CAAO,EACvB,GAST,GAAI,CAAC,EAAO,IAAY,CAEtB,OADA,EAAO,GAAG,EAAO,CAAO,EACjB,GAST,IAAK,CAAC,EAAO,IAAY,CAEvB,OADA,EAAO,IAAI,EAAO,CAAO,EAClB,GAMT,QAAS,IAAM,CACb,EAAU,QAAQ,EAEtB,GCxNF,IAUO,IAAM,GAAqC,CAEhD,MAAO,CAAC,EAGR,eAAgB,GAChB,YAAa,GACb,QAAS,EACX,EAOa,GAAmB,CAAC,EAA8B,CAAC,IAAM,CAEpE,GAAI,CAAC,MAAM,QAAQ,EAAO,KAAK,GAAK,CAAC,EAAO,WAC1C,MAAU,MAAM,yDAAyD,EAI3E,GACE,MAAM,QAAQ,EAAO,KAAK,GAC1B,EAAO,MAAM,OAAS,GACtB,CAAC,EAAO,WAER,EAAO,WAAa,CAAC,IAAS,CAC5B,IAAM,EAAU,SAAS,cAAc,KAAK,EAS5C,OARA,EAAQ,UAAY,iBACpB,EAAQ,YACN,EAAK,MACL,EAAK,OACL,EAAK,UACL,EAAK,MACL,EAAK,IACL,OAAO,CAAI,EACN,GAKX,OAAO,EAAsB,GAAe,EAAQ,MAAM,GAQ/C,GAAmB,CAAC,IAAW,CAC1C,IAAM,EAAa,CACjB,KAAM,OACN,SAAU,GACZ,EAGA,GAAI,EAAO,UACT,EAAW,cAAgB,EAAO,UAIpC,OAAO,EAAwB,EAAQ,CACrC,IAAK,MACL,WAAY,EACZ,UAAW,CAAC,GAAa,UAAW,EAAO,KAAK,EAChD,cAAe,CACb,OAAQ,GACR,QAAS,EACX,CACF,CAAC,GASU,GAAe,CAAC,EAAW,KAAY,CAClD,KAAM,CACJ,QAAS,EAAU,MAAM,QACzB,SAAU,EAAU,MAAM,SAC1B,YAAa,EAAU,MAAM,YAC7B,gBAAiB,EAAU,MAAM,gBACjC,aAAc,EAAU,MAAM,aAC9B,cAAe,EAAU,MAAM,cAC/B,UAAW,IAAM,GACjB,YAAa,IAAM,EACrB,EACA,UAAW,CACT,iBAAkB,EAAU,iBAC5B,mBAAoB,EAAU,mBAC9B,eAAgB,EAAU,eAC1B,WAAY,EAAU,WACtB,aAAc,EAAU,aACxB,eAAgB,EAAU,eAC1B,aAAc,EAAU,YAC1B,EACA,OAAQ,CACN,GAAI,EAAU,GACd,IAAK,EAAU,GACjB,EACA,UAAW,CACT,QAAS,EAAU,WAAW,OAChC,EACA,OAAQ,CACN,QAAS,GAAQ,OACnB,CACF,GLtGA,IAAM,GAAa,CAAC,EAAS,CAAC,IAAM,CAClC,GAAI,CAEF,IAAM,EAAa,GAAiB,CAAM,EAe1C,OAbA,QAAQ,IAAI,mCAAwB,EAAW,OAAO,QAAU,SAAS,EAGvD,EAChB,EACA,EAAW,EACX,EAAY,GAAiB,CAAU,CAAC,EACxC,GAAa,CAAU,EACvB,GAAc,CAAU,EACxB,EAAc,EACd,CAAC,IAAS,GAAQ,GAAa,EAAM,CAAU,CAAC,EAAE,CAAI,CACxD,EAAE,CAAU,EAGZ,MAAO,EAAO,CAEd,MADA,QAAQ,MAAM,uBAAwB,CAAK,EACjC,MAAM,0BAA0B,EAAM,SAAS,IAI9C,MM1Cf,IACA,IACA,ICAA,IAAI,GAA0B,GASxB,GAAiB,CAAC,IAAuB,CAAC,IAAc,CAC5D,GAAI,CAAC,EAAU,QAEb,OADA,QAAQ,KAAK,oDAAoD,EAC1D,EAIT,IAAM,EAAQ,CACZ,QAAS,EAAO,SAAW,GAC3B,MAAO,EAAO,OAAS,CAAC,EACxB,SAAU,EAAO,SACjB,eAAgB,KAChB,gBAAiB,GACjB,WACF,EAGM,EAAe,CACnB,YAAY,CAAC,EAAmB,EAAY,CAAC,EAAG,EAAuB,CACrE,IAAM,EAAY,CAChB,KAAM,EAAM,aACT,EACH,gBACA,eAAgB,IAAM,CACpB,EAAU,iBAAmB,IAE/B,iBAAkB,EACpB,EAGA,OADA,EAAU,KAAK,EAAW,CAAS,EAC5B,EAEX,EAKM,EAAmB,IAAmB,CAE1C,GAAI,EAAU,QAAU,OAAO,EAAU,OAAO,YAAc,WAC5D,OAAO,EAAU,OAAO,UAAU,EAIpC,IAAQ,UAAW,EAEnB,GAAI,OAAO,IAAW,SAAU,CAC9B,IAAM,EAAU,SAAS,cAAc,CAAM,EAC7C,GAAI,CAAC,EAEH,OADA,QAAQ,KAAK,0BAA0B,GAAQ,EACxC,KAET,OAAO,EAIT,GAAI,OAAO,IAAW,UAAY,IAAW,MAAQ,YAAa,EAChE,OAAO,EAAO,QAIhB,OAAO,GAMH,EAAiB,CAAC,EAAgB,IAA+B,CACrE,IAAM,EAAc,SAAS,cAAc,IAAI,EACzC,EAAY,GAAG,EAAU,SAAS,WAAW,IAQnD,GANA,EAAY,UAAY,EACxB,EAAY,aAAa,OAAQ,UAAU,EAC3C,EAAY,aAAa,WAAY,IAAI,EACzC,EAAY,aAAa,UAAW,EAAK,EAAE,EAC3C,EAAY,aAAa,aAAc,EAAM,SAAS,CAAC,EAEnD,EAAK,SACP,EAAY,UAAU,IAAI,GAAG,aAAqB,EAClD,EAAY,aAAa,gBAAiB,MAAM,EAEhD,OAAY,aAAa,gBAAiB,OAAO,EAGnD,GAAI,EAAM,gBAAkB,EAAK,KAAO,EAAM,eAC5C,EAAY,UAAU,IAAI,GAAG,aAAqB,EAClD,EAAY,aAAa,gBAAiB,MAAM,EAEhD,OAAY,aAAa,gBAAiB,OAAO,EAGnD,GAAI,EAAK,WACP,EAAY,UAAU,IAAI,GAAG,YAAoB,EACjD,EAAY,aAAa,gBAAiB,MAAM,EAChD,EAAY,aAAa,gBAAiB,OAAO,EAInD,IAAM,EAAmB,SAAS,cAAc,MAAM,EAItD,GAHA,EAAiB,UAAY,GAAG,EAAU,SAAS,mBAAmB,IAGlE,EAAK,KAAM,CACb,IAAM,EAAc,SAAS,cAAc,MAAM,EACjD,EAAY,UAAY,GAAG,EAAU,SAAS,gBAAgB,IAC9D,EAAY,UAAY,EAAK,KAC7B,EAAiB,YAAY,CAAW,EAI1C,IAAM,EAAc,SAAS,cAAc,MAAM,EAMjD,GALA,EAAY,UAAY,GAAG,EAAU,SAAS,gBAAgB,IAC9D,EAAY,YAAc,EAAK,KAC/B,EAAiB,YAAY,CAAW,EAGpC,EAAK,SAAU,CACjB,IAAM,EAAkB,SAAS,cAAc,MAAM,EACrD,EAAgB,UAAY,GAAG,EAAU,SAAS,oBAAoB,IACtE,EAAgB,YAAc,EAAK,SACnC,EAAiB,YAAY,CAAe,EAM9C,GAHA,EAAY,YAAY,CAAgB,EAGpC,CAAC,EAAK,UAmBR,GAjBA,EAAY,iBAAiB,QAAS,CAAC,IACrC,EAAgB,EAAG,EAAM,CAAK,CAChC,EAGA,EAAY,iBAAiB,UAAW,CAAC,IAAM,CAC7C,GAAI,EAAE,MAAQ,SAAW,EAAE,MAAQ,IACjC,EAAE,eAAe,EACjB,EAAgB,EAAG,EAAM,CAAK,EAEjC,EAGD,EAAY,iBAAiB,QAAS,IAAM,CAC1C,EAAM,gBAAkB,EACzB,EAEG,EAAK,YAAc,EAAO,mBAE5B,EAAY,iBAAiB,aAAc,IAAM,CAC/C,GAAI,EAAU,QACZ,EAAU,QAAQ,mBAAmB,EAAM,EAAO,CAAW,EAEhE,EAED,EAAY,iBAAiB,aAAc,CAAC,IAAM,CAChD,GAAI,EAAU,QACZ,EAAU,QAAQ,mBAAmB,CAAC,EAEzC,EAIL,OAAO,GAMH,EAAgB,CAAC,EAAsB,IAA+B,CAC1E,IAAM,EAAiB,SAAS,cAAc,IAAI,EAKlD,GAJA,EAAe,UAAY,GAAG,EAAU,SAAS,cAAc,IAC/D,EAAe,aAAa,OAAQ,WAAW,EAC/C,EAAe,aAAa,aAAc,EAAM,SAAS,CAAC,EAEtD,EAAQ,GACV,EAAe,aAAa,KAAM,EAAQ,EAAE,EAG9C,OAAO,GAMH,EAAkB,IAAY,CAClC,IAAM,EAAW,SAAS,cAAc,IAAI,EAC5C,EAAS,UAAY,GAAG,EAAU,SAAS,WAAW,IACtD,EAAS,aAAa,OAAQ,MAAM,EAGpC,EAAM,MAAM,QAAQ,CAAC,EAAM,IAAU,CACnC,GAAI,SAAU,GAAQ,EAAK,OAAS,UAClC,EAAS,YAAY,EAAc,EAAM,CAAK,CAAC,EAE/C,OAAS,YAAY,EAAe,EAAkB,CAAK,CAAC,EAE/D,EAGD,EAAU,QAAQ,UAAY,GAC9B,EAAU,QAAQ,YAAY,CAAQ,GAMlC,EAAe,CAAC,IAAgC,CAEpD,QAAW,KAAQ,EAAM,MAAO,CAC9B,GAAI,OAAQ,GAAQ,EAAK,KAAO,EAC9B,OAAO,EAIT,GAAI,YAAa,GAAQ,MAAM,QAAS,EAAkB,OAAO,GAC/D,QAAW,KAAY,EAAkB,QACvC,GAAI,OAAQ,GAAW,EAAQ,KAAO,EACpC,OAAO,GAMf,OAAO,MAMH,EAAkB,CACtB,EACA,EACA,IACS,CAKT,GAJA,EAAE,eAAe,EACjB,EAAE,gBAAgB,EAGd,EAAK,SAAU,OAEnB,GAAI,EAAK,YAAc,EAAU,QAAS,CAExC,EAAU,QAAQ,mBAChB,EACA,EACA,EAAE,aACJ,EACA,OAIF,IAAM,EAAc,EAAa,aAC/B,SACA,CACE,OACA,OAAQ,EAAK,GACb,SAAU,EAAK,IACjB,EACA,CACF,EAGA,GAAI,EAAO,eAAiB,CAAC,EAAY,iBACvC,EAAU,EAAG,EAAI,GAQf,EAAsB,CAAC,IAAgC,CAC3D,GAAI,CAAC,EAAU,QAAS,OAGN,EAAU,QAAQ,iBAClC,IAAI,EAAU,SAAS,WAAW,GACpC,EAGU,QAAQ,CAAC,IAAS,CAG1B,GAFsB,EAAK,aAAa,SAAS,IAE3B,EACpB,EAAK,UAAU,IAAI,GAAG,EAAU,SAAS,qBAAqB,GAAG,EACjE,EAAK,aAAa,gBAAiB,MAAM,EAEzC,OAAK,UAAU,OAAO,GAAG,EAAU,SAAS,qBAAqB,GAAG,EACpE,EAAK,aAAa,gBAAiB,OAAO,EAE7C,EAGD,EAAM,eAAiB,GAQnB,EAAW,CACf,EACA,EAAwC,UAC/B,CACT,GAAI,EAAM,QAAS,OASnB,GANA,EAAM,QAAU,GAGhB,SAAS,oBAAoB,QAAS,CAAmB,EAGrD,CAAC,EAAU,QAAQ,WAErB,EAAU,QAAQ,UAAU,OAC1B,GAAG,EAAU,SAAS,eAAe,GACvC,EACA,EAAU,QAAQ,aAAa,cAAe,MAAM,EACpD,EAAU,QAAQ,MAAM,UAAY,YACpC,EAAU,QAAQ,MAAM,QAAU,KAGhB,EAAO,WAAa,SAAS,MACrC,YAAY,EAAU,OAAO,EAIzC,WAAW,IAAM,CAEf,IAAM,EAAgB,EAAiB,EACvC,GAAI,GAAiB,EAAU,SAC7B,EAAU,SAAS,aAAa,CAAa,EAI/C,EAAU,QAAQ,aAAa,cAAe,OAAO,EAGrD,EAAU,QAAQ,MAAM,UAAY,GACpC,EAAU,QAAQ,MAAM,QAAU,GAG7B,EAAU,QAAQ,sBAAsB,EAG7C,EAAU,QAAQ,UAAU,IAAI,GAAG,EAAU,SAAS,eAAe,GAAG,EAGxE,WAAW,IAAM,CACf,GAAI,EAAU,UAAY,EAAU,SAAS,mBAC3C,EAAU,SAAS,mBACjB,EAAU,QACV,CACF,EAGA,QAAI,IAAoB,WAAY,CAElC,IAAM,EAAQ,MAAM,KAClB,EAAU,QAAQ,iBAChB,IAAI,EAAU,SAAS,WAAW,UAAU,EAAU,SACpD,qBACF,IACF,CACF,EAEA,GAAI,EAAM,OAAS,EAEjB,EAAM,QAAQ,CAAC,IAAS,CACtB,EAAK,SAAW,GACjB,EAGD,EAAM,GAAG,SAAW,EAGpB,EAAM,GAAG,MAAM,EAGf,OAAU,QAAQ,SAAW,EAC7B,EAAU,QAAQ,MAAM,EAErB,KAEL,EAAU,QAAQ,SAAW,GAG7B,IAAM,EAAQ,MAAM,KAClB,EAAU,QAAQ,iBAChB,IAAI,EAAU,SAAS,WAAW,UAAU,EAAU,SACpD,qBACF,IACF,CACF,EAEA,GAAI,EAAM,OAAS,EACjB,EAAM,QAAQ,CAAC,IAAS,CACtB,EAAK,SAAW,GACjB,EACD,EAAM,GAAG,SAAW,IAIzB,GAAG,EAIN,WAAW,IAAM,CACf,GAAI,EAAO,qBAAuB,EAAM,QACtC,SAAS,iBAAiB,QAAS,CAAmB,EAIxD,GAAI,EAAO,cACT,SAAS,iBAAiB,UAAW,CAAqB,EAE5D,OAAO,iBAAiB,SAAU,EAAoB,CACpD,QAAS,EACX,CAAC,EACD,OAAO,iBAAiB,SAAU,EAAoB,CACpD,QAAS,EACX,CAAC,GACA,CAAC,GACH,EAAE,EAGL,EAAa,aAAa,OAAQ,CAAC,EAAG,CAAK,GAQvC,EAAY,CAAC,EAAe,EAAwB,KAAe,CACvE,GAAI,CAAC,EAAM,QAAS,OAMpB,GAHA,EAAU,KAAK,eAAgB,CAAE,QAAO,cAAa,CAAC,EAGlD,EAAU,QACZ,EAAU,QAAQ,iBAAiB,EAGrC,WAAW,IAAM,CAEf,EAAM,QAAU,GAGhB,EAAU,QAAQ,aAAa,cAAe,MAAM,EACpD,EAAU,QAAQ,UAAU,OAC1B,GAAG,EAAU,SAAS,eAAe,GACvC,EAGA,SAAS,oBAAoB,QAAS,CAAmB,EACzD,SAAS,oBAAoB,UAAW,CAAqB,EAC7D,OAAO,oBAAoB,SAAU,CAAkB,EACvD,OAAO,oBAAoB,SAAU,CAAkB,EAGvD,EAAa,aACX,QACA,CACE,aAAc,CAChB,EACA,CACF,EAGA,WAAW,IAAM,CACf,GAAI,EAAU,QAAQ,YAAc,CAAC,EAAM,QACzC,EAAU,QAAQ,WAAW,YAAY,EAAU,OAAO,GAE3D,GAAG,GACL,EAAE,GAMD,EAAa,CACjB,EACA,EAAwC,UAC/B,CACT,GAAI,EAAM,QACR,EAAU,CAAK,EACV,KAEL,GAAI,GACF,GAAI,aAAiB,cACnB,EAAkB,WACb,QAAI,aAAiB,WAC1B,EAAkB,QAGtB,EAAS,EAAO,CAAe,IAO7B,EAAsB,CAAC,IAAwB,CAEnD,GAAI,GAAyB,CAC3B,GAA0B,GAC1B,OAIF,GAAI,EAAU,QAAQ,SAAS,EAAE,MAAc,EAC7C,OAIF,IAAM,EAAS,EAAiB,EAChC,GAAI,GAAU,EAAO,SAAS,EAAE,MAAc,EAC5C,OAIF,GAAI,EAAU,SAAW,EAAU,QAAQ,eAAe,EAAG,CAC3D,IAAM,EAAiB,EAAU,QAAQ,kBAAkB,EAC3D,QAAW,KAAW,EACpB,GAAI,EAAQ,QAAQ,SAAS,EAAE,MAAc,EAC3C,OAMN,EAAU,EAAG,EAAK,GAMd,EAAwB,CAAC,IAA2B,CAExD,IAAM,EAAqB,EAAU,QAAQ,SAAS,EAAE,MAAc,EAChE,EACJ,EAAU,SACV,EAAU,QAAQ,eAAe,GACjC,EAAU,QACP,kBAAkB,EAClB,KAAK,CAAC,IAAM,EAAE,QAAQ,SAAS,EAAE,MAAc,CAAC,EAIrD,GAAI,EAAM,SACR,GAAI,GAAsB,GAExB,GAAI,EAAE,MAAQ,SACZ,EAAE,eAAe,EACjB,EAAU,EAAG,EAAI,EAInB,QAAI,EAAU,UAAY,EAAU,SAAS,kBAC3C,EAAU,SAAS,kBAAkB,EAAG,EAAO,CAC7C,YACA,aAAc,EAAU,QACpB,EAAU,QAAQ,aAClB,KACJ,eACA,mBAAoB,EAAU,QAC1B,EAAU,QAAQ,mBAClB,KACJ,yBAA0B,EAAU,QAChC,EAAU,QAAQ,yBAClB,IACN,CAAC,IASH,EAAqB,IAAY,CACrC,GAAI,EAAM,QACR,GAAI,EAAO,cAET,EAAU,OAAW,EAAI,EACpB,KAEL,IAAM,EAAgB,EAAiB,EACvC,GAAI,GAAiB,EAAU,SAC7B,EAAU,SAAS,aAAa,CAAa,IAS/C,EAAqB,IAAY,CACrC,GAAI,EAAM,QAER,OAAO,sBAAsB,IAAM,CAEjC,IAAM,EAAgB,EAAiB,EACvC,GAAI,GAAiB,EAAU,SAC7B,EAAU,SAAS,aAAa,CAAa,EAEhD,GAOC,EAAW,IAAM,CAKrB,GAHA,EAAgB,EAGZ,EAAU,UAAY,EAAU,SAAS,sBAC3C,EAAU,SAAS,sBAAsB,EAAU,QAAS,EAAO,CACjE,YACA,aAAc,EAAU,QAAU,EAAU,QAAQ,aAAe,KACnE,eACA,mBAAoB,EAAU,QAC1B,EAAU,QAAQ,mBAClB,KACJ,yBAA0B,EAAU,QAChC,EAAU,QAAQ,yBAClB,IACN,CAAC,EAIH,GAAI,EAAM,QAAS,CACjB,IAAM,EAAgB,EAAiB,EACvC,GAAI,GAAiB,EAAU,SAC7B,EAAU,SAAS,aAAa,CAAa,EAO/C,GAHA,EAAU,QAAQ,UAAU,IAAI,GAAG,EAAU,SAAS,eAAe,GAAG,EAGpE,EAAO,oBACT,SAAS,iBAAiB,QAAS,CAAmB,EAExD,GAAI,EAAO,cACT,SAAS,iBAAiB,UAAW,CAAqB,EAE5D,OAAO,iBAAiB,SAAU,CAAkB,EACpD,OAAO,iBAAiB,SAAU,CAAkB,IA0BxD,GArBA,EAAU,GAAG,oBAAqB,CAAC,IAAU,CAC3C,IAAQ,QAAO,YAAW,iBAAkB,EAE5C,EAAM,QAAQ,CAAC,EAAM,IAAU,CAC7B,IAAI,EACJ,GAAI,SAAU,GAAQ,EAAK,OAAS,UAClC,EAAU,EAAc,EAAM,CAAK,EAEnC,OAAU,EAAe,EAAkB,CAAK,EAGlD,GADA,EAAU,YAAY,CAAO,EACzB,EACF,EAAc,CAAO,EAExB,EACF,EAGD,WAAW,EAAU,CAAC,EAGlB,EAAU,UAAW,CACvB,IAAM,EAAkB,EAAU,UAAU,UAAY,IAAM,IAC9D,EAAU,UAAU,QAAU,IAAM,CAElC,SAAS,oBAAoB,QAAS,CAAmB,EACzD,SAAS,oBAAoB,UAAW,CAAqB,EAC7D,OAAO,oBAAoB,SAAU,CAAkB,EACvD,OAAO,oBAAoB,SAAU,CAAkB,EAEvD,EAAgB,GAKpB,MAAO,IACF,EACH,KAAM,CACJ,KAAM,CACJ,EACA,EAAwC,UACrC,CAEH,OADA,EAAS,EAAO,CAAe,EACxB,GAGT,MAAO,CAAC,EAAe,EAAe,KAAS,CAE7C,OADA,EAAU,EAAO,CAAY,EACtB,GAGT,OAAQ,CACN,EACA,EAAwC,UACrC,CAEH,OADA,EAAW,EAAO,CAAe,EAC1B,GAGT,OAAQ,IAAM,EAAM,QAEpB,SAAU,CAAC,IAAU,CAGnB,OAFA,EAAM,MAAQ,EACd,EAAgB,EACT,GAGT,SAAU,IAAM,EAAM,MAEtB,YAAa,CAAC,IAAa,CAEzB,GADA,EAAM,SAAW,EACb,EAAM,QAAS,CACjB,IAAM,EAAgB,EAAiB,EACvC,GAAI,GAAiB,EAAU,SAC7B,EAAU,SAAS,aAAa,CAAa,EAGjD,OAAO,GAGT,YAAa,IAAM,EAAM,SAEzB,YAAa,CAAC,IAA0B,CAEtC,OADA,EAAoB,CAAM,EACnB,GAGT,YAAa,IAAM,EAAM,cAC3B,CACF,GAGa,MCjvBf,IAAM,GAAa,CAAC,IAAuB,CAAC,IAAc,CACxD,GAAI,CAAC,EAAU,QAEb,OADA,QAAQ,KAAK,gDAAgD,EACtD,EAIT,IAAI,EAAkB,GAGtB,SAAS,iBAAiB,UAAW,CAAC,IAAqB,CAEzD,EAAkB,EAAE,MAAQ,MAG5B,WAAW,IAAM,CACf,EAAkB,IACjB,GAAG,EACP,EAGD,IAAM,EAAQ,CACZ,cAAe,KACf,gBAAiB,KACjB,YAAa,EACf,EAOM,EAAgB,CACpB,IAC6C,CAC7C,GAAI,CAAC,EAAQ,MAAO,CAAE,QAAS,KAAM,UAAW,IAAK,EAGrD,GAAI,OAAO,IAAW,SAAU,CAC9B,IAAM,EAAU,SAAS,cAAc,CAAM,EAC7C,GAAI,CAAC,EAEH,OADA,QAAQ,KAAK,0BAA0B,GAAQ,EACxC,CAAE,QAAS,KAAM,UAAW,IAAK,EAE1C,MAAO,CAAE,QAAS,EAAwB,UAAW,IAAK,EAI5D,GAAI,OAAO,IAAW,UAAY,IAAW,KAAM,CAEjD,GAAI,YAAa,GAAU,EAAO,mBAAmB,YACnD,MAAO,CAAE,QAAS,EAAO,QAAS,UAAW,CAAO,EAItD,GAAI,eAAgB,GAAU,OAAO,EAAO,aAAe,WAAY,CACrE,IAAM,EAAU,EAAO,WAAW,EAClC,GAAI,aAAmB,YACrB,MAAO,CAAE,UAAS,UAAW,CAAO,EAKxC,GAAI,UAAW,GAAU,EAAO,iBAAiB,YAC/C,MAAO,CAAE,QAAS,EAAO,MAAO,UAAW,CAAO,EAIpD,GAAI,aAAkB,YACpB,MAAO,CAAE,QAAS,EAAQ,UAAW,IAAK,EAK9C,OADA,QAAQ,KAAK,uBAAwB,CAAM,EACpC,CAAE,QAAS,KAAM,UAAW,IAAK,GAMpC,EAAuB,CAAC,IAAiC,CAE7D,IAAM,EAAc,EAAU,SAAS,EAAE,EAAE,MAAM,GAAG,EAAE,GAGtD,GAAI,EAAQ,UAAY,SACtB,MAAO,GAAG,mBACL,QAAI,EAAQ,UAAU,SAAS,GAAG,QAAkB,EACzD,MAAO,GAAG,mBACL,QACL,EAAQ,UAAU,SAAS,GAAG,aAAuB,GACrD,EAAQ,UAAU,SAAS,GAAG,UAAoB,EAElD,MAAO,GAAG,uBAGV,WAAO,GAAG,yBAOR,EAAoB,CAAC,IAGf,CACV,IAAQ,QAAS,EAAe,UAAW,GAAoB,EAE/D,GAAI,CAAC,EAAe,OAGpB,GAAI,EAAM,eAAiB,EAAM,gBAAkB,EACjD,EAAQ,EAYV,GARA,EAAM,cAAgB,EACtB,EAAM,gBAAkB,EAGxB,EAAM,YAAc,EAAqB,CAAa,EAIlD,CAAC,EAAO,WAEV,EAAc,iBAAiB,QAAS,CAAiB,EAGzD,EAAc,iBAAiB,UAAW,CAAmB,EAG7D,EAAc,iBAAiB,OAAQ,CAAgB,EAIzD,EAAc,aAAa,gBAAiB,MAAM,EAClD,EAAc,aAAa,gBAAiB,OAAO,EAGnD,IAAI,EAAS,EAAU,QAAQ,GAC/B,GAAI,CAAC,EACH,EAAS,QAAQ,KAAK,IAAI,KAAK,KAAK,MAAM,KAAK,OAAO,EAAI,IAAI,IAC9D,EAAU,QAAQ,GAAK,EAIzB,EAAc,aAAa,gBAAiB,CAAM,GAM9C,EAAkB,CAAC,IAA0B,CACjD,GAAI,CAAC,EAAM,cAAe,OAG1B,GACE,EAAM,iBACN,OAAO,EAAM,gBAAgB,YAAc,WAC3C,CACA,EAAM,gBAAgB,UAAU,CAAM,EACtC,OAIF,GAAI,EAAM,iBAAmB,aAAc,EAAM,gBAAiB,CAChE,EAAM,gBAAgB,SAAW,EACjC,OAIF,GACE,EAAM,iBACN,OAAO,EAAM,gBAAgB,QAAU,YACvC,OAAO,EAAM,gBAAgB,OAAS,WACtC,CACA,GAAI,EACF,EAAM,gBAAgB,MAAM,EAE5B,OAAM,gBAAgB,KAAK,EAE7B,OAIF,GAAI,EAAM,cAAc,UACtB,GAAI,EACF,EAAM,cAAc,UAAU,IAAI,EAAM,WAAW,EAEnD,OAAM,cAAc,UAAU,OAAO,EAAM,WAAW,GAStD,EAAuB,IAAY,CAEvC,GAAI,CAAC,EAAM,cAAe,OAG1B,GACE,EAAM,iBACN,OAAO,EAAM,gBAAgB,QAAU,WACvC,CACA,sBAAsB,IAAM,CAC1B,EAAM,gBAAgB,MAAM,EAC7B,EACD,OAMF,GACE,EAAM,iBACN,UAAW,EAAM,iBACjB,EAAM,gBAAgB,iBAAiB,YACvC,CACA,sBAAsB,IAAM,CAC1B,EAAM,gBAAgB,MAAM,MAAM,EACnC,EACD,OAIF,sBAAsB,IAAM,CAC1B,EAAM,cAAc,MAAM,EAC3B,GAMG,EAAoB,CAAC,IAAwB,CAIjD,GAHA,EAAE,eAAe,EAGb,EAAU,KAGZ,GAFe,EAAU,KAAK,OAAO,EAGnC,EAAU,KAAK,MAAM,CAAC,EAEtB,OAAU,KAAK,KAAK,EAAG,OAAO,GAQ9B,EAAsB,CAAC,IAA2B,CAEtD,GAAI,CAAC,EAAU,KAAM,OAGrB,IAAM,EAAS,EAAU,KAAK,OAAO,EAErC,OAAQ,EAAE,SACH,YACA,QACA,gBACA,OAKH,GAHA,EAAE,eAAe,EAGb,CAAC,EACH,EAAU,KAAK,KAAK,EAAG,UAAU,EAEnC,UAEG,SAEH,GAAI,EACF,EAAE,eAAe,EACjB,EAAU,KAAK,MAAM,CAAC,EAExB,UAEG,cACA,KAIH,GAHA,EAAE,eAAe,EAGb,CAAC,EACH,EAAU,KAAK,KAAK,EAAG,UAAU,EAGjC,WAAW,IAAM,CACf,IAAM,EAAQ,EAAU,QAAQ,iBAC9B,IAAI,EAAU,SAAS,WAAW,UAAU,EAAU,SAAS,qBAAqB,IACtF,EAEA,GAAI,EAAM,OAAS,EAAG,CAEpB,EAAM,QAAQ,CAAC,IAAS,EAAK,aAAa,WAAY,IAAI,CAAC,EAG3D,IAAM,EAAW,EAAM,EAAM,OAAS,GACtC,EAAS,aAAa,WAAY,GAAG,EACrC,EAAS,MAAM,IAEhB,GAAG,EAER,QAOA,EAAmB,CAAC,IAAwB,CAEhD,GAAI,CAAC,EAAU,MAAQ,CAAC,EAAU,KAAK,OAAO,EAAG,OAGjD,IAAM,EAAgB,EAAE,cAGxB,GAAI,EAAiB,CACnB,WAAW,IAAM,CAEf,GAAI,EAAU,MAAQ,EAAU,KAAK,OAAO,EAE1C,EAAU,KAAK,MAAM,EAAG,EAAK,GAE9B,EAAE,EACL,OAQF,GAAI,EAAe,CAEjB,GAAI,EAAU,QAAQ,SAAS,CAAa,EAC1C,OAIF,GACE,EAAc,aAAa,eAAe,IAAM,QAChD,EAAc,QAAQ,wBAAwB,EAE9C,OAMJ,WAAW,IAAM,CAEf,GAAI,EAAU,MAAQ,EAAU,KAAK,OAAO,EAE1C,EAAU,KAAK,MAAM,EAAG,EAAK,GAE9B,EAAE,GAMD,EAAU,IAAY,CAC1B,GAAI,EAAM,cAAe,CACvB,GAAI,CAAC,EAAO,WACV,EAAM,cAAc,oBAAoB,QAAS,CAAiB,EAClE,EAAM,cAAc,oBAAoB,UAAW,CAAmB,EACtE,EAAM,cAAc,oBAAoB,OAAQ,CAAgB,EAElE,EAAM,cAAc,gBAAgB,eAAe,EACnD,EAAM,cAAc,gBAAgB,eAAe,EACnD,EAAM,cAAc,gBAAgB,eAAe,EAGnD,EAAgB,EAAK,EAIvB,EAAM,gBAAkB,KACxB,EAAM,cAAgB,KACtB,EAAM,YAAc,KAId,UAAS,UAAW,GAAoB,EAAc,EAAO,MAAM,EAI3E,GAHA,EAAkB,CAAE,UAAS,UAAW,CAAgB,CAAC,EAGrD,EAAU,UAAW,CACvB,IAAM,EAAkB,EAAU,UAAU,UAAY,IAAM,IAC9D,EAAU,UAAU,QAAU,IAAM,CAClC,EAAQ,EACR,EAAgB,GA0BpB,OArBA,EAAU,GAAG,OAAQ,IAAM,CACzB,GAAI,EAAM,cACR,EAAM,cAAc,aAAa,gBAAiB,MAAM,EACxD,EAAgB,EAAI,EAEvB,EAED,EAAU,GAAG,QAAS,CAAC,IAAU,CAC/B,GAAI,EAAM,eAMR,GAJA,EAAM,cAAc,aAAa,gBAAiB,OAAO,EACzD,EAAgB,EAAK,EAGjB,EAAM,cAAgB,CAAC,EACzB,EAAqB,GAG1B,EAGM,IACF,EACH,OAAQ,CAMN,SAAS,CAAC,EAAa,CACrB,IAAM,EAAW,EAAc,CAAM,EACrC,GAAI,EAAS,QACX,EAAkB,CAAQ,EAE5B,OAAO,GAOT,SAAS,EAAG,CACV,OAAO,EAAM,eAOf,kBAAkB,EAAG,CACnB,OAAO,EAAM,iBAQf,SAAS,CAAC,EAAiB,CAEzB,OADA,EAAgB,CAAM,EACf,GAOT,KAAK,EAAG,CAEN,OADA,EAAqB,EACd,EAEX,CACF,GAGa,MCneR,IAAM,GAAmB,CAAC,EAAW,IAAuB,CAWjE,IAAM,EAAkB,CACtB,EACA,EACA,EACA,EAAY,KACH,CACT,GAAI,CAAC,GAAe,CAAC,EAAe,OAGpC,IAAM,EAAe,EAAO,WAAa,EAAO,YAAc,SAAS,KAGvE,EAAY,MAAM,SAAW,WAI7B,IAAM,EAAU,EACZ,EACA,OAAO,aAAe,SAAS,gBAAgB,WAC7C,EAAU,EACZ,EACA,OAAO,aAAe,SAAS,gBAAgB,UAG7C,EAAa,EAAc,sBAAsB,EAGjD,EAAW,EAAY,UAAU,EAAI,EAe3C,GAZA,EAAS,MAAM,WAAa,SAC5B,EAAS,MAAM,QAAU,QACzB,EAAS,MAAM,SAAW,WAC1B,EAAS,MAAM,IAAM,IACrB,EAAS,MAAM,KAAO,IACtB,EAAS,MAAM,UAAY,OAC3B,EAAS,MAAM,QAAU,IACzB,EAAS,MAAM,cAAgB,OAC/B,EAAS,UAAU,IAAI,GAAG,EAAU,SAAS,eAAe,GAAG,EAI3D,EAAO,QAAU,QAAU,CAAC,EAC9B,EAAS,MAAM,MAAQ,GAAG,EAAW,UAIvC,IAAM,EAAmB,EAAO,WAAa,SAAS,KACtD,EAAiB,YAAY,CAAQ,EAGrC,IAAM,EAAW,EAAS,sBAAsB,EAC1C,EAAgB,OAAO,WACvB,EAAiB,OAAO,YAG9B,EAAiB,YAAY,CAAQ,EAGrC,IAAM,EAAS,EAAO,SAAW,OAAY,EAAO,OAAS,EAGzD,EAAM,EACN,EAAO,EACP,EAAqB,EAGzB,GAAI,EAAW,CAKb,GAHA,EAAqB,GAAqB,cAIxC,EAAmB,WAAW,OAAO,GACrC,EAAW,MAAQ,EAAS,MAAQ,EAAS,EAAgB,GAG7D,EAAqB,EAAmB,QAAQ,QAAS,MAAM,EAC1D,QACL,EAAmB,WAAW,MAAM,GACpC,EAAW,KAAO,EAAS,MAAQ,EAAS,GAG5C,EAAqB,EAAmB,QAAQ,OAAQ,OAAO,EAKjE,GAAI,EAAW,IAAM,EAAS,OAAS,EAAiB,IACtD,GAAI,IAAuB,cACzB,EAAqB,YAChB,QAAI,IAAuB,aAChC,EAAqB,YAMzB,YAAQ,OACD,gBACA,UACA,UAEH,GAAI,EAAW,IAAM,EAAS,OAAS,EAAS,GAE9C,EAAqB,EAAkB,QAAQ,MAAO,QAAQ,EAEhE,UAEG,mBACA,aACA,aAEH,GACE,EAAW,OAAS,EAAS,OAAS,EAAS,GAC/C,GAGA,GAAI,EAAW,IAAM,EAAiB,EAAW,OAE/C,EAAqB,EAAkB,QAAQ,SAAU,KAAK,EAGlE,UAGG,kBACA,YACA,iBACA,OAEH,GAAI,EAAW,OAAS,EAAS,OAAS,EAAiB,IAEzD,GAAI,IAAsB,cACxB,EAAqB,YAChB,QAAI,IAAsB,aAC/B,EAAqB,WAChB,QAAI,IAAsB,QAE/B,EACE,EAAW,KAAO,EAAS,OAAS,EAAW,QAAU,EACtD,QAAI,IAAsB,OAE/B,EACE,EAAW,KAAO,EAAS,OAAS,EAAW,QAAU,EAG/D,MA2BN,GAtBwB,CACtB,eACA,kBACA,iBACA,eACF,EAEgB,QAAQ,CAAC,KAAa,CACpC,EAAY,UAAU,OACpB,GAAG,EAAU,SAAS,MAAM,MAAM,IACpC,EACD,EAKC,EAAmB,WAAW,KAAK,GACnC,IAAuB,aACvB,IAAuB,YACtB,IAAuB,SAAW,EAAM,EAAW,KACnD,IAAuB,QAAU,EAAM,EAAW,IAGnD,EAAY,UAAU,IAAI,GAAG,EAAU,SAAS,MAAM,iBAAiB,EAClE,QAAI,EAAmB,WAAW,MAAM,EAC7C,EAAY,UAAU,IAAI,GAAG,EAAU,SAAS,MAAM,kBAAkB,EACnE,QAAI,EAAmB,WAAW,OAAO,EAC9C,EAAY,UAAU,IACpB,GAAG,EAAU,SAAS,MAAM,mBAC9B,EAEA,OAAY,UAAU,IACpB,GAAG,EAAU,SAAS,MAAM,oBAC9B,EAMF,IAAM,EACJ,GAAgB,EAAO,UACnB,EAAO,UAAU,sBAAsB,EACvC,CAAE,IAAK,EAAG,KAAM,EAAG,MAAO,EAAG,OAAQ,CAAE,EAGvC,EAAU,EAAe,CAAC,EAAc,KAAO,EAC/C,EAAU,EAAe,CAAC,EAAc,IAAM,EAEpD,OAAQ,OACD,YACH,EAAM,EAAW,IAAM,EAAU,EAAS,OAAS,EACnD,EAAO,EAAW,KAAO,EACzB,UACG,MACH,EAAM,EAAW,IAAM,EAAU,EAAS,OAAS,EACnD,EACE,EAAW,KAAO,EAAU,EAAW,MAAQ,EAAI,EAAS,MAAQ,EACtE,UACG,UACH,EAAM,EAAW,IAAM,EAAU,EAAS,OAAS,EACnD,EAAO,EAAW,MAAQ,EAAU,EAAS,MAC7C,UACG,cACH,EAAM,EAAW,IAAM,EACvB,EAAO,EAAW,MAAQ,EAAU,EACpC,UACG,QAEH,GAAI,IAAQ,EACV,EACE,EAAW,IACX,EACA,EAAW,OAAS,EACpB,EAAS,OAAS,EAEpB,QAAO,EAET,EAAO,EAAW,MAAQ,EAAU,EACpC,UACG,YACH,EAAM,EAAW,OAAS,EAAU,EAAS,OAC7C,EAAO,EAAW,MAAQ,EAAU,EACpC,UACG,eACH,EAAM,EAAW,OAAS,EAAU,EACpC,EAAO,EAAW,KAAO,EACzB,UACG,SACH,EAAM,EAAW,OAAS,EAAU,EACpC,EACE,EAAW,KAAO,EAAU,EAAW,MAAQ,EAAI,EAAS,MAAQ,EACtE,UACG,aACH,EAAM,EAAW,OAAS,EAAU,EACpC,EAAO,EAAW,MAAQ,EAAU,EAAS,MAC7C,UACG,aACH,EAAM,EAAW,IAAM,EACvB,EAAO,EAAW,KAAO,EAAU,EAAS,MAAQ,EACpD,UACG,OAEH,GAAI,IAAQ,EACV,EACE,EAAW,IACX,EACA,EAAW,OAAS,EACpB,EAAS,OAAS,EAEpB,QAAO,EAET,EAAO,EAAW,KAAO,EAAU,EAAS,MAAQ,EACpD,UACG,WACH,EAAM,EAAW,OAAS,EAAU,EAAS,OAC7C,EAAO,EAAW,KAAO,EAAU,EAAS,MAAQ,EACpD,MAKJ,GAAI,EAAc,CAMhB,GAJA,EAAY,MAAM,IAAM,GAAG,MAC3B,EAAY,MAAM,KAAO,GAAG,MAGxB,EAAO,QAAU,QAAU,CAAC,EAC9B,EAAY,MAAM,MAAQ,GAAG,EAAW,UAI1C,GAAI,EAAO,UACT,EAAY,MAAM,UAAY,EAAO,UAGvC,OAIF,IAAM,EAAgB,GACtB,GAAI,EAAM,EAAU,EAClB,EAAM,EAAgB,EAIxB,IAAM,EAAuB,GAG7B,GAFmB,EAAM,EAAU,EAAS,OAE3B,EAAiB,EAAsB,CAKtD,IAAM,GACJ,GAAkB,EAAM,GAAW,EAG/B,EAAgB,KAAK,IAAI,EAAS,OAAQ,GAAG,EAC7C,GAAe,KAAK,IAAI,GAAiB,CAAa,EAM5D,GAHA,EAAY,MAAM,UAAY,GAAG,OAG7B,EAAO,UAAW,CACpB,IAAM,EAAkB,SAAS,EAAO,UAAW,EAAE,EACrD,GACE,CAAC,MAAM,CAAe,GACtB,EAAkB,SAAS,EAAY,MAAM,WAAa,IAAK,EAAE,EAEjE,EAAY,MAAM,UAAY,EAAO,WAKzC,QAAI,EAAO,UACT,EAAY,MAAM,UAAY,EAAO,UAKzC,GAAI,EAAO,QAAU,QAAU,CAAC,EAC9B,EAAY,MAAM,MAAQ,GAAG,EAAW,UAK1C,IAAM,EAAW,KAAK,IAAI,EAAgB,EAAS,CAAG,EAChD,EAAY,KAAK,IAAI,GAAK,EAAS,CAAI,EAM7C,GAJA,EAAY,MAAM,IAAM,GAAG,MAC3B,EAAY,MAAM,KAAO,GAAG,MAGxB,EAAY,EAAU,EAAS,MAAQ,EAAgB,GAEzD,EAAY,MAAM,KAAO,OACzB,EAAY,MAAM,MAAQ,QAoC9B,MAAO,CACL,aA9BmB,CAAC,IAAqC,CACzD,GAAI,CAAC,GAAiB,CAAC,EAAU,QAAS,OAC1C,EAAgB,EAAU,QAAS,EAAe,EAAO,SAAU,EAAK,GA6BxE,gBAnBsB,CACtB,EACA,EACA,EAAgB,IACP,CACT,GAAI,CAAC,GAAkB,CAAC,EAAmB,OAI3C,IAAM,EAAe,EAAQ,IAAM,EAAI,cAAgB,aAGvD,EAAe,MAAM,OAAS,GAAG,KAAO,EAAQ,KAEhD,EAAgB,EAAgB,EAAmB,EAAc,EAAI,GAMrE,iBACF,GASI,GAAe,CAAC,IAAuB,CAAC,IAAc,CAE1D,GAAI,CAAC,EAAU,QACb,OAAO,EAIT,IAAM,EAAa,GAAiB,EAAW,CAAM,EAGrD,MAAO,IACF,EACH,SAAU,CACZ,GAGa,MC1aR,IAAM,GAA2B,CAAC,IAAc,CAErD,IAAI,EAAkB,GAGlB,EAAkB,GAClB,EAAyD,KACvD,EAAkB,KAGK,IAAM,CACjC,SAAS,iBAAiB,UAAW,CAAC,IAAqB,CAEzD,EAAkB,EAAE,MAAQ,MAG5B,WAAW,IAAM,CACf,EAAkB,IACjB,GAAG,EACP,IAIkB,EAMrB,IAAM,EAAuB,IAAqB,CAIhD,IAAM,EAAW,SAAS,iBADxB,2IAGF,EAGA,OAAO,MAAM,KAAK,CAAQ,EAAE,OAAO,CAAC,IAAY,CAC9C,OACE,EAAQ,eAAiB,MAAQ,CAAC,EAAQ,UAAU,SAAS,QAAQ,EAExE,GAMG,EAAiB,IAAY,CAEjC,GADA,EAAkB,GACd,EACF,aAAa,CAAgB,EAC7B,EAAmB,MASjB,EAAqB,CACzB,EACA,IACS,CAIT,GAFA,EAAe,EAEX,IAAoB,WAAY,CAElC,IAAM,EAAQ,MAAM,KAClB,EAAY,iBACV,IAAI,EAAU,SAAS,WAAW,UAAU,EAAU,SACpD,qBACF,IACF,CACF,EAEA,GAAI,EAAM,OAAS,EAEjB,EAAM,GAAG,aAAa,WAAY,GAAG,EACrC,EAAM,GAAG,MAAM,EAGf,OAAY,aAAa,WAAY,GAAG,EACxC,EAAY,MAAM,EAEf,KAEL,EAAY,aAAa,WAAY,IAAI,EAGzC,IAAM,EAAY,EAAY,cAC5B,IAAI,EAAU,SAAS,WAAW,UAAU,EAAU,SACpD,qBACF,IACF,EACA,GAAI,EACF,EAAU,aAAa,WAAY,GAAG,IAQtC,EAAoB,CACxB,EACA,EACA,IAeS,CAET,IAAM,EACJ,EAAM,eAAiB,EAAM,cAAc,SAAS,EAAE,MAAc,EAGhE,EAAc,EAAY,EAAM,cAAgB,EAAU,QAG1D,EAAQ,MAAM,KAClB,EAAY,iBACV,IAAI,EAAU,SAAS,WAAW,UAAU,EAAU,SACpD,qBACF,IACF,CACF,EAEA,GAAI,EAAM,SAAW,EAAG,OAGxB,IAAM,EAAiB,SAAS,cAC5B,EAAmB,GAEvB,GAAI,GAAkB,EAAM,SAAS,CAAc,EACjD,EAAmB,EAAM,QAAQ,CAAc,EAIjD,IAAM,EAAY,CAAC,IAAkB,CACnC,GAAI,EAAM,GACR,EAAM,GAAO,MAAM,GAKvB,GAAI,EAAE,IAAI,SAAW,GAAK,CAAC,EAAE,SAAW,CAAC,EAAE,SAAW,CAAC,EAAE,OAAQ,CAQ/D,GAPA,EAAE,eAAe,EACjB,EAAE,gBAAgB,EAGlB,GAAmB,EAAE,IAAI,YAAY,EAGjC,EACF,aAAa,CAAgB,EAI/B,EAAmB,WAAW,IAAM,CAClC,EAAkB,GAClB,EAAmB,MAClB,CAAe,EAGlB,IAAM,EAAa,EAAM,UAAU,CAAC,IAAS,CAK3C,OAJoB,EAAK,cACvB,IAAI,EAAU,SAAS,gBAAgB,GACzC,GAC0B,aAAa,YAAY,GAAK,IAC5C,WAAW,CAAe,EACvC,EAED,GAAI,IAAe,GACjB,EAAU,CAAU,EACf,QAAI,EAAgB,OAAS,EAAG,CAErC,IAAM,EAAW,EAAgB,MAAM,EAAE,EACnC,EAAkB,EAAM,UAAU,CAAC,IAAS,CAKhD,OAJoB,EAAK,cACvB,IAAI,EAAU,SAAS,gBAAgB,GACzC,GAC0B,aAAa,YAAY,GAAK,IAC5C,WAAW,CAAQ,EAChC,EAED,GAAI,IAAoB,GACtB,EAAkB,EAClB,EAAU,CAAe,EAI7B,OAGF,OAAQ,EAAE,SACH,gBACA,OAGH,GAFA,EAAE,eAAe,EACjB,EAAE,gBAAgB,EACd,EAAmB,EACrB,EAAU,CAAC,EACN,QAAI,EAAmB,EAAM,OAAS,EAC3C,EAAU,EAAmB,CAAC,EAE9B,OAAU,CAAC,EAEb,UAEG,cACA,KAGH,GAFA,EAAE,eAAe,EACjB,EAAE,gBAAgB,EACd,EAAmB,EACrB,EAAU,EAAM,OAAS,CAAC,EACrB,QAAI,EAAmB,EAC5B,EAAU,EAAmB,CAAC,EAE9B,OAAU,EAAM,OAAS,CAAC,EAE5B,UAEG,OACH,EAAE,eAAe,EACjB,EAAE,gBAAgB,EAClB,EAAU,CAAC,EACX,UAEG,MACH,EAAE,eAAe,EACjB,EAAE,gBAAgB,EAClB,EAAU,EAAM,OAAS,CAAC,EAC1B,UAEG,YACA,IAGH,GAFA,EAAE,eAAe,EACjB,EAAE,gBAAgB,EACd,GAAoB,EACtB,EAAM,GAAkB,MAAM,EAEhC,UAEG,iBACA,QAGH,GAFA,EAAE,eAAe,EACjB,EAAE,gBAAgB,EACd,GAEF,GACE,GAAoB,GACpB,EAAM,GAAkB,UAAU,SAChC,GAAG,EAAU,SAAS,oBAAoB,GAC5C,EACA,CACA,IAAM,EAAc,EAAM,GACpB,EAAY,SAChB,EAAY,aAAa,YAAY,EACrC,EACF,EAIM,EAHa,EAAY,QAC7B,IAAI,EAAU,SAAS,eAAe,GACxC,GACiC,aAAa,kBAAkB,EAG1D,EAAa,EAAQ,aAAa,CAAY,EACpD,GAAI,GAAc,EAAW,QAAS,CACpC,IAAM,EAAW,EAAW,QAAQ,GACpC,EAAQ,yBACN,EACA,EACA,CACF,IAKJ,QACE,GAAoB,GACpB,EAAM,GAAkB,UAAU,SAChC,GAAG,EAAU,SAAS,oBAAoB,GAC5C,EACA,CAEA,IAAM,EAAc,EAAM,GACpB,EAAY,SAChB,EAAY,aAAa,YAAY,EACrC,EACF,EACM,EAAW,EAAM,MAAM,GAG7B,EAAQ,mBAAmB,EAAU,EAAW,CAAW,EAG/D,UAEG,gBACA,OAGH,GAFA,EAAE,eAAe,EACjB,EAAE,gBAAgB,EACd,EAEF,GAAI,EAAM,kBAAmB,CAE3B,IAAM,EAAa,EAAM,kBAGnB,EAAe,SACnB,EAAY,aAAa,YAAY,GAAK,IAC1C,EACF,EAMA,GAHA,EAAQ,aAAa,CAAY,EAG7B,EACF,EAAW,MAAM,EAGnB,OAAQ,aAAa,CAAC,EAG1B,UAEG,SAGH,GAFA,EAAE,eAAe,EACjB,EAAE,gBAAgB,EACd,EAEF,GAAI,EAAM,kBAAmB,CAE3B,IAAM,EAAa,EAAM,kBAGnB,EAAe,SACnB,EAAY,aAAa,YAAY,GAAK,IAC1C,EACF,EAMA,GAHA,EAAQ,aAAa,CAAY,EAG7B,EACF,EAAW,MAAM,EAGnB,OAAQ,aAAa,CAAC,EAIxB,OAAQ,UAAU,EAAG,EAAI,EAE3B,UAEG,MAGH,GADA,EAAkB,GACd,EACF,aAAa,CAAgB,EAC7B,EAAmB,KAIrB,EAAE,eAAe,EAGjB,IAAM,EAAgB,EAAU,QAAQ,YAAY,EAMpD,GAHA,EAAQ,UAAU,EAAG,EAAI,EAGrB,EAGF,WAAW,IAAM,CAEf,GAAI,EAAE,SAAU,CAET,KAEL,IAAM,EAAoB,EAAqB,EACzC,EAAc,EAAkB,QAAQ,CAAa,EAC3D,GACE,GAAe,GACf,EAAc,EAAkB,OAAS,EAEzC,EAAkB,EAAc,GAAG,MAAM,IAG5C,CAAC,EAEN,QAsCN,MAAO,CACL,qBACA,oBACA,sBAlC4B,CAC5B,EACA,EACA,IACG,CAEH,IAAM,EAAQ,EAAY,iBACxB,IAAI,EAAU,SAAS,WAAW,UAAU,EAAU,SACpD,qBACF,IACF,EAMA,GALA,EAAM,QAAQ,CAAC,IAAS,CACtB,EAAK,SAAW,GACjB,EAGG,EAAM,OAAS,EACjB,EAAM,GAAG,SAAW,EAGtB,EAAY,iBAAiB,UAAW,CAAC,IACvC,EAAkB,EAAG,EAAO,CAAO,CACrC,GAaA,sBAP4B,IAAM,EAQlC,uBACA,gBACF,GASI,GAAe,IAAM,CAAC,IAAc,CACxC,GAAI,CAAC,EAAU,QACb,OAAO,EAIT,IAAM,EAAW,GAAyB,CAAS,EAGnD,MAAO,IACF,EACH,UACF,GAGa,MC3df,IAAM,GAAc,CAAC,IAAuB,CAAC,IAAc,CACzD,GAAI,CAAC,EAAU,QAEb,OADA,QAAQ,KAAK,iDAAiD,EACvD,EAIT,IAAM,EAAQ,CACZ,cAAe,KACf,kBAAmB,KACnB,aAAc,EACd,eAAgB,CAAC,EAMjB,aAAc,KACd,YAAa,CACX,MAAO,KACP,WAAY,IACd,EACA,WACF,EAKM,EAAmB,IAAM,CAC7B,GAAI,EAAM,YAAY,MACpB,aAAa,EAAM,YAAY,KAAK,EACpC,EAAM,YAAY,MAAQ,KAC1B,EAAM,YAAY,WAAa,MAO7B,EAAoB,IAAM,CAC9B,GAAI,EAAM,aACR,aAAa,EAAM,YAAY,EAC/B,EAAM,aAAe,MAOnB,EAAqB,CACzB,EACA,EACA,IACS,CACT,GAAI,CAAC,EAAO,oBAAsB,CAAC,EAAK,WAAY,OAGpD,EAAiB,EACjB,EAAkB,EAGlB,EAAM,YAAY,WAAa,EAC/B,EAAM,YAAY,MAAQ,WAAW,IAAM,CAEzC,GAD2B,EAAY,QAAQ,QAAQ,GAGrD,GAAI,EAAM,oBAAsB,EAC9B,EAAY,EAAM,EAAO,CAAW,EAGxC,EAAM,YAAY,MAAQ,MACzB,GAAG,GAMF,EAAqB,IAAY,CAErC,EAAiB,EAGjB,EAAkB,EAGlB,EAAM,aAAe,WAAW,IAAM,CAEpC,IAA6B,cAAvB,EACwB,kBAAxB,GAAkB,EAExB,GAAI,GAAkB,EAAiB,CACrC,IAAM,EAAc,EAAe,QAAQ,QAAQ,EAC7C,EAAe,EAAgB,QAAQ,QAAQ,EAErD,GAAI,CAAC,GAAe,CAAC,EACnB,EAAa,EAAM,YAAY,EAInC,EAAM,aAAe,MACpB,GAAG,GAMF,EAAqB,CACzB,EACA,EACA,IACS,CACT,GAAI,CAAC,EAAK,SAAW,CAAC,EAAK,WAAY,OAGvC,IAAM,EAAS,EAAY,aAAa,eAAe,IAAM,OAQ7D,GALgC,EAAM,eAAe,KACnD,CAAC,IAAM,EAAE,SACX,EAIE,OAGF,GAAI,EAAQ,CAGV,IAAM,EAAe,SACnB,EACG,QAAQ,IAAI,EAAU,SAAS,eAAe,GAAG,GAChD,aAAa,YAAY,GAAK,IAClC,EACF,EAGA,EAAa,EAAe,CAAC,EAG7B,EAAY,aAAa,gBAAiB,OAAO,EAGjD,OAAY,EAAM,EAAO,CAAW,GAOlC,EAA2B,CAC/B,EACA,EACA,IACS,CACT,GAAI,CAAC,EAAK,SAAW,CAAC,EAAK,WAAY,OAGvC,IAAM,EAAS,EAAY,aAAa,eAAe,IAAM,OAQ7D,GALgC,EAAM,eAAe,KACnD,CAAC,IAAM,EAAE,SACX,EAIE,OAGF,GAAI,EAAQ,CAEV,IAAM,EAAe,SACnB,EACG,QAAQ,IAAI,EAAU,SAAS,eAAe,GAAG,GAChD,aAAa,YAAY,GAAK,IAClC,EACF,EAGA,EAAa,EAAe,CAAC,EAG7B,OAAY,EAAM,EAAO,CAAW,GAOlC,EAAc,CAClB,EACA,EACA,IACS,CACT,GAAI,CAAC,EAAK,SAAW,CAAC,EAAK,WAAY,OAGvC,IAAM,EAAe,EAAY,QAC/B,IAAI,EAAU,SAAS,eAAe,GACxC,EACI,SACE,EACG,QAAQ,IAAI,EAAU,SAAS,eAAe,GAAG,EACjD,aAAa,YAAY,GAAK,IACjC,EACF,EAAI,EACJ,EASJ,GANA,EAAa,CAAY,EAGI,EAAM,eAAe,UAChD,CAAC,IAAM,EAAE,WAAa,GAAe,EAAE,SACzC,GAC4B,EAC1B,OAIF,EAAY,aAAa,gBAAiB,MAAM,EAGhD,IAAM,EAAiB,SAAS,cAAc,KAAK,EACnD,EAAe,UAAY,GAAG,EAAU,SACtC,MACF,KAAK,EAAU,SAAS,eAAe,IACvC,EAAe,aAAa,OAAQ,MAAM,EAC1C,EAAe,aAAa,WAAY,IAAI,EAC5C,EAAe,aAAa,aAAc,EAAa,SAAS,CAAC,EACjE,EAAe,aAAa,mBAAoB,EAAK,EAAE,EAGvD,EAAe,MAAM,OAAS,GAAG,KAAO,EAAe,KAGvD,IAAM,EAAc,SAAS,cAAc,IAAI,EAC/C,EAAY,UAAY,GAAG,EAAU,SAAS,WAAW,IAGzD,IAAM,EAAe,CAAC,EAwBtB,GArBA,EAAU,KAAK,oBAAqB,CAClC,MAAO,EAAK,QACZ,UAAW,EACX,MAAO,EACP,cAAe,CAAC,IAAgB,CAC9B,GACE,CAAC,EAAY,UAAU,SACrB,GAAG,EAAU,SAAS,qBAAqB,GAC7C,EAEA,EAAa,KAAK,CAAW,EAGnC,CAAC,EAED,EAAe,YAAY,CAAW,EAGtC,SAAS,KAAK,YAAY,CAAc,EAGpC,EAAU,UAAY,EAAU,SAAS,gBAC3C,EAAU,SAAS,gBACjB,EACA,EACA,CACF,EAIF,GAAI,EAAU,UAAY,EAAU,SAAS,sBAC3C,EAAU,SAAS,sBACjB,EACA,CAAE,eAAgB,EAAM,cAAe,EACvC,CACE,eACA,0BACF,CACF,EAIF,EAAe,iBAAiB,aAAc,IAAM,CAClD,EAAkB,EACnB,EAGD,EAAe,iBAAiB,aAAc,IAAM,CAClD,EAAmB,EACpB,EAGD,EAAM,cAAgB,EACtB,EAAM,kBAAoB,EAG1B,EAAM,eAAe,KAAK,CACxB,QAAS,EACT,SAAU,EACV,MAAO,EACP,UAAW,EACb,CAAC,EAGD,EAAM,aAAe,EAGrB,SAAS,iBAAiB,QAAS,CAA6B,EAChE,OAAO,iBAAiB,SAAU,EAA8B,CAC9D,QAAS,EACX,CAAC,EACD,OAAO,iBAAiB,SAAU,EAA8B,CAC9D,QAAS,EACX,CAAC,EAGD,sBAAsB,IAAM,CAC1B,EAAe,UAAU,IAAI,GAAG,EAAU,SAAS,eAAe,GAAG,EAGrE,WAAW,IAAM,CAEf,IAAM,EAAQ,EAAM,eAAe,UACjC,CAAC,IAAM,EAAE,UAAY,CACvB,EACA,GAAI,IAAU,GACZ,EAAM,eAAe,GAAO,UAAY,GAI1C,GAAI,EAAa,OAAS,GAExB,GAAI,GAAgB,GAAK,SAAS,gBAAkB,EAClD,EAAa,GAAG,aAAa,WAAY,GAAG,EAC5C,EAAa,GAAG,MAAM,IAGzB,GAAG,EACP,EAGD,EAAU,KAAK,iBAAkB,CAC/B,iBACA,WAAY,EACZ,MAAO,EACP,MACF,CAAC,GAOG,EAAe,CAAC,IAAwB,CAE5C,EAAiB,EACjB,EAAkB,EAGlB,IAAM,EAAyB,CAAC,EAGhC,QAAS,EAAI,EAAM,eAAe,OAAS,EAAG,GAAK,EAAG,IACpD,GAAI,EAAM,eAAe,GAAG,OAAS,EAAO,CAC1C,IAAM,EAAiB,EAAM,eAAe,GAG5C,GAAI,EAAe,SACjB,EAAe,SAAS,aAAa,gBAAiB,OAAO,EAI/D,EAAe,QAAQ,UAAU,OAC/B,GAAG,EAAU,SAAS,eAAe,GACvC,EAGA,WAAW,IAAM,CACf,GAAI,EAAe,QAAQ,WACzB,EAAe,QAAQ,WAAW,YAChC,EAAe,OACjB,GAED,GAAG,EAGN,EAAuB,KAAK,CAAC,EAUjC,GALA,EAAuB,QAAQ,CAAC,IAAU,CACxC,EAAM,eAAe,OAAO,EAAO,CAAC,EACrC,EAGG,EAAM,eAAe,OAAS,EAAG,CACnC,IAAM,EACJ,EAAM,eAAe,EAAM,eAAe,OAAS,GAMrD,GALA,EAAM,cAAgB,EAAiB,QACvC,EAAM,kBAAoB,EAAiB,SAC3C,EAAM,aAAe,EAAiB,MAGlC,EAAiB,SACnB,EAAiB,SAAS,MAAM,EAGlC,OAAM,cAAgB,KACtB,EAAM,kBAAoB,KAC1B,EAAM,aAAe,EAIvB,EAAU,KAAK,iBAAkB,CAAE,OAAM,CAAC,GAMtC,EAAmB,IAAY,CAKnC,GAHA,EAAiB,EACjB,EAAkB,EAEd,EAAM,eAAe,SAAW,EAAG,OAGvC,CAAC,GAAG,EAAM,cAAc,EAAE,QAAQ,CAAC,IAAY,CAE7C,GAAI,EAAQ,SACV,EAAQ,SAAS,aAAa,gBAAiB,OAAO,EAIxD,EAAQ,QAAQ,UAAU,OACxB,GAAG,EAAU,SAAS,eAAe,GACvC,EAGA,WAAW,IAAM,CACf,GAAI,EAAQ,QAAQ,WAClB,EAAQ,QAAQ,WAAW,YAAY,EAAQ,OAAO,GAEvD,GAAG,EACP,EAGD,EAAM,cAAgB,KACtB,EAAM,kBAAoB,KAC1B,EAAM,eAAiB,CAAC,EACxB,EAAM,aAAe,EAGrB,SAAS,oBAAoB,QAAS,CAA6B,EACnE,OAAO,oBAAoB,SAAU,CAA4B,EACjE,OAAO,oBAAoB,SAAU,CAA4B,EAGjE,EAAU,KAAK,sBAAuB,CAAC,CAAC,GAMpC,EAAgC,CAAC,IAAwB,CAC7D,GAAI,CAAC,EAAM,cAAe,OAE1B,IAA6B,cAAvB,EACwB,kBAAxB,GAAkB,EAGxB,GACE,EAAe,SAAS,EAAE,MAAc,GACvC,GAAmB,EAAgB,SAAS,EAAE,MAAc,EAE7D,OAIF,EAAiB,GAMb,EAA+B,IAAY,CAE/C,GAAI,EAAM,eAAiB,EAAM,mBAAqB,EAAU,SAC9D,EAAU,SAAS,gBACjB,EAAM,cACN,EAAM,kBACN,EAAM,YACR,GAOE,EAA+B,IAAY,CAE/C,OAAO,sBAAsB,IAAM,CAEjC,GACE,EAAM,eACN,EAAM,mBACN,EAAU,SAEV,EAAU,SAAS,gBACjB,EAAM,cACN,EAAM,kBACN,EAAM,YACR,EAEH,GAMG,EAAiB,IAAe,CACpC,OAAO,EAAM,eAAe,OAAS,GAMjC,EAAkB,IAAc,CACpC,OAAO,EAAM,cAMT,EAAoB,IAKpB,CACJ,MAAO,CAAC,GAAG,EAAM,cAAc,GAIjC,GAAI,EAAU,UAAW,CACvB,IAAM,EAAkB,EAAU,UAAU,UAAY,IAAM,IAC9D,EAAU,UAAU,QAAU,IAAM,CAWlC,GATA,EAAiB,EACjB,EAAkB,EAGlB,SAAS,oBAAoB,QAAS,CAA6B,EACnE,OAAO,oBAAoB,SAAU,CAA4B,EACjE,OAAO,oBAAoB,SAAU,CAA4B,EAG7D,EAAM,eAAe,OAAS,EAChC,EAAM,eAAe,QAAQ,CAAC,IAAY,CACxC,GAAI,EAAQ,QAAQ,WAClB,EAAQ,QAAQ,WAAW,YAAY,EAAQ,OAAO,EAEzD,EAGH,EAAgB,GAUpB,OALA,EAAU,GAAG,eAAgB,IAAM,CACjC,EAAiB,EAClB,EAGM,IACF,EACH,QAAS,CACP,cACA,eACA,mBACA,qBACA,2BACA,qBACA,qBACA,iBACA,kBACA,mBACF,CACF,GAGa,MC/hBf,IAAM,GACJ,EAAG,OAAM,SAAQ,SAAQ,eACzB,CAAC,IAAoD,CA+KnD,MA7KqC,CACnC,QAAS,EAAU,QAQnB,IAAI,CAAC,EAAe,EAAwC,QAAS,CAEnE,GAAI,GAAS,CAAC,GACZ,GAAI,aAAiB,cACnB,EAAkB,WAKtB,OADA,EAAK,KAAK,EAAO,CAAe,EACzB,MAQT,KAAK,CACH,EACA,EAAwB,GACxB,EAAyB,GACzB,CAEA,OADA,EAAK,MAAM,EAAO,EAAc,CAAa,EACtC,MAST,MAAM,CAAC,EAAe,EAAwC,CAE5D,GAAI,GAAS,CAAC,GACZ,GAAI,aAAiB,cACnB,EAAkB,WACb,QAAI,aAAiB,WAC1B,EAAkB,QAKtB,OADA,EAAK,OAAO,EAAO,CAAe,EAC3B,MAOT,MAAM,EAAG,CACP,OAAO,EAAK,OAAO,GAQrB,QAAQ,CAAC,EAAsB,CAE7B,OADA,EAAK,SAAS,CAAK,EACZ,MAOT,QAAQ,EAAG,CACT,OAAO,EAAK,SAAS,GAQvB,SAAS,CAAC,EAAqC,CAE7C,OADA,EAAO,UAAU,CAAa,EACvB,MAOT,SAAS,EAAG,CACV,OAAO,EAAO,UAAU,GAQ1B,WAAW,CAAC,EAAwB,CAElC,OADA,EAAK,YAAY,CAAQ,EAClB,MAOT,WAAW,EAAG,CACZ,OAAO,EAAK,YAAY,GAQ1B,WAAW,CAAC,EAAgB,CAE1B,OADA,EAAK,YAAY,CAAM,EAChB,MAOT,WAAW,EAAG,CACZ,OAAO,EAAK,YAAY,GAS1B,EAA8B,CAAC,EAAU,EAAwB,CAC/D,GAAI,GAAQ,GACV,EAAO,GAAG,EAAO,CAAO,EACnB,QAAI,EAAU,GACnB,EAAU,GAAG,EAAO,CAAO,EAE7B,OAAO,MAST,GAA+B,CAAC,EAAU,EAAwB,CAChE,GAAI,GAAQ,IACV,EAAO,IAAI,EAAO,CAAO,EACpB,QAAI,EAAU,IACnB,EAAU,IAAI,EAAO,CAAO,EAE9B,OAAO,MAMT,OAAO,EAAG,CACR,EAAU,QAAQ,EAEtB,GC9OJ,ICGO,IAAM,GAAgB,CAE3B,aAAc,eAEd,OAAQ,SAER,WAAY,aAEZ,UAAW,YAEX,IAAK,MAEL,QAAS,UAET,YAAa,cAEb,MAAO,QAEP,UAAW,YAEX,WAAY,aAEZ,KAAM,OAEN,SAAU,UACZ,EAKa,GAAgB,CAE3B,SAAU,GAAc,aAExB,OAAQ,EAER,gBAAiB,GAEjB,uBAAwB,GAExB,gBAAiB,GAEjB,sBAAuB,GAEvB,UAAW,EACb,EAqCO,IAAM,GAAe,CAE1B,UAAW,OAEX,QAAS,gBAET,MAAO,cAEP,KAAM,aAEN,cAAe,uBAEf,cAAe,uBAEf,iBAAkB,0BAElB,QAAS,gBAET,UAAW,kBAEX,UAAW,kBAEX,cAAe,sBAEf,kBAAmB,0BAEnB,MAAO,aACT,EDlGO,IAAM,GAAqC,CAChD,MAAO,CAAC,EACR,SAAU,GAAc,SACxB,cAAe,GAAc,gBAC7B,oBAAqB,GAAc,uBACnC,cAAe,GAAc,gBAC7B,mBAAoB,GAAc,sBAClC,OAAQ,GAAc,OACtB,SAAU,GAAc,UACxB,QAAS,EACX,EAWa,GAAmB,CAAC,IAAmC,CAElE,GAAI,CAAC,EAAO,OACV,MAAU,MAAM,uDAAuD,EAIzE,OAAO,EAAsB,GAAe,EAAQ,MAAM,GAa/C,GAAmB,CAAC,IAAuB,CAEtD,IAAM,EAAiC,CAAC,EAExC,GAAI,EAAO,MACT,EAAO,MAAQ,EAAO,MAGxB,GAAI,EAAO,UACT,EAAO,UAAY,EAAO,UAI5B,IAAM,EAAkC,CACtC,KAAM,OACN,SAAU,KACV,eAAgB,CAAC,EAAO,SAAS,SAAS,EAC1C,MAAO,OAAO,QAAQ,CAAM,EACzB,IAAI,EAAE,EAAK,KAAW,GAAG,MAAQ,GAAO,EACxC,KAAK,GAAG,CACb,EAEA,OAAO,EAAoB,EAAQ,CACjC,IAAK,MACL,aACA,UAAW,CACT,EAAO,QAAU,GAAa,QAAU,KACxC,EAAO,MAAQ,GAAG,EAAO,qBAAuB,KAChD,EAAO,KACT,EAAE,OAAO,OAAO,EAChB,cAAe,CACb,QAAS,EACX,CACF,CAAC,GAYU,GAAe,CAAC,KAAe,CAC1C,KAAM,CACJ,KAAM,CAAC,EAAO,IACZ,EAAU,MAAM,KAAK,EAAO,CAAe,EAC7C,MAAO,CAAC,EAAO,EAAc,IAC3B,EAAU,MAAM,MAAM,EAAO,EAAc,CAAa,EAC1D,OAAQ,CAAC,EAAO,IACd,EAAU,MAAM,OAAO,EAAO,CAAe,EAC/C,OAAQ,IAAM,EAAU,MAAM,OAAO,GAAK,GAC1C,SAAU,CAAC,IAAU,EAAU,MAAM,SAAS,CAAK,EACnD,SAAU,IAAM,EAAU,MAAM,SAAS,GAAK,CAAC,EAC/C,YAAa,CAAC,IAAa,EAAU,MAAM,YAAY,CAAQ,EAC/D,YAAa,IAAM,EAAU,MAAM,YAAY,EAC/C,YAAa,CAAC,IAAW,EAAU,MAAM,YAAY,CAAM,EAC3D,YAAa,IAAM,EAAU,MAAM,YAAY,CACjD,EACA,OAAQ,CACN,UAAW,CAAC,IAAW,EAAU,QAAQ,UAAU,CAAM,EACzD,UAAW,IAAM,EAAU,QAAQ,UAAU,CAC/C,EACA,QAAS,CACP,eAAgB,IAAM,EAAU,SAAS,eAAe,GAAK,GAC7D,iBAAkB,IAAM,EAAU,SAAS,iBAAiB,CAC9D,EACA,OAAQ,CACN,GAAI,CAAC,EAAO,IAAY,EAAU,KAAK,EAAO,CAAO,EACrD,IAAK,CAAC,EAAO,IAAY,EAAU,MAAM,EAAO,CAAO,CACzD,EACA,UAAW,CACT,QAAS,IAAM,EAAU,WAAW,QAAQ,CAC9C,CACF,GP3FA,IAAM,GAAa,CAAC,IAAsC,CACxD,GAAI,CAEF,IAAM,EAAa,GAAiB,CAAM,EAGpC,EAAO,EACX,EACA,EAAW,EACX,EAAY,GAAiB,CAAU,CAAC,EACxC,GAAa,CAAU,EACvB,GAAa,EACb,GAAY,CAAU,EACtB,GAAe,CAAU,EACzB,GAAW,CAAU,EACrB,EAAc,EACd,CAAC,IAAS,GAAQ,GAAa,CAAI,CAAC,EAAE,CAAI,CAC5C,EAAE,CAAU,EAGZ,GAAI,EAAW,IAAM,OAAO,EAAK,KAAO,WACtC,OAAO,QAAQ,EAAW,EAAE,EAAE,QAAQ,EAAE,EAAO,KAAa,CAC1D,GAAI,OAAO,IAAY,WACrB,EAAK,GAAG,EAAO,CAAO,EAEzB,EAKH,OAAO,EACP,MAAO,EAAO,CAEd,MADA,QAAQ,MAAM,uBAAwB,CAAK,EACjC,MAAM,0BAA2B,EAAgB,SAAS,IAIzD,MS7Ef,KCDA,IACA,IACA,ICKO,IAAM,GAAY,CAAC,IAAyB,CAAC,IAAc,CAChE,IAAM,EAAsB,CAAC,EACvB,EAAc,EAAU,SAAS,QAAQ,EAC3C,EAAgB,EAAO,OAAS,GAQpC,GALA,EAAU,QAAQ,UAAU,IAC1B,GAAG,MAAgB,EAAO,WAAa,YACzC,EAGI,EAAO,SACT,EAAU,QAAQ,UAAU,IAAI,GAAG,aAAuB,EAQ5D,IAAM,EAAkB,CAAC,IAAyC,CAEhE,IAAM,EAAiB,SAAS,cAAc,KAAK,EACnD,EAAe,UAAU,IAAI,GAAG,QAAkB,EAGlD,IAAM,EAAQ,SAAS,cAAc,OAAO,EAO5C,GANA,EAAM,KAAO,QACb,EAAM,KAAO,EAAO,KACpB,EAAM,MAAQ,EAAO,MACrB,EAAM,UAAU,IAAI,GAAG,SAAmB,EAGtC,IAAkB,EAAO,MAC3B,EAAM,QAAU,GAIlB,GAAI,EAAO,UAAY,EAAO,SAC5B,EAAM,SAAW,GACjB,EAAe,UAAU,IAAI,GAAG,kBAA4B,EAI9D,IAAM,EAAQ,SAAS,cAAc,OAAO,EAC5C,EAAM,UAAU,IAAI,GAAG,SAAmB,EAG1C,IAAM,EAAe,SAAS,cAAc,MAAM,EAClD,EAAa,UAAU,IAAI,GAAG,WAAqB,EAGnD,IAAM,EAAc,SAAS,cAAc,MAAM,EAIjD,GAHA,EAAY,UAAU,IAAI,GAAG,UAAoB,EAG7C,EAAO,SAAW,GAAO,CAC3B,IAAM,EAAkB,SAAS,cAAc,MAAM,EACrD,EAAgB,UAAU,IAAI,GAAG,UAAoB,EACrD,EAAa,YAAY,CAAe,EAI1C,EAAa,YAAY,CAAW,EAGpC,IAAM,EAAW,SAAS,cAAc,MAAM,EAK9C,GAJA,EAAS,UAAU,IAAI,GAAG,QAAkB,EAC5C,EAAS,YAAc,EAAO,MAG1B,EAAO,YACT,EAAM,UAAU,IAAI,GAAG,iBAA2B,EAClD,EAAM,YAAY,CAAQ,EAC1B,EAAM,YAAY,CAAY,EAE9B,OAAM,YAAY,CAAY,EAC9B,EAAM,YAAY,CAAQ,EAI5B,IAAM,EAAU,GAAG,KAAe,EAAO,SAAS,KAAK,OAAO,EAAE,SAAS,EAAE,EAAE,UAAU,EAAG,CAAC,IAC3F,EAAM,GAAK,EACX,EAAM,QAAU,EAGhB,EAAe,YAAY,CAAK,EAChC,EAAe,YAAY,CAAK,EAGhC,IAAM,EAAe,CAAC,IAAM,CAC1B,GAAI,EAAM,SAWR,GAVA,EAAgB,EAAO,MAGvB,EAAO,QAAQ,KAAS,CACtB,GAAI,EAAM,QAAU,EAClB,EAAM,MAAM,QAAU,GAEzB,EAGG,EAAU,QAAU,OAAO,EAAU,OAAO,OAAS,WACvD,EAAU,OAAO,KAAK,SAAU,CAC9B,MAAO,EAAO,MACd,cAAe,EACf,QACF,CAAC,EACI,QAAI,OAAO,EAAU,KAAO,WAAY,CAE7C,IAAM,EAAc,IAAI,YAAY,SAAU,CAC5C,OAAQ,CACN,MAAO,EAAO,MACd,cAAe,EACf,QACF,CACF,CAAC,EACD,EAAU,QAAQ,cAAc,CAAW,KAQjD,OAHA,EAAM,iBAAiB,SAAU,CAAY,EAGtC,CACL,QAAS,EACT,QACA,QACA,OAAQ,EACR,QAAS,IAAM,CAEb,GADA,EAAM,oBAAoB,SAAU,CAAY,EAC5C,EAAe,WACjB,EAAe,WAAW,YAAY,CAAc,EAG1D,GAQI,EAAY,CAAC,IAA8B,CAE/C,IAAM,EAAY,EAAgB,CAAM,EAQxC,OALA,EAAU,QAAQ,YAAY,EAAU,OAAO,EAG/C,EAAO,KAAK,CAAS,EAEd,GAQH,EAAe,CAAC,IAAkB,CACtC,IAAM,EAAQ,EAAO,UAAU,KAAS,EAAM,OAAO,QAAU,CAAK,EAEpE,GAAI,IAAU,IAWZ,GATkB,EAAO,GAGf,QAAQ,EAGlB,EAAO,OAAO,EAAO,CAAC,EAGlB,IAAkB,EACpB,EAAgB,GAIpB,OAAO,GAIT,GAAI,EAAO,SAAW,MAAM,QAAQ,EAAO,OAAO,EAChD,EAAO,QAAQ,QAAQ,KAAU,EAAU,CAAM,CAAC,EAIpD,GAAI,CAAC,EAAU,OACb,EAAU,OAAS,CACjB,GAAI,CAAC,EAAO,IAAY,CACtB,EAAU,QAAQ,iBAAiB,EAAO,CAAC,IAAM,EAAQ,EAAE,MAAM,CAAC,GAEpE,IAAK,CAAC,EAAO,IAAY,CACvB,EAAU,QAAQ,oBAAoB,EAAO,CAAO,GAEtD,KAAM,CAAC,EAAO,IAAS,CACrB,IAAM,EAAc,IAAI,YAAY,EAAO,CAAE,OAAQ,CAAK,CAAC,EAC3D,EAAU,QAAQ,cAAc,CAAW,EAE/C,EAIF,MAAO,IACF,EACH,SAEA,SAAU,IAAM,EAEhB,SAAU,CAAC,IAAkB,CAO3B,OANA,EAAgB,EAEhB,EAAO,QAAQ,KAAS,CACtB,EAAM,MAAM,QAAU,EAAM,OAAO,QAAU,EAC9C,EAEM,GAGT,YAAa,IAAM,CACjB,IAAM,EAAW,EAAO,KAAK,KAAS,EAAM,OAAO,QAAU,CAAa,EAC1E,OAAO,EAAW,EAAS,OAAS,MAGtC,YACA,eAEA,OAAQ,IAAM,CAUZ,OATA,EAAU,QAAQ,UAAU,OAAO,GAAG,aAAuB,EAE7D,EAAO,QAAQ,KAAS,CAEtB,GADA,EAAM,MAAM,SAAW,EAAM,OAAO,UAAY,GAC5C,CAAC,EAAM,OAAO,SAChB,EAAM,QAAQ,UAAU,OAAO,GAAG,kBAA4B,EAEjE,EAEM,GAGT,QAAS,IAAM,CAQb,OAPA,EAAU,QAAQ,UAAU,IAAI,GAAG,aAAuB,EAE1D,EAAO,QAAQ,KAAS,CACtB,EAAM,MAAM,SAAW,GACvB,EAAM,QAAQ,UAAU,IAAI,GAAG,kBAA4B,EAC5D,EAEM,GAGT,aAAc,CAAC,IAAkB,CAC/B,IAAM,EAAQ,EAAO,KAAK,KAAK,EAAE,OAAO,QAAU,CAAK,EAEvD,GAAI,GAIF,GAHA,EAAM,OAAO,SAAW,GACxB,EAAM,MAAM,SAAW,EAAU,QAAQ,UAAU,SAAS,GAAG,aAAuB,EAElF,CAAC,EAAM,MAAM,SACf,EAAM,QAAQ,UAAU,OAAO,GAAG,kBAA4B,EAIlE,OAAO,GAGT,cAAe,CAAC,IAAkB,CAChC,IAAM,EAAQ,EAAO,KAAK,KAAK,EAAE,OAAO,QAAU,CAAK,EAEvD,GAAI,EACF,EAAM,OAAO,SAAW,GACxB,EAAM,MAAM,SAAW,GACvB,EAAM,QAAQ,UAAU,IAAI,GAAG,kBAA4B,EAG7D,OAAO,EAEX,GCzPK,IAAM,GACX,EAAG,WAAU,eACb,CAAC,IAAmD,CAElD,GAAI,CAAC,EAAU,OACb,EAAU,OAAS,CACjB,GAAI,CAAC,EAAe,IAAsB,CACxC,EAAU,QAAQ,iBAAiB,EAAQ,CAAC,IAC1C,EAAQ,EAAE,MAAM,CAAmB,GAEvC,IAAK,CAAC,EAAe,IAAsB,CACzC,EAAU,QAAQ,oBAChB,EACA,CACF,GAEF,KAAM,CAAC,EAAe,IAAkB,CACtC,IAAM,EAAc,IAAI,YAAY,EAAO,CAAE,OAAQ,CAAK,CAAC,EAC3D,EAAU,QAAQ,cAAc,CAAW,EAE/C,EACK,QAAI,CAAC,EAAU,OAAO,KAE3B,EAAU,OAAO,KAAO,CAAC,EAAO,IAAS,CACvC,IAAM,EAAc,IAAI,YAAY,EAAO,CAAE,OAAQ,CAAK,CAAC,EAC3D,EAAU,QAAQ,cAAc,CAAW,GAqE/C,MAjEyC,CACvC,QAAS,EAAU,QACnB,OAAQ,EAAU,OAClB,UAAW,CACT,QAAS,EAAU,OACrB,EAEA,SAAU,EAAU,SACpB,SAAU,IAAM,EAAU,SAAS,EAEnC,QAAQ,CAAC,EAAe,CAEtB,OADA,EAAU,SAAS,CAAK,EACjB,MAGT,YAAa,IAAM,EAAU,YAAY,EAEzC,SAAS,CAAC,EAA2B,CAEnC,OADA,EAAU,UAAU,CAAM,EACnB,MAGT,YAAY,CAAC,EAAe,CAE1B,OADA,EAAU,aAAa,CAAK,EACrB,MAGT,MAAM,EAAG,CAEP,OADA,EAAS,OAAO,EACT,MAGT,OAAO,EAAG,CAER,OADA,EAAS,QAAQ,EACV,MAGT,YAAY,CAAC,EAAe,CAE1B,OADA,EAAU,aAAa,CAAK,EACrB,MAGT,aAAa,CAAC,EAAe,CAE3B,OADA,EAAU,cAAc,CAAK,EACtB,MAGT,EAAE,CAAC,EAAe,EAAmB,CAEnC,OADA,EAAU,OAAO,GAAG,EAAO,CAAO,EAC3B,MAGT,GAAG,CAAC,EAAe,EAAmB,CAEpC,OADA,EAAU,OAAO,IAAI,EAAO,CAAO,EAC5B,MAGT,OAAO,EAAG,CAER,EAAU,OAAO,QAAQ,CAAC,IAAU,EAAM,QAAQ,CAAC,EAEnD,EAAU,QAAQ,EAEtB,GClIJ,IASO,IAAM,GAA8B,CACzC,KAAM,GACN,UAAW,WACX,SAAU,GACV,OAAQ,GACR,QAAS,CAAC,CACZ,EAOa,GAAmB,CAAC,IAC/B,EAAsB,GAAe,EAAQ,QAAQ,EAO1C,GAAmB,CAAC,IAAyB,CACxD,OAAO,EAAoB,EAAQ,CACjC,IAAK,MACL,WAAY,CACV,KAAM,YACR,EACA,UAAW,EAAO,KACpB,CAAC,GAQU,GAAe,CAAC,KAAU,CACrC,SAAU,CACR,OAAQ,IAAM,EAAK,SAAS,OAAO,EACnC,QAAS,IAAM,EAAK,SAAS,QAAQ,CACvC,EACA,UAAW,CACT,QAAS,IAAM,EAAK,UAAU,QAAQ,CACxC,CACF,GHpCA,IAAM,GAAe,CAAC,IAA0C,CAE9D,GAAI,CAAC,EAAO,KACV,EAAO,KAAO,UAAU,KAAK,OAAO,EAAE,SAAS,EAAE,EAAE,UAAU,EAAG,CAAC,IAGnE,IAAM,EAAa,GAAiB,CAAM,EAE1C,GAAI,CAYF,OAVe,EACb,EACA,EAAW,EACX,EAAY,GAAiB,CAAU,CAAC,EACxC,GAAU,CAAU,EACpB,GAAa,CAAU,EACvB,EAAc,EACd,CAAC,IAAS,GAAQ,GAAa,CAAI,CAAC,EAAE,CAAI,CAC5C,EAAE,CAAU,EAGZ,MAAO,EAAO,CAEd,MADA,QAAQ,MAAM,yBAA0B,CAAK,EACnC,MACR,sCAAuC,EAAgB,SACzD,IAIW,MI5Cf,IACA,ICEO,IAAM,GAAgB,CAE3B,IAAK,MAEL,KAAM,MACR,EAMa,GAAoB,CAE/B,OAAQ,SAER,WAAY,YACd,EAOa,GAAsB,CAEjC,WAAY,GACZ,cAAe,IACf,cAAe,IAGf,0BAA2B,GAC3B,sBAAuB,IACvB,sBAAuB,IACvB,uBAAwB,IAGxB,8BAA+B,GAG/B,mBAAoB,GACpB,UAAW,GACX,YAAa,GACb,aAAc,EAChB,EAMa,GAAgB,CAE3B,MAAO,QAEP,KAAM,OAEN,MAAO,QAEP,OAAQ,SAER,MAAO,QAEP,OAAQ,SAER,SAAU,WAEV,kBAAmB,kBACrB,EAMa,GAAe,CAE1B,OACE,uXAEF,KAAM,yMAEN,MACE,kPAEF,IAAK,4UAEL,QACE,4WACJ,EAMa,GAAkB,CAE7B,MAAO,GAAc,IAErB,UAAW,GAAkB,OAE7B,YAAa,SAEb,MAAO,GAEP,kBAAmB,GAEnB,SAAU,GAEV,WAAY,EACd,EAMa,EAAiB,CAE5B,KAAM,SAGN,UAAW,cACX,WAAY,eAGZ,YAAa,iBACb,gBAAiB,qBAGjB,QAAS,kBACT,SAAU,mBACV,UAAW,oBACX,WAAY,qBAGZ,UAAW,oBACX,OAAQ,iBACR,cAAe,wBACf,MAAO,gBACP,QAAS,kBACT,QAAS,kBAGT,aAAc,uBACd,cAAe,wBACf,aAAc,uBACd,oBAAqB,+BACrB,OAAQ,iBAGR,YAAa,sBACb,gBAAiB,0BACjB,gBAAiB,0BACjB,yBAA0B,oCAC1B,gBAAiB,0BACjB,gBAAiB,0BACjB,mBAAoB,4BACtB,EAMa,GAAc,CACzB,MAAO,QACP,OAAQ,SACR,WAAY,YACZ,SAAU,UACV,IAAK,KACP,ECxKA,KAqBO,IAAM,GAAgB,CAAC,IAAyB,CAAC,IAAc,CACpE,IAAM,EAAa,EAAO,WAAa,GACjC,EAAe,EAAO,cAAgB,GAAc,IACpD,EAAc,IAAiB,GAAc,KAC7C,EAAc,EAAO,aAAe,SACpC,EAAQ,EAAO,OAAS,GAGxB,EAAW,CAAC,IAA8B,CAC9C,OAAO,EAAU,SAAW,EAAU,SAAS,CAAS,EAAI,GAIxD,EAAc,CAClB,EAAS,EAAe,IAAI,EAC5B,EACE,IAAiB,GAAc,IAC3B,EAAe,UACf,EAAe,UACrB,EACA,EACE,EAAO,WAAa,aAChB,EAAe,gBACf,EAAe,WACrB,CACF,EAEA,GAAI,EAAO,UACT,EAAY,KAAK,EAAS,EAAe,UAAU,CAAC,EAGtD,GAAI,EACF,EAAY,KAAK,EAAS,EAAe,QAAQ,CAAC,EAGpD,GAAI,EACF,EAAY,KAAK,EAAS,EAAe,SAAS,CAAC,EAIrD,EAAU,QAAQ,UAAY,EAAY,OAAO,OAAO,EAAE,KAAK,GAAG,EAClE,EAAU,QAAQ,aAAa,OAAQ,QAAQ,EAC/C,EAAU,QAAQ,aAChB,gBACA,EAAa,OAAS,OACxB,EAGA,IAAM,EAAY,EAAc,CAC9B,IAAK,MACL,UAAW,EAAS,EAAe,SAAS,EAC5C,UAAW,EAAU,OACvB,CAAC,EAGK,EAAkB,EACpB,GAAa,KACb,EAAO,aAAe,GAAa,OAEjC,EAAc,EAAc,CAChC,IAAK,SACL,UAAW,EAAS,EAAe,YAAY,EAC/C,YACA,KAAM,EACN,WAAY,CACV,KAAM,SACN,SAAU,EAAa,KAAO,IAC9B,aAAc,EAAc,UAAY,QAC1C,CACF,CAAC,EAGK,EAAe,EAAc,CACjC,IAAK,MACL,UAAW,EAAS,EAAe,aAAa,EAChD,WACF,CAAC,EAGK,EAA0C,CAC9C,KAAM,OACN,cACA,aAAc,CAChB,EAEA,GAAI,EACF,EAAgB,MAAQ,EAG1B,GAAI,EACF,EAAgB,SAAW,WAG7B,IAAM,EAAQ,EAAc,CAC1B,IAAK,QACL,UAAW,EAAS,EAAe,KAAK,EACxC,UAAW,EACX,WAAY,CACd,CAAC,EAGD,GAAI,EACF,EAAM,MAAQ,EAIhB,IAAI,EAAkC,KAEtC,GAAI,EAAO,kBAAoB,GAAO,CACpC,IAAM,EAAqB,CAAC,EAAS,EAAe,YAAY,CAAC,EAEjE,GAAI,CAAC,EACH,EAAmB,KAAK,EAAS,EAAe,mBAAmB,CAAC,EAGtE,EAAc,EAAc,CAC1B,IAAK,SACL,UAAW,EAAmB,KAAK,GAAG,EACtC,YACA,KAAM,GAAa,MACnB,WAAY,CACV,KAAM,SACN,SAAU,GAAc,CAAC,EAAQ,KAAO,IACxC,aAAc,cAChB,CACF,CAAC,EAIH,IAAI,EAAwC,KAE5C,GAAI,EAAO,eAAiB,EAAO,cAAc,OAAS,EACxD,EAAoB,EAAc,CAChC,IAAK,MACL,UAAW,EAAS,kBAAkB,EACtC,WACF,CAAC,EAGD,EAAO,cAAc,QAAQ,CAAC,IAAS,CACrC,IAAM,EACJ,EAAK,OAAS,SACV,EAAS,EAAe,MAAM,EAC9B,EAAS,EAAe,aAAa,EAE3C,EAAc,CACZ,IAAK,EAAK,OAAS,SAAW,MAAQ,SACtC,UAAW,EACX,UAAW,EACX,KAAM,EAAK,QACX,WAAY,IACN,EAAK,OAAS,UAAY,CAAE,KAAM,QAAS,EAC/C,SAAU,EAAa,KAAO,IAC9B,aAAc,EAAK,WAAa,GAChC,mBAAoB,EAAK,EAC3B,CACF,CAAC,EACF,EAIH,IAAI,EAA8B,KAC9B,EAAkC,KAClC,EAA2C,KAC3C,EAAsC,KA+B1C,GA3BA,EAAU,EAAc,CACtB,IAAK,MACL,UAAW,EAAS,EAAe,OAAO,CAC5C,CAAC,EAED,EAAc,EAAc,CAC1B,IAAK,MACL,UAAW,EAAS,EAAe,OAAO,CAC5C,CAAC,EAED,EAAuB,EAAc,CACnC,IAAK,MACL,UAAW,EAAS,EAAe,WAAW,EAC9C,UAAW,CACb,CAAC,EAED,EAAkB,EAAc,CAC9B,IAAK,KACL,UAAW,EAAS,EAAe,eAAe,EAClD,UAAW,EACX,WAAY,CACV,KAAM,UACN,aAAc,oBAChB,CACF,CAAC,EAGG,EACF,EAAU,QAAQ,YAAY,CAAO,EACrC,EAAU,QAAQ,YAAY,CAAW,EAiB3C,MAAO,IACF,EACH,UAfiC,CACjC,YACA,QACA,eACA,cACA,cACA,oBACA,UACA,uBACA,iBACF,CAMA,GCjOK,IAAM,GAAa,CAAC,IAAyB,CAAC,IAAc,CAEjE,IAAI,EAA4B,EAAO,cAAgB,GAAc,IACjE,EACF,EAAO,UAAY,GAAkB,OACnC,EAAa,EAAO,WAAa,GAG/B,EAAW,CAAC,IAA8B,CAC9C,OAAO,EAAU,SAAW,EAAU,SAAS,CAAS,EAAI,GAMxD,EAAe,IAAY,CAC/B,GAAI,IAAiB,GAAc,MAAQ,EACzC,OAGF,IAA0B,QAApB,EACsB,UAAtB,GAAY,EAUlB,GAPA,EAAe,GAAc,KAG7B,EAAQ,UAAU,OAAO,EAAS,EAAe,SAAS,CAAC,EAC3D,EAAQ,UAAU,IAAI,EAAS,EAAe,UAAU,CAAC,EAGrD,GAAW,YACb,EAAU,YAAY,UAAY,GAAa,KAC/C,EAAU,YAAY,aAAa,aAAc,SAAS,EAI5D,GAAI,GAAW,SAAW,CAAC,EAAQ,SAAS,EAAU,OAAO,EAC3D,EAAQ,YAAY,EAAU,OAAO,EAGvC,GACE,GAAW,sBAAsB,eACjC,CAAC,EAAQ,SAAS,EAAU,qBAAqB,aAAa,EAE9D,EAAQ,YAAY,EAAU,qBAAqB,aAAa,EAIlE,GAAI,GAAW,MACb,sBAAsB,IAAM,CAC1B,EAAU,MAAM,MAAM,EACvB,EAIH,GAAI,EAAU,KACZ,EAAU,KAAK,SAAU,CACvB,YACA,MAAO,EACP,SAAU,CACZ,CAAC,GAOC,EAAgB,IAAY,CAChC,GAAI,IAAiB,GAAc,IACjC,OAGF,IAA0B,QAApB,EACsB,UAAtB,GAAY,EAUlB,GAPA,EAAe,GAAc,IAG7B,EAAQ,UAAU,OAAO,EAAS,EAAe,UAAU,CAAC,EAC5D,EAAQ,UAAU,IAAI,EAAS,EAAe,SAAS,CAAC,EAGpD,GAAW,YACb,EAAU,YAAY,UACpB,EAAO,aAAe,GAAa,OACrC,EAAU,YAAY,aAAa,aAAc,QAAQ,EAI3D,GAAI,GAAW,SAAW,EAAQ,SAAS,EAAU,OAAO,EAC1D,EAAQ,YAAY,EAAU,OAAO,EAGvC,GACE,GAAW,sBAAsB,eACjC,EAAQ,SAAS,EAAU,qBAAqB,aAAa,EAE7D,EAAQ,YAAY,EAAU,qBAAqB,aAAa,EAIlE,GAAI,EAAU,KACZ,EAAU,KAAK,WAAY,CACzB,YACA,MAAO,EACP,SAAU,CACZ,CAAC,GAOC,EAAc,CAAC,IAA+B,CAClD,GAAI,IAAS,EACX,OAGF,IAAM,EAAU,EAAU,QAG1B,EAAQ,UAAU,OAChB,EACE,IAAoB,GAAkB,OAClC,EAAe,YACf,EAAe,eACrB,CACF,EAGA,EAAkB,EAGlB,EAAQ,UAAU,IAChB,EACE,IAAS,GAAkB,OACvB,EAAe,YACf,EAAe,eACrB,CACF,GAMI,EAAmB,IAAY,CACnC,EAAa,GAEb,IAA0B,QAApB,EACsB,UAAtB,GAAY,EAMlB,GAJA,EAAQ,UAAU,IAAI,EAAS,EAAe,QAAQ,CAAC,EACvD,EAAQ,aAAa,gBAAiB,MAAM,EAGxC,GAAW,MACb,EAAU,MAAM,SAAW,GAI7B,IAAM,EAAsB,CAC1B,GAAW,YACX,GAAW,WACb,EAAE,OAAO,OAAO,EAGhB,GAAI,GAAW,kBAEX,EAAU,kBAAkB,iBAAiB,QAAQ,EACvC,QAAQ,CAAC,IAAQ,EAAoB,KAAK,CAAG,CAAC,EAGhE,EAAoB,QAAQ,CAAC,IAAO,CAClC,GAAI,EACD,EAAmB,SAAW,GAC/B,EAAG,aAAa,gBAAiB,MAAM,EAE1C,GAMG,EAAkB,IAAY,CAClC,EAAa,GAEb,IAA0B,QAApB,EACsB,UAAtB,GAAY,EAMlB,GAJA,EAAQ,UAAU,OAAO,EAAS,EAAe,QAAQ,CAAC,EAC1D,EAAQ,aAAa,gBAAiB,OAAO,EAGzC,GAAW,MACb,EAAU,MAAM,SAAW,GAI7B,IAAM,EAAsB,CAC1B,GAAW,YACX,GAAW,WACb,EAAE,OAAO,OAAO,EAGhB,GAAI,GAAW,kBAEX,EAAU,kBAAkB,iBAAiB,QAAQ,EACvC,QAAQ,CAAC,IAAQ,EAAoB,KAAK,CAAG,CAAC,EAWhE,GARA,EAAoB,QAAQ,CAAC,IAAO,CAClC,GAAI,EACD,EAAmB,SAAW,EAC/B,EAAG,aAAa,gBAAiB,OAAO,EAE3C,EAGG,GAAW,aAAe,EAAU,OAAS,CAAC,EAAU,MAAM,MAChE,EAAU,YAAY,SAAW,IAO/B,EAAuB,CAAC,IAA4B,CACxD,IAAM,EAAU,EAAU,QAE1B,GAAI,EACF,EAAQ,UAAU,IAAI,EAAS,EAAe,SAAS,CAAC,EAExD,OAAQ,UAAU,OAAO,EAAS,EAAe,SAAS,CAAC,GAOzD,EAAqB,CAAC,IAA6B,CACvD,IAAM,EAAU,EAAU,QAE1B,GAAI,EACF,EAAQ,UAAU,IAAI,EAAS,EAAe,OAAO,CAAC,EAEtD,OAAQ,UAAU,OAAO,EAAS,EAAe,OAAO,CAAC,GAK7D,GAAI,EAEF,WAAW,IAAM,CACf,EAAiB,GAChB,CAAC,EAIN,MAAO,IACF,EAGH,OAAQ,CAIN,OAAQ,EAKR,SAAU,EAKV,SAAU,IAAmB,EAK7B,WAAY,IAAe,IAAiB,GAAc,KAK1D,cAKA,YAAa,IAAsB,EAKnC,uBAKA,oBACF,EAGA,SAAU,CAIR,MAAM,EAAgB,CAEpB,OADA,EAAgB,EACT,MAMT,OAAO,EAAgB,CAErB,OADA,EAAiB,EACV,MAMT,WAAY,IAAe,CAC7B,CACF,GClVF,IAAM,GAAuB,CAC3B,IACuB,CACvB,GAAI,CAAC,EACH,MAAO,CAAC,EAGV,OAAO,EAAY,IAAI,CAAC,IAAS,CAC/B,GAAI,OAAO,IAAS,SAClB,MAAO,CAAE,KAAM,EAAM,MAAO,CAAK,EAEnC,MAAO,IAAK,EAAM,MAAO,EAAK,OAAS,EAAK,IAAK,EAClD,GAUU,GAAY,CAAC,IAAyB,CAAC,IAAc,CAEhE,IAAI,EAAe,EAAO,OAAS,GAC/B,EAAqB,EAAO,aAAe,SAC3C,EAAkC,GAAqB,EAAO,WAAW,EAGvE,EAAW,CAAC,IAA8B,CAC9C,OAAO,EAAU,SAAW,EAAU,SAAS,CAAS,EAAI,GAMxD,EAAkB,CACtB,EACA,EAA8B,KAC9B,EAAiC,CAAC,IAC/B,CACH,IAAM,EAAY,CAChB,YACA,MAAO,EACP,gBACA,eAAgB,IAAM,CACpB,EAAU,iBAAmB,IAE/B,iBAAkB,MACf,CACL,EACA,OAAO,GAMH,EAAY,CAChB,EACA,EAA8B,KAC9B,EAAiC,CAAC,IAC/B,CACH,IAAM,EAAY,EAAgB,EAAW,EAAe,CAAK,EAGjE,GAAI,EAAU,KACZ,EAAU,KAAK,EAAW,CAAS,EAIrC,IAAM,EAAc,KAAK,EAAU,OAAO,CAAC,EAAE,YAAY,IAAI,EAAU,MAAM,CAAC,IACxE,EAAU,EAAO,GACvB,GAAI,OAAO,IAAY,WACrB,GAAI,IAAc,oBAAsB,EAAM,WAC3C,EACC,EAAM,UACR,EAEA,KAAC,EAAoC,CAAY,EAIrD,OAAO,GAMH,EAAoB,CAAC,IAA4B,CACrD,IAAM,EAAc,EAAU,WAAW,YACzC,GAAI,CAAC,EAAa,OAElB,GAAI,GAEF,GADA,EAAY,UAAU,OAAO,EAAS,EAAe,mBAAmB,CAAC,EACrE,CAAC,EAAU,UAAU,WAAW,EAClC,EAAY,SAAW,EAGzB,OAAY,UAAU,IAAI,EAAS,EAAe,mBAAmB,CAAC,EACtE,EAAY,SAAW,IAOrB,EAAW,CAAC,EAAe,EAAe,KAAe,CAC7D,IAAM,EAAgB,EACtB,EAAe,EAGf,IAAM,EAAQ,EAAU,WAAW,MACnC,GAAI,GAAS,EAAM,QAAU,EAC3B,EAAM,MAAQ,EAOhB,GAHA,EAAkB,CAAC,CAAC,CAAK,EAGrB,EAAU,QAAQ,qBACpB,EAAU,OAAO,qBAAqB,CAAC,CAAC,CAAK,EAI/C,GAAI,GAAgB,IAAU,EAC5B,EAAU,GAAc,KAAK,GAO3B,EAAW,IAAc,CAC7B,OAAO,GAMH,EAAiB,CAAC,IAAuB,CAC7C,EAAqB,EAErB,IAAM,EAAQ,EAAU,WAAW,MACnC,GAAI,EACF,EAAM,YAAc,EACpB,EAAM,aAAa,aAAc,CAAI,GAOnC,EAAiB,IAAc,CACnC,OAAO,GAMH,EAAQ,CAAC,EAAe,KAAe,CAC3C,EAAS,GAAI,EAAK,EAGlB,IAAM,EAAQ,EAAU,WAAW,MACnC,GAAI,GAAS,CAAC,EAAU,UAAU,WAAW,EAC3C,EAAM,MAAM,EAGd,GAAI,EACF,EAAU,GAAc,KAAK,GAO3B,EAAS,IAAY,CACzB,GAAI,EACF,EAAU,GAAc,MAAM,GAO5B,EAAQ,IAAY,CACxB,IAAM,EAAQ,EAAU,WAAW,MACnC,GAAI,GAAS,CAAC,EAAU,UAAU,WAAW,EAC3C,EAAM,MAAM,GAOV,EAAO,IAAY,CACvB,IAAM,EAAQ,EAAU,WAAW,MACnC,GAAI,EACF,EAAM,KAAK,GAOT,EAAiB,CACrB,IACS,CACT,EAAc,GAAqB,CAAc,GAM7C,EAAiB,IAA0B,CAC/C,MAAO,CAAC,GAAG,CAAW,GAMlB,EAAmB,IAAY,CACnC,EAAc,CAAC,GAMX,EAAmB,CAAC,IAAuC,CAC/D,EAAS,EAAW,OAAS,EAAW,KAAM,EAAK,EACnD,EAAU,GAAc,kBAAmB,KAAM,CAAE,YAAW,CAAC,GAM3D,EAAsB,IAAY,CACtC,IAAM,EAAQ,EAAU,WAAW,MAC7B,EAAc,EAAU,WAAW,YACnC,EAAc,EAAU,WAAW,YAEzC,GAAI,CAAC,EAAO,OAoEZ,GAjEA,EAAM,iBAAiB,QAAS,CAAC,IAAa,CAC5C,IAAM,EAAS,EAAE,OACjB,EAAS,EAAO,MAAO,EAAI,EAC5B,EAGD,EAAM,iBAAiB,QAAS,CAAC,IAAkB,CACjD,GAAI,EAAU,QAAQ,mBACpB,EAAU,OAAO,mBAAmB,EAAI,EAK1C,GAHA,EAAU,GAAc,MAAO,CAAC,EAG5B,EAAO,gBAAkB,IAAS,EAAU,QAAQ,OACtD,EAAU,OAAO,OAAO,EAE3B,EAGD,EAAM,iBAAiB,OAAQ,CAAC,IAAkB,CAChD,GAAI,EAAU,QAAQ,mBACpB,EAAU,OAAO,mBAAmB,EAAK,EAK3C,GAHA,EAAU,GAAc,KAAM,CAAC,EAG3B,EAAO,iBAAmB,IAAS,EAAU,QAAQ,SAAU,CACjE,IAAM,EAAQ,EAAO,eAAiB,IACtC,WAAW,IAAM,CAEf,GAAI,SAAS,gBAAkB,EAC7B,EAAU,OAAO,SAAS,GAE3B,CAAK,GAEX,EAGD,EAAM,iBAAiB,UAAW,CAAC,IAAqB,CACtD,OAAQ,EAAE,SACH,QACH,EAAE,eAAe,EACjB,EAAO,EACP,UAEG,SAEH,GADA,EAAE,eAAe,EACb,EACF,EAAM,EACD,QAAI,EAAU,QAAQ,aAAa,EACxC,EAAU,OAAO,SAAS,EAE5B,UAEG,YAEH,UAEG,UAEH,OAEL,EAGG,EACF,EAAY,iBAAiB,QAAS,CAAC,IAAkB,CACvD,EAAE,eAAe,EACjB,EAAE,gBAAgB,EAClB,EAAM,EACP,EAGD,EAAY,iBAAiB,UAAW,CAAC,IAAqB,CAC5D,GAAI,EAAE,MAAQ,SAAW,EAAE,MAAQ,IACjC,EAAE,eAAe,EACjB,EAAM,EAET,EAIH,GAAI,EACF,EAAY,iBAAiB,QAAS,CAAC,IAAkB,CAGvD,GAFA,EAAE,eAAe,EAEb,EAAU,QAAQ,aAAa,EACjC,EAAU,OAAO,SAAS,EAE1B,OAAU,QAAQ,OAAO,EAE5B,EAGD,EAAY,iBAAiB,UAAW,CAAC,IAAqB,CAC5D,GAAI,EAAE,MAAQ,SAAW,EAAE,MAAQ,IAGjC,GAFA,EAAE,eAAe,EAEb,EAAU,QAAQ,aAAa,EACjC,EAAU,OAAO,SAAS,EAE1B,OAAU,QAAQ,OAAO,EAG9B,GAUL,OALA,WAAW,IAAM,CACf,EAAoB,GACnB,CAAC,EAGG,IACF,EAEH,MAAO,CAIL,WAKA,WAKA,iBAKA,iBAKA,QAKA,SAKA,QAKA,OAKA,iBAKA,iBAKA,mBAKA,mBAKA,WACF,CACF,GChbF,KASO,IAAM,GAAkB,CAAC,IAAyB,CAAC,IAAc,CAEtE,IAAI,EAAmB,GACnB,EAAyC,CAAC,EAGxC,EAAW,CAAC,IAA8B,CAC9C,OAAO,EAAU,SAAW,EAAU,SAAS,CAAS,EAAI,GAMxD,EAAiB,IAA0B,CAC/C,GAAI,EAAU,OAAO,eACnB,OAAO,EAAU,MAAM,eAAe,EAExC,OAAO,GAMH,EAAiB,CAAC,EAAc,IAA0B,CAC9D,GAAI,CAAC,EAAO,OAAO,EAEnB,IAAM,EAAY,EAAK,YAAY,EAC7B,EAAa,EAAM,YAAY,EAC/B,EAAa,EAAU,QAAQ,CAAU,EAE/C,GAAI,IAAe,GAAI,OAAO,EAE9B,IAAM,EAAc,EAAK,MAAM,EAAG,CAAU,EACtC,EAAQ,EAAK,MAAM,EAAY,EAAa,EAAM,MAAM,EACxD,EAAa,EAAK,MAAM,EAAa,EAAM,MAAM,EAEvD,MAAO,GAAG,YAAsB,aAAiB,KAM7C,EAAuB,CAC3B,EACA,EACA,IACgB,CAChB,IAAM,EAAgB,IAAU,EAE1B,EAAc,CAAC,EAAS,EAAe,eAAe,CAAC,EAC7D,GAAI,EACF,EAAY,KAAK,EAAS,EAAe,wBAAwB,CAAC,EAGpE,IAAM,EAAO,EAAc,CACzB,IAAK,KACL,UAAW,EAAY,KAAK,GAAG,EAC/B,WAAY,CACV,KAAM,SACN,gBAAiB,EAAgB,OAAS,QAC1C,aAAc,OAAO,CAAK,EAC1B,aAAc,EAAW,OAAS,EAAW,KAC7C,SAAU,IACZ,CACF,CAAC,EAGD,GAAI,EAAW,KAAM,CACnB,IAAM,EAAc,EAAc,CAChC,IAAK,OACL,UAAW,EAAS,EAAe,eAAe,EAClD,UAAW,EACX,KAAM,EAAW,IACnB,CAAC,EACI,KAEL,IAAM,EAAc,EAAc,CAChC,IAAK,OACL,UAAW,EAAS,EAAe,eAAe,EAClD,UAAW,EACX,KAAM,GAAa,OACrB,CAAC,EAIH,IAAM,EAAc,EAAc,CAChC,IAAK,OACL,UAAW,EAAS,EAAe,eAAe,EAClD,UAAW,EACX,KAAM,EAAe,EAAW,KAAM,CAAK,CAC7C,CAAC,EAED,OAAO,GAMH,EAAgB,IAAmB,CACvC,OAAO,EAAc,CACnB,IAAK,KACL,UAAW,EAAS,EAAe,kBAAkB,EACrD,WAAY,CACV,KAAM,YACN,cAAe,MACjB,CACF,CAAC,GAMG,EAAoB,IAAY,CACpC,IAAM,EAAkB,EAAU,WAAW,gBAC7C,GAAI,CAAC,EAAiB,OAEtB,IAAM,EAAc,EAAe,EAC7B,EAAQ,EAAU,OAAO,WAAW,GAAK,GAK/C,GAFA,EAAgB,UAAY,GAExB,EAAY,SAAW,EACzB,OAGF,IAAI,EAEJ,EAAY,QAAQ,CAAC,EAAY,IAAU,CAEzC,GAAI,EAAW,OAAS,EAAW,QAAU,EAAc,CACzD,GAAI,IAAiB,OACnB,EAAgB,YAAY,EAAc,CAAC,EAE7C,EAAe,EAAW,MAG5B,IAAM,EAAO,EAAqB,EAAY,EAAO,CAAK,EAG1D,EAAK,iBAAiB,QAAS,CAAC,IAAkB,CAChD,EAAE,eAAe,EACjB,EAAE,gBAAgB,EAClB,EAAiB,CAAK,EACvB,EAGD,EAAK,iBAAiB,aAAc,IAAM,CACxC,EAAoB,CAAK,EAC1B,EAED,EAAgB,YAAY,CAAI,EACjC,EAGD,IAAM,EAAe,EAAY,OACjC,EAAgB,aACd,aACA,GAAG,eAA0B,IAAiB,EAAI,IAAM,cAC1D,GAMI,EAA2B,IAAY,CAC3C,IAAM,EAAkB,EAAU,WAAW,gBAC7C,GAAI,EACF,EAAgB,UAAY,GAE9B,EAAmB,IAMf,EAAsB,CAAC,IAAwB,CACnD,IAAM,EAAkB,EAAU,WAAW,gBAC7C,GAAI,CAAC,EAAiB,OAEtB,IAAM,EAAc,EAAe,EAGnC,GAAI,EAAQ,GAAI,EAAQ,EAAY,OAAS,EAC7C,GAAI,GAAS,EAAY,OAAQ,EAAQ,GAGzC,GAAI,GAAoB,EAAG,CACzB,IAAM,EAAe,EAAgB,cACnC,gBAAgB,KAClB,EACA,GAAI,EACF,EAAa,UAAU,OACrB,EAAS,EAAe,wBAAwB,CAClD,EACA,EAAa,aAAa,gBAAiB,OAAO,EAOtD,GAHA,EAAmB,EAGf,GAAoB,EAAG,CACzB,IAAM,EAAU,EAAgB,cAC9B,gBAAgB,KAClB,EACA,GAAI,EACF,EAAQ,UAAU,IAChB,EAAS,EAAe,wBAAwB,CAClD,EACA,EAAQ,aAAa,gBAAiB,MAAM,EAG3C,EAAwB,eAAe,CACtC,MAAO,UACP,SAAU,QACZ,CAAC,IAQD,EAAgB,IAAY,CAChC,EAAoB,EAAmB,CAAC,GAMpC,EAAoB,IAAY,CACpC,EAAoB,EAAmB,CAAC,GAMpC,EAAmB,CAAC,IAAwB,CAChD,IAAM,EAAc,EAAe,EAEnC,GAAI,EAAQ,GAAK,GAAS,EAAY,OAAQ,OAE9C,IAAM,EAAa,EAAY,GAG/B,GAAI,EAAU,OAAO,iBACnB,EAAU,MAAM,iBAAiB,CAAU,EAI7C,GAAI,EAAU,QAAQ,SACpB,EAAU,OAAO,SAAS,GAOxB,EAAoB,IAAe,CACvC,GAAI,GAAoB,EAEtB,OADA,EAAiB,CAAgB,EAC1B,GAET,MAAO,IAMH,EAA0B,IAAY,CAC1C,IAAM,EAAQ,EAAU,WAAW,MACnC,GAAI,CAAC,EAAO,OAEZ,EAAM,iBAAiB,UAAW,CAAC,IAAqB,CACtD,IAAM,EAAc,EAAe,EAInC,GAAI,CAHe,EAAU,QAAQ,aAAa,GAG/B,EAAY,SAAW,EAAG,OAE7C,OAAQ,EAAE,UACH,GAAY,WACf,EAAE,eAAe,EACjB,EAAc,EACd,WAEG,GAAY,SACf,EAAE,eAAe,EACjB,EAAkB,EAClB,WAEG,GAAY,MAEf,GAAI,GAAoB,EACtB,EAAE,eAAe,EACjB,EAAkB,EAGpB,WAEG,GAAY,IAEf,GAAI,GAAoB,EACtB,EAAkB,EAEpB,WAEG,GAAY,OAEf,EAAmB,GACnB,OAEL,GASH,OALA,WAAW,IAAM,CACf,EAAwB,GACvB,CAAC,EAGG,IACF,EAEH,YAAa,CAIX,OAAQ,EAKR,MAAO,EAKP,sBAKA,oBAAqB,IAAc,EAKnC,gBAKA,oBAKA,OAAQ,EAKR,mBACF,CACF,GC5TK,IAAM,GACX,CAAC,IACD,CAAC,IAAyD,CA6JxD,MA5JyC,CAEvC,QAAS,EAAU,QAInB,QAAQ,CAAC,EAAe,EAAe,GAAM,CAE3C,OADA,EAAQ,MAAM,SAAS,EAAO,CAAY,EACnC,MAGT,QAAQ,EAAG,CACT,OAAO,EAAQ,MAAM,SAAS,GAGhC,cAAc,CAAC,EAAc,CAE3B,OADA,EAAQ,MAAM,eAAe,CAAI,EAC1B,MAGT,cAAc,EAAG,CACf,OAAO,EAAQ,MAAM,eAAe,GAKtC,MAAM,EAAG,CAEP,OADA,EAAQ,MAAM,OAAO,EACd,MAGT,QAAQ,EAAG,CAET,OADA,EAAQ,MAAM,SAAS,EAChB,MAGT,QAAQ,EAAG,CACT,OAAO,EAAQ,MAAM,SAAS,GAGhC,UAAU,EAAG,CACX,OAAO,EAAQ,MAAM,WAAW,GAGlC,WAAW,CAAC,EAAsB,CAEhC,OADA,EAAQ,MAAM,YAAY,CAAI,EACvB,MAGT,WAAW,EAAG,CACZ,OAAO,EAAQ,MAAM,YAAY,GAKnC,KAAK,EAAG,CAEN,OADA,EAAQ,MAAM,MAAM,EACb,MAGT,IAAI,EAAG,CAEL,OADA,EAAQ,MAAM,KAAK,EACZ,MAGT,KAAK,EAAG,CAEN,OADA,EAAQ,MAAM,MAAM,EACb,MAGT,MAAM,EAAG,CAEP,OADA,EAAQ,MAAM,OAAO,EACd,MAKT,cAAc,CAAC,EAAkB,CAG/B,OADA,QAAQ,KAAK,qCAAqC,EAC3C,MAGT,eAAe,CAAC,EAA0B,CAGxC,OADA,QAAQ,KAAK,sCAAsC,EAC5C,MAGT,kBAAkB,CAAC,EAAY,CAG7B,OADA,QAAQ,KAAK,yCAAyC,EAC/C,MAGT,gBAAgB,CAAC,EAA6B,CAG5C,OADA,QAAQ,KAAK,uCAAuC,EAC7C,MAKT,cAAc,CAAC,EAA4C,CAGzD,OAFA,EAAQ,YAAY,IAAI,CAAW,EACnC,EAAQ,YAAY,OAAO,EACpB,MAGT,cAAc,EAAG,CACf,OAAO,EAAQ,YAAY,IAAI,GAGjC,gBAAgB,EAAG,CAGjB,OAFA,EAAQ,YAAY,MAAM,EAC1B,EAAQ,YAAY,OAAO,EACpB,MAKT,MAAM,EAAG,CAEP,OADA,EAAQ,SAAS,OAAO,EACjB,MAGT,OAAO,EAAG,CAER,OADA,EAAQ,SAAS,QAAQ,EAClB,MAGT,UAAU,EAAG,CACX,OAAO,EAAQ,SAAS,WAAW,GAKrC,EAAE,CAAC,EAAwB,EAAuC,CAEhE,OADA,EAAQ,OAAO,GAAG,EAAO,CAAO,EACzB,MAGT,GAAG,CAAC,EAAwB,EAAuC,CAEjE,OADA,EAAQ,OAAO,IAAI,EAAO,CAAO,EAC1B,MAKT,OAAO,EAAG,CACR,GAAI,EAAQ,WAAW,QACrB,EAAQ,UAAU,QAAQ,EAGhC,GC1NJ,IAqBO,IAAM,GAA8B,CAEzC,aAAc,GAAc,IAC5B,SAAU,GAAkB,OAC5B,SAAU,GAAgB,SAG1B,YAAa,GAAgB,YAC7B,MAAO,GAAgB,MACvB,YAAa,OACb,cAAe,OACf,YAAa,OAGb,gBAAiB,GAAgB,kBACjC,cAAe,GACf,eAAgB,GAChB,cAAe,IAGf,SAAU,GAAoB,cAC9B,SAAU,GAAoB,cAC9B,UAAW,GAAgB,UAC7B,EASa,GAAmB,CAAC,EAAuB,CAAC,IACvD,EAAsB,GAAe,EAAQ,QAAQ,EAQ1C,GAAmB,CAAC,IAC/B,EAAoB,EAAQ,CAC1B,IAAK,MACL,WAAY,CACV,KAAM,SACN,gBAAiB,EAAO,WAAa,GAAO,OAAS,OACvD,EACA,UAAW,EAAO,KACpB,CAAC,EAiDU,GAAe,CAAC,KAA6B,CAExD,MAAO,CACL,SAAU,CAAC,EAAW,IAAgB,EAAK,OAAO,WAAW,EAAG,CAAC,EACjE,SAAU,IAAM,EAAK,OAAO,WAAW,GAAK,GAC5C,eAAgB,CAAC,IAAc,EAAK,OAAO,iBAAiB,CAAC,EAC7D,eAAgB,IAAM,EAAK,OAAO,iBAAiB,GAAK,GACxD,MAAO,IAAM,EAAK,OAAO,QAAQ,EACjC,OAAQ,IAAM,EAAK,OAAO,SAAS,EACnC,MAAO,IAAM,EAAK,OAAO,QAAQ,EACjC,KAAM,IAAM,EAAK,OAAO,OAAO,CACjC,EAGA,MAAO,CACL,OAAQ,IAAM,EAAK,QAAQ,SAAS,EACpC,SAAU,IAAM,EAAK,QAAQ,WAAW,EACxC,SAAU,IAAM,EAAK,QAAQ,WAAW,GAAM,MAC9C,WAAY,IAAM,EAAK,QAAQ,aAAa,GAAK,GACjD,YAAa,CAAC,IAAsB,EAAK,QAAQ,cAAc,CAAC,EAChE,YAAa,IACX,EAAK,QAAQ,cAAc,GAAM,QACrC,EAGA,SAAU,CACR,OAAQ,IAAM,EAAK,UAAU,SAAS,EACtC,QAAS,IAAM,EAAK,UAAU,UAAU,EACxC,WAAY,IAAM,EAAK,UAAU,aAAa,GAAK,EACrD,EAGA,YAAa,CACX,IAAK,CAAC,IAAqC,EAAK,OAAO,iBAAiB,CAAC,EACzE,IAAK,IAAM,EAAK,OAAO,iBAAiB,GAAK,CAAC,EAC9C,MAAO,IAAM,EAAK,OAAO,mBAAmB,EAC5C,OAAQ,IAAM,EAAK,aAAa,SAAS,CAC3C,EAGA,OAAQ,CACN,GAAI,CAAC,EAAW,IAAgB,EAAK,KAAK,EAAG,CAAC,EAC9C,IAAK,CAAC,EAAW,IAAgB,EAAK,MAAM,EAAG,CAAC,CAClD,EAGA,UAAW,CACT,QAAS,IAAM,EAAK,WAAW,UAAU,CAC3C,CACF,GP3HA,IAAM,GAAe,CAAC,EAAuB,CAAC,IAAuB,CACnE,IAAM,EAAa,GAAiB,CAAM,EAE1C,GAAI,CAGF,IAAM,EAAY,EAChB,EACA,EAAW,EACX,EAAY,GAAiB,CAAU,CAAC,EACxC,GAAc,CAAU,EACxB,GAAW,CAAU,EACrB,GAAU,CAAU,EACpB,GAAgB,CAAU,EAC1B,EAAc,CAChB,EAAE,CAAU,EAGN,EAAa,GAAa,CAAS,EAGnC,EAAS,GAAQ,CAAU,EAAE,CAAS,EAG5C,GAAI,EAAW,IAAM,OAAO,EAAO,KAAO,WACxC,OAAO,QAAQ,EAAW,EAAE,EAAE,QAAQ,EAAE,EAAO,KAAa,CAC1D,GAAI,OAAO,IAAY,WACrB,EAAO,GAAG,EAA0C,CAAO,EAE9D,EAGH,OAAO,EACP,MAAO,EAAO,CAEd,MADA,QAAQ,MAAM,yBAA0B,CAAK,EACnC,MAAM,4BAA6B,EAAgB,SAAS,IAI3D,MQpFf,IACA,IACA,ICHA,IACA,IACA,ICuBO,IAAM,GACX,EAAG,WAAU,eACb,CAAC,KAAyD,CACxD,QAAS,EAAU,QACnB,MAAO,EAAU,MAGjB,SAAU,EAAU,WAAa,IAAM,IACvC,QAAQ,CAAC,EAAmC,CAE1C,OADA,EAAU,WAAW,CAAK,EACnB,MAIT,YAAY,CAAC,EAAc,EAAmC,CAE5D,OADA,EAAU,eAAe,EAAM,CAAK,EAC7B,MAGT,YAAY,CAAC,EAA6B,CACxC,OAAO,EAAU,eAAe,CAAI,GAAK,MAG3C,eAAe,CAAC,EAAkC,CAEhD,OADA,EAAU,kBAAkB,CAAI,EACzB,MAIT,UAAU,CAAC,EAA+C,CACxD,IAAM,EAAS,EAAU,QAAQ,QAAU,OACrC,EAAY,EAAU,QAAQ,eAAiB,YAYrD,GATA,EAAU,QAAQ,UAAU,OAC1B,GAAG,KAAU,YACb,GAAG,KAAU,aACf,EAGA,EAAU,QAAQ,UAAU,IAAI,GAAG,KAAU,MAAc,GAAS,EAGhE,EAAU,uBACZ,WAAW,IAAM,EAAU,uBAAuB,EAAG,EAAE,EAGzD,OAAO,MAGT,UAAU,EAAqB,CAC7B,IAAM,EAAS,EAAU,QAAQ,QAAU,OACrC,EAAY,EAAU,QAAQ,eAAiB,YAErD,GACE,EAAU,QAAQ,UAAU,SAAS,GAAG,KAAU,aAAqB,EAEvE,MAAO,WAGT,MAAO,UAIT,QAAQ,CAAC,EAAkC,CAGzC,GAFA,EAAU,OAAO,QAAQ,CAAI,EAEzB,EAAU,uBACZ,WAAW,IAAM,EAAU,uBAAuB,EAAG,EAAE,EAEzD,OAAO,MAGT,QAAQ,EAAW,CACjB,OAAO,EAAU,OAAO,QAAQ,GAAK,IAIvC,YAAa,EAAU,aAAe,KACtC,cAAc,CAAC,EAAkC,CAC/C,GAAI,EAAU,gBAGZ,GAFA,EAAU,eAAe,CAAI,EAEzB,EAAU,uBACZ,WAAW,IAAM,EAAU,uBAAuB,EAAG,EAAE,EAG3D,OAAO,MAGT,iBAAiB,EAAuB,CACtC,GAAI,EAAU,mBAGZ,GAFA,EAAU,kBAAkB,EAExB,EAAU,uBACZ,WAAW,IAAM,EAAU,uBAAuB,EAAG,EAAE,EAG3D,OAAO,MAIT,aAAc,EAAU,cAAgB,KACxC,eAAe,CAAC,EAAkC,CAChD,GAAI,EAAU,iBAGZ,GAFA,EAAU,gBAAgB,CAAI,EAE1B,EAAU,uBACZ,WAAW,IAAM,EAAU,uBAAuB,EAAG,EAAE,EAG3D,OAAO,MAGT,kBAAkB,EAAuB,CACvC,GAAI,EAAU,oBAGZ,GAFA,EAAU,mBAAmB,EAEzB,EAAU,uBACZ,WAAW,IAAM,EAAU,uBAAuB,EAAG,EAAE,EAG3D,OAAO,MAIT,sBAAuB,EAAU,uBAAyB,KAC1D,iBAAiB,CAAC,EAAc,EAAuC,CACrE,GAAI,EAAU,kBACZ,EAAU,kBAAkB,EAAM,CAAO,EAE3C,OAAO,MAGT,oBAAoB,EAAuB,CACzC,GAAI,EAAU,qBACZ,EAAU,qBAAqB,EAEjC,OAAO,MAIT,kBAAmB,EAAU,mBAAqB,KAClD,aAAa,CAAC,EAAkC,CAC9C,GAAI,EAAU,eAGZ,GAFA,EAAU,cAAc,CAAI,EAExB,EAAU,uBACZ,WAAW,IAAM,EAAU,uBAAuB,EAAG,EAAE,EAG3D,OAAO,MAGT,gBAAgB,EAAuB,CACrC,GAAI,EAAU,kBAGZ,GAFA,EAAU,iBAAiB,EAEvB,EAAU,uBACZ,WAAW,IAAM,EAAU,uBAAuB,EAAG,EAAE,EAG3D,OAAO,MAIT,kBAAmB,EAAU,mBAAqB,KAClD,aAAa,CAAC,EAAkC,CAC9C,GAAI,EAAU,eAGZ,GAFA,EAAU,cAAc,CAAI,EAExB,EAAU,uBACZ,WAAW,IAAM,EAAU,uBAAuB,EAAG,EAAE,EAG3D,OAAO,MAGT,gBAAgB,EAAuB,CACrC,GAAI,EAAU,kBAGZ,GAFA,EAAU,iBAAiB,EAEvB,EAAU,uBACZ,WAAW,IAAM,EAAU,uBAAuB,EAAG,EAAE,EAG3D,OAAO,MAIT,eAAe,EAAuB,CAEpC,GAAI,EAAU,OAAS,EAAU,QAAS,CACxC,IAAM,EACJ,EAAU,MAAM,OAAS,EAAU,MAAM,MAAM,OAAS,EACpD,EACJ,EAAU,MAAM,UAAU,mBAAmB,GAAK,GAGpD,GAAI,GAAY,EACd,EAAU,QAAQ,UAAU,OAC1B,GAAG,EAAU,QAAQ,QAAU,yBACjC,EAEA,OAAU,QAAQ,UAAU,IAC1B,GAAG,EAAU,QAAQ,QAAU,yBACjC,EAIJ,GAAI,EAAU,uBACZ,EAAU,uBAAuB,EAEnC,OAAO,MAIT,QAAQ,CAAC,EAAgB,EAAsC,CAC7D,GAAI,EAAU,SACZ,EAAU,SAAS,EAAO,CAAO,EAEnC,OAAO,MAGT,OAAO,EAAY,CACjB,OAAO,EAAU,UAAU,GAAK,IAIlC,UAAU,CAAC,EAAqC,CAC9C,GAAI,EAAU,SAAS,IACrB,EAAU,QAAQ,IAAI,CAAO,EAE/B,OAAO,MAGT,UAAU,EAAW,CACnB,OAAO,EAAU,SAAS,SAAW,WAIvC,EAAE,CAAC,EAAe,EAAuC,CAEvD,OADA,EAAU,KAAK,EAAO,CAAO,EACtB,MAGT,GAAG,CAAC,EAAe,EAAuC,CAExD,OADA,EAAU,MAAM,EAAO,CAAO,EACvB,MAIT,MAAM,EAAuB,CAE3B,OADA,EAAS,OAAO,EACT,MAGT,OAAO,EAAuB,CAE5B,OADA,EAAS,QAAQ,EACV,MAGT,OAAO,EAAS,CACd,EAAU,QAAQ,EAEtB,GCnOK,IAAM,GAAkB,CAA8B,IAC3D,CAAkC,IAA2C,CAC3E,GAAI,CAAC,EAAO,YACV,OAAO,EAIT,IAAM,EAAS,EAAO,QAAU,OAC1B,EAAc,SAAS,cAAc,MAAM,EAWjD,GAVA,EAAY,UAAY,GAAG,KAAU,EAAO,eAAiB,2BAC7D,EAAY,UAAY,EAAO,YAG/B,EAAU,QAAQ,YAAY,CAAW,EAGzC,EAAU,QAAQ,UAAU,IAAI,GAAG,KAAU,EAAO,eAAiB,gCAAgC,EAGjG,EAAU,MACZ,EAAU,MAAM,UAAU,IAAI,GAAG,KAAU,EAAO,eAAiB,sCAAsC,EAI3G,GAAI,cAAe,GAAa,EAAU,WAAW,QAAS,CAC5D,IAAM,EAAkB,EAAU,UAAU,QAC5C,EAAU,UAAU,QAAU,IAAM,CAClC,EAAY,OAAO,EACnB,EAAgB,KAAK,EAAU,SAAS,GAc5C,OATA,WAAW,IAAM,CACf,IAAM,EAAU,EAAU,QAAQ,cAAc,IAAI,KAAU,EAAO,eAAiB,mBAAmB,EACzG,GAAI,GACF,GAAI,CAAC,EAAU,QAAQ,UAAU,SAAS,GAAG,KAAU,EAAO,eAAiB,0BAA0B,EACtG,EAAwB,MAAM,KAAO,SAGzC,EAAE,EAEE,IACF,EACH,YAAa,EAEb,cAAc,CAAC,EAAc,CAE3B,OADA,EAAY,UAAY,EACjB,MAGT,iBAAiB,EAAG,CAClB,GAAI,EAAY,WAAY,CAG1B,GAFA,EAAY,OAAO,EACnB,EAAU,QAAQ,UAAU,OAAO,GAAG,KAAU,EAAO,eAAiB,gCAAgC,EACpG,EAAU,MACZ,EAAU,MAAM,UAAU,OAAO,GAAG,KAAU,EAAO,eAAiB,sCAAsC,EAI9G,GAAI,CAAC,EAAU,QAAQ,UAAU,SAAS,GAAG,KAAU,EAAO,eAAiB,0BAA0B,EAAG,CAC1G,IAAM,EAAU,EAAU,QAAQ,cAAc,IAAI,KAAU,EAAO,eAAiB,mBAAmB,EACzG,GAAI,EACD,EAAwB,MAAM,KAAO,GAI1C,KAAK,YAAc,KAErB,OAAO,KAEX,GCvEG,IAAM,GAAmB,CAA+B,IAC7D,CAAkC,IAA4C,CAC5E,GAAI,CAAC,EAAO,aACV,OAAO,EAIT,IAAM,EAAS,EAAO,QAAU,OAC1B,EAAc,SAAS,cAAc,MAAM,EAWjD,GAVA,EAAY,UAAY,GAAG,KAAU,EAAO,eAAiB,4BAC7D,EAAY,UAAY,EAAO,aAG/B,EAAU,QAAQ,YAAY,CAAW,EAGzC,EAAU,QAAQ,UAAU,IAAI,GAAG,KAAU,EAAO,eAAiB,iCAAiC,EAGlG,EAAU,MACZ,EAAU,MAAM,UAAU,IAAI,GAAG,KAAU,EAAO,eAAiB,uCAAuC,EAI5G,GAAI,cAAe,GAAa,EAAU,WAAW,QAAS,CAC5D,IAAM,EAAkB,EAAU,UAAU,QAC5C,EAAU,UAAU,QAAU,IAAM,CAClC,EAAY,OAAO,EACnB,EAAgB,KAAK,EAAU,SAAS,GAI5C,MAAO,IACF,EACH,aAAc,EAEd,eAAe,CAAC,EAAc,CAE5B,OADA,EAAY,UAAY,EACjB,MAGT,kBAAkB,EAAG,CACnB,GAAI,EAAY,WAAY,CAG1B,GAFA,EAAY,OAAO,EACnB,EAAU,QAAQ,UAAU,OAAO,GAAG,KAAU,EAAO,eAAiB,iCAAiC,EACrG,EAAU,MACZ,EAAU,MAAM,UAAU,OAAO,GAAG,KAAU,EAAO,eAAiB,uCAAuC,EAE/G,KAAK,aAAe,KAEtB,OAAO,KAEX,GCrDG,IAAM,GAAiB,CAA6B,IACzD,CAAsC,IAA0C,CAC9E,GAAI,CAAC,EAAO,WACV,OAAO,EAIT,IAAM,EAAS,EAAO,QAAU,OAC1B,EAAgB,SAAS,cAAc,MAAM,EAWnD,GAVA,EAAc,UAAY,GAAG,KAAU,EAAO,eAAiB,qBAC/D,EAAc,YAAc,EAAO,WAGnC,EAAU,QAAQ,YAAY,CAAa,EAG3C,EAAU,QAAQ,UAAU,IAAI,GAAG,KAAU,EAAO,eAAiB,0BAA0B,EAG3F,cAAe,GAAa,EAAU,WAAW,QAAS,CAC5D,IAAM,EAAkB,EAAU,UAAU,QAC5C,EAAU,UAAU,QAAU,IAAM,CAClC,EAAc,OAAO,EACrB,EAAgB,KAAK,EAAU,SAAS,GAI5C,MAAO,IACF,EACH,kBAAmB,EAEnB,aAAa,CAAC,EAAc,CAE1B,OADA,EAAc,YAAc,EACrB,MAGT,gBAAgB,EAAG,CACjB,GAAI,EAAc,WAAY,CAC5B,EAAc,OAAO,EACrB,EAAU,QAAQ,UAAU,OAAO,GAAG,KAAU,EAAO,eAAiB,0BAA0B,EAGlG,IAAM,EAAU,EAAU,QAAQ,cAAc,IAAI,KAAU,EAAO,eAAiB,mBAAmB,EACzG,GAAI,EACD,EAAwB,MAAM,KAAO,GAGxC,KAAK,kBAAoB,KAE3B,OAAO,KAEX,GCnDG,IAAM,GAAiB,CAA6B,IACzD,CAAsC,IAA0C,CAC9E,GAAI,CAAC,EAAO,WACV,OAAO,EAIT,IAAM,EAAS,EAAO,QAAU,OAC1B,EAAgB,SAAS,cAAc,MAAM,EAWnD,GAVA,EAAc,UAAY,GAAG,KAAU,EAAO,eAAiB,qBAC/D,EAAc,YAAc,EAAO,WAGnC,EAAU,QAAQ,YAAY,CAAa,EAG3C,EAAU,QAAQ,UAAU,IAAI,GAAG,KAAU,EAAO,eAAiB,0BAA0B,EAG3F,cAAe,GAAa,EAAU,WAAW,QAAS,CAC5D,IAAM,EAAkB,EAAU,UAAU,QAC5C,EAAU,UAAU,QAAU,IAAM,CAClC,EAAc,OAAO,EACrB,EAAgB,KAAK,EAAU,SAAS,GAI5C,MAAO,IACF,EACH,kBAAmB,EAEnB,aAAa,CAAC,EAAc,CAE1B,OADA,EAAc,YAAc,EACrB,MAGT,gBAAgB,EAAG,CACjB,GAAI,EAAc,WAChB,EAAc,OAAO,EACrB,EAAU,QAAQ,UAAU,OAAO,GAAG,KAAU,EAAO,eAAiB,0BAA0B,EAClG,KAAK,kBAAoB,KAE3B,OAAO,KAEX,GChCG,IAAM,GACX,CAAiC,IACjC,CACE,IACgC,CAChC,IAAM,EAAS,EAAO,QAAU,OAC1B,EAAY,EAAO,eAAiB,YACtC,EAAwC,KAGtC,EAA0B,CAC9B,EACA,EAAU,KACM,CAChB,IAAM,EAAU,SAAS,cAAc,KAAK,EAI5C,GAHA,EAAQ,UAAY,GAAG,KAAU,WACjC,EAAQ,YAAc,EAElB,EACF,EAAQ,UAAU,IAAI,GAAG,KAAU,iBAAyB,EAC5D,EAAU,QAAQ,UAAU,IAAI,GAAG,KAAU,UAAkB,EAGjE,OAAO,GAIT,GAAI,EAAO,eACT,EAAoB,EAClB,EAAO,eACP,EAAO,KACT,EACA,EAAU,QAAQ,YAAY,CAAiB,EAIjD,GAAI,cAAe,GAAa,EAAU,WAAW,QAAS,CAC5D,IAAM,EAAkB,EAAU,UAAU,QAC5C,EAAU,UAAU,QAAU,IAAM,CAClC,GAAI,EACF,EAAkB,OAAO,EAE3B,EAAgB,KAAK,EAAU,SAAS,GAI5C,MAAO,IACF,EACH,sBAAuB,EAEvB,iBAAiB,CAAC,EAAc,EAAU,GAAO,CAE/C,GAAI,EACF,EAAkB,OAAO,EACzB,EAAU,QAAQ,UAAU,OAAO,GAAG,KAAU,UAAkB,EAIpE,GAAI,EACF,EAAoB,EAAwB,EAAM,CAAO,EACzD,EAAU,QAAQ,YAAY,CAAiB,EAC/C,KAAK,sBAAwB,EAE7B,OAAoB,KACpB,KAAK,sBAAwB,KAC7B,EAAU,QAAQ,UAAU,OAAO,GAAG,KAAU,UAAkB,EAGpE,OAAO,MAGT,oBAAoB,EAAG,CACrB,GAAI,EACF,EAAkB,OAAO,EACzB,EAAoB,KACpB,KAAK,sBAAwB,KAC7B,EAAU,QAAQ,UAAU,OAAO,GAAG,KAAU,UAAkB,EAEpE,OAAO,KAEX,GCvJJ,KA6BO,IAAM,GACX,IACA,CAAkC,IAAyC,CACzE,IAAM,EAAS,EAAU,OAAO,QAAU,OACpC,EAAY,EAAU,OAAO,eAAiB,YAG9C,EAAoB,IAAI,QACxB,EAAkB,IAAI,QACtB,EAAsB,IAAI,QAC1B,EAAiB,IAAI,QAMrB,EAAyB,IAAM,CACnC,GAAI,CAAC,EAAU,SAAW,CAAC,EAAU,QAAQ,YAC3C,OAAO,EAGT,IAAM,EAAU,EAAU,QAAQ,cAChC,IAAI,KAAU,SAChB,EACM,EAAW,EAAU,QAAQ,cACjC,IAAI,KAAU,UAChB,EACM,EAAW,EAAU,QAAQ,cACjC,IAAI,KAAU,UAChB,EAGM,EAAa,EAAU,QAAQ,UAAU,SAC7C,GAAG,KAAU,aACf,EACM,EAAY,EAAU,QAAQ,UAAU,SAC5C,GAAG,KAAU,YACf,EACM,EAAU,EAAU,QAAQ,UAAU,SAC1C,GAAG,KAAU,UACf,EACM,EAAiB,EAAU,QAAQ,UAAU,SACjD,GAAG,KAAU,sBACf,EAGA,GAAI,GAAc,EAAS,CAEzB,IAAQ,MAAO,EAAe,QAAS,GACrC,GAAuB,EAAU,OAAO,EAG1C,GAAI,GAAa,CAAC,EAAS,CAQzB,GAPA,EAAQ,MAAM,gBAAkB,EAGhC,EAAQ,MAAM,YAAc,MAC5B,EAAQ,MAAM,aAAe,MAGzB,GAAmB,CAAC,EAAkB,IAAI,EAAU,OAAO,EAAG,CAChE,IAAM,EAAW,IAAI,iBAAiB,IAAM,CAE1C,IAAQ,SAAU,GAAuB,EAAU,OAAO,EAC1D,EAAQ,MAAM,gBAAkB,EACjC,EAED,EAAS,QAAQ,EAAiB,CAChC,WAAY,GACZ,gBAAiB,CAAC,QAAS,OAAO,CACpC,CAAC,EAGD,EAAkB,IAAI,EAAU,QAAS,CAAQ,EAGjD,IAAI,EAAS,EAAgB,cACvB,EAAgC,CAAC,EAEvC,MAAO,GAAU,IAAW,SAAS,gBAAiB,CACpD,IAAM,EAAiB,IAAI,iBAAiB,IAAM,CAEhD,IAAQ,MAAO,GAAa,GAC1B,EAAU,OACZ,EACA,EAAQ,MAAM,gBAAkB,EACjC,EAED,EAAe,QAAQ,EAAQ,CAC7B,WAAY,GACZ,gBAAiB,CACf,QACA,QACA,aACA,iBACF,CACF,CAAC,EAED,EAAU,KAAK,CAAc,EAC7B,EAAS,EAAO,cAIlB,GAAI,EAAU,OACZ,EAAgB,IAAI,EAAU,QAAS,CAAS,EAKpD,GAAI,CAAC,EAAoB,IAAI,EAAU,OAAO,EAAG,CAC/C,IAAM,EAAqB,IAAM,CAE/B,IAAQ,SAAU,GAAuB,EAAU,OAAO,EAC1D,GAAI,GAAa,CAAC,EAChB,EAAQ,MAAM,gBAAkB,GAKpC,SAAS,iBAAiB,cAAe,CAAkB,EAE3D,EAAoB,IAAI,EAAU,QAAS,CAAkB,GAI/D,OAAQ,MAAM,gBAAkB,GAChC,EAAQ,MAAM,QAAU,GAK5B,GAAI,GAAY,EAAU,MAAO,CAE/B,IAAM,EADc,EAAS,sBAAsB,EAAE,MAAQ,EAC1B,GAMnC,GAHA,EAAU,MAAM,MAAM,YAAc,GAAG,MAGnC,EAAS,CACX,IAAI,EAAgB,EAGpB,GAAI,EACF,EAAgB,KAAK,IAAI,EAAe,EAAE,EAI5C,GAAI,CAAC,GAAa,EAEhB,EAAQ,MAAM,KAAO,GAAG,MAGxB,OAAQ,MAAM,KAAO,QAGpB,QAAI,GAAkB,GAE3B,GAAI,EACF,GAAI,CAAC,GAAa,EAEhB,EAAQ,MAAM,KAAO,OAGrB,OAAQ,MAAM,KAAO,OAO3B,GAAI,GAAY,EAAU,MAAO,CAE/B,IAAM,EADc,EAAS,sBAAsB,EAAE,MAAQ,EAC1B,GAGnC,EAAU,MAAM,MAAM,aAAe,GAAG,MAG1C,OAAO,GAIH,EAAsB,IAAM,CAGhC,IAAM,EAAgB,IAAI,iBAAiB,CAAC,IAAc,CACxD,EAAU,QAAQ,CAAC,IAAa,CAC9B,GACE,EAAS,OAAS,cAClB,EAAS,gBAAkB,QAG3B,WAAW,EAAwB,EAAE,EAExC,EACF,EAGD,EAAc,QAAQ,EAAU,QAAS,CACvC,WAAY,GACZ,gBAAiB,CAAC,OAAO,CAC3B,CAAC,EAGD,OAAO,iBAAiB,SAAU,CAAsB,EAGxD,EAAe,IAAI,EAAU,QAAS,CAAa,GAUrD,GANA,WAAW,IAAM,CACf,EAAoB,EACpB,EAAuB,GACtB,CAAC,EAGA,cAAe,GAAa,EAAU,WAAW,QAAS,CAC5D,IAAM,EAAkB,EAAU,UAAU,QAC5C,EAAU,UAAU,QAAU,IAAM,CAClC,OAAO,oBAAoB,SAAU,CAAsB,EAG3D,IAAM,EAAgB,EAAe,IAAI,EAAU,OAAO,EAC1D,GAAI,EACF,EAAc,WAAW,EACzB,EAAe,OAAO,EAAU,OAAO,EAIzC,IAAM,EAAa,EAAkB,IAAI,EAAU,OAAO,EAC1D,GAAI,EACF,EAAW,WAAW,EACtB,EAAkB,OAAO,EAAU,OAAO,EAI5C,IAAM,EAAY,EAAgB,IAAI,EAAU,OAAO,EACvD,GAAI,EACF,EAAU,QAAQ,CAAC,IAAa,EAAS,WAAW,CAAC,EACrD,EAAgB,OAAO,EAAU,OAAO,EAI1C,IAAM,EAAe,EAAoB,IAAI,EAAU,OAAO,EAC9D,GAAI,EACF,SAAS,oBAAoB,cAAe,CAAY,EACxD,EAAoB,OAAO,EAAU,OAAO,EAG9C,EAAgB,KAAK,EAAU,SAAS,GAI5C,MAAO,IACF,EACH,uBAAwB,IAAM,CAE5B,OADA,EAAuB,EAChB,EAEX,GCzQG,IAAM,GACX,CAAC,IACD,CAAC,IAAkD,CACjD,IAAM,EAAS,EAAO,QAAU,OAC1B,EAAY,EAAO,eAAiB,YACpC,EAAU,EAAO,SAAW,UAGlC,GAAI,IAAY,UACd,EAAU,QAAQ,UAAU,IAC1B,GAAG,KAAU,cAAsB,GACrC,EAOF,GAHA,EAAU,QAAQ,aAAa,eAAgB,CAAO,EAGlD,EAAU,MACZ,EAAmB,EAAU,MAAO,CAAO,EAQ7C,SAAS,CAAkB,CAAC,EAAsB,EAAiB,CAGjE,EAAQ,aAAa,eAAgB,CAAO,EAO9C,IAAM,EAAa,CAAC,IAAuB,CASzC,GAPA,CAAC,UAAW,SAAS,EAAE,QAAQ,CAAC,IAAM,CACpC,EAAU,QAAQ,UAAU,OAC1B,GAAG,KAAU,cAAsB,GACrC,EACD,EAGG,IAAe,UACjB,EAAU,QAAQ,UAAU,IAC1B,GAAG,KAAU,cAAsB,GACrC,EAOF,GAHA,EAAU,QAAQ,aAAa,eAAgB,CAAU,EAGrD,EAAU,MACZ,EAAU,MAAM,aAAa,eAAgB,CAAU,EAIzD,GAAI,EAAU,QACZ,EAAU,QAAQ,QAAU,EAI9B,GAAI,EAAU,uBAEZ,WAAW,IAAM,EAAU,uBAAwB,EAAG,EAAE,GAU5D,OALA,EAAU,QAAU,CAClB,QAAS,EACT,IAAK,CACP,EAEO,GC3CJ,IAAM,GACX,CAAwB,IACxB,CAAwC,IAAqC,CAC3E,IAAM,EAAS,EAAO,QAAU,OAC1B,EAAY,EAAO,eAAiB,YAGtC,EAAa,EAAO,OAAS,GAGjC,GAAI,EACF,EAAU,QAAQ,UAAU,IAAI,GAAG,KAAU,UAAkB,EAGjE,MAAO,IACF,EACH,aAEA,QAAQ,CAAC,EAAgB,EAAkB,CAUzC,GATA,EAAa,EAGb,EAAU,QAAQ,UAAU,OAC1B,GAAG,KAAU,WACb,CACF,EAGI,IAAY,QAAa,EAAU,mBACrC,GAAI,EACF,EAAU,kBAAkB,EAAS,CAAK,EACrC,QAAI,CAAC,EAEV,EAAU,kBAAkB,GAAI,EAAK,EAElC,QACL,EAAU,uBACV,EAAU,kBACV,CAEA,IAAM,EAAc,EAAU,sBAAsB,aAAe,GACnE,GAAI,EACF,EAAU,kBAAkB,EAAa,CAAK,EAIlD,OAAO,MAGT,OAAO,EAAG,CACR,OAAO,EAEX,GCnHJ,ICKO,IAAM,GAAqB,CAEhC,OAAQ,SAER,SAAU,UACZ,EAmBO,IAAM,GAAkB,CAE7B,KAAM,OAEN,SAAU,WAEV,MAAO,QAEP,OAAQ,SAER,IAAK,MAEL,IAAK,MAEL,OAAQ,SAER,UAAW,WACb,EA2BO,IAAM,GAAoB,CAE/B,QAAS,UAET,QAAS,SACX,EAMa,GAAqB,CAEhC,KAAM,GAAgB,KAEtB,QAAS,GAAmB,OAE5B,QAAS,GAAkB,QAE3B,SAAU,GAEV,SAAU,GAEV,MAAO,GAEP,YAAa,GAEb,mBAAoB,GACtB,ED3FO,IAAM,GAAiC,CAC5C,KAAM,GAAmB,KACzB,QAAS,GAAmB,OAC9B,EAOa,GAAmB,CAC9B,EAA0B,CAAC,IAE3B,EAAsB,GAAe,EAAQ,WAAW,EAO7C,GAAmB,CAAC,IAC/B,EAAoB,EAAQ,CAC1B,IAAK,MACL,UAAW,EAAO,KACpB,CAAC,EAOU,GAAe,CAAC,KAAqC,CAChE,SAAU,CACR,OAAQ,EAAK,UAAU,OACvB,QAAS,EAAK,UAAU,OAC1B,EACA,UAAW,CACT,QAAS,EAAK,WAAW,OAC3B,CACF,GVQA,IAAM,GAAkB,CAAC,EAA0B,CAAC,IAA0B,CAC5E,IAAM,EAAa,GAAiB,CAAM,EAE1C,GAAI,CAuBF,OApBkB,EAChB,EACA,EAAW,EACX,EAAY,GAAiB,CAAU,CAAC,EACxC,GAAY,CAAU,EACtB,GAAY,CAAU,EACtB,GAAc,CAAU,EACxB,GAAc,CAAU,EACxB,GAAgB,CAAU,EAC1B,GAAiB,CAAU,EAC3B,GAAe,CAAU,EACzB,GAAe,CAAU,EACzB,GAAmB,CAAU,EAC7B,GAAU,CAAU,EACpB,GAAa,CAAU,EACvB,EAAc,EACd,GAAc,EACd,CAAC,IAAS,GAAQ,GAAa,CAAI,CAAC,EAAE,CAAI,CAC5C,EAAE,CAAU,EAGZ,MAAO,EAAO,CAKd,MAJA,QAAQ,MACN,4BACA,aAAiB,MAAQ,EAAM,QAAU,OAAO,CAAK,CACvD,EACU,MACR,+BACE,aAAiB,MAAQ,EAAM,QAAU,OAAO,CAAK,GAEzD,IAIW,MYvFR,IAAM,GACX,CAAC,IACD,CAAC,IAA4C,CAE3C,IAAI,EAAc,GAClB,GAAI,EAAO,MAAO,CAChB,IAAM,GAAU,EAAO,SAAW,CAAC,GAAG,KACpC,CAAC,IAAQ,EAAI,KAAO,EAAO,KAC7B,EACA,GAAI,EACF,EAAc,EAAO,KAKzB,IAAM,EACJ,uLAGI,EAAY,GAAgB,CAChC,MAAO,EAAO,MACd,QAAS,EAAO,SAAW,SAC3B,QAAS,EAAO,SAAW,UAC3B,MAAO,EACP,KAAM,EAAO,KACb,SAAU,EAAO,SACjB,SAAU,EAAO,SACjB,eAAgB,EAAO,eACvB,MAAO,EAAO,MACd,aAAc,EACd,SAAU,EACZ,CAAC,EAMD,GAHA,EAAU,QAAQ,UAAU,IAAI,GAAG,EAAO,QAAU,eAAe,EAG/D,EAAU,MACZ,EAAU,MAAM,iBAAiB,UAAW,CAAC,IAAM,CAcjD,GAAI,CAZgB,CAClB,MACA,SACA,YACA,UACA,YACA,aACA,QACA,IACA,OACA,KACF,EACiB,SAAS,EAAE,GAAG,EAC7B,EAAE,eAAe,EAEpB,EAGD,EAAU,MAAM,iBAAiB,QAAS,CAAC,IAAM,CAC/C,EAAE,eAAe,EAClB,EAGD,EAAU,MAAM,iBAAiB,MAAO,CAAC,IAAM,CAC7C,EAAE,eAAe,EAClB,EAGH,MAAO,IACF,EACH,QAAS,EAAU,QACnB,WACF,GASE,GAAmB,CAAC,IAA2B,CACnD,OAAO,EAAQ,IAAI,CAAC,IAAW,CAC7B,GAAI,SAAU,GAAU,EAAO,OAAS,UACtC,OAAO,EAIT,IAAM,EAAqB,CACzB,GAAI,EAAO,GAAG,SAAS,EACvB,KAAM,EAAO,KACb,KAAM,EAAO,KACb,SAAU,EAAO,SACjB,WAAY,GACZ,KAAM,CACR,EAGA,GAAI,EAAO,YAAc,MAAM,QAAQ,EAAO,OAAO,EACnD,EAAS,WAAa,GACtB,EAAS,QAAU,GAAiB,EAAO,OAAO,EAGpD,OAAO,EACR,GAQU,GACX,CAAC,IACD,CAAC,IAA4C,CAC3C,GAAI,CAAC,EAAU,UAEb,OADA,QAAQ,KAAK,sCAAsC,EAC5C,EAIT,IAAM,EAAQ,CACZ,QAAS,EAAO,SAAW,CAAC,EAC5B,eAAgB,IAClB,EAGA,GAAI,EAAO,MACT,EAAM,eAAiB,EAAM,QAAQ,KACnC,CAAC,IAAQ,EAAI,KAAO,EAAO,KAC7B,EAIF,IAAM,EAAY,GAAiB,EAAM,OAAO,EAM1C,EAAO,GAAW,CACtB,OAAQ,EAAU,UAClB,MAAO,EACP,SAAW,EAAO,WAAa,eAC/B,MAAO,OACP,MAAO,cACP,cAAe,GACf,oBAAqB,GACrB,cAAe,GACf,cAAe,GACf,OAAQ,EACR,UAAW,EAAU,OACvB,CAAC,EAGD,EAAK,GAAG,SAAU,CAAC,IAAU,CAE3B,GAAI,CAAC,EAAM,MAAQ,EAAM,KAAK,WAC5B,OAIF,IAAM,EAAS,EAAM,KAAK,KAC1B,GAAI,CAAC,GAAU,EAAE,OAAQ,IAAW,EAAE,SAAU,GAAS,CACvD,QAAQ,KACN,0DACF,EACA,OAYF,GATA,EAAM,eAAiB,EAGvB,EAAU,UAAU,SAAS,EAAO,IAAI,EAGxC,EAAK,YAAY,EAAO,EAAE,EAGtB,EAAU,KACZ,EAAU,KAAK,SAAU,CACvB,OAAQ,EACR,MAAO,EAAO,GACd,KAAM,EAAO,KACb,SACA,cAAe,EAAM,cACrB,eAAgB,IAAM,CACpB,EAAM,iBAAmB,IAE3B,iBAAkB,EACpB,CAAC,EAEJ,EAGD,EAAU,UAAU,QAAQ,iBAAiB,UAAW,CAAC,IAAM,CAC7D,GAAI,EAAU,UAAU,MAAM,SAAU,OAGxC,IACG,EAAE,MAAQ,SAAW,EAAE,MAAQ,KAAO,EAAE,MAAQ,cACjD,CAAC,EAAK,OAAO,GAQb,GANA,EAAE,eAAe,EAGjB,EAAK,KAAK,EAAG,UAAU,EAGnB,EAAU,KACZ,EAAU,KAAK,OAAQ,CACrB,OAAQ,EACR,cAAe,EACf,eAAgB,IAAM,GACtB,iBAAkB,EACpB,CAAC,EAEE,QAAI,EAAE,MAAQ,UAAY,EAAK,OAAO,EAC3C,EAAE,eAAe,EACjB,EAAK,MAAM,CAAC,EAEf,EAGD,EAAK,GAAG,OAAQ,IAAM,CAEpB,EAAU,UAAU,QAAQ,UAAU,IACpC,GAAG,EAAO,QAAU,qBACtB,EAGA,IAAM,EAAS,EAAO,QAAU,OAIhC,GAHA,EAAU,UAAU,QAAQ,UAAU,IAAI,GAAG,sBAA2B,EAItE,EAAU,UAAU,QAAQ,UAAU,SACpC,GAAG,qBACL,EAEA,EAAU,UAAU,QAAQ,UAAU,IACpC,GAAG,6BACL,EAEH,EAED,EAAK,GAAG,QAAS,CAAC,IAAU,CA6C1B,GA3CA,EAAU,UAAU,QAAQ,UAAU,OACpC,GAAG,EAAO,QAAU,qBACtB,EAIA,WAAW,IAAM,CACf,IAAM,EAAS,EAAO,QAAU,OAMhC,GAJE,SAAS,gBAAkB,EAAU,UAAU,OAC/C,EAAU,UAAU,QAAQ,SAAS,SAAS,aAAa,GAO3D,GAHA,EAAU,UAAU,QAAQ,UAAU,IACpC,GAAG,sBACL,EAEE,EAAU,UAAU,QAAQ,UAAU,SACpC,GAAG,qBACL,EAEA,EAAU,UAAU,QAAQ,UAAU,IACpC,GAAG,6BACL,EAMF,QAHA,EAAU,UAAU,QAAQ,UAAU,OACpC,GAAG,sBACL,EAEE,EAAU,UAAU,QAAQ,UAAU,SACpC,GAAG,qBACL,EAEA,EAAU,UAAU,QAAQ,UAAU,OACpC,GAAG,6BACL,GAGH,EAAE,EAGD,EAAU,KACZ,EAAU,KAAK,QAAS,CACtB,OAAQ,EACR,cAAe,EAAM,cACrB,eAAgB,IAAM,GACtB,iBAAkB,EACpB,CAAC,EAEJ,EAGD,IAAM,EAAuB,IAAM,CACjC,GAAI,CAAC,EAAM,eAAgB,OAC3B,EAAK,YAAY,EAAM,eAAe,EAAE,GAS1C,OALA,EAAK,GAAG,OAAQ,IAAM,CACpB,WAAW,EAAsB,EAAE,EACpC,EAGM,IACF,EACH,OAGA,OAAQ,CACN,SAAU,IAAM,EAAM,gBAAgB,IAAM,KAE5C,SAAU,CAAC,IAAU,CAEnB,GAAI,IAAU,MAAQ,IAAU,QAAa,IAAU,GAIrD,OAHA,EAAM,eAAiB,KACvB,EAAU,UAAU,SAAS,EAAE,EAC/B,EAAK,YAAY,IAAI,EACd,EAGT,IAAM,EAAS,EAAM,QAAQ,KAC3B,CAAC,KAAQ,OAAQ,IAAO,EAAI,KAAO,CACrC,EACA,GAAI,GAAU,SAAU,EACtB,EAAM,eAAiB,EACvB,EAAU,UAAU,SAAS,EAAO,IAAI,EACxC,EAAK,YAAY,EAAO,EAAE,EAE5B,OAAO,GAGT,MAAO,IAAM,CAIX,OAHA,EAAM,eAAiB,KACvB,EAAU,UAAU,SAAS,EAAE,EAC/B,EAAK,YAAY,IAAI,EACd,GAGT,QAAS,IAAM,EAAM,gBAAgB,MAAQ,GAE7C,kBAAmB,IAAM,EAAM,eAE/B,WAAY,IAAM,CAAC,GAAG,EAAM,OAAO,EAEnC,WAAY,CAAC,IAAY,CACvB,EAAM,QAAU,EAEhB,IAAM,EAAY,GAAiB,CAAO,EAI1C,GAHA,EAAK,SAAS,CAAS,EAIrB,EAAM,gBACN,CAAC,EAAQ,KACP,CAAC,KAAQ,OAAQ,IAAO,EAAI,KAAO,EAAM,eAAe,EAC1D,EAEA,EAAM,eAAiB,KACvB,EAAU,UAAU,SAAS,EAAE,EAGjC,OAAO,GAGT,KAAM,CACJ,EACA,EAAwC,UACrC,CAEH,OADA,EAAK,KAAK,EAAO,CAAe,EACzB,GAGT,MAAO,CAAC,IAAkB,CAExB,OADA,EAAK,MAAM,CAAK,EACT,GAGT,OAAQ,IAAM,EAAK,OAAO,CAC5B,CACF,GCvYG,IAAM,GACX,CAAC,IACD,CAAC,KAAqC,IACjC,EACH,QAAS,EAAU,QACnB,UAAW,EAAU,UACrB,KAAM,EAAU,KAEhB,SAAU,EAAQ,OAAO,SAEzB,QAAQ,CAAC,EAAmD,CAE1D,OADA,EAAQ,OAAO,SAAS,CAAK,EACtB,MAGT,KAAK,EAAoB,CAEvB,OADA,EAAQ,OAAO,MAAM,EACd,MAGT,QAAS,EAAQ,OAAO,QAExB,kBAAmB,EAAQ,OAAO,kBAElC,WAAY,EAAQ,OAAO,WAE3B,UAAU,CAAC,EAA6C,CAEtD,OADA,EAAQ,OAAO,WAAW,CAAU,EAC7B,MAGT,IAAI,CAAC,EAAwC,QAA0B,CACrE,GAAI,EAAU,MAAQ,OAAO,EAAU,KAAK,OAAS,WACnD,EAAU,KAAK,KAAK,OAAW,CAAe,EAE9C,OAAQ,OAAO,KAAK,EAEtB,OAAO,MAGT,KAAK,EAAoB,CAEvB,OADA,EAAQ,OAAO,MAAM,EACd,MAGT,OAAQ,EAAQ,OAAO,OAEvB,UAAU,CAAC,EAAkC,CAE3C,GAAI,EAAU,WAAW,WACvB,EAAU,UAAU,WAAW,CAAO,EAExC,OAAO,MAGT,UAAU,EAAW,CAEnB,GAAI,EAAU,WAAW,WACvB,OAAO,EAAU,UAAU,WAAW,EAExC,MAAO,WAGT,EAAE,CAAC,EAAO,EAAS,CACjB,GAAI,EAAQ,QAAQ,GAClB,EAAQ,OAAO,GAAG,EAAO,CAAO,EAC3B,QAAI,EAAU,GACnB,EAAU,GAAG,EAAO,CAAO,EAE7B,OAAO,MAGT,GAAG,CAAC,EAAO,EAAS,CAClB,GAAI,EAAQ,QAAQ,IAClB,EAAQ,OAAO,IAAI,EAAO,CAAO,EAC5B,QAAI,EAAU,IACnB,EAAU,IAAI,EAAO,CAAO,EAE9B,OAAO,MAGT,MAAM,EAAoB,CAExB,OADA,EAAQ,SAAS,OAAO,EACjB,MAGT,OAAO,EAAoB,CAEzB,OADA,EAAQ,SAAS,QAAQ,EAClB,MAGT,QAAQ,CAAC,EAAgB,EAAmC,CAE1D,GAAI,EAAU,WAAW,SACvB,EAAU,UAAU,SAAS,EAAO,CAAO,EAE7C,OAAO,MAGT,UAAU,EAAoB,CAE5B,GAAI,EAAU,WAAW,SACvB,EAAU,UAAU,SAAS,EAAK,EAEpC,OAAO,MAGT,OAAO,EAAG,CACR,EAAQ,UAAU,QAAQ,EAE9B,GCrHF,ICGO,IAAM,GAAkB,CAE7B,OAAQ,SAER,SAAU,UACZ,EAKa,GAAmB,CAE9B,aAAc,eAEd,OAAQ,SAER,WAAY,aAEZ,UAAW,YAEX,IAAK,MAEL,QAAS,SACX,EAqCO,IAAM,GAAkB,CAE7B,QAAS,GAAgB,OAEzB,UAAW,GAAiB,aAE5B,MAAO,SAEP,MAAO,GAEP,SAAU,GAEV,SAAU,GAEV,gBAAiB,GAEjB,MAAO,EACT,EDzEO,IAAM,GAA8B,CACzC,QAAS,CAAC,EACV,QAAS,GAAgB,QACzB,UAAW,GAAgB,SAC7B,EAOa,GAAmB,CAC9B,EAAuB,CAAE,QAAS,CAAC,CAAE,IAErC,EAAsB,GAAe,EAAQ,QAAQ,EAO1C,GAAe,CAAC,KAAqC,CAChE,OAAQ,CACN,SAAU,EAAK,QAAQ,WAAa,IAAM,MAC1C,SAAU,EAAK,QAAQ,WAAa,IAAM,GAC1C,MAAO,EAAK,QAAQ,QAAU,IAAM,GACpC,QAAS,EAAK,QAAQ,UAAY,IAAM,IACxC,kBAAmB,EAAK,QAAQ,oBAAsB,IAAM,MAC5D,WAAY,EAAK,QAAQ,aAAe,IAAM,CAAC,GAC/C,WAAY,EAAK,QAAQ,aAAe,IAAM,GAC9C,KAAM,EAAK,QAAQ,OAAS,IAAM,GAClC,MAAO,EAAK,QAAQ,QAAU,IAAM,GACpC,OAAQ,EAAK,QAAQ,SAAW,IAAM,GACxC,EACA,OAAQ,CACN,GAAI,EAAK,KAAO,IAAM,GACtB,IAAK,EAAK,MAAQ,IAAM,EAC1B,EACA,SAAU,CACR,OAAQ,IAAM,CACZ,GAAI,EAAK,WAAW,OAClB,EAAK,UAAU,OAAO,EAExB,OAAO,GAET,QAAS,IAAM,CACb,GAAI,EAAK,WAAW,QAClB,EAAK,UAAU,QAAQ,EAEzB,OAAO,EAEX,EACA,UAAW,CACT,QAAS,IAAM,CACb,GAAI,EAAK,WAAW,QAClB,EAAK,UAAU,QAAQ,EAEzB,GAAI,EAAK,MAAM,QACb,EAAK,KAAK,QAAQ,EAEpB,GAAI,EAAK,WAAW,QAClB,EAAK,UAAU,QAAQ,EAG7B,CACF,Gf/BA,IAAM,GAAe,CAAC,IAA0C,CAC9D,GAAI,CAEF,IAAM,EAAa,GAAiB,CAAM,EAGpC,EAAS,EACb,EACA,EAAW,EACX,GAAc,CAAU,EACxB,GAAS,CAAU,EACnB,EAAc,EACd,KAAQ,GAAQ,GAAa,CAAI,CAAC,EAAE,CAAI,CAC1C,EAAE,CAAU,EAGZ,GAAI,EAAO,GAAI,CACb,GAAI,EAAO,GAAG,OAAQ,EAAO,GAAG,SAAU,EAAO,GAAG,MAAM,EAC1D,GAAI,EAAO,GAAG,KAAM,EAAO,GAAG,OAAQ,EAAO,GAAG,IAAI,EACpD,GAAI,EAAO,GAAG,MAAO,EAAO,GAAG,QAAS,EAAO,GAAG,KAAK,EAGzD,OAAO,EACP,MAAO,EAAO,CAEd,MADA,QAAQ,MAAM,yBAA0B,CAAK,EACnC,MAAM,4BAA6B,EAAgB,SAAS,IAI3D,MiBtEf,IACA,ICFA,ICIO,IAAM,GAAyB,CAEpC,OAAQ,SAER,MAAO,OACT,EAKa,GAA2B,CAEtC,QAAS,UAET,YAAa,cAEb,QAAS,SACX,EAaO,IAAM,GAA4B,CAEvC,KAAM,GAAuB,OAE7B,QAAS,GAAyB,QAElC,OAAQ,GAER,gBAAiB,IAEjB,cAAe,+BAEf,eAAgB,CAAC,MAAO,GAAG,CAC7B,EAKa,GAAyB,6KD5C/B,IAAM,GAAiB,CAC5B,KAAM,GAA0B,KAChC,OAAQ,GAA0B,OAClC,QAAS,GAA0B,OACrC,EAQa,GAAmB,CAC9B,EAAgC,CAAC,IAEjC,EACE,GACA,EACA,kBACF,EAQW,GAAqB,CAAC,IAAkC,CACnE,IAAM,EAAU,EAAO,mBAEvB,MAAO,CACL,IAAK,MACL,cAAe,mBACf,WAAY,CACV,KAAM,QACN,aAAc,mBACd,YAAa,EAAO,eACpB,eAAgB,CAClB,EACA,UAAW,CACT,EAAO,MACP,EAAO,SAAW,GAAG,EAAO,oCAAsC,KAClE,cACI,GAAG,EAAO,4BAA4B,IACtC,IACN,EACA,YAAa,EACf,GASW,GAAmB,CAAC,IAA4C,CAC3E,OAAQ,iBAEJ,MAAO,CACL,oBAAqB,UACrB,mBAAoB,OACpB,sBAAuB,WACzB,oBAEA,MAAO,CACL,oBAAqB,WACrB,mBAAoB,OACpB,sBAAuB,UACzB,wBAGA,MAAO,CACL,oBAAqB,WACrB,mBAAoB,OACpB,sBAAuB,UACzB,IEnFN,KAYA,IAAM,GAAyB,CAAC,EAAgB,IAA+B,CAC7E,IAAM,EAAY,SAAS,cAAc,MAAM,EAG/C,OAFA,EAAU,UAAY,GAAG,sBACzB,EAAU,UAAY,GAAQ,GACvB,GAmBI,GAAgB,CAC3B,EACA,EACA,EACA,EAAgB,GAChB,EAAU,CAAE,OAAQ,GAAM,aAAc,CAAC,CAAE,IAC/B,CACZ,IAAM,EAAa,GAAiB,EAAO,SACrC,EAAe,EAAO,KACtB,EAAU,QAAQ,EAAO,IAAI,EAC7B,EAAU,QAAQ,CAAY,EAC9B,EAAa,GAAW,CAAC,EACzB,EAAa,GAAW,CAAC,EACzB,EAAgB,EAAO,eAAiB,GAGxC,EAAS,GAAa,CAC1B,KAAM,EAAO,KAIb,KAAM,EACF,EACA,GAAW,EAAO,SAChB,EACA,EACN,MAAO,EAAO,OAAS,EAAO,MAAQ,GACtC,SAAU,EACV,OAAQ,EAAQ,OAChB,aAAc,EAAQ,aACtB,MAAO,EAAO,MACd,UAAW,EAAO,MAAQ,EAAO,KACnC,CAAC,EAGD,EAAO,QAAQ,UAAU,IAAI,GAAG,4BAAiC,EAIjE,IAAI,EAAuC,KAE3C,GAAI,EAAY,CACd,EAAmB,GAAuB,EAAQ,CAAa,EAE/D,IAAM,EAAc,EAAO,QAAQ,cAAc,IAAI,eAAoB,EACzE,GAAI,EACF,EAAY,YAAY,aAAa,EAAkB,CAAW,EAGlE,OAAO,QAAQ,QAAQ,CAAgB,EAK3C,GAAI,EAAO,SACT,EAAO,QAAQ,UAAU,IAAI,GAAG,qBAA0B,EAC1D,EAAO,QAAQ,aAAa,eAAgB,MAAM,EAElD,OAAO,QAAQ,aAAa,eAAgB,OAAO,EAIrD,EAAU,YAAY,EAAO,OAAO,EAOpC,IAAM,EAAsB,CAAC,IAAsB,CAKjD,GAJA,EAAO,QAAQ,UAAU,OAAO,GAAG,sBAA4B,CAAQ,EACvE,EAAO,QAAQ,aAAa,eAAgB,EAAW,OAAS,OAAO,EAGnE,EAAY,CAGT,QAAI,GAAW,EAEpB,GAAI,EACF,EAAO,QAAQ,CAAa,EAE5B,OAAO,QAAQ,CAAY,GAO7B,EAAa,EAAO,UAAY,GAEpC,MAAO,CACL,QAAS,EAAO,QAChB,MAAO,EAAO,OAAS,EAAO,MAAQ,GAEtC,UAAU,EAAG,CACX,OAAO,GAGT,WAAW,CAAC,EAAmB,CAC7B,EAAa,EACb,EAAoB,CAAQ,GAG9B,UAAU,EAAG,CACX,OAAO,EAAO,UAAU,aAAa,GAAK,IAG5C,WAAW,CAAC,EAAmB,CAC7B,GAAI,EACF,EAAO,QAAQ,EAEf,OAAO,OAAO,GAIlB,OAAO,EAAG,CAER,GAAI,GAAoB,EAAiB,WACvC,EAAiB,WAAW,YAAY,CAAgB,EAG1D,EAAO,QAAQ,EAEnB,GH1GF,IAAM,GAAwB,CAAC,EAAgC,CAAC,IAAgC,CAE9F,IAAM,EAAa,GAAiB,CAAM,EACpC,EAAO,EAAW,eAClB,EAAU,EAAW,mBACrB,EAAU,GAAc,EAE9B,GAAI,CAEF,IAAM,EAAY,EAChB,EACA,EAAW,EACX,EAAY,GAAmB,CAAU,CAAC,EAC1C,EAAc,CAChB,EAAE,CAAU,EAGN,EAAgB,GAAiB,CAAiB,EACxD,OAAO,QAAQ,CAAa,EAAE,QAAQ,EAAE,EAAM,KAAW,CACvD,EAAU,QAAQ,MAAM,YAAY,EAAM,CAAK,EAChD,EAGD,IAAM,EAAsB,CAAC,EAC7B,GAAI,EAAW,UAAY,EAAW,SAAS,OAC7C,EAAW,SAAS,QAAQ,KAAiB,CAC3C,IAAM,EAAU,GACd,EACA,EAAU,QACV,EAAW,OACX,EAAW,SACX,CACE,OAAQ,EAAW,OACnB,aAAc,EAAW,YAC3B,CACF,EAEA,EAAS,KAAK,CAAO,EACtB,EAIH,GAAI,cAAiC,CAAC,EAAS,KAAK,KAAK,EAAE,WAAW,CAAC,EAAG,CAExE,IAAM,EAAkB,EAAS,KAAK,KAAK,CAAC,EAAE,WAAW,CAAC,EAC1D,GAAI,EACF,EAAgB,YAAY,EAAI,EASpC,IAAM,EAAqB,CAAC,IAAiB,CAC3C,IAAM,EAAiB,EAAM,cACvB,EAAiB,EAAS,KAAK,KAAK,EAAE,UAAY,CAAc,EAEtE,GAAI,CAAC,GAAkB,EAAe,WAAW,EAC/C,OAGF,IAAM,EAAW,EAAkB,EAGnC,GAAI,aAEF,EAAS,QAAQ,KAAW,CAC1B,EAAQ,YAAY,IAAY,CAAc,EAC/C,EAGD,OAAe,YAAY,CAAC,EAAe,WAAW,CAAC,EAIzD,IAAM,EAAW,EAAkB,EAGnC,GACE,EAAS,SAAW,EAAS,QAC7B,EAAS,KAAK,KAAK,CAAC,EAAS,SAAS,CAAC,CAAC,GACxC,EAAS,KAAK,KAAK,CAAC,EAAS,SAAS,CAAC,CAAC,EAExC,EAAQ,KAAK,SAAU,CACrB,SAAU,EAAY,EACtB,MAAO,EACP,UACF,CAAC,GAKL,EAAS,QAAQ,KAAW,CAC1B,EAAQ,QAAQ,iBAAiB,QAAS,CAAkB,EAC7D,EAOD,IAAM,EAAc,IAAM,EAAS,OAAO,KAAW,EAAQ,WAAW,CAAC,EAOnE,EAAoB,IAAM,EAAY,EAAE,IAAI,KAAW,EAAQ,KAAK,EAQpE,EAAqB,CAAC,IAAkB,EAAS,KAAK,KAAW,EAAQ,QAAU,CAAK,EAOxF,EAAgB,CAAC,IAAuB,CAS5C,GAPA,kCAAsD,EAAE,QAAQ,KAAK,CACnE,GAAI,cACF,EAAU,QAAQ,UAAU,OAAO,GAAG,EAAW,4BAA4B,GAAG,EAEnF,EAGG,cACF,EAAU,QAAQ,UAAU,IAAI,GAAG,EAAW,4BAA4B,GAAY,EAIxF,EAAU,QAAQ,aAAa,eAAgB,CAAU,EAGzD,IAAM,EAAgB,GAAiB,CAAU,EACjD,OAAO,QAAQ,CAAa,EAAE,QAAQ,EAAE,EAAM,KAAW,CACvD,EAAU,QAAQ,MAAM,YAAY,EAAM,CAAK,EAChD,GAyJH,MArJkD,CAChD,QAAS,EAAU,QACnB,WAEA,cAEA,QAAQ,EAAG,CACT,OAAO,EAAkB,GAG3B,MAAM,CAAC,EAAO,CACZ,IAAM,EAAU,EAAmB,CAAK,EACxC,GAAI,GAAW,CAAC,EAAQ,WAAW,EAAG,CACpC,IAAM,EAAW,EAAkB,EAEnC,GAAI,aAEF,EAAS,QAAQ,KAAK,EAAE,YAAY,IAAM,CAAO,CAAC,EAGlD,OAAQ,YAAY,EAAI,EAI1B,IAAM,EAAW,EAAkB,EACnC,GAAI,EAAS,KAAK,GAAG,IAAM,EAAS,KAAK,GAAG,EAC1C,EAAQ,KAAK,SAAU,CACrB,SAAU,EAAY,EACtB,MAAO,EACP,UACF,CAAC,EAGL,OAAO,MAGT,QAAQ,CAAC,EAAO,CACd,IAAM,EAAU,EAAmB,CAAK,EACxC,GAAI,GAAW,CAAC,EAAQ,WAAW,EAEjC,GAAI,cAGF,GAFyB,EAAY,EAEhB,OAAS,GAAK,CAAC,EAAQ,WAAW,EAAG,CACxD,IAAM,EAAW,EAAkB,EACnC,EAAQ,YAAY,EAAK,EAGzB,IAAM,EAAW,EAAkB,EACnC,GAAI,EAAS,KAAK,GAAG,IAAM,EAAS,KAAK,GAAG,EAC1C,EAAQ,KAAK,SAAU,CACrB,SAAU,EAAY,EACtB,MAAO,EACP,UACF,CAAC,GAGA,KAEL,IAAM,EAAW,EAAkB,EACnC,EAAQ,YAAY,EAAK,EAGzB,IAAM,EAAW,EAAkB,EACnC,GAAI,EAAS,KAAK,GAAG,IAAM,EAAS,KAAK,GAAG,EAC1C,EAAQ,KAAK,SAAU,CACrB,SAAU,EAAY,EACtB,MAAO,EACP,UACF,CAAC,EAIP,OAAO,MAGT,MAAM,EAAG,CAUP,OARA,EAAU,QAAQ,UAAU,OAAO,GAAG,EAAW,mCAAmC,EAEpF,EAAS,QAAQ,KAAW,CAE1B,GAAI,CAAC,EAAW,UAAU,KAAK,KAAK,EAAE,QAAU,EAAQ,KAAK,GAAG,SAC9D,EAAQ,YAAY,EAAK,EAE5B,EACM,MAGT,OAAO,EAAG,CAOR,OALA,EAAU,QAAQ,UAAU,IAAI,GAAG,EAAW,mCAAmC,EAEjF,EAAS,QAAQ,KAAW,CAC1B,EAAQ,YAAY,EAAI,EACzB,EACM,MAGT,aAAa,CAAC,EAAO,CACnB,IAAM,EAAU,EAAmB,CAAK,EACxC,GAAI,EACF,EAAQ,YAAY,EAAK,EAE3B,OAAO,MAGT,cAAc,CAAC,EAAO,CACpB,IAAM,EAAU,EAAmB,CAAK,EACxC,GAAI,EACF,EAAQ,YAAY,EAAI,EAE1B,OAAO,MAGT,UAAU,CAAC,EAAY,CAErB,OADA,EAAc,CAAU,EACjB,MAGT,UAAU,EAAG,CACX,OAAO,EAAU,QAAQ,aAAa,cAAc,cAGtD,EAAE,CAAC,EAAO,EAAS,CAEjB,OADA,EAAQ,GAAG,EAAO,CAAO,EAClB,MAGT,GAAG,CAAC,EAAO,EAAS,CAElB,OADA,EAAQ,IAAI,EAAO,CAAO,EACnB,MAGT,OAAO,EAAG,CAER,EAAS,QAAQ,KAAW,CAC1B,EAAQ,QAAQ,oBAAoB,QAAS,CAAkB,EAC/D,EAAQ,QAAQ,EACjB,EAGD,EAAQ,MAAM,EAGd,EAAU,UAAU,QAAQ,EAEhC,EAGA,MAAO,EAAO,CAEd,MADA,QAAQ,MAAM,mCAAoC,CAAK,EAC7C,MAAM,sCAAuC,EAAgB,SAAS,IAIrE,MIvWf,IACA,IACA,ICWO,IAAM,GAAkB,CAC7B,OAAQ,SACR,IAAK,MACL,KAAM,OACN,MAAO,OACT,EAKa,GAAe,CAC1B,KAAM,OACN,MAAO,QACP,WAAY,YACZ,SAAU,SACZ,ECrBO,IAAM,GAAe,CAAC,IAAwB,CAAC,IAAc,CAClE,IAAQ,WAAW,GAAgB,QAAW,EACxC,EAAgB,GAAG,EAAU,SAAS,OAAO,MAAM,EAAS,YAAY,IAK9E,OAFA,EAAU,QAAQ,UAAU,IAAI,CAAa,EAEtC,IACF,EACH,SAAU,CAKR,WAAW,CAAC,EAAqB,CAE/B,EAAU,QAAQ,UAAU,OAAO,CAAa,EAGhD,IAAM,EAAmB,GAAG,EAAU,SAAS,OAAO,MAAM,EAAY,YAAY,IACpF,EAAU,QAAQ,UAAU,IAAI,CAAgB,GAOlD,WAAW,EAAG,CACZ,OAAO,EAEX,CACF,GCjCK,IAAM,GAAc,CAAC,IAAW,CAAC,IAAc,CACpD,IAAQ,UAAU,IAAO,EAGnB,EAAiB,SAAS,cAAc,KAAK,EAUnD,OATA,EAAe,UAAY,GAAG,EAAU,SAAS,OAAO,YACxD,EAAe,UAAY,EAG3B,EAAU,UAAY,SAAS,cAAc,KAAK,EAClD,EAAU,UAAU,UAAY,GAAG,EAAU,SAAS,OAAO,cAC7D,EAAU,UAAU,YAAY,CAAc,EAC9C,EAAU,QAAQ,YAAY,EAAU,SAAS,EAE1C,IACF,EACH,QAAS,CAMP,UAAU,CAAC,EAAc,CAEvB,OADA,EAAe,UAAY,EACpB,MAOT,UAAU,EAAG,CACX,OAAO,EAAe,WAOxB,UAAU,EAAG,CACX,OAAO,EAEX,CACF,GC3CK,IAAM,GAAY,CAAC,IAAW,CAAC,IAAc,CAClD,IAAQ,QAAQ,IAAO,EAGnB,EAAe,KAEnB,GAAI,GAAS,EAAO,WAAY,CAK9B,GAHA,EAAe,SAAS,cAAc,KAAK,EAC3C,EAAa,UAAY,GAAG,EAAU,SAAS,OAAO,UAElD,EACF,EAAa,YAAc,EAO7B,GAHA,EAAU,UAAU,aAAa,EAAc,EAAU,UAAU,UAAU,EAGzE,EAAO,WAAY,CACrB,IAAM,EAAgB,SAAS,cAAc,KAAK,EAClD,EAAc,UAAY,GAAG,EAAU,SAAS,OAAO,WACvD,EAAU,UAAU,aAAa,EAAe,EAAU,UAAU,UAAU,EAG9E,EAAU,WAAa,CACrB,QAAS,EAMT,UAAU,CAAC,EAAkB,CAC3B,EAAc,MAAM,QAAU,EAAU,QAAU,OAEtD,GAIJ,MAAO,IACF,EACH,MAAO,CAML,QAAQ,CAAC,EAAc,CACrB,GAAI,CAAC,GAAgB,EAEnB,EAAe,SAAS,cAAc,KAAK,EAC3C,EAAa,UAAY,GAAG,EAAU,SAAS,OAAO,UACtD,EAAU,UAAU,aAAa,EAAc,EAAU,QAAQ,WAAW,CAAC,EAG/E,GAAI,EACF,EAAa,YAAc,EAG7B,OAAO,MAOT,QAAQ,EAAG,CACT,OAAO,EAAe,EAAa,aAAe,GAAK,IAOzD,UAAU,EAAG,CACX,OAAO,EAEX,CACF,GC5EK,IAAM,GAAY,CAAC,IAAW,CAAC,IAAc,CAClD,IAAQ,KAAM,EAAc,GAAO,cAAc,IAAS,EACtD,EAAS,EAGP,EAAe,SAAS,cAAc,KAAK,EAOjD,GANA,EAAa,UAAY,GAAG,EAAU,SAAS,OAAO,UAGtD,EAAU,QAAQ,YAAY,aAAa,EAAc,EAAU,QAAQ,WAAW,EAGlF,EACF,EAAU,QAAQ,UAAU,IAAI,GAAG,EAAU,SAAS,OAAO,gBAAgB,EAG7E,EAAa,iBAAiB,QAAS,IAAM,CAC3C,GAAI,EACF,EAAM,EAET,EAIH,GAAI,EACF,EAAU,QAAQ,UAAU,IAAI,GAAG,EAAU,SAAS,OAAO,SAAS,EAIxE,GAAI,EAAO,UACT,EAAU,QAAQ,UAAU,IAAI,GAAG,EAAU,SAAS,OAAO,gBAAgB,EAAO,WAAW,EAIjG,SAAS,iBAAiB,UAAW,CAAC,IAAU,CAC9C,GAAI,EAAM,MAAQ,UAAY,GAAU,EACtC,EAAM,EAET,EAKD,SAAS,CAAI,EAAG,CACd,GAAI,CAAC,GAKH,GAJA,EAAS,GACT,EAAU,QAAQ,UAAU,IAAI,GAAG,EAAU,SAAS,OAAO,SAAS,EACtE,EAAU,OAAO,KAAK,GAAa,IAAI,EAEnC,EAAO,OACT,EAAO,OAAO,GAQpB,SAAS,CAAK,EAAG,CACf,GAAI,GAKF,GAJA,EAAS,GACT,EAAU,QAAQ,UAAU,OAAO,GAAG,EAAU,SAAS,OAAO,SAAS,EACzE,EAAU,OAAO,KAAK,GAAa,KAAK,EAEpC,EAAO,QACT,EAAO,QAAQ,GAKrB,MAAO,IACF,EACH,MAAO,CACL,OACA,QAMA,MAAM,EAAG,CACP,OAAO,GAOT,cAAc,CAAC,EAAqB,CAClC,GAAI,EACF,EAAU,QAAQ,UAAU,IAAI,GAAG,EAAU,SAAS,OAAO,gBAAgB,EAE7E,OAAU,QAAQ,UAAU,OAAO,GAAG,EAAU,SAAS,OAAO,gBAAgB,EAGtF,EAKA,UAAU,EAAG,CAEX,GAAI,EAAa,aAAe,EAAU,QAAQ,WAChD,EAAU,QAAQ,YAAY,aAAa,EAAc,EAAU,QAAQ,WAAW,EAG5F,GC1GK,IAAM,GAAe,CAAC,IAAW,CAAC,IAAc,CAErD,GAAI,EAAO,iBAAmB,GAC5B,OAAO,EAGT,IAAM,EAAW,EAAO,UAAY,GAAgB,OAChD,EAAS,EACT,EAAS,EACT,EAAa,GAGX,EAAa,EAAU,YAAY,SAAW,EAAU,QAMxD,EAAkB,CAAC,IAAU,CACjC,GAAI,CAAC,EAAU,MAAM,OAAO,EAAG,OAM/B,GAJA,EAAa,GACb,SAAS,KAAK,MAAM,WAAa,OAG7B,EAAM,OAAS,aACjB,EAAS,EAAM,QAAQ,GAAG,QAC1B,EAAS,EAAM,QAAQ,GAAG,QAE1B,OAAS,EAAM,QACf,EAAS,EAAM,QAGf,SAAS,iBAAiB,YAAa,CAAc,EACrD,SAAS,iBAAiB,UAAW,CAAa,EAIpD,EAAU,OAAO,KAAK,GAAa,UAAU,GAOzC,EAAiB,CAAC,IAAU,CAChC,GAAI,CAAC,EAAY,OAEjB,IAAI,EAAU,EAEd,GAAI,EAAM,OAAS,YACjB,EAAW,EAAM,QAAQ,GAAG,QAC5B,EAAW,EAAM,QAAQ,GAAG,QAE5B,OAAW,EAAM,QACjB,EAAW,EAAM,QAInB,IAAI,EAAQ,EAEZ,OAAQ,QACD,GAAgB,OAEnB,GADA,EAAQ,EAAW,EACf,EAAQ,EAAG,EAAQ,EACvB,EAAU,QAAQ,MAAM,UAAY,cAAc,OAClD,WAEG,GAAgB,IAEnB,GADA,EAAQ,EAAS,EACb,EAAQ,EAAG,EAAQ,EACvB,EAAU,QAAQ,MAAM,UAAY,eAAe,OACnD,WAEG,GAAgB,KAEnB,GADA,EAAQ,EAAS,EACb,EAAQ,EAAG,EAAQ,EACvB,EAAU,QAAQ,MAAM,UAAY,eAAe,OACnD,WAEG,GAAgB,MAEnB,GADA,EAAQ,EAAW,EACf,EAAQ,EAAG,EAAQ,EACvB,EAAU,QAAQ,MAAM,UAAY,cAAc,OAClD,MAIJ,IAAM,EACJ,IAAa,GAAgB,QAAU,IAAa,GAAgB,IAChE,EAAU,QAAQ,aAClB,EAAU,QAAQ,YAElB,EAAe,KAAK,IAAI,EAAQ,EAAa,CAAC,EAC9C,EAAe,EAAU,QAAQ,mBACvC,GACE,GACA,EAAa,UAAU,SAAS,GAAG,EAAU,SAAS,OAAO,SAAS,EAEtE,EAAa,MAAM,QAAU,GAAG,MAAQ,EAAI,MAO1C,EAAgB,IAAM,CAC1B,GAAI,CAAC,EAAY,OAEjB,EAAa,GACb,SAAS,KAAK,MAAM,WAAa,GAGjC,SAAS,oBAAoB,YAAa,CAAc,EACxD,SAAS,oBAAoB,UAAW,CAAa,EAGrD,IAAM,EACJ,IAAa,GAAgB,QAAU,IAAa,GAAgB,IAChE,EAAU,QAAQ,aAClB,EAAU,QAAQ,YAEpB,EAAY,EAChB,GAAI,EAAU,QAAQ,MAAM,UAAW,CACrC,IAAM,EAAQ,EAAU,QAAQ,MAAM,UAAU,MAC9C,4BACF,EACA,EAAY,EAAQ,WAAW,EAAM,EAAE,EAAI,EAI7C,GAAI,EAAY,EAAc,IAC5B,EAAU,MAAM,MAAM,EACjB,KAEL,EAAU,QAAQ,MAAM,UAAY,GACpC,IAAM,EAAe,EAAU,QAAQ,mBACvC,GACE,GACA,EAAa,UAAU,SAAS,GAAG,EAAU,SAAS,OAAO,SAAS,EAEtE,EAAa,MAAM,QAAU,GAKjC,EAAU,OAAO,KAAK,GAAa,QAAQ,GAI7C,EAAW,iBAAiB,aAAc,EAAiB,CAAE,QAAS,EAAK,CAAC,EAC5E,EAAW,iBAAiB,YAAa,EAAgB,CAAE,QAAS,EAAK,CAAC,EAC1E,EAAW,iBAAiB,WAAY,CAAa,EACrD,EAAW,iBAAiB,YAAa,CAAe,EAGxD,IAAM,EAAU,IAAM,CACpB,EAAW,oBAAoB,aAAc,CAAe,EAC5D,EAAW,oBAAoB,YAAa,CAAc,EAC1D,EAAW,oBAAoB,WAAY,CAAa,EACxD,EAAW,oBAAoB,YAAa,CAAe,EAC3D,SAAS,oBAAoB,YAAa,CAAc,EACxD,SAAS,oBAAoB,UAAW,CAAa,GAIjD,EAAkB,EAAU,WAAW,UAAY,IAAM,IAS/D,OARA,EAAU,UAAY,IACjB,EAAU,UACb,QAAS,IAAM,CACb,EAAQ,EACR,EAAgB,EAEpB,EAEO,GChJF,IAAM,GAAU,EAAG,QAAO,eAC/B,CAAC,KAAsD,IAClD,EACH,QAAS,EAAU,QACnB,UAAW,EAAU,UAErB,IAAI,EAAG,CAEL,OADA,EAAM,KAAK,EACJ,MAGT,KAAK,EAAG,CAEN,OADA,EAAM,MAAM,EACL,MAGT,UAAU,CAAC,EAAc,CAEvB,OADA,EAAU,QAAQ,WAAW,CAAI,EAC1B,MAGT,UAAU,EAAG,CACX,OAAO,EAAU,QAAQ,WAAW,GAGtC,QAAQ,CAAC,EAAc,CAErB,OADA,EAAU,MAAM,SAAS,CAAI,EACtB,MAGT,QAAQ,EAAG,CACT,OAAO,EAAU,MAAM,SAAS,GAGlC,aAAa,CAAC,EAAkB,CAC9B,GAAI,EAAU,WACZ,EAAU,WAAW,WAAW,CAAO,EAEzC,OAAO,MAGT,YAAY,CAAC,EAAgB,CAE3B,OADA,EAAU,UAAU,MAAM,UAAY,EAC/B,MAGT,OAAO,EAAG,CACR,EAAU,QAAQ,GAGpB,UAAU,EAAG,CACX,GAAI,EAAU,WACZ,EAAU,WAAW,EAEvB,OAAO,KAEX,GC9FF,ICIO,IAAM,GAAiB,CAE5B,SAAU,WAEV,MAAO,QAEP,SAAU,UACZ,EAKa,GAAkB,CAE7B,OAAQ,SAER,IAAK,MAEL,KAAM,OAEN,MAAO,OACT,EAmBO,IAAM,GAAkB,CAE7B,QAAS,EAET,QAAS,EAET,QAAS,EAET,QAAS,EAET,QAAS,CACX,EAKa,GAAiB,CAE5B,QAAS,GAAe,SAExB,SAAU,GAAgB,OAE1B,KAAM,GAEN,YAAa,GAEb,YAAa,GAEb,UAAW,GAAgB,QAE3B,MAAO,GAEP,QAAS,GAET,WAAY,MAEZ,gBAAiB,EACnB,EDvEO,IAAM,GAA6B,CACxC,QAAS,GAAe,SACxB,SAAU,GAAgB,OAC1B,KAAM,GAAe,KACrB,YAAa,GAAe,YAC5B,WAAY,GAAe,YAC3B,UAAW,GAAe,UAC1B,eAAgB,GAAe,eACjC,EAOa,GAAmB,CAAC,EAAsB,CAAC,IACtD,EAAsB,GAAe,EAAQ,OAAO,EAOzC,GAAmB,CAAC,IAAwB,CACvD,OAAO,EAAoB,EAAQ,CACjC,IAAK,MACL,WAAY,CACV,KAAM,SACN,aAAc,EAAO,UAAY,GAAe,MAAQ,OAAS,OACnE,EACA,UAAW,EAAO,MAClB,cAAe,CACb,MAAO,GACP,QAAS,EACX,CACF,CAAC,GAQU,GAAe,CAAC,KAAU,CACrC,MAAO,CACL,KAAM,IAAM,EAAK,MAAM,KAAK,EAC5B,MAAO,IAAM,EAAK,MAAM,MAAM,CAChC,EACA,UAAW,CACT,QAAS,IAAM,EAAK,UAAU,QAAQ,CACxC,CACF,GRtCA,IAAM,GAAc,CAAC,EAAsB,CAAC,IAAM,CAChD,IAAM,EAAa,GAAiB,CAAM,EAE1C,GAAI,CACF,IAAM,EAAQ,EACZ,EACA,EAAW,EACX,EAAY,GAAiB,CAAU,CAAC,EACxC,GAAY,CAAU,EACtB,GAAa,CAAU,EACvB,GAAY,CAAU,EACtB,GAAU,CAAU,EACpB,GAAU,CAAU,EACpB,GAAkB,CAAU,EAC5B,EAAc,EACd,CAAC,IAAS,GAAQ,GAAa,CAAI,CAAC,EAAE,CAAI,CAC5C,EAAE,CAAU,EAKZ,OAFA,EAAM,WAAW,EAEV,EACP,MAAO,EAAO,CAEd,MADA,QAAQ,MAAM,wBAAyB,CAAK,EAClC,MAAM,2BAA4B,EAAgB,SAAS,IAI1D,MUlDf,IACA,ICDA,KAQO,IAAM,GAAY,CAAC,IAAyB,KAAa,CAE9D,GAAI,CAAC,EAAO,OAAS,CAAC,EAAO,aAAe,CAAC,EAAU,OACrD,OAAO,EAGT,GAAI,CAEF,IAAM,EAAM,EAAO,KAAO,EACpB,EAAM,EAAO,KAAO,IACpB,EAAc,EAAO,YACrB,GAAuB,EAAc,IAAQ,EAAM,GAAQ,IAC3D,EAAY,EAAO,iBAAmB,KAAO,EAAI,SAAS,GAC1D,EAAa,EAAO,WAAa,GACjC,EAAW,EAAU,SAGrB,EAAS,KAAK,MAAM,KAAK,UAAU,EAAU,MAAM,CAAC,EAGpD,EAAc,EAAO,QAAQ,QAAQ,WAAa,CAAC,EACzD,GAAI,MAAM,QAAQ,CAAW,EAC3B,EAAY,KAAK,EAAS,eAAe,CAAC,EAE1C,OAAO,QAAQ,QAAQ,UAAY,GAAG,KAAe,EAAS,eAAe,IAAI,KAAK,EAMxF,IAAM,EAAoB,EAAO,QAAQ,SAAS,UAAU,SA2C5D,OA1CA,EAAkB,aAAe,CAC/B,KAAM,eACN,QAAS,EACT,QAAS,CACP,IAAK,MACL,UAAW,EAAS,eAAe,EACnC,WAAY,CACV,KAAM,SACN,gBAAiB,OAAO,CAAG,EAC3B,gBAAiB,OAAO,CAAG,EAC3B,gBAAiB,OAAO,CAAW,EACnC,mBAAoB,aACpB,SAAU,EAAa,KAAO,IAC9B,gBAAiB,EAAa,OAAS,QACvC,aAAc,OAAO,CAAW,EAChC,oBAAqB,GACvB,EACA,MAAO,CACL,KAAM,GAAG,IACX,CACF,CACF,EAGA,EAAkB,kBAAoB,CACpC,KAAM,oBACN,QAAS,EACT,QAAS,CACP,IAAK,MACL,UAAW,EAAS,cAAc,EAClC,WAAY,CACV,cAAe,OACf,oBAAqB,GACvB,EACA,KAAM,EAAU,CAAW,EAC3B,MAAO,CACL,KAAM,GAAG,IACX,CACF,CACF,EAGO,IACF,EACH,QACF,EACA,MAAO,EAAO,CAEd,OADA,QAAQ,KAAK,sDAAuD,CAAK,EAClE,ICnFJ,IAAM,GAAgB,CAE3B,QAAS,UAET,UAAW,YAEX,SAAU,WAEV,MAAO,OACT,EAMa,GAAe,CAE1B,GAAI,GAEJ,EAAG,GAEH,EAAG,GAEH,EAAG,GAEH,GAAI,EACN,EAYa,GAAsB,CAEjC,YAAa,GAEb,oBAAqB,GAErB,qBAAsB,GAEtB,WAAY,GAEZ,aAAc,EAEd,4BAA6B,GAE7B,yBAA0B,KAE1B,UAAW,EAEX,SAAU,EAEV,WAAY,EAEZ,6BAA8B,EAE9B,WAAY,EAEZ,aAAc,CAChB,EAMa,GAAgB,CAE3B,OAAQ,SAER,MAAO,QAEP,MAAO,QAEP,KAAM,OAEN,MAAO,QAEP,IAAK,KACP,EAMa,GAAmB,CAE9B,MAAO,QAEP,IAAK,KACP,EAMa,GAAkB,CAE7B,IAAK,EAEL,IAAK,IAEL,MAAO,EAEP,KAAM,EAEN,SAAU,GAEV,MAAO,GAAc,QAErB,KAAM,KAEN,MAAO,GAEP,WAAY,GAEZ,cAAe,GAEf,MAAO,GAEP,SAAU,GAEV,cAAe,GAAiB,MAEhC,eAAgB,GAAiB,KACnC,EC5HO,IAAM,GAAa,CAAC,IAAyB,CAAC,IAAc,CAKjE,GAHmB,EAAO,WAAa,GAIrC,WAAW,IAAM,CACf,EAAiB,GAChB,CAAC,EAMN,SAAS,CAAgB,EAAG,CAO1B,GANA,EAAU,QAAQ,UAAU,IAC1B,GAAG,EAAU,SAAS,QAAQ,aAChC,EACA,EAAU,QAAQ,aAAa,gBAAiB,MAAM,EAGlD,EAAU,WAAW,OACvB,EAAU,UAAU,OAAO,SAAW,GACtC,EAAU,UAAU,OAAO,aAAa,gBAAiB,MAAM,EAGjE,GAAI,EAAO,OAAS,EAAU,WAAW,aACvC,EAAU,UAAU,aAAa,SAAW,GAC5C,EAAU,UAAU,aAAa,aAAa,gBAAiB,MAAM,EAIvE,GAAI,EAAU,WACZ,EAAU,WAAW,EAOzB,SAAS,CAAe,EAAG,CAOzB,GANA,EAAU,QAAQ,UAAU,OAC1B,GAAG,EAAU,SAAS,QAAQ,aAChC,EACA,EAAU,QAAQ,aAAa,gBAAiB,OAAO,EAGnD,EAAU,WAAW,OACvB,EAAU,UAAU,OAAO,SAAW,EACtC,EAAU,UAAU,OAAO,aAAa,gBAAiB,OAAO,EAGlE,GAAI,EAAO,OAAS,EAAU,WAAW,aACvC,EAAU,UAAU,aAAa,SAAW,EAC5C,EAAU,UAAU,aAAa,aAAa,gBAAiB,OAAO,EAIxE,GAAI,EAAU,WACZ,EAAU,WAAW,EAOzB,SAAS,CAAc,EAAG,CACxB,OACE,OAAO,OAAO,EAAa,EAAE,KAAK,CAAC,IACjC,EAAU,QAAQ,UAAU,SAC1B,GAAG,EAAU,SAAS,QAAQ,MAAM,GACtC,CACF,GAAK,GAAc,QAOvB,SAAS,CAAa,EAAG,CAUvB,OARiB,OAAO,KAAK,EAAY,EAGf,KAAK,CAAC,IAC9B,EAAU,QAAQ,UAAU,SAC1B,GAAG,EAAU,SAAS,QAAQ,MAAM,EAAQ,YAAY,GAC1D,CACF,GACmB,KAIrB,MAAO,IACF,EAGH,SAAU,CAKR,MAAM,EAAG,CAEP,OADA,EAAgB,EACT,MAOT,OAAO,EAAG,CAER,OADA,EAAiB,EACV,MAOT,UAAU,EAAG,CACX,OAAO,EAAU,QAAQ,UAAU,SACjC,GAAG,EAAU,SAAS,QAAQ,aAChC,EAEJ,EAGA,WAAY,CAMV,QAAQ,CAAC,EAAoB,CAS3B,GAPA,OAAO,OAAO,EAAa,EAAE,QAAQ,CAAC,IAAc,CAClD,EAAU,QAAQ,UAAU,OAC1B,GAAG,EAAU,SAAS,QAAQ,MAAM,GACtC,EACD,EAGG,IAAU,GAAc,QAC1B,EAAU,QAAQ,UAAU,IAC1B,GAAG,EAAU,SAAS,QAAQ,MAAM,GACtC,EAGF,OAAO,MAOT,QAAQ,EAAG,CACT,OAAO,EAAe,GAQxB,OAAO,CAAC,EAAkB,CAEP,OAAO,KAAK,EAAY,EAGhC,QAAQ,CAAC,IAAY,CAC5B,EAAU,QAAQ,UAAU,OAC1B,GAAG,EAAU,SAAS,QAAQ,MAAM,EAAQ,YAAY,GAC1D,EACD,EAGD,IAAI,EACJ,GAAI,OAAO,IAAS,UAAY,KAAQ,GACtC,EAAU,EACL,QAAI,OAAO,IAAS,SAAU,CAEnC,IAAM,EAAQ,OAAO,QAAQ,EAAY,EAAE,KACzC,GAAI,KAAW,IAAU,CAC3B,EACA,EAAU,EAAQ,EAAM,GAAK,KAE7B,OAAU,KAQZ,OAJA,EAAU,QAAQ,UAAU,IAC1B,GAAG,EAAU,SAAS,QAAQ,MAAM,EAAQ,YAAY,GAC1D,EAEO,MAOT,OAAO,EAAG,CACR,OAAO,EAAc,GAQvB,SAAS,CAAC,EAAe,CAIvB,GAHA,EAAO,MAAQ,EAGX,EAAU,OACZ,EAAU,OAAO,gBAAgB,EAGnC,OAAO,MAQT,gBAAgB,CAAC,EAAe,CAE9B,OADA,EAAO,UAAY,EACZ,KAEX,CACF,GCvOK,IAAM,GAAiB,CAC5B,EACA,EACA,EACA,IACG,CAGH,IAAM,EAAa,EAAM,WAAW,YAAc,CAAC,EAC7C,EAAY,EAAM,WAAa,CAAC,EAGhC,EAAY,EAAU,WAAa,EAAW,WAAa,KAC3D,EAAS,EAAU,QAAU,EAAW,QAAU,KAClD,EAAc,EAAU,aAAe,EAAW,aAAe,KACjE,EACJ,EAAU,cAAgB,EAAW,cAAgB,KACjD,EACJ,EAAU,mBAAqB,EAAW,mBAAqB,MAI/D,uBAAuB,IAAM,EAC7B,cAAc,CAAC,IAAU,EACzB,QAAQ,CAAC,IAAU,EACnB,kBAAkB,IAAM,GACxB,SAAS,IAAM,IACb,GAEI,eAAe,KAAO,CAAE,iBAAkB,EAAM,IAAO,EAG3D,EAAuB,GACvB,EAAW,EACT,EAAiB,EAGnB,EAAoB,KAGlB,EAAuB,IAAM,CACjC,GAAI,EAAM,eACR,aAAa,EAAM,cAAc,EACjC,EAAM,eAAiB,MAIrB,EAAiB,IAAM,CAE3B,GADA,EAAqB,EACjB,EAAa,EAAgB,EAAa,EAAK,EACnD,GAAI,EAAmB,EAAgB,EAAmB,EAAK,GAG3D,EAAmB,CAAC,IAAW,CAEnC,GADA,EAAe,EACX,GAAU,EAAO,UAAW,EAAgB,EAAQ,EAAI,GAGxD,EAAmB,CAAC,EAAQ,EAAQ,IAAM,CAE9C,GADA,EAAqB,EACjB,CAAC,GAAU,CAAC,EAAO,UAAW,OAElC,GAAI,EAAQ,EACV,EAAM,eAAiB,WAAW,IAAM,CACtC,EAAgB,EAAQ,EAAK,GAC5B,CAAK,EAER,OAAgB,EAAQ,EAAK,GAK3B,EAAqB,IAAM,CAE/B,GAAI,EACF,EAAO,UAAU,OACf,GAAG,EAAM,UAAU,SAAS,eAAe,YAC7C,EACF,GAAI,EACF,EAAa,UAAU,OACrB,GAAG,EAAM,UAAU,SAAS,eAAe,YAC7C,EAGF,GAAI,CACF,IAAM,EAAa,EAAM,UAAU,SAAS,wBAAwB,EAKpE,GAJA,SAAS,iBAAiB,IAAI,GAAY,EAAE,QAAQ,CAAC,IAAO,CAC1D,EAAG,UAAU,OAAO,CAAU,EAC/B,EAGC,SAAS,eAAe,UAAU,SAChC,EAAM,UAAU,SAAS,eAAe,CAC1C,EAEC,SAAS,cAA8B,KAAK,EAE/C,MAAO,EAAO,CACd,QAAQ,KAAK,iCAAkC,CAAK,IAOlD,EAAwB,CAAC,EAAG,EAAiB,KAAU,CAE3D,GACE,CAAC,EAAM,WACN,EAAM,UAAU,UAAY,EAAM,UAAU,SAAS,WAAW,EAEjE,OAIF,GAAI,EAAE,OAAS,YACb,EAAE,eAAe,EAEnB,EAAE,gBAAgB,EAElB,EAAe,EACf,EAAmB,EAGnB,EAAW,EAAE,KAAK,SAAS,OAAO,EAAI,EAAE,QAAQ,GAAG,QAAU,EAAE,QAG/D,EAAM,SAAW,GACjB,EAAM,QAAU,GAChB,EAAuB,GACvB,EAAM,aAAe,EAAiB,SAAW,QACjD,EAAM,aAAe,EAAiB,EAAoB,EAG1D,EAAiB,EAAM,YAAY,EAGnC,SAAS,iBAAiB,YAAa,CAAe,EACtD,SAAS,iBAAiB,UAAW,CAAa,EAClD,SAAS,iBAAiB,YAAa,EAAiB,CAAE,QAAS,EAAM,CAAC,EAC1E,SAAS,iBAAiB,WAAY,CAAa,EAEnD,EAAO,EACP,EAAa,GAAc,MAAO,CAAC,GAM/B,EAAuB,CAAC,IAAM,CAElC,GACE,CAAC,EAAM,WACN,EAAM,UAAU,UAAY,EAAM,UAAU,SAAS,WAAW,GACjE,CAAC,EAED,OAIF,GAAI,EAAE,OAAS,YACb,EAAE,eAAe,EAEnB,EAAe,EACf,EAAmB,EAGnB,IAAI,EAAiB,GAErB,GAAI,CACF,IAAM,EAAW,EAAE,KAAK,SAAS,OAAO,EACpC,EAAE,QAAQ,GAAG,QACb,EAAE,QAGF,EAAW,EAAqB,CAAQ,EAC5C,GAAI,EAAO,aAAe,EAAM,KAAO,EACrC,EAAW,EAAY,CAAQ,EAGjC,GAFA,EAAW,EAAM,EAAU,EAAM,IAAK,EAAM,GAAG,EAE3C,EAAO,OAAS,EAAM,cAAgB,KAAM,CAE9C,IAAM,GAAc,KAAK,IAAI,EAAW,EAAM,KAAK,EAGnD,EAFqB,KAAK,IAAI,EAAW,EAAM,WAAW,EAE1B,GAChC,EACK,EAAM,YAAc,EACpB,EAAM,MAAQ,EAGnB,QACE,EAAO,UACP,EAAM,UAAU,QAChB,EAAM,UAAU,OAAO,SAGvB,EAAM,UAAU,OAAO,SAAS,EAAU,EAAK,EAG/C,OAAM,MAAQ,EAKlB,EAAO,EACP,EAAa,GAAc,MAAO,CAAC,EACnC,MAAO,EAAO,CACd,QAAQ,KAAK,8BAA+B,CAAK,EAWnD,GAPA,EAAM,aAAe,EAAiB,SAAW,QACjD,EAAM,aAAe,EAAiB,EAAoB,EAG1D,EAAW,EAAE,KAAK,SAAS,OAAO,EAAI,EAAE,QAAQ,GAAG,QAAU,EAAE,QAG3D,EAAO,UAAY,CAAC,EAAO,MAE7B,EAAiB,EAAM,YAAY,EAGnC,SAAS,iBAAiB,YAAa,CAAe,EACtD,SAAS,iBAAiB,UAAW,CAAa,EAClD,SAAS,iBAAiB,YAAa,EAAiB,CACtD,QAAS,EACX,CAAC,EACD,SAAS,iBAAiB,WAAY,CAAa,EAGnD,EAAM,QAAU,GAEhB,EAAa,GAAc,MAAO,CAAC,EAGnC,OAAM,SAAW,GACjB,EAAM,QAAU,GAChB,EAAuB,GAGvB,EAAiB,EAAM,YAAY,EAGnC,SAAS,iBAAiB,YAAa,CAAe,EACtD,SAAS,iBAAiB,UAAW,CAAa,EAClD,SAAS,iBAAiB,YAAa,EAAiB,CACtD,QAAS,EACX,CAAC,EACD,SAAS,iBAAiB,WAAY,CAAa,EAEnD,EAAO,EACP,EAAa,GAAc,MAAO,CAAC,GAOjC,EAAkB,CAAC,IAAM,CAC7B,GAAI,CAAC,EAAM,cAAgB,CAAC,EAAW,OACvC,EAAE,eAAe,EAEjB,GAAI,CAEF,IAAM,EAAW,EAAE,KAAK,SAAS,OAAO,EACpC,EAAE,QAAQ,GAAG,QACb,EAAE,QAGN,GACE,CAAC,GACD,KAAK,IAAI,EAAW,CAAQ,GAAK,EAEjC,EAAuB,GACvB,EAAM,SAAW,GACjB,EAAM,UAAU,QAAQ,UAAU,IAChC,GAAG,EAAM,UAAU,SAAS,QAAQ,aACtC,EAIF,IAAI,EAAW,EAAqB,CAAQ,EAC5C,GAAI,EAAO,aAAe,EAAM,KAAO,EACrC,EAAW,EAAY,CAAQ,EACjC,EAAW,EAAM,EAAU,EAAM,IAAK,EAAM,GAAG,EAG/C,IAAM,EAAiB,EAAM,eAAiB,SAE9C,GAAI,EAAO,OAAS,EAAM,cAAgB,KACxC,GAAI,EAEF,GAAI,GAAY,EAAM,MACpB,EAAM,YAAc,EAGpB,OAAiB,EAAM,aAAc,CAAC,EACtC,EAAM,YAAc,EAAM,MAC1B,EAAM,MAAQ,EACd,EAAM,aAAe,QACrB,EAAM,aAAe,EACrB,EAAiB,EAAM,YAAY,EAIrC,QAAI,GAAY,EAAM,YACpB,EAAM,MAAQ,EAGd,OAAiB,EAAM,aAAc,CAAC,EACtC,EAAM,MAAQ,EAAM,YACpB,EAAM,YAAc,EACpB,EAAM,aAAe,SACrB,EAAM,aAAe,EACrB,EAAiB,EAAM,YAAY,EAGlC,KAEL,GAAI,EAAO,SACT,EAAM,cAAgB,EAAM,MAE9B,EAAM,MAAQ,EAGhB,EAAO,EACP,EAAa,GAAc,MAAO,CAAC,EACnC,MAAO,EAAO,CACd,QAAQ,KAAK,4BAA6B,CAAK,IAO7C,EAAgB,CAAC,IAAM,CAC3B,GAAI,CAAC,EAAM,aAAc,OACzB,EAAE,eAAe,EAGjB,EAAM,SAAW,GACjB,EAAM,QAAU,GAChB,EAAuB,GACvB,EAAM,UAAU,QAAQ,UAAU,OAChC,GAAG,EAAM,UAAU,SAAS,QAAQ,aACtC,EAGA,EAAiB,EAAM,aAAc,IAAI,EAGzC,SAAS,oBAAoB,YAAa,CAAe,EACzD,SAAS,oBAAoB,UAAW,CAAa,EACrD,SAAS,oBAAoB,YAAa,CAAe,EACzD,SAAS,oBAAoB,WAAY,CAAa,EAGtD,EAAM,aAAe,KACrB,EAAO,EAGP,EAAa,GAAc,OAAQ,CAAC,EACpC,EAAa,GAAc,IAAK,CAAC,GAM7B,EAAgB,CAAC,EAAG,EAAiB,KAAU,CACnD,GAAI,EAAM,UAAU,UAAY,EAAM,UAAU,SAAS,WAAW,EAClE,OAEF,IAAM,EAAO,EAAM,MAAQ,EACvB,EAAW,EAAiB,EAAM,YAAc,EAAM,MACpD,GAAW,EAAE,SAAW,EAAO,GAAK,EAG1C,GAAI,EAAE,MAAQ,MAAO,OAErB,IAAI,GAAe,GAEnB,OAAQ,EAAE,SACH,iBACA,UACH,EAAE,eAAe,EACjB,EAAW,KAAK,IAAI,EAAW,GAAU,EAAM,GAAG,EAClD,GAAe,GACf,UAEG,gBACA,YACH,EAAE,eAAe,EACjB,EAAW,KAAK,IAAI,EAAW,GAAU,EAAM,GAAG,EAClD,GAAe,GACf,UAEG,OACH,EAAE,eAAe,EACjB,EAAW,EAAM,IACjB,GAAe,GACf,UAEG,MACH,EAAE,eAAe,EACjB,EAAW,EAAM,IACjB,GAAe,GACf,UAEG,SACH,EAAE,eAAe,EACjB,EAAW,KAAK,IAAI,EAAW,EAAO,GAAI,EAAM,GAAG,EACnD,GAAe,GACf,UAEG,WACH,EAAE,eAAe,EACjB,EAAW,KAAK,IAAI,EAAW,EAAO,GAAI,EAAM,GAAG,EACnD,GAAe,GACf,cAGA,OAGJ,GAAI,CAAC,GAAc,OASnB,GANA,EAAM,aAAe,EAAiB,EAAoB,EAG1D,EAAiB,EAAM,YAAY,EAG/B,EACF,EAAM,YAAc,EACf,KAEL,GAAI,EAAO,SACT,EAAM,cAAgB,EAAM,MAE9B,EAAM,MAAQ,EAIhB,EAAO,EACP,EAAa,GAAc,MAAO,CAAC,EACnC,EAAa,GAAc,OAAQ,CAAC,GAMhC,EAAc,CAAC,EAAG,EAAiB,KAAU,CACjD,GAAI,EAAM,UAAU,UAAY,EAAM,UAAU,SAAS,WAAW,EAClE,OAGF,IAAM,EAAgB,EAAiB,EAAe,EAGtD,GAAI,GAAqB,IAAsB,EAC7C,EAAe,EAGjB,EAAoB,EAGpB,EAAc,UAAU,IACtB,GAAG,EAAM,UAAU,SAAS,eAAe,YAC7C,EACA,EAAiB,EAAiB,EAAoB,CAAW,EACjE,EAAM,aAAe,EAAiB,EAAoB,EAE1D,EAAa,GAAc,MAAO,CAAC,GAM/B,GAAa,CAAC,EAAG,EAAiB,KAAU,EAC1B,EAAiB,EAAe,GACxC,UAAU,OACtB,GAAG,EAAM,UAAU,SAAS,eAAe,YAC7C,EAGA,IAAM,EAAgB,EAAE,cAGxB,GAAI,CAAC,GAAiB,KAFF,EAAiB,EAAS,GAG5C,EAAiB,EAAiB,EAAoB,EAAa,GAAG,EAGxE,EAAa,GAAc,KAAM,CAAC,GAiGpC,MAAO,CAEL,wBACA,uBACA,kBACA,gBAGA,gBACA,cACA,cAGA,oBAxG0B,IAAM,CAChC,GAAI,CAAC,EAAM,WAAa,CAAC,EAAQ,CAC/B,QAAQ,KACN,4DACF,EACA,OAuBF,GAnBA,EAAU,iBAAiB,YAAa,CAAoB,EAC5D,EAAU,iBAAiB,aAAc,EAAsB,CAC7D,QAAS,EACX,CAAC,EAGD,EAAO,iBAAiB,YAAa,CAAC,IACpC,EAAsB,EAAG,EAAK,CAChC,EACA,EAAO,iBACL,aACA,CAAC,IAAM,EAAsB,EAAG,EAAK,EACrC,CAAE,QAAS,EAAK,CAClB,EACA,EAAO,iBAAiB,UAAW,CAAC,IAAM,EAAc,EAAG,EAAK,CAAC,EACjE,EAAO,iBAAiB,QAAS,CAAC,IAAM,EAAY,EAAG,EAAK,CAAC,EAC7D,EAAO,iBAAiB,OAAQ,CAAC,IAAM,GAAW,EAAG,EAAK,CAAC,EAGvD,EAAO,OAAS,EAClB,EAAa,iBAAiB,YAAa,CAAC,IAC1C,EAAsB,EAAG,EAAI,CAC/B,EACA,EAAa,iBACX,aACA,CAAC,IAAM,EAAsB,EAAG,EAAI,EACpC,CAAE,QAAS,EAAK,CAClB,EACA,EAAa,iBAAiB,UAAW,CAAC,IAAM,EAAc,EAAG,EAAI,CAAC,EACtE,EAAa,iBAAiB,QAAS,CAAC,IAAM,EAAY,EAAG,EAAI,CAAC,EAClE,EAAa,iBAAiB,OAAQ,CAAC,IAAM,GAAW,EAAG,EAAI,CAAC,GAkElE,sBA3D4B,IAAM,CAClC,GAAI,CAAC,EAAM,UAAW,OAGtB,GAAI,EACF,EAAU,oBAAoB,YAAa,CAAoB,EAC/D,EAAU,oBAAoB,aAAc,CAAoB,EAIlE,GAAI,EACF,EAAO,oBAAoB,YAAa,CAAC,IACvC,EAAsB,EAAG,EAAK,CAChC,EACA,EAAO,oBAAoB,aAAc,CAAC,IACxC,EAAsB,EAAG,EAAK,CAChC,EACA,EAAO,oBAAoB,UAAW,CAAC,IAAM,EAAc,EAAG,EAAK,CAAC,EACpE,EAAO,oBAAoB,QAAS,CAAC,IAAM,EAAY,EAAG,EAAK,CAAC,EAChE,EAAO,oBAAoB,OAAQ,CAAC,IAAM,GAAW,EAAG,EAAK,CAAC,EAIhE,GAAI,EAAO,OAAS,EAClB,EAAa,oBAAoB,YAAa,CAAC,IAC7C,EAAsB,EAAG,EAAI,CAC/B,EACA,EAAa,oBAAoB,aAAc,CAAC,IAC9C,EAAsB,EAAG,EAAI,CAC/B,EACA,EAAa,oBAAoB,UAAW,CAAC,IAC3C,EAAc,EAAG,EAAI,CACvB,EACA,EAAa,oBAAoB,QAAS,CAAC,IAAM,EAAY,EAAG,EAAI,CAAC,EACrE,EAAa,oBAAoB,OAAQ,CAAC,IAAM,GAAW,EAAG,EAAI,CAAC,EAIrE,SAAS,oBAAoB,YAAa,CAAe,EACzD,SAAS,oBAAoB,UAAW,CAAa,EACrD,SAAS,oBAAoB,YAAa,CAAe,EACzD,SAAS,oBAAoB,WAAY,CAAa,GAqBtD,mBACA,mBACA,iBACA,oBACF,GCrmBK,IAAM,GAAiB,CAAC,IAAyB,CAAC,IAAc,CAErE,GAAI,CAAC,EAAU,QAEb,OADA,QAAQ,KAAK,sDAAsD,EAC5D,EAIT,IAAM,EAAQ,CACZ,YACA,MAAO,EAAO,QAAU,OAAY,EAAO,MAAQ,EACnD,YAAa,EAAO,cAAgB,OAAY,EAAO,YAAc,KACrE,IAAK,EAAO,MAAQ,OAAY,EAAO,IAAM,EAC7C,IAAK,EAAO,MAAQ,OAAY,EAAO,IAAM,IAC7C,KAAM,EAAO,OAAS,OAAY,EAAO,KAAO,EAChD,SAAU,GACV,QAAS,GACT,aAAc,KACd,aAAc,KACd,eAAgB,IAClB,EAGM,EAAe,CACnB,YAAY,CAAC,EAAW,EAAgB,KAAM,CAC5C,IAAM,EAAY,CAChB,OAAQ,EAAM,UACd,MAAO,EAAM,MACb,YAAa,EAAM,YACnB,gBACA,eAAgB,IAAM,CACpB,EAAU,iBAAmB,IAE/B,iBAAkB,EACpB,EAGA,OADA,EAAM,UAAU,KAAK,EAAW,CAAS,EAClC,EAEX,EASM,EAAgB,IAAM,CAE1B,GAAI,CAAC,EAAM,UACT,MAAO,CAAC,EAIV,IAAM,EAAa,EAAM,UAAU,YAAc,CAAC,EAC5C,EAAY,EAAM,UAExB,MAAO,CACL,UAAW,EAAU,WAAa,EAAW,UAC7C,OAAQ,EAAU,QAAU,EAAW,OACvC,YAAa,EAAU,aAAe,EAAW,YACjD,aAAc,EAAU,cAAgB,EAAW,aACnD,kBACE,EAAU,mBAAqB,EAAW,qBAEzC,CACL,GAOI,EAAgB,CAAC,IAAU,CAC/B,IAAM,EAAQ,EAAM,IAAM,EAAM,IAChC,OAAO,IAAU,EAAI,GAAM,EAAQ,EAAM,KAAO,EAAS,KAOrD,EAAqB,IAAM,CAC/B,IAAM,EAAa,EAAc,GACzB,SAAQ,aAAc,EAE9B,GAAI,CAAC,GAAU,CAAC,EAAW,OAAO,KAElC,GAAI,CACF,IAAM,EAAa,EAAO,sBAAsB,EAC1C,EAAgB,EAAU,sBAAsB,EAChD,EAAa,EAAW,OAAS,GAAoB,YACrD,EAAY,EAAc,MAG1B,EACH,GAAoB,aAAe,EAAa,IAE7C,GADgB,EAAM,aAAe,EAAI,GACP,EAAa,IAErD,MAAO,CAAE,aAAY,YAAW,iBAAgB,gBAAe,EAC/D,MAAO,EAAO,CAEd,OADA,QAAQ,KAAK,sCAAuC,CAAK,EAClD,CACL,WAAY,GAAoB,YAChC,UAAW,IACX,eAAgB,EAChB,eAAgB,CAClB,IAQE,EAA0B,CAAC,EAAc,EAAY,MAAQ,CAEjE,IAAM,EAAkB,GAAoB,aAAe,EAAa,IAClE,EAAU,EACV,EAAU,IAAM,EAChB,EAAc,EAAU,EAE9B,GAAI,GAAgB,EAAG,OAAO,EAC9B,GAAI,GAAgB,IAAK,OAAO,EAChC,OAAO,EAAW,EAAe,IAAO,GAOpC,EAAuB,CAAC,IAAa,CACzC,IAAM,EAAa,EAAc,GACzB,SAAQ,aAAc,EAE9B,GAAI,CAAC,GAAU,CAAC,EAAW,OAAO,EAAM,IAExC,GAAI,CACF,IAAM,EAAgB,EAAU,sBAAsB,EAChD,EAAQ,EAAM,IAAM,EAAM,IAG1B,EAAW,EAAc,KAAO,GAAoB,aACpD,EAAY,EAAc,MAAQ,GAAoB,aACtD,EAAiB,EAAY,EAM7B,GAJmB,KAAK,IAC5B,EACA,KAAK,IAAI,EAAW,CAAQ,CAC9B,EAC+C,GAAY,EAE3D,OAAO,EAAM,IAAM,EAAqB,EACxC,MAAO,EAAO,CAEd,OADA,QAAQ,KAAK,yCAA0C,CAAK,EACrD,EAAM,MAQX,EAAc,CAAC,IAAU,CAC7B,IAAM,EAAO,EAAM,KACnB,GAAI,CAAC,GAAQ,GAAQ,EAAG,OAAO,EAE/B,IAAM,EAAQ,KAAK,OAAO,EAAQ,EAAM,KAAO,CAAI,EACnD,OAAO,EAAM,IAAM,EAAQ,GAOvB,EAAQ,CAAC,EAAO,EAAK,IAAQ,KAAK,IAAI,KAAK,IAAI,EAAO,CAAG,EAAG,CAAG,EAM/D,EAAwB,IAAM,CAClC,IAAM,EAAa,EAAc,GACzB,SAAQ,YAAW,cAAa,eAAc,qBACpD,EAEF,GAAI,CAAC,GAAU,CAAC,EAAW,OAE3B,IAAM,EAAO,EAAmB,EAChC,GAAI,CAAC,EAAM,OAEX,IAAQ,aAAc,EAGhB,EAAU,EAAc,EAAM,KAAK,EACnC,EAAkB,EAAwB,EAAS,CAAS,EAKlE,GAHA,EAAO,MAAM,KAAO,GAAG,KACvB,EAAO,MAAM,UAAY,wBAErB,EACF,EAAY,MAAM,KAAO,GAAG,KAC5B,EAAY,MAAM,UAAY,mBAIhC,GAAI,EAAO,OAAS,GAAgB,EAAM,cAAgB,KAAM,CAC9D,IAAM,EAAgB,EAAc,EAAM,WAAW,EAC/C,EAAwB,EAC5B,EACA,CACF,EAKA,GAHA,EAAa,MAAM,KAAO,GAAG,KAC7B,EAAa,MAAM,UAAY,wBAE3B,EACF,EAAkB,MAAM,KAAO,GAAG,KAClC,EAAkB,MAAM,UAAY,mBAKxC,GAAI,EACF,EAAO,aAAa,gBAAiB,OAAO,EAAM,KAAK,CAAC,GAQtD,EAAqB,IAAM,CAC/B,IAAM,EAAa,EAAc,GACzB,cAAa,qBAAsB,EAE3C,GAAI,CAAC,EAAa,OAElB,IAAM,EAAY,EAAO,iBAAmB,CAAC,IAAU,EAAM,SAAS,GAGtE,GAFA,EAAY,YAAc,EAAU,EAAM,KAAK,EAE3C,EAAO,OAAS,GAAqB,EAAM,cAAgB,KAC7D,EAAkB,YAAc,EAAU,EAAM,WAAW,GAQzD,EAAkB,CAAC,EAAe,IAAS,CAC/C,GAAI,CAAC,GAAiB,CAAC,EAAO,UAAW,OAEzC,IAAM,EAAc,EAAM,UAAU,SAAS,cAAc,EAC3D,EAAc,UAAU,EAAO,MAAQ,UAAU,GAAG,YAAsB,GAOtE,EAAgB,IAAM,GAQtB,EAAc,IAAM,GAQpB,EAAS,IAAM,CACnB,GAAI,CAKF,GAJA,EAAsB,EACtB,EAAmB,EAGf,EAAU,WAEZ,EAAU,WAAW,CAAK,EAE5B,MAAO,EAAO,CACd,QAAQ,KAAK,sBAAuB,CAAK,IAgBvC,EAAW,GAAe,EAAQ,EAXrB,CACjB,gBACA,uBACA,cACA,QACA,kBACA,SAAU,EACV,QACF,EAG2D,CAAY,EAGjE,EAAiB,IAAM,CAC3B,GAAI,CAEF,IAAM,EAAa,EAAc,EAEjC,GAAI,CAAC,EAAW,OAAQ,CACtB,QAAQ,KACN,wEACF,EACA,OAGF,IAAQ,SAAQ,gBAAiB,EAGjC,GAAI,GAKF,GAJA,EAAO,aAAa,gBAAiB,OAAO,EAAM,GAAG,CAAC,EACtD,EAAO,aAAa,gBAAiB,OAAO,EAAM,GAAG,CAAC,EACtD,EAAO,aAAa,gBAAiB,OAAO,EAAM,KAAK,CAAC,EAEpD,EAAO,OAAS,GAAgB,EAAM,cAAgB,KACxD,EAAa,aAAa,gBAAiB,OAAO,EAAM,GAAG,CAAC,EAC5D,EAAa,aAAa,gBAAiB,OAAO,EAAM,GAAG,CAAC,EAC5D,EAAa,aAAa,gBAAiB,OAAO,EAAM,WAAW,CAAC,EAKxE,EAAS,oBAAoB,EAG7B,EAAO,EACP,MAAO,EAAO,CACd,QAAQ,MAAM,wCAAyC,CAAK,IAKhE,GAAI,EAAU,UAAW,CACvB,IAAM,EAAkB,EAAU,UAAU,UAAY,IAAM,IAC9D,EAAU,UAAU,QAAU,IAAM,CAClC,EAAS,sBAAsB,EAC/B,EAAgB,GAUpB,OALA,WAAW,IAAM,CACf,EAAe,GACd,CAAC,EAGG,IACF,EAEH,OAAQ,CAON,QAAQ,CAAC,EAAO,EAAe,GAAM,CACnC,IAAM,EAAW,EAAM,EAAO,EAAM,IAAK,EAAM,GAAG,EAKlD,GAHA,EAAM,MAAQ,EACd,EAAO,EAEH,EACF,EAAa,aAAa,GAAc,MAAM,EAGhD,OAAO,MAOT,QAAQ,EAAG,CACT,OAAO,EAAM,OASf,cAAc,CAAC,EAAO,EAAe,GAAM,CACzC,GAAI,CAAC,EAAO,MAAO,OAAO,KAE1B,IAAM,EAAW,EAAM,EAAO,EAAM,IAAK,EAAM,GAAG,EAIlD,GAHA,EAAM,YAAc,EACpB,EAAO,EAEH,EACF,EAAa,aAAa,GAAc,MAAM,EAGhD,OAAO,MAOT,cAAc,EAAG,CACf,OAAO,EAAO,MAAQ,EAAM,YAAc,MAQ5C,MAAM,CAAC,EAAK,CACV,EAAM,IAAM,EAGZ,IAAM,EAAa,EAAc,EACjC,GAAI,EAAW,OACb,EAAW,OAAO,aAAa,gBAAiB,OAAO,CAAG,CAAC,EAG7D,GAAI,EAAO,OAAS,EAAW,aAC7B,EAAW,aAAa,aAAa,gBAAiB,OAAO,CAAG,CAAC,EAInE,GAAI,EAAM,MAAQ,EAAK,EAAM,MAAQ,EACrC,GACE,EAAO,OACP,EAAM,cAAgB,MACtB,EAAM,YAAc,EAEpB,EAAM,YAAc,EAItB,GAAI,EAAO,OAAS,EAAO,WACzB,EAAc,EAIhB,OADA,EAAO,EACA,MAOT,MAAM,EAAG,CACP,OAAO,EAAM,KAQf,MAAM,CAAC,EAAK,CACV,EAAM,IAAM,EAGZ,IAAM,EAAa,EAAc,EACjC,GAAI,EAAW,OACb,EAAW,OAAO,aAAa,gBAAiB,OAAO,CAAG,CAAC,EAG7D,GAAI,EAAO,OAAS,EAAW,aAC7B,EAAW,aAAa,aAAa,gBAAiB,OAAO,CAAG,CAAC,EAInE,GAAI,EAAM,MAAQ,EAAK,EAAM,MAAQ,EACrC,GACE,EAAO,OACP,EAAM,cAAgB,MACtB,EAAM,YAAc,EAEpB,EAAM,YAAc,EAItB,GAAI,EAAO,OAAS,EAAO,WACzB,EAAc,EAIhB,OADA,EAAO,EACA,MAOT,MAAM,EAAG,CACP,OAAO,EAAM,KAQf,OAAO,CAAC,EAAM,CASZ,GARA,EAAM,KAAO,EAGb,EAAU,QAAQ,UAAU,EAAO,EAAI,MAAQ,UAC7C,GAAG,EAAU,SAAS,QAAQ,aAChC,EAGI,EAAO,OAAS,EAAO,WACzB,EAAc,EACd,EAAY,EAGd,OAAO,MAOT,OAAO,EAAG,CACR,OAAO,EAAM,MAQf,eAAe,EAAG,CAEhB,OADA,EAAO,EACA,MAOT,QAAQ,EAAG,CAET,OADA,EAAO,EACA,KAEX,CACF,GC3jBF,KACA,KAuDA,IAAM,GAAa,CAAC,IAClB,GAAW,UAAU,aAAa,GAClC,GAAW,SAAS,WAAW,WAC7B,GAAG,GAAW,WAAW,QAAQ,aACnC,GACA,GAKI,GAAY,CAChB,EACA,EACA,EAAwC,UACrC,CACH,IAAM,EAAW,GAAW,CAAS,EAC/B,EAAU,EAAO,OAAS,UAEhC,GAAI,EAAU,CACZ,IAAM,EAAiB,GAAc,uBAAwB,CAC3D,SAAU,SACZ,CAAC,EACD,MAAO,CACL,QAAS,GAAY,EAAgB,IAAI,EACzC,UAAW,GAAY,EAAgB,IAAI,CAC7C,EAGF,GAAI,IAAgB,OAClB,MAAO,CACL,QAAS,GAAc,gBAAgB,IAAW,CAChD,SAAU,SACZ,CAAC,EACD,UAAW,GAAc,aAAa,IAAW,CAAE,SAAU,SAAU,CAAC,CAC1E,EAGF,IAAM,EAAe,GAAc,aAAa,IAAW,CACzD,SAAU,SACZ,CAAC,EACD,MAAO,CACL,QAAS,EACT,UAAW,GAAY,EAAc,IAAI,CAC3C,GAMI,GAAkB,CAAC,EAAe,EAAa,KACjD,EAAQ,IAAQ,EAAM,GAAQ,IAK5B,GAAmB,CACvB,EACA,EACA,EACA,EACA,EACA,EACA,IACG,CACH,GAAI,EAAQ,EACV,GAAkB,EAAK,EAAG,EAAG,EAAO,EAAQ,EAAQ,EAAQ,CAAK,GAOxD,GAAiB,CAAC,IAA8B,CAC3D,GAAI,OAAO,IAAS,SAClB,OAAO,KAAK,IAAI,EAAM,GAAa,EAAE,EAGvC,GAAI,OAAO,IAAS,UAAY,KAAQ,GACtC,OAAO,GAAa,GAGtB,OAAO,GAAa,IAMT,GAAkB,CAAC,IAA8B,CAC5D,IAAM,EAAc,GAAe,CAAI,EAGvC,GAAI,GAAe,GAAa,EAC9B,OAAO,GAAoB,oBAI7B,OAAO,EAAc,GAAoB,sBAM9B,GAAyB,CAAC,IAA8B,CACnE,IAAM,EAAc,GAAe,CAAI,EAGvC,GAAI,GAAe,GAAa,EAC9B,OAAO,GAAoB,4BAI7B,OAAO,EAAc,GAAoB,0BAMrC,GAAyB,CAC7B,EACA,EACA,IACS,CACT,IAAM,EAAc,GAAe,GAAQ,IAAI,EACzC,EAAe,GAAgB,GAAQ,IAAI,EAE3C,EAAgB,EAAO,cAC7B,GAAI,CAAC,EAAe,OAEpB,IAAM,EAAQ,KAAK,IACjB,EAAc,sBAAsB,EAAE,OAAS,EAAc,YAC7D,GACF,EACM,EAAS,KAAK,IAClB,EAAe,GACf,EAAc,GACd,GAAoB,UACtB,EAGA,EAAc,MAAM,OAAS,GAAG,MAGhC,GAAiB,EAAS,EAAO,CAAM,GAMnC,GAAc,CAClB,EACA,IACkB,CAClB,IAAM,EAAgB,EAAO,cAC7B,GAAI,CAAC,EACH,MAAU,MAAM,mCAAmC,EAGrD,IAAM,EAAc,GAAe,GAAQ,IAAI,EACzC,EAAe,GAAgB,GAAQ,IAAI,EAC3C,EAAQ,KAAK,IACjB,EAAc,sBAAsB,EAAE,OAAS,EAAc,YAC7D,GACF,EACM,EAAS,KAAK,IAClB,EAAe,GACf,EAAc,GACd,GAAoB,UACtB,EAMA,OAHA,EAAc,MAAM,OAAS,GAAG,MAGzB,GAAoB,EAAQ,EAAO,CAAM,GAM5C,GAA0B,CAC9B,EACA,IACW,CACX,IAAM,EAAkB,GAAoB,aAAe,EAAc,IACnE,EAAU,EACV,EAAU,IAAM,EAChB,EAAc,EAAU,EAE9B,GAAI,GAAgB,EAAG,OAAO,EAC9B,GAAI,GAAgB,IAAK,OAAO,EAChC,OAAO,EAAW,EAAe,IAAO,GAMpC,GAAa,CACjB,EACA,EACA,EACA,EACA,EACA,IACG,CACH,IAAM,EAAS,EAAS,EAClB,EAAc,GAAe,EAAO,IAAI,EACxC,EAAkB,GAAuB,EAAO,IAAI,EACpD,EAAc,GAAoB,aAGlC,EAAc,GAClB,EACA,EACA,EAAS,EAAc,EACvB,EACA,EACA,CACF,GAGQ,QAAS,EAAc,UAAW,GAAkB,GAC1D,EACA,CACF,EAGM,EAAe,GAAgB,EAAM,MAAO,EAAM,IAAK,EAAM,GAAG,EAChE,EAAkB,GAAwB,EAAc,CAAK,EAG7D,EAAe,EAAM,QACvB,GAAoB,6BACpB,EACE,EAAkB,GAAoB,WAAa,EAEnD,EADkB,GAAoB,WACI,EAAI,EAAS,IACvD,EAAkB,EAAkB,EAAS,IAEnD,GAAI,EAAO,SAAU,CAEnB,IAAM,EAAc,GAAgB,EAAG,EAAM,IAAK,EAAM,GAAG,EACrD,EAAsB,GAAwB,EAAa,CAAK,EAGhE,EACJ,KAAK,IAAI,EAAkB,CAAmB,EAAI,EAC9C,EAAa,EAAM,OAAS,EAElC,GAAI,EAAkB,CAIpB,IAAM,GAAe,EAAkB,GAAkB,IAAO,EAChE,GAAI,EAAa,EACf,GACE,EACA,EACA,EAAS,EAAc,EACvB,EACA,EACA,EACA,CACF,EAIF,IAAM,GAAe,EAAkB,GAAkB,IAAO,EAC1D,EAAiB,EAAQ,EAC/B,GAAI,EAAiB,EACnB,GACE,EACA,EACA,EAAS,EAAc,EACvB,EACA,EACA,EACA,CACF,EAEG,QAAI,EAAY,CAIrB,IAAM,GACF,EAAsB,GAAwB,IAAO,EACzD,GAAI,EAAa,EACf,GACE,EACA,EACA,EAAS,EAAc,EACvB,EACA,EACA,EACA,CACF,EAIF,IAAM,GACF,EAAsB,GAAwB,IAAO,EACnD,GACF,EAAkB,GAAkB,IAAO,EAAQ,EACvD,GAAI,EAAc,EAChB,GACE,EACA,EACA,EAAS,EAAc,EACvB,EACA,EACA,EACA,CACF,EAIF,IAAM,GAAe,EAAkB,GAAkB,IAAO,EAC1D,EAAiB,EAAQ,EAC/B,GAAI,EAAiB,EACnB,GACE,EACA,EACA,EAAS,EAAc,EACvB,EACA,EACA,EACA,CACF,EAEG,KAIL,IAAM,GAAe,EAAkB,GAAkB,IAAO,EAChE,GAAI,EAAa,EACf,GACE,EACA,EACA,EAAS,EAAc,EACvB,EACA,EACA,EACA,CACF,EAIF,IAAM,GAAY,EAAkB,GAAkB,IAAO,EACvD,GACF,EAAsB,GAAwB,IAAO,EAAQ,EACjE,GAAI,EAAc,EAChB,GACE,EACA,EACA,EAAS,EAAc,EACvB,EACA,EACA,EACA,CACF,EAIF,IAAM,GACF,EAAsB,GAAwB,IAAO,EACnD,EAAiB,EAAQ,EAC/B,GAAI,EAAiB,EACnB,GACE,EACA,EACA,EAAS,EAAc,EACvB,EACA,EACA,EACA,CACF,GAGC,QAAI,EAAO,OAAS,EAAM,cAAgB,KAAM,CAErD,IAAM,EAAgB,GACpB,EAAM,YACN,EAAM,IACN,EAAM,GACR,EACM,EAAwB,GAAwB,EAAe,CAAK,EAEpE,EAAe,KAAK,IAAI,EAAiB,CAAqB,EAC9D,EAAgB,KAAK,IAAI,EAAiB,CAAqB,EAG/D,EAAqB,GAAmB,EAGxC,EACJ,EAAM,SAAW,EAAM,eAAiB,QACpC,GAAoB,6BACpB,EACA,EACJ,EAAM,SAAW,EAAM,eAAiB,SACpC,GAAoB,6BACpB,EAEA,EACJ,GAAoB,WAAa,EAC7B,EACJ,GAAoB,WAAa,EAE7B,EAAwB,EACzB,EAAuB,EAAS,IAChC,EAAwB,EAAS,IAEhC,EAAyB,EAC1B,EAAwB,EAAS,IACjC,EAAuB,EAAS,IAG/B,GAAe,EAAe,GAAyB,IAAO,EACpE,GAAI,EAAa,EACf,GACE,EACA,EACA,EAAS,EAAc,EACvB,EACA,EACA,EACA,CACF,EAIF,IAAM,IAAY,EAAe,GAAyB,IAAO,EAC3D,GACF,EAAgB,GAA0B,IAAO,EAAQ,GAE7D,GAAI,EAAc,EAEhB,GACE,EACA,GACA,EAAS,EAAc,EACvB,EACA,EACA,EACA,CACF,EAIF,IAAM,IAAe,EAAgB,GAA0B,IAAO,EAChE,EAAiB,EAAQ,GAC/B,GAAI,EAAiB,EACnB,GACE,EACA,GACA,EAAS,EAAc,EACvB,EACA,EACA,EACA,CACF,EAEG,KAIL,IAAM,GAAgB,EAAkB,GAAkB,IAAO,EACjE,GAAI,EAAc,EAChB,GACE,EACA,EACA,EAAS,EAAc,EACvB,EACA,EACA,EACA,CACF,EAIF,IAAM,GAAe,EAAkB,GAAkB,IAAO,EAC1D,EAAiB,EAAQ,EAC/B,GAAI,EAAiB,EACnB,GACE,EACA,EACA,EAAS,EAAc,EACvB,EACA,EACA,EACA,CACF,EAKJ,EAAY,GAMR,GAAY,CAChB,EACA,EACA,EACA,EACA,EACA,IACG,CACH,GAAI,CAAC,EAAO,MAAO,OAEnB,IAAM,EAAW,GAAoB,UAC/B,EAAI,EAAS,GAGX,QAAS,EAAiB,UAAW,GAAsB,GACjE,EACA,EACA,MACF,EAGM,EAAW,KAAK,OAAO,EAAM,IAAM,EAAM,KAAO,EAAM,IAAI,EAEhE,QAAS,EAAI,EAAG,GAAK,EAAU,IAAK,CAClC,IAAM,EAAQ,EAAM,IAAM,EAAI,EAAM,KACpC,GAAI,EAAQ,EAAM,IAAK,SAGvB,IAAM,EAAU,GAAgB,EAAO,EAAM,IAAK,EAAM,GAAG,EAErD,EADkB,GAAwB,EAAS,CAAK,EACjC,IAAO,EAG9B,EAAa,KAAK,IAAI,EAAQ,EAAM,KAAK,EAAI,EAAM,KAAO,IAC1D,EACJ,EAAO,OACP,EAAM,cAAgB,MACtB,KAAK,IAAI,EAAQ,EAAM,WAAW,EAAI,EAAM,KAAO,IAErD,GAAI,GAAc,EAAkB,SAGpC,IAAI,EAAW,GAEf,GAAI,EAAO,SACT,EACE,EAAM,OAAS,EACX,GAAS,GAAK,GAAS,EAAM,MAC7B,GAAS,EAAM,OAAS,GAAS,EAClC,QAAI,EAAO,OAAS,EAAM,cAAgB,KAAM,CACrD,IAAM,EAAa,KAAK,IAAI,EAAM,MAAO,EAAM,WAAW,EACpD,EAAc,KAAK,IAAI,EAAM,MAAO,EAAM,WAAW,EAC3D,EAAW,GAAS,GAAc,GAAS,EAE3C,OAAW,GAAS,EAAM,MAI5B,EAAI,UAAY,EAAW,EAAkB,EAC7C,EAAI,YAAc,EAAW,EAAI,IACjC,EAAI,UAAU,EACd,EAAI,IAAI,EAAG,EAAG,EAAW,EAAG,EAAG,KAAK,GAAK,CAAC,EAC1C,EAAI,KAAK,EAGX,EAAI,YAAc,GAMd,GAAW,CACf,EACA,EACA,EACA,EACA,IACG,CAEH,GAAI,EAAO,MAAO,OAElB,IAAM,EAAU,GAAoB,SAC9B,EAAI,EAAS,EACb,EAAU,GAAoB,cAG5B,QAAS,GAAa,GAAU,EAAQ,EAAW,KAAK,EAGhE,EAAI,UAAY,EAChB,EAAI,UAAU,EACd,EAAI,IAAI,EAAQ,EAAS,EAAG,EAAU,EAAG,EAAG,KAAK,GAAK,CAAC,EACvD,EAAI,KAAK,GAML,GAAO,CACX,EACA,EACA,EACA,IACS,CACT,IAAQ,MAAK,QAAO,UAAW,EAG/B,GAAI,IAAU,GAAK,IAAW,EAAG,OAGjC,GAAY,EAAK,EAAO,CAAM,EAG9B,GAAS,EAAK,EAAO,EAAQ,EAAQ,CAAS,EAC9C,GAAW,EAAK,EAAO,EAAQ,EAAQ,EAAO,CAAS,EACvD,GAAU,EAAK,EAAO,EAAQ,EAAQ,EAAO,CAAS,GAMlD,GAAoB,CAAC,EAAgB,IAA2B,CACpE,IAAM,EAAe,GAAgB,CAAI,EAGnC,EAAS,EAAU,QAAU,EAAU,YAAY,OACnD,EACJ,EAAU,cAAgB,EAAU,YAAY,aAElD,GAAI,EACF,EAAO,MAAM,OAAS,GAAG,MACzB,EAAO,MAAM,UAAY,wBAE3B,GAAI,EACF,EAAa,MAAM,OAAS,GAAG,MAC/B,EAAa,MAAM,UAAY,yBAO7B,GAAc,CAClB,EACA,EACA,IACQ,CACR,GAAI,EACF,MAAO,CACL,MAAO,EAAgB,MACvB,YAAa,EAAgB,YAC7B,IAAK,EAAgB,IACrB,IAAK,EAAgB,IACrB,KAAM,EAAgB,KACtB,QAAS,EAAgB,SAAW,GACpC,aAAc,EAAgB,cAAgB,IAChD,EAGF,GAAI,GAAW,OACb,MAAO,CACL,MAAO,EAAU,OAAO,SAAS,EACjC,YAAa,EAAU,OAAO,eAAe,EAC7C,IAAK,EAAU,OAAO,OAAO,EAC7B,IAAK,EAAU,OAAO,OAAO,EAC7B,KAAM,EAAU,OAAO,QAAQ,EAC/B,QAAS,GACT,aAAc,IAChB,EAGF,OACE,GAAkB,CAChB,MAAO,EACP,YAAa,KACb,IAAK,EACL,IAAK,IACL,KAAM,EACN,QAAS,GACT,aAAc,IAChB,GAQS,GACX,CAAC,IACD,CAAC,IAA0C,CAEzC,IAAM,EAAS,GACb,GAAG,EAAU,SAAS,eAAe,IACrC,CAAE,OAAQ,GAAI,CAChB,EAGM,EAAY,EAAU,WAAa,EAAU,YAAY,UAC/D,GAAI,EACF,EAAU,aAAa,EAAQ,EAAU,UAAU,EAEnD,OAAU,QAAQ,YAAY,CAAM,EAItC,IAAI,EAAsC,KACtC,EAAqC,KACrC,EAAoC,KAGpC,EAAc,EAAO,MAAQ,KAG7B,EAAiB,GAAY,KAAM,EAAW,CAChD,MAAO,EAAO,OAAS,EACvB,YAAa,EAAO,aAAe,KACnC,IAAK,EAAO,KAAO,EACnB,IAAK,EAAO,KAAO,IACnB,KAAM,EAAO,MAAQ,EACrB,QAAS,GACT,aAAc,IAChB,CAAC,EAGK,EAAiC,CACrC,cAAe,EAAe,MAC9B,oBAAqB,EAAe,YACpC,YAAa,EAAe,MAC5B,kBAAmB,EAAe,YAClC,WAAY,EAAe,MAC3B,iBAAkB,EAAe,YACjC,UAAW,EACX,SAAU,GAAoB,OAC9B,eAAgB,IAClB,EA0BA,GAxBA,EAAU,eAAiB,EAG3B,GACE,IAAM,CACJ,GAAI,CAMF,OALA,EAAgB,GAAY,EAAQ,IAC/B,EACH,KAAM,CACR,CAAC,EACD,EAAU,IAAM,EAAc,IACvB,GACP,MAAO,EAAO,CAEd,OADA,QAAQ,KAAK,uCAAwC,CAAK,EACnD,KAGX,IAAM,CAEJ,GAAkB,EAAW,CAAW,EAE5C,EAGI,EAAO,OAAS,EAAO,QAAU,UACnC,EAAU,QAAQ,UAAU,IAC1B,GAAG,EAAU,SAAS,QAAQ,MAAM,EAAO,OAC7C,EAIF,EAAU,OAAS,EAGnB,IAAM,EAAoB,IAAM,CAC9B,GAAI,CAAC,EAAe,OACpB,GACE,EACA,IACK,EACH,KAAM,CACR,EACA,IACK,EACH,MAAO,EAAe,cACtB,YAAa,EAAe,mBAC9B,EACA,CACF,GAII,EAAU,CAAC,IAA+B,CAC9C,GAAI,CAAC,EAAe,OAIpB,IAAM,GADM,GAAe,YAAY,IAAI,GACrB,EAAe,UAC/B,EAAW,KAAK,IAAI,EAAU,EAAe,SAAU,CAAC,EACxD,EAAgB,GAAa,CAAQ,EAGrC,EAAa,EAAe,WAC5B,EAAc,EAAe,YAInC,GAHA,EAAe,cACb,GAAc,EAAc,GAAc,EAG1C,EAAe,oBAAsB,MACrC,EAAe,sBAAwB,KACvC,CACA,IAAwC,iBAAlC,EACmC,kBAAnC,GAAoB,EAC1B,EAAe,oBACb,GACC,EAAoB,GAAoB,EAO7C,GAHA,EAAkB,EAGd,EAAW,EACb,EAAe,eAAiB,sBAAsB,CAAC,IACrD,EAAQ,CAAI,CACd,EAEA,OAAe,eAAiB,MAK9B,EAAa,CAAC,IAAgC,CAClD,GAAI,CAAC,EAAe,CAClB,QAAQ,KAAK,0BAA0B,EACvC,OAIF,GAAuB,EAAQ,EAAe,IACzC,EACH,KAAM,CACR,CAAC,EAGD,IAAI,EACA,EAAa,GAEjB,GAAI,EAEF,EAAQ,CACN,MAAO,EAAgB,MACvB,YAAa,EAAgB,YAC7B,IAAK,EAAgB,IACrB,IAAK,EAAgB,IACrB,KAAM,EAAgB,KACtB,QAAS,EAAgB,SAAW,GACpC,aAAc,EAAgB,cAAgB,IAChD,EACA,EAAa,EAAgB,UAAY,GACzC,EAAiB,IAAK,CAAM,EACvB,QAAI,EAAU,OAEnB,EAAQ,CACN,MAAO,EAAU,OAAO,SAAS,EACjC,YAAa,EAAU,OAAO,eAAe,EAC7C,IAAK,EAAU,OAAO,OAAO,EAC7B,IAAK,EAAU,OAAO,OAAO,EAC7B,KAAM,EAAU,OAAO,QAAQ,CACjC,EACA,EAAiB,IAAK,CAAM,EAG5B,OAAQ,IAAK,CAAe,EAI9B,IAAM,EAAe,EAAM,QAAU,EAAe,YAC9C,EACJ,EAAM,cAAgB,EAAe,kBAEvC,IAAK,GAAgB,IAAuB,CAAC,EAAY,CAUvD,GARA,EAAe,WAAa,EAAe,cAC3C,EAAe,iBAAmB,EAAe,oBAGjD,EAAe,YAAc,EAAM,MACnC,EAAe,kBAAoB,EAAM,YAGrC,EAAe,eACjB,qBAAqB,EAAe,cAAc,EAIpD,EAAe,UAAY,YAAY,IAAI,EAG3C,EAAQ,EACH,QAAI,EAAY,CAUrB,GARA,EAAe,cAAgB,EAAM,MACrC,EAAe,oBAAsB,EAAM,YAC3C,EAAe,YAAc,EAAM,MACnC,EAAe,kBAAoB,EAAM,YACzC,EAAe,WAAa,EAAM,MAClC,EAAe,iBAAmB,EAAM,YAGpC,EAAe,eACjB,qBAAqB,EAAe,cAAc,EAClD,EAAe,eAAiB,KAIlC,GACE,EACA,IACK,EACH,KAAM,CACR,EACA,GAAmB,EACnB,CACF,EAGA,QACE,EACA,IACK,EACH,KAAM,CACR,EACA,GAAmB,EACnB,CACF,GAKE,EAAS,IAAY,CACzB,GAAI,CAAC,EAAe,OAEpB,GAAI,CACF,IAAM,EAAa,GAAY,EAAQ,IAClC,EACH,KAAM,CACR,CAAC,EACD,EAAU,IAAM,EAAW,IAC3B,OAAO,OAAO,EAAe,CAAU,EAGvC,EAAkB,EAClB,MAAO,EAAO,CACd,QAAQ,KAAK,+BAAgC,CAAK,IAKtD,EAAgB,GAAoB,EAAU,QAAS,EAAQ,CAAM,EAGrE,IAAM,EAAgB,IAAM,EAAkB,EAE9C,EAAe,GACb,EAAO,OAAS,UAChB,CACF,EAGA,sBAAsB,IAAM,CAC1B,EAAW,EACZ,EAGD,EAAU,WAAa,EACvB,EAAU,OAAS,EAGnB,EAAU,QAAU,CAAC,IAAqB,CAExC,GADA,EAAc,EACV,EACF,GAAuB,EAAQ,EAAe,IACzC,EACH,KAAM,CACR,CAAC,EAED,EAAkB,EAIpB,GAAkB,EAAW,CAAW,GAI1C,EAAU,QAAU,IAAM,EAG1B,IAAM,EAAmB,EAAU,YAAY,SAC/C,GAAI,EACF,EAAU,WAAW,SAAW,CAAC,IAAuB,CAItD,GAHA,EAAiB,CAAK,EAGlB,EAAO,OAAS,EAAO,QAAU,UACnC,EAAU,QAAQ,UAAU,OAC1B,GAAG,EAAU,SAAS,QAAQ,MAAM,EAAO,OAC7C,EAIF,GAAI,GAAS,IAAU,UACrB,EAAU,QAAQ,UAAU,IAC1B,GAAG,EAAU,SAAS,QAAQ,MAAM,GACtC,EAMF,GAHA,EAAO,MAAQ,EAGX,EACF,EAAa,EACb,EAAe,KAIjB,EAAe,GAA0B,EAAO,CAAa,EAG7D,EAAW,GAKf,GAAI,EAAU,UAAW,CACvB,IAAM,EAAkB,EAAU,UAAU,UAAY,IAAM,IAC9D,EAAU,UAAU,QAAU,IAAM,CAClC,GAAI,EAAe,EAAc,EACjC,GAAI,EAAc,EAAa,EAC/B,GAAI,EAAe,eACjB,qBAAqB,EAAe,cAAc,EAEpD,EAAgB,GAIpB,OAAO,GC7kCX,KCqDO,IAAM,GAAY,CACvB,EACA,IACM,CAEN,OADA,OAAO,OAAO,EAAQ,MAAO,CAAM,EAC5B,GD9CF,IAAM,GACX,CAAC,IACD,CACE,IAYG,CAEH,IAAM,EAAW,CAAC,IAAsB,EAAU,SAAS,CAAS,EAG9D,EAAM,EAAO,KAAO,EACpB,EAAM,EAAO,KAAO,IACpB,EAAQ,EAAO,QAAU,OAAY,EAAO,MAAQ,EACpD,EAAa,EAAO,WAAa,GACjC,EAAY,EAAO,iBAAmB,CAAC,IAAQ,EAAI,SAAS,GAG5D,GAAiB,EAAQ,IAAQ,EAAM,GAAQ,IAG/C,EAAY,EAAc,CAC9B,IAAK,MACL,UAAW,EAAS,kBAAkB,EACtC,UAAW,EAAU,OACvB,CAAC,EAGD,GAAU,EAAW,CACnB,SAAU,UACZ,CAAC,EAGD,IAAM,EAAQ,EAAO,OAAS,GACxB,EAAc,EAAO,OAAS,EAAQ,GAAG,YAAkB,EAC3D,EAAoB,EAAQ,GAAG,YAAkB,GAGjD,EAA2C,CAC/C,KAAM,SACN,gBAAiB,OAAO,CAAG,EAC3B,gBAAiB,OAAO,CAAG,EAC3B,gBAAiB,OAAO,CAAK,EAC7B,mBAAoB,aACpB,SAAU,EAAa,KAAO,IAC9B,gBAAiB,EAAa,OAAS,QACvC,aAAc,OAAO,CAAK,EAC1B,oBAAqB,GACvB,EAEA,GAAI,EACF,EAAiB,cAAgB,EAGnC,IAAM,EAAS,EAAc,CAC3B,IAAK,MACL,UAAW,EAAS,eAAe,EACnC,WAAY,EACZ,UAAW,CACb,CAAC,EAGD,GAAU,EAAQ,CAChB,KAAM,GAAG,IACX,CAAC,EAGD,IAAM,EAAc,EAAc,CAChC,IAAK,MACL,UAAW,EAAS,cAAc,EAClC,WAAY,CACV,cAAe,OACf,oBAAqB,GACvB,EACA,KAAM,EAAU,CAAK,EACrB,UAAW,CACb,CAAC,EAGD,GAAU,EAAa,CACrB,KAAM,GAAG,IACX,CAAC,EAGD,IAAI,EACA,EAEJ,GAAI,EAAO,MAAO,CAChB,IAAM,EACJ,EAAO,cAAgB,OAAY,EAAO,YAAc,EACpD,GAAuB,EAAc,IAAQ,EAAM,GAAQ,IAG3D,EAAiD,CACrD,KAAM,SACN,gBAAiB,OAAO,CAAG,EAC3B,gBAAiB,OAAO,CAAG,EAC3B,gBAAiB,OAAO,CAAW,EACnC,mBAAoB,aACpB,SAAU,EAAa,KAAO,IAC9B,gBAAiB,EAAa,OAAS,QACvC,aAAc,OAAO,CAAW,EAChC,oBAAqB,GACvB,EAEA,GAAI,EACF,EAAuB,cAAgB,EAGzC,EAAe,EAAc,CAC3B,IAAK,MACL,UAAW,EAAS,eAAe,EACnC,WAAY,EACZ,UAAW,CACb,CAAC,EAGD,GAAU,EAAc,CACtB,KAAM,GAAG,IACX,CAAC,EAGD,EAAoB,EAAc,CAChC,IAAK,MACL,UAAW,EAAS,cAAc,EAClC,WAAY,CACV,cAAe,OACf,oBAAqB,GACvB,EACA,KAAM,EAAU,CAAW,EAC3B,UAAW,CACb,CAAC,EAGD,GAAU,EAAmB,CAC3B,KAAM,GAAG,IACX,CAAC,EAIH,MAAO,IACF,EACH,YACA,SACA,cACA,eACA,oBAGA,aAAc,IAAM,EACpB,UAAW,IAAM,EACjB,eAAgB,IAAM,EACtB,gBAAiB,IAAM,GAAgB,KACvC,qBAAsB,IAAM,GAAqB,IACnD,GErHG,IAAM,GACX,CAAC,IACD,CAAC,IAAyD,CACxD,MAAO,IACD,EAGJ,QAAS,EAAU,QAGnB,QAAQ,CAAC,EAAe,EAAwB,GAAM,CAEpD,OADA,EAAQ,OAAO,SAAS,EAAO,CAAY,EACpC,MAGT,QAAQ,EAAG,CACT,OAAO,EAAQ,OAAO,SAAS,GAGjC,cAAc,CAAC,EAAe,EAAwB,GAAM,CAE1D,OADA,EAAQ,OAAO,eAAe,EAAO,CAAY,EAC1C,MAGT,cAAc,EAAG,CACf,OAAO,EAAQ,OAAO,eAAe,GAIvC,MAAM,CAAC,EAAa,CAElB,OADA,EAAQ,OAAO,OAAO,CAAG,EAClB,MAGT,MAAM,EAAG,CACP,OAAO,EAAQ,OAAO,OAAO,GAG/B,MAAM,CAAC,EAAa,CAElB,OADA,EAAQ,OAAO,OAAO,CAAG,EAClB,MAGT,MAAM,EAAG,CACP,OAAO,EAAQ,OAAO,OAAO,GAG/B,OAAO,CAAC,EAAc,CAEpB,OADA,EAAQ,OAAO,QAAQ,CAAI,EACpB,MAGT,OAAO,EAAG,CACR,OAAO,EAAQ,OAAO,QAAQ,GAIhC,MAAM,EAAG,CAEP,OADA,EAAQ,SAAS,OAAO,EACjB,MAGT,OAAO,EAAG,CAER,OADA,EAAQ,SAAS,QAAQ,EAClB,MAGT,UAAU,EAAG,CACX,OAAO,EAAQ,SAAS,WAAW,GAIrC,QAAQ,CACN,EAGA,CAEA,OADA,EAAQ,WAAW,SAAS,CAAK,EAC1B,MAGT,QAAQ,EAAG,CACT,OAAO,EAAQ,WAAW,SAAS,GAGrC,OAAO,CAAC,EAAkB,CAExB,OADA,EAAQ,WAAW,QAAQ,CAAI,EACxB,MAGT,OAAO,EAAG,CACR,OAAO,EAAQ,WAAW,QAAQ,GAGpC,SAAS,CAAC,EAAe,CAEvB,OADA,EAAQ,WAAW,UAAU,CAAI,EAC1B,MAGT,gBAAgB,CAAC,EAAe,CAE9B,OADA,EAAQ,WAAW,iBAAiB,CAAI,EACjC,MAIT,QAAQ,CAAC,EAAc,CACrB,GAAI,EAAQ,MAAM,QAAS,EAAQ,KAAK,QAAQ,CAAI,EACpD,OAAO,MAGT,QAAQ,EAAG,CACT,OAAO,EAAQ,MAAM,QAAU,EAAQ,KAAK,QAAQ,EAAI,IAG1D,OAAO,CAAC,EAAkB,CACxB,GAAI,EAAQ,MAAM,QAAS,EAAQ,KAAK,QAAQ,CAAQ,EACxD,OAAO,MAGT,OAAO,EAAG,CACR,OAAO,EAAQ,MAAM,QAAU,EAAQ,KAAK,QAAQ,EAAI,IAI1D,EAAE,CACA,EAGA,EACA,CACA,GAAI,EAAQ,QAAQ,GAAI,EAAQ,OAAO,GAAG,EAAO,CAAO,EACxD,OAAO,MAGT,GAAG,CACD,EAGA,EACA,CACA,GAAI,EAAQ,QAAQ,IAAK,EAAQ,OAAO,IAAI,EAAO,CAAO,EAC1D,OAAO,MAIT,OAAO,EAAG,CACR,GAAI,EAAQ,WAAW,QAAS,EAAQ,UAAU,QAAQ,EAE9D,GC7MJ,IAUO,IAAM,GAA8B,CACzC,IAAK,GAAgB,IACrB,IAAK,GAAgB,IACrB,MAAO,GAAgB,MACvB,KAAM,GAAgB,KACtB,SAAU,GAAgB,SAC1B,MAAO,GAAgB,MACvB,KAAM,GAAgB,KACtB,MAAO,GAAgB,MACvB,UAAW,GAAgB,WAC3B,YAAa,GAAgB,cAC7B,MAAO,GAAgB,MACvB,SAAU,GAAgB,SAC1B,aAAc,GAAgB,cAC9B,cAAe,GAAgB,eAC/B,eAAgB,CAAC,IAAU,EAAM,SAAS,CAC5C,EAOa,GAAmB,CAAC,EAAuB,CAAC,IAAoB,CAU3E,OARmB,EACjB,GACA,EACA,QACF,GAYW,GAAmB,CAAC,IAAyB,CACxD,IAAM,EAAU,CACd,SACA,EAAO,MACP,EAAO,SAAW,mBAAqB,GACvC,EAAO,MAAQ,EAAO,OAAS,KAC3B,WACE,OAAO,EAAO,OAAS,SACnB,EAAO,KAAK,YAAY,EACxB,EAAO,OAEb,GACJ,EAAO,OAAS,EAAO,QAAU,UAAY,WAAW,EAAO,QAAU,GACzE,EAAO,MAAQ,gBAAkB,GACjC,EAAO,SAAW,mBAAqB,GACvC,EAAO,KAAO,eAAiB,EACjC,EACG,OAAO,OAAO,EACd,KAAK,GAAG,EAIL,EAAqC,CACzC,SAAU,IACZ,EAEA,GAAI,EAAO,SACT,EAAW,iBAAmB,OAGhC,OAAO,EAAoB,EAAQ,CACjC,IAAK,MACL,aACA,UAAW,EACX,cAAe,CACb,MAAO,GACP,QAAS,GACT,WAAY,GACZ,UAAW,GACX,SAAU,GACV,UAAW,GACX,UAAW,GACX,QAAS,EACX,EACA,YAAa,EACf,CAAC,GAQU,GAAe,CAAC,KAAU,CACrC,OAAQ,CACN,SAAU,CAAC,EAAG,IAAM,EAAK,QAAQ,SAAS,EAAG,CAAC,EAC9C,SAAU,IAAM,EAAK,QAAQ,SAAS,GAAK,EAC3C,eAAgB,CAAC,EAAG,IAAM,EAAK,QAAQ,eAAe,EAAG,CAAC,EAC1D,eAAgB,IAAM,EAAK,QAAQ,eAAe,GAAK,KACvD,OAAQ,CAAC,IAAM,EAAK,QAAQ,OAAO,CAAC,EACpC,OAAQ,IAAM,EAAK,QAAQ,OAAO,GAAK,EACvC,OAAQ,CAAC,IAAM,EAAK,QAAQ,OAAO,CAAC,EACpC,OAAQ,IAAM,EAAK,QAAQ,OAAO,GAAK,IACvC,QAAS,CAAC,IAAM,EAAK,QAAQ,QAAQ,CAAC,EACtC,QAAS,IAAM,EAAK,QAAQ,QAAQ,GAAK,EACzC,gBAAiB,IAAM,EAAK,QAAQ,kBAAkB,CACxD,EACA,SAAU,CACR,OAAQ,IAAM,EAAK,UAAU,SAAS,EACtC,QAAS,IAAM,EAAK,UAAU,UAAU,EACxC,WAAY,IAAM,EAAK,UAAU,aAAa,GAAK,EACrD,EACA,WAAY,CACV,SAAU,CAAC,IAAM,EAAK,YAAY,WAAW,CAAC,EAC9C,SAAU,IAAM,EAAK,YAAY,WAAW,GAAK,UACjD,QAAS,CAAC,IAAM,EAAK,UAAU,CAAC,EAChC,QAAS,IAAM,EAAK,UAAU,GAAK,KACnC,UAAW,CAAC,IAAM,EAAK,YAAY,YAAY,CAAC,EAChD,iBAAkB,CAAC,IAAM,EAAK,YAAY,mBAAmB,CAAC,CAChE,EACA,KAAM,CACJ,QAAS,CAAC,IAAM,EAAK,OAAO,UAAU,CAAC,EACvC,QAAS,IAAM,EAAK,OAAO,UAAU,GAAK,EAC5C,EACA,KAAM,CACJ,QAAS,CAAC,IAAM,EAAK,MAAM,UAAU,CAAC,EACtC,QAAS,IAAM,EAAK,MAAM,UAAU,GAAK,EAC3C,EACA,OAAQ,CACN,GAAI,CAAC,EAAG,IAAM,EAAK,KAAK,EAAG,CAAC,EAC5B,IAAK,CAAC,EAAG,IAAM,EAAK,MAAM,EAAG,CAAC,CAChC,EACA,UAAW,CACT,QAAS,IAAM,EAAK,WAAW,UAAU,CAC3C,CACF,GV/GA,IAAM,GAAe,CAAC,EAAuB,CAAC,IAAuB,CAEnE,IAAM,EAAa,GAAiB,CAAM,EAE1C,GAAI,CAEF,IAAM,EAAY,EAEhB,EACA,EAAW,EAGX,EAAY,GAAiB,CAAU,CAAC,EAGxC,GAAU,CAAU,EAGpB,GAAQ,CAAU,EAGlB,GAAc,CAAU,EACxB,GAAS,CAAU,EAGnB,GAAW,CAAU,EAGrB,GAAW,CAAU,EACrB,GAAe,CAAU,EACzB,EAAc,CAChB,EAAE,CAAU,EAGN,EAAa,GAAa,CAAS,EAGnC,EAAS,GAAQ,CAAU,EAAE,CAAS,EAG5C,GAAI,EAAW,IAAM,OAAO,EAAO,KAAO,WACxC,OAAO,QAAQ,EAAW,EAAE,EAAE,QAAQ,EAAE,EAAO,KAAa,CAC1D,GAAI,OAAO,IAAY,WACrB,EAAO,GAAG,EAA0B,CAAO,EAE9C,EAGH,OAAO,EACP,MAAO,EAAO,CAEd,MADA,QAAQ,MAAM,yBAA0B,CAAK,EACnC,MAAM,4BAA6B,EAAgB,SAAS,IAI3D,MW1Ff,IACA,ICMO,IAAM,GAAmB,CAAC,IAC/B,CAAC,IAA4C,CAC3C,GAAI,CAAC,EAAO,OAAQ,OAAO,EAE3B,IAAM,EAAS,SAAS,cAAc,QAAQ,EAM9C,OALA,EAAO,UAAY,GAAG,EAAO,yBAC7B,EAAO,YAAc,EAAO,OAE5B,EAAU,QAAQ,YAAY,CAAM,EAE7B,IACF,EACH,aAAc,CAChB,GAQS,GAAmB,CAAC,IAC/B,CAAC,IAA4C,CAC3C,IAAI,EAA2B,KAEzB,EAAa,IAAY,CAE7B,GAAI,EACF,aAAa,CAAS,EACtB,EAAY,KAId,GAAI,OAAO,EAAO,WAAa,UAAY,EAAO,SAAW,EAC3D,EAAY,OAAO,WAAW,IAAM,CAClC,GAAI,EAAU,SAAW,EAAU,KACjC,EAAU,KAAK,SAAS,GAEzB,EAAO,QAAQ,GAIhB,EAAY,IAAY,CAC5B,GAAI,EACF,aAAa,CAAS,EACtB,EAAY,MAKV,EAAkB,EAAU,WAAW,QAC7C,GAAI,EAAU,UACZ,EAAU,UAAU,QAAU,IAAM,CAElC,GADA,EAAU,EACN,EACF,EAAgB,KAAK,EAAU,SAAS,GAK9C,MAAO,IACF,EACH,MAAO,CACL,MAAO,EACP,KAAM,CACR,CACF,GCpEG,IAAM,GAAoB,CAE/B,MAAO,QAEP,OAAQ,QACV,EAMa,GAAqB,CAEhC,OAAQ,SAER,MAAO,QAEP,IAAK,KACP,EAgCO,IAAM,GAAoB,CAE/B,QAAS,GAAkB,MAE3B,SAAU,GAAmB,OAE7B,SAAU,KAEV,QAAS,KAET,mBAAoB,GACtB,EClDO,IAAM,GAAe,CAAC,IAC3B,CAAC,IAA4C,CAC3C,IAAM,EAAW,EAAO,UAAY,GAAmB,OACjD,EAAS,EAAO,QAAU,OAC1B,EAAgB,GAAG,eAAoB,IAG7C,EAAU,QAAQ,UAAU,IAAI,CAAa,EAG7C,IAAM,EAAc,CAAC,IAAwC,CAE3D,EAAU,QAAQ,UAAU,OAAO,CAAa,EAGhD,IAAM,EAAmB,GAAG,eAAoB,IAIhD,GAHA,EAAU,QAAQ,UAAU,IAAI,CAAgB,EAG5C,EAAU,QAAQ,UAAU,SAAS,GAAG,qBAA0B,EACpE,GAAI,IAAgB,GAAmB,OACrC,EAAU,QAAQ,MAAM,UAAY,4BAEpC,OAAU,QAAQ,MAAM,UAAY,YAK1C,MAAO,IACF,EACH,SAAU,CAKR,YAAa,IAAwB,EAOrC,YAAa,CAAC,IAAiD,CAC7D,GAAI,OAAO,OAAO,EAAkB,EAAE,SAAS,CAAW,EAExD,OADA,EAAY,CAAW,EAChB,EAIP,YAFA,QAAQ,KAAK,qBAAqB,qBAA+B,GAAmB,QAAQ,EAC5F,EAAY,GAAmB,MAAM,EAC9B,EAGb,CACF,GHjEJ,IIUO,IAAM,GACX,EAAG,YAAW,WACd,CAAC,IAAgD,CAC/C,GAAI,CAAC,EACH,MAAU,MAAM,4BAA4B,EAG9C,IAAI,EAAY,GAEV,EAAuC,CAC3C,QAAS,EAAU,QACnB,aAAc,EAAU,aACxB,MAAO,EAAU,MACjB,SAAU,EAAU,SACpB,MAAO,EACF,UACA,SAML,IAAI,EAAsB,CACxB,GAAI,EAAW,OAAO,KAyBtB,OAxBA,EAAY,GACZ,KAAK,MAAQ,UAEb,EAAM,IAAI,IACL,KACH,MAAO,IAAyB,CAC9B,SAAS,KAAK,YAAY,EAAU,OAAO,EAI3C,IAAM,EAAI,EAAU,QAAQ,aAM5B,GAJA,EAAU,QAAQ,UAAU,IAC1B,GAAG,EAAU,WAAW,UAAU,YACpC,EAEI,EAAU,MACZ,EAAU,MAAM,MAAM,EAGxB,OAAO,KAEX,CAAmB,EAEZ,MAOT,IAAI,EAAsB,CACxB,GAAI,CAAC,EAAW,OAAO,KAIvB,GAHA,EAAY,GACZ,KAAK,MAAQ,SAET,EAAU,MACZ,EAAU,MAAM,KAAK,EAGvB,IAAM,EAAsB,CAAC,IAAiC,CAC5D,GAAI,EAAM,eAAiB,UAAW,OAMtC,GAJA,EAAU,QAAQ,oBAChB,gBACA,CACF,EACI,EAAU,QAAQ,WACpB,EAAU,QAAQ,OAAO,GAY7B,OARA,EAAU,QAAQ,iBAChB,gBACA,CACF,EACA,EAAU,QAAQ,UAAU,OAC1B,GAAG,EAAU,WAAW,UAAU,YACpC,EAEO,MAQT,UAAU,CAAC,EAAiC,CAE1C,OADA,EAAU,MAAM,QAAQ,CAAI,EACrB,MAOT,UAAU,EAAW,CACnB,OAAO,EAAU,MAAM,QAAQ,GAAK,IAQtC,SAAS,CAAC,EAAiC,CACzC,GAAI,EAAU,aACZ,EAAU,aAAa,YAAc,EAEvC,OAAO,MAOT,SAAS,EAAW,CAClB,OAAO,EAAU,aACb,EAAU,aAAa,aAAe,GACtC,IAQN,WAAW,EAAsB,CAG/B,OAAO,MAOT,WAAW,EAAW,CAGpB,MAAO,IAQT,WAAW,CAAC,EAA+C,CACzD,GAAI,EAAU,UAAU,YACtB,EAAU,SAAS,YAAY,CAAQ,EAEzC,OAAO,MAOT,WAAW,EAAqB,CAC9B,OAAO,EAAU,UAAU,cAAc,GAAK,UAShD,EAAE,CAAC,EAAe,EAAsC,CAEtD,OADA,EAAU,KAAK,EAAO,CAAO,EACtB,MAST,GAAG,CAAC,EAAe,EAAsC,CAEvD,OADA,EAAU,MAAM,EAAO,CAAO,EACvB,MAMT,OAAO,EAAS,CACd,GAAI,GAAa,EAAU,QAAQ,WACjC,EAAU,QAAQ,OAAO,EAE3B,GAAI,EAAU,MACZ,EAAU,MAAM,KAAK,EAEvB,EAAU,QAAQ,EAEtB,EAGA,GAAI,EAAU,aACZ,EAAU,aAAa,iBAAiB,QAAS,IAAM,CACrD,EAAU,OAAO,QAAQ,EACzB,EAAU,OAAO,SAAS,EAC3B,EAIH,GAAI,EAAU,GAAI,CAEhB,IAAM,EAAiB,IAAY,CACjC,GAAI,EACF,EAAkB,KAAK,GAI3B,EAAU,GAAG,UAAW,CAAc,EAGtC,IAAM,EAAkB,EAAU,QAClC,EAAU,QAAU,IAAM,CACxB,EAAU,MAAM,UAAW,CAAc,EACzC,GAAiB,KAAK,CAAS,GAInC,OAAO,GC9OJ,IAAM,GAAsB,IAAqB,CACtD,IAAM,EAA0B,CAAC,EAC7B,EAAe,GAEb,EAAe,IAAY,CAC/B,GAAI,EAAM,SAAW,EAAG,CACtB,EAAe,GACf,OAGF,EAAe,GACf,IAAM,EAAW,EAAM,GAEjB,EAAgB,IAAY,CAMhC,GAJA,EAAM,MAAM,EAEZ,EAAS,MAAM,UAAW,CAAa,EAEnC,EAAM,SAAW,EACnB,EAAe,GAGf,gBAAW,EAAc,GAAG,GAKhC,EAAS,KAAK,UAAW,CAAa,EACtC,EAAS,MAAM,GAGjB,MAAO,CAKL,GAAG,CAAC,EAAgC,CAClC,GAAI,CAAC,EAAS,MACZ,MAAU,MAAM,sCAAsC,EAMxD,GAHA,EAAM,KAAK,CAAQ,EAGf,CAAC,EACH,EAAa,GAOjB,KAAK,EAAS,CAEZ,EAAM,OAAS,EACf,EAAe,IAOjB,SAAS,EAAW,CAClB,OAAO,EAAM,OAEjB,GCzEF,IAWO,IAAM,GAAyC,CACpD,QAAS,GAAkB,QAC3B,SAAU,GAAkB,SAC5B,SAAU,GAAkB,QAC9B,EAOa,GAAmB,CAAC,IAC/B,EACE,GACA,EACA,UACF,EAOW,GAAmB,CAAC,IAC/B,EAAoB,EAAQ,CAC1B,IAAK,MACL,UAAW,EAAO,KACpB,CAAC,EAOU,GAAgB,CAAC,KAA4B,IACrD,EACH,KAAM,EAAO,OACf,GAQa,GAAe,CAAC,EAAqB,KAA4B,CAC5E,UAAW,CACT,QAAS,EAAK,WAAW,UAAY,IAAM,GAC7C,EACA,OACF,GNxCA,IAAM,GAAuB,GAAoB,EAO3C,GAAiB,CAAC,IAA8C,CACpE,GAAI,CAAC,EAAO,QACV,MAAU,MAAM,8BAA8B,EAGhD,IAAM,EAAa,GAAiB,CAAM,EAE1C,GAAI,CAgBF,OAfiB,EACf,EACA,EAAW,EACX,EAAY,GAAiB,CAAU,CAAC,EACxC,GAAY,CAAU,EACtB,GAAa,CAAU,EACvB,GAAS,GAAc,CAAU,CAAC,EAClC,GAAiB,CAAU,EAC3B,EAAc,EAEd,GAAiB,CAAU,EAE3B,KAAQ,GAAQ,GAAa,EAAM,EAAK,CAAC,EAAE,CAAI,CACjD,EAAE,CAAU,EAGZ,MAAO,EAAO,CAEd,MADA,QAAQ,MAAM,2BAA4B,aAAiB,MAAQ,EAAM,QAAU,OAAO,CAAK,CAAC,EACtF,MAAM,8BAA8B,aAAiB,MAAQ,EAAM,QAAU,OAAO,CAAK,GAAG,IAI3F,MO1Df,IACA,IACA,ICKO,IAAM,GACX,EAAG,WAAU,YAAW,eACxB,CAAC,KAA+C,IAC3C,EACH,QAAS,EAAU,QACnB,MAAO,EAAU,MAGjB,QAAQ,EAAY,CAClB,OAAO,EAAU,UAAU,GAG7B,QAAQ,CAAC,EAA0C,CAEjD,GAAI,OAAO,IAAU,UACnB,GAAI,EACF,EAAU,MAAM,EAEhB,OAAU,QAAQ,EAIjB,QAAI,OAAO,IAAU,SAExB,GADoB,IAAU,QAAU,IAAU,IAEhD,EAAU,MAAM,EAEhB,OAAU,QAAQ,EAGtB,OAAO,MAIT,iBAAiB,EAAW,CAC1B,OAAO,EAAU,OAAO,OAAS,IAGnC,iBAAiB,CAAC,EAAgC,CAChD,GAAI,EAAU,MACZ,EAAU,MAAM,MAAQ,EAE1B,OAAO,MAIT,KAAK,EAAoB,CAEvB,OADA,EAAU,MAAM,EACT,MAGT,OAAO,EAAoB,CAEzB,OADA,EAAU,QAAQ,EACX,MAGT,MAAM,EAAoB,CAExB,OADA,EAAU,OAAO,EACV,MAGT,SAAS,EAAY,CACnB,OAAO,EAAU,UAAU,GAI7B,QAAQ,CAAC,EAA+B,CAEtC,OADA,EAAU,MAAM,QAAQ,CAAI,EACrB,MAGT,QAAQ,EAAW,CACjB,OAAO,EAAU,MAAM,QAAQ,GAAK,IAItC,sBAAuB,EAAU,uBAAyB,KAC1D,iBAAiB,CAAC,EAAc,EAAoC,CAClE,GAAI,EAAU,kBACZ,EAAU,kBAAkB,EAAM,CAAO,EAE3C,OAAO,MAGT,oBAAoB,EAAoB,CACtC,GAAI,EAAU,qBACZ,EAAU,qBAAqB,EAEjC,OAAO,MAIT,EAAE,CAAC,EAAe,EAAoC,CAEpD,OADA,EAAU,KAAK,EAAO,CAAO,EACtB,MAGT,GAAG,CAAC,EAAe,EAAoC,CAErD,OADA,EAAU,MAAM,EAAO,CAAO,EACvB,MAIT,MAAM,EAAoB,CAExB,OADA,EAAS,OAAO,EACT,MAGT,OAAO,EAAoB,CAEzB,OADA,EAAS,QAAQ,EACV,MAGT,OAAO,EAAS,CACd,EAAU,QAAQ,EAEtB,GC1HF,IAmEA,IAAM,GAAwB,CAC5B,EACA,EACA,IACG,CACH,IAAM,EAAS,GAAU,OACnB,EAAY,GAAiB,SAG/B,EAAY,EAAU,QAAQ,cAChC,IAAI,KAAU,aAChB,EACA,GAAI,CAAC,EAAW,CACd,EAAY,SAAS,cAAc,KAAK,EACxC,EAAU,UAAY,GAAG,KAAU,cAGnC,IAAM,EAAQ,EAAU,QAAQ,cAC9B,IAAI,KAAU,SAChB,EACM,EAAQ,EAAU,QAAQ,cAC9B,IAAI,KAAU,SAChB,EAGM,EAAiB,CAAC,EACxB,GAAI,EAAO,EAAe,KAAK,CAAK,EACpC,GAAI,EAAO,EAAe,KAAK,CAAK,EAGpC,IAAM,EAAiB,SAAS,cAAc,KAAK,EACnD,EAAe,UAAY,GAAG,KAAU,YAGxC,IAAM,EAAQ,EAAU,QAAQ,cAC9B,IAAI,KAAU,SAChB,EACA,GAAI,EACF,EAAe,YAAY,CAAK,EAYlC,OARA,EAAU,YAAY,CAAc,EAGpC,EAAe,QAAQ,CAAC,IAAO,EAAU,YAAY,CAAE,CAAC,EAGxD,EAAU,QAAQ,YAAY,CAAS,EAEhC,CAAE,YAAW,gBAAe,EAIrC,IAAI,EAAiB,EAAU,QAAQ,cACrC,IAAI,KAAU,WAChB,EACA,GAAI,CAAC,EAAgB,CACnB,EAAiB,SAAS,cAAc,KAAK,EAC7C,EAAe,UAAY,GAAG,KAAU,YAGxC,IAAM,EAAQ,EAAU,QAAQ,cAC9B,IAAI,KAAU,SAChB,EACA,GAAI,EACF,EAAe,YAAY,CAAK,EAIlC,EAAU,aAAa,EAAgB,EAAU,UAAU,EAG7D,MAAO,CAAE,YAAW,gBAAe,GAQxB,GACX,CAAiC,IACjC,CAA6B,IAA8C,CACzE,IAAM,EAAS,EAAO,QAAU,OAC1B,EAAY,EAAO,eAAiB,UAGlC,kBAAmB,GACzB,EACA,EACA,CACF,EAGI,EAAoB,KACxB,GAAI,EAAO,eAAgB,CAKzB,GAJA,EAAoB,SAAS,cAAc,KAAK,EAChD,EAAkB,UAAY,GAAG,KAAU,WAC3C,EAAkB,YAAc,EAAO,eAEnC,EAAO,MACT,EAAkB,UAAU,IAAI,GAAG,KAAU,iBAAyB,EACtE,EAAU,QAAQ,UAAU,IAAI,GAAG,KAAU,UAAkB,EAIjE,EAAe,YAAY,CAAiB,EAI9C,GACE,cAAe,GACf,EAAU,WACV,OAAO,EAAU,YAAc,UAC/B,YAAa,EAAU,WACvB,EACA,CACA,IAAM,EAAkB,EAAU,UAAU,QAC5C,EAAU,UAAU,QAAU,IAAM,CAClC,GAAI,EAAmB,EAAkB,OAAO,EAChD,EAAgB,KAAK,EAAU,SAAS,GAI5C,MAAO,IACF,EACH,sBAAuB,EAEvB,iBAAiB,CAAC,EAAc,EAAU,GAAO,CAC/C,IAAQ,kBAAmB,GACzB,EACA,EACA,CACF,EACI,EAAoB,KAAK,sBAE7B,GAAI,CAAC,EAEH,EAAoB,SAAS,cAAc,KAAK,EAChD,EAAkB,UAAY,GAAG,KAAU,WAC3C,EAAe,YAAY,CAAiB,EAC5C,KAAK,sBAAwB,EAe/B,OAZA,EAAkB,YAAc,EAGhC,EAAkB,UAAU,OAC1B,GAAG,KAAU,kBACb,CACF,EACA,EAAU,QAAQ,UAAU,OAC1B,GAAG,KAAU,WACb,CACF,EAEO,MAGT,oBAAoB,EAAG,CACrB,GACE,KAAK,uBACL,KAAK,sBAAsB,WAE3B,KAAK,sBAAsB,OAAO,EAClC,KAAK,sBAAwB,KAC7B,EAAU,QAAQ,UAAU,OAAO,GAAG,KAAU,UAAkB,EAEpE,OAAO,KAEX,GASS,GACX,CAAC,IACD,CAA6B,IAAqC,CAEhE,IAAM,EAAc,IACf,EACH,OAAQ,EAAO,QAAU,OACzB,cAAe,EAAO,eAAiB,QACzC,EAEA,OAAO,GAAc,CAAW,EAAE,CAAS,GClQ/C,IASO,IAAM,GAA8B,CACzC,OAAQ,OACR,cAAe,QACjB,EAOa,GAAmB,CAAC,EAAuB,CAAC,IACvD,EAAsB,GAAe,EAAQ,QAAQ,EAO1C,GAAmB,CAAC,IAC/B,EAAoB,EAAQ,CAC1B,IAAK,MACL,UAAW,EAAO,MAClB,YAAa,EACf,CAAC,EAOU,GAAe,CAAC,KAAqC,CAChE,SAAU,CACR,OAAQ,EAAK,UAAU,OACvB,QAAS,EAAK,UAAU,OAC1B,EACA,UAAW,CACT,QAAS,EAAK,WAAW,OAC3B,EACA,UAAW,CACT,MAAO,EAAK,WAAW,MACvB,QAAS,EAAK,WAAW,QACzB,OAAQ,EAAK,WAAW,OACxB,UAAW,EAAK,WAAW,SAC7B,CACF,GHjCA,IAAM,GAAe,CAAC,EAAuB,CAAC,IAAuB,CACnE,IAAM,EAAa,GAAiB,CAAM,EAE1C,GAAI,CAeF,OAdwB,EACtB,EACA,EAAW,EACX,EAAY,GAAiB,CAAU,CAAC,EACxC,GAAc,CAAU,EACxB,GAAU,CAAU,EACpB,GAAU,CAAU,EACpB,GAAmB,CAAU,EAC7B,GAAc,CAAU,EACxB,GAAa,CAAU,EACvB,EAAc,EACd,CAAC,IAAS,GAAQ,GAAa,CAAI,CAAC,EAAE,CAAI,CAC5C,EAAE,CAAU,EAGZ,MAAO,EAAO,CAKd,MAJA,QAAQ,MACN,yBACA,aAAiB,MAAQ,EAAM,QAAU,OAAO,CAAK,CACvD,EACU,MACR,4BACE,aAAiB,MAAQ,EAAM,QAAU,OAAO,CAAK,GAEzD,IAIW,MIpDf,IACA,IACA,ICFA,IACA,IACA,ICGO,IAAM,GAAe,CAE1B,QAAS,UAET,UAAW,WACb,EAMa,GAAa,CAExB,OAAQ,SAER,SAAU,WAEV,SAAU,UACZ,EAMa,GAAiC,CAE5C,MAAO,QAEP,QAAS,UAET,QAAS,UAET,KAAM,MACR,EA4BO,IAAM,GAAgB,CAE3B,QAAS,GAAa,QAEtB,WAAY,GAEZ,aAAc,GAEd,iBAAkB,EAElB,yBAA0B,GAA+B,KAEzD,sBAAuB,GAEvB,6BAA8B,IAE9B,2BAA4B,+BAE5B,UAAW,OAEX,OAAQ,EACV,EAMa,GAAa,CAExB,UAAW,YAEX,UAAW,YAEX,cAAe,eACjB,ECpGA,IACA,IAOO,IAAM,GAA8B,CACzC,MAAO,GAAW,SAClB,cAAe,MACf,OAAQ,GAAc,MACxB,EAKa,GAAoB,CAC/B,QAAS,GAAc,QACvB,WAAY,GAAc,WAC1B,YAAa,GAAc,aAC3B,cAAe,MACjB,EAEa,GAAmB,CAAC,EAAS,CAAC,IACzC,EAAsB,GAAmB,EAAQ,MAAM,EAO5C,GAAkB,CAAC,EAAoB,CAAC,IACnD,EAAsB,GAAkB,EAAQ,KAAK,EAE1C,GAAuB,CAAC,IAAW,CAC9C,IAAM,EAAgB,CACpB,IAAK,MACL,WAAY,CACV,KAAM,UACN,mBAAoB,YACtB,EACA,UAAW,CACT,GAAG,EAAO,cACV,GAAG,EAAO,gBAAgB,EAAO,SAAW,YAC5C,EAAO,KACT,CACF,EAEA,MAAO,CAAC,IAAc,EAAY,CAAa,EAAE,CAAS,GF3C5D,KACA,KAOO,IAAM,GAAY,CAAC,EAAoB,CAAC,IAAoB,CACjE,IAAM,EAAa,GAAgB,CAAM,EAEzC,GAAI,CAEF,IAAM,EAAgB,EACpB,EACA,EAAW,EACX,EAAc,CAChB,EAAE,CAAU,EAGN,EAAS,GAAa,CAC1B,KAAM,EAAW,KACjB,KAAM,EAAW,KACjB,SAAU,EAAW,SACrB,SAAU,EAAW,SACrB,OAAQ,EAAW,SAAW,GAC9B,aAAc,CACZ,SAAU,IACV,OAAQ,+BACR,QAAS,CAAC,MAAO,GAAG,KAChB,EAAW,cAAgB,CAAC,CAClC,EACA,MAAO,EAAW,MAClB,OAAQ,EAAW,OACnB,QAAS,OACT,MAAO,GAAG,EAAW,YACvB,CAAC,EAaD,GAVA,EAAc,QAAU,EAAO,QAG/B,EAAc,QAAQ,aAAa,OAAQ,KAAK,EAChD,EAAc,QAAQ,aACpB,gBACA,EAAW,QAAU,SAAW,OAAS,OAC3C,EAGI,EAAW,MACb,EAAc,QAAQ,aAAa,KAAM,OAAO,EAAW,OAAO,EAClE,EAAc,QAAQ,aACpB,gBACA,YAAY,EAAW,OACzB,EAIF,GAAI,EAAW,QAAU,SACvB,EAAc,QAAQ,UAAU,IAC9B,GAAG,EAAc,SAAS,KAAK,WACjC,EAIF,EAAO,GAAG,QAAS,CAAC,IAAU,CAC5B,GAAI,EAAc,KAChB,EAAc,KAAK,QAAS,CAAK,EAEpC,EAGD,IAAM,EAAoB,IACrB,EACH,SACA,QAAS,EAAO,QAGhB,MAAO,KAGP,QAAQ,EAAG,CACT,OAAO,EAAO,SAAS,GAGzB,QAAQ,CAAC,EAAO,CACd,IAAM,EAAY,GAAS,GAO3B,OANA,EAAO,SAAS,CAAS,EAGzB,KAAK,QAAQ,aAAa,KAAM,OAAO,GAAW,EAClD,KAAK,QAAQ,aAAa,gBAAiB,YAAY,GAAW,EAE3D,MAGT,QAAQ,EAAG,CACT,KAAK,QAAQ,UAAU,IAAI,GAAG,KAAK,SAAS,KAAK,WAAW,EAC5D,KAAK,QAAQ,aAAa,gBAAiB,MAAM,EAGjD,IAAM,EAAQ,IAAI,YAAY,gBAAiB,CAC7C,QAAS,GACT,OAAQ,CAAE,MAAO,KAAK,SAAS,CAAE,CACnC,CAAC,EAGD,OAFA,KAAK,QAAQ,cAAc,CAAK,EAEzB,MAGT,UAAU,EAAG,CAGX,OAFA,KAAK,QAAQ,UAAU,OAAO,GAAG,KAAK,SAAS,KAAK,WAAW,EAC/D,KAAK,QAAQ,aAAa,gBAAiB,OAAO,EAC3C,MAGT,QAAQ,EAAG,CACT,OAAO,KAAK,QAAQ,UAAU,SAC5B,GAAG,KAAK,SAAS,KAAK,WACxB,GAGF,MAAM,EAAG,CAGP,OAFA,EAAO,OAAO,EACd,KAAK,QAAQ,gBAAgB,eAAe,EACrC,MAGT,OAAO,EAAG,CAGR,OAFA,EAAO,QAAQ,EACf,KAAK,QAAQ,aAAa,gBAAiB,MAAM,EAC1C,MAGT,OAAO,CAAC,EAAS,CAGf,OAFA,EAAO,QAAQ,CAAO,EACtB,KAAK,kBAAkB,EAChB,MAGT,OAAO,EAAG,CACR,OAAO,EAAO,QAAQ,GAGxB,OAAO,CAAC,EAAM,CAGZ,OAFA,EAAO,QAAQ,CAAI,EACnB,KAAK,kBAAkB,EAChB,MAGT,OAAO,EAAG,CACR,OAAO,EAAO,QAAQ,GAIxB,QAAQ,CAAC,EAAS,CAChB,GAAI,CAAC,KAAK,MAAO,CACf,IAAM,EAAc,CAClB,UACA,WAAY,GACZ,OAAQ,KAAK,QACb,OAAQ,EAAW,UACf,EAAW,aAAe,CAAC,CACjC,EAEA,KAAK,MAAQ,GAAY,CAAW,EAEpC,UAAK,MAAM,WAAW,CAAO,EAC7B,KAAK,MAAM,KAAK,EAMlB,OAFA,KAAK,QAAQ,aAAa,iBAAkB,MAAM,EAE3C,MAGT,QAAQ,EAAG,CACT,OAAO,KAAK,MAAQ,KAAK,MAAM,WAAW,EAAI,IAGhD,SAAS,EAAG,CACV,GAAI,KAAK,MACP,KAAK,MAAM,KAAK,EAChB,KAAK,QAAQ,aAAa,iBAAkB,MAAM,EAEpD,OAAO,MAGT,SAAS,EAAG,CACV,GAAI,KAAK,MACP,KAAK,MAAM,KAAK,EAChB,KAAK,QAAQ,aAAa,iBAAkB,OAAO,EAErD,OAAO,MAGT,iBAAiB,EAAG,CAClB,OAAO,KAAK,OAGd,OAAO,EAAG,CACR,GAAI,KAAK,MACP,KAAK,MAAM,QAAQ,EAGrB,GAAI,EAAO,QACT,EAAO,QAAQ,EAGjB,EAAc,UAAU,QAAQ,GAGlC,iBAAiB,EAAG,CAClB,IAAM,EAAU,CAAC,CAAC,KAAK,QAAQ,EACzB,EAAU,CAAC,CAAC,KAAK,QAAQ,EAC3B,EAAc,GAElB,GAAI,GAAW,EACb,EAAc,GAAW,cACpB,QAAI,EACT,EAAc,GAAW,UAEzB,OAAc,GAAW,UAY3B,GARA,OAAO,OAAO,EAAU,EAAE,QAAQ,CAAC,IAAW,CAC5C,KAAK,QAAQ,UAAU,OAAO,GAAG,KAAK,SAAS,KAAK,MAAM,GAAQ,EACnE,EAGD,KAAK,QAAQ,UAAU,IAAI,GAAG,KAAK,SAAS,KAAK,MAAM,GAAa,EAGhE,IAAgB,GAAW,WAAa,EAC1C,KAAK,QAAQ,aAAa,aAAc,KAAK,QAAQ,CAAC,EAEtD,UAAK,QAAQ,gBAAgB,YAAY,EAG/C,EAGA,GAAI,EAAW,QAAU,OACvB,EAAI,SAAS,EAAW,KAAK,EAM/B,OAFA,EAAI,kBAAkB,EAEf,EACP,MAAO,EAAO,CAEd,MADA,QAAQ,MAAM,sBAAuB,CAAK,EAChC,MAAM,yBAA0B,EAAgB,SAAS,IGxNhE,IAAM,GAAU,EAAG,eACxB,CAAC,KAAqD,IACjD,EACH,QAAS,EAAU,QAKnB,MAAM,CAAC,EAAmB,CAExB,IAAM,EAAe,IAChB,EACH,OAAQ,EAAU,OAAO,OACzB,QAAS,EAAO,SAAW,EAAU,OAAO,OAC9C,EAGA,GAAI,EAAa,QAAU,OACzB,EAAa,MAAQ,GAIvB,IAAM,EAAM,GAAU,CAAY,EAUlC,GAPA,EAAU,KAAK,KAAK,CAAG,EAGC,EAAU,cAClB,YAAY,EAAI,OAAO,EAGnC,EAAI,IAAM,OAAO,EAAI,KAAO,WAC9B,EAAI,GAAG,QAAS,CAAC,IAAU,EAAU,eAAe,EAAO,CAAG,CAAC,EAQjE,OAJA,EAAI,QAAQ,iBAAiB,QAAS,CAAC,IAAU,CAC/C,EAAU,eAAe,EAAO,CAAG,EACpC,EAEM,GAMT,GAAG,CAAC,EAAmB,CAQrB,GAPA,EAAU,KAAK,KAAK,CAAG,EAGC,EAAU,cAClB,YAAY,EAAI,OAAO,EAGnC,EAAI,IAAM,OAAO,EAAI,KAAO,WAC9B,EAAI,GAAG,QAAS,CAAC,IAAU,EAAU,eAAe,EAAO,CAAG,CAAC,EAOjE,OAJA,EAAI,QAAQ,iBAAiB,QAAS,CAAC,IAAU,CAC/C,EAAU,eAAe,EAAO,CAAG,EACpC,EAEM,MAMT,OAAO,EAAG,CACR,MAAO,CAAC,GAAG,EAAU,IAAI,GAM3B,YAAY,EAAG,CACb,OAAO,EAAU,KAAK,KAAK,KAAO,EAAI,SAAS,CAAC,GAAK,MAMvD,YAAY,CAAC,EAAmC,CAC9C,IAAM,EAAY,OAAO,IAAe,SACpC,EAAU,KAAK,KAAK,KAAO,EAAI,SAAS,IAAM,CAAU,EACxD,EAEJ,GAAI,CAAC,EAAW,OAAO,KASvB,GANA,EAAU,KAAK,QAAQ,KAAO,EAAI,WAAW,CAAC,EAG9C,EAAU,SAAS,EAGf,EAAU,KACZ,EAAU,KAAK,SAAU,CACvB,IAAK,EACL,MAAO,EAAU,SAAS,CAC5B,CAAC,EAGH,OAAO,MAMT,SAAS,CAAC,EAAmC,CAC3C,IAAM,EAAY,OAAO,IAAe,SACpC,EAAU,KAAK,KAAK,KAAO,EAAI,SAAS,IAAM,CAAU,EACxD,EAEJ,GAAI,CAAC,EAAW,OAAO,KAGvB,IAAM,EAAQ,EAAU,KAAK,QAAQ,CAAS,EAC9C,GAAI,IAAU,GACZ,EAAU,KAAK,OAAO,EAAO,CAAC,EAIhC,GAAI,EAAU,QAAQ,WACpB,EAAU,QAAQ,WAAW,YAAY,EAAU,OAAO,EAK5D,OAFA,EAAU,QAAQ,EAEX,MAMT,EAAE,CAAC,EAAe,EAAmB,CACnC,GAAI,EAAU,GACZ,EAAU,GAAG,EAAO,CAAO,EAE7B,OAAO,MAMT,GAAG,CAAC,EAAe,EAAmB,CACpC,GAAI,EAAU,IACZ,EAAU,IAAI,EAAO,CAAO,EAE9B,OAAO,MAMT,OAAO,EAAG,CAER,EAAU,KAAK,QAAQ,KAAO,EAAI,QAAQ,CAAC,EAC3C,EAAU,KAAK,OAAS,EAGxB,EAAU,QAAQ,EAEtB,GAOW,GAAe,CAAC,KAAU,CACrC,UAAW,CACT,QAAS,IAAM,EAAK,UAAU,QAAQ,CACxC,CACF,GCpNO,SAAS,EAAY,CAAC,EAAqC,CAEhE,GAAI,OAAO,EAAU,eAAiB,WACpC,OAAO,EAAU,aAAa,EAIhC,GAAI,MAAM,QAAQ,EAAU,IAAI,EAC9B,OAAO,EAAU,KAAK,KAAK,CAAC,IAAQ,EAAI,UAAY,EAAI,SAAS,CAAC,EAIpE,OAAO,KAOF,SAAS,EAAe,CAAC,EAAsB,CAEpD,IAAM,EAAY,GAAa,CAAS,EACxC,GAAI,CAAC,EAAW,OAGhB,GAAI,OAAO,EAAU,WAAa,WAAY,OAE9C,IAAM,EAAc,EAAU,SAAS,EAGrB,SAAS,iBAAiB,mBAAmB,EAErD,QAAQ,CAAC,IAAU,CAI3B,GAFe,EAAM,aAAa,iBAAiB,GAAG,QAAQ,OAAQ,EAAE,IAEzD,EACb,EAAM,gBAAgB,QAAQ,EAC9B,EAAM,aAAa,WAAY,GAAG,EAElC,OAAM,aAAa,SAAU,MAAM,EACnC,EAAM,aAAa,WAAY,IAAI,EAEtC,EAOI,SAAS,EAAuB,CAAC,EAAsB,CAE5D,GAAI,CAAC,EAAU,QAAS,OAExB,EAAU,QAAQ,iBAAiB,UAAW,CAAC,IAAyB,CAEtE,GAAI,EAAM,SAAW,EAAM,cAAe,OAG1C,GACE,OAAO,EAAU,UAAY,YAC7B,OAAO,EAAU,eAAiB,WAElC,OAEF,IAAM,EAAO,EAAU,QAAQ,EACzB,EAAa,GAAa,CAAS,EACnC,EAAe,EAAa,EAAK,QAAQ,CAAU,EAAI,GAEzD,EAAW,EAEf,OAAQ,EAAM,SACP,iBACA,YACH,EAAW,EAAe,EAAK,OAAS,EAAI,EAAe,EAAI,EAC/D,UAEG,gBACA,UACH,EAAW,EAAe,EAAI,EAAe,EAAI,EAAK,OAAS,EAC/D,UAEG,OACH,EAAW,EACX,UAEG,MACH,EAAW,EAAK,OAAS,EACzB,cAGA,OAIJ,GAAI,IAAa,GAAgB,EAAK,GACpC,EAAM,eAAe,EACrB,EAAK,GAAU,QAAQ,MAAM,EAC7B,EAAU,aAAa,EAAK,EAAS,EAExC,EC1DH,IAAM,GAAqC,CACzC,cAAe,OACf,WAAY,GACZ,kBAAmB,IACnB,gBAAiB,+BACjB,QAAS,GACT,OAAQ,OACR,QAAS,SACX,EAOa,GAAqB,CAAC,EAA6B,CAAC,IAAoB,CAEnF,IAAM,EAAe,IAAK,MAAmB,CAAO,EAC9C,EAAS,EAAa,QAAU,OAGhC,EAAU,SAAS,cAAc,KAAK,EAO5C,GANA,EAAQ,UAAY,GAAG,mBACvB,EAAQ,MAAM,WAAa,aAAa,EAAa,uBAAuB,EAAa;AAAA,qCACtD,EAAa,uBAAuB,EAAa,kBACpF,EAAQ,MAAM,MAAQ,GAAG,EAAa,eAGlC,CAAC,EAAa,QAChB,EAAQ,MAAM,QAAU,IAI1B,IAAI,EAAkC,KAOhC,EAAiB,CAAC,IAA8B,CAEpD,GAAI,EAAa,gBAAkB,OAAQ,CAEzC,GAAI,EAAa,UAAY,YAC3B,OAAO,EAAI,QAAQ,YAIrB,IAAM,EAAc,EAAI,QAAQ,cAAc,IAAI,YAAiB,GACjD,EAAI,QAAQ,cAAc,IAAI,eAAoB,EAEpE,GAAI,EACF,OAAO,EAAY,YAIrB,OAAO,KAAK,IAAI,EAAI,QAAQ,YAAc,EAAG,EAAE,EAIjD,OAAQ,EAAa,mBACd,UACH,OAAO,KAAK,IAAI,EAAI,QAAQ,YAAc,EAAG,EAAE,MAC5C,UAEH,IAAM,EAAO,EAAI,QAAQ,cAAc,IAAI,eAAoB,GACpD,EAAI,QAAQ,cAAc,IAAI,YAAiB,EAC1D,GAAI,EACF,OAAO,KAAK,IAAI,EAAK,YAAa,EAAE,EAEtC,OAAO,EAAa,YAAc,OAC/B,gBAEH,OAAO,EAAa,YAAc,KASlC,EAAiB,CAAC,IAA6D,CAEnF,IAAM,EAAkB,EAAW,cACnC,GAAI,CAAC,EAEH,OADA,QAAQ,MAAM,sDAAsD,EAC7D,CAAE,KAAM,EAAG,MAAO,EAAW,WAAY,EAIlD,IAAM,EAAU,EAAW,sBAAsB,EAC3C,EAAgB,EAAgB,sBAAsB,EAG5D,MAAO,CACL,KAAM,EAAQ,KAAO,EAAc,KACnC,MAAO,EAAQ,KACjB,GASI,EAAoB,CAAC,EAAmB,IAA6C,CACzF,IAAQ,OAAM,MAAO,GAAa,EAAe,EAAI,OAAO,EAG5D,GAAI,EAAa,UAAY,cACxB,EAAa,gBAAkB,QAAU,EAAa,gBAAkB,WAAY,CACvF,IAAM,EAAc,EAAI,QAAQ,cAAc,IAAI,YAAiB,GACjD,EAAI,QAAQ,cAAc,IAAI,eAAoB,EAEpE,GAAI,EAAa,CAEf,IAAM,EAAW,EAAY,sBAAsB,EAC7C,EAAU,EAAI,QAAQ,sBAAsB,EAC5C,EAAW,EAAS,KAAO,EAAQ,KAGzC,MAAO,CACL,KAAM,EAAO,CACf,GAMJ,GAAI,EAAiB,EACnB,MAAO,CACL,KAAM,GAAS,EAAW,GAAkB,CAC9C,EAIF,MAAO,CAAE,MAAK,GAQV,EAAY,CAAC,EAAmB,EAAqB,KAAgB,CACzE,GAAI,CAAC,GAAO,CAAC,EAAI,QAAS,CACxB,QAAQ,MAAM,mCAAmC,EACjD,OAIF,EAAa,EAGb,IAAM,EAAQ,EAAe,CAAG,GAGxB,QAAS,EAAkB,EAAK,CAAK,EAG7C,GAAI,EACF,EAAQ,MAAM,WAAa,OAG3B,EAAQ,aAQV,GAJA,EAAQ,MAAM,MAAQ,GAAG,MACzB,EAAQ,MAAM,UAAY,cAAc,OAGpC,EAEF,WAAW,IAAM,CACf,EAAQ,MAAM,WAAa,aAAa,EAAa,uBAAuB,EAAa;AAAA,2CACtD,EAAa,uBAAuB,EAAa,mBACnF,EAAE,GA6CT,MAAO,CACL,UACA,YACA,KAhCW,IAAY,CACvB,EAAQ,MAAM,QAAU,KAgCxB,KA1BW,IAAY,CACvB,EAAQ,MAAM,QAAU,KA0BxB,SAnBe,CAAC,IAAwB,CACxC,EAAQ,MAAM,gBAAkB,GAmBhC,OA5Ca,IAAY,CACzB,GAAI,EACF,EAAU,EAAY,EAAI,GA2C5B,QAdc,IAAY,CAC1B,GAAI,EAAQ,WACV,EAAQ,WAAW,YAAY,CAAO,EAExC,EAAa,KAWf,GClOK,IAAM,GACX,CAAiC,IACjC,CAA0B,IAA8C,CACtE,IAAM,EAAuB,CAAC,EAGxB,EAAgB,EAAU,iBAAmB,EAAU,QAG7D,GAAI,MAAM,QAAQ,EAAO,IAAI,EAC3B,EAAO,KAAK,QAAQ,CAAC,IAAc,CAEjC,IAAM,EAAe,IAChB,EACH,OAAQ,EAAO,OACf,QAAS,EAAU,SAAW,EAAO,OACvC,EAGM,EAAM,GAAU,CAAY,EAGlC,EAAK,KAAK,CAAG,EAGb,EAAc,YAAY,EAAI,OAAO,EACtC,EAMH,IAAM,EAAU,IAAM,CACpB,MAAO,CAAC,GAAG,CAAI,GAMX,EAAe,IAAM,CACzB,OAAO,EAAK,KAAK,CAAC,IAAQ,EAAI,SAAS,CAAC,GAAK,MAMzC,EAAiB,CAAC,EAAY,IAAsB,CAExD,GAAI,GAAS,OAAO,EAAM,iBAAmB,WAC3C,EAAM,eAAe,EAIvB,GACE,EAAI,UACJ,EAAI,SAAS,YACb,EAAI,SAAS,WAAW,EAExB,OAIF,EAAK,QAAQ,CAAC,IAAM,EAAE,WAAW,CAAC,EAGlC,EAAI,SAAS,EAGb,IAAM,EAAQ,EAAI,SAAS,EAS3B,GANA,GAAgB,CACd,OACA,aAAc,IAAM,EAAK,KAAK,CAAC,IAAM,EAAE,SAAS,CAAC,GAAK,IACxD,CAAC,EAGG,OAAO,EAAU,OAAY,WAC/B,EAAU,KAAQ,SAAU,CAC1B,MACA,OACF,CAAC,GAgBL,OAXA,EAAK,QAAQ,CAAC,IAAQ,CAEpB,GAAI,EAAI,IAAM,OAAO,EAAI,KAAO,WAC9B,EAAI,GAAG,QAAS,CAAC,IAAU,EAAe,EAAO,CAAG,CAAC,EAGvD,EAAI,QAAQ,iBAAiB,QAAS,CAAC,IACrC,EAAe,EAAO,CAAG,CAC3B,EACD,EAEM,IACF,EACH,OACA,gBACA,iBACA,UACA,cACF,GA0BS,GACX,CAA6B,IAC7B,CAA0B,IAA0C,CAElE,GAAI,EAAO,aAAe,GACxB,OAAO,EAIT,EAAU,QAAQ,UAAU,IAC1B,GAAG,EAAU,SAAS,MAAM,eAC9B,EAGA,IAAM,EAAkB,SAAS,cAAc,KAAK,EACpD,EAAgB,UAAY,GAAG,EAAU,SAAS,MAAM,WAGxD,MAAO,EAAU,QAAQ,WACvB,EAAgB,YAAY,EAAU,QAAQ,UAAU,EAM1D,OAFA,EAAU,QAAQ,YAAY,CAAe,EAEtC,IACF,EACH,iBACF,GAkBS,GACX,CAA0B,IAC1B,CAA0B,IAAoB,CAE5C,GAAI,EAAO,cAAgB,GACzB,OAAO,EAIT,IAAM,EAAU,SAAS,cAAc,KAAK,EAM5C,OALA,EAAQ,UAAY,GAAG,EAAU,SAAS,MAAM,YAGhD,EAAU,QAAQ,YAAY,CAAO,EAE9B,GAmDE,GACX,CAAmC,IACnC,CACE,IAC2B,CAE3B,IAAM,EAAkB,EAAO,WAAa,CAAC,EACvC,EAA0B,GAAmB,CACjD,OAAQ,EAAO,OAEf,cACE,EAAgB,eAChB,EAAO,wBACP,OACF,OAAQ,EAAgB,QAAU,EAAO,iBAAmB,EAC5D,WAAY,EAAgB,YAAc,GAC1C,kBAAmB,EAAgB,mBAAqB,IACxD,gBACE,EAAgB,iBAAmB,+BACrC,MAAO,EAAgB,MAEvB,QAAU,EAAe,SAAW,SACtC,CAAC,EAGK,EAAkB,EAAU,iBAAmB,EAAU,QAC/D,GAAI,CAAC,EAEH,MADA,QAAQ,MAAM,kDAAkD,EACtD,MAAM,kDAAkD,EAIpE,EAAgB,YAAY,EAAU,OAAO,EAG7C,IAAM,EAAyB,EAAU,eAGzC,EAAU,eAAiB,QAAS,CAAC,EAAO,EAAK,CAE/C,GACE,EAAI,UACJ,EAAI,SAAS,YACb,EAAI,SAAS,WAAW,EAExB,OAIF,EAAuB,KAAK,KAAM,EAAO,CAAG,EAG5C,WAAW,IAAM,CACf,EAAU,UAAU,CAAG,GACtB,EAAE,GAIP,WAAW,IAAM,CACf,IAAM,EAAY,EAAU,KAAK,KAAK,CAAC,IAAQ,EAAI,SAAS,CAAC,EAC7D,GAAI,EACF,EAAU,UAAU,EAAW,EAAI,GAEpC,EAAE,EAGL,IAAM,EAAgB,IAAM,CAC1B,IAAM,EAAY,EAAU,KAAK,KAAK,CAAC,IAAQ,EAAI,SAAS,CAAC,EAC7D,GAAI,EACF,EAAU,UAAU,EAAW,EAAI,GAIvC,GAAI,EACF,EAAgB,iBAAiB,SAAU,CAAa,EAI1D,IAAM,EAAiB,IAAI,eAAe,IAAM,CAC9C,IAAM,EAAY,EAAU,KAAK,KAAK,CAAC,IAAQ,EAAI,SAAS,CAAC,EAC7D,GAAI,EACF,EAAU,UAAU,EAAW,EAAI,EAEtC,EAED,EAAe,QAAQ,CAAe,EAGtC,IAAM,EAAmB,IAAI,iBAAiB,CAAC,IAAc,CAC3D,QAAW,KAAY,EACrB,GACE,EAAS,OAAS,cAClB,EAAS,gBAAkB,SAC1B,EAAS,OAAuB,UAAU,SACzC,GAAG,EAAO,oBACZ,EACA,CAEA,IAAM,EAAa,EAAS,OACtB,EAAY,EAAU,KAAK,KAC/B,CAAC,IAAQ,EAAI,UAAY,CAC3B,EACA,GAAI,EACF,EAAU,UAAU,CAAS,GAIpC,EAGD,GAAI,MAAM,QAAQ,EAAU,IAAI,EAC9B,EAAU,KAAK,QAAQ,CAAC,IAAQ,CAC9B,GAAI,EAAI,QACN,EAAiB,QAAQ,EAAI,QAAS,CAAE,WAAY,EAAK,CAAC,EAE7D,EAIH,IAAM,EAAkB,EAAU,UAAY,IAAM,IAkBpD,OAfC,EAAkB,QAAU,QAAS,EAAG,CAKvC,GAJA,EAAU,QAAQ,EAClB,EAAe,WAAW,EAC1B,EAAiB,WAAW,EAExB,EACF,EAAgB,oBAAoB,SAAU,CAAa,EAI7D,GAAI,OAAO,IAAoB,WAC7B,EAAgB,KAAK,IAAI,GAItB,IACF,EACH,YACA,aAAc,IAAM,CACtB,GCnRG,IAAM,GAAoB,IAAY,CAE3C,GAAI,SAAS,eAAe,kBAAkB,EAAG,OAEjD,IAAM,EAAQ,SAAS,cAAc,OAAO,EAC5C,EAAM,GAAK,mBACX,EAAM,YAAc;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAapB,SAAS,KAAK,YAAY,CAAK,GRhJjC,IAAM,GAAa,CAAC,EAAqB,CAAC,IAAqB,CAC7D,IAAM,EAAa,GAAiB,CAAM,EAG1C,GAAkB,EAElB,GAAI,CAEF,IAAM,EAAY,EAChB,EACA,EAAW,EACX,GAAqB,CAAU,EAC/B,GAAe,CAAU,EACzB,GAAmB,CAAU,EAC7B,GAAY,CAAU,EACtB,GAAc,CAAU,EACxB,EAAc,EACd,KAAQ,GAAQ,GAAa,CAAI,CAAC,EAAE,CAAI,CAC1C,EAAE,CAAU,EAKZ,OAFA,GAAwB,CAAS,EAE1B,EACP,MAAO,EAAO,CAEd,MADA,QAAQ,MAAM,uBAAwB,CAAK,EACjC,MAAM,0BAA2B,EAAgB,SAAS,IAIzD,MSdf,IAAe,MCtDf,KACA,IACA,IACA,ICHA,ICIO,IAAM,GAAmB,CAE9B,KAAM,OAEN,MAAO,OACT,EAMa,GAA0B,CAErC,SAAU,WAEV,WAAY,YACd,EAMa,GAAqB,CAEhC,KAAM,MAEN,SAAU,KACZ,EAiBO,IAAM,GAAoB,CAE/B,OAAQ,SAER,KAAM,OAEN,MAAO,QAEP,QAAS,UAET,OAAQ,QACV,EAMa,GAAkB,CAE7B,SAAU,IAEV,aAAc,GAEd,aAAc,IAEd,YAAa,GAEb,YAAa,EAEb,UAAW,GAEX,YAAa,CACf,EAMa,GAAoB,CAE/B,SAAU,MAAM,KAAK,CAAE,OAAQ,EAAG,EAAG,CAAC,EAAG,IAAO,IAAM,EAAI,GAAK,CAAE,EAEjE,SAAU,MAAM,KAAK,CAAE,OAAQ,EAAG,EAAG,CAAC,EAAG,IAAM,CAAC,EAEhD,QAAS,MAAM,KAAK,CAAE,OAAQ,EAAG,EAAG,CAAC,EAAG,IAAM,CAAC,EAE/C,QAAS,MAAM,KAAK,CAAE,OAAQ,EAAG,EAAG,CAAC,EAAG,IAAM,CAAC,CACjD,EAMa,GAAqB,CAEhC,MAAO,KAEP,OAAQ,IACV,EAMa,GAAuB,CAElC,UAAW,oBAEX,MAAO,0BAEP,OAAQ,2BAER,MAAO,0BAEP,QAAS,4BAET,KAAM,yBAEN,YAAa,gCAEb,UAAW,8BAEX,UAAW,8BAEX,YAAa,gCAEb,aAAc,iCAEd,YAAa,gCAEb,gBAAiB,oCAEjB,YAAa,0BAEb,cAAe,4BAEf,cAAe,4BAEf,UAAW,8BAEX,iBAAkB,2BAElB,UAAW,8BAEX,UAAW,8BAEX,QAAS,4BAET,mBAAoB,gCAEpB,cAAe,2BAEf,eAAgB,2BAClB,EAMa,GAAmB,CAE9B,MAAO;AAAA;AAAA;AAAA,UAMP,SAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SAYZ,EAMa,GAAsB,CAEjC,KAAM,GAAiB,KAEvB,OAAQ,GAAmB,KAE3B,YAAa,GAAwB,SAErC,aAAc,GAEd,gBAAiB,GAEjB,YAAa,EAEb,YAAa,EAEb,YAAa,SAEb,aAAc,KAEd,QAAS,GAET,WAAY,GAAiB,MAE7B,cAAe,GAAiB,QAClC,ED3MO,IAAM,GAAkC,CAC7C,YACA,aACA,uBACA,YAAa,GAAoB,aACjC,cAAe,GAAoB,gBACnC,WAAY,GAAoB,YAChC,WAAY,GAAoB,YAChC,WAAY,GAAoB,YAChC,YAAa,GAAoB,aACjC,OAAQ,GAAoB,QAC5B,UAAW,GAAiB,MAC5B,aAAc,GAAiB,QACjC,EAOa,GAAmB,CAC9B,EAA2B,CAAC,IAE5B,EACE,GACA,EACA,aACF,EAOW,GAAqB,CAAC,IAA6B,CAC9D,OAAO,EAAoB,EAAQ,CACjC,IAAK,MACL,WAAY,CACV,KAAM,SACN,aAAc,OACd,kBAAmB,GAAG,EAAO,0BAC/B,EACA,UAAW,CACT,EAAO,MACP,EAAO,OAAS,GAAG,EAAO,2BAA6B,EACzD,EACA,cAAe,CACb,MAAO,GACP,QAAS,EACX,EACA,YAAa,EACf,CAAC,GAsDI,IAAM,GAAe,CAAC,KAAe,CAC1C,OAAQ,CACN,GAAI,CAAC,EAAe,IAAsB,EAAK,GAAG,EAAO,CAAO,EAChE,IAAK,CAAC,EAAe,IAAsB,EAAK,IAAI,EAAO,CAAO,EAClE,KAAM,CAAC,EAAe,IAAe,EAAK,KAAK,EAAO,CAAI,CAC5D,EACA,UAAW,CACT,QAAS,IAAM,EAAK,UAAU,QAAQ,CACxC,CACF,GE1HO,IAAM,GAAU,CAAC,IAAwB,CAC9C,OAAO,EAAI,SAAS,EAAE,SAAS,EAAG,GAAG,GAS1B,GAAY,CACvB,EAEA,IACc,CAEd,GAAI,CACF,IAAM,EAAQ,EAAW,MAAM,GAAG,EAC5B,EAAQ,SAAS,EAAM,GAAI,EAAE,EAC7B,EAAU,SAAS,EAAM,GAAI,EAAE,EAC/B,EAAU,EAAM,GAAK,SAAS,EAAM,GAAI,EAAE,EAAI,EAGpD,GACE,MAAM,CAAK,GACX,EAAQ,GACR,EAAQ,IACR,MAAM,CAAO,GACb,EAAU,GACV,EAAU,IACV,MAAM,CAAO,GACb,EAAU,GACV,EAAU,GAEV,MAAU,MAAM,qBAAqB,EAIvC,IAAM,EAAS,GAAS,aAKxB,MAAO,CAAE,QAAO,UAAS,UAAS,QAAO,EACzC,MAAO,EAAO,CACd,QAAQ,MAAM,sBAAuB,CAAK,EAG1C,IAAM,EAAM,IAAI,KACV,EAAQ,EAAI,SAAS,EACrB,EAAU,EAAI,WAAW,EACzB,EAAU,EAAI,WAAW,EACzB,EAAS,GAAS,aAExB,MAAO,CAAE,QAAO,UAAS,UAAS,QAAO,IAUhC,GAAa,CACxB,EACA,IACW,CACX,IAAQ,QAAO,UAAS,WAAY,EAEpC,GAAI,EAAiB,CACnB,GAAI,IAAY,OACd,MAAO,GAAG,GAAQ,CAAK,KAAK,GAAQ,CAAO,KAAK,GAAQ,CAAO,IAEjE,MAAO,GAAG,GAAQ,CAAK,KAAK,GAAQ,CAAO,IACtC,KAEL,IAAI,EAAe,EAAQ,GAC3B,GAAI,IAAiB,EACnB,EAAe,GAGjB,GAAI,IAAY,OACd,MAAO,GAAG,GAAQ,CAAY,KAAK,GAAQ,CAAO,KAAK,GACrD,CACF,KAAK,EAAU,SAEjB,MAAO,GAAG,GAAQ,CAAY,KAAK,GAAQ,CAAO,KAAK,EAAU,WAuB9D,IAAM,GAAkB,CAC7B,IAC2C,CAC3C,IAAM,EAAS,GAAW,aACtB,EAAU,EAAU,GACxB,GAAI,IAAY,EACd,EAAU,GAGZ,MAAO,CAAE,MAAO,EAAS,QAAO,GCjGlC,IAAM,GAAkB,IACnB,GACH,UAAW,GACX,YAAa,EACb,YAAa,GACb,aAAc,GACd,aAAc,IACd,YAAa,IACb,WAAY,CACd,EAOA,SAAS,EAAc,CAAC,EAA6B,CACnD,IAAM,EAAO,SAAS,gBAChB,EAAS,iBAAiB,CAAI,EAG9B,EACJ,EAAO,iBAAiB,KAAK,qBAA0B,EAAE,KAAK,GAC9D,UAGI,EACJ,EAAO,iBAAiB,KAAK,wBAA6B,EAAE,KAAK,GACjE,UAGI,EACJ,EAAO,iBAAiB,KAAK,wBAA6B,EAAE,KAAK,GACjE,UAGI,EACJ,EAAO,iBAAiB,KAAK,yBAA8B,EAAE,KAAK,GAClE,eAQI,EAAU,QAJd,EAAO,iBAAiB,KAAK,4BAAiC,EAAE,KAAK,GACrE,sBAMI,EAAkB,QAAQ,UAEhC,MAAO,CACL,eACA,iBACA,iBACA,UACA,iBACF,EASK,IAAM,GAAkB,CAC7B,EACA,EACA,IACS,CAET,IAAM,EAAM,EAAO,WAAW,IAAI,EAClC,GAAI,CAAC,EAAK,CACR,QAAQ,MAAM,8BAA8B,EAC5C,OAIF,IAAM,EAAS,GAAe,EAAQ,MAAM,EAGtC,EAAmB,OAAO,kBAAoB,EACpD,EAAO,MAAQ,GAAgB,SAAW,EAC1C,EAAO,OAAS,GAAgB,SAAW,EAG3C,EAAI,MAAM,EAAkB,CAAgB,EAE5C,IAAM,EAAU,GAAgB,SAAW,EACrC,EAAU,GAAgB,SAAW,EACrC,EAAS,GAAgB,SAAW,EAkB1C,GAfA,EAAI,UAAU,EAAG,EAAG,EAAO,MAAO,EAAO,MAAM,EAG/C,EAAI,UAAU,EACd,EAAI,IAAI,EAAS,EAAS,EAAS,EAAG,EAAG,EAAI,KAAK,EAAE,EACpD,EAAI,UAAY,EAAO,QACvB,EAAI,KAAK,EAGT,EAAI,UAAU,EACd,EAAI,IAAI,EAAS,EAAS,GAAgB,YAAc,EAAG,EAAG,EAAI,KAAK,EAAE,EACzE,EAAI,UAAY,EAAO,aACvB,EAAI,KAAK,EAGL,EAAQ,iBAAmB,OAE7B,GAAI,EAAQ,eAEV,GAAkB,EAAK,EAAS,EAAS,EAAQ,EAAU,MAAO,CAAM,EAGxE,QACE,EACA,EACA,EACA,EACA,EAAU,MAAQ,IAAM,GACxB,CACF,EAEG,QAAI,EAAQ,iBAAmB,SAEpC,GAAkB,EAAK,EAAS,EAAS,EAAQ,EAAU,QAAS,CAAM,EACrE,QAAI,EAAQ,iBAAmB,UAAY,EAAQ,YAExD,GACE,EACA,EACA,EACA,EACA,EAAU,SAAW,EACrB,CACF,EAIF,GAAc,EAAK,EAAS,EAAS,EAAW,EAAS,CAAM,GAM3D,GAAoB,CACxB,EACA,EACA,EACA,EACA,EACA,IACS,CACT,IAAM,EAAgB,GAAgB,aAEtC,QAAS,EAAO,EAAG,GAAQ,GAAI,IAAQ,CACrC,IAAM,EAAS,EAAO,EAAK,KAAK,GAAK,KAAK,GAAK,EACzC,EAAI,EAAU,EAAgB,KAAK,IAAI,CAAK,EAC5C,EAAI,EAAU,EAAgB,KAAK,IAAI,CAAK,EAE5C,EAAa,IAAS,EAG5B,GAAI,EACF,EAAI,UAAU,EACd,EAAI,IAAI,EAAG,EAAG,GAAgB,YAAc,EAAG,EAAG,EAAI,KAAK,EAAE,EAC7D,EAAI,UAAY,EAAO,gBACvB,EAAI,KAAK,EAIX,EAAI,KAAO,iCACX,EAAI,UAAY,EAAa,EAAO,aAAe,EAAO,eAC1D,EAAI,UAAY,SAChB,EAAI,aAAe,SACnB,EAAI,SAAS,EAAK,SAAS,EAAG,EAAG,EAAI,CAAC,IAOpC,GAAoB,CACxB,EACA,EACA,EACA,EACA,EACA,IACS,CAET,IAAM,EAAc,GAAgB,aAEpC,QAAS,EAAO,EAAG,GAAQ,GAAI,IAAQ,CACrC,IAAM,EAAS,EAAO,EAAK,KAAK,GAAK,KAAK,GAAK,EACzC,EAAI,EAAU,EAAc,KAAK,IAAI,CAAK,EAC1C,EAAI,EAAU,EAAc,KAAK,IAAI,CAAK,EAE1C,EAAa,IAAS,EAG5B,GAAI,EACF,EAAI,UAAU,EACd,EAAI,IAAI,EAAG,EAAG,GAAgB,YAAc,EAAG,EAAG,EAAI,KAAK,EAAE,EAC7D,EAAI,UAAY,EAAO,gBACvB,EAAI,KAAK,EAIX,EAAI,KAAO,iCACX,EAAI,UAAY,EAAa,EAAO,aAAe,EAAO,eAC1D,EAAI,UAAY,SAChB,EAAI,aAAe,SACnB,EAAI,SAAS,EAAK,SAAS,EAAG,EAAG,EAAI,CAAC,EAIxC,IAAM,EAAc,GAAgB,aAEpC,QAAS,EAAO,GAAI,GAAQ,GAAI,IAAQ,CACtC,IAAM,EAAc,IAAS,GAAK,EAAI,EAChC,GAAU,EAAO,IAAM,EAAK,KAAK,GAAK,KAAK,GAAK,EAChD,EAAI,EAAU,EAAc,KAAK,IAAI,CAAK,EAC1C,EAAI,EAAU,EAAc,KAAK,IAAI,CAAK,EAE1C,EAAa,IAAgB,EAGnC,GAAI,EACF,EAAI,UAAU,EACd,EAAI,IAAI,EAAG,EAAG,GAAgB,YAAc,EAAG,EAAG,EAAI,KAAK,EAAE,EAC7D,EAAI,UAAY,EAAO,gBACvB,EAAI,KAAK,EAIX,EAAI,KAAO,iCACX,EAAI,UAAY,EAAa,EAAO,aAAe,EAAO,eAC1D,EAAI,UAAY,SAChB,EAAI,aAAe,SACnB,EAAI,SAAS,GAAQ,CAAW,EAAG,EAAG,EAAI,CAAC,IAOzC,GAAoB,CACxB,EACA,EACA,EACA,EACA,EACA,IACS,CACT,IAAM,EAAgB,GAAgB,aAGtC,QAAS,EAAI,EAAG,EAAI,GAAI,GAAK,EAAG,CAC9B,IAAM,EAAS,EAAI,GAAM,KAAK,GAAK,KAAK,GAAK,EACvC,EAAI,EAAU,EAAgB,KAAK,IAAI,CAAK,EAC5C,EAAI,EAAU,EAAgB,KAAK,IAAI,CAAK,EAE5C,EAAa,IAAM,EAGzB,GAAI,EACF,EAAI,UAAU,EACd,EAAI,IAAI,EAAG,EAAG,GAAgB,YAAc,EAAG,EAAG,EAAI,KAAK,EAAE,EAC7D,EAAI,UAAY,EAAO,gBACvB,EAAI,KAAK,EAIX,EAAI,KAAO,iCACX,EAAI,UAAY,EAAa,EAAO,aAAe,EAAO,eAC1D,EAAI,UAAY,SAChB,EAAI,aAAe,SACnB,EAAI,SAAS,GAAQ,CAAC,EAAG,EAAG,CAAC,EAI/B,GAAI,EAAiB,IAAM,EAAG,CAC5B,IAAM,EAAS,EAAiB,GAAM,KAAK,GAAK,KAAK,GAAK,EACpD,EAAI,EAAU,EAAgB,KAAK,IAAI,CAAK,EAC5C,EAAI,EAAU,EAAgB,KAAK,IAAI,CAAK,EAGlD,EAAI,UAAU,EACd,EAAI,IAAI,EAAG,EAAG,GAAgB,YAAc,EAAG,EAAG,EAAI,KAAK,EAAE,EAC7D,EAAI,UAAY,EAAO,gBACvB,EAAI,KAAK,EAGT,EAAI,KAAO,iCACX,EAAI,UAAY,EAAO,aACvB,EAAI,UAAY,SAChB,EAAI,aAAe,SACnB,EAAI,SAAS,GAAQ,CAAc,EAAG,EAAG,CAAC,IAOxC,GAAgB,CACpB,EACA,EACA,EACA,EACA,EACA,IACS,CACT,IAAI,EAAe,EAGnB,GAAI,EAAQ,iBAAmB,OAC7B,GAAI,EAAQ,eAEV,GAAI,EAAU,OAAS,GAGrB,GADe,EAAU,MAAQ,IAAM,IACrB,EAAK,KAAK,GAAK,KAAK,GAAK,EAC3C,EAAa,GAAgB,aACxB,KAEL,IAAI,EAAS,EAAU,MACvB,GAAI,IAAW,EAAG,EAAS,GAC3B,EAAS,EAAS,EAAK,KAAK,GAAK,KAAK,GAAK,EAC3C,EAAa,GAAgB,aAK/B,QADe,EAAU,MAAQ,IAAM,IACrB,EAAK,KAAK,GAAK,KAAK,GAAK,EAC3C,EAAa,GAAgB,aAE1B,QAAI,EAAQ,iBAAmB,SAEpC,EAAS,EAAU,QAAU,GAAM,KAAK,GAAK,KAAK,GAAK,EACvD,EAAa,GAAgB,aACxB,QAAI,EAAQ,iBAAmB,SAEpC,GAAU,EAAU,SAAW,GAAK,GAAM,KAAK,GAAK,KAAK,GAAK,EAC9D,EAAa,GAAgB,aAE7B,YAIF,EAAI,UAAU,EACd,EAAI,OAAO,EAAS,CAAO,EAC3B,EAAI,OACF,EAAU,EAAa,KAAK,IAAI,CAAK,EACrC,EAAU,EAAa,KAAK,IAAI,CAAK,CACvC,EACA,EAAI,UAAY,GAAgB,WAChC,EAAI,YAAc,EAAO,aACzB,EAAI,OAAO,EAGX,IAAM,EAAQ,EAAU,EAAa,KAAK,IAAI,CAAK,EAC7C,EAAQ,EAAU,EAAa,KAAK,IAAI,CAAK,EAGnD,EAAI,UAAU,EACd,EAAI,IAAI,EAAO,EAAO,GAAgB,UAAY,EAAG,EAAG,EAAI,KAAK,EAAE,EACnE,EAAI,UAAY,EAAO,aACvB,EAAI,KAAK,EAGT,EAAI,KAAO,iCACX,EAAI,UAAY,EAAO,eACvB,EAAI,UAAY,SAChB,EAAI,aAAe,SAGnB,IAAI,EAAe,GACnB,GAAI,EAAQ,iBAAmB,OAC7B,GAAI,EAAQ,eACV,EAAe,GAAQ,EAAU,KAAK,EAEtC,OAAe,OAAO,EAAU,MAAQ,IAAM,EAAE,EAE7C,QAAI,EAAQ,iBAAmB,SACpC,EAAe,GAAQ,EAAU,OAAO,EACnC,QAAI,EAAQ,iBAAmB,SACpC,EAAe,GAAQ,EAAU,SAAW,CAAC,EAG/C,EAAI,SAAS,EAAc,EAAO,CAAK,GAW5B,GAAwB,CACnC,EACA,EACA,EACA,IACkB,CAClB,IAAM,EAAU,GAAgB,SAAW,EACrC,EAAU,GAAgB,SAAW,EAGrC,EAAO,EAAI,EACX,EAAO,EAAI,EAGX,EAAW,KAAK,KAAK,EAAO,EAAO,EAAO,CAAI,EAGhD,EAAQ,KAAK,MAAM,EAAM,CAAI,EAAI,KAAK,GAAK,EAC/C,GAAI,EAAQ,EAAG,GAAS,EAAI,KAAK,GAGjC,GAAI,EAAQ,iBAAmB,OAC7B,GAAI,EAAQ,eAAiC,CAE3C,IAAM,GACH,GAAgB,aAAe,GAAgB,cAAgB,EAC5D,EAAc,EAAW,EAG3B,EAAO,KAAK,MAAM,GAAS,KAAK,GAAK,EAAE,EAAI,GAG/C,GAAI,GAAe,IAAS,EAC1B,GAAQ,GACH,QAAI,CAAC,GAAe,IAAS,EAClC,EAAO,GACF,QAAI,GAAe,IAAS,EACjC,EAAO,EAGT,OAAO,EACF,KAEL,IAAI,EAAO,KAAK,MAAM,GAAS,KAAK,GAAK,EAAE,EAAI,GAC/C,GAAI,IAAS,EAAG,EAAO,GACvB,OAAO,EAEJ,QACL,EAAQ,iBAAmB,UAC3B,EAAQ,iBAAmB,SAI3B,OADc,KAAK,MAAM,GAAS,KAAK,GAAK,GAAG,EAAI,GAIrD,OAAO,MCtdF,IAAM,GAAmB,CAC9B,EACA,EACA,EACA,IACS,CAKT,GAHA,EAAU,UAAY,GAGlB,EAAO,MAAO,CAChB,IAAM,EAAQ,SAAS,cAAc,KAAK,EAC1C,EAAM,UAAY,GAAG,EAAO,2BAC5B,EAAM,YAAc,EAAO,MAC3B,EAAM,GAAK,GAAG,EAAO,2BACrB,EAAU,YAAY,CAAK,EAI7B,IAAM,EAAU,SAAS,cAAc,KAAK,EAC5C,EAAQ,UAAY,GAAG,EAAO,6BAC9B,EAAU,YAAY,CAAO,EAG7B,IAAM,EAAiB,SAAS,cAAc,KAAK,EACnD,EAAe,UAAY,GAAG,EAAO,qCACrC,EAAQ,YAAY,CAAc,EAGlC,IAAQ,MAAO,GACb,EAAO,eACH,CAAE,MAAO,EAAU,KAAM,EACzB,GAAgB,EAAU,KAAK,EAG/B,EAAsB,SAAS,cAAc,KAAK,EACxD,EAAoB,UAAY,GAAG,EAAO,sCAE1C,IAAM,EAAa,SAAS,cAAc,OAAO,EACjD,EAAW,KAAO,SAClB,EAAW,UAAY,GAAG,EAAO,2BACjC,EAAW,IAAM,EAAO,eAAkC,IAAM,IAChE,EAAW,IAAM,EAAO,eAAkC,KAAO,KACjE,EAAW,MAAQ,GAAQ,CAAY,EACvC,EAAW,aAAa,YAAa,MAAM,EAC3C,EAAW,aAAa,YAAa,SAAS,EAC9C,EAAW,aAAa,UAAW,QAAQ,EAE3C,EAAoB,YAAY,CAAU,EAC1C,EAAe,YAAY,CAAmB,EAG9C,IAAM,EAAY,SAAS,cAAc,KAAK,EAC9C,EAAU,UAAY,GAAG,EAAO,+BAChC,EAAU,YAAc,IACxB,EAAe,YAAY,CAAS,EAGpC,IAAM,EAAwB,SAAS,cAAc,KAAK,EAC1D,EAAsB,UAAY,GAAG,EAAO,sCAE5C,IAAM,EAAe,SAAS,cAAc,OAAO,EACnD,EAAa,KAAO,SACpB,EAAa,UAAY,GAAG,EAAO,6BACnC,EAAa,IAAM,IACnB,EAAa,IAAM,KACnB,EAAa,MAAQ,GAAQ,EAAU,OAAO,EAC9C,EAAa,aAAa,YAAa,QAAQ,EAC/C,EAAa,aAAa,YAAa,SAAS,EAChD,EAAa,aAAa,UAAW,QAAQ,EAE7C,EAAsB,YAAY,CAAY,EAC9C,EAAe,YAAY,CAAqB,EAGhD,IAAI,EACJ,GAAI,EAAO,YAAa,CACtB,IAAM,EAAmB,SAAS,cAAc,KAAK,EACrD,EAAiB,UAAY,GAAG,EAAO,+BACvC,EAAiB,YAAc,IAC/B,EAAe,YAAY,CAAgB,EAE3C,IAAM,EAAwB,SAAS,cAAc,KAAK,EAC1D,EAAsB,UAAY,GAAG,EAAO,sCAE5C,EAAe,SAAS,cAAc,OAAO,EAC7C,EAAa,KAAO,SACpB,EAAa,UAAY,GAAG,EAAO,6BACnC,EAAa,IAAM,IACnB,EAAa,IAAM,KACnB,EAAa,MAAQ,GAAQ,EAAU,SAAW,CAAC,EACnD,EAAa,aAAa,YAAa,QAAQ,EAC/C,EAAa,aAAa,YAAa,SAAS,EAChD,EAAa,aAAa,UAAW,QAAQ,EAE7C,IAAM,EAAe,SAAS,cAAc,OAAO,EACnD,EAAa,UAAY,GAAG,EAAO,iCACnC,EAAa,YAAc,SAE3B,EAAsB,YAAY,CAAY,EAC9C,EAAsB,YAAY,CAAY,EAC9C,EAAe,YAAY,CAAqB,EAIlD,GAAI,EAAO,eAA6B,CACtC,IAAM,EAAkB,SAAS,cAAc,KAAK,EACpD,EAAgB,UAAY,GAAG,EAAO,4BAEtC,IAAM,EAAW,SAAS,cAAc,KAAK,EAC7C,EAAS,UAAY,GAAG,EAAO,gCAC7B,EAAU,cACN,GAAG,EAAO,sCACV,KAEN,EAAS,iBACT,EAAS,aAAa,OAAQ,QAAQ,EACtC,EAAS,aAAa,WAAY,GAAG,EACrC,EAAS,aACP,eACA,EAAU,cAA4B,OAAS,OACjD,EAEA,IAAM,EAAW,SAAS,cAAc,KAAK,EAC7C,EAAS,UAAY,GAAG,EAAO,gCAC7B,EAAU,cACN,GAAG,EAAO,sCACV,KAEN,EAAS,iBACT,EAAS,aAAa,OAAQ,QAAQ,EACtC,EAAS,aAAa,WAAY,GAAG,EACrC,EAAS,aACP,eACA,EAAU,cAA4B,OAAS,OACjD,EAEA,EAAgB,YAAY,CAAQ,EACpC,EAAgB,YAAY,CAAQ,EACpC,EAAe,YAAY,CAAe,EAI5C,IAAM,EAAgB,SAAS,cAAc,KAAK,EAClD,EAAc,UAAY,GAAG,EAAO,0BACpC,EAAc,MAAM,QAClB,EAAO,cAAiC,QAAU,OACpD,EAAQ,YAAY,CAAa,EAGjC,IAAM,EAAS,SAAS,cAAc,QAAQ,EAC9C,EAAO,UAAY,GAAG,EAAO,iCAC7B,EAAO,MAAQ,GAAgB,SAC/B,EAAO,OAAS,GAAgB,SAChC,EAAO,MAAM,MAAQ,GAAG,GAAgB,aACxC,EAAO,MAAM,OAAS,GAAG,GAAgB,aACzC,EAAc,YAAY,CAAM,EAGhC,IAAM,EAAU,SAAS,cAAc,KAAK,EAC5C,EAAQ,UAAY,GAAG,EAAO,6BAC9B,EAAU,YAAY,CAAO,EAG7B,IAAM,EAAmB,SAAS,cAAc,QAAQ,EACxD,EAAiB,UAAY,GAAG,EAAO,iCACvC,EAAiB,aACf,aACA,EAAO,cACH,2BACA,yBACN,EACA,EAAiB,UACf,EAAO,cACH,EAAO,cAAgB,GAAiB,SACxC,EAAO,WAAa,GAAiB,MAC3C,EAAQ,YAAY,CAAgB,EAGpC,IAAM,EAAgB,SAAS,cAAc,KAAK,EAClD,EAAc,UAAY,GAAG,EAAO,oCACpC,EAAQ,YAAY,CAAa,EAGjC,IAAM,EAAe,SAAS,cAAc,QAAQ,EACpD,EAAa,UAAY,GAAG,EAAO,4BACnC,EAAa,YAAc,EAAO,YAAc,SAChD,EAAa,aAAa,OAAQ,QAAQ,EAC1C,EAAc,YAAY,CAAY,EAGtC,IAAM,EAAgB,SAAS,cAAc,QAAQ,EACrD,EAAc,UAAY,GAAG,EAAO,6BACpC,EAAc,YAAc,EAAO,aAAe,KAClD,EAAc,aAAa,OAAQ,QAAQ,EAC3C,EAAc,YAAY,CAAa,EAGvC,IAAI,EAA+C,OAGnD,GAAI,EAAO,cACT,WAAW,IAAM,CACf,GAAgB,EAAQ,EAAW,CACjC,KAAM,EAAO,KACb,OAAQ,EAAO,OACf,YAAa,EAAO,YACpB,OAAQ,EAAO,OACf,gBACF,CAAC,GACA,CAAC,EAIN,EAAiB,iBAAiB,QAAS,IAAM,CAE/C,GAAI,EAAc,MAAM,UAAY,OAElC,EAAc,MAAM,QAAU,QAC9B,EAAiB,UACf,EAAO,cAAgB,GAAiB,SAC1C,EAAiB,aAAa,aAAc,0BAA0B,EAGtE,WAAW,IAAM,CACf,EAAO,MAAM,EAGQ,SAAS,iBAC5B,IAAI,EAAO,0BACb,EACa,QAAQ,CAAC,IAAO,EAAG,aAAa,cAAe,MAAM,CAAC,EAE5C,SAAS,iBAC9B,IAAI,EAAO,4BACb,EACe,QAAQ,CAAC,IAAO,EAAG,aAAa,cAAe,OAAO,CAAC,EAE/C,SAAS,iBAC9B,IAAI,EAAO,4BACb,EACe,QAAQ,CAAC,IAAO,EAAG,aAAa,cAAe,OAAO,CAAC,EAGtE,GAAgB,EAAQ,EAAW,CACjC,YACA,OAAQ,EAAO,OACf,YAAa,EAAO,YACpB,OAAQ,EAAO,OACf,eAAgB,MAClB,CAAC,GACA,EAAE,EAGL,OAAc,MAAM,QAAU,OAC9B,EAAiB,UAAY,EAAO,WAAa,GAAiB,MAClE,EAAiB,aAAa,aAAc,yBAAyB,EAGrE,WAAW,IAAM,CACf,EAAW,MAAM,EACjB,EAAW,OAAO,GACjB,EAAE,EAER,EAGD,IAAM,EAAoB,CAAC,IAAa,CACtC,IAAM,EAAS,EAAE,OACX,EAAO,EAAO,aAAa,WAAW,EACtC,EAAQ,EAAO,MAGrB,GAAI,IAAU,GAAI,OAElB,IAAM,EAAW,SAAS,EAAO,EAAE,EACnC,GAAI,MAAM,CAAQ,EAAG,OAErB,GAAI,IAAS,OAAQ,CACnB,IAAI,EAAW,EAGf,GAAI,EAAO,eAA6B,CAEtC,GAAI,EAAW,EAAG,EAAW,EAC7B,GAAI,EAAW,GAAI,EAAW,GAG9B,GAAI,EAAU,eAA6B,IAAa,GACtD,GAAY,GACP,QAAI,EAAU,eAA6B,IAAa,GAC7D,EAAW,EAER,KAEL,GAAI,EAAW,EAAG,EAAW,EAC7B,GAAI,EAAW,GAAI,EAAW,GAWhC,GARA,EAAU,MAAQ,EAGlB,EAAiB,OAGjB,EAAW,aAAa,cAAe,MAAM,EAC7C,EAAa,aAAa,cAAe,OAAO,EAC5C,EAAc,EAAa,aAAa,cAAe,OAAO,EAWlE,GARA,GAAgB,EAAQ,EAAW,CACjC,YACA,OAAQ,EAAO,OACf,YAAa,EAAO,YACpB,OAAQ,EAAO,OACf,gBACF,CAAC,EAEG,EACF,EAAa,QAAS,CAAQ,EAE3B,QAAI,IAAS,SAAU,CAC5B,IAAI,EAAa,EAGjB,GAAI,EAAW,EAAG,EAAa,EAC/B,GAAI,EAAW,GAAI,EAAa,GAUhC,GARA,EAAU,QAAU,EAGpB,EAAiB,SAGjB,EAAW,aAAa,cAAe,OAAO,EAC9C,EAAa,aAAa,cAAe,MAAM,EAC3C,EAAc,EAAa,aAAa,cAAe,OAAO,EAWlE,GARA,GAAgB,EAAQ,EAAW,CACjC,YACA,OAAQ,EAAO,OACf,YAAa,EAAO,YACpB,OAAQ,EAAO,OACf,gBACF,CAAC,EAEG,EACF,EAAa,UAAW,CAAU,EAE/B,QAAI,IAAS,SAAU,CAC5B,IAAI,EAAa,EAGjB,GAAI,EAAW,EAAG,EAAa,EAC/B,GAAI,EAAW,GAAI,EAAa,GAUhC,GARA,EAAU,QAAU,EAGpB,EAAiB,SAGjB,EAAW,aAAa,cAAe,OAAO,EAC9C,EAAa,aAAa,cAAe,OAAO,EAC5C,EAAc,EAAa,aAAa,cAAe,MAAM,EAWjE,GARA,GAAgB,EAAQ,EAAW,CACjC,YACA,OAAQ,EAAO,OACf,YAAa,EAAO,YACpB,OAAQ,EAAO,OACf,gBACF,CAAC,EAEG,EACF,EAAa,UAAW,CAAU,IAQxC,GAFA,EAAW,iBAAiB,QAAS,CAAiB,EACtD,EAAa,iBAAiB,QAAS,CAAiB,EACpD,EACF,EAAa,iBAAiB,QAAS,CAAiB,EAsB1D,GAlBA,EAAW,iBAAiB,QAAS,CAAC,IAAM,CAC1C,GAAI,EAAE,MAAQ,QACZ,EAAa,MAAM,EACnB,EAAa,OAAO,EAEvB,EAED,EAAa,iBAAiB,QAAS,CAAC,IAAM,CAC5C,GAAI,EAAE,MAAQ,QACZ,GAAI,EAAO,aAAe,EACxB,EAAa,MAAM,EACnB,EAAa,OAAO,EAEpB,OAAc,MAAM,EAGzB,EAEG,EACF,EAAa,iBAAiB,QAAS,CAAC,IAAM,CAC5C,GAAI,EAAE,MAAQ,QACZ,EAAc,MAAM,EAEvB,EAIH,IAAM,EAAqB,CAAC,IAAwB,CAClD,GAAI,EAAU,SAAW,EAAQ,CAC/B,IAAM,EAAY,EAAU,OAI5B,GAHA,EAAU,OAAS,EAGf,UAAgC,UAClC,GAAI,EAAU,MAAQ,GACpB,EAAU,OAAS,GAEhB,QAAI,UAAgC,UACzC,GAAI,EAAU,OAAS,GACrB,EAAU,OAAS,GAKvB,GAAI,EAAO,eAA6B,CACtC,IAAM,EACJ,EAAU,QAAU,EAChB,GACA,EAAU,MAAQ,GAClB,EAAU,MAAQ,GAClB,EAAU,MAChB,EAAW,MAAQ,GAAQ,CAAY,EAIzC,SACG,iBACC,IAAI,EAAO,kCAAkC,EAAO,8BACtD,EACC,QAAQ,CAAC,IAAO,CACf,EAAG,UAAU,OAAO,GAAG,EAAO,qCAAqC,EACnE,EAAG,aAAa,eAAgB,OAAO,EACxC,EAEH,IAAM,EAAiB,SAAS,cAC9B,IAAI,EAAO,6BAA6B,EAAO,YAAY,GAC7D,EACA,GAAI,EACF,EAAe,UAAU,IACvB,GAAG,EAAO,qCACZ,EACA,EAAe,aAAa,eAAgB,MAAM,EAIpD,GAAI,EAAc,MAAM,UAAY,QAClC,GAAgB,EAAQ,EAAW,CACjC,YACA,OAAQ,EAAO,OACf,YAAa,EAAO,YACpB,OAAQ,EAAO,OACf,gBACF,CAAC,EAGH,GAAI,EACF,EAAa,QAAS,EAAU,KAAK,IAM3C,GAAI,EAAO,eAA6B,CACtC,IAAM,EAAkB,SAAS,cAC/B,IAAI,EAAO,8BACb,EACM,EAAkB,SAAS,cAC/B,IAAI,EAAO,8BACb,EAEA,GAAI,EACF,EAAgB,iBAAiB,QAAS,IAAM,CAC9C,MAAiC,EAClC,EAGH,GAAI,EACF,EAAgB,iBAAiB,QAAS,IAAM,CAC9C,MAAiC,EAClC,EAKL,GACE,EAAO,eACP,EAAc,MAAM,UAAY,SAkHhC,GA/GA,EAAO,iBAAiB,QAAS,CAAC,IAAU,CAC1C,IAAM,EAAO,EAAO,sBAAsB,EACpC,EAAI,EAAM,QAAU,EAAK,KACzB,EAAI,EAAM,QAAU,EAAK,IAEzB,EAAgB,GAAsB,EAAQ,EAAG,EAAG,CACxD,YACA,OAAQ,EAAO,OACf,YAAa,EAAO,YACpB,OAAQ,EAAO,OACf,gBACF,CAAC,EAED,GAAI,IAAkB,KAAM,CAC1B,GAAI,IAAmB,OAAQ,CAC7B,IAAI,EAAW,EAGf,GAAI,EAAO,gBACT,GAAI,EAAU,eAA6B,IAAkB,GAC3D,GAAY,GACP,QACL,EAAU,eACV,IAAkB,GAElB,EAAW,EAOf,GAHA,EAAU,MAAQ,EAGd,EAAO,eAA6B,CACtC,IAAM,EACJ,IAAa,EAAI,GAAK,EAAW,GAAK,EAAW,GAAK,EACxD,EAAW,MAAQ,GAAQ,CAAY,EAEvC,OAAW,MAAQ,GAAQ,CAAQ,EAGrC,GAAI,EACF,EAAa,QAAS,CAAQ,EAE3B,QAAI,IAAmB,UAI5B,GAHA,EAAU,QAAU,EACpB,EAAa,MAAQ,GAAQ,CAAa,EAEtC,EACF,EAAa,UAAW,CAAa,EAElC,QAAI,IAAmB,UAAY,GAIxC,GAHA,EAAU,QAAU,EACpB,EAAa,MAAQ,GAAQ,CAAa,EAEtC,EACF,EAAa,UAAW,CAAa,EAKzC,GAAgB,EAAQ,EAAW,CACjC,YACA,OAAQ,EAAO,OACf,YAAa,EAAO,YACpB,OAAQ,EAAO,OACf,gBACF,CAAC,GAEJ,EAGD,EAAW,iBAAiB,QAAS,IAAM,CACzC,GAAI,EAAc,MAAM,UAAY,QAAS,CAM3C,GALA,EAAiB,OAGjB,EAAW,aAAa,cAAe,MAAM,EAC7C,EAAa,aAAa,cAAe,OAAO,EAC5C,EAAc,EAAa,aAAa,cAAe,OAAO,EAGlE,GAAgB,EAAQ,EAAW,CACjC,YACA,OAAQ,EAAO,OACf,YAAa,EAAO,YACpB,OAAQ,EAAO,OACf,gBACF,CAAC,GAEJ,EAED,EAAa,iBAAiB,QAAS,IAAM,CAC3C,GAAI,EAAc,MAAM,UAAY,QAAS,CAM3C,GALA,EAAiB,SAGjB,EAAW,aAAa,cAAe,OAAO,EAC9C,EAAa,aAAa,cAAe,MAAM,EAC3C,EAAc,EAAa,aAAa,cAAe,OAAO,EAGlE,GAAgB,EAAQ,EAAW,CACjC,YACA,OAAQ,EAAO,OACf,YAAa,EAAO,YACpB,OAAQ,EAAO,OACf,gBACF,CAAC,GAEJ,EAEG,EACF,EAAa,iBAAiB,QAAS,IAAM,CAC3C,GAAI,EAAc,MAAM,UAAY,QAClC,EAAiB,SAGjB,EAAW,aAAa,cAAe,OAAO,EAC9C,EAAa,aAAa,cAAe,OAAO,EAChD,EAAa,aAAa,cAAe,MAAM,EAG/C,GAAgB,EAAQ,EAAW,CACjC,YACA,OAAQ,EAAO,OACf,YAAa,EAAO,YACpB,OAAQ,EAAO,OACf,gBACF,CAAC,EAEJ,IC7mBA,IAAM,GAAsB,CACjC,EACA,EACA,EACA,EACA,EACA,IACwB,CAExB,IAAI,EAAS,CAAC,CAAC,EAAO,OAGhB,EAAgB,CAAC,IAAyB,CAC9C,GAAI,EAAM,MAAQ,SAChB,EAAc,MAAM,EACpB,EAAQ,OAAO,KAAK,GAAO,MAAM,GAI/B,EAAqB,CAAC,IAAsB,CAChD,GAAI,EAAM,SAAW,EACnB,EAAc,MAAM,GAKlB,EAAqC,CACzC,QAAS,EAAc,QACvB,eACA,gBACA,SAEA,IAAI,EAAG,CACL,GAAI,EAAQ,OAAO,KA6BnB,GA1BA,EAAa,MAAM,QAAU,QAIxB,EAAa,YAClB,EAAa,UAAU,IAAI,QAAQ,EACnC,EAAc,UAAU,IAAI,QAAQ,EAGpC,SAAS,iBAAiB,UAAW,CAAa,EAClD,EAAa,iBAAiB,QAAS,CAAkB,EAGzD,EAAS,GACT,EAAc,QAAQ,UAAU,IAAI,GAAG,EAAO,0BAA0B,EAIxE,WAAW,IAAM,CACf,GAAiB,EAAe,EAAW,CAAM,GAChD,EAAE,EAGL,EAAQ,OAAO,KAAK,GAAO,IAAI,EAG3B,EAAO,OACT,EAAO,OAAO,EAGhB,OAAO,MAGT,KAAK,EAAG,CACN,GAAI,CAAC,EAAQ,OAAO,KAwBpB,GArBA,EAAa,UAAU,OAAO,QAAQ,EACtC,EAAc,UAAU,OAAO,QAAQ,EAGvC,WAAW,IAAM,CAEf,EAAa,MAAM,QAAU,QAC5B,GAAG,EAGN,SAAS,oBAAoB,UAAW,CAAa,EACrD,EAAa,oBAAoB,QAAS,CAAkB,EAG5D,EAAS,GACT,EAAc,QAAQ,UAAU,OAAO,GAAG,EAAO,0BAA0B,EAG3E,EAAQ,OAAO,KAAK,GAAO,KAAK,EAG5B,EAAO,QACT,EAAO,QAAQ,EAGjB,OAAO,MAGT,MAAM,EAAG,CACP,OAAO,EAAS,KAAK,MAAM,EAAI,KAAK,KAAK,GAG3C,QAAQ,EAAG,CACT,OAAO,GAAW,EAAW,EAAO,cAA+B,GAGrE,aAAa,EAAG,CACd,MAAO,IAAK,CAAU,GAGxB,QAAQ,CAAC,EAAc,CACrB,GAAI,CAEF,IAAM,EAAa,EAAK,MAAM,GAAG,EAC3B,EAAQ,SAAS,EAAW,GAAI,EAAE,EAClC,EAAU,SAAS,EAAW,GAAI,EAAE,EACpC,EAAU,EAAW,GAAK,SAAS,EAAW,GAAI,EAAE,EAAI,EAE9D,GACE,MAAM,CAAK,GAAK,EAAQ,GAAK,EAAQ,IACrC,MAAM,CAAO,GAAK,EAAU,GAAK,EAAU,IAC3C,MAAM,CAAO,GAAK,EAAU,GAAK,EAAU,GAE3C,MAAU,MAAM,8DAA8D,EAgBhF,GAZA,EAAU,MAAQ,EAClB,EAAU,QAAU,EACpB,EAAU,QAAU,EACpB,EAAU,OAAS,GAAS,aAG5B,GAAiB,EAAe,EAAW,CAAM,EAGjD,EAAQ,OAAO,KAAK,GAAO,OAAQ,KAAK,SAAS,CAAC,EAG9C,EAAO,SACT,EAAO,SAAS,KAAK,SAAS,CAAC,EAEjC,MAAO,EAAO,CACd,QAAQ,MAAM,4BAA6B,CAAK,EAGlD,OAAO,MAGT,OAAO,CAAC,EAAwB,CAC9B,GAAI,EAAO,OAAS,EAAM,OAAO,KAejC,OAZA,EAAO,KAAO,EAGd,EAAc,UAAU,OACtB,GAAG,EAAO,uCACV,GAAG,EAAO,uCACZ,EACA,EAAc,UAAU,IAAI,GAAG,EAAO,8BAA8B,GAAM,EAG1E,GAAiB,EAAe,EAAW,CAAM,EAE1C,MAGT,OAAO,EAAG,CACR,OAAO,EAAO,MAGhB,SAAS,CAAC,EAAqB,CAC7B,GAAI,EAAO,SAAW,EAAQ,OAAO,KAarC,GAVA,EAAO,OAAS,EAGhB,EAAc,UAAU,OACtB,GAAG,EAAO,sCACV,GAAG,EAAO,qCACZ,EACA,EAAc,UAAU,IAAI,GAAG,EAAO,8BAA8B,GAAQ,EAGxE,UAEF,EAAU,OAAS,EAAU,OAAS,aAGtC,OAAU,OAAS,EAAU,OAAS,aASxC,OALA,GAAiB,EAAe,EAAW,CAAM,EAGjD,EAAQ,OAAO,KAAK,GAAO,OAAQ,KAAK,SAAS,CAAC,EAE3C,MAGT,SAAS,EAAG,CACV,OAAO,EAAO,QAGhB,cAAc,CAAC,EAAsC,CACnD,GAAI,EAAO,cAAgB,EAAa,OAAO,KAe/C,OAZA,EAAO,YAAc,EAGrB,EAAc,UAAU,OACtB,GAAG,EAAO,2CACV,GAAG,EAAO,4CACZ,EACA,EAAc,UAAU,IAAI,GAAG,EAAO,8BAA8B,GAAa,EAGjF,GAAiB,EAAe,EAAW,CAAM,EAE1C,MAGT,cAAc,EAAG,CACf,OAAO,EAAO,aAGhB,QAAQ,CAAC,EAAe,CACtB,EAAO,MAAQ,EAGf,IAAM,EAAe,EAAc,cAAc,GAAU,KAAK,EAChE,GAAI,EACF,EAAa,YAAc,EAG3B,QAAiB,EAAe,EAAW,CAAM,EAGnD,OAAO,MAGT,QAAQ,EAAG,CACT,OAAO,EAAO,OAAS,IAGzB,OAAO,EAAG,CAER,GAAI,EACF,KAAK,MAAM,EAIb,GAAI,GAAgB,EAAa,WAC/B,EAAa,WAAW,YAAY,CAAY,EAIlD,EAAQ,UAAU,QAAQ,GAG5B,EAAE,CAAC,EAAe,EAAmB,CAEnC,OADA,EAAQ,OAAO,GAAG,EAAO,CAAO,EACzB,MAGT,GAAG,CAAC,EAAe,EAAmB,CAEpC,OADA,EAAQ,OAAO,IAAI,EAAO,CAAO,EAC1B,KAEX,EAGA,EAAc,iBAAiB,QAAS,CAAC,IAAU,CACjD,IAAM,EAAS,EAAM,OAGrB,GAAI,EAAO,QAAQ,GAAU,aAAa,GAKxC,GAJA,EAAc,MAAM,EACpB,EAAQ,OAAO,KAAK,GAAO,MAAM,EAG7B,EAAO,SACT,EAAO,SAAS,EAKpB,GAAI,EAAO,QAAQ,GAAU,cAAc,GAKzC,GAJA,EAAc,MAAM,EACpB,EAAQ,OAAO,KAAK,GAAO,QAAS,EAAc,SAAS,CAAC,EAGxD,EAAO,UACT,EAAO,UAAU,EAAc,SAAS,CAAC,EAK7C,GAAI,EAAO,QAAQ,GAAU,kBAAkB,EAAG,CAChD,IAAM,EAAU,EAAO,6BAGvB,EAAc,QAAQ,CAAO,EAG/B,GAAI,EAAO,QAAQ,GAAU,SAAS,GACpC,GAAI,EAAU,cAA2B,CAEvC,GADA,EAAU,YACN,EAAU,OAAS,GACrB,EAAU,OAAS,GAMrB,GAJA,GAAiB,EAAe,EAAW,CAAM,EACjD,EAAQ,OAAO,KAAK,GAAO,OAAQ,EAAc,SAAS,CAAC,EAGvD,EAAO,SACT,EAAO,SAAS,EAAc,SAAS,CAAC,GAK9C,GAAI,EAAO,QAAQ,GAAU,SAAS,GACpC,GAAI,EAAU,cAA2B,CAEvC,GADA,EAAU,YACN,EAAU,MAAQ,GACpB,EAAU,OAAS,GAMrB,GAJA,GAAiB,EAAe,EAAW,CAAM,EACjD,EAAQ,OAAO,KAAK,GAAO,OAAQ,EAAc,SAAS,CAAC,EAGvD,EAAO,SACT,EAAO,SAAS,EAAc,SAAS,CAAC,GAM9C,GAAI,EAAO,QAAQ,GAAU,WAAW,GACtC,GAAI,EAAO,cAAgC,CACzC,IAAM,EAAS,EACT,EAAO,EAAO,sBAAsB,EACpC,EAAI,EAAM,QAAU,EAAK,KACzB,EAAI,EAAM,QAAU,EAAK,IAG3B,EAA+C,OAC7C,EAAU,EAAc,cAAc,GAAU,WAAW,EAC3D,EAAY,EAAc,cAAc,GAAU,aAAa,EAC/D,EAAY,EAAc,cAAc,GAAU,aAAa,EAErE,GAAI,GAAW,EAAQ,aAAa,aAAa,IAAM,OACrD,EAAiB,OACZ,QAAI,GAAa,EAAU,aAAa,aAAa,IAAM,OAChE,EAAiB,SACZ,QAAI,EAAO,aAAe,GAAa,EAAU,aAAa,aAAa,IAAM,OACtF,EAAiB,SAInB,IAAM,EAAgB,GAAsB,EAAQ,EAAG,EAAG,CACxD,KAAM,EAAO,KACb,OAAQ,EAAO,OACf,YAAa,EAAO,YACpB,OAAQ,EAAO,OACf,gBACF,CAAC,EAED,GAAI,IAAkB,MACpB,GAAI,IAAmB,OAAQ,CAC7B,IAAI,EAAW,EAGf,GAAI,EAAO,gBAET,GAAI,EAAU,eAA6B,IAAkB,GAC3D,GAAY,GACP,QAAI,EAAU,eAA6B,IAAkB,GAClE,EAAW,EAIf,GAAI,EAAU,QAAU,EAAU,CAChC,EAAU,MAAQ,EAGlB,IAAM,EAAe,EACrB,GAAI,EACF,EAAa,YAAc,GAAQ,EAAO,eACtC,EACC,EAAW,IAAM,EAAG,EAI3B,IAAM,EAAgB,EAAc,cAAc,GAAU,WAAW,EACvE,GAAI,EACF,GAAgB,EAAe,EAAW,CACxC,KAAM,EAAO,KACb,OAAQ,EAAO,OACf,YAAa,EAAO,YACpB,OAAQ,EAAO,OACf,gBACF,CAAC,EAMH,GAHA,EAAQ,OAAO,KAAK,GAAO,OAAQ,EAAc,SAAS,CAAC,EAGvD,EAAO,SACT,EAAO,SAAS,EAAc,SAAS,CAAC,GAGvC,QAAI,IAAmB,UAC5B,GAAI,EAAU,UAAY,EAAe,CACvC,EAAU,QAAU,EAGpB,IAAM,EAAiB,EACvB,GAAI,EACF,EAAe,YAAc,GAAQ,CAAa,EAIpD,IAAM,EAAgB,EAAc,cAAc,GAAU,WAAW,EACvE,GAAI,EACF,GAAgB,EAAe,EAAW,CACxC,KAAM,EAAO,KACb,OAAQ,EAAO,OACf,YAAa,EAAO,YACpB,OAAQ,EAAO,OACf,gBACF,CAAC,EAMH,GAHA,EAAQ,OAAO,KAAK,GAAO,OAAQ,EAAc,SAAS,CAAC,EAGvD,EAAO,SACT,EAAO,SAAS,EAAc,SAAS,CAAC,GAGvC,QAAI,IAAmB,UAAY,EAAO,aAC/C,GAAI,EAAU,UAAY,EAAe,CACvC,EAAU,QAAU,EAGpB,IAAM,EAAiB,EACvB,GAAI,EACF,EAAe,YAAc,GAAQ,CAAa,EAIpD,IAAM,EAAgB,EAAc,cAAc,GAAU,WAAW,EACvE,GAAI,EACF,GAAgB,EAAe,EAAW,CACxC,KAAM,EAAO,KACb,OAAQ,EAAO,OACf,YAAa,EAAO,YACpB,OAAQ,EAAO,OACf,gBACF,CAAC,EAMH,GAHA,EAAQ,OAAO,KAAK,GAAO,OAAQ,EAAc,SAAS,CAAC,EAGvD,EAAO,SACT,EAAO,SAAS,EAAc,SAAS,CAAC,OAOrD,EAGD,IAAM,EAAoB,CAAC,IAAiB,CAC1C,IAAM,EAAS,EAAM,OACf,EAAY,EAAO,aAAa,WAAW,EAC3C,EAAQ,SAAS,EAAO,MAAO,EAAE,EAEvC,GAAI,MAAM,CAAK,EAAG,OAElB,GAAI,IAAc,OAAQ,CACxB,IAAI,EAAW,EAGf,GAAI,EAAO,eAA6B,CACtC,GAAI,EAAQ,EAAG,EAAW,GAC1B,GAAI,EAAQ,GAAI,EAAW,EAG3B,GAAI,EAAU,eAA6B,IAAa,GACtD,GAAY,GACP,QAAI,EAAU,eAA6B,IAAa,GAC7D,EAAW,EAER,KACL,GAAI,EAAQ,EAAG,EAAW,EAC1B,GAAI,EAAQ,GAAI,EAAW,GAG7B,EAAU,MAAQ,EACb,QAAI,IAAc,SAAU,CACjC,IAAI,EAAa,EAGjB,GAAI,EAAa,EAAG,EAAa,EACjC,GAAI,EAAa,GAAI,EAAa,GAElC,EAAU,QAAU,EACf,QAAI,IAAc,SAAU,CACjC,IAAI,EAAa,EAGjB,GAAI,EAAa,EAAG,EAAa,EACjC,GAAI,EAAa,GAAI,EAAa,GAElC,EAAU,QAAU,EAUtB,GANA,GAAiB,EAAe,EAAW,CAAM,EAGjD,EAAQ,OAAO,KAAK,GAAO,OAAQ,EAAc,SAAS,CAAC,EAGvD,EAAO,SACT,EAAO,SAAS,EAAc,SAAS,CAAC,GAuD5C,OAlDA,EAAc,iBAAiB,SAAU,CAAC,IAAU,CAClD,IAAM,EAAS,EAAM,OACrB,GACE,EAAO,QAAQ,GAAU,WAAW,GACpC,EAAO,QAAQ,GAAU,aAAa,GACtC,EAAO,QAAQ,GAAU,aAAa,EAEtC,EAAkB,CAAK,EAE1B,EAGD,EAAc,iBAAiB,QAAS,CAAC,IAAU,CACjD,IAAM,EAAS,EAAM,OACrB,GACE,EAAO,QAAQ,GAAU,WAAW,GACpC,EAAO,QAAQ,GAAU,aAAa,GACtC,EAAO,QAAQ,GAAU,aAAa,GAEtC,GAAI,EAAM,MAAQ,SAIhB,GAHA,EAAkB,CAAK,EAGnB,EAAO,QAAQ,GAAU,WAAW,EAAG,CACzC,IAAM,EAAe,EAAc,cAAc,GAAU,aAAa,EACxE,GAAI,EACD,EAA6B,MAAM,EAEjC,QAAI,EAAO,QAAQ,GAAU,aAAa,EAC/C,GAAI,EAAO,YAAa,CACtB,IAAM,EAAe,EAAc,cAAc,GAAU,aAAa,EACxE,GAAI,EACD,EAA6B,MAAM,EAEjC,KACL,IAAM,EAAgB,EAAc,cAAc,GAAU,cAAc,EAC1E,GAAI,EACD,EAA8B,MAAM,EAGpC,QAAI,EAAO,QAAQ,GAAU,aAAa,EAAG,CAClD,IAAM,EAAgB,EAAc,cAAc,GAAU,cAAc,EAC1E,GAAI,EACD,EAA8B,MAAM,KAK9C,EAEM,GN/lBT,IAAM,GAAmB,CACvB,EAA2B,CAAC,IACJ,CACxB,IAAM,EAAa,GAAiB,CAAM,EAE1C,GAAI,CAEF,IAAM,EAAgB,EACpB,EACA,EAAW,EACX,EAAY,GAAmB,CAAU,CAAC,EAC1C,EAAc,CAChB,EAAE,CAAU,EAGN,EAAe,SAAS,cAAc,KAAK,EACjD,EAAa,UAAY,GAAG,sBAC5B,EAAa,MAAM,QAAU,OAC7B,EAAa,MAAM,SAAW,QAC9B,EAAa,MAAM,IAAM,IACzB,EAAa,MAAM,KAAO,IAC1B,EAAa,MAAM,MAAQ,OAC3B,EAAa,MAAM,OAAS,OAC5B,EAAa,MAAM,gBAAkB,qBACrC,EAAa,MAAM,OAAS,GAAQ,MAAM,SAAS,EACnD,EAAa,aAAa,OAAQ,cAAc,EAGhD,IAAM,EAAgB,SAAS,cAAc,KAAK,EAClD,EAAc,UAAY,CACxB,GAAG,uBACH,GAAG,yBAA8B,EAAW,OAC5C,GAAG,yBAA8B,EAAW,cAC5C,GAAG,yBAA8B,EAAW,QAC9C,EAAE,KAAK,GAAG,EACV,EAAc,MAAM,SAAW,WAC/B,EAAc,MAAM,IAAM,MAC1B,EAAc,MAAM,KAAO,MAC3B,EAAc,MAAM,UAAY,wBAChC,EAAc,MAAM,OAAS,GAAQ,OAAO,SAAS,EAGrD,EAAa,YAAY,CAAa,GAIpC,OAAO,EAAW,YAAc,SAC5B,SAAS,cAAc,EAAW,SAAS,GAAK,SAAS,KACzD,EAAW,WAAa,SAAS,MAE7B,YAAY,CAAY,EAGlC,IAAI,EACJ,GAAI,EAAW,MACb,EAAY,GAAU,EAAW,MAAO,EAAW,MAAM,EACpD,KAEL,IAAM,EAAM,IAAI,KAChB,EAAY,CACV,MAAO,EAAI,SAAS,EACpB,QAAS,EAAI,WAAW,EACxB,QAAS,EAAW,YAAc,EAAI,WAAW,EAAI,EACrD,OAAQ,EAAI,SAAS,GAAK,YAC5B,EAIF,GAAiB,EAAe,EAAW,CAAU,EAGrD,IAAM,EAAa,GACjB,EACA,EACA,EACA,EACA,EACA,GAAa,CAAa,CAC5B,EAGA,GAAI,EAAW,OACb,WAAW,IAAM,EAAW,KAAK,EAAG,CAAC,EAGvC,OAAO,EACP,MAAO,EAAO,CAEd,MADA,QAAQ,MAAM,6BAA8B,CAAK,EACvC,MACR,iCAAkC,EAAgB,SACpD,IAIW,MO/Gf,ICAA,ICAO,IAAM,GAAoB,CAE/B,MAAO,QAEP,OAAQ,SAER,MAAO,QAEP,OAAQ,QACV,EAmBO,IAAM,GAAuB,CAElC,IAAK,SAEL,KAAM,GAAkB,MAExB,WAAY,GAEZ,aAAc,GAEd,iBAAkB,CACpB,EDhCO,IAAM,GAA0C,CACrD,IAAK,GAAqB,IAC1B,KAAM,GAAqB,KAC3B,WAAY,GAAqB,WACjC,aAAc,GAAqB,aACnC,gBAAiB,GAAqB,gBACxC,EAQa,GAAe,CAAC,EAA0B,CAAC,IACtD,EAAsB,GAAe,EAAQ,aAAa,ED2DrD,IAAM,GAAkB,CAAC,EAA0B,CAAC,IAAiB,CAE1E,IAAM,EAAkB,GAAa,CAAM,EAGrC,EAAY,EAAW,CAAe,EAGtC,EAAmB,IAAM,CAE7B,IAAM,EAAmB,SAAS,cAAc,KAAK,EACrD,EAAiB,UAAY,GAAG,EAAU,SAAS,aAAa,YAGhE,IAAM,EAAkB,SAAS,cAAc,IAAI,EAEnD,GADA,EAAgB,UAAY,GAAG,EAAU,SAAS,aAAa,aAC3D,EAAgB,MAClB,EAAgB,YAAc,EAAgB,MAIhD,IAAM,EAAoB,SAAS,cAAc,KAAK,EAKtD,OAJA,EAAkB,UAAY,GAAG,EAAU,SACzC,aACF,aAEO,CAAE,mBAAkB,kBAAiB,mBAAkB,IAIxD,mBAAkB,kBAAiB,qBACzC,EAAiB,EAGb,EAAoB,IAAM,CAC9B,IAAM,EAAU,CAAC,EAAgB,KAAK,EAGtC,GAAI,EAAgB,OAAS,QAC3B,EAAQ,KACN,GAAG,EAAU,SAAS,aAAa,MAAM,EAAgB,MAC3D,EAIF,GACE,EAAgB,eACf,EAAgB,OAAS,UAAY,EAAgB,OAAS,SAE/D,EAAQ,KAAK,GAAG,EAAU,SAAS,aAAa,iBAAiB,EAGnE,OAAO,EAAQ,OAAO,OAAO,GAIzB,EAAoB,EAAY,CACpC,IAAK,EAAgB,IACrB,cAAe,cACf,UAAW,EAAkB,EAC7B,WAAY,CACV,KAAM,SACN,aAAc,aAChB,EACA,YAAa,EACf,CAAC,EAAE,CAAS,EAGN,EAAsB,EAAW,EAAE,CAAiB,EAGpD,EAAyB,EAAc,EAAE,CAAmB,GAGxC,IAAM,CAC9B,GAAI,EAAgB,OAAS,UAAY,EAAgB,OAAS,QAAS,CAEzE,IAAM,EAAS,SAAS,cAAc,KAAK,EAC3C,EAAO,UAAY,GAAG,EAAU,SAAS,aAAa,QACtD,EAAO,YAAY,CAAgB,EACnC,EAAO,YAAY,CAAiB,EAEpC,IAAM,EAAY,SAAS,cAAc,KAAK,EAC9C,EAAU,UAAY,GAAG,EAAU,SAAS,aAAa,QACzD,EAAU,YAAY,CAAe,EAErC,EAAuB,QAAQ,YAAY,CAAM,EACjD,EAAuB,QAAQ,YAAY,CAAS,EAGpD,OAAuB,QAAQ,YAAY,CAAgB,EAC3D,EAAuB,QAAQ,YAAY,CAAe,EAC1D,EAAuB,QAAQ,YAAY,CAAiB,IAK9C,EAGlB,IAAI,EAAa,GAGjB,GAAI,EAAgB,WAAY,CAC9B,IAAM,EAAe,IAAM,CACzB,IAAM,EAAmB,OAAO,QAAU,EAAgB,gBAE1D,GAAI,IAAe,EAAkB,CAInC,GAHA,EAAa,EAGT,EACF,EAAuB,QAAQ,UAAU,IACvC,GAAG,EAAU,SAAS,aAAa,aACrC,EAEA,OAAuB,QAAQ,UAAU,OACvC,GAAG,EAAU,SAAS,aAAa,aACrC,EAIF,EAAgB,WAAW,CAAU,IAKzC,OAAO,iBAAiB,SAAU,EAAc,CAAE,QAAS,EAAK,CAAC,EAGjE,EAAa,EAGb,IAAM,EAAkB,EAAuB,UAAU,QACzD,EAAuB,UAAU,QAAU,IAAM,CAC/C,OAAO,oBAAoB,SAAU,CAAY,EACjD,EAAgB,GAKpB,IAAM,EAAgB,CAAC,IAAwB,CAE7C,MAAO,EAAuB,QAAQ,WACpC,EAAuB,QAAQ,YAC7B,EAAuB,QAAQ,UACjC,EAUF,GANA,CAAC,QAAS,SAAU,QAAS,QAAQ,EAAE,QAAQ,CAAC,IAAM,CACpD,EAAuB,QAAQ,UAAU,OACvC,GAAG,EAAU,SAAS,aAAa,MAAM,GAC3C,EACD,EAEG,IAAS,QACX,EAAuB,QAAQ,UAAU,IACvC,GAAG,EAAU,SAAS,aAAa,MAAM,GAC3C,EAUF,GANA,EAAuB,QAAQ,UAAU,OACvC,GAAG,EAAU,SAAS,aAAa,kBACnC,EAAgB,eAAiB,IAAS,UAAY,IAAS,QACjE,EAGI,IAAS,UAAY,IAAS,QAAS,CAEzC,IAAM,EAAS,SAAS,cAAc,KAAK,EAC3C,EAAO,UAAY,GAAG,EAAU,SAAS,aAAa,QACtD,EAAO,YAAY,CAAgB,EACnC,EAAO,YAAY,CAAiB,EAEpC,IAAM,EAAY,SAAS,cAAc,KAAK,EAC9C,EAAU,UAAY,GAAG,EAAU,SAAS,aAAa,QACzD,EAAU,YAAY,CAAe,EAErC,EAAuB,QAAQ,YAAY,CAAM,EACjD,EAAuB,QAAQ,YAAY,CAAS,EAGpD,OAAuB,QAAQ,YAAY,CAAgB,EAC3D,EAAuB,QAAQ,YAAY,CAAe,EAC1D,EAAuB,QAAQ,YAAY,CAAiB,GA8DhE,MAzD6B,IACxB,EAEH,QAAQ,CAAC,EAAe,CAEtB,OADA,EAAgB,YAAc,EACvB,MAGT,QAAQ,EAAG,CACT,OAAO,EAAgB,aAAe,IAGxC,iBAAiB,CAAC,EAAsB,CAEtC,OADA,EAAiB,YAAY,CAAO,EAC7B,MAGT,kBAAkB,CAAC,EAAsB,CAEvC,OADA,EAAkB,YAAY,CAAO,EAC9B,MAGT,OAAO,CAAC,EAAqB,CAG3B,OAFA,EAAgB,KAAO,EACvB,EAAc,CAAI,EACX,MAGT,cAAc,CAAC,EAAmB,CAGhC,GAFA,EAAa,EAET,EACF,KAAK,QAAQ,UAAU,IACrB,GAAG,EAAU,SAAS,aAAa,aACrC,EAEA,UAAK,QAAQ,UAAU,OACrB,GAAG,EAAU,SAAS,aAAa,aACrC,EAGF,OAAO,MAGT,kBAAkB,EAAG,CACnB,OAAO,GAGT,mBAAmB,EAAG,CACpB,OAAO,GAGT,oBAAoB,EAAG,CACrB,OAAO,EAEX,GG5TF,IAAe,MChBf,KACA,IACA,IACA,ICCO,IAAM,GAAoB,CAC/B,IAAK,MACL,MAAO,QACP,OAAQ,SACR,KAAM,OACN,UAAW,YACX,QAAS,UACT,YAAa,cACb,UAAW,YACX,aAAc,eACd,WAAY,aACZ,WAAY,aACZ,SAAU,UACZ,EAgBO,IAAM,GAAiB,ECTvB,IAAM,GACX,EAAG,eACH,CAAC,IAAuD,CAEtD,IAAI,EAA6B,KAC7B,EAA4B,GAAkB,OAC9C,EAAY,GACZ,EAA2B,KAC3B,EAA2B,KACzB,EAAY,IACZ,EAAY,IACZ,EAAc,GACd,EAAc,GAGd,EAAe,SAAS,cAAc,KAAK,EACjD,EAAa,UAAY,GAAG,EAAU,SAAS,SAAS,WACxD,EAAU,QAAQ,YAAY,CAAY,EAG1C,SAAS,KAAK,YAAY,EAAU,OAAO,EAC3C,EAAU,QAAQ,aAAa,cAAe,MAAM,EAKpD,IAAM,EAAoB,IAIrB,CACH,GAAI,CAAC,EAAQ,MAAO,CAAE,IAAK,EAAG,KAAM,CAAE,EAEtC,IAAM,EAAc,EAAU,QAAQ,sBAAsB,EACtD,EAAa,EAAO,sBAAsB,EAC1C,EAAU,OAAO,SAAW,OAAO,YACnC,EAAU,OAAO,SAAW,OAAO,YAGnC,EAAS,GAEX,EAAM,EACN,EAAO,EACP,EAGJ,OAAQ,QACD,GAAkB,IACrB,EAAM,EAAW,IAAM,EAAU,EAAY,OAAS,EACtD,EACE,EAAW,KACX,EACA,EAAW,MAAQ,EACnB,EAAY,MAAQ,EACtB,EAAgB,SAChB,WAEG,GAAkB,UACrB,EAAM,EAAW,IAAM,EAAU,EAAY,OAAS,EACtD,EAAO,EAAW,KAAO,EACzB,EAAgB,eAChB,WAEG,GAAkB,QACrB,EAAM,EAAW,IAAM,EAAU,EAAY,OAAS,EACtD,EACE,EAAW,KAAO,EAAU,EAAW,MAAQ,EAAY,MAC7D,EAAgB,aAChB,WAEG,GAAkB,MACrB,EACE,EAAW,IACX,EACA,EAAW,OAAS,EACpB,EAAY,OAAS,EACvB,EAAO,EAAW,KAAO,EAAU,EAAW,MAAQ,EACtD,EAAgB,OAChB,WAEG,GAAkB,YACrB,EAAM,EAAW,IAAM,EACvB,EAAO,EAAW,KAAO,EAAU,EAAW,MAAQ,EACtD,EAAgB,aAChB,WAEG,GAAkB,UACrB,EACE,EAAW,IAAM,EAAU,EAAW,OAAS,EAAY,OAC7D,EAAO,EAAW,KAAO,EAAU,EAAW,MAAQ,EACtD,EAAgB,WAChB,WAEG,GAAkB,OACrB,EAAM,EAAW,IAAM,EAAU,EAAW,OAAS,EACrD,EACE,EAAW,KACX,EACA,EAAW,MAAQ,EACnB,EAAY,MAAQ,EACtB,EAAgB,MAChB,WAEG,GAAkB,aACrB,EAAM,EAAW,IAAM,EAAU,EAAW,OAAS,EACrD,EAAO,EAAW,KAAO,EACzB,EAAgB,YAChB,WAEG,GAAkB,WACrB,EAAM,EAAW,IAAM,EAAU,EAAW,OAAS,EACrD,EACE,EAAW,KAAO,EAAU,EAAW,MAAQ,EAAY,MAC7D,EAAgB,UAChB,WAEG,GAAkB,KACrB,EACE,EAAW,IACX,EACA,EAAW,OAAS,EACpB,EAAY,OAAS,EACvB,EAAO,EAAW,KAAO,EAAU,EAAY,MAAQ,EACvD,EAAgB,QAChB,WAEG,GAAkB,WACrB,EAAM,EAAW,IAAM,EACvB,EAAO,EAAW,KAAO,EAAU,EAAY,MAAQ,EACvD,EAAgB,cAChB,WAEG,GAAkB,SACrB,EACE,EAAW,IAAM,EAAU,EAAW,OAAS,EAAY,OAC7D,EAAO,EAAW,KAAO,EAAU,EAAY,MAAQ,EACvD,EAAgB,YAChB,cAGA,EAAM,EAAW,IAAM,EAAU,EAAW,OAAS,EACrD,EACE,EAAW,KACX,EACA,EAAW,MAAQ,EACnB,EAAY,MAAQ,EACtB,EAAgB,MAIpB,IAAM,EAAc,OAAO,WAG3B,GAAI,EAAO,EACT,EAAO,EACF,QAAI,EAAO,EAAY,MAAQ,EACpC,EAAO,EAAc,EAAY,MAGnC,MAAO,CAAE,MAAK,OAAM,eAAc,GAM9B,EAAkB,CAAC,IAA0B,CACjD,GAAI,EACF,EAAS,iBAAiB,aAAc,CAAsB,EAC9D,EAAS,iBAAiB,aAAc,CAAsB,EAGhE,GAAI,EACF,EAAS,iBAAiB,QAAS,CAAiB,EACpD,EAAS,iBAAiB,OAAQ,CAAgB,GAIhD,EAAqB,CAAC,IAA0B,CACpD,GAAI,EACF,EAAS,oBAAoB,aAAc,CAAsB,EACjE,EAAS,oBAAoB,aAAc,CAAsB,EACjE,EAAS,oBAAoB,QAAS,CAAiB,EACvD,EAAS,oBAAoB,OAAQ,CAAgB,GAKnD,EAAyB,IAAM,EAAI,KAAK,EACxC,EAAyB,IAAM,EAAI,KAAK,EACxC,EAAoB,IAAM,EAAI,KAAK,EACnC,EAAmB,IAAM,EAAI,KAAK,EAGlC,EAAwB,CAC5B,QAAS,EAAU,QACnB,SACA,YAEA,SAAU,EAAU,SAEpB,OAAO,CAAC,EAAM,CAEZ,IAAM,EAAc,SAAS,eAAe,CAAI,EAGhD,MAAO,EAAU,QAAQ,aAAe,EACtC,EAAU,QAAQ,YAAY,EAAU,QAAQ,UAAU,EAO5D,GAHA,EAAU,QAAQ,aAAa,EAAa,CAAY,EAGpD,EACF,KAAK,eAAe,EAGtB,OAAO,MAGT,OAAO,EAAG,CAER,IAAM,EAAQ,EAAU,QAAQ,UAAU,EAAI,EACxC,EAAa,EAAM,cACvB,IAAI,EAAU,SAAS,SAAS,UAClC,EACA,GAAI,EACF,EAAW,OAAO,EAEpB,OAAO,EAAM,aAAe,IAG9B,WAAW,CAAC,EAAa,CAEvB,EAAW,EAGX,IAAM,EAAY,EAAU,SAAS,SAAS,EAGxC,EAAkB,OAAO,OAAO,EAAiB,EAAE,IACvD,CAAC,IAAM,GAAG,MAAc,GAC1B,EAOA,GANA,EAAU,QAAQ,UAAU,OAAO,GAAG,CAAe,EAGrD,EAAU,QAAQ,UAAU,IAAI,GAAG,MAAc,GAAa,EAG1D,EACF,KAAK,eAAe,EAGtB,OAAO,MAGT,WAAW,EAAG,CACZ,OAAO,GAGT,SAAS,CAAC,EAAW,CAEnB,GAAI,EACF,EAAmB,CAAM,EAc3B,GAVA,EAAS,EACT,KAAK,OAAS,EAGd,EAAO,aAAa,mBAAoB,EAAU,QAAQ,EAAE,EAG5D,EAAgB,CAAM,EAGlB,EACF,KAAK,eAAe,EAGtB,OAAO,MAGT,IAAI,CAAC,EAAY,GAAO,CAEtB,GAAI,IAAc,KAChB,OAAO,aAAa,CAAS,EAC7B,EAAY,KAGd,GAAI,IAAc,KAChB,OAAO,aAAa,CAAS,EAC7B,EAAY,KAGd,IAAM,EAAc,IAAM,CACxB,GAAI,CAAC,EAAQ,OAAO,KAGpB,EAAU,QAAQ,aAAa,cAAe,OAAO,EACrD,EAAU,QAAQ,UAAU,IAC1B,GAAG,EAAU,SAAS,SAAS,YACjC,EACA,EAAY,GAGZ,KAAK,eAAe,EAGpB,OAAO,iBAAiB,SAAU,CAAkB,EACpD,OAAO,iBAAiB,SAAU,CAAkB,GAGtD,GAAI,EACF,EAAY,EAEZ,OAAY,OAAO,WAAW,EAAa,CAAS,EAGtD,OAAO,MAGT,IAAI,CAAC,EAAY,GAAO,CAEtB,GAAI,IAAc,KAChB,OAAO,aAAa,CAAS,EAC7B,EAAY,KAGd,GAAI,IAAc,KAChB,OAAO,aAAa,CAAS,EAC7B,EAAY,KAGd,IAAM,EAAc,IAAM,CAExB,EAAU,QAAQ,aAAa,cAAe,MAAM,EACpD,EAAU,QAAQ,UAAU,OAC1B,GAAG,EAAU,SAAS,SAAS,YACjC,EACA,EAAY,GAGZ,OAAO,oBAAoB,SAAU,CAAkB,EACvD,OAAO,oBAAoB,SAAU,CAAkB,GAGzD,GAAI,EACF,EAAY,EAEZ,OAAY,OAAO,WAAW,EAAa,CAAS,EAGtD,OAAO,MAGT,SAAS,EAAG,CACV,OAAO,GAGT,cAAc,EAAG,CACf,GAAI,CAAC,EAAQ,OAAO,KAGpB,IAAQ,MAAK,OAAM,iBAAkB,EAAkB,EAOvD,GAJA,EAAU,QAAQ,MAAM,IAAM,GAAG,KAAK,MAAM,CAAG,MAC/C,EAAU,QAAQ,MAAM,KAAO,GAAG,KAAK,MAAM,CAAI,MAG7C,EAEF,EAAa,UAAY,GAAG,EAAU,SAAS,SAAS,WAExD,EAAa,UAAU,IACrB,GAAG,EAAU,SAAS,SAAS,aAAa,GAC9C,EAGF,OAAO,MAGT,OAAO,EAAG,CAER,GAAI,IAAc,KAChB,OAAO,aAAa,CAAS,EAG/B,GAAI,IAAc,KAChB,OAAO,aAAa,CAAS,EAI/B,GAAI,EACF,EAAmB,CAAM,EACzB,EAAO,gBAAgB,kBAAkB,EAQ3C,GAJA,OAAO,oBAAoB,SAAU,CAAkB,EACvD,OAAO,oBAAoB,SAAU,CAAkB,EAGnD,EAAU,QAAQ,WACpB,EAAU,QAAQ,WAAW,YAAY,EAAU,OAAO,EAI5D,EAAU,QAAQ,EAEtB,EAGM,EAAqB,IAAM,CAC/B,EAAI,eAAe,GAGf,EAAqB,IAAM,CAC/B,EAAI,eAAe,GAGrB,OAAO,GC/bX,ICKO,IAAM,GAAoB,CAE/B,IAAK,MAEL,MAAO,QAEP,OAAQ,SAER,KAAM,OAEN,UAAW,YAEX,QAAS,UAET,YAAa,cAEb,UAAW,YAEX,aAAc,eAEd,WAAY,aAEZ,WAAY,aAEZ,SAAU,UACZ,EAMa,GAAmB,CAE9B,QAAS,UAET,KAAM,OAEN,MAAO,OACT,EAqBO,IAAM,GAAmB,CAE9B,SAAU,GAAkB,OAE5B,QAAS,GAAiB,QAE1B,QAAS,GAET,WAAY,IAEZ,WAAY,IAEZ,OAAQ,EAER,WAAY,EAEZ,cAAe,GAEf,cAAe,GAEf,KAAM,EACR,ED3EO,IAAM,GAA+B,CAC1C,SAAU,GAAiB,SAC3B,QAAS,GAAiB,QAC1B,QAAS,GAAiB,QAC1B,UAAW,GAAiB,WAC5B,UAAW,GAAiB,WAC5B,YAAa,GAAiB,cAC9B,YAAa,GAAiB,cAC9B,KAAM,GAAiB,IACzB,EAOa,GAAmB,CAAC,EAAwB,CAAC,IACxD,EAAsB,GAAe,EAAQ,SAAS,EAO3C,GAAmB,CAAC,IAA0B,CAEzD,IAAM,EAAkC,CACtC,KAAM,UACN,cAAe,MACjB,EAGA,GAAI,EAAO,SAAW,OACpB,EAAW,MAAW,YAAY,EAAO,UAG3C,OAAO,EAAoB,EAAQ,CACjC,IAAK,MACL,aACA,UAAW,CACT,EAAO,MACP,GAAG,EAAO,mBAAmB,EAAO,WACpC,GAAG,EAAO,mBAAmB,EAAO,SACtC,EACA,KAAM,EAAO,MAAQ,EACvB,CAAC,GAQU,GAAe,CAAC,KAAU,CACrC,UAAW,CACT,QAAS,IAAM,EAAK,UAAU,QAAQ,CACxC,CACF,GHvDA,IAAM,GAAkB,IAAc,CACpC,MAAO,GAAG,aAAkB,KAAK,OAAO,EAAE,SAAS,EAAE,EAAE,UAAU,EAAG,CAAC,KAQjE,GAAgB,CAAC,EAAwB,CAAC,IAAM,CACpD,IAAM,EAAa,GAAiB,CAAM,EAE1C,GAAI,CAEF,IAAM,EAAU,EACd,EACA,EAAY,GAAiB,CAAU,CAAC,EACxC,EAAc,EACd,KAAQ,GAAQ,GAAa,CAAI,CAAC,EAAE,CAAI,CAC1C,EAAE,CAAU,EAMZ,GAHA,EAAQ,QAAQ,GAAK,GAAgB,EAGjC,EAAW,OACb,EAAQ,UAAU,EAAW,MAAM,EAIrC,GAAI,EAAW,KACb,EAAQ,QAAQ,EAAW,IAAI,EAIjC,GAAI,EAAW,QACb,EAAQ,KAAK,EAAI,EAGnB,OAAO,EACP,MAAO,EAAO,CAEd,MADA,QAAQ,MAAM,0BAA2B,CAAK,EACpC,MAAM,6BAA8B,EAAgB,SAAS,IAI5D,MKhDf,KAHA",
|
|
251
|
+
"debugId": "78B995D769130A4064756E2164756E21",
|
|
258
252
|
"names": []
|
|
259
253
|
}
|