@pine-ds/core 3.16.3 → 3.18.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 (334) hide show
  1. package/components/index2.js +1 -1
  2. package/components/index2.js.map +1 -1
  3. package/components/pds-button2.js +18 -6
  4. package/components/pds-button2.js.map +1 -1
  5. package/components/pds-copytext.js +49 -1
  6. package/components/pds-copytext.js.map +1 -1
  7. package/components/pds-multiselect.js +66 -15
  8. package/components/pds-multiselect.js.map +1 -1
  9. package/components/pds-table-cell2.js +36 -3
  10. package/components/pds-table-cell2.js.map +1 -1
  11. package/components/pds-table-head.js +1 -1
  12. package/components/pds-table-head.js.map +1 -1
  13. package/components/pds-table-row.js +3 -3
  14. package/components/pds-table-row.js.map +1 -1
  15. package/components/pds-table.js +12 -4
  16. package/components/pds-table.js.map +1 -1
  17. package/components/pds-text2.js +41 -1
  18. package/components/pds-text2.js.map +1 -1
  19. package/components/truncation-tooltip.js +247 -0
  20. package/components/truncation-tooltip.js.map +1 -0
  21. package/dist/cjs/{index-DkQebouX.js → index-CjhTEk39.js} +3 -3
  22. package/dist/cjs/index-CjhTEk39.js.map +1 -0
  23. package/dist/cjs/loader.cjs.js +1 -1
  24. package/dist/cjs/pds-accordion.cjs.entry.js +1 -1
  25. package/dist/cjs/pds-avatar.cjs.entry.js +1 -1
  26. package/dist/cjs/pds-button.cjs.entry.js +16 -6
  27. package/dist/cjs/pds-button.entry.cjs.js.map +1 -1
  28. package/dist/cjs/pds-checkbox.cjs.entry.js +1 -1
  29. package/dist/cjs/pds-chip.cjs.entry.js +1 -1
  30. package/dist/cjs/pds-copytext.cjs.entry.js +48 -2
  31. package/dist/cjs/pds-copytext.entry.cjs.js.map +1 -1
  32. package/dist/cjs/pds-filter.cjs.entry.js +1 -1
  33. package/dist/cjs/pds-input.cjs.entry.js +1 -1
  34. package/dist/cjs/pds-link.cjs.entry.js +1 -1
  35. package/dist/cjs/pds-multiselect.cjs.entry.js +62 -15
  36. package/dist/cjs/pds-multiselect.entry.cjs.js.map +1 -1
  37. package/dist/cjs/pds-radio-group.cjs.entry.js +1 -1
  38. package/dist/cjs/pds-radio.cjs.entry.js +1 -1
  39. package/dist/cjs/pds-select.cjs.entry.js +1 -1
  40. package/dist/cjs/pds-sortable-item.cjs.entry.js +1 -1
  41. package/dist/cjs/pds-switch.cjs.entry.js +1 -1
  42. package/dist/cjs/pds-table-cell.cjs.entry.js +35 -3
  43. package/dist/cjs/pds-table-cell.entry.cjs.js.map +1 -1
  44. package/dist/cjs/pds-table-head-cell.cjs.entry.js +1 -1
  45. package/dist/cjs/pds-table-head.cjs.entry.js +1 -1
  46. package/dist/cjs/pds-table-head.entry.cjs.js.map +1 -1
  47. package/dist/cjs/pds-table-row.cjs.entry.js +3 -3
  48. package/dist/cjs/pds-table-row.entry.cjs.js.map +1 -1
  49. package/dist/cjs/pds-table.cjs.entry.js +11 -4
  50. package/dist/cjs/pds-table.entry.cjs.js.map +1 -1
  51. package/dist/cjs/pds-text.cjs.entry.js +40 -1
  52. package/dist/cjs/pds-text.entry.cjs.js.map +1 -1
  53. package/dist/cjs/pds-textarea.cjs.entry.js +1 -1
  54. package/dist/cjs/pine-core.cjs.js +1 -1
  55. package/dist/cjs/truncation-tooltip-BGGnm8SZ.js +249 -0
  56. package/dist/cjs/truncation-tooltip-BGGnm8SZ.js.map +1 -0
  57. package/dist/collection/components/pds-button/pds-button.css +1 -1
  58. package/dist/collection/components/pds-button/pds-button.js +20 -4
  59. package/dist/collection/components/pds-button/pds-button.js.map +1 -1
  60. package/dist/collection/components/pds-copytext/pds-copytext.js +52 -2
  61. package/dist/collection/components/pds-copytext/pds-copytext.js.map +1 -1
  62. package/dist/collection/components/pds-multiselect/pds-multiselect.js +155 -14
  63. package/dist/collection/components/pds-multiselect/pds-multiselect.js.map +1 -1
  64. package/dist/collection/components/pds-multiselect/stories/pds-multiselect.stories.js +93 -0
  65. package/dist/collection/components/pds-table/pds-table-cell/pds-table-cell.css +1 -1
  66. package/dist/collection/components/pds-table/pds-table-cell/pds-table-cell.js +37 -3
  67. package/dist/collection/components/pds-table/pds-table-cell/pds-table-cell.js.map +1 -1
  68. package/dist/collection/components/pds-table/pds-table-head/pds-table-head.js +1 -1
  69. package/dist/collection/components/pds-table/pds-table-head/pds-table-head.js.map +1 -1
  70. package/dist/collection/components/pds-table/pds-table-row/pds-table-row.js +3 -3
  71. package/dist/collection/components/pds-table/pds-table-row/pds-table-row.js.map +1 -1
  72. package/dist/collection/components/pds-table/pds-table.css +1 -0
  73. package/dist/collection/components/pds-table/pds-table.js +33 -17
  74. package/dist/collection/components/pds-table/pds-table.js.map +1 -1
  75. package/dist/collection/components/pds-table/stories/pds-table.stories.js +58 -0
  76. package/dist/collection/components/pds-text/pds-text.js +43 -2
  77. package/dist/collection/components/pds-text/pds-text.js.map +1 -1
  78. package/dist/collection/components/pds-text/stories/pds-text.stories.js +21 -2
  79. package/dist/collection/utils/truncation-tooltip.js +242 -0
  80. package/dist/collection/utils/truncation-tooltip.js.map +1 -0
  81. package/dist/docs.json +156 -18
  82. package/dist/esm/{index-D094LgxJ.js → index-BFkDH5XU.js} +3 -3
  83. package/dist/esm/index-BFkDH5XU.js.map +1 -0
  84. package/dist/esm/loader.js +1 -1
  85. package/dist/esm/pds-accordion.entry.js +1 -1
  86. package/dist/esm/pds-avatar.entry.js +1 -1
  87. package/dist/esm/pds-button.entry.js +16 -6
  88. package/dist/esm/pds-button.entry.js.map +1 -1
  89. package/dist/esm/pds-checkbox.entry.js +1 -1
  90. package/dist/esm/pds-chip.entry.js +1 -1
  91. package/dist/esm/pds-copytext.entry.js +49 -3
  92. package/dist/esm/pds-copytext.entry.js.map +1 -1
  93. package/dist/esm/pds-filter.entry.js +1 -1
  94. package/dist/esm/pds-input.entry.js +1 -1
  95. package/dist/esm/pds-link.entry.js +1 -1
  96. package/dist/esm/pds-multiselect.entry.js +62 -15
  97. package/dist/esm/pds-multiselect.entry.js.map +1 -1
  98. package/dist/esm/pds-radio-group.entry.js +1 -1
  99. package/dist/esm/pds-radio.entry.js +1 -1
  100. package/dist/esm/pds-select.entry.js +1 -1
  101. package/dist/esm/pds-sortable-item.entry.js +1 -1
  102. package/dist/esm/pds-switch.entry.js +1 -1
  103. package/dist/esm/pds-table-cell.entry.js +35 -3
  104. package/dist/esm/pds-table-cell.entry.js.map +1 -1
  105. package/dist/esm/pds-table-head-cell.entry.js +1 -1
  106. package/dist/esm/pds-table-head.entry.js +1 -1
  107. package/dist/esm/pds-table-head.entry.js.map +1 -1
  108. package/dist/esm/pds-table-row.entry.js +3 -3
  109. package/dist/esm/pds-table-row.entry.js.map +1 -1
  110. package/dist/esm/pds-table.entry.js +11 -4
  111. package/dist/esm/pds-table.entry.js.map +1 -1
  112. package/dist/esm/pds-text.entry.js +40 -1
  113. package/dist/esm/pds-text.entry.js.map +1 -1
  114. package/dist/esm/pds-textarea.entry.js +1 -1
  115. package/dist/esm/pine-core.js +1 -1
  116. package/dist/esm/truncation-tooltip-CTHpMbU3.js +247 -0
  117. package/dist/esm/truncation-tooltip-CTHpMbU3.js.map +1 -0
  118. package/dist/esm-es5/{index-D094LgxJ.js → index-BFkDH5XU.js} +1 -1
  119. package/dist/esm-es5/index-BFkDH5XU.js.map +1 -0
  120. package/dist/esm-es5/loader.js +1 -1
  121. package/dist/esm-es5/pds-accordion.entry.js +1 -1
  122. package/dist/esm-es5/pds-avatar.entry.js +1 -1
  123. package/dist/esm-es5/pds-button.entry.js +1 -1
  124. package/dist/esm-es5/pds-button.entry.js.map +1 -1
  125. package/dist/esm-es5/pds-checkbox.entry.js +1 -1
  126. package/dist/esm-es5/pds-chip.entry.js +1 -1
  127. package/dist/esm-es5/pds-copytext.entry.js +1 -1
  128. package/dist/esm-es5/pds-copytext.entry.js.map +1 -1
  129. package/dist/esm-es5/pds-filter.entry.js +1 -1
  130. package/dist/esm-es5/pds-input.entry.js +1 -1
  131. package/dist/esm-es5/pds-link.entry.js +1 -1
  132. package/dist/esm-es5/pds-multiselect.entry.js +1 -1
  133. package/dist/esm-es5/pds-multiselect.entry.js.map +1 -1
  134. package/dist/esm-es5/pds-radio-group.entry.js +1 -1
  135. package/dist/esm-es5/pds-radio.entry.js +1 -1
  136. package/dist/esm-es5/pds-select.entry.js +1 -1
  137. package/dist/esm-es5/pds-sortable-item.entry.js +1 -1
  138. package/dist/esm-es5/pds-switch.entry.js +1 -1
  139. package/dist/esm-es5/pds-table-cell.entry.js +1 -1
  140. package/dist/esm-es5/pds-table-cell.entry.js.map +1 -1
  141. package/dist/esm-es5/pds-table-head-cell.entry.js +1 -1
  142. package/dist/esm-es5/pds-table-head.entry.js +1 -1
  143. package/dist/esm-es5/pds-table-head.entry.js.map +1 -1
  144. package/dist/esm-es5/pds-table-row.entry.js +1 -1
  145. package/dist/esm-es5/pds-table-row.entry.js.map +1 -1
  146. package/dist/esm-es5/pds-table.entry.js +1 -1
  147. package/dist/esm-es5/pds-table.entry.js.map +1 -1
  148. package/dist/esm-es5/pds-text.entry.js +1 -1
  149. package/dist/esm-es5/pds-text.entry.js.map +1 -1
  150. package/dist/esm-es5/pds-textarea.entry.js +1 -1
  151. package/dist/esm-es5/pine-core.js +1 -1
  152. package/dist/esm-es5/truncation-tooltip-CTHpMbU3.js +2 -0
  153. package/dist/esm-es5/truncation-tooltip-CTHpMbU3.js.map +1 -0
  154. package/dist/pine-core/{p-2aac4495.system.entry.js → p-15ac22bd.system.entry.js} +2 -2
  155. package/dist/pine-core/{p-425144ae.entry.js → p-1cc2fe8d.entry.js} +2 -2
  156. package/dist/pine-core/p-203f6e9e.entry.js +2 -0
  157. package/dist/pine-core/p-203f6e9e.entry.js.map +1 -0
  158. package/dist/pine-core/{p-0ac54273.entry.js → p-276f774a.entry.js} +2 -2
  159. package/dist/pine-core/p-27ccbd3f.entry.js +2 -0
  160. package/dist/pine-core/p-27ccbd3f.entry.js.map +1 -0
  161. package/dist/pine-core/p-2e22a1fc.system.entry.js +2 -0
  162. package/dist/pine-core/p-2e22a1fc.system.entry.js.map +1 -0
  163. package/dist/pine-core/{p-ce069162.entry.js → p-32f65e48.entry.js} +2 -2
  164. package/dist/pine-core/{p-36e5e9f4.system.entry.js → p-3ea301dd.system.entry.js} +2 -2
  165. package/dist/pine-core/p-3ea301dd.system.entry.js.map +1 -0
  166. package/dist/pine-core/p-4189f1be.system.entry.js +2 -0
  167. package/dist/pine-core/p-4189f1be.system.entry.js.map +1 -0
  168. package/dist/pine-core/{p-7d7dce2c.system.entry.js → p-4232520f.system.entry.js} +2 -2
  169. package/dist/pine-core/{p-8e40c9ef.entry.js → p-439e3343.entry.js} +2 -2
  170. package/dist/pine-core/p-439e3343.entry.js.map +1 -0
  171. package/dist/pine-core/{p-b46f66e8.system.entry.js → p-45c1f3ea.system.entry.js} +2 -2
  172. package/dist/pine-core/{p-5abc5d82.system.entry.js → p-49c2e2ce.system.entry.js} +2 -2
  173. package/dist/pine-core/{p-b1a7a0b2.entry.js → p-4de64b1f.entry.js} +2 -2
  174. package/dist/pine-core/{p-94c73d98.entry.js → p-4e015ddd.entry.js} +2 -2
  175. package/dist/pine-core/p-4e015ddd.entry.js.map +1 -0
  176. package/dist/pine-core/{p-0b52923b.system.entry.js → p-52c5ced3.system.entry.js} +2 -2
  177. package/dist/pine-core/{p-3815f565.entry.js → p-593cee44.entry.js} +2 -2
  178. package/dist/pine-core/{p-73bce0bf.entry.js → p-5a7b25d0.entry.js} +2 -2
  179. package/dist/pine-core/p-5hPM5knE.js +2 -0
  180. package/dist/pine-core/p-5hPM5knE.js.map +1 -0
  181. package/dist/pine-core/{p-48ed8147.entry.js → p-632e398f.entry.js} +2 -2
  182. package/dist/pine-core/{p-957647f9.entry.js → p-663abd80.entry.js} +2 -2
  183. package/dist/pine-core/{p-23111b1c.system.entry.js → p-6980edfe.system.entry.js} +2 -2
  184. package/dist/pine-core/{p-BxVkyfaO.system.js → p-6I02BpQf.system.js} +1 -1
  185. package/dist/pine-core/p-6I02BpQf.system.js.map +1 -0
  186. package/dist/pine-core/{p-c9965216.system.entry.js → p-6fbe6be4.system.entry.js} +2 -2
  187. package/dist/pine-core/p-7514a191.entry.js +2 -0
  188. package/dist/pine-core/p-7514a191.entry.js.map +1 -0
  189. package/dist/pine-core/{p-bd18b9bf.system.entry.js → p-77d4f274.system.entry.js} +2 -2
  190. package/dist/pine-core/{p-78246e05.entry.js → p-85ce731b.entry.js} +2 -2
  191. package/dist/pine-core/{p-b1820970.system.entry.js → p-87cee4a0.system.entry.js} +2 -2
  192. package/dist/pine-core/{p-fbd8ae50.entry.js → p-88686193.entry.js} +2 -2
  193. package/dist/pine-core/p-88eb4f6c.entry.js +2 -0
  194. package/dist/pine-core/p-88eb4f6c.entry.js.map +1 -0
  195. package/dist/pine-core/{p-b09bde5c.system.entry.js → p-8ab66dbc.system.entry.js} +2 -2
  196. package/dist/pine-core/p-8be316b4.system.entry.js +2 -0
  197. package/dist/pine-core/p-8be316b4.system.entry.js.map +1 -0
  198. package/dist/pine-core/{p-7a11a6c7.entry.js → p-8f935480.entry.js} +2 -2
  199. package/dist/pine-core/p-9263809e.entry.js +2 -0
  200. package/dist/pine-core/p-9263809e.entry.js.map +1 -0
  201. package/dist/pine-core/{p-3f05d72e.system.entry.js → p-9e3e441c.system.entry.js} +2 -2
  202. package/dist/pine-core/{p-3cd53462.entry.js → p-9e8296fc.entry.js} +2 -2
  203. package/dist/pine-core/{p-BJPmPVaF.system.js.map → p-B3dAc5EW.system.js.map} +1 -1
  204. package/dist/pine-core/p-B48FyOD0.system.js.map +1 -0
  205. package/dist/pine-core/{p-DY97YDUU.system.js.map → p-B5CyjPYU.system.js.map} +1 -1
  206. package/dist/pine-core/{p-8KFA3I5T.system.js.map → p-B8CAflct.system.js.map} +1 -1
  207. package/dist/pine-core/{p-N-jt0_Yl.system.js.map → p-BBJXL9br.system.js.map} +1 -1
  208. package/dist/pine-core/{p-D094LgxJ.js → p-BFkDH5XU.js} +1 -1
  209. package/dist/pine-core/p-BFkDH5XU.js.map +1 -0
  210. package/dist/pine-core/{p-CjQwwLdV.system.js.map → p-Bd3ynCsJ.system.js.map} +1 -1
  211. package/dist/pine-core/{p-D4YdQDsG.system.js.map → p-BiLmvJTd.system.js.map} +1 -1
  212. package/dist/pine-core/{p-PZw10cnm.system.js.map → p-C8y7SAd7.system.js.map} +1 -1
  213. package/dist/pine-core/{p-gcCcHox5.system.js.map → p-CCh7iS6N.system.js.map} +1 -1
  214. package/dist/pine-core/p-CEE11B7K.system.js.map +1 -0
  215. package/dist/pine-core/{p-eT6pKhWF.system.js.map → p-CObf7nrT.system.js.map} +1 -1
  216. package/dist/pine-core/p-CPri5wQG.system.js.map +1 -0
  217. package/dist/pine-core/{p-D3Ug1A-l.system.js.map → p-CbRBe3Eq.system.js.map} +1 -1
  218. package/dist/pine-core/{p-c2oMjk1r.system.js.map → p-Ctc231vq.system.js.map} +1 -1
  219. package/dist/pine-core/p-DXVwADJT.system.js +2 -0
  220. package/dist/pine-core/p-DXVwADJT.system.js.map +1 -0
  221. package/dist/pine-core/p-DenbFuEN.system.js.map +1 -0
  222. package/dist/pine-core/{p-BnJypAy2.system.js.map → p-DhLX7iDs.system.js.map} +1 -1
  223. package/dist/pine-core/p-Dkz0RoFB.system.js.map +1 -0
  224. package/dist/pine-core/p-G3GztZmn.system.js.map +1 -0
  225. package/dist/pine-core/p-JAVnELnm.system.js +1 -1
  226. package/dist/pine-core/{p-15e554ae.entry.js → p-a30edeb1.entry.js} +2 -2
  227. package/dist/pine-core/{p-5O8bhSdk.system.js.map → p-aKHwHZQR.system.js.map} +1 -1
  228. package/dist/pine-core/{p-fce519e3.system.entry.js → p-b416cb4b.system.entry.js} +2 -2
  229. package/dist/pine-core/p-b416cb4b.system.entry.js.map +1 -0
  230. package/dist/pine-core/{p-d2b2caa2.system.entry.js → p-b6f57c0f.system.entry.js} +2 -2
  231. package/dist/pine-core/p-b7f2f9f3.system.entry.js +2 -0
  232. package/dist/pine-core/p-b7f2f9f3.system.entry.js.map +1 -0
  233. package/dist/pine-core/p-c25ea8de.entry.js +2 -0
  234. package/dist/pine-core/p-c25ea8de.entry.js.map +1 -0
  235. package/dist/pine-core/p-e78986ea.system.entry.js +2 -0
  236. package/dist/pine-core/p-e78986ea.system.entry.js.map +1 -0
  237. package/dist/pine-core/{p-13105538.system.entry.js → p-f795d3fe.system.entry.js} +2 -2
  238. package/dist/pine-core/p-f7d9bZ8U.system.js.map +1 -0
  239. package/dist/pine-core/p-f81b0dbb.system.entry.js +2 -0
  240. package/dist/pine-core/p-f81b0dbb.system.entry.js.map +1 -0
  241. package/dist/pine-core/{p-2d21bc31.entry.js → p-f8a2aedd.entry.js} +2 -2
  242. package/dist/pine-core/{p-f0df10c7.system.entry.js → p-fbe793c7.system.entry.js} +2 -2
  243. package/dist/pine-core/{p-CQtQQn3_.system.js.map → p-hL5Id7g5.system.js.map} +1 -1
  244. package/dist/pine-core/{p-BK1BTkTt.system.js.map → p-hzdqYC6e.system.js.map} +1 -1
  245. package/dist/pine-core/pds-button.entry.esm.js.map +1 -1
  246. package/dist/pine-core/pds-copytext.entry.esm.js.map +1 -1
  247. package/dist/pine-core/pds-multiselect.entry.esm.js.map +1 -1
  248. package/dist/pine-core/pds-table-cell.entry.esm.js.map +1 -1
  249. package/dist/pine-core/pds-table-head.entry.esm.js.map +1 -1
  250. package/dist/pine-core/pds-table-row.entry.esm.js.map +1 -1
  251. package/dist/pine-core/pds-table.entry.esm.js.map +1 -1
  252. package/dist/pine-core/pds-text.entry.esm.js.map +1 -1
  253. package/dist/pine-core/pine-core.esm.js +1 -1
  254. package/dist/types/components/pds-button/pds-button.d.ts +4 -0
  255. package/dist/types/components/pds-copytext/pds-copytext.d.ts +10 -0
  256. package/dist/types/components/pds-multiselect/pds-multiselect.d.ts +31 -0
  257. package/dist/types/components/pds-table/pds-table-cell/pds-table-cell.d.ts +7 -1
  258. package/dist/types/components/pds-table/pds-table-row/pds-table-row.d.ts +1 -1
  259. package/dist/types/components/pds-table/pds-table.d.ts +6 -7
  260. package/dist/types/components/pds-text/pds-text.d.ts +9 -0
  261. package/dist/types/components.d.ts +55 -11
  262. package/dist/types/utils/truncation-tooltip.d.ts +21 -0
  263. package/dist/vscode.html-data.json +33 -5
  264. package/hydrate/index.js +458 -35
  265. package/hydrate/index.mjs +458 -35
  266. package/package.json +2 -2
  267. package/dist/cjs/index-DkQebouX.js.map +0 -1
  268. package/dist/esm/index-D094LgxJ.js.map +0 -1
  269. package/dist/esm-es5/index-D094LgxJ.js.map +0 -1
  270. package/dist/pine-core/p-003884fd.entry.js +0 -2
  271. package/dist/pine-core/p-003884fd.entry.js.map +0 -1
  272. package/dist/pine-core/p-1971d358.entry.js +0 -2
  273. package/dist/pine-core/p-1971d358.entry.js.map +0 -1
  274. package/dist/pine-core/p-23aba538.entry.js +0 -2
  275. package/dist/pine-core/p-23aba538.entry.js.map +0 -1
  276. package/dist/pine-core/p-36e5e9f4.system.entry.js.map +0 -1
  277. package/dist/pine-core/p-3b0a4abe.entry.js +0 -2
  278. package/dist/pine-core/p-3b0a4abe.entry.js.map +0 -1
  279. package/dist/pine-core/p-3c026ec7.system.entry.js +0 -2
  280. package/dist/pine-core/p-3c026ec7.system.entry.js.map +0 -1
  281. package/dist/pine-core/p-49c4f34a.entry.js +0 -2
  282. package/dist/pine-core/p-49c4f34a.entry.js.map +0 -1
  283. package/dist/pine-core/p-6918b378.system.entry.js +0 -2
  284. package/dist/pine-core/p-6918b378.system.entry.js.map +0 -1
  285. package/dist/pine-core/p-8e40c9ef.entry.js.map +0 -1
  286. package/dist/pine-core/p-93d0be59.entry.js +0 -2
  287. package/dist/pine-core/p-93d0be59.entry.js.map +0 -1
  288. package/dist/pine-core/p-94c73d98.entry.js.map +0 -1
  289. package/dist/pine-core/p-BpZTjdau.system.js.map +0 -1
  290. package/dist/pine-core/p-BxVkyfaO.system.js.map +0 -1
  291. package/dist/pine-core/p-CjnIO2Ro.system.js.map +0 -1
  292. package/dist/pine-core/p-D094LgxJ.js.map +0 -1
  293. package/dist/pine-core/p-DJYyo0MJ.system.js.map +0 -1
  294. package/dist/pine-core/p-DZEhYV6y.system.js.map +0 -1
  295. package/dist/pine-core/p-Ri89mw0-.system.js.map +0 -1
  296. package/dist/pine-core/p-ZUqfslIz.system.js.map +0 -1
  297. package/dist/pine-core/p-aeb2f6ac.system.entry.js +0 -2
  298. package/dist/pine-core/p-aeb2f6ac.system.entry.js.map +0 -1
  299. package/dist/pine-core/p-cb8c24ad.system.entry.js +0 -2
  300. package/dist/pine-core/p-cb8c24ad.system.entry.js.map +0 -1
  301. package/dist/pine-core/p-d83d6fce.system.entry.js +0 -2
  302. package/dist/pine-core/p-d83d6fce.system.entry.js.map +0 -1
  303. package/dist/pine-core/p-ef9c539e.system.entry.js +0 -2
  304. package/dist/pine-core/p-ef9c539e.system.entry.js.map +0 -1
  305. package/dist/pine-core/p-fce519e3.system.entry.js.map +0 -1
  306. package/dist/pine-core/p-kYQszSpu.system.js.map +0 -1
  307. /package/dist/pine-core/{p-2aac4495.system.entry.js.map → p-15ac22bd.system.entry.js.map} +0 -0
  308. /package/dist/pine-core/{p-425144ae.entry.js.map → p-1cc2fe8d.entry.js.map} +0 -0
  309. /package/dist/pine-core/{p-0ac54273.entry.js.map → p-276f774a.entry.js.map} +0 -0
  310. /package/dist/pine-core/{p-ce069162.entry.js.map → p-32f65e48.entry.js.map} +0 -0
  311. /package/dist/pine-core/{p-7d7dce2c.system.entry.js.map → p-4232520f.system.entry.js.map} +0 -0
  312. /package/dist/pine-core/{p-b46f66e8.system.entry.js.map → p-45c1f3ea.system.entry.js.map} +0 -0
  313. /package/dist/pine-core/{p-5abc5d82.system.entry.js.map → p-49c2e2ce.system.entry.js.map} +0 -0
  314. /package/dist/pine-core/{p-b1a7a0b2.entry.js.map → p-4de64b1f.entry.js.map} +0 -0
  315. /package/dist/pine-core/{p-0b52923b.system.entry.js.map → p-52c5ced3.system.entry.js.map} +0 -0
  316. /package/dist/pine-core/{p-3815f565.entry.js.map → p-593cee44.entry.js.map} +0 -0
  317. /package/dist/pine-core/{p-73bce0bf.entry.js.map → p-5a7b25d0.entry.js.map} +0 -0
  318. /package/dist/pine-core/{p-48ed8147.entry.js.map → p-632e398f.entry.js.map} +0 -0
  319. /package/dist/pine-core/{p-957647f9.entry.js.map → p-663abd80.entry.js.map} +0 -0
  320. /package/dist/pine-core/{p-23111b1c.system.entry.js.map → p-6980edfe.system.entry.js.map} +0 -0
  321. /package/dist/pine-core/{p-c9965216.system.entry.js.map → p-6fbe6be4.system.entry.js.map} +0 -0
  322. /package/dist/pine-core/{p-bd18b9bf.system.entry.js.map → p-77d4f274.system.entry.js.map} +0 -0
  323. /package/dist/pine-core/{p-78246e05.entry.js.map → p-85ce731b.entry.js.map} +0 -0
  324. /package/dist/pine-core/{p-b1820970.system.entry.js.map → p-87cee4a0.system.entry.js.map} +0 -0
  325. /package/dist/pine-core/{p-fbd8ae50.entry.js.map → p-88686193.entry.js.map} +0 -0
  326. /package/dist/pine-core/{p-b09bde5c.system.entry.js.map → p-8ab66dbc.system.entry.js.map} +0 -0
  327. /package/dist/pine-core/{p-7a11a6c7.entry.js.map → p-8f935480.entry.js.map} +0 -0
  328. /package/dist/pine-core/{p-3f05d72e.system.entry.js.map → p-9e3e441c.system.entry.js.map} +0 -0
  329. /package/dist/pine-core/{p-3cd53462.entry.js.map → p-9e8296fc.entry.js.map} +0 -0
  330. /package/dist/pine-core/{p-15e554ae.entry.js.map → p-a30edeb1.entry.js.map} +0 -0
  331. /package/dist/pine-core/{p-d2b2caa2.system.entry.js.map → p-b6f57c0f.system.entry.js.map} +0 -0
  332. /package/dist/pine-core/{p-13105538.system.entry.js.map → p-f795d3fe.system.entry.js.map} +0 -0
  333. /package/dist/pine-core/{p-2d21bc31.entry.js.map → p-f8a2aedd.entry.js.map} +0 -0
  334. /package/dist/pine-core/{p-f0df10c7.system.entry.js.map → p-fbe793c7.system.entry.js.map} +0 -0
