@pine-ds/core 3.14.0 → 3.14.1

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 (462) hide show
  1. package/components/floating-ui.dom.js +161 -40
  2. package/components/floating-ui.dom.js.map +1 -1
  3. package/components/index.d.ts +2 -0
  4. package/components/index.js +1 -0
  5. package/components/index.js.map +1 -1
  6. package/components/index2.js +1 -1
  7. package/components/index2.js.map +1 -1
  8. package/components/pds-combobox.js +65 -25
  9. package/components/pds-combobox.js.map +1 -1
  10. package/components/pds-dropdown-menu-item.js +1 -1
  11. package/components/pds-dropdown-menu-item.js.map +1 -1
  12. package/components/pds-dropdown-menu.js +3 -2
  13. package/components/pds-dropdown-menu.js.map +1 -1
  14. package/components/pds-filter.js +1 -1
  15. package/components/pds-filter.js.map +1 -1
  16. package/components/pds-multiselect.d.ts +11 -0
  17. package/components/pds-multiselect.js +666 -0
  18. package/components/pds-multiselect.js.map +1 -0
  19. package/components/pds-popover.js +1 -1
  20. package/components/pds-progress.js +1 -1
  21. package/components/pds-property.js +1 -1
  22. package/components/pds-radio-group.js +3 -3
  23. package/components/pds-radio.js +3 -3
  24. package/components/pds-row.js +1 -1
  25. package/components/pds-select.js +1 -1
  26. package/components/pds-sortable-item.js +1 -1
  27. package/components/pds-sortable.js +1 -1
  28. package/components/pds-switch.js +3 -3
  29. package/components/pds-tab.js +4 -4
  30. package/components/pds-tab.js.map +1 -1
  31. package/components/pds-table-body.js +1 -1
  32. package/components/pds-table-cell2.js +2 -2
  33. package/components/pds-table-head-cell2.js +35 -6
  34. package/components/pds-table-head-cell2.js.map +1 -1
  35. package/components/pds-table-head.js +1 -1
  36. package/components/pds-table-row.js +1 -1
  37. package/components/pds-tabpanel.js +1 -1
  38. package/components/pds-tabs.js +1 -1
  39. package/components/pds-text2.js +1 -1
  40. package/components/pds-textarea.js +4 -4
  41. package/components/pds-toast.js +3 -3
  42. package/components/pds-tooltip.js +2 -2
  43. package/dist/cjs/{floating-ui.dom-DTAy35nv.js → floating-ui.dom-Ca6tS7ef.js} +163 -41
  44. package/dist/cjs/floating-ui.dom-Ca6tS7ef.js.map +1 -0
  45. package/dist/cjs/{index-CMeuo765.js → index-BA--jsiy.js} +3 -3
  46. package/dist/cjs/index-BA--jsiy.js.map +1 -0
  47. package/dist/cjs/loader.cjs.js +1 -1
  48. package/dist/cjs/pds-accordion.cjs.entry.js +1 -1
  49. package/dist/cjs/pds-avatar.cjs.entry.js +1 -1
  50. package/dist/cjs/pds-button.cjs.entry.js +1 -1
  51. package/dist/cjs/pds-checkbox.cjs.entry.js +1 -1
  52. package/dist/cjs/pds-chip.cjs.entry.js +1 -1
  53. package/dist/cjs/pds-combobox.cjs.entry.js +66 -26
  54. package/dist/cjs/pds-combobox.entry.cjs.js.map +1 -1
  55. package/dist/cjs/pds-copytext.cjs.entry.js +1 -1
  56. package/dist/cjs/pds-dropdown-menu-item.cjs.entry.js +1 -1
  57. package/dist/cjs/pds-dropdown-menu-item.entry.cjs.js.map +1 -1
  58. package/dist/cjs/pds-dropdown-menu.cjs.entry.js +4 -3
  59. package/dist/cjs/pds-dropdown-menu.entry.cjs.js.map +1 -1
  60. package/dist/cjs/pds-filter.cjs.entry.js +2 -2
  61. package/dist/cjs/pds-filter.entry.cjs.js.map +1 -1
  62. package/dist/cjs/pds-input.cjs.entry.js +1 -1
  63. package/dist/cjs/pds-link.cjs.entry.js +1 -1
  64. package/dist/cjs/pds-multiselect.cjs.entry.js +592 -0
  65. package/dist/cjs/pds-multiselect.entry.cjs.js.map +1 -0
  66. package/dist/cjs/pds-popover.cjs.entry.js +1 -1
  67. package/dist/cjs/pds-progress.cjs.entry.js +1 -1
  68. package/dist/cjs/pds-property.cjs.entry.js +1 -1
  69. package/dist/cjs/pds-radio-group.cjs.entry.js +4 -4
  70. package/dist/cjs/pds-radio.cjs.entry.js +4 -4
  71. package/dist/cjs/pds-row.cjs.entry.js +1 -1
  72. package/dist/cjs/pds-select.cjs.entry.js +2 -2
  73. package/dist/cjs/pds-sortable-item.cjs.entry.js +2 -2
  74. package/dist/cjs/pds-sortable.cjs.entry.js +1 -1
  75. package/dist/cjs/pds-switch.cjs.entry.js +4 -4
  76. package/dist/cjs/pds-tab.cjs.entry.js +4 -4
  77. package/dist/cjs/pds-tab.entry.cjs.js.map +1 -1
  78. package/dist/cjs/pds-table-body.cjs.entry.js +1 -1
  79. package/dist/cjs/pds-table-cell.cjs.entry.js +2 -2
  80. package/dist/cjs/pds-table-head-cell.cjs.entry.js +33 -6
  81. package/dist/cjs/pds-table-head-cell.entry.cjs.js.map +1 -1
  82. package/dist/cjs/pds-table-head.cjs.entry.js +1 -1
  83. package/dist/cjs/pds-table-row.cjs.entry.js +1 -1
  84. package/dist/cjs/pds-tabpanel.cjs.entry.js +1 -1
  85. package/dist/cjs/pds-tabs.cjs.entry.js +1 -1
  86. package/dist/cjs/pds-text.cjs.entry.js +1 -1
  87. package/dist/cjs/pds-textarea.cjs.entry.js +5 -5
  88. package/dist/cjs/pds-toast.cjs.entry.js +3 -3
  89. package/dist/cjs/pds-tooltip.cjs.entry.js +3 -3
  90. package/dist/cjs/pine-core.cjs.js +1 -1
  91. package/dist/collection/collection-manifest.json +1 -0
  92. package/dist/collection/components/pds-box/pds-box.css +0 -191
  93. package/dist/collection/components/pds-dropdown-menu/pds-dropdown-menu-item/pds-dropdown-menu-item.css +3 -1
  94. package/dist/collection/components/pds-dropdown-menu/pds-dropdown-menu.css +1 -1
  95. package/dist/collection/components/pds-dropdown-menu/pds-dropdown-menu.js +2 -1
  96. package/dist/collection/components/pds-dropdown-menu/pds-dropdown-menu.js.map +1 -1
  97. package/dist/collection/components/pds-filters/pds-filter/pds-filter.css +6 -2
  98. package/dist/collection/components/pds-multiselect/multiselect-interface.js +2 -0
  99. package/dist/collection/components/pds-multiselect/multiselect-interface.js.map +1 -0
  100. package/dist/collection/components/pds-multiselect/pds-multiselect.css +232 -0
  101. package/dist/collection/components/pds-multiselect/pds-multiselect.js +1152 -0
  102. package/dist/collection/components/pds-multiselect/pds-multiselect.js.map +1 -0
  103. package/dist/collection/components/pds-multiselect/stories/pds-multiselect.stories.js +371 -0
  104. package/dist/collection/components/pds-popover/pds-popover.js +1 -1
  105. package/dist/collection/components/pds-progress/pds-progress.js +1 -1
  106. package/dist/collection/components/pds-property/pds-property.js +1 -1
  107. package/dist/collection/components/pds-radio/pds-radio.js +3 -3
  108. package/dist/collection/components/pds-radio-group/pds-radio-group.js +3 -3
  109. package/dist/collection/components/pds-row/pds-row.js +1 -1
  110. package/dist/collection/components/pds-select/pds-select.js +1 -1
  111. package/dist/collection/components/pds-sortable/pds-sortable-item/pds-sortable-item.js +1 -1
  112. package/dist/collection/components/pds-sortable/pds-sortable.js +1 -1
  113. package/dist/collection/components/pds-switch/pds-switch.js +3 -3
  114. package/dist/collection/components/pds-table/pds-table-body/pds-table-body.js +1 -1
  115. package/dist/collection/components/pds-table/pds-table-cell/pds-table-cell.js +2 -2
  116. package/dist/collection/components/pds-table/pds-table-head/pds-table-head.js +1 -1
  117. package/dist/collection/components/pds-table/pds-table-head-cell/pds-table-head-cell.js +51 -6
  118. package/dist/collection/components/pds-table/pds-table-head-cell/pds-table-head-cell.js.map +1 -1
  119. package/dist/collection/components/pds-table/pds-table-row/pds-table-row.js +1 -1
  120. package/dist/collection/components/pds-table/stories/pds-table.stories.js +32 -4
  121. package/dist/collection/components/pds-tabs/pds-tab/pds-tab.css +6 -2
  122. package/dist/collection/components/pds-tabs/pds-tab/pds-tab.js +3 -3
  123. package/dist/collection/components/pds-tabs/pds-tabpanel/pds-tabpanel.js +1 -1
  124. package/dist/collection/components/pds-tabs/pds-tabs.js +1 -1
  125. package/dist/collection/components/pds-text/pds-text.js +1 -1
  126. package/dist/collection/components/pds-textarea/pds-textarea.js +4 -4
  127. package/dist/collection/components/pds-toast/pds-toast.js +3 -3
  128. package/dist/collection/components/pds-tooltip/pds-tooltip.js +2 -2
  129. package/dist/docs.json +960 -174
  130. package/dist/esm/{floating-ui.dom-DbQzNDdQ.js → floating-ui.dom-BO6p966C.js} +163 -42
  131. package/dist/esm/floating-ui.dom-BO6p966C.js.map +1 -0
  132. package/dist/esm/{index-xbb79yLt.js → index-DY8eSueV.js} +3 -3
  133. package/dist/esm/index-DY8eSueV.js.map +1 -0
  134. package/dist/esm/loader.js +1 -1
  135. package/dist/esm/pds-accordion.entry.js +1 -1
  136. package/dist/esm/pds-avatar.entry.js +1 -1
  137. package/dist/esm/pds-button.entry.js +1 -1
  138. package/dist/esm/pds-checkbox.entry.js +1 -1
  139. package/dist/esm/pds-chip.entry.js +1 -1
  140. package/dist/esm/pds-combobox.entry.js +66 -26
  141. package/dist/esm/pds-combobox.entry.js.map +1 -1
  142. package/dist/esm/pds-copytext.entry.js +1 -1
  143. package/dist/esm/pds-dropdown-menu-item.entry.js +1 -1
  144. package/dist/esm/pds-dropdown-menu-item.entry.js.map +1 -1
  145. package/dist/esm/pds-dropdown-menu.entry.js +4 -3
  146. package/dist/esm/pds-dropdown-menu.entry.js.map +1 -1
  147. package/dist/esm/pds-filter.entry.js +2 -2
  148. package/dist/esm/pds-filter.entry.js.map +1 -1
  149. package/dist/esm/pds-input.entry.js +1 -1
  150. package/dist/esm/pds-link.entry.js +1 -1
  151. package/dist/esm/pds-multiselect.entry.js +590 -0
  152. package/dist/esm/pds-multiselect.entry.js.map +1 -0
  153. package/dist/esm/pds-popover.entry.js +1 -1
  154. package/dist/esm/pds-progress.entry.js +1 -1
  155. package/dist/esm/pds-property.entry.js +1 -1
  156. package/dist/esm/pds-radio-group.entry.js +4 -4
  157. package/dist/esm/pds-radio.entry.js +4 -4
  158. package/dist/esm/pds-row.entry.js +1 -1
  159. package/dist/esm/pds-select.entry.js +2 -2
  160. package/dist/esm/pds-sortable-item.entry.js +2 -2
  161. package/dist/esm/pds-sortable.entry.js +1 -1
  162. package/dist/esm/pds-switch.entry.js +4 -4
  163. package/dist/esm/pds-tab.entry.js +4 -4
  164. package/dist/esm/pds-tab.entry.js.map +1 -1
  165. package/dist/esm/pds-table-body.entry.js +1 -1
  166. package/dist/esm/pds-table-cell.entry.js +2 -2
  167. package/dist/esm/pds-table-head-cell.entry.js +33 -6
  168. package/dist/esm/pds-table-head-cell.entry.js.map +1 -1
  169. package/dist/esm/pds-table-head.entry.js +1 -1
  170. package/dist/esm/pds-table-row.entry.js +1 -1
  171. package/dist/esm/pds-tabpanel.entry.js +1 -1
  172. package/dist/esm/pds-tabs.entry.js +1 -1
  173. package/dist/esm/pds-text.entry.js +1 -1
  174. package/dist/esm/pds-textarea.entry.js +5 -5
  175. package/dist/esm/pds-toast.entry.js +3 -3
  176. package/dist/esm/pds-tooltip.entry.js +3 -3
  177. package/dist/esm/pine-core.js +1 -1
  178. package/dist/esm-es5/floating-ui.dom-BO6p966C.js +2 -0
  179. package/dist/esm-es5/floating-ui.dom-BO6p966C.js.map +1 -0
  180. package/dist/esm-es5/{index-xbb79yLt.js → index-DY8eSueV.js} +1 -1
  181. package/dist/esm-es5/index-DY8eSueV.js.map +1 -0
  182. package/dist/esm-es5/loader.js +1 -1
  183. package/dist/esm-es5/pds-accordion.entry.js +1 -1
  184. package/dist/esm-es5/pds-avatar.entry.js +1 -1
  185. package/dist/esm-es5/pds-button.entry.js +1 -1
  186. package/dist/esm-es5/pds-checkbox.entry.js +1 -1
  187. package/dist/esm-es5/pds-chip.entry.js +1 -1
  188. package/dist/esm-es5/pds-combobox.entry.js +2 -2
  189. package/dist/esm-es5/pds-combobox.entry.js.map +1 -1
  190. package/dist/esm-es5/pds-copytext.entry.js +1 -1
  191. package/dist/esm-es5/pds-dropdown-menu-item.entry.js +1 -1
  192. package/dist/esm-es5/pds-dropdown-menu-item.entry.js.map +1 -1
  193. package/dist/esm-es5/pds-dropdown-menu.entry.js +1 -1
  194. package/dist/esm-es5/pds-dropdown-menu.entry.js.map +1 -1
  195. package/dist/esm-es5/pds-filter.entry.js +1 -1
  196. package/dist/esm-es5/pds-filter.entry.js.map +1 -1
  197. package/dist/esm-es5/pds-input.entry.js +1 -1
  198. package/dist/esm-es5/pds-link.entry.js +1 -1
  199. package/dist/esm-es5/pds-multiselect.entry.js +2 -0
  200. package/dist/esm-es5/pds-multiselect.entry.js.map +1 -0
  201. package/dist/esm-es5/pds-popover.entry.js +1 -1
  202. package/dist/esm-es5/pds-progress.entry.js +1 -1
  203. package/dist/esm-es5/pds-property.entry.js +1 -1
  204. package/dist/esm-es5/pds-radio-group.entry.js +1 -1
  205. package/dist/esm-es5/pds-radio.entry.js +1 -1
  206. package/dist/esm-es5/pds-row.entry.js +1 -1
  207. package/dist/esm-es5/pds-select.entry.js +1 -1
  208. package/dist/esm-es5/pds-sortable-item.entry.js +1 -1
  209. package/dist/esm-es5/pds-sortable.entry.js +1 -1
  210. package/dist/esm-es5/pds-switch.entry.js +1 -1
  211. package/dist/esm-es5/pds-tab.entry.js +1 -1
  212. package/dist/esm-es5/pds-tab.entry.js.map +1 -1
  213. package/dist/esm-es5/pds-table-body.entry.js +1 -1
  214. package/dist/esm-es5/pds-table-cell.entry.js +1 -1
  215. package/dist/esm-es5/pds-table-head-cell.entry.js +1 -1
  216. package/dist/esm-es5/pds-table-head-cell.entry.js.map +1 -1
  217. package/dist/esm-es5/pds-table-head.entry.js +1 -1
  218. package/dist/esm-es5/pds-table-row.entry.js +1 -1
  219. package/dist/esm-es5/pds-tabpanel.entry.js +1 -1
  220. package/dist/esm-es5/pds-tabs.entry.js +1 -1
  221. package/dist/esm-es5/pds-text.entry.js +1 -1
  222. package/dist/esm-es5/pds-textarea.entry.js +1 -1
  223. package/dist/esm-es5/pds-toast.entry.js +1 -1
  224. package/dist/esm-es5/pds-tooltip.entry.js +1 -1
  225. package/dist/esm-es5/pine-core.js +1 -1
  226. package/dist/pine-core/p-02f48157.system.entry.js +2 -0
  227. package/dist/pine-core/{p-b30424e3.system.entry.js → p-063afa19.system.entry.js} +2 -2
  228. package/dist/pine-core/p-0sPVsRFU.system.js.map +1 -0
  229. package/dist/pine-core/{p-15202869.entry.js → p-10dbe3e2.entry.js} +2 -2
  230. package/dist/pine-core/{p-5b7ab891.entry.js → p-12360e47.entry.js} +2 -2
  231. package/dist/pine-core/{p-ac14c8e3.system.entry.js → p-137b3289.system.entry.js} +2 -2
  232. package/dist/pine-core/{p-a737df90.entry.js → p-154a32f4.entry.js} +2 -2
  233. package/dist/pine-core/p-1ca116fa.entry.js +3 -0
  234. package/dist/pine-core/p-1ca116fa.entry.js.map +1 -0
  235. package/dist/pine-core/{p-a847fad3.entry.js → p-2537aacb.entry.js} +2 -2
  236. package/dist/pine-core/{p-4d25449c.entry.js → p-2cd0d520.entry.js} +2 -2
  237. package/dist/pine-core/{p-cd335ec2.system.entry.js → p-2fe330d0.system.entry.js} +2 -2
  238. package/dist/pine-core/p-30ea3668.system.entry.js +2 -0
  239. package/dist/pine-core/{p-1daf66d1.entry.js → p-31168da5.entry.js} +2 -2
  240. package/dist/pine-core/{p-732e2564.system.entry.js → p-325b3b0d.system.entry.js} +2 -2
  241. package/dist/pine-core/p-32c13896.system.entry.js +2 -0
  242. package/dist/pine-core/p-32c13896.system.entry.js.map +1 -0
  243. package/dist/pine-core/{p-95f2782c.entry.js → p-3f97a965.entry.js} +2 -2
  244. package/dist/pine-core/{p-ff182316.system.entry.js → p-40988b4d.system.entry.js} +2 -2
  245. package/dist/pine-core/{p-b02936d2.entry.js → p-415ba884.entry.js} +2 -2
  246. package/dist/pine-core/p-475bb340.entry.js +2 -0
  247. package/dist/pine-core/p-475bb340.entry.js.map +1 -0
  248. package/dist/pine-core/{p-CGo2P4Fr.system.js.map → p-4EbKXnVN.system.js.map} +1 -1
  249. package/dist/pine-core/{p-4SEjggIC.system.js.map → p-4alPHnzl.system.js.map} +1 -1
  250. package/dist/pine-core/{p-9bfaed7e.system.entry.js → p-4c23c75b.system.entry.js} +2 -2
  251. package/dist/pine-core/{p-bdf8bff3.system.entry.js → p-4d85945b.system.entry.js} +2 -2
  252. package/dist/pine-core/{p-3f8b0885.system.entry.js → p-4d9eee67.system.entry.js} +2 -2
  253. package/dist/pine-core/{p-4fD2iHS9.system.js.map → p-4f1cRPxE.system.js.map} +1 -1
  254. package/dist/pine-core/{p-e2104c31.entry.js → p-5040a872.entry.js} +2 -2
  255. package/dist/pine-core/p-51114c2b.system.entry.js +2 -0
  256. package/dist/pine-core/p-51114c2b.system.entry.js.map +1 -0
  257. package/dist/pine-core/{p-bbc349b3.system.entry.js → p-5b3ac18e.system.entry.js} +2 -2
  258. package/dist/pine-core/{p-bbc349b3.system.entry.js.map → p-5b3ac18e.system.entry.js.map} +1 -1
  259. package/dist/pine-core/{p-a08b60ae.entry.js → p-5b9110fe.entry.js} +2 -2
  260. package/dist/pine-core/{p-e3d76aa3.system.entry.js → p-5c982339.system.entry.js} +2 -2
  261. package/dist/pine-core/{p-94b1997d.system.entry.js → p-5e92aa34.system.entry.js} +2 -2
  262. package/dist/pine-core/{p-41d89f20.entry.js → p-5f2865df.entry.js} +2 -2
  263. package/dist/pine-core/{p-41d89f20.entry.js.map → p-5f2865df.entry.js.map} +1 -1
  264. package/dist/pine-core/p-6321b70b.entry.js +2 -0
  265. package/dist/pine-core/p-6321b70b.entry.js.map +1 -0
  266. package/dist/pine-core/p-63269b89.entry.js +2 -0
  267. package/dist/pine-core/p-6e862168.system.entry.js +2 -0
  268. package/dist/pine-core/{p-dcc6ad67.system.entry.js.map → p-6e862168.system.entry.js.map} +1 -1
  269. package/dist/pine-core/{p-cf2e1c07.system.entry.js → p-70aa35fc.system.entry.js} +2 -2
  270. package/dist/pine-core/{p-fc0ee6da.entry.js → p-757c7b80.entry.js} +2 -2
  271. package/dist/pine-core/{p-1df25b57.system.entry.js → p-78ee2e08.system.entry.js} +2 -2
  272. package/dist/pine-core/{p-2319298c.system.entry.js → p-7b5c8248.system.entry.js} +2 -2
  273. package/dist/pine-core/{p-dad604e4.system.entry.js → p-84c7f663.system.entry.js} +2 -2
  274. package/dist/pine-core/{p-f9ef2f74.system.entry.js → p-87eb8d4b.system.entry.js} +2 -2
  275. package/dist/pine-core/p-8b201c9a.system.entry.js +2 -0
  276. package/dist/pine-core/p-8b201c9a.system.entry.js.map +1 -0
  277. package/dist/pine-core/p-8eb1c168.entry.js +2 -0
  278. package/dist/pine-core/{p-e5bc22b6.system.entry.js → p-8fdb10c4.system.entry.js} +2 -2
  279. package/dist/pine-core/{p-232e4282.system.entry.js → p-90615423.system.entry.js} +2 -2
  280. package/dist/pine-core/{p-f79f6f08.system.entry.js → p-932283cf.system.entry.js} +2 -2
  281. package/dist/pine-core/{p-0b05708b.entry.js → p-9ada659b.entry.js} +2 -2
  282. package/dist/pine-core/{p-4778ae70.entry.js → p-9bb6cc3d.entry.js} +2 -2
  283. package/dist/pine-core/{p-3f6b9520.entry.js → p-9c928c44.entry.js} +2 -2
  284. package/dist/pine-core/{p-646ac76d.entry.js → p-9e4fc025.entry.js} +2 -2
  285. package/dist/pine-core/{p-e8aad8dc.entry.js → p-9eccf7b9.entry.js} +2 -2
  286. package/dist/pine-core/{p-WhfStK1C.system.js.map → p-B0Otb6kF.system.js.map} +1 -1
  287. package/dist/pine-core/{p-CUmDvil2.system.js.map → p-BA95hFrH.system.js.map} +1 -1
  288. package/dist/pine-core/{p-B4EMeCRH.system.js.map → p-BHjZufAO.system.js.map} +1 -1
  289. package/dist/pine-core/{p-DC2NZwtk.system.js.map → p-BJE1EIse.system.js.map} +1 -1
  290. package/dist/pine-core/{p-IH8oGXiE.system.js.map → p-BJtTt670.system.js.map} +1 -1
  291. package/dist/pine-core/p-BO6p966C.js +2 -0
  292. package/dist/pine-core/p-BO6p966C.js.map +1 -0
  293. package/dist/pine-core/{p-jBhqNO5u.system.js.map → p-BSRmAvMC.system.js.map} +1 -1
  294. package/dist/pine-core/{p-DyrNlfLT.system.js.map → p-BTe59phF.system.js.map} +1 -1
  295. package/dist/pine-core/{p-PMNjgK0C.system.js.map → p-BmKJgY0X.system.js.map} +1 -1
  296. package/dist/pine-core/{p-B0Y1Zs9b.system.js.map → p-Bn36FPag.system.js.map} +1 -1
  297. package/dist/pine-core/p-CBCT89qf.system.js.map +1 -0
  298. package/dist/pine-core/{p-DpeOrUYB.system.js.map → p-CG5jdxoZ.system.js.map} +1 -1
  299. package/dist/pine-core/{p-CKzDRRgx.system.js → p-CP48ADFM.system.js} +1 -1
  300. package/dist/pine-core/p-CP48ADFM.system.js.map +1 -0
  301. package/dist/pine-core/p-CR01VmO6.system.js.map +1 -0
  302. package/dist/pine-core/{p-CAnnMfDw.system.js.map → p-CSLo9qKS.system.js.map} +1 -1
  303. package/dist/pine-core/{p-DmVKABQy.system.js.map → p-CboCokff.system.js.map} +1 -1
  304. package/dist/pine-core/{p-XCTiWii8.system.js.map → p-CfZCQYfD.system.js.map} +1 -1
  305. package/dist/pine-core/{p-r_cS5LMw.system.js.map → p-Civ2VHC7.system.js.map} +1 -1
  306. package/dist/pine-core/{p-ChiYqN-p.system.js.map → p-CmquVvkz.system.js.map} +1 -1
  307. package/dist/pine-core/{p-tHMXRB8d.system.js.map → p-CpyTw2IQ.system.js.map} +1 -1
  308. package/dist/pine-core/{p-Brpt0zl5.system.js.map → p-Ct9csNdF.system.js.map} +1 -1
  309. package/dist/pine-core/{p-B_Co5NfG.system.js.map → p-Cun139qe.system.js.map} +1 -1
  310. package/dist/pine-core/p-D2eS6fhD.system.js +2 -0
  311. package/dist/pine-core/p-D2eS6fhD.system.js.map +1 -0
  312. package/dist/pine-core/{p-CTfQ_9yC.system.js.map → p-DFXWnbHE.system.js.map} +1 -1
  313. package/dist/pine-core/{p-xbb79yLt.js → p-DY8eSueV.js} +1 -1
  314. package/dist/pine-core/p-DY8eSueV.js.map +1 -0
  315. package/dist/pine-core/{p-CXGuX44q.system.js.map → p-DaXZLSA0.system.js.map} +1 -1
  316. package/dist/pine-core/{p-DB45WSlG.system.js.map → p-DwQewDCV.system.js.map} +1 -1
  317. package/dist/pine-core/p-JAVnELnm.system.js +1 -1
  318. package/dist/pine-core/{p-DAvCgWA9.system.js.map → p-Lk6DnEPT.system.js.map} +1 -1
  319. package/dist/pine-core/{p-Bjj4Pcbb.system.js.map → p-YqHO7iPZ.system.js.map} +1 -1
  320. package/dist/pine-core/{p-00568c20.system.entry.js → p-a07b8e45.system.entry.js} +2 -2
  321. package/dist/pine-core/p-a3bCMZF8.system.js.map +1 -0
  322. package/dist/pine-core/{p-c5013d20.entry.js → p-a3cdff85.entry.js} +2 -2
  323. package/dist/pine-core/{p-a4b16b32.system.entry.js → p-a5b24b1d.system.entry.js} +2 -2
  324. package/dist/pine-core/{p-596acf65.entry.js → p-a99e8caf.entry.js} +2 -2
  325. package/dist/pine-core/{p-002fe322.system.entry.js → p-ac240034.system.entry.js} +2 -2
  326. package/dist/pine-core/{p-fe28b975.system.entry.js → p-b9650ed9.system.entry.js} +2 -2
  327. package/dist/pine-core/{p-f8fba315.entry.js → p-bc85016b.entry.js} +2 -2
  328. package/dist/pine-core/{p-61588eac.entry.js → p-bddc9c5a.entry.js} +2 -2
  329. package/dist/pine-core/{p--gPqixhD.system.js.map → p-bs74TBAh.system.js.map} +1 -1
  330. package/dist/pine-core/{p-7de73ac5.entry.js → p-c24d11c7.entry.js} +2 -2
  331. package/dist/pine-core/p-c292e5da.system.entry.js +2 -0
  332. package/dist/pine-core/{p-6bc7d67f.system.entry.js.map → p-c292e5da.system.entry.js.map} +1 -1
  333. package/dist/pine-core/p-c68bceb1.entry.js +2 -0
  334. package/dist/pine-core/{p-478d1107.entry.js.map → p-c68bceb1.entry.js.map} +1 -1
  335. package/dist/pine-core/{p-0ace9c16.entry.js → p-c7c00a27.entry.js} +2 -2
  336. package/dist/pine-core/{p-cb6c279a.system.entry.js → p-cac3128b.system.entry.js} +2 -2
  337. package/dist/pine-core/p-ccab748a.entry.js +2 -0
  338. package/dist/pine-core/p-ccab748a.entry.js.map +1 -0
  339. package/dist/pine-core/{p-098cbcd7.system.entry.js → p-cfb24f97.system.entry.js} +2 -2
  340. package/dist/pine-core/p-d41112ad.entry.js +2 -0
  341. package/dist/pine-core/{p-f82b464c.entry.js.map → p-d41112ad.entry.js.map} +1 -1
  342. package/dist/pine-core/{p-6cba6806.entry.js → p-d6302edd.entry.js} +2 -2
  343. package/dist/pine-core/{p-04294b28.system.entry.js → p-daa36570.system.entry.js} +2 -2
  344. package/dist/pine-core/p-db06ad25.system.entry.js +4 -0
  345. package/dist/pine-core/p-db06ad25.system.entry.js.map +1 -0
  346. package/dist/pine-core/{p-15650db8.entry.js → p-e6dc2297.entry.js} +2 -2
  347. package/dist/pine-core/{p-9f53eb94.system.entry.js → p-e8cf15d7.system.entry.js} +2 -2
  348. package/dist/pine-core/p-eb026745.entry.js +2 -0
  349. package/dist/pine-core/{p-e011d7e5.entry.js → p-fa05ea14.entry.js} +2 -2
  350. package/dist/pine-core/{p-D8Jc24Qq.system.js.map → p-htODgUCV.system.js.map} +1 -1
  351. package/dist/pine-core/{p-DYq1Mef8.system.js.map → p-j0609tLE.system.js.map} +1 -1
  352. package/dist/pine-core/{p-DoP8Sl1O.system.js.map → p-rcUX-rt5.system.js.map} +1 -1
  353. package/dist/pine-core/{p-DSwKfctG.system.js.map → p-uyztncxJ.system.js.map} +1 -1
  354. package/dist/pine-core/pds-combobox.entry.esm.js.map +1 -1
  355. package/dist/pine-core/pds-dropdown-menu-item.entry.esm.js.map +1 -1
  356. package/dist/pine-core/pds-dropdown-menu.entry.esm.js.map +1 -1
  357. package/dist/pine-core/pds-filter.entry.esm.js.map +1 -1
  358. package/dist/pine-core/pds-multiselect.entry.esm.js.map +1 -0
  359. package/dist/pine-core/pds-tab.entry.esm.js.map +1 -1
  360. package/dist/pine-core/pds-table-head-cell.entry.esm.js.map +1 -1
  361. package/dist/pine-core/pine-core.esm.js +1 -1
  362. package/dist/types/components/pds-multiselect/multiselect-interface.d.ts +24 -0
  363. package/dist/types/components/pds-multiselect/pds-multiselect.d.ts +175 -0
  364. package/dist/types/components/pds-table/pds-table-head-cell/pds-table-head-cell.d.ts +10 -0
  365. package/dist/types/components.d.ts +250 -0
  366. package/dist/vscode.html-data.json +156 -0
  367. package/hydrate/index.js +918 -100
  368. package/hydrate/index.mjs +918 -100
  369. package/package.json +5 -5
  370. package/dist/cjs/floating-ui.dom-DTAy35nv.js.map +0 -1
  371. package/dist/cjs/index-CMeuo765.js.map +0 -1
  372. package/dist/esm/floating-ui.dom-DbQzNDdQ.js.map +0 -1
  373. package/dist/esm/index-xbb79yLt.js.map +0 -1
  374. package/dist/esm-es5/floating-ui.dom-DbQzNDdQ.js +0 -2
  375. package/dist/esm-es5/floating-ui.dom-DbQzNDdQ.js.map +0 -1
  376. package/dist/esm-es5/index-xbb79yLt.js.map +0 -1
  377. package/dist/pine-core/p-43990889.entry.js +0 -2
  378. package/dist/pine-core/p-478d1107.entry.js +0 -2
  379. package/dist/pine-core/p-534e44cb.system.entry.js +0 -4
  380. package/dist/pine-core/p-534e44cb.system.entry.js.map +0 -1
  381. package/dist/pine-core/p-54a56826.entry.js +0 -3
  382. package/dist/pine-core/p-54a56826.entry.js.map +0 -1
  383. package/dist/pine-core/p-553e4543.entry.js +0 -2
  384. package/dist/pine-core/p-553e4543.entry.js.map +0 -1
  385. package/dist/pine-core/p-5f6cd30d.system.entry.js +0 -2
  386. package/dist/pine-core/p-5f6cd30d.system.entry.js.map +0 -1
  387. package/dist/pine-core/p-6bc7d67f.system.entry.js +0 -2
  388. package/dist/pine-core/p-9e62c418.system.entry.js +0 -2
  389. package/dist/pine-core/p-9e62c418.system.entry.js.map +0 -1
  390. package/dist/pine-core/p-BOmQOnQe.system.js +0 -2
  391. package/dist/pine-core/p-BOmQOnQe.system.js.map +0 -1
  392. package/dist/pine-core/p-Bnp3zJ0T.system.js.map +0 -1
  393. package/dist/pine-core/p-CKzDRRgx.system.js.map +0 -1
  394. package/dist/pine-core/p-DbQzNDdQ.js +0 -2
  395. package/dist/pine-core/p-DbQzNDdQ.js.map +0 -1
  396. package/dist/pine-core/p-DfCCzxYg.system.js.map +0 -1
  397. package/dist/pine-core/p-X0_TH-op.system.js.map +0 -1
  398. package/dist/pine-core/p-ac2f9463.entry.js +0 -2
  399. package/dist/pine-core/p-ac2f9463.entry.js.map +0 -1
  400. package/dist/pine-core/p-b59a0c6b.system.entry.js +0 -2
  401. package/dist/pine-core/p-d0e336b7.system.entry.js +0 -2
  402. package/dist/pine-core/p-dcc6ad67.system.entry.js +0 -2
  403. package/dist/pine-core/p-e7e25d42.entry.js +0 -2
  404. package/dist/pine-core/p-f82b464c.entry.js +0 -2
  405. package/dist/pine-core/p-f92055f3.entry.js +0 -2
  406. package/dist/pine-core/p-xbb79yLt.js.map +0 -1
  407. /package/dist/pine-core/{p-b59a0c6b.system.entry.js.map → p-02f48157.system.entry.js.map} +0 -0
  408. /package/dist/pine-core/{p-b30424e3.system.entry.js.map → p-063afa19.system.entry.js.map} +0 -0
  409. /package/dist/pine-core/{p-15202869.entry.js.map → p-10dbe3e2.entry.js.map} +0 -0
  410. /package/dist/pine-core/{p-5b7ab891.entry.js.map → p-12360e47.entry.js.map} +0 -0
  411. /package/dist/pine-core/{p-ac14c8e3.system.entry.js.map → p-137b3289.system.entry.js.map} +0 -0
  412. /package/dist/pine-core/{p-a737df90.entry.js.map → p-154a32f4.entry.js.map} +0 -0
  413. /package/dist/pine-core/{p-a847fad3.entry.js.map → p-2537aacb.entry.js.map} +0 -0
  414. /package/dist/pine-core/{p-4d25449c.entry.js.map → p-2cd0d520.entry.js.map} +0 -0
  415. /package/dist/pine-core/{p-cd335ec2.system.entry.js.map → p-2fe330d0.system.entry.js.map} +0 -0
  416. /package/dist/pine-core/{p-d0e336b7.system.entry.js.map → p-30ea3668.system.entry.js.map} +0 -0
  417. /package/dist/pine-core/{p-1daf66d1.entry.js.map → p-31168da5.entry.js.map} +0 -0
  418. /package/dist/pine-core/{p-732e2564.system.entry.js.map → p-325b3b0d.system.entry.js.map} +0 -0
  419. /package/dist/pine-core/{p-95f2782c.entry.js.map → p-3f97a965.entry.js.map} +0 -0
  420. /package/dist/pine-core/{p-ff182316.system.entry.js.map → p-40988b4d.system.entry.js.map} +0 -0
  421. /package/dist/pine-core/{p-b02936d2.entry.js.map → p-415ba884.entry.js.map} +0 -0
  422. /package/dist/pine-core/{p-9bfaed7e.system.entry.js.map → p-4c23c75b.system.entry.js.map} +0 -0
  423. /package/dist/pine-core/{p-bdf8bff3.system.entry.js.map → p-4d85945b.system.entry.js.map} +0 -0
  424. /package/dist/pine-core/{p-3f8b0885.system.entry.js.map → p-4d9eee67.system.entry.js.map} +0 -0
  425. /package/dist/pine-core/{p-e2104c31.entry.js.map → p-5040a872.entry.js.map} +0 -0
  426. /package/dist/pine-core/{p-a08b60ae.entry.js.map → p-5b9110fe.entry.js.map} +0 -0
  427. /package/dist/pine-core/{p-e3d76aa3.system.entry.js.map → p-5c982339.system.entry.js.map} +0 -0
  428. /package/dist/pine-core/{p-94b1997d.system.entry.js.map → p-5e92aa34.system.entry.js.map} +0 -0
  429. /package/dist/pine-core/{p-43990889.entry.js.map → p-63269b89.entry.js.map} +0 -0
  430. /package/dist/pine-core/{p-cf2e1c07.system.entry.js.map → p-70aa35fc.system.entry.js.map} +0 -0
  431. /package/dist/pine-core/{p-fc0ee6da.entry.js.map → p-757c7b80.entry.js.map} +0 -0
  432. /package/dist/pine-core/{p-1df25b57.system.entry.js.map → p-78ee2e08.system.entry.js.map} +0 -0
  433. /package/dist/pine-core/{p-2319298c.system.entry.js.map → p-7b5c8248.system.entry.js.map} +0 -0
  434. /package/dist/pine-core/{p-dad604e4.system.entry.js.map → p-84c7f663.system.entry.js.map} +0 -0
  435. /package/dist/pine-core/{p-f9ef2f74.system.entry.js.map → p-87eb8d4b.system.entry.js.map} +0 -0
  436. /package/dist/pine-core/{p-e7e25d42.entry.js.map → p-8eb1c168.entry.js.map} +0 -0
  437. /package/dist/pine-core/{p-e5bc22b6.system.entry.js.map → p-8fdb10c4.system.entry.js.map} +0 -0
  438. /package/dist/pine-core/{p-232e4282.system.entry.js.map → p-90615423.system.entry.js.map} +0 -0
  439. /package/dist/pine-core/{p-f79f6f08.system.entry.js.map → p-932283cf.system.entry.js.map} +0 -0
  440. /package/dist/pine-core/{p-0b05708b.entry.js.map → p-9ada659b.entry.js.map} +0 -0
  441. /package/dist/pine-core/{p-4778ae70.entry.js.map → p-9bb6cc3d.entry.js.map} +0 -0
  442. /package/dist/pine-core/{p-3f6b9520.entry.js.map → p-9c928c44.entry.js.map} +0 -0
  443. /package/dist/pine-core/{p-646ac76d.entry.js.map → p-9e4fc025.entry.js.map} +0 -0
  444. /package/dist/pine-core/{p-e8aad8dc.entry.js.map → p-9eccf7b9.entry.js.map} +0 -0
  445. /package/dist/pine-core/{p-00568c20.system.entry.js.map → p-a07b8e45.system.entry.js.map} +0 -0
  446. /package/dist/pine-core/{p-c5013d20.entry.js.map → p-a3cdff85.entry.js.map} +0 -0
  447. /package/dist/pine-core/{p-a4b16b32.system.entry.js.map → p-a5b24b1d.system.entry.js.map} +0 -0
  448. /package/dist/pine-core/{p-596acf65.entry.js.map → p-a99e8caf.entry.js.map} +0 -0
  449. /package/dist/pine-core/{p-002fe322.system.entry.js.map → p-ac240034.system.entry.js.map} +0 -0
  450. /package/dist/pine-core/{p-fe28b975.system.entry.js.map → p-b9650ed9.system.entry.js.map} +0 -0
  451. /package/dist/pine-core/{p-f8fba315.entry.js.map → p-bc85016b.entry.js.map} +0 -0
  452. /package/dist/pine-core/{p-61588eac.entry.js.map → p-bddc9c5a.entry.js.map} +0 -0
  453. /package/dist/pine-core/{p-7de73ac5.entry.js.map → p-c24d11c7.entry.js.map} +0 -0
  454. /package/dist/pine-core/{p-0ace9c16.entry.js.map → p-c7c00a27.entry.js.map} +0 -0
  455. /package/dist/pine-core/{p-cb6c279a.system.entry.js.map → p-cac3128b.system.entry.js.map} +0 -0
  456. /package/dist/pine-core/{p-098cbcd7.system.entry.js.map → p-cfb24f97.system.entry.js.map} +0 -0
  457. /package/dist/pine-core/{p-6cba6806.entry.js.map → p-d6302edd.entry.js.map} +0 -0
  458. /package/dist/pine-core/{p-04294b28.system.entry.js.map → p-daa36570.system.entry.js.map} +0 -0
  459. /package/dist/pine-core/{p-15650db8.entry.js.map → p-e6dc2297.entry.js.map} +0 -0
  460. /package/dist/pine-core/{p-9f53eb94.system.entry.js.map → p-e8cf15d7.system.entry.js.map} +0 -0
  461. /package/dist/pine-core/{p-f92055f3.entry.js.map → p-eb026745.entry.js.map} +0 -0
  462. /package/dist/pine-core/{p-e011d7e5.entry.js.map → p-fa05ea14.entry.js.map} +0 -0
