@getflip/swirl-components 0.140.0 → 0.141.0

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 (59) hide show
  1. package/components.json +12 -3
  2. package/dist/cjs/{floating-ui.dom.esm-39236b6a.js → floating-ui.dom.esm-d4123549.js} +72 -0
  3. package/dist/cjs/loader.cjs.js +1 -1
  4. package/dist/cjs/swirl-action-list_3.cjs.entry.js +1 -1
  5. package/dist/cjs/swirl-autocomplete.cjs.entry.js +1 -1
  6. package/dist/cjs/swirl-components.cjs.js +1 -1
  7. package/dist/cjs/swirl-description-list-item.cjs.entry.js +1 -1
  8. package/dist/cjs/swirl-image-grid-item.cjs.entry.js +2 -2
  9. package/dist/cjs/swirl-menu.cjs.entry.js +1 -1
  10. package/dist/cjs/swirl-popover_2.cjs.entry.js +2 -2
  11. package/dist/cjs/swirl-tooltip.cjs.entry.js +31 -38
  12. package/dist/collection/assets/pdfjs/pdf.worker.min.js +1 -1
  13. package/dist/collection/components/swirl-action-list/swirl-action-list.js +1 -1
  14. package/dist/collection/components/swirl-action-list/swirl-action-list.spec.js +1 -1
  15. package/dist/collection/components/swirl-description-list-item/swirl-description-list-item.js +1 -1
  16. package/dist/collection/components/swirl-image-grid-item/swirl-image-grid-item.css +6 -0
  17. package/dist/collection/components/swirl-image-grid-item/swirl-image-grid-item.js +1 -1
  18. package/dist/collection/components/swirl-popover/swirl-popover.css +15 -1
  19. package/dist/collection/components/swirl-popover/swirl-popover.js +1 -1
  20. package/dist/collection/components/swirl-tooltip/swirl-tooltip.css +36 -10
  21. package/dist/collection/components/swirl-tooltip/swirl-tooltip.js +32 -38
  22. package/dist/collection/components/swirl-tooltip/swirl-tooltip.spec.js +14 -12
  23. package/dist/collection/components/swirl-tooltip/swirl-tooltip.stories.js +2 -2
  24. package/dist/components/assets/pdfjs/pdf.worker.min.js +1 -1
  25. package/dist/components/floating-ui.dom.esm.js +72 -1
  26. package/dist/components/swirl-action-list2.js +1 -1
  27. package/dist/components/swirl-description-list-item.js +1 -1
  28. package/dist/components/swirl-image-grid-item.js +2 -2
  29. package/dist/components/swirl-popover2.js +1 -1
  30. package/dist/components/swirl-tooltip2.js +32 -38
  31. package/dist/esm/{floating-ui.dom.esm-ac7cc24e.js → floating-ui.dom.esm-b73e243b.js} +72 -1
  32. package/dist/esm/loader.js +1 -1
  33. package/dist/esm/swirl-action-list_3.entry.js +1 -1
  34. package/dist/esm/swirl-autocomplete.entry.js +1 -1
  35. package/dist/esm/swirl-components.js +1 -1
  36. package/dist/esm/swirl-description-list-item.entry.js +1 -1
  37. package/dist/esm/swirl-image-grid-item.entry.js +2 -2
  38. package/dist/esm/swirl-menu.entry.js +1 -1
  39. package/dist/esm/swirl-popover_2.entry.js +2 -2
  40. package/dist/esm/swirl-tooltip.entry.js +32 -39
  41. package/dist/swirl-components/{p-987c3e53.entry.js → p-078fe179.entry.js} +1 -1
  42. package/dist/swirl-components/p-1cd56d3d.entry.js +1 -0
  43. package/dist/swirl-components/{p-f7b251f0.entry.js → p-2014f17b.entry.js} +1 -1
  44. package/dist/swirl-components/p-3aa956d6.entry.js +1 -0
  45. package/dist/swirl-components/p-48d784ee.entry.js +1 -0
  46. package/dist/swirl-components/p-6ac4b552.js +1 -0
  47. package/dist/swirl-components/p-85eeb993.entry.js +1 -0
  48. package/dist/swirl-components/p-ea43de20.entry.js +1 -0
  49. package/dist/swirl-components/swirl-components.esm.js +1 -1
  50. package/dist/types/components/swirl-popover/swirl-popover.d.ts +1 -1
  51. package/dist/types/components/swirl-tooltip/swirl-tooltip.d.ts +5 -2
  52. package/package.json +1 -1
  53. package/vscode-data.json +3 -0
  54. package/dist/swirl-components/p-03034505.entry.js +0 -1
  55. package/dist/swirl-components/p-0bb0dc4f.entry.js +0 -1
  56. package/dist/swirl-components/p-4beaf463.entry.js +0 -1
  57. package/dist/swirl-components/p-562de2fb.entry.js +0 -1
  58. package/dist/swirl-components/p-77dfa273.entry.js +0 -1
  59. package/dist/swirl-components/p-ecb8b7f5.js +0 -1
@@ -260,6 +260,77 @@ function within(min$1$1, value, max$1$1) {
260
260
  return max$1(min$1$1, min$1(value, max$1$1));
261
261
  }
262
262
 
