@pine-ds/core 4.3.0 → 4.4.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 (526) hide show
  1. package/components/closest.js +1 -1
  2. package/components/floating-ui.dom.js +1 -1
  3. package/components/i18n-format.js +1 -1
  4. package/components/index.d.ts +2 -0
  5. package/components/index.js +1 -1
  6. package/components/index2.js +1 -1
  7. package/components/mock-pds-modal.js +1 -1
  8. package/components/pds-button2.js +1 -1
  9. package/components/pds-checkbox2.js +1 -1
  10. package/components/pds-chip2.js +1 -1
  11. package/components/pds-combobox.js +2 -2
  12. package/components/pds-container.js +1 -1
  13. package/components/pds-copytext.js +1 -1
  14. package/components/pds-datepicker.d.ts +11 -0
  15. package/components/pds-datepicker.js +1 -0
  16. package/components/pds-divider.js +1 -1
  17. package/components/pds-drawer-content.js +1 -1
  18. package/components/pds-drawer-footer.js +1 -1
  19. package/components/pds-drawer-header.js +1 -1
  20. package/components/pds-drawer.js +1 -1
  21. package/components/pds-dropdown-menu-item.js +1 -1
  22. package/components/pds-dropdown-menu-separator.js +1 -1
  23. package/components/pds-dropdown-menu.js +1 -1
  24. package/components/pds-filter.js +1 -1
  25. package/components/pds-filters.js +1 -1
  26. package/components/pds-image.js +1 -1
  27. package/components/pds-input.js +1 -1
  28. package/components/pds-input2.js +1 -0
  29. package/components/pds-link2.js +1 -1
  30. package/components/pds-loader2.js +1 -1
  31. package/components/pds-modal-content.js +1 -1
  32. package/components/pds-modal-footer.js +1 -1
  33. package/components/pds-modal-header.js +1 -1
  34. package/components/pds-modal2.js +1 -1
  35. package/components/pds-multiselect.js +1 -1
  36. package/components/pds-popover.js +1 -1
  37. package/components/pds-progress.js +1 -1
  38. package/components/pds-property.js +1 -1
  39. package/components/pds-radio-group.js +1 -1
  40. package/components/pds-radio.js +1 -1
  41. package/components/pds-row.js +1 -1
  42. package/components/pds-select.js +1 -1
  43. package/components/pds-sortable-item.js +1 -1
  44. package/components/pds-sortable.js +2 -2
  45. package/components/pds-switch.js +1 -1
  46. package/components/pds-table-body.js +1 -1
  47. package/components/pds-table-cell2.js +1 -1
  48. package/components/pds-table-head-cell2.js +1 -1
  49. package/components/pds-table-head.js +1 -1
  50. package/components/pds-table-row.js +1 -1
  51. package/components/pds-tabpanel.js +1 -1
  52. package/components/pds-tabs.js +1 -1
  53. package/components/pds-text2.js +1 -1
  54. package/components/pds-textarea.js +1 -1
  55. package/components/pds-toast.js +1 -1
  56. package/components/pds-tooltip.js +1 -1
  57. package/components/utils.js +1 -1
  58. package/dist/cjs/closest-D0qyYtJ3.js +20 -0
  59. package/dist/cjs/{floating-ui.dom-BZk7Blsu.js → floating-ui.dom-Dc8Anyel.js} +79 -0
  60. package/dist/cjs/{i18n-format-CrpIhahc.js → i18n-format-BD0PmYzT.js} +1 -0
  61. package/dist/cjs/{index-CaLa1zy9.js → index-Bl5KnQay.js} +4 -1
  62. package/dist/cjs/{index-DYvijwA6.js → index-D-QQKB0y.js} +8 -0
  63. package/dist/cjs/loader.cjs.js +2 -2
  64. package/dist/cjs/mock-pds-modal.cjs.entry.js +3 -3
  65. package/dist/cjs/pds-accordion.cjs.entry.js +2 -2
  66. package/dist/cjs/pds-alert.cjs.entry.js +1 -1
  67. package/dist/cjs/pds-avatar.cjs.entry.js +2 -2
  68. package/dist/cjs/pds-box.cjs.entry.js +2 -2
  69. package/dist/cjs/pds-button.cjs.entry.js +53 -4
  70. package/dist/cjs/pds-checkbox.cjs.entry.js +14 -6
  71. package/dist/cjs/pds-chip.cjs.entry.js +6 -6
  72. package/dist/cjs/pds-combobox.cjs.entry.js +1225 -117
  73. package/dist/cjs/pds-container.cjs.entry.js +2 -2
  74. package/dist/cjs/pds-copytext.cjs.entry.js +5 -5
  75. package/dist/cjs/pds-datepicker.cjs.entry.js +1962 -0
  76. package/dist/cjs/pds-divider.cjs.entry.js +2 -2
  77. package/dist/cjs/pds-drawer-content.cjs.entry.js +2 -2
  78. package/dist/cjs/pds-drawer-footer.cjs.entry.js +2 -2
  79. package/dist/cjs/pds-drawer-header.cjs.entry.js +2 -2
  80. package/dist/cjs/pds-drawer.cjs.entry.js +11 -4
  81. package/dist/cjs/pds-dropdown-menu-item.cjs.entry.js +2 -2
  82. package/dist/cjs/pds-dropdown-menu-separator.cjs.entry.js +2 -2
  83. package/dist/cjs/pds-dropdown-menu.cjs.entry.js +11 -4
  84. package/dist/cjs/pds-filter.cjs.entry.js +3 -3
  85. package/dist/cjs/pds-filters.cjs.entry.js +2 -2
  86. package/dist/cjs/pds-icon.cjs.entry.js +1 -1
  87. package/dist/cjs/pds-image.cjs.entry.js +3 -3
  88. package/dist/cjs/pds-input.cjs.entry.js +8 -5
  89. package/dist/cjs/pds-link.cjs.entry.js +5 -5
  90. package/dist/cjs/pds-loader.cjs.entry.js +2 -2
  91. package/dist/cjs/pds-modal-content.cjs.entry.js +3 -3
  92. package/dist/cjs/pds-modal-footer.cjs.entry.js +2 -2
  93. package/dist/cjs/pds-modal-header.cjs.entry.js +2 -2
  94. package/dist/cjs/pds-modal.cjs.entry.js +12 -6
  95. package/dist/cjs/pds-multiselect.cjs.entry.js +264 -51
  96. package/dist/cjs/pds-popover.cjs.entry.js +30 -12
  97. package/dist/cjs/pds-progress.cjs.entry.js +3 -3
  98. package/dist/cjs/pds-property.cjs.entry.js +2 -2
  99. package/dist/cjs/pds-radio-group.cjs.entry.js +5 -5
  100. package/dist/cjs/pds-radio.cjs.entry.js +5 -5
  101. package/dist/cjs/pds-row.cjs.entry.js +2 -2
  102. package/dist/cjs/pds-select.cjs.entry.js +3 -3
  103. package/dist/cjs/pds-sortable-item.cjs.entry.js +3 -3
  104. package/dist/cjs/pds-sortable.cjs.entry.js +2 -2
  105. package/dist/cjs/pds-switch.cjs.entry.js +14 -6
  106. package/dist/cjs/pds-tab.cjs.entry.js +1 -1
  107. package/dist/cjs/pds-table-body.cjs.entry.js +2 -2
  108. package/dist/cjs/pds-table-cell.cjs.entry.js +5 -5
  109. package/dist/cjs/pds-table-head-cell.cjs.entry.js +4 -4
  110. package/dist/cjs/pds-table-head.cjs.entry.js +3 -3
  111. package/dist/cjs/pds-table-row.cjs.entry.js +3 -3
  112. package/dist/cjs/pds-table.cjs.entry.js +1 -1
  113. package/dist/cjs/pds-tabpanel.cjs.entry.js +2 -2
  114. package/dist/cjs/pds-tabs.cjs.entry.js +2 -2
  115. package/dist/cjs/pds-text.cjs.entry.js +5 -5
  116. package/dist/cjs/pds-textarea.cjs.entry.js +14 -9
  117. package/dist/cjs/pds-toast.cjs.entry.js +4 -4
  118. package/dist/cjs/pds-tooltip.cjs.entry.js +4 -4
  119. package/dist/cjs/pine-core.cjs.js +2 -2
  120. package/dist/cjs/{truncation-tooltip-Bps7_rUy.js → truncation-tooltip-CYgQfBLt.js} +1 -1
  121. package/dist/cjs/{utils-KWALOgy9.js → utils-BhRmyxT8.js} +35 -4
  122. package/dist/collection/collection-manifest.json +1 -0
  123. package/dist/collection/components/pds-button/pds-button.js +53 -2
  124. package/dist/collection/components/pds-checkbox/pds-checkbox.css +7 -0
  125. package/dist/collection/components/pds-checkbox/pds-checkbox.js +19 -3
  126. package/dist/collection/components/pds-chip/pds-chip.js +1 -1
  127. package/dist/collection/components/pds-combobox/grouped-options-panel.js +262 -0
  128. package/dist/collection/components/pds-combobox/pds-combobox.css +242 -13
  129. package/dist/collection/components/pds-combobox/pds-combobox.js +1128 -114
  130. package/dist/collection/components/pds-combobox/stories/pds-combobox.stories.js +240 -0
  131. package/dist/collection/components/pds-container/pds-container.js +1 -1
  132. package/dist/collection/components/pds-copytext/pds-copytext.js +1 -1
  133. package/dist/collection/components/pds-datepicker/calendar-portal.js +136 -0
  134. package/dist/collection/components/pds-datepicker/date-utils.js +132 -0
  135. package/dist/collection/components/pds-datepicker/datepicker-interface.js +1 -0
  136. package/dist/collection/components/pds-datepicker/pds-datepicker.css +545 -0
  137. package/dist/collection/components/pds-datepicker/pds-datepicker.js +2406 -0
  138. package/dist/collection/components/pds-datepicker/presets.js +96 -0
  139. package/dist/collection/components/pds-datepicker/stories/pds-datepicker.stories.js +195 -0
  140. package/dist/collection/components/pds-datepicker/value.js +238 -0
  141. package/dist/collection/components/pds-divider/pds-divider.js +1 -1
  142. package/dist/collection/components/pds-drawer/pds-drawer-content/pds-drawer-content.js +1 -1
  143. package/dist/collection/components/pds-drawer/pds-drawer-footer/pds-drawer-footer.js +1 -1
  144. package/dist/collection/components/pds-drawer/pds-drawer-header/pds-drawer-header.js +1 -1
  145. package/dist/collection/components/pds-drawer/pds-drawer.css +4 -0
  146. package/dist/collection/components/pds-drawer/pds-drawer.js +9 -2
  147. package/dist/collection/components/pds-dropdown-menu/pds-dropdown-menu-item/pds-dropdown-menu-item.js +1 -1
  148. package/dist/collection/components/pds-dropdown-menu/pds-dropdown-menu-separator/pds-dropdown-menu-separator.js +1 -1
  149. package/dist/collection/components/pds-dropdown-menu/pds-dropdown-menu.js +9 -2
  150. package/dist/collection/components/pds-filters/pds-filter/pds-filter.js +1 -1
  151. package/dist/collection/components/pds-filters/pds-filters.js +1 -1
  152. package/dist/collection/components/pds-image/pds-image.js +2 -2
  153. package/dist/collection/components/pds-input/pds-input.js +6 -3
  154. package/dist/collection/components/pds-link/pds-link.js +2 -2
  155. package/dist/collection/components/pds-loader/pds-loader.js +1 -1
  156. package/dist/collection/components/pds-modal/pds-modal-content/pds-modal-content.js +2 -2
  157. package/dist/collection/components/pds-modal/pds-modal-footer/pds-modal-footer.js +1 -1
  158. package/dist/collection/components/pds-modal/pds-modal-header/pds-modal-header.js +1 -1
  159. package/dist/collection/components/pds-modal/pds-modal.css +16 -0
  160. package/dist/collection/components/pds-modal/pds-modal.js +10 -4
  161. package/dist/collection/components/pds-modal/test/mock-pds-modal.js +1 -1
  162. package/dist/collection/components/pds-multiselect/pds-multiselect.css +19 -1
  163. package/dist/collection/components/pds-multiselect/pds-multiselect.js +390 -47
  164. package/dist/collection/components/pds-multiselect/stories/pds-multiselect.stories.js +136 -1
  165. package/dist/collection/components/pds-popover/pds-popover.js +29 -11
  166. package/dist/collection/components/pds-progress/pds-progress.js +1 -1
  167. package/dist/collection/components/pds-property/pds-property.js +1 -1
  168. package/dist/collection/components/pds-radio/pds-radio.js +3 -3
  169. package/dist/collection/components/pds-radio-group/pds-radio-group.js +3 -3
  170. package/dist/collection/components/pds-row/pds-row.js +1 -1
  171. package/dist/collection/components/pds-select/pds-select.js +1 -1
  172. package/dist/collection/components/pds-sortable/pds-sortable-item/pds-sortable-item.js +1 -1
  173. package/dist/collection/components/pds-sortable/pds-sortable.js +1 -1
  174. package/dist/collection/components/pds-switch/pds-switch.css +3 -0
  175. package/dist/collection/components/pds-switch/pds-switch.js +20 -4
  176. package/dist/collection/components/pds-table/pds-table-body/pds-table-body.js +1 -1
  177. package/dist/collection/components/pds-table/pds-table-cell/pds-table-cell.js +2 -2
  178. package/dist/collection/components/pds-table/pds-table-head/pds-table-head.js +1 -1
  179. package/dist/collection/components/pds-table/pds-table-head-cell/pds-table-head-cell.js +2 -2
  180. package/dist/collection/components/pds-table/pds-table-row/pds-table-row.js +1 -1
  181. package/dist/collection/components/pds-tabs/pds-tabpanel/pds-tabpanel.js +1 -1
  182. package/dist/collection/components/pds-tabs/pds-tabs.js +1 -1
  183. package/dist/collection/components/pds-text/pds-text.js +1 -1
  184. package/dist/collection/components/pds-textarea/pds-textarea.js +11 -6
  185. package/dist/collection/components/pds-toast/pds-toast.js +3 -3
  186. package/dist/collection/components/pds-tooltip/pds-tooltip.js +2 -2
  187. package/dist/collection/utils/closest.js +8 -0
  188. package/dist/collection/utils/utils.js +33 -4
  189. package/dist/docs.json +1933 -59
  190. package/dist/esm/closest-DHPzKMVS.js +17 -0
  191. package/dist/esm/{floating-ui.dom-DDtwbwIl.js → floating-ui.dom-BPqJgIq6.js} +79 -1
  192. package/dist/esm/{i18n-format-BKsJZTyn.js → i18n-format-BJgZHCWe.js} +1 -1
  193. package/dist/esm/{index-DcT8--Dn.js → index-CB8Yh0Nt.js} +4 -1
  194. package/dist/esm/{index-BU1hN5Vy.js → index-DxI-61GK.js} +5 -1
  195. package/dist/esm/loader.js +3 -3
  196. package/dist/esm/mock-pds-modal.entry.js +3 -3
  197. package/dist/esm/pds-accordion.entry.js +2 -2
  198. package/dist/esm/pds-alert.entry.js +1 -1
  199. package/dist/esm/pds-avatar.entry.js +2 -2
  200. package/dist/esm/pds-box.entry.js +2 -2
  201. package/dist/esm/pds-button.entry.js +53 -4
  202. package/dist/esm/pds-checkbox.entry.js +14 -6
  203. package/dist/esm/pds-chip.entry.js +6 -6
  204. package/dist/esm/pds-combobox.entry.js +1225 -117
  205. package/dist/esm/pds-container.entry.js +2 -2
  206. package/dist/esm/pds-copytext.entry.js +5 -5
  207. package/dist/esm/pds-datepicker.entry.js +1960 -0
  208. package/dist/esm/pds-divider.entry.js +2 -2
  209. package/dist/esm/pds-drawer-content.entry.js +2 -2
  210. package/dist/esm/pds-drawer-footer.entry.js +2 -2
  211. package/dist/esm/pds-drawer-header.entry.js +2 -2
  212. package/dist/esm/pds-drawer.entry.js +11 -4
  213. package/dist/esm/pds-dropdown-menu-item.entry.js +2 -2
  214. package/dist/esm/pds-dropdown-menu-separator.entry.js +2 -2
  215. package/dist/esm/pds-dropdown-menu.entry.js +11 -4
  216. package/dist/esm/pds-filter.entry.js +3 -3
  217. package/dist/esm/pds-filters.entry.js +2 -2
  218. package/dist/esm/pds-icon.entry.js +1 -1
  219. package/dist/esm/pds-image.entry.js +3 -3
  220. package/dist/esm/pds-input.entry.js +8 -5
  221. package/dist/esm/pds-link.entry.js +5 -5
  222. package/dist/esm/pds-loader.entry.js +2 -2
  223. package/dist/esm/pds-modal-content.entry.js +3 -3
  224. package/dist/esm/pds-modal-footer.entry.js +2 -2
  225. package/dist/esm/pds-modal-header.entry.js +2 -2
  226. package/dist/esm/pds-modal.entry.js +12 -6
  227. package/dist/esm/pds-multiselect.entry.js +264 -51
  228. package/dist/esm/pds-popover.entry.js +30 -12
  229. package/dist/esm/pds-progress.entry.js +3 -3
  230. package/dist/esm/pds-property.entry.js +2 -2
  231. package/dist/esm/pds-radio-group.entry.js +5 -5
  232. package/dist/esm/pds-radio.entry.js +5 -5
  233. package/dist/esm/pds-row.entry.js +2 -2
  234. package/dist/esm/pds-select.entry.js +3 -3
  235. package/dist/esm/pds-sortable-item.entry.js +3 -3
  236. package/dist/esm/pds-sortable.entry.js +2 -2
  237. package/dist/esm/pds-switch.entry.js +14 -6
  238. package/dist/esm/pds-tab.entry.js +1 -1
  239. package/dist/esm/pds-table-body.entry.js +2 -2
  240. package/dist/esm/pds-table-cell.entry.js +5 -5
  241. package/dist/esm/pds-table-head-cell.entry.js +4 -4
  242. package/dist/esm/pds-table-head.entry.js +3 -3
  243. package/dist/esm/pds-table-row.entry.js +3 -3
  244. package/dist/esm/pds-table.entry.js +1 -1
  245. package/dist/esm/pds-tabpanel.entry.js +2 -2
  246. package/dist/esm/pds-tabs.entry.js +2 -2
  247. package/dist/esm/pds-text.entry.js +5 -5
  248. package/dist/esm/pds-textarea.entry.js +14 -9
  249. package/dist/esm/pds-toast.entry.js +4 -4
  250. package/dist/esm/pds-tooltip.entry.js +4 -4
  251. package/dist/esm/pine-core.js +3 -3
  252. package/dist/esm/{truncation-tooltip-CdtEBn_5.js → truncation-tooltip-_902ENWC.js} +1 -1
  253. package/dist/esm/{utils-u_0lxWnH.js → utils-OYK5-nwe.js} +34 -5
  254. package/dist/esm-es5/closest-DHPzKMVS.js +1 -0
  255. package/dist/esm-es5/floating-ui.dom-BPqJgIq6.js +1 -0
  256. package/dist/esm-es5/{i18n-format-BKsJZTyn.js → i18n-format-BJgZHCWe.js} +1 -1
  257. package/dist/esm-es5/index-CB8Yh0Nt.js +2 -0
  258. package/dist/esm-es5/index-DxI-61GK.js +1 -0
  259. package/dist/esm-es5/loader.js +1 -1
  260. package/dist/esm-es5/mock-pds-modal.entry.js +1 -1
  261. package/dist/esm-es5/pds-accordion.entry.js +1 -1
  262. package/dist/esm-es5/pds-alert.entry.js +1 -1
  263. package/dist/esm-es5/pds-avatar.entry.js +1 -1
  264. package/dist/esm-es5/pds-box.entry.js +1 -1
  265. package/dist/esm-es5/pds-button.entry.js +1 -1
  266. package/dist/esm-es5/pds-checkbox.entry.js +1 -1
  267. package/dist/esm-es5/pds-chip.entry.js +1 -1
  268. package/dist/esm-es5/pds-combobox.entry.js +2 -2
  269. package/dist/esm-es5/pds-container.entry.js +1 -1
  270. package/dist/esm-es5/pds-copytext.entry.js +1 -1
  271. package/dist/esm-es5/pds-datepicker.entry.js +1 -0
  272. package/dist/esm-es5/pds-divider.entry.js +1 -1
  273. package/dist/esm-es5/pds-drawer-content.entry.js +1 -1
  274. package/dist/esm-es5/pds-drawer-footer.entry.js +1 -1
  275. package/dist/esm-es5/pds-drawer-header.entry.js +1 -1
  276. package/dist/esm-es5/pds-drawer.entry.js +1 -1
  277. package/dist/esm-es5/pds-dropdown-menu-item.entry.js +1 -1
  278. package/dist/esm-es5/pds-dropdown-menu-separator.entry.js +1 -1
  279. package/dist/esm-es5/pds-dropdown-menu.entry.js +1 -1
  280. package/dist/esm-es5/pds-filter.entry.js +1 -1
  281. package/dist/esm-es5/pds-filters.entry.js +1 -1
  282. package/dist/esm-es5/pds-icon.entry.js +1 -1
  283. package/dist/esm-es5/pds-image.entry.js +1 -1
  284. package/dist/esm-es5/pds-input.entry.js +1 -1
  285. package/dist/esm-es5/pds-link.entry.js +1 -1
  286. package/dist/esm-es5/pds-loader.entry.js +1 -1
  287. package/dist/esm-es5/pds-modal-content.entry.js +1 -1
  288. package/dist/esm-es5/pds-modal-footer.entry.js +1 -1
  289. package/dist/esm-es5/pds-modal-header.entry.js +1 -1
  290. package/dist/esm-es5/pds-modal.entry.js +1 -1
  291. package/dist/esm-es5/pds-multiselect.entry.js +1 -1
  292. package/dist/esm-es5/pds-popover.entry.js +1 -1
  293. package/dist/esm-es5/pds-progress.entry.js +1 -1
  294. package/dist/esm-es5/pds-property.entry.js +1 -1
  295. package/dist/esm-es5/pds-radio-group.entry.js +1 -1
  296. package/dist/esm-es5/pds-radio.entry.js +1 -1
  297. package/dist/esm-es5/pds-row.entry.js +1 -1
  298. package/dist/esm-es5/pds-select.entry.js +1 -1
  299. package/dist/esm-es5/pds-sortable-item.entry.js +1 -1
  300. package/dist/esm-es5/pds-sortable.entry.js +2 -2
  301. package/dist/esm-es5/pds-switch.entry.js +1 -1
  302. package/dist/esm-es5/pds-tab.entry.js +1 -1
  303. package/dist/esm-es5/pds-table-body.entry.js +1 -1
  304. package/dist/esm-es5/pds-table-cell.entry.js +1 -1
  305. package/dist/esm-es5/pds-table-head-cell.entry.js +1 -1
  306. package/dist/esm-es5/pds-table-head.entry.js +1 -1
  307. package/dist/esm-es5/pds-table-row.entry.js +1 -1
  308. package/dist/esm-es5/pds-table.entry.js +1 -1
  309. package/dist/esm-es5/pds-tabpanel.entry.js +1 -1
  310. package/dist/esm-es5/pds-tabs.entry.js +1 -1
  311. package/dist/esm-es5/pds-text.entry.js +1 -1
  312. package/dist/esm-es5/pds-textarea.entry.js +1 -1
  313. package/dist/esm-es5/pds-toast.entry.js +1 -1
  314. package/dist/esm-es5/pds-tooltip.entry.js +1 -1
  315. package/dist/esm-es5/pine-core.js +1 -1
  316. package/dist/esm-es5/{truncation-tooltip-CdtEBn_5.js → truncation-tooltip-_902ENWC.js} +1 -1
  317. package/dist/esm-es5/utils-OYK5-nwe.js +1 -0
  318. package/dist/pine-core/p-0414092a.system.entry.js +1 -0
  319. package/dist/pine-core/p-04807201.entry.js +1 -0
  320. package/dist/pine-core/{p-cfcb89d1.system.entry.js → p-07f0d168.system.entry.js} +1 -1
  321. package/dist/pine-core/p-08f5d19c.entry.js +1 -0
  322. package/dist/pine-core/{p-d70aa0c7.system.entry.js → p-0aaf8faa.system.entry.js} +1 -1
  323. package/dist/pine-core/p-0bad5955.entry.js +1 -0
  324. package/dist/pine-core/{p-99f300ef.system.entry.js → p-0c3bf377.system.entry.js} +1 -1
  325. package/dist/pine-core/p-0ce79cd0.entry.js +1 -0
  326. package/dist/pine-core/{p-f682f08a.system.entry.js → p-1057b8c3.system.entry.js} +1 -1
  327. package/dist/pine-core/{p-089606b8.system.entry.js → p-108c910a.system.entry.js} +1 -1
  328. package/dist/pine-core/{p-ea986474.system.entry.js → p-166f61a6.system.entry.js} +1 -1
  329. package/dist/pine-core/{p-95defb53.entry.js → p-16c8f5e3.entry.js} +1 -1
  330. package/dist/pine-core/p-16e258d1.entry.js +1 -0
  331. package/dist/pine-core/{p-a8f1a48d.entry.js → p-1be33c95.entry.js} +1 -1
  332. package/dist/pine-core/{p-70fb83d4.entry.js → p-1e3a31da.entry.js} +1 -1
  333. package/dist/pine-core/{p-12941e0d.entry.js → p-1f228db9.entry.js} +1 -1
  334. package/dist/pine-core/p-257c6ef9.entry.js +1 -0
  335. package/dist/pine-core/p-26415245.system.entry.js +1 -0
  336. package/dist/pine-core/p-26e1e5bb.entry.js +1 -0
  337. package/dist/pine-core/p-27c06bf8.entry.js +2 -0
  338. package/dist/pine-core/p-31aee437.entry.js +1 -0
  339. package/dist/pine-core/p-330a76f6.system.entry.js +1 -0
  340. package/dist/pine-core/{p-4ebdb90b.system.entry.js → p-33c63be6.system.entry.js} +1 -1
  341. package/dist/pine-core/{p-c5b6b545.entry.js → p-344609f9.entry.js} +2 -2
  342. package/dist/pine-core/{p-2dbc90ba.entry.js → p-3a1711c1.entry.js} +1 -1
  343. package/dist/pine-core/p-3a9c58bd.system.entry.js +1 -0
  344. package/dist/pine-core/{p-32fc82c2.entry.js → p-3ebd543f.entry.js} +1 -1
  345. package/dist/pine-core/p-3fbcb0c8.system.entry.js +1 -0
  346. package/dist/pine-core/{p-e08e4ca7.entry.js → p-427b4aeb.entry.js} +1 -1
  347. package/dist/pine-core/{p-f5cf98be.system.entry.js → p-42bd87ea.system.entry.js} +1 -1
  348. package/dist/pine-core/{p-8d1e7b3c.system.entry.js → p-43c691bf.system.entry.js} +1 -1
  349. package/dist/pine-core/p-4566d659.system.entry.js +1 -0
  350. package/dist/pine-core/{p-b9a857fc.system.entry.js → p-4b8cf04a.system.entry.js} +1 -1
  351. package/dist/pine-core/p-4d6f471c.entry.js +1 -0
  352. package/dist/pine-core/{p-ec04d4c3.entry.js → p-4e7580c4.entry.js} +1 -1
  353. package/dist/pine-core/{p-fbb72e66.system.entry.js → p-4f4a2d2a.system.entry.js} +1 -1
  354. package/dist/pine-core/{p-b8a5597d.entry.js → p-5211aba7.entry.js} +1 -1
  355. package/dist/pine-core/{p-7e4729e0.entry.js → p-524b7d3f.entry.js} +1 -1
  356. package/dist/pine-core/{p-c08b1697.entry.js → p-5613c64c.entry.js} +1 -1
  357. package/dist/pine-core/{p-5a8345e2.entry.js → p-5bb24cb4.entry.js} +1 -1
  358. package/dist/pine-core/{p-73c3a73f.entry.js → p-5bb80b3c.entry.js} +1 -1
  359. package/dist/pine-core/{p-e039ebb6.system.entry.js → p-5c6e0a26.system.entry.js} +1 -1
  360. package/dist/pine-core/{p-b53d9620.system.entry.js → p-5db57551.system.entry.js} +1 -1
  361. package/dist/pine-core/{p-6b260a97.entry.js → p-5eb00ba5.entry.js} +1 -1
  362. package/dist/pine-core/p-61756414.system.entry.js +1 -0
  363. package/dist/pine-core/{p-08196d6c.entry.js → p-682e9e8f.entry.js} +1 -1
  364. package/dist/pine-core/p-6965db1d.entry.js +1 -0
  365. package/dist/pine-core/{p-317337e4.entry.js → p-6b180ee2.entry.js} +1 -1
  366. package/dist/pine-core/{p-d33d65f6.entry.js → p-6c53962f.entry.js} +1 -1
  367. package/dist/pine-core/p-6da6520b.system.entry.js +3 -0
  368. package/dist/pine-core/{p-bd9b2931.system.entry.js → p-6e3bf862.system.entry.js} +1 -1
  369. package/dist/pine-core/{p-9d77f2f8.system.entry.js → p-71c9f866.system.entry.js} +1 -1
  370. package/dist/pine-core/{p-a616385b.system.entry.js → p-7265b94c.system.entry.js} +1 -1
  371. package/dist/pine-core/{p-55532d56.system.entry.js → p-74229b5e.system.entry.js} +1 -1
  372. package/dist/pine-core/p-7512c2d4.system.entry.js +1 -0
  373. package/dist/pine-core/p-76db406d.system.entry.js +1 -0
  374. package/dist/pine-core/{p-3b555f06.system.entry.js → p-79aa5f43.system.entry.js} +1 -1
  375. package/dist/pine-core/{p-77082557.system.entry.js → p-7bbcda0f.system.entry.js} +1 -1
  376. package/dist/pine-core/p-7c8946e6.entry.js +1 -0
  377. package/dist/pine-core/p-7c98c90a.system.entry.js +1 -0
  378. package/dist/pine-core/p-81292c03.system.entry.js +1 -0
  379. package/dist/pine-core/p-81300046.system.entry.js +1 -0
  380. package/dist/pine-core/{p-93c52e2b.system.entry.js → p-8252cd84.system.entry.js} +1 -1
  381. package/dist/pine-core/p-84ba0e6a.system.entry.js +1 -0
  382. package/dist/pine-core/{p-45d55983.entry.js → p-86fc0bfa.entry.js} +1 -1
  383. package/dist/pine-core/p-90692bb6.entry.js +1 -0
  384. package/dist/pine-core/{p-67fc26e5.system.entry.js → p-90ea812c.system.entry.js} +1 -1
  385. package/dist/pine-core/p-948826db.entry.js +1 -0
  386. package/dist/pine-core/{p-35edd8b0.entry.js → p-9b66642d.entry.js} +1 -1
  387. package/dist/pine-core/p-BJgZHCWe.js +1 -0
  388. package/dist/pine-core/p-BPqJgIq6.js +1 -0
  389. package/dist/pine-core/p-BSRFZB4I.system.js +1 -0
  390. package/dist/pine-core/p-BZsj6eAn.system.js +1 -0
  391. package/dist/pine-core/p-CB8Yh0Nt.js +2 -0
  392. package/dist/pine-core/{p-B2qvvB3q.system.js → p-CBu9UrXr.system.js} +1 -1
  393. package/dist/pine-core/p-COtCa1Md.system.js +1 -0
  394. package/dist/pine-core/p-CTQZ2fkv.system.js +1 -0
  395. package/dist/pine-core/{p-B2nn1gSd.js → p-CnM3cCof.js} +1 -1
  396. package/dist/pine-core/p-CnO10OxH.system.js +1 -0
  397. package/dist/pine-core/p-D-akEPIU.system.js +2 -0
  398. package/dist/pine-core/p-DHPzKMVS.js +1 -0
  399. package/dist/pine-core/p-Dx8tEj0U.system.js +1 -0
  400. package/dist/pine-core/p-DxI-61GK.js +1 -0
  401. package/dist/pine-core/p-OYK5-nwe.js +1 -0
  402. package/dist/pine-core/p-a10af84b.system.entry.js +1 -0
  403. package/dist/pine-core/p-a21b530a.system.entry.js +1 -0
  404. package/dist/pine-core/{p-b0becff3.system.entry.js → p-a85535a4.system.entry.js} +1 -1
  405. package/dist/pine-core/p-abc0fe2f.system.entry.js +1 -0
  406. package/dist/pine-core/p-ac6a5bf0.entry.js +1 -0
  407. package/dist/pine-core/{p-5f5339ab.entry.js → p-b0526f98.entry.js} +1 -1
  408. package/dist/pine-core/p-b130b716.entry.js +1 -0
  409. package/dist/pine-core/{p-4cbb691f.entry.js → p-b195d345.entry.js} +1 -1
  410. package/dist/pine-core/{p-5c5bd609.entry.js → p-b4923acf.entry.js} +1 -1
  411. package/dist/pine-core/{p-15a0fa0a.system.entry.js → p-b4e440e3.system.entry.js} +1 -1
  412. package/dist/pine-core/p-b8693a87.entry.js +1 -0
  413. package/dist/pine-core/{p-bf025e38.entry.js → p-b8ada1eb.entry.js} +1 -1
  414. package/dist/pine-core/{p-a6a269da.system.entry.js → p-bb85bbb5.system.entry.js} +1 -1
  415. package/dist/pine-core/{p-fa8d3155.system.entry.js → p-bbc539bc.system.entry.js} +2 -2
  416. package/dist/pine-core/{p-f26dcbc2.system.entry.js → p-bf833976.system.entry.js} +1 -1
  417. package/dist/pine-core/{p-e055c543.entry.js → p-c23097af.entry.js} +1 -1
  418. package/dist/pine-core/p-c2dd84bd.system.entry.js +1 -0
  419. package/dist/pine-core/{p-441682f4.system.entry.js → p-c4520b04.system.entry.js} +1 -1
  420. package/dist/pine-core/{p-f1365550.entry.js → p-c4f68dfc.entry.js} +1 -1
  421. package/dist/pine-core/{p-fa2a786d.system.entry.js → p-c6fa6744.system.entry.js} +1 -1
  422. package/dist/pine-core/p-c7dba815.entry.js +1 -0
  423. package/dist/pine-core/p-cb6f55ff.entry.js +1 -0
  424. package/dist/pine-core/p-cfb8fa7c.system.entry.js +1 -0
  425. package/dist/pine-core/{p-2bb101c2.entry.js → p-d0d7d1d4.entry.js} +1 -1
  426. package/dist/pine-core/{p-4f5aacd9.entry.js → p-d1112c8a.entry.js} +1 -1
  427. package/dist/pine-core/{p-5f3d0c86.system.entry.js → p-d4e91ad9.system.entry.js} +1 -1
  428. package/dist/pine-core/{p-44222439.entry.js → p-da018dcb.entry.js} +1 -1
  429. package/dist/pine-core/{p-57784f2f.system.entry.js → p-dc27abe6.system.entry.js} +1 -1
  430. package/dist/pine-core/{p-f9f7101e.entry.js → p-dc343b6d.entry.js} +1 -1
  431. package/dist/pine-core/{p-fb774f89.system.entry.js → p-dde753e7.system.entry.js} +1 -1
  432. package/dist/pine-core/{p-558ac401.entry.js → p-dea3a582.entry.js} +1 -1
  433. package/dist/pine-core/p-df29fd41.entry.js +1 -0
  434. package/dist/pine-core/{p-c6426e16.system.entry.js → p-e4e2eae2.system.entry.js} +1 -1
  435. package/dist/pine-core/{p-1abae35f.entry.js → p-e8668178.entry.js} +1 -1
  436. package/dist/pine-core/{p-20753e42.system.entry.js → p-eb28d21d.system.entry.js} +1 -1
  437. package/dist/pine-core/p-eb71a82d.system.entry.js +1 -0
  438. package/dist/pine-core/{p-13bb89ff.entry.js → p-ed63873c.entry.js} +1 -1
  439. package/dist/pine-core/{p-5d2f95bd.entry.js → p-f4f6dc36.entry.js} +1 -1
  440. package/dist/pine-core/{p-6b3d8c2b.system.entry.js → p-f67a0ca8.system.entry.js} +1 -1
  441. package/dist/pine-core/{p-003df3b3.entry.js → p-fc455968.entry.js} +1 -1
  442. package/dist/pine-core/{p-02452806.system.entry.js → p-fe3e2ebd.system.entry.js} +1 -1
  443. package/dist/pine-core/pine-core.css +1 -1
  444. package/dist/pine-core/pine-core.esm.js +1 -1
  445. package/dist/pine-core/pine-core.js +1 -1
  446. package/dist/types/components/pds-button/pds-button.d.ts +10 -0
  447. package/dist/types/components/pds-checkbox/pds-checkbox.d.ts +5 -0
  448. package/dist/types/components/pds-combobox/combobox-interface.d.ts +17 -0
  449. package/dist/types/components/pds-combobox/grouped-options-panel.d.ts +105 -0
  450. package/dist/types/components/pds-combobox/pds-combobox.d.ts +235 -3
  451. package/dist/types/components/pds-datepicker/calendar-portal.d.ts +43 -0
  452. package/dist/types/components/pds-datepicker/date-utils.d.ts +48 -0
  453. package/dist/types/components/pds-datepicker/datepicker-interface.d.ts +30 -0
  454. package/dist/types/components/pds-datepicker/pds-datepicker.d.ts +489 -0
  455. package/dist/types/components/pds-datepicker/presets.d.ts +23 -0
  456. package/dist/types/components/pds-datepicker/value.d.ts +47 -0
  457. package/dist/types/components/pds-dropdown-menu/pds-dropdown-menu.d.ts +1 -0
  458. package/dist/types/components/pds-multiselect/multiselect-interface.d.ts +19 -0
  459. package/dist/types/components/pds-multiselect/pds-multiselect.d.ts +56 -1
  460. package/dist/types/components/pds-popover/pds-popover.d.ts +1 -0
  461. package/dist/types/components/pds-switch/pds-switch.d.ts +5 -0
  462. package/dist/types/components.d.ts +677 -4
  463. package/dist/types/utils/closest.d.ts +2 -0
  464. package/dist/types/utils/utils.d.ts +9 -1
  465. package/dist/vscode.html-data.json +467 -3
  466. package/hydrate/index.js +3973 -362
  467. package/hydrate/index.mjs +3973 -362
  468. package/package.json +2 -2
  469. package/dist/cjs/closest-BZXvuB_Y.js +0 -11
  470. package/dist/esm/closest-DnUJodVd.js +0 -9
  471. package/dist/esm-es5/closest-DnUJodVd.js +0 -1
  472. package/dist/esm-es5/floating-ui.dom-DDtwbwIl.js +0 -1
  473. package/dist/esm-es5/index-BU1hN5Vy.js +0 -1
  474. package/dist/esm-es5/index-DcT8--Dn.js +0 -2
  475. package/dist/esm-es5/utils-u_0lxWnH.js +0 -1
  476. package/dist/pine-core/p-026ee6de.entry.js +0 -1
  477. package/dist/pine-core/p-03f3fc92.system.entry.js +0 -1
  478. package/dist/pine-core/p-06375326.system.entry.js +0 -1
  479. package/dist/pine-core/p-1df5e088.entry.js +0 -1
  480. package/dist/pine-core/p-24214ab9.system.entry.js +0 -1
  481. package/dist/pine-core/p-250011ba.entry.js +0 -1
  482. package/dist/pine-core/p-2b420257.entry.js +0 -1
  483. package/dist/pine-core/p-375eb7f4.entry.js +0 -1
  484. package/dist/pine-core/p-3b796898.entry.js +0 -1
  485. package/dist/pine-core/p-3c5489ce.entry.js +0 -1
  486. package/dist/pine-core/p-3e868906.system.entry.js +0 -1
  487. package/dist/pine-core/p-464f23e6.entry.js +0 -1
  488. package/dist/pine-core/p-49c6112a.entry.js +0 -1
  489. package/dist/pine-core/p-4bd57896.system.entry.js +0 -1
  490. package/dist/pine-core/p-6a6a767b.system.entry.js +0 -1
  491. package/dist/pine-core/p-6dabeebc.system.entry.js +0 -3
  492. package/dist/pine-core/p-70891202.entry.js +0 -1
  493. package/dist/pine-core/p-73fa955a.system.entry.js +0 -1
  494. package/dist/pine-core/p-755e0b3c.system.entry.js +0 -1
  495. package/dist/pine-core/p-8b051229.entry.js +0 -1
  496. package/dist/pine-core/p-8d8a8550.system.entry.js +0 -1
  497. package/dist/pine-core/p-93486f2e.entry.js +0 -1
  498. package/dist/pine-core/p-93ae562d.entry.js +0 -1
  499. package/dist/pine-core/p-95b8bece.system.entry.js +0 -1
  500. package/dist/pine-core/p-9d902000.system.entry.js +0 -1
  501. package/dist/pine-core/p-9ef355b7.entry.js +0 -1
  502. package/dist/pine-core/p-BI7Ml0VF.system.js +0 -1
  503. package/dist/pine-core/p-BKsJZTyn.js +0 -1
  504. package/dist/pine-core/p-BU1hN5Vy.js +0 -1
  505. package/dist/pine-core/p-BrLs99ML.system.js +0 -1
  506. package/dist/pine-core/p-CJ8t3EBJ.system.js +0 -2
  507. package/dist/pine-core/p-Cr7-rJtJ.system.js +0 -1
  508. package/dist/pine-core/p-DDtwbwIl.js +0 -1
  509. package/dist/pine-core/p-D_I-k33A.system.js +0 -1
  510. package/dist/pine-core/p-DcT8--Dn.js +0 -2
  511. package/dist/pine-core/p-DnUJodVd.js +0 -1
  512. package/dist/pine-core/p-a009ab10.system.entry.js +0 -1
  513. package/dist/pine-core/p-a8cd2ab5.entry.js +0 -1
  514. package/dist/pine-core/p-b45b8f8b.system.entry.js +0 -1
  515. package/dist/pine-core/p-b85bb61d.system.entry.js +0 -1
  516. package/dist/pine-core/p-bdded57a.system.entry.js +0 -1
  517. package/dist/pine-core/p-c1a65082.entry.js +0 -1
  518. package/dist/pine-core/p-c1d1befb.system.entry.js +0 -1
  519. package/dist/pine-core/p-ctdGub9B.system.js +0 -1
  520. package/dist/pine-core/p-d9c1ee36.system.entry.js +0 -1
  521. package/dist/pine-core/p-df285ece.system.entry.js +0 -1
  522. package/dist/pine-core/p-ee114aef.entry.js +0 -1
  523. package/dist/pine-core/p-ee997fbf.entry.js +0 -2
  524. package/dist/pine-core/p-f89197c9.entry.js +0 -1
  525. package/dist/pine-core/p-kYMYDfJY.system.js +0 -1
  526. package/dist/pine-core/p-u_0lxWnH.js +0 -1
