@pine-ds/core 4.10.0 → 4.12.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 (511) hide show
  1. package/components/aria-references.js +1 -0
  2. package/components/attributes.js +1 -1
  3. package/components/index2.js +1 -1
  4. package/components/pds-alert.js +1 -1
  5. package/components/pds-avatar.js +1 -1
  6. package/components/pds-box2.js +1 -1
  7. package/components/pds-button2.js +1 -1
  8. package/components/pds-checkbox2.js +1 -1
  9. package/components/pds-chip2.js +1 -1
  10. package/components/pds-combobox.js +2 -2
  11. package/components/pds-copytext.js +1 -1
  12. package/components/pds-datepicker.js +1 -1
  13. package/components/pds-drawer-content.js +1 -1
  14. package/components/pds-drawer-footer.js +1 -1
  15. package/components/pds-drawer-header.js +1 -1
  16. package/components/pds-drawer.js +1 -1
  17. package/components/pds-dropdown-menu-item.js +1 -1
  18. package/components/pds-dropdown-menu-separator.js +1 -1
  19. package/components/pds-dropdown-menu.js +1 -1
  20. package/components/pds-filter.js +1 -1
  21. package/components/pds-image.js +1 -1
  22. package/components/pds-input2.js +1 -1
  23. package/components/pds-link2.js +1 -1
  24. package/components/pds-loader2.js +1 -1
  25. package/components/pds-modal-footer.js +1 -1
  26. package/components/pds-modal-header.js +1 -1
  27. package/components/pds-modal2.js +1 -1
  28. package/components/pds-multiselect.js +1 -1
  29. package/components/pds-popover.js +1 -1
  30. package/components/pds-progress.js +1 -1
  31. package/components/pds-radio-group.js +1 -1
  32. package/components/pds-radio.js +1 -1
  33. package/components/pds-select.js +1 -1
  34. package/components/pds-sortable-item.js +1 -1
  35. package/components/pds-sortable.js +2 -2
  36. package/components/pds-switch.js +1 -1
  37. package/components/pds-table-body.js +1 -1
  38. package/components/pds-table-cell2.js +1 -1
  39. package/components/pds-table-head-cell2.js +1 -1
  40. package/components/pds-table-head.js +1 -1
  41. package/components/pds-table-row.js +1 -1
  42. package/components/pds-table.js +1 -1
  43. package/components/pds-tabs.js +1 -1
  44. package/components/pds-text2.js +1 -1
  45. package/components/pds-textarea.js +1 -1
  46. package/components/pds-toast.js +1 -1
  47. package/components/pds-tooltip.js +1 -1
  48. package/components/sortable-label.js +1 -0
  49. package/components/truncation-tooltip.js +1 -1
  50. package/dist/cjs/aria-references-CUmqibnO.js +54 -0
  51. package/dist/cjs/{attributes-CW49XqaL.js → attributes-Cgbkw6gO.js} +3 -0
  52. package/dist/cjs/loader.cjs.js +1 -1
  53. package/dist/cjs/pds-alert.cjs.entry.js +2 -2
  54. package/dist/cjs/pds-avatar.cjs.entry.js +3 -2
  55. package/dist/cjs/pds-box.cjs.entry.js +4 -3
  56. package/dist/cjs/pds-button.cjs.entry.js +25 -45
  57. package/dist/cjs/pds-checkbox.cjs.entry.js +4 -4
  58. package/dist/cjs/pds-chip.cjs.entry.js +3 -3
  59. package/dist/cjs/pds-combobox.cjs.entry.js +246 -106
  60. package/dist/cjs/pds-copytext.cjs.entry.js +3 -3
  61. package/dist/cjs/pds-datepicker.cjs.entry.js +295 -82
  62. package/dist/cjs/pds-drawer-content.cjs.entry.js +1 -1
  63. package/dist/cjs/pds-drawer-footer.cjs.entry.js +1 -1
  64. package/dist/cjs/pds-drawer-header.cjs.entry.js +1 -1
  65. package/dist/cjs/pds-drawer.cjs.entry.js +5 -7
  66. package/dist/cjs/pds-dropdown-menu-item.cjs.entry.js +85 -49
  67. package/dist/cjs/pds-dropdown-menu-separator.cjs.entry.js +2 -2
  68. package/dist/cjs/pds-dropdown-menu.cjs.entry.js +83 -10
  69. package/dist/cjs/pds-filter.cjs.entry.js +24 -2
  70. package/dist/cjs/pds-image.cjs.entry.js +148 -6
  71. package/dist/cjs/pds-input.cjs.entry.js +4 -4
  72. package/dist/cjs/pds-link.cjs.entry.js +4 -5
  73. package/dist/cjs/pds-loader.cjs.entry.js +4 -3
  74. package/dist/cjs/pds-modal-footer.cjs.entry.js +1 -1
  75. package/dist/cjs/pds-modal-header.cjs.entry.js +1 -1
  76. package/dist/cjs/pds-modal.cjs.entry.js +9 -12
  77. package/dist/cjs/pds-multiselect.cjs.entry.js +64 -18
  78. package/dist/cjs/pds-popover.cjs.entry.js +8 -6
  79. package/dist/cjs/pds-progress.cjs.entry.js +3 -3
  80. package/dist/cjs/pds-radio-group.cjs.entry.js +4 -4
  81. package/dist/cjs/pds-radio.cjs.entry.js +6 -6
  82. package/dist/cjs/pds-row.cjs.entry.js +1 -1
  83. package/dist/cjs/pds-select.cjs.entry.js +2 -2
  84. package/dist/cjs/pds-sortable-item.cjs.entry.js +28 -5
  85. package/dist/cjs/pds-sortable.cjs.entry.js +356 -4
  86. package/dist/cjs/pds-switch.cjs.entry.js +92 -15
  87. package/dist/cjs/pds-tab.cjs.entry.js +1 -1
  88. package/dist/cjs/pds-table-body.cjs.entry.js +1 -1
  89. package/dist/cjs/pds-table-cell.cjs.entry.js +24 -5
  90. package/dist/cjs/pds-table-head-cell.cjs.entry.js +59 -11
  91. package/dist/cjs/pds-table-head.cjs.entry.js +1 -1
  92. package/dist/cjs/pds-table-row.cjs.entry.js +1 -1
  93. package/dist/cjs/pds-table.cjs.entry.js +260 -5
  94. package/dist/cjs/pds-tabpanel.cjs.entry.js +1 -1
  95. package/dist/cjs/pds-tabs.cjs.entry.js +3 -3
  96. package/dist/cjs/pds-text.cjs.entry.js +5 -3
  97. package/dist/cjs/pds-textarea.cjs.entry.js +8 -7
  98. package/dist/cjs/pds-toast.cjs.entry.js +8 -4
  99. package/dist/cjs/pds-tooltip.cjs.entry.js +1 -1
  100. package/dist/cjs/pine-core.cjs.js +1 -1
  101. package/dist/cjs/sortable-label-DOcJrHvA.js +37 -0
  102. package/dist/cjs/{truncation-tooltip-Bikp7n9I.js → truncation-tooltip-CM5HgRHh.js} +69 -0
  103. package/dist/collection/components/pds-alert/pds-alert.css +0 -3
  104. package/dist/collection/components/pds-alert/pds-alert.js +3 -2
  105. package/dist/collection/components/pds-avatar/pds-avatar.js +7 -6
  106. package/dist/collection/components/pds-avatar/stories/pds-avatar.stories.js +1 -1
  107. package/dist/collection/components/pds-box/pds-box.css +1273 -1189
  108. package/dist/collection/components/pds-box/pds-box.js +180 -156
  109. package/dist/collection/components/pds-box/stories/pds-box.stories.js +79 -37
  110. package/dist/collection/components/pds-button/pds-button.js +26 -4
  111. package/dist/collection/components/pds-button/stories/pds-button.stories.js +25 -11
  112. package/dist/collection/components/pds-checkbox/pds-checkbox.js +10 -10
  113. package/dist/collection/components/pds-chip/pds-chip.js +3 -3
  114. package/dist/collection/components/pds-combobox/pds-combobox.css +162 -53
  115. package/dist/collection/components/pds-combobox/pds-combobox.js +261 -121
  116. package/dist/collection/components/pds-combobox/stories/pds-combobox.stories.js +35 -4
  117. package/dist/collection/components/pds-copytext/pds-copytext.js +2 -2
  118. package/dist/collection/components/pds-datepicker/date-utils.js +42 -0
  119. package/dist/collection/components/pds-datepicker/pds-datepicker.js +164 -65
  120. package/dist/collection/components/pds-datepicker/presets.js +42 -7
  121. package/dist/collection/components/pds-datepicker/stories/pds-datepicker.stories.js +11 -0
  122. package/dist/collection/components/pds-datepicker/value.js +76 -18
  123. package/dist/collection/components/pds-drawer/pds-drawer-content/pds-drawer-content.js +2 -5
  124. package/dist/collection/components/pds-drawer/pds-drawer-footer/pds-drawer-footer.js +2 -1
  125. package/dist/collection/components/pds-drawer/pds-drawer-header/pds-drawer-header.js +2 -1
  126. package/dist/collection/components/pds-drawer/pds-drawer.js +8 -10
  127. package/dist/collection/components/pds-dropdown-menu/pds-dropdown-menu-item/pds-dropdown-menu-item.css +17 -8
  128. package/dist/collection/components/pds-dropdown-menu/pds-dropdown-menu-item/pds-dropdown-menu-item.js +95 -62
  129. package/dist/collection/components/pds-dropdown-menu/pds-dropdown-menu-separator/pds-dropdown-menu-separator.js +3 -3
  130. package/dist/collection/components/pds-dropdown-menu/pds-dropdown-menu.css +2 -0
  131. package/dist/collection/components/pds-dropdown-menu/pds-dropdown-menu.js +84 -9
  132. package/dist/collection/components/pds-dropdown-menu/stories/pds-dropdown-menu.stories.js +24 -1
  133. package/dist/collection/components/pds-filters/pds-filter/pds-filter.css +2 -1
  134. package/dist/collection/components/pds-filters/pds-filter/pds-filter.js +24 -7
  135. package/dist/collection/components/pds-image/image-interface.js +1 -0
  136. package/dist/collection/components/pds-image/pds-image.css +11 -0
  137. package/dist/collection/components/pds-image/pds-image.js +249 -8
  138. package/dist/collection/components/pds-image/stories/pds-image.stories.js +117 -1
  139. package/dist/collection/components/pds-input/pds-input.js +14 -9
  140. package/dist/collection/components/pds-link/pds-link.js +10 -14
  141. package/dist/collection/components/pds-link/stories/pds-link.stories.js +6 -2
  142. package/dist/collection/components/pds-loader/pds-loader.js +5 -4
  143. package/dist/collection/components/pds-modal/pds-modal-footer/pds-modal-footer.js +2 -1
  144. package/dist/collection/components/pds-modal/pds-modal-header/pds-modal-header.js +2 -1
  145. package/dist/collection/components/pds-modal/pds-modal.js +11 -13
  146. package/dist/collection/components/pds-modal/stories/pds-modal.stories.js +7 -7
  147. package/dist/collection/components/pds-multiselect/pds-multiselect.css +2 -2
  148. package/dist/collection/components/pds-multiselect/pds-multiselect.js +63 -18
  149. package/dist/collection/components/pds-popover/pds-popover.css +1 -1
  150. package/dist/collection/components/pds-popover/pds-popover.js +9 -7
  151. package/dist/collection/components/pds-progress/pds-progress.js +4 -4
  152. package/dist/collection/components/pds-radio/pds-radio.css +5 -1
  153. package/dist/collection/components/pds-radio/pds-radio.js +9 -9
  154. package/dist/collection/components/pds-radio/stories/pds-radio.stories.js +9 -9
  155. package/dist/collection/components/pds-radio-group/pds-radio-group.js +7 -7
  156. package/dist/collection/components/pds-radio-group/stories/pds-radio-group.stories.js +3 -3
  157. package/dist/collection/components/pds-row/stories/pds-row.stories.js +15 -14
  158. package/dist/collection/components/pds-select/pds-select.js +7 -4
  159. package/dist/collection/components/pds-sortable/pds-sortable-item/pds-sortable-item.css +38 -0
  160. package/dist/collection/components/pds-sortable/pds-sortable-item/pds-sortable-item.js +47 -5
  161. package/dist/collection/components/pds-sortable/pds-sortable.js +481 -5
  162. package/dist/collection/components/pds-sortable/sortable-label.js +33 -0
  163. package/dist/collection/components/pds-sortable/stories/pds-sortable.stories.js +27 -0
  164. package/dist/collection/components/pds-switch/pds-switch.js +114 -17
  165. package/dist/collection/components/pds-switch/stories/pds-switch.stories.js +79 -0
  166. package/dist/collection/components/pds-table/pds-table-body/pds-table-body.js +4 -1
  167. package/dist/collection/components/pds-table/pds-table-cell/pds-table-cell.js +47 -4
  168. package/dist/collection/components/pds-table/pds-table-head/pds-table-head.js +6 -2
  169. package/dist/collection/components/pds-table/pds-table-head-cell/pds-table-head-cell.css +11 -0
  170. package/dist/collection/components/pds-table/pds-table-head-cell/pds-table-head-cell.js +98 -10
  171. package/dist/collection/components/pds-table/pds-table-row/pds-table-row.js +5 -1
  172. package/dist/collection/components/pds-table/pds-table.css +8 -0
  173. package/dist/collection/components/pds-table/pds-table.js +295 -7
  174. package/dist/collection/components/pds-table/stories/pds-table.stories.js +131 -6
  175. package/dist/collection/components/pds-tabs/pds-tabs.js +3 -3
  176. package/dist/collection/components/pds-tabs/stories/pds-tabs.stories.js +1 -1
  177. package/dist/collection/components/pds-text/pds-text.js +5 -3
  178. package/dist/collection/components/pds-textarea/pds-textarea.js +16 -14
  179. package/dist/collection/components/pds-textarea/stories/pds-textarea.stories.js +2 -13
  180. package/dist/collection/components/pds-toast/pds-toast.css +4 -3
  181. package/dist/collection/components/pds-toast/pds-toast.js +9 -5
  182. package/dist/collection/components/pds-toast/stories/pds-toast.stories.js +2 -2
  183. package/dist/collection/components/pds-tooltip/pds-tooltip.css +2 -1
  184. package/dist/collection/components/pds-tooltip/stories/pds-tooltip.stories.js +17 -17
  185. package/dist/collection/utils/aria-references.js +9 -3
  186. package/dist/collection/utils/truncation-tooltip.js +67 -0
  187. package/dist/docs.json +1150 -371
  188. package/dist/esm/aria-references-CNn1lObg.js +50 -0
  189. package/dist/esm/{attributes-DkeVeN0g.js → attributes-CD8knu3a.js} +3 -0
  190. package/dist/esm/{index-DvN3tyZp.js → index-B0DXTeeV.js} +1 -1
  191. package/dist/esm/loader.js +1 -1
  192. package/dist/esm/pds-accordion.entry.js +1 -1
  193. package/dist/esm/pds-alert.entry.js +2 -2
  194. package/dist/esm/pds-avatar.entry.js +4 -3
  195. package/dist/esm/pds-box.entry.js +4 -3
  196. package/dist/esm/pds-button.entry.js +24 -44
  197. package/dist/esm/pds-checkbox.entry.js +5 -5
  198. package/dist/esm/pds-chip.entry.js +4 -4
  199. package/dist/esm/pds-combobox.entry.js +246 -106
  200. package/dist/esm/pds-copytext.entry.js +4 -4
  201. package/dist/esm/pds-datepicker.entry.js +296 -83
  202. package/dist/esm/pds-drawer-content.entry.js +1 -1
  203. package/dist/esm/pds-drawer-footer.entry.js +1 -1
  204. package/dist/esm/pds-drawer-header.entry.js +1 -1
  205. package/dist/esm/pds-drawer.entry.js +5 -7
  206. package/dist/esm/pds-dropdown-menu-item.entry.js +85 -49
  207. package/dist/esm/pds-dropdown-menu-separator.entry.js +2 -2
  208. package/dist/esm/pds-dropdown-menu.entry.js +84 -11
  209. package/dist/esm/pds-filter.entry.js +25 -3
  210. package/dist/esm/pds-image.entry.js +149 -7
  211. package/dist/esm/pds-input.entry.js +5 -5
  212. package/dist/esm/pds-link.entry.js +5 -6
  213. package/dist/esm/pds-loader.entry.js +4 -3
  214. package/dist/esm/pds-modal-footer.entry.js +1 -1
  215. package/dist/esm/pds-modal-header.entry.js +1 -1
  216. package/dist/esm/pds-modal.entry.js +9 -12
  217. package/dist/esm/pds-multiselect.entry.js +65 -19
  218. package/dist/esm/pds-popover.entry.js +8 -6
  219. package/dist/esm/pds-progress.entry.js +3 -3
  220. package/dist/esm/pds-radio-group.entry.js +5 -5
  221. package/dist/esm/pds-radio.entry.js +7 -7
  222. package/dist/esm/pds-row.entry.js +1 -1
  223. package/dist/esm/pds-select.entry.js +3 -3
  224. package/dist/esm/pds-sortable-item.entry.js +29 -6
  225. package/dist/esm/pds-sortable.entry.js +357 -5
  226. package/dist/esm/pds-switch.entry.js +94 -17
  227. package/dist/esm/pds-tab.entry.js +1 -1
  228. package/dist/esm/pds-table-body.entry.js +1 -1
  229. package/dist/esm/pds-table-cell.entry.js +24 -5
  230. package/dist/esm/pds-table-head-cell.entry.js +60 -12
  231. package/dist/esm/pds-table-head.entry.js +1 -1
  232. package/dist/esm/pds-table-row.entry.js +1 -1
  233. package/dist/esm/pds-table.entry.js +261 -6
  234. package/dist/esm/pds-tabpanel.entry.js +1 -1
  235. package/dist/esm/pds-tabs.entry.js +3 -3
  236. package/dist/esm/pds-text.entry.js +5 -3
  237. package/dist/esm/pds-textarea.entry.js +9 -8
  238. package/dist/esm/pds-toast.entry.js +8 -4
  239. package/dist/esm/pds-tooltip.entry.js +1 -1
  240. package/dist/esm/pine-core.js +1 -1
  241. package/dist/esm/sortable-label-PItnzVVR.js +35 -0
  242. package/dist/esm/{truncation-tooltip-DBcPipr9.js → truncation-tooltip-CkIWm6Z-.js} +68 -1
  243. package/dist/esm-es5/aria-references-CNn1lObg.js +1 -0
  244. package/dist/esm-es5/{attributes-DkeVeN0g.js → attributes-CD8knu3a.js} +1 -1
  245. package/dist/esm-es5/{index-DvN3tyZp.js → index-B0DXTeeV.js} +1 -1
  246. package/dist/esm-es5/loader.js +1 -1
  247. package/dist/esm-es5/pds-accordion.entry.js +1 -1
  248. package/dist/esm-es5/pds-alert.entry.js +1 -1
  249. package/dist/esm-es5/pds-avatar.entry.js +1 -1
  250. package/dist/esm-es5/pds-box.entry.js +1 -1
  251. package/dist/esm-es5/pds-button.entry.js +1 -1
  252. package/dist/esm-es5/pds-checkbox.entry.js +1 -1
  253. package/dist/esm-es5/pds-chip.entry.js +1 -1
  254. package/dist/esm-es5/pds-combobox.entry.js +1 -1
  255. package/dist/esm-es5/pds-copytext.entry.js +1 -1
  256. package/dist/esm-es5/pds-datepicker.entry.js +1 -1
  257. package/dist/esm-es5/pds-drawer-content.entry.js +1 -1
  258. package/dist/esm-es5/pds-drawer-footer.entry.js +1 -1
  259. package/dist/esm-es5/pds-drawer-header.entry.js +1 -1
  260. package/dist/esm-es5/pds-drawer.entry.js +1 -1
  261. package/dist/esm-es5/pds-dropdown-menu-item.entry.js +1 -1
  262. package/dist/esm-es5/pds-dropdown-menu-separator.entry.js +1 -1
  263. package/dist/esm-es5/pds-dropdown-menu.entry.js +1 -1
  264. package/dist/esm-es5/pds-filter.entry.js +1 -1
  265. package/dist/esm-es5/pds-image.entry.js +1 -1
  266. package/dist/esm-es5/pds-input.entry.js +1 -1
  267. package/dist/esm-es5/pds-link.entry.js +1 -1
  268. package/dist/esm-es5/pds-loader.entry.js +1 -1
  269. package/dist/esm-es5/pds-modal-footer.entry.js +1 -1
  270. package/dist/esm-es5/pds-modal-header.entry.js +1 -1
  271. package/dist/esm-es5/pds-modal.entry.js +1 -1
  272. package/dist/esm-es5/pds-multiselect.entry.js +1 -1
  273. package/dist/esm-es5/pds-popover.entry.js +1 -1
  274. package/dist/esm-es5/pds-progress.entry.js +1 -1
  275. package/dist/esm-es5/pds-radio-group.entry.js +1 -1
  276. package/dist/esm-es5/pds-radio.entry.js +1 -1
  277. package/dist/esm-es5/pds-row.entry.js +1 -1
  278. package/dist/esm-es5/pds-select.entry.js +1 -1
  279. package/dist/esm-es5/pds-sortable-item.entry.js +1 -1
  280. package/dist/esm-es5/pds-sortable.entry.js +2 -2
  281. package/dist/esm-es5/pds-switch.entry.js +1 -1
  282. package/dist/esm-es5/pds-tab.entry.js +1 -1
  283. package/dist/esm-es5/pds-table-body.entry.js +1 -1
  284. package/dist/esm-es5/pds-table-cell.entry.js +1 -1
  285. package/dist/esm-es5/pds-table-head-cell.entry.js +1 -1
  286. package/dist/esm-es5/pds-table-head.entry.js +1 -1
  287. package/dist/esm-es5/pds-table-row.entry.js +1 -1
  288. package/dist/esm-es5/pds-table.entry.js +1 -1
  289. package/dist/esm-es5/pds-tabpanel.entry.js +1 -1
  290. package/dist/esm-es5/pds-tabs.entry.js +1 -1
  291. package/dist/esm-es5/pds-text.entry.js +1 -1
  292. package/dist/esm-es5/pds-textarea.entry.js +1 -1
  293. package/dist/esm-es5/pds-toast.entry.js +1 -1
  294. package/dist/esm-es5/pds-tooltip.entry.js +1 -1
  295. package/dist/esm-es5/pine-core.js +1 -1
  296. package/dist/esm-es5/sortable-label-PItnzVVR.js +1 -0
  297. package/dist/esm-es5/truncation-tooltip-CkIWm6Z-.js +1 -0
  298. package/dist/pine-core/{p-f834cb07.system.entry.js → p-00891b8d.system.entry.js} +1 -1
  299. package/dist/pine-core/{p-3f8bd3fb.system.entry.js → p-053ff8eb.system.entry.js} +1 -1
  300. package/dist/pine-core/p-08b9e3ad.entry.js +1 -0
  301. package/dist/pine-core/{p-4d98bc0c.system.entry.js → p-0a7570dd.system.entry.js} +1 -1
  302. package/dist/pine-core/{p-d018dc60.system.entry.js → p-0ac4262e.system.entry.js} +1 -1
  303. package/dist/pine-core/{p-89d38a82.system.entry.js → p-0e1b8bd1.system.entry.js} +1 -1
  304. package/dist/pine-core/{p-e1d1b5d8.entry.js → p-12fdc65f.entry.js} +1 -1
  305. package/dist/pine-core/{p-d48fe5a0.system.entry.js → p-16fceef6.system.entry.js} +1 -1
  306. package/dist/pine-core/p-1765a41b.system.entry.js +1 -0
  307. package/dist/pine-core/{p-a594c41f.entry.js → p-18524c25.entry.js} +1 -1
  308. package/dist/pine-core/p-1a013a5c.system.entry.js +1 -0
  309. package/dist/pine-core/{p-2b9622c1.system.entry.js → p-1ab52531.system.entry.js} +1 -1
  310. package/dist/pine-core/p-1c584a20.entry.js +1 -0
  311. package/dist/pine-core/p-1edef412.entry.js +1 -0
  312. package/dist/pine-core/{p-5946203c.entry.js → p-1f998e3e.entry.js} +1 -1
  313. package/dist/pine-core/{p-39e57657.entry.js → p-1fb1ca3d.entry.js} +1 -1
  314. package/dist/pine-core/p-2b6becc2.entry.js +1 -0
  315. package/dist/pine-core/p-2cc7c682.entry.js +1 -0
  316. package/dist/pine-core/{p-639acef8.system.entry.js → p-2ddcd845.system.entry.js} +1 -1
  317. package/dist/pine-core/{p-6a1aa8d3.entry.js → p-2f15e85f.entry.js} +1 -1
  318. package/dist/pine-core/{p-67f795d5.system.entry.js → p-33da254f.system.entry.js} +1 -1
  319. package/dist/pine-core/{p-c6a9e62c.system.entry.js → p-3fc9ef80.system.entry.js} +1 -1
  320. package/dist/pine-core/p-4125a4a6.system.entry.js +1 -0
  321. package/dist/pine-core/p-47df9e9f.system.entry.js +3 -0
  322. package/dist/pine-core/p-51680c9c.system.entry.js +1 -0
  323. package/dist/pine-core/p-55535481.system.entry.js +1 -0
  324. package/dist/pine-core/p-55a4659a.system.entry.js +1 -0
  325. package/dist/pine-core/{p-c5e1eb3c.system.entry.js → p-57af5c29.system.entry.js} +1 -1
  326. package/dist/pine-core/p-57edd301.system.entry.js +1 -0
  327. package/dist/pine-core/{p-bfa34194.entry.js → p-5d582798.entry.js} +1 -1
  328. package/dist/pine-core/p-5db87fda.system.entry.js +1 -0
  329. package/dist/pine-core/{p-19cf1d91.system.entry.js → p-5eb0c78c.system.entry.js} +1 -1
  330. package/dist/pine-core/{p-42f70f93.system.entry.js → p-6017afb5.system.entry.js} +1 -1
  331. package/dist/pine-core/{p-63f85859.system.entry.js → p-60e65fe0.system.entry.js} +1 -1
  332. package/dist/pine-core/{p-973c3ac0.entry.js → p-627a94da.entry.js} +1 -1
  333. package/dist/pine-core/{p-a9d96e22.entry.js → p-68328afc.entry.js} +1 -1
  334. package/dist/pine-core/{p-bd7dc317.system.entry.js → p-72668673.system.entry.js} +1 -1
  335. package/dist/pine-core/p-72ff5ad2.system.entry.js +1 -0
  336. package/dist/pine-core/p-736ea7dd.entry.js +7 -0
  337. package/dist/pine-core/p-765f4207.entry.js +1 -0
  338. package/dist/pine-core/{p-2a18852f.entry.js → p-77530cf2.entry.js} +1 -1
  339. package/dist/pine-core/p-77a22399.entry.js +1 -0
  340. package/dist/pine-core/p-783127bf.entry.js +1 -0
  341. package/dist/pine-core/{p-d9719e37.entry.js → p-82f7eed1.entry.js} +1 -1
  342. package/dist/pine-core/{p-124a0a24.entry.js → p-84d4ae26.entry.js} +1 -1
  343. package/dist/pine-core/p-8deeda07.entry.js +1 -0
  344. package/dist/pine-core/{p-849ec281.system.entry.js → p-8e17a6d8.system.entry.js} +1 -1
  345. package/dist/pine-core/p-8e7e7bba.entry.js +1 -0
  346. package/dist/pine-core/{p-e82f758f.system.entry.js → p-907c69e9.system.entry.js} +1 -1
  347. package/dist/pine-core/{p-1415c988.system.entry.js → p-90f83a5b.system.entry.js} +1 -1
  348. package/dist/pine-core/p-97145eee.system.entry.js +1 -0
  349. package/dist/pine-core/{p-a09c9c5e.system.entry.js → p-9d983e09.system.entry.js} +1 -1
  350. package/dist/pine-core/{p-1e3ef425.entry.js → p-9e005996.entry.js} +1 -1
  351. package/dist/pine-core/{p-DvN3tyZp.js → p-B0DXTeeV.js} +1 -1
  352. package/dist/pine-core/{p-CNXspDYs.system.js → p-BlJQebvG.system.js} +1 -1
  353. package/dist/pine-core/p-C35-349-.system.js +1 -0
  354. package/dist/pine-core/{p-vFsJv75D.system.js → p-CIe1DGXa.system.js} +1 -1
  355. package/dist/pine-core/p-CNn1lObg.js +1 -0
  356. package/dist/pine-core/p-CQJ44c6o.system.js +1 -0
  357. package/dist/pine-core/p-Dv9QBmIF.js +1 -0
  358. package/dist/pine-core/p-PItnzVVR.js +1 -0
  359. package/dist/pine-core/p-VPGVqK3P.system.js +1 -0
  360. package/dist/pine-core/p-XK45dzWR.system.js +1 -1
  361. package/dist/pine-core/p-a149af29.entry.js +1 -0
  362. package/dist/pine-core/p-a20d9eca.system.entry.js +1 -0
  363. package/dist/pine-core/{p-f6f4fd42.entry.js → p-a5782d99.entry.js} +1 -1
  364. package/dist/pine-core/p-a5e9c583.entry.js +1 -0
  365. package/dist/pine-core/{p-4d47023c.system.entry.js → p-a9eaf160.system.entry.js} +1 -1
  366. package/dist/pine-core/{p-143b33a6.entry.js → p-b00b07e3.entry.js} +1 -1
  367. package/dist/pine-core/{p-c7a53c4f.entry.js → p-b7b29392.entry.js} +1 -1
  368. package/dist/pine-core/p-b96bdff6.entry.js +1 -0
  369. package/dist/pine-core/{p-f71d71ca.entry.js → p-bbd9ab75.entry.js} +1 -1
  370. package/dist/pine-core/p-bdab6c9f.entry.js +1 -0
  371. package/dist/pine-core/p-biShcgLI.js +1 -0
  372. package/dist/pine-core/{p-548bce53.system.entry.js → p-c12b5cd7.system.entry.js} +1 -1
  373. package/dist/pine-core/p-c1dc7692.entry.js +1 -0
  374. package/dist/pine-core/p-c76d8b9e.system.entry.js +1 -0
  375. package/dist/pine-core/{p-590df41a.entry.js → p-c89ea2d3.entry.js} +1 -1
  376. package/dist/pine-core/{p-d920d759.system.entry.js → p-c9630934.system.entry.js} +1 -1
  377. package/dist/pine-core/{p-6f4ab1ea.system.entry.js → p-cb9227f6.system.entry.js} +1 -1
  378. package/dist/pine-core/p-ceef0eb1.entry.js +1 -0
  379. package/dist/pine-core/p-d1283e8d.entry.js +1 -0
  380. package/dist/pine-core/p-d676926d.system.entry.js +1 -0
  381. package/dist/pine-core/{p-61cfdbb2.entry.js → p-d7d7a4e1.entry.js} +1 -1
  382. package/dist/pine-core/p-d85d50cb.entry.js +1 -0
  383. package/dist/pine-core/p-daa802f1.entry.js +2 -0
  384. package/dist/pine-core/p-ddf4b9b5.system.entry.js +1 -0
  385. package/dist/pine-core/p-de3b319e.system.entry.js +8 -0
  386. package/dist/pine-core/{p-cb9baf78.system.entry.js → p-e00777da.system.entry.js} +1 -1
  387. package/dist/pine-core/p-e2541eeb.entry.js +1 -0
  388. package/dist/pine-core/{p-01f1cdaf.system.entry.js → p-e2a1a49a.system.entry.js} +1 -1
  389. package/dist/pine-core/p-e4ebea88.system.entry.js +1 -0
  390. package/dist/pine-core/{p-947582e1.entry.js → p-e554bd64.entry.js} +1 -1
  391. package/dist/pine-core/{p-dd7ded84.entry.js → p-e6427c87.entry.js} +1 -1
  392. package/dist/pine-core/{p-50ddadbf.entry.js → p-e72e8b8f.entry.js} +1 -1
  393. package/dist/pine-core/p-e92d0f0f.system.entry.js +1 -0
  394. package/dist/pine-core/{p-9b32727a.system.entry.js → p-eab165b9.system.entry.js} +1 -1
  395. package/dist/pine-core/p-eabc4bd8.entry.js +1 -0
  396. package/dist/pine-core/p-ef9f84f2.system.entry.js +1 -0
  397. package/dist/pine-core/{p-c9ae7964.entry.js → p-f026af73.entry.js} +1 -1
  398. package/dist/pine-core/{p-99530cb5.entry.js → p-f0509c8e.entry.js} +1 -1
  399. package/dist/pine-core/p-f1252e72.system.entry.js +1 -0
  400. package/dist/pine-core/p-f3496fd1.entry.js +1 -0
  401. package/dist/pine-core/{p-eecd9ad8.system.entry.js → p-f90f4be7.system.entry.js} +1 -1
  402. package/dist/pine-core/p-f9bdaadd.system.entry.js +1 -0
  403. package/dist/pine-core/{p-128c04e7.entry.js → p-fda791df.entry.js} +1 -1
  404. package/dist/pine-core/p-fea4296d.entry.js +1 -0
  405. package/dist/pine-core/pine-core.esm.js +1 -1
  406. package/dist/types/components/pds-alert/pds-alert.d.ts +2 -1
  407. package/dist/types/components/pds-avatar/pds-avatar.d.ts +5 -4
  408. package/dist/types/components/pds-box/pds-box.d.ts +68 -57
  409. package/dist/types/components/pds-button/pds-button.d.ts +14 -3
  410. package/dist/types/components/pds-checkbox/pds-checkbox.d.ts +15 -8
  411. package/dist/types/components/pds-chip/pds-chip.d.ts +2 -2
  412. package/dist/types/components/pds-combobox/pds-combobox.d.ts +48 -11
  413. package/dist/types/components/pds-copytext/pds-copytext.d.ts +3 -1
  414. package/dist/types/components/pds-datepicker/date-utils.d.ts +19 -0
  415. package/dist/types/components/pds-datepicker/datepicker-interface.d.ts +22 -5
  416. package/dist/types/components/pds-datepicker/pds-datepicker.d.ts +33 -7
  417. package/dist/types/components/pds-datepicker/presets.d.ts +3 -2
  418. package/dist/types/components/pds-datepicker/value.d.ts +14 -2
  419. package/dist/types/components/pds-drawer/pds-drawer-content/pds-drawer-content.d.ts +1 -4
  420. package/dist/types/components/pds-drawer/pds-drawer-footer/pds-drawer-footer.d.ts +1 -0
  421. package/dist/types/components/pds-drawer/pds-drawer-header/pds-drawer-header.d.ts +1 -0
  422. package/dist/types/components/pds-drawer/pds-drawer.d.ts +4 -6
  423. package/dist/types/components/pds-dropdown-menu/pds-dropdown-menu-item/pds-dropdown-menu-item.d.ts +20 -16
  424. package/dist/types/components/pds-dropdown-menu/pds-dropdown-menu-separator/pds-dropdown-menu-separator.d.ts +1 -1
  425. package/dist/types/components/pds-dropdown-menu/pds-dropdown-menu.d.ts +7 -0
  426. package/dist/types/components/pds-filters/pds-filter/pds-filter.d.ts +6 -5
  427. package/dist/types/components/pds-image/image-interface.d.ts +12 -0
  428. package/dist/types/components/pds-image/pds-image.d.ts +69 -9
  429. package/dist/types/components/pds-input/pds-input.d.ts +17 -7
  430. package/dist/types/components/pds-link/pds-link.d.ts +8 -8
  431. package/dist/types/components/pds-loader/pds-loader.d.ts +3 -2
  432. package/dist/types/components/pds-modal/pds-modal-footer/pds-modal-footer.d.ts +1 -0
  433. package/dist/types/components/pds-modal/pds-modal-header/pds-modal-header.d.ts +1 -0
  434. package/dist/types/components/pds-modal/pds-modal.d.ts +7 -9
  435. package/dist/types/components/pds-multiselect/pds-multiselect.d.ts +14 -8
  436. package/dist/types/components/pds-popover/pds-popover.d.ts +2 -2
  437. package/dist/types/components/pds-progress/pds-progress.d.ts +2 -2
  438. package/dist/types/components/pds-radio/pds-radio.d.ts +6 -5
  439. package/dist/types/components/pds-radio-group/pds-radio-group.d.ts +5 -4
  440. package/dist/types/components/pds-select/pds-select.d.ts +9 -3
  441. package/dist/types/components/pds-sortable/pds-sortable-item/pds-sortable-item.d.ts +8 -2
  442. package/dist/types/components/pds-sortable/pds-sortable.d.ts +82 -1
  443. package/dist/types/components/pds-sortable/sortable-label.d.ts +7 -0
  444. package/dist/types/components/pds-switch/pds-switch.d.ts +17 -2
  445. package/dist/types/components/pds-table/pds-table-body/pds-table-body.d.ts +3 -0
  446. package/dist/types/components/pds-table/pds-table-cell/pds-table-cell.d.ts +10 -0
  447. package/dist/types/components/pds-table/pds-table-head/pds-table-head.d.ts +5 -1
  448. package/dist/types/components/pds-table/pds-table-head-cell/pds-table-head-cell.d.ts +21 -0
  449. package/dist/types/components/pds-table/pds-table-row/pds-table-row.d.ts +4 -0
  450. package/dist/types/components/pds-table/pds-table.d.ts +76 -2
  451. package/dist/types/components/pds-tabs/pds-tabs.d.ts +1 -1
  452. package/dist/types/components/pds-textarea/pds-textarea.d.ts +15 -13
  453. package/dist/types/components/pds-toast/pds-toast.d.ts +5 -1
  454. package/dist/types/components.d.ts +505 -335
  455. package/dist/types/utils/aria-references.d.ts +4 -0
  456. package/dist/types/utils/truncation-tooltip.d.ts +39 -0
  457. package/dist/types/utils/types.d.ts +3 -0
  458. package/dist/vscode.html-data.json +350 -137
  459. package/hydrate/index.js +2054 -427
  460. package/hydrate/index.mjs +2054 -427
  461. package/package.json +3 -3
  462. package/readme.md +26 -55
  463. package/dist/esm-es5/truncation-tooltip-DBcPipr9.js +0 -1
  464. package/dist/pine-core/p-07323107.entry.js +0 -1
  465. package/dist/pine-core/p-08b8e941.entry.js +0 -1
  466. package/dist/pine-core/p-0b7b3fc2.system.entry.js +0 -3
  467. package/dist/pine-core/p-0d5f0ab5.system.entry.js +0 -1
  468. package/dist/pine-core/p-14dedf01.system.entry.js +0 -1
  469. package/dist/pine-core/p-1ca8d183.entry.js +0 -1
  470. package/dist/pine-core/p-1f62bb71.entry.js +0 -7
  471. package/dist/pine-core/p-2dd30d12.entry.js +0 -1
  472. package/dist/pine-core/p-35s7h-dk.js +0 -1
  473. package/dist/pine-core/p-3610cb3b.entry.js +0 -1
  474. package/dist/pine-core/p-39276663.entry.js +0 -1
  475. package/dist/pine-core/p-3a1dc752.system.entry.js +0 -1
  476. package/dist/pine-core/p-42d43c3f.system.entry.js +0 -1
  477. package/dist/pine-core/p-4a90b9c8.system.entry.js +0 -1
  478. package/dist/pine-core/p-4cfe922b.entry.js +0 -1
  479. package/dist/pine-core/p-5f181694.system.entry.js +0 -1
  480. package/dist/pine-core/p-60a30975.system.entry.js +0 -1
  481. package/dist/pine-core/p-62aa6a78.system.entry.js +0 -1
  482. package/dist/pine-core/p-64bcb378.entry.js +0 -1
  483. package/dist/pine-core/p-724baba3.system.entry.js +0 -1
  484. package/dist/pine-core/p-72659a0e.system.entry.js +0 -1
  485. package/dist/pine-core/p-8436cbfb.entry.js +0 -1
  486. package/dist/pine-core/p-8ade17ce.entry.js +0 -1
  487. package/dist/pine-core/p-8e7f75e6.entry.js +0 -1
  488. package/dist/pine-core/p-8fb520df.entry.js +0 -1
  489. package/dist/pine-core/p-92115e88.entry.js +0 -1
  490. package/dist/pine-core/p-94c9b7d1.system.entry.js +0 -1
  491. package/dist/pine-core/p-97356d4b.entry.js +0 -1
  492. package/dist/pine-core/p-97653e60.entry.js +0 -1
  493. package/dist/pine-core/p-97b73359.entry.js +0 -1
  494. package/dist/pine-core/p-BZVUD2on.js +0 -1
  495. package/dist/pine-core/p-Dj-z_ugg.system.js +0 -1
  496. package/dist/pine-core/p-ad5208a4.system.entry.js +0 -1
  497. package/dist/pine-core/p-afc2f165.entry.js +0 -1
  498. package/dist/pine-core/p-bcc378ba.system.entry.js +0 -8
  499. package/dist/pine-core/p-c8a0b562.system.entry.js +0 -1
  500. package/dist/pine-core/p-d47b2a6a.system.entry.js +0 -1
  501. package/dist/pine-core/p-d6f338e0.entry.js +0 -1
  502. package/dist/pine-core/p-da8b864a.entry.js +0 -2
  503. package/dist/pine-core/p-db7fb5a3.entry.js +0 -1
  504. package/dist/pine-core/p-de455073.system.entry.js +0 -1
  505. package/dist/pine-core/p-e3de6a1d.entry.js +0 -1
  506. package/dist/pine-core/p-e84fa9ed.entry.js +0 -1
  507. package/dist/pine-core/p-eb4f0daa.system.entry.js +0 -1
  508. package/dist/pine-core/p-eb56af4a.system.entry.js +0 -1
  509. package/dist/pine-core/p-ef0eba9b.system.entry.js +0 -1
  510. package/dist/pine-core/p-f11cce27.system.entry.js +0 -1
  511. package/dist/pine-core/p-f354dbac.entry.js +0 -1
