@pine-ds/core 4.7.2 → 4.8.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 (224) hide show
  1. package/components/pds-avatar.js +1 -1
  2. package/components/pds-button2.js +1 -1
  3. package/components/pds-checkbox2.js +1 -1
  4. package/components/pds-chip2.js +1 -1
  5. package/components/pds-combobox.js +1 -1
  6. package/components/pds-dropdown-menu-item.js +1 -1
  7. package/components/pds-dropdown-menu.js +1 -1
  8. package/components/pds-modal-content.js +1 -1
  9. package/components/pds-modal2.js +1 -1
  10. package/components/pds-multiselect.js +1 -1
  11. package/components/pds-popover.js +1 -1
  12. package/components/pds-radio-group.js +1 -1
  13. package/components/pds-radio.js +1 -1
  14. package/components/pds-switch.js +1 -1
  15. package/components/pds-table-head-cell2.js +1 -1
  16. package/components/pds-textarea.js +1 -1
  17. package/components/pds-toast.js +1 -1
  18. package/components/truncation-tooltip.js +1 -1
  19. package/dist/cjs/{index-5Azb8EQG.js → index-Do70atou.js} +1 -1
  20. package/dist/cjs/loader.cjs.js +1 -1
  21. package/dist/cjs/pds-accordion.cjs.entry.js +1 -1
  22. package/dist/cjs/pds-avatar.cjs.entry.js +3 -3
  23. package/dist/cjs/pds-button.cjs.entry.js +24 -21
  24. package/dist/cjs/pds-checkbox.cjs.entry.js +2 -2
  25. package/dist/cjs/pds-chip.cjs.entry.js +4 -4
  26. package/dist/cjs/pds-combobox.cjs.entry.js +4 -4
  27. package/dist/cjs/pds-copytext.cjs.entry.js +2 -2
  28. package/dist/cjs/pds-datepicker.cjs.entry.js +1 -1
  29. package/dist/cjs/pds-dropdown-menu-item.cjs.entry.js +31 -2
  30. package/dist/cjs/pds-dropdown-menu.cjs.entry.js +4 -4
  31. package/dist/cjs/pds-filter.cjs.entry.js +1 -1
  32. package/dist/cjs/pds-input.cjs.entry.js +1 -1
  33. package/dist/cjs/pds-link.cjs.entry.js +1 -1
  34. package/dist/cjs/pds-modal-content.cjs.entry.js +32 -30
  35. package/dist/cjs/pds-modal.cjs.entry.js +4 -4
  36. package/dist/cjs/pds-multiselect.cjs.entry.js +6 -6
  37. package/dist/cjs/pds-popover.cjs.entry.js +187 -11
  38. package/dist/cjs/pds-radio-group.cjs.entry.js +2 -2
  39. package/dist/cjs/pds-radio.cjs.entry.js +3 -3
  40. package/dist/cjs/pds-select.cjs.entry.js +1 -1
  41. package/dist/cjs/pds-sortable-item.cjs.entry.js +1 -1
  42. package/dist/cjs/pds-switch.cjs.entry.js +2 -2
  43. package/dist/cjs/pds-table-cell.cjs.entry.js +1 -1
  44. package/dist/cjs/pds-table-head-cell.cjs.entry.js +2 -2
  45. package/dist/cjs/pds-text.cjs.entry.js +1 -1
  46. package/dist/cjs/pds-textarea.cjs.entry.js +2 -2
  47. package/dist/cjs/pds-toast.cjs.entry.js +1 -1
  48. package/dist/cjs/pine-core.cjs.js +1 -1
  49. package/dist/cjs/{truncation-tooltip-DO9xli2e.js → truncation-tooltip-BtuiXLV0.js} +31 -6
  50. package/dist/collection/components/pds-avatar/pds-avatar.js +2 -2
  51. package/dist/collection/components/pds-button/pds-button.js +24 -22
  52. package/dist/collection/components/pds-button/stories/pds-button.stories.js +3 -3
  53. package/dist/collection/components/pds-checkbox/pds-checkbox.js +1 -1
  54. package/dist/collection/components/pds-chip/pds-chip.js +2 -2
  55. package/dist/collection/components/pds-combobox/pds-combobox.js +4 -4
  56. package/dist/collection/components/pds-datepicker/stories/pds-datepicker.stories.js +1 -1
  57. package/dist/collection/components/pds-dropdown-menu/pds-dropdown-menu-item/pds-dropdown-menu-item.css +8 -0
  58. package/dist/collection/components/pds-dropdown-menu/pds-dropdown-menu-item/pds-dropdown-menu-item.js +58 -6
  59. package/dist/collection/components/pds-dropdown-menu/pds-dropdown-menu.js +4 -4
  60. package/dist/collection/components/pds-dropdown-menu/stories/pds-dropdown-menu.stories.js +39 -0
  61. package/dist/collection/components/pds-modal/pds-modal-content/pds-modal-content.js +32 -30
  62. package/dist/collection/components/pds-modal/pds-modal.js +4 -4
  63. package/dist/collection/components/pds-multiselect/pds-multiselect.js +5 -5
  64. package/dist/collection/components/pds-popover/pds-popover.js +240 -11
  65. package/dist/collection/components/pds-popover/stories/pds-popover.stories.js +31 -0
  66. package/dist/collection/components/pds-radio/pds-radio.js +2 -2
  67. package/dist/collection/components/pds-radio-group/pds-radio-group.js +1 -1
  68. package/dist/collection/components/pds-switch/pds-switch.js +1 -1
  69. package/dist/collection/components/pds-table/pds-table-head-cell/pds-table-head-cell.js +1 -1
  70. package/dist/collection/components/pds-table/stories/pds-table.stories.js +1 -1
  71. package/dist/collection/components/pds-text/stories/pds-text.stories.js +1 -1
  72. package/dist/collection/components/pds-textarea/pds-textarea.js +1 -1
  73. package/dist/collection/components/pds-toast/pds-toast.js +1 -1
  74. package/dist/collection/utils/truncation-tooltip.js +31 -6
  75. package/dist/docs.json +124 -7
  76. package/dist/esm/{index-BJXk71tO.js → index-BWDu62Mo.js} +1 -1
  77. package/dist/esm/loader.js +1 -1
  78. package/dist/esm/pds-accordion.entry.js +1 -1
  79. package/dist/esm/pds-avatar.entry.js +3 -3
  80. package/dist/esm/pds-button.entry.js +24 -21
  81. package/dist/esm/pds-checkbox.entry.js +2 -2
  82. package/dist/esm/pds-chip.entry.js +4 -4
  83. package/dist/esm/pds-combobox.entry.js +4 -4
  84. package/dist/esm/pds-copytext.entry.js +2 -2
  85. package/dist/esm/pds-datepicker.entry.js +1 -1
  86. package/dist/esm/pds-dropdown-menu-item.entry.js +31 -2
  87. package/dist/esm/pds-dropdown-menu.entry.js +4 -4
  88. package/dist/esm/pds-filter.entry.js +1 -1
  89. package/dist/esm/pds-input.entry.js +1 -1
  90. package/dist/esm/pds-link.entry.js +1 -1
  91. package/dist/esm/pds-modal-content.entry.js +32 -30
  92. package/dist/esm/pds-modal.entry.js +4 -4
  93. package/dist/esm/pds-multiselect.entry.js +6 -6
  94. package/dist/esm/pds-popover.entry.js +187 -11
  95. package/dist/esm/pds-radio-group.entry.js +2 -2
  96. package/dist/esm/pds-radio.entry.js +3 -3
  97. package/dist/esm/pds-select.entry.js +1 -1
  98. package/dist/esm/pds-sortable-item.entry.js +1 -1
  99. package/dist/esm/pds-switch.entry.js +2 -2
  100. package/dist/esm/pds-table-cell.entry.js +1 -1
  101. package/dist/esm/pds-table-head-cell.entry.js +2 -2
  102. package/dist/esm/pds-text.entry.js +1 -1
  103. package/dist/esm/pds-textarea.entry.js +2 -2
  104. package/dist/esm/pds-toast.entry.js +1 -1
  105. package/dist/esm/pine-core.js +1 -1
  106. package/dist/esm/{truncation-tooltip-DRXsdKk1.js → truncation-tooltip-FaW67DiY.js} +31 -6
  107. package/dist/esm-es5/loader.js +1 -1
  108. package/dist/esm-es5/pds-accordion.entry.js +1 -1
  109. package/dist/esm-es5/pds-avatar.entry.js +1 -1
  110. package/dist/esm-es5/pds-button.entry.js +1 -1
  111. package/dist/esm-es5/pds-checkbox.entry.js +1 -1
  112. package/dist/esm-es5/pds-chip.entry.js +1 -1
  113. package/dist/esm-es5/pds-combobox.entry.js +1 -1
  114. package/dist/esm-es5/pds-copytext.entry.js +1 -1
  115. package/dist/esm-es5/pds-datepicker.entry.js +1 -1
  116. package/dist/esm-es5/pds-dropdown-menu-item.entry.js +1 -1
  117. package/dist/esm-es5/pds-dropdown-menu.entry.js +1 -1
  118. package/dist/esm-es5/pds-filter.entry.js +1 -1
  119. package/dist/esm-es5/pds-input.entry.js +1 -1
  120. package/dist/esm-es5/pds-link.entry.js +1 -1
  121. package/dist/esm-es5/pds-modal-content.entry.js +1 -1
  122. package/dist/esm-es5/pds-modal.entry.js +1 -1
  123. package/dist/esm-es5/pds-multiselect.entry.js +1 -1
  124. package/dist/esm-es5/pds-popover.entry.js +1 -1
  125. package/dist/esm-es5/pds-radio-group.entry.js +1 -1
  126. package/dist/esm-es5/pds-radio.entry.js +1 -1
  127. package/dist/esm-es5/pds-select.entry.js +1 -1
  128. package/dist/esm-es5/pds-sortable-item.entry.js +1 -1
  129. package/dist/esm-es5/pds-switch.entry.js +1 -1
  130. package/dist/esm-es5/pds-table-cell.entry.js +1 -1
  131. package/dist/esm-es5/pds-table-head-cell.entry.js +1 -1
  132. package/dist/esm-es5/pds-text.entry.js +1 -1
  133. package/dist/esm-es5/pds-textarea.entry.js +1 -1
  134. package/dist/esm-es5/pds-toast.entry.js +1 -1
  135. package/dist/esm-es5/pine-core.js +1 -1
  136. package/dist/esm-es5/truncation-tooltip-FaW67DiY.js +1 -0
  137. package/dist/pine-core/{p-e836f3ec.system.entry.js → p-00a50de5.system.entry.js} +2 -2
  138. package/dist/pine-core/{p-1437585e.system.entry.js → p-047433a4.system.entry.js} +1 -1
  139. package/dist/pine-core/{p-7fa66cad.entry.js → p-089c3e60.entry.js} +1 -1
  140. package/dist/pine-core/{p-341c38f1.system.entry.js → p-0af0d752.system.entry.js} +1 -1
  141. package/dist/pine-core/{p-3a959459.system.entry.js → p-121612a7.system.entry.js} +1 -1
  142. package/dist/pine-core/{p-cde8eb81.entry.js → p-138b278b.entry.js} +1 -1
  143. package/dist/pine-core/{p-cfd012d4.entry.js → p-158b2f51.entry.js} +1 -1
  144. package/dist/pine-core/p-17f97f1a.entry.js +1 -0
  145. package/dist/pine-core/{p-5c90091e.system.entry.js → p-19ba2788.system.entry.js} +1 -1
  146. package/dist/pine-core/{p-355e4cf9.entry.js → p-25ea48d1.entry.js} +1 -1
  147. package/dist/pine-core/{p-c81d8ac8.entry.js → p-295f64ea.entry.js} +1 -1
  148. package/dist/pine-core/{p-576cf904.system.entry.js → p-29cd4113.system.entry.js} +1 -1
  149. package/dist/pine-core/{p-1ee86d87.system.entry.js → p-332590c7.system.entry.js} +1 -1
  150. package/dist/pine-core/p-36cb4bf6.entry.js +1 -0
  151. package/dist/pine-core/{p-080cb087.system.entry.js → p-3c977d8d.system.entry.js} +1 -1
  152. package/dist/pine-core/p-3d51891a.entry.js +1 -0
  153. package/dist/pine-core/{p-72865997.entry.js → p-44f546ae.entry.js} +1 -1
  154. package/dist/pine-core/{p-b60ac7eb.system.entry.js → p-4bfc8b3e.system.entry.js} +1 -1
  155. package/dist/pine-core/p-5833a072.system.entry.js +1 -0
  156. package/dist/pine-core/p-5cfd4d41.system.entry.js +1 -0
  157. package/dist/pine-core/{p-f2c253d8.entry.js → p-62433f32.entry.js} +1 -1
  158. package/dist/pine-core/{p-ebd0bff2.entry.js → p-631f5bcc.entry.js} +1 -1
  159. package/dist/pine-core/p-717323e4.entry.js +1 -0
  160. package/dist/pine-core/{p-e7a95a49.system.entry.js → p-719542e1.system.entry.js} +1 -1
  161. package/dist/pine-core/p-73f931a1.entry.js +1 -0
  162. package/dist/pine-core/{p-f77905aa.system.entry.js → p-884cb31d.system.entry.js} +1 -1
  163. package/dist/pine-core/{p-4435fff6.system.entry.js → p-8987fd45.system.entry.js} +1 -1
  164. package/dist/pine-core/{p-02088776.entry.js → p-8c588ca0.entry.js} +1 -1
  165. package/dist/pine-core/p-8e3ff75d.entry.js +1 -0
  166. package/dist/pine-core/{p-bd26a5e8.entry.js → p-90d5edc6.entry.js} +1 -1
  167. package/dist/pine-core/p-91f60173.entry.js +1 -0
  168. package/dist/pine-core/{p-258770cf.system.entry.js → p-9265497e.system.entry.js} +1 -1
  169. package/dist/pine-core/p-99fdf70f.entry.js +1 -0
  170. package/dist/pine-core/{p-0a84d220.entry.js → p-9aaedded.entry.js} +1 -1
  171. package/dist/pine-core/p-9df5e204.entry.js +1 -0
  172. package/dist/pine-core/p-CuSNnuFu.system.js +1 -1
  173. package/dist/pine-core/p-D04W0cAO.system.js +1 -0
  174. package/dist/pine-core/{p-6d603d16.system.entry.js → p-acca5f7b.system.entry.js} +1 -1
  175. package/dist/pine-core/{p-a19cd59c.entry.js → p-aff411d0.entry.js} +1 -1
  176. package/dist/pine-core/{p-bb73ad66.entry.js → p-b182f806.entry.js} +1 -1
  177. package/dist/pine-core/{p-01aa382c.system.entry.js → p-b9d145f8.system.entry.js} +1 -1
  178. package/dist/pine-core/p-bdac8f2b.entry.js +1 -0
  179. package/dist/pine-core/{p-aa032a5e.system.entry.js → p-be9b6e63.system.entry.js} +1 -1
  180. package/dist/pine-core/{p-ff3de72e.entry.js → p-c483997a.entry.js} +1 -1
  181. package/dist/pine-core/p-c4e12f0a.entry.js +1 -0
  182. package/dist/pine-core/{p-e8cb76e8.entry.js → p-c97bfac9.entry.js} +1 -1
  183. package/dist/pine-core/{p-bd67156b.system.entry.js → p-ca4ee736.system.entry.js} +1 -1
  184. package/dist/pine-core/p-cccfe60f.system.entry.js +1 -0
  185. package/dist/pine-core/{p-c5c9ed36.system.entry.js → p-d3d69ca4.system.entry.js} +1 -1
  186. package/dist/pine-core/{p-f0d24298.system.entry.js → p-ea340c55.system.entry.js} +1 -1
  187. package/dist/pine-core/{p-88ff1604.entry.js → p-ea8f5d29.entry.js} +1 -1
  188. package/dist/pine-core/{p-d8570b4b.system.entry.js → p-eaf85be6.system.entry.js} +1 -1
  189. package/dist/pine-core/{p-fc25b956.system.entry.js → p-ecc7a531.system.entry.js} +1 -1
  190. package/dist/pine-core/{p-cfc52b95.system.entry.js → p-ee0e30bf.system.entry.js} +1 -1
  191. package/dist/pine-core/{p-e803f629.system.entry.js → p-ef13f665.system.entry.js} +1 -1
  192. package/dist/pine-core/{p-97d0b89e.system.entry.js → p-f3067d90.system.entry.js} +1 -1
  193. package/dist/pine-core/{p-JtdHT_W5.js → p-jrkGLEPe.js} +1 -1
  194. package/dist/pine-core/pine-core.esm.js +1 -1
  195. package/dist/types/components/pds-button/pds-button.d.ts +3 -4
  196. package/dist/types/components/pds-dropdown-menu/pds-dropdown-menu-item/pds-dropdown-menu-item.d.ts +13 -3
  197. package/dist/types/components/pds-modal/pds-modal-content/pds-modal-content.d.ts +2 -0
  198. package/dist/types/components/pds-popover/pds-popover.d.ts +43 -1
  199. package/dist/types/components.d.ts +43 -10
  200. package/dist/types/utils/truncation-tooltip.d.ts +4 -4
  201. package/dist/types/utils/types.d.ts +1 -0
  202. package/dist/vscode.html-data.json +50 -7
  203. package/hydrate/index.js +340 -103
  204. package/hydrate/index.mjs +340 -103
  205. package/package.json +2 -2
  206. package/dist/esm-es5/truncation-tooltip-DRXsdKk1.js +0 -1
  207. package/dist/pine-core/p-153ba77b.entry.js +0 -1
  208. package/dist/pine-core/p-645a482b.system.entry.js +0 -1
  209. package/dist/pine-core/p-7bf6563a.system.entry.js +0 -1
  210. package/dist/pine-core/p-80a698ae.entry.js +0 -1
  211. package/dist/pine-core/p-82cf4ec6.entry.js +0 -1
  212. package/dist/pine-core/p-8d292b48.entry.js +0 -1
  213. package/dist/pine-core/p-92ae6082.entry.js +0 -1
  214. package/dist/pine-core/p-993d1043.entry.js +0 -1
  215. package/dist/pine-core/p-a787b34a.system.entry.js +0 -1
  216. package/dist/pine-core/p-b69f04b7.entry.js +0 -1
  217. package/dist/pine-core/p-beb23781.entry.js +0 -1
  218. package/dist/pine-core/p-c36b490e.entry.js +0 -1
  219. package/dist/pine-core/p-ca0d48e8.entry.js +0 -1
  220. package/dist/pine-core/p-f474d7de.entry.js +0 -1
  221. package/dist/pine-core/p-qhdoK1Jp.system.js +0 -1
  222. /package/dist/esm-es5/{index-BJXk71tO.js → index-BWDu62Mo.js} +0 -0
  223. /package/dist/pine-core/{p-BJXk71tO.js → p-BWDu62Mo.js} +0 -0
  224. /package/dist/pine-core/{p-n3_ytl_p.system.js → p-ClDiSG97.system.js} +0 -0
