@swisspost/design-system-components 2.0.1 → 2.0.3

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 (128) hide show
  1. package/dist/cjs/attribute-observer-10f08c04.js +27 -0
  2. package/dist/cjs/index.cjs.js +13 -12
  3. package/dist/cjs/{package-0645dd08.js → package-628f6e9c.js} +1 -1
  4. package/dist/cjs/{post-accordion-64aa88cf.js → post-accordion-da546aa2.js} +1 -1
  5. package/dist/cjs/{post-accordion-item-51df1dfa.js → post-accordion-item-33d5593a.js} +3 -3
  6. package/dist/cjs/post-accordion-item.cjs.entry.js +2 -2
  7. package/dist/cjs/post-accordion.cjs.entry.js +2 -2
  8. package/dist/cjs/post-alert-26c1bcda.js +98 -0
  9. package/dist/cjs/post-alert.cjs.entry.js +2 -2
  10. package/dist/cjs/{post-collapsible-84416953.js → post-collapsible-278b2a71.js} +1 -1
  11. package/dist/cjs/post-collapsible.cjs.entry.js +2 -2
  12. package/dist/cjs/{post-icon-5fc20211.js → post-icon-fd09bc54.js} +2 -2
  13. package/dist/cjs/post-icon.cjs.entry.js +2 -2
  14. package/dist/cjs/post-popover-1e454296.js +104 -0
  15. package/dist/cjs/post-popover.cjs.entry.js +3 -2
  16. package/dist/cjs/{post-popovercontainer-cc5fa030.js → post-popovercontainer-5e355de3.js} +26 -11
  17. package/dist/cjs/post-popovercontainer.cjs.entry.js +2 -2
  18. package/dist/cjs/post-tab-header-5c8b9a0d.js +32 -0
  19. package/dist/cjs/post-tab-header.cjs.entry.js +2 -2
  20. package/dist/cjs/{post-tab-panel-1143ea40.js → post-tab-panel-67ba226d.js} +1 -1
  21. package/dist/cjs/post-tab-panel.cjs.entry.js +2 -2
  22. package/dist/cjs/{post-tabs-7ef36ff6.js → post-tabs-71510ced.js} +1 -1
  23. package/dist/cjs/post-tabs.cjs.entry.js +2 -2
  24. package/dist/cjs/{post-tooltip-45784e17.js → post-tooltip-b6bbb3e4.js} +124 -42
  25. package/dist/cjs/post-tooltip.cjs.entry.js +3 -2
  26. package/dist/collection/components/post-accordion-item/post-accordion-item.css +1 -1
  27. package/dist/collection/components/post-accordion-item/post-accordion-item.js +1 -1
  28. package/dist/collection/components/post-alert/post-alert.css +5 -5
  29. package/dist/collection/components/post-icon/post-icon.css +1 -1
  30. package/dist/collection/components/post-popover/post-popover.css +1 -1
  31. package/dist/collection/components/post-popover/post-popover.js +47 -63
  32. package/dist/collection/components/post-popovercontainer/post-popovercontainer.css +1 -1
  33. package/dist/collection/components/post-popovercontainer/post-popovercontainer.js +25 -10
  34. package/dist/collection/components/post-tab-header/post-tab-header.css +1 -1
  35. package/dist/collection/components/post-tooltip/post-tooltip.css +1 -1
  36. package/dist/collection/components/post-tooltip/post-tooltip.js +120 -42
  37. package/dist/collection/utils/attribute-observer.js +23 -0
  38. package/dist/components/attribute-observer.js +25 -0
  39. package/dist/components/package.js +1 -1
  40. package/dist/components/post-accordion-item2.js +2 -2
  41. package/dist/components/post-alert2.js +1 -1
  42. package/dist/components/post-icon2.js +1 -1
  43. package/dist/components/post-popover2.js +51 -64
  44. package/dist/components/post-popovercontainer2.js +25 -10
  45. package/dist/components/post-tab-header2.js +1 -1
  46. package/dist/components/post-tooltip2.js +123 -41
  47. package/dist/docs.json +5 -25
  48. package/dist/esm/attribute-observer-37fa950a.js +25 -0
  49. package/dist/esm/index.js +13 -12
  50. package/dist/esm/{package-37a68f71.js → package-15929f57.js} +1 -1
  51. package/dist/esm/{post-accordion-8872dc1b.js → post-accordion-be080240.js} +1 -1
  52. package/dist/esm/{post-accordion-item-02b9f01c.js → post-accordion-item-7b3c726b.js} +3 -3
  53. package/dist/esm/post-accordion-item.entry.js +2 -2
  54. package/dist/esm/post-accordion.entry.js +2 -2
  55. package/dist/esm/post-alert-37f853eb.js +96 -0
  56. package/dist/esm/post-alert.entry.js +2 -2
  57. package/dist/esm/{post-collapsible-1f23fe7d.js → post-collapsible-967bb191.js} +1 -1
  58. package/dist/esm/post-collapsible.entry.js +2 -2
  59. package/dist/esm/{post-icon-2ec2127e.js → post-icon-ba163099.js} +2 -2
  60. package/dist/esm/post-icon.entry.js +2 -2
  61. package/dist/esm/post-popover-69694fa6.js +102 -0
  62. package/dist/esm/post-popover.entry.js +3 -2
  63. package/dist/esm/{post-popovercontainer-4a48161f.js → post-popovercontainer-da870ff0.js} +26 -11
  64. package/dist/esm/post-popovercontainer.entry.js +2 -2
  65. package/dist/esm/post-tab-header-14ed99cd.js +30 -0
  66. package/dist/esm/post-tab-header.entry.js +2 -2
  67. package/dist/esm/{post-tab-panel-da24046f.js → post-tab-panel-d89c4c50.js} +1 -1
  68. package/dist/esm/post-tab-panel.entry.js +2 -2
  69. package/dist/esm/{post-tabs-21a5dfeb.js → post-tabs-e995886a.js} +1 -1
  70. package/dist/esm/post-tabs.entry.js +2 -2
  71. package/dist/esm/{post-tooltip-4f4f87b4.js → post-tooltip-0ec6a388.js} +124 -42
  72. package/dist/esm/post-tooltip.entry.js +3 -2
  73. package/dist/post-components/index.esm.js +1 -1
  74. package/dist/post-components/p-00ab91d9.entry.js +1 -0
  75. package/dist/post-components/p-04f47e54.entry.js +1 -0
  76. package/dist/post-components/{p-e836df41.js → p-1f284e66.js} +1 -1
  77. package/dist/post-components/p-209e33a5.js +1 -0
  78. package/dist/post-components/p-282e21c2.entry.js +1 -0
  79. package/dist/post-components/p-34a772e3.entry.js +1 -0
  80. package/dist/post-components/p-46c47aa4.entry.js +1 -0
  81. package/dist/post-components/{p-73a7d4f9.js → p-51fe19e0.js} +1 -1
  82. package/dist/post-components/p-557f0f10.entry.js +1 -0
  83. package/dist/post-components/p-5ecceba0.js +1 -0
  84. package/dist/post-components/p-61d98756.js +1 -0
  85. package/dist/post-components/p-6adeaa6c.js +1 -0
  86. package/dist/post-components/{p-aee1750c.js → p-6b3ba10a.js} +1 -1
  87. package/dist/post-components/p-82f4f464.entry.js +1 -0
  88. package/dist/post-components/p-94256868.js +15 -0
  89. package/dist/post-components/p-98cb0bbd.entry.js +1 -0
  90. package/dist/post-components/p-9ee95668.entry.js +1 -0
  91. package/dist/post-components/p-a0d342e4.entry.js +1 -0
  92. package/dist/post-components/{p-c1c8f2ec.js → p-a9d59b04.js} +1 -1
  93. package/dist/post-components/p-ac7b779e.js +1 -0
  94. package/dist/post-components/p-d9c9ed63.js +1 -0
  95. package/dist/post-components/p-e1bf894f.entry.js +1 -0
  96. package/dist/post-components/p-e8d17225.js +1 -0
  97. package/dist/post-components/p-f47b0207.js +1 -0
  98. package/dist/post-components/post-components.esm.js +1 -1
  99. package/dist/types/components/post-popover/post-popover.d.ts +3 -17
  100. package/dist/types/components/post-popovercontainer/post-popovercontainer.d.ts +1 -0
  101. package/dist/types/components/post-tooltip/post-tooltip.d.ts +14 -9
  102. package/dist/types/utils/attribute-observer.d.ts +1 -0
  103. package/package.json +4 -3
  104. package/dist/cjs/post-alert-ac59385a.js +0 -98
  105. package/dist/cjs/post-popover-be868244.js +0 -117
  106. package/dist/cjs/post-tab-header-5a7070e9.js +0 -32
  107. package/dist/esm/post-alert-1a766c15.js +0 -96
  108. package/dist/esm/post-popover-f6029c96.js +0 -115
  109. package/dist/esm/post-tab-header-63676360.js +0 -30
  110. package/dist/post-components/p-0b46c9ba.entry.js +0 -1
  111. package/dist/post-components/p-21557c34.js +0 -15
  112. package/dist/post-components/p-2b67b933.js +0 -1
  113. package/dist/post-components/p-47fd6eb0.js +0 -1
  114. package/dist/post-components/p-548ee455.entry.js +0 -1
  115. package/dist/post-components/p-63b6c589.entry.js +0 -1
  116. package/dist/post-components/p-66f346fb.entry.js +0 -1
  117. package/dist/post-components/p-7973e3e4.js +0 -1
  118. package/dist/post-components/p-829f9eaf.entry.js +0 -1
  119. package/dist/post-components/p-82facb04.js +0 -1
  120. package/dist/post-components/p-8aa01298.js +0 -1
  121. package/dist/post-components/p-9170d84d.entry.js +0 -1
  122. package/dist/post-components/p-959f83c0.entry.js +0 -1
  123. package/dist/post-components/p-9bc7ed9e.entry.js +0 -1
  124. package/dist/post-components/p-a3fc7eaf.js +0 -1
  125. package/dist/post-components/p-a762b512.entry.js +0 -1
  126. package/dist/post-components/p-ccd827a1.js +0 -1
  127. package/dist/post-components/p-d25e401c.entry.js +0 -1
  128. package/dist/post-components/p-f655856d.entry.js +0 -1
