1 line
No EOL
64 KiB
Text
1 line
No EOL
64 KiB
Text
{"version":3,"file":"js/189.d48eb76c.js","mappings":"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","sources":["webpack://cmc_fe/../../../src/components/VGrid/VContainer.tsx","webpack://cmc_fe/../../../src/components/VTabs/VTab.tsx","webpack://cmc_fe/../../../src/components/VSlideGroup/helpers.ts","webpack://cmc_fe/../../../src/components/VSlideGroup/VSlideGroup.tsx","webpack://cmc_fe/../../../src/components/VTabs/VTabs.tsx","webpack://cmc_fe/../../../src/components/VTabs/shared.ts","webpack://cmc_fe/../../../src/components/VWindow/VWindow.tsx","webpack://cmc_fe/../../../src/components/VWindow/VWindowItem.tsx","webpack://cmc_fe/../../src/composables/lazy.ts","webpack://cmc_fe/../../../src/directives/touch/index.ts"],"sourcesContent":["// Styles\nimport './VGrid.sass'\n\n// Composables\nimport { makeTagProps } from '@/composables/tag'\n\n// Utilities\nimport { defineComponent, useRender } from '@/util'\n\nexport const VContainer = defineComponent({\n name: 'VContainer',\n\n props: {\n fluid: {\n type: Boolean,\n default: false,\n },\n\n ...makeTagProps(),\n },\n\n setup (props, { slots }) {\n useRender(() => (\n <props.tag\n class={[\n 'v-container',\n { 'v-container--fluid': props.fluid },\n ]}\n v-slots={ slots }\n />\n ))\n\n return {}\n },\n})\n\nexport type VContainer = InstanceType<typeof VContainer>\n","// Styles\nimport './VTab.sass'\n\n// Components\nimport { VBtn } from '@/components/VBtn'\n\n// Composables\nimport { IconValue } from '@/composables/icons'\nimport { makeGroupItemProps } from '@/composables/group'\nimport { makeRouterProps } from '@/composables/router'\nimport { makeTagProps } from '@/composables/tag'\nimport { makeThemeProps } from '@/composables/theme'\nimport { useTextColor } from '@/composables/color'\n\n// Utilities\nimport { computed, ref } from 'vue'\nimport { animate, defineComponent, pick, standardEasing, useRender } from '@/util'\n\n// Types\nimport { VTabsSymbol } from './shared'\nimport type { PropType } from 'vue'\n\nexport const VTab = defineComponent({\n name: 'VTab',\n\n props: {\n fixed: Boolean,\n icon: [Boolean, String, Function, Object] as PropType<boolean | IconValue>,\n prependIcon: IconValue,\n appendIcon: IconValue,\n\n stacked: Boolean,\n title: String,\n\n ripple: {\n type: Boolean,\n default: true,\n },\n color: String,\n sliderColor: String,\n hideSlider: Boolean,\n\n direction: {\n type: String as PropType<'horizontal' | 'vertical'>,\n default: 'horizontal',\n },\n\n ...makeTagProps(),\n ...makeRouterProps(),\n ...makeGroupItemProps({\n selectedClass: 'v-tab--selected',\n }),\n ...makeThemeProps(),\n },\n\n setup (props, { slots, attrs }) {\n const { textColorClasses: sliderColorClasses, textColorStyles: sliderColorStyles } = useTextColor(props, 'sliderColor')\n const isHorizontal = computed(() => props.direction === 'horizontal')\n const isSelected = ref(false)\n\n const rootEl = ref<VBtn>()\n const sliderEl = ref<HTMLElement>()\n\n function updateSlider ({ value }: { value: boolean }) {\n isSelected.value = value\n\n if (value) {\n const prevEl: HTMLElement | undefined = rootEl.value?.$el.parentElement?.querySelector('.v-tab--selected .v-tab__slider')\n const nextEl = sliderEl.value\n\n if (!prevEl || !nextEl) return\n\n const color = getComputedStyle(prevEl).color\n\n const prevBox = prevEl.getBoundingClientRect()\n const nextBox = nextEl.getBoundingClientRect()\n\n const xy = isHorizontal.value ? 'x' : 'y'\n const XY = isHorizontal.value ? 'X' : 'Y'\n const rightBottom = isHorizontal.value ? 'right' : 'bottom'\n const widthHeight = isHorizontal.value ? 'width' : 'height'\n\n const prevPos = prevBox[xy]\n const nextPos = nextBox[xy]\n const delta = prevPos > nextPos\n ? prevBox[rightBottom] - nextBox[rightBottom]\n : prevBox[xy] - nextBox[xy]\n const origin =\n Math.sign(delta) > 0 ? (isHorizontal.value ? 'right' : 'bottom')\n : Math.sign(delta) < 0 ? (isHorizontal.value ? 'left' : 'top')\n : 'center'\n const size = Math.abs(delta) + (Math.sign(delta) < 0 ? prevBox[widthHeight] : nextBox[widthHeight])\n const scale = size / Math.max(prevBox[widthHeight], nextBox[widthHeight])\n const initialScale = prevBox[widthHeight] / nextBox[widthHeight]\n\n const sigma = 1.5\n animate(nextEl, {\n backgroundColor: [color, ''],\n transform: [\n `translate${XY}(${delta}px) scale${XY}(${initialScale})`,\n `translate${XY}(${delta / sigma}px) scale${XY}(${(scale - 1) / sigma + 1})`,\n '',\n ],\n transformOrigin: Array(3).fill(origin),\n }, {\n duration: 225,\n easing: standardEasing,\n })\n }\n }\n\n useRender(() => {\n const [btnProps] = pick(props, [\n 'href',\n 'to',\n 'replace',\n 'icon',\n 'stacked',\n 'prependIcon',\n 'appendIcon',\n 'ripple',\n 'theme',\n 'disabled',\n 'selectedClass',\n 'value',\n 'color',\n ])\n\n return (\n <VBtn\n _as=\"VTab\"\n symbol={ VTabsSymbol }\n ref={ rootEl }\n class={[\n 'v-tab',\n ]}\n tabindex={ isSelected.value ? 0 : -1 }\n role=\"tab\"\n aria-selected={ String(isSelected.value) }\n active={ false }\n block={ props.fixed }\n maxWidth={ props.fixed ? 300 : undefined }\n variant=\"text\"\n rounded={ 0 }\n { ...btnProps }\n { ...attrs }\n onGroup:selected={ updateSlider }\n >\n { slots.default ? slots.default() : props.title }\n { !props.hideSlider && (\n <div\n ref={ sliderEl }\n class={[\n 'v-tab__slider',\n sliderColorClasses.value,\n ]}\n style={ sliderColorStyles.value }\n />\n ) }\n </VBtn>\n )\n })\n\n return {}\n },\n})\n\nexport type VTab = InstanceType<typeof VTab>\n","export function bias (val: number) {\n const c = 0.501\n const x = Math.abs(val)\n return Math.sign(val) * (x / ((1 / c - 2) * (1 - x) + 1))\n}\n\nexport function calculateUpdatedOffset ({\n selectedElement,\n containerSize,\n contentSize,\n isRtl,\n currentScrollOffset,\n isHorizontal,\n}: {\n selectedElement: HTMLElement\n containerSize: number\n contentSize: number\n isRtl: boolean\n currentScrollOffset: number\n isHorizontal: boolean\n}): number {\n const clientSize = isHorizontal ? selectedElement.clientWidth : selectedElement.clientHeight\n const offsetStart = isHorizontal ? selectedElement.offsetLeft : selectedElement.offsetTop\n const adjustedOffsetStart = isRtl && isHorizontal ? (contentSize - offsetStart - clientSize) : offsetStart\n\n const totalSize = containerSize + currentScrollOffset\n const itemOffset = clientSize + adjustedOffsetStart\n const additionalOffset = clientSize * 0.4\n\n if (adjustedOffsetStart <= currentScrollOffset) {\n currentScrollOffset = Math.max(adjustedOffsetStart - additionalOffset, 0)\n } else if (totalSize <= itemOffset) {\n currentScrollOffset = Math.min(currentScrollOffset - (totalSize - itemOffset - additionalOffset), contentSize - containerSize)\n }\n\n return currentScrollOffset\n}\n\nexport function calculateCenteredOffset ({\n selectedElement,\n containerSize,\n contentSize,\n isRtl,\n isHorizontal,\n}: {\n selectedElement: HTMLElement\n containerSize: number\n contentSize: number\n isRtl: boolean\n isHorizontal: boolean\n}): number {\n const clientSize = isHorizontal ? selectedElement.clientWidth : selectedElement.clientHeight\n const offsetStart = isHorizontal ? selectedElement.offsetLeft : selectedElement.offsetTop\n\n const offsetCentered = isRtl && isHorizontal\n ? contentSize - offsetStart - clientSize / 2 - containerSize / 2\n : offsetStart + clientSize / 2 - containerSize / 2\n\n return Math.min(contentSize - containerSize, Math.max(0, offsetCentered))\n}\n","// Styles\nimport './VSlideGroup.sass'\n\n// Components\nimport { VFadeTransition } from '@/components/transitions'\nimport { VIcon } from '@/components/VIcon'\n\n// Composables\nimport { IconValue } from '@/composables/icons'\nimport { makeGroupProps, useGroup } from '@/composables/group'\nimport { makeTagProps } from '@/composables/tag'\nimport { useDisplay } from '@/composables'\nimport { useResizeObserver } from '@/composables/resizeObserver'\nimport { useRtl } from '@/composables/locale'\n\n// Utilities\nimport { computed, ref, watch } from 'vue'\nimport { clamp, genericComponent, IN_BROWSER, useRender } from '@/util'\nimport { bias, calculateCenteredOffset, calculateUpdatedOffset } from './helpers'\n\n// Types\nimport type { InjectionKey } from 'vue'\nimport type { SlotsToProps } from '@/util'\nimport type { GroupProvide } from '@/composables/group'\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\nexport const VSlideGroup = genericComponent<new () => {\n $props: SlotsToProps<{\n default: [SlideGroupSlot]\n prev: [SlideGroupSlot]\n next: [SlideGroupSlot]\n }>\n}>()({\n name: 'VSlideGroup',\n\n props: {\n centerActive: Boolean,\n direction: {\n type: String,\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 ...makeTagProps(),\n ...makeGroupProps({\n selectedClass: 'v-slide-group-item--active',\n }),\n },\n\n emits: {\n 'update:modelValue': (value: any) => true,\n },\n\n setup (props, { slots }) {\n const { isRtl } = useRtl()\n const { mobile } = useDisplay()\n const group = useGroup(props, props.symbol)\n const isOverflowing = ref(false)\n const scrollOffset = ref(0)\n const containerSize = ref(0)\n const contentSize = ref(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 = ref(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 = ref(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 = [...contentRef.value.querySelectorAll(\n 'button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])'\n )].filter(el => !el.hasAttribute('disabled')) as HTMLElement[]\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 ]}\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={ () => 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={ () => 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","// Styles\nimport './VTabs.sass'\n\n// Components\nimport { VSlideGroup } from '@/components/VSlideGroup'\nimport { VTab } from './VTab'\n\n// Composables\nimport { makeDensityProps, useDensity } from '@/composables/density'\nimport { makeTagProps } from '@/composables/tag'\nimport { provideDefaults } from '@/composables/defaults'\nimport { useBackgroundColor } from '@/composables/color'\nimport { useProxiedModel } from '@/composables/proxiedModel'\n\n// Utilities\nimport { computed, toRef } from 'vue'\nimport { convertToUnit, defineComponent, useRender } from '@/util'\n\n// Types\nimport { VTabsSymbol } from './shared'\nimport type { PropType } from 'vue'\n\nexport type TabItem = string | Record<string, any>\n\nfunction parseItems (items: TabItem[] | undefined) {\n if (!items) return []\n\n return items.map(item => {\n if (typeof item === 'string') return { title: item, value: item }\n\n return item\n })\n}\n\nexport const VTabs = defineComponent({\n name: 'VTabs',\n\n props: {\n alignTabs: {\n type: String as PropType<'start' | 'title' | 'center' | 'end'>,\n default: 'start',\n },\n color: String,\n direction: {\n type: String as PropType<'horizontal' | 'vertical'>,\n default: 'horizontal',\n },\n fixedTabs: Boolean,\n items: {\n type: Array as PropType<TabItem[]>,\n default: () => ([]),\n },\n stacked: Boolean,\n bgColor: String,\n grow: Boolean,\n height: {\n type: [Number, String],\n default: undefined,\n },\n hideSlider: Boolean,\n sliderColor: String,\n modelValue: null,\n mandatory: {\n type: [Boolean, String] as PropType<boolean | 'force'>,\n default: 'force',\n },\n\n ...makeDensityProps(),\n ...makeTagProps(),\n },\n\n emits: {\n 'update:modelValue': (v: unknown) => true,\n },\n\n setup (props, { slots }) {\n const model = useProxiedModel(props, 'modelValue')\n const parsedItems = computed(() => parseItems(props.items))\n const { densityClasses } = useDensity(props)\n const { backgroundColorClasses, backgroundColorStyles } = useBackgroundColor(toRef(props, 'bgColor'))\n\n provideDefaults({\n VTab: {\n color: toRef(props, 'color'),\n direction: toRef(props, 'direction'),\n stacked: toRef(props, 'stacked'),\n fixed: toRef(props, 'fixedTabs'),\n sliderColor: toRef(props, 'sliderColor'),\n hideSlider: toRef(props, 'hideSlider'),\n },\n })\n\n useRender(() => (\n <VSlideGroup\n v-model={ model.value }\n class={[\n 'v-tabs',\n `v-tabs--${props.direction}`,\n `v-tabs--align-tabs-${props.alignTabs}`,\n {\n 'v-tabs--fixed-tabs': props.fixedTabs,\n 'v-tabs--grow': props.grow,\n 'v-tabs--stacked': props.stacked,\n },\n densityClasses.value,\n backgroundColorClasses.value,\n ]}\n style={[\n { '--v-tabs-height': convertToUnit(props.height) },\n backgroundColorStyles.value,\n ]}\n role=\"tablist\"\n symbol={ VTabsSymbol }\n mandatory={ props.mandatory }\n direction={ props.direction }\n >\n { slots.default ? slots.default() : parsedItems.value.map(item => (\n <VTab { ...item } key={ item.title } />\n )) }\n </VSlideGroup>\n ))\n\n return {}\n },\n})\n\nexport type VTabs = InstanceType<typeof VTabs>\n","import type { InjectionKey } from 'vue'\nimport type { GroupProvide } from '@/composables/group'\n\nexport const VTabsSymbol: InjectionKey<GroupProvide> = Symbol.for('vuetify:v-tabs')\n","// Styles\nimport './VWindow.sass'\n\n// Components\nimport { VBtn } from '@/components/VBtn'\n\n// Directives\nimport { Touch } from '@/directives/touch'\n\n// Composables\nimport { makeTagProps } from '@/composables/tag'\nimport { makeThemeProps, provideTheme } from '@/composables/theme'\nimport { useGroup } from '@/composables/group'\nimport { useLocale, useRtl } from '@/composables/locale'\n\n// Utilities\nimport { computed, provide, ref, watch } from 'vue'\nimport { genericComponent, useRender } from '@/util'\n\n// Types\nimport type { ComputedRef, InjectionKey, PropType, Ref } from 'vue'\nimport type { GroupItemProvide, GroupProvide } from '@/composables/group'\nimport type { IconValue } from '@/composables/icons'\nimport type { SlotsToProps } from '@/util'\nimport type { TouchHandlers } from '@/directives/touch'\n\ntype WindowProvide = {\n transition: ComputedRef<undefined | string>\n transitionCount: Ref<number>\n transitionHeight: Ref<undefined | string>\n isReversed: Ref<boolean>\n rootRef: Ref<HTMLElement | undefined>\n}\n\ntype ControlProps = {\n icon: IconValue\n class: string\n onClick: () => void\n ariaLabel: string\n}\n\nexport const VWindowSymbol: InjectionKey<WindowProvide> = Symbol.for('vuetify:v-window')\nexport const VWindowGroupSymbol: InjectionKey<GroupItemProvide> = Symbol.for('vuetify:v-window-group')\n\nexport const VWindow = genericComponent<new () => {\n $props: SlotsToProps<{\n default: [{ group: GroupProvide }]\n additional: [{ group: GroupProvide }]\n prev: [{ props: ControlProps }]\n next: [{ props: ControlProps }]\n }>\n}>()({\n name: 'VWindow',\n\n directives: {\n Touch,\n },\n\n props: {\n continuous: Boolean,\n nextIcon: {\n type: [Boolean, String, Function, Object] as PropType<IconValue>,\n default: '$next',\n },\n prevIcon: {\n type: [Boolean, String, Function, Object] as PropType<IconValue>,\n default: '$prev',\n },\n reverse: Boolean,\n showArrows: {\n type: [Boolean, String],\n validator: (v: any) => typeof v === 'boolean' || v === 'hover',\n },\n touch: {\n type: [Object, Boolean] as PropType<boolean | TouchHandlers>,\n default: undefined,\n },\n direction: {\n type: String,\n default: 'horizontal',\n },\n\n modelValue: null,\n disabled: Boolean,\n selectedClass: {\n type: String,\n default: 'v-window-item--active',\n },\n // TODO: mandatory should probably not be exposed but do this for now\n mandatory: {\n default: 'force' as const,\n },\n\n ...makeTagProps(),\n ...makeThemeProps(),\n },\n\n emits: {\n 'update:modelValue': (v: any) => true,\n },\n\n setup (props, { slots }) {\n const { themeClasses } = provideTheme(props)\n const { isRtl } = useRtl()\n const { t } = useLocale()\n\n const group = useGroup(props, VWindowGroupSymbol)\n\n const rootRef = ref()\n const isRtlReverse = computed(() => isRtl.value ? !props.reverse : props.reverse)\n const isReversed = ref(false)\n const transition = computed(() => {\n const axis = props.direction === 'vertical' ? 'y' : 'x'\n const reverse = isRtlReverse.value ? !isReversed.value : isReversed.value\n const direction = reverse ? '-reverse' : ''\n\n return `v-window-${axis}${direction}-transition`\n })\n const transitionCount = ref(0)\n const transitionHeight = ref<undefined | string>(undefined)\n\n const activeIndex = computed(() => {\n return group.items.value.findIndex(item => group.selected.value.includes(item.id))\n })\n\n watch(activeIndex, (newVal, oldVal) => {\n const itemsLength = group.items.value.length\n const lastIndex = itemsLength - 1\n\n if (itemsLength <= 2) {\n isReversed.value = newVal < oldVal\n } else if (newVal === lastIndex && oldVal === 0) {\n isReversed.value = true\n } else if (newVal === 0 && oldVal === lastIndex) {\n isReversed.value = false\n } else {\n isReversed.value = newVal < oldVal\n }\n })\n\n provide(VWindowSymbol, {\n transition,\n isReversed,\n transitionCount,\n transitionHeight,\n rootRef,\n })\n\n const canMoveBack = computed(() => props.continuous || activeIndex.value !== 0)\n const canMoveForward = computed(() => props.continuous || activeIndex.value !== group.items.value.length - 1)\n\n function prev () {\n canMoveBack.value && group.prev()\n }\n\n function next () {\n canMoveForward.value && group.next()\n }\n\n const arrows = computed(() => {\n const arrows = []\n\n const prevProps = {\n icon: isRtl.value ? props.nextIcon : props.prevIcon,\n class: `v-window__${isRtlReverse.value ? 'right' : 'left'}`,\n onClick: group.prev,\n ariaLabel: t('$vuetify.carousel.prev'),\n }\n\n arrows.push(canMoveBack.value\n ? slots.prev\n ? slots.prev({ props: prevProps })\n : <VBtn { ...prevProps } />\n : <div />\n )\n\n const nextProps = {\n icon: isRtl.value ? props.prevIcon : props.nextIcon,\n class: `v-window__${isRtlReverse.value ? 'left' : 'right'}`,\n onClick: group.next,\n ariaLabel: t('$vuetify.carousel.next'),\n }\n\n arrows.push(canMoveForward.value\n ? slots.next\n ? slots.next({ props: nextProps })\n : <VBtn { ...nextProps } />\n : <div />\n )\n\n return arrows\n })\n\n const touchOptions = computed(() => {\n if (props.touch === false) return props.touch\n\n const options: TouchHandlers = {\n left: () => {\n isRtlReverse.value ? prev() : next()\n },\n right: () => {\n isRtlReverse.value ? next() : prev()\n },\n start: ({ originalEvent }) => {\n originalEvent.stopPropagation()\n },\n }\n\n return {\n ...options,\n ...(props.touch === true ? {} : props.touch),\n }\n })\n\n useRender(() => (\n <props.tag\n ref={ rootRef }\n class={[\n 'v-window',\n {\n 'v-window--show-arrows-on-hover': props.showArrows === 'hover',\n },\n themeClasses.value,\n ]}\n v-touch={ touchOptions.value }\n >\n <div\n class=\"v-window__container\"\n style={{\n height: transitionHeight.value,\n }}\n >\n { slots.default?.({ group }) }\n\n { props.showArrows !== false && (\n <div class=\"v-window__controls\">\n { arrows.value }\n </div>\n )}\n </div>\n\n { slots.additional?.({ group }) }\n </props.tag>\n ))\n\n return {\n group,\n }\n },\n})\n\nexport type VWindow = InstanceType<typeof VWindow>\n","// Directives\nimport Touch from '@/directives/touch'\n\n// Composables\nimport { makeGroupItemProps, useGroupItem } from '@/composables/group'\nimport { makeLazyProps, useLazy } from '@/composables/lazy'\nimport { MaybeTransition } from '@/composables/transition'\nimport { useSsrBoot } from '@/composables/ssrBoot'\n\n// Utilities\nimport { computed, inject, nextTick, ref } from 'vue'\nimport { convertToUnit, defineComponent, useRender } from '@/util'\nimport { VWindowGroupSymbol, VWindowSymbol } from './VWindow'\n\nexport const VWindowItem = defineComponent({\n name: 'VWindowItem',\n\n directives: {\n Touch,\n },\n\n props: {\n reverseTransition: {\n type: [Boolean, String],\n default: undefined,\n },\n transition: {\n type: [Boolean, String],\n default: undefined,\n },\n\n ...makeGroupItemProps(),\n ...makeLazyProps(),\n },\n\n emits: {\n 'group:selected': (val: { value: boolean }) => true,\n },\n\n setup (props, { slots }) {\n const window = inject(VWindowSymbol)\n const groupItem = useGroupItem(props, VWindowGroupSymbol)\n const { isBooted } = useSsrBoot()\n\n if (!window || !groupItem) throw new Error('[Vuetify] VWindowItem must be used inside VWindow')\n\n const isTransitioning = ref(false)\n const hasTransition = computed(() => window.isReversed.value ? props.reverseTransition !== false : props.transition !== false)\n\n function onAfterTransition () {\n if (!isTransitioning.value || !window) {\n return\n }\n\n // Finalize transition state.\n isTransitioning.value = false\n if (window.transitionCount.value > 0) {\n window.transitionCount.value -= 1\n\n // Remove container height if we are out of transition.\n if (window.transitionCount.value === 0) {\n window.transitionHeight.value = undefined\n }\n }\n }\n\n function onBeforeTransition () {\n if (isTransitioning.value || !window) {\n return\n }\n\n // Initialize transition state here.\n isTransitioning.value = true\n\n if (window.transitionCount.value === 0) {\n // Set initial height for height transition.\n window.transitionHeight.value = convertToUnit(window.rootRef.value?.clientHeight)\n }\n\n window.transitionCount.value += 1\n }\n\n function onTransitionCancelled () {\n onAfterTransition() // This should have the same path as normal transition end.\n }\n\n function onEnterTransition (el: Element) {\n if (!isTransitioning.value) {\n return\n }\n\n nextTick(() => {\n // Do not set height if no transition or cancelled.\n if (!hasTransition.value || !isTransitioning.value || !window) {\n return\n }\n\n // Set transition target height.\n window.transitionHeight.value = convertToUnit(el.clientHeight)\n })\n }\n\n const transition = computed(() => {\n const name = window.isReversed.value\n ? props.reverseTransition\n : props.transition\n\n return !hasTransition.value ? false : {\n name: typeof name !== 'string' ? window.transition.value : name,\n onBeforeEnter: onBeforeTransition,\n onAfterEnter: onAfterTransition,\n onEnterCancelled: onTransitionCancelled,\n onBeforeLeave: onBeforeTransition,\n onAfterLeave: onAfterTransition,\n onLeaveCancelled: onTransitionCancelled,\n onEnter: onEnterTransition,\n }\n })\n\n const { hasContent } = useLazy(props, groupItem.isSelected)\n\n useRender(() => (\n <MaybeTransition transition={ isBooted.value && transition.value } >\n <div\n class={[\n 'v-window-item',\n groupItem.selectedClass.value,\n ]}\n v-show={ groupItem.isSelected.value }\n >\n { hasContent.value && slots.default?.() }\n </div>\n </MaybeTransition>\n ))\n\n return {}\n },\n})\n\nexport type VWindowItem = InstanceType<typeof VWindowItem>\n","// Utilities\nimport { computed, ref, watch } from 'vue'\n\n// Types\nimport type { Ref } from 'vue'\nimport { propsFactory } from '@/util'\n\nexport const makeLazyProps = propsFactory({\n eager: Boolean,\n}, 'lazy')\n\nexport function useLazy (props: { eager: boolean }, active: Ref<boolean>) {\n const isBooted = ref(false)\n const hasContent = computed(() => isBooted.value || props.eager || active.value)\n\n watch(active, () => isBooted.value = true)\n\n function onAfterLeave () {\n if (!props.eager) isBooted.value = false\n }\n\n return { isBooted, hasContent, onAfterLeave }\n}\n","// Types\nimport type {\n DirectiveBinding,\n} from 'vue'\n\n// Utilities\nimport { keys } from '@/util'\n\nexport interface TouchHandlers {\n start?: (wrapperEvent: { originalEvent: TouchEvent } & TouchData) => void\n end?: (wrapperEvent: { originalEvent: TouchEvent } & TouchData) => void\n move?: (wrapperEvent: { originalEvent: TouchEvent } & TouchData) => void\n left?: (wrapper: TouchData) => void\n right?: (wrapper: TouchData) => void\n up?: (wrapper: TouchData) => void\n down?: (wrapper: TouchData) => void\n}\n\nexport interface TouchData {\n touchstartX: number\n touchstartY: number\n touchmoveX: number\n touchmoveY: number\n touchendX: number\n touchendY: number\n offsetX: number\n offsetY: number\n}\n\nexport type TouchWrapper = TouchHandlers & TouchData\n\nexport interface TouchValue extends TouchHandlers {\n parent?: boolean\n options?: AddEventListenerOptions\n}\n\nexport interface TouchStoredHandlers {\n touchstart: (e: TouchEvent) => void\n touchend: (e: TouchEvent) => void\n touchmove: (e: TouchEvent) => void\n}\n\nexport interface TouchDirectiveBinding extends Omit<DirectiveBinding, 'value'> {\n value?: TouchValue\n}\n\nconst handleGesture = (wrapper: TouchWrapper) => {\n const { touchstartX, touchendX, touchstartY, touchendY } = wrapper\n const dirRatio = 0.5\n const minDistance = 16\n wrapper.offsetX = touchendX - touchstartX\n wrapper.offsetY = touchendY - touchstartY\n\n if (Math.abs(wrapper.offsetY) < dirRatio * Math.abs(wrapper.offsetX)) {\n wrapper.left && (touchendX < touchstartX - minDistance) && wrapper.left(wrapper)\n wrapper.right && (touchendX > touchstartX + minDistance) && wrapper.right(wrapper)\n }\n\n if (Math.abs(wrapper.offsetX) < dirRatio * Math.abs(wrapper.offsetY)) {\n wrapper.up && (touchendY < touchstartY - minDistance) && wrapper.up(wrapper)\n wrapper.down && (touchendY > touchstartY + minDistance) && wrapper.down(wrapper)\n }\n}\n\nfunction touchstart (event: TouchEvent, wrapper: TouchWrapper) {\n const touch = event.changedTouches[0]\n wrapper.touchstartX = touch.clientX\n wrapper.touchstartY = touch.clientY\n\n wrapper.start?.({ originalEvent: event, ...wrapper })\n}\n\nfunction touchend (event: TouchEvent, wrapper: TouchWrapper) {\n const touch = event.changedTouches[0]\n wrapper.touchendX = touch.clientX\n wrapper.touchendY = touch.clientY\n\n wrapper.end?.({ originalEvent: event, ...wrapper })\n\n handleGesture(wrapper)\n}\n\nfunction touchmove (event: TouchEvent, wrapper: TouchWrapper) {\n const touch = event.changedTouches[0]\n wrapper.touchmoveX = touch.clientX\n wrapper.touchmoveY = touch.clientY\n\n wrapper.move?.({ originalEvent: event, ...wrapper })\n}\n\nfunction createHandlers (value: TouchHandlers = {}): TouchStoredHandlers {\n const wrapper = {\n touchstartX: 0,\n touchstartY: 0,\n touchendX: 0,\n touchendY: 0,\n touchmoveX: 0,\n touchmoveY: 0,\n offsetX: 0,\n offsetY: 0,\n left: value.left,\n right: value.right,\n up: value.up,\n down: value.down,\n start: value.start,\n move: value.move,\n end: value.end,\n }\n\n return {\n touchstart: (e: TouchEvent) => touchstart(e, wrapper),\n touchend: (e: TouchEvent) => touchend(e, wrapper),\n touchmove: (e: TouchEvent) => touchmove(e, wrapper),\n }\n}\n\nfunction mounted (el: HTMLElement, binding: TouchDirectiveBinding) {\n const value = binding.value\n const target = value?.parent ? el.parentElement : el\n const options = value?.options ?? { passive: true }\n const uid = binding.instance?.$.uid // TODO: use custom uid generator\n\n if (!target || !uid) return\n\n const handlers = createHandlers(binding.value)\n\n target._touchHandlers = target._touchHandlers ?? Object.create(null)\n target._touchHandlers![uid] = handlers\n\n keys(handlers).forEach(eventName => {\n target.addEventListener(eventName, handlers[eventName], options)\n })\n}\n\nfunction unmounted (el: HTMLElement, binding: TouchDirectiveBinding) {\n const target = binding.value?.parent ? el.parentElement : el\n const uid = binding.instance?.$.uid\n\n if (!target?._touchHandlers || !uid) return\n\n const handlers = target._touchHandlers[uid]\n\n keys(handlers).forEach(eventName => {\n target.removeEventListener(eventName, handlers[eventName])\n })\n\n delete target._touchHandlers[uid]\n}\n\nexport const Touch = {\n mounted,\n unmounted,\n}\n\nexport default Touch\n"],"names":["VContainer","defineComponent","name","props","fluid","type","Boolean","default","makeTagProps","setup","slots","useRender","VTab","fixed","icon","String","Function","Object","prependIcon","IconValue","appendIcon","stacked","title","ripple","color","sliderColor","hideSlider","direction","makeRouterProps","makeGroupItemProps","selectedClass","makeThemeProps","attrs","textColorClasses","sliderColorClasses","textColorStyles","sliderColorStyles","useTextColor","isHorizontal","computed","isSelected","ref","rootEl","sliderEl","updateSlider","value","prevEl","_rootEl$value","$el","parentElement","_rootEl$value$$el$par","querySelector","nextEl","getComputedStyle","prevBox","getBoundingClientRect","nextBox","xy","XY","rightBottom","widthHeight","prevPos","nextPos","delta","origin","Math","sign","size","abs","scale","max","initialScale","sigma","animate","backgroundColor","transform","transformOrigin","Array","fill","duration","easing","standardEasing","btnProps","pick","VTabsSymbol","undefined","bias","val","c","x","calculateUpdatedOffset","selectedElement","containerSize","contentSize","isRtl","currentScrollOffset","clientSize","clientWidth","clientHeight","offsetStart","offsetLeft","offsetTop","adjustedOffsetStart","totalSize","itemOffset","additionalOffset","min","calculateCenteredOffset","offsetCentered","VSlideGroupSymbol","Symbol","for","VSlideGroup","genericComponent","centerActive","symbol","nextIcon","prevIcon","showArrows","validator","v","includes","makeGroupProps","emits","useRtl","mobile","useDisplay","group","useGroup","isOverflowing","scrollOffset","resizeRef","containerRef","contentRect","containerRect","useResizeObserver","contentRef","firstSelectedIndex","selected","length","items","findIndex","item","id","lastSelectedIndex","IN_BROWSER","frame","watch","cancelAnimationFrame","requestAnimationFrame","sizeProperty","children","disableTransition","startTouch","startOffset","onTouchstart","e","touches","onTouchmove","onTouchend","maxScrollOffset","onScroll","isFocused","onFocusin","el","composedPath","onFocusout","onFocus","relatedTarget","_contentRef$value","contains","focus","onKeydown","key","location","_contentRef$value$que","nextElementSibling","_contentRef$value$que2","previousElementSibling","firstElementChild","_contentRef$value$fir","lastElementChild","_contentRef$value$las","focusable","querySelectorAll","filter","hasAttribute","_focusable$","scrollTo","newAbsoluteOffset","clamp","contentStyles","scrollAmount","transition","willChange","slotProps","next","prev","select","hasAffixes","hasPrev","hasNext","_slots$prev","_slots$default","_slots$next","parseItems","map","VTabs","alignTabs","fixedTabs","bgColor","grow","height","Number","modelValue","mandatory","makeDensityProps","model","useProxiedModel","parsedItems","densityClasses","useDensity","backgroundColorClasses","backgroundColorStyles","useBackgroundColor","toRef","provideDefaults","convertToUnit","VWindowSymbol","VWindowGroupSymbol","VWindow","directives","Touch","continuous","reverse","touch","disabled","themeClasses","provideTheme","t","useLocale","rootRef","isRtlReverse","isReversed","axis","transitionCount","transitionHeight","activeIndex","newVal","oldVal","itemsLength","lastIndex","provide","canMoveBack","canMoveForward","arrows","prevProps","class","onClick","ariaLabel","push","nextProps","touchOptions","options","left","right","start","_ref2","originalEvent","stopPropagation","additional","_slots$additional","VWindowItem","reverseTransition","makeLazyProps","window","inject","groupItem","useGroupItem","isBooted","useSsrBoot","Error","isTransitioning","hasTransition","onAfterTransition","onBeforeTransition","_window$rootRef$value","onTransitionCancelled","onEnterTransition","nextTick","onBeforeEnter","onAfterEnter","onEnterCancelled","onBeforeLeave","onAfterLeave","onLeaveCancelled","onEnter","hasContent","useLazy","propsFactory","eager","active","handleGesture","wrapper","touchstartX","touchendX","touchstartY","touchendY","dirRatio","minDistance","offsetX","offsetY","up","down","touchstart","event","changedTouches","clientX","clientY","_wrapper$start","touchend","end","_wrapper$end","touchmove","touchmoveX","touchmoveY","move","_wrapper$move","createHandlers","mounted","binding","target","parent","passive","uid","instance","_binding$instance","$","handlers","_touchHandlers","create","keys","forEach","eventName","addEventListener","unmounted","_binding$value","_binding$instance2","removeEventListener"],"sourceRoot":""} |