@@ -4,7 +4,7 @@ import { a as addCircle, c as caretDown } from './index2.js';
4
4
  import { d as defineCustomElement$2 } from './pds-icon2.js';
5
5
  import { d as defineCustomElement$1 } from './pds-loader2.js';
6
6
 
7
- const pdsButtonCss = ":host{--pds-button-background:var(--color-background-default);--pds-button-border:var(--pine-border);--pds-button-border-radius:var(--pine-border-radius-full);--pds-button-border-radius-start-end:var(--pine-border-radius-full);--pds-button-border-radius-start-start:var(--pine-border-radius-full);--pds-button-border-radius-end-end:var(--pine-border-radius-full);--pds-button-border-radius-end-start:var(--pine-border-radius-full);--pds-button-min-height:var(--pine-dimension-450);--pds-button-outline-offset:var(--pine-border-width);--color-border-default:transparent;--color-border-disabled:transparent;--color-border-focus:transparent;--color-border-hover:transparent;--button-loader-color:var(--color-text-default);display:-ms-inline-flexbox;display:inline-flex;vertical-align:middle}:host([full-width=true]){display:-ms-flexbox;display:flex;width:100%}:host([full-width=true]) a,:host([full-width=true]) button{-ms-flex-pack:center;justify-content:center;width:100%}:host([full-width=true]) .pds-button__content{-ms-flex-pack:center;justify-content:center;text-align:center}:host([loading=true]){cursor:wait;pointer-events:none}:host([disabled=true]){pointer-events:none}.pds-button{--pds-loader-color:var(--color-text-default);-ms-flex-align:center;align-items:center;background-color:var(--pds-button-background, var(--color-background-default));border:var(--pds-button-border);border-color:var(--color-border-default);border-radius:var(--pds-button-border-radius);border-end-end-radius:var(--pds-button-border-radius-end-end, var(--pds-button-border-radius));border-end-start-radius:var(--pds-button-border-radius-end-start, var(--pds-button-border-radius));border-start-end-radius:var(--pds-button-border-radius-start-end, var(--pds-button-border-radius));border-start-start-radius:var(--pds-button-border-radius-start-start, var(--pds-button-border-radius));-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--color-text-default);cursor:pointer;display:-ms-flexbox;display:flex;font:var(--pine-typography-body-brand-label);letter-spacing:var(--pine-letter-spacing);min-height:var(--pds-button-min-height);padding:calc(var(--pine-dimension-xs) - var(--pine-border-width)) var(--pine-dimension-sm);position:relative;text-decoration:none}.pds-button pds-icon{color:currentColor;fill:currentColor}.pds-button:hover{background-color:var(--color-background-hover);border-color:var(--color-border-hover)}.pds-button:focus-visible{border-color:var(--color-border-focus);-webkit-box-shadow:var(--pds-button-box-shadow-focus, none);box-shadow:var(--pds-button-box-shadow-focus, none);outline:var(--pds-button-outline-focus, var(--pine-outline-focus));outline-offset:var(--pds-button-outline-offset)}.pds-button:disabled{background-color:var(--color-background-disabled);border-color:var(--color-border-disabled);color:var(--color-text-disabled);pointer-events:none}.pds-button--primary{--color-background-default:var(--pine-color-primary);--color-background-hover:var(--pine-color-primary-hover);--color-background-disabled:var(--pine-color-primary-disabled);--color-border-default:var(--pine-color-primary);--color-border-hover:var(--pine-color-primary-hover);--color-text-default:var(--pine-color-text-primary);--color-text-disabled:var(--pine-color-text-primary-disabled);--color-outline:var(--pine-color-focus-ring);--button-loader-color:var(--pine-color-text-primary)}.pds-button--accent{--color-background-default:var(--pine-color-accent);--color-background-hover:var(--pine-color-accent-hover);--color-background-disabled:var(--pine-color-accent-disabled);--color-border-default:var(--pine-color-accent);--color-border-hover:var(--pine-color-accent-hover);--color-text-default:var(--pine-color-white);--color-text-disabled:var(--pine-color-text-accent-disabled);--color-outline:var(--pine-color-focus-ring);--button-loader-color:var(--pine-color-text-primary)}.pds-button--destructive{--color-background-default:var(--pine-color-danger);--color-background-hover:var(--pine-color-danger-hover);--color-background-disabled:var(--pine-color-danger-disabled);--color-border-default:var(--pine-color-danger);--color-border-hover:var(--pine-color-danger-hover);--color-text-default:var(--pine-color-white);--color-text-disabled:var(--pine-color-text-danger-disabled);--color-outline:var(--pine-color-focus-ring-danger);--button-loader-color:var(--pine-color-text-primary)}.pds-button--destructive:focus-visible{outline-color:var(--pine-color-focus-ring-danger)}.pds-button--secondary,.pds-button--disclosure{--color-background-default:var(--pine-color-secondary);--color-background-hover:var(--pine-color-secondary-hover);--color-background-disabled:var(--pine-color-secondary-disabled);--color-border-disabled:var(--pine-color-border-disabled);--color-border-focus:var(--pine-color-border);--color-border-hover:var(--pine-color-border-hover);--color-border-default:var(--pine-color-border);--color-text-default:var(--pine-color-text-secondary);--color-text-disabled:var(--pine-color-text-secondary-disabled);--color-outline:var(--pine-color-focus-ring);--button-loader-color:var(--pine-color-text-secondary)}.pds-button--secondary:hover,.pds-button--disclosure:hover{background-color:var(--pine-color-secondary-hover)}.pds-button--tertiary{--color-background-default:transparent;--color-background-hover:var(--pine-color-background-muted);--color-background-disabled:transparent;--color-border-default:transparent;--color-border-hover:var(--pine-color-background-muted);--color-border-disabled:transparent;--color-text-default:var(--pine-color-text-secondary);--color-text-disabled:var(--pine-color-text-secondary-disabled);--color-outline:var(--pine-color-focus-ring);--button-loader-color:var(--pine-color-text-secondary)}.pds-button--filter{--color-background-default:var(--pine-color-background-container);--color-background-hover:var(--pine-color-background-subtle);--color-background-disabled:var(--pine-color-white);--color-border-default:transparent;--color-border-hover:transparent;--color-border-focus:transparent;--color-text-default:var(--pine-color-text-secondary);--color-text-hover:var(--pine-color-text-hover);--color-text-disabled:var(--pine-color-text-disabled);--color-outline:var(--pine-color-focus-ring);--button-loader-color:var(--pine-color-text-secondary);--pds-button-border-radius:var(--pine-dimension-125);--pds-button-border-radius-start-end:var(--pine-dimension-125);--pds-button-border-radius-start-start:var(--pine-dimension-125);--pds-button-border-radius-end-end:var(--pine-dimension-125);--pds-button-border-radius-end-start:var(--pine-dimension-125);padding:var(--pine-dimension-xs) var(--pine-dimension-sm)}.pds-button--filter:disabled{background-color:var(--pine-color-background-container)}.pds-button--filter:hover{color:var(--color-text-hover)}.pds-button--unstyled{--color-background-default:transparent;--color-background-hover:transparent;--color-background-disabled:transparent;--color-text-default:var(--pine-color-text);--button-loader-color:var(--pine-color-text);border-width:var(--pine-dimension-none);margin:var(--pine-dimension-none);min-height:auto;padding:var(--pine-dimension-none);width:inherit}.pds-button__content{-ms-flex-align:center;align-items:center;display:-ms-inline-flexbox;display:inline-flex;gap:var(--pine-dimension-xs);position:relative;width:100%}.pds-button__icon{display:-ms-inline-flexbox;display:inline-flex}.pds-button__icon:not(:has(::slotted(*))){display:none}.pds-button__text{-ms-flex-align:center;align-items:center;display:-ms-inline-flexbox;display:inline-flex;white-space:nowrap}.pds-button__icon--hidden,.pds-button__text--hidden{opacity:0}.pds-button__loader{height:var(--pine-dimension-250);left:50%;position:absolute;top:50%;-webkit-transform:translate(-50%, -50%);transform:translate(-50%, -50%);width:var(--pine-dimension-250)}.pds-button--loading{cursor:wait;pointer-events:none}.pds-button--loading .pds-button__loader pds-loader{--loader-color:var(--button-loader-color)}.pds-button--small{min-height:var(--pine-dimension-400);padding:calc(var(--pine-dimension-2xs) - var(--pine-border-width)) var(--pine-dimension-sm)}.pds-button--micro{font-size:var(--pine-font-size-085);min-height:var(--pine-dimension-300);padding:var(--pine-dimension-025) var(--pine-dimension-xs)}.pds-button--icon-only{-ms-flex-align:center;align-items:center;border-radius:var(--pine-border-radius-full);height:var(--button-dimension);-ms-flex-pack:center;justify-content:center;min-height:var(--button-dimension);min-width:var(--button-dimension);padding:var(--pine-dimension-xs);width:var(--button-dimension)}.pds-button--icon-only .pds-button__content{height:100%;-ms-flex-pack:center;justify-content:center;width:100%}.pds-button--icon-only .pds-button__text--hidden{border:0;clip:rect(0 0 0 0);-webkit-clip-path:polygon(0 0, 0 0, 0 0);clip-path:polygon(0 0, 0 0, 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;white-space:nowrap;width:1px}.pds-button--icon-only.pds-button--small{height:var(--pine-dimension-400);min-height:var(--pine-dimension-400);min-width:var(--pine-dimension-400);padding:var(--pine-dimension-2xs);width:var(--pine-dimension-400)}.pds-button--icon-only.pds-button--micro{height:var(--pine-dimension-300);min-height:var(--pine-dimension-300);min-width:var(--pine-dimension-300);padding:var(--pine-dimension-3xs);width:var(--pine-dimension-300)}";
7
+ const pdsButtonCss = ":host{--pds-button-background:var(--color-background-default);--pds-button-border:var(--pine-border);--pds-button-border-radius:var(--pine-border-radius-full);--pds-button-border-radius-start-end:var(--pine-border-radius-full);--pds-button-border-radius-start-start:var(--pine-border-radius-full);--pds-button-border-radius-end-end:var(--pine-border-radius-full);--pds-button-border-radius-end-start:var(--pine-border-radius-full);--pds-button-min-height:var(--pine-dimension-450);--pds-button-outline-offset:var(--pine-border-width);--color-border-default:transparent;--color-border-disabled:transparent;--color-border-focus:transparent;--color-border-hover:transparent;--button-loader-color:var(--color-text-default);display:-ms-inline-flexbox;display:inline-flex;vertical-align:middle}:host([full-width=true]){display:-ms-flexbox;display:flex;width:100%}:host([full-width=true]) a,:host([full-width=true]) button{-ms-flex-pack:center;justify-content:center;width:100%}:host([full-width=true]) .pds-button__content{-ms-flex-pack:center;justify-content:center;text-align:center}:host([loading=true]){cursor:wait;pointer-events:none}:host([disabled=true]){pointer-events:none}.pds-button{--pds-loader-color:var(--color-text-default);-ms-flex-align:center;align-items:center;background-color:var(--pds-button-background, var(--color-background-default));border:var(--pds-button-border);border-color:var(--color-border-default);border-radius:var(--pds-button-border-radius);border-end-end-radius:var(--pds-button-border-radius-end-end, var(--pds-button-border-radius));border-end-start-radius:var(--pds-button-border-radius-end-start, var(--pds-button-border-radius));border-start-end-radius:var(--pds-button-border-radius-start-end, var(--pds-button-border-radius));border-start-start-radius:var(--pds-button-border-radius-start-start, var(--pds-button-border-radius));-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--color-text-default);cursor:pointer;display:-ms-flexbox;display:flex;font:var(--pine-typography-body-brand-label);letter-spacing:var(--pine-letter-spacing);min-height:var(--pds-button-min-height);padding:calc(var(--pine-dimension-xs) - var(--pine-border-width)) var(--pine-dimension-sm);position:relative;text-decoration:none}.pds-button pds-icon{color:currentColor;fill:currentColor}.pds-button:hover{background-color:var(--color-background-hover);border-color:var(--color-border-hover)}.pds-button:focus-visible{border-color:var(--color-border-focus);-webkit-box-shadow:var(--pds-button-box-shadow-focus, none);box-shadow:var(--pds-button-box-shadow-focus, none);outline:var(--pds-button-outline-focus, var(--pine-outline-focus));outline-offset:var(--pds-button-outline-offset)}.pds-button:disabled{background-color:var(--color-background-disabled);border-color:var(--color-border-disabled);color:var(--color-text-disabled);pointer-events:none}.pds-button--primary{--color-background-default:var(--pine-color-primary);--color-background-hover:var(--pine-color-primary-hover);--color-background-disabled:var(--pine-color-primary-disabled);--color-border-default:var(--pine-color-primary);--color-border-hover:var(--pine-color-primary-hover);--color-text-default:var(--pine-color-text-primary);--color-text-disabled:var(--pine-color-text-primary-disabled);--color-outline:var(--pine-color-focus-ring);--button-loader-color:var(--pine-color-text-primary)}.pds-button--accent{--color-background-default:var(--pine-color-accent);--color-background-hover:var(--pine-color-accent-hover);--color-background-disabled:var(--pine-color-accent-disabled);--color-border-default:var(--pine-color-accent);--color-border-hover:var(--pine-color-accent-hover);--color-text-default:var(--pine-color-white);--color-text-disabled:var(--pine-color-text-accent-disabled);--color-outline:var(--pine-color-focus-ring);--button-loader-color:var(--pine-color-text-primary)}.pds-button--destructive{--color-background-default:var(--pine-color-danger);--color-background-hover:var(--pine-color-danger-hover);--color-background-disabled:var(--pine-color-danger-disabled);--color-border-default:var(--pine-color-danger);--color-border-hover:var(--pine-color-danger-hover);--color-text-default:var(--pine-color-white);--color-text-disabled:var(--pine-color-text-danger-disabled);--color-outline:var(--pine-color-focus-ring-danger);--button-loader-color:var(--pine-color-text-primary)}.pds-button--destructive:focus-visible{outline-color:var(--pine-color-focus-ring-danger)}.pds-button--secondary,.pds-button--disclosure{--color-background-default:var(--pine-color-secondary);--color-background-hover:var(--pine-color-secondary-hover);--color-background-disabled:var(--pine-color-secondary-disabled);--color-border-disabled:var(--pine-color-border-disabled);--color-border-focus:var(--pine-color-border);--color-border-hover:var(--pine-color-border-hover);--color-border-default:var(--pine-color-border);--color-text-default:var(--pine-color-text-secondary);--color-text-disabled:var(--pine-color-text-secondary-disabled);--color-outline:var(--pine-color-focus-ring);--button-loader-color:var(--pine-color-text-secondary)}.pds-button--secondary:hover,.pds-button--disclosure:hover{background-color:var(--pine-color-secondary-hover)}.pds-button--tertiary{--color-background-default:transparent;--color-background-hover:var(--pine-color-background-muted);--color-background-disabled:transparent;--color-border-default:transparent;--color-border-hover:var(--pine-color-background-muted);--color-border-disabled:transparent;--color-text-default:var(--pine-color-text-secondary);--color-text-disabled:var(--pine-color-text-secondary-disabled);--color-outline:var(--pine-color-focus-ring);--button-loader-color:var(--pine-color-text-secondary)}.pds-button--filter{--color-background-default:var(--pine-color-background-container);--color-background-hover:var(--pine-color-background-subtle);--color-background-disabled:var(--pine-color-white);--color-border-default:transparent;--color-border-hover:transparent;--color-border-focus:transparent;--color-text-default:var(--pine-color-text-secondary);--color-text-hover:var(--pine-color-text-hover);--color-text-disabled:var(--pine-color-text-disabled);--color-outline:var(--pine-color-focus-ring);--button-loader-color:var(--pine-color-text-secondary);--pds-button-border-radius:var(--pine-dimension-125);--pds-button-border-radius-start-end:var(--pine-dimension-125);--pds-button-border-radius-start-start:var(--pine-dimension-125);--pds-button-border-radius-end-end:var(--pine-dimension-125);--pds-button-border-radius-end-start:var(--pine-dimension-125);padding:var(--pine-dimension-xs) var(--pine-dimension-sm)}.pds-button--filter:disabled{background-color:var(--pine-color-background-container)}.pds-button--filter:hover{color:var(--color-text-hover)}.pds-button--unstyled{--color-background-default:transparent;--color-background-hover:transparent;--color-background-disabled:transparent;--color-text-default:var(--pine-color-text);--button-loader-color:var(--pine-color-text);border-width:var(--pine-dimension-none);margin:var(--pine-dimension-none);min-height:auto;padding:var(--pine-dimension-none);width:inherit}.pds-button__content{-ms-flex-align:center;align-items:center;display:-ms-inline-flexbox;display:inline-flex;gap:var(--pine-dimension-xs);position:relative;width:100%}.pds-button__icon{display:-ms-inline-flexbox;display:inline-flex}.pds-button__icon--empty{display:none}.pds-button__text{-ms-flex-align:center;align-items:center;display:-ms-inline-flexbox;display:inline-flex;white-space:nowrap}.pds-button__icon--hidden,.pds-button__text--hidden{opacity:0}.pds-button__loader{height:var(--pine-dimension-250);left:50%;position:absolute;top:50%;-webkit-transform:translate(-50%, -50%);transform:translate(-50%, -50%);width:var(--pine-dimension-250)}.pds-button--loading{cursor:wait;pointer-events:none}.pds-button--loading .pds-button__loader pds-loader{--loader-color:var(--button-loader-color)}.pds-button--small{min-height:var(--pine-dimension-400);padding:calc(var(--pine-dimension-2xs) - var(--pine-border-width)) var(--pine-dimension-sm)}.pds-button--micro{font-size:var(--pine-font-size-085);min-height:var(--pine-dimension-300);padding:var(--pine-dimension-025) var(--pine-dimension-xs)}.pds-button--icon-only{-ms-flex-align:center;align-items:center;border-radius:var(--pine-border-radius-full);height:var(--button-dimension);-ms-flex-pack:center;justify-content:center;min-height:var(--button-dimension);min-width:var(--button-dimension);padding:var(--pine-dimension-xs);width:var(--button-dimension)}.pds-button--icon-only .pds-button__content{height:100%;-ms-flex-pack:center;justify-content:center;width:100%}.pds-button--icon-only .pds-button__text--hidden{border:0;clip:rect(0 0 0 0);-webkit-clip-path:polygon(0 0, 0 0, 0 0);clip-path:polygon(0 0, 0 0, 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;white-space:nowrap;width:1px}.pds-button--icon-only.pds-button--small{height:var(--pine-dimension-400);min-height:var(--pine-dimension-400);min-width:var(--pine-dimension-400);padding:var(--pine-dimension-2xs);width:var(--pine-dimension-400)}.pds-button--icon-only.pds-button--micro{height:var(--pine-dimension-300);min-height:var(--pine-dimension-300);min-width:var(--pine-dimension-300);padding:var(--pine-dimension-3xs);width:var(--pine-dimension-300)}";
8
8
 