263
+ /**
264
+ * Provides data to position an inner element of the floating element so that it
265
+ * appears centered to the reference element.
266
+ * @see https://floating-ui.com/docs/arrow
267
+ */
268
+ const arrow = options => ({
269
+ name: 'arrow',
270
+ options,
271
+ async fn(state) {
272
+ // Since `element` is required, we don't Partial<> the type.
273
+ const {
274
+ element,
275
+ padding = 0
276
+ } = options || {};
277
+ const {
278
+ x,
279
+ y,
280
+ placement,
281
+ rects,
282
+ platform,
283
+ elements
284
+ } = state;
285
+ if (element == null) {
286
+ return {};
287
+ }
288
+ const paddingObject = getSideObjectFromPadding(padding);
289
+ const coords = {
290
+ x,
291
+ y
292
+ };
293
+ const axis = getMainAxisFromPlacement(placement);
294
+ const length = getLengthFromAxis(axis);
295
+ const arrowDimensions = await platform.getDimensions(element);
296
+ const isYAxis = axis === 'y';
297
+ const minProp = isYAxis ? 'top' : 'left';
298
+ const maxProp = isYAxis ? 'bottom' : 'right';
299
+ const clientProp = isYAxis ? 'clientHeight' : 'clientWidth';
300
+ const endDiff = rects.reference[length] + rects.reference[axis] - coords[axis] - rects.floating[length];
301
+ const startDiff = coords[axis] - rects.reference[axis];
302
+ const arrowOffsetParent = await (platform.getOffsetParent == null ? void 0 : platform.getOffsetParent(element));
303
+ let clientSize = arrowOffsetParent ? arrowOffsetParent[clientProp] : 0;
304
+
305
+ // DOM platform can return `window` as the `offsetParent`.
306
+ if (!clientSize || !(await (platform.isElement == null ? void 0 : platform.isElement(arrowOffsetParent)))) {
307
+ clientSize = elements.floating[clientProp] || rects.floating[length];
308
+ }
309
+ const centerToReference = endDiff / 2 - startDiff / 2;
310
+
311
+ // Make sure the arrow doesn't overflow the floating element if the center
312
+ // point is outside the floating element's bounds.
313
+ const min = paddingObject[minProp];
314
+ const max = clientSize - arrowDimensions[length] - paddingObject[maxProp];
315
+ const center = clientSize / 2 - arrowDimensions[length] / 2 + centerToReference;
316
+ const offset = within(min, center, max);
317
+
318
+ // If the reference is small enough that the arrow's padding causes it to
319
+ // to point to nothing for an aligned placement, adjust the offset of the
320
+ // floating element itself. This stops `shift()` from taking action, but can
321
+ // be worked around by calling it again after the `arrow()` if desired.
322
+ const shouldAddOffset = getAlignment(placement) != null && center != offset && rects.reference[length] / 2 - (center < min ? paddingObject[minProp] : paddingObject[maxProp]) - arrowDimensions[length] / 2 < 0;
323
+ const alignmentOffset = shouldAddOffset ? center < min ? min - center : max - center : 0;
324
+ return {
325
+ [axis]: coords[axis] - alignmentOffset,
326
+ data: {
327
+ [axis]: offset,
328
+ centerOffset: center - offset
329
+ }
330
+ };
331
+ }
332
+ });
333
+
263
334
  const oppositeSideMap = {
264
335
  left: 'right',
265
336
  right: 'left',
@@ -1232,4 +1303,4 @@ const computePosition = (reference, floating, options) => computePosition$1(refe
1232
1303
  ...options
1233
1304
  });
1234
1305
 
1235
- export { autoUpdate as a, computePosition as c, flip as f, offset as o, shift as s };
1306
+ export { autoUpdate as a, arrow as b, computePosition as c, flip as f, offset as o, shift as s };
@@ -79,7 +79,7 @@ const SwirlActionList = /*@__PURE__*/ proxyCustomElement(class SwirlActionList e
79
79
  item === activeElement?.querySelector('[role="menuitem"]'));
80
80
  }
81
81
  render() {
82
- return (h(Host, null, h("div", { "aria-orientation": "vertical", class: "action-list", onFocusout: this.isInsidePopover ? undefined : this.onFocusOut, onFocus: this.isInsidePopover ? undefined : this.onFocus, onKeyDown: this.onKeyDown, ref: (el) => (this.container = el), role: "menu" }, h("slot", null))));
82
+ return (h(Host, null, h("div", { "aria-orientation": "vertical", class: "action-list", onFocusout: this.isInsidePopover ? undefined : this.onFocusOut, onFocus: this.isInsidePopover ? undefined : this.onFocus, onKeyDown: this.onKeyDown, part: "action-list", ref: (el) => (this.container = el), role: "menu" }, h("slot", null))));
83
83
  }
84
84
  get el() { return this; }
85
85
  static get style() { return swirlActionListCss; }
@@ -21,7 +21,7 @@ const SwirlDescriptionListItem$1 = /*@__PURE__*/ proxyCustomElement(class SwirlD
21
21
  "description-list-item--bordered": this.bordered,
22
22
  "description-list-item--has-tools": hasTools,
23
23
  });
