ember-sortable 5.4.1 → 5.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/declarations/modifiers/sortable-group.d.ts +12 -12
- package/declarations/modifiers/sortable-item.d.ts +3 -3
- package/dist/{_rollupPluginBabelHelpers-a7bede49.js → _rollupPluginBabelHelpers-060f9720.js} +6 -6
- package/dist/_rollupPluginBabelHelpers-060f9720.js.map +1 -0
- package/dist/modifiers/sortable-group.js +210 -218
- package/dist/modifiers/sortable-group.js.map +1 -1
- package/dist/modifiers/sortable-handle.js +1 -1
- package/dist/modifiers/sortable-item.js +37 -37
- package/dist/modifiers/sortable-item.js.map +1 -1
- package/dist/services/ember-sortable-internal-state.js +1 -1
- package/package.json +1 -1
- package/dist/_rollupPluginBabelHelpers-a7bede49.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sortable-group.js","sources":["../../src/modifiers/sortable-group.ts"],"sourcesContent":["/* eslint-disable ember/no-computed-properties-in-native-classes */\n/* eslint-disable ember/no-incorrect-calls-with-inline-anonymous-functions */\nimport Modifier from 'ember-modifier';\nimport { action, computed, set } from '@ember/object';\nimport {\n isDownArrowKey,\n isEnterKey,\n isEscapeKey,\n isLeftArrowKey,\n isRightArrowKey,\n isSpaceKey,\n isUpArrowKey,\n} from '../utils/keyboard.ts';\nimport { ANNOUNCEMENT_ACTION_TYPES } from '../utils/constant.ts';\nimport { getGap } from '../utils/css-calculation.ts';\nimport { defaultA11yAnnouncementConfig, type A11yAnnouncementConfig } from '../utils/defaults.ts';\nimport { next, schedule, scheduleOnce } from '@ember/runloop';\nimport * as s from '@ember/service';\nimport { registerDestructor, isDestroyed } from '@ember/destroyable';\nimport type { ArgsFor, PositionalArgs, NamedArgs } from 'ember-modifier';\nimport type Owner from '@ember/owner';\nimport type EmberSortableService from '../services/ember-sortable-internal-state.ts';\nimport type { Group } from '../services/ember-sortable-internal-state.ts';\nimport type SortableItemModifier from './sortable-item.ts';\nimport type { MoveDirection } from './sortable-item.ts';\n\nconst service = s.service ?? s.inject;\n\n// Tolerance for the grid direction's wrap check, absorbing residual\n// subpixel float error so a row that truly fits doesn't wrap on noise.\nconst GRID_WRAP_EPSILON = 1;\n\nconst NO_MODEL: HandleVisualClass = {};\n\nexport interface HandleVisualClass {\n UP?: string;\n DOWN?: string;\n LEFT?: string;\n RIGHT?: string;\n}\n\ninterface Position {\n x: number;\n y: number;\n}\n\nexport type TDirection = 'x' | 'y' | 'grid';\n\ninterface SortableGroupModifierSignature<T> {\n Args: {\n Named: {\n direction?: TDirection;\n groupName?: string;\n disabled?: boolean;\n handleVisualClass?: HandleVisualClass;\n a11yAnnouncementConfig?: A11yAnnouncementConfig;\n itemVisualClass?: string;\n a11yItemName?: string;\n onChange: (itemModels: T[], draggedModel: T | undefined) => void;\n };\n Positional: unknown[];\n };\n Element: HTMLElement;\n}\n\n/**\n * Modifier to apply a11y support to a group container for the Sortable component\n *\n * @param {String} [a11yItemName] A name for each model, used for creating more meaningful a11y announcements.\n * @param {Object} [a11yAnnouncementConfig] A map of action to function to build meaningful a11y announcements.\n * @param {String} [itemVisualClass] A class for styling visual indicators on the yielded `sortable-item`.\n * @param {Object} [handleVisualClass] An object for styling visual indicators on the yielded `sortable-handle` on different `move`.\n * @param {Function} [onChange] An optional callback for when position rearrangements are confirmed.\n *\n * @module drag-drop/draggable-group\n * @example\n * <ol {{sortable-group onChange=this.update a11yAnnouncementConfig=this.myA11yConfig}}>\n * {{#each model.items as |item|}}\n * <li {{sortable-item model=item}}>\n * {{item.name}}\n * <span class=\"handle\" {{sortable-handle}}>↕</span>\n * </li>\n * {{/each}}\n * </ol>\n */\nexport default class SortableGroupModifier<T> extends Modifier<SortableGroupModifierSignature<T>> {\n /** Primary keyboard utils */\n // Tracks the currently selected item\n _selectedItem: SortableItemModifier<T> | null = null;\n _group: SortableGroupModifier<T> | null = null;\n _firstItemPosition?: Position;\n _groupDef!: Group<T>;\n\n // Tracks the current move\n move = null;\n moves: [number, number][] = [];\n\n // Tracks the status of keyboard reorder mode\n isKeyboardReorderModeEnabled = false;\n\n isKeyDownEnabled = false;\n\n // Tracks if we're still performing a programmatic focus.\n isRetainingFocus = false;\n /** End of keyboard utils */\n\n get disabled() {\n return this.named.disabled || false;\n }\n\n /** Start of a11y properties */\n /**\n * @property an object containing different classes for visual indicators\n * @type {Object}\n * @default null\n * @example\n * {\n * UP: 'up'\n * DOWN: 'down',\n * LEFT: 'left',\n * RIGHT: 'right',\n * }\n */\n get handleVisualClass(): HandleVisualClass {\n return this.named.handleVisualClass || NO_MODEL;\n }\n\n /**\n * @property an object containing functions for producing screen reader announcements\n * @type {Object}\n * @example\n * {\n * MOVE: function() {},\n * ACTIVATE: function() {},\n * CONFIRM: function() {},\n * CANCEL: function() {},\n * }\n */\n get a11yAnnouncementConfig(): A11yAnnouncementConfig {\n return this.named.a11yAnnouncementConfig || defaultA11yAnnouncementConfig;\n }\n\n get itemVisualClass(): string {\n return this.named.itemVisualClass || 'is-activated';\n }\n\n get a11yItemName(): string {\n return this.named.a11yItemName || 'item';\n }\n /** End of a11y properties */\n\n /**\n * Make sure that we cancel any ongoing keyboard operation when the focus is lost from the handle.\n * Because this can be fired pre-maturely, effectively cancelling before other keyboard operations,\n * we need to wait until other operations are completed, so this will cancel properly.\n *\n * @param {Event} event a DOM event.\n */\n @action\n focusOut() {\n if (!this.isRetainingFocus && !this._isElementWithinHandle(document.activeElement)) {\n this.cancelKeyboardSelection();\n }\n }\n\n /**\n * Explanation\n * 1. `KeyboardReorderMode` is disabled: users can activate it via ENTER or SPACE.\n * 2. `KeyboardReorderMode` is enabled: users can reorder via UP or DOWN arrow keys. TODO: Expand to more keys, e.g LEFT, RIGHT\n * 3. `KeyboardReorderMode` is enabled: users can finalize/save the reordering via ENTER or SPACE.\n * 4. `KeyboardReorderMode` is enabled: users can discard the reordering via ESC.\n *\n * @param {Event} event a DOM event\n */\n @action\n keyDown(event: KeyboardEvent) {\n if (!this.isKeyDownEnabled) {\n return;\n }\n\n // Note: If handle is specified, we need to target the keyDown on the handle\n const isKeyboardReorderModeEnabled = this.isKeyboardReorderModeEnabled;\n\n if (!isKeyboardReorderModeEnabled && (isEnterKey(event) || isSpaceKey(event))) {\n const _selectedItem = this._selectedItem;\n\n if (!_selectedItem) {\n return;\n }\n\n this._prepareKeyboardReorderMode();\n this._announceAction(ANNOUNCEMENT_ACTION_TYPES.ACTIVATE);\n this._updateItemVisualIndicators(_selectedItem, true);\n this._updateHandleVisualIndicators(_selectedItem, true);\n\n this.isRetainingFocus = true;\n\n scheduleOnce('render', this, () => {\n this.element.focus();\n this.isRetainingFocus = false;\n });\n\n // Prevent the default scroll\n event.preventDefault();\n return;\n }\n\n if (isKeyboardReorderModeEnabled) {\n this._handleKeyboardReorder(event);\n event.preventDefault();\n }\n }\n\n /**\n * Checks if the given element is a child of a handle.\n *\n * @param {Element} element a DOM element.\n */\n _isElementWithinHandle(element: Element | null): boolean {\n return !!element?.closest(`[data-sortable-handle]`);\n }\n\n /**\n * Moves an sortedItem from one index to another index, effectively performing an reorder.\n *\n * @param {Integer} fromIndex the original index\n * @param {Integer} toIndex the new index\n */\n _move(fromIndex: number, toIndex: number) {\n const direction = this.direction;\n const sortedItems = this.sortedItems;\n const item = sortedItems[fromIndex];\n const nextItem = sortedItems[toIndex];\n\n if (!nextItem || !item) {\n return;\n }\n\n // switch direction values to notify sortedItems to update, so it sorts by direction.\n let value;\n const dimension = direction === 'y' ? 'height' : 'width';\n // DOWN or RIGHT\n if (toIndex > fromIndex) {\n if (direction === 'grid') {\n const valueX = item.x;\n const valueY = item.y;\n item.x = nextItem.x + (nextItem.width - item.width);\n item.y = nextItem.y + (nextItem.height - item.height);\n nextItem.x = valueX;\n nextItem.y = valueY;\n } else {\n value = item[direction];\n set(item, direction, nextItem[direction] + (nextItem[dimension] - item[dimension]));\n set(nextItem, direction, value);\n }\n // UP or LEFT\n } else {\n if (direction === 'grid') {\n const valueX = nextItem.x;\n const valueY = nextItem.y;\n nextItem.x = item.x + (item.width - nextItem.width);\n nextItem.y = item.y + (item.height - nextItem.height);\n item.x = valueX;\n item.y = valueY;\n } else {\n value = nextItem[direction];\n set(nextItem, direction, item[direction] + (item[dimension] - nextItem[dimension]));\n set(item, direction, value);\n }\n }\n }\n\n /**\n * Handles all of the keyboard operations, such as\n * 1. Keyboard navigation for UP, DOWN, LEFT, RIGHT\n * 2. Confirming reorder\n * 3. Discard reorder\n * 4. Also handles refocusing the element that triggered the interaction.\n *\n * @param {Event} event a DOM event.\n */\n _handleKeyboardReorder(event: KeyboardEvent) {\n const direction = this.direction;\n const selectedItem = this._selectedItem;\n\n if (!selectedItem) {\n return;\n }\n\n if (direction === 'y' && isDownArrowKey(event)) {\n this.moveItem(selectedItem, 1);\n } else if (direction === 'y' && isUpArrowKey(event)) {\n this.moveItem(selectedItem, -1);\n } else if ((direction === 'x' || direction === 'grid') && isLeftArrowKey(event)) {\n this.moveItem(selectedItem, -1);\n } else if ((direction === 'x' || direction === 'grid') && isRightArrowKey(event)) {\n this.moveItem(selectedItem, 1);\n } else if (isEnterKey(event) || isSpaceKey(event)) {\n // confirm will reset the selectedItem, so caching it here before we remove it.\n const itemElement = selectedItem.element;\n this._announceAction(ANNOUNCEMENT_ACTION_TYPES.CONFIRM);\n this.confirmKeyboardSelection();\n\n this.isRetainingFocus = true;\n scheduleOnce('render', this, () => this._focusItem(itemElement));\n } else if (isEscapeKey(event)) {\n // cancel will reset the selectedItem, so caching it here before we remove it.\n const _selectedItemElement = selectedItem.element;\n this._announceAction(ANNOUNCEMENT_ACTION_TYPES.CANCEL);\n this.cancelKeyboardSelection();\n\n this.isRetainingFocus = true;\n scheduleOnce('render', this, () => {\n const moves = this.moves;\n if (moves && moves[0]) {\n const sortedItems = this.sortedItems;\n const fromIndex = moves[0][1];\n const itemElement = sortedItems[fromIndex]?.element;\n if (itemElement) {\n this._focusItem(itemElement);\n }\n } else {\n this._focusItem(_selectedItemElement);\n }\n this.isRetainingFocus = false;\n });\n }\n }\n\n /**\n * Moves the item to its new position and adds the move to our history.\n *\n * @param {SortableItemModifier} item the item to be moved.\n * @param {Integer} delta how much to move index-wise.\n */\n moveItem(item: SortableItemModifier<T>, delta: number) {\n const sortedItems = this.sortedItems;\n const moves = this.moves;\n\n const sortedIndex = sortedItems.indexOf(item);\n const newSortedIndex = sortedIndex + delta;\n\n // If out of bounds, we don't do anything.\n if (newSortedIndex < 0 || newSortedIndex >= sortedItems.length) {\n return;\n }\n this._announceAction(ANNOUNCEMENT_ACTION_TYPES.MOVE, delta);\n // Guarantees that the before the UI is fully rendered before we move again.\n scheduleOnce('render', this, () => {\n this._move(sortedIndex, newSortedIndex);\n this._updateHandleVisualIndicators(item, true);\n\n moves.push([sortedIndex, newSortedIndex]);\n });\n }\n\n /**\n * Handles all the necessary operations needed for cancelling the current keyboard selection.\n * 1. Disables keyboard reorder mode.\n * 2. Undo all of the tracked moves.\n * 3. Tears down the application container, so we are not focus locked within the application.\n * 4. Resets the current selected item.\n */\n @action\n cancelKeyboardSelection() {\n const _selectedItem = this._selectedItem;\n\n if (!_selectedItem) {\n return;\n }\n\n this._disableKeyboardReorderMode();\n // Revert the process by reversing the move.\n const moves = this.moves;\n while (moves.length > 0) {\n const move = moves.pop();\n const fromIndex = move ? move[1] : 0;\n const toIndex = move ? move[0] : 0;\n this._move(fromIndex, toIndex);\n }\n this._tearDownA11yApplicationContainer();\n this._updateItemVisualIndicators(_selectedItem, false);\n this._updateHandleVisualIndicators(_selectedItem, false);\n this._resetItemSelection();\n }\n\n /**\n * Handles all th necessary operations needed for confirming the current keyboard selection.\n * 1. Disables keyboard reorder mode.\n * 2. Tears down the application container, so we are not focus locked within the container.\n * 3. Make sure to update and sync all the internal items and UI.\n * 4. Triggers the `onChange` action if provided.\n * 5. Resets the currently selected item.\n */\n confirmKeyboardSelection() {\n const _selectedItem = this._selectedItem;\n\n if (!_selectedItem) {\n return;\n }\n\n this.moves = [];\n this._disableKeyboardReorderMode();\n this._tearDownA11yApplicationContainer();\n set(_selectedItem, 'wasDropped', true);\n this.commit();\n this._updateItemVisualIndicators(_selectedItem, false);\n this._updateHandleVisualIndicators(_selectedItem, false);\n this._resetItemSelection();\n }\n\n /**\n * Announces the message constructed from `a11yAnnouncementConfig`.\n *\n * @param {String} type the action type.\n * @param {Number} delta how much distance (item-wise) is being moved.\n */\n _announceAction(type: keyof A11yAnnouncementConfig, delta: number = 0): void {\n const a11yAnnouncementConfig = this.a11yAnnouncementConfig;\n const a11yItemName = this.a11yItemName;\n\n if (!a11yItemName || !(type in a11yAnnouncementConfig)) {\n return;\n }\n\n const sortedItems = this.sortedItems;\n const _selectedItem = this._selectedItem;\n\n if (!_selectedItem) {\n return;\n }\n\n const index = sortedItems.indexOf(_selectedItem);\n const announcer = this.announcer;\n\n if (!announcer) {\n return;\n }\n\n const config = {\n a11yItemName,\n index: index,\n maxLength: sortedItems.length,\n direction: this.direction,\n delta,\n };\n\n const message = a11yAnnouncementConfig[type](config);\n // Cancel the reset of a previous message so it can't clear this one early.\n clearTimeout(this._announcerResetTimer);\n announcer.textContent = message;\n\n // Reset the message after the message is announced. A native timer is used\n // so the reset doesn't hold up `settled()` in tests.\n this._announcerResetTimer = setTimeout(() => {\n announcer.textContent = '';\n }, 1000);\n }\n\n /**\n * Reset the selected item.\n */\n _resetItemSelection(): void {\n this._selectedItem = null;\n }\n\n /**\n * Updates the selected item's visual indicators.\n *\n * @param {SortableItemModifier} item the selected item.\n * @param {Boolean} isActive to activate or deactivate the class.\n */\n _updateItemVisualIndicators(item: SortableItemModifier<T>, isActive: boolean) {\n const itemVisualClass = this.itemVisualClass;\n\n if (!itemVisualClass || !item) {\n return;\n }\n\n if (isActive) {\n item.element.classList.add(itemVisualClass);\n } else {\n item.element.classList.remove(itemVisualClass);\n }\n }\n\n /**\n * Updates the selected item's handle's visual indicators\n *\n * @param {SortableItemModifier} item the selected item.\n * @param {boolean} isUpdate to update or not update.\n */\n _updateHandleVisualIndicators(item: SortableItemModifier<T>, isUpdate: boolean) {\n const handleVisualClass = this.handleVisualClass;\n\n if (handleVisualClass === NO_MODEL || !item) {\n return;\n }\n\n const sortedItems = this.sortedItems;\n const direction = this.direction;\n const index = sortedItems.indexOf(item);\n const handle = item.element.querySelector('[data-sortable-handle');\n const visualHandle = handle ? handle : item.element;\n const visualKeys: (keyof HandleVisualClass)[] = direction === 'y' ? ['UP', 'DOWN'] : ['LEFT', 'RIGHT'];\n\n visualKeys.forEach((visualKey) => {\n visualHandle.classList.remove(handleVisualClass[visualKey] ?? '');\n });\n\n if (!isUpdate) {\n return;\n }\n\n if (index > 0 && visualKeys[0]) {\n visualHandle.classList.add(handleVisualClass[visualKeys[0]] ?? '');\n }\n\n if (index < sortedItems.length - 1 && visualKeys[1]) {\n visualHandle.classList.add(handleVisualClass[visualKeys[1]] ?? '');\n }\n }\n\n /**\n * Sets focus on the current item or its handle.\n *\n * @param {Element} itemElement an DOM element representing an sortable-item.\n */\n _focusItem(itemElement: HTMLElement): void {\n const handle = itemElement.querySelector('[data-sortable-handle]') as HTMLElement | null;\n if (handle) {\n handle.focus();\n } else {\n // The consumer did not use a handle, so we set focus back to the item.\n itemElement.focus();\n }\n }\n\n /**\n * Enables keyboard reorder mode.\n */\n _enableKeyboardReorderMode(): void {\n this.isKeyboardReorderModeEnabled = true;\n }\n\n /**\n * Disables keyboard reorder mode\n */\n _disableKeyboardReorderMode(): void {\n this.isKeyboardReorderModeEnabled = false;\n }\n\n /**\n * Sets up the group as an application and make it programmatically focusable.\n */\n _setupA11yApplicationContainer(): void {\n this.element.setAttribute('role', 'application');\n this.element.tabIndex = -1;\n }\n\n /**\n * Tears down the `role=application` container.\n */\n _tearDownA11yApplicationContainer(): void {\n this.element.removeAttribute('role');\n this.element.removeAttribute('tabIndex');\n }\n\n _prepareKeyboardReorderMode(): void {\n this._enableKeyboardReorderMode();\n this._setupA11yApplicationContainer();\n }\n\n // Begin of API\n\n /**\n @property direction\n @type string\n @default y\n */\n get direction() {\n return this.named.direction || 'y';\n }\n\n /**\n Called when order of items has been changed\n @property onChange\n @type Function\n @param {Object} groupModel group model (omitted if not set)\n @param {Object[]} newModel models in their new order\n @param {Object} itemModel model just dragged\n @default null\n */\n get onChange() {\n return this.named.onChange;\n }\n\n @service('ember-sortable-internal-state')\n declare sortableService: EmberSortableService<T>;\n\n /**\n * This is the group name used to keep groups separate if there are more than one on the screen at a time.\n * If no group is assigned a default is used\n *\n * @default \"_EmberSortableGroup\"\n * @returns {*|string}\n */\n get groupName(): string {\n return this.named.groupName || '_EmberSortableGroup';\n }\n\n /**\n This is an array of SortableItemModifiers\n\n @property items\n @type SortableItemModifier[]\n */\n get items(): SortableItemModifier<T>[] {\n return this._groupDef.items;\n }\n set(items: SortableItemModifier<T>[]) {\n this._groupDef.items = items;\n }\n\n /**\n * Announcer element\n *\n * @type {Element}\n */\n announcer: Element | null = null;\n\n /**\n * Pending timer that resets the announcer message\n */\n _announcerResetTimer?: ReturnType<typeof setTimeout>;\n\n /**\n Position for the first item.\n If spacing is present, first item's position will have to change as well.\n @property firstItemPosition\n @type Number\n */\n @computed('direction', 'sortedItems')\n get firstItemPosition(): Position {\n const sortedItems = this.sortedItems;\n\n const item = sortedItems[0];\n\n if (!item) {\n return {\n x: 0,\n y: 0,\n };\n }\n\n return {\n x: item.x - item.spacing,\n y: item.y - item.spacing,\n };\n }\n\n /**\n An array of DOM elements.\n @property sortedItems\n @type SortableItemModifier[]\n */\n get sortedItems(): SortableItemModifier<T>[] {\n const direction = this.direction;\n\n const groupStyles = getComputedStyle(this.element);\n const groupWidth = parseFloat(groupStyles.width);\n\n return this.items.sort((a, b) => {\n if (direction === 'grid') {\n const { ax, ay, bx, by } = this._calculateGridPosition(a, b, groupWidth);\n if (ay == by) return ax - bx;\n return ay - by;\n }\n return a[direction] - b[direction];\n });\n }\n\n /**\n * Enables keyboard navigation\n */\n @action\n activateKeyDown(selectedItem: SortableItemModifier<T>): void {\n this._selectedItem = selectedItem;\n this.isKeyDownEnabled = true;\n }\n\n /**\n * Disables keyboard navigation\n * Currently used to handle keydown events bubbling up from\n * elements that aren't meant to invoke keyboard navigation\n * by ignoring them.\n */\n @action\n deactivateKeyDown(): void {\n this.isKeyDownEnabled = false;\n }\n\n /**\n Register the group with this Sortable.\n @method registerGroup\n @param {SortableGroupModifier} group\n */\n @action\n registerGroup(group: SortableGroupModifier<T>): void {\n this._group = group;\n }\n\n /**\n De-register the group with this Sortable.\n @method deregisterGroup\n @param {SortableGroupModifier} group\n */\n @action\n deregisterGroup(group: SortableGroupModifier<T>) {\n if (this._group === group) {\n this._group = null;\n }\n }\n\n /**\n Prepare for sorting.\n Main purpose is to stash the current firstItemPosition so\n we don’t incur expensive re-layouts.\n @method _prepare\n */\n @action\n prepare() {\n this._firstItemPosition = this.firstItemPosition;\n }\n\n /**\n Update item positions (relatively to the first element position).\n @method update\n @param {SortableItemModifier[]} sortedItems\n */\n @action\n update(sortedItems: SortableItemModifier<T>[]): void {\n if (!sortedItems) {\n sortedItems = this.sortedItems;\n }\n\n // Position of the first element\n let axis = this._firstItemPosition;\n\n // Just in case we haven’t called prepare first.\n if (axis === undefined) {\n axis = this.firstItemPosition;\n }\n\n const direction = this.direction;\n const gap = getGap(this.element);\n\n let position = 0;\n let groupPositionRight = 0;\n let lastTopOffset = 0;\n let maxPrevHeight = 0;\n\n if (direction === 'grid') {\n position = axis.x;\n lastTopOffset = axis.y;\n\n // `getBoundingClientRect` instead of `getComputedStyle(...).width`,\n // which serializes to only 3 decimal places and can itself introduce\n // rounding drift against item widths.\n groupPositionRight = position + this.element.getBoundingClientRect().width;\n } else {\n position = axis[direction];\n }\n\n sortedItems.forEach((item) => {\n if (direction === 'grid' && position + item.width > groupPositionRight + GRID_WRAP_EPSILON) {\n lastTopOffset = lastTopOffset + maxPrevHeight;\n position = axis.x;\n maxPrevHeight = 0;\n }\n\n if (!isDestroyed(item) && !item.isDragging) {\n // Round only at assignment to match offsetLeft/offsetTop's integer\n // rounding, so undragged items don't jitter by a fractional pixel.\n if (direction === 'grid') {\n item.x = Math.round(position);\n item.y = Math.round(lastTopOffset);\n } else {\n set(item, direction, Math.round(position));\n }\n }\n\n // add additional spacing around active element\n if (item.isBusy) {\n position += item.spacing * 2;\n }\n\n if (direction === 'grid') {\n if (item.height > maxPrevHeight) {\n maxPrevHeight = item.height + gap.vertical;\n }\n\n position += item.width + gap.horizontal;\n }\n if (direction === 'x') {\n position += item.width + gap.horizontal;\n }\n if (direction === 'y') {\n position += item.height + gap.vertical;\n }\n });\n }\n\n /**\n @method _commit\n */\n @action\n commit(): void {\n const items = this.sortedItems;\n const itemModels = items.map((item) => item.model);\n const draggedItem = items.find((item) => item.wasDropped);\n let draggedModel;\n\n if (draggedItem) {\n draggedItem.wasDropped = false; // Reset\n draggedModel = draggedItem.model;\n }\n\n this._updateItems();\n this._onChange(itemModels, draggedModel);\n }\n\n @action\n _onChange(itemModels: T[], draggedModel: T | undefined): void {\n if (this.onChange) {\n this.onChange(itemModels, draggedModel);\n }\n }\n\n /**\n * Keeps the UI in sync with actual changes.\n * Needed for drag and keyboard operations.\n */\n _updateItems(): void {\n const items = this.sortedItems;\n\n delete this._firstItemPosition;\n\n schedule('render', () => {\n items.forEach((item) => item.freeze());\n });\n\n schedule('afterRender', () => {\n items.forEach((item) => item.reset());\n });\n\n next(() => {\n schedule('render', () => {\n items.forEach((item) => item.thaw());\n });\n });\n }\n\n @action\n _createAnnouncer(): HTMLSpanElement {\n const announcer = document.createElement('span');\n announcer.setAttribute('aria-live', 'polite');\n announcer.classList.add('visually-hidden');\n return announcer;\n }\n\n _calculateGridPosition(\n a: SortableItemModifier<T>,\n b: SortableItemModifier<T>,\n groupWidth: number,\n ): {\n ax: number;\n ay: number;\n bx: number;\n by: number;\n } {\n const groupTopPos = (a.element.parentNode as HTMLElement | null)?.offsetTop ?? 0;\n const groupLeftPos = (a.element.parentNode as HTMLElement | null)?.offsetLeft ?? 0;\n\n const position = {\n ax: a.x,\n ay: a.y,\n bx: b.x,\n by: b.y,\n };\n\n if (a.isDragging) {\n const dragItemPos = this._calculateGridDragItemPos(\n position.ax,\n position.ay,\n position.bx,\n position.by,\n b.width,\n b.height,\n a.moveDirection,\n groupTopPos,\n groupLeftPos,\n groupWidth,\n );\n position.ax = dragItemPos.x;\n position.ay = dragItemPos.y;\n } else if (b.isDragging) {\n const dragItemPos = this._calculateGridDragItemPos(\n position.bx,\n position.by,\n position.ax,\n position.ay,\n a.width,\n a.height,\n b.moveDirection,\n groupTopPos,\n groupLeftPos,\n groupWidth,\n );\n position.bx = dragItemPos.x;\n position.by = dragItemPos.y;\n }\n\n // Math.hypot needs always a positive number (-5 = 5 in hypot).\n // As a negative number will be positive, we need to fake position from non dragged element\n if (a.isDragging && position.ax <= 0) {\n position.ax = 0;\n position.bx = 1;\n }\n\n if (b.isDragging && position.bx <= 0) {\n position.bx = 0;\n position.ax = 1;\n }\n\n return position;\n }\n\n _calculateGridDragItemPos(\n x: number,\n y: number,\n otherX: number,\n otherY: number,\n width: number,\n height: number,\n moveDirection: MoveDirection,\n groupTopPos: number,\n groupLeftPos: number,\n groupWidth: number,\n ): Position {\n const toleranceWidth = width / 4;\n const initialX = x;\n\n if (moveDirection.left) {\n x = x - toleranceWidth;\n }\n\n if (moveDirection.right) {\n x = x + toleranceWidth;\n // Calculate the maximum of items in row & the maximal x-position of last item\n const itemsPerRow = Math.floor(groupWidth / width);\n const possibleLastItemPos = (itemsPerRow - 1) * width + groupLeftPos;\n if (otherX > initialX && x + width > possibleLastItemPos - 1) {\n // Removing one pixel is necessary to move drag item before other element\n x = possibleLastItemPos - 1;\n }\n }\n\n if (y < groupTopPos) {\n y = groupTopPos;\n }\n\n const toleranceHeight = height / 4;\n\n // When item is moved a quarter of height to top, user wants to move up\n if (moveDirection.top && y - height + toleranceHeight <= otherY && y >= otherY) {\n y = otherY;\n // tolerance that it doesn't jump directly in previews line\n } else if (moveDirection.top && y >= otherY - toleranceHeight && y <= otherY) {\n y = otherY;\n }\n\n // When item is moved a quarter of height to bottom, user wants to move down\n if (moveDirection.bottom && y <= otherY + height - toleranceHeight && y >= otherY) {\n y = otherY;\n // tolerance that it doesn't jump directly in next line\n } else if (moveDirection.bottom && y > otherY - toleranceHeight && y <= otherY) {\n y = otherY;\n }\n\n return {\n x: x,\n y: y,\n };\n }\n\n // end of API\n\n addEventListener(): void {\n this.element.addEventListener('keydown', this.keyDown);\n this.element.addEventListener('focusout', this.focusOut);\n }\n\n removeEventListener(): void {\n this.element.removeEventListener('keydown', this.keyDown);\n this.element.removeEventListener('focusout', this.focusOut);\n }\n\n element!: HTMLElement;\n didSetup = false;\n named!: NamedArgs<SortableGroupModifierSignature<T>>;\n\n constructor(owner: Owner, args: ArgsFor<SortableGroupModifierSignature<T>>) {\n super(owner, args);\n registerDestructor(this, cleanup);\n }\n\n override modify(\n element: HTMLElement,\n _positional: PositionalArgs<SortableGroupModifierSignature<T>>,\n named: NamedArgs<SortableGroupModifierSignature<T>>,\n ) {\n this.element = element;\n this.named = named;\n\n this.removeEventListener();\n\n if (!this.didSetup) {\n this._groupDef = this.sortableService.fetchGroup(this.groupName);\n this.announcer = this._createAnnouncer();\n this.element.insertAdjacentElement('afterend', this.announcer);\n this.sortableService.registerGroup(this.groupName, this);\n\n this.didSetup = true;\n }\n\n if (this.disabled) {\n return;\n }\n\n this.addEventListener();\n }\n}\n\n/**\n *\n * @param {SortableGroupModifier} instance\n */\nfunction cleanup<T>(instance: SortableGroupModifier<T>) {\n clearTimeout(instance._announcerResetTimer);\n if (instance.announcer?.parentNode) {\n instance.announcer.parentNode.removeChild(instance.announcer);\n }\n instance.removeEventListener();\n instance.sortableService.deregisterGroup(instance.groupName);\n}\n"],"names":["service","s","inject","GRID_WRAP_EPSILON","NO_MODEL","SortableGroupModifier","_dec","_dec2","computed","_class","Modifier","disabled","named","handleVisualClass","a11yAnnouncementConfig","defaultA11yAnnouncementConfig","itemVisualClass","a11yItemName","focusOut","isRetainingFocus","_isElementWithinHandle","document","activeElement","cancelKeyboardSelection","keyDown","event","isKeyDownEnabled","isKeyboardReorderModeEnabled","isEnterKey","isSpaceKey","_selectedItem","_prepareKeyboardReorderMode","_announceAction","ANNOUNCEMENT_ACTION_TYPES","ACTIVATE","_updateItemVisualIndicators","_updateHandleVisualIndicators","scheduleOnce","element","focus","preventDefault","_handleKeyboardReorder","closest","_move","fromIndex","toIndex","direction","sortedItems","item","nextItem","value","dimension","valueX","x","valueY","y","width","height","set","selectedItem","isDownArrowKey","moveItem","isUpArrowKey","isLeftArrowKey","isRightArrowKey","itemElement","CONFIRM","confirmKeyboardSelection","_focusItem","isEscapeKey","_selectedItemElement","CANCEL","moves","delta","sortedIndex","indexOf","newSortedIndex","length","MOVE","push","_disableKeyboardReorderMode","move","pop","_tearDownA11yApplicationContainer","_resetItemSelection","commit","type","index","announcer","config","maxLength","message","clearTimeout","_announcerResetTimer","textContent","setTimeout","isActive","classList","add","remove","isUpdate","handle","querySelector","visualHandle","visualKeys","forEach","visualKey","_enableKeyboardReorderMode","_setupA11yApplicationContainer","setAttribute","tabIndex","removeAttribute","onChange","groupName","items","_groupDef","firstItemPosition","spacing","groupStyles","getComputedStyle","groupWidth","parseFloat","sort","a","b","ax","ay","bx","by","_calculateGridPosition","activateKeyDown","deactivateKeyDown","registerGroup","group","_group","deregisterGroup","prepare","_firstItemPosition","update","axis","undefined","gap","getGap","position","groupPositionRight","lastTopOffset","maxPrevHeight","getBoundingClientRect","isDestroyed","isDragging","Math","round","isBusy","vertical","horizontal","itemModels","map","model","draggedItem","find","wasDropped","draggedModel","_updateItems","_onChange","schedule","freeze","reset","next","thaw","_createAnnouncer","createElement","groupTopPos","parentNode","offsetTop","groupLeftPos","offsetLeft","dragItemPos","_calculateGridDragItemPos","moveDirection","otherX","otherY","toleranceWidth","initialX","left","right","itemsPerRow","floor","possibleLastItemPos","toleranceHeight","top","bottom","addEventListener","removeEventListener","constructor","owner","args","_defineProperty","_initializerDefineProperty","_descriptor","registerDestructor","cleanup","modify","_positional","didSetup","sortableService","fetchGroup","insertAdjacentElement","_applyDecoratedDescriptor","prototype","action","Object","getOwnPropertyDescriptor","configurable","enumerable","writable","initializer","instance","removeChild"],"mappings":";;;;;;;;;;;;AA0BA,MAAMA,OAAO,GAAGC,CAAC,CAACD,OAAO,IAAIC,CAAC,CAACC,MAAM,CAAA;;AAErC;AACA;AACA,MAAMC,iBAAiB,GAAG,CAAC,CAAA;AAE3B,MAAMC,QAA2B,GAAG,EAAE,CAAA;AAiCtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACqBC,IAAAA,qBAAqB,IAAAC,IAAA,GAggBvCN,OAAO,CAAC,+BAA+B,CAAC,EAAAO,KAAA,GA6CxCC,QAAQ,CAAC,WAAW,EAAE,aAAa,CAAC,EAAAC,MAAA,GA7iBxB,MAAMJ,qBAAqB,SAAYK,QAAQ,CAAoC;AAmBhG;;EAEA,IAAIC,QAAQA,GAAG;AACb,IAAA,OAAO,IAAI,CAACC,KAAK,CAACD,QAAQ,IAAI,KAAK,CAAA;AACrC,GAAA;;AAEA;AACA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACE,IAAIE,iBAAiBA,GAAsB;AACzC,IAAA,OAAO,IAAI,CAACD,KAAK,CAACC,iBAAiB,IAAIT,QAAQ,CAAA;AACjD,GAAA;;AAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACE,IAAIU,sBAAsBA,GAA2B;AACnD,IAAA,OAAO,IAAI,CAACF,KAAK,CAACE,sBAAsB,IAAIC,6BAA6B,CAAA;AAC3E,GAAA;EAEA,IAAIC,eAAeA,GAAW;AAC5B,IAAA,OAAO,IAAI,CAACJ,KAAK,CAACI,eAAe,IAAI,cAAc,CAAA;AACrD,GAAA;EAEA,IAAIC,YAAYA,GAAW;AACzB,IAAA,OAAO,IAAI,CAACL,KAAK,CAACK,YAAY,IAAI,MAAM,CAAA;AAC1C,GAAA;AACA;;AAEA;AACF;AACA;AACA;AACA;AACA;AACA;AAEEC,EAAAA,QAAQA,GAAG;AACT,IAAA,IAAI,CAAC,IAAI,CAACC,gBAAgB,IAAI,CAAC,IAAI,CAACC,sBAAsB,CAACC,QAAQ,CAACC,aAAa,CAAC,EAAE;MAClF,IAAI,CAACC,uBAAuB,EAAE,CAAA;AAChC,KAAA;AACF,GAAA;;AAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EAEEC,OAAOA,CAACC,KAAoB,EAAE;AAC5B,IAAA,IAAI,CAAC,IAAI,CAACC,gBAAgB,EAAE;AAC1B,MAAA,OAAA;AACF,KAAA;;AAEA;AACA,IAAA,MAAMC,4BAA4B,GAAG,IAAI,CAACA,4BAA4B,CAAA;AAEtE,IAAA,IAAI,CAACA,4BAA4B,KAAKC,UAAU,CAACH,KAAK,CAAC,IAAII,UAAU,CAACJ,KAAK,CAAC,CAAC,EAAE;AAC7E,MAAA,MAAMK,aAAa,GAAG,IAAI,CAACA,aAAa,CAAA;MAExC,IAAI,CAACA,aAAa,EAAE;AAClB,QAAA,OAAA;AACF,OAAA;MAEA,IAAI,CAACC,2BAA2B,EAAE,CAAA;AAClC,MAAA,IAAI,CAACC,eAAe,CAACC,yBAAyB,CAACC,QAAQ,CAAC,CAAA;AACxD,MAAA,IAAI,CAACC,2BAA2B,CAACL,aAAa,EAAE,IAAI,CAAC,CAAA;AACrD,MAAA,IAAI,CAACM,6BAA6B,CAACN,aAAa,EAAE,IAAI,CAAC,CAAA;MAEvD,IAAI,CAACX,gBAAgB,GAAG,IAAI,CAAA;AAE5BkB,MAAAA,YAAY,CAAC,QAAQ,EAAE,IAAI,EAAE,MAAM;AACjC,QAAA,IAAI,CAACC,OAAO,CAACC,KAAK,EAAE,CAAA;QACpB,IAAI,CAACpB,gBAAgB,GAAG,KAAK,CAAA;AAC/B,OAAC,CAAC,CAAA;;AAEF;MACAM,KAAK,CAACe,cAAc,EAAE,CAAA;AACtB,MAAA,OAAA;AACF,KAAA;AAEA,IAAA,IAAIb,4BAA4B,EAAE;AAChC,MAAA,IAAI,CAACc,sBAAsB,CAAChB,KAAK,CAAC,CAAA;MAClCA,KAAK,CAACe,cAAc,EAAE,CAAA;AACxB,KAAA;AACF,GAAA;;AAEA;AACF;AACA;AACA;AACA;EACEpB,sBAAsBA,CAACkB,OAAuB,EAAW;AACvD,IAAA,OAAO,CAAC,CAACA,OAAO,EAAEI,OAAO,CAAC,wBAAwB,CAAC,CAAA;AACrD,GAAA;;AAEA;AACF;AACA;AACA;AACA;AACA;AACEC,EAAAA,KAAKA,CAACC,SAAiB,EAAEC,OAAe,EAAE;AACxC,IAAA,MAAMC,SAAS,GAAG,IAAI,CAACA,SAAS,CAAA;AAChC,IAAA,MAAMC,WAAW,GAAG,IAAI,CAACA,WAAW,CAAA;AACpC,IAAA,MAAMC,IAAI,GAAGD,WAAW,CAACH,SAAS,CAAC,CAAA;AACnC,IAAA,MAAMK,QAAQ,GAAGF,WAAW,CAACF,OAAO,CAAC,CAAA;AAErC,IAAA,IAAI,CAACI,QAAQ,IAAI,CAACD,IAAI,EAAE;AACtB,MAAA,OAAA;AACF,KAAA;;AAEA;AACA,IAAA,IAAIE,KAAK,CAAA;IACT,MAAMC,SAAS,GAAGL,SAAS,KAAK,GAAG,GAAG,QAAQ,GAAG,OAAO,CAAA;AACxD;IACA,IAAID,OAAO,GAAGD,SAAS,EAAE;MACvB,IAAIE,SAAS,KAAK,MAAM,EAAE;AACxB,QAAA,MAAMM,MAAM,GAAGJ,IAAI,CAACK,CAAC,CAAA;AACrB,QAAA,MAAMC,MAAM,GAAGN,IAAI,CAACO,CAAC,CAAA;AACrBP,QAAAA,IAAI,CAACK,CAAC,GAAGJ,QAAQ,CAACI,CAAC,IAAIJ,QAAQ,CAACO,KAAK,GAAGR,IAAI,CAACQ,KAAK,CAAC,CAAA;AACnDR,QAAAA,IAAI,CAACO,CAAC,GAAGN,QAAQ,CAACM,CAAC,IAAIN,QAAQ,CAACQ,MAAM,GAAGT,IAAI,CAACS,MAAM,CAAC,CAAA;QACrDR,QAAQ,CAACI,CAAC,GAAGD,MAAM,CAAA;QACnBH,QAAQ,CAACM,CAAC,GAAGD,MAAM,CAAA;AACrB,OAAC,MAAM;AACLJ,QAAAA,KAAK,GAAGF,IAAI,CAACF,SAAS,CAAC,CAAA;QACvBY,GAAG,CAACV,IAAI,EAAEF,SAAS,EAAEG,QAAQ,CAACH,SAAS,CAAC,IAAIG,QAAQ,CAACE,SAAS,CAAC,GAAGH,IAAI,CAACG,SAAS,CAAC,CAAC,CAAC,CAAA;AACnFO,QAAAA,GAAG,CAACT,QAAQ,EAAEH,SAAS,EAAEI,KAAK,CAAC,CAAA;AACjC,OAAA;AACA;AACF,KAAC,MAAM;MACL,IAAIJ,SAAS,KAAK,MAAM,EAAE;AACxB,QAAA,MAAMM,MAAM,GAAGH,QAAQ,CAACI,CAAC,CAAA;AACzB,QAAA,MAAMC,MAAM,GAAGL,QAAQ,CAACM,CAAC,CAAA;AACzBN,QAAAA,QAAQ,CAACI,CAAC,GAAGL,IAAI,CAACK,CAAC,IAAIL,IAAI,CAACQ,KAAK,GAAGP,QAAQ,CAACO,KAAK,CAAC,CAAA;AACnDP,QAAAA,QAAQ,CAACM,CAAC,GAAGP,IAAI,CAACO,CAAC,IAAIP,IAAI,CAACS,MAAM,GAAGR,QAAQ,CAACQ,MAAM,CAAC,CAAA;QACrDT,IAAI,CAACK,CAAC,GAAGD,MAAM,CAAA;QACfJ,IAAI,CAACO,CAAC,GAAGD,MAAM,CAAA;AACjB,OAAC,MAAM;AACLJ,QAAAA,KAAK,GAAGD,QAAQ,CAACH,SAAS,CAAC,CAAA;QAC3BY,GAAG,CAACT,QAAQ,EAAEH,SAAS,EAAEE,IAAI,CAACF,SAAS,CAAC,IAAIE,IAAI,CAACG,SAAS,CAAC,GAAGF,QAAQ,CAACE,SAAS,CAAC,CAAC,CAAC,CAAA;AACnFO,QAAAA,GAAG,CAACV,IAAI,EAAEF,SAAS,EAAEI,KAAK,CAAC,CAAA;AAC7B,OAAA;AACF,KAAA;AACF,GAAA;;AAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACET,sBAAsBA,CAAChB,KAAoB,EAAE;AAC3C,IAAA,MAAMqB,SAAS,GAAG,IAAI,CAACA,SAAS,CAAA;AAChC,IAAA,MAAMa,YAAY,GAAG,IAAI,CAAC7B,aAAa,CAAA;IAEvC,IAAI,CAAC6B,YAAY,EAAE;AACjB,MAAA,OAAA;AACF,KAAA;IAEA,IAAIb,SAAS,KAAK,GAAG,IAAIc,cAAc,CAACnC,KAAK,CAAC,EAAE;AAC9C,MAAA,IAAI,CAACoC,QAAQ,CAACF,YAAY,EAAE,CAAC,CAAC,CAAA;KAC/B,MAAM,IAAIb,SAAS,KAAK,GAAG,IAAIgB,YAAY,CAACrC,KAAK,CAAC,EAAE;AACnD,MAAA,IAAI,CAACoC,QAAQ,CAACF,YAAY,EAAE,CAAC,CAAC,CAAC,CAAA;AACjC,KAAC,MAAM,IAAI,CAACb,SAAS,KAAK,GAAG,IAAIA,SAAS,KAAK,MAAM,KAAKiB,cAAc,CAACtC,KAAK,CAAC,EAAE;AAC/E,MAAA,IAAI,CAACoC,QAAQ,CAACF,YAAY,EAAE,CAAC,CAAC,CAAC,CAAA;AACjC,KAAC,MAAM,IAAI,CAACb,SAAS,KAAK,GAAG,IAAIA,SAAS,KAAK,MAAM,KAAKkB,eAAe,CAACvC,KAAK,CAAC,EAAE;AAChF,MAAA,IAAI,CAACoC,QAAQ,CAACF,YAAY,EAAE,CAAC,CAAC,CAAA;KAC/B,MAAM,IAAI/B,UAAU,CAACH,KAAK,CAAC,IAAII,UAAU,CAACJ,KAAK,CAAC,EAAE;AACjD;AACA,MAAA,MAAMwC,WAAW,GAAGN,YAAY,CAACrB,OAAO,CAAA;AACxC,MAAA,IAAI,CAACN,eAAe,CAACC,yBAAyB,CAACiC,OAAO,CAAC,CAAA;MACvD,IAAI,CAACC,wBAAwB,EAAE,CAAA;MAE/B,IAAI,CAAChD,gBAAgB,GAAG,IAAI,CAAA;AAC5BkB,MAAAA,YAAY,CAAC,QAAQ,EAAE,IAAI,EAAE,MAAM,IAAI,CAAC+B,UAAU,CAACH,WAAW,CAAC,CAAC,CAAA;AAClE,KAAC,MAAM,IAAII,WAAW,CAAC5C,KAAK,CAAC,EAAE;AAC7B;AACA,MAAA,MAAM6C,oBAAoB,GAAGX,YAAY,CAACrB,OAAO,CAAA;AACjD,MAAA,IAAI,CAACN,eAAe,CAACC,yBAAyB,CAACsC,MAAM,CAAC,CAAA;MACtD,IAAI,CAAChD,uBAAuB,EAAE,CAAA;MAE9B,IAAI,CAACJ,gBAAgB,GAAG,IAAI,CAAA;AAC5BkB,MAAAA,YAAY,CAAC,QAAQ,EAAE,IAAI,EAAE,MAAM;AACjC,QAAA,MAAMmC,KAAK,GAAG,IAAI,CAACA,KAAK,CAAA;AACxB,QAAA,IAAIA,KAAK,IAAIA,KAAK,CAAC,CAAC,CAAC,EAAE;AACrB,UAAA,MAAMzB,WAAW,GAAG,IAAI,CAACA,WAAW,CAAA;UACpC,MAAMH,SAAS,GAAG4B,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;AAC7B,UAAA,MAAMP,WAAW,GAAGlB,WAAW,CAACH,SAAS,CAAC,EAAEN,OAAO,CAAA;AACnD,UAAA,IAAI2B,WAAW,EAAE;AACf,YAAA,IAAI,CAACG,UAAU,CAACH,WAAW,CAAC,CAAA;AAC9B,WAAA;AACF,SAAC,MAAM;AACL,UAAA,IAAI,CAACG,UAAU,CAACE,oBAAoB,CAAC,CAAA;AACvC,SAAA;QACA,IAAI,CAACnD,gBAAgB,GAAG,KAAK,CAAA;AAC/B,OAAC,CAAC,CAAA;AACJ,KAAA;AACF,GAAA;;AAEA;AACF;AACA;AACA;AACA;AACA;AACE0C,EAAAA,QAAQA,CAACb,IAA6B,EAAEyB,KAAa,EAAE;AACrD,IAAA,MAAM1B,WAAW,GAAG,IAAI,CAACA,WAAW,CAAA;AACpC,IAAA,MAAMyB,KAAK,GAAG,IAAI,CAACA,KAAK,CAAA;AAExB,IAAA,MAAME,WAAW,GAAG3B,WAAW,CAAC4B,OAAO,CAAC3B,IAAI,CAAC,CAAA;AAC7C,IAAA,MAAM4B,cAAc,GAAGF,WAAW,GAAGD,KAAK,CAAA;;AAE1C;IACA,IAAIG,cAAc,GAAG,CAAC,IAAIA,cAAc,IAAI7B,WAAW,CAAC8B,MAAM,EAAE;AAC9D,MAAA,OAAA;AACF,KAAA;IACA,IAAI,CAAC7C,eAAe,CAACC,yBAAyB,CAAC6C,IAAI,EAAEL,KAAK,CAAC,CAAA;AAC3D;AACApC,IAAAA,YAAY,CAAC,QAAQ,EAAE,IAAI,EAAE,MAAM;AACjC,MAAA,IAAI,CAACM,KAAK,CAAC+B,WAAW,EAAEE,cAAc,CAAC,CAAA;AACvC,MAAA,IAAI,CAACxC,6BAA6B,CAACY,IAAI,EAAE,IAAI,CAAC,CAAA;MAE9CwB,KAAK,CAACO,IAAI,CAAC,CAACL,WAAW,EAAEE,cAAc,CAAC,CAAC,CAAA;AAC3C,KAAC,CAAC,CAAA;AACJ,GAAA;;AAEA;AACF;AACA;AACA;AACA;AACA;AACA;AAEErD,EAAAA,uBAAuBA,GAAG;AACxB,IAAA,MAAMO,aAAa,GAAG,IAAI,CAACA,aAAa,CAAA;IAExC,IAAI,CAACA,aAAa,EAAE;AAClB,MAAA,OAAA;AACF,KAAA;IAEA,IAAI,CAACkD,2BAA2B,EAAE,CAAA;AAClC;AACA,IAAA,MAAMR,KAAK,GAAG,IAAI,CAACA,KAAK,CAAA;AACxB,IAAA,OAAOA,KAAK,CAACK,MAAM,GAAG,CAAC,EAAE;AACvB,MAAA,MAAMI,IAAI,GAAGT,KAAK,CAACU,GAAG,EAAE,CAAA;MACxB,MAAMtC,SAAS,GAAGqC,IAAI,GAAGA,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAA;MACpC,MAAMpC,OAAO,GAAGoC,IAAI,GAAGA,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAA;AAClC,MAAA,IAAI,CAACtC,KAAK,CAACC,SAAS,EAAEC,OAAO,CAAC,CAAA;AAChC,KAAA;IACA,IAAI,CAACsC,iCAAiC,EAAE,CAAA;AACxC,IAAA,IAAI,CAAChD,2BAA2B,CAACL,aAAa,EAAE,KAAK,CAAC,CAAA;AACtD,IAAA,IAAI,CAACM,6BAA6B,CAACN,aAAa,EAAE,KAAK,CAAC,CAAA;IACxD,IAAI,CAACsD,mBAAmB,EAAE,CAAA;AAC5B,GAAA;;AAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACEjB,EAAAA,wBAAwBA,GAAG;AACzB,IAAA,MAAMrC,aAAa,GAAG,IAAI,CAACA,aAAa,CAAA;IAExC,IAAI,CAACA,aAAa,EAAE;AAClB,MAAA,OAAA;AACF,KAAA;IAEA,IAAI,CAAC0C,KAAK,GAAG,EAAE,CAAA;IACf,IAAI,CAACQ,2BAA2B,EAAE,CAAA;IAClC,IAAI,CAACG,iCAAiC,EAAE,CAAA;AACxCzB,IAAAA,GAAG,CAAC5B,aAAa,EAAE,YAAY,EAAE,IAAI,CAAC,CAAA;IACtC,IAAI,CAACuD,MAAM,EAAE,CAAA;AACb,IAAA,IAAI,CAAClD,2BAA2B,CAACL,aAAa,EAAE,KAAK,CAAC,CAAA;AACtD,IAAA,IAAI,CAACM,6BAA6B,CAACN,aAAa,EAAE,KAAK,CAAC,CAAA;IACxD,IAAI,CAACsD,mBAAmB,EAAE,CAAA;AAC5B,GAAA;;AAEA;AACF;AACA;AACA;AACA;AACA;AACEpD,EAAAA,eAAeA,CAACsD,IAAkC,EAAEb,KAAa,GAAG,CAAC,EAAQ;AAC3E,IAAA,MAAM3D,sBAAsB,GAAG,IAAI,CAACA,sBAAsB,CAAA;AAC1D,IAAA,MAAMG,YAAY,GAAG,IAAI,CAACA,YAAY,CAAA;IAEtC,IAAI,CAACA,YAAY,IAAI,EAAEqE,IAAI,IAAIxE,sBAAsB,CAAC,EAAE;AACtD,MAAA,OAAA;AACF,KAAA;AAEA,IAAA,MAAMiC,WAAW,GAAG,IAAI,CAACA,WAAW,CAAA;AACpC,IAAA,MAAMjB,aAAa,GAAG,IAAI,CAACA,aAAa,CAAA;IAExC,IAAI,CAACA,aAAa,EAAE;AAClB,MAAA,OAAA;AACF,KAAA;AAEA,IAAA,MAAMyD,KAAK,GAAGxC,WAAW,CAAC4B,OAAO,CAAC7C,aAAa,CAAC,CAAA;AAChD,IAAA,MAAM0D,SAAS,GAAG,IAAI,CAACA,SAAS,CAAA;IAEhC,IAAI,CAACA,SAAS,EAAE;AACd,MAAA,OAAA;AACF,KAAA;AAEA,IAAA,MAAMC,MAAM,GAAG;MACbxE,YAAY;AACZsE,MAAAA,KAAK,EAAEA,KAAK;MACZG,SAAS,EAAE3C,WAAW,CAAC8B,MAAM;MAC7B/B,SAAS,EAAE,IAAI,CAACA,SAAS;AACzB2B,MAAAA,KAAAA;KACD,CAAA;IAED,MAAMkB,OAAO,GAAG7E,sBAAsB,CAACwE,IAAI,CAAC,CAACG,MAAM,CAAC,CAAA;AACpD;AACAG,IAAAA,YAAY,CAAC,IAAI,CAACC,oBAAoB,CAAC,CAAA;IACvCL,SAAS,CAACM,WAAW,GAAGH,OAAO,CAAA;;AAE/B;AACA;AACA,IAAA,IAAI,CAACE,oBAAoB,GAAGE,UAAU,CAAC,MAAM;MAC3CP,SAAS,CAACM,WAAW,GAAG,EAAE,CAAA;KAC3B,EAAE,IAAI,CAAC,CAAA;AACV,GAAA;;AAEA;AACF;AACA;AACEV,EAAAA,mBAAmBA,GAAS;IAC1B,IAAI,CAACtD,aAAa,GAAG,IAAI,CAAA;AAC3B,GAAA;;AAEA;AACF;AACA;AACA;AACA;AACA;AACEK,EAAAA,2BAA2BA,CAACa,IAA6B,EAAEgD,QAAiB,EAAE;AAC5E,IAAA,MAAMhF,eAAe,GAAG,IAAI,CAACA,eAAe,CAAA;AAE5C,IAAA,IAAI,CAACA,eAAe,IAAI,CAACgC,IAAI,EAAE;AAC7B,MAAA,OAAA;AACF,KAAA;AAEA,IAAA,IAAIgD,QAAQ,EAAE;MACZhD,IAAI,CAACV,OAAO,CAAC2D,SAAS,CAACC,GAAG,CAAClF,eAAe,CAAC,CAAA;AAC7C,KAAC,MAAM;MACLgC,IAAI,CAACV,OAAO,CAAC2D,SAAS,CAACE,MAAM,CAACnF,eAAe,CAAC,CAAA;AAChD,KAAA;AACF,GAAA;;AAEA;AACF;AACA;AACA;AACA;AACA;AACEoB,EAAAA,6BAA6BA,CAACY,IAA6B,EAAEoD,QAAiB,EAAE;AAC9E,IAAA,MAAMvF,iBAAiB,GAAG,IAAI,CAACA,iBAAiB,CAAA;AAEhD,IAAA,IAAIA,iBAAiB,KAAKT,QAAQ,IAAI,CAAC4C,IAAI,EAAE;AAC3C,MAAA,OAAA;AACF,KAAA;AAEA,IAAA,MAAMD,WAAW,GAAG,IAAI,CAACA,WAAW,CAAA;AACpC,IAAA,MAAMD,SAAS,GAAG,IAAI,CAACA,SAAS,CAAA;AAChC,IAAA,MAAMyC,KAAK,GAAGxC,WAAW,CAAC4B,OAAO,CAAC3B,IAAI,CAAC,CAAA;IACvC,MAAMqD,MAAM,GAAGrD,IAAI,CAACV,OAAO,CAACgE,aAAa,CAAC,uBAAuB,CAAC,CAAA;IAClE,MAAMC,YAAY,GAAGF,MAAM,GAAGA,MAAM,GAAGrD,IAAI,CAACV,OAAO,CAAA;AACnD,IAAA,MAAMkE,UAAuC,GAAG1D,SAAS,KAAK,GAAG,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;AAEtG0D,IAAAA,UAAU,CAACC,OAAO,CAAEC,SAAS,IAAK;MAChCH,YAAY,CAACN,SAAS,CAACE,MAAM,CAACtF,iBAAiB,CAAC6F,SAAS,CAAC,IAAI,EAAE,CAAC,CAAA;AACnE,KAAC,CAAC,CAAA;IAEF,IAAI,CAACN,QAAQ,EAAE;AACb,MAAA,OAAA;AACF,KAAA;IAEA,IAAIb,KAAK,GAAG,CAAC,IAAIiB,UAAU,CAAC,CAAC,CAAC,EAAE;AAC9BD,MAAAA,YAAY,CAACN,SAAS,CAACC,GAAG,CAACrF,iBAAiB,CAAC2F,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAA;AACpE,KAAA;AAEA,IAAA,IAAIjB,KAAK,GAAGxC,WAAW,CAAC8B,MAAM,GAAG,CAAC,IAAI2B,UAAU,CAAC,CAAC,CAAC,EAAE;AACnDD,MAAAA,YAAY,CAACN,SAAS,CAACC,GAAG,CAACrF,iBAAiB,CAAC2F,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAA;AACpE,KAAA;AACF,GAAA;;AAEA;AACF;AACA;AACA;AACA;EACEpC,UAAUA,CAACH,WAAwB,EAAQ;AACzC,IAAA,MAAMoC,MAAM,GAAGpC,WAAW,CAACqC,aAAa,CAAC,wBAAwB,CAAuB,CAAA;AACxF,IAAA,IAAID,MAAM,EAAE;MACVA,MAAM,CAAC9D,KAAK,EAAE,CAAA;AAChB,KAAC,MAAM;AACL;MACA0B,WAAW,CAAC1B,KAAK,EAAE,CAAA;AACrB,KAAA;AACF,GAAA;;AAEA;AACF;AACA;AACEoE,EAAAA,0BAA0BA,GAAS;IACjC,IAAI,CAAChF,4BAA4B,GAAG,IAAI,CAAA;AAC1C,GAAA;;AAEA;AACF;AACA;AACEqD,EAAAA,2BAA2BA,GAAS;IAClC,IAAI,CAACrD,4BAA4B,GAAG,KAAK,CAAA;AAC3C,GAAA;;AAEA;AACF;AACA;AACEiF,EAAAA,8BAA8BA,GAAS;IACrC,IAAI,CAACtE,OAAO,CAACuE,YAAY,CAAC,MAAM,EAAE,aAAa,CAAC,CAAA;AAChD,IAAA,IAAI,CAACvE,OAAO,CAACwE,QAAQ,GAAG,CAAC,CAAC,CAAA;AAC5B,GAAA;;AAEA;AACF;AACA;AACE3B,EAAAA,iCAAiCA,GAAS;AACxC,IAAA,IAAI,CAAC7C,OAAO,CAACyE,eAAe,CAAC,MAAM,CAAC,CAAA;AACpC,IAAA,IAAI,CAACzE,OAAO,CAACyE,eAAe,CAAC,UAAU,CAAC,CAAA;AAC1C,GAAA;AAEAhF,EAAAA,2BAA2BA,GAAS;IAClC,IAAI,CAAC4E,0BAA0B,EAAE,CAAA;IACjC,IAAI,CAACC,8BAA8B,EAAE,CAAA;AACvC,GAAA;;AAEA;;AAEA;AACF;AACA;AACA;AACA;EACE,IAAI9D,SAASA,GAAG;AACd,IAAA,OAAO,IAAI,CAAClC,KAAK,CAACkC,SAAS,IAAI,GAAG,CAAA;AACpC,GAAA;;AAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACE,IAAIkE,QAAQA,GAAG;AACb,IAAA,OAAO,IAAI,CAACpG,KAAK,CAACoG,QAAQ,CAAA;AAC5B,GAAA;AAKA;AACF;AACA;AACA;AACA;AACA;AACA;EACE,IAAIC,SAASA,GAAW;AACtB,IAAA,OAAO,IAAI,CAACrG,KAAK,CAACqG,SAAS,IAAI,qBAAqB,CAAA;AACtD,GAAA;;AAEA;AACF;AACA;AACA;AACA;EAEE,IAAIC,KAAKA,GAA8B;AACrC,IAAA,OAAO,IAAI,CAACC,SAAS,CAACD,KAAK,CAAA;AAC7B,GAAA;EACAxD,GAAGA,CAACwD,KAAgC,EAAE;AACpC,IAAA,IAAI,CAACC,SAAS,CAACD,KAAK,GAAGA,KAAK,CAAA;AAC9B,GAAA;;AAEA;AACF;AACA;AACA;AACA;;AAQE;AACF;AACA;AACA;AACA;AACA;EACE,IACIE,iBAAiBA,GAAa;AAChC,IAAA,MAAMrE,WAAW,GAAG,IAAI,CAACA,WAAW,CAAA;AAEpC,IAAA,MAAMC,IAAI,GAAGD,WAAW,CAAC,CAAC,CAAC,CAAA;IAE3B,IAAI,CAACC,IAAI,EAAE;MACT,OAAO;AACLK,QAAAA,CAAC,EAAE,CAAC;AACJE,QAAAA,CAAC,EAAE,CAAA;OACJ,CAAA;AACH,KAAA;IAEA,OAAO;AACLF,MAAAA,CAAC,EAAEL,IAAI,CAACK,CAAC,GAAGL,IAAI,CAACqE,OAAO;AACxB9D,MAAAA,CAAC,EAAEP,IAAI,CAACO,CAAC,GAAGP,IAAI,CAACqE,OAAAA;KAClB,CAAA;AACH,GAAA;;AAEA;AACF;AACA;AACA;AACA;EACE,IAAItE,WAAWA,GAA8B;AAC3C,IAAA,MAAMD,SAAS,GAAG,IAAI,CAACA,SAAS,CAAA;AAEhC,IAAA,MAAMwE,WAAW,GAAGC,gBAAgB,CAAC,IAAI,CAACjF,OAAO,CAAC,CAAA;AAClD,IAAA,MAAMkF,UAAU,GAAGC,UAAU,CAACH,WAAW,CAAC9D,KAAK,CAAC,CAAA;IAEhD,OAAO,IAAI,CAAC0D,KAAK,CAACQ,IAAI,CAAC,CAACC,CAAC,EAAEC,CAAC,KAAK;MAC/B,IAAI9E,SAAS,KAAK,MAAM,EAAE;QACxB,MAAM;UAAE+E,EAAE;UAAEC,EAAE;UAAEC,EAAE;AAAEC,UAAAA,EAAAA;SAAI,GAAG,IAAI,CAACC,sBAAsB,CAACN,CAAC,EAAEC,CAAC,EAAEJ,UAAU,CAAC,CAAA;AACxE,QAAA,IAAIM,EAAE,IAAIE,EAAE,EAAE,OAAOH,EAAE,GAAGE,EAAE,CAAA;QAC5B,OAAOD,EAAE,GAAGE,EAAE,CAAA;AAChB,OAAA;MACA,OAAOL,CAAC,CAAC7E,SAAS,CAAC,GAAG8E,CAAC,CAAC9E,SAAS,CAAC,CAAA;AACpC,KAAC,CAAC,CAAA;AACJ,GAAA;;AAEA;AACF;AACA;EAEEoF,eAAeA,CAACvE,YAAqC,EAAQ;IAC3D,IAAI,CAAC7B,aAAa,GAAG6B,YAAY,CAAA;IACjC,IAAI,CAACjC,gBAAgB,GAAG,IAAI,CAAA;AAC9B,GAAA;;AAEA;AACF;AACA;AACA;AACA;AACA;AAEEyG,EAAAA,iBAAiBA,GAAS;IACxB,IAAI,CAACzG,gBAAgB,GAAG,KAAK,CAAA;AAC/B,GAAA;;AAEA;AACF;AACA;AACA;AACA;EAEE0G,aAAaA,CAACC,KAA+B,EAAQ;IACnD,IAAI,CAACC,MAAM,GAAGD,KAAK,CAAA;AACrB,GAAA;;AAEA;AACF;AACA;AACA;AACA;EAEEE,eAAeA,CAACF,KAA+B,EAAE;AAC/C,IAAA,IAAI,IAAI,CAACC,MAAM,KAAKD,KAAK,EAAE;MACzB,IAAI,CAACC,MAAM,GAAG,IAAI,CAAA;AACpB,KAAA;AACF,GAAA;;AAEA;AACF;AACA;AACA;AACA;AACA;AAEEE,EAAAA,OAAOA,GAAG;AACR,IAAA,IAAI,CAACC,kBAAkB,GAAG,IAAI,CAACrB,iBAAiB,CAAA;AAClD,GAAA;;AAEA;AACF;AACA;AACA;AACA;EAEEsB,MAAMA,CAAC3F,WAAsC,EAAQ;IACnD,IAAI,CAACA,WAAW,EAAE;MAChBA,WAAW,GAAG,IAAI,CAACA,WAAW,CAAA;AAChC,KAAA;;AAEA;AACA,IAAA,IAAI4F,IAAI,GAAG,IAAI,CAACF,kBAAkB,CAAA;;AAElC;IACA,IAAIE,IAAI,KAAKC,SAAS,EAAE;MACtBD,IAAI,GAAG,IAAI,CAACvB,iBAAiB,CAAA;AAC/B,KAAA;AAEA,IAAA,MAAMtE,SAAS,GAAG,IAAI,CAACA,SAAS,CAAA;AAChC,IAAA,MAAM+F,GAAG,GAAGC,MAAM,CAAC,IAAI,CAACxG,OAAO,CAAC,CAAA;IAEhC,IAAIyG,QAAQ,GAAG,CAAC,CAAA;IAChB,IAAIC,kBAAkB,GAAG,CAAC,CAAA;IAC1B,IAAIC,aAAa,GAAG,CAAC,CAAA;IACrB,IAAIC,aAAa,GAAG,CAAC,CAAA;IAErB,IAAIpG,SAAS,KAAK,MAAM,EAAE;MACxBiG,QAAQ,GAAGJ,IAAI,CAACtF,CAAC,CAAA;MACjB4F,aAAa,GAAGN,IAAI,CAACpF,CAAC,CAAA;;AAEtB;AACA;AACA;MACAyF,kBAAkB,GAAGD,QAAQ,GAAG,IAAI,CAACzG,OAAO,CAAC6G,qBAAqB,EAAE,CAAC3F,KAAK,CAAA;AAC5E,KAAC,MAAM;AACLuF,MAAAA,QAAQ,GAAGJ,IAAI,CAAC7F,SAAS,CAAC,CAAA;AAC5B,KAAA;AAEAC,IAAAA,WAAW,CAAC0D,OAAO,CAAEzD,IAAI,IAAK;AAC5B,MAAA,IAAIF,SAAS,KAAK,MAAM,IAAIiG,QAAQ,GAAG/F,IAAI,CAACQ,KAAK,GAAGwF,kBAAkB,GAAG7I,iBAAiB,EAAE;QAC1F8I,aAAa,GAAGA,aAAa,GAAGC,aAAa,CAAA;QAC7CH,QAAQ,GAAGJ,IAAI,CAACtF,CAAC,CAAA;AACjB6F,QAAAA,aAAa,GAAG,CAAC,CAAA;AACnB,OAAA;MAEA,IAAI,CAACE,WAAW,CAACpG,IAAI,CAAC,IAAI,CAACA,IAAI,CAACqG,UAAU,EAAE;AAC1C;AACA;QACA,IAAIvG,SAAS,KAAK,MAAM,EAAE;UACxBE,IAAI,CAACK,CAAC,GAAGiG,IAAI,CAACC,KAAK,CAACR,QAAQ,CAAC,CAAA;UAC7B/F,IAAI,CAACO,CAAC,GAAG+F,IAAI,CAACC,KAAK,CAACN,aAAa,CAAC,CAAA;AACpC,SAAC,MAAM;UACLvF,GAAG,CAACV,IAAI,EAAEF,SAAS,EAAEwG,IAAI,CAACC,KAAK,CAACR,QAAQ,CAAC,CAAC,CAAA;AAC5C,SAAA;AACF,OAAA;;AAEA;MACA,IAAI/F,IAAI,CAACwG,MAAM,EAAE;AACfT,QAAAA,QAAQ,IAAI/F,IAAI,CAACqE,OAAO,GAAG,CAAC,CAAA;AAC9B,OAAA;MAEA,IAAIvE,SAAS,KAAK,MAAM,EAAE;AACxB,QAAA,IAAIE,IAAI,CAACS,MAAM,GAAGyF,aAAa,EAAE;AAC/BA,UAAAA,aAAa,GAAGlG,IAAI,CAACS,MAAM,GAAGoF,GAAG,CAACY,QAAQ,CAAA;AAC5C,SAAA;AAEAV,QAAAA,QAAQ,IAAI/F,IAAI,CAACQ,KAAK,GAAGqF,GAAG,CAACa,UAAU,CAAA;AACzC,OAAA;MACA,IAAI5G,SAAS,KAAK,GAAG,EAAE;AACrBiG,QAAAA,QAAQ,IAAI/F,IAAI,CAACQ,KAAK,GAAGqF,GAAG,CAACa,UAAU,CAAA;AACzC,OAAA;MACA,IAAI5G,SAAS,KAAK,GAAG,EAAE;AACrBiG,QAAAA,QAAQ,IAAI/F,IAAI,CAACS,MAAM,GAAGoF,GAAG,CAACY,QAAQ,CAAA;AACxC,OAAA;AACF,KAAC,CAAC,CAAA;AACJ,GAAA;;AAEA;AACF;AACA;AAEEpE,EAAAA,MAAMA,GAAS;AACb,IAAA,MAAM6B,KAAK,GAAG,IAAI,CAACnE,WAAW,CAAA;IAC9B,MAAM4G,UAAU,GAAGzC,KAAK,CAAC0C,GAAG,CAAE5G,IAAI,IAAKA,IAAI,CAAC6G,KAAK,CAAC,CAAA;IAClD,MAAMC,WAAW,GAAG5C,KAAK,CAAC6C,IAAI,CAAE/G,IAAI,IAAKA,IAAI,CAACgH,UAAU,CAAC,CAAA;AACzD,IAAA,IAAIC,YAAY,CAAA;AAEhB,IAAA,IAAIH,WAAW,EAAE;AACfA,MAAAA,WAAW,CAACE,UAAU,GAAG,KAAK,CAAC;MAC/BC,YAAY,GAAGH,WAAW,CAACD,KAAK,CAAA;AAClC,KAAA;IAEA,IAAI,CAACK,YAAY,EAAE,CAAA;AACnB,IAAA,IAAI,CAACC,SAAS,CAACR,UAAU,EAAEM,YAAY,CAAC,CAAA;AAC1C,GAAA;AAGAE,EAAAA,SAASA,CAACR,UAAe,EAAEM,YAA2B,EAAQ;IAC5D,IAAI,IAAI,CAACjD,QAAQ,EAAE;AACjB,MAAA,IAAI,CAACA,QAAQ,CAAC2C,UAAU,EAAEM,YAAY,CAAC,CAAA;AACzC,KAAA;AACF,GAAA;;AAEA;AACF;AACA;AACA;AACEC,EAAAA,YAAYA,GAAS;AACnB,IAAA,MAAMhD,KAAK,GAAG,IAAI,CAACnE,WAAW,CAAA;IAE9B,OAAO,IAAI,CAAC0F,kBAAkB,CAAA;IAE9B2B,QAAQ,CAAC,QAAQ,EAAE,MAAM;MACvBlD,KAAK,CAACT,OAAO,CAAEzD,IAAI,IAAKA,IAAI,CAACqH,MAAM,EAAE,CAAC,CAAA;AACxC,KAAC,CAAC,CAAA;IAEFD,QAAQ,CAAC,aAAa,EAAE,MAAM;MAC5BlD,KAAK,CAACT,OAAO,CAAEzD,IAAI,IAAKA,IAAI,CAACsH,KAAK,EAAE,CAAC,CAAA;AACvC,KAAC,CAAC,CAAA;AAEFC,IAAAA,IAAI,CAAC,MAAM;MACTH,QAAQ,CAAC,QAAQ,EAAE,MAAM;QACvBlD,KAAK,CAACT,OAAO,CAAEzD,IAAI,IAAKA,IAAI,CAACwH,IAAI,EAAE,CAAC,CAAA;AACtC,OAAC,CAAC,CAAA;AACJ,KAAC,CAAC,CAAA;AACJ,GAAA;AAGAC,EAAAA,gBAAgBA,GAAoB;AAClC,IAAA,MAAMjF,SAAS,GAAGnE,QAAQ,CAACqJ,aAAa,CAAC,MAAM,CAAC,CAAA;AAChDlF,IAAAA,SAAS,CAACqB,YAAY,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAA;AAC7CrB,IAAAA,SAAS,CAACS,SAAS,CAACC,GAAG,CAAC,iBAAiB,CAAC,CAAA;AAC1C,IAAA,OAAOV,SAAS,CAAA;AAClB,GAAA;AAEAyC,EAAAA,sBAAsBA,CACpBN,CAA0B,EAC1BC,CAA0B,EAC1BJ,UAAkB,EAMlB;IACA,MAAMmD,WAAW,GAAIhD,CAAC,CAACrF,OAAO,CAACsI,UAAU,EAAyBC,SAAS,IAAI,CAAC,CAAA;IAChF,MAAMC,YAAY,GAAInD,CAAC,CAACrF,OAAO,CAACsI,UAAU,EAAyBG,UAAU,IAAI,CAAC,CAAA;AAElF,IAAA,MAAMhC,QAAQ,GAAG;MACflB,EAAE,EAAEF,CAAC,CAACtE,CAAC;MACPyE,EAAE,EAAEH,CAAC,CAACpE,CAAC;MACPwE,EAAE,EAAEH,CAAC,CAACvE,CAAC;MACP2E,EAAE,EAAEJ,CAAC,CAACrE,CAAAA;KACP,CAAA;IAED,IAAIoE,CAAC,CAAC0B,UAAU,EAAE;AAChB,MAAA,MAAM2B,WAAW,GAAG,IAAI,CAACC,yBAAyB,CAChDlC,QAAQ,CAAClB,EAAE,EACXkB,QAAQ,CAACjB,EAAE,EACXiB,QAAQ,CAAChB,EAAE,EACXgB,QAAQ,CAACf,EAAE,EACXJ,CAAC,CAACpE,KAAK,EACPoE,CAAC,CAACnE,MAAM,EACRkE,CAAC,CAACuD,aAAa,EACfP,WAAW,EACXG,YAAY,EACZtD,UACF,CAAC,CAAA;AACDuB,MAAAA,QAAQ,CAAClB,EAAE,GAAGmD,WAAW,CAAC3H,CAAC,CAAA;AAC3B0F,MAAAA,QAAQ,CAACjB,EAAE,GAAGkD,WAAW,CAACzH,CAAC,CAAA;AAC7B,KAAC,MAAM,IAAIqE,CAAC,CAACyB,UAAU,EAAE;AACvB,MAAA,MAAM2B,WAAW,GAAG,IAAI,CAACC,yBAAyB,CAChDlC,QAAQ,CAAChB,EAAE,EACXgB,QAAQ,CAACf,EAAE,EACXe,QAAQ,CAAClB,EAAE,EACXkB,QAAQ,CAACjB,EAAE,EACXH,CAAC,CAACnE,KAAK,EACPmE,CAAC,CAAClE,MAAM,EACRmE,CAAC,CAACsD,aAAa,EACfP,WAAW,EACXG,YAAY,EACZtD,UACF,CAAC,CAAA;AACDuB,MAAAA,QAAQ,CAAChB,EAAE,GAAGiD,WAAW,CAAC3H,CAAC,CAAA;AAC3B0F,MAAAA,QAAQ,CAACf,EAAE,GAAGgD,WAAW,CAACzH,CAAC,CAAA;AAC7B,KAAA;;AAEA;AACA;IACA,IAAIoE,CAAC,CAAC0B,UAAU,IAAIN,QAAQ,CAAClB,EAAE,IAAI,CAAC,EAAE;MACpCkB,QAAQ,CAAClB,EAAE,GAAG,CAAC,CAAA;MACfkB,QAAQ,CAAChB,EAAE,GAAG,CAAC,CAAA;AACjB,KAAA;IAEA,IAAIH,CAAC,CAACyB,UAAU,IAAIN,QAAQ,CAAChB,EAAE,IAAI,CAAC,EAAE;MACpCgB,QAAQ,CAAChB,EAAE,GAAG,CAAC,CAAA;MACfgB,QAAQ,CAAClB,EAAE,GAAG,CAAC,CAAA;AACjB,KAAA;AAEA,IAAA,OAAOkB,QAAQ,CAAA;AACjB,GAAA;EAEAkC,yBAAyBA,CACvB5H,CAAS,EACTE,CAAS,EACT4H,MAAc,EACdC,MAAc,EACd5H,KAAa,EACbC,MAAc,EACdyH,aAA4B,EAC5BP,WAAmB,EACnBG,YAAoB,EACpBtD,UAAkB,EACR;AACV,IAAA,MAAM6D,cAAc,GAAG7H,KAAK,GAAG,CAAC,CAAA;IAChC,MAAM8H,QAAQ,GAAGjI,CAAC,CAAA;IAElB,IAAI6H,aAAa,CAACK,IAAI,EAAE;MACtBlI,CAAC,GAAGA,CAAC,GAAGgI,cAAc,CAAA;AACxB,KAAA;IAEA,IAAIH,aAAa,CAACM,KAAK,EAAE;MACvBnI,CAAC,GAAGA,CAAC,GAAGgI,cAAc,CAAA;AACtB;MACA,MAAMI,WAAW,GAAGnC,IAAI,CAACoC,KAAK,CAAClE,UAAU,GAAGhE,KAAK,CAAC,CAAA;MAClD,MAAMmI,mBAAmB,GAAG,CAACF,WAAW,GAAG,CAAC,IAAIjI,KAAK,GAAGsH,YAAY,CAAA;MACpE,IAAIK,MAAM,GAAGG,QAAQ,IAAIjI,CAAC,GAAGG,KAAK,GAAGmI,mBAAmB,GAAG,CAAC,EAAE;AAC5D;QACAtI,CAAC,GAAGsI,mBAAmB,GAAG,CAAC,CAAA;AAC7B,OAAA;AACF,KAAA;IAEA,IAAIpI,CAAC,GAAGoH,WAAW,EAAE;AACnBpH,MAAAA,CAAC,GAAGoH,WAAW,CAAA;AACjB,KAAA;AAEA,IAAA,MAAMiB,eAAe,GAAGnI,MAAM,GAAG,CAAC,CAAA;;AAElC;AACA,IAAA,IAAIyH,aAAa,CAACW,GAAG,IAAItI,CAAC,GAAGE,MAAM,GAAGmI,eAAe,IAAIR,MAAM,IAAI7H,CAAC,IAAI6H,MAAM,EAAE;AAC9E7H,MAAAA,CAAC,GAAG6H,MAAM,CAAA;AACV;AACF,KAAC,MAAM,IAAIF,aAAa,CAACW,GAAG,IAAItI,CAAC,IAAI6H,MAAM,GAAGQ,eAAe,IAAIrI,CAAC,IAAI6H,MAAM,EAAE;AAC5E7H,MAAAA,CAAC,GAAG6H,MAAM,CAAA;AACZ,KAAA;;AAEA;AACA,IAAA,IAAIF,aAAa,CAACY,MAAM,IAAIvI,CAAC,IAAI6H,MAAM,GAAG3H,MAAM,GAAGmI,eAAe,IAAIrI,CAAC,IAAI6H,MAAM,EAAE;AACjF7H,MAAAA,CAAC,GAAG6H,MAAM,CAAA;AACV;AACF,KAAC,MAAM,IAAIF,aAAa,CAACY,MAAM,IAAIvI,CAAC,GAAG6H,MAAM,GAAGQ,eAAe,IAAIrI,CAAC,IAAI6H,MAAM,EAAE;AAC9E7H,MAAAA,CAAC,GAAG6H,MAAM,CAAA;AACZ,KAAA;IAEA,OAAO;AACL/H,MAAAA,CAAC,EAAEA,CAAC;AACJE,MAAAA,CAAC,EAAEA,CAAAA;KACJ,CAAA;AACH,GAAA;;AAEA;;AAEAwI,EAAAA,gBAAgBA,GAAS;IACvB,IAAI,CAACzJ,OAAO,CAACyJ,gBAAgB,CAAC,SAAS,EAAE,IAAI,CAACvK,OAAO,CAAC,CAAA;IACtD,IAAI,CAACc,OAAO,CAACyJ,gBAAgB,CAAC,UAAU,EAAE,IAAI,CAAC7K,QAAQ,CAAC,CAAA;AAC1D,GAAA;AAEA8K,EAAAA,mBAAmBA,GAAS;IAC1B,IAAI,CAAC1J,OAAO,CAAC0J,mBAAmB,CAAC,SAAS,EAAE,IAAI,CAACxK,OAAO,CAAC,CAAA;IACzD,IAAI,CAACc,OAAO,CAAC0J,mBAAmB,CAAC,UAAU,EAAE,IAAI,CAAC9K,QAAQ,CAAC,CAAA;AAC7D,GAAA;AAMA+K,EAAAA,WAAWA,CAACC,KAAY,EAAEC,IAAgD,EAAE;AAC1E,IAAA,KAAK,CAACD,KAAK,EAAEC,IAAI,CAAC,CAAA;AA/5BpB;AACA;AAAAC,IAAAA,eAAA,wBACgD,IAAI,CAAA,CAAA;AAAAA,IAAAA,eAAA,iBACV,IAAI,CAAA,CAAA;IAAAA,eAAA,CAAA,IAAA,EAAA,oBAAA,EAAA,KAAA,CAAA,CAAA,CAAA;IAAAA,eAAA,CAAA,IAAA,EAAA,WAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AAI9C;AAAAA,IAAAA,eAAA,eACO,IAAI,CAAA,CAAA;AAAAA,IAAAA,eAAA,gBACiB,EAAE,CAAA,CAAA;AAE9B;AAAAA,IAAAA,eAAA,uCAC+B,KAAK,CAAA,CAAA;AAAAA,IAAAA,eAAA,2BAEjB,KAAK,CAAA,CAAA;AAExB;AAAAA,IAAAA,eAAA,2BACmB,KAAK,CAAA,CAAA;AAAAC,IAAAA,0BAAA,0BAAAC,WAAA,EAAA,IAAA,CAAA,CAAA;AAAAF,IAAAA,eAAA,oBA8gBI,IAAI,CAAA,CAAA;AAEhC;AACF;AACA;IAFEA,eAAA,CAAA,IAAA,EAAA,sBAAA,EAAA,KAAA,CAAA,CAAA,CAAA;IAAAA,eAAA,CAAA,IAAA,EAAA,SAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AAAAA,IAAAA,eAAA,mBA0XW,KAAK,CAAA,CAAA;IAAAA,eAAA,CAAA,IAAA,EAAA,OAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AAKdG,IAAAA,kBAAkB,CAAC,IAAI,EAAEC,OAAO,CAAC,CAAA;AACnC,GAAA;AAESC,EAAAA,MAAMA,CACbnK,OAAoB,EACpBoK,WAA8D,EAC9D9L,KAAmD,EACnD;IACA,IAAI,CAAC0B,OAAO,GAAGA,OAAO,CAAA;IACtB,IAAI,CAAC1B,KAAK,GAAGA,KAAK,CAAA;IAElB,IAAI,CAACoL,mBAAmB,EAAE,CAAA;AAE1B,IAAA,IAAI,CAAC,IAAI,CAACW,QAAQ,EAAE;AAClB,MAAA,IAAI,CAACxF,SAAS,GAAG,IAAI,CAACyF,eAAe,CAACC,UAAU,CAAC,IAAI,CAAC5F,SAAS,CAAC,CAAA;AAChE,MAAA,IAAI,CAACzB,SAAS,GAAG,IAAI,CAACiF,gBAAgB,EAAE,CAAA;MACxC,IAAI,CAACnI,OAAO,CAACwK,qBAAqB,CAAC,UAAU,EAAE,IAAI,CAACtH,SAAS,CAAC,CAAA;MAC9D,IAAI,CAACoH,eAAe,CAACxE,aAAa,CAAC,IAAI,CAACnB,SAAS,EAAE,IAAI,CAAC,CAAA;MAExD,IAAI,CAAC0F,QAAQ,GAAG,IAAI,CAAA;AACtB,KAAA;IAEA,IAAI,IAAI,CAAChM,QAAQ,EAAE;AACjB,MAAA,OAAA;AACF,KAAA;IAEA,IAAI,CAACoL,gBAAgB,EAAE,CAAA;AACzB,GAAA;AACF,CAAC,EAAAgB,yBAAA,CAAAtM,MAAA,CAAAuM,SAAA,EAAA,UAAA,EAAA,CAp3BEC,MAAM,CAAA,EAAAC,MAAA,CAAAC,wBAAA,CAAA1M,MAAA,CAAAuM,SAAA,EAAAvM,UAAAA,CAAAA,EAAAA,MAAA,CAAAuM,SAAA,CAAAD,EAAAA,yBAAA,CAAAtM,MAAA,CAAAuM,SAAA,EAAA,SAAA,EAAA,CAgBNC,MAAM,CAAA,EAAAC,MAAA,CAAAC,wBAAA,CAAA1M,MAAA,CAAAuM,SAAA,EAAAvM,SAAAA,CAAAA,EAAAA,MAAA,CAAAuM,SAAA,GAAAD,yBAAA,CAAAtM,MAAA,CAAAuM,SAAA,EAAA,yBAAA,EAAA,CA6LNC,MAAM,CAAA,EAAAC,MAAA,CAAAC,wBAAA,CAAA1M,MAAA,CAAAuM,SAAA,EAAAvM,yBAAAA,CAAAA,EAAAA,MAAA,CAAAuM,SAAA,CAAA,EAAAV,WAAA,GAAAS,yBAAA,CAAAtM,MAAA,CAAAuM,SAAA,sBAAA1M,IAAA,CAAA,EAAA;EAAA8M,YAAA,EAAA,IAAA;EAAAC,UAAA,EAAA,IAAA;EAAAC,QAAA,EAAA,IAAA;EAAAC,WAAA,EAAA,IAAA;AAAA,CAAAR,CAAAA,EAAAA,yBAAA,CAAAtM,MAAA,CAAAuM,SAAA,EAAAzM,mBAAAA,EAAAA,CAAAA,KAAA,GAAA2M,MAAA,CAAAC,wBAAA,CAAA1M,MAAA,CAAAuM,SAAA,EAAA,mBAAA,CAAA,EAAAvM,MAAA,CAAAuM,SAAA,CAAAD,EAAAA,yBAAA,CAAAtM,MAAA,CAAAuM,SAAA,EAAA,iBAAA,EAAA,CAkUNC,MAAM,CAAAC,EAAAA,MAAA,CAAAC,wBAAA,CAAA1M,MAAA,CAAAuM,SAAA,EAAA,iBAAA,CAAA,EAAAvM,MAAA,CAAAuM,SAAA,GAAAD,yBAAA,CAAAtM,MAAA,CAAAuM,SAAA,EAYNC,mBAAAA,EAAAA,CAAAA,MAAM,CAAAC,EAAAA,MAAA,CAAAC,wBAAA,CAAA1M,MAAA,CAAAuM,SAAA,wBAAAvM,MAAA,CAAAuM,SAAA,CAAAD,EAAAA,yBAAA,CAAAtM,MAAA,CAAAuM,SAAA,EAUNC,eAAAA,EAAAA,CAAAA,MAAM,GAAAC,MAAA,CAAAC,wBAAA,CAAA1M,MAAA,CAAAuM,SAAA,EAAAvM,eAAAA,CAAAA,EAAAA,MAAA,CAAAuM,SAAA,CAAA,EAAAD,yBAAA,CAAAtM,MAAA,CAAAuM,SAAA,EAUNC,iBAAAA,EAAAA,CAAAA,MAAM,GAAAC,MAAA,CAAAC,wBAAA,CAAA1M,MAAA,CAAAuM,SAAA,EAAA,iBAAA,CAAA,EAAAvM,MAAA,CAAAuM,SAAA,CAAA,EAAAD,yBAAA,CAAAtM,MAAA,CAAAuM,SAAA,EAAA,SAAA,EAAA,CAaNC,MAAM,CAAAC,EAAAA,MAAA,CAAAC,wBAAA,CAAA1M,MAAA,CAAAuM,SAAA,cAAAvM,MAAA,CAAAuM,SAAA,CAAAD,EAAAA,yBAAA,CAAAtM,MAAA,CAAAuM,SAAA,aAUNC,MAAM,CAAA,EAAAC,MAAA,CAAAC,wBAAA,CAAA1M,MAAA,CAAAuM,SAAA,EAAA,QAAA,CAAA,EAAAvM,MAAA,CAAAuM,SAAA,CAAAD,EAAAA,yBAAA,CAAAtM,MAAA,CAAAuM,SAAA,EA4ENC,QAAAA,EAAAA,CAAAA,MAAM,CAAAC,EAAAA,MAAA,CAAAC,wBAAA,CAAA1M,MAAA,CAAAuM,SAAA,EAAAvM,QAAAA,CAAAA,EAAAA,MAAA,CAAAuM,SAAA,CAAA,EAAAD,yBAAA,CAAAtM,MAAA,CAAAuM,SAAA,EAAA,WAAA,EAAA,CAgBNC,MAAM,CAAAC,EAAAA,MAAA,CAAAC,wBAAA,CAAA1M,MAAA,CAAAuM,SAAA,EAAA,WAAA,CAAA,EAAAvM,MAAA,CAAAuM,SAAA,GAAAD,yBAAA,CAAAtM,MAAA,CAAAuM,SAAA,EA+BNC,kBAAAA,EAAAA,CAAAA,MAAM,CAAAC,EAAAA,MAAA,CAAAC,wBAAA,CAAA1M,MAAA,CAAAuM,SAAA,uBAAAvM,MAAA,CAAAuM,SAAA,CAAA,EAAAvM,MAAA,EAAA;AAqLT;AACA;AACA;AACA;AACA,SAAS+L,OAAOA,CAAIgB,QAAkC,EAAE;AACtD5H,EAAAA,YAAY,CAAC4H,QAAQ,CAAC3H,oBAAoB,CAAC,CAAA;AAC3C,EAAA,IAAI2H,QAAQ,CAAChI,SAAS,EAAEoF,UAAU,EAAE;IAClC4C,QAAQ,CAAChI,SAAS,CAACoF,UAAU,CAAC6C,WAAW,CAACD,QAAQ,CAAChI,SAAS,CAAC,CAAA;AAC/D,GAAA;EACAgI,QAAQ,CAACxB,mBAAmB,EAAE,CAAA;EAC9BwB,QAAQ,CAACZ,eAAe,CAACrE,eAAe,CAACiF,QAAQ,CAACvG,SAAS,CAAC,CAAA;AAC9D;;;;"}
|
|
1
|
+
{"version":3,"file":"sortable-group.js","sources":["../../src/modifiers/sortable-group.ts"],"sourcesContent":["/* eslint-disable ember/no-incorrect-calls-with-inline-anonymous-functions */\nimport Modifier from 'ember-modifier';\nimport {\n isDownArrowKey,\n isEnterKey,\n isEscapeKey,\n isLeftArrowKey,\n isRightArrowKey,\n isSpaceKey,\n isUpArrowKey,\n} from '../utils/keyboard.ts';\nimport { ANNOUNCEMENT_ACTION_TYPES } from '../utils/constant.ts';\nimport { getGap } from '../utils/css-calculation.ts';\nimport { defaultA11yAnnouncementConfig, type A11yAnnouncementConfig } from '../utils/defaults.ts';\nimport { next, schedule, scheduleOnce } from '@ember/runloop';\nimport * as s from '@ember/service';\nimport { registerDestructor, isDestroyed } from '@ember/destroyable';\nimport type { ArgsFor, PositionalArgs, NamedArgs } from 'ember-modifier';\nimport type Owner from '@ember/owner';\nimport type EmberSortableService from '../services/ember-sortable-internal-state.ts';\nimport type { Group } from '../services/ember-sortable-internal-state.ts';\nimport type SortableItemModifier from './sortable-item.ts';\nimport type { MoveDirection } from './sortable-item.ts';\n\nconst service = s.service ?? s.inject;\n\n// Tolerance for the grid direction's wrap check, absorbing residual\n// subpixel float error so a row that truly fits doesn't wrap on noise.\nconst GRID_WRAP_EPSILON = 1;\n\nconst NO_MODEL: HandleVisualClass = {};\n\nexport interface HandleVisualClass {\n UP?: string;\n DOWN?: string;\n LEFT?: string;\n RIGHT?: string;\n}\n\ninterface Position {\n x: number;\n y: number;\n}\n\nexport type TDirection = 'x' | 'y' | 'grid';\n\ninterface SortableGroupModifierSignature<T> {\n Args: {\n Named: {\n direction?: TDirection;\n groupName?: string;\n disabled?: boolean;\n handleVisualClass?: HandleVisualClass;\n a11yAnnouncementConfig?: A11yAnnouncementConfig;\n itemVisualClass?: string;\n a11yItemName?: string;\n onChange: (itemModels: T[], draggedModel: T | undefined) => void;\n };\n Positional: unknown[];\n };\n Element: HTMLElement;\n}\n\n/**\n * Modifier to apply a11y support to a group container for the Sortable component\n *\n * @param {String} [a11yItemName] A name for each model, used for creating more meaningful a11y announcements.\n * @param {Object} [a11yAnnouncementConfig] A map of action to function to build meaningful a11y announcements.\n * @param {String} [itemVisualClass] A class for styling visual indicators on the yielded `sortable-item`.\n * @param {Object} [handleVisualClass] An object for styling visual indicators on the yielded `sortable-handle` on different `move`.\n * @param {Function} [onChange] An optional callback for when position rearrangements are confirmed.\n *\n * @module drag-drop/draggable-group\n * @example\n * <ol {{sortable-group onChange=this.update a11yAnnouncementConfig=this.myA11yConfig}}>\n * {{#each model.items as |item|}}\n * <li {{sortable-item model=item}}>\n * {{item.name}}\n * <span class=\"handle\" {{sortable-handle}}>↕</span>\n * </li>\n * {{/each}}\n * </ol>\n */\nexport default class SortableGroupModifier<T> extends Modifier<SortableGroupModifierSignature<T>> {\n /** Primary keyboard utils */\n // Tracks the currently selected item\n _selectedItem: SortableItemModifier<T> | null = null;\n _group: SortableGroupModifier<T> | null = null;\n _firstItemPosition?: Position;\n _groupDef!: Group<T>;\n\n // Tracks the current move\n move = null;\n moves: [number, number][] = [];\n\n // Tracks the status of keyboard reorder mode\n isKeyboardReorderModeEnabled = false;\n\n isKeyDownEnabled = false;\n\n // Tracks if we're still performing a programmatic focus.\n isRetainingFocus = false;\n /** End of keyboard utils */\n\n get disabled() {\n return this.named.disabled || false;\n }\n\n /** Start of a11y properties */\n /**\n * @property an object containing different classes for visual indicators\n * @type {Object}\n * @default null\n * @example\n * {\n * UP: 'up'\n * DOWN: 'down',\n * LEFT: 'left',\n * RIGHT: 'right',\n * }\n */\n get handleVisualClass(): HandleVisualClass {\n return this.named.handleVisualClass || NO_MODEL;\n }\n\n /**\n * @property an object containing functions for producing screen reader announcements\n * @type {Object}\n * @example\n * {\n * MOVE: function() {},\n * ACTIVATE: function() {},\n * CONFIRM: function() {},\n * CANCEL: function() {},\n * }\n */\n get a11yAnnouncementConfig(): A11yAnnouncementConfig {\n return this.named.a11yAnnouncementConfig || defaultA11yAnnouncementConfig;\n }\n\n get itemVisualClass(): string {\n return this.named.itemVisualClass || 'is-activated';\n }\n\n get a11yItemName(): string {\n return this.named.a11yItemName || 'item';\n }\n /** End of a11y properties */\n\n /**\n * Make sure that we cancel any ongoing keyboard operation when the focus is lost from the handle.\n * Because this can be fired pre-maturely, effectively cancelling before other keyboard operations,\n * we need to wait until other operations are completed, so this will cancel properly.\n *\n * @param {Event} event a DOM event.\n */\n focusOut = () => {\n if (!this.isRetainingFocus && !this._isElementWithinHandle(document.activeElement)) {\n this.cancelKeyboardSelection();\n }\n };\n\n /**\n * Explanation\n * 1. `KeyboardReorderMode` is disabled: users can activate it via ENTER or SPACE.\n * 2. `KeyboardReorderMode` is enabled: users can reorder via UP or DOWN arrow keys. TODO: Expand to more keys, e.g LEFT, RIGHT\n * 3. `KeyboardReorderMode` is enabled: users can finalize/save the reordering via ENTER or SPACE.\n * 4. `KeyboardReorderMode` is enabled: users can discard the reordering via ESC.\n *\n * @param {Event} event a DOM event\n */\n keyDown = (event: KeyboardEvent) => {\n if (!this.isKeyDownEnabled) {\n return;\n }\n\n // Note: If handle is specified, we need to target the keyDown on the handle\n const isKeyboardReorderModeEnabled = this.isKeyboardReorderModeEnabled;\n\n if (!isKeyboardReorderModeEnabled && (isEnterKey(event) || isSpaceKey(event))) {\n const _selectedItem = this._selectedItem;\n\n if (!_selectedItem) {\n return;\n }\n\n this._prepareKeyboardReorderMode();\n this._announceAction(ANNOUNCEMENT_ACTION_TYPES.ACTIVATE);\n this._updateItemVisualIndicators(_selectedItem, true);\n this._updateHandleVisualIndicators(_selectedItem, true);\n\n this.isRetainingFocus = true;\n\n scheduleOnce('render', this, () => {\n this.element.focus();\n this.isRetainingFocus = false;\n });\n\n // Prevent the default scroll\n event.preventDefault();\n return;\n }\n\n if (isKeyboardReorderModeEnabled) {\n this._handleKeyboardReorder(event);\n event.preventDefault();\n }\n };\n\n /**\n * Checks if the given element is a child of a handle.\n *\n * @param {Element} element a DOM element.\n */\n _isElementWithinHandle(element: Element | null): boolean {\n return !!element?.closest(`[data-sortable-handle]`);\n }\n\n /**\n * Moves an sortedItem from one index to another index, effectively performing an reorder.\n *\n * @param {Integer} fromIndex the original index\n * @param {Integer} toIndex the new index\n */\n _move(fromIndex: number, toIndex: number) {\n const direction = this.direction;\n const sortedItems = this.sortedItems;\n const item = sortedItems[fromIndex];\n const nextItem = sortedItems[toIndex];\n\n if (!nextItem || !item) {\n return;\n }\n\n // switch direction values to notify sortedItems to update, so it sorts by direction.\n let value;\n const dimension = direction === 'y' ? 'height' : 'width';\n // DOWN or RIGHT\n if (toIndex > fromIndex) {\n if (direction === 'grid') {\n const valueX = item.x;\n const valueY = item.y;\n item.x = nextItem.x + (nextItem.width - item.width);\n item.y = nextItem.y + (nextItem.height - item.height);\n nextItem.x = valueX;\n nextItem.y = valueY;\n } else {\n value = item[direction];\n item[direction] = nextItem[direction] + (nextItem[dimension] - item[dimension]);\n nextItem[direction] = value;\n }\n // UP or LEFT\n } else {\n if (direction === 'grid') {\n const valueX = nextItem.x;\n const valueY = nextItem.y;\n nextItem.x = item.x + (item.width - nextItem.width);\n nextItem.y = item.y + (item.height - nextItem.height);\n item.x = valueX;\n item.y = valueY;\n } else {\n value = nextItem[direction];\n nextItem[direction] = item[direction] + (item[dimension] - nextItem[dimension]);\n item[direction] = value;\n }\n }\n }\n\n /**\n * Handles all of the keyboard operations, such as\n * 1. Keyboard navigation for UP, DOWN, LEFT, RIGHT\n * 2. Confirming reorder\n * 3. Discard reorder\n * 4. Also handles refocusing the element that triggered the interaction.\n *\n * @param {Event} event a DOM event.\n */\n _handleKeyboardReorder(event: KeyboardEvent) {\n const direction = this.direction;\n const selectedItem = this._selectedItem;\n\n if (!selectedItem) {\n return;\n }\n\n if (direction === 'y' && isDownArrowKey(event)) {\n this.moveItem(selectedItem, 1);\n } else if (direction === 'y' && isUpArrowKey(event)) {\n this.moveItem(selectedItem, -1);\n } else if ((direction === 'x' || direction === 'grid') && isLeftArrowKey(event)) {\n this.moveItem(selectedItem, -1);\n } else if ((direction === 'x' || direction === 'grid') && isRightArrowKey(event)) {\n this.moveItem(selectedItem, 1);\n } else if (isEnterKey(event) || isSpaceKey(event)) {\n // confirm will reset the selectedItem, so caching it here before we remove it.\n const itemElement = selectedItem.element;\n this._announceAction(ANNOUNCEMENT_ACTION_TYPES.CONFIRM);\n this.confirmKeyboardSelection();\n\n this.isRetainingFocus = true;\n scheduleOnce('render', this, () => this._focusItem(itemElement));\n } else if (isEscapeKey(event)) {\n // cancel will reset the selectedItem, so caching it here before we remove it.\n const _selectedItemElement = selectedItem.element;\n this._announceAction(ANNOUNCEMENT_ACTION_TYPES.CANCEL);\n this.cancelKeyboardSelection();\n\n this.isRetainingFocus = true;\n scheduleOnce('render', this, () => {\n const moves = this.moves;\n if (moves && moves[0]) {\n const sortedItems = this.sortedItems;\n const fromIndex = moves[0][1];\n const itemElement = sortedItems[fromIndex]?.element;\n if (itemElement) {\n this._focusItem(itemElement);\n }\n } else {\n this._focusItem(_selectedItemElement);\n }\n this.isRetainingFocus = false;\n });\n }\n }\n\n /**\n * Moves the item to its new position and adds the move to our history.\n *\n * @param {SortableItemModifier} item the item to be moved.\n * @param {Integer} delta how much to move index-wise.\n */\n moveItem(item: SortableItemModifier<T>, delta: number) {\n const sortedItems = this.sortedItems;\n const moves = this.moves;\n\n const sortedIndex = sortedItems.indexOf(item);\n const newSortedIndex = sortedIndex + delta;\n\n // If out of bounds, we don't do anything.\n if (newSortedIndex < 0 || newSortedIndex >= sortedItems.length) {\n return;\n }\n this._announceAction(ANNOUNCEMENT_ACTION_TYPES.MOVE, delta);\n // Guarantees that the before the UI is fully rendered before we move again.\n scheduleOnce('render', this, () => {\n this._move(sortedIndex, newSortedIndex);\n this._updateHandleVisualIndicators(item, true);\n\n moves.push([sortedIndex, newSortedIndex]);\n });\n }\n\n /**\n * Handles all the necessary operations needed for cancelling the current keyboard selection.\n * 1. Disables keyboard reorder mode.\n * 2. Undo all of the tracked moves.\n * 3. Tears down the application container, so we are not focus locked within the application.\n * 4. Resets the current selected item.\n */\n cancelKeyboardSelection = () => {\n const _selectedItem = this._selectedItem;\n\n if (!_selectedItem) {\n return;\n }\n\n this._disableKeyboardReorderMode();\n // Revert the process by reversing the move.\n const moves = this.moves;\n while (moves.length > 0) {\n const move = moves.pop();\n const fromIndex = move ? move[1] : 0;\n const toIndex = move ? move[0] : 0;\n this._move(fromIndex, toIndex);\n }\n this._tearDownA11yApplicationContainer();\n this._updateItemVisualIndicators(_selectedItem, false);\n this._updateHandleVisualIndicators(_selectedItem, false);\n this._resetItemSelection();\n };\n\n /**\n * Handles all th necessary operations needed for confirming the current keyboard selection.\n * 1. Disables keyboard reorder mode.\n * 2. Tears down the application container, so we are not focus locked within the container.\n * 3. Make sure to update and sync all the internal items and UI.\n * 4. Triggers the `onChange` action if provided.\n * 5. Resets the currently selected item.\n */\n confirmKeyboardSelection() {\n const _selectedItem = this._selectedItem;\n\n if (!_selectedItem) {\n return;\n }\n\n this.moves = [];\n this._disableKeyboardReorderMode();\n this._tearDownA11yApplicationContainer();\n _selectedItem.wasDropped = true;\n this.commit();\n this._updateItemVisualIndicators(_selectedItem, false);\n this._updateHandleVisualIndicators(_selectedItem, false);\n this._resetItemSelection();\n }\n\n /**\n * Announces the message constructed from `a11yAnnouncementConfig`.\n *\n * @param {String} type the action type.\n * @param {Number} delta how much distance (item-wise) is being moved.\n */\n _announceAction(type: keyof A11yAnnouncementConfig, delta: number = 0): void {\n const a11yAnnouncementConfig = this.a11yAnnouncementConfig;\n const a11yItemName = this.a11yItemName;\n\n if (!a11yItemName || !(type in a11yAnnouncementConfig)) {\n return;\n }\n\n const sortedItems = this.sortedItems;\n const _selectedItem = this._selectedItem;\n\n if (!_selectedItem) {\n return;\n }\n\n const index = sortedItems.indexOf(_selectedItem);\n const announcer = this.announcer;\n\n if (!announcer) {\n return;\n }\n\n const config = {\n a11yItemName,\n index: index,\n maxLength: sortedItems.length,\n direction: this.direction,\n delta,\n };\n\n const message = a11yAnnouncementConfig[type](config);\n // Cancel the reset of a previous message so it can't clear this one early.\n clearTimeout(this._announcerResetTimer);\n announcer.textContent = message;\n\n // Reset the message after the message is announced. A native timer is used\n // so the reset doesn't hold up `settled()` in tests.\n this._announcerResetTimer = setTimeout(() => {\n announcer.textContent = '';\n }, 1000);\n }\n\n /**\n * Reset the selected item.\n */\n _resetItemSelection(): void {\n this._selectedItem = null;\n }\n\n /**\n * Updates the selected item's visual indicators.\n *\n * @param {SortableItemModifier} item the selected item.\n * @param {Boolean} isActive to activate or deactivate the class.\n */\n _updateItemVisualIndicators(item: SortableItemModifier<T>, isActive: boolean) {\n const itemVisualClass = this.itemVisualClass;\n\n if (!itemVisualClass || !item) {\n return;\n }\n\n if (isActive) {\n item.element.classList.add(itemVisualClass);\n } else {\n item.element.classList.remove(itemVisualClass);\n }\n }\n\n /**\n * Updates the selected item's handle's visual indicators\n *\n * @param {SortableItemModifier} item the selected item.\n * @param {boolean} isUpdate to update or not update.\n */\n _updateHandleVisualIndicators(item: SortableItemModifier<T>, isUpdate: boolean) {\n const handleVisualClass = this.handleVisualClass;\n\n if (handleVisualClass === NO_MODEL || !item) {\n return;\n }\n\n const sortedItems = this.sortedItems;\n const direction = this.direction;\n const index = sortedItems.indexOf(item);\n const handle = item.element.querySelector('[data-sortable-handle');\n const visualHandle = handle ? handle : item.element;\n const visualKeys: (keyof HandleVisualClass)[] = direction === 'y' ? ['UP', 'DOWN'] : ['LEFT', 'RIGHT'];\n\n visualKeys.forEach((visualKey) => {\n visualHandle.classList.remove(handleVisualClass[visualKey] ?? '');\n });\n\n if (!isUpdate) {\n return;\n }\n\n if (index > 0 && visualKeys[0]) {\n visualHandle.classList.add(handleVisualClass[visualKeys[0]] ?? '');\n }\n\n if (index < sortedItems.length - 1 && visualKeys[1]) {\n visualHandle.classList.add(handleVisualClass[visualKeys[1]] ?? '');\n }\n }\n\n /**\n * Sets focus on the current item or its handle.\n *\n * @param {Element} itemElement an DOM element representing an sortable-item.\n */\n _focusItem(itemElement: HTMLElement): void {\n const handle = itemElement.querySelector('[data-sortable-handle]') as HTMLElement | null;\n if (handle) {\n handle.focus();\n } else {\n // The consumer did not use a handle, so we set focus back to the item.\n itemElement.focus();\n }\n }\n\n /**\n * Enables keyboard reorder mode.\n */\n _enableKeyboardReorderMode(): void {\n this.isKeyboardReorderModeEnabled = true;\n }\n\n /**\n * Disables keyboard reorder mode\n */\n _disableKeyboardReorderMode(): void {\n this.isKeyboardReorderModeEnabled = false;\n }\n\n /**\n * Sets up the group as an application and make it programmatically focusable.\n */\n _setupA11yApplicationContainer(): void {\n this.element.setAttribute('role', 'application');\n this.element.tabIndex = -1;\n }\n\n /**\n * Tears down the `role=application` container.\n */\n _tearDownA11yApplicationContainer(): void {\n this.element.removeAttribute('role');\n this.element.removeAttribute('tabIndex');\n }\n\n _prepareKeyboardReorderMode(): void {\n this._enableKeyboardReorderMode();\n this._setupA11yApplicationContainer();\n }\n\n // Begin of API\n\n /**\n @property direction\n @type string\n @default y\n */\n get direction() {\n return this.named.direction || 'y';\n }\n\n /**\n Called when order of items has been changed\n @property onChange\n @type Function\n @param {Object} groupModel group model (omitted if not set)\n @param {Object[]} newModel models in their new order\n @param {Object} itemModel model just dragged\n @default null\n */\n get onChange() {\n return this.named.onChange;\n }\n\n @service('ember-sortable-internal-state')\n declare sortableService: EmberSortableService<T>;\n\n /**\n * This is the group name used to keep groups separate if there are more than one on the screen at a time.\n * If no group is assigned a default is used\n *\n * @default \"_EmberSortableGroup\"\n * @returns {*|string}\n */\n get groupName(): string {\n return this.named.groupName || '_EmberSortableGroup';\n }\n\n /**\n This is an array of SortableItemModifiers\n\n @property items\n @type SortableItemModifier[]\n */\n get items(): SortableItemModifier<T>[] {\n return this._groupDef.items;\n }\n set(items: SortableItemModifier<T>[]) {\n this._groupDef.items = items;\n }\n\n /**\n * Announcer element\n *\n * @type {Element}\n */\n announcer: Element | null = null;\n\n /**\n * Pending timer that resets the announcer message\n */\n _announcerResetTimer?: ReturnType<typeof setTimeout>;\n\n /**\n Position for the first item.\n If spacing is present, first item's position will have to change as well.\n @property firstItemPosition\n @type Number\n */\n get firstItemPosition(): Position {\n const sortedItems = this.sortedItems;\n\n const item = sortedItems[0];\n\n if (!item) {\n return {\n x: 0,\n y: 0,\n };\n }\n\n return {\n x: item.x - item.spacing,\n y: item.y - item.spacing,\n };\n }\n\n /**\n An array of DOM elements.\n @property sortedItems\n @type SortableItemModifier[]\n */\n get sortedItems(): SortableItemModifier<T>[] {\n const direction = this.direction;\n\n const groupStyles = getComputedStyle(this.element);\n const groupWidth = parseFloat(groupStyles.width);\n\n return this.items.sort((a, b) => {\n if (direction === 'grid') {\n const { ax, ay, bx, by } = this._calculateGridPosition(a, b, groupWidth);\n if (ay == by) return ax - bx;\n return ay - by;\n }\n return a[direction] - b[direction];\n });\n }\n\n /**\n * Enables keyboard navigation\n */\n activateKeyDown = (selectedItem: SortableItemModifier<T>): void => {\n this._selectedItem = selectedItem;\n this.isKeyDownEnabled = true;\n };\n\n /**\n * Disables keyboard navigation\n * Currently used to handle keydown events bubbling up from\n * elements that aren't meant to invoke keyboard navigation\n * by ignoring them.\n */\n deactivateKeyDown = (): void => {\n this.isKeyDownEnabled = false;\n };\n\n /**\n Register the group with this Sortable.\n @method registerGroup\n @param {SortableGroupModifier} group\n */\n registerGroup = (group: SortableGroupModifier<T>): void => {\n this._group = group;\n };\n\n /**\n De-register the group with this Sortable.\n @method deregisterGroup\n @param {SortableGroupModifier} group\n */\n deregisterGroup = (group: SortableGroupModifier<T>) => {\n if (this._group === group) {\n this._group = null;\n }\n };\n\n /**\n Prepare for sorting.\n Main purpose is to stash the current firstItemPosition so\n we don’t incur expensive re-layouts.\n @method _prepare\n */\n prepare = () => {\n this._firstItemPosition = this.firstItemPosition;\n };\n\n /**\n Update item positions (relatively to the first element position).\n @method update\n @param {SortableItemModifier[]} sortedItems\n */\n update = (sortedItems: SortableItemModifier<T>[]): void => {\n if (!sortedItems) {\n sortedItems = this.sortedItems;\n }\n\n // Position of the first element\n let axis = this._firstItemPosition;\n\n // Just in case we haven’t called prepare first.\n if (axis === undefined) {\n axis = this.firstItemPosition;\n }\n\n const direction = this.direction;\n const gap = getGap(this.element);\n\n let position = 0;\n let groupPositionRight = 0;\n let lastTopOffset = 0;\n let maxPrevHeight = 0;\n\n if (direction === 'grid') {\n position = axis.x;\n lastTopOffset = axis.y;\n\n // `getBoundingClientRect` instead of `getComputedStyle(...).width`,\n // which serializes to only 3 decimal places and can itself introduce\n // rounding drift against item widths.\n groupPositionRight = position + this.element.getBoundingClientRect().width;\n } else {\n position = axis[direction];\n }\n\n sortedItems.forEach((item) => {\n if (direction === 'grid' && position + item.width > groupPositionRight + GRID_WRAP_EPSILON) {\n lastTopOffset = lastTopOffset + maxPrevHeight;\n position = axis.x;\n maxPrevHeight = 0;\n }\n\n if (!isDestroyed(item) && !item.isDragging) {\n // Round only at assignment to match offsetLeft/offsetTop's integer\n // rounding, so undragged items don't jitter by a fractional pixel.\n if (direction === 'grid') {\n item.x = Math.round(position);\n item.y = Math.round(lastTopOffset);\n } else {\n item[direction] = Math.round(position);\n }\n }\n\n // add additional spacing around active element\n if (item.isBusy) {\n position += item.spacing * 2;\n }\n\n if (direction === 'grid') {\n if (item.height > maxPrevHeight) {\n maxPrevHeight = item.height + gap.vertical;\n }\n\n position += item.width + gap.horizontal;\n }\n if (direction === 'x') {\n position += item.width + gap.horizontal;\n }\n if (direction === 'y') {\n position += item.height + gap.vertical;\n }\n });\n };\n\n /**\n @method _commit\n */\n commit = (): void => {\n const items = this.sortedItems;\n const itemModels = items.map((item) => item.model);\n const draggedItem = items.find((item) => item.wasDropped);\n let draggedModel;\n\n if (draggedItem) {\n draggedItem.wasDropped = false; // Reset\n draggedModel = draggedItem.model;\n }\n\n this._updateItems();\n this._onChange(itemModels, draggedModel);\n };\n\n _onChange = (itemModels: T[], draggedModel: T | undefined): void => {\n if (this.onChange) {\n this.onChange(itemModels, draggedModel);\n }\n };\n\n /**\n * Keeps the UI in sync with actual changes.\n * Needed for drag and keyboard operations.\n */\n _updateItems(): void {\n const items = this.sortedItems;\n\n delete this._firstItemPosition;\n\n schedule('render', () => {\n items.forEach((item) => item.freeze());\n });\n\n schedule('afterRender', () => {\n items.forEach((item) => item.reset());\n });\n\n next(() => {\n schedule('render', () => {\n items.forEach((item) => item.thaw());\n });\n });\n }\n\n _createAnnouncer = (): HTMLSpanElement => {\n const announcer = document.createElement('span');\n announcer.setAttribute('aria-live', 'polite');\n announcer.classList.add('visually-hidden');\n return announcer;\n };\n\n _calculateGridPosition(\n a: SortableItemModifier<T>,\n b: SortableItemModifier<T>,\n groupWidth: number,\n ): {\n ax: number;\n ay: number;\n bx: number;\n by: number;\n } {\n const groupTopPos = (a.element.parentNode as HTMLElement | null)?.offsetTop ?? 0;\n const groupLeftPos = (a.element.parentNode as HTMLElement | null)?.offsetLeft ?? 0;\n\n const position = {\n ax: a.x,\n ay: a.y,\n bx: b.x,\n by: b.y,\n };\n\n if (a.isDragging) {\n const dragItemPos = this._calculateGridDragItemPos(\n position.ax,\n position.ay,\n position.bx,\n position.by,\n b.width,\n b.height,\n a.moveDirection,\n groupTopPos,\n groupLeftPos,\n groupWidth,\n );\n position.ax = dragItemPos.x;\n position.ay = dragItemPos.y;\n } else if (b.isDragging) {\n const dragItemPos = this._calculateGridDragItemPos(\n position.bx,\n position.by,\n position.ax,\n position.ay,\n a.width,\n a.height,\n b.moveDirection,\n groupTopPos,\n groupLeftPos,\n groupWidth,\n );\n position.bx = dragItemPos.x;\n position.by = dragItemPos.y;\n }\n\n // Math.hypot needs always a positive number (-5 = 5 in hypot).\n // As a negative number will be positive, we need to fake position from non dragged element\n if (a.isDragging && position.ax <= 0) {\n position.ax = 0;\n position.bx = 1;\n }\n\n if (b.isDragging && position.bx <= 0) {\n position.bx = 0;\n position.ax = 1;\n }\n\n return position;\n }\n\n _calculateGridDragItemPos(\n x: number,\n y: number,\n otherX: number,\n otherY: number,\n width: number,\n height: number,\n moveDirection: MoveDirection,\n groupTopPos: number,\n groupLeftPos: number,\n groupWidth: number,\n ): Position {\n const toleranceWidth = width / 4;\n const initialX = x;\n\n if (moveDirection.left) {\n x = x - toleranceWidth;\n }\n\n if (moveDirection.right) {\n x = x + toleranceWidth;\n // Calculate the maximum of items in row & the maximal x-position of last item\n const itemsPerRow = Math.floor(groupWidth / width);\n const possibleLastItemPos = (itemsPerRow - 1) * width + groupLeftPos;\n if (otherX > initialX && x + width > possibleLastItemPos - 1) {\n // Removing one pixel is necessary to move drag item before other element\n x = possibleLastItemPos - 1;\n }\n }\n\n if (y < groupTopPos) {\n y = groupTopPos;\n }\n\n const toleranceHeight = height / 4;\n\n // When item is moved a quarter of height to top, user wants to move up\n if (moveDirection.top && y - height + toleranceHeight <= otherY && y >= otherY) {\n y = otherY;\n // tolerance that it doesn't jump directly in previews line\n } else if (moveDirection.top && y >= otherY - toleranceHeight && y <= otherY) {\n y = otherY;\n }\n\n // When item is moved a quarter of height to bottom, user wants to move down\n if (moveDirection.bottom && y <= otherY + height - toleranceHeight && y >= otherY) {\n y = otherY;\n // tolerance that it doesn't jump directly in next line\n } else if (moveDirection.bottom && y > otherY - toleranceHeight && y <= otherY) {\n y = otherY;\n }\n\n return {\n x: x,\n y: y,\n };\n }\n\n // end of API\n\n addEventListener(): void {\n this.element.addEventListener('keydown', this.keyDown);\n this.element.addEventListener('focusout', this.focusOut);\n }\n\n removeEventListener(): void {\n this.element.removeEventListener('keydown', this.keyDown);\n this.element.removeEventListener('focusout', this.focusOut);\n }\n\n element!: HTMLElement;\n didSetup = false;\n named!: NamedArgs<SortableGroupModifierSignature<T>>;\n\n constructor(owner: Owner, args: ArgsFor<SortableGroupModifierSignature<T>>) {\n super(owner, args);\n registerDestructor(this, cleanup);\n }\n\n override modify(\n element: HTMLElement,\n _positional: PositionalArgs<SortableGroupModifierSignature<T>>,\n named: NamedArgs<SortableGroupModifierSignature<T>>,\n ) {\n this.element = element;\n this.named = named;\n\n this.removeEventListener();\n\n if (!this.didSetup) {\n this._groupDef = this.sortableService.fetchGroup(this.groupName);\n this.announcer = this._createAnnouncer();\n this.element.insertAdjacentElement('afterend', this.announcer);\n this.sortableService.registerGroup(this.groupName, this);\n\n this.didSetup = true;\n }\n\n if (this.disabled) {\n return;\n }\n\n this.addEventListener();\n }\n}\n\n/**\n *\n * @param {SortableGroupModifier} instance\n */\nfunction cleanup<T>(instance: SortableGroupModifier<T>) {\n clearTimeout(instance._announcerResetTimer);\n if (instance.announcer?.parentNode) {\n instance.announcer.parentNode.removeChild(instance.announcer);\n }\n instance.removeEventListener();\n instance.sortableService.deregisterGroup(instance.groupName);\n}\n"],"names":["service","s","inject","GRID_WRAP_EPSILON","NO_MODEL","SortableGroupModifier","_dec","_class","Modifier","disabled","named","handleVisualClass","a11yAnnouncementConfig","defaultA11yAnnouncementConfig","itemVisualClass","a11yItemName","_isElementWithinHandle","element","closest","_move","fromIndex","toIndex","direction","sortedItems","item","nextItem","value","dimension","valueX","x","valueY","y","width","height","_handleKeyboardReorder","event","selectedItem","_selectedItem","isDownArrowKey","moveItem","isUpArrowKey","isLeftArrowKey","isRightArrowKey","isEnterKey","isSpaceKey","itemElement","_announceAction","ANNOUNCEMENT_ACTION_TYPES","CONFIRM","confirmKeyboardSelection","isRetainingFocus","scheduleOnce","_focusItem","isEscapeKey","_selectedItemElement","CANCEL","cancelKeyboardSelection","moves","delta","sortedIndex","indexOf","newSortedIndex","length","MOVE","_updateHandleVisualIndicators","push","_disableKeyboardReorderMode","_tearDownA11yApplicationContainer","wasDropped","commit","_updateItemVisualIndicators","_resetItemSelection","type","index","announcer","config","maxLength","message","clearTimeout","_announcerResetTimer","textContent","setTimeout","isActive","classList","add","remove","isUpdate","handle","querySelector","visualHandle","visualKeys","forEach","visualKey","focus","_enableKeyboardReorderMode","isKeyboardReorderModeEnabled","_setupA11yApplicationContainer","setAttribute","tabIndex","removeAttribute","_prepareKeyboardReorderMode","onChange","groupName","items","_groupDef","set","firstItemPosition","spacing","groupStyles","getComputedStyle","groupWidth","parseFloat","sort","a","b","ax","ay","bx","by","_calculateGridPosition","_updateItems","_firstItemPosition","schedule","freeze","reset","next","thaw","groupTopPos","parentNode","offsetTop","groupLeftPos","offsetLeft","position","isDragging","dragItemPos","_calculateGridDragItemPos","moveDirection","otherX","otherY","toleranceWidth","initialX","left","right","itemsPerRow","Math","floor","possibleLastItemPos","toleranceHeight","top","bottom","addEventListener","keyDown","focusOut","removeEventListener","constructor","owner","args","_defineProperty","document","activeElement","isKeyDownEnabled","ACTIVATE","preventDefault","move","pop","_initializerDefineProperty","_descriptor","group","_group","axis","undefined","gap","getGap","groupPositionRight","lastTopOffset","maxPrevHeight","getBoundingClientRect","isDestroyed","round","isBusy","vertical","horizontal","itemModels","map","model","draggedItem","find","draggedModel","_onChange","createElement","registerDestructor","cleanup","modify","_positional","didSetup","sortableService","fetchGroup","_createAnnouncer","insertAdjacentElement","registerGroup","_applyDecoratedDescriptor","prototype","configurable","enumerable","writable","initializer","instance","removeChild","deregisterGroup"],"mappings":"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"}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
import { a as _defineProperty, _ as _applyDecoratedDescriptor, b as _initializerDefineProperty } from '../_rollupPluginBabelHelpers-
|
|
1
|
+
import { a as _defineProperty, _ as _applyDecoratedDescriptor, b as _initializerDefineProperty } from '../_rollupPluginBabelHelpers-060f9720.js';
|
|
2
2
|
import Modifier from 'ember-modifier';
|
|
3
|
-
import { action, set } from '@ember/object';
|
|
4
3
|
import { DRAG_ACTIONS, END_ACTIONS, ELEMENT_CLICK_ACTION } from '../utils/constant.js';
|
|
5
4
|
import { bind, scheduleOnce, throttle, later, run } from '@ember/runloop';
|
|
6
5
|
import { isTesting, macroCondition, isDevelopingApp } from '@embroider/macros';
|
|
@@ -352,35 +351,6 @@ let SortableItemModifier = (_dec = service('ember-sortable-internal-state'), _cl
|
|
|
352
351
|
/**
|
|
353
352
|
@method mouseDown
|
|
354
353
|
*/
|
|
355
|
-
mouseDown(event) {
|
|
356
|
-
if (event.which !== 1) {
|
|
357
|
-
return;
|
|
358
|
-
}
|
|
359
|
-
if (event.ctrlKey) {
|
|
360
|
-
return;
|
|
361
|
-
}
|
|
362
|
-
this._primeDrag(event);
|
|
363
|
-
}
|
|
364
|
-
keyDown(event) {
|
|
365
|
-
if (this.isDisabled) {
|
|
366
|
-
return;
|
|
367
|
-
}
|
|
368
|
-
this.setupHandleElement();
|
|
369
|
-
|
|
370
|
-
// If the event is coming from within the item, we do not want to activate keyboard reorder mode.
|
|
371
|
-
if (event.target === this.handleElement || event.target === this.element) {
|
|
372
|
-
this.sortableGroup.activateKeyDown(this);
|
|
373
|
-
} else {
|
|
374
|
-
this.sortableGroup.deactivateKeyDown();
|
|
375
|
-
}
|
|
376
|
-
}
|
|
377
|
-
|
|
378
|
-
/**
|
|
379
|
-
@method touchStart
|
|
380
|
-
*/
|
|
381
|
-
touchStart(event) {
|
|
382
|
-
this._primeDrag(event);
|
|
383
|
-
}
|
|
384
354
|
|
|
385
355
|
/**
|
|
386
356
|
@method freeze
|
|
@@ -490,7 +460,7 @@ let SortableItemModifier = (_dec = service('ember-sortable-internal-state'), _cl
|
|
|
490
460
|
END_ACTIONS.forEach(event => window.addEventListener(event, drop));
|
|
491
461
|
if (!this.sortableGroup) return;
|
|
492
462
|
this.sortableGroup.prepare();
|
|
493
|
-
|
|
463
|
+
this.isDragging = true;
|
|
494
464
|
this.onDragStart(this.model);
|
|
495
465
|
this._scrollOnEdges(drag);
|
|
496
466
|
}
|
|
@@ -564,6 +534,8 @@ let SortableItemModifier = (_dec = service('ember-sortable-internal-state'), _cl
|
|
|
564
534
|
const speed = this.maxScrollSpeed;
|
|
565
535
|
delta = Math.min(Math.max(delta, -1 * speed), speed);
|
|
566
536
|
delta = scrollContainer[scrollKey](scroll + delta) - scroll;
|
|
537
|
+
}
|
|
538
|
+
if (delta !== 0) {
|
|
567
539
|
const event = createFakeEvent();
|
|
568
540
|
if (event) {
|
|
569
541
|
if (scrollContainer.isWindow) {
|
|
@@ -712,8 +684,8 @@ let SortableItemModifier = (_dec = service('ember-sortable-internal-state'), _cl
|
|
|
712
684
|
// This is necessary for direction grid, otherwise ordering is not working correctly (because in sortedItems we check if item isDragged)
|
|
713
685
|
// Calling this getter here, makes no difference for other directions
|
|
714
686
|
const sortedItems = this.sortableGroup.sortedItems;
|
|
715
|
-
|
|
716
|
-
|
|
687
|
+
this.isDragging = false;
|
|
688
|
+
this.isDropping = true;
|
|
717
689
|
this.sortableGroup.update(sortedItems);
|
|
718
690
|
const allTransitionPromise = this._waitForAllTransitions();
|
|
719
691
|
Promise.all([transitionPromise, allTransitionPromise]).then(() => this._complete());
|
|
@@ -829,8 +801,8 @@ let SortableItemModifier = (_dec = service('ember-sortable-internal-state'), _cl
|
|
|
829
801
|
*/
|
|
830
802
|
_complete() {
|
|
831
803
|
this.onDragStop(this.model);
|
|
832
|
-
|
|
833
|
-
|
|
804
|
+
this.isDropping = false;
|
|
805
|
+
this.wasDropped = true;
|
|
834
806
|
this.sortableGroup.commit();
|
|
835
807
|
}
|
|
836
808
|
get isAnimated() {
|
|
@@ -980,6 +952,34 @@ let SortableItemModifier = (_dec = service('ember-sortable-internal-state'), _cl
|
|
|
980
952
|
_defineProperty(this, "_isDragging", false);
|
|
981
953
|
_defineProperty(this, "_isDropping", false);
|
|
982
954
|
_defineProperty(this, "wasDropped", false);
|
|
955
|
+
_defineProperty(this, "mouseDown", event => {
|
|
956
|
+
if (event.which !== 1) {
|
|
957
|
+
return;
|
|
958
|
+
}
|
|
959
|
+
if (event.ctrlKey) {
|
|
960
|
+
return;
|
|
961
|
+
}
|
|
962
|
+
this._primeDrag(event);
|
|
963
|
+
});
|
|
964
|
+
_defineProperty(this, "keyDown", event => {
|
|
965
|
+
if (this.isDisabled) {
|
|
966
|
+
return;
|
|
967
|
+
}
|
|
968
|
+
this.setupHandleElement();
|
|
969
|
+
|
|
970
|
+
// If the event is coming from within the item, we do not want to activate keyboard reorder mode.
|
|
971
|
+
if (event.target === this.handleElement || event.target === this.element) {
|
|
972
|
+
this.sortableGroup.activateKeyDown(this);
|
|
973
|
+
} else {
|
|
974
|
+
this.sortableGroup.deactivateKeyDown();
|
|
975
|
+
}
|
|
976
|
+
});
|
|
977
|
+
/**
|
|
978
|
+
@method touchStart
|
|
979
|
+
*/
|
|
980
|
+
_defineProperty(this, "touchStart", event => {
|
|
981
|
+
this._primeDrag(event);
|
|
982
|
+
});
|
|
983
983
|
_defineProperty(this, "_prepareDragListener", void 0);
|
|
984
984
|
_defineProperty(this, "_cancelStartDragListener", void 0);
|
|
985
985
|
_defineProperty(this, "maxScrollSpeed", 20);
|
|
@@ -1016,7 +1016,7 @@ let SortableItemModifier = (_dec = service('ember-sortable-internal-state'), _cl
|
|
|
1016
1016
|
enumerable: true,
|
|
1017
1017
|
writable: true,
|
|
1018
1018
|
initializer: null
|
|
1019
|
-
}),
|
|
1019
|
+
}), _class);
|
|
1020
1020
|
/**
|
|
1021
1021
|
*
|
|
1022
1022
|
* @param {SortableItemModifier} instance
|