1 line
9.1 KiB
Plaintext
1 line
9.1 KiB
Plaintext
![]() |
{"version":3,"file":"nanopop.min.js","sources":["../src/NanoPop.ts"],"sourcesContent":["export type NanoPopOptions = {\n forceApplyOnFailure?: boolean;\n container?: DOMRect;\n position?: NanoPopPositionCombination;\n margin?: number;\n variantFlipOrder?: VariantFlipOrder;\n positionFlipOrder?: PositionFlipOrder;\n};\n\nexport type VariantFlipOrder = {\n start: string;\n middle: string;\n end: string;\n};\n\nexport type PositionFlipOrder = {\n top: string;\n right: string;\n bottom: string;\n left: string;\n};\n\nexport type NanoPopPosition = 'top' | 'left' | 'bottom' | 'right';\n\nexport type NanoPopPositionCombination =\n 'top-start' | 'top-middle' | 'top-end' |\n 'left-start' | 'left-middle' | 'left-end' |\n 'right-start' | 'right-middle' | 'right-end' |\n 'bottom-start' | 'bottom-middle' | 'bottom-end' | NanoPopPosition;\n\ntype PositionPairs = [NanoPopPosition, NanoPopPosition];\n\ntype InternalSettings = {\n forceApplyOnFailure: boolean;\n container: DOMRect;\n position: NanoPopPositionCombination;\n margin: number;\n variantFlipOrder: VariantFlipOrder;\n positionFlipOrder: PositionFlipOrder;\n reference: HTMLElement;\n popper: HTMLElement;\n};\n\ntype AvailablePositions = {\n t: number;\n b: number;\n l: number;\n r: number;\n};\n\ntype AvailableVariants = {\n vs: number;\n vm: number;\n ve: number;\n hs: number;\n hm: number;\n he: number;\n};\n\nexport class NanoPop {\n\n // Public version\n public static readonly version = VERSION;\n\n // Defaults\n public static defaultVariantFlipOrder = {start: 'sme', middle: 'mse', end: 'ems'};\n public static defaultPositionFlipOrder = {top: 'tbrl', right: 'rltb', bottom: 'btrl', left: 'lrbt'};\n\n private _config: InternalSettings;\n\n constructor(\n reference: HTMLElement,\n popper: HTMLElement, {\n positionFlipOrder = NanoPop.defaultPositionFlipOrder,\n variantFlipOrder = NanoPop.defaultVariantFlipOrder,\n container = document.documentElement.getBoundingClientRect(),\n forceApplyOnFailure = false,\n margin = 8,\n position = 'bottom-start'\n }: NanoPopOptions = {}\n ) {\n this._config = {\n positionFlipOrder,\n variantFlipOrder,\n reference,\n popper,\n position,\n container,\n forceApplyOnFailure,\n margin\n };\n }\n\n /**\n * Re-aligns the element\n * @param opt Optional, updated settings\n */\n update(opt: Partial<InternalSettings> = this._config, _force = false): string | null {\n const {\n container,\n reference,\n popper,\n margin,\n position,\n forceApplyOnFailure,\n variantFlipOrder,\n positionFlipOrder\n } = this._config = {...this._config, ...opt};\n\n /**\n * Reset position to resolve viewport\n * See https://developer.mozilla.org/en-US/docs/Web/CSS/position#fixed\n */\n popper.style.left = '0';\n popper.style.top = '0';\n\n const refBox = reference.getBoundingClientRect();\n const popBox = popper.getBoundingClientRect();\n\n /**\n * Holds coordinates of top, left, bottom and right alignment\n */\n const positionStore: AvailablePositions = {\n t: refBox.top - popBox.height - margin,\n b: refBox.bottom + margin,\n r: refBox.right + margin,\n l: refBox.left - popBox.width - margin\n };\n\n /**\n * Holds corresponding variants (start, middle, end).\n * The values depend on horizontal / vertical orientation\n */\n const variantStore: AvailableVariants = {\n vm: (-popBox.width / 2) + (refBox.left + refBox.width / 2),\n vs: refBox.left,\n ve: refBox.left + refBox.width - popBox.width,\n hs: refBox.bottom - refBox.he
|