@pine-ds/core 3.27.0 → 3.29.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 (353) hide show
  1. package/components/i18n-format.js +1 -0
  2. package/components/pds-alert.js +1 -1
  3. package/components/pds-avatar.js +1 -1
  4. package/components/pds-chip2.js +1 -1
  5. package/components/pds-link2.js +1 -1
  6. package/components/pds-multiselect.js +1 -1
  7. package/components/pds-tab.js +1 -1
  8. package/components/pds-tabpanel.js +1 -1
  9. package/components/pds-tabs.js +1 -1
  10. package/components/pds-text2.js +1 -1
  11. package/components/pds-textarea.js +1 -1
  12. package/components/pds-toast.js +1 -1
  13. package/components/pds-tooltip.js +1 -1
  14. package/dist/cjs/i18n-format-CrpIhahc.js +64 -0
  15. package/dist/cjs/{index-DBhfI2Jq.js → index-BdFrBXCD.js} +5 -1
  16. package/dist/cjs/{index-DGBoDsAL.js → index-CKNNY-lQ.js} +1 -1
  17. package/dist/cjs/loader.cjs.js +2 -2
  18. package/dist/cjs/mock-pds-modal.cjs.entry.js +1 -1
  19. package/dist/cjs/pds-accordion.cjs.entry.js +2 -2
  20. package/dist/cjs/pds-alert.cjs.entry.js +8 -2
  21. package/dist/cjs/pds-avatar.cjs.entry.js +45 -8
  22. package/dist/cjs/pds-box.cjs.entry.js +1 -1
  23. package/dist/cjs/pds-button.cjs.entry.js +2 -2
  24. package/dist/cjs/pds-checkbox.cjs.entry.js +2 -2
  25. package/dist/cjs/pds-chip.cjs.entry.js +10 -5
  26. package/dist/cjs/pds-combobox.cjs.entry.js +1 -1
  27. package/dist/cjs/pds-container.cjs.entry.js +1 -1
  28. package/dist/cjs/pds-copytext.cjs.entry.js +2 -2
  29. package/dist/cjs/pds-divider.cjs.entry.js +1 -1
  30. package/dist/cjs/pds-dropdown-menu-item.cjs.entry.js +1 -1
  31. package/dist/cjs/pds-dropdown-menu-separator.cjs.entry.js +1 -1
  32. package/dist/cjs/pds-dropdown-menu.cjs.entry.js +1 -1
  33. package/dist/cjs/pds-filter.cjs.entry.js +2 -2
  34. package/dist/cjs/pds-filters.cjs.entry.js +1 -1
  35. package/dist/cjs/pds-icon.cjs.entry.js +1 -1
  36. package/dist/cjs/pds-image.cjs.entry.js +1 -1
  37. package/dist/cjs/pds-input.cjs.entry.js +2 -2
  38. package/dist/cjs/pds-link.cjs.entry.js +12 -5
  39. package/dist/cjs/pds-loader.cjs.entry.js +1 -1
  40. package/dist/cjs/pds-modal-content.cjs.entry.js +1 -1
  41. package/dist/cjs/pds-modal-footer.cjs.entry.js +1 -1
  42. package/dist/cjs/pds-modal-header.cjs.entry.js +1 -1
  43. package/dist/cjs/pds-modal.cjs.entry.js +1 -1
  44. package/dist/cjs/pds-multiselect.cjs.entry.js +93 -14
  45. package/dist/cjs/pds-popover.cjs.entry.js +1 -1
  46. package/dist/cjs/pds-progress.cjs.entry.js +1 -1
  47. package/dist/cjs/pds-property.cjs.entry.js +1 -1
  48. package/dist/cjs/pds-radio-group.cjs.entry.js +2 -2
  49. package/dist/cjs/pds-radio.cjs.entry.js +2 -2
  50. package/dist/cjs/pds-row.cjs.entry.js +1 -1
  51. package/dist/cjs/pds-select.cjs.entry.js +2 -2
  52. package/dist/cjs/pds-sortable-item.cjs.entry.js +2 -2
  53. package/dist/cjs/pds-sortable.cjs.entry.js +1 -1
  54. package/dist/cjs/pds-switch.cjs.entry.js +2 -2
  55. package/dist/cjs/pds-tab.cjs.entry.js +41 -6
  56. package/dist/cjs/pds-table-body.cjs.entry.js +1 -1
  57. package/dist/cjs/pds-table-cell.cjs.entry.js +1 -1
  58. package/dist/cjs/pds-table-head-cell.cjs.entry.js +2 -2
  59. package/dist/cjs/pds-table-head.cjs.entry.js +1 -1
  60. package/dist/cjs/pds-table-row.cjs.entry.js +1 -1
  61. package/dist/cjs/pds-table.cjs.entry.js +1 -1
  62. package/dist/cjs/pds-tabpanel.cjs.entry.js +8 -3
  63. package/dist/cjs/pds-tabs.cjs.entry.js +74 -3
  64. package/dist/cjs/pds-text.cjs.entry.js +2 -2
  65. package/dist/cjs/pds-textarea.cjs.entry.js +14 -7
  66. package/dist/cjs/pds-toast.cjs.entry.js +10 -4
  67. package/dist/cjs/pds-tooltip.cjs.entry.js +3 -3
  68. package/dist/cjs/pine-core.cjs.js +2 -2
  69. package/dist/collection/components/pds-alert/pds-alert.js +30 -1
  70. package/dist/collection/components/pds-avatar/pds-avatar.css +29 -0
  71. package/dist/collection/components/pds-avatar/pds-avatar.js +133 -5
  72. package/dist/collection/components/pds-avatar/stories/pds-avatar.stories.js +23 -0
  73. package/dist/collection/components/pds-button/pds-button.js +1 -1
  74. package/dist/collection/components/pds-button/stories/pds-button.stories.js +25 -0
  75. package/dist/collection/components/pds-chip/pds-chip.js +31 -3
  76. package/dist/collection/components/pds-link/pds-link.css +10 -0
  77. package/dist/collection/components/pds-link/pds-link.js +32 -2
  78. package/dist/collection/components/pds-link/stories/pds-link.stories.js +14 -0
  79. package/dist/collection/components/pds-multiselect/pds-multiselect.js +358 -17
  80. package/dist/collection/components/pds-tabs/pds-tab/pds-tab.css +4 -4
  81. package/dist/collection/components/pds-tabs/pds-tab/pds-tab.js +161 -5
  82. package/dist/collection/components/pds-tabs/pds-tabpanel/pds-tabpanel.css +9 -0
  83. package/dist/collection/components/pds-tabs/pds-tabpanel/pds-tabpanel.js +29 -1
  84. package/dist/collection/components/pds-tabs/pds-tabs.css +14 -0
  85. package/dist/collection/components/pds-tabs/pds-tabs.js +146 -4
  86. package/dist/collection/components/pds-tabs/stories/pds-tabs.stories.js +43 -0
  87. package/dist/collection/components/pds-text/pds-text.js +1 -1
  88. package/dist/collection/components/pds-textarea/pds-textarea.js +35 -5
  89. package/dist/collection/components/pds-toast/pds-toast.js +32 -3
  90. package/dist/collection/components/pds-tooltip/pds-tooltip.js +2 -2
  91. package/dist/collection/i18n/i18n-format.js +59 -0
  92. package/dist/collection/i18n/index.js +1 -0
  93. package/dist/docs.json +866 -13
  94. package/dist/esm/i18n-format-BKsJZTyn.js +61 -0
  95. package/dist/esm/{index-D4ys0pep.js → index-BjlFq0VD.js} +1 -1
  96. package/dist/esm/{index-CaRgVPt7.js → index-NNDTPCWx.js} +5 -2
  97. package/dist/esm/loader.js +3 -3
  98. package/dist/esm/mock-pds-modal.entry.js +1 -1
  99. package/dist/esm/pds-accordion.entry.js +2 -2
  100. package/dist/esm/pds-alert.entry.js +8 -2
  101. package/dist/esm/pds-avatar.entry.js +45 -8
  102. package/dist/esm/pds-box.entry.js +1 -1
  103. package/dist/esm/pds-button.entry.js +2 -2
  104. package/dist/esm/pds-checkbox.entry.js +2 -2
  105. package/dist/esm/pds-chip.entry.js +10 -5
  106. package/dist/esm/pds-combobox.entry.js +1 -1
  107. package/dist/esm/pds-container.entry.js +1 -1
  108. package/dist/esm/pds-copytext.entry.js +2 -2
  109. package/dist/esm/pds-divider.entry.js +1 -1
  110. package/dist/esm/pds-dropdown-menu-item.entry.js +1 -1
  111. package/dist/esm/pds-dropdown-menu-separator.entry.js +1 -1
  112. package/dist/esm/pds-dropdown-menu.entry.js +1 -1
  113. package/dist/esm/pds-filter.entry.js +2 -2
  114. package/dist/esm/pds-filters.entry.js +1 -1
  115. package/dist/esm/pds-icon.entry.js +1 -1
  116. package/dist/esm/pds-image.entry.js +1 -1
  117. package/dist/esm/pds-input.entry.js +2 -2
  118. package/dist/esm/pds-link.entry.js +12 -5
  119. package/dist/esm/pds-loader.entry.js +1 -1
  120. package/dist/esm/pds-modal-content.entry.js +1 -1
  121. package/dist/esm/pds-modal-footer.entry.js +1 -1
  122. package/dist/esm/pds-modal-header.entry.js +1 -1
  123. package/dist/esm/pds-modal.entry.js +1 -1
  124. package/dist/esm/pds-multiselect.entry.js +93 -14
  125. package/dist/esm/pds-popover.entry.js +1 -1
  126. package/dist/esm/pds-progress.entry.js +1 -1
  127. package/dist/esm/pds-property.entry.js +1 -1
  128. package/dist/esm/pds-radio-group.entry.js +2 -2
  129. package/dist/esm/pds-radio.entry.js +2 -2
  130. package/dist/esm/pds-row.entry.js +1 -1
  131. package/dist/esm/pds-select.entry.js +2 -2
  132. package/dist/esm/pds-sortable-item.entry.js +2 -2
  133. package/dist/esm/pds-sortable.entry.js +1 -1
  134. package/dist/esm/pds-switch.entry.js +2 -2
  135. package/dist/esm/pds-tab.entry.js +41 -6
  136. package/dist/esm/pds-table-body.entry.js +1 -1
  137. package/dist/esm/pds-table-cell.entry.js +1 -1
  138. package/dist/esm/pds-table-head-cell.entry.js +2 -2
  139. package/dist/esm/pds-table-head.entry.js +1 -1
  140. package/dist/esm/pds-table-row.entry.js +1 -1
  141. package/dist/esm/pds-table.entry.js +1 -1
  142. package/dist/esm/pds-tabpanel.entry.js +8 -3
  143. package/dist/esm/pds-tabs.entry.js +74 -3
  144. package/dist/esm/pds-text.entry.js +2 -2
  145. package/dist/esm/pds-textarea.entry.js +14 -7
  146. package/dist/esm/pds-toast.entry.js +10 -4
  147. package/dist/esm/pds-tooltip.entry.js +3 -3
  148. package/dist/esm/pine-core.js +3 -3
  149. package/dist/esm-es5/i18n-format-BKsJZTyn.js +1 -0
  150. package/dist/esm-es5/{index-CaRgVPt7.js → index-NNDTPCWx.js} +2 -2
  151. package/dist/esm-es5/loader.js +1 -1
  152. package/dist/esm-es5/mock-pds-modal.entry.js +1 -1
  153. package/dist/esm-es5/pds-accordion.entry.js +1 -1
  154. package/dist/esm-es5/pds-alert.entry.js +1 -1
  155. package/dist/esm-es5/pds-avatar.entry.js +1 -1
  156. package/dist/esm-es5/pds-box.entry.js +1 -1
  157. package/dist/esm-es5/pds-button.entry.js +1 -1
  158. package/dist/esm-es5/pds-checkbox.entry.js +1 -1
  159. package/dist/esm-es5/pds-chip.entry.js +1 -1
  160. package/dist/esm-es5/pds-combobox.entry.js +2 -2
  161. package/dist/esm-es5/pds-container.entry.js +1 -1
  162. package/dist/esm-es5/pds-copytext.entry.js +1 -1
  163. package/dist/esm-es5/pds-divider.entry.js +1 -1
  164. package/dist/esm-es5/pds-dropdown-menu-item.entry.js +1 -1
  165. package/dist/esm-es5/pds-dropdown-menu-separator.entry.js +1 -1
  166. package/dist/esm-es5/pds-dropdown-menu.entry.js +1 -1
  167. package/dist/esm-es5/pds-filter.entry.js +1 -1
  168. package/dist/esm-es5/pds-filters.entry.js +1 -1
  169. package/dist/esm-es5/pds-icon.entry.js +1 -1
  170. package/dist/esm-es5/pds-image.entry.js +1 -1
  171. package/dist/esm-es5/pds-input.entry.js +1 -1
  172. package/dist/esm-es5/pds-link.entry.js +1 -1
  173. package/dist/esm-es5/pds-loader.entry.js +1 -1
  174. package/dist/esm-es5/pds-modal-content.entry.js +1 -1
  175. package/dist/esm-es5/pds-modal-footer.entry.js +1 -1
  176. package/dist/esm-es5/pds-modal-header.entry.js +1 -1
  177. package/dist/esm-es5/pds-modal.entry.js +1 -1
  178. package/dist/esm-es5/pds-multiselect.entry.js +1 -1
  179. package/dist/esm-es5/pds-popover.entry.js +1 -1
  180. package/dist/esm-es5/pds-progress.entry.js +1 -1
  181. package/dist/esm-es5/pds-property.entry.js +1 -1
  182. package/dist/esm-es5/pds-radio-group.entry.js +1 -1
  183. package/dist/esm-es5/pds-radio.entry.js +1 -1
  184. package/dist/esm-es5/pds-row.entry.js +1 -1
  185. package/dist/esm-es5/pds-select.entry.js +1 -1
  186. package/dist/esm-es5/pds-sortable-item.entry.js +1 -1
  187. package/dist/esm-es5/pds-sortable.entry.js +1 -1
  188. package/dist/esm-es5/pds-switch.entry.js +1 -1
  189. package/dist/esm-es5/pds-tab.entry.js +1 -1
  190. package/dist/esm-es5/pds-table-body.entry.js +1 -1
  191. package/dist/esm-es5/pds-table-cell.entry.js +1 -1
  192. package/dist/esm-es5/pds-table-head-cell.entry.js +1 -1
  193. package/dist/esm-es5/pds-table-head.entry.js +1 -1
  194. package/dist/esm-es5/pds-table-row.entry.js +1 -1
  195. package/dist/esm-es5/pds-table.entry.js +1 -1
  196. package/dist/esm-es5/pds-tabpanel.entry.js +1 -1
  197. package/dist/esm-es5/pds-tabs.entry.js +1 -1
  198. package/dist/esm-es5/pds-text.entry.js +1 -1
  199. package/dist/esm-es5/pds-textarea.entry.js +1 -1
  200. package/dist/esm-es5/pds-toast.entry.js +1 -1
  201. package/dist/esm-es5/pds-tooltip.entry.js +1 -1
  202. package/dist/esm-es5/pine-core.js +1 -1
  203. package/dist/pine-core/p-02805a93.system.entry.js +1 -0
  204. package/dist/pine-core/{p-e70c9002.entry.js → p-02977c6f.entry.js} +1 -1
  205. package/dist/pine-core/{p-4e49712d.entry.js → p-054f7011.entry.js} +1 -1
  206. package/dist/pine-core/{p-571d6bef.system.entry.js → p-076aaa00.system.entry.js} +1 -1
  207. package/dist/pine-core/{p-3fa80c5a.system.entry.js → p-092a72d2.system.entry.js} +1 -1
  208. package/dist/pine-core/p-0a09ccbe.entry.js +1 -0
  209. package/dist/pine-core/p-0a4f2d5f.system.entry.js +1 -0
  210. package/dist/pine-core/{p-f2cf8e76.entry.js → p-0d6daa35.entry.js} +1 -1
  211. package/dist/pine-core/p-12154189.system.entry.js +1 -0
  212. package/dist/pine-core/{p-44f58d33.system.entry.js → p-1deded6e.system.entry.js} +1 -1
  213. package/dist/pine-core/{p-fa81009f.system.entry.js → p-1f20608e.system.entry.js} +1 -1
  214. package/dist/pine-core/{p-27ac77c3.entry.js → p-1fb985bb.entry.js} +1 -1
  215. package/dist/pine-core/{p-855dfc31.system.entry.js → p-20e0d06c.system.entry.js} +1 -1
  216. package/dist/pine-core/p-24fcf841.system.entry.js +1 -0
  217. package/dist/pine-core/{p-c273210a.entry.js → p-292cf8f9.entry.js} +1 -1
  218. package/dist/pine-core/{p-db1572a3.entry.js → p-2a74b396.entry.js} +1 -1
  219. package/dist/pine-core/p-2d1cc047.entry.js +1 -0
  220. package/dist/pine-core/{p-002c420f.system.entry.js → p-2ec460e1.system.entry.js} +1 -1
  221. package/dist/pine-core/{p-e0cfb931.system.entry.js → p-2fc127b4.system.entry.js} +1 -1
  222. package/dist/pine-core/{p-d09ae46d.system.entry.js → p-3170d53b.system.entry.js} +1 -1
  223. package/dist/pine-core/{p-0451fdf7.entry.js → p-39ad92fc.entry.js} +1 -1
  224. package/dist/pine-core/{p-974bf0c5.entry.js → p-39c6e6c9.entry.js} +1 -1
  225. package/dist/pine-core/{p-d5c1f85e.system.entry.js → p-3c6300a8.system.entry.js} +1 -1
  226. package/dist/pine-core/{p-b0b6acdb.system.entry.js → p-3e3b3bf6.system.entry.js} +1 -1
  227. package/dist/pine-core/{p-52f7115b.entry.js → p-43a1d9d7.entry.js} +1 -1
  228. package/dist/pine-core/{p-13ec2343.entry.js → p-43ef94bc.entry.js} +1 -1
  229. package/dist/pine-core/{p-618ba6d5.system.entry.js → p-464ec4eb.system.entry.js} +1 -1
  230. package/dist/pine-core/{p-ee6f914c.entry.js → p-47708864.entry.js} +1 -1
  231. package/dist/pine-core/{p-ccb889d8.system.entry.js → p-507e831f.system.entry.js} +1 -1
  232. package/dist/pine-core/p-5c229a7f.entry.js +1 -0
  233. package/dist/pine-core/{p-5c6c2f79.system.entry.js → p-5c7a72aa.system.entry.js} +1 -1
  234. package/dist/pine-core/{p-71ca8845.system.entry.js → p-5e6e8d4e.system.entry.js} +1 -1
  235. package/dist/pine-core/{p-3ad9bcef.system.entry.js → p-5f4d2c5c.system.entry.js} +1 -1
  236. package/dist/pine-core/{p-6a2373d0.system.entry.js → p-606418b7.system.entry.js} +1 -1
  237. package/dist/pine-core/{p-22bfa998.entry.js → p-6254d112.entry.js} +1 -1
  238. package/dist/pine-core/{p-5a2df1e2.entry.js → p-62f75f84.entry.js} +1 -1
  239. package/dist/pine-core/{p-835d9f18.system.entry.js → p-69e47ffc.system.entry.js} +1 -1
  240. package/dist/pine-core/p-6f82e8dc.system.entry.js +1 -0
  241. package/dist/pine-core/{p-b1b317a5.entry.js → p-6fb68ad1.entry.js} +1 -1
  242. package/dist/pine-core/{p-1e3beca4.system.entry.js → p-7153efaf.system.entry.js} +1 -1
  243. package/dist/pine-core/{p-a982ac91.system.entry.js → p-72a1b563.system.entry.js} +1 -1
  244. package/dist/pine-core/{p-7aca41d9.system.entry.js → p-7803c5b6.system.entry.js} +1 -1
  245. package/dist/pine-core/{p-74e06c8d.system.entry.js → p-78cd9f97.system.entry.js} +1 -1
  246. package/dist/pine-core/{p-edf4e4eb.system.entry.js → p-79598750.system.entry.js} +1 -1
  247. package/dist/pine-core/p-7a7954b2.system.entry.js +1 -0
  248. package/dist/pine-core/{p-3ba36512.system.entry.js → p-7b85115b.system.entry.js} +1 -1
  249. package/dist/pine-core/{p-83eb33d4.entry.js → p-7bac161d.entry.js} +1 -1
  250. package/dist/pine-core/{p-bdf18687.entry.js → p-7d15b65e.entry.js} +1 -1
  251. package/dist/pine-core/p-7e065b59.entry.js +1 -0
  252. package/dist/pine-core/p-82af7d58.system.entry.js +1 -0
  253. package/dist/pine-core/{p-73b81009.entry.js → p-83e8f145.entry.js} +1 -1
  254. package/dist/pine-core/{p-cce6dcf0.system.entry.js → p-85f7428b.system.entry.js} +1 -1
  255. package/dist/pine-core/{p-ae840ec4.entry.js → p-87ba6d2b.entry.js} +1 -1
  256. package/dist/pine-core/p-8c0040c4.entry.js +1 -0
  257. package/dist/pine-core/{p-a659cce1.entry.js → p-8c85f53a.entry.js} +1 -1
  258. package/dist/pine-core/{p-20f39b93.system.entry.js → p-8d6fd5a7.system.entry.js} +1 -1
  259. package/dist/pine-core/{p-7247fb4f.entry.js → p-902b5790.entry.js} +1 -1
  260. package/dist/pine-core/{p-3f19666c.entry.js → p-92f648ba.entry.js} +1 -1
  261. package/dist/pine-core/{p-e620e492.system.entry.js → p-9374cf48.system.entry.js} +1 -1
  262. package/dist/pine-core/p-978b848b.system.entry.js +1 -0
  263. package/dist/pine-core/{p-babd0607.system.entry.js → p-9aaee1e9.system.entry.js} +1 -1
  264. package/dist/pine-core/p-9ba86e34.entry.js +1 -0
  265. package/dist/pine-core/{p-4abec102.system.entry.js → p-9f041a63.system.entry.js} +2 -2
  266. package/dist/pine-core/p-B1rytYxP.system.js +1 -0
  267. package/dist/pine-core/p-BKsJZTyn.js +1 -0
  268. package/dist/pine-core/p-Cr7-rJtJ.system.js +1 -0
  269. package/dist/pine-core/{p-CdwliqhD.system.js → p-DVZjHa4_.system.js} +2 -2
  270. package/dist/pine-core/p-NNDTPCWx.js +2 -0
  271. package/dist/pine-core/{p-ba88ff60.system.entry.js → p-a03c12a4.system.entry.js} +1 -1
  272. package/dist/pine-core/p-a9ef5295.entry.js +1 -0
  273. package/dist/pine-core/{p-334b7c30.entry.js → p-ac2775b5.entry.js} +1 -1
  274. package/dist/pine-core/{p-a1750a54.entry.js → p-b0058cb0.entry.js} +1 -1
  275. package/dist/pine-core/p-b0674b8d.entry.js +1 -0
  276. package/dist/pine-core/{p-1e1804ed.system.entry.js → p-b5c760c8.system.entry.js} +1 -1
  277. package/dist/pine-core/{p-3a1b7302.system.entry.js → p-b6812452.system.entry.js} +1 -1
  278. package/dist/pine-core/{p-2b0cb8c4.system.entry.js → p-b89583e7.system.entry.js} +1 -1
  279. package/dist/pine-core/{p-5584a56b.entry.js → p-b9380ce8.entry.js} +1 -1
  280. package/dist/pine-core/{p-568bb210.system.entry.js → p-ba54470a.system.entry.js} +1 -1
  281. package/dist/pine-core/{p-7a4da839.entry.js → p-bf759fc0.entry.js} +1 -1
  282. package/dist/pine-core/{p-791d357a.entry.js → p-c1932447.entry.js} +1 -1
  283. package/dist/pine-core/{p-cce83ef0.entry.js → p-c2688710.entry.js} +1 -1
  284. package/dist/pine-core/{p-46de2438.entry.js → p-c35fe2e2.entry.js} +1 -1
  285. package/dist/pine-core/{p-ef71710b.system.entry.js → p-c3748812.system.entry.js} +2 -2
  286. package/dist/pine-core/{p-59a5dd77.system.entry.js → p-c52ad43b.system.entry.js} +1 -1
  287. package/dist/pine-core/{p-3876b9be.entry.js → p-ce715993.entry.js} +1 -1
  288. package/dist/pine-core/{p-587a15ee.system.entry.js → p-cf389430.system.entry.js} +1 -1
  289. package/dist/pine-core/{p-7874fe2b.entry.js → p-d037308b.entry.js} +1 -1
  290. package/dist/pine-core/{p-52e9ec4f.entry.js → p-d281464e.entry.js} +1 -1
  291. package/dist/pine-core/{p-04f8b32a.entry.js → p-d70201bb.entry.js} +1 -1
  292. package/dist/pine-core/{p-9865431f.system.entry.js → p-d9cb26fe.system.entry.js} +1 -1
  293. package/dist/pine-core/{p-44388b8f.system.entry.js → p-dc460e2d.system.entry.js} +1 -1
  294. package/dist/pine-core/p-dc48f603.entry.js +1 -0
  295. package/dist/pine-core/{p-01dba061.entry.js → p-dcc4ee5e.entry.js} +1 -1
  296. package/dist/pine-core/{p-f366f064.entry.js → p-def5d3d3.entry.js} +1 -1
  297. package/dist/pine-core/p-e0fb06ea.system.entry.js +1 -0
  298. package/dist/pine-core/p-e4b69d10.entry.js +1 -0
  299. package/dist/pine-core/{p-ae2b466a.system.entry.js → p-e81b4d04.system.entry.js} +1 -1
  300. package/dist/pine-core/{p-c3a99f39.entry.js → p-eb42ca18.entry.js} +1 -1
  301. package/dist/pine-core/{p-59c60e5b.entry.js → p-ebe218f8.entry.js} +1 -1
  302. package/dist/pine-core/{p-889fce8a.entry.js → p-ec2c0e57.entry.js} +2 -2
  303. package/dist/pine-core/{p-fb68e503.system.entry.js → p-eed4b552.system.entry.js} +1 -1
  304. package/dist/pine-core/p-f6d1469d.entry.js +1 -0
  305. package/dist/pine-core/{p-65fb166c.system.entry.js → p-fb10caff.system.entry.js} +1 -1
  306. package/dist/pine-core/{p-0bf56f61.entry.js → p-ff1e9a32.entry.js} +1 -1
  307. package/dist/pine-core/p-ff3399ed.entry.js +1 -0
  308. package/dist/pine-core/pine-core.css +1 -1
  309. package/dist/pine-core/pine-core.esm.js +1 -1
  310. package/dist/pine-core/pine-core.js +1 -1
  311. package/dist/types/components/pds-alert/pds-alert.d.ts +6 -0
  312. package/dist/types/components/pds-avatar/pds-avatar.d.ts +30 -0
  313. package/dist/types/components/pds-button/pds-button.d.ts +1 -1
  314. package/dist/types/components/pds-chip/pds-chip.d.ts +5 -0
  315. package/dist/types/components/pds-link/pds-link.d.ts +7 -0
  316. package/dist/types/components/pds-multiselect/pds-multiselect.d.ts +67 -4
  317. package/dist/types/components/pds-tabs/pds-tab/pds-tab.d.ts +42 -0
  318. package/dist/types/components/pds-tabs/pds-tabpanel/pds-tabpanel.d.ts +5 -0
  319. package/dist/types/components/pds-tabs/pds-tabs.d.ts +25 -2
  320. package/dist/types/components/pds-textarea/pds-textarea.d.ts +6 -0
  321. package/dist/types/components/pds-toast/pds-toast.d.ts +6 -0
  322. package/dist/types/components.d.ts +321 -14
  323. package/dist/types/i18n/i18n-format.d.ts +38 -0
  324. package/dist/types/i18n/index.d.ts +2 -0
  325. package/hydrate/index.js +402 -53
  326. package/hydrate/index.mjs +402 -53
  327. package/package.json +3 -2
  328. package/dist/pine-core/p-003f91b1.system.entry.js +0 -1
  329. package/dist/pine-core/p-006398c3.system.entry.js +0 -1
  330. package/dist/pine-core/p-190ba1df.entry.js +0 -1
  331. package/dist/pine-core/p-638e9cb3.entry.js +0 -1
  332. package/dist/pine-core/p-63e0d4a5.system.entry.js +0 -1
  333. package/dist/pine-core/p-68121613.system.entry.js +0 -1
  334. package/dist/pine-core/p-6c5aacad.entry.js +0 -1
  335. package/dist/pine-core/p-73dd2a2b.entry.js +0 -1
  336. package/dist/pine-core/p-7520a715.system.entry.js +0 -1
  337. package/dist/pine-core/p-7766e970.entry.js +0 -1
  338. package/dist/pine-core/p-7b71f1bf.system.entry.js +0 -1
  339. package/dist/pine-core/p-7b954dbf.entry.js +0 -1
  340. package/dist/pine-core/p-8065c732.entry.js +0 -1
  341. package/dist/pine-core/p-829c52dc.entry.js +0 -1
  342. package/dist/pine-core/p-C61CFP22.system.js +0 -1
  343. package/dist/pine-core/p-CaRgVPt7.js +0 -2
  344. package/dist/pine-core/p-a739bdfa.entry.js +0 -1
  345. package/dist/pine-core/p-ab957ace.system.entry.js +0 -1
  346. package/dist/pine-core/p-b88be8be.entry.js +0 -1
  347. package/dist/pine-core/p-e291db30.entry.js +0 -1
  348. package/dist/pine-core/p-e77c5c08.system.entry.js +0 -1
  349. package/dist/pine-core/p-f2315f2a.entry.js +0 -1
  350. package/dist/pine-core/p-f928817f.system.entry.js +0 -1
  351. /package/dist/esm-es5/{index-D4ys0pep.js → index-BjlFq0VD.js} +0 -0
  352. /package/dist/pine-core/{p-D4ys0pep.js → p-BjlFq0VD.js} +0 -0
  353. /package/dist/pine-core/{p-C62JIZmE.system.js → p-WYNNo1N0.system.js} +0 -0