24
- return (h(Host, { role: "listitem" }, h("div", { class: className, part: "description-list-item", role: "group" }, h("div", { class: "description-list-item__text-container" }, h("div", { class: "description-list-item__term", part: "description-list-item__term", role: "term" }, this.term, this.tooltip && (h("span", { class: "description-list-item__tooltip" }, h("swirl-tooltip", { content: this.tooltip, position: "right" }, h("swirl-icon-info", { size: 16 }))))), h("div", { style: { maxWidth: this.maxWidth }, class: "description-list-item__description", role: "definition" }, h("slot", null))), h("div", { class: "description-list-item__tools" }, h("slot", { name: "tools" })))));
24
+ return (h(Host, { role: "listitem" }, h("div", { class: className, part: "description-list-item", role: "group" }, h("div", { class: "description-list-item__text-container" }, h("div", { class: "description-list-item__term", part: "description-list-item__term", role: "term" }, this.term, this.tooltip && (h("span", { class: "description-list-item__tooltip" }, h("swirl-tooltip", { content: this.tooltip, position: "right" }, h("swirl-icon-info", { size: 16, tabIndex: 0 }))))), h("div", { style: { maxWidth: this.maxWidth }, class: "description-list-item__description", role: "definition" }, h("slot", null))), h("div", { class: "description-list-item__tools" }, h("slot", { name: "tools" })))));
25
25
  }
26
26
  get el() { return this; }
27
27
  static get style() { return swirlDescriptionListItemCss; }
@@ -3,7 +3,7 @@ import { c as classnames } from './index2.js';
3
3
  import { d as defineCustomElement$3 } from './swirl-spinner2.js';
4
4
  import { d as defineCustomElement$2 } from './swirl-visually-hidden2.js';
5
5
 
6
- const swirlImageGridItemCss = ":host{display:block;width:100%;min-height:0}:host *{box-sizing:border-box}:host(:not(:only-child)) .image-grid-item__background{display:none}:host(:not(:only-child)) .image-grid-item__image{-o-object-fit:cover;object-fit:cover}:host(:nth-child(n+5)){display:none}.image-grid-item{position:relative;display:inline-flex;overflow:hidden;width:100%;height:100%}button.image-grid-item{padding:0;border:none;background-color:transparent;cursor:pointer}button.image-grid-item:focus:not(:focus-visible){outline:none}button.image-grid-item:focus-visible{z-index:1;outline-color:var(--s-focus-default);outline-offset:var(--s-space-2)}.image-grid-item--has-overlay .image-grid-item__image{scale:1.1;filter:blur(5px)}.image-grid-item__background{position:absolute;background-size:cover;inset:-40px;filter:blur(20px)}.image-grid-item__image{z-index:1;display:inline-flex;width:100%;height:100%;-o-object-fit:contain;object-fit:contain;-o-object-position:center;object-position:center}.image-grid-item__icon{position:absolute;z-index:1;top:50%;left:50%;display:flex;width:3rem;height:3rem;justify-content:center;align-items:center;border-radius:50%;color:var(--s-icon-on-image);background-color:rgba(0, 0, 0, 0.6);transform:translate3d(-50%, -50%, 0)}.image-grid-item__icon ::part(icon){width:2rem;height:2rem}.image-grid-item__overlay{position:absolute;z-index:2;display:flex;justify-content:center;align-items:center;color:var(--s-text-on-image);background-color:rgba(0, 0, 0, 0.4);font-size:var(--s-font-size-2xl);inset:0}.image-grid-item__spinner{position:absolute;z-index:3;display:flex;justify-content:center;align-items:center;background-color:rgba(0, 0, 0, 0.4);inset:0}";
6
+ const swirlImageGridItemCss = ":host{display:block;width:100%;min-height:0}:host *{box-sizing:border-box}:host(:not(:only-child)) .image-grid-item__background{display:none}:host(:not(:only-child)) .image-grid-item__image{-o-object-fit:cover;object-fit:cover}:host(:nth-child(n+5)){display:none}.image-grid-item{position:relative;display:inline-flex;overflow:hidden;width:100%;height:100%}button.image-grid-item{padding:0;border:none;background-color:transparent;cursor:pointer}button.image-grid-item:focus:not(:focus-visible){outline:none}button.image-grid-item:focus-visible{z-index:1;outline-color:var(--s-focus-default);outline-offset:var(--s-space-2)}.image-grid-item--has-overlay .image-grid-item__image{scale:1.1;filter:blur(5px)}.image-grid-item__background{position:absolute;background-size:cover;inset:-40px;filter:blur(20px)}.image-grid-item__image{z-index:1;display:inline-flex;width:100%;height:100%;-o-object-fit:contain;object-fit:contain;-o-object-position:center;object-position:center}.image-grid-item__loading-placeholder{display:inline-flex;width:100%;height:100%}.image-grid-item__icon{position:absolute;z-index:1;top:50%;left:50%;display:flex;width:3rem;height:3rem;justify-content:center;align-items:center;border-radius:50%;color:var(--s-icon-on-image);background-color:rgba(0, 0, 0, 0.6);transform:translate3d(-50%, -50%, 0)}.image-grid-item__icon ::part(icon){width:2rem;height:2rem}.image-grid-item__overlay{position:absolute;z-index:2;display:flex;justify-content:center;align-items:center;color:var(--s-text-on-image);background-color:rgba(0, 0, 0, 0.4);font-size:var(--s-font-size-2xl);inset:0}.image-grid-item__spinner{position:absolute;z-index:3;display:flex;justify-content:center;align-items:center;background-color:rgba(0, 0, 0, 0.4);inset:0}";
7
7
 
