{"version":3,"file":"VSlideGroup.mjs","names":["VFadeTransition","VIcon","makeComponentProps","makeDisplayProps","useDisplay","makeGroupProps","useGroup","IconValue","useRtl","useResizeObserver","makeTagProps","computed","shallowRef","watch","bias","calculateCenteredOffset","calculateUpdatedOffset","clamp","focusableChildren","genericComponent","IN_BROWSER","propsFactory","useRender","VSlideGroupSymbol","Symbol","for","makeVSlideGroupProps","centerActive","Boolean","direction","type","String","default","symbol","nextIcon","prevIcon","showArrows","validator","v","includes","selectedClass","VSlideGroup","name","props","emits","value","setup","_ref","slots","isRtl","displayClasses","mobile","group","isOverflowing","scrollOffset","containerSize","contentSize","isHorizontal","resizeRef","containerRef","contentRect","containerRect","contentRef","firstSelectedIndex","selected","length","items","findIndex","item","id","lastSelectedIndex","frame","cancelAnimationFrame","requestAnimationFrame","sizeProperty","selectedElement","children","currentScrollOffset","disableTransition","startTouch","startOffset","onTouchstart","e","sign","touches","onTouchmove","onTouchend","maxScrollOffset","onScroll","isFocused","onFocusin","el","composedPath","onFocusout","onFocus","relatedTarget","contains","focus","onKeydown","key","location","focusable","querySelector","nextElementSibling","previousElementSibling","firstElementChild","lastElementChild","scrollTo","newAbsoluteOffset","contentStyles","scrollAmount","transform","transition","willChange","slotProps","next","prev","select","isSelected","hasAffixes","Math","abs","hasPrev","hasNext","_createVNode","tag","class","style","onClick"],"sources":["../../../src/components/VSlideGroup/VSlideGroup.tsx"],"sourcesContent":["// Styles\nimport './VSlideGroup.sass'\n\n// Components\nimport { VFadeTransition } from '@/components/transitions'\nimport { VIcon } from '@/components/VIcon'\n\n// Composables\nimport { makeComponentProps } from '@/composables/component'\nimport { makeDisplayProps, useDisplay } from '@/composables/display'\nimport { makeGroupProps, useGroup } from '@/composables/group'\nimport { IconValue } from '@/composables/icons'\nimport { useRtl } from '@/composables/locale'\nimport { useResizeObserver } from '@/composables/resizeObserver'\nimport { makeTagProps } from '@/composables/tag'\n\n// Utilities\nimport { computed, shallowRef, watch } from 'vue'\nimport { bias, calculateCenteredOffset, calculateUpdatedOffset } from './helpers'\nimport { clamp, focusableChildren, genericComponent, IN_BROWSER, propsFactory, useRender } from '@/util'\n\n// Types\nimport type { InjectionKey, PropType } from 'vue'\nimport type { GroupProvide } from '@/composables/group'\nimport type { GenericProps } from '@/util'\n\nexport const VSlideGroupSymbol: InjectionKey<GroupProvide> = Symbol.for('vuetify:v-slide-group')\n\ninterface SlideGroupSlot {\n  next: GroupProvide['next']\n  prev: GroupProvide['prev']\n  select: GroupProvide['select']\n  isSelected: GroupProvide['isSelected']\n}\n\ntype VSlideGroupSlots = {\n  default: SlideGroupSlot\n  prev: SlideGroupSlot\n  next: SlideGroupSlot\n}\n\nexport const makeVSlideGroupProps = propsFactory({\n  centerActive: Boolean,\n  direction: {\n    type: String as PropType<'horizontal' | 'vertical'>,\n    default: 'horizontal',\n  },\n  symbol: {\n    type: null,\n    default: VSlideGroupSymbol,\n  },\n  nextIcon: {\n    type: IconValue,\n    default: '$next',\n  },\n  prevIcon: {\n    type: IconValue,\n    default: '$prev',\n  },\n  showArrows: {\n    type: [Boolean, String],\n    validator: (v: any) => (\n      typeof v === 'boolean' || [\n        'always',\n        'desktop',\n        'mobile',\n      ].includes(v)\n    ),\n  },\n\n  ...makeComponentProps(),\n  ...makeDisplayProps(),\n  ...makeTagProps(),\n  ...makeGroupProps({\n    selectedClass: 'v-slide-group-item--active',\n  }),\n}, 'VSlideGroup')\n\nexport const VSlideGroup = genericComponent<new <T>(\n  props: {\n    modelValue?: T\n    'onUpdate:modelValue'?: (value: T) => void\n  },\n  slots: VSlideGroupSlots,\n) => GenericProps<typeof props, typeof slots>>()({\n  name: 'VSlideGroup',\n\n  props: makeVSlideGroupProps(),\n\n  emits: {\n    'update:modelValue': (value: any) => true,\n  },\n\n  setup (props, { slots }) {\n    const { isRtl } = useRtl()\n    const { displayClasses, mobile } = useDisplay(props)\n    const group = useGroup(props, props.symbol)\n    const isOverflowing = shallowRef(false)\n    const scrollOffset = shallowRef(0)\n    const containerSize = shallowRef(0)\n    const contentSize = shallowRef(0)\n    const isHorizontal = computed(() => props.direction === 'horizontal')\n\n    const { resizeRef: containerRef, contentRect: containerRect } = useResizeObserver()\n    const { resizeRef: contentRef, contentRect } = useResizeObserver()\n\n    const firstSelectedIndex = computed(() => {\n      if (!group.selected.value.length) return -1\n\n      return group.items.value.findIndex(item => item.id === group.selected.value[0])\n    })\n\n    const lastSelectedIndex = computed(() => {\n      if (!group.selected.value.length) return -1\n\n      return group.items.value.findIndex(item => item.id === group.selected.value[group.selected.value.length - 1])\n    })\n\n    if (IN_BROWSER) {\n      let frame = -1\n      watch(() => [group.selected.value, containerRect.value, contentRect.value, isHorizontal.value], () => {\n        cancelAnimationFrame(frame)\n        frame = requestAnimationFrame(() => {\n          if (containerRect.value && contentRect.value) {\n            const sizeProperty = isHorizontal.value ? 'width' : 'height'\n\n            containerSize.value = containerRect.value[sizeProperty]\n            contentSize.value = contentRect.value[sizeProperty]\n\n            isOverflowing.value = containerSize.value + 1 < contentSize.value\n          }\n\n          if (firstSelectedIndex.value >= 0 && contentRef.value) {\n            // TODO: Is this too naive? Should we store element references in group composable?\n            const selectedElement = contentRef.value.children[lastSelectedIndex.value] as HTMLElement\n\n            if (firstSelectedIndex.value === 0 || !isOverflowing.value) {\n              scrollOffset.value = 0\n            } else if (props.centerActive) {\n              scrollOffset.value = calculateCenteredOffset({\n                selectedElement,\n                containerSize: containerSize.value,\n                contentSize: contentSize.value,\n                isRtl: isRtl.value,\n                isHorizontal: isHorizontal.value,\n              })\n            } else if (isOverflowing.value) {\n              scrollOffset.value = calculateUpdatedOffset({\n                selectedElement,\n                containerSize: containerSize.value,\n                contentSize: contentSize.value,\n                isRtl: isRtl.value,\n                currentScrollOffset: scrollOffset.value,\n                isHorizontal: isHorizontal.value,\n              })\n            }\n          }\n        })\n      })\n    }\n\n    const disableTransition = shallowRef(false)\n\n    let startTouch = 0\n    let startOffset = 0\n\n    function onTouchstart (e: TouchEvent) {\n      const sizeProperty = isHorizontal.value ? 'clientX' : 'clientY'\n      const sign = isRtl.value && isHorizontal.value ? -1 : 1\n      startOffset = sign * scrollOffset.value\n      startTouch = e.touches[0][sizeProperty]\n      disableTransition.value = true\n    }\n\n    function onTouchmove (e: TouchEvent) {\n      if (!isOverflowing.value) return\n\n      const sizeProperty = isHorizontal.value ? 'clientX' : 'clientY'\n      const sign = isRtl.value && isHorizontal.value ? -1 : 1\n      scrollOffset.value = sign * (startOffset + startTouch - e.touches[0][sizeProperty])\n    }\n\n    function onTouchend (e: TouchEvent) {\n      const maxScrollOffset = contentSize.value - containerSize.value\n\n      if (scrollOffset.value < 0 || !isOverflowing.value) {\n        scrollOffset.value = 0\n      } else if (scrollOffset.value >= maxScrollOffset) {\n        scrollOffset.value = maxScrollOffset\n      }\n\n      disableTransition.value = false\n    }\n\n    function onScroll () {\n      if (!containerRef.value) return\n\n      containerRef.value[isHorizontal.value ? 'scrollLeft' : 'scrollTop'] = 0\n    }\n\n    const isFocused = shallowRef(false)\n    function onFocusin (e: FocusEvent) {\n      isFocused.value = true\n\n      if (!isOverflowing.value || !contentRef.value) return\n\n      // Focused element is likely to be the root of an item, so a\n      // breadth-first search will probably find it in the first iteration\n      for (const el of e.composedPath()) {\n        for (const item of contentRef.value.children) {\n          if (item === el) {\n            scrollOffset.value = calculateUpdatedOffset({\n              selectedElement: item as HTMLElement,\n              containerSize: containerSize.value,\n              contentSize: contentSize.value,\n              isRtl: isRtl.value,\n              currentScrollOffset: scrollOffset.value,\n              isHorizontal: isHorizontal.value,\n            })\n            return\n          }\n        }\n      }\n    }\n\n    function onFocusout (e: FocusEvent) {\n      isFocused.value = false\n    }\n\n    function onFocus (e: FocusEvent) {\n      if (\n        !isFocused.value &&\n        !(e.relatedTarget && contentRef.value?.contains(e.relatedTarget as Node))\n      ) focus()\n    }\n\n    function onKeydown (e: KeyboardEvent) {\n      if (!contentRef.value) return\n\n      if (isHorizontal.value) {\n        if (e.key === 'ArrowRight') {\n          focus(isRtl.value ? 'prev' : 'next')\n        } else if (e.key === 'ArrowLeft') {\n          focus(isRtl.value ? 'next' : 'prev')\n        }\n      } else {\n        if (e.key === 'ArrowDown') {\n          focus('next')\n        } else if (e.key === 'ArrowUp') {\n          focus('prev')\n        }\n      }\n\n      if (e.key === 'Home') {\n        focus('first')\n      } else if (e.key === 'End') {\n        focus('last')\n      }\n    }\n\n    function focus (location?: 'next' | 'prev' | 'first' | 'last') {\n      if (!contentRef.value) return\n\n      if (!location) {\n        const focusable = focusableChildren(contentRef.value)\n        focusable[0]?.focus()\n      } else if (location === 'next') {\n        const el = contentRef.value.querySelector(':focus')?.nextElementSibling as HTMLElement | undefined\n        if (el) el.focus()\n        else focus('first')\n      } else if (location === 'prev') {\n        const el = contentRef.value.querySelector(':focus')?.previousElementSibling as HTMLElement | undefined\n        if (el) el.focus()\n        else focus('last')\n      } else if (location === 'first') {\n        (contentRef.value.firstElementChild as HTMLElement)?.focus()\n      } else if (location === 'last') {\n        (contentRef.value.lastElementChild as HTMLElement)?.focus()\n      }\n    }\n\n    function scrollTo (location: 'prev' | 'next') {\n      const newAbsoluteOffset = scrollOffset.value + (location === 'prev' ? -1 : 1) * containerSize.value\n\n      scrollOffset.value = clamp(newAbsoluteOffset, 0, contentSize.value - containerSize.value)\n    }\n\n    const contentStyles = computed(() => {\n      // This adds friction when scrolling the 'wrong' way when at max offset\n      let scrollAmount = scrollOffset.value > contentSize.value - containerSize.value\n        ? -(contentSize.value - containerSize.value) + bias(contentSize.value - containerSize.value - scrollOffset.value)\n        : -scrollOffset.value\n\n      // This adds friction when scrolling the 'wrong' way when at min offset\n      if (scrollOffset.value <= 0) {\n        scrollAmount = bias(-scrollOffset.value)\n      }\n\n      const sign = isRtl.value && isHorizontal.value ? -1 : 1\n      return {\n        transform: `translate${isHorizontal.value ? 'X' : 'Y'}(${sign * scrollAmount}px)`,\n        transition: disableTransition.value ? 'none' : '',\n        willChange: disableTransition.value ? 'transform' : '',\n      }\n    })\n\n    const slotProps = computed(() => ({\n      next: group.next,\n      prev: group.prev,\n      select: group.select,\n      isSelected: group.isSelected,\n    }))\n\n    const hasAffixes = computed(() => {\n      switch (props.showArrows) {\n        // Always show arrows on desktop & mobile\n        case 'always': return true\n\n        // Always show arrows on desktop\n        case 'desktop': return !mobile.value\n\n        // Show arrows on mobile when overflowing.\n        // This matches the default 2.2 behavior\n        case true: return isOverflowing.value || Math.abs(scrollOffset.value) > 0\n\n        // Always show on mobile\n        case 'mobile': return (\n          mobile.value ||\n          (isOverflowing.value || Math.abs(scrollOffset.value) > 0)\n        )\n\n        // https://material.io/components/tabs#scrollable-tabs\n        // Always show arrows when\n        // overflowed on desktop\n        default: return (\n          !mobile.value &&\n          (isOverflowing.value || Math.abs(scrollOffset.value) > 0)\n        )\n      }\n    })\n\n    const hasPrev = computed(() => {\n      return Math.abs(scrollOffset.value) > 0\n    })\n\n    const hasNext = computed(() => {\n      // Check one scroll ahead to know the width of right-most item\n      return contentSize.value > Math.abs(scrollOffset.value) + containerSize.value\n    })\n\n    useRender(() => (\n      <props.tag\n        class={[\n          'v-slide-group',\n          {\n            'v-slide-group--vertical': !isHorizontal.value,\n            'v-slide-group--has-affixes': hasAffixes.value,\n            'v-slide-group--is-overflowing': isOverflowing.value,\n          },\n          displayClasses.value,\n          props.class,\n        ]}\n        style={ props.style }\n        tabindex={ (isFocused.value || group.selected.value.length) ? -1 : 0 }\n        onFocus={ onFocus }\n      >\n        { hasAffixes.value && (\n          <div\n            key=\"prev\"\n            class={[\n              'v-slide-group__prev',\n              { 'v-slide-group__prev--disabled': !hasPrev.value },\n            ]}\n            onClick={ () => hasPrev.value && scrollTo('prev') }\n          >\n            { slots.prev?.(slotProps.value) ?? (\n              <VFadeTransition>\n                <VIcon icon={ isRtl.value ? props.nextIcon : props.prevIcon }></VIcon>\n              </VFadeTransition>\n            )}\n          </div>\n        )}\n\n        <div\n          key=\"container\"\n          ref={ containerRef }\n          class=\"v-slide-group__container\"\n          onScroll={ onScroll }\n        >\n          <div\n            ref={ contentRef }\n            class=\"v-slide-group__content\"\n            style={ contentStyles.value }\n            onTouchstartPassive={ onTouchstart }\n            onTouchmovePassive={ onTouchmove }\n            onTouchendPassive={ onTouchend }\n            onFocusin={ onFocusin }\n            onFocusout={ onFocusout }\n            onKeydown={ onKeydown }\n          >\n            { slots.default?.(slotProps.value) }\n          </div>\n        </div>\n\n        { hasAffixes.value && (\n          <div\n            key=\"next\"\n            class={[\n              'v-slide-group__next',\n              { 'v-slide-group__next--disabled': !hasNext.value },\n            ]}\n            onClick={ () => hasNext.value && scrollTo('next') }\n          >\n            { slots.next?.(slotProps.value) ?? (\n              <VFadeTransition>\n                <VIcon icon={ isRtl.value ? props.prevIcon : props.nextIcon }></VIcon>\n              </VFadeTransition>\n            )}\n          </div>\n        )}\n      </props.tag>\n    ))\n\n    return {\n      selected: group.selected,\n      scrollTo,\n      scrollOffset,\n      focus,\n    }\n  },\n})\n\nexport type VSlideGroup = InstanceType<typeof VSlideGroup>\n"],"mappings":";AAAA;AACA;;AAEA;AAAA,SACSA,eAAe;AAAA,SACfC,KAAK,8BAEd;AAAA,SACSC,kBAAkB;AAAA,SAClBC,gBAAgB,EAAEC,UAAU;AAAA,SAC5BC,cAAc,EAAEC,QAAQ;AAAA,SACxBC,SAAS;AAAA,SACTC,MAAM;AAAA,SACNC,iBAAiB;AAAA,SACjBC,YAAY,qCAErB;AACA,SAASC,QAAQ,EAAEC,UAAU,EAAEC,KAAK,QAAQ,KAAK;AAAA,SACxCC,IAAI,EAAEC,uBAAuB,EAAEC,sBAAsB;AAAA,SACrDC,KAAK,EAAEC,iBAAiB,EAAEC,gBAAgB,EAAEC,UAAU,EAAEC,YAAY,EAAEC,SAAS,gCAExF;AAKA,OAAO,MAAMC,iBAA6C,GAAGC,MAAM,CAACC,GAAG,CAAC,uBAAuB,CAAC;AAehG,OAAO,MAAMC,oBAAoB,GAAGL,YAAY,CAAC;EAC/CM,YAAY,EAAEC,OAAO;EACrBC,SAAS,EAAE;IACTC,IAAI,EAAEC,MAA6C;IACnDC,OAAO,EAAE;EACX,CAAC;EACDC,MAAM,EAAE;IACNH,IAAI,EAAE,IAAI;IACVE,OAAO,EAAET;EACX,CAAC;EACDW,QAAQ,EAAE;IACRJ,IAAI,EAAEvB,SAAS;IACfyB,OAAO,EAAE;EACX,CAAC;EACDG,QAAQ,EAAE;IACRL,IAAI,EAAEvB,SAAS;IACfyB,OAAO,EAAE;EACX,CAAC;EACDI,UAAU,EAAE;IACVN,IAAI,EAAE,CAACF,OAAO,EAAEG,MAAM,CAAC;IACvBM,SAAS,EAAGC,CAAM,IAChB,OAAOA,CAAC,KAAK,SAAS,IAAI,CACxB,QAAQ,EACR,SAAS,EACT,QAAQ,CACT,CAACC,QAAQ,CAACD,CAAC;EAEhB,CAAC;EAED,GAAGpC,kBAAkB,CAAC,CAAC;EACvB,GAAGC,gBAAgB,CAAC,CAAC;EACrB,GAAGO,YAAY,CAAC,CAAC;EACjB,GAAGL,cAAc,CAAC;IAChBmC,aAAa,EAAE;EACjB,CAAC;AACH,CAAC,EAAE,aAAa,CAAC;AAEjB,OAAO,MAAMC,WAAW,GAAGtB,gBAAgB,CAMI,CAAC,CAAC;EAC/CuB,IAAI,EAAE,aAAa;EAEnBC,KAAK,EAAEjB,oBAAoB,CAAC,CAAC;EAE7BkB,KAAK,EAAE;IACL,mBAAmB,EAAGC,KAAU,IAAK;EACvC,CAAC;EAEDC,KAAKA,CAAEH,KAAK,EAAAI,IAAA,EAAa;IAAA,IAAX;MAAEC;IAAM,CAAC,GAAAD,IAAA;IACrB,MAAM;MAAEE;IAAM,CAAC,GAAGzC,MAAM,CAAC,CAAC;IAC1B,MAAM;MAAE0C,cAAc;MAAEC;IAAO,CAAC,GAAG/C,UAAU,CAACuC,KAAK,CAAC;IACpD,MAAMS,KAAK,GAAG9C,QAAQ,CAACqC,KAAK,EAAEA,KAAK,CAACV,MAAM,CAAC;IAC3C,MAAMoB,aAAa,GAAGzC,UAAU,CAAC,KAAK,CAAC;IACvC,MAAM0C,YAAY,GAAG1C,UAAU,CAAC,CAAC,CAAC;IAClC,MAAM2C,aAAa,GAAG3C,UAAU,CAAC,CAAC,CAAC;IACnC,MAAM4C,WAAW,GAAG5C,UAAU,CAAC,CAAC,CAAC;IACjC,MAAM6C,YAAY,GAAG9C,QAAQ,CAAC,MAAMgC,KAAK,CAACd,SAAS,KAAK,YAAY,CAAC;IAErE,MAAM;MAAE6B,SAAS,EAAEC,YAAY;MAAEC,WAAW,EAAEC;IAAc,CAAC,GAAGpD,iBAAiB,CAAC,CAAC;IACnF,MAAM;MAAEiD,SAAS,EAAEI,UAAU;MAAEF;IAAY,CAAC,GAAGnD,iBAAiB,CAAC,CAAC;IAElE,MAAMsD,kBAAkB,GAAGpD,QAAQ,CAAC,MAAM;MACxC,IAAI,CAACyC,KAAK,CAACY,QAAQ,CAACnB,KAAK,CAACoB,MAAM,EAAE,OAAO,CAAC,CAAC;MAE3C,OAAOb,KAAK,CAACc,KAAK,CAACrB,KAAK,CAACsB,SAAS,CAACC,IAAI,IAAIA,IAAI,CAACC,EAAE,KAAKjB,KAAK,CAACY,QAAQ,CAACnB,KAAK,CAAC,CAAC,CAAC,CAAC;IACjF,CAAC,CAAC;IAEF,MAAMyB,iBAAiB,GAAG3D,QAAQ,CAAC,MAAM;MACvC,IAAI,CAACyC,KAAK,CAACY,QAAQ,CAACnB,KAAK,CAACoB,MAAM,EAAE,OAAO,CAAC,CAAC;MAE3C,OAAOb,KAAK,CAACc,KAAK,CAACrB,KAAK,CAACsB,SAAS,CAACC,IAAI,IAAIA,IAAI,CAACC,EAAE,KAAKjB,KAAK,CAACY,QAAQ,CAACnB,KAAK,CAACO,KAAK,CAACY,QAAQ,CAACnB,KAAK,CAACoB,MAAM,GAAG,CAAC,CAAC,CAAC;IAC/G,CAAC,CAAC;IAEF,IAAI7C,UAAU,EAAE;MACd,IAAImD,KAAK,GAAG,CAAC,CAAC;MACd1D,KAAK,CAAC,MAAM,CAACuC,KAAK,CAACY,QAAQ,CAACnB,KAAK,EAAEgB,aAAa,CAAChB,KAAK,EAAEe,WAAW,CAACf,KAAK,EAAEY,YAAY,CAACZ,KAAK,CAAC,EAAE,MAAM;QACpG2B,oBAAoB,CAACD,KAAK,CAAC;QAC3BA,KAAK,GAAGE,qBAAqB,CAAC,MAAM;UAClC,IAAIZ,aAAa,CAAChB,KAAK,IAAIe,WAAW,CAACf,KAAK,EAAE;YAC5C,MAAM6B,YAAY,GAAGjB,YAAY,CAACZ,KAAK,GAAG,OAAO,GAAG,QAAQ;YAE5DU,aAAa,CAACV,KAAK,GAAGgB,aAAa,CAAChB,KAAK,CAAC6B,YAAY,CAAC;YACvDlB,WAAW,CAACX,KAAK,GAAGe,WAAW,CAACf,KAAK,CAAC6B,YAAY,CAAC;YAEnDrB,aAAa,CAACR,KAAK,GAAGU,aAAa,CAACV,KAAK,GAAG,CAAC,GAAGW,WAAW,CAACX,KAAK;UACnE;UAEA,IAAIkB,kBAAkB,CAAClB,KAAK,IAAI,CAAC,IAAIiB,UAAU,CAACjB,KAAK,EAAE;YACrD;YACA,MAAM8B,eAAe,GAAGb,UAAU,CAACjB,KAAK,CAAC+B,QAAQ,CAACN,iBAAiB,CAACzB,KAAK,CAAgB;YAEzF,IAAIkB,kBAAkB,CAAClB,KAAK,KAAK,CAAC,IAAI,CAACQ,aAAa,CAACR,KAAK,EAAE;cAC1DS,YAAY,CAACT,KAAK,GAAG,CAAC;YACxB,CAAC,MAAM,IAAIF,KAAK,CAAChB,YAAY,EAAE;cAC7B2B,YAAY,CAACT,KAAK,GAAG9B,uBAAuB,CAAC;gBAC3C4D,eAAe;gBACfpB,aAAa,EAAEA,aAAa,CAACV,KAAK;gBAClCW,WAAW,EAAEA,WAAW,CAACX,KAAK;gBAC9BI,KAAK,EAAEA,KAAK,CAACJ,KAAK;gBAClBY,YAAY,EAAEA,YAAY,CAACZ;cAC7B,CAAC,CAAC;YACJ,CAAC,MAAM,IAAIQ,aAAa,CAACR,KAAK,EAAE;cAC9BS,YAAY,CAACT,KAAK,GAAG7B,sBAAsB,CAAC;gBAC1C2D,eAAe;gBACfpB,aAAa,EAAEA,aAAa,CAACV,KAAK;gBAClCW,WAAW,EAAEA,WAAW,CAACX,KAAK;gBAC9BI,KAAK,EAAEA,KAAK,CAACJ,KAAK;gBAClBgC,mBAAmB,EAAEvB,YAAY,CAACT,KAAK;gBACvCY,YAAY,EAAEA,YAAY,CAACZ;cAC7B,CAAC,CAAC;YACJ;UACF;QACF,CAAC,CAAC;MACJ,CAAC,CAAC;IACJ;IAEA,MAAMiC,iBAAiB,GAAGlE,UAAU,CAAC,KAAK,CAAC;IAE3C,IAAImE,UAAU,GAAG,CAAC;IAClB,IAAIC,WAAW,GAAG,CAAC;IAEnB,SAASC,YAAYA,CAAEC,CAAa,EAAE;MACpC,MAAMR,YAAY,GAAGjB,YAAY,CAACZ,KAAK,GAAG,SAAS,GAAG,SAAS;MAC/D,MAAMsC,IAAI,GAAGlC,KAAK,CAACJ,KAAK,IAAIY,YAAY,CAACZ,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC;MACvDmC,WAAW,GAAGG,IAAI,GAAG7B,YAAY,CAACT,KAAK;MACvCkC,UAAU,GAAGG,CAAC,CAACE,OAAO,CAAC,CAAC,CAAC,CAACV,YAAY,CAAC;MACvCI,iBAAiB,CAACjC,KAAK,GAAG,IAAI;IAChC;IAEA,SAASwC,WAAWA,CAAEH,CAAa,EAAE;MACnC,IAAI,CAAC7B,aAAa,CAACR,KAAK,EAAE;MAE1B,MAAM6B,YAAY,GAAGjB,YAAY,CAACZ,KAAK,GAAG,SAAS,GAAG,SAAS;MAC/D,MAAMsC,IAAI,GAAGlC,KAAK,CAACJ,KAAK,IAAIY,YAAY,CAACZ,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC;MACvDS,YAAY,CAACT,KAAK,GAAGsC,IAAI,IAAIH,WAAW,GAAGD,UAAU,GAAGG,CAAC,CAACE,OAAO,CAAC,CAAC,CAAC,CAACV,YAAY,CAAC,CAAC;IACrF;IAEA,SAASY,UAAUA,CAAEJ,CAAa,EAAE;MAClC,MAAMK,eAAe,GAAG/B,WAAW,CAACX,KAAK,GAAGU,aAAa,CAACV,KAAK;MAE/D,IAAIS,YAAY,CAACT,KAAK,GAAG,CAAC,IAAI,CAACQ,aAAa,CAACR,KAAK,EAAE;QAClDS,YAAY,CAACT,KAAK,GAAG,CAAC;MACxB,CAAC,MAAM,IAAIS,YAAY,CAACT,KAAK,IAAI0C,eAAe,EAAE;QAChDjC,YAAY,CAACT,KAAK,GAAG0C,eAAe;MACtC;MAEAT,iBAAiB,CAACjC,KAAK,GAAG,KAAK;IACjC;IAEA,SAAS2C,QAAQA,CAAA,EAAI;MACnB,IAAI,CAAC7B,YAAY,CAACd,KAAK,EAAE;MAEzBc,YAAY,CAACd,KAAK,CAACY,YAAY,CAACZ,KAAK,GAAG,YAAY,GAAG,WAAW,CAAC,GAAG,CAAC;IACzE;IAEA,MAAM4C,SAAS,GAAG7E,UAAU,CAAC,KAAK,CAAC;IACnC,SAAS8E,SAASA,CAAER,CAAa,EAAE;MACjCO,SAAS,CAAC5C,KAAK,GAAG,IAAI;MAEtB,IAAI,CAACQ,aAAa,CAACR,KAAK,IAAI,CAACiB,UAAU,CAACjB,KAAK,EAAE;;MAE/C;MACA;MACA,KAAK,MAAM8C,EAAE,IAAIT,CAAC,CAACU,YAAY,CAAC,CAAC,EAAE;QACjC,KAAK,MAAMxB,IAAI,IAAIN,UAAU,CAACjB,KAAK,CAAC+B,QAAQ,EAAE;UAC5C,IAAIR,IAAI,KAAKuB,EAAE,EAAE;YACfrC,YAAY,CAACT,KAAK,GAAG7B,sBAAsB,CAAC;cAC1C2D,eAAe,EAAEP,IAAmB;cACpCb,aAAa,EAAEA,aAAa,CAACV,KAAK;cAClCW,WAAW,EAAEA,WAAW,CAACX,KAAK;cAC9BI,KAAK,EAAEA,KAAK,CAACJ,KAAK;cAClBgC,mBAAmB,EAAEvB,YAAY,CAACT,KAAK;cACvCY,YAAY,EAAEA,YAAY,CAACZ;YAC7B,CAAC,CAAC;YACF;UACF;QACF;MACF;IACF;IAEA,SAASgD,UAAUA,CAAEX,CAAa,EAAE;MAClCO,SAAS,CAAC5C,KAAK,GAAG,KAAK;IACzB;IAEA,SAASiD,OAAOA,CAAEZ,CAAa,EAAE;MAC/B,IACE,CAACO,SAAS,CAAC5C,KAAK,IAChB,EAAEqC,CAAC,CAACa,aAAa,IAAIjC,UAAU,CAACjB,KAAK,EAAEmD,QAAQ,CAACd,CAAC,CAACa,aAAqB,CAAC,CAAC,EACzEE,KAAK,CAAC,CAAC;IACX;IAEA,SAASC,SAASA,CAAEhB,CAAgB,EAAE;MACpC,IAAI,CAACpB,UAAU,CAACjB,KAAK,EAAE;MAEvB,IAAIY,YAAY,CAACZ,KAAK,EAAE;QACtB,IAAIqC,CAAC,CAACiB,GAAG,KAAK,YAAY,EAAE;UAC1BF,KAAK,CAAChD,KAAK,CAACJ,KAAK,GAAG,MAAM,GAAG,MAAM,CAAC;QACtC,CAAC,MAAM,IAAIqC,CAAC,CAACiB,GAAG,KAAK,WAAW,EAAE;UAChCF,KAAK,CAAChD,KAAK,CAACJ,KAAK,GAAG,MAAM,GAAG,MAAM,CAAC;QACtC;MACF,CAAC,MAAM;QACL,IAAIqC,CAAC,CAACiB,GAAG,KAAK,WAAW,EAAE;UACzBF,KAAK,CAAC,MAAM,CAAC;QACf,CAAC,MAAM,IAAIf,CAAC,CAACiB,GAAG,KAAK,SAAS,EAAE;UAC9BF,KAAK,CAAC,MAAM,CAAC;QACf;MACF;MAEA,IAAIf,CAAC,CAACiB,GAAG,KAAK,MAAM,EAAE;QACpBF,KAAK,CAAC,OAAO,CAAC;MAChB,CAAC,MAAM,IAAIf,CAAC,CAACiB,GAAG,KAAK,KAAK,EAAE;QAC1BF,KAAK,CAAC,MAAM,CAAC;MACf;IACF;IAEA,SAASA,KAAKA,CAAEG,QAA6C,EAAE;MAC7D,IAAI,CAACtC,UAAU,CAACjB,KAAK,EAAE;MAEvB,IAAI,CAACuD,QAAQ,EAAE;QACb,MAAMC,SAAS,GAAGnF,iBAAiB,CAAC4C,UAAU,CAACjB,KAAK,CAAC;QACrDwD,SAAS,CAAC,CAAC,CAAC,EAAEJ,KAAK,CAAC,CAAC;MACvB,CAAC,MAAM,IAAIG,QAAQ,KAAK,MAAM,EAAE;QAC9B,MAAMT,EAAE,GAAG7B,UAAU,CAACjB,KAAK,CAACyD,aAAa,CAAC,QAAQ,CAAC,EAAEC,kBAA6C;QAClG,IAAIZ,EAAE,EAAEA,EAAE,CAACM,KAAK,CAAC,CAAC,MACbA,KAAK,CAAC,OAAO,CAAC;MACrB,CAAC,MAAM,IAAIG,QAAQ,KAAK,MAAM,EAAE;QAC9B,MAAMT,EAAE,GAAG7B,UAAU,CAACjB,KAAK,CAACyD,aAAa,CAAC,QAAQ,CAAC,EAAEE,sBAAiD;QACtG,IAAIb,EAAE,EAAEA,EAAE,CAACM,KAAK,CAAC,CAAC,MACbA,KAAK,CAAC,MAAM,CAAC;MACpB,CAAC,MAAM,IAAIG,QAAQ,KAAK,OAAO,EAAE;QAC9BtC,UAAU,CAACjB,KAAK,CAAC4D,iBAAiB,EAAkBR,KAAK,CAAC,CAAC;MAC9D,CAAC,MAAM,IAAIG,QAAQ,KAAK,MAAM,EAAE;QAC7BtC,UAAU,CAACjB,KAAK,CAAC6D,gBAAgB,EAAkBT,KAAK,CAAC,CAAC;MAC7D;IACF;IAEA,SAASU,QAAQA,CAAEP,QAAyB,EAAE;MAC5C,MAAMQ,iBAAiB,GAAGtD,YAAY,CAACT,KAAK,GAAG,CAACuD,QAAQ,KAAK,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI7C,aAAa,CAACV,KAAK;MAEnGS,YAAY,CAACT,KAAK,GAAG5B,KAAK,CAAC2F,iBAAiB,EAAE,CAAC,EAAEpD,WAAW,CAACX,KAAK,GAAGU,aAAa,CAACV,KAAK,CAAC;IAC3F;IAEA,MAAMgE,aAAa,GAAGlG,QAAQ,CAAC,MAAM;MACnC;MACA,IAAImG,YAAY,GAAGxD,YAAY,CAACT,KAAK,GAAGW,WAAW,CAACX,KAAK,GAAGU,aAAa,CAACV,KAAK,GAC3E,EAAEW,WAAW,CAACX,KAAK,GAAGU,aAAa,CAACV,KAAK,CAAC,GAAG/B,IAAI,CAAC0C,WAAW,CAACX,KAAK,GAAGU,aAAa,CAACV,KAAK,GAAGS,YAAY,CAACT,KAAK,CAAC,GAC/G,CAACS,YAAY,CAACT,KAAK;;MAEvB;MACA,IAAIS,YAAY,CAACT,KAAK,IAAI,CAAC,EAAE;QAC3BiE,YAAY,GAAGhG,IAAI,CAAC,CAACwC,YAAY,CAACT,KAAK,CAAC;MAC1C;MAEA,MAAMsC,IAAI,GAAGlC,KAAK,CAACJ,KAAK,IAAIY,YAAY,CAACZ,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC;MACvD,OAAO;QACLkE,SAAS,EAAG,YAAWtD,YAAY,CAACZ,KAAK,GAAG,GAAG,GAAG,GAAI,IAAGsC,IAAI,GAAG2B,YAAa,KAAI;QACjFE,UAAU,EAAElC,iBAAiB,CAACjC,KAAK,GAAG,MAAM,GAAG,EAAE;QACjDoE,UAAU,EAAEnC,iBAAiB,CAACjC,KAAK,GAAG,WAAW,GAAG;MACtD,CAAC;IACH,CAAC,CAAC;IAEF,MAAMqE,SAAS,GAAGvG,QAAQ,CAAC,OAAO;MAChCwG,IAAI,EAAE/D,KAAK,CAAC+D,IAAI;MAChBC,IAAI,EAAEhE,KAAK,CAACgE,IAAI;MAChBC,MAAM,EAAEjE,KAAK,CAACiE,MAAM;MACpBC,UAAU,EAAElE,KAAK,CAACkE;IACpB,CAAC,CAAC,CAAC;IAEH,MAAMC,UAAU,GAAG5G,QAAQ,CAAC,MAAM;MAChC,QAAQgC,KAAK,CAACP,UAAU;QACtB;QACA,KAAK,QAAQ;UAAE,OAAO,IAAI;;QAE1B;QACA,KAAK,SAAS;UAAE,OAAO,CAACe,MAAM,CAACN,KAAK;;QAEpC;QACA;QACA,KAAK,IAAI;UAAE,OAAOQ,aAAa,CAACR,KAAK,IAAI2E,IAAI,CAACC,GAAG,CAACnE,YAAY,CAACT,KAAK,CAAC,GAAG,CAAC;;QAEzE;QACA,KAAK,QAAQ;UAAE,OACbM,MAAM,CAACN,KAAK,IACXQ,aAAa,CAACR,KAAK,IAAI2E,IAAI,CAACC,GAAG,CAACnE,YAAY,CAACT,KAAK,CAAC,GAAG,CAAE;;QAG3D;QACA;QACA;QACA;UAAS,OACP,CAACM,MAAM,CAACN,KAAK,KACZQ,aAAa,CAACR,KAAK,IAAI2E,IAAI,CAACC,GAAG,CAACnE,YAAY,CAACT,KAAK,CAAC,GAAG,CAAC,CAAC;MAE7D;IACF,CAAC,CAAC;IAEF,MAAM6E,OAAO,GAAG/G,QAAQ,CAAC,MAAM;MAC7B,OAAO6G,IAAI,CAACC,GAAG,CAACnE,YAAY,CAACT,KAAK,CAAC,GAAG,CAAC;IACzC,CAAC,CAAC;IAEF,MAAM8E,OAAO,GAAGhH,QAAQ,CAAC,MAAM;MAC7B;MACA,OAAO6C,WAAW,CAACX,KAAK,GAAG2E,IAAI,CAACC,GAAG,CAACnE,YAAY,CAACT,KAAK,CAAC,GAAGU,aAAa,CAACV,KAAK;IAC/E,CAAC,CAAC;IAEFvB,SAAS,CAAC,MAAAsG,YAAA,CAAAjF,KAAA,CAAAkF,GAAA;MAAA,SAEC,CACL,eAAe,EACf;QACE,yBAAyB,EAAE,CAACpE,YAAY,CAACZ,KAAK;QAC9C,4BAA4B,EAAE0E,UAAU,CAAC1E,KAAK;QAC9C,+BAA+B,EAAEQ,aAAa,CAACR;MACjD,CAAC,EACDK,cAAc,CAACL,KAAK,EACpBF,KAAK,CAACmF,KAAK,CACZ;MAAA,SACOnF,KAAK,CAACoF,KAAK;MAAA,YACPtC,SAAS,CAAC5C,KAAK,IAAIO,KAAK,CAACY,QAAQ,CAACnB,KAAK,CAACoB,MAAM,GAAI,CAAC,CAAC,GAAG,CAAC;MAAA,WAC1D6B;IAAO;MAAA9D,OAAA,EAAAA,CAAA,MAEfuF,UAAU,CAAC1E,KAAK,IAAA+E,YAAA;QAAA;QAAA,SAGP,CACL,qBAAqB,EACrB;UAAE,+BAA+B,EAAE,CAACF,OAAO,CAAC7E;QAAM,CAAC,CACpD;QAAA,WACSmF,CAAA,KAAMN,OAAO,CAAC7E,KAAK,IAAI8D,QAAQ,CAAC,MAAM;MAAC,IAE/C3D,KAAK,CAACoE,IAAI,GAAGF,SAAS,CAACrE,KAAK,CAAC,IAAA+E,YAAA,CAAA5H,eAAA;QAAAgC,OAAA,EAAAA,CAAA,MAAA4F,YAAA,CAAA3H,KAAA;UAAA,QAEbgD,KAAK,CAACJ,KAAK,GAAGF,KAAK,CAACT,QAAQ,GAAGS,KAAK,CAACR;QAAQ;MAAA,EAE9D,EAEJ,EAAAyF,YAAA;QAAA;QAAA,OAIOjE,YAAY;QAAA;QAAA,YAEP6B;MAAQ,IAAAoC,YAAA;QAAA,OAGX9D,UAAU;QAAA;QAAA,SAER+C,aAAa,CAAChE,KAAK;QAAA,uBACLoC,YAAY;QAAA,sBACbI,WAAW;QAAA,qBACZC,UAAU;QAAA,aAClBI,SAAS;QAAA,cACRG,UAAU;QAAA,aACXK;MAAS,IAEnBlD,KAAK,CAAChB,OAAO,GAAGkF,SAAS,CAACrE,KAAK,CAAC,MAIpC0E,UAAU,CAAC1E,KAAK,IAAA+E,YAAA;QAAA;QAAA,SAGP,CACL,qBAAqB,EACrB;UAAE,+BAA+B,EAAE,CAACD,OAAO,CAAC9E;QAAM,CAAC,CACpD;QAAA,WACSmF,CAAA,KAAML,OAAO,CAAC9E,KAAK,IAAI8D,QAAQ,CAAC,MAAM;MAAC,IAE/C3D,KAAK,CAACmE,IAAI,GAAGD,SAAS,CAACrE,KAAK,CAAC,IAAA+E,YAAA,CAAA5H,eAAA;QAAAgC,OAAA,EAAAA,CAAA,MAAA4F,YAAA,CAAA3H,KAAA;UAAA,QAEbgD,KAAK,CAACJ,KAAK,GAAGF,KAAK,CAACR,QAAQ,GAAGQ,KAAK,CAACT;QAAQ;MAAA,EAE9D,EAEJ;IAAA,EAEJ,CAAC;IAEF,OAAO;MACL8B,QAAQ,EAAEZ,KAAK,CAACY,QAAQ;MACxB2C,QAAQ;MACRrD,YAAY;MACZ2C;IACF,CAAC;EACH;AACF,CAAC,CAAC"}