@@ -1,9 +1,9 @@
1
1
  import { r as registerInstance, h, H as Host, g as getElement } from './index-1708db56.js';
2
2
  import { c as checkEmptyOrOneOf, d as checkEmptyOrType, a as checkType } from './index-b444db27.js';
3
- import { v as version } from './package-37a68f71.js';
3
+ import { v as version } from './package-15929f57.js';
4
4
  import { c as checkNonEmpty } from './check-non-empty-58bd6b17.js';
5
5
 
6
- const postIconCss = ":host{display:inline-block;width:1em;height:1em;vertical-align:-0.15em}span{display:block;width:100%;height:100%;fill:currentColor;background-color:currentColor;-webkit-mask-position:center center;mask-position:center center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:100%;mask-size:100%}:host([flip-h]:not([flip-h=false])){scale:-1 1}:host([flip-v]:not([flip-v=false])){scale:1 -1}:host([flip-h][flip-v]:not([flip-h=false],[flip-v=false])){scale:-1}:host([animation]){transform-origin:center}:host([animation=cylon]){animation:icon-animation-cylon .75s ease-in-out infinite alternate}:host([animation=cylon-vertical]){animation:icon-animation-cylon-vertical .75s ease-in-out infinite alternate}:host([animation=spin]){animation:icon-animation-spin 2s linear infinite normal}:host([animation=spin-reverse]){animation:icon-animation-spin 2s linear infinite reverse}:host([animation=fade]){animation:icon-animation-fade .75s ease-in-out infinite alternate}:host([animation=throb]){animation:icon-animation-throb .75s ease-in-out infinite alternate}@keyframes icon-animation-cylon{from{transform:translateX(-25%)}to{transform:translateX(25%)}}@keyframes icon-animation-cylon-vertical{from{transform:translateY(25%)}to{transform:translateY(-25%)}}@keyframes icon-animation-fade{from{opacity:.1}to{opacity:1}}@keyframes icon-animation-spin{from{transform:rotate(0deg)}to{transform:rotate(359deg)}}@keyframes icon-animation-throb{from{opacity:.5;transform:scale(0.5)}to{opacity:1;transform:scale(1)}}";
6
+ const postIconCss = ":host{display:inline-block;width:1em;height:1em;vertical-align:-0.15em}span{display:block;width:100%;height:100%;fill:currentColor;forced-color-adjust:preserve-parent-color;background-color:currentColor;-webkit-mask-position:center center;mask-position:center center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:100%;mask-size:100%}:host([flip-h]:not([flip-h=false])){scale:-1 1}:host([flip-v]:not([flip-v=false])){scale:1 -1}:host([flip-h][flip-v]:not([flip-h=false],[flip-v=false])){scale:-1}:host([animation]){transform-origin:center}:host([animation=cylon]){animation:icon-animation-cylon .75s ease-in-out infinite alternate}:host([animation=cylon-vertical]){animation:icon-animation-cylon-vertical .75s ease-in-out infinite alternate}:host([animation=spin]){animation:icon-animation-spin 2s linear infinite normal}:host([animation=spin-reverse]){animation:icon-animation-spin 2s linear infinite reverse}:host([animation=fade]){animation:icon-animation-fade .75s ease-in-out infinite alternate}:host([animation=throb]){animation:icon-animation-throb .75s ease-in-out infinite alternate}@keyframes icon-animation-cylon{from{transform:translateX(-25%)}to{transform:translateX(25%)}}@keyframes icon-animation-cylon-vertical{from{transform:translateY(25%)}to{transform:translateY(-25%)}}@keyframes icon-animation-fade{from{opacity:.1}to{opacity:1}}@keyframes icon-animation-spin{from{transform:rotate(0deg)}to{transform:rotate(359deg)}}@keyframes icon-animation-throb{from{opacity:.5;transform:scale(0.5)}to{opacity:1;transform:scale(1)}}";
7
7
  const PostIconStyle0 = postIconCss;
8
8
 
9
9
  const CDN_URL = 'https://unpkg.com/@swisspost/design-system-icons/public/post-icons';
@@ -1,6 +1,6 @@
1
- export { P as post_icon } from './post-icon-2ec2127e.js';
1
+ export { P as post_icon } from './post-icon-ba163099.js';
2
2
  import './index-1708db56.js';
3
3
  import './index-b444db27.js';
4
4
  import './constants-8d548297.js';
5
- import './package-37a68f71.js';
5
+ import './package-15929f57.js';
6
6
  import './check-non-empty-58bd6b17.js';
