q2-tecton-elements 1.43.2 → 1.43.4

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.
Files changed (30) hide show
  1. package/dist/cjs/click-elsewhere_2.cjs.entry.js +20 -18
  2. package/dist/cjs/click-elsewhere_2.cjs.entry.js.map +1 -1
  3. package/dist/cjs/q2-dropdown.cjs.entry.js +4 -3
  4. package/dist/cjs/q2-dropdown.cjs.entry.js.map +1 -1
  5. package/dist/collection/components/q2-dropdown/q2-dropdown.js +5 -4
  6. package/dist/collection/components/q2-dropdown/q2-dropdown.js.map +1 -1
  7. package/dist/collection/components/q2-popover/q2-popover.css +1 -1
  8. package/dist/collection/components/q2-popover/q2-popover.js +19 -21
  9. package/dist/collection/components/q2-popover/q2-popover.js.map +1 -1
  10. package/dist/components/q2-dropdown.js +5 -4
  11. package/dist/components/q2-dropdown.js.map +1 -1
  12. package/dist/components/q2-popover2.js +20 -18
  13. package/dist/components/q2-popover2.js.map +1 -1
  14. package/dist/esm/click-elsewhere_2.entry.js +20 -18
  15. package/dist/esm/click-elsewhere_2.entry.js.map +1 -1
  16. package/dist/esm/q2-dropdown.entry.js +5 -4
  17. package/dist/esm/q2-dropdown.entry.js.map +1 -1
  18. package/dist/q2-tecton-elements/p-0b715d39.entry.js +2 -0
  19. package/dist/q2-tecton-elements/p-0b715d39.entry.js.map +1 -0
  20. package/dist/q2-tecton-elements/p-560794fa.entry.js +2 -0
  21. package/dist/q2-tecton-elements/p-560794fa.entry.js.map +1 -0
  22. package/dist/q2-tecton-elements/q2-tecton-elements.esm.js +1 -1
  23. package/dist/test/elements/q2-popover-test.e2e.js +2 -0
  24. package/dist/test/elements/q2-popover-test.e2e.js.map +1 -1
  25. package/dist/types/components/q2-popover/q2-popover.d.ts +1 -0
  26. package/package.json +3 -3
  27. package/dist/q2-tecton-elements/p-15ee9779.entry.js +0 -2
  28. package/dist/q2-tecton-elements/p-15ee9779.entry.js.map +0 -1
  29. package/dist/q2-tecton-elements/p-295d9418.entry.js +0 -2
  30. package/dist/q2-tecton-elements/p-295d9418.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","orientationChanged","handleMinHeight","minHeight","handleDeprecationWarning","viewPortChanged","open","determinePopDirection","setCSSProperties","async","controlElement","containerElement","currentDirection","top","controlTop","bottom","controlBottom","left","controlLeft","right","controlRight","_a","getBoundingClientRect","popoverLeft","scrollX","popoverRight","visualViewport","width","block","style","setProperty","offsetWidth","height","waitForNextPaint","undefined","componentDidLoad","removeViewportListeners","toggle","scrollContainerTo","options","scrollTo","openChanged","popoverStateChanged","addViewportListeners","show","clearCSSProperties","minHeightProvided","popoverStateHandler","detail","stopPropagation","passive","screen","orientation","removeProperty","setDirectionAndShow","direction","isModule","isIframe","hasPlatformDimensions","Object","keys","_b","Tecton","platformDimensions","length","maxHeight","windowHeight","maxSpaceAbove","maxSpaceBelow","distanceToIframeBottom","viewableSpaceBelow","innerHeight","outletOffset","isIframeShorterThanWindow","directionWithMostSpace","shouldUpdateMaxHeight","getPropertyValue","render","containerClasses","push","h","key","ref","el","class","join","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.container {\n display: none;\n}\n\n.show {\n display: block;\n position: fixed;\n z-index: 2147483647;\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 // remove `show` when Popover API is supported in iOS\n @State() show: boolean = false;\n\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 /** remove when Popover API is supported in iOS */\n orientationChanged: boolean = false;\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.show = false;\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 // #region remove when Popover API is supported in iOS\n window.addEventListener('scroll', this.viewPortChanged, { passive: true });\n screen?.orientation?.addEventListener('change', () => {\n this.orientationChanged = true;\n this.viewPortChanged;\n });\n window.addEventListener('orientationchange', () => {\n this.orientationChanged = true;\n this.viewPortChanged;\n });\n // #endregion\n }\n\n removeViewportListeners() {\n window.visualViewport.removeEventListener('resize', this.viewPortChanged);\n // #region remove when Popover API is supported in iOS\n window.removeEventListener('scroll', this.viewPortChanged);\n screen?.orientation?.removeEventListener('orientationchange', () => {\n this.orientationChanged = false;\n this.viewPortChanged;\n });\n window.removeEventListener('orientationchange', () => {\n this.orientationChanged = false;\n this.viewPortChanged;\n });\n // #endregion\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 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', `${window.visualViewport.height - controlTop}px`);\n }\n if (currentDirection === 'down') {\n containerElement.style.setProperty('--comp-pop-top', `${controlBottom}px`);\n }\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.show = true;\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\n // We do not want to update the max height once the popover is open unless the page orientation shifts (mobile use cases)\n const shouldUpdateMaxHeight =\n !containerElement.style.getPropertyValue('--comp-pop-max-height') || this.orientationChanged;\n // we do not want to constantly update the max-height after an orientation change, so we switch this back to false\n this.orientationChanged = false;\n\n switch (direction ?? directionWithMostSpace) {\n case 'up':\n if (shouldUpdateMaxHeight) {\n containerElement.style.setProperty('--comp-pop-max-height', `${maxSpaceAbove}px`);\n }\n this.setDirectionAndShow('up');\n break;\n case 'down':\n if (shouldUpdateMaxHeight) {\n containerElement.style.setProperty('--comp-pop-max-height', `${maxSpaceBelow}px`);\n }\n this.setDirectionAndShow('down');\n break;\n default:\n break;\n }\n }\n\n /// DOM ///\n render() {\n const containerClasses = ['container', this.currentDirection];\n if (this.show) containerClasses.push('show');\n\n return (\n <div\n ref={el => (this.containerElement = el)}\n class={containerClasses.join(' ')}\n test-id=\"outerContainer\"\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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"}