@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
@@ -3,11 +3,13 @@ import { autoUpdate, computePosition, flip, hide, offset, shift, size } from "@f
3
3
  import { calendarSimple, caretDown, caretLeft, caretRight, check, remove } from "@pine-ds/icons/icons";
4
4
  import { isSpecTest } from "../../utils/form";
5
5
  import { formatMessage, resolveLocale } from "../../i18n";
6
- import { addDays, addMonths, clampDate, dateFormatter, formatDate, isOutOfRange, isSameDay, localeFirstDayOfWeek, monthWeeks, parseIsoDate, supportedLocale, toIsoDate, today, weekdayColumn, weekdayNames, } from "./date-utils";
6
+ import { addDays, addMonths, clampDate, dateFormatter, daysInMonth, formatDate, isOutOfRange, isSameDay, localeFirstDayOfWeek, inMonthDayYear, monthDayRows, monthWeeks, parseIsoDate, parseMonthDay, supportedLocale, toIsoDate, toMonthDay, today, weekdayColumn, weekdayNames, } from "./date-utils";
7
7
  import { CalendarPortal } from "./calendar-portal";
8
8
  import { matchPreset, presetInRange, resolvePresets } from "./presets";
9
- import { RANGE_SEPARATOR, clockFor, compareDateTime, fieldFormat, joinTime, parseDateTime, parseFieldText, parseRangeText, splitTime, toFieldText, toValueString, } from "./value";
9
+ import { RANGE_SEPARATOR, clockFor, compareDateTime, fieldFormat, joinTime, monthDayFormat, parseDateTime, parseFieldText, parseMonthDayText, parseRangeText, splitTime, formatWith, toFieldText, toValueString, } from "./value";
10
10
  const FULL_DATE = { weekday: 'long', year: 'numeric', month: 'long', day: 'numeric' };
11
+ /** A day in month-day mode, which has no year and so no weekday. */
12
+ const MONTH_AND_DAY = { month: 'long', day: 'numeric' };
11
13
  const DEFAULT_START_TIME = '00:00';
12
14
  const DEFAULT_END_TIME = '23:59';
13
15
  /** Ids for datepickers without a `component-id`, so their calendars' ids stay unique. */