@@ -7,6 +7,13 @@ import { launch } from "@pine-ds/icons/icons";
7
7
  */
8
8
  export class PdsLink {
9
9
  constructor() {
10
+ /**
11
+ * Marks the link as the current/active navigation item — for tab strips and
12
+ * nav rails built from links. Applies the active treatment (persistent
13
+ * underline + strong text) and sets `aria-current="page"`.
14
+ * @defaultValue false
15
+ */
16
+ this.active = false;
10
17
  /**
11
18
  * Determines whether the link should open in a new tab.
12
19
  * @defaultValue false
@@ -49,8 +56,8 @@ export class PdsLink {
49
56
  const targetValue = this.target || (this.external ? '_blank' : undefined);
50
57
  const showExternalIcon = this.external;
51
58
  const relValue = targetValue === '_blank' ? 'noopener noreferrer' : undefined;
52
- return (h("a", { key: '314a6249f39716ab2e632c2cb4c588ce2c74a77b', class: this.classNames(), download: this.download, href: this.href, id: this.componentId, part: "link", target: targetValue, rel: relValue, style: this.setLinkStyles(), "data-turbo": this.turbo || undefined, "data-turbo-frame": this.turboFrame || undefined, "data-turbo-action": this.turboAction || undefined, "data-turbo-method": this.turboMethod || undefined, "data-turbo-confirm": this.turboConfirm || undefined, "data-turbo-stream": this.turboStream || undefined, "data-turbo-prefetch": this.turboPrefetch || undefined, "data-turbo-preload": this.turboPreload || undefined }, h("slot", { key: 'ceab5601c349ece4b142f16f682d5a2d2d0ba59a' }, this.href), showExternalIcon &&
53
- h("pds-icon", { key: 'cba3137af21eb374c8318e43e279e77fefdc1b5c', icon: launch, size: this.fontSize })));
59
+ return (h("a", { key: '5d0c5a0a5b8b80a8cdff802a3d78dad85a9ccdc4', class: this.classNames(), download: this.download, href: this.href, id: this.componentId, part: "link", "aria-current": this.active ? 'page' : undefined, target: targetValue, rel: relValue, style: this.setLinkStyles(), "data-turbo": this.turbo || undefined, "data-turbo-frame": this.turboFrame || undefined, "data-turbo-action": this.turboAction || undefined, "data-turbo-method": this.turboMethod || undefined, "data-turbo-confirm": this.turboConfirm || undefined, "data-turbo-stream": this.turboStream || undefined, "data-turbo-prefetch": this.turboPrefetch || undefined, "data-turbo-preload": this.turboPreload || undefined }, h("slot", { key: '06b7be14d867eae1b7acba8570f1e94bdf840fbb' }, this.href), showExternalIcon &&
60
+ h("pds-icon", { key: '678414f7d20fd20b6931cc401163180c3ad0094c', icon: launch, size: this.fontSize })));
54
61
  }
55
62
  static get is() { return "pds-link"; }
56
63
  static get encapsulation() { return "shadow"; }
@@ -66,6 +73,29 @@ export class PdsLink {
66
73
  }
67
74
  static get properties() {
68
75
  return {
76
+ "active": {
77
+ "type": "boolean",
78
+ "mutable": false,
79
+ "complexType": {
80
+ "original": "boolean",
81
+ "resolved": "boolean",
82
+ "references": {}
83
+ },
84
+ "required": false,
85
+ "optional": false,
86
+ "docs": {
87
+ "tags": [{
88
+ "name": "defaultValue",
89
+ "text": "false"
90
+ }],
91
+ "text": "Marks the link as the current/active navigation item \u2014 for tab strips and\nnav rails built from links. Applies the active treatment (persistent\nunderline + strong text) and sets `aria-current=\"page\"`."
92
+ },
93
+ "getter": false,
94
+ "setter": false,
95
+ "reflect": true,
96
+ "attribute": "active",
97
+ "defaultValue": "false"
98
+ },
69
99
  "color": {
70
100
  "type": "string",
71
101
  "mutable": false,
@@ -58,3 +58,17 @@ WithoutCustomTextInSlot.args = {
58
58
  fontSize: 'lg',
59
59
  variant: 'inline'
60
60
  };
61
+
62
+ // A per-URL tab strip built from links (pds-tabs is an in-page panel switcher,
63
+ // not navigation). `active` marks the current destination — persistent underline
64
+ // + strong text, and `aria-current="page"`, which is the correct ARIA token for
65
+ // links that navigate to distinct pages.
66
+ export const NavTabs = {
67
+ render: () => html`
68
+ <nav aria-label="Club sections" style="display: flex; gap: var(--pine-dimension-md);">
69
+ <pds-link href="/clubs/1/chat" font-size="md" ?active=${true}>Chat</pds-link>
70
+ <pds-link href="/clubs/1/resources" font-size="md" variant="plain">Resources</pds-link>
71
+ <pds-link href="/clubs/1/members" font-size="md" variant="plain">Members</pds-link>
72
+ </nav>
73
+ `,
74
+ };
@@ -3,6 +3,7 @@ import { computePosition, flip, offset, shift, size, autoUpdate } from "@floatin
3
3
  import { debounceEvent } from "../../utils/utils";
4
4
  import { isSpecTest, messageId, assignDescription } from "../../utils/form";
5
5
  import { danger, enlarge } from "@pine-ds/icons/icons";
6
+ import { formatMessage, pluralize } from "../../i18n";
6
7
  /**
7
8
  * @slot (default) - Static option elements for the multiselect
8
9
  * @slot empty - Custom empty state message when no options match
@@ -13,14 +14,65 @@ import { danger, enlarge } from "@pine-ds/icons/icons";
13
14
  export class PdsMultiselect {
14
15
  constructor() {
15
16
  /**
16
- * Placeholder text for the input field.
17
+ * Placeholder text for the input field. Pass a translated string to localize it; defaults to English.
18
+ * @defaultValue 'Select...'
17
19
  */
18
20
  this.placeholder = 'Select...';
19
21
  /**
20
- * Placeholder text for the search input inside the dropdown panel.
21
- * @default 'Find...'
22
+ * Placeholder text for the search input inside the dropdown panel. Pass a translated string to localize it; defaults to English.
23
+ * @defaultValue 'Find...'
22
24
  */
23
25
  this.searchPlaceholder = 'Find...';
26
+ /**
27
+ * Accessible label for the search input. Pass a translated string to localize it; defaults to English.
28
+ * @defaultValue 'Search options'
29
+ */
30
+ this.searchOptionsLabel = 'Search options';
31
+ /**
32
+ * Accessible label for the selected-items region. Pass a translated string to localize it; defaults to English.
33
+ * @defaultValue 'Selected items'
34
+ */
35
+ this.selectedItemsLabel = 'Selected items';
36
+ /**
37
+ * Accessible label for the options listbox (falls back to this when `label` is unset). Pass a translated string to localize it; defaults to English.
38
+ * @defaultValue 'Options'
39
+ */
40
+ this.optionsLabel = 'Options';
41
+ /**
42
+ * Text shown when no options match the search. Pass a translated string to localize it; defaults to English.
43
+ * @defaultValue 'No options found'
44
+ */
45
+ this.noOptionsFoundLabel = 'No options found';
46
+ /**
47
+ * Visible label for the create-new-option row. Pass a translated string to localize it; `{text}` is interpolated.
48
+ * @defaultValue 'Add "{text}"'
49
+ */
50
+ this.createOptionLabel = 'Add "{text}"';
51
+ /**
52
+ * Accessible label for the create-new-option row. Pass a translated string to localize it; `{text}` is interpolated.
53
+ * @defaultValue 'Create new tag: {text}'
54
+ */
55
+ this.createOptionAriaLabel = 'Create new tag: {text}';
56
+ /**
57
+ * Screen-reader announcement when an item is removed. Pass a translated string to localize it; `{item}` is interpolated.
58
+ * @defaultValue '{item} removed'
59
+ */
60
+ this.itemRemovedLabel = '{item} removed';
61
+ /**
62
+ * Accessible label for the remove button on each selected-item pill. Pass a translated string to localize it; defaults to English.
63
+ * @defaultValue 'Remove'
64
+ */
65
+ this.pillRemoveLabel = 'Remove';
66
+ /**
67
+ * Singular form of the selected-count trigger text. Pass a translated string to localize it; `{count}` is interpolated.
68
+ * @defaultValue '{count} item'
69
+ */
70
+ this.selectedCountLabelOne = '{count} item';
71
+ /**
72
+ * Plural (and fallback) form of the selected-count trigger text — used for English and any locale whose selected plural category isn't supplied via `selectedCountLabels`. Pass a translated string to localize it; `{count}` is interpolated.
73
+ * @defaultValue '{count} items'
74
+ */
75
+ this.selectedCountLabelOther = '{count} items';
24
76
  /**
25
77
  * Whether to close the panel after an option is selected.
26
78
  * Defaults to `false` (panel stays open for multi-select).
@@ -259,7 +311,7 @@ export class PdsMultiselect {
259
311
  this.pdsMultiselectChange.emit({ values: this.value, items: this.selectedItems });
260
312
  // Clear first so screen readers re-announce even when the same item is removed twice
261
313
  this.removalAnnouncement = '';
262
- queueMicrotask(() => { this.removalAnnouncement = `${item.text} removed`; });
314
+ queueMicrotask(() => { this.removalAnnouncement = formatMessage(this.itemRemovedLabel, { item: item.text }); });
263
315
  this.isClosingViaSelection = true;
264
316
  if (this.isOpen) {
265
317
  (_a = this.searchInputEl) === null || _a === void 0 ? void 0 : _a.focus();
@@ -896,7 +948,7 @@ export class PdsMultiselect {
896
948
  'pds-multiselect__option--selected': isSelected,
897
949
  'pds-multiselect__option--create': isCreateOption,
898
950
  'pds-multiselect__option--disabled': isDisabled || isCreateDisabled,
899
- }, role: "option", "aria-selected": isSelected ? 'true' : 'false', "aria-disabled": isDisabled || isCreateDisabled ? 'true' : undefined, "aria-label": isCreateOption ? `Create new tag: ${option.text}` : undefined, "data-index": index, onMouseDown: this.handleOptionMouseDown(option), onMouseEnter: this.handleOptionMouseEnter(index, option) }, isCreateOption ? (h("pds-box", { class: "pds-multiselect__create-option", "align-items": "center", gap: "xs" }, h("pds-icon", { name: "add", size: "small" }), h("pds-text", null, "Add \"", option.text, "\""))) : (h("pds-checkbox", { componentId: `${this.componentId}-checkbox-${index}`, checked: isSelected, label: option.text, disabled: isDisabled, style: { pointerEvents: 'none' } }))));
951
+ }, role: "option", "aria-selected": isSelected ? 'true' : 'false', "aria-disabled": isDisabled || isCreateDisabled ? 'true' : undefined, "aria-label": isCreateOption ? formatMessage(this.createOptionAriaLabel, { text: option.text }) : undefined, "data-index": index, onMouseDown: this.handleOptionMouseDown(option), onMouseEnter: this.handleOptionMouseEnter(index, option) }, isCreateOption ? (h("pds-box", { class: "pds-multiselect__create-option", "align-items": "center", gap: "xs" }, h("pds-icon", { name: "add", size: "small" }), h("pds-text", null, formatMessage(this.createOptionLabel, { text: option.text })))) : (h("pds-checkbox", { componentId: `${this.componentId}-checkbox-${index}`, checked: isSelected, label: option.text, disabled: isDisabled, style: { pointerEvents: 'none' } }))));
900
952
  }
901
953
  renderSelectedItemsList() {
902
954
  if (this.hideSelectedItems || this.selectedItems.length === 0)
@@ -910,7 +962,7 @@ export class PdsMultiselect {
910
962
  const valueArray = this.ensureValueArray();
911
963
  const hasSlottedEmpty = !!this.el.querySelector('[slot="empty"]');
912
964
  const hasSlottedLoading = !!this.el.querySelector('[slot="loading"]');
913
- 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")))), this.getGroupedRenderItems(filteredOptions).map((item, itemIndex) => {
965
+ 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": this.searchOptionsLabel, "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 || this.optionsLabel, 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, this.noOptionsFoundLabel)))), this.getGroupedRenderItems(filteredOptions).map((item, itemIndex) => {
914
966
  if (item.type === 'group') {
915
967
  return (h("li", { key: `group-${itemIndex}`, role: "group", "aria-label": item.group, class: "pds-multiselect__group" }, h("span", { class: "pds-multiselect__group-header", "aria-hidden": "true" }, item.group), h("ul", { class: "pds-multiselect__group-list", role: "presentation" }, item.options.map(({ option, index }) => this.renderOption(option, index, valueArray)))));
916
968
  }
@@ -925,27 +977,54 @@ export class PdsMultiselect {
925
977
  const variant = this.disabled ? 'text' : 'tag';
926
978
  const visibleItems = this.selectedItems.slice(0, Math.max(1, this.maxInlinePills));
927
979
  const overflowCount = this.selectedItems.length - visibleItems.length;
928
- return (h("div", { class: "pds-multiselect__pill-list pds-multiselect__pill-list--inline", "aria-label": "Selected items" }, visibleItems.map(item => (h("pds-chip", { key: String(item.id), "component-id": `${this.componentId}-pill-${item.id}`, variant: variant, size: "sm", sentiment: "neutral", onPdsTagCloseClick: this.handlePillRemove(item) }, item.text))), overflowCount > 0 && (h("span", { class: "pds-multiselect__pill-overflow" }, "+", overflowCount))));
980
+ return (h("div", { class: "pds-multiselect__pill-list pds-multiselect__pill-list--inline", "aria-label": this.selectedItemsLabel }, visibleItems.map(item => (h("pds-chip", { key: String(item.id), "component-id": `${this.componentId}-pill-${item.id}`, variant: variant, size: "sm", sentiment: "neutral", "dismiss-label": this.pillRemoveLabel, onPdsTagCloseClick: this.handlePillRemove(item) }, item.text))), overflowCount > 0 && (h("span", { class: "pds-multiselect__pill-overflow" }, "+", overflowCount))));
929
981
  }
930
982
  renderBelowPills() {
931
983
  if (this.selectedItems.length === 0)
932
984
  return null;
933
985
  const variant = this.disabled ? 'text' : 'tag';
934
- return (h("div", { class: "pds-multiselect__pill-list pds-multiselect__pill-list--below", "aria-label": "Selected items" }, this.selectedItems.map(item => (h("pds-chip", { key: String(item.id), "component-id": `${this.componentId}-pill-${item.id}`, variant: variant, size: "md", sentiment: "neutral", onPdsTagCloseClick: this.handlePillRemove(item) }, item.text)))));
986
+ return (h("div", { class: "pds-multiselect__pill-list pds-multiselect__pill-list--below", "aria-label": this.selectedItemsLabel }, this.selectedItems.map(item => (h("pds-chip", { key: String(item.id), "component-id": `${this.componentId}-pill-${item.id}`, variant: variant, size: "md", sentiment: "neutral", "dismiss-label": this.pillRemoveLabel, onPdsTagCloseClick: this.handlePillRemove(item) }, item.text)))));
935
987
  }
936
988
  getTriggerText() {
937
989
  const count = this.selectedItems.length;
938
990
  if (count === 0 || (this.selectedDisplay === 'pill' && this.pillPosition === 'below')) {
991
+ // Fall back to a non-empty string: the trigger's accessible name comes from
992
+ // this text, so an empty/undefined placeholder must never leave it nameless
993
+ // (WCAG 4.1.2). The prop is localizable; this last-resort default is not.
939
994
  return this.placeholder || 'Select...';
940
995
  }
941
- return `${count} item${count === 1 ? '' : 's'}`;
996
+ return pluralize(this.el, count, this.resolveCountForms());
997
+ }
998
+ /**
999
+ * The `one`/`other` props are the ergonomic English defaults; `selectedCountLabels`
1000
+ * (object or JSON-string attribute) layers full CLDR forms on top for locales
1001
+ * that need `few`/`many`/`two`/`zero`. Malformed JSON degrades to the defaults.
1002
+ */
1003
+ resolveCountForms() {
1004
+ const base = {
1005
+ one: this.selectedCountLabelOne,
1006
+ other: this.selectedCountLabelOther,
1007
+ };
1008
+ const extra = this.selectedCountLabels;
1009
+ if (!extra)
1010
+ return base;
1011
+ if (typeof extra === 'string') {
1012
+ try {
1013
+ const parsed = JSON.parse(extra);
1014
+ return parsed && typeof parsed === 'object' ? Object.assign(Object.assign({}, base), parsed) : base;
1015
+ }
1016
+ catch (_a) {
1017
+ return base; // not valid JSON → fall back to the English-shape defaults
1018
+ }
1019
+ }
1020
+ return Object.assign(Object.assign({}, base), extra);
942
1021
  }
943
1022
  render() {
944
1023
  const hasSelections = this.selectedItems.length > 0;
945
- return (h(Host, { key: '086b6d2d199b35110e64ba1da3c12f1a81360581', "aria-disabled": this.disabled ? 'true' : null }, h("div", { key: 'c2faf217a97de056a9111a78e7077025e4ab5ee1', class: "pds-multiselect", onFocusout: this.handleContainerFocusOut }, this.label && (h("label", { key: '0aff86a3a0054aef256bac5c0204dd914a9bd3ae', id: `${this.componentId}-label`, htmlFor: this.componentId, class: {
1024
+ return (h(Host, { key: '4a54a778522d0a1d2f45c32928e7a663f19c0189', "aria-disabled": this.disabled ? 'true' : null }, h("div", { key: '3593eb4fa1a0ae575b1c0ed03f0763dcea04c9e6', class: "pds-multiselect", onFocusout: this.handleContainerFocusOut }, this.label && (h("label", { key: 'f91a680ae3c3021bac6bd99368d3ef6ad6438898', id: `${this.componentId}-label`, htmlFor: this.componentId, class: {
946
1025
  'pds-multiselect__label': true,
947
1026
  'visually-hidden': this.hideLabel,
948
- } }, this.label)), h("div", { key: '3b92119871dc32bb3c9a559be816bdece2fc30a6', class: "pds-multiselect__wrapper", ref: el => (this.containerEl = el), style: { width: this.triggerWidth } }, this.selectedDisplay === 'pill' && this.pillPosition === 'inline' ? (h("div", { ref: el => (this.pillInlineTriggerEl = el || undefined), part: "trigger", class: {
1027
+ } }, this.label)), h("div", { key: 'de2899f19057b8cd19cf3467251d03c1b43b73f5', class: "pds-multiselect__wrapper", ref: el => (this.containerEl = el), style: { width: this.triggerWidth } }, this.selectedDisplay === 'pill' && this.pillPosition === 'inline' ? (h("div", { ref: el => (this.pillInlineTriggerEl = el || undefined), part: "trigger", class: {
949
1028
  'pds-multiselect__trigger': true,
950
1029
  'pds-multiselect__trigger--open': this.isOpen,
951
1030
  'pds-multiselect__trigger--disabled': this.disabled,
@@ -961,7 +1040,7 @@ export class PdsMultiselect {
961
1040
  }, 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", { class: {
962
1041
  'pds-multiselect__trigger-text': true,
963
1042
  'pds-multiselect__trigger-text--placeholder': !hasSelections || (this.selectedDisplay === 'pill' && this.pillPosition === 'below'),
964
- } }, this.getTriggerText()), h("pds-icon", { class: "pds-multiselect__icon", icon: enlarge }))), this.renderDropdown()), this.selectedDisplay === 'pill' && this.pillPosition === 'below' && this.renderBelowPills(), h("span", { key: '07d6a6bf9ccc2fe8bfcf9502a1cd4b7abf5c5e6f', class: "visually-hidden", "aria-live": "polite", "aria-atomic": "true" }, this.removalAnnouncement), this.helperMessage && !(this.errorMessage && this.errorMessage.length > 0) && (h("p", { key: 'a94bb6f31805d31ec3cd5b5f2ca8b1984f4d41d1', class: "pds-multiselect__helper", id: messageId(this.componentId, 'helper') }, this.helperMessage)), this.errorMessage && (h("p", { key: '15afc6b9313e1fe22bd56b00eee1ebcf9e085c2e', class: "pds-multiselect__error", id: messageId(this.componentId, 'error') }, h("pds-icon", { key: '452814577b14ca8f891b101903bd1a7a7e5d8bb1', icon: danger, size: "small" }), this.errorMessage)), h("div", { key: 'd8ce787886e666303759cd2654c78b44269a40ff', style: { display: 'none' } }, h("slot", { key: '8295376fb03b23d44c5baeca9bc967514e433e0f' })))));
1043
+ } }, this.getTriggerText()), h("pds-icon", { class: "pds-multiselect__icon", icon: enlarge }))), this.renderDropdown()), this.selectedDisplay === 'pill' && this.pillPosition === 'below' && this.renderBelowPills(), h("span", { key: '973443f9eb29dcf7fb1bde3f9101ac02967a8fd9', class: "visually-hidden", "aria-live": "polite", "aria-atomic": "true" }, this.removalAnnouncement), this.helperMessage && !(this.errorMessage && this.errorMessage.length > 0) && (h("p", { key: '568aab2b278abb7f4426d84ee926b4883375fb11', class: "pds-multiselect__helper", id: messageId(this.componentId, 'helper') }, this.helperMessage)), this.errorMessage && (h("p", { key: 'daddf192efd47df8c15267b9896913b926e02544', class: "pds-multiselect__error", id: messageId(this.componentId, 'error') }, h("pds-icon", { key: 'd0c72ab75a8e02e61c09e980ae817790804a776a', icon: danger, size: "small" }), this.errorMessage)), h("div", { key: '0453db2fca10b3573b1dd244875f90c856c8887b', style: { display: 'none' } }, h("slot", { key: 'a612741afc9545e5e50c47d27c3c27c1d7cade3c' })))));
965
1044
  }