8
8
  const SwirlImageGridItem$1 = /*@__PURE__*/ proxyCustomElement(class SwirlImageGridItem extends HTMLElement {
9
9
  constructor() {
@@ -53,7 +53,7 @@ const SwirlImageGridItem$1 = /*@__PURE__*/ proxyCustomElement(class SwirlImageGr
53
53
  this.loaded
54
54
  ? `url(${this.src})`
55
55
  : undefined,
56
- } }), (this.loading !== "intersecting" || this.inViewport) && (h("img", { alt: this.alt, class: "image-grid-item__image", loading: this.loading !== "intersecting" ? this.loading : undefined, onLoad: this.onLoad, src: this.src })), this.loaded && this.icon && !Boolean(this.overlay) && (h("div", { class: "image-grid-item__icon", innerHTML: this.icon })), this.overlay && (h("div", { class: "image-grid-item__overlay" }, this.overlay)), !this.loaded && (h("div", { class: "image-grid-item__spinner" }, h("swirl-spinner", null))))));
56
+ } }), this.loading !== "intersecting" || this.inViewport ? (h("img", { alt: this.alt, class: "image-grid-item__image", loading: this.loading !== "intersecting" ? this.loading : undefined, onLoad: this.onLoad, src: this.src })) : (h("div", { class: "image-grid-item__loading-placeholder" })), this.loaded && this.icon && !Boolean(this.overlay) && (h("div", { class: "image-grid-item__icon", innerHTML: this.icon })), this.overlay && (h("div", { class: "image-grid-item__overlay" }, this.overlay)), !this.loaded && (h("div", { class: "image-grid-item__spinner" }, h("swirl-spinner", null))))));
57
57
  }
58
58
  get el() { return this; }
59
59
  static get style() { return swirlImageGridItemCss; }
@@ -4,7 +4,7 @@ import { d as disableBodyScroll, e as enableBodyScroll } from './bodyScrollLock.
4
4
  import { c as classnames } from './index2.js';
5
5
  import { i as isMobileViewport, q as querySelectorAllDeep, b as getActiveElement } from './utils.js';
6
6
 
