@period-year-norway/ngx-bootstrap
Version:
1 lines • 89.3 kB
Source Map (JSON)
{"version":3,"file":"period-year-norway-ngx-bootstrap-positioning.mjs","sources":["../../../../src/positioning/models/index.ts","../../../../src/positioning/utils/getStyleComputedProperty.ts","../../../../src/positioning/utils/getOffsetParent.ts","../../../../src/positioning/utils/isOffsetContainer.ts","../../../../src/positioning/utils/getRoot.ts","../../../../src/positioning/utils/findCommonOffsetParent.ts","../../../../src/positioning/utils/getFixedPositionOffsetParent.ts","../../../../src/positioning/utils/getBordersSize.ts","../../../../src/positioning/utils/getWindowSizes.ts","../../../../src/positioning/utils/getClientRect.ts","../../../../src/positioning/utils/isNumeric.ts","../../../../src/positioning/utils/getBoundingClientRect.ts","../../../../src/positioning/utils/getOffsetRectRelativeToArbitraryNode.ts","../../../../src/positioning/utils/getParentNode.ts","../../../../src/positioning/utils/getScrollParent.ts","../../../../src/positioning/utils/getScroll.ts","../../../../src/positioning/utils/getViewportOffsetRectRelativeToArtbitraryNode.ts","../../../../src/positioning/utils/isFixed.ts","../../../../src/positioning/utils/getBoundaries.ts","../../../../src/positioning/utils/computeAutoPlacement.ts","../../../../src/positioning/utils/getOffsets.ts","../../../../src/positioning/utils/getOppositePlacement.ts","../../../../src/positioning/utils/getOppositeVariation.ts","../../../../src/positioning/utils/getOuterSizes.ts","../../../../src/positioning/utils/getReferenceOffsets.ts","../../../../src/positioning/utils/getTargetOffsets.ts","../../../../src/positioning/utils/isModifierEnabled.ts","../../../../src/positioning/utils/checkMargin.ts","../../../../src/positioning/utils/updateContainerClass.ts","../../../../src/positioning/utils/setStyles.ts","../../../../src/positioning/modifiers/arrow.ts","../../../../src/positioning/modifiers/flip.ts","../../../../src/positioning/modifiers/initData.ts","../../../../src/positioning/modifiers/preventOverflow.ts","../../../../src/positioning/modifiers/shift.ts","../../../../src/positioning/ng-positioning.ts","../../../../src/positioning/positioning.service.ts","../../../../src/positioning/period-year-norway-ngx-bootstrap-positioning.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-duplicate-enum-values */\r\nexport interface Offsets {\r\n width: number;\r\n height: number;\r\n bottom?: number;\r\n left?: number;\r\n right?: number;\r\n top?: number;\r\n marginTop?: number;\r\n marginLeft?: number;\r\n}\r\n\r\nexport interface Data {\r\n options: Options;\r\n instance: {\r\n target: HTMLElement;\r\n host: HTMLElement;\r\n arrow?: HTMLElement;\r\n };\r\n offsets: {\r\n target: Offsets;\r\n host: Offsets;\r\n arrow?: Record<string, string | number | HTMLElement>;\r\n };\r\n positionFixed: boolean;\r\n placement: string;\r\n placementAuto: boolean;\r\n}\r\n\r\nexport interface Options {\r\n placement?: string;\r\n modifiers: {\r\n flip?: {\r\n enabled: boolean;\r\n };\r\n preventOverflow?: {\r\n enabled: boolean;\r\n boundariesElement?: string;\r\n };\r\n };\r\n allowedPositions?: string[];\r\n}\r\n\r\nexport enum MapPlacementInToRL {\r\n top = 'top',\r\n bottom = 'bottom',\r\n left = 'left',\r\n right = 'right',\r\n auto = 'auto',\r\n end = 'right',\r\n start = 'left',\r\n 'top left' = 'top left',\r\n 'top right' = 'top right',\r\n 'right top' = 'right top',\r\n 'right bottom' = 'right bottom',\r\n 'bottom right' = 'bottom right',\r\n 'bottom left' = 'bottom left',\r\n 'left bottom' = 'left bottom',\r\n 'left top' = 'left top',\r\n 'top start' = 'top left',\r\n 'top end' = 'top right',\r\n 'end top' = 'right top',\r\n 'end bottom' = 'right bottom',\r\n 'bottom end' = 'bottom right',\r\n 'bottom start' = 'bottom left',\r\n 'start bottom' = 'start bottom',\r\n 'start top' = 'left top',\r\n}\r\n\r\nexport enum PlacementForBs5 {\r\n top = 'top',\r\n bottom = 'bottom',\r\n left = 'start',\r\n right = 'end',\r\n auto = 'auto',\r\n end = 'end',\r\n start = 'start',\r\n 'top left' = 'top start',\r\n 'top right' = 'top end',\r\n 'right top' = 'end top',\r\n 'right bottom' = 'end bottom',\r\n 'bottom right' = 'bottom end',\r\n 'bottom left' = 'bottom start',\r\n 'left bottom' = 'start bottom',\r\n 'left top' = 'start top',\r\n 'top start' = 'top start',\r\n 'top end' = 'top end',\r\n 'end top' = 'end top',\r\n 'end bottom' = 'end bottom',\r\n 'bottom end' = 'bottom end',\r\n 'bottom start' = 'bottom start',\r\n 'start bottom' = 'start bottom',\r\n 'start top' = 'start top',\r\n}\r\n\r\nexport type AvailbleBSPositions = 'top' | 'bottom' | 'left' | 'right' | 'auto' | 'top left' | 'top right' | 'right top' | 'right bottom' | 'bottom right' | 'bottom left' | 'left bottom' | 'left top' | 'start' | 'end' | 'top start' | 'top end' | 'end top' | 'end bottom' | 'bottom end' | 'bottom start' | 'start bottom' | 'start top';\r\n\r\n","/**\r\n * Get CSS computed property of the given element\r\n */\r\nexport function getStyleComputedProperty(element: Element): CSSStyleDeclaration;\r\nexport function getStyleComputedProperty(element: Element, property?: string): string | string[];\r\nexport function getStyleComputedProperty(element: Element, property?: string): string | string[] | CSSStyleDeclaration {\r\n if (element.nodeType !== 1) {\r\n return [];\r\n }\r\n // NOTE: 1 DOM access here\r\n const window = element.ownerDocument.defaultView;\r\n const css = window?.getComputedStyle(element, null);\r\n\r\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\r\n // @ts-ignore\r\n return property ? css && css[property] : css;\r\n}\r\n","/**\r\n * Returns the offset parent of the given element\r\n */\r\nimport { getStyleComputedProperty } from './getStyleComputedProperty';\r\n\r\nexport function getOffsetParent(element: HTMLElement): HTMLElement {\r\n if (!element) {\r\n return document.documentElement;\r\n }\r\n\r\n const noOffsetParent = null;\r\n\r\n // NOTE: 1 DOM access here\r\n let offsetParent = element?.offsetParent;\r\n\r\n // Skip hidden elements which don't have an offsetParent\r\n let sibling: HTMLElement | undefined = void 0;\r\n\r\n while (offsetParent === noOffsetParent\r\n && element.nextElementSibling\r\n && sibling !== element.nextElementSibling) {\r\n\r\n // todo: valorkin fix\r\n sibling = element.nextElementSibling as HTMLElement;\r\n offsetParent = sibling.offsetParent;\r\n }\r\n\r\n const nodeName = offsetParent && offsetParent.nodeName;\r\n\r\n if (!nodeName || nodeName === 'BODY' || nodeName === 'HTML') {\r\n return sibling ? sibling.ownerDocument.documentElement : document.documentElement;\r\n }\r\n\r\n // .offsetParent will return the closest TH, TD or TABLE in case\r\n if (\r\n offsetParent &&\r\n ['TH', 'TD', 'TABLE'].indexOf(offsetParent.nodeName) !== -1 &&\r\n getStyleComputedProperty(offsetParent, 'position') === 'static'\r\n ) {\r\n return getOffsetParent(offsetParent as HTMLElement);\r\n }\r\n\r\n return offsetParent as HTMLElement;\r\n}\r\n","import { getOffsetParent } from './getOffsetParent';\r\n\r\n// todo: valorkin fix\r\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\r\nexport function isOffsetContainer(element: any) {\r\n const { nodeName } = element;\r\n if (nodeName === 'BODY') {\r\n return false;\r\n }\r\n\r\n return (\r\n nodeName === 'HTML' || getOffsetParent(element.firstElementChild) === element\r\n );\r\n}\r\n","/**\r\n * Finds the root node (document, shadowDOM root) of the given element\r\n */\r\nexport function getRoot(node: Node|ShadowRoot): Node|ShadowRoot {\r\n if (node.parentNode !== null) {\r\n return getRoot(node.parentNode);\r\n }\r\n\r\n return node;\r\n}\r\n","/**\r\n * Finds the offset parent common to the two provided nodes\r\n */\r\nimport { isOffsetContainer } from './isOffsetContainer';\r\nimport { getRoot } from './getRoot';\r\nimport { getOffsetParent } from './getOffsetParent';\r\n\r\nexport function findCommonOffsetParent(element1: HTMLElement, element2: HTMLElement): HTMLElement {\r\n // This check is needed to avoid errors in case one of the elements isn't defined for any reason\r\n if (!element1 || !element1.nodeType || !element2 || !element2.nodeType) {\r\n return document.documentElement;\r\n }\r\n\r\n // Here we make sure to give as \"start\" the element that comes first in the DOM\r\n const order = element1.compareDocumentPosition(element2) & Node.DOCUMENT_POSITION_FOLLOWING;\r\n\r\n const start = order ? element1 : element2;\r\n const end = order ? element2 : element1;\r\n\r\n // Get common ancestor container\r\n const range = document.createRange();\r\n range.setStart(start, 0);\r\n range.setEnd(end, 0);\r\n\r\n // todo: valorkin fix\r\n const commonAncestorContainer = range.commonAncestorContainer as unknown as HTMLElement;\r\n\r\n // Both nodes are inside #document\r\n if (\r\n (element1 !== commonAncestorContainer &&\r\n element2 !== commonAncestorContainer) ||\r\n start.contains(end)\r\n ) {\r\n if (isOffsetContainer(commonAncestorContainer)) {\r\n return commonAncestorContainer;\r\n }\r\n\r\n return getOffsetParent(commonAncestorContainer);\r\n }\r\n\r\n // one of the nodes is inside shadowDOM, find which one\r\n const element1root = getRoot(element1) as ShadowRoot;\r\n if (element1root.host) {\r\n return findCommonOffsetParent(element1root.host as HTMLElement, element2);\r\n } else {\r\n return findCommonOffsetParent(element1, (getRoot(element2) as ShadowRoot).host as HTMLElement);\r\n }\r\n}\r\n","/**\r\n * Finds the first parent of an element that has a transformed property defined\r\n */\r\n\r\nimport { getStyleComputedProperty } from './getStyleComputedProperty';\r\n\r\nexport function getFixedPositionOffsetParent(element: HTMLElement): HTMLElement {\r\n // This check is needed to avoid errors in case one of the elements isn't defined for any reason\r\n if (!element || !element.parentElement) {\r\n return document.documentElement;\r\n }\r\n\r\n let el = element.parentElement;\r\n\r\n while (el?.parentElement && getStyleComputedProperty(el, 'transform') === 'none') {\r\n el = el.parentElement;\r\n }\r\n\r\n return el || document.documentElement;\r\n}\r\n","/**\r\n * Helper to detect borders of a given element\r\n */\r\n\r\nexport function getBordersSize(styles: CSSStyleDeclaration, axis: string): number {\r\n const sideA = axis === 'x' ? 'Left' : 'Top';\r\n const sideB = sideA === 'Left' ? 'Right' : 'Bottom';\r\n\r\n return (\r\n parseFloat((styles as never)[`border${sideA}Width`]) +\r\n parseFloat((styles as never)[`border${sideB}Width`])\r\n );\r\n}\r\n","function getSize(axis: string, body: HTMLElement, html: HTMLElement) {\r\n const _body = body as unknown as Record<string, number>;\r\n const _html = html as never;\r\n\r\n return Math.max(\r\n _body[`offset${axis}`],\r\n _body[`scroll${axis}`],\r\n _html[`client${axis}`],\r\n _html[`offset${axis}`],\r\n _html[`scroll${axis}`],\r\n 0\r\n );\r\n}\r\n\r\nexport function getWindowSizes(document: Document) {\r\n const body = document.body;\r\n const html = document.documentElement;\r\n\r\n return {\r\n height: getSize('Height', body, html),\r\n width: getSize('Width', body, html)\r\n };\r\n}\r\n","/**\r\n * Given element offsets, generate an output similar to getBoundingClientRect\r\n */\r\nimport { Offsets } from '../models';\r\n\r\nexport function getClientRect(offsets: Offsets): Offsets {\r\n return {\r\n ...offsets,\r\n right: (offsets.left || 0) + offsets.width,\r\n bottom: (offsets.top || 0) + offsets.height\r\n };\r\n}\r\n","/**\r\n * Tells if a given input is a number\r\n */\r\nexport function isNumeric(n: string): boolean {\r\n return n !== '' && !isNaN(parseFloat(n)) && isFinite(Number(n));\r\n}\r\n\r\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\r\nexport function isNumber(value?: any): value is number {\r\n return typeof value === 'number' || Object.prototype.toString.call(value) === '[object Number]';\r\n}\r\n","/**\r\n * Get bounding client rect of given element\r\n */\r\nimport { getStyleComputedProperty } from './getStyleComputedProperty';\r\nimport { getBordersSize } from './getBordersSize';\r\nimport { getWindowSizes } from './getWindowSizes';\r\nimport { getClientRect } from './getClientRect';\r\nimport { Offsets } from '../models';\r\nimport { isNumber } from './isNumeric';\r\n\r\nexport function getBoundingClientRect(element: HTMLElement): Offsets {\r\n const rect: Offsets = element.getBoundingClientRect();\r\n\r\n // IE10 10 FIX: Please, don't ask, the element isn't\r\n // considered in DOM in some circumstances...\r\n // This isn't reproducible in IE10 compatibility mode of IE11\r\n // try {\r\n // if (isIE(10)) {\r\n // const scrollTop = getScroll(element, 'top');\r\n // const scrollLeft = getScroll(element, 'left');\r\n // if (rect && isNumber(rect.top) && isNumber(rect.left) && isNumber(rect.bottom) && isNumber(rect.right)) {\r\n // rect.top += scrollTop;\r\n // rect.left += scrollLeft;\r\n // rect.bottom += scrollTop;\r\n // rect.right += scrollLeft;\r\n // }\r\n // }\r\n // } catch (e) {\r\n // return rect;\r\n // }\r\n\r\n if (!(rect && isNumber(rect.top) && isNumber(rect.left) && isNumber(rect.bottom) && isNumber(rect.right))) {\r\n return rect;\r\n }\r\n\r\n const result: Offsets = {\r\n left: rect.left,\r\n top: rect.top,\r\n width: rect.right - rect.left,\r\n height: rect.bottom - rect.top\r\n };\r\n\r\n // subtract scrollbar size from sizes\r\n const sizes = element.nodeName === 'HTML' ? getWindowSizes(element.ownerDocument) : undefined;\r\n const width = sizes?.width || element.clientWidth\r\n || isNumber(rect.right) && isNumber(result.left) && rect.right - result.left || 0;\r\n const height = sizes?.height || element.clientHeight\r\n || isNumber(rect.bottom) && isNumber(result.top) && rect.bottom - result.top || 0;\r\n\r\n let horizScrollbar = element.offsetWidth - width;\r\n let vertScrollbar = element.offsetHeight - height;\r\n\r\n // if an hypothetical scrollbar is detected, we must be sure it's not a `border`\r\n // we make this check conditional for performance reasons\r\n if (horizScrollbar || vertScrollbar) {\r\n const styles = getStyleComputedProperty(element);\r\n horizScrollbar -= getBordersSize(styles, 'x');\r\n vertScrollbar -= getBordersSize(styles, 'y');\r\n\r\n result.width -= horizScrollbar;\r\n result.height -= vertScrollbar;\r\n }\r\n\r\n return getClientRect(result);\r\n}\r\n","import { getBoundingClientRect } from './getBoundingClientRect';\r\nimport { getClientRect } from './getClientRect';\r\nimport { getStyleComputedProperty } from './getStyleComputedProperty';\r\nimport { Offsets } from '../models';\r\nimport { isNumber } from './isNumeric';\r\n\r\nexport function getOffsetRectRelativeToArbitraryNode(\r\n children: HTMLElement,\r\n parent: HTMLElement,\r\n fixedPosition = false\r\n): Offsets {\r\n const isHTML = parent.nodeName === 'HTML';\r\n const childrenRect = getBoundingClientRect(children);\r\n const parentRect = getBoundingClientRect(parent);\r\n\r\n const styles = getStyleComputedProperty(parent);\r\n const borderTopWidth = parseFloat(styles.borderTopWidth);\r\n const borderLeftWidth = parseFloat(styles.borderLeftWidth);\r\n\r\n // In cases where the parent is fixed, we must ignore negative scroll in offset calc\r\n if (fixedPosition && isHTML) {\r\n parentRect.top = Math.max(parentRect.top ?? 0, 0);\r\n parentRect.left = Math.max(parentRect.left ?? 0, 0);\r\n }\r\n\r\n const offsets: Offsets = getClientRect({\r\n top: (childrenRect.top ?? 0) - (parentRect.top ?? 0) - borderTopWidth,\r\n left: (childrenRect.left ?? 0) - (parentRect.left ?? 0) - borderLeftWidth,\r\n width: childrenRect.width,\r\n height: childrenRect.height\r\n });\r\n\r\n offsets.marginTop = 0;\r\n offsets.marginLeft = 0;\r\n\r\n // Subtract margins of documentElement in case it's being used as parent\r\n // we do this only on HTML because it's the only element that behaves\r\n // differently when margins are applied to it. The margins are included in\r\n // the box of the documentElement, in the other cases not.\r\n if (isHTML) {\r\n const marginTop = parseFloat(styles.marginTop);\r\n const marginLeft = parseFloat(styles.marginLeft);\r\n\r\n if (isNumber(offsets.top)) {\r\n offsets.top -= borderTopWidth - marginTop;\r\n }\r\n if (isNumber(offsets.bottom)) {\r\n offsets.bottom -= borderTopWidth - marginTop;\r\n }\r\n if (isNumber(offsets.left)) {\r\n offsets.left -= borderLeftWidth - marginLeft;\r\n }\r\n if (isNumber(offsets.right)) {\r\n offsets.right -= borderLeftWidth - marginLeft;\r\n }\r\n\r\n // Attach marginTop and marginLeft because in some circumstances we may need them\r\n offsets.marginTop = marginTop;\r\n offsets.marginLeft = marginLeft;\r\n }\r\n\r\n return offsets;\r\n}\r\n","/**\r\n * Returns the parentNode or the host of the element\r\n */\r\n// todo: valorkin fix\r\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\r\nexport function getParentNode(element: any): any {\r\n if (element.nodeName === 'HTML') {\r\n return element;\r\n }\r\n\r\n return element.parentNode || element.host;\r\n}\r\n","/**\r\n * Returns the scrolling parent of the given element\r\n */\r\nimport { getStyleComputedProperty } from './getStyleComputedProperty';\r\nimport { getParentNode } from './getParentNode';\r\n\r\n// todo: valorkin fix\r\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\r\nexport function getScrollParent(element: any): any {\r\n // Return body, `getScroll` will take care to get the correct `scrollTop` from it\r\n if (!element) {\r\n return document.body;\r\n }\r\n\r\n switch (element.nodeName) {\r\n case 'HTML':\r\n case 'BODY':\r\n return element.ownerDocument.body;\r\n case '#document':\r\n return element.body;\r\n default:\r\n }\r\n\r\n // Firefox want us to check `-x` and `-y` variations as well\r\n const { overflow, overflowX, overflowY } = getStyleComputedProperty(element);\r\n if (/(auto|scroll|overlay)/.test(String(overflow) + String(overflowY) + String(overflowX))) {\r\n return element;\r\n }\r\n\r\n return getScrollParent(getParentNode(element));\r\n}\r\n","/**\r\n * Gets the scroll value of the given element in the given side (top and left)\r\n */\r\nexport function getScroll(element: HTMLElement, side = 'top') {\r\n const upperSide = side === 'top' ? 'scrollTop' : 'scrollLeft';\r\n const nodeName = element.nodeName;\r\n\r\n if (nodeName === 'BODY' || nodeName === 'HTML') {\r\n const html = element.ownerDocument.documentElement;\r\n const scrollingElement = element.ownerDocument.scrollingElement || html;\r\n\r\n return scrollingElement[upperSide];\r\n }\r\n\r\n return element[upperSide];\r\n}\r\n","import { getClientRect } from './getClientRect';\r\nimport { getOffsetRectRelativeToArbitraryNode } from './getOffsetRectRelativeToArbitraryNode';\r\nimport { getScroll } from './getScroll';\r\nimport { Offsets } from '../models';\r\n\r\nexport function getViewportOffsetRectRelativeToArtbitraryNode(element: HTMLElement, excludeScroll = false): Offsets {\r\n const html = element.ownerDocument.documentElement;\r\n const relativeOffset = getOffsetRectRelativeToArbitraryNode(element, html);\r\n const width = Math.max(html.clientWidth, window.innerWidth || 0);\r\n const height = Math.max(html.clientHeight, window.innerHeight || 0);\r\n\r\n const scrollTop = !excludeScroll ? getScroll(html) : 0;\r\n const scrollLeft = !excludeScroll ? getScroll(html, 'left') : 0;\r\n\r\n const offset = {\r\n top: scrollTop - Number(relativeOffset?.top) + Number(relativeOffset?.marginTop),\r\n left: scrollLeft - Number(relativeOffset?.left) + Number(relativeOffset?.marginLeft),\r\n width,\r\n height\r\n };\r\n\r\n return getClientRect(offset);\r\n}\r\n","/**\r\n * Check if the given element is fixed or is inside a fixed parent\r\n */\r\nimport { getStyleComputedProperty } from './getStyleComputedProperty';\r\nimport { getParentNode } from './getParentNode';\r\n\r\nexport function isFixed(element: HTMLElement): boolean {\r\n const nodeName = element.nodeName;\r\n if (nodeName === 'BODY' || nodeName === 'HTML') {\r\n return false;\r\n }\r\n if (getStyleComputedProperty(element, 'position') === 'fixed') {\r\n return true;\r\n }\r\n\r\n return isFixed(getParentNode(element));\r\n}\r\n","/**\r\n * Computed the boundaries limits and return them\r\n */\r\nimport { Offsets } from '../models';\r\nimport { findCommonOffsetParent } from './findCommonOffsetParent';\r\nimport { getFixedPositionOffsetParent } from './getFixedPositionOffsetParent';\r\nimport { getOffsetRectRelativeToArbitraryNode } from './getOffsetRectRelativeToArbitraryNode';\r\nimport { getParentNode } from './getParentNode';\r\nimport { getScrollParent } from './getScrollParent';\r\nimport { getViewportOffsetRectRelativeToArtbitraryNode } from './getViewportOffsetRectRelativeToArtbitraryNode';\r\nimport { getWindowSizes } from './getWindowSizes';\r\nimport { isFixed } from './isFixed';\r\nimport { isNumber } from './isNumeric';\r\n\r\nexport function getBoundaries(\r\n target: HTMLElement,\r\n host: HTMLElement,\r\n padding = 0,\r\n boundariesElement: string,\r\n fixedPosition = false\r\n): Partial<Offsets> {\r\n // NOTE: 1 DOM access here\r\n\r\n let boundaries: Partial<Offsets> = { top: 0, left: 0 };\r\n const offsetParent = fixedPosition ? getFixedPositionOffsetParent(target) : findCommonOffsetParent(target, host);\r\n\r\n // Handle viewport case\r\n if (boundariesElement === 'viewport') {\r\n boundaries = getViewportOffsetRectRelativeToArtbitraryNode(offsetParent, fixedPosition);\r\n } else {\r\n // Handle other cases based on DOM element used as boundaries\r\n let boundariesNode;\r\n if (boundariesElement === 'scrollParent') {\r\n boundariesNode = getScrollParent(getParentNode(host));\r\n if (boundariesNode.nodeName === 'BODY') {\r\n boundariesNode = target.ownerDocument.documentElement;\r\n }\r\n } else if (boundariesElement === 'window') {\r\n boundariesNode = target.ownerDocument.documentElement;\r\n } else {\r\n boundariesNode = boundariesElement;\r\n }\r\n\r\n const offsets = getOffsetRectRelativeToArbitraryNode(\r\n boundariesNode,\r\n offsetParent,\r\n fixedPosition\r\n );\r\n\r\n // In case of HTML, we need a different computation\r\n if (offsets && boundariesNode.nodeName === 'HTML' && !isFixed(offsetParent)) {\r\n const { height, width } = getWindowSizes(target.ownerDocument);\r\n if (isNumber(boundaries.top) && isNumber(offsets.top) && isNumber(offsets.marginTop)) {\r\n boundaries.top += offsets.top - offsets.marginTop;\r\n }\r\n if (isNumber(boundaries.top)) {\r\n boundaries.bottom = Number(height) + Number(offsets.top);\r\n }\r\n if (isNumber(boundaries.left) && isNumber(offsets.left) && isNumber(offsets.marginLeft)) {\r\n boundaries.left += offsets.left - offsets.marginLeft;\r\n }\r\n if (isNumber(boundaries.top)) {\r\n boundaries.right = Number(width) + Number(offsets.left);\r\n }\r\n } else if (offsets) {\r\n // for all the other DOM elements, this one is good\r\n boundaries = offsets;\r\n }\r\n }\r\n\r\n // Add paddings\r\n if (isNumber(boundaries.left)) {\r\n boundaries.left += padding;\r\n }\r\n if (isNumber(boundaries.top)) {\r\n boundaries.top += padding;\r\n }\r\n if (isNumber(boundaries.right)) {\r\n boundaries.right -= padding;\r\n }\r\n if (isNumber(boundaries.bottom)) {\r\n boundaries.bottom -= padding;\r\n }\r\n\r\n return boundaries;\r\n}\r\n","/**\r\n * Utility used to transform the `auto` placement to the placement with more\r\n * available space.\r\n */\r\nimport { getBoundaries } from './getBoundaries';\r\nimport { Offsets, PlacementForBs5 } from '../models';\r\nimport { getBsVer } from '@period-year-norway/ngx-bootstrap/utils';\r\n\r\nfunction getArea({ width, height }: { width: number; height: number }) {\r\n return width * height;\r\n}\r\n\r\nexport function computeAutoPlacement(\r\n placement: string,\r\n refRect: Offsets,\r\n target: HTMLElement,\r\n host: HTMLElement,\r\n allowedPositions = ['top', 'bottom', 'right', 'left'],\r\n boundariesElement = 'viewport',\r\n padding = 0\r\n) {\r\n if (placement.indexOf('auto') === -1) {\r\n return placement;\r\n }\r\n\r\n const boundaries = getBoundaries(target, host, padding, boundariesElement);\r\n\r\n type Rects = { top: Offsets; right: Offsets; bottom: Offsets; left: Offsets };\r\n const rects: Rects = {\r\n top: {\r\n width: boundaries?.width ?? 0,\r\n height: (refRect?.top ?? 0) - (boundaries?.top ?? 0)\r\n },\r\n right: {\r\n width: (boundaries?.right ?? 0) - (refRect?.right ?? 0),\r\n height: boundaries?.height ?? 0\r\n },\r\n bottom: {\r\n width: boundaries?.width ?? 0,\r\n height: (boundaries?.bottom ?? 0) - (refRect?.bottom ?? 0)\r\n },\r\n left: {\r\n width: (refRect.left ?? 0) - (boundaries?.left ?? 0),\r\n height: boundaries?.height ?? 0\r\n }\r\n };\r\n\r\n const sortedAreas = Object.keys(rects)\r\n .map((key) => ({\r\n position: key,\r\n ...rects[key as keyof Rects],\r\n area: getArea(rects[key as keyof Rects] as { width: number; height: number })\r\n }))\r\n .sort((a, b) => b.area - a.area);\r\n\r\n let filteredAreas = sortedAreas.filter(({ width, height }) => {\r\n return width >= target.clientWidth && height >= target.clientHeight;\r\n });\r\n\r\n filteredAreas = filteredAreas.filter(({ position }) => {\r\n return allowedPositions.some((allowedPosition: string) => {\r\n return allowedPosition === position;\r\n });\r\n });\r\n\r\n const computedPlacement: string = filteredAreas.length > 0 ? filteredAreas[0].position : sortedAreas[0].position;\r\n\r\n const variation = placement.split(' ')[1];\r\n // for tooltip on auto position\r\n target.className = target.className.replace(\r\n /bs-tooltip-auto/g,\r\n `bs-tooltip-${\r\n getBsVer().isBs5 ? PlacementForBs5[computedPlacement as keyof typeof PlacementForBs5] : computedPlacement\r\n }`\r\n );\r\n\r\n return computedPlacement + (variation ? `-${variation}` : '');\r\n}\r\n","import { Data, Offsets } from '../models';\r\n\r\nexport function getOffsets(data: Data): Offsets {\r\n return {\r\n width: data.offsets.target.width,\r\n height: data.offsets.target.height,\r\n left: Math.floor(data.offsets.target.left ?? 0),\r\n top: Math.round(data.offsets.target.top ?? 0),\r\n bottom: Math.round(data.offsets.target.bottom ?? 0),\r\n right: Math.floor(data.offsets.target.right ?? 0)\r\n };\r\n}\r\n","/**\r\n * Get the opposite placement of the given one\r\n */\r\nexport function getOppositePlacement(placement: string): string {\r\n const hash = { left: 'right', right: 'left', bottom: 'top', top: 'bottom' };\r\n\r\n return placement.replace(/left|right|bottom|top/g, matched => hash[matched as keyof typeof hash]);\r\n}\r\n","/**\r\n * Get the opposite placement variation of the given one\r\n */\r\nexport function getOppositeVariation(variation: string) {\r\n if (variation === 'right') {\r\n return 'left';\r\n } else if (variation === 'left') {\r\n return 'right';\r\n }\r\n\r\n return variation;\r\n}\r\n","/**\r\n * Get the outer sizes of the given element (offset size + margins)\r\n */\r\nimport { Offsets } from '../models';\r\n\r\nconst parse = (value?: string, def = 0) => value ? parseFloat(value) : def;\r\nexport function getOuterSizes(element: HTMLElement): Offsets {\r\n const window = element.ownerDocument.defaultView;\r\n const styles = window?.getComputedStyle(element);\r\n const x = parse(styles?.marginTop) + parse(styles?.marginBottom);\r\n const y = parse(styles?.marginLeft) + parse(styles?.marginRight);\r\n\r\n return {\r\n width: Number(element.offsetWidth) + y,\r\n height: Number(element.offsetHeight) + x\r\n };\r\n}\r\n","/**\r\n * Get offsets to the reference element\r\n */\r\nimport { findCommonOffsetParent } from './findCommonOffsetParent';\r\nimport { getOffsetRectRelativeToArbitraryNode } from './getOffsetRectRelativeToArbitraryNode';\r\nimport { getFixedPositionOffsetParent } from './getFixedPositionOffsetParent';\r\nimport { Offsets } from '../models';\r\n\r\nexport function getReferenceOffsets(\r\n target: HTMLElement,\r\n host: HTMLElement,\r\n fixedPosition?: boolean\r\n): Offsets {\r\n const commonOffsetParent = fixedPosition\r\n ? getFixedPositionOffsetParent(target)\r\n : findCommonOffsetParent(target, host);\r\n\r\n return getOffsetRectRelativeToArbitraryNode(host, commonOffsetParent, fixedPosition);\r\n}\r\n","/**\r\n * Get offsets to the target\r\n */\r\nimport { getOppositePlacement } from './getOppositePlacement';\r\nimport { getOuterSizes } from './getOuterSizes';\r\nimport { Offsets } from '../models';\r\n\r\n\r\nexport function getTargetOffsets(\r\n target: HTMLElement,\r\n hostOffsets: Offsets,\r\n position: string\r\n): Offsets {\r\n const placement = position.split(' ')[0];\r\n // Get target node sizes\r\n const targetRect = getOuterSizes(target);\r\n\r\n // Add position, width and height to our offsets object\r\n const targetOffsets = {\r\n width: targetRect.width,\r\n height: targetRect.height\r\n };\r\n\r\n // depending by the target placement we have to compute its offsets slightly differently\r\n const isHoriz = ['right', 'left'].indexOf(placement) !== -1;\r\n const mainSide = isHoriz ? 'top' : 'left';\r\n const secondarySide = isHoriz ? 'left' : 'top';\r\n const measurement = isHoriz ? 'height' : 'width';\r\n const secondaryMeasurement = !isHoriz ? 'height' : 'width';\r\n\r\n targetOffsets[mainSide as keyof typeof targetOffsets] =\r\n (hostOffsets[mainSide] ?? 0) +\r\n hostOffsets[measurement] / 2 -\r\n targetRect[measurement] / 2;\r\n\r\n targetOffsets[secondarySide as keyof typeof targetOffsets] = placement === secondarySide\r\n ? (hostOffsets[secondarySide] ?? 0)- targetRect[secondaryMeasurement]\r\n : hostOffsets[getOppositePlacement(secondarySide) as keyof typeof hostOffsets] ?? 0;\r\n\r\n return targetOffsets;\r\n}\r\n","/**\r\n * Helper used to know if the given modifier is enabled.\r\n */\r\nimport { Options } from '../models';\r\n\r\nexport function isModifierEnabled(options: Options, modifierName: string): boolean {\r\n return !!options.modifiers[modifierName as keyof typeof options.modifiers]?.enabled;\r\n}\r\n","import { getBsVer } from '@period-year-norway/ngx-bootstrap/utils';\r\nimport { AvailbleBSPositions } from '../models';\r\n\r\nconst availablePositions = {\r\n top: ['top', 'top start', 'top end'],\r\n bottom: ['bottom', 'bottom start', 'bottom end'],\r\n start: ['start', 'start top', 'start bottom'],\r\n end: ['end', 'end top', 'end bottom']\r\n};\r\n\r\nexport function checkPopoverMargin(placement: AvailbleBSPositions, checkPosition: 'top' | 'bottom' | 'start' | 'end'): boolean {\r\n if (!getBsVer().isBs5) {\r\n return false;\r\n }\r\n\r\n return availablePositions[checkPosition].includes(placement);\r\n}\r\n\r\nexport function checkMargins(placement: any): string {\r\n if (!getBsVer().isBs5) {\r\n return '';\r\n }\r\n\r\n if (checkPopoverMargin(placement, 'end')) {\r\n return 'ms-2';\r\n }\r\n\r\n if (checkPopoverMargin(placement, 'start')) {\r\n return 'me-2';\r\n }\r\n\r\n if (checkPopoverMargin(placement, 'top')) {\r\n return 'mb-2';\r\n }\r\n\r\n if (checkPopoverMargin(placement, 'bottom')) {\r\n return 'mt-2';\r\n }\r\n\r\n return '';\r\n}\r\n","/**\r\n * Update class for the given popper\r\n */\r\nimport { Renderer2 } from '@angular/core';\r\nimport { Data, PlacementForBs5 } from '../models';\r\nimport { checkMargins } from './checkMargin';\r\nimport { getBsVer } from '@period-year-norway/ngx-bootstrap/utils';\r\n\r\nexport function updateContainerClass(data: Data, renderer?: Renderer2): void {\r\n const target = data.instance.target;\r\n\r\n let containerClass = target.className;\r\n\r\n const dataPlacement = getBsVer().isBs5 ? PlacementForBs5[data.placement as keyof typeof PlacementForBs5] : data.placement;\r\n if (data.placementAuto) {\r\n containerClass = containerClass.replace(/bs-popover-auto/g, `bs-popover-${dataPlacement}`);\r\n containerClass = containerClass.replace(/ms-2|me-2|mb-2|mt-2/g, '');\r\n containerClass = containerClass.replace(/bs-tooltip-auto/g, `bs-tooltip-${dataPlacement}`);\r\n containerClass = containerClass.replace(/\\sauto/g, ` ${dataPlacement}`);\r\n\r\n if (containerClass.indexOf('popover') !== -1) {\r\n containerClass = containerClass + ' ' + checkMargins(dataPlacement);\r\n }\r\n\r\n if (containerClass.indexOf('popover') !== -1 && containerClass.indexOf('popover-auto') === -1) {\r\n containerClass += ' popover-auto';\r\n }\r\n\r\n if (containerClass.indexOf('tooltip') !== -1 && containerClass.indexOf('tooltip-auto') === -1) {\r\n containerClass += ' tooltip-auto';\r\n }\r\n }\r\n containerClass = containerClass.replace(/left|right|top|bottom|end|start/g, `${dataPlacement.split(' ')[0]}`);\r\n\r\n if (renderer) {\r\n renderer.setAttribute(target, 'class', containerClass);\r\n\r\n return;\r\n }\r\n\r\n target.className = containerClass;\r\n}\r\n","/**\r\n * Set the style to the given popper\r\n */\r\nimport { Renderer2 } from '@angular/core';\r\n\r\nimport { isNumeric } from './isNumeric';\r\n\r\nexport function setStyles(element: HTMLElement | null, styles?: Record<string, string|number|HTMLElement>, renderer?: Renderer2) {\r\n if (!element || !styles) {\r\n return;\r\n }\r\n Object.keys(styles).forEach((prop) => {\r\n let unit = '';\r\n // add unit if the value is numeric and is one of the following\r\n if (['width', 'height', 'top', 'right', 'bottom', 'left'].indexOf(prop) !== -1 &&\r\n isNumeric(styles[prop] as string)) {\r\n unit = 'px';\r\n }\r\n\r\n if (renderer) {\r\n renderer.setStyle(element, prop, `${String(styles[prop])}${unit}`);\r\n\r\n return;\r\n }\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n (element.style as any)[prop] = String(styles[prop]) + unit;\r\n });\r\n}\r\n","import { getClientRect, getOuterSizes, getStyleComputedProperty } from '../utils';\r\nimport { Data } from '../models';\r\n\r\nexport function arrow(data: Data) {\r\n let targetOffsets = data.offsets.target;\r\n // if arrowElement is a string, suppose it's a CSS selector\r\n const arrowElement: HTMLElement | null = data.instance.target.querySelector('.arrow');\r\n\r\n // if arrowElement is not found, don't run the modifier\r\n if (!arrowElement) {\r\n return data;\r\n }\r\n\r\n const isVertical = ['left', 'right'].indexOf(data.placement.split(' ')[0]) !== -1;\r\n\r\n const len = isVertical ? 'height' : 'width';\r\n const sideCapitalized = isVertical ? 'Top' : 'Left';\r\n const side = sideCapitalized.toLowerCase() as keyof typeof targetOffsets;\r\n const altSide = isVertical ? 'left' : 'top';\r\n const opSide = isVertical ? 'bottom' : 'right';\r\n const arrowElementSize = getOuterSizes(arrowElement)[len];\r\n const placementVariation = data.placement.split(' ')[1];\r\n\r\n // top/left side\r\n if ((data.offsets.host[opSide] ?? 0) - arrowElementSize < (targetOffsets[side] ?? 0)) {\r\n (targetOffsets)[side] -=\r\n (targetOffsets[side] ?? 0) - ((data.offsets.host[opSide] ?? 0) - arrowElementSize);\r\n }\r\n // bottom/right side\r\n if (Number((data).offsets.host[side]) + Number(arrowElementSize) > (targetOffsets[opSide] ?? 0)) {\r\n (targetOffsets)[side] +=\r\n Number((data).offsets.host[side]) + Number(arrowElementSize) - Number((targetOffsets)[opSide]);\r\n }\r\n targetOffsets = getClientRect(targetOffsets);\r\n\r\n // Compute the sideValue using the updated target offsets\r\n // take target margin in account because we don't have this info available\r\n const css = getStyleComputedProperty(data.instance.target) as unknown as Record<string, string>;\r\n const targetMarginSide = parseFloat(css[`margin${sideCapitalized}`]) || 0;\r\n const targetBorderSide = parseFloat(css[`border${sideCapitalized}Width`]) || 0;\r\n\r\n // compute center of the target\r\n let center: number;\r\n if (!placementVariation) {\r\n center = Number((data).offsets.host[side]) + Number(data.offsets.host[len] / 2 - arrowElementSize / 2);\r\n } else {\r\n const targetBorderRadius = parseFloat(css[\"borderRadius\"]) || 0;\r\n const targetSideArrowOffset = Number(targetMarginSide + targetBorderSide + targetBorderRadius);\r\n center = side === placementVariation ?\r\n Number((data).offsets.host[side]) + targetSideArrowOffset :\r\n Number((data).offsets.host[side]) + Number(data.offsets.host[len] - targetSideArrowOffset);\r\n }\r\n\r\n let sideValue =\r\n center - (targetOffsets[side] ?? 0) - targetMarginSide - targetBorderSide;\r\n\r\n // prevent arrowElement from being placed not contiguously to its target\r\n sideValue = Math.max(Math.min(targetOffsets[len] - (arrowElementSize + 5), sideValue), 0);\r\n data.offsets.arrow = {\r\n [side]: Math.round(sideValue),\r\n [altSide]: '' // make sure to unset any eventual altSide value from the DOM node\r\n };\r\n\r\n data.instance.arrow = arrowElement;\r\n\r\n return data;\r\n}\r\n","import { Data } from '../models';\r\nimport {\r\n computeAutoPlacement,\r\n getBoundaries,\r\n getClientRect,\r\n getOppositeVariation,\r\n getTargetOffsets,\r\n isModifierEnabled\r\n} from '../utils';\r\n\r\nexport function flip(data: Data): Data {\r\n data.offsets.target = getClientRect(data.offsets.target);\r\n\r\n if (!isModifierEnabled(data.options, 'flip')) {\r\n\r\n data.offsets.target = {\r\n ...data.offsets.target,\r\n ...getTargetOffsets(\r\n data.instance.target,\r\n data.offsets.host,\r\n data.placement\r\n )\r\n };\r\n\r\n return data;\r\n }\r\n\r\n const boundaries = getBoundaries(\r\n data.instance.target,\r\n data.instance.host,\r\n 0, // padding\r\n 'viewport',\r\n false // positionFixed\r\n );\r\n\r\n let placement = data.placement.split(' ')[0];\r\n let variation = data.placement.split(' ')[1] || '';\r\n\r\n const offsetsHost = data.offsets.host;\r\n const target = data.instance.target;\r\n const host = data.instance.host;\r\n\r\n const adaptivePosition = computeAutoPlacement('auto', offsetsHost, target, host, data.options.allowedPositions);\r\n const flipOrder = [placement, adaptivePosition];\r\n\r\n flipOrder.forEach((step, index) => {\r\n if (placement !== step || flipOrder.length === index + 1) {\r\n return;\r\n }\r\n\r\n placement = data.placement.split(' ')[0];\r\n\r\n // using floor because the host offsets may contain decimals we are not going to consider here\r\n const overlapsRef =\r\n (placement === 'left' &&\r\n Math.floor(data.offsets.target.right ?? 0) > Math.floor(data.offsets.host.left ?? 0)) ||\r\n (placement === 'right' &&\r\n Math.floor(data.offsets.target.left ?? 0) < Math.floor(data.offsets.host.right ?? 0)) ||\r\n (placement === 'top' &&\r\n Math.floor(data.offsets.target.bottom ?? 0) > Math.floor(data.offsets.host.top ?? 0)) ||\r\n (placement === 'bottom' &&\r\n Math.floor(data.offsets.target.top ?? 0) < Math.floor(data.offsets.host.bottom ?? 0));\r\n\r\n const overflowsLeft = Math.floor(data.offsets.target.left ?? 0) < Math.floor(boundaries.left ?? 0);\r\n const overflowsRight = Math.floor(data.offsets.target.right ?? 0) > Math.floor(boundaries.right ?? 0);\r\n const overflowsTop = Math.floor(data.offsets.target.top ?? 0) < Math.floor(boundaries.top ?? 0);\r\n const overflowsBottom = Math.floor(data.offsets.target.bottom ?? 0) > Math.floor(boundaries.bottom ?? 0);\r\n\r\n const overflowsBoundaries =\r\n (placement === 'left' && overflowsLeft) ||\r\n (placement === 'right' && overflowsRight) ||\r\n (placement === 'top' && overflowsTop) ||\r\n (placement === 'bottom' && overflowsBottom);\r\n\r\n // flip the variation if required\r\n const isVertical = ['top', 'bottom'].indexOf(placement) !== -1;\r\n const flippedVariation =\r\n ((isVertical && variation === 'left' && overflowsLeft) ||\r\n (isVertical && variation === 'right' && overflowsRight) ||\r\n (!isVertical && variation === 'left' && overflowsTop) ||\r\n (!isVertical && variation === 'right' && overflowsBottom));\r\n\r\n if (overlapsRef || overflowsBoundaries || flippedVariation) {\r\n if (overlapsRef || overflowsBoundaries) {\r\n placement = flipOrder[index + 1];\r\n }\r\n\r\n if (flippedVariation) {\r\n variation = getOppositeVariation(variation);\r\n }\r\n\r\n data.placement = placement + (variation ? ` ${variation}` : '');\r\n\r\n data.offsets.target = {\r\n ...data.offsets.target,\r\n ...getTargetOffsets(\r\n data.instance.target,\r\n data.offsets.host,\r\n data.placement\r\n )\r\n };\r\n }\r\n });\r\n\r\n return data;\r\n}\r\n","import {\r\n computeAutoPlacement,\r\n getReferenceOffsets,\r\n getTargetOffsets\r\n} from '../utils';\r\n\r\nimport { Data, Options } from '../models';\r\n\r\nexport function initData(\r\n targetElement: HTMLElement|null, hostElement: HTMLElement|null, position: string, options?: Options\r\n): Data|undefined {\r\n\r\n if (!targetElement || !hostElement) {\r\n return ;\r\n }\r\n\r\n const hostElPosition = getReferenceOffsets(targetElement, hostElement);\r\n\r\n if (!position.match(/^(auto)*\\s*(left|right|top|bottom|start|end)*$/)\r\n && !position.match(/^(left|right|top|bottom|start|end)*(?: (left|right|top|bottom|start|end))*$/)) {\r\n position = 'auto';\r\n }\r\n\r\n const placementAuto = !!position.match(/auto/g);\r\n\r\n // support old placements 'auto left|right|top|bottom'\r\n let placement = position.match(/auto\\s(left|right|top|bottom|start|end)/)\r\n ? position.split(' ')[1] || 'auto'\r\n : position;\r\n\r\n // Normalize placements that have identical main placement and variation (\"right right\" => \"right\").\r\n const matches = placement.match(/^(left|right|top|bottom|start|end)* ?(?!\\1)(left|right|top|bottom|start|end)?/);\r\n if (matches) {\r\n placement = matches[1] + (matches[2] ? ` ${matches[2]}` : '');\r\n }\r\n\r\n // \"left right\", \"top bottom\" etc. placements also considered incorrect.\r\n if (['left right', 'right left', 'top bottom', 'bottom top'].indexOf(placement) !== -1) {\r\n placement = 'auto';\r\n }\r\n\r\n placement = computeAutoPlacement(\r\n placement,\r\n hostElPosition,\r\n targetElement,\r\n hostElement,\r\n options ? options.allowedPositions : undefined\r\n );\r\n\r\n const targetOffset = getTargetOffsets(targetElement, hostElPosition, placement);\r\n\r\n return {\r\n options: options || {modifiers: {}},\r\n instance: {\r\n target: targetElement,\r\n host: hostElement,\r\n arrow: void 0\r\n },\r\n offsets: {\r\n target: targetOffset,\r\n host: hostElPosition,\r\n arrow: void 0\r\n },\r\n positionFixed: false,\r\n placement,\r\n placementAuto\r\n };\r\n}\r\n","import { getBoundaries, isModifierEnabled } from '../utils';\r\nimport { Data, Offsets } from '../models';\r\n\r\nexport function preventOverflow(data: Data) {\r\n if (!isModifierEnabled(data.options, 'preventOverflow')) {\r\n return data;\r\n }\r\n\r\n // NOTE: DOM access here\r\n // resets the target Offsets's position so that the document size can be calculated excluding\r\n // the size of the targetOffsets element itself\r\n const transformProp = 'transform';\r\n const targetStyles = data.instance.target.style; // assignment to help minification\r\n const { top, left, [transformProp]: transform } = targetStyles;\r\n targetStyles.top = '';\r\n targetStyles.left = '';\r\n targetStyles[transformProp] = '';\r\n\r\n const boundaries = getBoundaries(\r\n data.instance.target,\r\n data.instance.host,\r\n 0, // padding\r\n data.options.modifiers.preventOverflow?.boundariesElement || 'scrollParent',\r\n false // positionFixed\r\n );\r\n\r\n // NOTE: DOM access here\r\n // restores the original style properties after the offsets have been computed\r\n targetStyles.top = top;\r\n targetStyles.left = left;\r\n targetStyles[transformProp] = transform;\r\n\r\n const order = ['left', 'right', 'top', 'bottom'];\r\n\r\n const check = {\r\n primary(placement: keyof Offsets) {\r\n let value = data.offsets.target[placement];\r\n // options.escapeWithReference\r\n if ((data.offsets.target[placement] ?? 0) < (boundaries[placement] ?? 0)) {\r\n value = Math.max(data.offsets.target[placement] ?? 0, boundaries[placement] ?? 0);\r\n }\r\n\r\n return { [placement]: value };\r\n },\r\n secondary(placement: keyof Offsets) {\r\n const isPlacementHorizontal = placement === 'right';\r\n const mainSide = isPlacementHorizontal ? 'left' : 'top';\r\n const measurement = isPlacementHorizontal ? 'width' : 'height';\r\n let value = data.offsets.target[mainSide];\r\n\r\n // escapeWithReference\r\n if ((data.offsets.target[placement] ?? 0) > (boundaries[placement] ?? 0)) {\r\n value = Math.min(\r\n data.offsets.target[mainSide] ?? 0,\r\n (boundaries[placement] ?? 0) - data.offsets.target[measurement]\r\n );\r\n }\r\n\r\n return { [mainSide]: value };\r\n }\r\n };\r\n\r\n order.forEach((placement) => {\r\n const side = ['left', 'top', 'start'].indexOf(placement) !== -1 ? check['primary'] : check['secondary'];\r\n\r\n data.offsets.target = {\r\n ...data.offsets.target,\r\n ...side(placement as keyof Offsets)\r\n };\r\n });\r\n\r\n return data;\r\n}\r\n","import { Data } from '../models';\r\n\r\nexport function shift(data: Data): Data {\r\n const placement = data.placement;\r\n const basePlacement = placement.split(' ')[0];\r\n const shiftVariation = placement.split(' ')[1];\r\n\r\n if (shiftVariation) {\r\n const { host, target } = data.offsets;\r\n const isVertical = ['bottom', 'top'].indexOf(basePlacement) !== -1;\r\n const side = isVertical ? 'left' : 'top';\r\n const measurement = isVertical ? 'width' : 'height';\r\n\r\n const shiftOffsets = {\r\n start: { [side]: host[side] },\r\n end: {\r\n [side]: (host[side] ?? 0) + host[measurement] - target[measurement]\r\n }\r\n };\r\n\r\n data.offsets.target = {\r\n ...target, ...{\r\n [side]: (side === shiftVariation ? shiftOffsets.start[side] : shiftOffsets.end[side])\r\n }\r\n };\r\n }\r\n\r\n return data;\r\n}\r\n","/**\r\n * @copyright Valor Software\r\n * @copyright Federico Zivolo and contributors\r\n */\r\nimport { Renderer2 } from '@angular/core';\r\nimport { Data, Offsets, Options, MapPlacementInToRL } from './models';\r\n\r\nimport { arrow, flip, initData, preventOverflow, shift } from './modifiers';\r\n\r\nimport { getOffsets, getReferenceOffsets, setStyles, updateContainerClass } from './utils';\r\n\r\n\r\nexport class Positioning {\r\n position(hostElement: HTMLElement, targetElement: HTMLElement/*, round = true*/): Offsets | undefined {\r\n return this.offset(hostElement, targetElement/*, false*/);\r\n }\r\n\r\n offset(hostElement: HTMLElement, targetElement: HTMLElement/*, round = true*/): Offsets | undefined {\r\n return getReferenceOffsets(targetElement, hostElement);\r\n }\r\n\r\n positionElements(\r\n hostElement: HTMLElement | null,\r\n targetElement: HTMLElement | null,\r\n position: string,\r\n appendToBody?: boolean,\r\n options?: Options\r\n ): Data | undefined {\r\n const chainOfModifiers = [flip, shift, preventOverflow, arrow];\r\n const _position = MapPlacementInToRL[position as keyof typeof MapPlacementInToRL];\r\n const data = initData(targetElement, hostElement, _position, options);\r\n if (!data) {\r\n return;\r\n }\r\n\r\n return chainOfModifiers.reduce(\r\n (modifiedData, modifier) => modifier(modifiedData),\r\n data\r\n );\r\n }\r\n}\r\n\r\nconst positionService = new Positioning();\r\n\r\nexport function positionElements(\r\n hostElement: HTMLElement | null,\r\n targetElement: HTMLElement | null,\r\n placement: string,\r\n appendToBody?: boolean,\r\n options?: Options,\r\n renderer?: Renderer2\r\n): void {\r\n\r\n const data = positionService.positionElements(\r\n hostElement,\r\n targetElement,\r\n placement,\r\n appendToBody,\r\n options\r\n );\r\n\r\n if (!data) {\r\n return;\r\n }\r\n\r\n const offsets = getOffsets(data);\r\n\r\n setStyles(targetElement, {\r\n 'will-change': 'transform',\r\n top: '0px',\r\n left: '0px',\r\n transform: `translate3d(${offsets.left}px, ${offsets.top}px, 0px)`\r\n }, renderer);\r\n\r\n if (data.instance.arrow) {\r\n setStyles(data.instance.arrow, data.offsets.arrow, renderer);\r\n }\r\n\r\n updateContainerClass(data, renderer);\r\n}\r\n","import { Injectable, ElementRef, RendererFactory2, Inject, PLATFORM_ID, NgZone } from '@angular/core';\r\nimport { isPlatformBrowser } from '@angular/common';\r\n\r\nimport { positionElements } from './ng-positioning';\r\n\r\nimport { fromEvent, merge, of, animationFrameScheduler, Subject, Observable } from 'rxjs';\r\nimport { Options } from './models';\r\n\r\n\r\nexport interface PositioningOptions {\r\n /** The DOM element, ElementRef, or a selector string of an element which will be moved */\r\n element?: HTMLElement | ElementRef | string;\r\n\r\n /** The DOM element, ElementRef, or a selector string of an element which the element will be attached to */\r\n target?: HTMLElement | ElementRef | string;\r\n\r\n /**\r\n * A string of the form 'vert-attachment horiz-attachment' or 'placement'\r\n * - placement can be \"top\", \"bottom\", \"left\", \"right\"\r\n * not yet supported:\r\n * - vert-attachment can be any of 'top', 'middle', 'bottom'\r\n * - horiz-attachment can be any of 'left', 'center', 'right'\r\n */\r\n attachment?: string;\r\n\r\n /** A string similar to `attachment`. The one difference is that, if it's not provided,\r\n * `targetAttachment` will assume the mirror image of `attachment`.\r\n */\r\n targetAttachment?: string;\r\n\r\n /** A string of the form 'vert-offset horiz-offset'\r\n * - vert-offset and horiz-offset can be of the form \"20px\" or \"55%\"\r\n */\r\n offset?: string;\r\n\r\n /** A string similar to `offset`, but referring to the offset of the target */\r\n targetOffset?: string;\r\n\r\n /** If true component will be attached to body */\r\n appendToBody?: boolean;\r\n}\r\n\r\n\r\n@Injectable({providedIn: 'root'})\r\nexport class PositioningService {\r\n private options?: Options;\r\n private update$$ = new Subject<null>();\r\n private positionElements = new Map();\r\n private triggerEvent$?: Observable<number|Event|null>;\r\n private isDisabled = false;\r\n\r\n constructor(\r\n ngZone: NgZone,\r\n rendererFactory: RendererFactory2,\r\n @Inject(PLATFORM_ID) platformId: number\r\n ) {\r\n\r\n if (isPlatformBrowser(platformId)) {\r\n ngZone.runOutsideAngular(() => {\r\n this.triggerEvent$ = merge(\r\n fromEvent(window, 'scroll', { passive: true }),\r\n fromEvent(window, 'resize', { passive: true }),\r\n of(0, animationFrameScheduler),\r\n this.update$$\r\n );\r\n\r\n this.triggerEvent$.subscribe(() => {\r\n if (this.isDisabled) {\r\n return;\r\n }\r\n\r\n this.positionElements\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n .forEach((positionElement: any) => {\r\n positionElements(\r\n _getHtmlElement(positionElement.target),\r\n _getHtmlElement(positionElement.element),\r\n positionElement.attachment,\r\n positionElement.appendToBody,\r\n this.options,\r\n rendererFactory.createRenderer(null, null)\r\n );\r\n });\r\n });\r\n });\r\n }\r\n }\r\n\r\n position(options: PositioningOptions): void {\r\n this.addPositionElement(options);\r\n }\r\n\r\n get event$(): Observable<number|Event|null>|undefined {\r\n return this.triggerEvent$;\r\n }\r\n\r\n disable(): void {\r\n this.isDisabled = true;\r\n }\r\n\r\n enable(): void {\r\n this.isDisabled = false;\r\n }\r\n\r\n addPositionElement(options: PositioningOptions): void {\r\n this.positionElements.set(_getHtmlElement(options.element), options);\r\n }\r\n\r\n calcPosition(): void {\r\n this.update$$.next(null);\r\n }\r\n\r\n deletePositionElement(elRef: ElementRef): void {\r\n this.positionElements.delete(_getHtmlElement(elRef));\r\n }\r\n\r\n setOptions(options: Options) {\r\n this.options = options;\r\n }\r\n}\r\n\r\nfunction _getHtmlElement(element?: HTMLElement | ElementRef | string): HTMLElement | null {\r\n // it means that we got a selector\r\n if (typeof element === 'string') {\r\n return document.querySelector(element);\r\n }\r\n\r\n if (element instanceof ElementRef) {\r\n return element.nativeElement;\r\n }\r\n\r\n return element ?? null;\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}