@@ -35,7 +37,8 @@ const dayNumberText = (formatter, date) => { var _a, _b; return (_b = (_a = form
35
37
  /**
36
38
  * A field for one date, or in range mode a start and end date, with a calendar to pick from.
37
39
  * The value is `YYYY-MM-DD`, or `YYYY-MM-DD/YYYY-MM-DD` for a range; with the time picker, each
38
- * date carries a time, as `YYYY-MM-DDTHH:mm`.
40
+ * date carries a time, as `YYYY-MM-DDTHH:mm`. In month-day mode, for a date that comes round every
41
+ * year such as a birthday, it's a month and day with no year, as `--MM-DD`.
39
42
  *
40
43
  * @part calendar - The open calendar. It's portaled out of the datepicker, so style it with `.pds-datepicker-calendar-portal::part(calendar)`.
41
44
  * @part presets - The list of preset ranges in the calendar, styled with `.pds-datepicker-calendar-portal::part(presets)`.
@@ -90,8 +93,10 @@ export class PdsDatepicker {
90
93
  * in the locale), `MM` or `M` (month), `DD` or `D` (day), and with the time picker `HH` or `H`
91
94
  * (24-hour), `hh` or `h` (12-hour), `mm` and `A` (AM/PM, in the locale), as `MM/DD/YYYY`,
92
95
  * `MMM D, YYYY` or `D.M.YYYY h:mm A`. Put literal text in brackets, as `[Due] D/M/YYYY`. The value
93
- * and the change event stay ISO (`YYYY-MM-DD`), whatever the format. Typed ISO dates are always
94
- * accepted too.
96
+ * and the change event stay ISO (`YYYY-MM-DD`; `--MM-DD` with `month-day`), whatever the format.
97
+ * Typed ISO dates are always accepted too. With `month-day`, a format without `YYYY` is taken as a
98
+ * month-and-day format and used as given, rather than reordered for the locale; leave it unset to
99
+ * follow the locale instead.
95
100
  */
96
101
  this.format = 'YYYY-MM-DD';
97
102
  /**
@@ -124,6 +129,15 @@ export class PdsDatepicker {
124
129
  * Accessible label for the month dropdown, when `show-dropdowns` is set.
125
130
  */
126
131
  this.monthLabel = 'Month';
132
+ /**
133
+ * Picks a month and day with no year, for a date that comes round every year, such as a birthday.
134
+ * The value is `--MM-DD` (ISO 8601 without a year), the field shows the date as the locale writes
135
+ * a month and day, and the calendar shows each month without a year or weekdays, with February
136
+ * always having its 29th. Turns off `range`, `time-picker`, `show-dropdowns`, `min` and `max`, and
137
+ * has no effect with `auto-apply`, `presets`, `first-day-of-week`, `min-date-message` or
138
+ * `max-date-message`, which all depend on them.
139
+ */
140
+ this.monthDay = false;
127
141
  /**
128
142
  * Accessible label for the button that shows the next month.
129
143
  */
@@ -172,7 +186,9 @@ export class PdsDatepicker {
172
186
  this.triggerLabel = 'Choose date';
173
187
  /**
174
188
  * The selected date as `YYYY-MM-DD`, or in range mode the range as `YYYY-MM-DD/YYYY-MM-DD`; with
175
- * the time picker, each date as `YYYY-MM-DDTHH:mm`. An empty string when nothing is selected.
189
+ * the time picker, each date as `YYYY-MM-DDTHH:mm`; with `month-day`, the month and day with no
190
+ * year, as `--MM-DD` (a full date is read too, as that month and day, and rewritten to it). An
191
+ * empty string when nothing is selected.
176
192
  */
177
193
  this.value = '';
178
194
  /**
@@ -363,17 +379,17 @@ export class PdsDatepicker {
363
379
  // The times before the typed text changed them, for a pick in the calendar to go back to.
364
380
  (_b = this.timesBeforeTyping) !== null && _b !== void 0 ? _b : (this.timesBeforeTyping = [startTime, endTime]);
365
381
  this.loadDraft(parts);
366
- if (this.timePicker) {
382
+ if (this.hasTime) {
367
383
  // A time picked in the calendar survives typing that doesn't change the time: text with no
368
384
  // time, as a date part-way typed, or with the time as committed.
369
385
  const format = this.resolvedFormat;
370
386
  const locale = this.resolvedLocale;
371
- const typed = this.range ? parseRangeText(this.text, format, locale) : [parseFieldText(this.text, format, locale)];
387
+ const typed = this.isRange ? parseRangeText(this.text, format, locale) : [parseFieldText(this.text, format, locale)];
372
388
  const committed = this.parsedValue();
373
389
  const keeps = (i) => { var _a, _b, _c; return !((_a = typed === null || typed === void 0 ? void 0 : typed[i]) === null || _a === void 0 ? void 0 : _a.time) || ((_b = typed[i]) === null || _b === void 0 ? void 0 : _b.time) === ((_c = committed === null || committed === void 0 ? void 0 : committed[i]) === null || _c === void 0 ? void 0 : _c.time); };
374
390
  if (keeps(0))
375
391
  this.startTime = startTime;
376
- if (this.range && keeps(1))
392
+ if (this.isRange && keeps(1))
377
393
  this.endTime = endTime;
378
394
  }
379
395
  this.showDate(parts[parts.length - 1].date);
@@ -482,7 +498,8 @@ export class PdsDatepicker {
482
498
  if (!active)
483
499
  return;
484
500
  const rtl = getComputedStyle(this.el).direction === 'rtl';
485
- const column = weekdayColumn(active, this.weekStart);
501
+ // Month-day mode's rows start on the 1st, not on a weekday.
502
+ const column = this.monthDay ? (active.getUTCDate() - 1) % 7 : weekdayColumn(active, this.weekStart);
486
503
  let next = null;
487
504
  switch (event.key) {
488
505
  case 'ArrowLeft':
@@ -500,14 +517,21 @@ export class PdsDatepicker {
500
517
  case 'Home':
501
518
  next = addDays(active, -column);
502
519
  break;
503
- case 'End':
504
- next = addDays(active, 6 - column);
520
+ case 'End': {
521
+ // Month-day mode's rows don't carry into the next month, so End stops at the month's last day.
522
+ const lastColumn = this.monthDay
523
+ ? Math.min(6, daysInMonth(active.getUTCFullYear(), active.getUTCMonth()) - active.getUTCDate() + column)
524
+ : 6;
525
+ next = addDays(active, lastColumn - column);
505
526
  break;
527
+ }
506
528
  case 'PageUp':
507
- next = addMonths(active, event.shiftKey ? -12 : -1);
529
+ // Month-day mode has no year to jump by, so Shift+PageUp stays put rather than passing
530
+ // through a real, possibly non-leap year and clamping Feb 29 to the 28th.
531
+ next = event.shiftKey && this.monthDay ? active : addMonths(active, event.shiftKey ? -12 : -1);
508
532
  break;
509
533
  case 'PageDown':
510
- next = addMonths(active, event.shiftKey ? 12 : 1);
534
+ next = event.shiftKey && this.monthDay ? active : addMonths(active, event.shiftKey ? 12 : 1);
511
535
  break;
512
536
  case 'Enter':
513
537
  case ' ':
@@ -520,9 +544,9 @@ export class PdsDatepicker {
520
544
  return;
521
545
  }
522
546
  event.preventDefault();
523
- const target = clampDate(next, this.minDate, this.maxDate);
547
+ const target = clampDate(this.inView(next), this.minDate, this.maxDate);
524
548
  this.showDate(target);
525
- if (this.range)
549
+ if (this.isRange)
526
550
  this.previewDate = toIsoDate(target);
527
551
  this.focusActiveDay = true;
528
552
  };
@@ -533,7 +557,7 @@ export class PdsDatepicker {
533
557
  this.pickDate(date);
534
558
  };
535
559
  this.onGridPointerOver = (event) => {
536
- if (!this.range || !this.draftStart || this.draftEnd)
560
+ if (!this.isRange || !this.draftStart || this.draftEnd)
537
561
  return;
538
562
  const date = this.dayFromEvent(event);
539
563
  const iso = date && toIsoDate(date);
@@ -582,19 +606,28 @@ export class PdsDatepicker {
582
606
  var _a;
583
607
  this.text = this.fieldText();
584
608
  this.textError = '';
609
+ const parts = this.parsedValue();
610
+ // A full date reads as its month and day; keep what's submitted in step with what's shown,
611
+ // rather than passing through whichever spelling was set until the next pick rewrites it.
612
+ if (this.monthDay && parts) {
613
+ const normalized = this.dayValue(parts[0].date);
614
+ if (this.value !== normalized)
615
+ this.value = normalized;
616
+ }
585
617
  this.updateFormValue();
586
618
  if (!this.isOpen)
587
619
  return;
588
- const parts = this.parsedValue();
589
620
  this.loadDraft(parts);
590
- const day = (_a = (parts && parts[parts.length - 1].date)) !== null && _a !== void 0 ? _a : today();
621
+ const day = (_a = (parts && parts[parts.length - 1].date)) !== null && _a !== void 0 ? _a : this.now;
591
622
  this.showDate(clampDate(day, this.minDate, this.maxDate), true);
592
623
  }
593
624
  requiredChanged() {
594
625
  this.updateFormValue();
595
626
  }
596
627
  componentWillLoad() {
597
- this.text = this.fieldText();
628
+ // Through the same path a later value/context change takes, so an initial full date in
629
+ // month-day mode submits normalized too, not only after the first pick rewrites it.
630
+ this.refreshFromValue();
598
631
  }
599
632
  connectedCallback() {
600
633
  if (this.el.attachInternals && !this.internals) {
@@ -644,10 +677,30 @@ export class PdsDatepicker {
644
677
  return localeFirstDayOfWeek(this.resolvedLocale);
645
678
  }
646
679
  get minDate() {
647
- return parseIsoDate(this.min);
680
+ return this.monthDay ? null : parseIsoDate(this.min);
648
681
  }
649
682
  get maxDate() {
650
- return parseIsoDate(this.max);
683
+ return this.monthDay ? null : parseIsoDate(this.max);
684
+ }
685
+ /** Range mode, which month-day mode turns off. */
686
+ get isRange() {
687
+ return this.range && !this.monthDay;
688
+ }
689
+ /** The time picker, which month-day mode turns off. */
690
+ get hasTime() {
691
+ return this.timePicker && !this.monthDay;
692
+ }
693
+ /** Today, or in month-day mode today's month and day. */
694
+ get now() {
695
+ return this.monthDay ? inMonthDayYear(today()) : today();
696
+ }
697
+ /** In month-day mode, a date moved to the mode's year, as when the calendar wraps past December. */
698
+ inView(date) {
699
+ return this.monthDay ? inMonthDayYear(date) : date;
700
+ }
701
+ /** One day as the value holds it: `YYYY-MM-DD`, or `--MM-DD` in month-day mode. */
702
+ dayValue(date) {
703
+ return this.monthDay ? toMonthDay(date) : toIsoDate(date);
651
704
  }
652
705
  get isInteractive() {
653
706
  return !this.disabled && !this.readonly;
@@ -655,22 +708,22 @@ export class PdsDatepicker {
655
708
  /** How many months the calendar shows side by side. */
656
709
  get monthCount() {
657
710
  const narrow = typeof window !== 'undefined' && window.innerWidth < TWO_MONTHS_MIN_WIDTH;
658
- return this.range && !narrow ? 2 : 1;
711
+ return this.isRange && !narrow ? 2 : 1;
659
712
  }
660
713
  /** Whether picks apply at once, without the footer: `auto-apply` in range mode, without times. */
661
714
  get appliesOnPick() {
662
- return this.range && this.autoApply && !this.timePicker;
715
+ return this.isRange && this.autoApply && !this.hasTime;
663
716
  }
664
717
  /** Whether picks wait for Apply: for a range, unless it auto-applies, and for a date with a time. */
665
718
  get hasFooter() {
666
- return (this.range || this.timePicker) && !this.appliesOnPick;
719
+ return (this.isRange || this.hasTime) && !this.appliesOnPick;
667
720
  }
668
721
  get resolvedPresets() {
669
- return this.range ? resolvePresets(this.presets, today()) : [];
722
+ return this.isRange ? resolvePresets(this.presets, today()) : [];
670
723
  }
671
724
  /** The committed value, parsed: one date, or a range's start and end. */
672
725
  parsedValue(value = this.value) {
673
- if (this.range) {
726
+ if (this.isRange) {
674
727
  const [start, end, extra] = (value !== null && value !== void 0 ? value : '').split('/');
675
728
  const startValue = parseDateTime(start);
676
729
  const endValue = parseDateTime(end);
@@ -678,12 +731,22 @@ export class PdsDatepicker {
678
731
  ? [startValue, endValue]
679
732
  : null;
680
733
  }
734
+ if (this.monthDay) {
735
+ const date = parseMonthDay(value);
736
+ return date ? [{ date, time: null }] : null;
737
+ }
681
738
  const single = parseDateTime(value);
682
739
  return single ? [single] : null;
683
740
  }
684
741
  /** The format the field shows and reads, with a time when the time picker is on. */
685
742
  get resolvedFormat() {
686
- return fieldFormat(this.format, this.timePicker, this.timePicker && clockFor(this.resolvedLocale).hour12);
743
+ var _a, _b;
744
+ if (this.monthDay) {
745
+ // A format with a year is the default, or one for full dates: use the locale's month and day.
746
+ const format = (_b = (_a = this.format) === null || _a === void 0 ? void 0 : _a.trim()) !== null && _b !== void 0 ? _b : '';
747
+ return format !== '' && !/YYYY/.test(format.replace(/\[[^\]]*\]/g, '')) ? format : monthDayFormat(this.resolvedLocale);
748
+ }
749
+ return fieldFormat(this.format, this.hasTime, this.hasTime && clockFor(this.resolvedLocale).hour12);
687
750
  }
688
751
  /** What the field shows for the committed value. */
689
752
  fieldText() {
@@ -699,20 +762,24 @@ export class PdsDatepicker {
699
762
  /** Drops a time the time picker doesn't show, or adds the default one it does. */
700
763
  withTimePicker(value, fallback = DEFAULT_START_TIME) {
701
764
  var _a;
702
- return { date: value.date, time: this.timePicker ? ((_a = value.time) !== null && _a !== void 0 ? _a : fallback) : null };
765
+ return { date: value.date, time: this.hasTime ? ((_a = value.time) !== null && _a !== void 0 ? _a : fallback) : null };
703
766
  }
704
767
  get fieldPlaceholder() {
705
768
  if (this.placeholder)
706
769
  return this.placeholder;
770
+ // Month-day tokens, as `MMMM D`, don't read as a hint; an example date does.
771
+ if (this.monthDay) {
772
+ return formatWith({ date: parseMonthDay('--12-31'), time: null }, this.resolvedFormat, this.resolvedLocale);
773
+ }
707
774
  const one = this.resolvedFormat;
708
- return this.range ? `${one}${RANGE_SEPARATOR}${one}` : one;
775
+ return this.isRange ? `${one}${RANGE_SEPARATOR}${one}` : one;
709
776
  }
710
777
  /** Loads the committed value into the draft the calendar edits. */
711
778
  loadDraft(parts) {
712
779
  var _a, _b;
713
780
  const [start, end] = parts !== null && parts !== void 0 ? parts : [];
714
781
  this.draftStart = start ? toIsoDate(start.date) : '';
715
- this.draftEnd = this.range && end ? toIsoDate(end.date) : '';
782
+ this.draftEnd = this.isRange && end ? toIsoDate(end.date) : '';
716
783
  this.startTime = (_a = start === null || start === void 0 ? void 0 : start.time) !== null && _a !== void 0 ? _a : DEFAULT_START_TIME;
717
784
  this.endTime = (_b = end === null || end === void 0 ? void 0 : end.time) !== null && _b !== void 0 ? _b : DEFAULT_END_TIME;
718
785
  this.previewDate = '';
@@ -728,7 +795,7 @@ export class PdsDatepicker {
728
795
  const parts = this.parsedValue();
729
796
  this.loadDraft(parts);
730
797
  this.valueAtOpen = (_a = this.value) !== null && _a !== void 0 ? _a : '';
731
- const start = (_b = (parts && parts[parts.length - 1].date)) !== null && _b !== void 0 ? _b : today();
798
+ const start = (_b = (parts && parts[parts.length - 1].date)) !== null && _b !== void 0 ? _b : this.now;
732
799
  this.showDate(clampDate(start, this.minDate, this.maxDate), true);
733
800
  this.focusActiveDay = focusDay;
734
801
  this.isOpen = true;
@@ -750,7 +817,8 @@ export class PdsDatepicker {
750
817
  * Makes a day the active one and brings it into view. With two months, a day already on view
751
818
  * doesn't move the view; `reset` lines the view up so the day is in the last month shown.
752
819
  */
753
- showDate(date, reset = false) {
820
+ showDate(day, reset = false) {
821
+ const date = this.inView(day);
754
822
  const first = firstOfMonth(date);
755
823
  const view = parseIsoDate(this.viewMonth);
756
824
  const lastView = view && addMonths(view, this.monthCount - 1);
@@ -768,15 +836,15 @@ export class PdsDatepicker {
768
836
  // A pick in the calendar takes over from typed text, so dismissing afterwards commits nothing,
769
837
  // as when nothing was typed.
770
838
  this.dropTypedText();
771
- if (this.range) {
839
+ if (this.isRange) {
772
840
  this.pickRangeDay(date);
773
841
  }
774
- else if (this.timePicker) {
842
+ else if (this.hasTime) {
775
843
  this.draftStart = toIsoDate(date);
776
844
  this.activeDate = this.draftStart;
777
845
  }
778
846
  else {
779
- this.commitValue(toIsoDate(date));
847
+ this.commitValue(this.dayValue(date));
780
848
  this.closeCalendar(true);
781
849
  }
782
850
  }
@@ -820,7 +888,11 @@ export class PdsDatepicker {
820
888
  }
821
889
  /** Commits one date, or a range with its start, end and matching preset. */
822
890
  commitParts(parts) {
823
- if (!this.range) {
891
+ if (this.monthDay) {
892
+ this.commitValue(toMonthDay(parts[0].date));
893
+ return;
894
+ }
895
+ if (!this.isRange) {
824
896
  this.commitValue(toValueString(parts[0]));
825
897
  return;
826
898
  }
@@ -835,7 +907,7 @@ export class PdsDatepicker {
835
907
  if (!startDate)
836
908
  return null;
837
909
  const start = this.withTimePicker({ date: startDate, time: this.startTime });
838
- if (!this.range)
910
+ if (!this.isRange)
839
911
  return [start];
840
912
  const end = this.withTimePicker({ date: (_a = parseIsoDate(this.draftEnd)) !== null && _a !== void 0 ? _a : startDate, time: this.endTime });
841
913
  // An end time before the start time on the same day ends at the start.
@@ -961,7 +1033,11 @@ export class PdsDatepicker {
961
1033
  readText(text) {
962
1034
  const format = this.resolvedFormat;
963
1035
  const locale = this.resolvedLocale;
964
- const parts = this.range ? parseRangeText(text, format, locale) : [parseFieldText(text, format, locale)];
1036
+ const parts = this.monthDay
1037
+ ? [parseMonthDayText(text, format, locale)]
1038
+ : this.isRange
1039
+ ? parseRangeText(text, format, locale)
1040
+ : [parseFieldText(text, format, locale)];
965
1041
  if (!parts || parts.some((part) => !part))
966
1042
  return null;
967
1043
  return parts.map((part, i) => this.withTimePicker(part, i === 1 ? DEFAULT_END_TIME : DEFAULT_START_TIME));
@@ -1005,17 +1081,17 @@ export class PdsDatepicker {
1005
1081
  /** Whether the month before (`-1`) or after (`1`) the ones on view has a day in range. */
1006
1082
  canShowMonth(direction) {
1007
1083
  var _a;
1008
- const view = (_a = parseIsoDate(this.viewMonth)) !== null && _a !== void 0 ? _a : today();
1084
+ const view = (_a = parseIsoDate(this.viewMonth)) !== null && _a !== void 0 ? _a : this.now;
1009
1085
  if (direction < 0)
1010
1086
  return !this.minDate || addDays(view, -1) >= this.minDate;
1011
1087
  return !this.maxDate || addMonths(view, this.monthCount) <= this.maxDate;
1012
1088
  }
1013
1089
  showMonth(event, direction) {
1014
1090
  var _a, _b;
1015
- const view = (_a = parseIsoDate(this.viewMonth)) !== null && _a !== void 0 ? _a : today();
1016
- const active = (_b = parseIsoDate(this.activeDate)) !== null && _b !== void 0 ? _b : today();
1017
- this.viewMonth = toIsoDate(addMonths(view, direction));
1018
- this.activeDate = toIsoDate(clampDate(addMonths(active, direction), this.minDate, this.maxDate));
1091
+ const view = (_a = parseIsoDate(this.viewMonth)) !== null && _a !== void 0 ? _a : this.now;
1092
+ const active = (_b = parseIsoDate(this.activeDate)) !== null && _b !== void 0 ? _b : this.now;
1093
+ this.viewMonth = toIsoDate(this.inView(addMonths(view, direction)));
1094
+ this.activeDate = toIsoDate(clampDate(this.inView(addMonths(active, direction)), this.minDate, this.maxDate));
1019
1095
  if (this.canShowMonth(direction)) {
1020
1096
  // Safari doesn't focus a clicked button; without this, focus falls to the page and Escape and
1021
1097
  // the Tab trap stop working.
@@ -1137,7 +1213,7 @@ export class PdsDatepicker {
1137
1213
  const parts = this.parsedValue();
1138
1214
  if (!parts)
1139
1215
  return this.triggerLabel;
1140
- const dates = parts.map((part) => formatDate(part.date, locale, FULL_DATE));
1216
+ const dates = parts.map((part) => formatDate(part.date, locale, this.monthDay ? MONTH_AND_DAY : FULL_DATE));
1141
1217
  return `${this.triggerLabel}, ${dates.join(RANGE_SEPARATOR)}`;
1142
1218
  }
1143
1219
  /** The range to highlight: the chosen one, or the start to the previewed day while picking the end. */
@@ -1151,15 +1227,15 @@ export class PdsDatepicker {
1151
1227
  }
1152
1228
  /** The day shown as selected: the draft, which opens as the committed day and follows typing. */
1153
1229
  selectedDay() {
1154
- if (this.range)
1230
+ if (this.isRange)
1155
1231
  return null;
1156
1232
  return parseIsoDate(this.draftStart);
1157
1233
  }
1158
1234
  renderMonthHeading(view, index, locale, headingId) {
1159
- const heading = formatDate(view, locale, { month: 'long', year: 'numeric' });
1235
+ const heading = formatDate(view, locale, this.monthDay ? { month: 'long' } : { month: 'long', year: 'numeric' });
1160
1236
  // Only the first month announces itself as it changes; two months move together.
1161
1237
  const live = index === 0 ? 'polite' : null;
1162
- if (!this.showDropdowns) {
1238
+ if (!this.showDropdowns || this.monthDay) {
1163
1239
  return (h("div", { class: "pds-datepicker__heading", id: headingId, "aria-live": live }, heading));
1164
1240
  }
1165
1241
  const year = view.getUTCFullYear();
@@ -1185,14 +1261,14 @@ export class PdsDatepicker {
1185
1261
  const min = this.minDate;
1186
1262
  const max = this.maxDate;
1187
1263
  const selected = this.selectedDay();
1188
- const [rangeStart, rangeEnd] = this.range ? this.highlightedRange() : [null, null];
1189
- const now = today();
1190
- const fullDate = dateFormatter(locale, FULL_DATE);
1264
+ const [rangeStart, rangeEnd] = this.isRange ? this.highlightedRange() : [null, null];
1265
+ const now = this.now;
1266
+ const fullDate = dateFormatter(locale, this.monthDay ? MONTH_AND_DAY : FULL_DATE);
1191
1267
  const dayNumber = dateFormatter(locale, { day: 'numeric' });
1192
1268
  const headingId = `${this.baseId}-calendar-heading-${index}`;
1193
1269
  const isFirst = index === 0;
1194
1270
  const isLast = index === this.monthCount - 1;
1195
- return (h("div", { class: "pds-datepicker__month" }, h("div", { class: "pds-datepicker__header" }, isFirst ? (h("button", { type: "button", class: "pds-datepicker__nav pds-datepicker__nav--previous", "aria-label": this.previousMonthLabel, disabled: !this.canShowMonth(-1), onClick: (event) => this.showMonth(event, -1) }, h("pds-icon", { icon: caretLeft, "aria-hidden": "true" }))) : (h("span", { class: "pds-datepicker__nav-spacer" })), this.renderMonthHeading(view, index, locale, headingId), isLast ? (h("button", { type: "button", class: "pds-datepicker__nav pds-datepicker__nav--next", "aria-label": this.nextMonthLabel, disabled: !this.canShowMonth(1), onClick: (event) => this.showMonth(event, 1) }, h("pds-icon", { icon: caretRight, "aria-hidden": "true" }))) : (h("span", { class: "pds-datepicker__nav-spacer" }))), h("table", { class: "pds-datepicker__grid", role: "grid", "aria-labelledby": headingId, "aria-multiselectable": this.range ? 'true' : null, onKeyDown: this.onGridKeyDown, onClick: this.onGridClick, onPointerOver: this.onGridPointerOver }, h("thead", null, h("tr", null, weekdayNames(locale, this.weekStart).map((name) => (h("th", { scope: "col", class: "pds-datepicker__weekday" }, h("span", { "aria-hidden": "true" }, name.short), h("span", { class: "visually-hidden" }, name.long)))))), h("tbody", null, monthWeeks(year, month, this.weekStart).map((week) => (h("tr", null, week.map((date, column) => {
1271
+ return (h("div", { class: "pds-datepicker__month" }, h("div", { class: "pds-datepicker__header" }, isFirst ? (h("button", { type: "button", class: "pds-datepicker__nav pds-datepicker__nav--previous", "aria-label": this.previousMonthLabel, disabled: !this.canShowMonth(-1), onClick: (event) => this.showMonth(event, -1) }, h("pds-icon", { icon: caretLeft, "aria-hidden": "true" }))) : (h("span", { class: "pds-datepicker__nav-spacer" })), this.renderMonthHeading(view, index, locale, headingId), isLast ? (h("button", { type: "button", class: "pds-datepicker__nav pds-datepicker__nav--next", "aria-label": this.nextMonthLabel, disabled: !this.canShowMonth(1), onClick: (event) => this.showMonth(event, 1) }, h("pds-icon", { icon: caretRight, "aria-hidden": "true" }))) : (h("span", { class: "pds-datepicker__nav-spacer" }))), h("table", { class: "pds-datepicker__grid", role: "grid", "aria-labelledby": headingId, "aria-multiselectable": this.isRange ? 'true' : null, onKeyDown: this.onGridKeyDown, onClick: this.onGridClick, onPointerOver: this.onGridPointerOver }, !this.monthDay && (h("thead", null, h("tr", null, weekdayNames(locale, this.weekStart).map((name) => (h("th", { scope: "col", class: "pds-datepicker__weekday" }, h("span", { "aria-hidden": "true" }, name.short), h("span", { class: "visually-hidden" }, name.long))))))), h("tbody", null, (this.monthDay ? monthDayRows(month) : monthWeeks(year, month, this.weekStart)).map((week) => (h("tr", null, week.map((date, column) => {
1196
1272
  if (!date)
1197
1273
  return h("td", { class: "pds-datepicker__day pds-datepicker__day--empty" });
1198
1274
  const iso = toIsoDate(date);
@@ -1214,14 +1290,14 @@ export class PdsDatepicker {
1214
1290
  'pds-datepicker__day--today': isToday,
1215
1291
  'pds-datepicker__day--disabled': unavailable,
1216
1292
  }, "data-date": iso, tabindex: iso === this.activeDate ? '0' : '-1', "aria-label": fullDate.format(date), "aria-selected": isSelected ? 'true' : null, "aria-current": isToday ? 'date' : null, "aria-disabled": unavailable ? 'true' : null }, dayNumberText(dayNumber, date)));
1217
- })))))), this.timePicker && this.timesUnderMonth(index).map((which) => this.renderTime(which, locale))));
1293
+ })))))), this.hasTime && this.timesUnderMonth(index).map((which) => this.renderTime(which, locale))));
1218
1294
  }
1219
1295
  /**
1220
1296
  * The time pickers under a month: the start time under the first and the end time under the
1221
1297
  * second, or both under the one month a narrow range shows.
1222
1298
  */
1223
1299
  timesUnderMonth(index) {
1224
- if (!this.range)
1300
+ if (!this.isRange)
1225
1301
  return ['start'];
1226
1302
  if (this.monthCount === 1)
1227
1303
  return ['start', 'end'];
@@ -1246,7 +1322,7 @@ export class PdsDatepicker {
1246
1322
  if (this.timesBeforeTyping)
1247
1323
  this.timesBeforeTyping[which === 'start' ? 0 : 1] = time;
1248
1324
  };
1249
- const groupLabel = !this.range ? this.timeLabel : which === 'start' ? this.startTimeLabel : this.endTimeLabel;
1325
+ const groupLabel = !this.isRange ? this.timeLabel : which === 'start' ? this.startTimeLabel : this.endTimeLabel;
1250
1326
  const isPm = hours >= 12;
1251
1327
  const hourOptions = clock.hour12 ? Array.from({ length: 12 }, (_, i) => i + 1) : Array.from({ length: 24 }, (_, i) => i);
1252
1328
  const shownHour = clock.hour12 ? hours % 12 || 12 : hours;
@@ -1287,7 +1363,7 @@ export class PdsDatepicker {
1287
1363
  return '';
1288
1364
  const format = this.resolvedFormat;
1289
1365
  const locale = this.resolvedLocale;
1290
- if (this.range && !this.draftEnd)
1366
+ if (this.isRange && !this.draftEnd)
1291
1367
  return `${toFieldText(parts[0], format, locale)}${RANGE_SEPARATOR}`;
1292
1368
  return parts.map((part) => toFieldText(part, format, locale)).join(RANGE_SEPARATOR);
1293
1369
  }
@@ -1298,25 +1374,25 @@ export class PdsDatepicker {
1298
1374
  }
1299
1375
  renderCalendar(locale) {
1300
1376
  var _a;
1301
- const view = (_a = parseIsoDate(this.viewMonth)) !== null && _a !== void 0 ? _a : today();
1377
+ const view = (_a = parseIsoDate(this.viewMonth)) !== null && _a !== void 0 ? _a : this.now;
1302
1378
  const months = Array.from({ length: this.monthCount }, (_, i) => addMonths(view, i));
1303
- return (h("div", { class: { 'pds-datepicker__dialog': true, 'pds-datepicker__dialog--range': this.range }, id: `${this.baseId}-calendar`, role: "dialog",
1379
+ return (h("div", { class: { 'pds-datepicker__dialog': true, 'pds-datepicker__dialog--range': this.isRange }, id: `${this.baseId}-calendar`, role: "dialog",
1304
1380
  // A click on a part that can't take focus, as the month heading, focuses the dialog
1305
1381
  // rather than dropping focus to the page, which would report blur mid-selection.
1306
- tabindex: "-1", "aria-labelledby": this.range ? null : `${this.baseId}-calendar-heading-0`, "aria-label": this.range ? this.label || this.triggerLabel : null, part: "calendar", ref: (el) => (this.dialogEl = el), onKeyDown: this.onDialogKeyDown, onFocusin: this.onCalendarFocusIn, onFocusout: this.onCalendarFocusOut }, this.range && this.renderPresets(), h("div", { class: "pds-datepicker__panel" }, h("div", { class: "pds-datepicker__months" }, months.map((month, index) => this.renderMonth(month, index, locale))), this.hasFooter && this.renderFooter(), this.appliesOnPick && (
1382
+ tabindex: "-1", "aria-labelledby": this.isRange ? null : `${this.baseId}-calendar-heading-0`, "aria-label": this.isRange ? this.label || this.triggerLabel : null, part: "calendar", ref: (el) => (this.dialogEl = el), onKeyDown: this.onDialogKeyDown, onFocusin: this.onCalendarFocusIn, onFocusout: this.onCalendarFocusOut }, this.isRange && this.renderPresets(), h("div", { class: "pds-datepicker__panel" }, h("div", { class: "pds-datepicker__months" }, months.map((month, index) => this.renderMonth(month, index, locale))), this.hasFooter && this.renderFooter(), this.appliesOnPick && (
1307
1383
  // With no footer, still announce the start once it's picked, so it's clear an end comes next.
1308
1384
  h("span", { class: "visually-hidden", "aria-live": "polite" }, this.selectionText())))));
1309
1385
  }
1310
1386
  render() {
1311
1387
  const locale = this.resolvedLocale;
1312
- return (h(Host, { key: 'a761f0ca6eeedcac3e4bd90760aa9781cd37dcdc', class: { 'pds-datepicker--range': this.range, 'pds-datepicker--time': this.timePicker }, "full-width": this.fullWidth ? 'true' : null, onFocusin: this.onHostFocusIn, onFocusout: this.onHostFocusOut }, h("pds-input", { key: '2eb04f9fd4e2f7a2437145d250c629c2cc8a0bf6', ref: (el) => (this.inputEl = el), componentId: this.baseId, label: this.label, hideLabel: this.hideLabel, helperMessage: this.helperMessage, errorMessage: this.errorMessage, invalid: this.invalid || !!this.textError || !!this.valueError(), disabled: this.disabled, readonly: this.readonly, required: this.required, placeholder: this.fieldPlaceholder, fullWidth: this.fullWidth, autocomplete: "off", value: this.text, onClick: this.onFieldClick, onPdsInput: this.onTextInput, onPdsChange: this.onTextChange, onPdsKeyDown: this.onTextKeyDown, onPdsFocus: this.stopInnerEvent, onPdsBlur: this.stopInnerEvent }, this.clearable && !!this.value && this.isInteractive && (h("button", {
1388
+ return (h(Host, { key: 'd40bce6136eca084b23d38d995010592bfd702bd', class: { 'pds-datepicker--range': this.isRange, 'pds-datepicker--time': this.hasTime }, "full-width": this.fullWidth ? 'true' : null, onFocusin: this.onHostFocusIn, onFocusout: this.onHostFocusOut }, h("pds-input", { key: 'a047df90ca3e013a2eeb1f88e8fb033b24754f0d', ref: (el) => (this.inputEl = el), componentId: this.baseId, label: this.label, hideLabel: this.hideLabel, helperMessage: this.helperMessage, errorMessage: this.errorMessage, invalid: this.invalid || !!this.textError || !!this.valueError(), disabled: this.disabled, readonly: this.readonly, required: this.required, placeholder: this.fieldPlaceholder, fullWidth: this.fullWidth, autocomplete: "off", value: this.text, onClick: this.onFieldClick, onPdsInput: this.onTextInput, onPdsChange: this.onTextChange, onPdsKeyDown: this.onTextKeyDown, onPdsFocus: this.stopInnerEvent, onPdsBlur: this.stopInnerEvent }, this.clearable && !!this.value && this.isInteractive && (h("button", {
1313
1389
  // Keyed, as is the calendar button: when Clear appears after a pick, the focused
1314
1390
  // calendar button must stay that button rather than be reused as Clear.
1315
1391
  key: "clear", slot: "suffix", type: "button", class: "pds-datepicker__clear", ref: (el) => (this.clearEl = el), "aria-label": this.label ? `${this.clearLabel} ${this.label}` : this.clearLabel,
1316
1392
  // Out of the tab order, as a native search field's clear button is: Tab from a field
1317
1393
  // just emptied would land on it as the change removes it, dropping focus to the page.
1318
1394
  tabindex: "-1", onMouseDown: this.onClearMouseDown, onClick: this.onClearClick
1319
- }, h("pds-icon", { key: '98c325fbba8ea78b2d409bc77099db3206738508', icon: remove, "aria-hidden": "true" }))), h("button", { key: "trigger", slot: "suffix", type: "button", class: "pds-datepicker__trigger", ref: (el) => (this.triggerEl = el), "aria-label": this.triggerAccessibleName(locale), "aria-haspopup": "dialog", "aria-expanded": this.isOpen ? 'true' : 'false', disabled: !this.isInteractive, onClick: this.onTriggerClick, onKeyDown: this.onTriggerKeyDown }, h("pds-icon", { key: 'cb8483febe1b485058b7bb4271b749981a7747a1', icon: calendarSimple, "aria-hidden": "true" }))), this.isOpen && this.renderCalendar(locale)));
1395
+ }, h("pds-icon", { key: '934fc6303da1dca04cb073c5875a0f9fc286fdd1', icon: remove, "aria-hidden": "true" }))), h("button", { key: "trigger", slot: "suffix", type: "button", class: "pds-datepicker__trigger", ref: (el) => (this.triggerEl = el), "aria-label": this.triggerAccessibleName(locale), "aria-haspopup": "dialog", "aria-expanded": this.isOpen ? 'true' : 'false', disabled: !this.isInteractive, onClick: this.onTriggerClick, onKeyDown: this.onTriggerKeyDown }, h("pds-icon", { key: '75ab4fc79ce9f95e7ee6555763166d800a2f1135', icon: calendarSimple, "aria-hidden": "true" }))), this.isOpen && this.renderCalendar(locale)));
1320
1396
  }
1321
1397
  static get is() { return "pds-datepicker"; }
1322
1398
  static get encapsulation() { return "shadow"; }
@@ -1561,7 +1637,7 @@ export class PdsDatepicker {
1561
1637
  "optional": false,
1562
1638
  "docs": {
1563
1639
  "tags": [],
1564
- "text": "How the field shows dates and reads typed ones, as tokens: `YYYY`, `MMMM` or `MMM` (month name,\nin the locale), `MM` or `M` (month), `DD` or `D` (day), and with the time picker `HH` or `H`\n(24-hour), `hh` or `h` (12-hour), `mm` and `A` (AM/PM, in the locale), as `MM/DD/YYYY`,\n`MMM D, YYYY` or `D.M.YYYY h:mm A`. Put literal text in brackets, as `[Due] D/M/YYYY`. The value\nand the change event stay ISO (`YYYY-MM-DD`), whatever the format. Typed ISO dates are always\naccepted too."
1640
+ "text": "How the field shows dates and reads typed ones, as tokens: `YYYY`, `MMMM` or `MMM` (month name,\nin the locale), `MM` or `M` (month), `DD` or `D` (day), and with the time picker `HH` or `H`\n(24-hour), `hh` or `h` (12-hour), `mm` and `A` (AM/PM, in the locale), as `MM/DD/YYYY`,\n`MMM D, YYYY` or `D.M.YYYY h:mm A`. Put literal text in brackets, as `[Due] D/M/YYYY`. The value\nand the change event stay ISO (`YYYY-MM-DD`; `--MM-DD` with `month-day`), whatever the format.\nTyped ISO dates are always accepted too. With `month-day`, a format without `YYYY` is taken as a\nmonth-and-day format and used as given, rather than reordered for the locale; leave it unset to\nfollow the locale instead."
1565
1641
  },
1566
1642
  "getter": false,
1567
1643
  "setter": false,
@@ -1861,6 +1937,26 @@ export class PdsDatepicker {
1861
1937
  "attribute": "month-label",
1862
1938
  "defaultValue": "'Month'"
1863
1939
  },
1940
+ "monthDay": {
1941
+ "type": "boolean",
1942
+ "mutable": false,
1943
+ "complexType": {
1944
+ "original": "boolean",
1945
+ "resolved": "boolean",
1946
+ "references": {}
1947
+ },
1948
+ "required": false,
1949
+ "optional": false,
1950
+ "docs": {
1951
+ "tags": [],
1952
+ "text": "Picks a month and day with no year, for a date that comes round every year, such as a birthday.\nThe value is `--MM-DD` (ISO 8601 without a year), the field shows the date as the locale writes\na month and day, and the calendar shows each month without a year or weekdays, with February\nalways having its 29th. Turns off `range`, `time-picker`, `show-dropdowns`, `min` and `max`, and\nhas no effect with `auto-apply`, `presets`, `first-day-of-week`, `min-date-message` or\n`max-date-message`, which all depend on them."
1953
+ },
1954
+ "getter": false,
1955
+ "setter": false,
1956
+ "reflect": false,
1957
+ "attribute": "month-day",
1958
+ "defaultValue": "false"
1959
+ },
1864
1960
  "name": {
1865
1961
  "type": "string",
1866
1962
  "mutable": false,
@@ -1932,7 +2028,7 @@ export class PdsDatepicker {
1932
2028
  "optional": true,
1933
2029
  "docs": {
1934
2030
  "tags": [],
1935
- "text": "Specifies a short hint that describes the expected value of the field. Defaults to the format\nthe field takes, such as `YYYY-MM-DD`."
2031
+ "text": "Specifies a short hint that describes the expected value of the field. Defaults to the format\nthe field takes, such as `YYYY-MM-DD`; with `month-day`, to an example date instead, such as\n`December 31`."
1936
2032
  },
1937
2033
  "getter": false,
1938
2034
  "setter": false,
@@ -1985,7 +2081,7 @@ export class PdsDatepicker {
1985
2081
  "optional": true,
1986
2082
  "docs": {
1987
2083
  "tags": [],
1988
- "text": "Ranges listed beside the calendar in range mode. A comma-separated list of built-in keys\n(`today`, `yesterday`, `last-7-days`, `last-30-days`, `last-90-days`, `this-month`,\n`last-month`, `this-quarter`, `last-quarter`, `this-year`, `last-year`, `year-to-date`,\n`last-12-months`), or an array of `{ key, label?, start?, end? }` to relabel built-ins or add\nyour own."
2084
+ "text": "Ranges listed beside the calendar in range mode. A comma-separated list of built-in keys\n(`today`, `yesterday`, `last-7-days`, `last-30-days`, `last-90-days`, `this-month`,\n`last-month`, `this-quarter`, `last-quarter`, `this-year`, `last-year`, `year-to-date`,\n`last-12-months`), or an array of `{ key, label?, startOffset?, endOffset?, start?, end? }` to\nrelabel built-ins or add your own: `startOffset` and `endOffset` follow today, `start` and `end`\nare fixed days."
1989
2085
  },
1990
2086
  "getter": false,
1991
2087
  "setter": false,
@@ -2202,7 +2298,7 @@ export class PdsDatepicker {
2202
2298
  "optional": true,
2203
2299
  "docs": {
2204
2300
  "tags": [],
2205
- "text": "The selected date as `YYYY-MM-DD`, or in range mode the range as `YYYY-MM-DD/YYYY-MM-DD`; with\nthe time picker, each date as `YYYY-MM-DDTHH:mm`. An empty string when nothing is selected."
2301
+ "text": "The selected date as `YYYY-MM-DD`, or in range mode the range as `YYYY-MM-DD/YYYY-MM-DD`; with\nthe time picker, each date as `YYYY-MM-DDTHH:mm`; with `month-day`, the month and day with no\nyear, as `--MM-DD` (a full date is read too, as that month and day, and rewritten to it). An\nempty string when nothing is selected."
2206
2302
  },
2207
2303
  "getter": false,
2208
2304
  "setter": false,
@@ -2383,6 +2479,9 @@ export class PdsDatepicker {
2383
2479
  }, {
2384
2480
  "propName": "range",
2385
2481
  "methodName": "contextChanged"
2482
+ }, {
2483
+ "propName": "monthDay",
2484
+ "methodName": "contextChanged"
2386
2485
  }, {
2387
2486
  "propName": "min",
2388
2487
  "methodName": "contextChanged"