7
- const swirlPopoverCss = ":host{position:relative;z-index:var(--s-z-40);display:inline-flex}:host *{box-sizing:border-box}.popover--active:not(.popover--closing) .popover__backdrop{animation:0.15s popover-fade-in}@media (prefers-reduced-motion){.popover--active:not(.popover--closing) .popover__backdrop{animation:none}}.popover--active:not(.popover--closing) .popover__content{animation:0.15s popover-slide-in}@media (min-width: 768px){.popover--active:not(.popover--closing) .popover__content{transform-origin:top left;animation:0.15s popover-fade-scale-in-xy}}@media (prefers-reduced-motion){.popover--active:not(.popover--closing) .popover__content{animation:none}}.popover--closing .popover__backdrop{animation:0.15s popover-fade-out;animation-fill-mode:forwards}@media (prefers-reduced-motion){.popover--closing .popover__backdrop{animation:none}}.popover--closing .popover__content{animation:0.15s popover-slide-out;animation-fill-mode:forwards}@media (min-width: 768px){.popover--closing .popover__content{animation:0.15s popover-fade-out}}@media (prefers-reduced-motion){.popover--closing .popover__content{animation:none}}.popover--inactive .popover__content{display:none}@media (max-width: 767px){.popover--fullscreen-bottom-sheet.popover--active:not(.popover--closing) .popover__content{animation:0.15s popover-fade-in}@media (prefers-reduced-motion){.popover--fullscreen-bottom-sheet.popover--active:not(.popover--closing) .popover__content{animation:none}}.popover--fullscreen-bottom-sheet.popover--closing .popover__content{animation:0.15s popover-fade-out;animation-fill-mode:forwards}@media (prefers-reduced-motion){.popover--fullscreen-bottom-sheet.popover--closing .popover__content{animation:none}}.popover--fullscreen-bottom-sheet .popover__backdrop{display:none}.popover--fullscreen-bottom-sheet .popover__content{top:0;border-top-left-radius:0;border-top-right-radius:0}.popover--fullscreen-bottom-sheet .popover__scroll-container{height:100%;max-height:none;padding-top:0;padding-bottom:0}.popover--fullscreen-bottom-sheet .popover__handle{display:none}}@media (min-width: 768px){.popover--animation-scale-in-y.popover--active:not(.popover--closing) .popover__content{animation:0.15s popover-fade-scale-in-y}}@media (prefers-reduced-motion){.popover--animation-scale-in-y.popover--active:not(.popover--closing) .popover__content{animation:none}}@media (min-width: 768px){.popover--transparent .popover__content{background-color:transparent;box-shadow:none}}@media (min-width: 768px){.popover--transparent .popover__scroll-container{padding:0}}.popover__backdrop{position:fixed;z-index:0;background-color:rgba(0, 0, 0, 0.2);animation:0.15s popover-backdrop-fade-in;inset:0}@media (prefers-reduced-motion){.popover__backdrop{animation:none}}@media (min-width: 768px){.popover__backdrop{display:none}}.popover__content{position:fixed;z-index:2;right:0;bottom:0;left:0;overflow:hidden;border-top-left-radius:var(--s-border-radius-xl);border-top-right-radius:var(--s-border-radius-xl);background-color:var(--s-surface-overlay-default)}@media (min-width: 768px){.popover__content{right:unset;bottom:unset;left:unset;max-width:22.5rem;border-radius:var(--s-border-radius-sm);animation:none;box-shadow:var(--s-shadow-level-1)}}.popover__scroll-container{overflow-x:hidden;overflow-y:auto;width:100%;max-height:90vh;padding-top:var(--s-space-24);padding-bottom:var(--s-space-24);overscroll-behavior:contain}@media (min-width: 768px){.popover__scroll-container{max-height:22rem;padding-top:var(--s-space-8);padding-bottom:var(--s-space-8)}}.popover__handle{position:absolute;top:var(--s-space-8);left:50%;width:2.5rem;height:0.375rem;border-radius:0.1875rem;background-color:var(--s-border-default);transform:translatex(-50%)}@media (min-width: 768px){.popover__handle{display:none}}@keyframes popover-slide-in{from{transform:translateY(100%)}to{transform:translateY(0)}}@keyframes popover-slide-out{from{transform:translateY(0)}to{transform:translateY(100%)}}@keyframes popover-fade-in{from{opacity:0}to{opacity:1}}@keyframes popover-fade-out{from{opacity:1}to{opacity:0}}@keyframes popover-fade-scale-in-xy{from{transform:scale(0);opacity:0}to{transform:scale(1);opacity:1}}@keyframes popover-fade-scale-in-y{from{transform:scaleY(0);opacity:0}to{transform:scaleY(1);opacity:1}}";
7
+ const swirlPopoverCss = ":host{position:relative;z-index:var(--s-z-40);display:inline-flex}:host *{box-sizing:border-box}.popover--active:not(.popover--closing) .popover__backdrop{animation:0.15s popover-fade-in}@media (prefers-reduced-motion){.popover--active:not(.popover--closing) .popover__backdrop{animation:none}}.popover--active:not(.popover--closing) .popover__content{animation:0.15s popover-slide-in}@media (min-width: 768px){.popover--active:not(.popover--closing) .popover__content{transform-origin:top left;animation:0.15s popover-fade-scale-in-xy}}@media (prefers-reduced-motion){.popover--active:not(.popover--closing) .popover__content{animation:none}}.popover--closing .popover__backdrop{animation:0.15s popover-fade-out;animation-fill-mode:forwards}@media (prefers-reduced-motion){.popover--closing .popover__backdrop{animation:none}}.popover--closing .popover__content{animation:0.15s popover-slide-out;animation-fill-mode:forwards}@media (min-width: 768px){.popover--closing .popover__content{animation:0.15s popover-fade-out}}@media (prefers-reduced-motion){.popover--closing .popover__content{animation:none}}.popover--inactive .popover__content{display:none}@media (max-width: 767px){.popover--fullscreen-bottom-sheet.popover--active:not(.popover--closing) .popover__content{animation:0.15s popover-fade-in}@media (prefers-reduced-motion){.popover--fullscreen-bottom-sheet.popover--active:not(.popover--closing) .popover__content{animation:none}}.popover--fullscreen-bottom-sheet.popover--closing .popover__content{animation:0.15s popover-fade-out;animation-fill-mode:forwards}@media (prefers-reduced-motion){.popover--fullscreen-bottom-sheet.popover--closing .popover__content{animation:none}}.popover--fullscreen-bottom-sheet .popover__backdrop{display:none}.popover--fullscreen-bottom-sheet .popover__content{top:0;border-top-left-radius:0;border-top-right-radius:0}.popover--fullscreen-bottom-sheet .popover__scroll-container{height:100%;max-height:none;padding-top:0;padding-bottom:0}.popover--fullscreen-bottom-sheet .popover__handle{display:none}}@media (min-width: 768px){.popover--animation-scale-in-y.popover--active:not(.popover--closing) .popover__content{animation:0.15s popover-fade-scale-in-y}}@media (prefers-reduced-motion){.popover--animation-scale-in-y.popover--active:not(.popover--closing) .popover__content{animation:none}}@media (min-width: 768px){.popover--animation-fade-in.popover--active:not(.popover--closing) .popover__content{animation:0.15s popover-fade-in}}@media (prefers-reduced-motion){.popover--animation-fade-in.popover--active:not(.popover--closing) .popover__content{animation:none}}@media (min-width: 768px){.popover--transparent .popover__content{background-color:transparent;box-shadow:none}}@media (min-width: 768px){.popover--transparent .popover__scroll-container{padding:0}}.popover__backdrop{position:fixed;z-index:0;background-color:rgba(0, 0, 0, 0.2);animation:0.15s popover-backdrop-fade-in;inset:0}@media (prefers-reduced-motion){.popover__backdrop{animation:none}}@media (min-width: 768px){.popover__backdrop{display:none}}.popover__content{position:fixed;z-index:2;right:0;bottom:0;left:0;overflow:hidden;border-top-left-radius:var(--s-border-radius-xl);border-top-right-radius:var(--s-border-radius-xl);background-color:var(--s-surface-overlay-default)}@media (min-width: 768px){.popover__content{right:unset;bottom:unset;left:unset;max-width:22.5rem;border-radius:var(--s-border-radius-sm);animation:none;box-shadow:var(--s-shadow-level-2)}}.popover__scroll-container{overflow-x:hidden;overflow-y:auto;width:100%;max-height:90vh;padding-top:var(--s-space-24);padding-bottom:var(--s-space-24);overscroll-behavior:contain}@media (min-width: 768px){.popover__scroll-container{max-height:22rem;padding-top:var(--s-space-8);padding-bottom:var(--s-space-8)}}.popover__handle{position:absolute;top:var(--s-space-8);left:50%;width:2.5rem;height:0.375rem;border-radius:0.1875rem;background-color:var(--s-border-default);transform:translatex(-50%)}@media (min-width: 768px){.popover__handle{display:none}}@keyframes popover-slide-in{from{transform:translateY(100%)}to{transform:translateY(0)}}@keyframes popover-slide-out{from{transform:translateY(0)}to{transform:translateY(100%)}}@keyframes popover-fade-in{from{opacity:0}to{opacity:1}}@keyframes popover-fade-out{from{opacity:1}to{opacity:0}}@keyframes popover-fade-scale-in-xy{from{transform:scale(0);opacity:0}to{transform:scale(1);opacity:1}}@keyframes popover-fade-scale-in-y{from{transform:scaleY(0);opacity:0}to{transform:scaleY(1);opacity:1}}";
8
8
 
