q2-tecton-elements 1.41.3 → 1.41.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/click-elsewhere_2.cjs.entry.js +47 -14
- package/dist/cjs/click-elsewhere_2.cjs.entry.js.map +1 -1
- package/dist/cjs/loader.cjs.js +1 -1
- package/dist/cjs/q2-tecton-elements.cjs.js +1 -1
- package/dist/collection/components/q2-popover/q2-popover.css +16 -10
- package/dist/collection/components/q2-popover/q2-popover.js +52 -14
- package/dist/collection/components/q2-popover/q2-popover.js.map +1 -1
- package/dist/components/q2-popover2.js +48 -14
- package/dist/components/q2-popover2.js.map +1 -1
- package/dist/esm/click-elsewhere_2.entry.js +47 -14
- package/dist/esm/click-elsewhere_2.entry.js.map +1 -1
- package/dist/esm/loader.js +1 -1
- package/dist/esm/q2-tecton-elements.js +1 -1
- package/dist/q2-tecton-elements/p-f1bf88a5.entry.js +2 -0
- package/dist/q2-tecton-elements/p-f1bf88a5.entry.js.map +1 -0
- package/dist/q2-tecton-elements/q2-tecton-elements.esm.js +1 -1
- package/dist/q2-tecton-elements/q2-tecton-elements.esm.js.map +1 -1
- package/dist/test/elements/q2-popover-test.e2e.js +30 -6
- package/dist/test/elements/q2-popover-test.e2e.js.map +1 -1
- package/dist/types/components/q2-popover/q2-popover.d.ts +3 -0
- package/package.json +3 -3
- package/dist/q2-tecton-elements/p-3729ab9c.entry.js +0 -2
- package/dist/q2-tecton-elements/p-3729ab9c.entry.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["ClickElsewhere","constructor","hostRef","this","mouseEventList","isCurrentlyFocused","mouseHandler","event","shadowContains","findActiveElement","aboutToBeFocused","shadowEventTarget","originatesInSlots","target","change","emit","windowBlurHandler","activeElement","document","body","tagName","componentWillLoad","connectedCallback","forEach","eventName","addEventListener","window","disconnectedCallback","removeEventListener","workingElement","shadowRoot","composedPath","child","hostElement","parentNode","host","slots","querySelectorAll","currentSlot","Array","from","lightNodes","assignedNodes","childNodes","currentNode","contains","q2PopoverCss","Q2PopoverStyle0","Q2Popover","displayBuffer","handleMinHeight","minHeight","handleDeprecationWarning","viewPortChanged","open","determinePopDirection","setCSSProperties","async","controlElement","containerElement","currentDirection","top","controlTop","bottom","controlBottom","left","controlLeft","right","controlRight","_a","getBoundingClientRect","popoverTop","popoverBottom","visualViewport","height","popoverLeft","scrollX","popoverRight","width","block","style","setProperty","offsetWidth","scrollY","waitForNextPaint","undefined","componentDidLoad","removeViewportListeners","toggle","scrollContainerTo","options","scrollTo","openChanged","popoverStateChanged","addViewportListeners","_b","hidePopover","call","clearCSSProperties","minHeightProvided","popoverStateHandler","detail","stopPropagation","removeProperty","setDirectionAndShow","direction","showPopover","isModule","isIframe","hasPlatformDimensions","Object","keys","Tecton","platformDimensions","length","maxHeight","windowHeight","maxSpaceAbove","maxSpaceBelow","distanceToIframeBottom","viewableSpaceBelow","innerHeight","outletOffset","isIframeShorterThanWindow","directionWithMostSpace","render","containerClasses","h","key","ref","el","class","join","popover","contentElement"],"sources":["src/components/click-elsewhere/click-elsewhere.tsx","src/components/q2-popover/q2-popover.scss?tag=q2-popover&encapsulation=shadow","src/components/q2-popover/q2-popover.tsx"],"sourcesContent":["import { Component, ComponentInterface, Element, Event, EventEmitter } from '@stencil/core';\n\n@Component({\n tag: 'click-elsewhere',\n shadow: false,\n})\nexport class ClickElsewhere implements ComponentInterface {\n /**\n * Listens for mouse and window events that happen outside this click-elsewhere element so we can close popovers when users click outside them\n */\n mouseEventList: string[] = ['mousedown', 'dragstart', 'touchstart'];\n isCurrentlyFocused: boolean = false;\n\n @Element() hostElement: HTMLElement;\n\n /**\n * Emitted when the user clicks outside the element\n */\n @Event() change: EventEmitter;\n\n /* TODO: Stencil/Rollup is having issues compiling without this here. Will try to remove in future Stencil upgrade. */\n /* tslint:disable:no-empty */\n componentWillLoad() {}\n /* tslint:enable:no-empty */\n\n connectedCallback() {\n this.mouseEventList.forEach((eventName: string) => {\n document.addEventListener(eventName, this.mouseHandler);\n });\n window.addEventListener('blur', this.windowBlurHandler);\n }\n\n disconnectedCallback() {\n this.mouseEventList.forEach((eventName: string) => {\n document.removeEventListener(eventName, this.mouseHandler);\n });\n window.removeEventListener('blur', this.windowBlurHandler);\n }\n\n findActiveElement(): Element | null {\n let workingElement = document.activeElement!;\n while (true) {\n if (!workingElement || !workingElement.shadowRoot) {\n return workingElement;\n }\n workingElement = workingElement.shadowRoot.activeElement;\n }\n }\n\n shadowEventTarget(event: any): Element {\n return event.composedPath()[0] || event.target;\n }\n\n shadowContains(child: any): boolean {\n /**\n * shadow-dom enabled version of Node.contains()\n */\n\n while (true) {\n if (child === this.hostElement) {\n return true;\n }\n if (!child) {\n return false;\n }\n\n child = child.parentNode || child.host;\n }\n }\n\n originatesInSlots(target: Element): boolean {\n const slots = this.hostElement.querySelectorAll('slot');\n\n for (const currentSlot of Array.from(slots)) {\n const lightNodes =\n (currentSlot && currentSlot.assignedNodes && currentSlot.assignedNodes()) ||\n this.hostElement.childNodes;\n\n for (const currentNode of Array.from(lightNodes)) {\n if (currentNode.contains(target)) {\n return true;\n }\n }\n }\n\n return false;\n }\n\n mouseHandler = (event: Event): void => {\n const isCurrentlyFocused = this.shadowContains(this.findActiveElement());\n const aboutToBeFocused =\n this.shadowContains(this.shadowEventTarget(event)) || this.originatesInSlots(event.target as Element);\n\n if (!aboutToBeFocused && (this.isCurrentlyFocused || isCurrentlyFocused)) {\n this.isCurrentlyFocused = false;\n this.change.emit();\n return;\n }\n this.isCurrentlyFocused = aboutToBeFocused || isCurrentlyFocused;\n };\n\n windowBlurHandler = (): void => {\n const activeElement = this.findActiveElement();\n if (\n (activeElement === document.body && this.isCurrentlyFocused) || // clicked parent frame\n (activeElement !== document.body && activeElement?.tagName === 'IFRAME') // clicked child frame\n ) {\n this.isCurrentlyFocused = false;\n this.change.emit();\n return;\n }\n };\n}\n","@import '../../styles/host.scss';\n@import '../../styles/functions';\n\n:popover-open {\n position: absolute;\n margin: 0;\n padding: 0;\n overflow: auto;\n background: var-list(--tct-popover-background, --app-white, #ffffff);\n color: var-list(--tct-popover-font-color, --t-text, #4d4d4d);\n min-width: var-list(--tct-popover-min-width, 135px);\n margin-block: var-list(--tct-popover-margin-block, 0);\n box-shadow: var-list(--tct-popover-box-shadow, --app-shadow-1, unquote('0 2px 4px rgba(0, 0, 0, 0.3)'));\n border-width: var-list(--tct-popover-border-width, 0);\n border-style: solid;\n border-color: var-list(--tct-popover-border-color, transparent);\n border-radius: var-list(--tct-popover-border-radius, 0);\n // the following --comp variables are set via JS\n max-height: var(--comp-pop-max-height);\n left: var(--comp-pop-left);\n opacity: var(--comp-pop-opacity, 0);\n\n :host([block]) & {\n right: unset;\n width: var(--comp-pop-width);\n min-width: var-list(--tct-popover-min-width, unset);\n }\n\n :host([align='left']) & {\n left: var(--comp-pop-left);\n right: unset;\n }\n\n :host([align='right']) & {\n right: var(--comp-pop-right);\n left: unset;\n }\n\n &.down {\n top: var-list(--tct-popover-top, --comp-pop-top);\n bottom: unset;\n }\n\n &.up {\n top: unset;\n bottom: var(--comp-pop-bottom);\n }\n\n @include tiny-scrollbar();\n}\n\nclick-elsewhere {\n position: relative;\n display: block;\n}\n","import {\n Component,\n Prop,\n h,\n ComponentInterface,\n Element,\n Watch,\n Method,\n Listen,\n EventEmitter,\n Event,\n State,\n} from '@stencil/core';\nimport { handleDeprecationWarning, waitForNextPaint } from '../../utils';\n\n@Component({ tag: 'q2-popover', shadow: true, styleUrl: 'q2-popover.scss' })\nexport class Q2Popover implements ComponentInterface {\n /**\n * Force the direction of the popover when it opens.\n * If no value is passed, the component will auto-detect the direction based on available space.\n */\n @Prop({ reflect: true }) direction: 'up' | 'down';\n\n /** Aligns the popover to the left or right side of the control element. */\n @Prop({ reflect: true }) align: 'left' | 'right';\n\n /** Controls whether the popover is open or closed. */\n @Prop({ reflect: true, mutable: true }) open: boolean;\n\n /** Indicates the popover will match the width of its parent element. */\n @Prop({ reflect: true }) block: boolean;\n\n /** The element that controls the popover's behavior. */\n @Prop() controlElement: HTMLElement;\n\n /** @deprecated */\n @Prop() minHeight: number;\n\n @Element() hostElement: HTMLElement;\n\n /**\n * Emitted when the popover is opened or closed.\n */\n @Event() popoverStateChanged: EventEmitter<{ open: boolean }>;\n\n @State() currentDirection: 'down' | 'up' = undefined;\n containerElement: HTMLDivElement;\n contentElement: HTMLDivElement;\n\n /**\n * The number of pixels to leave between the popover and the edge of the viewport\n */\n displayBuffer = 10;\n\n /// Lifecycle hooks ///\n componentDidLoad() {\n this.handleMinHeight();\n if (this.open) this.determinePopDirection();\n }\n\n disconnectedCallback() {\n this.removeViewportListeners();\n }\n\n /// Methods ///\n @Method()\n async toggle() {\n this.open = !this.open;\n }\n\n @Method()\n async scrollContainerTo(options: ScrollToOptions) {\n this.containerElement.scrollTo(options);\n }\n\n /// Watchers ///\n @Watch('open')\n async openChanged(open: boolean) {\n this.popoverStateChanged.emit({ open });\n\n if (open) {\n this.addViewportListeners();\n this.determinePopDirection();\n } else {\n this.removeViewportListeners();\n this.currentDirection = undefined;\n this.containerElement.hidePopover?.();\n await waitForNextPaint();\n this.clearCSSProperties();\n }\n }\n\n @Watch('minHeight')\n minHeightProvided() {\n this.handleMinHeight();\n }\n\n /// Listeners ///\n @Listen('popoverState')\n popoverStateHandler(event: CustomEvent<{ open: boolean }>) {\n const {\n detail: { open },\n } = event;\n if (open === this.open) return;\n\n this.open = open;\n event.stopPropagation();\n }\n\n /// Helpers ///\n handleMinHeight = () => {\n if (this.minHeight) {\n handleDeprecationWarning(this, 'minHeight', 'prop');\n }\n };\n\n viewPortChanged = () => {\n if (!this.open) return;\n this.determinePopDirection();\n };\n\n addViewportListeners() {\n window.visualViewport.addEventListener('resize', this.viewPortChanged);\n }\n\n removeViewportListeners() {\n window.visualViewport.removeEventListener('resize', this.viewPortChanged);\n }\n\n setCSSProperties = async () => {\n const { controlElement, containerElement, currentDirection } = this;\n const {\n top: controlTop,\n bottom: controlBottom,\n left: controlLeft,\n right: controlRight,\n } = controlElement?.getBoundingClientRect() ?? {\n top: 0,\n bottom: 0,\n left: 0,\n right: 0,\n };\n const popoverTop: number = controlBottom;\n const popoverBottom: number = window.visualViewport.height - controlTop;\n const popoverLeft: number = controlLeft + window.scrollX;\n const popoverRight: number = window.visualViewport.width - controlRight - window.scrollX;\n\n if (this.block) containerElement.style.setProperty('--comp-pop-width', `${controlElement.offsetWidth}px`);\n containerElement.style.setProperty('--comp-pop-left', `${popoverLeft}px`);\n containerElement.style.setProperty('--comp-pop-right', `${popoverRight}px`);\n\n if (currentDirection === 'up')\n containerElement.style.setProperty('--comp-pop-bottom', `${popoverBottom - window.scrollY}px`);\n if (currentDirection === 'down')\n containerElement.style.setProperty('--comp-pop-top', `${popoverTop + window.scrollY}px`);\n\n // Wait for one paint to prevent layout thrashing\n await waitForNextPaint();\n containerElement.style.setProperty('--comp-pop-opacity', '1');\n };\n\n clearCSSProperties() {\n this.containerElement.style.removeProperty('--comp-pop-max-height');\n this.containerElement.style.removeProperty('--comp-pop-top');\n this.containerElement.style.removeProperty('--comp-pop-bottom');\n this.containerElement.style.removeProperty('--comp-pop-left');\n this.containerElement.style.removeProperty('--comp-pop-right');\n this.containerElement.style.removeProperty('--comp-pop-width');\n this.containerElement.style.removeProperty('--comp-pop-opacity');\n }\n\n setDirectionAndShow(direction: 'up' | 'down') {\n this.currentDirection = direction;\n this.containerElement.showPopover?.();\n this.setCSSProperties();\n }\n\n get isModule() {\n const isIframe = window !== window.top;\n const hasPlatformDimensions = Object.keys(window.Tecton?.platformDimensions ?? {}).length > 0;\n return isIframe && hasPlatformDimensions;\n }\n\n async determinePopDirection() {\n const { containerElement, controlElement, direction, displayBuffer } = this;\n if (containerElement) containerElement.style.maxHeight = null;\n\n await waitForNextPaint();\n\n const { isModule } = this;\n const { top: controlTop, bottom: controlBottom } = controlElement?.getBoundingClientRect() ?? {\n top: 0,\n bottom: 0,\n };\n\n let windowHeight: number;\n let maxSpaceAbove: number;\n let maxSpaceBelow: number;\n\n if (isModule) {\n const platformDimensions = window.Tecton?.platformDimensions;\n const distanceToIframeBottom = window.visualViewport.height - controlBottom;\n const viewableSpaceBelow =\n platformDimensions.innerHeight - (platformDimensions.outletOffset + controlBottom);\n const isIframeShorterThanWindow = distanceToIframeBottom < viewableSpaceBelow;\n windowHeight = platformDimensions.innerHeight;\n // If the top of the module is below the top of the window we just use the controlTop\n // Otherwise we need to add the outletOffset to the controlTop\n maxSpaceAbove =\n (platformDimensions.outletOffset > 0 ? controlTop : controlTop + platformDimensions.outletOffset) -\n displayBuffer;\n maxSpaceBelow = isIframeShorterThanWindow\n ? distanceToIframeBottom - displayBuffer\n : viewableSpaceBelow - displayBuffer;\n } else {\n windowHeight = window.visualViewport.height;\n maxSpaceAbove = controlTop - displayBuffer;\n maxSpaceBelow = windowHeight - controlBottom - displayBuffer;\n }\n\n const directionWithMostSpace: 'up' | 'down' = maxSpaceAbove > maxSpaceBelow ? 'up' : 'down';\n switch (direction ?? directionWithMostSpace) {\n case 'up':\n containerElement.style.setProperty('--comp-pop-max-height', `${maxSpaceAbove}px`);\n this.setDirectionAndShow('up');\n break;\n case 'down':\n containerElement.style.setProperty('--comp-pop-max-height', `${maxSpaceBelow}px`);\n this.setDirectionAndShow('down');\n break;\n default:\n break;\n }\n }\n\n /// DOM ///\n render() {\n const containerClasses = ['container', this.currentDirection];\n\n return (\n <div\n ref={el => (this.containerElement = el)}\n class={containerClasses.join(' ')}\n test-id=\"outerContainer\"\n popover=\"auto\"\n >\n <div\n ref={el => (this.contentElement = el)}\n class=\"content\"\n >\n <slot />\n </div>\n </div>\n );\n }\n}\n"],"mappings":"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"}
|