@@ -50,8 +50,12 @@ const cssEscape = (value) => {
50
50
 
51
51
  const pdsPopoverCss = () => `:host{--sizing-max-width-default:352px;display:inline-block}:host .pds-popover__trigger-wrapper{display:inline-block}:host .pds-popover__content-slot-wrapper{display:none}`;
52
52
 
53
- /** Open auto popovers, in the order they opened: Escape goes to the last one it applies to. */
54
- const openAutoPopovers = [];
53
+ /** Open popovers that close on Escape, in the order they opened: Escape goes to the last one it applies to. */
54
+ const popoversTakingEscape = [];
55
+ /** Hovering the trigger waits this long before opening, so a pointer passing over it doesn't open it. */
56
+ const HOVER_OPEN_DELAY_MS = 120;
57
+ /** Leaving the trigger and panel waits this long before closing, which covers the gap between them. */
58
+ const HOVER_CLOSE_DELAY_MS = 200;
55
59
  /** The focused element, followed down through shadow roots to the control that has focus. */
56
60
  function deepActiveElement() {
57
61
  var _a;
@@ -111,11 +115,29 @@ const PdsPopover = class {
111
115
  * Timestamp when popover was opened (for preventing immediate close)
112
116
  */
113
117
  this.openTimestamp = 0;
118
+ /**
119
+ * Set while hover holds the popover open, until a click pins it or it closes
120
+ */
121
+ this.hoverOpened = false;
122
+ /**
123
+ * Set when the pointer left while focus was in the panel, so focus leaving it closes it instead
124
+ */
125
+ this.closeWhenFocusLeaves = false;
126
+ /**
127
+ * How far the pointer was from the panel at its last move after leaving the trigger
128
+ */
129
+ this.panelDistance = Infinity;
114
130
  /**
115
131
  * Determines the action that triggers the popover. For manual popovers, the consumer is responsible for toggling this value.
116
132
  * @defaultValue "show"
117
133
  */
118
134
  this.popoverTargetAction = 'show';
135
+ /**
136
+ * Determines how the popover opens. With `hover`, it also opens when the pointer rests on the trigger and closes
137
+ * when the pointer leaves, until a click on the trigger keeps it open. Enter or Space on the trigger opens it either way.
138
+ * @defaultValue "click"
139
+ */
140
+ this.openOn = 'click';
119
141
  /**
120
142
  * Determines the type of popover. Auto popovers can be "light dismissed" by clicking outside of the popover.
121
143
  * Manual popovers require the consumer to handle the visibility of the popover.
@@ -126,6 +148,11 @@ const PdsPopover = class {
126
148
  * @defaultValue 352
127
149
  */
128
150
  this.maxWidth = 352;
151
+ /**
152
+ * Sets the padding of the popover content
153
+ * @defaultValue "md"
154
+ */
155
+ this.padding = 'md';
129
156
  /**
130
157
  * Determines the preferred position of the popover
131
158
  * @defaultValue "right"
@@ -140,6 +167,7 @@ const PdsPopover = class {
140
167
  // Clean up previous trigger's event listener if it exists
141
168
  if (this.triggerEl != null) {
142
169
  this.triggerEl.removeEventListener('click', this.handleTriggerClick);
170
+ this.stopListeningForHover(this.triggerEl);
143
171
  }
144
172
  if (assignedElements.length > 0) {
145
173
  // Use the first assigned element as the trigger
@@ -147,6 +175,7 @@ const PdsPopover = class {
147
175
  this.linkTriggerToPortal();
148
176
  // Attach click listener to handle popover visibility
149
177
  this.triggerEl.addEventListener('click', this.handleTriggerClick);
178
+ this.listenForHover(this.triggerEl);
150
179
  }
151
180
  else {
152
181
  this.triggerEl = null;
@@ -173,6 +202,13 @@ const PdsPopover = class {
173
202
  if (!anchorWithHref) {
174
203
  event.preventDefault();
175
204
  }
205
+ if (this.openOn === 'hover' && this.popoverTargetAction !== 'hide') {
206
+ const heldByHover = this.hoverOpened;
207
+ this.pin();
208
+ // Pinning, not toggling: the hover before a click has already opened it.
209
+ if (heldByHover)
210
+ return;
211
+ }
176
212
  // Execute the appropriate action based on popoverTargetAction prop
177
213
  switch (this.popoverTargetAction) {
178
214
  case 'show':
@@ -187,6 +223,60 @@ const PdsPopover = class {
187
223
  break;
188
224
  }
189
225
  };
226
+ // A tap sends touch pointer events and then a click, so touch takes the click path alone.
227
+ this.handleHoverEnter = (event) => {
228
+ if (event.pointerType === 'touch')
229
+ return;
230
+ this.clearHoverTimers();
231
+ if (this.active)
232
+ return;
233
+ this.hoverOpenTimer = setTimeout(() => {
234
+ this.hoverOpenTimer = undefined;
235
+ if (this.active || this.portalEl == null)
236
+ return;
237
+ this.hoverOpened = true;
238
+ this.show();
239
+ }, HOVER_OPEN_DELAY_MS);
240
+ };
241
+ this.handleHoverLeave = (event) => {
242
+ if (event.pointerType === 'touch')
243
+ return;
244
+ this.clearHoverTimers();
245
+ if (!this.hoverOpened)
246
+ return;
247
+ this.hoverCloseTimer = setTimeout(this.closeFromHover, HOVER_CLOSE_DELAY_MS);
248
+ if (event.currentTarget !== this.triggerEl)
249
+ return;
250
+ this.panelDistance = this.distanceToPanel(event);
251
+ document.addEventListener('pointermove', this.handleMoveTowardPanel);
252
+ };
253
+ // A slow diagonal from the trigger to a panel shorter than it runs beside the panel for longer
254
+ // than the close delay, so each move that brings the pointer closer starts the delay again.
255
+ this.handleMoveTowardPanel = (event) => {
256
+ const distance = this.distanceToPanel(event);
257
+ if (distance < this.panelDistance) {
258
+ clearTimeout(this.hoverCloseTimer);
259
+ this.hoverCloseTimer = setTimeout(this.closeFromHover, HOVER_CLOSE_DELAY_MS);
260
+ }
261
+ this.panelDistance = distance;
262
+ };
263
+ this.handleHoverFocusOut = (event) => {
264
+ if (!this.closeWhenFocusLeaves || closest.containsComposed(this.portalEl, event.relatedTarget))
265
+ return;
266
+ this.closeWhenFocusLeaves = false;
267
+ this.hoverCloseTimer = setTimeout(this.closeFromHover, HOVER_CLOSE_DELAY_MS);
268
+ };
269
+ this.closeFromHover = () => {
270
+ this.clearHoverTimers();
271
+ if (!this.hoverOpened)
272
+ return;
273
+ // Content shown on hover stays while focus is in it (WCAG 1.4.13).
274
+ if (closest.containsComposed(this.portalEl, deepActiveElement())) {
275
+ this.closeWhenFocusLeaves = true;
276
+ return;
277
+ }
278
+ this.hide();
279
+ };
190
280
  /** The focus style copied into a shadow root the panel opened in, which `document.head` can't reach. */
191
281
  this.shadowFocusStyle = null;
192
282
  /** The dialog the panel was opened in, closed along with it. */
@@ -208,6 +298,32 @@ const PdsPopover = class {
208
298
  }
209
299
  };
210
300
  }
301
+ openOnChanged() {
302
+ this.pin();
303
+ this.stopListeningForHover(this.triggerEl);
304
+ this.stopListeningForHover(this.portalEl);
305
+ // Out of the page, connectedCallback binds them when it comes back.
306
+ if (!this.isComponentMounted)
307
+ return;
308
+ this.listenForHover(this.triggerEl);
309
+ this.listenForHover(this.portalEl);
310
+ }
311
+ applyPadding() {
312
+ if (this.portalEl != null)
313
+ this.portalEl.style.padding = this.paddingToken();
314
+ }
315
+ paddingToken() {
316
+ switch (this.padding) {
317
+ case 'none':
318
+ return 'var(--pine-dimension-none)';
319
+ case 'xs':
320
+ return 'var(--pine-dimension-xs)';
321
+ case 'sm':
322
+ return 'var(--pine-dimension-sm)';
323
+ default:
324
+ return 'var(--pine-dimension-md)';
325
+ }
326
+ }
211
327
  restorePlacementDefault(newValue) {
212
328
  this.placement = reflectedAttributeDefault.restoreReflectedDefault(this.el, 'placement', newValue, 'right');
213
329
  }
@@ -258,6 +374,48 @@ const PdsPopover = class {
258
374
  // Skips values already in place, so the trigger observer's own callback doesn't loop.
259
375
  return attributes.setAttributesIfChanged(this.triggerEl, { 'aria-expanded': String(this.active), 'aria-controls': this.portalEl.id });
260
376
  }
377
+ listenForHover(el) {
378
+ if (this.openOn !== 'hover' || el == null)
379
+ return;
380
+ el.addEventListener('pointerenter', this.handleHoverEnter);
381
+ el.addEventListener('pointerleave', this.handleHoverLeave);
382
+ el.addEventListener('focusout', this.handleHoverFocusOut);
383
+ }
384
+ stopListeningForHover(el) {
385
+ if (el == null)
386
+ return;
387
+ el.removeEventListener('pointerenter', this.handleHoverEnter);
388
+ el.removeEventListener('pointerleave', this.handleHoverLeave);
389
+ el.removeEventListener('focusout', this.handleHoverFocusOut);
390
+ }
391
+ distanceToPanel({ clientX, clientY }) {
392
+ const panel = this.portalEl.getBoundingClientRect();
393
+ return Math.hypot(Math.max(panel.left - clientX, 0, clientX - panel.right), Math.max(panel.top - clientY, 0, clientY - panel.bottom));
394
+ }
395
+ /**
396
+ * Keeps a popover that hover opened open, closing from then on as one opened by a click does. A
397
+ * manual one gives up Escape again, which it took only while hover held it.
398
+ */
399
+ pin() {
400
+ var _a;
401
+ this.clearHoverTimers();
402
+ if (!this.hoverOpened)
403
+ return;
404
+ this.hoverOpened = false;
405
+ if (this.popoverType === 'auto')
406
+ return;
407
+ this.forgetOpen();
408
+ (_a = this.portalEl) === null || _a === void 0 ? void 0 : _a.removeAttribute('data-pds-popover-open');
409
+ document.removeEventListener('keydown', this.boundEscapeKeyHandler);
410
+ }
411
+ clearHoverTimers() {
412
+ clearTimeout(this.hoverOpenTimer);
413
+ clearTimeout(this.hoverCloseTimer);
414
+ this.hoverOpenTimer = undefined;
415
+ this.hoverCloseTimer = undefined;
416
+ this.closeWhenFocusLeaves = false;
417
+ document.removeEventListener('pointermove', this.handleMoveTowardPanel);
418
+ }
261
419
  // componentDidLoad doesn't run again when a popover comes back, so rebuild whatever
262
420
  // disconnectedCallback tore down. Each step is a no-op when nothing was.
263
421
  connectedCallback() {
@@ -267,6 +425,7 @@ const PdsPopover = class {
267
425
  this.isComponentMounted = true;
268
426
  this.createPortal();
269
427
  (_a = this.triggerEl) === null || _a === void 0 ? void 0 : _a.addEventListener('click', this.handleTriggerClick);
428
+ this.listenForHover(this.triggerEl);
270
429
  this.observeTrigger();
271
430
  this.linkTriggerToPortal();
272
431
  // Still open after a move: the trigger moved, so the portal follows it, into the dialog it
@@ -301,6 +460,7 @@ const PdsPopover = class {
301
460
  if (this.triggerEl != null) {
302
461
  this.triggerEl.removeEventListener('click', this.handleTriggerClick);
303
462
  }
463
+ this.stopListeningForHover(this.triggerEl);
304
464
  (_a = this.triggerObserver) === null || _a === void 0 ? void 0 : _a.disconnect();
305
465
  this.triggerObserver = null;
306
466
  // Clean up all event listeners
@@ -309,6 +469,8 @@ const PdsPopover = class {
309
469
  document.removeEventListener('submit', this.handleSubmitFromPanel, true);
310
470
  // Clear any pending debounce timers
311
471
  this.clearDebounceTimers();
472
+ this.clearHoverTimers();
473
+ this.hoverOpened = false;
312
474
  // Remove portal from DOM
313
475
  this.removePortal();
314
476
  }
@@ -342,7 +504,7 @@ const PdsPopover = class {
342
504
  this.portalEl.style.borderRadius = 'var(--pine-dimension-125)';
343
505
  this.portalEl.style.boxShadow = 'var(--pine-box-shadow-200)';
344
506
  this.portalEl.style.margin = 'var(--pine-dimension-none)';
345
- this.portalEl.style.padding = 'var(--pine-dimension-md)';
507
+ this.portalEl.style.padding = this.paddingToken();
346
508
  // Generate unique ID
347
509
  if (!this.componentId) {
348
510
  (_a = this.generatedPortalId) !== null && _a !== void 0 ? _a : (this.generatedPortalId = `pds-popover-portal-${PdsPopover.instanceCounter++}`);
@@ -356,6 +518,7 @@ const PdsPopover = class {
356
518
  // Add global focus styles to match Pine design system
357
519
  // This is done after appending to ensure it's part of the document and can access CSS variables
358
520
  this.addPortalFocusStyles();
521
+ this.listenForHover(this.portalEl);
359
522
  }
360
523
  /**
361
524
  * Adds Pine design system focus styles and dark mode border to the portal element
@@ -483,8 +646,8 @@ const PdsPopover = class {
483
646
  // Update portal content with latest slot content
484
647
  this.updatePortalContent();
485
648
  // Show portal. The attribute tells a modal around it that this popover takes Escape first; only
486
- // an auto popover listens for Escape.
487
- if (this.popoverType === 'auto')
649
+ // an auto popover, or one hover opened, listens for Escape.
650
+ if (this.popoverType === 'auto' || this.hoverOpened)
488
651
  this.portalEl.setAttribute('data-pds-popover-open', '');
489
652
  this.portalEl.style.display = 'block';
490
653
  this.portalEl.style.opacity = '1';
@@ -498,11 +661,16 @@ const PdsPopover = class {
498
661
  // Add scroll and resize listeners for repositioning (always)
499
662
  this.addScrollAndResizeListeners();
500
663
  document.addEventListener('submit', this.handleSubmitFromPanel, true);
501
- // Add document listeners for light dismiss and escape key (auto type only)
664
+ // Add document listeners for light dismiss and escape key (auto type only), or for the escape
665
+ // key alone while hover holds a manual popover open
502
666
  if (this.popoverType === 'auto') {
503
- openAutoPopovers.push(this);
667
+ popoversTakingEscape.push(this);
504
668
  this.addLightDismissListeners();
505
669
  }
670
+ else if (this.hoverOpened) {
671
+ popoversTakingEscape.push(this);
672
+ document.addEventListener('keydown', this.boundEscapeKeyHandler);
673
+ }
506
674
  // Emit open event
507
675
  this.pdsPopoverOpen.emit({
508
676
  componentId: this.componentId,
@@ -513,9 +681,11 @@ const PdsPopover = class {
513
681
  * Closes the popover programmatically
514
682
  */
515
683
  async hide() {
684
+ this.clearHoverTimers();
516
685
  if (!this.active || !this.portalEl)
517
686
  return;
518
687
  this.active = false;
688
+ this.hoverOpened = false;
519
689
  this.unwatchDialogClose();
520
690
  // Restoring the content drops its focus to the body, so check where focus is first. In a
521
691
  // shadow root, document.activeElement is only its host.
@@ -594,9 +764,9 @@ const PdsPopover = class {
594
764
  this.portalEl.style.border = root instanceof ShadowRoot && closest.closest('[data-theme="dark"]', this.el) ? 'var(--pine-border)' : '';
595
765
  }
596
766
  forgetOpen() {
597
- const index = openAutoPopovers.indexOf(this);
767
+ const index = popoversTakingEscape.indexOf(this);
598
768
  if (index >= 0)
599
- openAutoPopovers.splice(index, 1);
769
+ popoversTakingEscape.splice(index, 1);
600
770
  }
601
771
  /**
602
772
  * Whether an Escape is this popover's. One from a dialog the popover isn't in belongs to that
@@ -705,7 +875,7 @@ const PdsPopover = class {
705
875
  return;
706
876
  // Like the native Popover API, Escape closes only the top popover: the last one opened that
707
877
  // it applies to. Every open popover hears it, so each checks whether it's that one.
708
- const top = [...openAutoPopovers].reverse().find(popover => popover.takesEscapeFrom(event));
878
+ const top = [...popoversTakingEscape].reverse().find(popover => popover.takesEscapeFrom(event));
709
879
  if (top !== this)
710
880
  return;
711
881
  // Take the key, so the dialog or modal around it doesn't close too.
@@ -830,10 +1000,16 @@ const PdsPopover = class {
830
1000
  }, 16); // ~1 frame at 60fps
831
1001
  }
832
1002
  render() {
833
- return (index.h(index.Host, { key: 'da8a0c715df1199231b1265085f3f9ae0234032d', id: this.componentId }, index.h("span", { key: 'f35023492399420829cec2e88556462f5ac1663e', class: "pds-popover__trigger-wrapper" }, index.h("slot", { key: '38ebe92eebb87665467b3f92ff94dc8095450063', name: "trigger", onSlotchange: this.handleTriggerSlotChange })), index.h("div", { key: '8917930f4520544d14bbd68b4c7936dd60af19e3', class: "pds-popover__content-slot-wrapper" }, index.h("slot", { key: '28d3f9112256edd95721a79a7072a9e35a3712bf', onSlotchange: this.handleContentSlotChange }))));
1003
+ return (index.h(index.Host, { key: 'e48b897acdc9e89f2e6b1449e7a358da7da1060c', id: this.componentId }, index.h("span", { key: 'b83b2c234b07703c2c850a9991c94939ed2fdaf7', class: "pds-popover__trigger-wrapper" }, index.h("slot", { key: '0a7f7829ee445fd57cf824ebee1409b3c571f983', name: "trigger", onSlotchange: this.handleTriggerSlotChange })), index.h("div", { key: '8c1fe2d4d7c4342b4bd5eb4c56e596f17b4e14fa', class: "pds-popover__content-slot-wrapper" }, index.h("slot", { key: '4ccfce1f335acbc436f7942e497f5d360f849d48', onSlotchange: this.handleContentSlotChange }))));
834
1004
  }
835
1005
  get el() { return index.getElement(this); }
836
1006
  static get watchers() { return {
1007
+ "openOn": [{
1008
+ "openOnChanged": 0
1009
+ }],
1010
+ "padding": [{
1011
+ "applyPadding": 0
1012
+ }],
837
1013
  "placement": [{
838
1014
  "restorePlacementDefault": 0
839
1015
  }]
@@ -2,7 +2,7 @@
2
2
 
3
3
  var index = require('./index-jl_Q819j.js');
4
4
  var form = require('./form-MhwfKTuo.js');
5
- var index$1 = require('./index-5Azb8EQG.js');
5
+ var index$1 = require('./index-Do70atou.js');
6
6
  require('./keep-hydrated-CiXgkEYd.js');
7
7
 
8
8
  const pdsRadioGroupCss = () => `.sc-pds-radio-group-h{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;gap:var(--pine-dimension-sm)}.is-invalid.sc-pds-radio-group-h .pds-radio-group__message--error.sc-pds-radio-group{color:var(--pine-color-text-message-danger)}.pds-radio-group__label.sc-pds-radio-group{color:var(--pine-color-text-label);font:var(--pine-typography-heading-6);font-weight:var(--pine-font-weight-medium);letter-spacing:var(--pine-letter-spacing-heading-6)}.pds-radio-group__radios.sc-pds-radio-group{display:-ms-flexbox;display:flex;gap:var(--pds-radio-group-gap, var(--pine-dimension-xs))}.pds-radio-group__radios--row.sc-pds-radio-group{-ms-flex-align:start;align-items:flex-start;-ms-flex-direction:row;flex-direction:row;-ms-flex-wrap:wrap;flex-wrap:wrap}.pds-radio-group__radios--column.sc-pds-radio-group{-ms-flex-direction:column;flex-direction:column}.pds-radio-group__message.sc-pds-radio-group{color:var(--pine-color-text-message);font:var(--pine-typography-body);width:100%}.pds-radio-group__message--error.sc-pds-radio-group{display:-ms-flexbox;display:flex;gap:var(--pine-dimension-2xs)}.pds-radio-group__message--error.sc-pds-radio-group pds-icon.sc-pds-radio-group{-webkit-margin-before:var(--pine-dimension-050);margin-block-start:var(--pine-dimension-050)}`;
@@ -171,7 +171,7 @@ const PdsRadioGroup = class {
171
171
  'pds-radio-group__radios': true,
172
172
  'pds-radio-group__radios--row': this.direction === 'row',
173
173
  'pds-radio-group__radios--column': this.direction === 'column',
174
- } }, index.h("slot", { key: 'd88dde3c631e25c01bc7b6d3ef5d517255fabd1a', onSlotchange: () => this.updateChildRadios() })), this.helperMessage && (index.h("div", { key: 'a229214ed01663b0fc34f35e27c7148b4eb412ab', class: "pds-radio-group__message", id: form.messageId(this._groupId, 'helper') }, this.helperMessage)), this.errorMessage && (index.h("div", { key: 'dc092f2e6dbef0cb369cf00a6eccf9a095a0313d', class: "pds-radio-group__message pds-radio-group__message--error", id: form.messageId(this._groupId, 'error'), "aria-live": "assertive" }, index.h("pds-icon", { key: 'd242da328731e55fa52d8e624fdfc750bfa6cce4', icon: index$1.danger, size: "small" }), this.errorMessage))));
174
+ } }, index.h("slot", { key: 'd88dde3c631e25c01bc7b6d3ef5d517255fabd1a', onSlotchange: () => this.updateChildRadios() })), this.helperMessage && (index.h("div", { key: 'a229214ed01663b0fc34f35e27c7148b4eb412ab', class: "pds-radio-group__message", id: form.messageId(this._groupId, 'helper') }, this.helperMessage)), this.errorMessage && (index.h("div", { key: 'dc092f2e6dbef0cb369cf00a6eccf9a095a0313d', class: "pds-radio-group__message pds-radio-group__message--error", id: form.messageId(this._groupId, 'error'), "aria-live": "assertive" }, index.h("pds-icon", { key: '83b0129d3d45b74ef1f53acc923387b2de7f079b', "aria-hidden": "true", icon: index$1.danger, size: "small" }), this.errorMessage))));
175
175
  }
176
176
  get el() { return index.getElement(this); }
177
177
  static get watchers() { return {
@@ -3,7 +3,7 @@
3
3
  var index = require('./index-jl_Q819j.js');
4
4
  var attributes = require('./attributes-BJ7KBHql.js');
5
5
  var form = require('./form-MhwfKTuo.js');
6
- var index$1 = require('./index-5Azb8EQG.js');
6
+ var index$1 = require('./index-Do70atou.js');
7
7
  require('./keep-hydrated-CiXgkEYd.js');
8
8
 
9
9
  const labelCss = () => `.sc-pds-radio-h{display:inline-block}[aria-disabled=true].sc-pds-radio-h label.sc-pds-radio{color:var(--pine-color-text-label-disabled)}[aria-readonly=true].sc-pds-radio-h label.sc-pds-radio{color:var(--pine-color-text-label-readonly)}label.sc-pds-radio{color:var(--pine-color-text-label);font:var(--pine-typography-body-medium);letter-spacing:var(--pine-letter-spacing)}`;
@@ -106,11 +106,11 @@ const PdsRadio = class {
106
106
  const renderLabelAndMessages = () => [
107
107
  index.h("label", { htmlFor: this.componentId, key: `${this.componentId}-label` }, index.h("input", { key: 'ccd618855831bcee309e815f2cd2712fd4e8fe1f', "aria-describedby": form.assignDescription(this.componentId, this.invalid, this.helperMessage, this.errorMessage), "aria-invalid": this.invalid ? "true" : undefined, type: "radio", id: this.componentId, name: this.name, value: this.value, checked: this.checked, required: this.required, disabled: this.disabled, onChange: this.handleRadioChange, class: this.hasImage() ? 'visually-hidden' : '' }), index.h("span", { key: '2e372a880c28f48fb804bac2518208082c141fad', class: this.hideLabel ? 'visually-hidden' : '' }, this.label)),
108
108
  this.helperMessage && (index.h("div", { key: `${this.componentId}-helper`, class: 'pds-radio__message', id: form.messageId(this.componentId, 'helper') }, this.helperMessage)),
109
- this.errorMessage && (index.h("div", { key: `${this.componentId}-error`, class: `pds-radio__message pds-radio__message--error`, id: form.messageId(this.componentId, 'error'), "aria-live": "assertive" }, index.h("pds-icon", { key: '889d502575f6a162f450b6b58d76a6f6f1c74e4b', icon: index$1.danger, size: "small" }), this.errorMessage))
109
+ this.errorMessage && (index.h("div", { key: `${this.componentId}-error`, class: `pds-radio__message pds-radio__message--error`, id: form.messageId(this.componentId, 'error'), "aria-live": "assertive" }, index.h("pds-icon", { key: '08e7a2319eddc1d314ee9dddd51a5ce88cd4ae48', "aria-hidden": "true", icon: index$1.danger, size: "small" }), this.errorMessage))
110
110
  ];
111
111
  const hostClass = this.classNames();
112
112
  this.hostKeeper.record(hostClass);
113
- return (index.h(index.Host, { key: '374003032b28407581a55f1fb0a304c49acf3c16', class: hostClass }, this.hasImage() && (index.h("div", { key: '7eeb516267de1afcfa85fc7567999db488c2f4f5', class: "pds-radio__image-container", part: "image-container" }, index.h("slot", { key: 'a312fea06f0c015bffab3bb392ff04d4913fd1c0', name: "image", onSlotchange: () => (this._hasImage = this.hasImageSlot()) }))), this.hasImage() ? (index.h("div", { class: "pds-radio__content-wrapper" }, renderLabelAndMessages())) : (renderLabelAndMessages())));
113
+ return (index.h(index.Host, { key: '351376552abee90f50c3aceb03ecf8a81ae1b82b', class: hostClass }, this.hasImage() && (index.h("div", { key: 'fd85fd36b2ebd99b12c3bb2a13cf3d3e3c26530f', class: "pds-radio__image-container", part: "image-container" }, index.h("slot", { key: 'abe75dbe38d29340b805f70861b084c1b3836be9', name: "image", onSlotchange: () => (this._hasImage = this.hasImageSlot()) }))), this.hasImage() ? (index.h("div", { class: "pds-radio__content-wrapper" }, renderLabelAndMessages())) : (renderLabelAndMessages())));
114
114
  }
115
115
  get el() { return index.getElement(this); }
116
116
  };
@@ -3,7 +3,7 @@
3
3
  var index = require('./index-jl_Q819j.js');
4
4
  var attributes = require('./attributes-BJ7KBHql.js');
5
5
  var form = require('./form-MhwfKTuo.js');
6
- var index$1 = require('./index-5Azb8EQG.js');
6
+ var index$1 = require('./index-Do70atou.js');
7
7
  require('./keep-hydrated-CiXgkEYd.js');
8
8
 
9
9
  const pdsSelectTokensCss = () => `:host{--pine-select-color-background-danger:var(--pine-color-red-050)}`;
@@ -2,7 +2,7 @@
2
2
 
3
3
  var index = require('./index-jl_Q819j.js');
4
4
  var attributes = require('./attributes-BJ7KBHql.js');
5
- var index$1 = require('./index-5Azb8EQG.js');
5
+ var index$1 = require('./index-Do70atou.js');
6
6
  require('./keep-hydrated-CiXgkEYd.js');
7
7
 
8
8
  const pdsSortableItemCss = () => `.pds-sortable-item.sc-pds-sortable-item-h{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;padding-block:var(--pine-dimension-xs);padding-inline:var(--pine-dimension-md)}.pds-sortable-item.sc-pds-sortable-item-h .pds-sortable-item__actions.sc-pds-sortable-item{-webkit-margin-start:auto;margin-inline-start:auto;-webkit-padding-start:var(--pine-dimension-md);padding-inline-start:var(--pine-dimension-md)}.pds-sortable-item.sc-pds-sortable-item-h .pds-sortable-item__handle.sc-pds-sortable-item{line-height:1;-webkit-margin-end:var(--pine-dimension-md);margin-inline-end:var(--pine-dimension-md)}.pds-sortable--bordered .pds-sortable-item.sc-pds-sortable-item-h:first-child{border-start-end-radius:calc(var(--pine-dimension-xs) * 1.25);border-start-start-radius:calc(var(--pine-dimension-xs) * 1.25)}.pds-sortable--bordered .pds-sortable-item.sc-pds-sortable-item-h:last-child{border-end-end-radius:calc(var(--pine-dimension-xs) * 1.25);border-end-start-radius:calc(var(--pine-dimension-xs) * 1.25)}.pds-sortable--divided .pds-sortable-item.sc-pds-sortable-item-h{-webkit-border-after:var(--pine-border);border-block-end:var(--pine-border)}.pds-sortable--divided .pds-sortable-item.sc-pds-sortable-item-h:last-child{-webkit-border-after:0;border-block-end:0}.pds-sortable--handle-type-row .pds-sortable-item.sc-pds-sortable-item-h{cursor:-webkit-grab;cursor:grab}.pds-sortable--handle-type-handle .pds-sortable-item.sc-pds-sortable-item-h .pds-sortable-item__handle.sc-pds-sortable-item{cursor:-webkit-grab;cursor:grab}.pds-sortable--disabled .pds-sortable-item.sc-pds-sortable-item-h{cursor:not-allowed;opacity:0.5}.pds-sortable--disabled .pds-sortable-item.sc-pds-sortable-item-h .pds-sortable-item__handle.sc-pds-sortable-item{cursor:not-allowed}.pds-sortable--disabled .pds-sortable-item.sc-pds-sortable-item-h:hover{background-color:transparent}.pds-sortable:not(.pds-sortable--disabled) .pds-sortable-item.sc-pds-sortable-item-h:hover{background-color:var(--pine-color-background-container-hover)}.pds-sortable:not(.pds-sortable--disabled) .pds-sortable-item.sc-pds-sortable-item-h:hover pds-icon.sc-pds-sortable-item{color:var(--pine-color-info)}.pds-sortable-item--drag.sc-pds-sortable-item-h{background-color:var(--pine-color-background-container);border-radius:0;-webkit-box-shadow:var(--pine-box-shadow-400);box-shadow:var(--pine-box-shadow-400);opacity:1}.pds-sortable-item--ghost.sc-pds-sortable-item-h{background-color:var(--pine-color-background-container-hover);border-radius:0}`;
@@ -2,7 +2,7 @@
2
2
 
3
3
  var index = require('./index-jl_Q819j.js');
4
4
  var form = require('./form-MhwfKTuo.js');
5
- var index$1 = require('./index-5Azb8EQG.js');
5
+ var index$1 = require('./index-Do70atou.js');
6
6
  var attributes = require('./attributes-BJ7KBHql.js');
7
7
  require('./keep-hydrated-CiXgkEYd.js');
8
8
 
@@ -122,7 +122,7 @@ const PdsSwitch = class {
122
122
  this.hostKeeper.record(hostClass, {}, { 'aria-disabled': ariaDisabled });
123
123
  return (index.h(index.Host, { key: 'b8bd2870be101081aa8a65cdee45397bc4c21435', class: hostClass, "aria-disabled": ariaDisabled }, index.h("label", { key: '1e223f22f7fc6c576098353ad67dc11500def8b4', htmlFor: this.componentId }, index.h("input", Object.assign({ key: 'edf59869e165a65b97465ea9de06f7ea82fbc9a6', "aria-describedby": form.assignDescription(this.componentId, this.invalid, this.helperMessage, this.errorMessage), "aria-invalid": this.invalid ? "true" : undefined, checked: this.checked, class: "pds-switch__input", disabled: this.disabled, id: this.componentId, name: this.name ? this.name : this.componentId, onChange: this.onSwitchUpdate, required: this.required, type: "checkbox", value: this.value }, this.inheritedAttributes)), index.h("span", { key: '1c252b9455471069f8c6ea6c13f2e88c99308b41', class: this.hideLabel ? 'visually-hidden' : '' }, index.h("slot", { key: 'ce0d471918bd3018f5e55d0d1e6c5c2247790f81', name: "label", onSlotchange: this.updateHasLabelSlot }), !this.hasLabelSlot && this.label)), this.helperMessage &&
124
124
  index.h("div", { key: '64874b15403f1f42344715ac34febdfb8d94042a', class: `pds-switch__message`, id: form.messageId(this.componentId, 'helper') }, this.helperMessage), this.errorMessage &&
125
- index.h("div", { key: '560ea486859124bb0ac2f75ab4bd34b0bca7efbc', class: `pds-switch__message pds-switch__message--error`, id: form.messageId(this.componentId, 'error'), "aria-live": "assertive" }, index.h("pds-icon", { key: 'f49caaba976579eb5588e442499595c7dba7ceff', icon: index$1.danger, size: "small" }), this.errorMessage)));
125
+ index.h("div", { key: '560ea486859124bb0ac2f75ab4bd34b0bca7efbc', class: `pds-switch__message pds-switch__message--error`, id: form.messageId(this.componentId, 'error'), "aria-live": "assertive" }, index.h("pds-icon", { key: '2ae8dc876745af26fa2418f2265248aeb8f97a2b', "aria-hidden": "true", icon: index$1.danger, size: "small" }), this.errorMessage)));
126
126
  }
127
127
  static get formAssociated() { return true; }
128
128
  get el() { return index.getElement(this); }
@@ -2,7 +2,7 @@
2
2
 
3
3
  var index = require('./index-jl_Q819j.js');
4
4
  var scroll = require('./scroll-2XcoE_6Q.js');
5
- var truncationTooltip = require('./truncation-tooltip-DO9xli2e.js');
5
+ var truncationTooltip = require('./truncation-tooltip-BtuiXLV0.js');
6
6
  require('./keep-hydrated-CiXgkEYd.js');
7
7
  require('./floating-ui.dom-Dc8Anyel.js');
8
8
 
@@ -1,7 +1,7 @@
1
1
  'use strict';
2
2
 
3
3
  var index = require('./index-jl_Q819j.js');
4
- var index$1 = require('./index-5Azb8EQG.js');
4
+ var index$1 = require('./index-Do70atou.js');
5
5
  var scroll = require('./scroll-2XcoE_6Q.js');
6
6
  require('./keep-hydrated-CiXgkEYd.js');
7
7
 
@@ -211,7 +211,7 @@ const PdsTableHeadCell = class {
211
211
  this.tableRef.fixedColumn &&
212
212
  this.tableRef.selectable
213
213
  ? { '--fixed-cell-position': '40px' }
214
- : {} }, index.h("slot", { key: '96084d87a34d7b601a8e8325f344f1fe6601204e' }), this.sortable && this.isActive && (index.h("pds-icon", { key: 'cba838fa029b280561676c2b57af7f8f00055511', icon: this.sortingDirection === 'asc' ? index$1.upSmall : index$1.downSmall, part: "sort-icon" }))));
214
+ : {} }, index.h("slot", { key: '96084d87a34d7b601a8e8325f344f1fe6601204e' }), this.sortable && this.isActive && (index.h("pds-icon", { key: '79606519d810dc9882a91cbc3b6a199457086631', icon: this.sortingDirection === 'asc' ? index$1.upSmall : index$1.downSmall, part: "sort-icon", "aria-hidden": "true" }))));
215
215
  }
216
216
  get hostElement() { return index.getElement(this); }
217
217
  };
@@ -2,7 +2,7 @@
2
2
 
3
3
  var index = require('./index-jl_Q819j.js');
4
4
  var utils = require('./utils-BhRmyxT8.js');
5
- var truncationTooltip = require('./truncation-tooltip-DO9xli2e.js');
5
+ var truncationTooltip = require('./truncation-tooltip-BtuiXLV0.js');
6
6
  var index$1 = require('./index.cjs.js');
7
7
  require('./keep-hydrated-CiXgkEYd.js');
8
8
  require('./floating-ui.dom-Dc8Anyel.js');
@@ -4,7 +4,7 @@ var index = require('./index-jl_Q819j.js');
4
4
  var form = require('./form-MhwfKTuo.js');
5
5
  var utils = require('./utils-BhRmyxT8.js');
6
6
  var attributes = require('./attributes-BJ7KBHql.js');
7
- var index$1 = require('./index-5Azb8EQG.js');
7
+ var index$1 = require('./index-Do70atou.js');
8
8
  var i18nFormat = require('./i18n-format-BD0PmYzT.js');
9
9
  require('./keep-hydrated-CiXgkEYd.js');
10
10
 
@@ -322,7 +322,7 @@ const PdsTextarea = class {
322
322
  return (index.h(index.Host, { key: '5933dab0c3cd25b1cf2f6851ece8e8064bc7f3b9', "aria-disabled": this.disabled ? 'true' : null, "aria-readonly": this.readonly ? 'true' : null, "has-action": this.hasAction && !this.hideLabel ? 'true' : null }, index.h("div", { key: '4f1752514d8e5b0f0e3439515cb9e5f043607da1', class: "pds-textarea" }, this.label &&
323
323
  index.h("div", { key: 'd4e6df0b381d781b70eeae72ff2f0e9428c0d901', class: "pds-textarea__label-wrapper" }, index.h("label", { key: '747d82067eb571d02840cfd981865821099f288b', htmlFor: this.componentId }, index.h("span", { key: 'bfab6e8ede66d0169dd020b7dd97e125aba417b0', class: this.hideLabel ? 'visually-hidden' : '' }, this.label)), !this.hideLabel && this.renderAction()), index.h("div", { key: 'a18611c03270e7491c1af69f931419c832192c06', class: "pds-textarea__field-wrapper" }, index.h("textarea", Object.assign({ key: '868382c7b04a4e59c0daa9d98afcdc9048f6224f', ref: (el) => this.nativeTextarea = el, "aria-describedby": form.assignDescription(this.componentId, this.invalid, this.helperMessage, this.errorMessage), "aria-invalid": this.invalid ? "true" : undefined, autocomplete: this.autocomplete, class: this.textareaClassNames(), disabled: this.disabled, id: this.componentId, maxlength: this.maxLength, name: this.name, placeholder: this.placeholder, readOnly: this.readonly, required: this.required, rows: this.rows, onBlur: this.onBlur, onChange: this.onTextareaChange, onFocus: this.onFocus, onInput: this.onInput, onKeyDown: this.onKeyDown }, this.inheritedAttributes), value), this.renderCharacterCounter()), this.helperMessage &&
324
324
  index.h("p", { key: 'dcb36f21443d2a782c25b7c29c4ce6215f3b212b', class: "pds-textarea__helper-message", id: form.messageId(this.componentId, 'helper') }, this.helperMessage), this.invalid &&
325
- index.h("p", { key: 'be30fb1a38453296e26b775955389c0ec569df67', "aria-live": "assertive", class: "pds-textarea__error-message", id: form.messageId(this.componentId, 'error') }, index.h("pds-icon", { key: 'd93dce10d9d9db5815ac5f331848940aed735ba0', icon: index$1.danger, size: "small" }), this.errorMessage))));
325
+ index.h("p", { key: 'be30fb1a38453296e26b775955389c0ec569df67', "aria-live": "assertive", class: "pds-textarea__error-message", id: form.messageId(this.componentId, 'error') }, index.h("pds-icon", { key: '853f06489ef6ca50205799659d221bd3bea7d8da', "aria-hidden": "true", icon: index$1.danger, size: "small" }), this.errorMessage))));
326
326
  }
327
327
  static get formAssociated() { return true; }
328
328
  get el() { return index.getElement(this); }
@@ -132,7 +132,7 @@ const PdsToast = class {
132
132
  'pds-toast--animating-out': this.isAnimatingOut
133
133
  }, role: "alert", "aria-live": "polite" }, this.renderIcon(), index.h("span", { key: 'eaf615d41c138e2c73088d29bac9349f49a63ba7', class: "pds-toast__message" }, index.h("slot", { key: '33973447154d80b016f5a7954b0473db03228379' })), this.dismissible && (index.h("button", { key: 'e189834633e1e648282ee43633fd05e53ce38869', type: "button", part: "dismiss", class: "pds-toast__button", onClick: () => {
134
134
  this.dismiss();
135
- }, "aria-label": this.dismissLabel }, index.h("pds-icon", { key: '623a0e4d56e30781fb31bcd085511c17a4777edc', name: "remove" }))))));
135
+ }, "aria-label": this.dismissLabel }, index.h("pds-icon", { key: '913201979e52be743ba933ff173e023b81553362', name: "remove", "aria-hidden": "true" }))))));
136
136
  }
137
137
  get el() { return index.getElement(this); }
138
138
  static get watchers() { return {