UNPKG

@column-resizer/core

Version:

[![GitHub license](https://img.shields.io/badge/license-MIT-blue.svg)](https://github.com/Runjuu/column-resizer/blob/main/LICENSE) [![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg)](#contributing) [![code style: prettier](https://i

1 lines 44.6 kB
{"version":3,"sources":["../../src/index.ts","../../src/types.ts","../../src/utils/calculate-coordinate-offset.ts","../../src/utils/collect-size-related-info.ts","../../src/utils/is-valid-number.ts","../../src/utils/get-next-size-related-info.ts","../../src/utils/bar-store.ts","../../src/utils/column-events.ts","../../src/utils/column-items-cache.ts","../../src/utils/disable-passive.ts","../../src/utils/is-solid-item.ts","../../src/utils/is-disabled-responsive.ts","../../src/utils/is-valid-type.ts","../../src/utils/parse-resizer-items.ts","../../src/resizer.ts","../../src/column-items/column-instance.ts","../../src/column-items/column-bar.ts","../../src/column-items/column-section.ts","../../src/column-resizer.ts"],"sourcesContent":["export * from './resizer';\nexport * from './column-resizer';\nexport * from './types';\n","export type Coordinate = {\n x: number;\n y: number;\n};\n\nexport enum ItemType {\n BAR = 'BAR',\n SECTION = 'SECTION',\n}\n\nexport type Trend = -1 | 0 | 1;\n\nexport enum BarActionType {\n ACTIVATE = 'activate',\n MOVE = 'move',\n DEACTIVATE = 'deactivate',\n}\n\nexport type BarAction = {\n type: BarActionType;\n coordinate: Coordinate;\n barIndex: number;\n};\n\nexport type SizeInfo = {\n elm: HTMLElement;\n isSolid: boolean;\n currentSize: number;\n maxSize?: number;\n minSize?: number;\n disableResponsive?: boolean;\n};\n\nexport type SizeRelatedInfo = {\n discard?: boolean;\n sizeInfoArray: SizeInfo[];\n flexGrowRatio: number;\n};\n\nexport type ColumnResizerEventMap = {\n 'bar:click': null;\n 'bar:status-change': { isActive: boolean };\n 'section:size-change': { size: number };\n 'column:activate': null;\n 'column:after-resizing': null;\n};\n","import { Coordinate } from '../types';\n\nexport const DEFAULT_COORDINATE_OFFSET: Coordinate = { x: 0, y: 0 };\n\nexport function calculateCoordinateOffset(\n current: Coordinate,\n previous: Coordinate | null,\n): Coordinate {\n if (previous) {\n return {\n x: current.x - previous.x,\n y: current.y - previous.y,\n };\n } else {\n return DEFAULT_COORDINATE_OFFSET;\n }\n}\n","import { SizeInfo, SizeRelatedInfo } from '../types';\n\nexport function collectSizeRelatedInfo() {\n const sizeInfoArray: SizeInfo[] = [];\n let responsiveChildCount = 0;\n let responsiveContainerSize = 0;\n\n return {\n collect(sizeInfo: SizeInfo) {\n sizeInfoArray.push(sizeInfo);\n\n if (!sizeInfo.disableResponsive) {\n responsiveChildCount += 1;\n responsiveContainerSize += sizeInfo.currentSize;\n }\n },\n\n getResult(): SizeRelatedInfo {\n return {\n sizeInfoArray,\n flexGrowRatio: responsiveChildCount / responsiveContainerSize,\n };\n },\n };\n}\n","export function isValidNumber(num?: unknown): num is number {\n return Number.isFinite(num) && (num as number) > 0;\n}\n","import { SizeInfo, SizeRelatedInfo, Trend } from '../types';\n\nimport { collectSizeRelatedInfo } from './collect-size-related-info';\nimport { isValidNumber } from './is-valid-number';\n\nexport function getNextSizeRelatedInfo(\n barIndex: number,\n offset: number,\n sizeInfoArray: SizeInfo[],\n flipResizeMoveDirection: boolean | undefined,\n): SizeRelatedInfo {\n const { collect, getResult } = collectSizeRelatedInfo();\n const trend = flipResizeMoveDirection ? 1 : -1;\n\n const leftResult = resize(barIndex, offset, trend, sizeInfoArray);\n const rightResult = resize(barIndex, -offset, -trend as Trend, sizeInfoArray);\n\n const leftUsedOffset = offset - leftResult.remainingOffset;\n const rightUsedOffset = -offset - rightResult.remainingOffset;\n\n function collectAll(left: SizeInfo[], right: SizeInfo[]) {\n left.forEach(collect);\n collect(sizeInfoArray[barIndex]);\n right.forEach(collect);\n }\n\n if (leftUsedOffset === -rightUsedOffset) {\n collectAll(leftResult.sizeInfoArray, rightResult.sizeInfoArray);\n } else if (Math.abs(leftUsedOffset) < Math.abs(rightUsedOffset)) {\n // left side sections was limited\n const newRightResult = resize(barIndex, -leftUsedOffset, -trend as Trend, sizeInfoArray);\n collectAll(leftResult.sizeInfoArray, newRightResult.sizeInfoArray);\n } else {\n // right side sections was limited\n const newLeftResult = resize(barIndex, -rightUsedOffset, trend, sizeInfoArray);\n collectAll(newLeftResult.sizeInfoArray, rightResult.sizeInfoArray);\n }\n\n return getResult();\n}\n\nfunction resize(\n barIndex: number,\n offset: number,\n trend: Trend,\n sizeInfoArray: SizeInfo[],\n): { sizeInfoArray: SizeInfo[]; remainingOffset: number } {\n const newSizeInfoArray: SizeInfo[] = [];\n let prevRemainingOffset = offset;\n\n for (\n let sectionIndex = barIndex + trend;\n isValidSectionIndex(sectionIndex);\n sectionIndex += trend\n ) {\n if (prevRemainingOffset) {\n const { sizeInfo, remainingOffset } = doResize(\n prevRemainingOffset,\n sizeInfoArray[sectionIndex],\n );\n\n prevRemainingOffset = remainingOffset;\n collect(sizeInfo);\n } else {\n collect(sizeInfoArray[sectionIndex]);\n }\n }\n\n function collect(sizeInfo: SizeInfo) {\n if (trend === -1) {\n newSizeInfoArray.unshift(sizeInfo);\n } else {\n newSizeInfoArray.push(sizeInfo);\n }\n }\n\n function isValidSectionIndex(sectionID: number): boolean {\n if (trend === -1) {\n return sectionID >= 0;\n } else {\n return sectionID <= sizeInfoArray.length - 1;\n }\n }\n\n return {\n sizeInfoArray: newSizeInfoArray,\n remainingOffset: prevRemainingOffset,\n };\n}\n\nfunction doResize(\n offset: number,\n sizeInfo: SizeInfo,\n): { remainingOffset: number; sizeInfo: SizeInfo } {\n if (sizeInfo.isSolid) {\n return {\n remainingOffset: offset,\n sizeInfo,\n };\n }\n\n const { nextSize, remainingOffset } = filterSize(sizeInfo.currentSize + offset, sizeInfo);\n\n return {\n sizeInfo: { ...sizeInfo, currentSize: nextSize },\n remainingOffset,\n };\n}\n\nfunction filterSize(\n nextSize: number,\n { maxSize, minSize = 0 }: SizeInfo,\n): { nextSize: number; remainingOffset: number } {\n if (nextSize < minSize) {\n return {\n nextSize: minSize,\n remainingOffset: nextSize - minSize,\n };\n }\n\n if (isValidNumber(maxSize) && nextSize > maxSize) {\n return {\n nextSize: maxSize,\n remainingOffset: nextSize - maxSize,\n };\n }\n\n return {\n nextSize,\n remainingOffset: 0,\n };\n}\n","import { BarAction, BarActionType, Coordinate, SizeInfo, SizeRelatedInfo } from '../types';\n\nimport { DEFAULT_COORDINATE_OFFSET } from './calculate-coordinate-offset';\nimport { getNextSizeRelatedInfo } from './get-next-size-related-info';\n\nexport interface BarActionScanResult extends SizeRelatedInfo {\n barIndex: number;\n offset: number;\n type: BarActionType;\n originalCoordinate: Coordinate;\n defaultSizeInfoArray: SizeInfo[];\n}\n\ninterface ScanBarActionConfig {\n getSizeRelatedInfo: () => SizeRelatedInfo;\n calculateOffset: (current: Coordinate, original: Coordinate) => number;\n flipResizeMoveDirection?: boolean;\n}\n\nconst DEFAULT_BAR_ACTION_SCAN_RESULT: BarActionScanResult = {\n barIndex: -1,\n offset: 0,\n type: BarActionType.DEACTIVATE,\n originalCoordinate: DEFAULT_COORDINATE_OFFSET,\n defaultSizeInfoArray: [],\n sizeInfoArray: [],\n discard: true,\n flexGrowRatio: 0,\n};\n\ntype Callback = (state: BarActionScanResult) => void;\n\nexport function createBarStore(config: ScanBarActionConfig) {\n let currentState = DEFAULT_BAR_ACTION_SCAN_RESULT;\n const callbackSet = new Set<Callback>();\n\n return {\n dispatch(action: BarAction) {\n currentState = (() => {\n const result = {\n barIndex: action.barIndex,\n type: action.type,\n };\n\n switch (action.type) {\n case BarActionType.ACTIVATE:\n const { sizeInfoArray, flexGrowRatio } = config.getSizeRelatedInfo();\n\n return {\n ...DEFAULT_BAR_ACTION_SCAN_RESULT,\n ...result,\n originalCoordinate: action.coordinate,\n defaultSizeInfoArray: sizeInfoArray,\n sizeInfoArray,\n flexGrowRatio,\n };\n case BarActionType.MOVE:\n const offset = config.calculateOffset(\n action.coordinate,\n currentState.originalCoordinate,\n );\n\n return {\n ...result,\n ...getNextSizeRelatedInfo(\n action.barIndex,\n offset,\n currentState.defaultSizeInfoArray,\n config.flipResizeMoveDirection,\n ),\n offset,\n originalCoordinate: currentState.originalCoordinate,\n defaultSizeInfoArray: currentState.defaultSizeInfoArray,\n discard: false,\n };\n case BarActionType.DEACTIVATE:\n return DEFAULT_BAR_ACTION_SCAN_RESULT;\n }\n })();\n\n callbackSet.forEach((callback) => callback(currentState));\n },\n\n subscribe(callback: Callback) {\n callbackSet.add(callback);\n\n return () => callbackSet.delete(callback);\n },\n\n unsubscribeAll() {\n callbackSet.clear();\n },\n };\n}\n","import { ColumnResizerEventMap } from '../types';\n\ntype DisposeFn = () => void;\n\nexport function dispatchResizerEvent<E extends Element, K extends keyof ColumnResizerEventMap>(\n elm: E | null,\n key: K,\n detail: ColumnResizerEventMap[K],\n) {\n elm?.dispatchEvent(new CustomEvent(key, { detail }));\n}\n\nexport class ResizerEventHub {\n private disposeFnSet = new Set<DisposeFn>();\n\n watchResizerEvent = <E extends Element, K extends keyof ColumnResizerEventMap>(\n elm: E | null,\n key: K,\n callback: (event: CustomEvent<ColumnResizerEventMap[K]>) => void,\n ): DisposeFn => {\n elm?.addEventListener(key, callback as EventListener);\n\n const disposeFn = () => elm?.removeEventListener(key, callback as EventListener);\n\n this.disposeFnSet.add(disposeFn);\n\n return disposeFn;\n };\n\n reset = () => {\n this.disposeFnSet.forEach((dispose) => dispose());\n this.disposeFnSet.clear();\n };\n}\n","import type { ColumnInstance } from '../column-items/column-instance';\n\nexport type ResizerItems = ReadonlyArray<ColumnInstance>;\n\nexport class ColumnItemsCache {\n private infoMap = new Map<ColumnInstance['elm'], { item: ColumnInstance; index: number }>();\n private items: ResizerItems = [];\n\n update(items: ResizerItems) {\n this.infoMap.clear();\n this.items.forEach((item) => item.destroy());\n this.items = items;\n\n items.forEach((item, index) => {\n this.infoMap.set(item.elm, { item, index });\n });\n }\n\n reset() {\n this.update([]);\n }\n\n getItems() {\n return this.items;\n }\n\n getItem(elm: ColumnInstance['elm']): ColumnInstance | null {\n return this.infoMap.get(elm)?.item ?? null;\n }\n\n getItemIndex(elm: ColumnInstance['elm']): number | null {\n return this.infoMap.get(elm)?.index ?? null;\n }\n}\n","export let DISABLE_PASSIVE: boolean | AddEventListenerOptions = true;\n\ntry {\n // @ts-expect-error https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener#safely_detecting_option_support\n window.addEventListener('test', null, {\n get passive() {\n DISABLE_PASSIVE = { passive: false };\n return true;\n },\n });\n} catch {}\n","import { ColumnSectionConfig } from '../column-items';\n\nimport { isValidNumber } from './is-valid-number';\n\nexport function isSolidItem({ size }: ColumnSectionConfig): boolean {\n return isValidNumber(size);\n}\n","import { ColumnSectionConfig } from '../column-items';\n\nimport { isSolidItem } from './is-solid-item';\n\nexport function isDisabledResponsive(config: ColumnSectionConfig): boolean {\n const { disableResponsive } = config;\n\n if (isSolidItem(config) && disableResponsive === undefined) {\n return true;\n } else {\n return !!disableResponsive;\n }\n}\n","import { ItemType } from '../types';\n\nexport function isValidType(type: string | null): type is ItemType {\n return !!type && type in ItemType;\n}\n","import { ItemType } from '../types';\n\nimport { isValidType } from './is-valid-type';\n\nexport type ParsedResizerItem = {\n type: ItemType;\n elm: HTMLElement;\n};\n\nexport type ParsedResizerItems = ParsedResizerItem[];\n\nexport function resizerItemAttributes<T>(type: ItemType) {\n return (config: T) => ({\n 'data-item-type': type,\n 'data-item-config': JSON.stringify(config),\n });\n}\n\nexport function parseResizerItems(container: HTMLElement): ParsedResizerItems {\n return Array.from(container.childNodes)\n .map((elm) => {\n if (!(elm instanceof HTMLElement)) return null;\n\n const type = elm.getAttribute('data-item-type');\n\n if (isValidType(type)) {\n return { type, elm };\n } else {\n return null;\n }\n })\n .filter(<T>(item: T): item is Exclude<T, null> => !!item);\n}\n\nexport function parseItemConfig({ elm }: { elm: HTMLElement }): Record<string, unknown> {\n try {\n const config = JSON.parse(elm.getAttribute('data-item-config') ?? '');\n return config && typeof config === 'object' ? config : {};\n } catch {\n return {};\n }\n}\n","import { SizeRelatedInfo } from './types';\nimport { BarActionScanResult, getNextSizeRelatedInfo } from './utils';\n\ntype ResizeResult = SizeRelatedInfo | BarActionScanResult;\n\nfunction getBarIndex(indexOfBar: number): number {\n return indexOfBar * 2 + 1;\n}\n\nfunction getSectionIndex(indexOfSection: number): number {\n return indexOfSection * 2;\n}\n\nexport class Resizer {\n private isDiscarded = false;\n\n constructor(private resizeResult: ResizeResult) {}\n\n resizeSection(indexOfSection: number, config: { toSize: number; preferMoveLeftBar?: boolean }) {\n if (this.isDiscarded) {\n return;\n }\n\n const sectionID = getSectionIndex(indexOfSection);\n const currentSize = this.getSize(sectionID);\n\n if (currentSize >= 0 && config.toSize >= 0) {\n const offset = config.toSize - currentSize;\n\n if (sectionID === this.resizeResult.sizeInfoArray.length - 1 || config.preferMoveLeftBar) {\n this.moveBar(indexOfSection - 1, { withOffset: -offset });\n } else {\n this.moveBar(indexOfSection, { withOffset: offset });\n }\n }\n }\n\n moveBar(indexOfBar: number, config: { withOffset: number }) {\n if (this.isDiscarded) {\n return;\n }\n\n this.resizeResult = getNextSizeRelatedInfo(\n getBarIndex(indexOfBar),\n config.withOffset,\n this.resizeResult.sizeInfoArray,\n undefined,\n );\n }\n\n discard() {\n this.isDiscarded = true;\n }\n\n isSectionResized(indexOfSection: number): boolean {\n const sectionID = getSectionIndex(indexOfSection);\n\n if ('defaultSizeInfoArray' in this.resizeResult) {\n return (\n this.getSize(sectionID) !== this.resizeResult.defaultSizeInfoArray[sectionID].currentSize\n );\n } else {\n return false;\n }\n }\n\n isBarActivated(indexOfBar: number): boolean {\n if ('barIndex' in this.resizeResult) {\n return this.resizeResult.barIndex === getBarIndex(indexOfBar);\n } else {\n return false;\n }\n }\n\n getSectionSize(indexOfSection: number) {\n return this.getSize(getSectionIndex(indexOfSection));\n }\n\n getResult(): SizeRelatedInfo {\n return { ...this.resizeResult, discard: this.isDiscarded };\n }\n\n getTotalSize(): number {\n return this.resizeResult.sizeInfoArray\n .filter((sizeInfo, index) => sizeInfo && index % 2 === 0)\n .reduce((total, { currentSize }) => total + currentSize, 0);\n }\n\n private getSize(index: number): number | -1 {\n const sizeInfo = this.resizeResult.sizeInfoArray[index];\n return sizeInfo ? sizeInfo.currentSize : -1;\n }\n}\n","import { ItemType } from '../types';\n\nexport abstract class ColumnInstance<Config = unknown> {\n private _config: Config;\n private _observer: MutationObserver;\n\n get config(): Config {\n return this._config;\n }\n\n protected constructor(\n public readonly type: ItemType,\n public readonly elm: HTMLElement,\n private readonly getConfig: () => Config,\n ) {\n this._config = this.getConfig();\n this._observer = new MutationObserver(() => (this._config = this.getConfig()));\n this._observer.observe(elm, { attributes: true, attributeFilter: ['data-item-config'] });\n }\n\n destroy() {\n this._observer.disconnect();\n }\n}\n","import { BarAction, BarActionType, Coordinate, ItemType } from '../types';\nimport {\n DISABLE_PASSIVE,\n ParsedResizerItem,\n dispatchResizerEvent,\n isValidNumber,\n parseItemConfig,\n} from '../utils';\n\nimport { ColumnInstance } from './column-instance';\n\nexport type DispatchBarAction = (elm: HTMLElement, action: Omit<BarAction, 'barIndex'>) => void;\n\nexport type ColumnBarConfig = {\n size: number;\n};\n\ntype ValidElmEventKey = {\n [K in keyof HTMLElementEventMap]: K extends `${'touch' | 'mouse'}${string}` ? K : never;\n}[keyof HTMLElementEventMap];\n\ntype ValidElm = {\n addEventListener<K extends ValidElmEventKey>(\n type: K,\n listener: (this: HTMLElement, ev: HTMLElementEventMap[K]) => any,\n options?: boolean | AddEventListenerOptions,\n ): void;\n removeEventListener<K extends ValidElmEventKey>(\n type: K,\n listener: (this: HTMLElement, ev: HTMLElementEventMap[K]) => any,\n options?: boolean | EventListenerOptions,\n ): void;\n};\n\nexport class ColumnBar extends ColumnInstance<ColumnBarConfig> {\n static getStyle({ size }: ColumnBarConfig) {\n return {\n flex: `0 0 ${size}px`,\n };\n }\n\n private isActive = false;\n private isValidClick = true;\n\n constructor(\n item: ParsedResizerItem,\n private readonly dispatchBarAction: DispatchBarAction,\n ) {\n super(ItemType.BAR, item.elm, () => getConfig(item));\n\n const disposeList = [\n this.attachListener(this.elm, 'mousedown', BarActionType.ACTIVATE),\n this.attachListener(document, 'mousemove', BarActionType.MOVE),\n this.attachListener(document, 'mouseup', BarActionType.DEACTIVATE),\n\n this.attachListener(this.elm, 'touchstart', BarActionType.ACTIVATE, DISABLE_PASSIVE),\n this.attachListener(document, 'touchmove', BarActionType.MOVE, DISABLE_PASSIVE),\n this.attachListener(document, 'touchend', BarActionType.DEACTIVATE),\n this.attachListener(document, 'touchcancel', BarActionType.DEACTIVATE),\n ];\n\n this.destroy = () => {\n super.destroy();\n disposeList.forEach((dispose) => dispose());\n };\n }\n\n private attachListener<K extends ValidElmEventKey>(\n elm: ValidElm,\n event: K,\n type: BarActionType,\n options?: boolean | AddEventListenerOptions,\n ) {\n const handler = (event: MouseEvent | TouchEvent) => {\n this.disableUserSelectIfResizing(event, type);\n const { clientX: x, clientY: y } = ('touches' in event ? event.touches[0] : event) || {\n clientX: 0,\n clientY: 0,\n };\n this.triggerAction(this.elm, type, { x, y });\n };\n\n elm.addEventListener(event, handler, options);\n\n return () => elm.removeEventListener(event, handler, options);\n }\n\n private disableUserSelectIfResizing(event: MouseEvent | TouchEvent, type: BarActionType) {\n if (this.isActive || type === BarActionType.ACTIVATE) {\n event.preventDefault();\n }\n }\n\n private triggerAction(elm: HTMLElement, type: BarActionType, coordinate: Coordinate) {\n if (this.isActive || type === BarActionType.ACTIVATE) {\n this.dispatchBarAction(elm, { type, coordinate });\n }\n\n if (this.isActive && this.isValidClick && type === BarActionType.DEACTIVATE) {\n this.isValidClick = false; // avoid trigger twice on mobile.\n // touch and click\n dispatchResizerEvent(elm, 'bar:click', null);\n }\n\n this.updateStatusIfNeed(elm, type);\n this.updateClickStatus(type);\n }\n\n private updateStatusIfNeed(elm: HTMLElement, type: BarActionType) {\n const onStatusChanged = (isActive: boolean) => {\n if (this.isActive !== isActive) {\n this.isActive = isActive;\n dispatchResizerEvent(elm, 'bar:status-change', { isActive });\n }\n };\n\n if (type === BarActionType.ACTIVATE) {\n onStatusChanged(true);\n } else if (type === BarActionType.DEACTIVATE) {\n onStatusChanged(false);\n }\n }\n\n private updateClickStatus(type: BarActionType) {\n if (this.isActive) {\n if (type === BarActionType.ACTIVATE) {\n this.isValidClick = true;\n } else if (type === BarActionType.MOVE) {\n this.isValidClick = false;\n }\n }\n }\n}\n\nfunction getConfig(item: Pick<ParsedResizerItem, 'elm'>): ColumnBarConfig {\n const { size } = parseItemConfig(item);\n\n return {\n size: isValidNumber(size) ? size : 10,\n };\n}\n","import { ItemType, SizeInfo } from '../types';\nimport { ParsedResizerItem, dispatchResizerEvent, isValidNumber, parseItemConfig } from '../utils';\n\nimport { ColumnInstance } from './column-instance';\n\nexport type ColumnSectionConfig = {\n size?: number;\n defaultSize?: number;\n maxSize?: number;\n minSize?: number;\n disableResponsive?: boolean;\n};\n\nexport class ColumnSection extends ColumnInstance<ColumnSectionConfig> {\n static getStyle({ maxSize, minSize }: ColumnSectionConfig, vertical: boolean) {\n const toCSSSize = (size?: number) => (isValidNumber(size) ? `${size}px` : undefined);\n\n return {\n overflow: 'hidden',\n [vertical ? 'maxHeight' : 'maxWidth']: toCSSSize(maxSize),\n [vertical ? 'minHeight' : 'minWidth']: toCSSSize(minSize),\n };\n }\n\n private sizeInfo: SizeInfo | null = null;\n private flexGrowRatio = 0;\n\n constructor(item: ParsedResizerItem) {\n super(ItemType.SECTION, item.elm, () => getConfig(item));\n\n this.updateStyle();\n }\n\n update({ sizeInfo, flexGrowRatio }: { sizeInfo: SizeInfo; flexGrowRatio: number }) {\n this.sizeInfo = sizeInfo;\n this.flexGrowRatio = flexGrowRatio;\n\n this.updateStyle();\n dispatchResizerEvent(this.elm, 'section:size-change', { size: sizeInfo.currentSize });\n }\n\n private updateStyle() {\n const { flexGrow, flexShrink, flexBasis } = this.getStyle();\n this.elm.style.flexGrow = `${flexGrow}`;\n this.elm.style.flexShrink = `${flexShrink}`;\n this.elm.style.flexBasis = `${flexBasis}px`;\n }\n\n private getStyle() {\n const flexShrink = isValidNumber(this.config.size) ? 0 : this.config.disableResponsive ? 1 : 0;\n\n if (this.sizeInfo) {\n const { disableResponsive, currentSize } = this.sizeInfo;\n\n return {\n flexShrink,\n flexGrow: disableResponsive ? 0 : this.flexGrowRatio * currentSize,\n flexBasis: disableResponsive ? currentSize : 0,\n };\n } else {\n const size = this.config.size || this.config.defaultSize;\n\n if (isValidNumber(size)) {\n return { flexShrink, flexGrow: 0, flexBasis: size };\n } else {\n return { flexShrink, flexGrow: 1, flexBasis: 0 };\n }\n }\n }\n}\n\nfunction getConfig(item: Pick<ParsedResizerItem, 'elm'>): ColumnSectionConfig {\n const { size, defaultSize, maxSize, minSize, disableResponsive } = parseItemConfig(item);\n\n return {\n size: isValidNumber(size) ? size : undefined,\n defaultSize: isValidNumber(defaultSize) ? defaultSize : undefined,\n maxSize: isValidNumber(maxSize) ? maxSize : undefined,\n minSize: isValidNumber(minSize) ? minSize : undefined,\n disableResponsive: !!disableResponsive,\n };\n}\n","import {\n ColumnBar,\n ColumnBarConfig,\n ColumnSection,\n ColumnSectionConfig,\n DispatchBarAction,\n} from './column-items';\nimport { Resizer } from './resizer';\nimport { BarActionType, ItemType, SizeRelatedInfo } from './types';\nimport {\n BarActionScanResult,\n ColumnItemsCache,\n ResizerEventHub,\n ResizerItems,\n calculateCoordinateOffset,\n collectSizeRelatedInfo,\n createBarStore,\n dispatchResizerEvent,\n isDisabledResponsive,\n isSolidItem,\n parseResizerItems,\n resizerItemAttributes,\n} from './utils';\n\nexport type { ColumnSectionConfig, ColumnBarConfig };\n\nexport type ColumnResizerConfig = {\n vertical: boolean;\n rtl?: boolean;\n beforeApplyResizer?: (resizer: Resizer) => void;\n};\n\nexport class ColumnResizer {\n styles = {\n container: <T>(style?: T) =>\n ({\n ...style,\n display: 'flex',\n flexDirection: this.direction,\n }) as const,\n\n section: <T>(config: ColumnSectionConfig, style?: T) => ({\n ...style,\n ...ColumnSection.getStyle(config, this.config.vertical),\n }),\n\n bar: <T>(config: ColumnBarConfig, style?: T) => ({\n ...style,\n ...ColumnBar.getStyle(config),\n }),\n };\n\n attributes = {\n bar: resizerItemAttributes(ItemType.BAR),\n section: resizerItemAttributes(ItemType.SECTION),\n };\n\n private itemsCache = new ColumnItemsCache();\n private eventHub = new ResizerEventHub();\n\n private container: HTMLElement | null = null;\n\n private barStore: ReturnType<typeof createBarStore>;\n\n private get axis() {\n return this.config.vertical ? 'y' : 'x';\n }\n\n private get dimension() {\n return this.config.vertical ? 'height' : 'width';\n }\n\n private get direction() {\n return this.config.vertical ? 'column' : 'row';\n }\n\n get on() {\n return this.eventHub.watchResizerEvent;\n }\n\n constructor(public readonly config: Readonly<ColumnResizerConfig>) {\n this.barStore = createBarStore({\n calculateOffset: (current, original) =>\n calculateCoordinateOffset(current, original)[this.axis],\n getSizeRelatedInfo: () => this.makeSizeInfos(),\n flipResizeMoveDirection: config.rtl && !config.vertical,\n });\n }\n\n init(container: HTMLElement | null) {\n this.dispose();\n this.container = container;\n\n if (container) {\n this.itemsCache.update(\n parseResizerItems(container).map((item) => {\n switch (item.type) {\n case ItemType.BAR:\n return new ColumnBar(item, this.dispatchBarAction);\n case ItemType.SECTION:\n return new ColumnSection(item);\n }\n }),\n );\n\n this.initStyles(container, this.itemsCache.getItems());\n this.sizeRelatedInfoChange(this.makeSizeInfos());\n\n this.barStore.subscribe((state) => {\n this.monitorBarStatusChanges(state);\n this.sizeRelatedInfoChange(state);\n });\n }\n }\n\n dispose() {\n this.container = null;\n this.itemsCache.reset();\n this.barStore.unsubscribeAll();\n this.eventHub.reset();\n }\n\n getResizer(): Resizer {\n return new Resizer(this.makeSizeInfos());\n }\n\n applyResizer(resizer: Resizer): void {\n this.sizeRelatedInfoChange(resizer.getResult());\n }\n\n private dispatchBarAction: DispatchBarAction = (elm, action) => {\n const barIndex = this.itemsCache.getItemIndex(elm);\n\n if (barIndex) {\n this.barStore.dispatch({ ...action, barIndex });\n }\n };\n\n private sizeRelatedInfoChange(info: SizeRelatedInfo | BarActionScanResult) {\n if (info.discard) return;\n\n info = (() => {\n if (typeof this.config.beforeApplyResizer === 'function') {\n const resizer = new Resizer(info);\n this.config.beforeApplyResizer(resizer);\n return resizer.getResult();\n } else {\n return info;\n }\n })();\n\n if (info.discard) return;\n\n info.sizeInfoArray.forEach((sizeInfo) => {\n const item = this.itemsCache.getItem(sizeInfo.elm);\n\n if (item instanceof ColumnSection) {\n item.update({ sizeInfo, flexGrowRatio: info.flexGrowRatio });\n }\n });\n }\n\n private monitorBarStatusChanges({ type }: BarActionScanResult) {\n switch (type) {\n case BarActionType.ACTIVATE:\n return dispatchResizerEvent(this.container, 'column:activate', null);\n case BarActionType.DEACTIVATE:\n return dispatchResizerEvent(this.container, 'column:after-resizing', null);\n default:\n return;\n }\n }\n\n private makeSizeInfos(): SizeRelatedInfo {\n const { collect, getResult } = collectSizeRelatedInfo();\n\n this.itemsCache.getItems().forEach((item) => {\n if (item instanceof ColumnBar) {\n collect({\n elm: item.elm,\n disableResponsive: true,\n isSolid: true,\n currentSize: item.elm.getBoundingClientRect()[this.dimension],\n });\n }\n\n if (item instanceof ColumnSection) {\n collect({\n elm: item.elm,\n maxSize: item.config.maxSize,\n minSize: item.config.minSize,\n disableResponsive: isDisabledResponsive(item.config),\n isSolid: isSolidItem(item.config),\n currentSize: item.elm.getBoundingClientRect()[this.dimension],\n });\n }\n });\n\n return getResult();\n }\n\n private initStyles(container: HTMLElement, items: ResizerItems) {\n Object.assign(container.style, this.styles.container());\n\n items.forEach((item) => {\n if (item instanceof ColumnBar) {\n Object.assign(item.elm.style, this.styles.bar(item.config));\n }\n\n if (item instanceof ColumnSection) {\n Object.assign(item.elm.style, this.styles.section(item.config));\n }\n });\n }\n}\n"],"mappings":"yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,mBAAAE,EAAA,kBAAAC,EAAA,aAAAC,EAAA,YAAAC,IAAA,eAAAC,EAAAN,GCKO,IAAKO,OACVA,EAAA,IAAM,MACNA,EAAA,QAAU,UAFAA,OAAA,IAOAC,OACVA,EAAA,SAAW,WACXA,EAAA,KAAO,OACPA,EAAA,WAAa,aAHHA,OAAA,ICVL,IAAMC,EAAwC,CAAE,EAAG,EAAG,EAAG,CAAE,EAE3D,SAASC,EACdC,EACAC,EACY,CACZ,OAAIA,EACK,CACL,EAAGD,EAAQ,EAAIC,EAAS,EACxB,EAAGD,EAAQ,EAAIC,EAAS,CAC1B,EAEOH,CAEX,CCdO,SAASI,GAAyB,CACvC,IAAMC,EAA4B,CAAC,EAC/BC,EAAuB,EACvBC,EAA0B,EAE9B,MAAO,CACL,QAAQC,EAAoB,CAC1BH,EAAc,KAAKG,CAAQ,EAEtBA,EAAS,oBACZF,GAAwB,EACxBC,GAA2BC,EAAS,YAExC,EAEA,WAA6B,CAC3B,MAAO,CACL,cAAAH,EACA,cAAeC,EAAuBC,CACxC,CACF,CACF,CACF,CCxBO,SAASE,EAAcC,EAA8B,CAC1D,OAAO,OAAO,SAASA,CAAG,GAAMA,EAAiB,CACnD,CCGO,SAASC,EACdC,EACAC,EACAC,EACAC,EACiB,CACjB,GAAM,CAAE,QAAAC,EAAS,UAAAC,CAAU,EAAIC,EAAuB,EAChDC,EAAQJ,EAA0B,EAAI,GAEtCK,EAAaC,EAAOT,EAAUC,EAAQM,EAAOL,CAAa,EAC1DQ,EAAcD,EAAOT,EAAU,CAACC,EAAQ,CAACM,EAAgBL,CAAa,EAEtES,EAAiBV,EAASO,EAAW,gBACrCI,EAAkB,CAACX,EAASS,EAAY,gBAE9C,SAASG,EAAWC,EAAkBC,EAAmB,CACvDD,EAAK,QAAQV,CAAO,EACpBA,EAAQF,EAAcF,CAAQ,CAAC,EAC/Be,EAAM,QAAQX,CAAO,CACvB,CAEA,GAAIO,IAAmB,CAACC,EACtBC,EAAWL,EAAW,cAAeE,EAAY,aAAa,UACrD,KAAK,IAAIC,CAAc,EAAI,KAAK,IAAIC,CAAe,EAAG,CAE/D,IAAMI,EAAiBP,EAAOT,EAAU,CAACW,EAAgB,CAACJ,EAAgBL,CAAa,EACvFW,EAAWL,EAAW,cAAeQ,EAAe,aAAa,CACnE,KAAO,CAEL,IAAMC,EAAgBR,EAAOT,EAAU,CAACY,EAAiBL,EAAOL,CAAa,EAC7EW,EAAWI,EAAc,cAAeP,EAAY,aAAa,CACnE,CAEA,OAAOL,EAAU,CACnB,CAEA,SAASI,EACPT,EACAC,EACAM,EACAL,EACwD,CACxD,IAAMgB,EAA+B,CAAC,EAClCC,EAAsBlB,EAE1B,QACMmB,EAAepB,EAAWO,EAC9Bc,EAAoBD,CAAY,EAChCA,GAAgBb,EAEhB,GAAIY,EAAqB,CACvB,GAAM,CAAE,SAAAG,EAAU,gBAAAC,CAAgB,EAAIC,EACpCL,EACAjB,EAAckB,CAAY,CAC5B,EAEAD,EAAsBI,EACtBnB,EAAQkB,CAAQ,CAClB,MACElB,EAAQF,EAAckB,CAAY,CAAC,EAIvC,SAAShB,EAAQkB,EAAoB,CAC/Bf,IAAU,GACZW,EAAiB,QAAQI,CAAQ,EAEjCJ,EAAiB,KAAKI,CAAQ,CAElC,CAEA,SAASD,EAAoBI,EAA4B,CACvD,OAAIlB,IAAU,GACLkB,GAAa,EAEbA,GAAavB,EAAc,OAAS,CAE/C,CAEA,MAAO,CACL,cAAegB,EACf,gBAAiBC,CACnB,CACF,CAEA,SAASK,EACPvB,EACAqB,EACiD,CACjD,GAAIA,EAAS,QACX,MAAO,CACL,gBAAiBrB,EACjB,SAAAqB,CACF,EAGF,GAAM,CAAE,SAAAI,EAAU,gBAAAH,CAAgB,EAAII,EAAWL,EAAS,YAAcrB,EAAQqB,CAAQ,EAExF,MAAO,CACL,SAAU,CAAE,GAAGA,EAAU,YAAaI,CAAS,EAC/C,gBAAAH,CACF,CACF,CAEA,SAASI,EACPD,EACA,CAAE,QAAAE,EAAS,QAAAC,EAAU,CAAE,EACwB,CAC/C,OAAIH,EAAWG,EACN,CACL,SAAUA,EACV,gBAAiBH,EAAWG,CAC9B,EAGEC,EAAcF,CAAO,GAAKF,EAAWE,EAChC,CACL,SAAUA,EACV,gBAAiBF,EAAWE,CAC9B,EAGK,CACL,SAAAF,EACA,gBAAiB,CACnB,CACF,CChHA,IAAMK,EAAsD,CAC1D,SAAU,GACV,OAAQ,EACR,kBACA,mBAAoBC,EACpB,qBAAsB,CAAC,EACvB,cAAe,CAAC,EAChB,QAAS,GACT,cAAe,CACjB,EAIO,SAASC,EAAeC,EAA6B,CAC1D,IAAIC,EAAeJ,EACbK,EAAc,IAAI,IAExB,MAAO,CACL,SAASC,EAAmB,CAC1BF,GAAgB,IAAM,CACpB,IAAMG,EAAS,CACb,SAAUD,EAAO,SACjB,KAAMA,EAAO,IACf,EAEA,OAAQA,EAAO,KAAM,CACnB,eACE,GAAM,CAAE,cAAAE,EAAe,cAAAC,CAAc,EAAIN,EAAO,mBAAmB,EAEnE,MAAO,CACL,GAAGH,EACH,GAAGO,EACH,mBAAoBD,EAAO,WAC3B,qBAAsBE,EACtB,cAAAA,EACA,cAAAC,CACF,EACF,WACE,IAAMC,EAASP,EAAO,gBACpBG,EAAO,WACPF,EAAa,kBACf,EAEA,MAAO,CACL,GAAGG,EACH,GAAGI,EACDL,EAAO,SACPI,EACAN,EAAa,qBACbD,EAAO,uBACT,EACA,OAAAO,EACA,mBAAoBN,EAAa,mBACjC,qBAAsBA,EAAa,qBACnC,QAAS,EACX,EACF,iBACE,OAAOJ,CACX,CACF,GAAG,EAEHK,EAAY,QAASO,GAAaA,EAASR,CAAY,CAAC,CAC1D,EAEA,UAAUQ,EAAoB,CAC5B,OAAAP,EAAY,IAAIO,CAAQ,EAEjB,IAAMP,EAAY,OAAOO,CAAQ,CAC1C,EAEA,gBAAiB,CACfP,EAAY,MAAM,CACpB,CACF,CACF,CCzFO,SAASQ,EACdC,EACAC,EACAC,EACA,CACAF,GAAK,cAAc,IAAI,YAAYC,EAAK,CAAE,OAAAC,CAAO,CAAC,CAAC,CACrD,CAEO,IAAMC,EAAN,KAAsB,CACnB,aAAe,IAAI,IAE3B,kBAAoB,CAClBH,EACAC,EACAG,IACc,CACdJ,GAAK,iBAAiBC,EAAKG,CAAyB,EAEpD,IAAMC,EAAY,IAAML,GAAK,oBAAoBC,EAAKG,CAAyB,EAE/E,YAAK,aAAa,IAAIC,CAAS,EAExBA,CACT,EAEA,MAAQ,IAAM,CACZ,KAAK,aAAa,QAASC,GAAYA,EAAQ,CAAC,EAChD,KAAK,aAAa,MAAM,CAC1B,CACF,EC7BO,IAAMC,EAAN,KAAuB,CACpB,QAAU,IAAI,IACd,MAAsB,CAAC,EAE/B,OAAOC,EAAqB,CAC1B,KAAK,QAAQ,MAAM,EACnB,KAAK,MAAM,QAASC,GAASA,EAAK,QAAQ,CAAC,EAC3C,KAAK,MAAQD,EAEbA,EAAM,QAAQ,CAACC,EAAMC,IAAU,CAC7B,KAAK,QAAQ,IAAID,EAAK,IAAK,CAAE,KAAAA,EAAM,MAAAC,CAAM,CAAC,CAC5C,CAAC,CACH,CAEA,OAAQ,CACN,KAAK,OAAO,CAAC,CAAC,CAChB,CAEA,UAAW,CACT,OAAO,KAAK,KACd,CAEA,QAAQC,EAAmD,CACzD,OAAO,KAAK,QAAQ,IAAIA,CAAG,GAAG,MAAQ,IACxC,CAEA,aAAaA,EAA2C,CACtD,OAAO,KAAK,QAAQ,IAAIA,CAAG,GAAG,OAAS,IACzC,CACF,ECjCO,IAAIC,EAAqD,GAEhE,GAAI,CAEF,OAAO,iBAAiB,OAAQ,KAAM,CACpC,IAAI,SAAU,CACZ,OAAAA,EAAkB,CAAE,QAAS,EAAM,EAC5B,EACT,CACF,CAAC,CACH,MAAQ,CAAC,CCNF,SAASC,EAAY,CAAE,KAAAC,CAAK,EAAiC,CAClE,OAAOC,EAAcD,CAAI,CAC3B,CCFO,SAASE,EAAqBC,EAAsC,CACzE,GAAM,CAAE,kBAAAC,CAAkB,EAAID,EAE9B,OAAIE,EAAYF,CAAM,GAAKC,IAAsB,OACxC,GAEA,CAAC,CAACA,CAEb,CCVO,SAASE,EAAYC,EAAuC,CACjE,MAAO,CAAC,CAACA,GAAQA,KAAQC,CAC3B,CCOO,SAASC,EAAyBC,EAAgB,CACvD,OAAQC,IAAe,CACrB,iBAAkBD,EAClB,mBAAoB,KAAK,UAAUC,CAAM,CAC3C,EACF,CAEO,SAASC,EAAkBC,EAA4C,CAC5E,OAAO,MAAM,KAAKA,EAAU,UAAU,EACnC,IAAKC,GAAQ,CACZ,GAAI,EAAEA,aAAe,aAAc,OAAO,KAE1C,IAAMJ,EAAOI,EAAI,aAAa,gBAAgB,EAE9C,OAAIC,EAAYL,CAAI,EACX,CAAE,KAAAA,EAAM,IAAAI,CAAI,EAEZ,IAEX,CAAC,EACA,OAAWE,GAAsC,CAAC,CAACA,CAAI,CAC5D,CAEO,SAASC,EAAgB,CAAE,IAAAH,CAAI,EAAkD,CACtF,GAAI,CACF,IAAMH,EAAS,KAAK,MAAMG,EAAI,aAAa,kBAAkB,GAAK,EAAE,EACpE,OAAOH,GAAU,OAAOA,GAAW,SAAWA,EAAS,CAAC,CAC1D,MAAQ,CACN,MAAO,CAAC,CACV,CACF,CCpCA,SAASO,EAAYC,EAA4B,CAC/C,OAAOA,EAAa,EAAI,CAC1B,CAEA,SAASC,EAAgBC,EAAgC,CACvD,OAAOA,EAAiB,CAC1B,CAEO,IAAMC,EAAN,KAAc,CAGnB,YAAoBC,EAA4B,CAA5B,kBAAAA,CAA6B,CAFzC,YAAc,GAItB,cAAcF,EAAwBG,EAAyD,CAC7F,GAAI,KAAK,YACP,OAGF,IAAMC,EAAYL,EAAgBC,CAAc,EAC1CK,EAAc,KAAK,QAAQD,CAAS,EAE1C,GAAIC,GAAe,GAAKF,EAAO,QAAU,EAAG,CAC1C,IAAMG,EAASH,EAAO,OAASE,EAE3BD,IAAc,KAAK,aAAa,cAAc,OAAS,GAAKD,EAAO,kBACrE,KAAK,QAAQH,EAAiB,EAAG,CAAE,WAAY,CAACM,CAAO,CAAC,EAExD,KAAK,QAAQN,EAAgB,CAAE,WAAYM,CAAO,CAAC,CAEvD,CACF,CAEA,QAAQR,EAAoBK,EAAgC,CACtD,KAAK,cAIT,KAAK,aAAeI,EAClBV,EAAYC,CAAU,EACtBK,EAAO,WACP,KAAK,aAAa,cAClB,MACF,EACF,CAEA,SAAU,CACR,KAAK,YAAc,EACrB,CAEA,iBAAiBH,EAAiC,CAChD,IAAMI,EAAYL,EAAgBC,CAAc,EAEhD,MAAI,yBAA0B,KAAK,aAE/B,KAAK,QAAQI,CAAS,IAAM,KAAK,aAAa,qBAAqBA,CAAS,EAAE,YAGzE,EAEX,CAEA,eAAeN,EAA6B,CAC1C,MAAI,aAAc,KAAK,aACd,KAAK,aAAa,WAAaD,EAAYC,CAAU,EAErD,EAEX,CAEA,eAAeE,EAAwB,CACrC,OAAO,KAAK,QAAQD,EAAgBC,CAAc,CAAC,CACrD,CAEA,WAA6B,CAC3B,MAAO,CAAE,GAAG,KAAK,aAAc,QAAS,KAAK,WAAY,CAC3D,CAEA,cAAuB,CACrB,OAAO,KAAK,aAAa,cACtB,OAAO,CAACQ,EAAUC,IAAUD,GAAYC,EAAQ,IAAM,CAAC,EACvD,OAAO,CAACC,EAAO,CAAE,YAAAL,CAAY,IAAMK,EAAQL,EAAa,CAAC,CAC9D,CAEQ,QAAQI,EAA4B,CAC1C,IAAMD,EAAW,KAAK,aAAa,cAAcC,CAAK,EACtD,OAAOD,EAAWA,EAAS,YAAc,EAC3C,CACF,EC1FO,IAAeG,EAAf,KAAgD,CAQ3C,YACQC,EACAC,EACCC,EACjB,CAHgB,UAAAF,EACA,SAAAC,EACC,eAAAC,EAEjB,KAAK,QAAU,KAAK,UAAU,EAC9B,KAAK,UAAY,IAAI,iBAAiB,IAAO,KAAK,QAAU,KAAK,UAAU,CAAE,EAC7E,KAAK,UAAU,QAAQD,EAAK,CAAE,WAAY,GAAM,gBAAiB,CAAC,kBAAkB,CAAE,CAAC,CACzF,CAfQ,QACA,UAER,IAAI,QAAiB,CACnB,OAAO,KAAK,OACd,CAYA,SAAU,CACR,KAAK,UAAU,WAAW,CAC5B,CACF,ECWO,IAAME,EAAN,cAAwBC,CAAgC,CAU7D,YACEC,EACiBC,EACjB,CACA,YAAoBD,EAAK,IAAK,IAAME,EAAUF,CAAI,CAAC,EAFlC,uBAAAC,EAIjB,IAAME,EAAc,CAClB,KAAK,eAAe,KAAK,IAAK,sBAAmC,EACjE,KAAK,eAAe,SAAU,kBAA+B,EAC7D,KAAK,eAAe,SAAU,sBAAmC,EAEjE,KAAK,eAAe,KAAK,IAAK,wBAAsCC,CAAe,EACnF,KAAK,eAAe,SAAU,mBAAiCA,CAAe,EAC9E,KAAK,eAAe,SAAU,uBAAoC,EAClE,KAAK,eAAe,SAAU,0BAAuC,CACvE,EAEA,KAAK,QAAU,IAAM,CACnB,MAAM,QAAQ,EACdD,EAAY,QAASE,GAAYA,EAAQ,CAAC,CAC5C,CACF,CA9BA,OAAO,SAAS,CAAE,KAAAC,CAAK,EAAoB,CACzC,MAAO,CACL,KAAM,OAAOA,CAAI,IACnB,CACF,CAEQ,SAAW,GACX,aAAe,GAyBf,eACNC,EACAC,EACAC,EACAC,EACA,CACA,IAAMC,EAAWH,GAAmC,CAClD,KAAK,4BAA4BA,EAAOC,CAAI,EAC5C,GAAM,CAAE,QAASG,EAAG,QAASC,CAAE,GAAK,YAAaL,EAAQA,EAAM,QAAQ,CAAC,EAAIA,IAAU,CACpF,QAAS,EACT,QAAS,CACX,EACA,KAAK,cAAc,KAAK,IAAKC,EAAM,CAAE,EAAAG,EAAG,EAAAC,CAAE,CAAC,CAC7C,EAEA,OAAAN,EAAI,iBAAiBC,EAAOG,EAASD,CAAO,EAErC,IAAMH,EAAI,oBAAoBC,EAAOG,EAASD,CAAO,CAC9D,CAEQ,4BAA4BF,EAAgCC,EAAqB,EACnF,KAAK,UAAYA,IAAS,aAC5BD,EAAM,eAAe,CAEzB,CAEQ,cAAcD,EAAkBE,EAAqBK,EAAwB,EAC/E,KAAK,UAAYL,IAAS,aAC5B,KAAK,kBAAkBF,EAAK,CAAE,KAAAE,EAAM,WAAAK,CAAW,CAAC,EAG9C,KAAK,UAAY,KAAK,cAAgBL,IAAS,eACjD,KAAK,aAAe,GAEpBM,EAAqBR,EAAK,YAAa,IAAI,GAG7C,KAAK,mBAAmBA,EAAKE,CAAI,EACjC,KAAK,kBAAkBA,CAAI,CAC7B,CAEQ,mBAAmBF,EAAkBE,EAAqB,CAChE,IAAMO,EAAmBC,GAAsB,CACzC,KAAK,WAAaA,IACpB,KAAK,SAAWA,EAChBF,EAAqBR,EAAK,oBAAqB,CAAE,SAAAU,CAAS,CAAC,EAE/D,EAEIR,IAAS,WACXO,EAAgB,EAAI,EACXP,IAAS,cAClBO,EAAgB,EAAK,CAEzB,CAEQ,kBAAkBP,EAAqB,CACzC,KAAK,WACHA,IAAS,WACX,KAAK,aAAe,GACXA,IAAS,SAClB,KAAK,aAAe,IAG1B,CACF,EAEA,SAASP,EAAUF,EAAuD,CACxE,GAAM,CAAE,KAAAM,CAAK,EAAIY,EAAgBlB,CAAI,EAErC,MAAO,CACL,KAAMmB,EAAcb,CAAI,EAAIA,EAAO,EACrC,CACF,CC/HO,IAAMc,EAAN,cAA4BC,CAAoC,CACrE,OAAO,SAAS,CAAE,QAAAC,EAAS,QAAAC,CAAQ,EAAwBC,EAAmB,CAC5E,IAAMC,EAAaC,GAAmBC,EAAcD,CAAI,EAAI,GAAGA,CAAI,KAAO,OAE1E,MAAO,CACL,SAAU,SACV,CAACF,EAAW,YAAc,UAAU,EAAGC,EAAUH,CAAO,EACxD,CAACE,EAAW,YAAc,UAAU,EAAGC,EAAUF,CAAO,CAC1D,CACF,CAEQ,SAA4B,KAC5B,cAAgB,EAExB,YAAYK,EAAyB,CACnC,gBAAwBA,EAAK,IAAK,IAAMC,EAAUD,CAAI,CAAC,EAEvD,KAAK,YAAY,CACnB,CAEA,OAAO,CAAE,SAAAE,EAAU,cAAAC,CAAc,EAAkD,CACjF,KAAK,SAAWD,EAChB,KAAK,cAAgBC,EAErB,KAAK,YAAY,EACjBC,EAAqB,KAAK,IAAK,sBAAuB,CAAE,KAAMF,EAAS,WAAY,CAAC,CACtF,CAEQ,aAAc,CACpB,GAAM,CAAE,SAAAG,EAAU,WAAAC,EAAY,UAAAC,CAAU,EAAI,KAAK,SAAS,EAC1D,KAAK,IAAI,MAAM,SAAW,GAAGF,CAAQ,GACrC,KAAK,IAAI,MAAM,WAAa,GAAGC,CAAU,GACzC,KAAK,IAAI,MAAM,UAAY,GAAGC,CAAS,IACzC,CAEQ,UAAW,CACjB,IAAMD,EAAaP,EAAc,KAAK,OAAO,IAAI,EAAI,EAAI,KAAK,OAAO,kBAAoB,EAAI,EAE7F,GAAI,KAAK,SAAU,CACjB,GAAM,CAAE,kBAAAS,EAAmB,YAAAC,CAAY,EAAI,KAAK,SAEhD,MAAO,CACL,WAAAH,EACA,SAAUE,EAAoB,EAAI,KAAK,cAAgBC,EACvD,UAAWD,EAAoBC,EAAc,CAC/C,CACF,KAAO,CACL,IAAMX,EAAO,KAAK,OAAO,MAAQ,KAAK,OAAO,YAE7C,OAAIC,EAAcD,CAAI,EACb,CAAE,WAAAQ,EAAY,SAAU,EAAG,UAAWR,CAAK,EAE3C,CAAE,WAAAQ,EAAY,SAAU,EAAG,UAAW,CAAE,CAEnD,CACF,CACF,EAEA,SAASL,EAAUD,EAA2D,CAC5E,GAAM,CAAE,KAAAF,EAAM,YAAAY,EAAa,QAAAhB,EAAS,QAAAC,EAAS,kBAAAa,CAAkB,EAAIG,EAAgBX,CAAI,EAEvF,MAAO,CACL,KAAMD,EAAcD,CAAI,EAAIA,EAAO,OACnC,YAAaC,EAAcW,CAAW,EAAIA,EAAc,OACxD,QAASX,EAAcL,CAAO,EAAIA,EAAU,OAC5C,QAASK,EAAcJ,CAAO,EAAIA,EAAU,OAC5C,kBAAmB,CAAC,CAACa,CACvB,CACF,CCjDO,IAAMI,EAAN,KAAoB,CAgDzB,YAA4BC,EAAuC,CAAvC,YAAAA,EAC1B,KAAK,SAAWC,EAAe,CAC7B,gBAAiB,CAACC,EAASC,IACzBC,EAA0BF,EAASC,CAAQ,EAAE,KAAK,IAAI,EACxD,mBAAoB,IAAM,KAAK,cAAc,EAC7C,wBAAyBH,EAAO,KAAO,CAACA,EAAO,QACjD,CAAC,CACH,CAtDA,OAAS,CACP,UAAeK,IACZ,CACC,GAAGA,EACH,QAAS,OACT,cAAe,KAAK,SACtB,GAEF,QAAS,CAAIL,EAA6BK,KAAe,CACvD,GAAGA,EACH,GAAGC,EAAc,SAASN,EAAQ,KAAK,OAAO,QAAQ,CACxD,GAEA,IAAK,CAAIA,EAAyBK,KAAe,CAC/C,GAAGA,EACH,GAAGE,EAAU,SAASP,CAAM,CAC9B,EACF,EAEA,WAAa,CACX,IAAKQ,OAAkC,EACvC,QAASA,WAAsC,CACjD,EAEQ,WAAa,IAAIC,EACjB,SAAW,IAAIC,EAEf,UAAgC,KAEhC,SAER,IAAY,MAAO,CACjB,OAAO,KAAK,OAAO,SAAW,IAAM,GACtC,CAEA,IAAY,WAAY,CACtB,OAAO,KAAK,OAAO,SAAW,SAAW,OAC3C,CAEA,IAAY,WAAY,CACtB,OAAO,KAAK,OAAO,SAAW,SAAW,KAC3C,CAEA,IAAI,IAAK,CACP,OAAO,KAAK,SAAS,iBACvB,CAWA,KAAKC,EAA+B,CAClC,KAAK,QAAQ,EACb,KAAK,UAAYA,EAEbA,IACF,KAAK,WAAW,OACdC,EAAkBD,CAAS,EAAE,IAAKE,GAAS,CACzC,OAAQA,EAAK,KAAM,CACjB,UACE,OAAO,IAAIN,EAAUM,EAAM,KAAK,iBAAiB,EACnD,cACE,OAAO,IAAIP,EAAcO,CAAI,CACjC,CACF,CAAC,CACH,EAEA,KAAK,WAAWF,EAAW,KAAK,WAAW,SAAS,CAAC,EACrD,KAAK,sBAAsB,KAAK,cAAc,CAAC,EAE/C,KAAK,SAAS,UAAWG,GAAU,CACjC,KAAK,wBAAwBA,CAAK,EAClC,KAAK,sBAAsBA,CAAK,CAClC,CAAC,EAEL,CAEA,SAAU,CACR,KAAK,UAAY,KACjB,KAAK,WAAW,MAAM,EACtB,KAAK,SAAS,eAAe,EAC7B,KAAK,SAAS,MAAM,CACtB,CAEA,YAAsB,CACpB,OAAO,IAAIC,EAAQ,KAAK,cAAc,CAAC,CACzC,CAEA,aAAaC,EAAwB,CACnC,KAAK,sBAAsBA,EAAQ,UAAU,CAAC,CAChD,CAEQ,kBAAuC,CAACC,EAAKC,IAAW,CAC9D,IAAMC,EAAW,KAAK,WAAW,aAAaF,CAAG,EAE7CE,GACF,KAAK,SAAS,SAAS,CAAE,GAAGD,EAAQ,SAAAC,CAAS,CAAC,CAElD,EAEQ,sBAAsBC,EAA6C,CACrEA,EAAK,UAETA,GAAQ,IAAM,CACZ,GAAI,OAAO,KAAK,OAAO,oBAAuB,WAAY,CACxD,IAAMJ,EAAU,IAAID,EAAQK,CAAI,EAChC,YAAK,OAAO,mBAAmBJ,CAAO,EAC/BA,EAAQ,UAAU,CAC3B,KACE,QAAOI,CAEX,GAAG,EAEC,CAAAA,EAAK,SAETA,EAAK,cAAc,QAASC,GAAa,CACvC,IAAMR,EAAO,KAAK,WAAW,QAAQQ,EAAS,GAAG,EAE7CR,aAAgBP,GAClBO,EAAK,OAAO,CAAE,SAAAQ,EAAU,cAAeD,EAAK,aAAc,CAAC,CAE/D,CAAC,EACH,CAEQ,wBAAwB,CAAE,KAAAE,CAAK,EAAwB,CAC7D,OAAQA,EAAM,CACZ,eACE,OAAOC,EAAqB,KAAK,UAAW,kBAAmB,IAAI,EACrE,iBACE,OAAOA,EAAqB,KAAK,UAAW,wBAAyB,IAAI,EAC3E,QACE,MACJ,CACF,CAEQ,eAAiC,CACvC,GAAM,CAAE,QAAAC,EAAS,UAAAC,CAAU,EAAIC,EAAuB,EAEtD,YAAK,WAAW,SAAS,EAAE,QAASb,GAAS,CACvCA,aAAgBN,GAClBiB,EAAQ,CACN,IAAKX,EAAK,IACV,kBAAmB,GACnB,QAAS,GACT,YAAaA,EAAK,IAAI,sBAAsB,EAAE,KAAK,SAAS,CAC9D,CAAC,EAGCA,aAAgBP,GAClBkB,EAAQ,CACN,IAAKX,EAAK,IACV,QAASA,EAAK,OAAO,QACrB,QAASA,EAAK,OAAO,QACrB,kBAAmBc,EAAqBd,EAAK,MAAM,EACnD,QAASe,EAAYf,EAAK,MAAM,EAChC,YAAaA,EAAK,IAAI,sBAAsB,EAAE,KAAK,SAAS,CAC9D,CAAC,CAEL,CAAC,EAEMY,EAAU,CACnB,CAEQ,WAAWd,EAAwBkB,EAAqB,CAC9D,OAAO,OAAOlB,EAAU,MAAO,KAAK,OAAO,UAAU,CAAC,EAEtDkB,EAAM,QAAShB,GAAS,CAClBA,aAAgBN,GAClB,OAAO,OAAOM,EAAK,IAAI,MAAO,KAAK,OAAO,IAAIA,EAAK,MAAM,CAAC,EAGxDA,aAAgBP,GAClB,OAAO,OAAOO,EAAK,IAAI,MAAO,KAAK,OAAO,QAAQA,EAAK,MAAM,CAAC,CAElE,CAAC,CACH,CACF","names":["src_exports","__export","BarActionType","ColumnResizer","ItemType","Resizer","__toCommonJS","ItemType","BarActionType","DEFAULT_COORDINATE_OFFSET","calculateCoordinateOffset","current","previous","collectSizeRelatedInfo","sizeInfoArray","responsiveChildCount","responsiveContainerSize","sizeInfo","isValidNumber","num","getNextSizeRelatedInfo","barIndex","offset","sizeInfoArray","flipResizeMoveDirection","collect","getResult","collectSizeRelatedInfo","trend","leftResult","resize","rightResult","leftUsedOffset","rightUsedOffset","collectAll","left","right","newRightResult","newLeftResult","newSizeInfoArray","prevRemainingOffset","sectionIndex","isValidSectionIndex","sizeInfo","remainingOffset","doResize","sectionID","nextSize","filterSize","maxSize","minSize","isValidNumber","DEFAULT_BAR_ACTION_SCAN_RESULT","DEFAULT_COORDINATE_OFFSET","createBarStore","config","currentState","callbackSet","action","result","sizeInfoArray","flexGrowRatio","offset","getNextSizeRelatedInfo","callback","dispatchResizerEvent","elm","key","detail","ResizerEventHub","callback","disposeFn","dispose","ColumnItemsCache","items","item","index","elm","DISABLE_PASSIVE","isSolidItem","size","isValidNumber","isDisabledResponsive","config","disableResponsive","isSolidItem","isValidType","type","ItemType","resizerItemAttributes","type","config","parseResizerItems","container","elm","isValidType","item","parseItemConfig","getBarIndex","indexOfBar","getSectionIndex","indexOfSection","Resizer","resizeResult","config","sectionID","currentSize","offset","getNextSizeRelatedInfo","sizeInfo","index","total","ColumnInstance","type","elm","getConfig","ColumnBar","ColumnInstance","item","dispatchBarAction","getConfig","disposeList","DISABLE_PASSIVE","dispose","size","elm","event","type","options","handler","x","y","coordinate","dispatchResizerEvent","onStatusChanged","isActive","parseItemConfig","isValidNumber","ColumnSection","ColumnInstance","maxSize","minSize","vertical","toCSSSize","size","isValidNumber","item","getConfig","sizeInfo","flexGrowRatio","dispatchResizerEvent","flexGrow","flexShrink","flexBasis","disableResponsive","currentSize","defaultSize","parseItemConfig","ColumnResizer","config","createBarStore","current","original","calculateCoordinateOffset","style","ColumnSection","ColumnBar","resizerItemAttributes","ColumnItemsCache","ResizerEventHub","container","parseResizerItems","item","state","Resizer","resizer","elm","action","barIndex","info","sizeInfo","type","dispatchResizerEvent","collect","getResult","collectSizeRelatedInfo","isDisabledResponsive","isSolidItem","items"]}