UNPKG

@shopware-ag/meteor-component-library

Version:

The meteor component library is a Vue component library developed by Shopware. It is based on the [Meteor Design System](https://shopware.design/).

1 lines 41.2 kB
{"version":3,"file":"mt-popover-item-result-c0214b39.mjs","sources":["../src/directives/dragdrop.directive.ts","../src/components/overlay/mt-popover-item-result/mt-popover-item-result.vue"],"sourcesContent":["import type { Directive } from \"vue\";\n\nexport interface DragConfig<DATA = unknown> {\n delay: number;\n dragGroup: number | string;\n draggableCls: string;\n draggingStateCls: string;\n dragElementCls: string;\n validDragCls: string;\n invalidDragCls: string;\n preventEvent: boolean;\n validateDrop:\n | null\n | ((\n dragConfigData: DragConfig<DATA>[\"data\"],\n dropConfigData: DropConfig<DATA>[\"data\"],\n ) => boolean);\n validateDrag:\n | null\n | ((\n dragConfigData: DragConfig<DATA>[\"data\"],\n dropConfigData: DropConfig<DATA>[\"data\"],\n ) => boolean);\n validateDragStart:\n | null\n | ((\n dragConfigData: DragConfig<DATA>[\"data\"],\n el: HTMLElement,\n event: MouseEvent | TouchEvent,\n ) => boolean);\n onDragStart:\n | null\n | ((dragConfig: DragConfig<DATA>, el: HTMLElement, dragElement: HTMLElement) => void);\n onDragEnter:\n | null\n | ((\n dragConfigData: DragConfig<DATA>[\"data\"],\n dropConfigData: DropConfig<DATA>[\"data\"],\n valid: boolean,\n ) => void);\n onDragLeave:\n | null\n | ((\n dragConfigData: DragConfig<DATA>[\"data\"],\n dropConfigData: DropConfig<DATA>[\"data\"],\n ) => void);\n onDrop:\n | null\n | ((\n dragConfigData: DragConfig<DATA>[\"data\"],\n dropConfigData: DropConfig<DATA>[\"data\"],\n ) => void);\n data: null | DATA;\n disabled: boolean;\n}\n\nexport interface DropConfig<DATA = unknown> {\n dragGroup: number | string;\n droppableCls: string;\n validDropCls: string;\n invalidDropCls: string;\n validateDrop:\n | null\n | ((\n dragConfigData: DragConfig<DATA>[\"data\"],\n dropConfigData: DropConfig<DATA>[\"data\"],\n ) => boolean);\n onDrop:\n | null\n | ((\n dragConfigData: DragConfig<DATA>[\"data\"],\n dropConfigData: DropConfig<DATA>[\"data\"],\n ) => void);\n data: null | DATA;\n}\n\nexport interface DropZone {\n el: HTMLElement;\n dropConfig: DropConfig;\n}\n\n/**\n * @description An object representing the current drag element and config.\n */\nlet currentDrag: { el: HTMLElement; dragConfig: DragConfig } | null = null;\n\n/**\n * @description An object representing the current drop zone element and config.\n */\nlet currentDrop: { el: HTMLElement; dropConfig: DropConfig } | null = null;\n\n/**\n * @description The proxy element which is used to display the moved element.\n */\nlet dragElement: HTMLElement | null = null;\n\n/**\n * @description The x offset of the mouse position inside the dragged element.\n */\nlet dragMouseOffsetX = 0;\n\n/**\n * @description The y offset of the mouse position inside the dragged element.\n */\nlet dragMouseOffsetY = 0;\n\n/**\n * @description The timeout managing the delayed drag start.\n */\nlet delayTimeout: number | null = null;\n\n/**\n * @description A registry of all drop zones.\n */\nconst dropZones: DropZone[] = [];\n\n/**\n * The default config for the draggable directive.\n */\nconst defaultDragConfig: DragConfig = {\n delay: 100,\n dragGroup: 1,\n draggableCls: \"is--draggable\",\n draggingStateCls: \"is--dragging\",\n dragElementCls: \"is--drag-element\",\n validDragCls: \"is--valid-drag\",\n invalidDragCls: \"is--invalid-drag\",\n preventEvent: true,\n validateDrop: null,\n validateDrag: null,\n validateDragStart: null,\n onDragStart: null,\n onDragEnter: null,\n onDragLeave: null,\n onDrop: null,\n data: null,\n disabled: false,\n};\n\n/**\n * The default config for the droppable directive.\n */\nconst defaultDropConfig: DropConfig = {\n dragGroup: 1,\n droppableCls: \"is--droppable\",\n validDropCls: \"is--valid-drop\",\n invalidDropCls: \"is--invalid-drop\",\n validateDrop: null,\n onDrop: null,\n data: null,\n};\n\n/**\n * Fired by event callback when the user starts dragging an element.\n */\nfunction onDrag(el: HTMLElement, dragConfig: DragConfig, event: MouseEvent | TouchEvent): boolean {\n if (event instanceof MouseEvent && event.buttons !== 1) {\n return false;\n }\n\n if (dragConfig.preventEvent) {\n event.preventDefault();\n event.stopPropagation();\n }\n\n if (dragConfig.delay === null || dragConfig.delay <= 0) {\n startDrag(el, dragConfig, event);\n } else {\n // TODO: check if {} instead of \"this\" is working\n delayTimeout = window.setTimeout(startDrag.bind({}, el, dragConfig, event), dragConfig.delay);\n }\n\n document.addEventListener(\"mouseup\", stopDrag);\n document.addEventListener(\"touchend\", stopDrag);\n\n return true;\n}\n\n/**\n * Initializes the drag state for the current drag action.\n */\nfunction startDrag(el: HTMLElement, dragConfig: DragConfig, event: MouseEvent | TouchEvent) {\n // check if starting drag is valid\n if (\n dragConfig.validateDragStart !== null &&\n !dragConfig.validateDragStart(dragConfig.data, el, event)\n ) {\n return;\n }\n\n delayTimeout = null;\n\n if (currentDrag !== null) {\n return;\n }\n\n currentDrag = { el, dragConfig };\n\n const elBoundingBox = el.getBoundingClientRect();\n\n const pageX = ((event instanceof MouseEvent && event.pageX) ||\n (event instanceof TouchEvent && event.touches[0].pageX)) as number;\n const pageY = ((event instanceof MouseEvent && event.pageY) ||\n (event instanceof TouchEvent && event.touches[0].pageY)) as number;\n\n dragMouseOffsetX = pageX - elBoundingBox.left;\n dragMouseOffsetY = pageY - elBoundingBox.top;\n\n dragElement = el.cloneNode(true) as HTMLElement;\n dragElement.classList.add(dragConfig.dragElementCls);\n dragElement.style.width = `${elBoundingBox.width}px`;\n dragElement.style.translate = `${pageX - dragMouseOffsetX}px ${pageY - dragMouseOffsetY}px`;\n dragElement.style.left = \"0\";\n dragElement.style.top = \"0\";\n document.body.appendChild(dragElement);\n\n el.classList.add(dragConfig.draggingStateCls);\n\n if (typeof currentDrag.dragConfig.onDragStart === \"function\") {\n currentDrag.dragConfig.onDragStart(currentDrag.dragConfig, el, dragElement);\n }\n\n document.addEventListener(\"mousemove\", moveDrag);\n document.addEventListener(\"touchmove\", moveDrag);\n}\n\nlet rotationTimeout = 0;\n\n/**\n * Calculate the rotation based on movement direction.\n */\nfunction calculateRotation(oldX: number, newX: number): string {\n if (oldX && Math.abs(newX - oldX) > 2) {\n const moveRight = newX - oldX > 0;\n\n return `${moveRight ? 5 : -5}deg`;\n }\n\n return \"\";\n}\n\n/**\n * Fired by event callback when the user moves the dragged element.\n */\nfunction moveDrag(event: MouseEvent | TouchEvent) {\n if (currentDrag === null) {\n stopDrag();\n return;\n }\n\n const pageX = ((event instanceof MouseEvent && event.pageX) ||\n (event instanceof TouchEvent && event.touches[0].pageX)) as number;\n const pageY = ((event instanceof MouseEvent && event.pageY) ||\n (event instanceof TouchEvent && event.touches[0].pageY)) as number;\n\n if (dragElement) {\n // get the old value from dataset\n const oldX = Number(dragElement.dataset.translateX);\n\n const newX = pageX - dragMouseOffsetX;\n const newY = pageY - dragMouseOffsetY;\n\n // calculate rotation\n dragElement.style.rotate = calculateRotation(oldX, newX);\n\n // use timeout for resetting the rotation after movement stops\n clearTimeout(rotationTimeout);\n rotationTimeout = window.setTimeout(() => {\n if (dragElement) dragElement.style.rotate = \"0deg\";\n }, 100);\n\n // set translate value\n dragElement.style.translate = `${newX}px ${newY}px`;\n\n // save new x value to dataset\n dragElement.dataset.translateX = newX.toString();\n }\n if (event.type === \"touchmove\") {\n const foundZone = dropZones.find((zone) => isEventOverElement(event, zone.el));\n\n clearAllDropZoneHighlights();\n\n if (foundZone) {\n enterDropZone(foundZone.el, foundZone.dropConfig);\n } else if (currentDrop) {\n leaveDropZone(currentDrop.el, currentDrop.dropConfig);\n }\n }\n}\n\n/**\n * Helper method for detecting if the current event position\n * is in the boundaries of an existing drop zone element.\n */\nfunction isEventOverElement(event: MouseEvent | TouchEvent, el: HTMLElement): boolean {\n const pageX = ((event instanceof MouseEvent && event.pageX) ||\n (event instanceof TouchEvent && event.touches[0].pageX)) as number;\n const pageY = ((event instanceof MouseEvent && event.pageY) ||\n (event instanceof TouchEvent && event.touches[0].pageY)) as number;\n\n const box = el.getBoundingClientRect();\n\n return (\n pageX >= box.x && pageX <= box.x + box.width && pageY >= box.y && pageY <= box.y + box.height\n );\n}\n\n/**\n * Stops all drag interaction and resets all variables and listeners.\n */\nfunction stopDrag() {\n if (delayTimeout !== null) {\n window.clearTimeout(delayTimeout);\n delayTimeout = null;\n return;\n }\n\n const validDrag = validateDrag();\n const validDrop = validateDrop();\n\n if (validDrag && currentDrag) {\n if (typeof currentDrag.dragConfig.onDrop === \"function\") {\n currentDrag.dragConfig.onDrop(\n currentDrag.dragConfig.data,\n validDrop ? currentDrop?.dropConfig?.data : null,\n );\n }\n }\n\n if (validDrop && currentDrop) {\n if (typeof currentDrop.dropConfig.onDrop === \"function\") {\n currentDrop.dropConfig.onDrop(currentDrag?.dragConfig.data, currentDrop.dropConfig.data);\n }\n }\n\n document.removeEventListener(\"mousemove\", moveDrag);\n document.removeEventListener(\"touchmove\", moveDrag);\n\n document.removeEventListener(\"mouseup\", stopDrag);\n document.removeEventListener(\"touchend\", stopDrag);\n\n if (dragElement !== null) {\n dragElement.remove();\n dragElement = null;\n }\n\n if (currentDrag !== null) {\n currentDrag.el.classList.remove(currentDrag.dragConfig.draggingStateCls);\n currentDrag.el.classList.remove(currentDrag.dragConfig.validDragCls);\n currentDrag.el.classList.remove(currentDrag.dragConfig.invalidDragCls);\n currentDrag = null;\n }\n\n if (currentDrop !== null) {\n currentDrop.el.classList.remove(currentDrop.dropConfig.validDropCls);\n currentDrop.el.classList.remove(currentDrop.dropConfig.invalidDropCls);\n currentDrop = null;\n }\n\n dragMouseOffsetX = 0;\n dragMouseOffsetY = 0;\n}\n\n/**\n * Fired by event callback when the user moves the dragged element over an existing drop zone.\n */\nfunction enterDropZone(el: HTMLElement, dropConfig: DropConfig) {\n if (currentDrag === null) {\n return;\n }\n currentDrop = { el, dropConfig };\n\n const valid = validateDrop();\n\n if (valid) {\n el.classList.add(dropConfig.validDropCls);\n el.classList.remove(dropConfig.invalidDropCls);\n\n if (dragElement) {\n dragElement.classList.add(currentDrag.dragConfig.validDragCls);\n dragElement.classList.remove(currentDrag.dragConfig.invalidDragCls);\n }\n } else {\n el.classList.add(dropConfig.invalidDropCls);\n el.classList.remove(dropConfig.validDropCls);\n\n if (dragElement) {\n dragElement.classList.add(currentDrag.dragConfig.invalidDragCls);\n dragElement.classList.remove(currentDrag.dragConfig.validDragCls);\n }\n }\n\n if (typeof currentDrag.dragConfig.onDragEnter === \"function\") {\n currentDrag.dragConfig.onDragEnter(\n currentDrag.dragConfig.data,\n currentDrop.dropConfig.data,\n valid,\n );\n }\n}\n\n/**\n * Fired by event callback when the user moves the dragged element out of an existing drop zone.\n *\n * @param {HTMLElement} el\n * @param {DropConfig} dropConfig\n */\nfunction leaveDropZone(el: HTMLElement, dropConfig: DropConfig) {\n if (currentDrag === null) {\n return;\n }\n\n if (currentDrop === null) {\n return;\n }\n\n if (typeof currentDrag.dragConfig.onDragLeave === \"function\") {\n currentDrag.dragConfig.onDragLeave(currentDrag.dragConfig.data, currentDrop.dropConfig.data);\n }\n\n el.classList.remove(dropConfig.validDropCls);\n el.classList.remove(dropConfig.invalidDropCls);\n\n if (dragElement) {\n dragElement.classList.remove(currentDrag.dragConfig.validDragCls);\n dragElement.classList.remove(currentDrag.dragConfig.invalidDragCls);\n }\n\n currentDrop = null;\n}\n\n/**\n * Validates a drop using the {currentDrag} and {currentDrop} configuration.\n * Also calls the custom validator functions of the two configs.\n */\nfunction validateDrop(): boolean {\n let valid = true;\n let customDragValidation = true;\n let customDropValidation = true;\n\n // Validate if the drag and drop are using the same drag group.\n if (\n currentDrag === null ||\n currentDrop === null ||\n currentDrop.dropConfig.dragGroup !== currentDrag.dragConfig.dragGroup\n ) {\n valid = false;\n }\n\n // Check the custom drag validate function.\n if (currentDrag !== null && typeof currentDrag.dragConfig.validateDrop === \"function\") {\n customDragValidation = currentDrag.dragConfig.validateDrop(\n currentDrag.dragConfig.data,\n currentDrop?.dropConfig.data,\n );\n }\n\n // Check the custom drop validate function.\n if (currentDrop !== null && typeof currentDrop.dropConfig.validateDrop === \"function\") {\n customDropValidation = currentDrop.dropConfig.validateDrop(\n currentDrag?.dragConfig.data,\n currentDrop.dropConfig.data,\n );\n }\n\n return valid && customDragValidation && customDropValidation;\n}\n/**\n * Validates a drag using the {currentDrag} configuration.\n * Also calls the custom validator functions of the config.\n */\nfunction validateDrag(): boolean {\n let valid = true;\n let customDragValidation = true;\n\n // Validate if the drag and drop are using the same drag group.\n if (currentDrag === null) {\n valid = false;\n }\n\n // Check the custom drag validate function.\n if (currentDrag !== null && typeof currentDrag.dragConfig.validateDrag === \"function\") {\n customDragValidation = currentDrag.dragConfig.validateDrag(\n currentDrag.dragConfig.data,\n currentDrop?.dropConfig.data,\n );\n }\n\n return valid && customDragValidation;\n}\n\nfunction mergeConfigs(defaultConfig: DragConfig | DropConfig, binding: { value: unknown }) {\n const mergedConfig = { ...defaultConfig };\n\n if (binding.value instanceof Object) {\n Object.assign(mergedConfig, binding.value);\n } else {\n Object.assign(mergedConfig, { data: binding.value });\n }\n\n return mergedConfig;\n}\n\ninterface DragHTMLElement extends HTMLElement {\n dragConfig?: DragConfig;\n boundDragListener?: (event: MouseEvent | TouchEvent) => boolean;\n}\n\n/**\n * Directive for making elements draggable.\n *\n * Usage:\n * <div v-draggable=\"{ data: {...}, onDrop() {...} }\"></div>\n *\n * See the {DragConfig} for all possible config options.\n */\nexport const draggable: Directive = {\n mounted(el: DragHTMLElement, binding) {\n const dragConfig = mergeConfigs(defaultDragConfig, binding as { value: unknown }) as DragConfig;\n el.dragConfig = dragConfig;\n el.boundDragListener = onDrag.bind(this, el, el.dragConfig);\n\n if (!dragConfig.disabled) {\n el.classList.add(dragConfig.draggableCls);\n el.addEventListener(\"mousedown\", el.boundDragListener);\n el.addEventListener(\"touchstart\", el.boundDragListener);\n }\n },\n\n updated(el: DragHTMLElement, binding) {\n const dragConfig = mergeConfigs(defaultDragConfig, binding as { value: unknown }) as DragConfig;\n\n if (el.dragConfig && el.dragConfig.disabled !== dragConfig.disabled) {\n if (!dragConfig.disabled) {\n el.classList.remove(el.dragConfig.draggableCls);\n el.classList.add(dragConfig.draggableCls);\n if (el.boundDragListener) {\n el.addEventListener(\"mousedown\", el.boundDragListener);\n el.addEventListener(\"touchstart\", el.boundDragListener);\n }\n } else {\n el.classList.remove(el.dragConfig.draggableCls);\n if (el.boundDragListener) {\n el.removeEventListener(\"mousedown\", el.boundDragListener);\n el.removeEventListener(\"touchstart\", el.boundDragListener);\n }\n }\n }\n\n // @ts-expect-error - typescript support is missing here\n Object.assign(el.dragConfig, dragConfig);\n },\n\n unmounted(el: DragHTMLElement, binding) {\n const dragConfig = mergeConfigs(defaultDragConfig, binding as { value: unknown }) as DragConfig;\n\n el.classList.remove(dragConfig.draggableCls);\n\n if (el.boundDragListener) {\n el.removeEventListener(\"mousedown\", el.boundDragListener);\n el.removeEventListener(\"touchstart\", el.boundDragListener);\n }\n },\n};\n\n/**\n * Directive to define an element as a drop zone.\n *\n * Usage:\n * <div v-droppable=\"{ data: {...}, onDrop() {...} }\"></div>\n *\n * See the {dropConfig} for all possible config options.\n */\nexport const droppable: Directive = {\n mounted(el, binding) {\n const dropConfig = mergeConfigs(defaultDropConfig, binding as { value: unknown }) as DropConfig;\n\n dropZones.push({ el, dropConfig });\n\n el.classList.add(dropConfig.droppableCls);\n el.addEventListener(\"mouseenter\", enterDropZone.bind(this, el, dropConfig));\n el.addEventListener(\"mouseleave\", leaveDropZone.bind(this, el, dropConfig));\n },\n\n unmounted(el, binding) {\n const dropConfig = mergeConfigs(defaultDropConfig, binding as { value: unknown }) as DropConfig;\n\n dropZones.splice(\n dropZones.findIndex((zone) => zone.el === el),\n 1,\n );\n\n el.classList.remove(dropConfig.droppableCls);\n el.removeEventListener(\"mouseenter\", enterDropZone.bind(this, el, dropConfig));\n el.removeEventListener(\"mouseleave\", leaveDropZone.bind(this, el, dropConfig));\n },\n\n updated: (el, binding) => {\n const dropZone = dropZones.find((zone) => zone.el === el);\n\n if (binding.value instanceof Object) {\n // @ts-expect-error - typescript support is missing here\n Object.assign(dropZone?.dropConfig, binding.value);\n } else {\n // @ts-expect-error - typescript support is missing here\n Object.assign(dropZone?.dropConfig, { data: binding.value });\n }\n },\n};\n\nfunction clearAllDropZoneHighlights() {\n dropZones.forEach((zone) => {\n zone.el.classList.remove(zone.dropConfig.validDropCls);\n zone.el.classList.remove(zone.dropConfig.invalidDropCls);\n });\n}\n","<template>\n <div class=\"mt-popover-item-result\">\n <mt-search v-if=\"!hideSearch\" size=\"small\" @update:modelValue=\"$emit('search', $event)\" />\n\n <template\n v-for=\"group in [undefined, ...groups]\"\n :key=\"'transition-group-' + (group && group.id)\"\n >\n <transition name=\"option-fade\">\n <div\n v-if=\"group && getOptionsForGroup(group.id).length > 0\"\n :key=\"group.id\"\n class=\"mt-popover-item-result__group-header\"\n :aria-label=\"group.label\"\n >\n <mt-text\n as=\"span\"\n size=\"xs\"\n color=\"color-text-secondary-default\"\n class=\"mt-popover-item-result__group-label\"\n >\n {{ group.label }}\n </mt-text>\n\n <button\n v-if=\"group.actionLabel\"\n type=\"button\"\n class=\"mt-popover-item-result__group-action\"\n @click=\"() => $emit('click-group-action', group.id)\"\n >\n {{ group.actionLabel }}\n </button>\n </div>\n </transition>\n\n <mt-smooth-reflow>\n <transition-group name=\"option-item\" tag=\"div\">\n <div\n v-for=\"option in getOptionsForGroup(group && group.id)\"\n :key=\"option.id\"\n class=\"mt-popover-item-result__option\"\n :aria-label=\"(group && group.label ? group.label : 'No group') + ': ' + option.label\"\n >\n <div\n v-if=\"isOptionDraggable(option)\"\n v-droppable=\"{ ...dropConfig, data: { ...option, dropZone: 'before' } }\"\n class=\"mt-popover-item-result__option_drop_before\"\n />\n\n <mt-popover-item\n v-draggable=\"{ ...getDragConfigForOption(option), data: option }\"\n class=\"mt-popover-item-result__option_item\"\n :is-option-item=\"isOptionDraggable(option)\"\n :label=\"option.label\"\n :show-checkbox=\"selectable\"\n :checkbox-checked=\"option.isSelected\"\n :contextual-detail=\"option.contextualDetail\"\n :meta-copy=\"option.metaCopy\"\n :show-visibility=\"hidable && option.isHidable\"\n :visible=\"option.isVisible\"\n :icon=\"getIconForOption(option)\"\n :on-label-click=\"\n option.isClickable ? () => $emit('click-option', option.id) : undefined\n \"\n :disabled=\"option.disabled\"\n @change-checkbox=\"$emit('change-checkbox', option.id, $event)\"\n @change-visibility=\"$emit('change-visibility', option.id, $event)\"\n />\n\n <div\n v-if=\"isOptionDraggable(option)\"\n v-droppable=\"{ ...dropConfig, data: { ...option, dropZone: 'after' } }\"\n class=\"mt-popover-item-result__option_drop_after\"\n />\n </div>\n </transition-group>\n </mt-smooth-reflow>\n </template>\n </div>\n</template>\n\n<script lang=\"ts\">\nimport type { PropType } from \"vue\";\nimport { defineComponent } from \"vue\";\nimport MtSearch from \"../../navigation/mt-search/mt-search.vue\";\nimport MtPopoverItem from \"../mt-popover-item/mt-popover-item.vue\";\nimport MtSmoothReflow from \"../../_internal/mt-smooth-reflow.vue\";\nimport type { DropConfig, DragConfig } from \"../../../directives/dragdrop.directive\";\nimport { draggable, droppable } from \"../../../directives/dragdrop.directive\";\nimport MtText from \"@/components/content/mt-text/mt-text.vue\";\n\nexport interface Option {\n id: string;\n label: string;\n metaCopy?: string;\n contextualDetail?: string;\n parentGroup?: string;\n position?: number;\n isVisible?: boolean;\n isSelected?: boolean;\n isClickable?: boolean;\n isHidable?: boolean;\n isSortable?: boolean;\n disabled?: boolean;\n}\n\nexport interface Group {\n id: string;\n label: string;\n actionLabel?: string;\n}\n\nexport default defineComponent({\n name: \"MtPopoverItemResult\",\n directives: {\n draggable: draggable,\n droppable: droppable,\n },\n components: {\n \"mt-search\": MtSearch,\n \"mt-popover-item\": MtPopoverItem,\n \"mt-smooth-reflow\": MtSmoothReflow,\n \"mt-text\": MtText,\n },\n props: {\n options: {\n type: Array as PropType<Option[]>,\n required: true,\n },\n groups: {\n type: Array as PropType<Group[]>,\n required: false,\n default: () => [],\n },\n hideSearch: {\n type: Boolean,\n default: false,\n },\n draggable: {\n type: Boolean,\n default: false,\n },\n selectable: {\n type: Boolean,\n default: false,\n },\n hidable: {\n type: Boolean,\n default: false,\n },\n },\n emits: [\n \"change-checkbox\",\n \"change-visibility\",\n \"click-group-action\",\n \"click-option\",\n \"change-order\",\n \"search\",\n ],\n setup(props, { emit }) {\n const dropConfig: Partial<DropConfig & { dropZone?: \"before\" | \"after\" }> = {};\n\n const dragConfig: Partial<DragConfig<Option & { dropZone?: \"before\" | \"after\" }>> = {\n disabled: !props.draggable,\n delay: 200,\n onDragStart: () => {\n document.body.classList.add(\"is-popover-item-result-dragging\");\n },\n onDrop: (dragConfigData, dropConfigData) => {\n document.body.classList.remove(\"is-popover-item-result-dragging\");\n\n emit(\"change-order\", {\n itemId: dragConfigData?.id,\n dropZone: dropConfigData?.dropZone,\n dropId: dropConfigData?.id,\n });\n },\n };\n\n const isOptionDraggable = (option: Option) => {\n return props.draggable && option.isSortable;\n };\n\n const getDragConfigForOption = (option: Option) => {\n return {\n ...dragConfig,\n disabled: !isOptionDraggable(option),\n };\n };\n\n const getOptionsForGroup = (groupId: string | undefined) => {\n return props.options.filter((option) => option.parentGroup === groupId);\n };\n\n const getIconForOption = (option: Option) => {\n if (isOptionDraggable(option)) {\n return \"solid-grip-vertical-s\";\n }\n\n if (props.draggable) {\n return \"solid-thumbtack\";\n }\n\n return undefined;\n };\n\n return {\n getOptionsForGroup,\n getDragConfigForOption,\n isOptionDraggable,\n getIconForOption,\n dropConfig,\n dragConfig,\n };\n },\n});\n</script>\n\n<style lang=\"scss\">\n/**\n* Use inter-font instead of normal font for popover. Also add the new variables to this file.\n*/\n$font-family-default:\n \"Inter\",\n -apple-system,\n BlinkMacSystemFont,\n \"San Francisco\",\n \"Segoe UI\",\n Roboto,\n \"Helvetica Neue\",\n sans-serif;\n$font-family-variables:\n \"Inter var\",\n -apple-system,\n BlinkMacSystemFont,\n \"San Francisco\",\n \"Segoe UI\",\n Roboto,\n \"Helvetica Neue\",\n sans-serif;\n$font-family-default-feature-settings:\n \"ss01\" on,\n \"ss02\" on,\n \"case\" on,\n \"cpsp\" on,\n \"zero\" on,\n \"cv09\" on,\n \"cv07\" on,\n \"cv06\" on,\n \"cv10\" on,\n \"cv11\" on;\n\n$line-height-auto: auto;\n$line-height-xs: 18px;\n$line-height-sm: 20px;\n$line-height-md: 24px;\n$line-height-lg: 28px;\n\n$color-custom-dark: #0f172a;\n$color-custom-grey: #64748b;\n$color-custom-lightgrey: #cbd5e1;\n$color-custom-border: #e5e7eb;\n\n$scrollShadowSize: 16px;\n$scrollShadowColor: rgba(120, 120, 120, 0.2);\n\n.mt-popover-item-result {\n &__group-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: var(--scale-size-4);\n margin-top: var(--scale-size-8);\n }\n\n &__group-label {\n text-transform: uppercase;\n }\n\n &__group-action {\n transition: 0.3s all ease;\n background-color: transparent;\n border: none;\n color: var(--color-text-brand-default);\n font-family: var(--font-family-body);\n font-size: var(--font-size-xs);\n line-height: var(--font-line-height-xs);\n font-weight: var(--font-weight-semibold);\n text-decoration: underline;\n cursor: pointer;\n\n &:hover {\n color: $color-shopware-brand-800;\n }\n\n &:active {\n color: $color-shopware-brand-900;\n }\n }\n\n &__option {\n position: relative;\n }\n\n [class^=\"mt-popover-item-result__option_drop_\"] {\n position: absolute;\n height: 50%;\n width: 100%;\n left: 0;\n opacity: 0;\n pointer-events: none;\n transition: 0.15s all ease;\n\n &.is--valid-drop {\n opacity: 1;\n }\n }\n\n $dropzone-highlight-width: 4px;\n $dropzone-highlight-negative-width: -4px;\n\n &__option_drop_before {\n top: 0;\n box-shadow: inset 0px $dropzone-highlight-width $dropzone-highlight-width\n $dropzone-highlight-negative-width $color-shopware-brand-900;\n }\n\n &__option_drop_after {\n bottom: 0;\n box-shadow: inset 0px $dropzone-highlight-negative-width $dropzone-highlight-width\n $dropzone-highlight-negative-width $color-shopware-brand-900;\n }\n\n .mt-popover-item {\n transition: 0.3s all ease;\n padding-top: var(--scale-size-4);\n padding-bottom: var(--scale-size-4);\n\n &.is--dragging {\n opacity: 0.25;\n border: none;\n background-color: inherit;\n }\n\n &.is--dragging > * {\n opacity: 1;\n }\n }\n\n .option-item-enter-active,\n .option-item-leave-active {\n transition: opacity 0.5s;\n }\n\n .option-item-leave-active {\n transition: opacity 0.2s;\n position: absolute;\n opacity: 0;\n }\n\n .option-item-enter {\n opacity: 0;\n }\n\n .option-item-move {\n transition: transform 0.3s ease;\n }\n\n .option-fade-enter-active,\n .option-fade-leave-active {\n transition: opacity 0.3s;\n }\n .option-fade-enter,\n .option-fade-leave-to {\n opacity: 0;\n }\n}\n\nbody.is-popover-item-result-dragging {\n [class^=\"mt-popover-item-result__option_drop_\"] {\n pointer-events: all;\n }\n\n .mt-popover-item {\n &.is--drag-element {\n box-shadow: none;\n transition: 0.3s rotate ease-in-out;\n }\n }\n}\n</style>\n"],"names":["MtPopoverItem","_resolveDirective","_createElementBlock","_createBlock","_createCommentVNode","_openBlock","_Fragment","_renderList","_createVNode","_Transition","getOptionsForGroup","_withCtx","_createTextVNode","_toDisplayString","_TransitionGroup","isOptionDraggable","_withDirectives","selectable","hidable","getIconForOption","$emit","getDragConfigForOption"],"mappings":"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"}