@@ -0,0 +1,102 @@
1
+ import { r as registerInstance, h, H as Host, g as getElement } from './index-1708db56.js';
2
+ import { v as version } from './package-15929f57.js';
3
+ import { g as getAttributeObserver } from './attribute-observer-37fa950a.js';
4
+
5
+ const postPopoverCss = "/*!\n * Copyright 2021 by Swiss Post, Information Technology\n */.btn-close{padding:0;overflow:visible;border:0;background:none;color:inherit;font:inherit;-webkit-user-select:none;user-select:none;-webkit-appearance:button;appearance:button;outline:none;outline-offset:2px;border-radius:4px;color:var(--post-gray-80);transition:opacity 250ms,border-color 250ms,background-color 250ms,color 250ms;cursor:pointer}.btn-close:is(:focus-visible,:focus-within,.pretend-focus){outline:2px solid var(--post-contrast-color)}.btn-close::before{-webkit-mask-image:url(\"data:image/svg+xml,%3Csvg viewBox='0 0 32 32' xmlns='http://www.w3.org/2000/svg'%3E%3Cg id='icon'%3E%3Cpath d='m16.267 16.667 6.667-6.533-.933-1.067-6.667 6.667-6.667-6.667-.933 1.067 6.667 6.533-6.667 6.667 1.067.933 6.533-6.667 6.667 6.667.933-1.067z'/%3E%3C/g%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml,%3Csvg viewBox='0 0 32 32' xmlns='http://www.w3.org/2000/svg'%3E%3Cg id='icon'%3E%3Cpath d='m16.267 16.667 6.667-6.533-.933-1.067-6.667 6.667-6.667-6.667-.933 1.067 6.667 6.533-6.667 6.667 1.067.933 6.533-6.667 6.667 6.667.933-1.067z'/%3E%3C/g%3E%3C/svg%3E\");background-color:currentColor;color:currentColor;forced-color-adjust:preserve-parent-color;content:\"\";display:block;height:1.5rem;width:1.5rem}.btn-close:focus,.btn-close:not(:disabled):hover,.pretend-hover.btn-close{color:var(--post-contrast-color)}.btn-close:disabled{color:var(--post-gray-40)}@media (forced-colors: active),(-ms-high-contrast: active),(-ms-high-contrast: white-on-black){.btn-close{color:CanvasText;forced-color-adjust:none}.btn-close:focus,.btn-close:not(:disabled):hover,.pretend-hover.btn-close{color:Highlight}}.btn-close-white{color:#e6e6e6}.btn-close-white:focus,.btn-close-white:not(:disabled):hover,.btn-close-white.pretend-hover{color:#fff}.btn-close-white:disabled{color:#999}*{box-sizing:border-box}:host{--post-contrast-color:#fff;--post-bg-rgb:51, 51, 51;display:block}.visually-hidden{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0 0 0 0);border:0}.popover-container{display:flex;align-items:self-start;padding:.5em;max-width:min(66vw,60rem)}@media (max-width: 599.98px){.popover-container{max-width:100%}}.popover-content{padding:.5em}";
6
+ const PostPopoverStyle0 = postPopoverCss;
7
+
8
+ /**
9
+ * @slot default - Slot for placing content inside the popover.
10
+ */
11
+ let popoverInstances = 0;
12
+ const popoverTargetAttribute = 'data-popover-target';
13
+ const globalToggleHandler = (e) => {
14
+ const target = e.target;
15
+ if (!target || !('getAttribute' in target))
16
+ return;
17
+ const popoverTarget = target.getAttribute(popoverTargetAttribute);
18
+ if (!popoverTarget || ('key' in e && e.key !== 'Enter'))
19
+ return;
20
+ const popover = document.getElementById(popoverTarget);
21
+ popover === null || popover === void 0 ? void 0 : popover.toggle(target);
22
+ };
23
+ // Initialize a mutation observer for patching accessibility features
24
+ const triggerObserver = getAttributeObserver(popoverTargetAttribute, trigger => {
25
+ const force = trigger.hasAttribute(popoverTargetAttribute);
26
+ trigger.setAttribute('aria-expanded', force ? 'false' : null);
27
+ });
28
+ const PostPopover = class {
29
+ constructor(hostRef) {
30
+ registerInstance(this, hostRef);
31
+ this.placement = 'top';
32
+ this.closeButtonCaption = undefined;
33
+ this.arrow = true;
34
+ this.localBeforeToggleHandler = this.beforeToggleHandler.bind(this);
35
+ }
36
+ connectedCallback() {
37
+ // Set up accessibility patcher and event listeners for the first component
38
+ if (popoverInstances === 0) {
39
+ window.addEventListener('pointerup', globalToggleHandler);
40
+ window.addEventListener('keydown', globalToggleHandler);
41
+ triggerObserver.observe(document.body, {
42
+ subtree: true,
43
+ childList: true,
44
+ attributeFilter: [popoverTargetAttribute],
45
+ });
46
+ }
47
+ popoverInstances++;
48
+ this.triggers.forEach(trigger => trigger.setAttribute('aria-expanded', 'false'));
49
+ }
50
+ componentDidLoad() {
51
+ this.popoverRef.addEventListener('beforetoggle', this.localBeforeToggleHandler);
52
+ }
53
+ disconnectedCallback() {
54
+ popoverInstances--;
55
+ // Remove listeners and observer after the last popover has been destructed
56
+ if (popoverInstances === 0) {
57
+ window.removeEventListener('click', globalToggleHandler);
58
+ window.removeEventListener('keydown', globalToggleHandler);
59
+ triggerObserver.disconnect();
60
+ }
61
+ this.popoverRef.removeEventListener('beforetoggle', this.localBeforeToggleHandler);
62
+ this.triggers.forEach(trigger => trigger.removeAttribute('aria-expanded'));
63
+ }
64
+ /**
65
+ * Programmatically display the popover
66
+ * @param target An element with [data-popover-target="id"] where the popover should be shown
67
+ */
68
+ async show(target) {
69
+ this.popoverRef.show(target);
70
+ target.setAttribute('aria-expanded', 'true');
71
+ }
72
+ /**
73
+ * Programmatically hide this popover
74
+ */
75
+ async hide() {
76
+ this.popoverRef.hide();
77
+ this.triggers.forEach(trigger => trigger.setAttribute('aria-expanded', 'false'));
78
+ }
79
+ /**
80
+ * Toggle popover display
81
+ * @param target An element with [data-popover-target="id"] where the popover should be anchored to
82
+ * @param force Pass true to always show or false to always hide
83
+ */
84
+ async toggle(target, force) {
85
+ const newState = await this.popoverRef.toggle(target, force);
86
+ this.triggers.forEach(trigger => trigger.setAttribute('aria-expanded', 'false'));
87
+ target.setAttribute('aria-expanded', `${newState}`);
88
+ }
89
+ get triggers() {
90
+ return document.querySelectorAll(`[${popoverTargetAttribute}="${this.host.id}"]`);
91
+ }
92
+ beforeToggleHandler() {
93
+ this.triggers.forEach(trigger => trigger.setAttribute('aria-expanded', 'false'));
94
+ }
95
+ render() {
96
+ return (h(Host, { key: '90cd97eedfdecb6666c5825cd09bb323cf857cbb', "data-version": version }, h("post-popovercontainer", { key: 'fe555322454124f4b9a618c634f2ae504ec89c07', arrow: this.arrow, placement: this.placement, ref: e => (this.popoverRef = e) }, h("div", { key: 'd6e30229dd8d38c95e165d1fc55b1c7af5c7b5e2', class: "popover-container" }, h("div", { key: 'c43c1347bb6bfe3532387693b1761b53533584ec', class: "popover-content" }, h("slot", { key: '24a4aa1df86497a4fe4b72adaac76f6e69db9d9e' })), h("button", { key: '3a5e52f480ddd1ef41d068e476d2a8c5f7d77c4a', class: "btn-close", onClick: () => this.hide() }, h("span", { key: '493310100d3f76dfe5bf6cf1d64250b7551be43c', class: "visually-hidden" }, this.closeButtonCaption))))));
97
+ }
98
+ get host() { return getElement(this); }
99
+ };
100
+ PostPopover.style = PostPopoverStyle0;
101
+
102
+ export { PostPopover as P };
@@ -1,3 +1,4 @@
1
- export { P as post_popover } from './post-popover-f6029c96.js';
1
+ export { P as post_popover } from './post-popover-69694fa6.js';
2
2
  import './index-1708db56.js';
3
- import './package-37a68f71.js';
3
+ import './package-15929f57.js';
4
+ import './attribute-observer-37fa950a.js';
@@ -1,5 +1,5 @@
1
1
  import { r as registerInstance, c as createEvent, h, H as Host, g as getElement } from './index-1708db56.js';
2
- import { v as version } from './package-37a68f71.js';
2
+ import { v as version } from './package-15929f57.js';
3
3
 