@@ -10,6 +10,10 @@ import { FlyoutController, buildPanelEntries, findGroup, groupBadgeOf, groupIcon
10
10
  * @slot trigger-content - Custom content for the button trigger when customTriggerContent is true
11
11
  * @slot empty - Custom empty state message when no options match
12
12
  * @slot loading - Custom loading indicator
13
+ * @part button-trigger - Exposes the button trigger for styling. Appears only when `trigger` is `button`.
14
+ * @part chip-trigger - Exposes the chip trigger for styling. Appears only when `trigger` is `chip`.
15
+ * @part combobox - Exposes the outer container around the label, trigger and messages for styling.
16
+ * @part input - Exposes the native `input` element for styling. Appears only when `trigger` is `input`, the default.
13
17
  */
14
18
  export class PdsCombobox {
15
19
  constructor() {
@@ -35,11 +39,6 @@ export class PdsCombobox {
35
39
  * @default 'bottom-start'
36
40
  */
37
41
  this.dropdownPlacement = 'bottom-start';
38
- /**
39
- * Width of the dropdown. Any valid CSS width value.
40
- * @default '236px'
41
- */
42
- this.dropdownWidth = '236px';
43
42
  /**
44
43
  * Where to mount the dropdown listbox (`host` or `body`, sometimes called “append to body”).
45
44
  * Use `body` inside scrollable containers (for example modals) so the list is not clipped by
@@ -67,16 +66,18 @@ export class PdsCombobox {
67
66
  */
68
67
  this.noOptionsFoundLabel = 'No options found';
69
68
  /**
70
- * Maximum width of a group's flyout when `group-display` is `flyout`. Any valid CSS width value.
71
- * @default '380px'
69
+ * Maximum width of a group's flyout when `group-display` is `flyout`. Any valid CSS width
70
+ * value, including its padding.
71
+ * @default '388px'
72
72
  */
73
- this.flyoutMaxWidth = '380px';
73
+ this.flyoutMaxWidth = '388px';
74
74
  /**
75
- * Minimum width of a group's flyout when `group-display` is `flyout`. Any valid CSS width value.
76
- * The flyout is as wide as its options, between this and `flyout-max-width`.
77
- * @default '280px'
75
+ * Minimum width of a group's flyout when `group-display` is `flyout`. Any valid CSS width
76
+ * value, including its padding. The flyout is as wide as its options, between this and
77
+ * `flyout-max-width`.
78
+ * @default '288px'
78
79
  */
79
- this.flyoutMinWidth = '280px';
80
+ this.flyoutMinWidth = '288px';
80
81
  /**
81
82
  * How option groups (`<optgroup>`, or the `group` field of `options`) are shown in the dropdown.
82
83
  * `inline` lists each group's label above its options. `flyout` lists the groups, and opens a
@@ -163,7 +164,7 @@ export class PdsCombobox {
163
164
  */
164
165
  this.chipDot = false;
165
166
  /**
166
- * The value of the combobox input.
167
+ * The `value` of the selected option.
167
168
  */
168
169
  this.value = '';
169
170
  /**
@@ -287,15 +288,30 @@ export class PdsCombobox {
287
288
  * the list shows every option until the user types (then normal filtering applies).
288
289
  */
289
290
  this.expandFilterListWhileOpen = false;
291
+ this.onHeightGlideCancel = (event) => {
292
+ const panel = this.listboxEl;
293
+ if (event.animationName !== 'pds-combobox-height-glide' || event.target !== panel)
294
+ return;
295
+ // Turning around mid-glide cancels the old glide as the new one starts; only a glide with none
296
+ // left running cleans up.
297
+ const running = panel.getAnimations().some(a => a.animationName === 'pds-combobox-height-glide');
298
+ // A drill waiting to render glides from here next; it cleans up then.
299
+ if (!running && this.drillFromHeight === undefined)
300
+ this.endHeightGlide();
301
+ };
290
302
  this.onPanelPointer = (event) => {
291
303
  const canHover = event.pointerType !== 'touch';
292
304
  if (this.pointerCanHover !== canHover)
293
305
  this.pointerCanHover = canHover;
294
306
  };
295
307
  this.onDrillAnimationEnd = (event) => {
296
- // Only the slide's own end: slotted consumer content can animate inside the list too.
308
+ // Only the component's own ends (the slide by name, the glide by its target): slotted consumer
309
+ // content can animate inside the list too.
297
310
  if (event.animationName === 'pds-combobox-drill')
298
311
  this.drillDirection = null;
312
+ if (event.animationName === 'pds-combobox-height-glide' && event.target === this.listboxEl && this.drillFromHeight === undefined) {
313
+ this.endHeightGlide();
314
+ }
299
315
  };
300
316
  /** `<label for>` only works on the input trigger; for a div trigger a click on the label focuses it. */
301
317
  this.onLabelClick = () => {
@@ -593,6 +609,8 @@ export class PdsCombobox {
593
609
  }
594
610
  }
595
611
  };
612
+ /** A pick that fills the field from its placeholder fades in; a value it loads with doesn't. */
613
+ this.fadesValueIn = false;
596
614
  this.handleScroll = (e) => {
597
615
  if (!this.asyncUrl || !this.hasMore || this.loading)
598
616
  return;
@@ -711,6 +729,14 @@ export class PdsCombobox {
711
729
  if (this.usesBodyPortal && this.isOpen) {
712
730
  this.syncBodyPortal();
713
731
  }
732
+ // Opening places the dropdown a tick later, which can run before the dropdown has rendered and
733
+ // then skips it, leaving it without its dropdown-width and max-height. Place a newly rendered
734
+ // dropdown here too.
735
+ if (this.isOpen && this.triggerEl && this.listboxEl && this.listboxEl !== this.placedListboxEl) {
736
+ this.placedListboxEl = this.listboxEl;
737
+ void this.positionDropdown();
738
+ }
739
+ this.glideDrillHeight();
714
740
  const row = (_a = this.listboxEl) === null || _a === void 0 ? void 0 : _a.querySelector('.pds-combobox__group-row--open');
715
741
  const flyoutEl = row === null || row === void 0 ? void 0 : row.querySelector('.pds-combobox__flyout');
716
742
  if (this.isOpen && this.listboxEl && row && flyoutEl) {
@@ -719,18 +745,6 @@ export class PdsCombobox {
719
745
  else {
720
746
  this.flyout.stopPositioning();
721
747
  }
722
- // The row back is sticky over the group's options; scrolling an option into view stops below
723
- // it. Set before any scroll below, and when it first applies, scroll the highlighted option
724
- // again: the list keeps its offset on drilling in, and an earlier scroll had no padding.
725
- if (this.panelTreeEl) {
726
- const header = this.hidesPanelSearch ? this.panelTreeEl.querySelector('.pds-combobox__group-back-trigger') : null;
727
- const padding = header ? `${header.offsetHeight}px` : '';
728
- if (this.panelTreeEl.style.scrollPaddingBlockStart !== padding) {
729
- this.panelTreeEl.style.scrollPaddingBlockStart = padding;
730
- if (padding !== '' && this.highlightedIndex >= 0)
731
- this.pendingOptionFocus = true;
732
- }
733
- }
734
748
  if (this.pendingOptionFocus) {
735
749
  this.pendingOptionFocus = false;
736
750
  this.updateOptionFocus();
@@ -758,8 +772,7 @@ export class PdsCombobox {
758
772
  * Scrolls just enough to show `el`, as `scrollIntoView({ block: 'nearest' })` does. In the drill-in
759
773
  * panel it scrolls the list alone, and never sideways: while a drill-in slide offsets a row past
760
774
  * the list's edge, `scrollIntoView` also scrolls the list horizontally to reach it, which eats most
761
- * of the slide. There it keeps clear of the sticky row back, through the scroll padding set for it,
762
- * but doesn't scroll the page or a scrolling ancestor.
775
+ * of the slide. It doesn't scroll the page or a scrolling ancestor.
763
776
  */
764
777
  scrollIntoViewNearest(el, smooth) {
765
778
  const behavior = smooth ? 'smooth' : 'auto';
@@ -767,18 +780,29 @@ export class PdsCombobox {
767
780
  el.scrollIntoView({ block: 'nearest', behavior });
768
781
  return;
769
782
  }
770
- const list = this.usesPanelSearch ? this.panelTreeEl : this.listboxEl;
783
+ // The row back is the drilled-in header, above the scrolling options: always in view.
784
+ if (el.classList.contains('pds-combobox__group-back-trigger'))
785
+ return;
786
+ const list = this.scrollListEl;
771
787
  if (!list)
772
788
  return;
773
789
  const offset = el.getBoundingClientRect().top - list.getBoundingClientRect().top - list.clientTop;
774
- // The padding keeps rows clear of the sticky row back; the row back itself doesn't need it.
775
- const padding = el.classList.contains('pds-combobox__group-back-trigger') ? 0 : parseFloat(list.style.scrollPaddingBlockStart) || 0;
776
- const top = list.scrollTop + offset - padding;
790
+ const top = list.scrollTop + offset;
777
791
  const bottom = list.scrollTop + offset + el.offsetHeight - list.clientHeight;
778
792
  const target = top < list.scrollTop ? top : bottom > list.scrollTop ? bottom : null;
779
793
  if (target !== null)
780
794
  list.scrollTo({ top: target, behavior });
781
795
  }
796
+ /**
797
+ * The element that scrolls the panel's rows. Every layer is a header (the search field, or a
798
+ * drilled-in group's row back) above the rows that scroll: drilled in, the group's options;
799
+ * otherwise the list under the search field, or the panel itself.
800
+ */
801
+ get scrollListEl() {
802
+ var _a;
803
+ const list = this.usesPanelSearch ? this.panelTreeEl : this.listboxEl;
804
+ return (_a = list === null || list === void 0 ? void 0 : list.querySelector('.pds-combobox__group-back > .pds-combobox__drill-in-options')) !== null && _a !== void 0 ? _a : list;
805
+ }
782
806
  focusPanel(el) {
783
807
  var _a, _b;
784
808
  this.panelFocusEl = el;
@@ -796,6 +820,7 @@ export class PdsCombobox {
796
820
  this.openGroup = null;
797
821
  // The reset isn't a drill-out, so it doesn't slide either.
798
822
  this.drillDirection = null;
823
+ this.endHeightGlide();
799
824
  }
800
825
  openGroupChanged(next, previous) {
801
826
  this.handPanelFocusToList();
@@ -807,6 +832,74 @@ export class PdsCombobox {
807
832
  this.drillDirection = 'in';
808
833
  else if (next === null && previous !== null)
809
834
  this.drillDirection = 'out';
835
+ else
836
+ return;
837
+ // The views differ in height; measured now, before the next one renders, so it can glide.
838
+ const panel = this.listboxEl;
839
+ if (!panel)
840
+ return;
841
+ const from = panel.getBoundingClientRect().height;
842
+ this.drillFromHeight = from;
843
+ // Pinned there until componentDidRender measures the new view, however late: a child component
844
+ // that renders late could otherwise let the browser paint the new view at its full height first.
845
+ panel.style.height = `${from}px`;
846
+ panel.classList.add('pds-combobox__listbox--height-hold');
847
+ this.syncPanelOverflow();
848
+ }
849
+ releaseHeightHold() {
850
+ const panel = this.listboxEl;
851
+ panel === null || panel === void 0 ? void 0 : panel.style.removeProperty('height');
852
+ panel === null || panel === void 0 ? void 0 : panel.classList.remove('pds-combobox__listbox--height-hold');
853
+ }
854
+ /**
855
+ * Hands the dropdown's height before and after a drill to the SCSS glide. Neither is known ahead,
856
+ * so they're measured: CSS can't animate to the height its content turns out to be.
857
+ */
858
+ glideDrillHeight() {
859
+ const from = this.drillFromHeight;
860
+ this.drillFromHeight = undefined;
861
+ const panel = this.listboxEl;
862
+ if (from === undefined || !panel)
863
+ return;
864
+ // A drill back mid-glide starts from where the last one is now, then measures the real height.
865
+ this.releaseHeightHold();
866
+ panel.classList.remove('pds-combobox__listbox--height-glide');
867
+ this.syncPanelOverflow();
868
+ const to = panel.getBoundingClientRect().height;
869
+ if (Math.abs(to - from) < 1) {
870
+ this.endHeightGlide();
871
+ return;
872
+ }
873
+ panel.style.setProperty('--pds-combobox-glide-from', `${from}px`);
874
+ panel.style.setProperty('--pds-combobox-glide-to', `${to}px`);
875
+ panel.classList.add('pds-combobox__listbox--height-glide');
876
+ this.syncPanelOverflow();
877
+ // A glide cut short without ending (the panel hidden mid-way) still cleans up. JSX has no
878
+ // `onAnimationCancel`; adding the same listener again is a no-op.
879
+ panel.addEventListener('animationcancel', this.onHeightGlideCancel);
880
+ }
881
+ /** Ends a glide, and a drill still waiting to glide, so nothing starts once it renders. */
882
+ endHeightGlide() {
883
+ this.drillFromHeight = undefined;
884
+ this.releaseHeightHold();
885
+ const panel = this.listboxEl;
886
+ panel === null || panel === void 0 ? void 0 : panel.classList.remove('pds-combobox__listbox--height-glide');
887
+ this.syncPanelOverflow();
888
+ panel === null || panel === void 0 ? void 0 : panel.style.removeProperty('--pds-combobox-glide-from');
889
+ panel === null || panel === void 0 ? void 0 : panel.style.removeProperty('--pds-combobox-glide-to');
890
+ panel === null || panel === void 0 ? void 0 : panel.removeEventListener('animationcancel', this.onHeightGlideCancel);
891
+ }
892
+ /**
893
+ * With `max-height`, the panel's own scroll, set inline so it outranks the stylesheet: hidden under a
894
+ * fixed search field, and while the height glides (so no scrollbar flashes), otherwise auto.
895
+ */
896
+ syncPanelOverflow() {
897
+ var _a;
898
+ if (((_a = this.maxHeight) !== null && _a !== void 0 ? _a : '') === '' || !this.listboxEl)
899
+ return;
900
+ const gliding = this.listboxEl.classList.contains('pds-combobox__listbox--height-glide') ||
901
+ this.listboxEl.classList.contains('pds-combobox__listbox--height-hold');
902
+ this.listboxEl.style.overflowY = this.usesPanelSearch || gliding ? 'hidden' : 'auto';
810
903
  }
811
904
  /** A flyout with no room beside the dropdown drills in, which can hide the focused search field too. */
812
905
  flyoutFallbackChanged() {
@@ -838,6 +931,7 @@ export class PdsCombobox {
838
931
  }
839
932
  isOpenChanged(isOpen) {
840
933
  if (!isOpen) {
934
+ this.endHeightGlide();
841
935
  this.revealedGroupLabel = null;
842
936
  this.drillDirection = null;
843
937
  this.openGroup = null;
@@ -1197,61 +1291,66 @@ export class PdsCombobox {
1197
1291
  this.updateOptionsFromAsync();
1198
1292
  return;
1199
1293
  }
1200
- // Get all elements from the slot
1294
+ // Get all elements from the slot. Before the first render there's no slot yet, so read the
1295
+ // host's own children that it will hold (through any slot passing options on): otherwise a
1296
+ // combobox created with a `value`, such as a form re-rendered after a pick, paints its
1297
+ // placeholder for a frame, until `slotchange` finds the selected option.
1201
1298
  const slot = (_a = this.el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('slot[name="option"], slot:not([name])');
1202
- if (slot) {
1203
- const allElements = slot.assignedElements({ flatten: true });
1204
- // Separate options from group labels and flatten optgroups
1205
- this.allItems = [];
1206
- this.optionEls = [];
1207
- allElements.forEach(el => {
1208
- if (el.tagName === 'OPTION') {
1209
- this.optionEls.push(el);
1210
- this.allItems.push(el);
1211
- }
1212
- else if (el.tagName === 'OPTGROUP') {
1213
- const optgroup = el;
1214
- this.allItems.push(optgroup);
1215
- // Add optgroup children (options)
1216
- Array.from(optgroup.children).forEach(child => {
1217
- if (child.tagName === 'OPTION') {
1218
- this.optionEls.push(child);
1219
- this.allItems.push(child);
1220
- }
1221
- });
1222
- }
1223
- else if (el.tagName === 'PDS-TEXT') {
1224
- this.allItems.push(el);
1225
- }
1226
- });
1227
- // Set initial selected option based on value property
1228
- let initialSelected = null;
1229
- // Check if value property matches any option
1230
- if (this.value) {
1231
- initialSelected = this.optionEls.find(opt => opt.value === this.value) || null;
1232
- if (initialSelected) {
1233
- // Update the display text to show the option's text content
1234
- this.displayText = this.getOptionLabel(initialSelected);
1235
- // Keep this.value as the actual option value (already correct)
1236
- }
1237
- }
1238
- // For chip triggers, ensure we always have a selected option
1239
- const firstEnabled = this.optionEls.find(opt => !isOptionDisabled(opt));
1240
- if (initialSelected === null && this.trigger === 'chip' && firstEnabled !== undefined) {
1241
- initialSelected = firstEnabled;
1242
- this.value = initialSelected.value;
1243
- this.displayText = this.getOptionLabel(initialSelected);
1244
- console.warn('PDS Combobox: Chip triggers should always have a selected option. Automatically selected the first enabled option.');
1299
+ const allElements = slot
1300
+ ? slot.assignedElements({ flatten: true })
1301
+ : Array.from(this.el.children)
1302
+ .filter(el => !el.getAttribute('slot'))
1303
+ .flatMap(el => (el.tagName === 'SLOT' ? el.assignedElements({ flatten: true }) : [el]));
1304
+ // Separate options from group labels and flatten optgroups
1305
+ this.allItems = [];
1306
+ this.optionEls = [];
1307
+ allElements.forEach(el => {
1308
+ if (el.tagName === 'OPTION') {
1309
+ this.optionEls.push(el);
1310
+ this.allItems.push(el);
1311
+ }
1312
+ else if (el.tagName === 'OPTGROUP') {
1313
+ const optgroup = el;
1314
+ this.allItems.push(optgroup);
1315
+ // Add optgroup children (options)
1316
+ Array.from(optgroup.children).forEach(child => {
1317
+ if (child.tagName === 'OPTION') {
1318
+ this.optionEls.push(child);
1319
+ this.allItems.push(child);
1320
+ }
1321
+ });
1245
1322
  }
1246
- // Update selection if we found a different selected option or if we don't have one
1247
- if (initialSelected && initialSelected !== this.selectedOption) {
1248
- this.setSelectedOption(initialSelected);
1323
+ else if (el.tagName === 'PDS-TEXT') {
1324
+ this.allItems.push(el);
1249
1325
  }
1250
- else if (!this.selectedOption && initialSelected) {
1251
- this.setSelectedOption(initialSelected);
1326
+ });
1327
+ // Set initial selected option based on value property
1328
+ let initialSelected = null;
1329
+ // Check if value property matches any option
1330
+ if (this.value) {
1331
+ initialSelected = this.optionEls.find(opt => opt.value === this.value) || null;
1332
+ if (initialSelected) {
1333
+ // Update the display text to show the option's text content
1334
+ this.displayText = this.getOptionLabel(initialSelected);
1335
+ // Keep this.value as the actual option value (already correct)
1252
1336
  }
1253
- this.filterOptions();
1254
1337
  }
1338
+ // For chip triggers, ensure we always have a selected option
1339
+ const firstEnabled = this.optionEls.find(opt => !isOptionDisabled(opt));
1340
+ if (initialSelected === null && this.trigger === 'chip' && firstEnabled !== undefined) {
1341
+ initialSelected = firstEnabled;
1342
+ this.value = initialSelected.value;
1343
+ this.displayText = this.getOptionLabel(initialSelected);
1344
+ console.warn('PDS Combobox: Chip triggers should always have a selected option. Automatically selected the first enabled option.');
1345
+ }
1346
+ // Update selection if we found a different selected option or if we don't have one
1347
+ if (initialSelected && initialSelected !== this.selectedOption) {
1348
+ this.setSelectedOption(initialSelected);
1349
+ }
1350
+ else if (!this.selectedOption && initialSelected) {
1351
+ this.setSelectedOption(initialSelected);
1352
+ }
1353
+ this.filterOptions();
1255
1354
  }
1256
1355
  // Helper method to get option label, falling back to text content if no label attribute
1257
1356
  getOptionLabel(option) {
@@ -1327,10 +1426,19 @@ export class PdsCombobox {
1327
1426
  else {
1328
1427
  this.selectedOptionChipProps = null;
1329
1428
  }
1429
+ // Immediately update layout content too, the same way: the @Watch('selectedOption') below
1430
+ // isn't active yet the first time this runs, during componentWillLoad's initial selection,
1431
+ // so a preselected layout option would otherwise show its plain label until some later change
1432
+ // triggers the watcher.
1433
+ this.selectedOptionLayoutContent = option && this.isOptionLayout(option)
1434
+ ? this.getOptionLayoutContent(option)
1435
+ : '';
1330
1436
  }
1331
1437
  filterOptions() {
1332
- // A new list replaces the rows a slide was animating, so its end event may never come.
1438
+ // A new list replaces the rows a slide or height glide was animating, so their end events may
1439
+ // never come.
1333
1440
  this.drillDirection = null;
1441
+ this.endHeightGlide();
1334
1442
  // Ensure allItems includes optionEls if not already populated (for edge cases)
1335
1443
  if (this.allItems.length === 0 && this.optionEls.length > 0) {
1336
1444
  this.allItems = [...this.optionEls];
@@ -1349,11 +1457,13 @@ export class PdsCombobox {
1349
1457
  if (groupLabel !== null && groupLabel.toLowerCase().includes(val))
1350
1458
  return true;
1351
1459
  }
1352
- // For layout options, search both text content and data-search-text attribute
1353
- if (this.isOptionLayout(option)) {
1354
- const searchText = option.getAttribute('data-search-text') || option.textContent || '';
1460
+ // `data-search-text`, when set, is what search matches, so an option can be found by more
1461
+ // than its label without a custom layout. A layout option otherwise matches its text.
1462
+ const searchText = option.getAttribute('data-search-text');
1463
+ if (searchText)
1355
1464
  return searchText.toLowerCase().includes(val);
1356
- }
1465
+ if (this.isOptionLayout(option))
1466
+ return (option.textContent || '').toLowerCase().includes(val);
1357
1467
  return this.getOptionLabel(option).toLowerCase().includes(val);
1358
1468
  });
1359
1469
  // Rebuild filtered items maintaining group structure - simplified approach
@@ -1403,6 +1513,7 @@ export class PdsCombobox {
1403
1513
  }
1404
1514
  }
1405
1515
  positionDropdown() {
1516
+ var _a;
1406
1517
  if (!this.triggerEl || !this.listboxEl) {
1407
1518
  return;
1408
1519
  }
@@ -1410,21 +1521,24 @@ export class PdsCombobox {
1410
1521
  const zIndex = this.usesBodyPortal
1411
1522
  ? 'var(--pine-z-index-priority)'
1412
1523
  : 'var(--pine-z-index-raised)';
1413
- this.listboxEl.style.width = this.dropdownWidth;
1524
+ // Unset, the panel's own width applies, which differs with its padding (see the dropdown panel styles).
1525
+ this.listboxEl.style.width = (_a = this.dropdownWidth) !== null && _a !== void 0 ? _a : '';
1414
1526
  if (this.maxHeight) {
1415
1527
  this.listboxEl.style.maxHeight = this.maxHeight;
1416
1528
  // With panel search, the options list scrolls under a fixed search field.
1417
- this.listboxEl.style.overflowY = this.usesPanelSearch ? 'hidden' : 'auto';
1529
+ this.syncPanelOverflow();
1418
1530
  }
1419
1531
  this.listboxEl.offsetHeight;
1420
1532
  return computePosition(this.triggerEl, this.listboxEl, {
1421
1533
  placement: this.dropdownPlacement,
1422
1534
  strategy,
1423
- middleware: [offset(12), flip(), shift({ padding: 5 })],
1424
- }).then(({ x, y }) => {
1535
+ middleware: [offset(8), flip(), shift({ padding: 5 })],
1536
+ }).then(({ x, y, placement }) => {
1425
1537
  if (!this.listboxEl) {
1426
1538
  return;
1427
1539
  }
1540
+ // Where it landed after flipping, so the opening motion moves away from the field.
1541
+ this.listboxEl.dataset.placement = placement;
1428
1542
  Object.assign(this.listboxEl.style, {
1429
1543
  left: `${x}px`,
1430
1544
  top: `${y}px`,
@@ -1710,6 +1824,8 @@ export class PdsCombobox {
1710
1824
  highlightOptionAt(options, index) {
1711
1825
  if (options.length === 0)
1712
1826
  return;
1827
+ // Only the keys move it, so it shows the keyboard's ring, as in the grouped panel.
1828
+ this.keyboardNavigating = true;
1713
1829
  this.highlightedIndex = Math.max(0, Math.min(options.length - 1, index));
1714
1830
  this.updateOptionFocus();
1715
1831
  }
@@ -2137,6 +2253,8 @@ export class PdsCombobox {
2137
2253
  handleOptionClick(option) {
2138
2254
  if (isOptionDisabled(option))
2139
2255
  return;
2256
+ if (this.selectedIcon === null)
2257
+ this.fadesValueIn = true;
2140
2258
  // Update reactive state - single source of truth
2141
2259
  // The @Watch('selectedOption') will handle displayText, value, and form internals
2142
2260
  this.setSelectedOption(option);
@@ -2144,12 +2262,34 @@ export class PdsCombobox {
2144
2262
  this.clearExpandFilterList();
2145
2263
  this.pdsComboboxChange.emit({ value: option.value });
2146
2264
  }
2265
+ /** The row shown while options load: at the top of the list, or of a drilled-in group's options. */
2266
+ renderLoadingRow() {
2267
+ if (!this.loading)
2268
+ return null;
2269
+ const hasSlottedLoading = !this.usesBodyPortal && !!this.el.querySelector('[slot="loading"]');
2270
+ return (h("li", { class: "pds-combobox__loading", role: "presentation" }, hasSlottedLoading ? h("slot", { name: "loading" }) : h("pds-loader", { size: "small" })));
2271
+ }
2272
+ /** The row after the last option while more can load, inside whatever scrolls them. */
2273
+ renderLoadMoreRow() {
2274
+ if (!this.hasMore || this.loading)
2275
+ return null;
2276
+ return (h("li", { class: "pds-combobox__load-more", role: "presentation" }, h("pds-loader", { size: "small" })));
2277
+ }
2278
+ /** Drilled into a group: the group and its place among the panel's entries; otherwise null. */
2279
+ drilledInEntry(entries) {
2280
+ if (this.effectiveGroupDisplay !== 'drill-in' || this.openGroup === null)
2281
+ return null;
2282
+ const position = entries.findIndex(entry => entry.kind === 'group' && entry.group.optgroup === this.openGroup);
2283
+ const open = entries[position];
2284
+ return (open === null || open === void 0 ? void 0 : open.kind) === 'group' ? { group: open.group, position } : null;
2285
+ }
2147
2286
  renderDropdown() {
2148
2287
  if (!this.isOpen) {
2149
2288
  return null;
2150
2289
  }
2151
2290
  const hasSlottedEmpty = !this.usesBodyPortal && !!this.el.querySelector('[slot="empty"]');
2152
- const hasSlottedLoading = !this.usesBodyPortal && !!this.el.querySelector('[slot="loading"]');
2291
+ // Drilled in, the group's options scroll under the row back, so their loading rows go with them.
2292
+ const drilledIn = this.showsGroupedPanel && this.drilledInEntry(this.panelEntries()) !== null;
2153
2293
  const selectableOptions = this.filteredItems.filter(item => item.tagName === 'OPTION');
2154
2294
  const withSearch = this.usesPanelSearch;
2155
2295
  // While a drilled-in group hides the search field, the list takes focus in its place.
@@ -2171,11 +2311,11 @@ export class PdsCombobox {
2171
2311
  this.panelTreeEl = el;
2172
2312
  else
2173
2313
  this.listboxEl = el;
2174
- }, onScroll: this.handleScroll }, this.loading && (h("li", { class: "pds-combobox__loading", role: "presentation" }, hasSlottedLoading ? (h("slot", { name: "loading" })) : (h("pds-loader", { size: "small" })))), !this.loading && this.filteredItems.length === 0 && (h("li", { class: "pds-combobox__empty", role: "presentation" }, hasSlottedEmpty ? (h("slot", { name: "empty" })) : (h("span", null, this.noOptionsFoundLabel)))), this.showsGroupedPanel ? this.renderGroupedPanel() : this.renderListboxItems(selectableOptions.length), this.hasMore && !this.loading && (h("li", { class: "pds-combobox__load-more", role: "presentation" }, h("pds-loader", { size: "small" })))));
2314
+ }, onScroll: this.handleScroll }, !drilledIn && this.renderLoadingRow(), !this.loading && this.filteredItems.length === 0 && (h("li", { class: "pds-combobox__empty", role: "presentation" }, hasSlottedEmpty ? (h("slot", { name: "empty" })) : (h("span", null, this.noOptionsFoundLabel)))), this.showsGroupedPanel ? this.renderGroupedPanel() : this.renderListboxItems(selectableOptions.length), !drilledIn && this.renderLoadMoreRow()));
2175
2315
  if (!withSearch)
2176
2316
  return list;
2177
2317
  // The search field sits above the list; the wrapper is what's positioned and portaled.
2178
- return (h("div", { class: "pds-combobox__listbox pds-combobox__listbox--with-search", ref: el => (this.listboxEl = el), onMouseDown: this.onPanelMouseDown,
2318
+ return (h("div", { class: "pds-combobox__listbox pds-combobox__listbox--with-search", ref: el => (this.listboxEl = el), onAnimationEnd: this.onDrillAnimationEnd, onMouseDown: this.onPanelMouseDown,
2179
2319
  // Portaled, the panel sits outside .pds-combobox, so its focusout wouldn't reach that handler.
2180
2320
  onFocusout: this.usesBodyPortal ? this.onComboboxFocusOut : undefined }, !listTakesFocus && this.renderPanelSearch(), list));
2181
2321
  }
@@ -2315,7 +2455,11 @@ export class PdsCombobox {
2315
2455
  return true;
2316
2456
  }
2317
2457
  renderPanelSearch() {
2318
- return (h("div", { key: "panel-search", class: "pds-combobox__panel-search" }, h("pds-icon", { name: "search", size: "regular", "aria-hidden": "true" }), h("input", { ref: el => (this.panelSearchEl = el), type: "text", class: "pds-combobox__panel-search-input", placeholder: this.searchPlaceholder, value: this.panelQuery, role: "combobox", "aria-label": this.searchOptionsLabel, "aria-haspopup": this.popupRole, "aria-controls": this.listboxId, "aria-autocomplete": "list", "aria-expanded": "true", "aria-activedescendant": this.activeDescendantId, autocomplete: "off", onInput: this.onPanelSearchInput, onKeyDown: this.onPanelSearchKeyDown })));
2458
+ return (h("div", { key: "panel-search", class: {
2459
+ 'pds-combobox__panel-search': true,
2460
+ // Coming back from a group, the search field slides in with the groups.
2461
+ 'pds-combobox__panel-search--drill-out': this.drillDirection === 'out',
2462
+ } }, h("pds-icon", { name: "search", size: "regular", "aria-hidden": "true" }), h("input", { ref: el => (this.panelSearchEl = el), type: "text", class: "pds-combobox__panel-search-input", placeholder: this.searchPlaceholder, value: this.panelQuery, role: "combobox", "aria-label": this.searchOptionsLabel, "aria-haspopup": this.popupRole, "aria-controls": this.listboxId, "aria-autocomplete": "list", "aria-expanded": "true", "aria-activedescendant": this.activeDescendantId, autocomplete: "off", onInput: this.onPanelSearchInput, onKeyDown: this.onPanelSearchKeyDown })));
2319
2463
  }
2320
2464
  /**
2321
2465
  * An option, as a listbox `option` or, given a tree `level`, a `treeitem`. `posinset` and
@@ -2334,6 +2478,8 @@ export class PdsCombobox {
2334
2478
  : badge && `${this.getOptionLabel(option)}, ${badge.label}`, tabindex: this.usesBodyPortal || this.usesPanelSearch || tree ? '-1' : isHighlighted ? '0' : '-1', class: {
2335
2479
  'pds-combobox__option': true,
2336
2480
  'pds-combobox__option--highlighted': isHighlighted,
2481
+ // The keyboard's place, as on the group rows (`--keyboard`).
2482
+ 'pds-combobox__option--keyboard': isHighlighted && this.keyboardNavigating,
2337
2483
  'pds-combobox__option--layout': isLayout,
2338
2484
  'pds-combobox__option--chip': isChip,
2339
2485
  'pds-combobox__option--disabled': isDisabled,
@@ -2395,12 +2541,9 @@ export class PdsCombobox {
2395
2541
  renderGroupedPanel() {
2396
2542
  const entries = this.panelEntries();
2397
2543
  const setsize = entries.length;
2398
- if (this.effectiveGroupDisplay === 'drill-in' && this.openGroup !== null) {
2399
- const position = entries.findIndex(entry => entry.kind === 'group' && entry.group.optgroup === this.openGroup);
2400
- const open = entries[position];
2401
- if ((open === null || open === void 0 ? void 0 : open.kind) === 'group')
2402
- return this.renderGroupBackRow(open.group, { posinset: position + 1, setsize });
2403
- }
2544
+ const drilled = this.drilledInEntry(entries);
2545
+ if (drilled)
2546
+ return this.renderGroupBackRow(drilled.group, { posinset: drilled.position + 1, setsize });
2404
2547
  this.renderedGroups = [];
2405
2548
  return entries.map((entry, position) => {
2406
2549
  const placement = { posinset: position + 1, setsize };
@@ -2428,13 +2571,13 @@ export class PdsCombobox {
2428
2571
  // As the group rows: shaded for the keys, and by `:hover` for the pointer.
2429
2572
  'pds-combobox__group-back--highlighted': this.keyboardNavigating && this.highlightedGroupRow === group.optgroup,
2430
2573
  'pds-combobox__group-back--keyboard': this.keyboardNavigating && this.highlightedGroupRow === group.optgroup,
2431
- }, role: "treeitem", "aria-expanded": "true", "aria-disabled": disabled ? 'true' : undefined, "aria-level": 1, "aria-posinset": posinset, "aria-setsize": setsize, "aria-labelledby": `${id}-label` }, h("div", { class: "pds-combobox__group-row-trigger pds-combobox__group-back-trigger", onMouseDown: this.onOptionMouseDown, onMouseEnter: this.onGroupBackMouseEnter, onClick: this.onGroupBackClick }, h("span", { class: "pds-combobox__group-row-label", id: `${id}-label` }, h("pds-icon", { name: "caret-left", size: "regular", "aria-hidden": "true", class: "pds-combobox__group-row-caret" }), h("span", { class: "visually-hidden" }, this.drillInBackLabel, ": "), group.label)), h("ul", { class: "pds-combobox__drill-in-options", role: "group", "aria-label": group.label }, this.renderGroupOptions(group))));
2574
+ }, role: "treeitem", "aria-expanded": "true", "aria-disabled": disabled ? 'true' : undefined, "aria-level": 1, "aria-posinset": posinset, "aria-setsize": setsize, "aria-labelledby": `${id}-label` }, h("div", { class: "pds-combobox__group-row-trigger pds-combobox__group-back-trigger", onMouseDown: this.onOptionMouseDown, onMouseEnter: this.onGroupBackMouseEnter, onClick: this.onGroupBackClick }, h("span", { class: "pds-combobox__group-row-label", id: `${id}-label` }, h("pds-icon", { name: "caret-left", size: "regular", "aria-hidden": "true", class: "pds-combobox__group-row-caret" }), h("span", { class: "visually-hidden" }, this.drillInBackLabel, ": "), group.label)), h("ul", { class: "pds-combobox__drill-in-options", role: "group", "aria-label": group.label, onScroll: this.handleScroll }, this.renderLoadingRow(), this.renderGroupOptions(group), this.renderLoadMoreRow())));
2432
2575
  }
2433
2576
  renderGroupRow(group, groupIndex, { posinset, setsize }) {
2434
2577
  const flyout = this.effectiveGroupDisplay === 'flyout';
2435
2578
  const isOpen = flyout && this.openGroup === group.optgroup;
2436
- // Drill-in shades a group row only for the keys: not for the group holding the selection, or the
2437
- // row the pointer or a click-open left highlighted, which read as picked. `:hover` covers the pointer.
2579
+ // `--has-selection` is a state hook only (tests read it), not styled. The fill follows
2580
+ // `--highlighted` (always in flyout, in drill-in only for the keys) and a flyout's `--open` row.
2438
2581
  const hasSelection = flyout && group.options.some(({ option }) => this.isOptionSelected(option));
2439
2582
  const isCurrent = this.highlightedGroupRow === group.optgroup;
2440
2583
  const disabled = isGroupDisabled(group);
@@ -2465,6 +2608,7 @@ export class PdsCombobox {
2465
2608
  'pds-combobox__button-trigger-label': true,
2466
2609
  'pds-combobox__button-trigger-label--placeholder': !this.selectedLabel,
2467
2610
  'pds-combobox__button-trigger-label--with-icon': icon !== null,
2611
+ 'pds-combobox__button-trigger-label--value-in': icon !== null && this.fadesValueIn,
2468
2612
  } }, icon !== null && (
2469
2613
  // `name`, not `icon`: `icon` also loads URLs and data: SVGs, unsanitized.
2470
2614
  h("pds-icon", { name: icon, size: "regular", "aria-hidden": "true", class: "pds-combobox__button-trigger-icon" })), this.truncate ? (
@@ -2605,13 +2749,13 @@ export class PdsCombobox {
2605
2749
  ]
2606
2750
  .filter(Boolean)
2607
2751
  .join(' ');
2608
- return (h(Host, { key: '104eb1c4cdca4494b10dea660e27a98b0c18bf64', "aria-disabled": this.disabled ? 'true' : null }, h("div", { key: '2548ff2b304bb6a5a249b5059a0b60b55cdf2152', class: "pds-combobox", tabIndex: -1, onFocusout: this.onComboboxFocusOut, part: "combobox" }, this.hasVisibleLabel && (h("label", { key: '7a261c72452ca7a278e1067e41c6eed52f29edc8', htmlFor: this.trigger === 'input' ? this.componentId : undefined, id: this.labelId, class: "pds-combobox__label", onClick: this.onLabelClick }, this.label)), this.trigger === 'input' ? (h("div", { class: "pds-combobox__input-wrapper", style: { width: this.triggerWidth } }, h("input", { ref: el => {
2752
+ return (h(Host, { key: '3a7f09752d2dff0fbf653852cd9ea474a44c61d5', "aria-disabled": this.disabled ? 'true' : null }, h("div", { key: '56d3bf86655abfd945228ee0bc3a556a6ad766b3', class: "pds-combobox", tabIndex: -1, onFocusout: this.onComboboxFocusOut, part: "combobox" }, this.hasVisibleLabel && (h("label", { key: 'a07f37d62bca1b15df3aa258d94c0df4609b93b3', htmlFor: this.trigger === 'input' ? this.componentId : undefined, id: this.labelId, class: "pds-combobox__label", onClick: this.onLabelClick }, this.label)), this.trigger === 'input' ? (h("div", { class: "pds-combobox__input-wrapper", style: { width: this.triggerWidth } }, h("input", { ref: el => {
2609
2753
  this.inputEl = el;
2610
2754
  this.triggerEl = el;
2611
2755
  }, class: {
2612
2756
  'pds-combobox__input': true,
2613
2757
  'pds-combobox__input--invalid': this.isInvalid(),
2614
- }, type: "text", role: "combobox", "aria-autocomplete": "list", "aria-haspopup": this.inputPopupRole === 'tree' ? 'tree' : undefined, "aria-controls": this.listboxId, "aria-describedby": assignDescription(this.componentId, this.isInvalid(), this.helperMessage, this.errorMessage), "aria-invalid": this.isInvalid() ? 'true' : undefined, "aria-activedescendant": this.usesPanelSearch ? undefined : this.activeDescendantId, "aria-expanded": this.isOpen ? 'true' : 'false', "aria-disabled": this.disabled ? 'true' : 'false', "aria-label": this.hideLabel ? this.label : undefined, id: this.componentId, value: this.displayText, placeholder: this.placeholder, disabled: this.disabled, onInput: this.handleInput, onClick: this.handleInputClick, onKeyDown: this.handleKeyDown, autocomplete: "off", part: "input" }), h("pds-icon", { icon: "enlarge", "aria-hidden": "true", class: "pds-combobox__input-icon" }))) : this.trigger === 'chip' ? (h("div", { class: this.getChipTriggerClass(), style: { width: this.triggerWidth }, role: this.usesPanelSearch ? 'button' : 'combobox', "aria-haspopup": this.triggerPopupRole, "aria-controls": this.listboxId, "aria-describedby": assignDescription(this.componentId, this.isInvalid(), this.helperMessage, this.errorMessage), "aria-invalid": this.isInvalid() ? 'true' : undefined, "aria-activedescendant": this.usesPanelSearch ? undefined : this.activeDescendantId, "aria-expanded": this.isOpen ? 'true' : 'false', "aria-disabled": this.disabled ? 'true' : 'false', "aria-label": this.triggerAriaLabel, "aria-labelledby": this.triggerLabelledBy, id: this.componentId, tabIndex: this.disabled ? -1 : 0, onClick: this.onButtonTriggerClick, "data-layout": this.customTriggerContent, onKeyDown: this.onButtonTriggerKeyDown, onKeyUp: this.onButtonTriggerKeyUp, ref: el => (this.triggerEl = el), part: "chip-trigger" }, this.renderChipTriggerContent())) : (h("div", { class: triggerClass, style: { width: this.triggerWidth }, role: this.usesPanelSearch ? 'button' : 'combobox', "aria-haspopup": this.triggerPopupRole, "aria-controls": this.listboxId, "aria-describedby": assignDescription(this.componentId, this.isInvalid(), this.helperMessage, this.errorMessage), "aria-invalid": this.isInvalid() ? 'true' : undefined, "aria-activedescendant": this.usesPanelSearch ? undefined : this.activeDescendantId, "aria-expanded": this.isOpen ? 'true' : 'false', "aria-disabled": this.disabled ? 'true' : 'false', "aria-label": this.triggerAriaLabel, "aria-labelledby": this.triggerLabelledBy, id: this.componentId, tabIndex: this.disabled ? -1 : 0, onClick: this.onButtonTriggerClick, "data-layout": this.customTriggerContent, onKeyDown: this.onButtonTriggerKeyDown, onKeyUp: this.onButtonTriggerKeyUp, onMouseEnter: this.truncate ? this.onButtonTriggerMouseEnter : undefined, ref: el => (this.triggerEl = el), part: "button-trigger" }, this.renderButtonTriggerContent())), this.renderMessages(), h("div", { key: 'ffd3bc72b34a7278f3fa706a236017a26b86ea3f', style: { display: 'none' } }, h("slot", { key: 'f47a81191ad7fd8c6bf63cf8ef39934cbf7fd28c', onSlotchange: () => this.updateOptions() })), this.renderDropdown(), this.groupDisplay !== 'inline' && [
2758
+ }, type: "text", role: "combobox", "aria-autocomplete": "list", "aria-haspopup": this.inputPopupRole === 'tree' ? 'tree' : undefined, "aria-controls": this.listboxId, "aria-describedby": assignDescription(this.componentId, this.isInvalid(), this.helperMessage, this.errorMessage), "aria-invalid": this.isInvalid() ? 'true' : undefined, "aria-activedescendant": this.usesPanelSearch ? undefined : this.activeDescendantId, "aria-expanded": this.isOpen ? 'true' : 'false', "aria-disabled": this.disabled ? 'true' : 'false', "aria-label": this.hideLabel ? this.label : undefined, id: this.componentId, value: this.displayText, placeholder: this.placeholder, disabled: this.disabled, onInput: this.handleInput, onClick: this.handleInputClick, onKeyDown: this.handleKeyDown, autocomplete: "off", part: "input" }), h("pds-icon", { icon: "enlarge", "aria-hidden": "true", class: "pds-combobox__input-icon" }))) : this.trigger === 'chip' ? (h("div", { class: this.getChipTriggerClass(), style: { width: this.triggerWidth }, role: this.usesPanelSearch ? 'button' : 'combobox', "aria-haspopup": this.triggerPopupRole, "aria-controls": this.listboxId, "aria-describedby": assignDescription(this.componentId, this.isInvalid(), this.helperMessage, this.errorMessage), "aria-invalid": this.isInvalid() ? 'true' : undefined, "aria-activedescendant": this.usesPanelSearch ? undefined : this.activeDescendantId, "aria-expanded": this.isOpen ? 'true' : 'false', "aria-disabled": this.disabled ? 'true' : 'false', "aria-label": this.triggerAriaLabel, "aria-labelledby": this.triggerLabelledBy, id: this.componentId, tabIndex: this.disabled ? -1 : 0, onClick: this.onButtonTriggerClick, "data-layout": this.customTriggerContent, onKeyDown: this.onButtonTriggerKeyDown, onKeyUp: this.onButtonTriggerKeyUp, ref: el => (this.triggerEl = el), part: "chip-trigger" }, this.renderChipTriggerContent())) : (h("div", { class: triggerClass, style: { width: this.triggerWidth }, role: this.usesPanelSearch ? 'button' : 'combobox', "aria-haspopup": this.triggerPopupRole, "aria-controls": this.listboxId, "aria-describedby": assignDescription(this.componentId, this.isInvalid(), this.helperMessage, this.errorMessage), "aria-invalid": this.isInvalid() ? 'true' : undefined, "aria-activedescendant": this.usesPanelSearch ? undefined : this.activeDescendantId, "aria-expanded": this.isOpen ? 'true' : 'false', "aria-disabled": this.disabled ? 'true' : 'false', "aria-label": this.triggerAriaLabel, "aria-labelledby": this.triggerLabelledBy, id: this.componentId, tabIndex: this.disabled ? -1 : 0, onClick: this.onButtonTriggerClick, "data-layout": this.customTriggerContent, onKeyDown: this.onButtonTriggerKeyDown, onKeyUp: this.onButtonTriggerKeyUp, onMouseEnter: this.truncate ? this.onButtonTriggerMouseEnter : undefined, ref: el => (this.triggerEl = el), part: "button-trigger" }, this.renderButtonTriggerContent())), this.renderMessages(), h("div", { key: '0c0accd76b79aba9fa3072eb68800102d458d0a7', style: { display: 'none' } }, h("slot", { key: 'be9cc4c897788342bbc96321f033ed4fd97e80ff', onSlotchange: () => this.updateOptions() })), this.renderDropdown(), this.groupDisplay !== 'inline' && [
2615
2759
  h("span", { key: "drill-status", class: "visually-hidden", role: "status", "aria-live": "polite" }, this.isOpen && this.effectiveGroupDisplay === 'drill-in' && this.openGroup !== null ? this.openGroup.label : ''),
2616
2760
  // Its own region: sharing one, revealing a row then opening it would leave the text the
2617
2761
  // same, and opening the group would go unannounced.
@@ -2788,19 +2932,15 @@ export class PdsCombobox {
2788
2932
  "references": {}
2789
2933
  },
2790
2934
  "required": false,
2791
- "optional": false,
2935
+ "optional": true,
2792
2936
  "docs": {
2793
- "tags": [{
2794
- "name": "default",
2795
- "text": "'236px'"
2796
- }],
2797
- "text": "Width of the dropdown. Any valid CSS width value."
2937
+ "tags": [],
2938
+ "text": "Width of the dropdown, including its padding. Any valid CSS width value.\nWithout it, the dropdown is 252px wide, 244px with grouped options and 236px with a panel search."
2798
2939
  },
2799
2940
  "getter": false,
2800
2941
  "setter": false,
2801
2942
  "reflect": false,
2802
- "attribute": "dropdown-width",
2803
- "defaultValue": "'236px'"
2943
+ "attribute": "dropdown-width"
2804
2944
  },
2805
2945
  "dropdownMount": {
2806
2946
  "type": "string",
@@ -2884,15 +3024,15 @@ export class PdsCombobox {
2884
3024
  "docs": {
2885
3025
  "tags": [{
2886
3026
  "name": "default",
2887
- "text": "'380px'"
3027
+ "text": "'388px'"
2888
3028
  }],
2889
- "text": "Maximum width of a group's flyout when `group-display` is `flyout`. Any valid CSS width value."
3029
+ "text": "Maximum width of a group's flyout when `group-display` is `flyout`. Any valid CSS width\nvalue, including its padding."
2890
3030
  },
2891
3031
  "getter": false,
2892
3032
  "setter": false,
2893
3033
  "reflect": false,
2894
3034
  "attribute": "flyout-max-width",
2895
- "defaultValue": "'380px'"
3035
+ "defaultValue": "'388px'"
2896
3036
  },
2897
3037
  "flyoutMinWidth": {
2898
3038
  "type": "string",
@@ -2907,15 +3047,15 @@ export class PdsCombobox {
2907
3047
  "docs": {
2908
3048
  "tags": [{
2909
3049
  "name": "default",
2910
- "text": "'280px'"
3050
+ "text": "'288px'"
2911
3051
  }],
2912
- "text": "Minimum width of a group's flyout when `group-display` is `flyout`. Any valid CSS width value.\nThe flyout is as wide as its options, between this and `flyout-max-width`."
3052
+ "text": "Minimum width of a group's flyout when `group-display` is `flyout`. Any valid CSS width\nvalue, including its padding. The flyout is as wide as its options, between this and\n`flyout-max-width`."
2913
3053
  },
2914
3054
  "getter": false,
2915
3055
  "setter": false,
2916
3056
  "reflect": false,
2917
3057
  "attribute": "flyout-min-width",
2918
- "defaultValue": "'280px'"
3058
+ "defaultValue": "'288px'"
2919
3059
  },
2920
3060
  "groupDisplay": {
2921
3061
  "type": "string",
@@ -3369,7 +3509,7 @@ export class PdsCombobox {
3369
3509
  "optional": false,
3370
3510
  "docs": {
3371
3511
  "tags": [],
3372
- "text": "The value of the combobox input."
3512
+ "text": "The `value` of the selected option."
3373
3513
  },
3374
3514
  "getter": false,
3375
3515
  "setter": false,