{"version":3,"file":"notification.cjs","sources":["../../src/components/notification/Notification.vue","../../src/components/notification/NotificationNotice.vue","../../src/components/notification/useNotificationProgrammatic.ts","../../src/components/notification/index.ts"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed } from \"vue\";\n\nimport OIcon from \"../icon/Icon.vue\";\n\nimport { getDefault } from \"@/utils/config\";\nimport { defineClasses } from \"@/composables\";\n\nimport type { NotificationProps } from \"./props\";\n\n/**\n * Bold notification blocks to alert your users of something.\n * @displayName Notification\n * @requires ./NotificationNotice.vue\n * @style _notification.scss\n */\ndefineOptions({\n    isOruga: true,\n    name: \"ONotification\",\n    configField: \"notification\",\n    inheritAttrs: false,\n});\n\nconst props = withDefaults(defineProps<NotificationProps>(), {\n    override: undefined,\n    message: undefined,\n    active: true,\n    type: undefined,\n    variant: () => getDefault(\"notification.variant\"),\n    rounded: () => getDefault(\"notification.rounded\"),\n    position: () => getDefault(\"notification.position\", \"top\"),\n    animation: () => getDefault(\"notification.animation\", \"fade\"),\n    icon: undefined,\n    iconPack: () => getDefault(\"notification.iconPack\"),\n    iconSize: () => getDefault(\"notification.iconSize\", \"large\"),\n    closeable: false,\n    closeIcon: () => getDefault(\"notification.closeIcon\", \"close\"),\n    closeIconSize: () => getDefault(\"notification.closeIconSize\"),\n    ariaCloseLabel: () => getDefault(\"notification.ariaCloseLabel\", \"Close\"),\n});\n\nconst emits = defineEmits<{\n    /**\n     * active prop two-way binding\n     * @param value {boolean} - updated active prop\n     */\n    \"update:active\": [value: boolean];\n    /**\n     * on component close event\n     * @param value {string} - close event method\n     */\n    close: [...args: [] | [string]];\n}>();\n\nconst isActive = defineModel<boolean>(\"active\", { default: true });\n\n/** Icon name (MDI) based on type. */\nconst computedIcon = computed(() => {\n    if (props.icon) return props.icon;\n\n    switch (props.type) {\n        case \"info\":\n            return \"information\";\n        case \"success\":\n            return \"check-circle\";\n        case \"warning\":\n            return \"alert\";\n        case \"danger\":\n            return \"alert-circle\";\n        default:\n            return null;\n    }\n});\n\n/** set active to false and emit close event */\nfunction close(...args: [] | [string]): void {\n    isActive.value = false;\n    emits(\"close\", ...args);\n}\n\n// --- Computed Component Classes ---\n\nconst rootClasses = defineClasses(\n    [\"rootClass\", \"o-notification\"],\n    [\n        \"variantClass\",\n        \"o-notification--\",\n        computed(() => props.variant),\n        computed(() => !!props.variant),\n    ],\n    [\n        \"roundedClass\",\n        \"o-notification--rounded\",\n        null,\n        computed(() => props.rounded),\n    ],\n    [\n        \"positionClass\",\n        \"o-notification--\",\n        computed(() => props.position),\n        computed(() => !!props.position),\n    ],\n);\n\nconst wrapperClasses = defineClasses([\n    \"wrapperClass\",\n    \"o-notification__wrapper\",\n]);\n\nconst iconClasses = defineClasses([\"iconClass\", \"o-notification__icon\"]);\n\nconst contentClasses = defineClasses([\n    \"contentClass\",\n    \"o-notification__content\",\n]);\n\nconst closeClasses = defineClasses([\"closeClass\", \"o-notification__close\"]);\n</script>\n\n<template>\n    <transition :name=\"animation\">\n        <article\n            v-show=\"isActive\"\n            v-bind=\"$attrs\"\n            data-oruga=\"notification\"\n            :class=\"rootClasses\">\n            <button\n                v-if=\"closeable\"\n                :class=\"closeClasses\"\n                type=\"button\"\n                :aria-label=\"ariaCloseLabel\"\n                @click=\"close('x')\">\n                <o-icon\n                    :pack=\"iconPack\"\n                    :icon=\"closeIcon\"\n                    :size=\"closeIconSize\" />\n            </button>\n\n            <!--\n                @slot Notification inner content, outside of the message container\n                @binding {(...args): void} close - function to close the notification\n            -->\n            <slot name=\"inner\" :close=\"close\" />\n\n            <div v-if=\"$slots.default || message\" :class=\"wrapperClasses\">\n                <o-icon\n                    v-if=\"computedIcon\"\n                    :icon=\"computedIcon\"\n                    :pack=\"iconPack\"\n                    :class=\"iconClasses\"\n                    :size=\"iconSize\"\n                    aria-hidden=\"true\" />\n                <div :class=\"contentClasses\">\n                    <!--\n                        @slot Notification default content, default is message prop\n                        @binding {(...args): void} close - function to close the notification\n                    -->\n                    <slot :close=\"close\">\n                        <span v-if=\"message\">{{ message }} </span>\n                    </slot>\n                </div>\n            </div>\n        </article>\n    </transition>\n</template>\n","<script setup lang=\"ts\" generic=\"C extends Component\">\nimport {\n    computed,\n    ref,\n    onMounted,\n    onBeforeMount,\n    useTemplateRef,\n    type Component,\n} from \"vue\";\n\nimport ONotification from \"./Notification.vue\";\n\nimport { getDefault } from \"@/utils/config\";\nimport { defineClasses, getActiveClasses } from \"@/composables\";\nimport type { CloseEventArgs } from \"../programmatic\";\n\nimport type { NotificationNoticeProps } from \"./props\";\n\n/**\n * Notification Notice is an extension of the Notification component and is used for the programmatic usage.\n * @displayName Notification Notice\n */\ndefineOptions({\n    isOruga: true,\n    name: \"ONotificationNotice\",\n    configField: \"notification\",\n    inheritAttrs: false,\n});\n\nconst props = withDefaults(defineProps<NotificationNoticeProps<C>>(), {\n    override: undefined,\n    container: undefined,\n    variant: () => getDefault(\"notification.variant\"),\n    position: () => getDefault(\"notification.position\", \"top\"),\n    duration: () => getDefault(\"notification.duration\", 2000),\n    infinite: false,\n    pauseOnHover: false,\n    queue: () => getDefault(\"notification.queue\"),\n    component: undefined,\n    props: undefined,\n    events: undefined,\n});\n\nconst emits = defineEmits<{\n    /**\n     * on component close event\n     * @param value {string} - close event method\n     */\n    close: [...args: [] | [string] | CloseEventArgs<C>];\n}>();\n\nconst notificationRef = useTemplateRef(\"notificationComponent\");\n\nconst isActive = ref(true);\n\nconst parentTop = ref<Element | null>(null);\nconst parentBottom = ref<Element | null>(null);\n\n/** Create or inject notice dom container elements. */\nonBeforeMount(() => {\n    if (\n        noticeClasses.value &&\n        positionBottomClasses.value &&\n        positionTopClasses.value\n    ) {\n        const rootClasses = getActiveClasses(noticeClasses.value);\n        const topClasses = getActiveClasses(positionTopClasses.value);\n        const bottomClasses = getActiveClasses(positionBottomClasses.value);\n\n        parentTop.value = props.container.querySelector(\n            `.${rootClasses.join(\".\")}.${topClasses.join(\".\")}`,\n        );\n        parentBottom.value = props.container.querySelector(\n            `.${rootClasses.join(\".\")}.${bottomClasses.join(\".\")}`,\n        );\n\n        if (parentTop.value && parentBottom.value) return;\n\n        // create notices top container if not alread there\n        if (!parentTop.value) {\n            parentTop.value = document.createElement(\"div\");\n            parentTop.value.className = `${rootClasses.join(\n                \" \",\n            )} ${topClasses.join(\" \")}`;\n            parentTop.value.role = \"region\";\n            parentTop.value.ariaLive = \"polite\";\n        }\n\n        // create notices bottom container if not alread there\n        if (!parentBottom.value) {\n            parentBottom.value = document.createElement(\"div\");\n            parentBottom.value.className = `${rootClasses.join(\n                \" \",\n            )} ${bottomClasses.join(\" \")}`;\n            parentBottom.value.role = \"region\";\n            parentBottom.value.ariaLive = \"polite\";\n        }\n\n        // append notices top and bottom container to given container\n        props.container.appendChild(parentTop.value);\n        props.container.appendChild(parentBottom.value);\n\n        if (props.container.tagName !== \"BODY\") {\n            const classes = getActiveClasses(noticeContainerClasses.value);\n            if (classes?.length)\n                classes\n                    .filter((c) => !!c)\n                    .forEach((c: string) => {\n                        parentTop.value?.classList.add(c);\n                        parentBottom.value?.classList.add(c);\n                    });\n        }\n    }\n});\n\nonMounted(() => {\n    showNotice();\n    setAutoClose();\n});\n\nconst correctParent = computed(() => {\n    switch (props.position) {\n        case \"top-right\":\n        case \"top\":\n        case \"top-left\":\n            return parentTop.value;\n\n        case \"bottom-right\":\n        case \"bottom\":\n        case \"bottom-left\":\n            return parentBottom.value;\n        default:\n            return null;\n    }\n});\n\nconst shouldQueue = computed(() =>\n    props.queue && parentTop.value && parentBottom.value\n        ? parentTop.value.childElementCount > 0 ||\n          parentBottom.value.childElementCount > 0\n        : false,\n);\n\nconst isAlert = computed(\n    () => props.variant === \"warning\" || props.variant === \"danger\",\n);\n\n/** move the rendered component template into the correct parent container */\nfunction showNotice(): void {\n    if (!correctParent.value) return;\n\n    if (shouldQueue.value) correctParent.value.innerHTML = \"\";\n    correctParent.value.insertAdjacentElement(\n        \"afterbegin\",\n        notificationRef.value?.$el,\n    );\n}\n\n// --- Auto Close Feature  ---\n\nlet timer: ReturnType<typeof setTimeout> | undefined;\n\n/** Set timer to auto close message */\nfunction setAutoClose(): void {\n    if (!props.infinite) {\n        // clear old timer\n        if (timer) clearTimeout(timer);\n        // set new timer\n        timer = setTimeout(() => {\n            if (isActive.value) close(\"timeout\");\n        }, props.duration);\n    }\n}\n\nlet isPaused = false;\n\nfunction onMouseOver(): void {\n    if (props.pauseOnHover && !props.infinite) {\n        isPaused = true;\n        // stop auto close timeout\n        clearInterval(timer);\n    }\n}\n\nfunction onMouseLeave(): void {\n    if (isPaused)\n        // close when mouse leave and is paused before\n        close(\"mouseleave\");\n}\n\n/** set active to false and emit close event */\nfunction close(...args: [] | [string] | CloseEventArgs<C>): void {\n    isActive.value = false;\n    if (timer) clearTimeout(timer);\n    emits(\"close\", ...args);\n}\n\n// --- Computed Component Classes ---\n\nconst noticeClasses = defineClasses([\"noticeClass\", \"o-notices\"]);\n\nconst positionTopClasses = defineClasses([\n    \"noticePositionClass\",\n    \"o-notices--\",\n    \"top\",\n]);\nconst positionBottomClasses = defineClasses([\n    \"noticePositionClass\",\n    \"o-notices--\",\n    \"bottom\",\n]);\n\nconst noticeContainerClasses = defineClasses([\n    \"noticeContainerClass\",\n    \"o-notices__container\",\n]);\n\n// --- Expose Public Functionalities ---\n\n/** expose functionalities for programmatic usage */\ndefineExpose({ close });\n</script>\n\n<template>\n    <o-notification\n        ref=\"notificationComponent\"\n        v-bind=\"$attrs\"\n        v-model:active=\"isActive\"\n        :override=\"override\"\n        :position=\"position\"\n        :variant=\"variant\"\n        :role=\"isAlert ? 'alert' : 'status'\"\n        :aria-atomic=\"true\"\n        @close=\"close\"\n        @mouseover=\"onMouseOver\"\n        @mouseleave=\"onMouseLeave\">\n        <template #inner=\"{ close }\">\n            <!-- injected component for programmatic usage -->\n            <component\n                v-bind=\"$props.props\"\n                :is=\"component\"\n                v-if=\"component\"\n                v-on=\"$props.events || {}\"\n                @close=\"close\" />\n        </template>\n        <slot />\n    </o-notification>\n</template>\n","import type {\n    Component,\n    ComponentInternalInstance,\n    MaybeRefOrGetter,\n} from \"vue\";\nimport {\n    InstanceRegistry,\n    ComponentProgrammatic,\n    type ProgrammaticComponentOptions,\n    type ProgrammaticExpose,\n} from \"../programmatic\";\nimport { getOption } from \"@/utils/config\";\n\nimport NotificationNotice from \"./NotificationNotice.vue\";\n\nimport type { NotificationProps, NotificationNoticeProps } from \"./props\";\n\ndeclare module \"../../index\" {\n    interface OrugaProgrammatic {\n        notification: typeof NotificationProgrammatic;\n    }\n}\n\n/** notification component programmatic instance registry */\nconst registry = new InstanceRegistry<ComponentInternalInstance>();\n\n/** useNotificationProgrammatic composable options */\nexport type NotificationProgrammaticOptions<C extends Component> = Readonly<\n    Omit<NotificationNoticeProps<C>, \"container\">\n> &\n    Readonly<NotificationProps> &\n    ProgrammaticComponentOptions<typeof NotificationNotice<C>>;\n\nconst NotificationProgrammatic = {\n    /** Returns the number of registered active instances. */\n    count: registry.count,\n    /**\n     * Create a new programmatic notification component instance.\n     * @param options notification message string or notification component props object\n     * @param target specify a target the component get rendered into - default is `document.body`\n     * @returns ProgrammaticExpose\n     */\n    open<C extends Component>(\n        options: string | NotificationProgrammaticOptions<C>,\n        target?: MaybeRefOrGetter<string | HTMLElement | null>,\n    ): ProgrammaticExpose<typeof NotificationNotice<C>> {\n        const _options: NotificationProgrammaticOptions<C> =\n            typeof options === \"string\" ? { message: options } : options;\n\n        const componentProps: NotificationNoticeProps<C> = {\n            position: getOption(\"notification.position\", \"top-right\"),\n            container: document.body,\n            ..._options, // pass all props to the internal notification component\n        };\n\n        // create programmatic component\n        return ComponentProgrammatic.open(NotificationNotice, {\n            registry, // custom programmatic instance registry\n            target, // target the component get rendered into\n            props: componentProps, // component specific props\n            onClose: _options.onClose, // on close event handler\n        });\n    },\n    /** Close the last registred instance in the notification programmatic instance registry. */\n    close(...args: unknown[]): void {\n        registry.last()?.exposed?.close(...args);\n    },\n    /** Close all instances in the programmatic notification instance registry. */\n    closeAll(...args: unknown[]): void {\n        registry.walk((entry) => entry.exposed?.close(...args));\n    },\n};\n\nexport default NotificationProgrammatic;\n","import type { App, Plugin } from \"vue\";\n\nimport Notification from \"./Notification.vue\";\nimport NotificationProgrammatic from \"./useNotificationProgrammatic\";\n\nimport {\n    registerComponent,\n    registerComponentProgrammatic,\n} from \"@/utils/plugins\";\n\n/** export notification specific types */\nexport type { NotificationProgrammaticOptions } from \"./useNotificationProgrammatic\";\n\n/** export notification plugin */\nexport default {\n    install(app: App) {\n        registerComponent(app, Notification);\n        registerComponentProgrammatic(\n            app,\n            \"notification\",\n            NotificationProgrammatic,\n        );\n    },\n} as Plugin;\n\n/** export notification components & composables */\nexport { Notification as ONotification, NotificationProgrammatic };\n"],"names":["_useModel","computed","defineClasses","useTemplateRef","ref","onBeforeMount","getActiveClasses","onMounted","InstanceRegistry","getOption","ComponentProgrammatic","NotificationNotice","registerComponent","Notification","registerComponentProgrammatic"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAuBA,UAAM,QAAQ;AAkBd,UAAM,QAAQ;AAaR,UAAA,WAAWA,IAAAA,SAAoB,SAAC,QAA2B;AAG3D,UAAA,eAAeC,IAAAA,SAAS,MAAM;AAC5B,UAAA,MAAM,KAAM,QAAO,MAAM;AAE7B,cAAQ,MAAM,MAAM;AAAA,QAChB,KAAK;AACM,iBAAA;AAAA,QACX,KAAK;AACM,iBAAA;AAAA,QACX,KAAK;AACM,iBAAA;AAAA,QACX,KAAK;AACM,iBAAA;AAAA,QACX;AACW,iBAAA;AAAA,MAAA;AAAA,IACf,CACH;AAGD,aAAS,SAAS,MAA2B;AACzC,eAAS,QAAQ;AACX,YAAA,SAAS,GAAG,IAAI;AAAA,IAAA;AAK1B,UAAM,cAAcC,cAAA;AAAA,MAChB,CAAC,aAAa,gBAAgB;AAAA,MAC9B;AAAA,QACI;AAAA,QACA;AAAA,QACAD,aAAS,MAAM,MAAM,OAAO;AAAA,QAC5BA,aAAS,MAAM,CAAC,CAAC,MAAM,OAAO;AAAA,MAClC;AAAA,MACA;AAAA,QACI;AAAA,QACA;AAAA,QACA;AAAA,QACAA,IAAA,SAAS,MAAM,MAAM,OAAO;AAAA,MAChC;AAAA,MACA;AAAA,QACI;AAAA,QACA;AAAA,QACAA,aAAS,MAAM,MAAM,QAAQ;AAAA,QAC7BA,aAAS,MAAM,CAAC,CAAC,MAAM,QAAQ;AAAA,MAAA;AAAA,IAEvC;AAEA,UAAM,iBAAiBC,cAAAA,cAAc;AAAA,MACjC;AAAA,MACA;AAAA,IAAA,CACH;AAED,UAAM,cAAcA,cAAA,cAAc,CAAC,aAAa,sBAAsB,CAAC;AAEvE,UAAM,iBAAiBA,cAAAA,cAAc;AAAA,MACjC;AAAA,MACA;AAAA,IAAA,CACH;AAED,UAAM,eAAeA,cAAA,cAAc,CAAC,cAAc,uBAAuB,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACvF1E,UAAM,QAAQ;AAcd,UAAM,QAAQ;AAQR,UAAA,kBAAkBC,mBAAe,uBAAuB;AAExD,UAAA,WAAWC,QAAI,IAAI;AAEnB,UAAA,YAAYA,QAAoB,IAAI;AACpC,UAAA,eAAeA,QAAoB,IAAI;AAG7CC,QAAAA,cAAc,MAAM;AAChB,UACI,cAAc,SACd,sBAAsB,SACtB,mBAAmB,OACrB;AACQ,cAAA,cAAcC,cAAAA,iBAAiB,cAAc,KAAK;AAClD,cAAA,aAAaA,cAAAA,iBAAiB,mBAAmB,KAAK;AACtD,cAAA,gBAAgBA,cAAAA,iBAAiB,sBAAsB,KAAK;AAExD,kBAAA,QAAQ,MAAM,UAAU;AAAA,UAC9B,IAAI,YAAY,KAAK,GAAG,CAAC,IAAI,WAAW,KAAK,GAAG,CAAC;AAAA,QACrD;AACa,qBAAA,QAAQ,MAAM,UAAU;AAAA,UACjC,IAAI,YAAY,KAAK,GAAG,CAAC,IAAI,cAAc,KAAK,GAAG,CAAC;AAAA,QACxD;AAEI,YAAA,UAAU,SAAS,aAAa,MAAO;AAGvC,YAAA,CAAC,UAAU,OAAO;AACR,oBAAA,QAAQ,SAAS,cAAc,KAAK;AACpC,oBAAA,MAAM,YAAY,GAAG,YAAY;AAAA,YACvC;AAAA,UACH,CAAA,IAAI,WAAW,KAAK,GAAG,CAAC;AACzB,oBAAU,MAAM,OAAO;AACvB,oBAAU,MAAM,WAAW;AAAA,QAAA;AAI3B,YAAA,CAAC,aAAa,OAAO;AACR,uBAAA,QAAQ,SAAS,cAAc,KAAK;AACpC,uBAAA,MAAM,YAAY,GAAG,YAAY;AAAA,YAC1C;AAAA,UACH,CAAA,IAAI,cAAc,KAAK,GAAG,CAAC;AAC5B,uBAAa,MAAM,OAAO;AAC1B,uBAAa,MAAM,WAAW;AAAA,QAAA;AAI5B,cAAA,UAAU,YAAY,UAAU,KAAK;AACrC,cAAA,UAAU,YAAY,aAAa,KAAK;AAE1C,YAAA,MAAM,UAAU,YAAY,QAAQ;AAC9B,gBAAA,UAAUA,cAAAA,iBAAiB,uBAAuB,KAAK;AAC7D,cAAI,mCAAS;AAEJ,oBAAA,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EACjB,QAAQ,CAAC,MAAc;;AACV,8BAAA,UAAA,mBAAO,UAAU,IAAI;AAClB,iCAAA,UAAA,mBAAO,UAAU,IAAI;AAAA,YAAC,CACtC;AAAA,QAAA;AAAA,MACb;AAAA,IACJ,CACH;AAEDC,QAAAA,UAAU,MAAM;AACD,iBAAA;AACE,mBAAA;AAAA,IAAA,CAChB;AAEK,UAAA,gBAAgBN,IAAAA,SAAS,MAAM;AACjC,cAAQ,MAAM,UAAU;AAAA,QACpB,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AACD,iBAAO,UAAU;AAAA,QAErB,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AACD,iBAAO,aAAa;AAAA,QACxB;AACW,iBAAA;AAAA,MAAA;AAAA,IACf,CACH;AAED,UAAM,cAAcA,IAAA;AAAA,MAAS,MACzB,MAAM,SAAS,UAAU,SAAS,aAAa,QACzC,UAAU,MAAM,oBAAoB,KACpC,aAAa,MAAM,oBAAoB,IACvC;AAAA,IACV;AAEA,UAAM,UAAUA,IAAA;AAAA,MACZ,MAAM,MAAM,YAAY,aAAa,MAAM,YAAY;AAAA,IAC3D;AAGA,aAAS,aAAmB;;AACpB,UAAA,CAAC,cAAc,MAAO;AAE1B,UAAI,YAAY,MAAqB,eAAA,MAAM,YAAY;AACvD,oBAAc,MAAM;AAAA,QAChB;AAAA,SACA,qBAAgB,UAAhB,mBAAuB;AAAA,MAC3B;AAAA,IAAA;AAKA,QAAA;AAGJ,aAAS,eAAqB;AACtB,UAAA,CAAC,MAAM,UAAU;AAEb,YAAA,oBAAoB,KAAK;AAE7B,gBAAQ,WAAW,MAAM;AACjB,cAAA,SAAS,MAAO,OAAM,SAAS;AAAA,QAAA,GACpC,MAAM,QAAQ;AAAA,MAAA;AAAA,IACrB;AAGJ,QAAI,WAAW;AAEf,aAAS,cAAoB;AACzB,UAAI,MAAM,gBAAgB,CAAC,MAAM,UAAU;AAC5B,mBAAA;AAEX,sBAAc,KAAK;AAAA,MAAA;AAAA,IACvB;AAGJ,aAAS,eAAqB;AACtB,UAAA;AAEA,cAAM,YAAY;AAAA,IAAA;AAI1B,aAAS,SAAS,MAA+C;AAC7D,eAAS,QAAQ;AACb,UAAA,oBAAoB,KAAK;AACvB,YAAA,SAAS,GAAG,IAAI;AAAA,IAAA;AAK1B,UAAM,gBAAgBC,cAAA,cAAc,CAAC,eAAe,WAAW,CAAC;AAEhE,UAAM,qBAAqBA,cAAAA,cAAc;AAAA,MACrC;AAAA,MACA;AAAA,MACA;AAAA,IAAA,CACH;AACD,UAAM,wBAAwBA,cAAAA,cAAc;AAAA,MACxC;AAAA,MACA;AAAA,MACA;AAAA,IAAA,CACH;AAED,UAAM,yBAAyBA,cAAAA,cAAc;AAAA,MACzC;AAAA,MACA;AAAA,IAAA,CACH;AAKY,aAAA,EAAE,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;ACpMtB,MAAM,WAAW,IAAIM,gBAAAA,iBAA4C;AASjE,MAAM,2BAA2B;AAAA;AAAA,EAE7B,OAAO,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOhB,KACI,SACA,QACgD;AAChD,UAAM,WACF,OAAO,YAAY,WAAW,EAAE,SAAS,YAAY;AAEzD,UAAM,iBAA6C;AAAA,MAC/C,UAAUC,OAAAA,UAAU,yBAAyB,WAAW;AAAA,MACxD,WAAW,SAAS;AAAA,MACpB,GAAG;AAAA;AAAA,IACP;AAGO,WAAAC,gBAAA,sBAAsB,KAAKC,WAAoB;AAAA,MAClD;AAAA;AAAA,MACA;AAAA;AAAA,MACA,OAAO;AAAA;AAAA,MACP,SAAS,SAAS;AAAA;AAAA,IAAA,CACrB;AAAA,EACL;AAAA;AAAA,EAEA,SAAS,MAAuB;;AAC5B,yBAAS,KAAK,MAAd,mBAAiB,YAAjB,mBAA0B,MAAM,GAAG;AAAA,EACvC;AAAA;AAAA,EAEA,YAAY,MAAuB;AACtB,aAAA,KAAK,CAAC,UAAU;;AAAA,yBAAM,YAAN,mBAAe,MAAM,GAAG;AAAA,KAAK;AAAA,EAAA;AAE9D;ACzDA,MAAe,QAAA;AAAA,EACX,QAAQ,KAAU;AACdC,WAAA,kBAAkB,KAAKC,WAAY;AACnCC,WAAA;AAAA,MACI;AAAA,MACA;AAAA,MACA;AAAA,IACJ;AAAA,EAAA;AAER;;;;"}