{"version":3,"file":"carousel.mjs","sources":["../../../../../../packages/components/carousel/src/carousel.vue"],"sourcesContent":["<template>\n  <div\n    ref=\"root\"\n    :class=\"carouselClasses\"\n    @mouseenter.stop=\"handleMouseEnter\"\n    @mouseleave.stop=\"handleMouseLeave\"\n  >\n    <div class=\"carousel-container\" :style=\"{ height: height, width: showMultiple ? containerWidth : ''}\">\n      <transition v-if=\"arrowDisplay\" name=\"carousel-arrow-left\">\n        <button\n          v-show=\"(arrow === 'always' || data.hover) && (props.loop || data.activeIndex > 0)\"\n          type=\"button\"\n          class=\"carousel-arrow left\"\n          :aria-label=\"t('hl.carousel.leftArrow')\"\n          @mouseenter=\"handleButtonEnter('left')\"\n          @mouseleave=\"handleButtonLeave\"\n          @click.stop=\"throttledArrowClick(data.activeIndex - 1, 'previous')\"\n        >\n          <hl-icon>\n            <system-arrow-left />\n          </hl-icon>\n        </button>\n      </transition>\n      <transition v-if=\"arrowDisplay\" name=\"carousel-arrow-right\">\n        <button\n          v-show=\"(arrow === 'always' || data.hover) && (props.loop || data.activeIndex < items.length - 1)\"\n          type=\"button\"\n          class=\"carousel-arrow right\"\n          :aria-label=\"t('hl.carousel.rightArrow')\"\n          @mouseenter=\"handleButtonEnter('right')\"\n          @mouseleave=\"handleButtonLeave\"\n          @click.stop=\"throttledArrowClick(data.activeIndex + 1, 'next')\"\n        >\n          <hl-icon>\n            <system-arrow-right />\n          </hl-icon>\n        </button>\n      </transition>\n      <slot></slot>\n    </div>\n    <div v-if=\"indicatorPosition !== 'none' && !showMultiple\" :class=\"indicatorsClasses\">\n      <template v-if=\"indicatorType !== 'custom'\">\n        <div\n          v-for=\"(item, index) in items\"\n          :key=\"index\"\n          :class=\"[\n            'carousel-indicator',\n            'carousel-indicator-' + direction,\n            {'is-active': index === data.activeIndex },\n          ]\"\n          @mouseenter=\"throttledIndicatorHover(index)\"\n          @click.stop=\"handleIndicatorClick(index)\"\n        >\n          <button\n            :class=\"indicatorsButtonClasses\"\n            :aria-label=\"t('hl.carousel.indicator', { index: index + 1 })\"\n          >\n            <span v-if=\"hasLabel\">{{ item.props.label }}</span>\n          </button>\n        </div>\n      </template>\n      <slot name=\"indicator\"></slot>\n    </div>\n  </div>\n</template>\n\n<script lang=\"ts\">\nimport {\n  defineComponent,\n  reactive,\n  computed,\n  ref,\n  provide,\n  onMounted,\n  onBeforeUnmount,\n  watch,\n  toRef,\n  shallowRef,\n  getCurrentInstance,\n} from 'vue'\nimport { throttle } from 'lodash-unified'\nimport { useResizeObserver } from '@vueuse/core'\nimport { useNamespace, useLocale, useOrderedChildren } from '@hongluan-ui/hooks'\nimport { debugWarn } from '@hongluan-ui/utils/error'\nimport HlIcon from '@hongluan-ui/components/icon'\nimport { SystemArrowLeft,SystemArrowRight } from '@hongluan-ui/components/system-icon'\nimport { carouselContextKey, carouselIndicatorContextKey } from '@hongluan-ui/tokens'\nimport { carouselProps } from './carousel'\n\nimport type { CarouselItemContext } from '@hongluan-ui/tokens'\n\nexport default defineComponent({\n  name: 'Carousel',\n  components: {\n    HlIcon,\n    SystemArrowLeft,\n    SystemArrowRight,\n  },\n  props: carouselProps,\n  emits: ['change'],\n  setup(props, { emit }) {\n    const { t } = useLocale()\n    const { namespace } = useNamespace('carousel')\n    const {\n      children: items,\n      addChild,\n      removeChild: removeItem,\n    } = useOrderedChildren<CarouselItemContext>(\n      getCurrentInstance()!,\n      'CarouselItem',\n    )\n\n    // data\n    const data = reactive<{\n      activeIndex: number\n      containerWidth: number\n      timer: null | ReturnType<typeof setInterval>\n      hover: boolean\n      itemsIndexArray: Array<number>\n      throttledArrowDirection: string\n      itemsWidthUnit: string\n    }>({\n      activeIndex: -1,\n      containerWidth: 0,\n      timer: null,\n      hover: false,\n      itemsIndexArray :[],\n      throttledArrowDirection: '',\n      itemsWidthUnit: Number.isNaN(+props.itemsWidth) ? String(props.itemsWidth).replace(/[^a-zA-Z]/g,'') : 'px',//非数字获取单位\n    })\n\n    // refs\n    const root = ref(null)\n\n    // computed\n    const arrowDisplay = computed(\n      () => props.arrow !== 'never' && props.direction !== 'vertical',\n    )\n    // 可视区域是否显示多张\n    const showMultiple = computed(() => {\n      let state = props.itemsNumber !== 1 && props.direction === 'horizontal' && props.type !== 'card' && items.value.length - 2 >= props.itemsNumber ? true : false\n      return state\n    })\n    // 计算itemsWidth\n    const containerWidth = computed(() => {\n      return props.itemsNumber * Number.parseFloat(String(props.itemsWidth)) + data.itemsWidthUnit\n    })\n\n    const hasLabel = computed(() => {\n      return items.value.some(item => item.props.label.toString().length > 0)\n    })\n\n    const carouselClasses = computed(() => {\n      const classes = [namespace.value, 'carousel-' + props.direction]\n      if (props.type === 'card') {\n        classes.push('carousel-card')\n      }\n      return classes\n    })\n\n    const indicatorsClasses = computed(() => {\n      const classes = [\n        'carousel-indicators',\n        'carousel-indicators-' + props.direction,\n        'carousel-indicators-' + props.indicatorType,\n      ]\n      if (hasLabel.value) {\n        classes.push('carousel-indicators-labels')\n      }\n      if (props.indicatorPosition === 'outside' || props.type === 'card') {\n        classes.push('carousel-indicators-outside')\n      }\n      return classes\n    })\n\n    const indicatorsButtonClasses = computed(() => {\n      const classes = props.indicatorType === 'line' ? 'carousel-button' : 'carousel-dot'\n      return classes\n    })\n\n    // methods\n    function getitemsIndexArray() {\n      // 多张显示时，拼索引数组，用索引计算移动距离\n      let array = []\n      for(let i = 0 ;i < Number(items.value.length - 1 ); i++) {\n        array.push(i)\n      }\n      array.push(-1)\n      return showMultiple.value ? array : []\n    }\n\n    const throttledArrowClick = throttle(\n      (index, direction) => {\n        data.throttledArrowDirection = direction\n        if (showMultiple.value){\n          data.itemsIndexArray = data.itemsIndexArray.map(itx => {\n            if (itx === items.value.length - 2 && direction === 'previous') itx = -2\n            if (itx === -1 && direction === 'next') itx = items.value.length - 1\n            direction === 'previous' ? itx += 1 : itx -= 1\n            return itx\n          })\n        }\n        setActiveItem(index)\n      },\n      300,\n      { trailing: true },\n    )\n    const throttledIndicatorHover = throttle(index => {\n      handleIndicatorHover(index)\n    }, 300)\n\n    function pauseTimer() {\n      if (data.timer) {\n        clearInterval(data.timer)\n        data.timer = null\n      }\n    }\n\n    function startTimer() {\n      if (props.interval <= 0 || !props.autoplay || data.timer) return\n      data.timer = setInterval(() => playSlides(), props.interval)\n    }\n\n    const playSlides = () => {\n      if (data.activeIndex < items.value.length - 1) {\n        data.activeIndex = data.activeIndex + 1\n      } else if (props.loop) {\n        data.activeIndex = 0\n      }\n      showMultiple.value && throttledArrowClick(data.activeIndex + 1, 'next')\n    }\n\n    function setActiveItem(index: number | string) {\n      if (typeof index === 'string') {\n        const filteredItems = items.value.filter(item => item.props.name === index)\n        if (filteredItems.length > 0) {\n          index = items.value.indexOf(filteredItems[0])\n        }\n      }\n      index = Number(index)\n      if (Number.isNaN(index) || index !== Math.floor(index)) {\n        debugWarn('Carousel', 'index must be an integer.')\n        return\n      }\n      let length = items.value.length\n      const oldIndex = data.activeIndex\n      if (index < 0) {\n        data.activeIndex = props.loop ? length - 1 : 0\n      } else if (index >= length) {\n        data.activeIndex = props.loop ? 0 : length - 1\n      } else {\n        data.activeIndex = index\n      }\n      if (oldIndex === data.activeIndex) {\n        resetItemPosition(oldIndex)\n      }\n      resetTimer()\n    }\n\n    function resetItemPosition(oldIndex?: number) {\n      const itemWidth = Number.parseFloat(String(props.itemsWidth))\n      items.value.forEach((item, index) => {\n        let itemsDistance = showMultiple.value ? itemWidth * data.itemsIndexArray[index] : 0\n        let isAnimating = data.throttledArrowDirection === 'next' ?\n          data.itemsIndexArray[index] === props.itemsNumber + 1 ? false : true\n          : itemWidth * data.itemsIndexArray[index] === -itemWidth ? false : true\n        item.translateItem(index, data.activeIndex, oldIndex, itemsDistance ,isAnimating)\n      })\n    }\n\n    function addItem(item: CarouselItemContext) {\n      addChild(item)\n      data.itemsIndexArray = getitemsIndexArray()\n    }\n\n    function itemInStage(item: CarouselItemContext, index: number) {\n      const length = items.value.length\n      if (\n        (index === length - 1 && item.states.inStage && items.value[0].states.active) ||\n        (item.states.inStage &&\n          items.value[index + 1] &&\n          items.value[index + 1].states.active)\n      ) {\n        return 'left'\n      } else if (\n        (index === 0 && item.states.inStage && items.value[length - 1].states.active) ||\n        (item.states.inStage &&\n          items.value[index - 1] &&\n          items.value[index - 1].states.active)\n      ) {\n        return 'right'\n      }\n      return false\n    }\n\n    function handleMouseEnter() {\n      data.hover = true\n      if (props.pauseOnHover) {\n        pauseTimer()\n      }\n    }\n\n    function handleMouseLeave() {\n      data.hover = false\n      startTimer()\n    }\n\n    function handleButtonEnter(arrow: 'left' | 'right') {\n      if (props.direction === 'vertical') return\n      items.value.forEach((item, index) => {\n        if (arrow === itemInStage(item, index)) {\n          item.states.hover = true\n        }\n      })\n    }\n\n    function handleButtonLeave() {\n      if (props.direction === 'vertical') return\n      items.value.forEach(item => {\n        item.states.hover = false\n      })\n    }\n\n    function handleIndicatorClick(index: number) {\n      data.activeIndex = index\n    }\n\n    function handleIndicatorHover(index: number) {\n      if (props.trigger === 'hover' && index !== data.activeIndex) {\n        data.activeIndex = index\n      }\n    }\n\n    function prev() {\n      setActiveItem(data.activeIndex - 1)\n    }\n\n    function next() {\n      setActiveItem(data.activeIndex + 1)\n    }\n\n    function resetTimer() {\n      pauseTimer()\n      startTimer()\n    }\n\n    // watch\n    watch(\n      () => data.activeIndex,\n      (current, prev) => {\n        resetItemPosition(prev)\n        if (prev > -1) {\n          emit('change', current, prev)\n        }\n      },\n    )\n    watch(\n      () => props.autoplay,\n      current => {\n        current ? startTimer() : pauseTimer()\n      },\n    )\n    watch(\n      () => props.loop,\n      () => {\n        setActiveItem(data.activeIndex)\n      },\n    )\n\n    watch(\n      () => props.interval,\n      () => {\n        resetTimer()\n      },\n    )\n\n    watch(\n      () => items.value,\n      () => {\n        if (items.value.length > 0) setActiveItem(props.initialIndex)\n      },\n      {\n        immediate: true,\n      },\n    )\n\n    const resizeObserver = shallowRef<ReturnType<typeof useResizeObserver>>()\n    // lifecycle\n    onMounted(() => {\n\n      resizeObserver.value = useResizeObserver(root.value, () => {\n        resetItemPosition()\n      })\n      startTimer()\n    })\n\n    onBeforeUnmount(() => {\n      pauseTimer()\n      if (root.value && resizeObserver.value) resizeObserver.value.stop()\n    })\n\n    // provide\n    provide(carouselContextKey, {\n      root,\n      direction: props.direction,\n      type: props.type,\n      items,\n      loop: props.loop,\n      addItem,\n      removeItem,\n      setActiveItem,\n      showMultiple: toRef(showMultiple,'value'),\n      itemsWidth: props.itemsWidth,\n      itemsWidthUnit: data.itemsWidthUnit,\n    })\n\n    provide(carouselIndicatorContextKey, {\n      activeIndex: toRef(data,'activeIndex'),\n      handleIndicatorClick,\n      throttledIndicatorHover,\n    })\n\n    return {\n      t,\n      data,\n      props,\n      items,\n\n      arrowDisplay,\n      carouselClasses,\n      indicatorsClasses,\n      indicatorsButtonClasses,\n      hasLabel,\n      containerWidth,\n      showMultiple,\n\n      handleMouseEnter,\n      handleMouseLeave,\n      handleIndicatorClick,\n      throttledArrowClick,\n      throttledIndicatorHover,\n      handleButtonEnter,\n      handleButtonLeave,\n\n      prev,\n      next,\n      setActiveItem,\n\n      root,\n    }\n  },\n\n})\n</script>\n"],"names":["_createElementBlock","_normalizeClass","_withModifiers","_createElementVNode","_normalizeStyle","_createBlock","_Transition","_createVNode","_renderSlot","_Fragment"],"mappings":";;;;;;;;;;;;;;;;;AA2FA,MAAK,YAAa,gBAAa;AAAA,EAC7B,MAAM;AAAA,EACN,YAAY;AAAA,IACV;AAAA,IACA;AAAA,IACA;AAAA;AACF,EACA,OAAO;AAAA,EACP,OAAO,CAAC,QAAQ;AAAA,EAChB,MAAM,OAAO,EAAE,QAAQ;AACrB,UAAM,EAAE,MAAM;AACd,UAAM,EAAE,cAAc,aAAa,UAAU;AAC7C,UAAM;AAAA,MACJ,UAAU;AAAA,MACV;AAAA,MACA,aAAa;AAAA,QACX,mBACF,sBACA,cACF;AAGA,UAAM,OAAO,SAQV;AAAA,MACD,aAAa;AAAA,MACb,gBAAgB;AAAA,MAChB,OAAO;AAAA,MACP,OAAO;AAAA,MACP,iBAAiB;AAAC,MAClB,yBAAyB;AAAA,MACzB,gBAAgB,OAAO,MAAM,CAAC,MAAM,UAAU,IAAI,OAAO,MAAM,UAAU,EAAE,QAAQ,cAAa,EAAE,IAAI;AAAA,KACvG;AAGD,UAAM,OAAO,IAAI,IAAI;AAGrB,UAAM,eAAe,SACnB,MAAM,MAAM,UAAU,WAAW,MAAM,cAAc,UACvD;AAEA,UAAM,eAAe,SAAS,MAAM;AAClC,UAAI,QAAQ,MAAM,gBAAgB,KAAK,MAAM,cAAc,gBAAgB,MAAM,SAAS,UAAU,MAAM,MAAM,SAAS,KAAK,MAAM,cAAc,OAAO;AACzJ,aAAO;AAAA,KACR;AAED,UAAM,iBAAiB,SAAS,MAAM;AACpC,aAAO,MAAM,cAAc,OAAO,WAAW,OAAO,MAAM,UAAU,CAAC,IAAI,KAAK;AAAA,KAC/E;AAED,UAAM,WAAW,SAAS,MAAM;AAC9B,aAAO,MAAM,MAAM,KAAK,UAAQ,KAAK,MAAM,MAAM,WAAW,SAAS,CAAC;AAAA,KACvE;AAED,UAAM,kBAAkB,SAAS,MAAM;AACrC,YAAM,UAAU,CAAC,UAAU,OAAO,cAAc,MAAM,SAAS;AAC/D,UAAI,MAAM,SAAS,QAAQ;AACzB,gBAAQ,KAAK,eAAe;AAAA;AAE9B,aAAO;AAAA,KACR;AAED,UAAM,oBAAoB,SAAS,MAAM;AACvC,YAAM,UAAU;AAAA,QACd;AAAA,QACA,yBAAyB,MAAM;AAAA,QAC/B,yBAAyB,MAAM;AAAA;AAEjC,UAAI,SAAS,OAAO;AAClB,gBAAQ,KAAK,4BAA4B;AAAA;AAE3C,UAAI,MAAM,sBAAsB,aAAa,MAAM,SAAS,QAAQ;AAClE,gBAAQ,KAAK,6BAA6B;AAAA;AAE5C,aAAO;AAAA,KACR;AAED,UAAM,0BAA0B,SAAS,MAAM;AAC7C,YAAM,UAAU,MAAM,kBAAkB,SAAS,oBAAoB;AACrE,aAAO;AAAA,KACR;AAGD,kCAA8B;AAE5B,UAAI,QAAQ;AACZ,eAAQ,IAAI,GAAG,IAAI,OAAO,MAAM,MAAM,SAAS,CAAE,GAAG,KAAK;AACvD,cAAM,KAAK,CAAC;AAAA;AAEd,YAAM,KAAK,EAAE;AACb,aAAO,aAAa,QAAQ,QAAQ;AAAC;AAGvC,UAAM,sBAAsB,SAC1B,CAAC,OAAO,cAAc;AACpB,WAAK,0BAA0B;AAC/B,UAAI,aAAa,OAAM;AACrB,aAAK,kBAAkB,KAAK,gBAAgB,IAAI,SAAO;AACrD,cAAI,QAAQ,MAAM,MAAM,SAAS,KAAK,cAAc;AAAY,kBAAM;AACtE,cAAI,QAAQ,MAAM,cAAc;AAAQ,kBAAM,MAAM,MAAM,SAAS;AACnE,wBAAc,aAAa,OAAO,IAAI,OAAO;AAC7C,iBAAO;AAAA,SACR;AAAA;AAEH,oBAAc,KAAK;AAAA,OAErB,KACA,EAAE,UAAU,MACd;AACA,UAAM,0BAA0B,SAAS,WAAS;AAChD,2BAAqB,KAAK;AAAA,OACzB,GAAG;AAEN,0BAAsB;AACpB,UAAI,KAAK,OAAO;AACd,sBAAc,KAAK,KAAK;AACxB,aAAK,QAAQ;AAAA;AACf;AAGF,0BAAsB;AACpB,UAAI,MAAM,YAAY,KAAK,CAAC,MAAM,YAAY,KAAK;AAAO;AAC1D,WAAK,QAAQ,YAAY,MAAM,cAAc,MAAM,QAAQ;AAAA;AAG7D,UAAM,aAAa,MAAM;AACvB,UAAI,KAAK,cAAc,MAAM,MAAM,SAAS,GAAG;AAC7C,aAAK,cAAc,KAAK,cAAc;AAAA,iBAC7B,MAAM,MAAM;AACrB,aAAK,cAAc;AAAA;AAErB,mBAAa,SAAS,oBAAoB,KAAK,cAAc,GAAG,MAAM;AAAA;AAGxE,2BAAuB,OAAwB;AAC7C,UAAI,OAAO,UAAU,UAAU;AAC7B,cAAM,gBAAgB,MAAM,MAAM,OAAO,UAAQ,KAAK,MAAM,SAAS,KAAK;AAC1E,YAAI,cAAc,SAAS,GAAG;AAC5B,kBAAQ,MAAM,MAAM,QAAQ,cAAc,EAAE;AAAA;AAC9C;AAEF,cAAQ,OAAO,KAAK;AACpB,UAAI,OAAO,MAAM,KAAK,KAAK,UAAU,KAAK,MAAM,KAAK,GAAG;AACtD,kBAAU,YAAY,2BAA2B;AACjD;AAAA;AAEF,UAAI,SAAS,MAAM,MAAM;AACzB,YAAM,WAAW,KAAK;AACtB,UAAI,QAAQ,GAAG;AACb,aAAK,cAAc,MAAM,OAAO,SAAS,IAAI;AAAA,iBACpC,SAAS,QAAQ;AAC1B,aAAK,cAAc,MAAM,OAAO,IAAI,SAAS;AAAA,aACxC;AACL,aAAK,cAAc;AAAA;AAErB,UAAI,aAAa,KAAK,aAAa;AACjC,0BAAkB,QAAQ;AAAA;AAE5B;AAAW;AAGb,+BAA2B,UAAmB;AAC5C,YAAM,YAAY,OAAO,WAAW,OAAO,MAAM,UAAU,CAAC;AAC5D,YAAM,MAAM,QAAQ,CAAC,MAAM,UAAU;AACnC,YAAI,gBAAgB,aAAa,QAAQ,YAAY,KAAK,gBAAgB,SAAS;AACnF,YAAI,cAAc,KAAK,4BAA4B,SACjD,KAAK,gBAAgB,WAAW,MAAM,cAAc,IAAI,QAAQ,OAC9D,YAAY,KAAK,gBAAgB,WAAW,CAAC,YAAY,QAAQ;AACrE,aAAK,cAAc,OAAO,KAAK,aAAa,UAAU,eAAe,WAAW;AAAA,OACjF;AAAA;AAGH,qBAAiB,MAA2B;AAC1C,eAAS,IAAI;AACb,WAAK,kBAAkB;AAAmB;AAG5C,yBAAqB,MAA2B,OAAe;AAC7D,YAAM,SAAS,MAAM,MAAM;AAC3B,UACG,UAAU,SAAS,KAAK,KAAK,OAAO,WAAW,MAAM,MAAM,GAAG,OAAO,UACrE,KAAK,OAAO,WACX,MAAM,MAAM,QAAQ,MACpB,MAAM,MAAM,QAAQ,GAAG,OAAO,QAChC;AACA,eAAO;AAAA,iBAEN,UAAU,KAAK,KAAK,OAAO,WAAW,MAAM,MAAM,SAAS,GAAG,OAAO,UACrE,KAAK,OAAO,WACX,MAAM,MAAM,QAAQ,MACpB,MAAM,MAAM,QAAQ,GAAG,OAAO,QAChC;AACA,eAAO;AAAA;AAET,aAAO;AAAA;AAGT,gCAA4B;AAC1B,WAAK,QAAQ;AACb,UAAI,MAAM,cAAc;AACtB;AAAW;AACb;AAGF,gCAA4B;AAC1B,WAAK,QAAQ;AACb;AAAW;AAGb,+BAA2B,OAAyB;AAClD,UAAI,MAAM,cAAc;AAAY;AACpC,YAAM,MAAM,QAAQ,CAAC,MAAM,UAAU;AACnC,YAAI,UAAU,YAAY,MAAM,KAAK,GAAG;AACtC,eAAK,OAAO,QAAQ;AAAA;AACtB,OACD;AAAA;AAGH,iCAA6B;AAC3B,UAAI,MAAM,cAAc;AAAY;AACpC,YAAM,MAAM,QAAQ,UAAQ;AAC1B,aAAK,OAAO,QAAQ;AAAA,OACrB;AAAA;AAGH,kCAA8B,OAAe;AAC3C,WAAK,cAAc;AAAA;AAGrB,kCAA8B,OAAe;AAC3C,UAAI,MAAM,YAAY,WAAW,UAAU,KAAK,aAAa;AAC3D,aAAK,cAAc;AAAA;AACrB;AAGF,oBAAgB;AACd,oBAAc,KAAK,cAAc,CAAC;AAAA;AAGpC,oBAAgB;AACd,oBAAc,KAAK,cAAc,CAAC;AAAA;AAGpC,0BAAsB;AACpB;AACA;AAAW;AAIb,UACE,MAAM,KAAK,aACX,CAAC,SAAS,UAAS;AACjB,wBAAkB,KAAI;AACtB,UAAI,QAAO,IAAI;AACb,aAAK,UAAU,SAAS,KAAI;AAAA;AAC9B,KAEJ;AACA,UACE,MAAM,MAAM,UACZ,aAAW;AACT,gBAAU,eAAe;AAAW,KAExC;AACA,UACE,MAAM,MAAM,MACZ,MAAM;AACJ,oBAAc,KAAK,WAAW;AAAA,KAElC;AAEA,UACE,MAAM,MAAM,UACZ,MAAM;AACJ;AAAW,KAEf;AAEA,UACE,MAAM,MAAM,OACZ,MAAM;AACJ,UAAI,MAAM,MAAM,SAAS;AAAG,sBAAc,MAAM,YAAY;AAAA,OAE9D;AAAA,MACE,WAAW;AAAA,KAEf;AAEA,UAAM,iBAAiB;AAEvB,cAAU,MAAM;AAEd,qBAAe,QAAQ,kBAAkB,KAAK,OAAO,MAAM;AACzD;AAAkB,OACnB;AACD;AAAW,KACZ;AAED,oBAAgB,MAAM;AACpB;AACA,UAAI,KAAK,SAAS,eAAe;AAAO,uBAAe,MAAM;AAAK,KACnE;AAGD,YAAQ,oBAAoB;AAAA,MAC1B;AAAA,MACA,WAAW,MAAM;AAAA,MACjB,MAAM,MAAM;AAAA,MACZ;AAAA,MACA,MAAM,MAAM;AAAA,MACZ;AAAA,MACA;AAAA,MACA;AAAA,MACA,cAAc,MAAM,cAAa,OAAO;AAAA,MACxC,YAAY,MAAM;AAAA,MAClB,gBAAgB,KAAK;AAAA,KACtB;AAED,YAAQ,6BAA6B;AAAA,MACnC,aAAa,MAAM,MAAK,aAAa;AAAA,MACrC;AAAA,MACA;AAAA,KACD;AAED,WAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MAEA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MAEA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MAEA;AAAA,MACA;AAAA,MACA;AAAA,MAEA;AAAA;AACF;AAGJ,CAAC;;;;;sBAncCA,mBA8DM;AAAA,IA7DJ,KAAI;AAAA,IACH,OAAKC,eAAE,oBAAe;AAAA,IACtB,cAAUC,cAAO,uBAAgB;AAAA,IACjC,cAAUA,cAAO,uBAAgB;AAAA;IAElCC,mBAgCM;AAAA,MAhCD,OAAM;AAAA,MAAsB,OAAKC,yBAAY,aAAM,OAAS,oBAAe,sBAAc;AAAA;MAC1E,kCAAlBC,YAcaC;AAAA;QAdmB,MAAK;AAAA;yBACnC,MAYS;AAAA,yBAZTH,mBAYS;AAAA,YAVP,MAAK;AAAA,YACL,OAAM;AAAA,YACL,cAAY,OAAC;AAAA,YACb,cAAU,YAAE,uBAAiB;AAAA,YAC7B,cAAY;AAAA,YACZ,SAAKD,0BAAO,yBAAoB,UAAK,cAAW;AAAA;YAEjDK,YAEU;AAAA,+BADR,MAAqB;AAAA,gBAArBA,YAAqB;AAAA;;;;oBATd,gBAAK,YAAiB,UAAK,sBAAiB,QAAQ,UAAK,cAAW;AAAA;;;;MAa/D,kCAAlBF,YAcaC;AAAA;QAdmB,MAAK;AAAA;yBACnC,MAYS;AAAA,yBAZTH,mBAYS;AAAA,YAVP,MAAK;AAAA,YACL,OAAM;AAAA,YACL,cAAY,OAAC;AAAA,YACb,cAAU,YAAE,uBAAiB;AAAA,YAC7B,cAAY;AAAA,YACZ,SAAKD,0BAAO,yBAAoB,UAAK,cAAW;AAAA;YAEjDK,YAEU;AAAA,+BADR,MAAsB;AAAA,gBAAtBA,YAAsB;AAAA;;;;oBATf,gBAAK,YAAiB,UAAK,sBAAiB,QAAQ,UAAK,cAAc,WAAM,SAAM;AAAA;;;;MAahGC,WAAa;AAAA;IAEJ,2BAAiB,WAAgB,kCAA5CR,mBAsBM;AAAA;MAtBqD,OAAKC,eAAE,sBAAiB;AAAA;MACjE,uBAAa,6BAC3BD,mBAiBMS,iCAhBoB,YAAK,CAArB,MAAM,UAAK;4BADrBT,mBAiBM;AAAA,UAfH,KAAK;AAAA,UACL,OAAKC;AAAA;oCAA0E;AAAA,2BAAqC,UAAU,UAAK;AAAW;UAK9I,cAAU,YAAE,6BAAwB,KAAK;AAAA,UACzC,SAAKC,0BAAO,0BAAqB,KAAK;AAAA;UAEvCC,mBAKS;AAAA,YAJN,OAAKF,eAAE,4BAAuB;AAAA,YAC9B,cAAY,OAAC,kCAAmC,QAAK;AAAA;YAE1C,8BAAZD,mBAAmD,oCAA1B,KAAK,MAAM,KAAK;;;;MAI/CQ,WAA8B;AAAA;;;;;;;"}