966
1045
  static get is() { return "pds-multiselect"; }
967
1046
  static get encapsulation() { return "shadow"; }
@@ -1025,10 +1104,13 @@ export class PdsMultiselect {
1025
1104
  "references": {}
1026
1105
  },
1027
1106
  "required": false,
1028
- "optional": true,
1107
+ "optional": false,
1029
1108
  "docs": {
1030
- "tags": [],
1031
- "text": "Placeholder text for the input field."
1109
+ "tags": [{
1110
+ "name": "defaultValue",
1111
+ "text": "'Select...'"
1112
+ }],
1113
+ "text": "Placeholder text for the input field. Pass a translated string to localize it; defaults to English."
1032
1114
  },
1033
1115
  "getter": false,
1034
1116
  "setter": false,
@@ -1048,10 +1130,10 @@ export class PdsMultiselect {
1048
1130
  "optional": false,
1049
1131
  "docs": {
1050
1132
  "tags": [{
1051
- "name": "default",
1133
+ "name": "defaultValue",
1052
1134
  "text": "'Find...'"
1053
1135
  }],
1054
- "text": "Placeholder text for the search input inside the dropdown panel."
1136
+ "text": "Placeholder text for the search input inside the dropdown panel. Pass a translated string to localize it; defaults to English."
1055
1137
  },
1056
1138
  "getter": false,
1057
1139
  "setter": false,
@@ -1059,6 +1141,265 @@ export class PdsMultiselect {
1059
1141
  "attribute": "search-placeholder",
1060
1142
  "defaultValue": "'Find...'"
1061
1143
  },
1144
+ "searchOptionsLabel": {
1145
+ "type": "string",
1146
+ "mutable": false,
1147
+ "complexType": {
1148
+ "original": "string",
1149
+ "resolved": "string",
1150
+ "references": {}
1151
+ },
1152
+ "required": false,
1153
+ "optional": false,
1154
+ "docs": {
1155
+ "tags": [{
1156
+ "name": "defaultValue",
1157
+ "text": "'Search options'"
1158
+ }],
1159
+ "text": "Accessible label for the search input. Pass a translated string to localize it; defaults to English."
1160
+ },
1161
+ "getter": false,
1162
+ "setter": false,
1163
+ "reflect": false,
1164
+ "attribute": "search-options-label",
1165
+ "defaultValue": "'Search options'"
1166
+ },
1167
+ "selectedItemsLabel": {
1168
+ "type": "string",
1169
+ "mutable": false,
1170
+ "complexType": {
1171
+ "original": "string",
1172
+ "resolved": "string",
1173
+ "references": {}
1174
+ },
1175
+ "required": false,
1176
+ "optional": false,
1177
+ "docs": {
1178
+ "tags": [{
1179
+ "name": "defaultValue",
1180
+ "text": "'Selected items'"
1181
+ }],
1182
+ "text": "Accessible label for the selected-items region. Pass a translated string to localize it; defaults to English."
1183
+ },
1184
+ "getter": false,
1185
+ "setter": false,
1186
+ "reflect": false,
1187
+ "attribute": "selected-items-label",
1188
+ "defaultValue": "'Selected items'"
1189
+ },
1190
+ "optionsLabel": {
1191
+ "type": "string",
1192
+ "mutable": false,
1193
+ "complexType": {
1194
+ "original": "string",
1195
+ "resolved": "string",
1196
+ "references": {}
1197
+ },
1198
+ "required": false,
1199
+ "optional": false,
1200
+ "docs": {
1201
+ "tags": [{
1202
+ "name": "defaultValue",
1203
+ "text": "'Options'"
1204
+ }],
1205
+ "text": "Accessible label for the options listbox (falls back to this when `label` is unset). Pass a translated string to localize it; defaults to English."
1206
+ },
1207
+ "getter": false,
1208
+ "setter": false,
1209
+ "reflect": false,
1210
+ "attribute": "options-label",
1211
+ "defaultValue": "'Options'"
1212
+ },
1213
+ "noOptionsFoundLabel": {
1214
+ "type": "string",
1215
+ "mutable": false,
1216
+ "complexType": {
1217
+ "original": "string",
1218
+ "resolved": "string",
1219
+ "references": {}
1220
+ },
1221
+ "required": false,
1222
+ "optional": false,
1223
+ "docs": {
1224
+ "tags": [{
1225
+ "name": "defaultValue",
1226
+ "text": "'No options found'"
1227
+ }],
1228
+ "text": "Text shown when no options match the search. Pass a translated string to localize it; defaults to English."
1229
+ },
1230
+ "getter": false,
1231
+ "setter": false,
1232
+ "reflect": false,
1233
+ "attribute": "no-options-found-label",
1234
+ "defaultValue": "'No options found'"
1235
+ },
1236
+ "createOptionLabel": {
1237
+ "type": "string",
1238
+ "mutable": false,
1239
+ "complexType": {
1240
+ "original": "string",
1241
+ "resolved": "string",
1242
+ "references": {}
1243
+ },
1244
+ "required": false,
1245
+ "optional": false,
1246
+ "docs": {
1247
+ "tags": [{
1248
+ "name": "defaultValue",
1249
+ "text": "'Add \"{text}\"'"
1250
+ }],
1251
+ "text": "Visible label for the create-new-option row. Pass a translated string to localize it; `{text}` is interpolated."
1252
+ },
1253
+ "getter": false,
1254
+ "setter": false,
1255
+ "reflect": false,
1256
+ "attribute": "create-option-label",
1257
+ "defaultValue": "'Add \"{text}\"'"
1258
+ },
1259
+ "createOptionAriaLabel": {
1260
+ "type": "string",
1261
+ "mutable": false,
1262
+ "complexType": {
1263
+ "original": "string",
1264
+ "resolved": "string",
1265
+ "references": {}
1266
+ },
1267
+ "required": false,
1268
+ "optional": false,
1269
+ "docs": {
1270
+ "tags": [{
1271
+ "name": "defaultValue",
1272
+ "text": "'Create new tag: {text}'"
1273
+ }],
1274
+ "text": "Accessible label for the create-new-option row. Pass a translated string to localize it; `{text}` is interpolated."
1275
+ },
1276
+ "getter": false,
1277
+ "setter": false,
1278
+ "reflect": false,
1279
+ "attribute": "create-option-aria-label",
1280
+ "defaultValue": "'Create new tag: {text}'"
1281
+ },
1282
+ "itemRemovedLabel": {
1283
+ "type": "string",
1284
+ "mutable": false,
1285
+ "complexType": {
1286
+ "original": "string",
1287
+ "resolved": "string",
1288
+ "references": {}
1289
+ },
1290
+ "required": false,
1291
+ "optional": false,
1292
+ "docs": {
1293
+ "tags": [{
1294
+ "name": "defaultValue",
1295
+ "text": "'{item} removed'"
1296
+ }],
1297
+ "text": "Screen-reader announcement when an item is removed. Pass a translated string to localize it; `{item}` is interpolated."
1298
+ },
1299
+ "getter": false,
1300
+ "setter": false,
1301
+ "reflect": false,
1302
+ "attribute": "item-removed-label",
1303
+ "defaultValue": "'{item} removed'"
1304
+ },
1305
+ "pillRemoveLabel": {
1306
+ "type": "string",
1307
+ "mutable": false,
1308
+ "complexType": {
1309
+ "original": "string",
1310
+ "resolved": "string",
1311
+ "references": {}
1312
+ },
1313
+ "required": false,
1314
+ "optional": false,
1315
+ "docs": {
1316
+ "tags": [{
1317
+ "name": "defaultValue",
1318
+ "text": "'Remove'"
1319
+ }],
1320
+ "text": "Accessible label for the remove button on each selected-item pill. Pass a translated string to localize it; defaults to English."
1321
+ },
1322
+ "getter": false,
1323
+ "setter": false,
1324
+ "reflect": false,
1325
+ "attribute": "pill-remove-label",
1326
+ "defaultValue": "'Remove'"
1327
+ },
1328
+ "selectedCountLabelOne": {
1329
+ "type": "string",
1330
+ "mutable": false,
1331
+ "complexType": {
1332
+ "original": "string",
1333
+ "resolved": "string",
1334
+ "references": {}
1335
+ },
1336
+ "required": false,
1337
+ "optional": false,
1338
+ "docs": {
1339
+ "tags": [{
1340
+ "name": "defaultValue",
1341
+ "text": "'{count} item'"
1342
+ }],
1343
+ "text": "Singular form of the selected-count trigger text. Pass a translated string to localize it; `{count}` is interpolated."
1344
+ },
1345
+ "getter": false,
1346
+ "setter": false,
1347
+ "reflect": false,
1348
+ "attribute": "selected-count-label-one",
1349
+ "defaultValue": "'{count} item'"
1350
+ },
1351
+ "selectedCountLabelOther": {
1352
+ "type": "string",
1353
+ "mutable": false,
1354
+ "complexType": {
1355
+ "original": "string",
1356
+ "resolved": "string",
1357
+ "references": {}
1358
+ },
1359
+ "required": false,
1360
+ "optional": false,
1361
+ "docs": {
1362
+ "tags": [{
1363
+ "name": "defaultValue",
1364
+ "text": "'{count} items'"
1365
+ }],
1366
+ "text": "Plural (and fallback) form of the selected-count trigger text \u2014 used for English and any locale whose selected plural category isn't supplied via `selectedCountLabels`. Pass a translated string to localize it; `{count}` is interpolated."
1367
+ },
1368
+ "getter": false,
1369
+ "setter": false,
1370
+ "reflect": false,
1371
+ "attribute": "selected-count-label-other",
1372
+ "defaultValue": "'{count} items'"
1373
+ },
1374
+ "selectedCountLabels": {
1375
+ "type": "string",
1376
+ "mutable": false,
1377
+ "complexType": {
1378
+ "original": "PluralForms | string",
1379
+ "resolved": "\"few\" | \"many\" | \"one\" | \"other\" | \"two\" | \"zero\" | string",
1380
+ "references": {
1381
+ "PluralForms": {
1382
+ "location": "import",
1383
+ "path": "../../i18n",
1384
+ "id": "src/i18n/index.ts::PluralForms",
1385
+ "referenceLocation": "PluralForms"
1386
+ }
1387
+ }
1388
+ },
1389
+ "required": false,
1390
+ "optional": true,
1391
+ "docs": {
1392
+ "tags": [{
1393
+ "name": "defaultValue",
1394
+ "text": "undefined"
1395
+ }],
1396
+ "text": "Full CLDR plural forms for the selected-count trigger text, for locales with more than the English `one`/`other` categories (e.g. Polish `few`/`many`, Arabic `zero`/`two`). Accepts an object property or a JSON string attribute keyed by CLDR category \u2014 `{ one, other, few, many, two, zero }`. Any form omitted here falls back to `selectedCountLabelOne`/`selectedCountLabelOther`. `{count}` is interpolated."
1397
+ },
1398
+ "getter": false,
1399
+ "setter": false,
1400
+ "reflect": false,
1401
+ "attribute": "selected-count-labels"
1402
+ },
1062
1403
  "closePanelOnSelect": {
1063
1404
  "type": "boolean",
1064
1405
  "mutable": false,
@@ -29,7 +29,7 @@ pds-tab {
29
29
  .pds-tab.is-active .pds-tab__content::after, .pds-tab[aria-selected=true] .pds-tab__content::after {
30
30
  opacity: 1;
31
31
  }
32
- .pds-tab:hover:not(:disabled) {
32
+ .pds-tab:hover:not(:disabled, .is-disabled) {
33
33
  color: var(--pine-color-text);
34
34
  }
35
35
  .pds-tab:focus {
@@ -85,7 +85,7 @@ pds-tab {
85
85
  .pds-tabs--availability .pds-tab.is-active .pds-tab-edge, .pds-tabs--availability .pds-tab[aria-selected=true] .pds-tab-edge {
86
86
  z-index: var(--pine-z-index-raised);
87
87
  }
88
- .pds-tabs--availability .pds-tab:hover:not(.is-active, [aria-selected=true], :disabled) {
88
+ .pds-tabs--availability .pds-tab:hover:not(.is-active, [aria-selected=true], :disabled, .is-disabled) {
89
89
  --color-background-tab: var(--pine-color-secondary-hover);
90
90
  color: var(--pine-color-text);
91
91
  }
@@ -139,10 +139,10 @@ pds-tab {
139
139
  background-color: var(--pine-color-primary);
140
140
  color: var(--pine-color-text-primary);
141
141
  }
142
- .pds-tabs--filter .pds-tab.is-active:hover:not(:disabled), .pds-tabs--filter .pds-tab[aria-selected=true]:hover:not(:disabled) {
142
+ .pds-tabs--filter .pds-tab.is-active:hover:not(:disabled, .is-disabled), .pds-tabs--filter .pds-tab[aria-selected=true]:hover:not(:disabled, .is-disabled) {
143
143
  background-color: var(--pine-color-primary-hover);
144
144
  }
145
- .pds-tabs--filter .pds-tab:hover:not(.is-active, [aria-selected=true], :disabled) {
145
+ .pds-tabs--filter .pds-tab:hover:not(.is-active, [aria-selected=true], :disabled, .is-disabled) {
146
146
  background-color: var(--pine-color-border-disabled);
147
147
  }
148
148
  .pds-tabs--filter .pds-tab:disabled, .pds-tabs--filter .pds-tab.is-disabled {