4
4
  /**
5
5
  * Custom positioning reference element.
@@ -1832,7 +1832,7 @@ const computePosition = (reference, floating, options) => {
1832
1832
  }
1833
1833
  `,E=null;function I(e){if(E===null)try{E=new CSSStyleSheet,E.replaceSync(C);}catch{E=!1;}if(E===!1){let t=document.createElement("style");t.textContent=C,e instanceof Document?e.head.prepend(t):e.prepend(t);}else e.adoptedStyleSheets=[E,...e.adoptedStyleSheets];}function K(){window.ToggleEvent=window.ToggleEvent||c;function e(n){return n?.includes(":popover-open")&&(n=n.replace(J,"$1.\\:popover-open")),n}f(Document.prototype,"querySelector",e),f(Document.prototype,"querySelectorAll",e),f(Element.prototype,"querySelector",e),f(Element.prototype,"querySelectorAll",e),f(Element.prototype,"matches",e),f(Element.prototype,"closest",e),f(DocumentFragment.prototype,"querySelectorAll",e),f(DocumentFragment.prototype,"querySelectorAll",e),Object.defineProperties(HTMLElement.prototype,{popover:{enumerable:!0,configurable:!0,get(){if(!this.hasAttribute("popover"))return null;let n=(this.getAttribute("popover")||"").toLowerCase();return n===""||n=="auto"?"auto":"manual"},set(n){this.setAttribute("popover",n);}},showPopover:{enumerable:!0,configurable:!0,value(){S(this);}},hidePopover:{enumerable:!0,configurable:!0,value(){m(this,!0,!0);}},togglePopover:{enumerable:!0,configurable:!0,value(n){h.get(this)==="showing"&&n===void 0||n===!1?m(this,!0,!0):(n===void 0||n===!0)&&S(this);}}});let t=Element.prototype.attachShadow;t&&Object.defineProperties(Element.prototype,{attachShadow:{enumerable:!0,configurable:!0,writable:!0,value(n){let s=t.call(this,n);return I(s),s}}});let o=HTMLElement.prototype.attachInternals;o&&Object.defineProperties(HTMLElement.prototype,{attachInternals:{enumerable:!0,configurable:!0,writable:!0,value(){let n=o.call(this);return n.shadowRoot&&I(n.shadowRoot),n}}});let r=new WeakMap;function i(n){Object.defineProperties(n.prototype,{popoverTargetElement:{enumerable:!0,configurable:!0,set(s){if(s===null)this.removeAttribute("popovertarget"),r.delete(this);else if(s instanceof Element)this.setAttribute("popovertarget",""),r.set(this,s);else throw new TypeError("popoverTargetElement must be an element or null")},get(){if(this.localName!=="button"&&this.localName!=="input"||this.localName==="input"&&this.type!=="reset"&&this.type!=="image"&&this.type!=="button"||this.disabled||this.form&&this.type==="submit")return null;let s=r.get(this);if(s&&s.isConnected)return s;if(s&&!s.isConnected)return r.delete(this),null;let u=v(this),w=this.getAttribute("popovertarget");return (u instanceof Document||u instanceof B)&&w&&u.getElementById(w)||null}},popoverTargetAction:{enumerable:!0,configurable:!0,get(){let s=(this.getAttribute("popovertargetaction")||"").toLowerCase();return s==="show"||s==="hide"?s:"toggle"},set(s){this.setAttribute("popovertargetaction",s);}}});}i(HTMLButtonElement),i(HTMLInputElement);let l=n=>{if(!n.isTrusted)return;let s=n.composedPath()[0];if(!(s instanceof Element)||s?.shadowRoot)return;let u=v(s);if(!(u instanceof B||u instanceof Document))return;let w=s.closest("[popovertargetaction],[popovertarget]");if(w){O(w),n.preventDefault();return}},a=n=>{let s=n.key,u=n.target;!n.defaultPrevented&&u&&(s==="Escape"||s==="Esc")&&T(u.ownerDocument,!0,!0);};(n=>{n.addEventListener("click",l),n.addEventListener("keydown",a),n.addEventListener("pointerdown",x),n.addEventListener("pointerup",x);})(document),I(document);}j()||K();})();
1834
1834
 
1835
- const postPopovercontainerCss = "@layer polyfill{@supports not selector(:popover-open){[popover]:not(.\\:popover-open){display:none}}}.popover{box-shadow:.5px 3px 4px rgba(0,0,0,.1),2px 4px 10px 4px rgba(0,0,0,.12);position:fixed;z-index:1060;width:max-content;margin:0;padding:0;box-sizing:border-box;color:var(--post-contrast-color);background-color:rgb(var(--post-bg-rgb));border:1px solid rgba(0,0,0,0);border-radius:4px;overflow:visible}.arrow{position:absolute;width:.7071067812rem;height:.7071067812rem;background-color:inherit;rotate:45deg;pointer-events:none;z-index:-1;border-right:2px solid rgba(0,0,0,0);border-bottom:2px solid rgba(0,0,0,0)}";
1835
+ const postPopovercontainerCss = "@layer polyfill{@supports not selector(:popover-open){[popover]:not(.\\:popover-open){display:none}}}.popover{box-shadow:.5px 3px 4px rgba(0,0,0,.1),2px 4px 10px 4px rgba(0,0,0,.12);position:fixed;z-index:1060;width:max-content;margin:0;padding:0;box-sizing:border-box;color:var(--post-contrast-color);background-color:rgb(var(--post-bg-rgb));border:2px solid rgba(0,0,0,0);border-radius:4px;overflow:visible}.arrow{position:absolute;width:.7071067812rem;height:.7071067812rem;background-color:inherit;rotate:45deg;pointer-events:none;z-index:-1}.arrow.top{border-left:2px solid rgba(0,0,0,0);border-top:2px solid rgba(0,0,0,0)}.arrow.right{border-right:2px solid rgba(0,0,0,0);border-top:2px solid rgba(0,0,0,0)}.arrow.left{border-left:2px solid rgba(0,0,0,0);border-bottom:2px solid rgba(0,0,0,0)}.arrow.bottom{border-right:2px solid rgba(0,0,0,0);border-bottom:2px solid rgba(0,0,0,0)}";
1836
1836
  const PostPopovercontainerStyle0 = postPopovercontainerCss;
1837
1837
 
1838
1838
  const SIDE_MAP = {
@@ -1863,15 +1863,20 @@ const PostPopovercontainer = class {
1863
1863
  * @param target An element with [data-tooltip-target="id"] where the tooltip should be shown
1864
1864
  */
1865
1865
  async show(target) {
1866
- this.eventTarget = target;
1867
- this.popoverRef.showPopover();
1866
+ if (!this.toggleTimeoutId) {
1867
+ this.eventTarget = target;
1868
+ this.calculatePosition();
1869
+ this.popoverRef.showPopover();
1870
+ }
1868
1871
  }
1869
1872
  /**
1870
1873
  * Programmatically hide this tooltip
1871
1874
  */
1872
1875
  async hide() {
1873
- this.eventTarget = null;
1874
- this.popoverRef.hidePopover();
1876
+ if (!this.toggleTimeoutId) {
1877
+ this.eventTarget = null;
1878
+ this.popoverRef.hidePopover();
1879
+ }
1875
1880
  }
1876
1881
  /**
1877
1882
  * Toggle tooltip display
@@ -1879,8 +1884,13 @@ const PostPopovercontainer = class {
1879
1884
  * @param force Pass true to always show or false to always hide
1880
1885
  */
1881
1886
  async toggle(target, force) {
1882
- this.eventTarget = target;
1883
- this.popoverRef.togglePopover(force);
1887
+ // Prevent instant double toggle
1888
+ if (!this.toggleTimeoutId) {
1889
+ this.eventTarget = target;
1890
+ this.calculatePosition();
1891
+ this.popoverRef.togglePopover(force);
1892
+ this.toggleTimeoutId = null;
1893
+ }
1884
1894
  return this.popoverRef.matches(':popover-open');
1885
1895
  }
1886
1896
  /**
@@ -1890,6 +1900,7 @@ const PostPopovercontainer = class {
1890
1900
  * @param e ToggleEvent
1891
1901
  */