@@ -0,0 +1,262 @@
1
+ import { autoUpdate, computePosition, flip, hide, offset, shift, size } from "@floating-ui/dom";
2
+ /** The optgroup an option sits in, or null for an ungrouped option. */
3
+ export function parentOptgroupOf(option) {
4
+ const parent = option === null || option === void 0 ? void 0 : option.parentElement;
5
+ return parent !== null && parent !== undefined && parent.tagName === 'OPTGROUP' ? parent : null;
6
+ }
7
+ /** A Pine icon name: letters, digits and hyphens, such as `hashtag`. Never a URL or file path. */
8
+ const PINE_ICON_NAME = /^[a-z0-9-]+$/i;
9
+ /**
10
+ * An optgroup's `data-icon` when it's a Pine icon name, or null. One definition of a usable group
11
+ * icon for every mode, checked here rather than trusting `pds-icon` to reject anything else; it is
12
+ * only ever passed to `pds-icon` as `name`.
13
+ */
14
+ export function groupIconOf(optgroup) {
15
+ const icon = optgroup.getAttribute('data-icon');
16
+ return icon !== null && PINE_ICON_NAME.test(icon) ? icon : null;
17
+ }
18
+ /** An option is disabled by its own `disabled` or its optgroup's, as in a native select. */
19
+ export function isOptionDisabled(option) {
20
+ var _a;
21
+ if (option === null || option === undefined)
22
+ return false;
23
+ return option.hasAttribute('disabled') || ((_a = parentOptgroupOf(option)) === null || _a === void 0 ? void 0 : _a.hasAttribute('disabled')) === true;
24
+ }
25
+ /** A group with no option left to choose. It still opens, so its options can be seen. */
26
+ export function isGroupDisabled(group) {
27
+ return group.options.every(({ option }) => isOptionDisabled(option));
28
+ }
29
+ /**
30
+ * Groups the combobox's filtered items for the panel: each optgroup becomes one entry holding its
31
+ * options, and ungrouped options stay where they are. Indexes count options in list order, the
32
+ * same as the inline listbox, so `data-option-index` means the same thing in every mode.
33
+ */
34
+ export function buildPanelEntries(items) {
35
+ const entries = [];
36
+ const groups = new Map();
37
+ let index = 0;
38
+ items.forEach(item => {
39
+ if (item.tagName !== 'OPTION')
40
+ return;
41
+ const option = item;
42
+ const optgroup = parentOptgroupOf(option);
43
+ if (optgroup !== null) {
44
+ let group = groups.get(optgroup);
45
+ if (!group) {
46
+ group = { optgroup, label: optgroup.label, icon: groupIconOf(optgroup), options: [] };
47
+ groups.set(optgroup, group);
48
+ entries.push({ kind: 'group', group });
49
+ }
50
+ group.options.push({ option, index: index++ });
51
+ }
52
+ else {
53
+ entries.push({ kind: 'option', option, index: index++ });
54
+ }
55
+ });
56
+ return entries;
57
+ }
58
+ /** The label of the optgroup an option sits in, or null for an ungrouped option. */
59
+ export function groupLabelOf(option) {
60
+ var _a, _b;
61
+ return (_b = (_a = parentOptgroupOf(option)) === null || _a === void 0 ? void 0 : _a.label) !== null && _b !== void 0 ? _b : null;
62
+ }
63
+ /**
64
+ * The items Up and Down move through from `current`, one tree level at a time: the panel's rows
65
+ * (groups and ungrouped options), or the open group's options. Drilled into a group, its row
66
+ * (drawn as the row back) comes first, above its options, as a tree draws a parent above its children.
67
+ * Disabled options and groups stay in it, as the APG listbox and tree patterns advise, so they're
68
+ * announced as unavailable rather than hidden from the keyboard.
69
+ */
70
+ export function panelColumn(entries, openGroup, current, drilledIn) {
71
+ const open = openGroup === null ? undefined : findGroup(entries, openGroup);
72
+ if (open !== undefined) {
73
+ const options = open.options.map(({ index }) => index);
74
+ if (drilledIn)
75
+ return [open.optgroup, ...options];
76
+ if (typeof current === 'number' && options.includes(current))
77
+ return options;
78
+ }
79
+ return entries.map(entry => (entry.kind === 'group' ? entry.group.optgroup : entry.index));
80
+ }
81
+ /** The panel's group for an optgroup, if it's showing. */
82
+ export function findGroup(entries, optgroup) {
83
+ for (const entry of entries) {
84
+ if (entry.kind === 'group' && entry.group.optgroup === optgroup)
85
+ return entry.group;
86
+ }
87
+ return undefined;
88
+ }
89
+ /** Moving from one group row to another waits this long, so a diagonal trip into the flyout doesn't switch groups. */
90
+ const SWITCH_DELAY_MS = 120;
91
+ /** Leaving a group (into the gap beside its flyout, say) waits this long before closing it. */
92
+ const CLOSE_DELAY_MS = 200;
93
+ /** Space between the panel's edge and the flyout: --pine-dimension-050 (4px), per the Figma frames. */
94
+ const FLYOUT_GAP_PX = 4;
95
+ /** How close the flyout may come to the viewport edge: --pine-dimension-100 (8px). */
96
+ const VIEWPORT_PADDING_PX = 8;
97
+ /** A flyout never shrinks below roughly three rows, even when little space is left. */
98
+ const MIN_FLYOUT_HEIGHT_PX = 120;
99
+ /**
100
+ * Opens and closes a group's flyout with hover intent, and keeps the open flyout positioned beside
101
+ * its group row. The flyout renders inside the row, so moving the pointer into it never leaves
102
+ * the row; the delays cover the gap between panel and flyout and diagonal moves across rows.
103
+ */
104
+ /**
105
+ * Scrolls `el` into view inside `container` only. A flyout option needs this: the flyout is `fixed`
106
+ * beside the panel but sits inside it in the DOM, so `scrollIntoView` would also scroll the panel
107
+ * and the page, moving the flyout's row out from under it.
108
+ */
109
+ export function scrollIntoViewWithin(container, el) {
110
+ const bounds = container.getBoundingClientRect();
111
+ const rect = el.getBoundingClientRect();
112
+ if (rect.top < bounds.top) {
113
+ container.scrollTop -= bounds.top - rect.top;
114
+ }
115
+ else if (rect.bottom > bounds.bottom) {
116
+ container.scrollTop += rect.bottom - bounds.bottom;
117
+ }
118
+ }
119
+ export class FlyoutController {
120
+ constructor(getOpenGroup, setOpenGroup) {
121
+ this.getOpenGroup = getOpenGroup;
122
+ this.setOpenGroup = setOpenGroup;
123
+ }
124
+ /** Pointer entered a group row (or its flyout, which sits inside it). */
125
+ enter(label) {
126
+ this.clearClose();
127
+ const open = this.getOpenGroup();
128
+ if (open === label) {
129
+ this.clearSwitch();
130
+ return;
131
+ }
132
+ if (open === null) {
133
+ this.setOpenGroup(label);
134
+ return;
135
+ }
136
+ this.clearSwitch();
137
+ this.switchTimer = setTimeout(() => {
138
+ this.switchTimer = undefined;
139
+ this.setOpenGroup(label);
140
+ }, SWITCH_DELAY_MS);
141
+ }
142
+ /** Pointer left a group row and its flyout. */
143
+ leave(label) {
144
+ this.clearSwitch();
145
+ if (this.getOpenGroup() !== label)
146
+ return;
147
+ this.clearClose();
148
+ this.closeTimer = setTimeout(() => {
149
+ this.closeTimer = undefined;
150
+ if (this.getOpenGroup() === label)
151
+ this.setOpenGroup(null);
152
+ }, CLOSE_DELAY_MS);
153
+ }
154
+ /**
155
+ * A click or tap on a group row opens it. It never closes it: on desktop the hover that preceded
156
+ * the click has already opened it, and touch browsers fire an emulated mouseenter and then click
157
+ * in the same tap. Closing happens on leaving the row or closing the panel.
158
+ */
159
+ open(label) {
160
+ this.clearTimers();
161
+ this.setOpenGroup(label);
162
+ }
163
+ /**
164
+ * Keeps `flyout` beside `row`: horizontally against the panel's edge, vertically so its first
165
+ * option lines up with the row. `fixed` positioning so the panel's scrolling can't clip it,
166
+ * including when the panel is portaled into a dialog.
167
+ */
168
+ position(row, panel, flyout) {
169
+ if (this.positionedFlyout === flyout && this.stopAutoUpdate)
170
+ return;
171
+ this.stopPositioning();
172
+ this.positionedFlyout = flyout;
173
+ const reference = {
174
+ getBoundingClientRect: () => {
175
+ const panelRect = panel.getBoundingClientRect();
176
+ const rowRect = row.getBoundingClientRect();
177
+ return {
178
+ x: panelRect.x,
179
+ y: rowRect.y,
180
+ left: panelRect.left,
181
+ right: panelRect.right,
182
+ top: rowRect.top,
183
+ bottom: rowRect.bottom,
184
+ width: panelRect.width,
185
+ height: rowRect.height,
186
+ };
187
+ },
188
+ contextElement: row,
189
+ };
190
+ // The flyout's own top padding, so its first option, not its edge, lines up with the row.
191
+ const flyoutPaddingTop = parseFloat(getComputedStyle(flyout).paddingTop) || 0;
192
+ const update = () => computePosition(reference, flyout, {
193
+ placement: 'right-start',
194
+ strategy: 'fixed',
195
+ middleware: [
196
+ offset({ mainAxis: FLYOUT_GAP_PX, crossAxis: -flyoutPaddingTop }),
197
+ flip({ fallbackPlacements: ['left-start'] }),
198
+ shift({ padding: VIEWPORT_PADDING_PX }),
199
+ // A long group scrolls inside the flyout instead of running off the viewport.
200
+ size({
201
+ padding: VIEWPORT_PADDING_PX,
202
+ apply({ availableHeight }) {
203
+ flyout.style.maxHeight = `${Math.max(availableHeight, MIN_FLYOUT_HEIGHT_PX)}px`;
204
+ },
205
+ }),
206
+ // Hidden with its row when the panel scrolls the row out of view.
207
+ hide({ strategy: 'referenceHidden' }),
208
+ ],
209
+ }).then(({ x, y, middlewareData }) => {
210
+ var _a;
211
+ // It starts hidden (see the stylesheet) so it never flashes in the row before it's placed.
212
+ Object.assign(flyout.style, {
213
+ position: 'fixed',
214
+ left: `${x}px`,
215
+ top: `${y}px`,
216
+ visibility: ((_a = middlewareData.hide) === null || _a === void 0 ? void 0 : _a.referenceHidden) === true ? 'hidden' : 'visible',
217
+ });
218
+ const reveal = this.pendingReveal;
219
+ this.pendingReveal = undefined;
220
+ if (reveal !== undefined && flyout.contains(reveal))
221
+ scrollIntoViewWithin(flyout, reveal);
222
+ });
223
+ this.stopAutoUpdate = autoUpdate(reference, flyout, () => {
224
+ void update();
225
+ });
226
+ }
227
+ /**
228
+ * Scrolls `option` into view inside its flyout. Before the flyout's first placement its height
229
+ * isn't capped yet, so the option looks visible; it's revealed again once the placement lands.
230
+ */
231
+ reveal(flyout, option) {
232
+ scrollIntoViewWithin(flyout, option);
233
+ if (flyout.style.maxHeight === '')
234
+ this.pendingReveal = option;
235
+ }
236
+ stopPositioning() {
237
+ var _a;
238
+ (_a = this.stopAutoUpdate) === null || _a === void 0 ? void 0 : _a.call(this);
239
+ this.stopAutoUpdate = undefined;
240
+ this.positionedFlyout = undefined;
241
+ this.pendingReveal = undefined;
242
+ }
243
+ /** The panel closed or the component left the page. */
244
+ reset() {
245
+ this.clearTimers();
246
+ this.stopPositioning();
247
+ }
248
+ clearTimers() {
249
+ this.clearSwitch();
250
+ this.clearClose();
251
+ }
252
+ clearSwitch() {
253
+ if (this.switchTimer !== undefined)
254
+ clearTimeout(this.switchTimer);
255
+ this.switchTimer = undefined;
256
+ }
257
+ clearClose() {
258
+ if (this.closeTimer !== undefined)
259
+ clearTimeout(this.closeTimer);
260
+ this.closeTimer = undefined;
261
+ }
262
+ }
@@ -156,6 +156,22 @@
156
156
  background: var(--pine-color-background-muted);
