{"version":3,"file":"slider.mjs","sources":["../../src/components/slider/SliderThumb.vue","../../src/components/slider/SliderTick.vue","../../src/components/slider/Slider.vue","../../src/components/slider/index.ts"],"sourcesContent":["<script setup lang=\"ts\" generic=\"IsRange extends boolean = false\">\nimport { computed, ref } from \"vue\";\n\nimport OTooltip from \"../tooltip/Tooltip.vue\";\n\nimport { isClient } from \"@/utils/ssr\";\n\nimport { injectField } from \"../field/fieldInjection\";\n\nimport type { SliderProps } from \"./props\";\nimport type { ClassBind, WithRequired } from \"@/types\";\n\n/**\n * @displayName Slider Thumb\n */\ndefineOptions({\n    isOruga: true,\n    name: \"OSliderThumb\",\n    configField: \"slider\",\n    inheritAttrs: false,\n});\n\nconst props = defineProps<{\n    /** parent slider component props  */\n    sliderProps: WithRequired<SliderProps<IsRange>, \"min\" | \"max\" | \"step\">;\n    modelValue: number;\n    sliderSize: () => number;\n    thumbWrapperClasses: ClassBind[];\n    thumbClasses: ClassBind[];\n}>();\n\nconst emits = defineEmits<{\n    /**\n     * modelValue prop two-way binding\n     * @param value {number | number[]} updated modelValue prop\n     */\n    \"update:model-value\": [value: number | number[]];\n    /** on value change event */\n    change: [];\n    /** on drag start event */\n    dragstart: [];\n    /** on drag end event */\n    dragend: [];\n}>();\n\n// inject parent field component if used inside one\nconst { parentField } = injectField();\n\nconst isFocused = ref(false);\nconst dragging = ref(false);\nconst startX = ref(0);\nconst startPosition = ref(0);\nconst newPosition = ref<number>();\nconst oldValue = ref(props.modelValue);\n\nconst tooltip = computed(() => props.sliderProps.tooltip);\nconst tooltipAlways = computed(() => props.sliderProps.tooltipAlways);\nconst disabled = computed(() => props.sliderProps.disabled);\nconst max = computed(() => props.sliderProps.max);\nconst min = computed(() => props.sliderProps.min);\nconst step = computed(() => props.sliderProps.step);\nconst indicator = computed(() => props.sliderProps.indicator);\nconst ariaLabel = computed(() => props.sliderProps.ariaLabel);\n\nconst precision = computed(() => {\n    const precisions = [min.value, max.value, step.value].map((item) => {\n        const decimal = (\"\" + item).split(\".\")[1];\n        return decimal ? decimal.length : 0;\n    });\n    return Math.max(...precisions);\n});\n\nconst computedTooltipVariant = computed(() =>\n    props.sliderProps.tooltipVariant\n        ? props.sliderProps.tooltipVariant\n        : props.sliderProps.variant,\n);\n\nconst currentPosition = computed(\n    () =>\n        `${((props.modelValue - min.value) / (max.value - min.value)) * 100}%`,\n);\n\nconst wrapperStyle = computed(() => ({ left: currentPosition.value }));\n\nconst formattedValue = computed(() => {\n    if (typeof props.sliderProps.formatter !== \"undefined\")\n        return props.sliderProps.formatter(props.modelValue);\n\n    if (props.sliderProps.format === \"percent\")\n        return new Intl.NumberFormat(props.sliderProps.locale, {\n            style: \"percent\",\n        }).format((props.modelValue - min.value) / (max.value - min.value));\n\n    return new Intl.NumberFormat(props.sliderProps.locale).format(\n        props.modelValue,\n    );\n});\n\nfunction onFocus(): void {\n    isFocused.value = true;\n}\n\nfunction onBlur(): void {\n    isFocused.value = false;\n}\n\nfunction onButtonDown(event): void {\n    if (disabled.value) return;\n    event.preventDefault();\n    onDragStart(event);\n\n    if (isClient) {\n        document.addEventListener(\"mousemove\", onDragging);\n        document.addEventListener(\"touchmove\", onDragging);\n        document.addEventListener(\"mouseup\", onDragEnd);\n        document.addEventListener(\"touchend\", onDragEnd);\n        document.addEventListener(\"contextmenu\", onDragEnd);\n    }\n}\n\nfunction onLeftKeyDown(): void {\n    if (disabled.value || props.modelValue === min.value) return;\n    newPosition.value =\n        parseFloat(currentPosition.value) -\n        (step.value / (max.value - min.value)) * 100;\n    setPosition(newPosition.value);\n    emits(\"change\");\n}\n\nfunction onRightKeyDown(): void {\n    if (disabled.value || props.modelValue === max.value) return;\n    newPosition.value =\n        parseFloat(currentPosition.value) +\n        (step.value / (max.value - min.value)) * 100;\n    setPosition(newPosition.value);\n    emits(\"change\");\n}\n\nfunction onHomeKeyDown(): void {\n    if (disabled.value || props.modelValue === min.value) return;\n    newPosition.value = 0;\n    setPosition(newPosition.value);\n    emits(\"change\");\n}\n\nfunction onEndKeyDown(): void {\n    if (disabled.value || props.modelValue === max.value) return;\n    newPosition.value = 100;\n    setPosition(newPosition.value);\n    emits(\"change\");\n}\n\nfunction onDragStart(event): void {\n    dragging.value = true;\n    emits(\"dragstart\");\n    if (event.type === \"touchstart\") event.clientX = event.touches[0].clientX;\n\n    startX.value = event.clientX;\n    startPosition.value = parseFloat(currentPosition.value);\n    newPosition.value = startPosition.value;\n}\n\nfunction onDragging(event): void {\n    if (dragging.value) {\n        if (event.type === \"touchmove\")\n            event.clientX = event.touches[0].clientX;\n\n        const diff =\n            ((event.clientX - startX.value) / props.sliderSize()) * 100;\n        newPosition.value = startPosition.value + diff;\n        setPosition(newPosition.value);\n    }\n}\n\nfunction onDragEnd(): void {\n    dragging.value = false;\n    emits(\"dragend\");\n    if (props.modelValue !== oldValue.value) emits(\"change\");\n\n    setPosition(newPosition.value);\n    if (isClient) {\n        document.removeEventListener(\"mousemove\", onDragging);\n        document.removeEventListener(\"touchmove\", onDragging);\n        document.removeEventListener(\"mouseup\", onDragEnd);\n        document.removeEventListener(\"touchend\", onDragEnd);\n        document.removeEventListener(\"contextmenu\", onDragEnd);\n    }\n}\n\nfunction setPosition(percent: number | undefined): void {\n    if (percent === undefined || isNaN(percent)) return;\n    if (percent < 0) percent = 0;\n    else if (percent > 100) percent = 100;\n\n    const stepLength = 100 / ((max.value - min.value) / step.value);\n    const steps = Math.round(percent / stepLength);\n    let value =\n        ((steps * stepLength) / 100) * (max.value - min.value) + min.value;\n    value = parseFloat(value.toFixed(precision.value));\n    emits(\"update:model-value\", value);\n\n    if (!dragging.value && value !== oldValue.value) oldValue.value = value;\n}\n\ndefineExpose({ setPosition });\n</script>\n\n<template>\n    <div\n        data-oruga=\"slider-thumb\"\n        :class=\"thumbWrapperClasses\"\n        :style=\"wrapperStyle\">\n        <o-tooltip\n            :label=\"formattedValue\"\n            :variant=\"computedTooltipVariant\"\n            :disabled=\"disabled || !tooltip\"\n            :always=\"tooltipAlways || dragging || isFocused\">\n            <div\n                v-bind=\"$attrs\"\n                :class=\"thumbClasses\"\n                :tabindex=\"disabled ? undefined : 0\"\n                role=\"slider\"\n                :aria-label=\"ariaLabel\"\n                :aria-labelledby=\"parentField?.labelId\"\n                :aria-valuenow=\"modelValue\"\n                :aria-valuemin=\"min\"\n                :aria-valuemax=\"max\"\n                :aria-disabled=\"disabled\"\n                aria-orientation=\"horizontal\"\n                @mousedown=\"onButtonDown\"\n                @touchstart.passive=\"onButtonDown\"\n                @focus=\"onFocus\"\n                @blur=\"onBlur\"\n                @keydown.left.prevent=\"onLeftKeyDown\"\n                @keydown.right.prevent=\"onRightKeyDown\"\n                @keydown.down.prevent=\"onLeftKeyDown\"\n                @keydown.up.prevent=\"onRightKeyDown\"\n                @keydown.home.prevent=\"onHomeKeyDown\"\n                @keydown.end.prevent=\"onEndKeyDown\">\n                <span v-if=\"indicator\">{{ formattedValue }}</span>\n            </div>\n        </o-tooltip>\n    </div>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, type PropType } from \"vue\";\nimport { defineClasses, useProviderChild } from \"@/composables\";\n\nimport type { SliderComponent } from \"./types\";\nimport type { ComponentClass } from \"@/types\";\n\n/**\n * @displayName Slider Tick\n */\ndefineOptions({\n    isOruga: true,\n    name: \"OSliderTick\",\n    configField: \"slider\",\n});\n\nconst props = defineProps({\n    /** Override existing theme classes completely */\n    override: { type: Boolean, default: undefined },\n    /** Value of single tick */\n    value: { type: Number, required: true },\n    /** Tick label */\n    label: { type: [String, Number], default: undefined },\n    tickClass: {\n        type: [String, Function, Array] as PropType<ComponentClass>,\n        default: undefined,\n    },\n    /** Class when slider tick is hidden */\n    tickHiddenClass: {\n        type: [String, Function, Array] as PropType<ComponentClass>,\n        default: undefined,\n    },\n    /** Class of tick label */\n    tickLabelClass: {\n        type: [String, Function, Array] as PropType<ComponentClass>,\n        default: undefined,\n    },\n});\n\n/** inject functionalities and data from the parent component */\nconst { parent } = useProviderChild<SliderComponent>({ register: false });\n\nconst position = computed(() => {\n    const pos =\n        ((props.value - parent.value.min) /\n            (parent.value.max - parent.value.min)) *\n        100;\n    return pos >= 0 && pos <= 100 ? pos : 0;\n});\n\nconst hidden = computed(\n    () => props.value === parent.value.min || props.value === parent.value.max,\n);\n\nconst tickStyle = computed(() => ({ left: position.value + \"%\" }));\n\n// --- Computed Component Classes ---\n\nconst rootClasses = defineClasses(\n    [\"tickClass\", \"o-slider__tick\"],\n    [\"tickHiddenClass\", \"o-slider__tick--hidden\", null, hidden],\n);\n\nconst tickLabelClasses = defineClasses([\n    \"tickLabelClass\",\n    \"o-slider__tick-label\",\n]);\n</script>\n\n<template>\n    <div data-oruga=\"slider-tick\" :class=\"rootClasses\" :style=\"tickStyle\">\n        <span v-if=\"$slots.default || label\" :class=\"tickLabelClasses\">\n            <!-- \n                @slot Override tick content, default is label prop\n             -->\n            <slot> {{ label }} </slot>\n        </span>\n    </div>\n</template>\n","<script setup lang=\"ts\" generic=\"IsRange extends boolean = false\">\nimport { computed, ref, useTemplateRef, watch } from \"vue\";\n\nimport OSliderThumb from \"./SliderThumb.vue\";\nimport OSliderTick from \"./SliderTick.vue\";\n\nimport { getDefault } from \"@/utils/config\";\nimport { isTrueish } from \"@/utils/helpers\";\nimport { defineClasses, useProviderParent } from \"@/composables\";\n\nimport type { SliderComponent } from \"./types\";\nimport type { SliderProps } from \"./props\";\n\n/**\n * A slider to select a value or range from a given range.\n * @displayName Slider\n * @requires ./SliderTick.vue\n * @style _slider.scss\n */\ndefineOptions({\n    isOruga: true,\n    name: \"OSlider\",\n    configField: \"slider\",\n});\n\ntype ModelValue = SliderProps<IsRange>[\"modelValue\"];\n\nconst props = withDefaults(defineProps<SliderProps<IsRange>>(), {\n    override: undefined,\n    modelValue: undefined,\n    // range: false,\n    min: 0,\n    max: 100,\n    step: 1,\n    variant: () => getDefault(\"slider.variant\"),\n    size: () => getDefault(\"slider.size\"),\n    ticks: false,\n    tooltip: () => getDefault(\"slider.tooltip\", true),\n    tooltipVariant: () => getDefault(\"slider.tooltipVariant\"),\n    tooltipAlways: false,\n    rounded: () => getDefault(\"slider.rounded\", false),\n    disabled: false,\n    lazy: false,\n    formatter: undefined,\n    biggerSliderFocus: false,\n    indicator: false,\n    format: () => getDefault(\"slider.format\", \"raw\"),\n    locale: () => getDefault(\"locale\"),\n    ariaLabel: () => getDefault(\"slider.ariaLabel\"),\n});\n\nconst emits = defineEmits<{\n    /**\n     * modelValue prop two-way binding\n     * @param value {number | number[]} updated modelValue prop\n     */\n    \"update:model-value\": [value: ModelValue];\n    /**\n     * on value change event\n     * @param value {number | number[]} updated modelValue prop\n     */\n    change: [value: ModelValue];\n    /**\n     * on dragging event\n     * @param value {number | number[]} updated modelValue prop\n     * */\n    dragging: [value: ModelValue];\n    /** on drag start event */\n    dragstart: [];\n    /** on drag end event */\n    dragend: [];\n}>();\n\nconst sliderRef = useTemplateRef(\"sliderElement\");\nconst thumbStartRef = useTemplateRef(\"thumbStartComponent\");\nconst thumbEndRef = useTemplateRef(\"thumbEndComponent\");\n\n// provided data is a computed ref to ensure reactivity\nconst provideData = computed<SliderComponent>(() => ({\n    max: props.max,\n    min: props.min,\n}));\n\n/** provide functionalities and data to child item components */\nuseProviderParent({ data: provideData });\n\nconst valueStart = ref<number>(0);\nconst valueEnd = ref<number>(0);\nconst dragging = ref(false);\n\nconst isThumbReversed = ref();\nconst isTrackClickDisabled = ref();\n\nconst minValue = computed(() =>\n    Math.min(valueStart.value || props.min, valueEnd.value || props.max),\n);\n\nconst maxValue = computed(() =>\n    Math.max(valueStart.value || props.min, valueEnd.value || props.max),\n);\n\nconst isRange = computed(() => isTrueish(props.range));\n\nconst vmodel = computed<ModelValue>(\n    () =>\n        (isRange.value\n            ? [minValue.value, maxValue.value]\n            : valueStart.value || 0) as ModelValue,\n);\n\n/** update vmodel value on internal value change */\nwatch([valueStart, valueEnd], () => {\n    if (isRange.value)\n        isThumbReversed.value =\n            valueStart.value && valueEnd.value\n                ? valueStart.value > valueEnd.value\n                : false;\n    if (!props.lazy || !dragging.value)\n        emits(\"update:model-value\", vmodel.value); // update external vmodel\n    if (dragging.value) emits(\"dragging\", vmodel.value);\n});\n\n/** When min, max or v-model is changed set the new active step. */\nwatch(\n    [() => props.min, () => props.max, () => props.modelValue],\n    () => setValues(props.modelValue),\n    { immediate: true }, // initialise valueStart and valueEnd\n);\n\nfunction setValues(newValue: number | number[] | undefined): void {\n    if (props.min > props.max) return;\n\n    if (Array.isArray(newValue)) {\n        const smallValue =\n            typeof newValue[0] !== \"number\" || isNaN(newValue[0])\n                ? props.min\n                : Math.min(Math.max(props.min, newValue[0]), props.max);\n        const largeValue =\n            typeof newValue[1] !== \"number\" || isNaN(newValue[1])\n                ? props.max\n                : Math.max(Math.min(props.max, newValue[1]), props.min);\n        valueStart.value = isThumbReversed.value ? largeValue : smallValue;\n        valueEnd.value = isThumbReversed.value ? smallValue : largeValue;\n    } else if (newValue !== undefined) {\n        valueStart.value = isNaN(newValue)\n            ? props.min\n            : Math.min(props.max, Math.max(props.min, newValue));\n        valueEnd.value = 0;\n    } else {\n        valueStart.value = props.min;\n        valueEnd.value = props.min;\n    }\n}\n\nconst tickValues = computed(() => {\n    if (!props.ticks || props.min > props.max || props.step === 0) return [];\n    const result: number[] = [];\n    for (let i = props.min + props.step; i < props.max; i = i + props.step) {\n        result.push(i);\n    }\n    return result;\n});\n\nconst barSize = computed(() =>\n    isRange.value\n        ? `${\n              (100 * (maxValue.value - minValue.value)) /\n              (props.max - props.min)\n          }%`\n        : `${\n              (100 * (valueStart.value - props.min)) / (props.max - props.min)\n          }%`,\n);\n\nconst barStart = computed(() =>\n    isRange.value\n        ? `${(100 * (minValue.value - props.min)) / (props.max - props.min)}%`\n        : \"0%\",\n);\n\nconst barStyle = computed(() => ({\n    width: barSize.value,\n    left: barStart.value,\n}));\n\nfunction getSliderSize(): number {\n    return sliderRef.value?.getBoundingClientRect().width || 0;\n}\n\nfunction onSliderClick(event: MouseEvent): void {\n    if (props.disabled || isTrackClickDisabled.value) return;\n    if (\n        !sliderRef.value ||\n        !thumbStartRef.value ||\n        (isRange.value && !thumbEndRef.value)\n    )\n        return;\n\n    const sliderOffsetLeft = sliderRef.value.getBoundingClientRect().left;\n    const percent =\n        ((event.clientX - sliderOffsetLeft) / getSliderSize()) * 100;\n    const targetValue = props.min + (percent * (props.max - props.min)) / 100;\n    const diffFirst = Math.abs(targetValue - valueStart.value);\n    if (!isRange.value) {\n        if (diffFirst < props.step / 2) return;\n        thumbStartRef.value.setPosition(percent);\n    } else {\n        const diffSecond = Math.abs(targetValue - valueEnd.value);\n        if (diffFirst <= diffSecond) {\n            if (diffFirst < props.step / 2) return;\n            thumbStartRef.value.setPosition(percent);\n        } else {\n            if (diffSecond < props.step / 2) return;\n            if (isRange.value && thumbEndRef.value)\n                thumbEndRef.value.setPosition(percent);\n        }\n    }\n    emits(\"change\", vmodel.value);\n}\n\nfunction onDragStart(): void {\n    dragging.value = true;\n    emits(\"dragstart\");\n}\n\nfunction onDragEnd(): void {\n    isTrackClickDisabled.value = true;\n    // avoid triggering onSliderClick after dragend\n    setTimeout(() => (isTrackClickDisabled.value = false));\n    dragging.value = false;\n    emits(\"dragend\");\n    if (props.lazy) emits(\"update:model-value\", vmodel.value);\n}\n\n// --- Computed Component Classes ---\n\nconst rootClasses = defineClasses(\n    [\"rootClass\", \"o-slider\"],\n    [\n        \"sizeClass\",\n        \"o-slider--\",\n        computed(() => props.size),\n        computed(() => !!props.size),\n    ],\n    [\n        \"disabledClass\",\n        \"o-slider--disabled\",\n        null,\n        computed(() => props.disabled),\n    ],\n);\n\nconst trackClasses = defineClasses([\"trackClass\", \"o-slider__track\"]);\n\nconst fillClasses = defineClasses(\n    [\"fillClass\", \"o-slider__fill\"],\n    [\n        \"variantClass\",\n        \"o-slider__fill--\",\n        computed(() => props.variant),\n        computed(() => !!props.variant),\n    ],\n);\n\nconst thumbWrapperClasses = defineClasses(\n    [\"thumbWrapperClass\", \"o-slider__thumb-wrapper\"],\n    [\n        \"thumbWrapperDraggingClass\",\n        \"o-slider__thumb-wrapper--dragging\",\n        null,\n        dragging,\n    ],\n);\n\nconst thumbClasses = defineClasses(\n    [\"thumbClass\", \"o-slider__thumb\"],\n    [\"thumbDraggingClass\", \"o-slider__thumb--dragging\", null, dragging],\n    [\n        \"thumbRoundedClass\",\n        \"o-slider__thumb--rounded\",\n        null,\n        computed(() => props.rounded),\n    ],\n);\n\n// --- Expose Public Functionalities ---\n\n/** expose functionalities for programmatic usage */\ndefineExpose({ value: vmodel });\n</script>\n\n<template>\n    <div data-oruga=\"slider\" :class=\"rootClasses\" @click=\"onSliderClick\">\n        <div ref=\"sliderElement\" :class=\"trackClasses\">\n            <div :class=\"fillClasses\" :style=\"barStyle\" />\n\n            <template v-if=\"ticks\">\n                <o-slider-tick\n                    v-for=\"(val, key) in tickValues\"\n                    :key=\"key\"\n                    :value=\"val\"\n                    :tick-class=\"tickClass\"\n                    :tick-hidden-class=\"tickHiddenClass\"\n                    :tick-label-class=\"tickLabelClass\" />\n            </template>\n\n            <!--\n                @slot Define additional slider ticks here\n             -->\n            <slot />\n\n            <o-slider-thumb\n                ref=\"thumbStartComponent\"\n                v-model=\"valueStart\"\n                :slider-props=\"props\"\n                :slider-size=\"getSliderSize\"\n                :thumb-classes=\"thumbClasses\"\n                :thumb-wrapper-classes=\"thumbWrapperClasses\"\n                @change=\"emits('change', vmodel)\"\n                @dragstart=\"onDragStart\"\n                @dragend=\"onDragEnd\" />\n\n            <o-slider-thumb\n                v-if=\"isRange\"\n                ref=\"thumbEndComponent\"\n                v-model=\"valueEnd\"\n                :slider-props=\"props\"\n                :slider-size=\"getSliderSize\"\n                :thumb-classes=\"thumbClasses\"\n                :thumb-wrapper-classes=\"thumbWrapperClasses\"\n                @change=\"emits('change', vmodel)\"\n                @dragstart=\"onDragStart\"\n                @dragend=\"onDragEnd\" />\n        </div>\n    </div>\n</template>\n","import type { App, Plugin } from \"vue\";\n\nimport Slider from \"./Slider.vue\";\nimport SliderTick from \"./SliderTick.vue\";\n\nimport { registerComponent } from \"@/utils/plugins\";\n\n/** export slider specific types */\nexport type * from \"./types\";\n\n/** export slider plugin */\nexport default {\n    install(app: App) {\n        registerComponent(app, Slider);\n        registerComponent(app, SliderTick);\n    },\n} as Plugin;\n\n/** export slider components */\nexport { Slider as OSlider, SliderTick as OSliderTick };\n"],"names":["Slider","SliderTick"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AAsBA,UAAM,QAAQ;AASd,UAAM,QAAQ;AAeR,UAAA,EAAE,YAAY,IAAI,YAAY;AAE9B,UAAA,YAAY,IAAI,KAAK;AACrB,UAAA,WAAW,IAAI,KAAK;AACpB,UAAA,SAAS,IAAI,CAAC;AACd,UAAA,gBAAgB,IAAI,CAAC;AAC3B,UAAM,cAAc,IAAY;AAC1B,UAAA,WAAW,IAAI,MAAM,UAAU;AAErC,UAAM,UAAU,SAAS,MAAM,MAAM,YAAY,OAAO;AACxD,UAAM,gBAAgB,SAAS,MAAM,MAAM,YAAY,aAAa;AACpE,UAAM,WAAW,SAAS,MAAM,MAAM,YAAY,QAAQ;AAC1D,UAAM,MAAM,SAAS,MAAM,MAAM,YAAY,GAAG;AAChD,UAAM,MAAM,SAAS,MAAM,MAAM,YAAY,GAAG;AAChD,UAAM,OAAO,SAAS,MAAM,MAAM,YAAY,IAAI;AAClD,UAAM,YAAY,SAAS,MAAM,MAAM,YAAY,SAAS;AAC5D,UAAM,YAAY,SAAS,MAAM,MAAM,YAAY,SAAS;AAEtD,UAAA,YAAY,SAAS,MAAM;AACvB,YAAA,aAAa,CAAC,IAAI,OAAO,IAAI,OAAO,KAAK,KAAK,EAAE,IAAI,CAAC,SAAS;AAChE,cAAM,WAAW,KAAK,MAAM,MAAM,GAAG,EAAE,CAAC;AACjC,eAAA,UAAU,QAAQ,SAAS;AAAA,MAAA,CACrC;AACM,aAAA,KAAK,IAAI,GAAG,UAAU;AAAA,IAAA,CAChC;AAED,UAAM,yBAAyB;AAAA,MAAS,MACpC,MAAM,YAAY,iBACZ,MAAM,YAAY,iBAClB,MAAM,YAAY;AAAA,IAC5B;AAEA,UAAM,kBAAkB;AAAA,MACpB,MACI,IAAK,MAAM,aAAa,IAAI,UAAU,IAAI,QAAQ,IAAI,SAAU,GAAG;AAAA,IAC3E;AAEA,UAAM,eAAe,SAAS,OAAO,EAAE,MAAM,gBAAgB,QAAQ;AAE/D,UAAA,iBAAiB,SAAS,MAAM;AAC9B,UAAA,OAAO,MAAM,YAAY,cAAc;AACvC,eAAO,MAAM,YAAY,UAAU,MAAM,UAAU;AAEnD,UAAA,MAAM,YAAY,WAAW;AAC7B,eAAO,IAAI,KAAK,aAAa,MAAM,YAAY,QAAQ;AAAA,UACnD,OAAO;AAAA,QACV,CAAA,EAAE,QAAQ,MAAM,aAAa,IAAI,UAAU,IAAI,QAAQ,IAAI,MAAM;AAEtE,aAAO,IAAI,KAAK,aAAa,MAAM,YAAY,MAAM,EAAE;AAAA,QACnD,MAAM;AAAA,MACV;AAAA,IAAA,CACH;AAED,aAAS,UAAgB;AACrB,gBAAU,QAAQ;AAAA,IAAA;AAGtB,aAAS,SAAe;AACpB,gBAAU,QAAQ;AAAA,IAAA;AAGtB,aAAS,aAAa,OAAa;AAC/B,UAAI,SAAS,MAAO;AACpB,YAAM,eAAe;AACrB,kBAAY,KAAK;AAEjB,UAAI,UAAU;AACD,iBAAA,iBAAiB,aAAa,UAAU;AACxC,iBAAA,iBAAiB,aAAa,UAAU;AACxC,iBAAA,iBAAiB,WAAW,SAAS;AACrC,iBAAA,iBAAiB,YAAY,SAAS;AACtC,iBAAA,iBAAiB,eAAe,SAAS;AAAA,MAAA;AAAA,IACtD;AAGJ,aAAS,gBAAsB;AAC3B,UAAI,SAAS,SAAS,MAAM,eAAe,IAAI,MAAO;AAC1C,kBAAA,QACR,WAAW,gBAAgB,KAAK,IAC/B,KAAK,SAAS,IAAI,QAAQ,IAAI,SAAU;AAC7C,kBAAY,YAAY,KAAK;AAC7B,YAAM,QAAQ;AAAA,IAAA;AAGlB,aAAS,iBAAuB;AAC5B,UAAI,SAAS,SAAS,MAAM,eAAe,IAAI,MAAO;AAC1C,kBAAA,QACR,WAAW,gBAAgB,KAAK,IAC/B,KAAK,SAAS,IAAI,QAAQ,IAAI,SAAU;AAC7C,kBAAY,YAAY,KAAK;AAC7B,YAAM,QAAQ;AAAA,IAAA;AAGlB,aAAS,gBAAsB;AAC3B,UAAI,SAAS,SAAS,MAAM,eAAe,IAAI,MAAO;AACtD,kBAAY,QAAQ;AACpB,kBAAY,YAAY,KAAK;AAC7B,YAAM,QAAQ;AAAA,IAAA;AAGlB,aAAS,eAAqB;AAC1B,UAAI,SAAS,SAAS,MAAM,eAAe,IAAI,MAAO;AACtD,kBAAY,QAAQ;AACpB,kBAAY,YAAY,KAAK;AAC7B,YAAM,QAAQ;AAAA,IAAA;AAGlB,aAAS,YAAY,OAAa;AAC9B,eAAS,QAAQ;AACjB,YAAM,WAAW;AACb,UAAA,MAAM,SAAS,aAAc,OAAM,UAAU,MAAM,QAAQ,CAAC,EAAE;AAElE,aAAO,QAAQ,MAAM;AACP,oBAAA,QAAQ,WAAW,gBAAgB,KAAK;AACtD,kBAAY,QAAQ,cAAc;AAAA,IAAA;AAGtC,aAAS,WAAW,OAAa;AAC7B,UAAI,SAAS,OAAO;AAChB,YAAI,MAAM,SAAS;AACf,gBAAM,UAAU,MAAM,QAAQ,CAAC,EAAE;AAErC,cAAM,QACA,MAAM,UAAU,OAAO,SAAS,MAAM,eAAgB;AAChD,oBAAA,QAAQ,cAAc,QAAQ;AAC1C,oBAAY,YAAY,KAAK;AAAA,MAAA;AAAA,IACjC;AAGJ,aAAS,YAAkB;AACvB,eAAS,QAAQ;AACjB,YAAM,SAAS;AACf,UAAI,MAAM,eAAe,SAAS,aAAa,QAAQ;AAEvD,kBAAY,YAAY,KAAK;AAC7B,UAAI,UAAU;AACD,iBAAA,oBAAoB,aAAa,UAAU;AAC3C,iBAAA,oBAAoB,aAAa,UAAU;AAC3C,iBAAA,oBAAoB,WAAW,SAAS;AACxC,iBAAA,oBAAoB,YAAY,SAAS;AACzC,iBAAA,oBAAoB,eAAe,SAAS;AAAA,MAAA;AAAA,IACzD;AAGJ,aAAS,YAAY,SAAmC;AACpD,UAAI,YAAY,UAAa,MAAM,OAAO,EAAG;AACzC,UAAA,UAAU,EAAa,WAAA;AAAA,eAClB,UAAU,IAAe,WAAA;AAElC,YAAM,aAAa,QAAQ,IAAI,QAAQ,IAAI,SAAS,KAAK;AACzD,YAAM,QAAQ,KAAK,MAAM,UAAU,UAAU;AACzC,UAAA,QACE,QAAQ,aAAc,OAAQ,IAAI,QAAQ,IAAI,SAAS,IAAI;AACjE,cAAQ,WAAW,MAAM,QAAQ,UAAU,KAAK,CAAC;AACjD,YAAM,sBAAsB,KAAK;AAEjC,UAAI,CAAC,SAAS,SAAS,UAAU,SAAS,gBAAgB,QAAQ;AAAA,IAAA;AAGzD,aAAA,EAAE,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC7L5B,UAAM,QAAQ;AAwBd,UAAM,EAAE,OAAO,IAAI,iBAAkC,EAAE,UAAU,OAAO;AAElE,UAAA,WAAW,SAAS,MAAM;AACtB,YAAA,OACA,MAAM,QAAQ,OAAO,MAAM,QACxB,OAAO,MAAM,MAAM,OAAO,MAAM,OACrC;AACJ,aAAO,OAAO,KAAK,OAAO,MAAM,MAAM;AAAA,IAAA,CACzC;AAED,UAAM,SAAS;AAAA,MACX,MAAM,MAAM,UAAU,OAAO,MAAM,OAAO,MAAM,UAAU,OAAO,MAAM;AAAA,IAC3E;AAEM,UAAA,YAAY,SAAS,OAAO,EAAE,MAAM,SAAS,QAAQ,MAAM;AAIjE,UAAM,cAAc;AAAA,MAChB,CAAC,aAAa,gBAAgB;AAAA,MAC9B,CAAC,mBAAmB,0BAA0B,MAAM,MAAM;AAAA,IAC9D;AAEA,UAAM,mBAAmB,cAAc;AAAA,MACnC;AAAA,MACA;AAAA,IAAA,CACH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACvCD,UAAM,QAAQ;AAwBd,UAAM,QAAQ;AAsBR,UAAA,YAAY,eAAe,eAAe;AAC1C,UAAA,gBAAgB,eAAe,qBAAqB;AACpD,UAAA,cAAc,eAAe,mBAAmB;AAGhD,UAAA,cAAc,SAA0B,OAAO;AAAA,MACjD,KAAK,MAAM;AAAA,MACX,KAAK,MAAM;AAAA,IAAA,EACb;AAGgB,sBAAA,EAAE,MAAM,aAAa;AAEjC,UAAA,aAAa,IAAY,CAAC;AAC1B,UAAA,WAAW,IAAY,CAAC;AACxB,UAAA,WAAW,IAAI,KAAK;AAE1B,UAAM,kBAAkB,IAAI;AAC5B,UAAM,uBAAuB,IAAI;AAEjC,UAAM,WAAW;AAAA,MAAS,MACtB,KAAK,IAAI,WAAW,SAAS,MAAM,KAAK,SAAS,SAAS,MAAM,GAAG;AAAA,IACvE;AAEA,UAAM,WAAW;AAAA,MAAS,MACtB,KAAK,IAAI,WAAW,SAAS,MAAM,KAAK,SAAS,SAAS,MAAM,GAAG;AAAA,IACvE;AAEA,UAAM,UAAU,SAAS,MAAM,UAAU,MAAM,KAAK,CAAC;AAErD,UAAM,SAAS;AAAA,MACX,MACK,QAAQ,QACH,CAAC,SAAS,OAAO,SAAS,KAAK,IAC/B,WAAW,SAAS;AAAA,IAClC;AAGA,UAAM,CAAC,YAAY,QAAQ,GAAG,MAAM;AAChC,UAAI,QAAQ;AACQ,wBAAA,QACZ,WAAW,SAAS,SAAS,QACvB,WAAW,QAAQ,SAAS,QAC5B;AACd,UAAI,CAAC,MAAM,QAAQ,CAAC,SAAS;AACnB,cAAA,sBAAsB,OAAO,KAAK;AAC5C,UAAI,SAAS,MAAa,OAAA,YAAY,OAAO,KAAK;AAAA,IAAA,CACrD;AAGD;AAAA,MACI,CAAC,MAAM,MAAM,KAAK,MAAM,MAAM,KAAK,MAAM,MAAM,UAAU;AAAA,MACzD,MAAM,UAAU,MAAM,UAAU;AAAA,MAChC,EAAE,WAAW,KAAK;AAAA;AAAA,IACtB;AAEA,aAAS,UAAU,UAA+C;AAC1D,UAAA,MAAM,MAAM,MAAM,IAAK;AAEvB,UAAA,MAAM,QAAQ,QAAQ,GAAG;AACnB,cAAA,aACF,OAAO,SAAS,CAAC,MAAM,YAAY,MAAM,SAAS,CAAC,CAAC,IAC9C,MAAM,MACN,KAAK,IAAI,KAAK,IAAI,MAAM,KAAK,SAAS,CAAC,CAAC,GAAG,MAAM,GAAG;AACxD,cAAA,aACF,OAAO,SAAS,CAAC,MAAM,YAAY,MAAM,SAAS,CAAC,CAAC,IAC9C,MAAM,MACN,KAAK,IAAI,KAAK,IAAI,MAAM,KAAK,SAAS,CAAC,CAAC,GAAG,MAAM,GAAG;AACnD,mBAAA,QAAQ,gBAAgB,QAAQ,aAAa;AAC/C,iBAAA,QAAQ,gBAAgB,QAAQ,aAAa;AAAA,MAAA,WAC/C,aAAa,QAAW;AAC/B,mBAAW,QAAQ,MAAM,QAAQ,IAC3B,MAAM,MACN,KAAK,IAAI,MAAM,KAAK,KAAK,IAAI,MAAM,KAAK,QAAQ,CAAC;AACvD,iBAAS,QAAQ;AAAA,MAAA,OACd;AACH,mBAAW,QAAQ,MAAM;AACzB,iBAAS,QAAQ,MAAM;AAAA,MAAA;AAAA,IAC3B;AAGE,UAAA,aAAa,SAAS,MAAM;AAC1B,UAAA,CAAC,MAAM,SAAS,MAAM,MAAM,MAAM,OAAO,MAAM,SAAS,EAAG,QAAO,CAAC;AACvE,YAAM,SAAmB,CAAC;AACjB,eAAA,IAAI,MAAM,MAAM,MAAM,MAAM,IAAI,MAAM,KAAK,IAAI,IAAI,MAAM,MAAM;AACpE,eAAO,KAAK,CAAC;AAAA,MAAA;AAEV,aAAA;AAAA,IAAA,CACV;AAED,UAAM,UAAU;AAAA,MAAS,MACrB,QAAQ,QACF,GACK,OAAO,SAAS,QAAQ,SAAS,UACjC,MAAM,MAAM,MAAM,IACvB,MACA,GACK,OAAO,WAAW,QAAQ,MAAM,QAAS,MAAM,MAAM,MAAM,IAChE;AAAA,IACV;AAEA,UAAM,WAAW;AAAA,MAAS,MACtB,QAAQ,QACF,GAAI,OAAO,SAAS,QAAQ,MAAM,QAAS,MAAM,MAAM,MAAM,IAAI,MACjE;AAAA,IACV;AAEM,UAAA,WAAW,SAAS,OAAO;AAAA,MAC7B,OAAO,QAAQ;AAAA,MACf,MAAM,SAAS;AAAA,IAAA,EACjB;AAEF,aAAS,gBAAwB;;AAC7B,eAAO,eAAU,UAAV,mBAAiB,wBAAwB,UAAS;AAAA,IAAA;AAG7D,aAAS,cAAc,OAAyB;AACxC,UAAA,MAAM,YAAY,qBAAqB,MAAO;AAE9C,UAAA,CAAC,UAAU,SACX,CAAC,cAAc,SACd,QAAQ,SAAS,CAAC,YAAY;AAE/B;AAEJ,YAAM,mBAAmB,UAAU,MAAM,sBAAwB,EAAA;AACjE,YAAM,WACA,MAAM,UAAU,oBAAoB,kBAAmB;AAC7D,YAAM,cAAc,MAAM,MAAO,WAAW,MAAM,MAAM,MAAM,OAAQ;AACtE,YAAM,YAAY,KAAK,IAAI,cAAc,WAAW,KAAK;AACrD,UAAA,CAAC,QAAQ,OAAO;AACZ,YAAA,YAAY,MAAM,OAAO,EAAG;AAClB,sBAAA,MAAM,YAAY,OAAO;AAAA,MAAA,OACpC;AACH,cAAM,aAAa,KAAK,IAAI,cAAc,SAAS,KAAK;AACxD,YAAI,aAAa,YAAY;AACrB,cAAA,YAAY,MAAM,OAAO,EAAG;AAClB,wBAAA,MAAM,YAAY,OAAO;AAAA,QAAA,OACpC;AACC,cAAA,aAAa,MAAM,OAAO,EAAG;AAC7B,cAAA,QAAQ,SAAS,YAAY;AACjB,wBAAA,MAAM,YAAY,OAAO;AAAA,QAAA;AAAA,MAC7C;AAEE,YAAA,UAAU,OAAO,KAAK;AAAA,IAAA;AAGhC,aAAS,cAAoB;AACzB,eAAS,QAAQ;AACjB,YAAM,WAAW;AAAA,IAAA;AAGrB,aAAS,YAAkB;AACvB,2BAAqB,QAAQ;AAElB,iBAAA,MAAO,qBAAqB,QAAQ,KAAM;AACrD,eAAS,QAAQ;AACjB,YAAM,SAAS;AACf,UAAI,MAAM,KAAY,OAAA,sBAAsB,OAAO,KAAK;AAAA,IAAA;AAK5D,UAAM,cAAc;AAAA,MAChB,CAAC,aAAa,UAAU;AAAA,MACxB;AAAA,QACI;AAAA,QACA;AAAA,QACA,SAAS,MAAM,MAAM,IAAI;AAAA,QACzB,SAAS,MAAM,CAAC,CAAC,MAAM,IAAI;AAAA,MAC/B;AAAA,MACA;AAAA,QACI;AAAA,QACA;AAAA,QACA;AAAA,QACA,SAAS,MAAM,MAAM,QAAQ;AAAA,MAAA;AAAA,IAErC;AAEA,UAAM,eAAe,cAAc,CAAC,cAAc,iBAAiB,CAAC;AAEpE,UAAM,cAAc;AAAA,MAChB,CAAC,aAAa,gBAAgB;AAAA,MAC9B;AAAA,QACI;AAAA,QACA;AAAA,QACA,SAAS,MAAM,MAAM,OAAO;AAAA,QAC5B,SAAS,MAAM,CAAC,CAAC,MAAM,OAAO;AAAA,MAAA;AAAA,IAEtC;AAEA,UAAM,sBAAsB;AAAA,MACxB,CAAC,qBAAqB,yBAAyB;AAAA,MAC/C;AAAA,QACI;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MAAA;AAAA,IAER;AAEA,UAAM,eAAe;AAAA,MACjB,CAAC,cAAc,iBAAiB;AAAA,MAChC,CAAC,sBAAsB,6BAA6B,MAAM,QAAQ;AAAA,MAClE;AAAA,QACI;AAAA,QACA;AAAA,QACA;AAAA,QACA,SAAS,MAAM,MAAM,OAAO;AAAA,MAAA;AAAA,IAEpC;AAKa,aAAA,EAAE,OAAO,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACrR9B,MAAe,QAAA;AAAA,EACX,QAAQ,KAAU;AACd,sBAAkB,KAAKA,SAAM;AAC7B,sBAAkB,KAAKC,WAAU;AAAA,EAAA;AAEzC;"}