1892
1902
  handleToggle(e) {
1903
+ this.toggleTimeoutId = window.setTimeout(() => (this.toggleTimeoutId = null), 10);
1893
1904
  const isOpen = e.newState === 'open';
1894
1905
  if (isOpen) {
1895
1906
  this.startAutoupdates();
@@ -1945,17 +1956,21 @@ const PostPopovercontainer = class {
1945
1956
  const side = currentPlacement.split('-')[0];
1946
1957
  const { x: arrowX, y: arrowY } = middlewareData.arrow;
1947
1958
  const staticSide = SIDE_MAP[side];
1959
+ const offsetBorderLineJoin = 2;
1948
1960
  Object.assign(this.arrowRef.style, {
1949
1961
  top: arrowY ? `${arrowY}px` : '',
1950
1962
  left: arrowX ? `${arrowX}px` : '',
1951
- [staticSide]: `${-this.arrowRef.offsetWidth / 2}px`,
1963
+ [staticSide]: `${-this.arrowRef.offsetWidth / 2 - offsetBorderLineJoin}px`,
1952
1964
  });
1965
+ // Add position as a class to be able to style arrow for HCM
1966
+ this.arrowRef.classList.remove(...Object.values(SIDE_MAP));
1967
+ this.arrowRef.classList.add(staticSide);
1953
1968
  }
1954
1969
  }
1955
1970
  render() {
1956
- return (h(Host, { key: 'e6eef7a0f4d801645e0f73d94796cdd8b6ae86ea', "data-version": version }, h("div", { key: 'cd520cc35be33aeb99158559132c187229aeefe4', class: "popover", part: "popover", ref: (el) => (this.popoverRef = el) }, this.arrow && (h("span", { class: "arrow", ref: el => {
1971
+ return (h(Host, { key: '8049387a5ba6eefb3165e84c098ba4ae5b8f443f', "data-version": version }, h("div", { key: '63d3095a7992baf46fbc74b5c595654cbdeaba66', class: "popover", part: "popover", ref: (el) => (this.popoverRef = el) }, this.arrow && (h("span", { class: "arrow", ref: el => {
1957
1972
  this.arrowRef = el;
1958
- } })), h("slot", { key: '78875aa9bcae3d3c1e0d9a49304e18fd09b50f41' }))));
1973
+ } })), h("slot", { key: '74b1746bf48f8aa915c443721c1c2af1c1a3df5d' }))));
1959
1974
  }
1960
1975
  get host() { return getElement(this); }
1961
1976
  };
@@ -1,3 +1,3 @@
1
- export { P as post_popovercontainer } from './post-popovercontainer-4a48161f.js';
1
+ export { P as post_popovercontainer } from './post-popovercontainer-da870ff0.js';
2
2
  import './index-1708db56.js';
3
- import './package-37a68f71.js';
3
+ import './package-15929f57.js';
@@ -0,0 +1,30 @@
1
+ import { r as registerInstance, h, H as Host, g as getElement } from './index-1708db56.js';
2
+ import { v as version } from './package-15929f57.js';
3
+ import { c as checkNonEmpty } from './check-non-empty-58bd6b17.js';
4
+
5
+ const postTabHeaderCss = ".tab-title[role=tab]{display:inline-block;position:relative;box-sizing:border-box;padding:1rem;transition:background-color 100ms;border-right:1px solid rgba(0,0,0,0);border-left:1px solid rgba(0,0,0,0);outline-color:currentColor;opacity:.7;color:var(--post-contrast-color);text-decoration:none}.tab-title[role=tab]:focus{background-color:unset;color:var(--post-contrast-color)}.tab-title[role=tab]:hover{opacity:1;background-color:#fff;color:var(--post-contrast-color)}.tab-title[role=tab]:focus-visible{outline:rgba(0,0,0,0);opacity:1;background-color:#fff;color:var(--post-contrast-color);box-shadow:none}.tab-title[role=tab]:focus-visible::after{content:\"\";display:block;position:absolute;top:2px;right:1px;bottom:0;left:1px;box-shadow:0 0 0 1px #fff,0 0 0 2px #333}.tab-title[role=tab].active{z-index:1;border-right-color:#ccc;border-left-color:#ccc;opacity:1;background-color:#fff;color:var(--post-contrast-color);font-weight:700}.tab-title[role=tab].active::before{content:\"\";display:block;position:absolute;top:0;right:-1px;left:-1px;height:.25rem;background-color:#fc0}:is(.bg-dark,.bg-primary,.bg-black,.bg-danger,.bg-nightblue,.bg-nightblue-bright,.bg-petrol,.bg-coral,.bg-olive,.bg-purple,.bg-purple-bright,.bg-aubergine,.bg-aubergine-bright,.bg-success-green,.bg-error-red) .tab-title[role=tab]:hover{background-color:rgba(255,255,255,.2)}:is(.bg-dark,.bg-primary,.bg-black,.bg-danger,.bg-nightblue,.bg-nightblue-bright,.bg-petrol,.bg-coral,.bg-olive,.bg-purple,.bg-purple-bright,.bg-aubergine,.bg-aubergine-bright,.bg-success-green,.bg-error-red) .tab-title[role=tab]:focus-visible{background-color:rgba(255,255,255,.2)}@media (forced-colors: active),(-ms-high-contrast: active),(-ms-high-contrast: white-on-black){.tab-title[role=tab]{opacity:1;border-left-color:Canvas;border-right-color:Canvas;color:LinkText}.tab-title[role=tab]:hover,.tab-title[role=tab]:focus,.tab-title[role=tab]:focus-within,.tab-title[role=tab]:focus-visible{outline:2px solid Highlight;outline-offset:-0.25rem}.tab-title[role=tab].active{border-left-color:ButtonText;border-right-color:ButtonText;color:Highlight}.tab-title[role=tab].active::before{background-color:Highlight}}.bg-yellow .tab-title{background-color:#fc0}.bg-yellow .tab-title.active{background-color:#fc0}.bg-yellow .nav-item{background-color:#fc0}.bg-light .tab-title{background-color:#faf9f8}.bg-light .tab-title.active{background-color:#faf9f8}.bg-light .nav-item{background-color:#faf9f8}.bg-gray .tab-title{background-color:#f4f3f1}.bg-gray .tab-title.active{background-color:#f4f3f1}.bg-gray .nav-item{background-color:#f4f3f1}.bg-dark .tab-title{background-color:#333}.bg-dark .tab-title.active{background-color:#333}.bg-dark .nav-item{background-color:#333}.bg-primary .tab-title{background-color:#333}.bg-primary .tab-title.active{background-color:#333}.bg-primary .nav-item{background-color:#333}.bg-white .tab-title{background-color:#fff}.bg-white .tab-title.active{background-color:#fff}.bg-white .nav-item{background-color:#fff}.bg-black .tab-title{background-color:#000}.bg-black .tab-title.active{background-color:#000}.bg-black .nav-item{background-color:#000}.bg-info .tab-title{background-color:#cce4ee}.bg-info .tab-title.active{background-color:#cce4ee}.bg-info .nav-item{background-color:#cce4ee}.bg-success .tab-title{background-color:#2c911c}.bg-success .tab-title.active{background-color:#2c911c}.bg-success .nav-item{background-color:#2c911c}.bg-warning .tab-title{background-color:#f49e00}.bg-warning .tab-title.active{background-color:#f49e00}.bg-warning .nav-item{background-color:#f49e00}.bg-danger .tab-title{background-color:#a51728}.bg-danger .tab-title.active{background-color:#a51728}.bg-danger .nav-item{background-color:#a51728}.bg-nightblue .tab-title{background-color:#004976}.bg-nightblue .tab-title.active{background-color:#004976}.bg-nightblue .nav-item{background-color:#004976}.bg-nightblue-bright .tab-title{background-color:#0076a8}.bg-nightblue-bright .tab-title.active{background-color:#0076a8}.bg-nightblue-bright .nav-item{background-color:#0076a8}.bg-petrol .tab-title{background-color:#006d68}.bg-petrol .tab-title.active{background-color:#006d68}.bg-petrol .nav-item{background-color:#006d68}.bg-petrol-bright .tab-title{background-color:#00968f}.bg-petrol-bright .tab-title.active{background-color:#00968f}.bg-petrol-bright .nav-item{background-color:#00968f}.bg-coral .tab-title{background-color:#9e2a2f}.bg-coral .tab-title.active{background-color:#9e2a2f}.bg-coral .nav-item{background-color:#9e2a2f}.bg-coral-bright .tab-title{background-color:#e03c31}.bg-coral-bright .tab-title.active{background-color:#e03c31}.bg-coral-bright .nav-item{background-color:#e03c31}.bg-olive .tab-title{background-color:#716135}.bg-olive .tab-title.active{background-color:#716135}.bg-olive .nav-item{background-color:#716135}.bg-olive-bright .tab-title{background-color:#aa9d2e}.bg-olive-bright .tab-title.active{background-color:#aa9d2e}.bg-olive-bright .nav-item{background-color:#aa9d2e}.bg-purple .tab-title{background-color:#80276c}.bg-purple .tab-title.active{background-color:#80276c}.bg-purple .nav-item{background-color:#80276c}.bg-purple-bright .tab-title{background-color:#c5299b}.bg-purple-bright .tab-title.active{background-color:#c5299b}.bg-purple-bright .nav-item{background-color:#c5299b}.bg-aubergine .tab-title{background-color:#523178}.bg-aubergine .tab-title.active{background-color:#523178}.bg-aubergine .nav-item{background-color:#523178}.bg-aubergine-bright .tab-title{background-color:#7566a0}.bg-aubergine-bright .tab-title.active{background-color:#7566a0}.bg-aubergine-bright .nav-item{background-color:#7566a0}.bg-success-green .tab-title{background-color:#2c871d}.bg-success-green .tab-title.active{background-color:#2c871d}.bg-success-green .nav-item{background-color:#2c871d}.bg-error-red .tab-title{background-color:#a51728}.bg-error-red .tab-title.active{background-color:#a51728}.bg-error-red .nav-item{background-color:#a51728}.bg-warning-orange .tab-title{background-color:#f49e00}.bg-warning-orange .tab-title.active{background-color:#f49e00}.bg-warning-orange .nav-item{background-color:#f49e00}.bg-success-background .tab-title{background-color:#c0debb}.bg-success-background .tab-title.active{background-color:#c0debb}.bg-success-background .nav-item{background-color:#c0debb}.bg-error-background .tab-title{background-color:#ffdade}.bg-error-background .tab-title.active{background-color:#ffdade}.bg-error-background .nav-item{background-color:#ffdade}.bg-warning-background .tab-title{background-color:#fce2b2}.bg-warning-background .tab-title.active{background-color:#fce2b2}.bg-warning-background .nav-item{background-color:#fce2b2}[class*=bg-] .tab-title.active:focus::after{background-color:rgba(255,255,255,.2)}@supports selector(*:focus-visible){[class*=bg-] .tab-title.active:focus::after{background-color:unset}[class*=bg-] .tab-title.active:focus-visible::after{background-color:rgba(255,255,255,.2)}}/*!\n * Copyright 2021 by Swiss Post, Information Technology\n */:host{display:block}.tab-title{padding:0;overflow:visible;border:0;background:none;color:inherit;font:inherit;-webkit-user-select:none;user-select:none;-webkit-appearance:button;appearance:button}";
6
+ const PostTabHeaderStyle0 = postTabHeaderCss;
7
+
8
+ const PostTabHeader = class {
9
+ constructor(hostRef) {
10
+ registerInstance(this, hostRef);
11
+ this.tabId = undefined;
12
+ this.panel = undefined;
13
+ }
14
+ validateFor(newValue) {
15
+ checkNonEmpty(newValue, 'The "panel" prop is required for the post-tab-header.');
16
+ }
17
+ componentWillLoad() {
18
+ this.tabId = `tab-${this.host.id || crypto.randomUUID()}`;
19
+ }
20
+ render() {
21
+ return (h(Host, { key: '5685ea424c0e59351a7df7e6b990740067f7e986', "data-version": version }, h("button", { key: 'f32ebddafa7450b081c88e44405f59396a0e6b97', "aria-selected": "false", class: "tab-title", id: this.tabId, role: "tab", tabindex: "-1", type: "button" }, h("slot", { key: '95022af953bbbaf41b5eac4594bf00dc4b12fb37' }))));
22
+ }
23
+ get host() { return getElement(this); }
24
+ static get watchers() { return {
25
+ "panel": ["validateFor"]
26
+ }; }
27
+ };
28
+ PostTabHeader.style = PostTabHeaderStyle0;
29
+
30
+ export { PostTabHeader as P };
@@ -1,5 +1,5 @@
1
- export { P as post_tab_header } from './post-tab-header-63676360.js';
1
+ export { P as post_tab_header } from './post-tab-header-14ed99cd.js';
2
2
  import './index-1708db56.js';