@@ -29,12 +29,14 @@
29
29
  padding: var(--pine-dimension-xs);
30
30
  text-align: start; /* Ensure text aligns properly */
31
31
  width: 100%; /* Ensure full width */
32
- /* Focus styles applied via class + browser focus */
33
32
  }
34
33
  .pds-dropdown-menu-item__content:hover {
35
34
  background-color: var(--pine-color-background-muted);
36
35
  color: var(--pine-color-text-hover);
37
36
  }
37
+ .pds-dropdown-menu-item__content {
38
+ /* Focus styles applied via class + browser focus */
39
+ }
38
40
  .pds-dropdown-menu-item__content:focus, .pds-dropdown-menu-item__content:focus-visible, .pds-dropdown-menu-item__content.has-focus {
39
41
  outline: var(--pine-outline-focus);
40
42
  outline-offset: var(--pine-border-width);
@@ -12,7 +12,7 @@
12
12
  left: var(--pine-dimension-none);
13
13
  min-width: 170px;
14
14
  padding: var(--pine-dimension-xs);
15
- position: absolute;
15
+ position: fixed;
16
16
  z-index: var(--pine-z-index-overlay);
17
17
  }
18
18
  :host-context([data-theme=dark]) .pds-dropdown-menu--panel {
@@ -52,6 +52,7 @@ export class PdsDropdownMenu {
52
52
  const updatePosition = () => {
53
53
  computePosition(this.triggerEl, this.panelEl, {
54
54
  placement: this.placement,
55
+ strategy: 'fixed',
55
56
  middleware: [offset(6), flip(), shift({ padding: 5 })],
56
57
  }).then(({ x, y }) => {
57
58
  Object.assign(this.panelEl.style, {
@@ -262,7 +263,7 @@ export class PdsDropdownMenu {
262
263
  }
263
264
  }
264
265
  render() {
265
- return (h(Host, { key: 'eb2a28bf9bfdb6ec228612be375a79caddf12da0', id: this.componentId }, h("slot", { key: 'c8a38cfba87a89e450c44b79bda17f558d5d6e58', name: "trigger", onSlotchange: this.handleTriggerSlotChange }), h("pds-box", { key: '8d6c33a1c3d3462738b7762df6008097e78bfbf5', "border-radius": "sm", display: "flex", direction: "column", class: "pds-dropdown-menu--panel is-hidden", shadow: "100", role: "menu", "aria-orientation": "vertical", part: "menu-panel" }, h("slot", { key: '76d6b8a46ddaf907781d0810d3a4195953f1cdaf', onSlotchange: this.handleSlotChange }))));
266
+ return (h(Host, { key: '9ae650f3d8026060386ac3c3e766e7cc3c7ecc07', id: this.componentId }, h("slot", { key: '598502f3a1fc16df488fb9808f453a72e630cede', name: "trigger", onSlotchange: this.handleTriggerSlotChange }), h("pds-box", { key: '5be72ded41caad2d9a9569d0aeabf7d22cf1b44c', "border-radius": "sm", display: "flex", direction: "column", class: "pds-dropdown-menu--panel is-hidden", shadow: "100", role: "menu", "aria-orientation": "vertical", part: "menu-panel" }, h("slot", { key: '93b2d89a1e3714ac7895be71bc44583ce4cd3243', onSlotchange: this.handleSlotChange }))));
266
267
  }
267
268
  static get is() { return "pds-dropdown-menu"; }
268
269
  static get encapsulation() { return "shadow"; }
@@ -1 +1 @@
1
- {"version":3,"file":"pds-dropdown-menu.js","sourceRoot":"","sources":["../../../../src/components/pds-dropdown-menu/pds-dropdown-menu.tsx"],"names":[],"mappings":"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","sourcesContent":["import { Component, Element, Host, h, Prop, Listen, State } from '@stencil/core';\nimport type { BasePdsProps } from '@utils/interfaces';\nimport { PlacementType } from '@utils/types';\nimport { computePosition,\n flip,\n offset,\n shift,\n autoUpdate,\n} from '@floating-ui/dom';\n\n/**\n * @part menu-panel - Exposes the dropdown menu container for styling.\n */\n@Component({\n tag: 'pds-dropdown-menu',\n styleUrl: 'pds-dropdown-menu.scss',\n shadow: true,\n})\nexport class PdsDropdownMenu implements BasePdsProps {\n private slotEl: HTMLSlotElement;\n private triggerEl: HTMLElement;\n private panelEl: HTMLPdsBoxElement;\n private isOpen: boolean = false;\n private menuItems: HTMLPdsDropdownMenuItemElement[] = [];\n private cleanupAutoUpdate: (() => void) | null = null;\n\n @Element() host: HTMLPdsDropdownMenuElement;\n\n @State() currentFocusIndex: number = -1;\n\n /**\n * A unique identifier used for the underlying component `id` attribute.\n */\n @Prop() componentId: string;\n\n /**\n * The placement of the dropdown panel relative to the trigger.\n */\n @Prop() placement: PlacementType = 'bottom-start';\n\n componentDidRender() {\n this.panelEl = this.host.shadowRoot?.querySelector('pds-box') as HTMLPdsBoxElement;\n }\n\n disconnectedCallback() {\n // Clean up auto-update when component is removed from DOM\n if (this.cleanupAutoUpdate) {\n this.cleanupAutoUpdate();\n this.cleanupAutoUpdate = null;\n }\n }\n\n private handleTriggerSlotChange = (event: Event) => {\n this.slotEl = event.target as HTMLSlotElement;\n\n // Get all elements assigned to this slot\n const assignedElements = this.slotEl.assignedElements();\n\n this.triggerEl = assignedElements[0] as HTMLElement;\n this.triggerEl.onclick = this.handleClick;\n\n // Add accessibility attributes to trigger\n this.triggerEl.setAttribute('aria-haspopup', 'menu');\n this.triggerEl.setAttribute('aria-expanded', 'false');\n }\n\n private handleSlotChange = (event: Event) => {\n this.slotEl = event.target as HTMLSlotElement;\n\n // Get all elements assigned to this slot\n const assignedElements = this.slotEl.assignedElements();\n\n // ensure assignedElements only contains pds-dropdown-menu-item or pds-dropdown-menu-separator\n // if there are other elements, throw an error\n const invalidElements = assignedElements.filter(el => el.tagName.toLowerCase() !== 'pds-dropdown-menu-item' && el.tagName.toLowerCase() !== 'pds-dropdown-menu-separator');\n if (invalidElements.length > 0) {\n throw new Error(`pds-dropdown-menu only accepts pds-dropdown-menu-item and pds-dropdown-menu-separator elements`);\n }\n\n // Store all menu items for keyboard navigation\n this.menuItems = assignedElements.filter(\n el => el.tagName.toLowerCase() === 'pds-dropdown-menu-item'\n ) as HTMLPdsDropdownMenuItemElement[];\n }\n\n // Toggle dropdown open/closed\n private toggleDropdown = () => {\n this.isOpen = !this.isOpen;\n\n if (this.isOpen) {\n this.openDropdown();\n } else {\n this.closeDropdown();\n }\n }\n\n // Open the dropdown and position it\n private openDropdown = () => {\n const updatePosition = () => {\n computePosition(this.triggerEl, this.panelEl as HTMLElement, {\n placement: this.placement,\n middleware: [offset(6), flip(), shift({padding: 5})],\n }).then(({ x, y }) => {\n Object.assign(this.panelEl.style, {\n left: `${x}px`,\n top: `${y}px`,\n });\n });\n };\n\n // Initial position\n updatePosition();\n\n // Set up auto-update for window resize and scroll\n this.cleanupAutoUpdate = autoUpdate(\n this.triggerEl,\n this.panelEl as HTMLElement,\n updatePosition\n );\n\n this.host.shadowRoot?.querySelector('pds-box').classList.remove('is-hidden');\n this.isOpen = true;\n\n // Update ARIA attributes\n this.triggerEl.setAttribute('aria-expanded', 'true');\n }\n\n // Close the dropdown\n private closeDropdown = () => {\n this.host.shadowRoot?.querySelector('pds-box').classList.add('is-hidden');\n this.isOpen = false;\n\n // Clean up auto-update\n if (this.cleanupAutoUpdate) {\n this.cleanupAutoUpdate();\n this.cleanupAutoUpdate = null;\n }\n\n // Update ARIA attributes\n this.triggerEl.setAttribute('aria-expanded', 'false');\n\n // Reset focus index\n this.currentFocusIndex = -1;\n\n // Return focus to trigger\n this.triggerEl.focus();\n }\n\n // Handle click on the trigger element\n private handleClick = () => {\n this.toggleDropdown();\n }\n\n // Get the index of the currently focused menu item\n private getFocusedItemIndex(): number {\n const activeElement = document.activeElement as HTMLPdsDropdownMenuItemElement | null;\n if (!activeElement) return -1;\n return this.menuItems.findIndex(item => item === activeElement);\n }\n\n // Focus a specific menu item by index\n private focusItemByIndex(index: number): void {\n if (index >= 0 && index < this.menuItems.length) {\n this.currentFocusIndex = index;\n\n // Focus the inner button/link instead of the host element\n const menuItem = this.menuItems[index];\n const innerButton = menuItem.shadowRoot?.querySelector('button');\n const innerLink = menuItem.shadowRoot?.querySelector('pds-link')?.shadowRoot?.querySelector('a');\n\n if (innerButton) {\n return innerButton.focus();\n } else if (innerLink) {\n return innerLink.focus();\n } else {\n // Fallback to focusing the host if we can't find the inner element\n menuItem.focus();\n }\n }\n }\n\n // Focus the next menu item\n private focusNextItem(): void {\n let nextIndex = (this.currentFocusIndex + 1) % this.menuItems.length;\n\n // Skip disabled items\n let attempts = 0;\n const maxAttempts = this.menuItems.length;\n\n while (attempts < maxAttempts && this.menuItems[nextIndex].disabled) {\n nextIndex = (nextIndex + 1) % this.menuItems.length;\n attempts++;\n }\n\n // Only focus if we found a non-disabled item\n if (attempts < maxAttempts) {\n this.focusItemByIndex(nextIndex);\n }\n }\n\n // Focus the previous menu item\n private focusPreviousItem(): void {\n let prevIndex = this.currentFocusIndex <= 0\n ? this.menuItems.length - 1\n : this.currentFocusIndex - 1;\n\n // Skip disabled items\n let attempts = 0;\n const maxAttempts = this.menuItems.length;\n\n while (attempts < maxAttempts && this.menuItems[prevIndex].disabled) {\n prevIndex = prevIndex <= 0 ? this.menuItems.length - 1 : prevIndex - 1;\n attempts++;\n }\n\n // Only focus if we found a non-disabled item\n if (attempts < maxAttempts) {\n this.focusItemByIndex(prevIndex);\n }\n }\n\n // Handle keyboard events for the dropdown\n @Listen('keydown', { target: 'window' })\n handleKeyDown(event: KeyboardEvent) {\n if (!this.isOpen) return;\n\n switch (event.key) {\n case 'Escape':\n event.preventDefault();\n this.closeDropdown();\n break;\n\n case 'ArrowDown':\n event.preventDefault();\n this.focusNextItem();\n break;\n\n case 'ArrowUp':\n event.preventDefault();\n this.focusPreviousItem();\n break;\n\n case 'Home':\n event.preventDefault();\n if (this.menuItems.length > 0) {\n // Find first non-disabled item\n let firstIndex = 0;\n while (firstIndex < this.menuItems.length && this.menuItems[firstIndex].disabled) {\n firstIndex++;\n }\n if (firstIndex < this.menuItems.length) {\n this.focusItemByIndex(firstIndex);\n }\n }\n break;\n\n case 'End':\n event.preventDefault();\n if (this.menuItems.length > 0) {\n // Find last non-disabled item\n let lastIndex = this.menuItems.length - 1;\n while (lastIndex >= 0 && this.menuItems[lastIndex].disabled) {\n lastIndex--;\n }\n if (lastIndex >= 0) {\n this.focusItemByIndex(lastIndex);\n }\n }\n break;\n\n case 'Tab':\n if (event.shiftKey) {\n // Let Shift+Tab navigate naturally from first item to trigger\n // For all other items, move to previous item\n const currentIndex = this.getFocusedItemIndex();\n\n if (currentIndex > 0) {\n // If not on first item, prevent default and go to previous item\n event.preventDefault();\n this.focusPreviousItem(); // Use our method that skips disabled items\n }\n // If on first item or no item, let natural tab order move back to trigger\n } else {\n // Forward Tab navigation\n const activeElement = document.activeElement;\n const isTriggerFocused = activeElement === this.triggerEl;\n const currentIndex = this.getFocusedItemIndex();\n\n if (isTriggerFocused && this.menuItems.length > 0) {\n // If trigger is focused, move to first non-disabled menu item\n event.preventDefault();\n\n // Find the first non-disabled item\n let firstFocusableIndex = 0;\n while (firstFocusableIndex < this.menuItems.length && this.menuItems[firstFocusableIndex].disabled) {\n firstFocusableIndex++;\n }\n\n if (firstFocusableIndex < this.menuItems.length) {\n this.focusItemByIndex(firstFocusableIndex);\n }\n } else if (currentIndex === -1 && this.menuItems.length > 0) {\n // If no menu item is focused, focus the first non-disabled one\n event.preventDefault();\n\n // Find the first non-disabled item\n let firstFocusableIndex = 0;\n while (firstFocusableIndex < this.menuItems.length && this.menuItems[firstFocusableIndex].disabled) {\n firstFocusableIndex++;\n }\n\n if (firstFocusableIndex < this.menuItems.length) {\n this.focusItemByIndex(firstFocusableIndex);\n }\n } else if (currentIndex !== -1) {\n // Use our method that skips disabled items\n event.preventDefault();\n this.focusNextItem();\n }\n }\n break;\n }\n }\n\n // Handle clicks outside the dropdown to close it\n @Listen('click', { target: 'window' })\n handleWindowClick(event: MouseEvent) {\n if (this.isOpen && !this.host.contains(event.target as Node) && event.target !== this.triggerEl) {\n this.closeDropdown();\n }\n }\n\n\n render() {\n return (\n <Host id={this.componentId}>\n <slot\n name=\"trigger\"\n onSlotchange={this.handleTriggerSlotChange}\n ></slot>\n <pds-box\n border-radius=\"sm\"\n display=\"flex\"\n direction=\"column\"\n class=\"pds-dropdown-menu--panel is-hidden\"\n shadow=\"100\"\n role=\"menu\"\n aria-orientation=\"vertical\"\n part=\"menu-panel\"\n >\n <slot onSlotchange={this.handleSlotChange}></slot>\n </pds-box>\n </Host>\n );\n }\n}\n"]}
1
+ {"version":3,"file":"pds-dropdown-menu.js","sourceRoot":"","sources":["../../../../src/components/pds-dropdown-menu/pds-dropdown-menu.tsx"],"names":[],"mappings":"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","sourcesContent":["import { Component, Element, Host, h, Prop, Listen, State } from '@stencil/core';\nimport type { BasePdsProps } from '@utils/interfaces';\nimport { PlacementType } from '@utils/types';\nimport { computePosition,\n flip,\n offset,\n shift,\n autoUpdate,\n} from '@floating-ui/dom';\n\n/**\n * @part menu-panel - Exposes the dropdown menu container for styling.\n */\n@Component({\n tag: 'pds-dropdown-menu',\n styleUrl: 'pds-dropdown-menu.scss',\n shadow: true,\n})\nexport class PdsDropdownMenu implements BasePdsProps {\n private slotEl: HTMLSlotElement;\n private triggerEl: HTMLElement;\n private panelEl: HTMLPdsBoxElement;\n private isOpen: boolean = false;\n private menuItems: HTMLPdsDropdownMenuItemElement[] = [];\n private cleanupAutoUpdate: (() => void) | null = null;\n\n @Element() host: HTMLPdsDropdownMenuElement;\n\n @State() currentFocusIndex: number = -1;\n\n /**\n * A unique identifier used for the underlying component `id` attribute.\n */\n @Prop() componentId: string;\n\n /**\n * The placement of the dropdown panel relative to the trigger.\n */\n @Prop() placement: PlacementType = 'bottom-start';\n\n componentDidRender() {\n this.panelEl = this.host.shadowRoot?.querySelector('pds-box') as HTMLPdsBoxElement;\n }\n\n disconnectedCallback() {\n // Clean up auto-update when component is removed from DOM\n if (this.cleanupAutoUpdate) {\n this.cleanupAutoUpdate();\n this.cleanupAutoUpdate = null;\n }\n }\n\n private handleTriggerSlotChange = (event: Event) => {\n this.slotEl = event.target as HTMLSlotElement;\n\n // Get all elements assigned to this slot\n const assignedElements = this.slotEl.assignedElements();\n\n this.triggerEl = assignedElements[0] as HTMLElement;\n this.triggerEl.onclick = this.handleClick;\n\n // Add accessibility attributes to trigger\n this.triggerEl.setAttribute('aria-haspopup', 'menu');\n this.triggerEl.setAttribute('aria-expanded', 'false');\n }\n\n private handleSlotChange = (event: Event) => {\n this.slotEl = event.target as HTMLSlotElement;\n\n // Get all elements assigned to this slot\n const assignedElements = this.slotEl.assignedElements();\n\n // ensure assignedElements only contains pds-dropdown-menu-item or pds-dropdown-menu-separator\n // if there are other elements, throw an error\n const invalidElements = assignedElements.filter(el => el.tagName.toLowerCase() !== 'pds-dropdown-menu-item' && el.tagName.toLowerCase() !== 'pds-dropdown-menu-separator');\n if (invalidElements.length > 0) {\n throw new Error(`pds-dropdown-menu only accepts pds-dropdown-menu-item and pds-dropdown-menu-separator elements`);\n }\n\n // Store all menu items for keyboard navigation\n this.menuItems = assignedElements.filter(\n el => el.tagName.toLowerCase() === 'pds-dropdown-menu-item'\n ) as HTMLPdsDropdownMenuItemElement[];\n }\n\n // Toggle dropdown open/closed\n private toggleDropdown = () => {\n this.isOpen = !this.isOpen;\n\n if (this.isOpen) {\n this.openDropdown();\n } else {\n this.closeDropdown();\n }\n }\n\n // Open the dropdown and position it\n private openDropdown = () => {\n const updatePosition = () => {\n computePosition(this.triggerEl, this.panelEl as HTMLElement, {\n placement: this.placement,\n strategy: 'fixed',\n middleware: [offset(6), flip(), shift({padding: 5})],\n }).then(({ x, y }) => {\n Object.assign(this.panelEl.style, {\n left: `${x}px`,\n top: `${y}px`,\n });\n });\n };\n\n // Initial position\n updatePosition();\n\n // Set up auto-update for window resize and scroll\n this.cleanupAutoUpdate = autoUpdate(\n this.triggerEl,\n this.panelEl as HTMLElement,\n updatePosition\n );\n\n this.host.shadowRoot?.querySelector('pds-box').classList.remove('is-hidden');\n this.isOpen = true;\n\n // Update ARIA attributes\n this.triggerEl.setAttribute('aria-expanded', 'true');\n }\n\n // Close the dropdown\n private closeDropdown = () => {\n this.host.shadowRoot?.querySelector('pds-box').classList.add('is-hidden');\n this.isOpen = false;\n\n // Clean up auto-update\n if (this.cleanupAutoUpdate) {\n this.cleanupAutoUpdate();\n this.cleanupAutoUpdate = null;\n }\n\n // Update ARIA attributes\n this.triggerEl.setAttribute('aria-expanded', 'false');\n\n // Reset focus index\n this.currentFocusIndex = -1;\n\n // Return focus to trigger\n this.triggerEl.focus();\n }\n\n // Handle click on the trigger element\n private handleClick = () => {\n this.toggleDropdown();\n }\n\n // Get the index of the currently focused menu item\n private getFocusedItemIndex(): number {\n const activeElement = document.activeElement as HTMLPdsDropdownMenuItemElement | null;\n if (!activeElement) return -1;\n return this.menuItems.findIndex(item => item === activeElement);\n }\n\n // Focus a specific menu item by index\n private focusItemByIndex(index: number): void {\n if (index >= 0 && index < this.menuItems.length) {\n this.currentFocusIndex = index;\n\n // Focus the inner button/link instead of the host element\n const menuItem = this.menuItems[index];\n const innerButton = menuItem.shadowRoot?.querySelector('button');\n const innerLink = menuItem.shadowRoot?.querySelector('pds-link')?.shadowRoot?.querySelector('a');\n\n if (innerButton) {\n return innerButton.focus();\n } else if (innerLink) {\n return innerLink.focus();\n } else {\n // Fallback to focusing the host if we can't find the inner element\n menuItem.focus();\n }\n }\n }\n\n // Focus the next menu item\n private focusNextItem(): void {\n let nextIndex = (this.currentFocusIndex + 1) % this.menuItems.length;\n\n // Skip disabled items\n let attempts = 0;\n const maxAttempts = this.menuItems.length;\n\n while (attempts < maxAttempts && this.menuItems[nextIndex].disabled) {\n nextIndex = (nextIndex + 1) % this.menuItems.length;\n attempts++;\n }\n\n // Only focus if we found a non-disabled item\n if (attempts < maxAttempts) {\n this.focusItemByIndex(nextIndex);\n }\n }\n\n // Focus the previous menu item\n private focusPreviousItem(): void {\n let prevIndex = this.currentFocusIndex <= 0\n ? this.menuItems.length - 1\n : this.currentFocusIndex - 1;\n\n // Skip disabled items\n let attempts = 0;\n const maxAttempts = this.menuItems.length;\n\n while (attempts < maxAttempts && this.menuItems[prevIndex].disabled) {\n prevIndex = prevIndex <= 0 ? this.menuItems.length - 1 : prevIndex - 1;\n attempts++;\n }\n\n // Only focus if we found a non-disabled item\n if (attempts < maxAttempts) {\n this.focusItemByIndex(prevIndex);\n }\n }\n\n // Handle keyboard events for the dropdown\n @Listen('keydown', { target: 'window' })\n handleKeyDown(event: KeyboardEvent) {\n if (!this.isOpen) return;\n\n switch (event.key) {\n case 'Escape':\n event.preventDefault();\n this.closeDropdown();\n break;\n\n case 'ArrowDown':\n event.preventDefault();\n this.focusNextItem();\n break;\n\n case 'ArrowUp':\n event.preventDefault();\n this.focusPreviousItem();\n break;\n\n case 'Home':\n event.preventDefault();\n if (this.menuItems.length > 0) {\n // Find first non-disabled item\n let firstIndex = 0;\n while (firstIndex < this.menuItems.length && this.menuItems[firstIndex].disabled) {\n firstIndex++;\n }\n if (firstIndex < this.menuItems.length) {\n this.focusItemByIndex(firstIndex);\n }\n }\n break;\n\n case 'End':\n event.preventDefault();\n if (this.menuItems.length > 0) {\n // Find last non-disabled item\n let lastIndex = this.menuItems.length - 1;\n while (lastIndex >= 0 && this.menuItems[lastIndex].disabled) {\n lastIndex--;\n }\n if (lastIndex >= 0) {\n this.focusItemByIndex(lastIndex);\n }\n }\n break;\n\n case 'Tab':\n if (event.shiftKey) {\n // Let Shift+Tab navigate naturally from first item to trigger\n // For all other items, move to previous item\n const currentIndex = this.getFocusedItemIndex();\n\n if (currentIndex > 0) {\n // If not on first item, prevent default and go to previous item\n event.preventDefault();\n this.focusPreviousItem(); // Use our method that skips disabled items\n }\n // If on first item or no item, let natural tab order move back to trigger\n } else {\n // Forward Tab navigation\n const activeElement = document.activeElement;\n const isTriggerFocused = activeElement === this.triggerEl;\n const currentIndex = this.getFocusedItemIndex();\n\n if (isTriggerFocused && this.menuItems.length > 0) {\n // If trigger is focused, move to first non-disabled menu item\n event.preventDefault();\n\n // Find the first non-disabled item\n let firstFocusableIndex = 0;\n while (firstFocusableIndex < this.menuItems.length && this.menuItems[firstFocusableIndex].disabled) {\n firstFocusableIndex++;\n }\n\n if (firstFocusableIndex < this.menuItems.length) {\n this.focusItemByIndex(firstFocusableIndex);\n }\n } else if (currentIndex === -1 && this.menuItems.length > 0) {\n // If no menu item is focused, focus the first non-disabled one\n event.preventDefault();\n\n // Find the first non-disabled item\n let firstFocusableIndex = 0;\n while (firstFocusableIndex < this.menuItems.length && this.menuItems[firstFocusableIndex].disabled) {\n firstFocusableIndex++;\n }\n\n if (firstFocusableIndex < this.menuItems.length) {\n this.focusItemByIndex(firstFocusableIndex);\n }\n } else if (currentIndex !== -1) {\n // Use our method that skips disabled items\n event.preventDefault();\n this.focusNextItem();\n }\n }\n break;\n }\n }\n\n // Handle clicks outside the dropdown to close it\n @Listen('click', { target: 'window' })\n handleWindowClick(event: MouseEvent) {\n if (this.isOpen && !this.host.contains(event.target as Node) && event.target !== this.triggerEl) {\n this.closeDropdown();\n }\n }\n\n\n render() {\n return (\n <Host id={this.componentId}>\n <slot\n name=\"trigger\"\n onSlotchange={this.handleTriggerSlotChange}\n ></slot>\n <pds-box\n border-radius=\"sm\"\n display=\"flex\"\n direction=\"column\"\n class=\"pds-dropdown-menu--panel is-hidden\"\n shadow=\"100\"\n role=\"menu\"\n aria-orientation=\"vertical\"\n part=\"menu-panel\"\n >\n <slot onSlotchange={this.handleSlotChange}></slot>\n </pds-box>\n </Host>\n );\n }\n}\n"]}
@@ -148,11 +148,13 @@
148
148
  padding: var(--pine-dimension-100);
149
149
  z-index: var(--pine-z-index-overlay);
150
150
  /* stylelint-disable-next-line selector-pseudo-class-no-unknown */
151
- /* Modern browsers: CSS anchor positioning with JavaScript-controlled flipping */
152
151
  }
153
152
  .pds-filter__popover:popover-open, .pds-filter__popover.is-open {
154
153
  display: block;
155
154
  }
155
+ .pds-filter__popover {
156
+ /* Modern browsers: CSS anchor positioning with JavaScript-controlled flipping */
157
+ }
156
158
  @supports (anchor-name: --test) {
157
159
  .pds-filter__popover {
158
160
  inset-block-start: calc(anchor(--filter-trigger bottom) + var(--pine-dimension-100));
@@ -162,7 +164,6 @@
162
164
  position-anchor: --filter-trigger;
163
165
  /* CSS position-try disabled for precise JavaScript-controlled flipping */
164
166
  /* Flipping classes applied by JavaScript for precise control */
165
- /* Ensure fallback class works with flipping in modern browsers */
166
167
  }
167
168
  .pds-filter__popover.popover-flip-horizontal {
168
169
  inset-inline-start: anchor(--filter-trigger right);
@@ -177,6 +178,9 @@
177
178
  inset-inline-start: anchor(--filter-trigger right);
178
179
  transform: translate(-100%, calc(-100% - var(--pine-dimension-100)));
179
180
  }
181
+ .pds-filter__popover {
182
+ /* Ensure fallback class works with flipping in modern browsers */
183
+ }
180
184
  .pds-filter__popover.is-open.popover-flip-horizontal {
181
185
  inset-inline-start: anchor(--filter-trigger right);
182
186
  transform: translateX(-100%);
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=multiselect-interface.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"multiselect-interface.js","sourceRoot":"","sources":["../../../../src/components/pds-multiselect/multiselect-interface.ts"],"names":[],"mappings":"","sourcesContent":["export interface MultiselectOption {\n id: string | number;\n text: string;\n [key: string]: unknown;\n}\n\nexport interface MultiselectChangeEventDetail {\n values: string[];\n items: MultiselectOption[];\n}\n\nexport interface MultiselectSearchEventDetail {\n query: string;\n}\n\nexport interface MultiselectLoadOptionsEventDetail {\n query: string;\n page: number;\n}\n\nexport interface AsyncResponse {\n results: Array<{ id: string | number; text: string; [key: string]: unknown }>;\n totalCount?: number;\n}\n"]}
@@ -0,0 +1,232 @@
1
+ :host {
2
+ display: block;
3
+ }
4
+
5
+ :host([aria-disabled=true]) .pds-multiselect__trigger {
6
+ background: var(--pine-color-background-container-disabled);
7
+ border-color: var(--pine-color-border-disabled);
8
+ color: var(--pine-color-text-disabled);
9
+ cursor: not-allowed;
10
+ }
11
+ :host([aria-disabled=true]) .pds-multiselect__icon {
12
+ color: var(--pine-color-text-disabled);
13
+ }
14
+
15
+ .pds-multiselect {
16
+ position: relative;
17
+ }
18
+
19
+ .pds-multiselect__label {
20
+ color: var(--pine-color-text-label);
21
+ display: block;
22
+ font: var(--pine-typography-body-medium);
23
+ letter-spacing: var(--pine-letter-spacing);
24
+ margin-block-end: var(--pine-dimension-2xs);
25
+ }
26
+
27
+ .pds-multiselect__wrapper {
28
+ position: relative;
29
+ }
30
+
31
+ .pds-multiselect__trigger {
32
+ align-items: center;
33
+ background: var(--pine-color-background-container);
34
+ border: var(--pine-border);
35
+ border-radius: var(--pine-dimension-125);
36
+ cursor: pointer;
37
+ display: flex;
38
+ font: var(--pine-typography-body);
39
+ gap: var(--pine-dimension-xs);
40
+ justify-content: space-between;
41
+ letter-spacing: var(--pine-letter-spacing);
42
+ min-height: var(--pine-dimension-550);
43
+ padding: var(--pine-dimension-xs) var(--pine-dimension-sm);
44
+ position: relative;
45
+ text-align: start;
46
+ transition: border-color 0.2s ease, box-shadow 0.2s ease;
47
+ width: 100%;
48
+ }
49
+ .pds-multiselect__trigger:hover:not(.pds-multiselect__trigger--disabled) {
50
+ border-color: var(--pine-color-border-hover);
51
+ }
52
+ .pds-multiselect__trigger:focus:not(.pds-multiselect__trigger--disabled) {
53
+ border-color: var(--pine-color-border-active);
54
+ outline: var(--pine-outline-focus);
55
+ outline-offset: var(--pine-border-width);
56
+ }
57
+ .pds-multiselect__trigger.pds-multiselect__trigger--open {
58
+ border-color: var(--pine-color-border-active);
59
+ }
60
+ .pds-multiselect__trigger.pds-multiselect__trigger--invalid {
61
+ background-color: var(--pine-color-red-050);
62
+ border-color: var(--pine-color-border-danger);
63
+ }
64
+ .pds-multiselect__trigger.pds-multiselect__trigger--invalid:focus {
65
+ outline-color: var(--pine-color-focus-ring-danger);
66
+ }
67
+ .pds-multiselect__trigger.pds-multiselect__trigger--disabled {
68
+ background: var(--pine-color-background-container-disabled);
69
+ border-color: var(--pine-color-border-disabled);
70
+ color: var(--pine-color-text-disabled);
71
+ cursor: not-allowed;
72
+ }
73
+
74
+ .pds-multiselect__trigger-text {
75
+ color: var(--pine-color-text-strong);
76
+ flex: 1;
77
+ overflow: hidden;
78
+ text-overflow: ellipsis;
79
+ white-space: nowrap;
80
+ }
81
+ .pds-multiselect__trigger-text.pds-multiselect__trigger-text--placeholder {
82
+ color: var(--pine-color-text-placeholder);
83
+ }
84
+ .pds-multiselect__trigger--disabled .pds-multiselect__trigger-text {
85
+ color: var(--pine-color-text-disabled);
86
+ }
87
+
88
+ .pds-multiselect__icon {
89
+ color: var(--pine-color-icon);
90
+ flex-shrink: var(--pine-dimension-none);
91
+ }
92
+
93
+ .pds-multiselect__panel {
94
+ background: var(--pine-color-background-container);
95
+ border-radius: var(--pine-dimension-125);
96
+ box-shadow: var(--pine-box-shadow);
97
+ box-sizing: border-box;
98
+ display: flex;
99
+ flex-direction: column;
100
+ position: absolute;
101
+ z-index: var(--pine-z-index-raised);
102
+ }
103
+
104
+ .pds-multiselect__search {
105
+ align-items: center;
106
+ border-block-end: var(--pine-border);
107
+ border-block-end-color: var(--pine-color-border-subtle);
108
+ display: flex;
109
+ gap: var(--pine-dimension-xs);
110
+ padding: var(--pine-dimension-xs) var(--pine-dimension-sm);
111
+ }
112
+ .pds-multiselect__search pds-icon {
113
+ color: var(--pine-color-text-muted);
114
+ flex-shrink: var(--pine-dimension-none);
115
+ }
116
+
117
+ .pds-multiselect__search-input {
118
+ background: transparent;
119
+ border: var(--pine-dimension-none);
120
+ color: var(--pine-color-text-strong);
121
+ flex: 1;
122
+ font: var(--pine-typography-body);
123
+ letter-spacing: var(--pine-letter-spacing);
124
+ min-width: var(--pine-dimension-none);
125
+ outline: none;
126
+ }
127
+ .pds-multiselect__search-input::placeholder {
128
+ color: var(--pine-color-text-placeholder);
129
+ }
130
+
131
+ .pds-multiselect__selected-section {
132
+ border-block-end: var(--pine-border);
133
+ border-block-end-color: var(--pine-color-border-subtle);
134
+ padding: var(--pine-dimension-xs);
135
+ }
136
+
137
+ .pds-multiselect__selected-list {
138
+ list-style: none;
139
+ margin: var(--pine-dimension-none);
140
+ padding: var(--pine-dimension-none);
141
+ }
142
+
143
+ .pds-multiselect__selected-item {
144
+ color: var(--pine-color-text-strong);
145
+ font: var(--pine-typography-body);
146
+ letter-spacing: var(--pine-letter-spacing);
147
+ overflow: hidden;
148
+ padding: var(--pine-dimension-2xs) var(--pine-dimension-xs);
149
+ text-overflow: ellipsis;
150
+ white-space: nowrap;
151
+ }
152
+
153
+ .pds-multiselect__listbox {
154
+ background: transparent;
155
+ border: var(--pine-dimension-none);
156
+ box-sizing: border-box;
157
+ list-style: none;
158
+ margin: var(--pine-dimension-none);
159
+ overflow-y: auto;
160
+ padding: var(--pine-dimension-xs);
161
+ }
162
+
163
+ .pds-multiselect__option {
164
+ align-items: center;
165
+ background: transparent;
166
+ border-radius: var(--pine-dimension-xs);
167
+ cursor: pointer;
168
+ display: flex;
169
+ padding: var(--pine-dimension-2xs) var(--pine-dimension-xs);
170
+ transition: background 0.15s;
171
+ }
172
+ .pds-multiselect__option pds-checkbox {
173
+ pointer-events: none;
174
+ width: 100%;
175
+ }
176
+ .pds-multiselect__option:hover, .pds-multiselect__option.pds-multiselect__option--highlighted {
177
+ background: var(--pine-color-background-muted);
178
+ }
179
+ .pds-multiselect__option:focus-visible {
180
+ outline: var(--pine-dimension-none);
181
+ }
182
+
183
+ .pds-multiselect__empty,
184
+ .pds-multiselect__loading {
185
+ align-items: center;
186
+ color: var(--pine-color-text-muted);
187
+ display: flex;
188
+ font: var(--pine-typography-body);
189
+ justify-content: center;
190
+ padding: var(--pine-dimension-sm);
191
+ }
192
+
193
+ .pds-multiselect__load-more {
194
+ align-items: center;
195
+ display: flex;
196
+ justify-content: center;
197
+ padding: var(--pine-dimension-xs);
198
+ }
199
+
200
+ .pds-multiselect__helper {
201
+ color: var(--pine-color-text-message);
202
+ font: var(--pine-typography-body-sm);
203
+ margin-block-start: var(--pine-dimension-2xs);
204
+ margin-inline-start: var(--pine-dimension-none);
205
+ }
206
+
207
+ .pds-multiselect__error {
208
+ align-items: flex-start;
209
+ color: var(--pine-color-text-message-danger);
210
+ display: flex;
211
+ font: var(--pine-typography-body-sm);
212
+ gap: var(--pine-dimension-2xs);
213
+ margin-block-start: var(--pine-dimension-2xs);
214
+ margin-inline-start: var(--pine-dimension-none);
215
+ }
216
+ .pds-multiselect__error pds-icon {
217
+ flex-shrink: var(--pine-dimension-none);
218
+ margin-block-start: var(--pine-dimension-025);
219
+ }
220
+
221
+ .visually-hidden {
222
+ border: var(--pine-dimension-none);
223
+ clip: rect(0 0 0 0);
224
+ clip-path: polygon(0 0, 0 0, 0 0);
225
+ height: 1px;
226
+ margin: -1px;
227
+ overflow: hidden;
228
+ padding: var(--pine-dimension-none);
229
+ position: absolute;
230
+ white-space: nowrap;
231
+ width: 1px;
232
+ }