9
9
  const PdsButton = /*@__PURE__*/ proxyCustomElement(class PdsButton extends HTMLElement {
10
10
  constructor(registerHost) {
@@ -55,6 +55,14 @@ const PdsButton = /*@__PURE__*/ proxyCustomElement(class PdsButton extends HTMLE
55
55
  * @defaultValue primary
56
56
  */
57
57
  this.variant = 'primary';
58
+ this.hasStartContent = false;
59
+ this.hasEndContent = false;
60
+ this.handleStartSlotChange = (event) => {
61
+ this.hasStartContent = event.target.assignedElements({ flatten: true }).length > 0;
62
+ };
63
+ this.handleEndSlotChange = (event) => {
64
+ this.hasEndContent = event.target.assignedElements({ flatten: true }).length > 0;
65
+ };
58
66
  this.handleClick = (ev) => {
59
67
  if (this.loading) {
60
68
  ev.preventDefault();
@@ -153,8 +161,9 @@ const PdsButton = /*@__PURE__*/ proxyCustomElement(class PdsButton extends HTMLE
153
161
  return (h("pds-icon", { class: this.loading ? 'pds-button__icon--hidden' : '', name: this.icon, part: "icon", "aria-hidden": "true" }));
154
162
  }
155
163
  // Always render the start slot so slotted content is projected reliably.
156
- // CSS hides the wrapper when no content is slotted (prevents empty gap space).
157
- return h("span", { class: `pds-button__icon ${this.loading ? 'pds-button__icon--hidden' : ''}` }, h("slot", { name: "start" }));
164
+ // The --empty class hides the wrapper when no content is slotted (prevents empty gap space).
165
+ const startClasses = `pds-button__icon${this.hasStartContent ? '' : ' pds-button__icon--empty'}${this.loading ? ' pds-button__icon--hidden' : ''}`;
166
+ return h("span", { class: startClasses }, h("slot", { name: "start", onSlotchange: this.handleStartSlotChange }));
158
167
  }
159
168
  renderEndContent() {
160
169
  if (this.iconOnly) {
@@ -164,8 +173,9 @@ const PdsButton = /*@__PURE__*/ proxyCustomElement(class PdsButton extends HTMLE
164
173
  return (h("pds-icon", { class: this.loading ? 'pds-button__icon--hidden' : '', icon: caretDown, part: "caret", "aria-hidden": "true" }));
165
174
  }
166
175
  // Always render the end slot so slotted content is projected reliably.
167
- // CSS hides the wrapper when no content is slotted (prevents empty gap space).
168
- return h("span", { class: `pds-button__icon ${this.loading ? 'pds-button__icon--hidden' : ''}` }, h("slot", { name: "end" }));
176
+ // The --empty class hides the wrapper when no content is slotted (prevents empty gap space).
177
+ const endClasses = `pds-button__icon${this.hasEndContent ? '' : ' pds-button__icon--empty'}${this.loading ? ' pds-button__icon--hidden' : ''}`;
178
+ return h("span", { class: endClasses }, h("slot", { name: "end", onSlotchange: this.handleEndSlotChange }));
169
179
  }
170
180
  render() {
171
181
  // Common props for both button and anchor elements
@@ -200,7 +210,9 @@ const PdsButton = /*@__PURE__*/ proxyCustomElement(class PdsButton extends HTMLE
200
210
  "type": [1],
201
211
  "value": [1],
202
212
  "size": [1],
203
- "variant": [1]
213
+ "variant": [1],
214
+ "hasStartContent": [32],
215
+ "hasEndContent": [32]
204
216
  }, [[16, "keydown", "handleFormKeyDown"]]]);
205
217
  function defineCustomElement() {
206
218
  if (typeof customElements === "undefined") {
@@ -1 +1 @@
1
- {"file":"pds-button2.js","mappings":"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","names":["__stencil_proxyCustomElement"],"sources":["src/components/pds-button/pds-button.scss?tag=pds-button&encapsulation=shadow","src/components/pds-button/pds-button.tsx"],"sourcesContent":[":host {\n --pds-button-background: var(--color-background-default);\n --pds-button-border: var(--pine-border);\n --pds-button-border-radius: var(--pine-border-radius-full);\n --pds-button-border-radius-start-end: var(--pine-border-radius-full);\n --pds-button-border-radius-start-start: var(--pine-border-radius-full);\n --pds-button-border-radius-end-end: var(--pine-border-radius-full);\n --pds-button-border-radius-end-start: var(--pine-border-radius-full);\n --pds-button-min-height: var(--pine-dimension-450);\n --pds-button-outline-offset: var(--pine-border-width);\n --color-border-default: transparent;\n --color-border-disabled: transparent;\n --color-border-focus: transparent;\n --color-border-hover: transparent;\n --button-loader-color: var(--color-text-default);\n\n display: inline-flex;\n vertical-align: middle;\n}\n\n:host([full-width=\"true\"]) {\n display: flex;\n width: 100%;\n\n a,\n button {\n justify-content: center;\n width: 100%;\n }\n\n .pds-button__content {\n justify-content: center;\n text-align: center;\n }\n}\n\n:host([loading=\"true\"]) {\n cursor: wait;\n pointer-events: none;\n}\n\n:host([disabled=\"true\"]) {\n pointer-events: none;\n}\n\n.pds-button {\n --pds-loader-color: var(--color-text-default);\n align-items: center;\n background-color: var(--pds-button-background, var(--color-background-default));\n border: var(--pds-button-border);\n border-color: var(--color-border-default);\n border-radius: var(--pds-button-border-radius);\n /* stylelint-disable-next-line order/properties-alphabetical-order */\n border-end-end-radius: var(--pds-button-border-radius-end-end, var(--pds-button-border-radius));\n border-end-start-radius: var(--pds-button-border-radius-end-start, var(--pds-button-border-radius));\n border-start-end-radius: var(--pds-button-border-radius-start-end, var(--pds-button-border-radius));\n border-start-start-radius: var(--pds-button-border-radius-start-start, var(--pds-button-border-radius));\n box-sizing: border-box;\n color: var(--color-text-default);\n cursor: pointer;\n display: flex;\n font: var(--pine-typography-body-brand-label);\n letter-spacing: var(--pine-letter-spacing);\n min-height: var(--pds-button-min-height);\n padding: calc(var(--pine-dimension-xs) - var(--pine-border-width)) var(--pine-dimension-sm);\n position: relative;\n text-decoration: none;\n\n pds-icon {\n color: currentColor;\n fill: currentColor;\n }\n\n &:hover {\n background-color: var(--color-background-hover);\n border-color: var(--color-border-hover);\n }\n\n &:focus-visible {\n border-color: var(--color-border-focus);\n box-shadow: var(--pds-button-box-shadow-focus, none);\n outline: var(--pds-button-outline-focus, var(--pine-outline-focus));\n outline-offset: var(--pds-button-outline-offset);\n }\n\n &:disabled {\n background-color: var(--color-background-disabled);\n border-color: var(--color-border-disabled);\n color: var(--color-text-disabled);\n pointer-events: none;\n }\n}\n\n.pds-button--primary {\n --color-background-default: var(--pine-color-primary);\n --color-background-hover: var(--pine-color-primary-hover);\n --color-background-disabled: var(--pine-color-primary-disabled);\n --color-border-default: var(--pine-color-primary);\n --color-border-hover: var(--pine-color-primary-hover);\n --color-text-default: var(--pine-color-text-primary);\n --color-text-disabled: var(--pine-color-text-primary-disabled);\n --color-outline: var(--pine-color-focus-ring);\n --button-loader-color: var(--pine-color-text-primary);\n}\n\n.pds-button--accent {\n --color-background-default: var(--pine-color-accent);\n --color-background-hover: var(--pine-color-accent-hover);\n --color-background-disabled: var(--pine-color-accent-disabled);\n --color-border-default: var(--pine-color-accent);\n --color-border-hover: var(--pine-color-accent-hover);\n /* stylelint-disable-next-line pine-design-system/prefer-semantic-tokens */\n --color-text-default: var(--pine-color-white);\n --color-text-disabled: var(--pine-color-text-accent-disabled);\n --color-outline: var(--pine-color-focus-ring);\n --button-loader-color: var(--pine-color-text-primary);\n}\n\n.pds-button--destructive {\n --color-background-default: var(--pine-color-danger);\n --color-background-hover: var(--pine-color-danger-hover);\n --color-background-disabled: var(--pine-color-danger-disabled);\n --color-border-default: var(--pine-color-danger);\n --color-border-hover: var(--pine-color-danger-hover);\n /* stylelint-disable-next-line pine-design-system/prefer-semantic-tokens */\n --color-text-default: var(--pine-color-white);\n --color-text-disabled: var(--pine-color-text-danger-disabled);\n --color-outline: var(--pine-color-focus-ring-danger);\n --button-loader-color: var(--pine-color-text-primary);\n\n &:focus-visible {\n outline-color: var(--pine-color-focus-ring-danger);\n }\n}\n\n.pds-button--secondary,\n.pds-button--disclosure {\n --color-background-default: var(--pine-color-secondary);\n --color-background-hover: var(--pine-color-secondary-hover);\n --color-background-disabled: var(--pine-color-secondary-disabled);\n --color-border-disabled: var(--pine-color-border-disabled);\n --color-border-focus: var(--pine-color-border);\n --color-border-hover: var(--pine-color-border-hover);\n --color-border-default: var(--pine-color-border);\n --color-text-default: var(--pine-color-text-secondary);\n --color-text-disabled: var(--pine-color-text-secondary-disabled);\n --color-outline: var(--pine-color-focus-ring);\n --button-loader-color: var(--pine-color-text-secondary);\n\n &:hover {\n background-color: var(--pine-color-secondary-hover);\n }\n}\n\n.pds-button--tertiary {\n --color-background-default: transparent;\n --color-background-hover: var(--pine-color-background-muted);\n --color-background-disabled: transparent;\n --color-border-default: transparent;\n --color-border-hover: var(--pine-color-background-muted);\n --color-border-disabled: transparent;\n --color-text-default: var(--pine-color-text-secondary);\n --color-text-disabled: var(--pine-color-text-secondary-disabled);\n --color-outline: var(--pine-color-focus-ring);\n --button-loader-color: var(--pine-color-text-secondary);\n}\n\n.pds-button--filter {\n --color-background-default: var(--pine-color-background-container);\n --color-background-hover: var(--pine-color-background-subtle);\n /* stylelint-disable-next-line pine-design-system/prefer-semantic-tokens */\n --color-background-disabled: var(--pine-color-white);\n --color-border-default: transparent;\n --color-border-hover: transparent;\n --color-border-focus: transparent;\n --color-text-default: var(--pine-color-text-secondary);\n --color-text-hover: var(--pine-color-text-hover);\n --color-text-disabled: var(--pine-color-text-disabled);\n --color-outline: var(--pine-color-focus-ring);\n --button-loader-color: var(--pine-color-text-secondary);\n --pds-button-border-radius: var(--pine-dimension-125);\n --pds-button-border-radius-start-end: var(--pine-dimension-125);\n --pds-button-border-radius-start-start: var(--pine-dimension-125);\n --pds-button-border-radius-end-end: var(--pine-dimension-125);\n --pds-button-border-radius-end-start: var(--pine-dimension-125);\n padding: var(--pine-dimension-xs) var(--pine-dimension-sm);\n\n &:disabled {\n background-color: var(--pine-color-background-container);\n }\n\n &:hover {\n color: var(--color-text-hover);\n }\n}\n\n.pds-button--unstyled {\n --color-background-default: transparent;\n --color-background-hover: transparent;\n --color-background-disabled: transparent;\n --color-text-default: var(--pine-color-text);\n --button-loader-color: var(--pine-color-text);\n border-width: var(--pine-dimension-none);\n margin: var(--pine-dimension-none);\n min-height: auto;\n padding: var(--pine-dimension-none);\n width: inherit;\n}\n\n.pds-button__content {\n align-items: center;\n display: inline-flex;\n gap: var(--pine-dimension-xs);\n position: relative;\n width: 100%;\n}\n\n.pds-button__icon {\n display: inline-flex;\n\n // Hide slot wrapper when no content is slotted to prevent empty flex gap space.\n // Named slots (start/end) are always rendered in the shadow DOM so the browser\n // can project light DOM content reliably regardless of render timing.\n &:not(:has(::slotted(*))) {\n display: none;\n }\n}\n\n.pds-button__text {\n align-items: center;\n display: inline-flex;\n white-space: nowrap;\n}\n\n.pds-button__icon--hidden,\n.pds-button__text--hidden {\n opacity: 0;\n}\n\n.pds-button__loader {\n height: var(--pine-dimension-250);\n left: 50%;\n position: absolute;\n top: 50%;\n transform: translate(-50%, -50%);\n width: var(--pine-dimension-250);\n}\n\n.pds-button--loading {\n cursor: wait;\n pointer-events: none;\n\n .pds-button__loader {\n pds-loader {\n --loader-color: var(--button-loader-color);\n }\n }\n}\n\n.pds-button--small {\n min-height: var(--pine-dimension-400);\n padding: calc(var(--pine-dimension-2xs) - var(--pine-border-width)) var(--pine-dimension-sm);\n}\n\n.pds-button--micro {\n font-size: var(--pine-font-size-085);\n min-height: var(--pine-dimension-300);\n padding: var(--pine-dimension-025) var(--pine-dimension-xs);\n}\n\n\n.pds-button--icon-only {\n align-items: center;\n border-radius: var(--pine-border-radius-full);\n height: var(--button-dimension);\n justify-content: center;\n min-height: var(--button-dimension);\n min-width: var(--button-dimension);\n padding: var(--pine-dimension-xs);\n width: var(--button-dimension);\n\n .pds-button__content {\n height: 100%;\n justify-content: center;\n width: 100%;\n }\n\n .pds-button__text--hidden {\n border: 0;\n clip: rect(0 0 0 0);\n clip-path: polygon(0 0, 0 0, 0 0);\n height: 1px;\n margin: -1px;\n overflow: hidden;\n padding: 0;\n position: absolute;\n white-space: nowrap;\n width: 1px;\n }\n\n &.pds-button--small {\n height: var(--pine-dimension-400);\n min-height: var(--pine-dimension-400);\n min-width: var(--pine-dimension-400);\n padding: var(--pine-dimension-2xs);\n width: var(--pine-dimension-400);\n }\n\n &.pds-button--micro {\n height: var(--pine-dimension-300);\n min-height: var(--pine-dimension-300);\n min-width: var(--pine-dimension-300);\n padding: var(--pine-dimension-3xs);\n width: var(--pine-dimension-300);\n }\n}\n","import { Component, Element, Event, EventEmitter, Host, h, Listen, Prop } from '@stencil/core';\nimport { hasShadowDom } from '../../utils/utils';\n\nimport { caretDown, addCircle } from '@pine-ds/icons/icons';\n\n/**\n * @part button - Exposes the button element for styling.\n * @part button-content - Exposes the button content for styling.\n * @part button-text - Exposes the button text for styling.\n * @part caret - Exposes the caret icon component for styling. Appears only on the disclosure variant.\n * @part icon - Exposes the icon component for styling.\n * @part loader-svg - Exposes the loader SVG element for color customization. Appears only when loading.\n * @slot (default) - Button text.\n * @slot start - Content to display before the button text.\n * @slot end - Content to display after the button text.\n*/\n\n@Component({\n tag: 'pds-button',\n styleUrls: ['pds-button.scss'],\n shadow: true,\n})\nexport class PdsButton {\n @Element() el: HTMLPdsButtonElement;\n\n /**\n * A unique identifier used for the underlying component `id` attribute.\n */\n @Prop() componentId: string;\n\n /**\n * Determines the button's disabled state.\n * @defaultValue false\n */\n @Prop() disabled? = false;\n\n /**\n * Determines if the button should take up the full width of its container.\n * @defaultValue false\n */\n @Prop() fullWidth? = false;\n\n /**\n * If provided, renders the component as an anchor (`<a>`) element instead of a button.\n * When using href, button-specific props (type, name, value, loading) will be ignored.\n */\n @Prop() href?: string;\n\n /**\n * Displays a leading icon in the button. DEPRECATED.\n * @defaultValue null\n * @deprecated Use `start` slot instead.\n */\n @Prop() icon?: string = null;\n\n /**\n * When true, displays only the icon and visually hides the text (keeping it accessible).\n */\n @Prop() iconOnly? = false;\n\n /**\n * Determines if the button is in a loading state.\n * When true, displays a loader and hides the button text.\n * @defaultValue false\n */\n @Prop() loading? = false;\n\n /**\n * Provides the button with a submittable name.\n */\n @Prop() name?: string;\n\n /**\n * Specifies where to open the linked document when href is provided.\n * Only applies when href is set.\n */\n @Prop() target?: '_blank' | '_self' | '_parent' | '_top';\n\n /**\n * Provides button with a type.\n * @defaultValue button\n */\n @Prop() type?: 'button' | 'reset' | 'submit' = 'button';\n\n /**\n * Provides button with a submittable value\n */\n @Prop() value?: string;\n\n /**\n * Sets the size of the button.\n * @defaultValue default\n */\n @Prop() size?: 'default' | 'small' | 'micro' = 'default';\n\n /**\n * Sets the style variant of the button.\n * @defaultValue primary\n */\n @Prop() variant: 'primary' | 'secondary' | 'tertiary' | 'accent' | 'disclosure' | 'destructive' | 'unstyled' | 'filter' = 'primary';\n\n @Event() pdsClick: EventEmitter<Event>;\n\n /**\n * Listen for Enter key presses on form inputs to trigger submit\n */\n @Listen('keydown', { target: 'body' })\n\n handleFormKeyDown(event: KeyboardEvent) {\n // Only handle Enter key for submit buttons that are not disabled\n if (event.key !== 'Enter' || this.type !== 'submit' || this.href || this.disabled) {\n return;\n }\n\n const target = event.target as Element;\n\n // Ensure event.target is an Element with matches method before proceeding\n if (!target || typeof target.matches !== 'function') {\n return;\n }\n const form = this.el.closest('form');\n\n // Check if the Enter key was pressed in a form input within the same form\n if (!form || !target || !form.contains(target)) {\n return;\n }\n\n // Check if target is a form input element (exclude reset buttons)\n const isFormInput = target.matches('input:not([type=\"submit\"]):not([type=\"button\"]):not([type=\"reset\"])') ||\n target.matches('pds-input') ||\n target.matches('pds-select') ||\n target.matches('pds-switch') ||\n target.matches('pds-checkbox') ||\n target.matches('pds-radio');\n\n if (isFormInput) {\n // Find all submit buttons in the form and check their actual properties\n const allSubmitButtons = Array.from(form.querySelectorAll('pds-button, button[type=\"submit\"], input[type=\"submit\"]'));\n const enabledSubmitButtons = allSubmitButtons.filter(button => {\n if (button.tagName.toLowerCase() === 'pds-button') {\n const pdsButton = button as HTMLPdsButtonElement;\n return pdsButton.type === 'submit' && !pdsButton.disabled;\n } else {\n return !button.hasAttribute('disabled');\n }\n });\n\n // Only synthesize click if this button is strictly the first enabled submit button\n if (enabledSubmitButtons.length > 0 && enabledSubmitButtons[0] === this.el) {\n event.preventDefault();\n this.el.click();\n }\n }\n }\n\n\n private handleClick = (ev: Event) => {\n if (this.loading) {\n ev.preventDefault();\n return;\n }\n\n // Prevent form submission for disabled buttons\n if (this.disabled) {\n ev.preventDefault();\n return;\n }\n\n if (!this.href && this.type != 'button') {\n // Handle form submission for Shadow DOM buttons\n if (hasShadowDom(this.el)) {\n const form = this.el.closest('form');\n if (form) {\n ev.preventDefault();\n\n const fakeButton = document.createElement('button');\n fakeButton.type = this.type;\n fakeButton.style.display = 'none';\n form.appendChild(fakeButton);\n fakeButton.click();\n fakeButton.remove();\n }\n }\n }\n this.pdsClick.emit(ev);\n };\n\n private classNames() {\n const classNames = ['pds-button'];\n\n if (this.variant) {\n classNames.push('pds-button--' + this.variant);\n }\n\n if (this.size && this.size !== 'default') {\n classNames.push('pds-button--' + this.size);\n }\n\n if (this.iconOnly) {\n classNames.push('pds-button--icon-only');\n }\n\n if (this.loading) {\n classNames.push('pds-button--loading');\n }\n\n return classNames.join(' ');\n }\n\n private renderStartContent() {\n if (this.variant === 'filter') {\n return (\n <pds-icon class={this.loading ? 'pds-button__icon--hidden' : ''} icon={addCircle} part=\"icon\" aria-hidden=\"true\"></pds-icon>\n );\n }\n\n // Deprecated icon prop still takes precedence over start slot\n const hasIcon = this.icon && this.variant !== 'disclosure';\n if (Boolean(hasIcon)) {\n return (\n <pds-icon class={this.loading ? 'pds-button__icon--hidden' : ''} name={this.icon} part=\"icon\" aria-hidden=\"true\"></pds-icon>\n );\n }\n\n // Always render the start slot so slotted content is projected reliably.\n // CSS hides the wrapper when no content is slotted (prevents empty gap space).\n return <span class={`pds-button__icon ${this.loading ? 'pds-button__icon--hidden' : ''}`}><slot name=\"start\" /></span>;\n }\n\n private renderEndContent() {\n if (this.iconOnly) {\n return null;\n }\n\n if (this.variant === 'disclosure') {\n return (\n <pds-icon class={this.loading ? 'pds-button__icon--hidden' : ''} icon={caretDown} part=\"caret\" aria-hidden=\"true\"></pds-icon>\n );\n }\n\n // Always render the end slot so slotted content is projected reliably.\n // CSS hides the wrapper when no content is slotted (prevents empty gap space).\n return <span class={`pds-button__icon ${this.loading ? 'pds-button__icon--hidden' : ''}`}><slot name=\"end\" /></span>;\n }\n\n render() {\n // Common props for both button and anchor elements\n const commonProps = {\n class: this.classNames(),\n part: 'button',\n };\n\n const attributes = () => {\n if (this.href) {\n return {\n // Anchor element props\n ...commonProps,\n href: this.disabled ? null : this.href,\n target: this.target,\n };\n }\n\n return {\n // Button element props\n ...commonProps,\n 'aria-busy': this.loading ? 'true' : null,\n 'aria-live': this.loading ? 'polite' : null,\n 'disabled': this.disabled,\n 'name': this.name,\n 'type': this.type,\n 'value': this.value,\n };\n };\n\n const ContentElement = this.href ? 'a' : 'button';\n\n // Hide text when loading or iconOnly is true\n const hideText = this.loading || this.iconOnly;\n\n const content = (\n <div class=\"pds-button__content\" part=\"button-content\">\n {this.renderStartContent()}\n\n <span class={`pds-button__text ${hideText ? 'pds-button__text--hidden' : ''}`} part=\"button-text\">\n <slot />\n </span>\n\n {this.loading && (\n <span class=\"pds-button__loader\">\n <pds-loader is-loading={true} size=\"var(--pine-font-size-body-2xl)\" variant=\"spinner\" exportparts=\"loader-svg\">\n Loading...\n </pds-loader>\n </span>\n )}\n\n {this.renderEndContent()}\n </div>\n );\n\n return (\n <Host\n aria-disabled={this.disabled ? 'true' : null}\n id={this.componentId}\n onClick={this.handleClick}\n variant={this.variant}\n >\n <ContentElement {...attributes()}>\n {content}\n </ContentElement>\n </Host>\n );\n }\n}\n"],"version":3}
1
+ {"file":"pds-button2.js","mappings":"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","names":["__stencil_proxyCustomElement"],"sources":["src/components/pds-button/pds-button.scss?tag=pds-button&encapsulation=shadow","src/components/pds-button/pds-button.tsx"],"sourcesContent":[":host {\n --pds-button-background: var(--color-background-default);\n --pds-button-border: var(--pine-border);\n --pds-button-border-radius: var(--pine-border-radius-full);\n --pds-button-border-radius-start-end: var(--pine-border-radius-full);\n --pds-button-border-radius-start-start: var(--pine-border-radius-full);\n --pds-button-border-radius-end-end: var(--pine-border-radius-full);\n --pds-button-border-radius-end-start: var(--pine-border-radius-full);\n --pds-button-min-height: var(--pine-dimension-450);\n --pds-button-outline-offset: var(--pine-border-width);\n --color-border-default: transparent;\n --color-border-disabled: transparent;\n --color-border-focus: transparent;\n --color-border-hover: transparent;\n --button-loader-color: var(--color-text-default);\n\n display: inline-flex;\n vertical-align: middle;\n}\n\n:host([full-width=\"true\"]) {\n display: flex;\n width: 100%;\n\n a,\n button {\n justify-content: center;\n width: 100%;\n }\n\n .pds-button__content {\n justify-content: center;\n text-align: center;\n }\n}\n\n:host([loading=\"true\"]) {\n cursor: wait;\n pointer-events: none;\n}\n\n:host([disabled=\"true\"]) {\n pointer-events: none;\n}\n\n.pds-button {\n --pds-loader-color: var(--color-text-default);\n align-items: center;\n background-color: var(--pds-button-background, var(--color-background-default));\n border: var(--pds-button-border);\n border-color: var(--color-border-default);\n border-radius: var(--pds-button-border-radius);\n /* stylelint-disable-next-line order/properties-alphabetical-order */\n border-end-end-radius: var(--pds-button-border-radius-end-end, var(--pds-button-border-radius));\n border-end-start-radius: var(--pds-button-border-radius-end-start, var(--pds-button-border-radius));\n border-start-end-radius: var(--pds-button-border-radius-start-end, var(--pds-button-border-radius));\n border-start-start-radius: var(--pds-button-border-radius-start-start, var(--pds-button-border-radius));\n box-sizing: border-box;\n color: var(--color-text-default);\n cursor: pointer;\n display: flex;\n font: var(--pine-typography-body-brand-label);\n letter-spacing: var(--pine-letter-spacing);\n min-height: var(--pds-button-min-height);\n padding: calc(var(--pine-dimension-xs) - var(--pine-border-width)) var(--pine-dimension-sm);\n position: relative;\n text-decoration: none;\n\n pds-icon {\n color: currentColor;\n fill: currentColor;\n }\n\n &:hover {\n background-color: var(--color-background-hover);\n border-color: var(--color-border-hover);\n }\n\n &:focus-visible {\n border-color: var(--color-border-focus);\n box-shadow: var(--pds-button-box-shadow-focus, none);\n outline: var(--pds-button-outline-focus, var(--pine-outline-focus));\n outline-offset: var(--pds-button-outline-offset);\n }\n\n &:disabled {\n background-color: var(--color-background-disabled);\n border-color: var(--color-border-disabled);\n color: var(--color-text-disabled);\n pointer-events: none;\n }\n}\n\n.pds-button--primary {\n --color-background-default: var(--pine-color-primary);\n --color-background-hover: var(--pine-color-primary-hover);\n --color-background-disabled: var(--pine-color-primary-disabled);\n --color-border-default: var(--pine-color-primary);\n --color-border-hover: var(--pine-color-primary-hover);\n --color-text-default: var(--pine-color-text-primary);\n --color-text-disabled: var(--pine-color-text-primary-disabled);\n --color-outline: var(--pine-color-focus-ring);\n --button-loader-color: var(--pine-color-text-primary);\n}\n\n.pds-button--accent {\n --color-background-default: var(--pine-color-accent);\n --color-background-hover: var(--pine-color-accent-hover);\n --color-background-disabled: var(--pine-color-accent-disabled);\n --color-border-default: var(--pine-color-accent);\n --color-border-hover: var(--pine-color-accent-hover);\n /* stylelint-disable-next-line pine-design-system/prefer-semantic-tokens */\n --color-text-default: var(--pine-color-white);\n --color-text-disabled: var(--pine-color-text-accent-disabled);\n --color-outline: var(--pine-color-focus-ring);\n --button-loader-color: var(--pine-color-text-primary);\n}\n\n.pds-button--destructive {\n --color-background-default: var(--pine-color-danger);\n --color-background-hover: var(--pine-color-danger-hover);\n --color-background-disabled: var(--pine-color-danger-disabled);\n --color-border-default: var(--pine-color-danger);\n --color-border-hover: var(--pine-color-danger-hover);\n /* stylelint-disable-next-line pine-design-system/prefer-semantic-tokens */\n --color-text-default: var(--pine-color-white);\n --color-text-disabled: var(--pine-color-text-danger-disabled);\n --color-outline: var(--pine-color-focus-ring-danger);\n --button-loader-color: var(--pine-color-text-primary);\n\n &:focus-visible {\n outline-color: var(--pine-color-focus-ring-danger);\n }\n}\n\n.pds-button--secondary,\n.pds-button--disclosure {\n --color-background-default: var(--pine-color-secondary);\n --color-background-hover: var(--pine-color-secondary-hover);\n --color-background-disabled: var(--pine-color-secondary-disabled);\n --color-border-disabled: var(--pine-color-border-disabled);\n --color-border-focus: var(--pine-color-border);\n --color-border-hover: var(--pine-color-border-hover);\n --color-border-default: var(--pine-color-border);\n --color-text-default: var(--pine-color-text-secondary);\n --color-text-disabled: var(--pine-color-text-secondary-disabled);\n --color-outline: var(--pine-color-focus-ring);\n --button-loader-color: var(--pine-color-text-secondary);\n\n &:hover {\n background-color: var(--pine-color-secondary-hover);\n }\n}\n\n.pds-button--tertiary {\n --color-background-default: transparent;\n --color-background-hover: var(--pine-color-background-muted);\n --color-background-disabled: transparent;\n --color-border-default: transparent;\n --color-border-hover: var(--pine-color-background-muted);\n --color-border-disabled: transparent;\n --color-text-default: var(--pine-color-text-secondary);\n --color-text-disabled: var(--pine-color-text-secondary-disabled);\n --color-outline: var(--pine-color-focus-ring);\n --button-loader-color: var(--pine-color-text-secondary);\n}\n\n.pds-button--filter {\n --color-background-default: var(--pine-color-background-container);\n --color-background-hover: var(--pine-color-background-subtle);\n /* stylelint-disable-next-line pine-design-system/prefer-semantic-tokens */\n --color-background-disabled: var(--pine-color-white);\n --color-border-default: transparent;\n --color-border-hover: transparent;\n --color-border-focus: transparent;\n --color-text-default: var(--pine-color-text-secondary);\n --color-text-hover: var(--pine-color-text-hover);\n --color-text-disabled: var(--pine-color-text-disabled);\n --color-outline: var(--pine-color-focus-ring);\n --button-loader-color: var(--pine-color-text-secondary);\n --pds-button-border-radius: var(--pine-dimension-125);\n --pds-button-border-radius-start-end: var(--pine-dimension-125);\n --pds-button-border-radius-start-start: var(--pine-dimension-125);\n --pds-button-border-radius-end-end: var(--pine-dimension-125);\n --pds-button-border-radius-end-start: var(--pine-dimension-125);\n padding: var(--pine-dimension-xs) var(--pine-dimension-sm);\n\n &:disabled {\n background-color: var(--pine-color-background-container);\n }\n\n &:hover {\n color: var(--color-text-hover);\n }\n}\n\n.pds-button--unstyled {\n --color-background-default: transparent;\n --color-background-hover: transparent;\n --color-background-disabled: transparent;\n --color-text-default: var(--pine-color-text);\n --button-loader-color: var(--pine-color-text);\n border-width: var(--pine-dimension-none);\n margin: var(--pine-dimension-none);\n min-height: auto;\n padding: var(--pine-dimension-none);\n width: inherit;\n}\n\n.pds-button__content {\n align-items: center;\n display: inline-flex;\n gap: var(--pine-dimension-xs);\n position: relative;\n width: 100%;\n}\n\n.pds-button__icon {\n display: inline-flex;\n\n &--empty {\n display: none;\n }\n}\n\n.pds-button__text {\n align-items: center;\n display: inline-flex;\n white-space: nowrap;\n}\n\n.pds-button__icon--hidden,\n.pds-button__text--hidden {\n opacity: 0;\n}\n\n.pds-button__loader {\n height: var(--pine-dimension-250);\n left: 50%;\n position: absolute;\n top: 50%;\n transform: translate(-50%, -50%);\n width: var(--pine-dimension-250);\n}\n\n.pds-button--loading {\n cursor: wait;\n pointer-events: none;\n\n .pds-button__loader {\n pds-loader {\n --loader-color: var(--button-loader-color);\n }\n }\n}\n\n.pds-button--small {\n min-height: var(--pine-dimension-400);\n padding: calc(var(--pine-dimension-2xs) - var(--pine-border-width)) var(--pine-dimension-sm);\n}\n\n.pds-button--micro {\n font-size: var(--pine-font-size-085);\n min-height: var(--pine-dimension-300);\n padding: var(--pine-dimension-025) var(--pine-dimension-xs);\n}\n\n\n.pds-button--icon-only {\n align-items: center;\n border-radius: var(--pine-border-radius-full);\n height: var(--button-dimension);\n justify-content: center;\n min-height: var(--button-dimension);\n min-width: var(--button-dimension);\n padding: var(--pine-dimension-xs);\n width: var(--button-dimension);\n\n .pds-button__content {\n height: 100%;\n justify-content: center;\n width: 100%;\n }\n\n .pds-button__text--hidden {\n border: 0;\n clip: rect(0 0 0 0);\n clip-path: polygon(0 0, 0 0, 0 0);\n height: 1px;\n margin: -1px;\n overflow: hidden;\n padding: 0;\n position: absolute;\n white-space: nowrap;\n width: 1px;\n }\n\n &.pds-button--small {\n height: var(--pine-dimension-400);\n min-height: var(--pine-dimension-400);\n min-width: var(--pine-dimension-400);\n padding: var(--pine-dimension-2xs);\n width: var(--pine-dimension-400);\n }\n\n &.pds-button--micro {\n height: var(--pine-dimension-300);\n min-height: var(--pine-dimension-300);\n min-width: var(--pine-dimension-300);\n padding: var(--pine-dimension-3xs);\n width: var(--pine-dimension-300);\n }\n}\n","import { Component, Element, Event, EventEmitter, Host, h, Listen, Prop, State } from '@stencil/core';\nimport { hasShadowDom } from '../../utils/utils';\n\nimport { caretDown, addCircle } from '@pine-ds/icons/icons';\n\n/**\n * @part button - Exposes the button element for styling.\n * @part button-content - Exposes the button content for styling.\n * @part button-text - Exposes the button text for styling.\n * @part caret - Exposes the caret icon component for styling. Appears only on the disclosure variant.\n * @part icon - Exposes the icon component for styling.\n * @part loader-svg - Exposes the loader SVG element for color customization. Appears only when loading.\n * @slot (default) - Button text.\n * @slot start - Content to display before the button text.\n * @slot end - Content to display after the button text.\n*/\n\n@Component({\n tag: 'pds-button',\n styleUrls: ['pds-button.scss'],\n shadow: true,\n})\nexport class PdsButton {\n @Element() el: HTMLPdsButtonElement;\n\n /**\n * A unique identifier used for the underlying component `id` attribute.\n */\n @Prop() componentId: string;\n\n /**\n * Determines the button's disabled state.\n * @defaultValue false\n */\n @Prop() disabled? = false;\n\n /**\n * Determines if the button should take up the full width of its container.\n * @defaultValue false\n */\n @Prop() fullWidth? = false;\n\n /**\n * If provided, renders the component as an anchor (`<a>`) element instead of a button.\n * When using href, button-specific props (type, name, value, loading) will be ignored.\n */\n @Prop() href?: string;\n\n /**\n * Displays a leading icon in the button. DEPRECATED.\n * @defaultValue null\n * @deprecated Use `start` slot instead.\n */\n @Prop() icon?: string = null;\n\n /**\n * When true, displays only the icon and visually hides the text (keeping it accessible).\n */\n @Prop() iconOnly? = false;\n\n /**\n * Determines if the button is in a loading state.\n * When true, displays a loader and hides the button text.\n * @defaultValue false\n */\n @Prop() loading? = false;\n\n /**\n * Provides the button with a submittable name.\n */\n @Prop() name?: string;\n\n /**\n * Specifies where to open the linked document when href is provided.\n * Only applies when href is set.\n */\n @Prop() target?: '_blank' | '_self' | '_parent' | '_top';\n\n /**\n * Provides button with a type.\n * @defaultValue button\n */\n @Prop() type?: 'button' | 'reset' | 'submit' = 'button';\n\n /**\n * Provides button with a submittable value\n */\n @Prop() value?: string;\n\n /**\n * Sets the size of the button.\n * @defaultValue default\n */\n @Prop() size?: 'default' | 'small' | 'micro' = 'default';\n\n /**\n * Sets the style variant of the button.\n * @defaultValue primary\n */\n @Prop() variant: 'primary' | 'secondary' | 'tertiary' | 'accent' | 'disclosure' | 'destructive' | 'unstyled' | 'filter' = 'primary';\n\n @State() hasStartContent = false;\n @State() hasEndContent = false;\n\n @Event() pdsClick: EventEmitter<Event>;\n\n /**\n * Listen for Enter key presses on form inputs to trigger submit\n */\n @Listen('keydown', { target: 'body' })\n\n handleFormKeyDown(event: KeyboardEvent) {\n // Only handle Enter key for submit buttons that are not disabled\n if (event.key !== 'Enter' || this.type !== 'submit' || this.href || this.disabled) {\n return;\n }\n\n const target = event.target as Element;\n\n // Ensure event.target is an Element with matches method before proceeding\n if (!target || typeof target.matches !== 'function') {\n return;\n }\n const form = this.el.closest('form');\n\n // Check if the Enter key was pressed in a form input within the same form\n if (!form || !target || !form.contains(target)) {\n return;\n }\n\n // Check if target is a form input element (exclude reset buttons)\n const isFormInput = target.matches('input:not([type=\"submit\"]):not([type=\"button\"]):not([type=\"reset\"])') ||\n target.matches('pds-input') ||\n target.matches('pds-select') ||\n target.matches('pds-switch') ||\n target.matches('pds-checkbox') ||\n target.matches('pds-radio');\n\n if (isFormInput) {\n // Find all submit buttons in the form and check their actual properties\n const allSubmitButtons = Array.from(form.querySelectorAll('pds-button, button[type=\"submit\"], input[type=\"submit\"]'));\n const enabledSubmitButtons = allSubmitButtons.filter(button => {\n if (button.tagName.toLowerCase() === 'pds-button') {\n const pdsButton = button as HTMLPdsButtonElement;\n return pdsButton.type === 'submit' && !pdsButton.disabled;\n } else {\n return !button.hasAttribute('disabled');\n }\n });\n\n // Only synthesize click if this button is strictly the first enabled submit button\n if (enabledSubmitButtons.length > 0 && enabledSubmitButtons[0] === this.el) {\n event.preventDefault();\n this.el.click();\n }\n }\n }\n\n\n private handleStartSlotChange = (event: Event) => {\n this.hasStartContent = (event.target as HTMLSlotElement).assignedElements({ flatten: true }).length > 0;\n };\n\n private handleEndSlotChange = (event: Event) => {\n this.hasEndContent = (event.target as HTMLSlotElement).assignedElements({ flatten: true }).length > 0;\n };\n\n private handleClick = (ev: Event) => {\n if (this.loading) {\n ev.preventDefault();\n return;\n }\n\n // Prevent form submission for disabled buttons\n if (this.disabled) {\n ev.preventDefault();\n return;\n }\n\n if (!this.href && this.type != 'button') {\n // Handle form submission for Shadow DOM buttons\n if (hasShadowDom(this.el)) {\n const form = this.el.closest('form');\n if (form) {\n ev.preventDefault();\n\n const fakeButton = document.createElement('button');\n fakeButton.type = this.type;\n fakeButton.style.display = 'none';\n form.appendChild(fakeButton);\n fakeButton.click();\n fakeButton.remove();\n }\n }\n }\n this.pdsClick.emit(ev);\n };\n\n private classNames() {\n const classNames = ['pds-button'];\n\n if (this.variant) {\n classNames.push('pds-button--' + this.variant);\n }\n\n if (this.size && this.size !== 'default') {\n classNames.push('pds-button--' + this.size);\n }\n\n if (this.iconOnly) {\n classNames.push('pds-button--icon-only');\n }\n\n if (this.loading) {\n classNames.push('pds-button--loading');\n }\n\n return classNames.join(' ');\n }\n\n private renderStartContent() {\n if (this.variant === 'filter') {\n return (\n <pds-icon class={this.loading ? 'pds-button__icon--hidden' : ''} icon={addCircle} part=\"icon\" aria-hidden=\"true\"></pds-icon>\n );\n }\n\n // Deprecated icon prop still takes precedence over start slot\n const hasIcon = this.icon && this.variant !== 'disclosure';\n if (Boolean(hasIcon)) {\n return (\n <pds-icon class={this.loading ? 'pds-button__icon--hidden' : ''} name={this.icon} part=\"icon\" aria-hidden=\"true\"></pds-icon>\n );\n }\n\n // Always render the start slot so slotted content is projected reliably.\n // The --empty class hides the wrapper when no content is slotted (prevents empty gap space).\n const startClasses = `pds-button__icon${this.hasStartContent ? '' : ' pds-button__icon--empty'}${this.loading ? ' pds-button__icon--hidden' : ''}`;\n return <span class={startClasses}><slot name=\"start\" onSlotchange={this.handleStartSlotChange} /></span>;\n }\n\n private renderEndContent() {\n if (this.iconOnly) {\n return null;\n }\n\n if (this.variant === 'disclosure') {\n return (\n <pds-icon class={this.loading ? 'pds-button__icon--hidden' : ''} icon={caretDown} part=\"caret\" aria-hidden=\"true\"></pds-icon>\n );\n }\n\n // Always render the end slot so slotted content is projected reliably.\n // The --empty class hides the wrapper when no content is slotted (prevents empty gap space).\n const endClasses = `pds-button__icon${this.hasEndContent ? '' : ' pds-button__icon--empty'}${this.loading ? ' pds-button__icon--hidden' : ''}`;\n return <span class={endClasses}><slot name=\"end\" onSlotchange={this.handleEndSlotChange} /></span>;\n }\n\n render() {\n // Common props for both button and anchor elements\n const commonProps = {\n class: this.classNames(),\n part: 'button',\n };\n\n const attributes = () => {\n if (this.href) {\n return {\n // Anchor element props\n ...commonProps,\n href: this.disabled ? null : this.href,\n target: this.target,\n };\n }\n\n return {\n // Button element props\n ...commonProps,\n 'aria-busy': this.loading ? 'true' : null,\n 'aria-live': this.loading ? 'polite' : null,\n 'disabled': this.disabled,\n 'name': this.name,\n 'type': this.type,\n 'value': this.value,\n };\n };\n\n const ContentElement = this.href ? 'a' : 'button';\n\n // Hide text when loading or iconOnly is true\n const hideText = this.loading || this.iconOnly;\n\n const content = (\n <div class=\"pds-button__content\" part=\"button-content\">\n {this.renderStartContent()}\n\n <span class={`pds-button__text ${hideText ? 'pds-button__text--hidden' : ''}`} part=\"button-text\">\n <slot />\n </span>\n\n {this.loading && (\n <span class=\"pds-button__loader\">\n <pds-loader is-loading={true} size=\"var(--pine-font-size-body-2xl)\" variant=\"spinner\" exportparts=\"loader-svg\">\n Loading...\n </pds-loader>\n </span>\n )}\n\n {this.renderEndContent()}\n </div>\n );\n\n return (\n <Host\n aria-disabled={this.disabled ? 'true' : null}\n id={this.componentId}\n onClick={this.handleClick}\n variant={this.variant}\n >\n <ContentElement {...attributes()}>\n {content}\n </ContentElement>\n </Host>\n );\n }\n}\n"],"version":3}
@@ -1,5 +1,6 @@
1
1
  import { proxyCustomElement, HTMLElement, createEvent, h, Host } from '@stencil/core/internal/client';
2
2
  import { f as copy } from './index2.js';
3
+ import { s as setupTruncationTooltip } from './truncation-tooltip.js';
3
4
  import { d as defineCustomElement$4 } from './pds-button2.js';
4
5
  import { d as defineCustomElement$3 } from './pds-icon2.js';
5
6
  import { d as defineCustomElement$2 } from './pds-loader2.js';
@@ -14,6 +15,7 @@ const PdsCopytext$1 = /*@__PURE__*/ proxyCustomElement(class PdsCopytext extends
14
15
  }
15
16
  this.__attachShadow();
16
17
  this.pdsCopyTextClick = createEvent(this, "pdsCopyTextClick", 7);
18
+ this.truncationCleanup = null;
17
19
  /**
18
20
  * Determines whether `copytext` should have a visible border.
19
21
  * @defaultValue true
@@ -26,6 +28,7 @@ const PdsCopytext$1 = /*@__PURE__*/ proxyCustomElement(class PdsCopytext extends
26
28
  this.fullWidth = false;
27
29
  /**
28
30
  * Determines whether the `value` should truncate and display with an ellipsis.
31
+ * When text overflows, a tooltip showing the full value will appear on hover/focus.
29
32
  * @defaultValue false
30
33
  */
31
34
  this.truncate = false;
@@ -44,6 +47,43 @@ const PdsCopytext$1 = /*@__PURE__*/ proxyCustomElement(class PdsCopytext extends
44
47
  this.copyToClipboard(this.value);
45
48
  };
46
49
  }
50
+ handleTruncateChange(newValue) {
51
+ if (newValue) {
52
+ this.initTruncationTooltip();
53
+ }
54
+ else {
55
+ this.destroyTruncationTooltip();
56
+ }
57
+ }
58
+ handleValueChange() {
59
+ if (this.truncate) {
60
+ this.initTruncationTooltip();
61
+ }
62
+ }
63
+ componentDidLoad() {
64
+ if (this.truncate) {
65
+ this.initTruncationTooltip();
66
+ }
67
+ }
68
+ disconnectedCallback() {
69
+ this.destroyTruncationTooltip();
70
+ }
71
+ initTruncationTooltip() {
72
+ this.destroyTruncationTooltip();
73
+ if (this.valueSpanEl) {
74
+ this.truncationCleanup = setupTruncationTooltip({
75
+ hostEl: this.el,
76
+ contentEl: this.valueSpanEl,
77
+ getTooltipText: () => this.value || '',
78
+ });
79
+ }
80
+ }
81
+ destroyTruncationTooltip() {
82
+ if (this.truncationCleanup) {
83
+ this.truncationCleanup();
84
+ this.truncationCleanup = null;
85
+ }
86
+ }
47
87
  classNames() {
48
88
  const classNames = ['pds-copytext'];
49
89
  if (this.border) {
@@ -58,8 +98,13 @@ const PdsCopytext$1 = /*@__PURE__*/ proxyCustomElement(class PdsCopytext extends
58
98
  return classNames.join(' ');
59
99
  }
60
100
  render() {
61
- return (h(Host, { key: 'a2922d7401e2fab4c49824354321abf49c0ee6ee', class: this.classNames(), id: this.componentId }, h("pds-button", { key: '7a783ada0778a25b5f46e549353a6b454ac5001e', type: "button", variant: "unstyled", onClick: this.handleClick }, h("span", { key: 'a14fbee0958bfe08abc9ebaebd71e0cfe3ab0e8f' }, this.value), h("pds-icon", { key: '5134fd11dcfb2a05779818d51561fbe4c4fbf00a', icon: copy, size: "16px" }))));
101
+ return (h(Host, { key: 'bbca278ca4f2567d3aa5dfa27106fc09f0f4d959', class: this.classNames(), id: this.componentId }, h("pds-button", { key: '8a62ae4d01681648a95b313970a89f8641f1d8c9', type: "button", variant: "unstyled", onClick: this.handleClick }, h("span", { key: '465585ce0780a19113f8e7897a9c7af7114b2a1d', ref: (el) => this.valueSpanEl = el }, this.value), h("pds-icon", { key: 'db0295dfec0c4a1acbea50b849d631ea6325bf00', icon: copy, size: "16px" }))));
62
102
  }
103
+ get el() { return this; }
104
+ static get watchers() { return {
105
+ "truncate": ["handleTruncateChange"],
106
+ "value": ["handleValueChange"]
107
+ }; }
63
108
  static get style() { return pdsCopytextCss; }
64
109
  }, [257, "pds-copytext", {
65
110
  "border": [516],
@@ -67,6 +112,9 @@ const PdsCopytext$1 = /*@__PURE__*/ proxyCustomElement(class PdsCopytext extends
67
112
  "fullWidth": [4, "full-width"],
68
113
  "truncate": [4],
69
114
  "value": [1]
115
+ }, undefined, {
116
+ "truncate": ["handleTruncateChange"],
117
+ "value": ["handleValueChange"]
70
118
  }]);
71
119
  function defineCustomElement$1() {
72
120
  if (typeof customElements === "undefined") {
@@ -1 +1 @@
1
- {"file":"pds-copytext.js","mappings":";;;;;;AAAA,MAAM,cAAc,GAAG,i2FAAi2F;;MCS32FA,aAAW,iBAAAC,kBAAA,CAAA,MAAA,WAAA,SAAA,WAAA,CAAA;AALxB,IAAA,WAAA,CAAA,YAAA,EAAA;;;;;;;AAME;;;AAGG;AACsB,QAAA,IAAM,CAAA,MAAA,GAAG,IAAI;AAOtC;;;AAGG;AACK,QAAA,IAAS,CAAA,SAAA,GAAG,KAAK;AAEzB;;;AAGG;AACK,QAAA,IAAQ,CAAA,QAAA,GAAG,KAAK;AAYhB,QAAA,IAAA,CAAA,eAAe,GAAG,OAAO,KAAa,KAAI;AAChD,YAAA,IAAI;AACF,gBAAA,IAAI,OAAO,SAAS,CAAC,SAAS,KAAK,WAAW,EAAE;oBAC9C,MAAM,SAAS,CAAC,SAAS,CAAC,SAAS,CAAC,KAAK,CAAC;AAC1C,oBAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,qBAAqB,CAAC;;;YAEnD,OAAO,GAAG,EAAE;gBACZ,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAoC,iCAAA,EAAA,GAAG,CAAE,CAAA,CAAC;;AAEzE,SAAC;AAEO,QAAA,IAAW,CAAA,WAAA,GAAG,MAAK;AACzB,YAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC;AAClC,SAAC;AA8BF;IA5BS,UAAU,GAAA;AAChB,QAAA,MAAM,UAAU,GAAG,CAAC,cAAc,CAAC;AAEnC,QAAA,IAAI,IAAI,CAAC,MAAM,EAAE;AACf,YAAA,UAAU,CAAC,IAAI,CAAC,wBAAwB,CAAC;;AAG3C,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE;AAClB,YAAA,UAAU,CAAC,IAAI,CAAC,0BAA0B,CAAC;;AAG7C,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;AACjB,YAAA,UAAU,CAAC,IAAI,CAAC,yBAAyB,CAAC;;AAG5C,QAAA,OAAO,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC;;IAG7B,MAAM,GAAA;AACJ,QAAA,QACE,CAAA,CAAC,IAAI,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAC,KAAK,EAAE,IAAI,CAAC,UAAU,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,WAAW,EAAA,EAClD,CAAA,CAAA,YAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAY,IAAI,EAAC,QAAQ,EAAC,OAAO,EAAC,UAAU,EAAC,OAAO,EAAE,IAAI,CAAC,WAAW,EAAA,EACpE,CAAO,CAAA,MAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAA,EAAA,IAAI,CAAC,KAAK,CAAQ,EACzB,CAAU,CAAA,UAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAA,IAAI,EAAEC,IAAQ,EAAE,IAAI,EAAC,MAAM,EAAY,CAAA,CACtC,CACR;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","names":["PdsCopytext","__stencil_proxyCustomElement","copyIcon"],"sources":["src/components/pds-copytext/pds-copytext.scss?tag=pds-copytext&encapsulation=shadow","src/components/pds-copytext/pds-copytext.tsx"],"sourcesContent":[":host(.pds-copytext) {\n // Update custom prop usage in Button before changing\n --copytext-color-background-hover: var(--pine-color-background-inset);\n\n\n pds-button {\n align-items: center;\n border-radius: var(--pine-border-radius-full);\n border-width: var(--pine-dimension-none);\n display: inline-flex;\n font-family: var(--pine-font-family-heading);\n font-size: var(--pine-font-size-body-md);\n font-weight: var(--pine-font-weight-body-medium);\n letter-spacing: var(--pine-letter-spacing);\n line-height: var(--pine-line-height-body);\n max-width: 100%;\n\n &::part(button) {\n padding-block: var(--pine-dimension-2xs);\n padding-inline: var(--pine-dimension-xs);\n }\n\n &::part(button):hover {\n // Update custom prop usage in Button before changing\n background-color: var(--copytext-color-background-hover);\n color: var(--pine-color-text-secondary-hover);\n }\n\n span {\n font-weight: var(--pine-font-weight-medium);\n margin-inline-end: var(--pine-dimension-xs);\n white-space: nowrap;\n }\n\n :nth-child(2) {\n flex-shrink: 0;\n }\n }\n\n // bordered\n\n &:host(.pds-copytext--bordered) {\n border-width: var(--pine-dimension-none);\n padding: var(--pine-dimension-none);\n\n pds-button {\n padding: var(--pine-dimension-none);\n\n &::part(button) {\n padding: var(--pine-dimension-none);\n }\n\n &::part(button):hover {\n background-color: transparent;\n }\n }\n\n span {\n background: var(--pine-color-secondary);\n border: var(--pine-border);\n border-radius: var(--pine-border-radius-full);\n margin-inline-end: var(--pine-dimension-sm);\n padding-block: var(--pine-dimension-xs);\n padding-inline: var(--pine-dimension-sm);\n }\n\n :hover {\n span {\n border: var(--pine-border-hover);\n }\n }\n }\n\n // full width and truncated\n &:host(.pds-copytext--full-width),\n &:host(.pds-copytext--truncated) {\n pds-button {\n display: inline-flex;\n min-width: auto;\n width: 100%;\n\n &::part(button-content),\n &::part(button-text) {\n flex-shrink: 1;\n width: 100%;\n }\n\n span {\n text-align: start;\n width: 100%;\n }\n }\n }\n\n // full width\n &:host(.pds-copytext--full-width) {\n pds-button {\n justify-content: space-between;\n }\n }\n\n // truncated\n &:host(.pds-copytext--truncated) {\n pds-button span {\n overflow: hidden;\n text-overflow: ellipsis;\n }\n }\n}\n","import { Component, Event, EventEmitter, Host, h, Prop } from '@stencil/core';\n\nimport { copy as copyIcon } from '@pine-ds/icons/icons';\n\n@Component({\n tag: 'pds-copytext',\n styleUrls: ['pds-copytext.scss'],\n shadow: true,\n})\nexport class PdsCopytext {\n /**\n * Determines whether `copytext` should have a visible border.\n * @defaultValue true\n */\n @Prop({ reflect: true }) border = true;\n\n /**\n * A unique identifier used for the underlying component `id` attribute.\n */\n @Prop() componentId: string;\n\n /**\n * Determines whether `copytext` should expand to the full width of its container.\n * @defaultValue false\n */\n @Prop() fullWidth = false;\n\n /**\n * Determines whether the `value` should truncate and display with an ellipsis.\n * @defaultValue false\n */\n @Prop() truncate = false;\n\n /**\n * The string displayed that is also copied to the clipboard upon interaction.\n */\n @Prop() value!: string;\n\n /**\n * Event fired when copyText button is clicked.\n */\n @Event() pdsCopyTextClick: EventEmitter<string>;\n\n private copyToClipboard = async (value: string) => {\n try {\n if (typeof navigator.clipboard !== 'undefined') {\n await navigator.clipboard.writeText(value);\n this.pdsCopyTextClick.emit('Copied to clipboard');\n }\n } catch (err) {\n this.pdsCopyTextClick.emit(`Error writing text to clipboard: ${err}`);\n }\n };\n\n private handleClick = () => {\n this.copyToClipboard(this.value);\n };\n\n private classNames() {\n const classNames = ['pds-copytext'];\n\n if (this.border) {\n classNames.push('pds-copytext--bordered');\n }\n\n if (this.fullWidth) {\n classNames.push('pds-copytext--full-width');\n }\n\n if (this.truncate) {\n classNames.push('pds-copytext--truncated');\n }\n\n return classNames.join(' ');\n }\n\n render() {\n return (\n <Host class={this.classNames()} id={this.componentId}>\n <pds-button type=\"button\" variant=\"unstyled\" onClick={this.handleClick}>\n <span>{this.value}</span>\n <pds-icon icon={copyIcon} size=\"16px\"></pds-icon>\n </pds-button>\n </Host>\n );\n }\n}\n"],"version":3}
1
+ {"file":"pds-copytext.js","mappings":"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","names":["PdsCopytext","__stencil_proxyCustomElement","copyIcon"],"sources":["src/components/pds-copytext/pds-copytext.scss?tag=pds-copytext&encapsulation=shadow","src/components/pds-copytext/pds-copytext.tsx"],"sourcesContent":[":host(.pds-copytext) {\n // Update custom prop usage in Button before changing\n --copytext-color-background-hover: var(--pine-color-background-inset);\n\n\n pds-button {\n align-items: center;\n border-radius: var(--pine-border-radius-full);\n border-width: var(--pine-dimension-none);\n display: inline-flex;\n font-family: var(--pine-font-family-heading);\n font-size: var(--pine-font-size-body-md);\n font-weight: var(--pine-font-weight-body-medium);\n letter-spacing: var(--pine-letter-spacing);\n line-height: var(--pine-line-height-body);\n max-width: 100%;\n\n &::part(button) {\n padding-block: var(--pine-dimension-2xs);\n padding-inline: var(--pine-dimension-xs);\n }\n\n &::part(button):hover {\n // Update custom prop usage in Button before changing\n background-color: var(--copytext-color-background-hover);\n color: var(--pine-color-text-secondary-hover);\n }\n\n span {\n font-weight: var(--pine-font-weight-medium);\n margin-inline-end: var(--pine-dimension-xs);\n white-space: nowrap;\n }\n\n :nth-child(2) {\n flex-shrink: 0;\n }\n }\n\n // bordered\n\n &:host(.pds-copytext--bordered) {\n border-width: var(--pine-dimension-none);\n padding: var(--pine-dimension-none);\n\n pds-button {\n padding: var(--pine-dimension-none);\n\n &::part(button) {\n padding: var(--pine-dimension-none);\n }\n\n &::part(button):hover {\n background-color: transparent;\n }\n }\n\n span {\n background: var(--pine-color-secondary);\n border: var(--pine-border);\n border-radius: var(--pine-border-radius-full);\n margin-inline-end: var(--pine-dimension-sm);\n padding-block: var(--pine-dimension-xs);\n padding-inline: var(--pine-dimension-sm);\n }\n\n :hover {\n span {\n border: var(--pine-border-hover);\n }\n }\n }\n\n // full width and truncated\n &:host(.pds-copytext--full-width),\n &:host(.pds-copytext--truncated) {\n pds-button {\n display: inline-flex;\n min-width: auto;\n width: 100%;\n\n &::part(button-content),\n &::part(button-text) {\n flex-shrink: 1;\n width: 100%;\n }\n\n span {\n text-align: start;\n width: 100%;\n }\n }\n }\n\n // full width\n &:host(.pds-copytext--full-width) {\n pds-button {\n justify-content: space-between;\n }\n }\n\n // truncated\n &:host(.pds-copytext--truncated) {\n pds-button span {\n overflow: hidden;\n text-overflow: ellipsis;\n }\n }\n}\n","import { Component, Element, Event, EventEmitter, Host, h, Prop, Watch } from '@stencil/core';\n\nimport { copy as copyIcon } from '@pine-ds/icons/icons';\nimport { setupTruncationTooltip } from '../../utils/truncation-tooltip';\n\n@Component({\n tag: 'pds-copytext',\n styleUrls: ['pds-copytext.scss'],\n shadow: true,\n})\nexport class PdsCopytext {\n @Element() el: HTMLPdsCopytextElement;\n private truncationCleanup: (() => void) | null = null;\n private valueSpanEl: HTMLSpanElement;\n\n /**\n * Determines whether `copytext` should have a visible border.\n * @defaultValue true\n */\n @Prop({ reflect: true }) border = true;\n\n /**\n * A unique identifier used for the underlying component `id` attribute.\n */\n @Prop() componentId: string;\n\n /**\n * Determines whether `copytext` should expand to the full width of its container.\n * @defaultValue false\n */\n @Prop() fullWidth = false;\n\n /**\n * Determines whether the `value` should truncate and display with an ellipsis.\n * When text overflows, a tooltip showing the full value will appear on hover/focus.\n * @defaultValue false\n */\n @Prop() truncate = false;\n\n /**\n * The string displayed that is also copied to the clipboard upon interaction.\n */\n @Prop() value!: string;\n\n @Watch('truncate')\n handleTruncateChange(newValue: boolean) {\n if (newValue) {\n this.initTruncationTooltip();\n } else {\n this.destroyTruncationTooltip();\n }\n }\n\n @Watch('value')\n handleValueChange() {\n if (this.truncate) {\n this.initTruncationTooltip();\n }\n }\n\n componentDidLoad() {\n if (this.truncate) {\n this.initTruncationTooltip();\n }\n }\n\n disconnectedCallback() {\n this.destroyTruncationTooltip();\n }\n\n private initTruncationTooltip() {\n this.destroyTruncationTooltip();\n\n if (this.valueSpanEl) {\n this.truncationCleanup = setupTruncationTooltip({\n hostEl: this.el,\n contentEl: this.valueSpanEl,\n getTooltipText: () => this.value || '',\n });\n }\n }\n\n private destroyTruncationTooltip() {\n if (this.truncationCleanup) {\n this.truncationCleanup();\n this.truncationCleanup = null;\n }\n }\n\n /**\n * Event fired when copyText button is clicked.\n */\n @Event() pdsCopyTextClick: EventEmitter<string>;\n\n private copyToClipboard = async (value: string) => {\n try {\n if (typeof navigator.clipboard !== 'undefined') {\n await navigator.clipboard.writeText(value);\n this.pdsCopyTextClick.emit('Copied to clipboard');\n }\n } catch (err) {\n this.pdsCopyTextClick.emit(`Error writing text to clipboard: ${err}`);\n }\n };\n\n private handleClick = () => {\n this.copyToClipboard(this.value);\n };\n\n private classNames() {\n const classNames = ['pds-copytext'];\n\n if (this.border) {\n classNames.push('pds-copytext--bordered');\n }\n\n if (this.fullWidth) {\n classNames.push('pds-copytext--full-width');\n }\n\n if (this.truncate) {\n classNames.push('pds-copytext--truncated');\n }\n\n return classNames.join(' ');\n }\n\n render() {\n return (\n <Host class={this.classNames()} id={this.componentId}>\n <pds-button type=\"button\" variant=\"unstyled\" onClick={this.handleClick}>\n <span ref={(el) => this.valueSpanEl = el}>{this.value}</span>\n <pds-icon icon={copyIcon} size=\"16px\"></pds-icon>\n </pds-button>\n </Host>\n );\n }\n}\n"],"version":3}
@@ -22,10 +22,21 @@ const PdsMultiselect$1 = /*@__PURE__*/ proxyCustomElement(class PdsMultiselect e
22
22
  this.pdsMultiselectSearch = createEvent(this, "pdsMultiselectSearch", 7);
23
23
  this.pdsMultiselectLoadOptions = createEvent(this, "pdsMultiselectLoadOptions", 7);
24
24
  this.pdsMultiselectCreate = createEvent(this, "pdsMultiselectCreate", 7);
25
+ this.pdsMultiselectDismiss = createEvent(this, "pdsMultiselectDismiss", 7);
25
26
  /**
26
27
  * Placeholder text for the input field.
27
28
  */
28
29
  this.placeholder = 'Select...';
30
+ /**
31
+ * Placeholder text for the search input inside the dropdown panel.
32
+ * @default 'Find...'
33
+ */
34
+ this.searchPlaceholder = 'Find...';
35
+ /**
36
+ * Whether to close the panel after an option is selected.
37
+ * Defaults to `false` (panel stays open for multi-select).
38
+ */
39
+ this.closePanelOnSelect = false;
29
40
  /**
30
41
  * Array of selected option values.
31
42
  */
@@ -62,6 +73,10 @@ const PdsMultiselect$1 = /*@__PURE__*/ proxyCustomElement(class PdsMultiselect e
62
73
  * Visually hides the label but keeps it accessible.
63
74
  */
64
75
  this.hideLabel = false;
76
+ /**
77
+ * Hides the selected items summary section in the dropdown panel.
78
+ */
79
+ this.hideSelectedItems = false;
65
80
  /**
66
81
  * If true, the multiselect is required.
67
82
  */
@@ -85,6 +100,8 @@ const PdsMultiselect$1 = /*@__PURE__*/ proxyCustomElement(class PdsMultiselect e
85
100
  this.creating = false;
86
101
  // Flag to prevent focusout from closing during open transition
87
102
  this.isOpening = false;
103
+ // Flag to suppress dismiss event when panel closes due to selection (not user dismissal)
104
+ this.isClosingViaSelection = false;
88
105
  // Flag to track if initial async fetch has been triggered (prevents double fetch)
89
106
  this.initialAsyncFetchTriggered = false;
90
107
  // Flag to track if value changed during loading and needs resolution after fetch completes
@@ -156,8 +173,9 @@ const PdsMultiselect$1 = /*@__PURE__*/ proxyCustomElement(class PdsMultiselect e
156
173
  // before we decide to close the dropdown
157
174
  setTimeout(() => {
158
175
  var _a;
159
- // Don't close if we're in the middle of opening or already closed
160
- if (!this.isOpen || this.isOpening)
176
+ // Don't close if we're in the middle of opening, already closed,
177
+ // or closing due to a selection (not a user dismissal)
178
+ if (!this.isOpen || this.isOpening || this.isClosingViaSelection)
161
179
  return;
162
180
  const activeElement = document.activeElement;
163
181
  // Check if focus is within our component's shadow root
@@ -165,6 +183,7 @@ const PdsMultiselect$1 = /*@__PURE__*/ proxyCustomElement(class PdsMultiselect e
165
183
  // Also check if focus is on the host element itself
166
184
  const isOnHost = activeElement === this.el;
167
185
  if (!isInShadowRoot && !isOnHost) {
186
+ this.pdsMultiselectDismiss.emit();
168
187
  this.closeDropdown();
169
188
  }
170
189
  }, 0);
@@ -294,6 +313,19 @@ const PdsMultiselect$1 = /*@__PURE__*/ proxyCustomElement(class PdsMultiselect e
294
313
  var _a;
295
314
  (_a = this.triggerEl) === null || _a === void 0 ? void 0 : _a.focus();
296
315
  }
316
+ /**
317
+ * Clears all selected values and resets the component.
318
+ */
319
+ async clear() {
320
+ const hadValues = this.value.length > 0 || this.searchQuery !== '';
321
+ this.value = [];
322
+ this.searchQuery = '';
323
+ this.syncSelectedItems();
324
+ this.updateFormValue();
325
+ if (hadValues) {
326
+ this.pdsMultiselectChange.emit({ values: [], items: [] });
327
+ }
328
+ }
297
329
  /**
298
330
  * Handle global keyboard events for accessibility.
299
331
  * Closes dropdown on Escape key press regardless of focus location.
@@ -304,6 +336,7 @@ const PdsMultiselect$1 = /*@__PURE__*/ proxyCustomElement(class PdsMultiselect e
304
336
  return;
305
337
  if (event.key === 'Escape') {
306
338
  event.preventDefault();
339
+ this.pdsMultiselectDismiss.emit();
307
340
  this.closeDropdown();
308
341
  (_a = this.triggerEl) === null || _a === void 0 ? void 0 : _a.focus();
309
342
  }
@@ -641,6 +674,12 @@ const PdsMultiselect$1 = /*@__PURE__*/ proxyCustomElement(class PdsMultiselect e
641
674
  this.isOpen = false;
642
675
  this.highlightedIndex = -1;
643
676
  this.searchQuery = '';
677
+ // Reset the selection-close guard after the focusout handler's setTimeout has resolved
678
+ if (this.isClosingViaSelection) {
679
+ setTimeout(() => {
680
+ this.isClosingViaSelection = false;
681
+ }, 0);
682
+ }
644
683
  // Clean up auto-update
645
684
  if (this.cleanupAutoUpdate) {
646
685
  this.cleanupAutoUpdate();
@@ -693,7 +732,7 @@ const PdsMultiselect$1 = /*@__PURE__*/ proxyCustomElement(class PdsMultiselect e
693
732
  });
694
733
  }
695
734
  toggleOption(option) {
696
- var _a;
735
+ var _a, _b;
697
736
  // Handle create option
698
737
  if (option.isCreateOption) {
699
738
  // Prevent multiple create calls while one is in-flight
@@ -702,17 +741,18 @@ const PdsMultiselect$1 = /*@__PURE__*/ proxyCustomElement(class PdsMultiselect e
702
741
  }
703
742
  return;
704
743
  }
705
- const isSelected = this.value.includes(String(option.id));
744
+ const optionId = String(option.id);
745
+ const isSelected = this.value.includes(optionId);
706
746
  if (isSelected) {
707
747
  // Remove from selection
708
- this.value = this.value.filter(v => v !== String(option.id));
748
+ this.value = this.value.filter(v => v !== optionId);
709
749
  }
710
750
  else {
711
751
  // Add to selection
712
752
  if (this.maxSelections && this.value.length >= this.maxSelections) {
713
753
  return;
714
754
  }
715
- this.value = [...this.value, String(option.id)];
755
+ this.value = [...this.value, optionId];
716
756
  }
717
757
  // Sync selected items to ensure no duplicates and accurate state
718
758
  this.syncSelectedItems();
@@ -721,15 +761,22 @@ const PdsMultiselect$1 = /*@__PURE__*/ proxyCustomElement(class PdsMultiselect e
721
761
  values: this.value,
722
762
  items: this.selectedItems,
723
763
  });
724
- // Keep focus on search input, don't close dropdown
725
- (_a = this.searchInputEl) === null || _a === void 0 ? void 0 : _a.focus();
764
+ if (this.closePanelOnSelect) {
765
+ this.isClosingViaSelection = true;
766
+ this.closeDropdown();
767
+ (_a = this.triggerEl) === null || _a === void 0 ? void 0 : _a.focus();
768
+ }
769
+ else {
770
+ // Keep focus on search input, don't close dropdown
771
+ (_b = this.searchInputEl) === null || _b === void 0 ? void 0 : _b.focus();
772
+ }
726
773
  }
727
774
  selectOption(option) {
728
775
  // For keyboard navigation - toggle the option
729
776
  this.toggleOption(option);
730
777
  }
731
778
  renderSelectedItemsList() {
732
- if (this.selectedItems.length === 0)
779
+ if (this.hideSelectedItems || this.selectedItems.length === 0)
733
780
  return null;
734
781
  return (h("div", { class: "pds-multiselect__selected-section" }, h("ul", { class: "pds-multiselect__selected-list", role: "list" }, this.selectedItems.map(item => (h("li", { key: String(item.id), class: "pds-multiselect__selected-item" }, item.text))))));
735
782
  }
@@ -740,7 +787,7 @@ const PdsMultiselect$1 = /*@__PURE__*/ proxyCustomElement(class PdsMultiselect e
740
787
  const valueArray = this.ensureValueArray();
741
788
  const hasSlottedEmpty = !!this.el.querySelector('[slot="empty"]');
742
789
  const hasSlottedLoading = !!this.el.querySelector('[slot="loading"]');
743
- return (h("div", { class: "pds-multiselect__panel", ref: el => (this.panelEl = el), style: { minWidth: this.minWidth } }, h("div", { class: "pds-multiselect__search" }, h("pds-icon", { name: "search", size: "small" }), h("input", { ref: el => (this.searchInputEl = el), type: "text", class: "pds-multiselect__search-input", placeholder: "Find...", value: this.searchQuery, "aria-label": "Search options", "aria-controls": `${this.componentId}-listbox`, "aria-activedescendant": this.highlightedIndex >= 0 ? `${this.componentId}-option-${this.highlightedIndex}` : undefined, role: "combobox", "aria-haspopup": "listbox", "aria-expanded": "true", "aria-autocomplete": "list", autocomplete: "off", onInput: this.handleSearchInputChange, onKeyDown: this.handleSearchInputKeyDown })), this.renderSelectedItemsList(), h("ul", { class: "pds-multiselect__listbox", role: "listbox", "aria-multiselectable": "true", "aria-label": this.label || 'Options', id: `${this.componentId}-listbox`, ref: el => (this.listboxEl = el), style: { maxHeight: this.maxHeight }, onScroll: this.handleScroll }, this.loading && (h("li", { class: "pds-multiselect__loading", role: "presentation" }, hasSlottedLoading ? (h("slot", { name: "loading" })) : (h("pds-loader", { size: "small" })))), !this.loading && filteredOptions.length === 0 && (h("li", { class: "pds-multiselect__empty", role: "presentation" }, hasSlottedEmpty ? (h("slot", { name: "empty" })) : (h("span", null, "No options found")))), filteredOptions.map((option, index) => {
790
+ return (h("div", { class: "pds-multiselect__panel", ref: el => (this.panelEl = el), style: { minWidth: this.minWidth } }, h("div", { class: "pds-multiselect__search" }, h("pds-icon", { name: "search", size: "small" }), h("input", { ref: el => (this.searchInputEl = el), type: "text", class: "pds-multiselect__search-input", placeholder: this.searchPlaceholder, value: this.searchQuery, "aria-label": "Search options", "aria-controls": `${this.componentId}-listbox`, "aria-activedescendant": this.highlightedIndex >= 0 ? `${this.componentId}-option-${this.highlightedIndex}` : undefined, role: "combobox", "aria-haspopup": "listbox", "aria-expanded": "true", "aria-autocomplete": "list", autocomplete: "off", onInput: this.handleSearchInputChange, onKeyDown: this.handleSearchInputKeyDown })), this.renderSelectedItemsList(), h("ul", { class: "pds-multiselect__listbox", role: "listbox", "aria-multiselectable": "true", "aria-label": this.label || 'Options', id: `${this.componentId}-listbox`, ref: el => (this.listboxEl = el), style: { maxHeight: this.maxHeight }, onScroll: this.handleScroll }, this.loading && (h("li", { class: "pds-multiselect__loading", role: "presentation" }, hasSlottedLoading ? (h("slot", { name: "loading" })) : (h("pds-loader", { size: "small" })))), !this.loading && filteredOptions.length === 0 && (h("li", { class: "pds-multiselect__empty", role: "presentation" }, hasSlottedEmpty ? (h("slot", { name: "empty" })) : (h("span", null, "No options found")))), filteredOptions.map((option, index) => {
744
791
  const isSelected = valueArray.includes(String(option.id));
745
792
  const isCreateOption = option.isCreateOption;
746
793
  const isHighlighted = index === this.highlightedIndex && !isCreateOption;
@@ -764,19 +811,19 @@ const PdsMultiselect$1 = /*@__PURE__*/ proxyCustomElement(class PdsMultiselect e
764
811
  }
765
812
  render() {
766
813
  const hasSelections = this.selectedItems.length > 0;
767
- return (h(Host, { key: '52253faa88bce1a67e657e160b2d260ff92bc28b', "aria-disabled": this.disabled ? 'true' : null }, h("div", { key: '43f73781a96bd421b7079984aaf4e1905a2ec29e', class: "pds-multiselect" }, this.label && (h("label", { key: '926e23ac24621da0af4336bfc64b9d4a6d44579b', htmlFor: this.componentId, class: {
814
+ return (h(Host, { key: '824364c4ab70a90abc5542ac66eb8259e727e4e6', "aria-disabled": this.disabled ? 'true' : null }, h("div", { key: 'ff103de53850eef00dad44e97333c58a54c8ae59', class: "pds-multiselect" }, this.label && (h("label", { key: '0524860c38d53aeddf35e9905abe783cb1174d6b', htmlFor: this.componentId, class: {
768
815
  'pds-multiselect__label': true,
769
816
  'visually-hidden': this.hideLabel,
770
- } }, this.label)), h("div", { key: '5051808a8b883ee8b5e7e3acef927091f206aaaf', class: "pds-multiselect__wrapper", ref: el => (this.containerEl = el), onFocusout: this.handleContainerFocusOut, style: { width: this.triggerWidth } }, h("button", { key: '4590bd41e14927fc9d652e0920b0cd7900bf4b1a', ref: el => (this.triggerEl = el), type: "button", class: {
817
+ } }, this.label)), h("div", { key: 'b6313b12f499656e98c33af524240fd51a332e68', class: "pds-multiselect__wrapper", ref: el => (this.containerEl = el), onFocusout: this.handleContainerFocusOut, style: { width: this.triggerWidth } }, h("button", { key: 'fbf274a4dace5f039ce1ce46674d66a08c5c280d', ref: el => (this.triggerEl = el), type: "button", class: {
771
818
  'pds-multiselect__trigger': true,
772
819
  'pds-multiselect__trigger--open': this.isOpen,
773
820
  'pds-multiselect__trigger--disabled': this.disabled,
774
821
  'pds-multiselect__trigger--invalid': this.invalid || !!this.errorMessage,
775
822
  'pds-multiselect__trigger--has-value': hasSelections,
776
- }, id: this.componentId, disabled: this.disabled, "aria-required": this.required ? 'true' : undefined, "aria-expanded": this.isOpen ? 'true' : 'false', "aria-haspopup": "listbox", "aria-describedby": assignDescription(this.componentId, this.invalid || !!this.errorMessage, this.errorMessage || this.helperMessage), "aria-invalid": this.invalid || !!this.errorMessage ? 'true' : undefined, onClick: this.handleTriggerClick, onKeyDown: this.handleTriggerKeyDown }, h("span", { key: '3033d029f02288071a16b2ef4a5399bb4b86ae7e', class: {
823
+ }, id: this.componentId, disabled: this.disabled, "aria-required": this.required ? 'true' : undefined, "aria-expanded": this.isOpen ? 'true' : 'false', "aria-haspopup": "listbox", "aria-describedby": assignDescription(this.componentId, this.invalid || !!this.errorMessage, this.errorMessage || this.helperMessage), "aria-invalid": this.invalid || !!this.errorMessage ? 'true' : undefined, onClick: this.handleTriggerClick, onKeyDown: this.handleTriggerKeyDown }, h("span", { key: '314fc7f00db71a170f1fc7c83306cebc3397a451', class: {
777
824
  'pds-multiselect__trigger-text': true,
778
825
  'pds-multiselect__trigger-text--placeholder': !hasSelections,
779
- } }, this.getTriggerText()), h("pds-icon", { key: '4d971d7a95e5e47c9141a6614f71b194bfa74dfb', class: "pds-multiselect__icon", icon: enlarge })), this.renderDropdown()), this.helperMessage && !(this.errorMessage && this.errorMessage.length > 0) && (h("p", { key: '3571fafc7c78f785ccd7a1a8d73675b5e33fa317', class: "pds-multiselect__helper", id: messageId(this.componentId, 'helper') }, this.helperMessage)), this.errorMessage && (h("p", { key: '4acd308de067093578520a4ec85f299960f6e2c0', class: "pds-multiselect__error", id: messageId(this.componentId, 'error') }, h("pds-icon", { key: 'a4cdf56804b77e474b9c757512ed6da54ddc5535', icon: danger, size: "small" }), this.errorMessage)), h("div", { key: '10eac87a742d793b3f4e3acb55bbe469b547e3d3', style: { display: 'none' } }, h("slot", { key: '1d55851a6f4a35f86684af5be7b6c840c2ed083b' })))));
826
+ } }, this.getTriggerText()), h("pds-icon", { key: 'e81690095180cfe9b4799c531ba5d7a9952a2a6c', class: "pds-multiselect__icon", icon: enlarge })), this.renderDropdown()), this.helperMessage && !(this.errorMessage && this.errorMessage.length > 0) && (h("p", { key: 'd2a511d548d10a1bc5b9704f7de6f050e00cb9f4', class: "pds-multiselect__helper", id: messageId(this.componentId, 'helper') }, this.helperMessage)), this.errorMessage && (h("p", { key: '2cca6e85a6ca9033e7baea24a509bb6d7064119d', class: "pds-multiselect__error", id: messageId(this.componentId, 'error') }, h("pds-icon", { key: '6f680d14585dac5c6de3d0ec864ef1311241d2d2', icon: danger, size: "small" }), this.errorMessage)), h("div", { key: '5be84a5f96531cb2add1d490c292a7482b444b83', style: { display: 'none' } }, h("slot", { key: 'cf9bece8f341293b6fa701b185db3926510c3845' })))));
780
827
  }
781
828
  static get formAssociated() { return true; }
782
829
  get el() { return this; }
@@ -791,6 +838,8 @@ const PdsMultiselect$1 = /*@__PURE__*/ proxyCustomElement(class PdsMultiselect e
791
838
  "componentId": [1, "component-id"],
792
839
  "label": [1],
793
840
  "placeholder": [1],
841
+ "searchPlaceholder": [1, "search-placeholder"],
842
+ "closePanelOnSelect": [4, "close-panel-on-select"],
794
843
  "name": [1],
795
844
  "value": [1040],
796
845
  "disabled": [4],
@@ -804,6 +853,7 @@ const PdsMultiselect$1 = /*@__PURE__*/ proxyCustomElement(class PdsMultiselect e
804
853
  "minWidth": [1, "min-width"],
805
854
  "panelWidth": [1, "panel-width"],
806
855
  "hideLabel": [4, "hide-label"],
856
+ "hideSelectedItems": [4, "hide-selected-items"],
807
857
  "errorMessage": [1, "error-message"],
808
858
  "helperMessage": [1, "helper-message"],
809
859
  "invalid": [4],
@@ -822,7 +872,8 @@ const PdsMultiselect$1 = /*@__PURE__*/ proxyCustomElement(class PdsMultiselect e
822
872
  "currentPage": [32],
823
873
  "hasMore": [32],
824
874
  "creating": [32],
825
- "setFocus": [64]
875
+ "setFocus": [64],
876
+ "clear": [64]
826
877
  }, [[8, "keydown", "handleWindowKeyDown"]], {
827
878
  "debounce": ["setupDebounce"],
828
879
  "value": ["valueChanged"],