3
- import './package-37a68f71.js';
3
+ import './package-15929f57.js';
4
4
  import './check-non-empty-58bd6b17.js';
5
5
  import './constants-8d548297.js';
@@ -1,5 +1,5 @@
1
1
  import { r as registerInstance, h, H as Host, g as getElement } from './index-1708db56.js';
2
- import { v as version } from './package-37a68f71.js';
2
+ import { v as version } from './package-15929f57.js';
3
3
 
4
4
  const postTabPanelCss = ":host{display:none}";
5
5
  const PostTabPanelStyle0 = postTabPanelCss;
@@ -1,3 +1,3 @@
1
- export { P as post_tab_panel } from './post-tab-panel-da24046f.js';
1
+ export { P as post_tab_panel } from './post-tab-panel-d89c4c50.js';
2
2
  import './index-1708db56.js';
3
- import './package-37a68f71.js';
3
+ import './package-15929f57.js';
@@ -1,5 +1,5 @@
1
1
  import { r as registerInstance, c as createEvent, h, H as Host, g as getElement } from './index-1708db56.js';
2
- import { v as version } from './package-37a68f71.js';
2
+ import { v as version } from './package-15929f57.js';
3
3
  import { f as fadeOut, a as fadeIn } from './fade-7fd71785.js';
4
4
 
5
5
  const postTabsCss = ".tabs-wrapper{position:relative;padding-top:1rem;border:0;background-color:#faf9f8}.tabs-wrapper::after{content:\"\";position:absolute;bottom:0;width:100%;height:1px;background-color:#ccc}.tabs-wrapper .tabs{background-color:rgba(0,0,0,0) !important}@media (forced-colors: active),(-ms-high-contrast: active),(-ms-high-contrast: white-on-black){.tabs-wrapper::after{background-color:ButtonBorder}}.tabs{margin:0;padding:0;list-style:none;display:flex;flex-wrap:nowrap;overflow-x:auto;overscroll-behavior-x:contain;white-space:nowrap}.tabs::after{content:\"\";display:block;flex:1 0 auto;width:1rem}.tab-content{margin-block:1rem}.bg-yellow .tabs-wrapper{background-color:#fc0}.bg-light .tabs-wrapper{background-color:#faf9f8}.bg-gray .tabs-wrapper{background-color:#f4f3f1}.bg-dark .tabs-wrapper{background-color:#333}.bg-primary .tabs-wrapper{background-color:#333}.bg-white .tabs-wrapper{background-color:#fff}.bg-black .tabs-wrapper{background-color:#000}.bg-info .tabs-wrapper{background-color:#cce4ee}.bg-success .tabs-wrapper{background-color:#2c911c}.bg-warning .tabs-wrapper{background-color:#f49e00}.bg-danger .tabs-wrapper{background-color:#a51728}.bg-nightblue .tabs-wrapper{background-color:#004976}.bg-nightblue-bright .tabs-wrapper{background-color:#0076a8}.bg-petrol .tabs-wrapper{background-color:#006d68}.bg-petrol-bright .tabs-wrapper{background-color:#00968f}.bg-coral .tabs-wrapper{background-color:#9e2a2f}.bg-coral-bright .tabs-wrapper{background-color:#e03c31}.bg-olive .tabs-wrapper{background-color:#716135}.bg-olive-bright .tabs-wrapper{background-color:#aa9d2e}.bg-purple .tabs-wrapper{background-color:#80276c}.bg-purple-bright .tabs-wrapper{background-color:#c5299b}.bg-aubergine .tabs-wrapper{background-color:#523178}.bg-aubergine-bright .tabs-wrapper{background-color:#7566a0}.bg-success-green .tabs-wrapper{background-color:#2c871d}.bg-error-red .tabs-wrapper{background-color:#a51728}.bg-warning-orange .tabs-wrapper{background-color:#f49e00}.bg-success-background .tabs-wrapper{background-color:#c0debb}.bg-error-background .tabs-wrapper{background-color:#ffdade}.bg-warning-background .tabs-wrapper{background-color:#fce2b2}:host{display:block}";