157
157
  }
158
158
 
159
+ .pds-combobox__option--disabled,
160
+ .pds-combobox__group-row--disabled > .pds-combobox__group-row-trigger,
161
+ .pds-combobox__group-back--disabled > .pds-combobox__group-back-trigger,
162
+ .pds-combobox__group--disabled > .pds-combobox__group-label {
163
+ color: var(--pine-color-text-disabled);
164
+ }
165
+
166
+ .pds-combobox__option--disabled {
167
+ cursor: not-allowed;
168
+ }
169
+
170
+ .pds-combobox__option--disabled .pds-combobox__option-chip,
171
+ .pds-combobox__option--disabled .pds-combobox__option-layout-wrapper {
172
+ opacity: 0.5;
173
+ }
174
+
159
175
  .pds-combobox__option-check {
160
176
  color: currentColor;
161
177
  font-size: var(--pine-dimension-150);
@@ -175,6 +191,232 @@
175
191
  margin-block-start: 0;
176
192
  }
177
193
 
194
+ .pds-combobox__group {
195
+ list-style: none;
196
+ margin-block-start: var(--pine-dimension-150);
197
+ }
198
+ .pds-combobox__group:first-child {
199
+ margin-block-start: 0;
200
+ }
201
+
202
+ .pds-combobox__group-list {
203
+ list-style: none;
204
+ margin: 0;
205
+ padding: 0;
206
+ }
207
+
208
+ .pds-combobox__listbox--grouped .pds-combobox__group-list {
209
+ display: flex;
210
+ flex-direction: column;
211
+ gap: var(--pine-dimension-2xs);
212
+ }
213
+
214
+ .pds-combobox__group-label--with-icon {
215
+ align-items: center;
216
+ display: flex;
217
+ gap: var(--pine-dimension-xs);
218
+ }
219
+
220
+ .pds-combobox__group-icon {
221
+ flex-shrink: 0;
222
+ }
223
+
224
+ .pds-combobox__group-row {
225
+ list-style: none;
226
+ position: relative;
227
+ }
228
+
229
+ .pds-combobox__group-row-trigger {
230
+ align-items: center;
231
+ border-radius: var(--pine-dimension-125);
232
+ color: var(--pine-color-text-secondary);
233
+ cursor: pointer;
234
+ display: flex;
235
+ font: var(--pine-typography-body-medium);
236
+ gap: var(--pine-dimension-xs);
237
+ justify-content: space-between;
238
+ padding: var(--pine-dimension-xs) var(--pine-dimension-sm);
239
+ /* stylelint-disable-next-line pine-design-system/no-hardcoded-motion -- matches .pds-combobox__option's 0.15s micro-transition */
240
+ transition: background 0.15s;
241
+ }
242
+
243
+ .pds-combobox__group-row--open > .pds-combobox__group-row-trigger,
244
+ .pds-combobox__group-row--has-selection > .pds-combobox__group-row-trigger,
245
+ .pds-combobox__group-row--highlighted > .pds-combobox__group-row-trigger,
246
+ .pds-combobox__group-back--highlighted > .pds-combobox__group-row-trigger,
247
+ .pds-combobox__group-row-trigger:hover {
248
+ background: var(--pine-color-background-muted);
249
+ }
250
+
251
+ .pds-combobox__listbox--drill-in,
252
+ .pds-combobox__listbox--drill-out {
253
+ overflow-x: hidden;
254
+ }
255
+
256
+ .pds-combobox__listbox--drill-in > .pds-combobox__group-back {
257
+ animation: pds-combobox-drill-from-end var(--pine-motion-duration-base) var(--pine-motion-easing-out);
258
+ }
259
+
260
+ .pds-combobox__listbox--drill-out > li {
261
+ animation: pds-combobox-drill-from-start var(--pine-motion-duration-base) var(--pine-motion-easing-out);
262
+ }
263
+
264
+ @keyframes pds-combobox-drill-from-end {
265
+ from {
266
+ opacity: 0;
267
+ transform: translateX(var(--pine-dimension-sm));
268
+ }
269
+ }
270
+ @keyframes pds-combobox-drill-from-start {
271
+ from {
272
+ opacity: 0;
273
+ transform: translateX(calc(var(--pine-dimension-sm) * -1));
274
+ }
275
+ }
276
+ .pds-combobox__group-row--keyboard > .pds-combobox__group-row-trigger,
277
+ .pds-combobox__group-back--keyboard > .pds-combobox__group-row-trigger {
278
+ outline: var(--pine-outline-focus);
279
+ outline-offset: calc(var(--pine-border-width) * -2);
280
+ }
281
+
282
+ .pds-combobox__group-row-label {
283
+ align-items: center;
284
+ display: flex;
285
+ gap: var(--pine-dimension-xs);
286
+ min-width: 0;
287
+ }
288
+
289
+ .pds-combobox__group-row-caret {
290
+ flex-shrink: 0;
291
+ }
292
+
293
+ .pds-combobox__listbox--grouped,
294
+ .pds-combobox__flyout {
295
+ display: flex;
296
+ flex-direction: column;
297
+ gap: var(--pine-dimension-2xs);
298
+ padding: var(--pine-dimension-2xs);
299
+ }
300
+
301
+ .pds-combobox__flyout {
302
+ background: var(--pine-color-background-overlay);
303
+ border-radius: var(--pine-dimension-125);
304
+ box-shadow: var(--pine-box-shadow);
305
+ list-style: none;
306
+ margin: 0;
307
+ overflow-y: auto;
308
+ position: fixed;
309
+ visibility: hidden;
310
+ width: max-content;
311
+ z-index: 1;
312
+ }
313
+
314
+ .pds-combobox__listbox--with-search {
315
+ display: flex;
316
+ flex-direction: column;
317
+ overflow: hidden;
318
+ padding: 0;
319
+ }
320
+
321
+ .pds-combobox__listbox-options {
322
+ flex: 1;
323
+ list-style: none;
324
+ margin: 0;
325
+ min-height: 0;
326
+ overflow-y: auto;
327
+ padding: var(--pine-dimension-xs);
328
+ }
329
+
330
+ .pds-combobox__listbox-options.pds-combobox__listbox--grouped {
331
+ padding: var(--pine-dimension-2xs);
332
+ }
333
+
334
+ .pds-combobox__panel-search {
335
+ align-items: center;
336
+ border-block-end: var(--pine-border);
337
+ border-block-end-color: var(--pine-color-border-subtle);
338
+ display: flex;
339
+ flex-shrink: 0;
340
+ gap: var(--pine-dimension-xs);
341
+ padding: var(--pine-dimension-xs) var(--pine-dimension-sm);
342
+ }
343
+ .pds-combobox__panel-search pds-icon {
344
+ color: var(--pine-color-text-muted);
345
+ flex-shrink: 0;
346
+ }
347
+ .pds-combobox__panel-search:focus-within {
348
+ border-block-end-color: var(--pine-color-border-active);
349
+ }
350
+
351
+ .pds-combobox__panel-search-input {
352
+ background: transparent;
353
+ border: 0;
354
+ color: var(--pine-color-text-strong);
355
+ flex: 1;
356
+ font: var(--pine-typography-body);
357
+ letter-spacing: var(--pine-letter-spacing);
358
+ min-width: 0;
359
+ outline: none;
360
+ }
361
+ .pds-combobox__panel-search-input::placeholder {
362
+ color: var(--pine-color-text-placeholder);
363
+ }
364
+
365
+ .pds-combobox__group-back {
366
+ display: flex;
367
+ flex-direction: column;
368
+ gap: var(--pine-dimension-2xs);
369
+ list-style: none;
370
+ }
371
+
372
+ .pds-combobox__group-back-trigger {
373
+ justify-content: flex-start;
374
+ }
375
+
376
+ .pds-combobox__listbox-options--drilled-in.pds-combobox__listbox--grouped {
377
+ padding-block-start: 0;
378
+ }
379
+
380
+ .pds-combobox__listbox-options--drilled-in:focus {
381
+ outline: none;
382
+ }
383
+ .pds-combobox__listbox-options--drilled-in:focus .pds-combobox__group-back-trigger {
384
+ border-block-end-color: var(--pine-color-border-active);
385
+ }
386
+
387
+ :where(.pds-combobox__listbox-options--drilled-in) .pds-combobox__group-back-trigger {
388
+ background-color: var(--pine-color-background-overlay);
389
+ border-block-end: var(--pine-border);
390
+ border-block-end-color: var(--pine-color-border-subtle);
391
+ border-radius: 0;
392
+ inset-block-start: 0;
393
+ margin-inline: calc(var(--pine-dimension-2xs) * -1);
394
+ position: sticky;
395
+ z-index: 1;
396
+ }
397
+
398
+ .pds-combobox__drill-in-options {
399
+ display: flex;
400
+ flex-direction: column;
401
+ gap: var(--pine-dimension-2xs);
402
+ list-style: none;
403
+ margin: 0;
404
+ padding: 0;
405
+ }
406
+
407
+ .visually-hidden {
408
+ border: 0;
409
+ clip: rect(0 0 0 0);
410
+ clip-path: polygon(0 0, 0 0, 0 0);
411
+ height: 1px;
412
+ margin: -1px;
413
+ overflow: hidden;
414
+ padding: 0;
415
+ position: absolute;
416
+ white-space: nowrap;
417
+ width: 1px;
418
+ }
419
+
178
420
  .pds-combobox__loading {
179
421
  align-items: center;
180
422
  display: flex;
@@ -311,19 +553,6 @@
311
553
  --color-outline: var(--pine-color-focus-ring-danger);
312
554
  }
313
555
 
314
- .visually-hidden {
315
- border: 0;
316
- clip: rect(0 0 0 0);
317
- clip-path: polygon(0 0, 0 0, 0 0);
318
- height: 1px;
319
- margin: -1px;
320
- overflow: hidden;
321
- padding: 0;
322
- position: absolute;
323
- white-space: nowrap;
324
- width: 1px;
325
- }
326
-
327
556
  [data-layout] {
328
557
  border-radius: var(--pine-dimension-125);
329
558
  padding-block: var(--pine-dimension-xs);