9
9
  const SwirlPopover = /*@__PURE__*/ proxyCustomElement(class SwirlPopover extends HTMLElement {
10
10
  constructor() {
@@ -1,7 +1,8 @@
1
1
  import { proxyCustomElement, HTMLElement, h, Host } from '@stencil/core/internal/client';
2
- import { c as computePosition, a as autoUpdate, o as offset, s as shift, f as flip } from './floating-ui.dom.esm.js';
2
+ import { b as arrow, c as computePosition, a as autoUpdate, o as offset, s as shift, f as flip } from './floating-ui.dom.esm.js';
3
+ import { c as classnames } from './index2.js';
3
4
 
4
- const swirlTooltipCss = ":host{display:inline-flex}:host *{box-sizing:border-box}.tooltip{display:inline-flex}.tooltip .tooltip__reference{display:inline-flex}.tooltip__popper{position:absolute;z-index:var(--s-z-40);max-width:17.5rem}.tooltip__bubble{position:relative;display:block;padding-top:var(--s-space-8);padding-right:var(--s-space-12);padding-bottom:var(--s-space-8);padding-left:var(--s-space-12);border-radius:var(--s-border-radius-sm);color:var(--s-text-on-status);background-color:var(--s-surface-neutral-default);line-height:var(--s-line-height-base);animation:tooltip-fade-in 0.2s;animation-delay:0.1s;animation-fill-mode:forwards;opacity:0}@media (min-width: 992px) and (max-width: 1439px) and (hover: hover),(min-width: 1440px){.tooltip__bubble{font-size:var(--s-font-size-sm);line-height:var(--s-line-height-sm)}}.tooltip__arrow{position:absolute;width:0.5rem;height:0.5rem;background-color:var(--s-surface-neutral-default)}@keyframes tooltip-fade-in{from{opacity:0}to{opacity:1}}";
5
+ const swirlTooltipCss = ":host{display:contents}:host *{box-sizing:border-box}.tooltip{display:contents}.tooltip--visible .tooltip__popper{animation:tooltip-fade-in 0.15s;animation-delay:0.1s;animation-fill-mode:forwards;opacity:0}.tooltip--actual-placement-top .tooltip__arrow{top:calc(100% - 0.0625rem);transform:translate3d(0, -50%, 0) rotate(45deg)}.tooltip--actual-placement-bottom .tooltip__arrow{bottom:calc(100% - 0.0625rem);transform:translate3d(0, 50%, 0) rotate(45deg)}.tooltip--actual-placement-left .tooltip__arrow{left:calc(100% - 0.0625rem);transform:translate3d(-50%, 0, 0) rotate(45deg)}.tooltip--actual-placement-right .tooltip__arrow{right:calc(100% - 0.0625rem);transform:translate3d(50%, 0, 0) rotate(45deg)}.tooltip .tooltip__reference{display:contents}.tooltip__popper{position:absolute;z-index:var(--s-z-40);max-width:17.5rem;opacity:0}.tooltip__bubble{position:relative;display:block;padding-top:var(--s-space-8);padding-right:var(--s-space-12);padding-bottom:calc(var(--s-space-8) + 0.0625rem);padding-left:var(--s-space-12);border-radius:var(--s-border-radius-sm);color:var(--s-text-on-status);background-color:var(--s-surface-neutral-default);line-height:var(--s-line-height-base);box-shadow:var(--s-shadow-level-2)}@media (min-width: 992px) and (max-width: 1439px) and (hover: hover),(min-width: 1440px){.tooltip__bubble{font-size:var(--s-font-size-sm);line-height:var(--s-line-height-sm)}}.tooltip__arrow{position:absolute;width:0.6875rem;height:0.6875rem;border-radius:0.125rem;background-color:var(--s-surface-neutral-default)}@keyframes tooltip-fade-in{from{opacity:0}to{opacity:1}}";
5
6
 
6
7
  const SwirlTooltip = /*@__PURE__*/ proxyCustomElement(class SwirlTooltip extends HTMLElement {
7
8
  constructor() {
@@ -14,16 +15,31 @@ const SwirlTooltip = /*@__PURE__*/ proxyCustomElement(class SwirlTooltip extends
14
15
  }
15
16
  };
16
17
  this.reposition = async () => {
17
- if (!Boolean(this.referenceEl) || !Boolean(this.popperEl)) {
18
+ const referenceElement = this.el.children[0];
19
+ if (!Boolean(referenceElement) || !Boolean(this.popperEl)) {
18
20
  return;
19
21
  }
20
- this.actualPosition = await computePosition(this.referenceEl, this.popperEl, this.options);
22
+ const middleware = [
23
+ ...this.options.middleware.filter((middleware) => middleware.name !== "arrow"),
24
+ arrow({ element: this.arrowElement, padding: 12 }),
25
+ ];
26
+ this.actualPosition = await computePosition(referenceElement, this.popperEl, { ...this.options, middleware });
27
+ const arrowX = this.actualPosition.middlewareData.arrow?.x;
28
+ const arrowY = this.actualPosition.middlewareData.arrow?.y;
29
+ this.arrowStyles = {
30
+ left: Boolean(arrowX) ? arrowX + "px" : undefined,
31
+ top: Boolean(arrowY) ? arrowY + "px" : undefined,
32
+ };
21
33
  };
22
34
  this.show = () => {
23
35
  this.visible = true;
24
36
  requestAnimationFrame(() => {
37
+ const referenceElement = this.el.children[0];
38
+ if (!Boolean(referenceElement)) {
39
+ return;
40
+ }
25
41
  this.reposition();
26
- this.disableAutoUpdate = autoUpdate(this.referenceEl, this.popperEl, this.reposition.bind(this));
42
+ this.disableAutoUpdate = autoUpdate(referenceElement, this.popperEl, this.reposition.bind(this));
27
43
  });
28
44
  };
29
45
  this.showWithDelay = () => {
@@ -53,40 +69,11 @@ const SwirlTooltip = /*@__PURE__*/ proxyCustomElement(class SwirlTooltip extends
53
69
  strategy: "absolute",
54
70
  };
55
71
  };
56
- this.getArrowStyles = () => {
57
- if (this.actualPosition?.placement === "top") {
58
- return {
59
- top: "100%",
60
- left: "50%",
61
- transform: "translate3d(-50%, -50%, 0) rotate(45deg)",
62
- };
63
- }
64
- if (this.actualPosition?.placement === "bottom") {
65
- return {
66
- bottom: "100%",
67
- left: "50%",
68
- transform: "translate3d(-50%, 50%, 0) rotate(45deg)",
69
- };
70
- }
71
- if (this.actualPosition?.placement === "right") {
72
- return {
73
- top: "50%",
74
- right: "100%",
75
- transform: "translate3d(50%, -50%, 0) rotate(45deg)",
76
- };
77
- }
78
- if (this.actualPosition?.placement === "left") {
79
- return {
80
- top: "50%",
81
- left: "100%",
82
- transform: "translate3d(-50%, -50%, 0) rotate(45deg)",
83
- };
84
- }
85
- };
86
72
  this.content = undefined;
87
73
  this.delay = 300;
88
74
  this.position = "top";
89
75
  this.actualPosition = undefined;
76
+ this.arrowStyles = undefined;
90
77
  this.visible = false;
91
78
  }
92
79
  watchPosition() {
@@ -111,16 +98,22 @@ const SwirlTooltip = /*@__PURE__*/ proxyCustomElement(class SwirlTooltip extends
111
98
  this.updateOptions();
112
99
  }
113
100
  render() {
114
- const arrowStyles = this.getArrowStyles();
115
- return (h(Host, { onKeydown: this.onKeydown }, h("span", { class: "tooltip" }, h("span", { class: "tooltip__reference", "aria-describedby": "tooltip", onBlur: this.hide, onClick: this.hide, onFocus: this.show, ref: (el) => (this.referenceEl = el), tabIndex: 0 }, h("slot", null)), h("span", { class: "tooltip__popper", ref: (el) => (this.popperEl = el), style: {
101
+ const className = classnames("tooltip", `tooltip--actual-placement-${this.actualPosition?.placement}`, {
102
+ "tooltip--visible": this.visible,
103
+ });
104
+ return (h(Host, { onKeydown: this.onKeydown }, h("span", { class: className }, h("span", { class: "tooltip__reference", "aria-describedby": "tooltip", onFocusout: this.hide, onClick: this.hide, onFocusin: this.show }, h("slot", null)), h("span", { class: "tooltip__popper", ref: (el) => (this.popperEl = el), style: {
116
105
  top: Boolean(this.actualPosition)
117
106
  ? `${this.actualPosition?.y}px`
118
107
  : "",
119
108
  left: Boolean(this.actualPosition)
120
109
  ? `${this.actualPosition?.x}px`
121
110
  : "",
122
- } }, this.visible && (h("span", { class: "tooltip__bubble", id: "tooltip", part: "tooltip__bubble", role: "tooltip" }, h("span", { class: "tooltip__content", innerHTML: this.content }), h("span", { class: "tooltip__arrow", style: arrowStyles })))))));
111
+ } }, this.visible && (h("span", { class: "tooltip__bubble", id: "tooltip", part: "tooltip__bubble", role: "tooltip" }, h("span", { class: "tooltip__content", innerHTML: this.content }))), h("span", { class: "tooltip__arrow", ref: (el) => (this.arrowElement = el), style: {
112
+ ...this.arrowStyles,
113
+ visibility: this.visible ? "visible" : "hidden",
114
+ } })))));
123
115
  }
116
+ get el() { return this; }
124
117
  static get watchers() { return {
125
118
  "position": ["watchPosition"]
126
119
  }; }
@@ -130,6 +123,7 @@ const SwirlTooltip = /*@__PURE__*/ proxyCustomElement(class SwirlTooltip extends
130
123
  "delay": [2],
131
124
  "position": [1],
132
125
  "actualPosition": [32],
126
+ "arrowStyles": [32],
133
127
  "visible": [32]
134
128
  }, [[1, "mouseenter", "onMouseEnter"], [1, "mouseleave", "onMouseLeave"], [9, "resize", "onWindowResize"], [9, "scroll", "onWindowScroll"]]]);
135
129
  function defineCustomElement() {
@@ -260,6 +260,77 @@ function within(min$1$1, value, max$1$1) {
260
260
  return max$1(min$1$1, min$1(value, max$1$1));
261
261
  }
262
262
 
263
+ /**
264
+ * Provides data to position an inner element of the floating element so that it
265
+ * appears centered to the reference element.
266
+ * @see https://floating-ui.com/docs/arrow
267
+ */
268
+ const arrow = options => ({
269
+ name: 'arrow',
270
+ options,
271
+ async fn(state) {
272
+ // Since `element` is required, we don't Partial<> the type.
273
+ const {
274
+ element,
275
+ padding = 0
276
+ } = options || {};
277
+ const {
278
+ x,
279
+ y,
280
+ placement,
281
+ rects,
282
+ platform,
283
+ elements
284
+ } = state;
285
+ if (element == null) {
286
+ return {};
287
+ }
288
+ const paddingObject = getSideObjectFromPadding(padding);
289
+ const coords = {
290
+ x,
291
+ y
292
+ };
293
+ const axis = getMainAxisFromPlacement(placement);
294
+ const length = getLengthFromAxis(axis);
295
+ const arrowDimensions = await platform.getDimensions(element);
296
+ const isYAxis = axis === 'y';
297
+ const minProp = isYAxis ? 'top' : 'left';
298
+ const maxProp = isYAxis ? 'bottom' : 'right';
299
+ const clientProp = isYAxis ? 'clientHeight' : 'clientWidth';
300
+ const endDiff = rects.reference[length] + rects.reference[axis] - coords[axis] - rects.floating[length];
301
+ const startDiff = coords[axis] - rects.reference[axis];
302
+ const arrowOffsetParent = await (platform.getOffsetParent == null ? void 0 : platform.getOffsetParent(element));
303
+ let clientSize = arrowOffsetParent ? arrowOffsetParent[clientProp] : 0;
304
+
305
+ // DOM platform can return `window` as the `offsetParent`.
306
+ if (!clientSize || !(await (platform.isElement == null ? void 0 : platform.isElement(arrowOffsetParent)))) {
307
+ clientSize = elements.floating[clientProp] || rects.floating[length];
308
+ }
309
+ const centerToReference = endDiff / 2 - startDiff / 2;
310
+
311
+ // Make sure the arrow doesn't overflow the floating element if the center
312
+ // point is outside the floating element's bounds.
313
+ const min = paddingObject[minProp];
314
+ const max = clientSize - arrowDimensions[length] - paddingObject[maxProp];
315
+ const center = clientSize / 2 - arrowDimensions[length] / 2 + centerToReference;
316
+ const offset = within(min, center, max);
317
+
318
+ // If the reference is small enough that the arrow's padding causes it to
319
+ // to point to nothing for an aligned placement, adjust the offset of the
320
+ // floating element itself. This stops `shift()` from taking action, but can
321
+ // be worked around by calling it again after the `arrow()` if desired.
322
+ const shouldAddOffset = getAlignment(placement) != null && center != offset && rects.reference[length] / 2 - (center < min ? paddingObject[minProp] : paddingObject[maxProp]) - arrowDimensions[length] / 2 < 0;
323
+ const alignmentOffset = shouldAddOffset ? center < min ? min - center : max - center : 0;
324
+ return {
325
+ [axis]: coords[axis] - alignmentOffset,
326
+ data: {
327
+ [axis]: offset,
328
+ centerOffset: center - offset
329
+ }
330
+ };
331
+ }
332
+ });
333
+
263
334
  const oppositeSideMap = {
264
335
  left: 'right',
265
336
  right: 'left',
@@ -1232,4 +1303,4 @@ const computePosition = (reference, floating, options) => computePosition$1(refe
1232
1303
  ...options
1233
1304
  });
1234
1305
 
1235
- export { autoUpdate as a, computePosition as c, flip as f, offset as o, shift as s };
1306
+ export { autoUpdate as a, arrow as b, computePosition as c, flip as f, offset as o, shift as s };