@@ -1,4 +1,4 @@
1
- export { P as post_tabs } from './post-tabs-21a5dfeb.js';
1
+ export { P as post_tabs } from './post-tabs-e995886a.js';
2
2
  import './index-1708db56.js';
3
- import './package-37a68f71.js';
3
+ import './package-15929f57.js';
4
4
  import './fade-7fd71785.js';
@@ -1,5 +1,6 @@
1
1
  import { r as registerInstance, h, H as Host, g as getElement } from './index-1708db56.js';
2
- import { v as version$1 } from './package-37a68f71.js';
2
+ import { v as version$1 } from './package-15929f57.js';
3
+ import { g as getAttributeObserver } from './attribute-observer-37fa950a.js';
3
4
 
4
5
  var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};
5
6
 
@@ -4769,18 +4770,87 @@ const isFocusable = /*@__PURE__*/getDefaultExportFromCjs(focusable.exports);
4769
4770
 
4770
4771
  }(window, document));
4771
4772
 
4772
- const postTooltipCss = ":host{--post-contrast-color:#fff;--post-bg-rgb:51, 51, 51}post-popovercontainer::part(popover){padding:.25rem .5rem;max-width:13.5rem;min-height:1rem}";
4773
+ const postTooltipCss = ":host{--post-contrast-color:#fff;--post-bg-rgb:51, 51, 51}post-popovercontainer::part(popover){padding:.25rem .5rem;max-width:13.5rem;min-height:1rem}post-popovercontainer.has-arrow::part(popover)::after{position:absolute;content:\"\";inset:-13px;z-index:-1}";
4773
4774
  const PostTooltipStyle0 = postTooltipCss;
4774
4775
 
4776
+ /**
4777
+ * @slot default - Slot for the content of the tooltip.
4778
+ */
4779
+ /**
4780
+ * Track how many instances remain on the page. Used for removing global event listeners
4781
+ */
4782
+ let tooltipInstances = 0;
4783
+ let hideTooltipTimeout = null;
4784
+ const tooltipTargetAttribute = 'data-tooltip-target';
4785
+ /**
4786
+ * Global event listener to show tooltips. This is globalized so that triggers that are rendered
4787
+ * async will still work without the need to set listeners on the element itself
4788
+ * @param e Event
4789
+ * @returns
4790
+ */
4791
+ const globalInterestHandler = (e) => {
4792
+ const target = e.target;
4793
+ if (!target || !('getAttribute' in target))
4794
+ return;
4795
+ const tooltipTarget = target.getAttribute(tooltipTargetAttribute);
4796
+ if (!tooltipTarget || tooltipTarget === '')
4797
+ return;
4798
+ const tooltip = document.getElementById(tooltipTarget);
4799
+ tooltip === null || tooltip === void 0 ? void 0 : tooltip.show(target);
4800
+ if (hideTooltipTimeout) {
4801
+ window.clearTimeout(hideTooltipTimeout);
4802
+ hideTooltipTimeout = null;
4803
+ }
4804
+ };
4805
+ /**
4806
+ * Global event listener to hide tooltips. This is globalized so that triggers that are rendered
4807
+ * async will still work without the need to set listeners on the element itself
4808
+ * @param e Event
4809
+ * @returns
4810
+ */
4811
+ const globalInterestLostHandler = (e) => {
4812
+ const target = e.target;
4813
+ const tooltipTarget = target.getAttribute(tooltipTargetAttribute);
4814
+ if (!tooltipTarget || tooltipTarget === '')
4815
+ return;
4816
+ const tooltip = document.getElementById(tooltipTarget);
4817
+ globalHideTooltip(tooltip);
4818
+ };
4819
+ /**
4820
+ * Start the hiding process through a timeout to give other interest events a chance to
4821
+ * intervene and cancel the hide event.
4822
+ * @param {HTMLPostTooltipElement} tooltip
4823
+ */
4824
+ const globalHideTooltip = (tooltip) => {
4825
+ hideTooltipTimeout = window.setTimeout(() => {
4826
+ tooltip.hide();
4827
+ hideTooltipTimeout = null;
4828
+ }, 42);
4829
+ };
4830
+ /**
4831
+ * Patch some accessibility features that are hard to remember or understand
4832
+ * @param {HTMLElement} trigger
4833
+ */
4834
+ const patchAccessibilityFeatures = (trigger) => {
4835
+ const describedBy = trigger.getAttribute('aria-describedby');
4836
+ const id = trigger.getAttribute(tooltipTargetAttribute);
4837
+ // Add tooltip to aria-describedby
4838
+ if (!(describedBy === null || describedBy === void 0 ? void 0 : describedBy.includes(id))) {
4839
+ const newDescribedBy = describedBy ? `${describedBy} ${id}` : id;
4840
+ trigger.setAttribute('aria-describedby', newDescribedBy);
4841
+ }
4842
+ // Make element focusable
4843
+ if (!isFocusable(trigger)) {
4844
+ trigger.setAttribute('tabindex', '0');
4845
+ }
4846
+ };
4847
+ // Initialize a mutation observer for patching accessibility features
4848
+ const triggerObserver = getAttributeObserver(tooltipTargetAttribute, patchAccessibilityFeatures);
4775
4849
  const PostTooltip = class {
4776
4850
  constructor(hostRef) {
4777
4851
  registerInstance(this, hostRef);
4778
4852
  this.placement = 'top';
4779
4853
  this.arrow = true;
4780
- // Create local versions of event handlers for de-registration
4781
- // https://stackoverflow.com/questions/33859113/javascript-removeeventlistener-not-working-inside-a-class
4782
- this.localShowTooltip = e => this.show(e.target);
4783
- this.localHideTooltip = this.hide.bind(this);
4784
4854
  }
4785
4855
  connectedCallback() {
4786
4856
  if (!this.host.id) {
@@ -4788,29 +4858,45 @@ const PostTooltip = class {
4788
4858
  /*prettier-ignore*/
4789
4859
  'No id set: <post-tooltip> must have an id, linking it to it\'s target element using the data-tooltip-target attribute.');
4790
4860
  }
4791
- if (!this.triggers) {
4792
- throw new Error(`No trigger found for <post-tooltip id="${this.host.id}">, please add the 'data-tooltip-target="${this.host.id}" attribute to the trigger element.`);
4861
+ }
4862
+ /**
4863
+ * Add interest event listeners, but only once, and start
4864
+ * the accessibility patcher
4865
+ */
4866
+ componentWillLoad() {
4867
+ if (tooltipInstances === 0) {
4868
+ // This is the first tooltip on the page, add event listeners
4869
+ document.addEventListener('pointerover', globalInterestHandler);
4870
+ document.addEventListener('pointerout', globalInterestLostHandler);
4871
+ document.addEventListener('focusin', globalInterestHandler);
4872
+ document.addEventListener('focusout', globalInterestLostHandler);
4873
+ document.addEventListener('long-press', globalInterestHandler);
4874
+ // Initially run the accessibility patcher on all triggers
4875
+ document.querySelectorAll('[data-tooltip-target]').forEach(patchAccessibilityFeatures);
4876
+ // Start watching for future triggers
4877
+ triggerObserver.observe(document.body, {
4878
+ subtree: true,
4879
+ childList: true,
4880
+ attributeFilter: [tooltipTargetAttribute],
4881
+ });
4793
4882
  }
4794
- // Patch popovertargetaction="interest" until it's implemented
4795
- // https://github.com/openui/open-ui/issues/767#issuecomment-1654177227
4796
- this.triggers.forEach(trigger => this.patchPopoverTargetActionInterest(trigger));
4883
+ tooltipInstances++;
4797
4884
  }
4798
4885
  /**
4799
4886
  * Remove a bunch of event listeners if the tooltip gets removed from the DOM
4887
+ * and disconnect the accessibility patcher
4800
4888
  */
4801
4889
  disconnectedCallback() {
4802
- this.triggers.forEach(trigger => {
4803
- trigger.removeEventListener('mouseenter', this.localShowTooltip);
4804
- trigger.removeEventListener('mouseleave', this.localHideTooltip);
4805
- trigger.removeEventListener('focus', this.localShowTooltip);
4806
- trigger.removeEventListener('blur', this.localHideTooltip);
4807
- trigger.removeEventListener('long-press', this.localShowTooltip);
4808
- });
4809
- }
4810
- componentWillLoad() {
4811
- // Append tooltip host to the end of the body to get around overflow: hidden restrictions
4812
- // for browsers that don't support popover yet
4813
- document.body.appendChild(this.host);
4890
+ tooltipInstances--;
4891
+ if (tooltipInstances <= 0) {
4892
+ // The last tooltip has been removed, stop listening for these kind of events
4893
+ document.removeEventListener('pointerover', globalInterestHandler);
4894
+ document.removeEventListener('pointerout', globalInterestLostHandler);
4895
+ document.removeEventListener('focusin', globalInterestHandler);
4896
+ document.removeEventListener('focusout', globalInterestLostHandler);
4897
+ document.removeEventListener('long-press', globalInterestHandler);
4898
+ triggerObserver.disconnect();
4899
+ }
4814
4900
  }
4815
4901
  /**
4816
4902
  * Programmatically display the tooltip
@@ -4833,28 +4919,24 @@ const PostTooltip = class {
4833
4919
  async toggle(target, force) {
4834
4920
  this.popoverRef.toggle(target, force);
4835
4921
  }
4836
- get triggers() {
4837
- return document.querySelectorAll(`[data-tooltip-target="${this.host.id}"]`);
4838
- }
4839
- patchPopoverTargetActionInterest(trigger) {
4840
- trigger.addEventListener('mouseenter', this.localShowTooltip);
4841
- trigger.addEventListener('mouseleave', this.localHideTooltip);
4842
- trigger.addEventListener('focus', this.localShowTooltip);
4843
- trigger.addEventListener('blur', this.localHideTooltip);
4844
- trigger.addEventListener('long-press', this.localShowTooltip);
4845
- // Patch missing aria-describedby attribute on the trigger without overriding existing values
4846
- const describedBy = trigger.getAttribute('aria-describedby');
4847
- if (!(describedBy === null || describedBy === void 0 ? void 0 : describedBy.includes(this.host.id))) {
4848
- const newDescribedBy = describedBy ? `${describedBy} ${this.host.id}` : this.host.id;
4849
- trigger.setAttribute('aria-describedby', newDescribedBy);
4850
- }
4851
- // Patch missing focus ability on the trigger element
4852
- if (!isFocusable(trigger)) {
4853
- trigger.setAttribute('tabindex', '0');
4922
+ /**
4923
+ * Pointer or focus is on the tooltip, stop the tooltip from disappearing
4924
+ */
4925
+ handleInterest() {
4926
+ if (hideTooltipTimeout) {
4927
+ window.clearTimeout(hideTooltipTimeout);
4928
+ hideTooltipTimeout = null;
4854
4929
  }
4855
4930
  }
4931
+ /**
4932
+ * Pointer or focus left the tooltip, initiate the hiding process
4933
+ */
4934
+ handleInterestLost() {
4935
+ globalHideTooltip(this);
4936
+ }
4856
4937
  render() {
4857
- return (h(Host, { key: 'e4a9dcb08b0e468e83bc6655d1cbece256a5299c', "data-version": version$1 }, h("post-popovercontainer", { key: '819cafc2521bc4d9a69fda5a30a24f1e6c158272', role: "tooltip", tabindex: "-1", arrow: this.arrow, placement: this.placement, ref: (el) => (this.popoverRef = el) }, h("slot", { key: '1432f96849a598a2be823acc7e96d70ab539df0c' }))));
4938
+ const popoverClass = `${this.arrow ? ' has-arrow' : ''}`;
4939
+ return (h(Host, { key: 'cf89d38b05fbb49ecfcfd339baf325a4fb850f3a', "data-version": version$1, role: "tooltip", onPointerOver: this.handleInterest, onPointerOut: this.handleInterestLost, onFocusIn: this.handleInterest, onFocusOut: this.handleInterestLost }, h("post-popovercontainer", { key: '2f6f473007ae8d4fc7ef3bcec38a8f19222eaf5d', class: popoverClass, arrow: this.arrow, placement: this.placement, ref: (el) => (this.popoverRef = el) }, h("slot", { key: '84bfd25818068ce1fb644b3b0e6858f9cb1bd605' }))));
4858
4940
  }
4859
4941
  get host() { return getElement(this); }
4860
4942
  };
@@ -1,3 +1,4 @@
1
- export { P as post_tooltip } from './post-tooltip-4f4f87b4.js';
1
+ export { P as post_tooltip } from './post-tooltip-0ec6a388.js';
2
2
  import './index-1708db56.js';
3
- import './package-37a68f71.js';
3
+ import './package-15929f57.js';
4
+ import './attribute-observer-37fa950a.js';
@@ -1 +1 @@
1
- export{P as PostAccordion}from"./p-c1c8f2ec.js";export{P as PostAccordionItem}from"./p-82facb04.js";export{P as PostAlert}from"./p-ccd827a1.js";export{P as PostCollapsible}from"./p-aee1750c.js";export{P as PostIcon}from"./p-2b67b933.js";export{P as PostPopover}from"./p-8aa01298.js";export{P as PostPopovercontainer}from"./p-e836df41.js";export{P as PostTabs}from"./p-73a7d4f9.js";export{P as PostTabHeader}from"./p-7973e3e4.js";export{P as PostTabPanel}from"./p-47fd6eb0.js";export{P as PostTooltip}from"./p-21557c34.js";import"./p-10b4cf7a.js";import"./p-a3fc7eaf.js";import"./p-f0e82e63.js";import"./p-440193f4.js";import"./p-2737eaf5.js";import"./p-b095519d.js";
1
+ export{P as PostAccordion}from"./p-a9d59b04.js";export{P as PostAccordionItem}from"./p-e8d17225.js";export{P as PostAlert}from"./p-ac7b779e.js";export{P as PostCollapsible}from"./p-6b3ba10a.js";export{P as PostIcon}from"./p-d9c9ed63.js";export{P as PostPopover}from"./p-5ecceba0.js";export{P as PostPopovercontainer}from"./p-1f284e66.js";export{P as PostTabs}from"./p-51fe19e0.js";export{P as PostTabHeader}from"./p-209e33a5.js";export{P as PostTabPanel}from"./p-61d98756.js";export{P as PostTooltip}from"./p-94256868.js";import"./p-10b4cf7a.js";import"./p-f47b0207.js";import"./p-f0e82e63.js";import"./p-440193f4.js";import"./p-2737eaf5.js";import"./p-b095519d.js";import"./p-6adeaa6c.js";
@@ -0,0 +1 @@
1
+ export{P as post_tabs}from"./p-51fe19e0.js";import"./p-10b4cf7a.js";import"./p-f47b0207.js";import"./p-2737eaf5.js";
@@ -0,0 +1 @@
1
+ export{P as post_popover}from"./p-5ecceba0.js";import"./p-10b4cf7a.js";import"./p-f47b0207.js";import"./p-6adeaa6c.js";