@tylertech/forge 2.21.1 → 2.21.2

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 (330) hide show
  1. package/custom-elements.json +1243 -143
  2. package/dist/esm/accordion/index.js +1 -1
  3. package/dist/esm/app-bar/help-button/index.js +1 -1
  4. package/dist/esm/app-bar/index.js +1 -1
  5. package/dist/esm/app-bar/menu-button/index.js +1 -1
  6. package/dist/esm/app-bar/notification-button/index.js +1 -1
  7. package/dist/esm/app-bar/profile-button/index.js +1 -1
  8. package/dist/esm/app-bar/search/index.js +1 -1
  9. package/dist/esm/autocomplete/index.js +1 -1
  10. package/dist/esm/avatar/index.js +1 -1
  11. package/dist/esm/backdrop/index.js +1 -1
  12. package/dist/esm/badge/index.js +1 -1
  13. package/dist/esm/banner/index.js +1 -1
  14. package/dist/esm/bottom-sheet/index.js +1 -1
  15. package/dist/esm/busy-indicator/index.js +1 -1
  16. package/dist/esm/button/index.js +1 -1
  17. package/dist/esm/button-area/index.js +1 -1
  18. package/dist/esm/button-toggle/button-toggle/index.js +1 -1
  19. package/dist/esm/button-toggle/button-toggle-group/index.js +1 -1
  20. package/dist/esm/button-toggle/index.js +1 -1
  21. package/dist/esm/calendar/calendar-dropdown/index.js +1 -1
  22. package/dist/esm/calendar/calendar-menu/index.js +1 -1
  23. package/dist/esm/calendar/index.js +1 -1
  24. package/dist/esm/checkbox/index.js +1 -1
  25. package/dist/esm/chip-field/index.js +1 -1
  26. package/dist/esm/chips/chip/index.js +1 -1
  27. package/dist/esm/chips/chip-set/index.js +1 -1
  28. package/dist/esm/chips/index.js +1 -1
  29. package/dist/esm/chunks/{chunk.G6GRI7UL.js → chunk.34KPY5LA.js} +2 -2
  30. package/dist/esm/chunks/{chunk.KQK2XX5H.js → chunk.34QUWF7V.js} +2 -2
  31. package/dist/esm/chunks/{chunk.F5LXG5X7.js → chunk.34XMCEIP.js} +2 -2
  32. package/dist/esm/chunks/chunk.356ZQ2XS.js +7 -0
  33. package/dist/esm/chunks/{chunk.45KYMP5J.js.map → chunk.356ZQ2XS.js.map} +1 -1
  34. package/dist/esm/chunks/{chunk.Y7YPNMPI.js → chunk.4E7RA4KA.js} +2 -2
  35. package/dist/esm/chunks/{chunk.Y7YPNMPI.js.map → chunk.4E7RA4KA.js.map} +2 -2
  36. package/dist/esm/chunks/{chunk.3FAYFYXF.js → chunk.4HYZFGYD.js} +2 -2
  37. package/dist/esm/chunks/{chunk.2GDEYC4V.js → chunk.4OBKQO2C.js} +2 -2
  38. package/dist/esm/chunks/{chunk.67G7HT5S.js → chunk.5TU5W4VX.js} +2 -2
  39. package/dist/esm/chunks/{chunk.UHU4FUIS.js → chunk.5XP6JI3R.js} +2 -2
  40. package/dist/esm/chunks/{chunk.TH7RLTJK.js → chunk.626HG3FA.js} +2 -2
  41. package/dist/esm/chunks/{chunk.2T6HVSO4.js → chunk.6E43KAVU.js} +2 -2
  42. package/dist/esm/chunks/{chunk.3C44DXZ2.js → chunk.6M3DKBNE.js} +2 -2
  43. package/dist/esm/chunks/{chunk.UQTJSPU4.js → chunk.6TTLHD2N.js} +2 -2
  44. package/dist/esm/chunks/chunk.6UQ4QU6Q.js +7 -0
  45. package/dist/esm/chunks/{chunk.PWHMNJ5Y.js.map → chunk.6UQ4QU6Q.js.map} +3 -3
  46. package/dist/esm/chunks/{chunk.EMV7JGHB.js → chunk.7EL6SQHJ.js} +2 -2
  47. package/dist/esm/chunks/{chunk.FCTKNIBN.js → chunk.7GETSYAV.js} +2 -2
  48. package/dist/esm/chunks/{chunk.FCTKNIBN.js.map → chunk.7GETSYAV.js.map} +2 -2
  49. package/dist/esm/chunks/{chunk.5E2BG6O3.js → chunk.AO6HECKT.js} +2 -2
  50. package/dist/esm/chunks/{chunk.ON2K3O3I.js → chunk.B3FAMC7O.js} +2 -2
  51. package/dist/esm/chunks/{chunk.76PI42C5.js → chunk.CZW42BMS.js} +2 -2
  52. package/dist/esm/chunks/{chunk.D43PPRFO.js → chunk.DTSUVDYY.js} +2 -2
  53. package/dist/esm/chunks/{chunk.XTMXGKUO.js → chunk.DX6QB7DJ.js} +2 -2
  54. package/dist/esm/chunks/chunk.E5EFBGTJ.js +12 -0
  55. package/dist/esm/chunks/{chunk.Y2I2VRMF.js → chunk.FFABH6GU.js} +2 -2
  56. package/dist/esm/chunks/{chunk.L52XPVYZ.js → chunk.FO3INOWB.js} +2 -2
  57. package/dist/esm/chunks/chunk.FTZHHRGK.js +7 -0
  58. package/dist/esm/chunks/{chunk.MXVJSEF3.js.map → chunk.FTZHHRGK.js.map} +1 -1
  59. package/dist/esm/chunks/{chunk.N6XHXCZE.js → chunk.G23TTQRE.js} +2 -2
  60. package/dist/esm/chunks/chunk.GDYEENZH.js +7 -0
  61. package/dist/esm/chunks/chunk.GDYEENZH.js.map +7 -0
  62. package/dist/esm/chunks/{chunk.DPZU5F27.js → chunk.GIEAUIYJ.js} +2 -2
  63. package/dist/esm/chunks/chunk.HBHYHMJR.js +7 -0
  64. package/dist/esm/chunks/chunk.HBHYHMJR.js.map +7 -0
  65. package/dist/esm/chunks/{chunk.44WDRTRR.js → chunk.HIS5OR6E.js} +2 -2
  66. package/dist/esm/chunks/{chunk.7BAO5IED.js → chunk.HQA6NHEQ.js} +2 -2
  67. package/dist/esm/chunks/chunk.I2Q6DCOP.js +7 -0
  68. package/dist/esm/chunks/chunk.I2Q6DCOP.js.map +7 -0
  69. package/dist/esm/chunks/{chunk.J2PHUKSR.js → chunk.I567TCRS.js} +2 -2
  70. package/dist/esm/chunks/chunk.I6TJZZMO.js +7 -0
  71. package/dist/esm/chunks/chunk.I6TJZZMO.js.map +7 -0
  72. package/dist/esm/chunks/chunk.J3PYKSC7.js +7 -0
  73. package/dist/esm/chunks/chunk.J3PYKSC7.js.map +7 -0
  74. package/dist/esm/chunks/{chunk.BINM3NUA.js → chunk.JDGO7PBU.js} +2 -2
  75. package/dist/esm/chunks/chunk.JE4JMYK4.js +29 -0
  76. package/dist/esm/chunks/chunk.JE4JMYK4.js.map +7 -0
  77. package/dist/esm/chunks/chunk.JGQ574IS.js +7 -0
  78. package/dist/esm/chunks/chunk.JGQ574IS.js.map +7 -0
  79. package/dist/esm/chunks/{chunk.APHMTBRQ.js → chunk.JIEPQLGT.js} +2 -2
  80. package/dist/esm/chunks/{chunk.7NHFZL6J.js → chunk.JOPEH3MU.js} +2 -2
  81. package/dist/esm/chunks/{chunk.43RHBWGI.js → chunk.KDGNGV2Q.js} +2 -2
  82. package/dist/esm/chunks/chunk.KZJYLYWN.js +7 -0
  83. package/dist/esm/chunks/chunk.KZJYLYWN.js.map +7 -0
  84. package/dist/esm/chunks/{chunk.M6PJ3PNN.js → chunk.L3PT6MFO.js} +2 -2
  85. package/dist/esm/chunks/{chunk.AZFF62ZK.js → chunk.LOA2PXPF.js} +2 -2
  86. package/dist/esm/chunks/{chunk.7IHNVPY5.js → chunk.MAG6CV5M.js} +2 -2
  87. package/dist/esm/chunks/{chunk.7IHNVPY5.js.map → chunk.MAG6CV5M.js.map} +3 -3
  88. package/dist/esm/chunks/{chunk.M2ATVI24.js → chunk.N24HFRA7.js} +2 -2
  89. package/dist/esm/chunks/{chunk.YJTE34LC.js → chunk.NGNONQIQ.js} +2 -2
  90. package/dist/esm/chunks/{chunk.SFTWKDQV.js → chunk.NOQTT5CC.js} +2 -2
  91. package/dist/esm/chunks/{chunk.IWICN773.js → chunk.NZI24S27.js} +2 -2
  92. package/dist/esm/chunks/{chunk.GQCUI7YS.js → chunk.O3HLTRZ7.js} +2 -2
  93. package/dist/esm/chunks/chunk.OPU47W2S.js +7 -0
  94. package/dist/esm/chunks/chunk.OPU47W2S.js.map +7 -0
  95. package/dist/esm/chunks/{chunk.IV2GMOPB.js → chunk.OQ2YXL5K.js} +2 -2
  96. package/dist/esm/chunks/{chunk.L3SL4NW6.js → chunk.OVRFFUGY.js} +2 -2
  97. package/dist/esm/chunks/{chunk.COS4RDZB.js → chunk.PIEVCFVP.js} +2 -2
  98. package/dist/esm/chunks/{chunk.IZSUW7WG.js → chunk.PITKIE6U.js} +2 -2
  99. package/dist/esm/chunks/chunk.PVKUTCJL.js +7 -0
  100. package/dist/esm/chunks/chunk.PVKUTCJL.js.map +7 -0
  101. package/dist/esm/chunks/{chunk.4R6NK524.js → chunk.PXXVBTZK.js} +2 -2
  102. package/dist/esm/chunks/chunk.Q5S2PLLO.js +7 -0
  103. package/dist/esm/chunks/chunk.Q5S2PLLO.js.map +7 -0
  104. package/dist/esm/chunks/chunk.QUQ2LN2S.js +7 -0
  105. package/dist/esm/chunks/chunk.QUQ2LN2S.js.map +7 -0
  106. package/dist/esm/chunks/chunk.QY5JYJPV.js +7 -0
  107. package/dist/esm/chunks/chunk.QY5JYJPV.js.map +7 -0
  108. package/dist/esm/chunks/{chunk.OEZZ2NEY.js → chunk.REOK5HDT.js} +2 -2
  109. package/dist/esm/chunks/{chunk.PKVY6EWM.js → chunk.RNV6JSP4.js} +2 -2
  110. package/dist/esm/chunks/chunk.RWXLU5GZ.js +7 -0
  111. package/dist/esm/chunks/chunk.RWXLU5GZ.js.map +7 -0
  112. package/dist/esm/chunks/{chunk.LM57IEFE.js → chunk.S5GROM77.js} +2 -2
  113. package/dist/esm/chunks/{chunk.F5CFD2NG.js → chunk.SFREF7YC.js} +2 -2
  114. package/dist/esm/chunks/{chunk.7SULS4D2.js → chunk.SKFSEWYY.js} +2 -2
  115. package/dist/esm/chunks/chunk.SNGYY7HZ.js +7 -0
  116. package/dist/esm/chunks/chunk.SNGYY7HZ.js.map +7 -0
  117. package/dist/esm/chunks/{chunk.6G4DOKR2.js → chunk.SQESFOGY.js} +2 -2
  118. package/dist/esm/chunks/{chunk.6G4DOKR2.js.map → chunk.SQESFOGY.js.map} +2 -2
  119. package/dist/esm/chunks/{chunk.UVL4TIK2.js → chunk.SS46JP47.js} +2 -2
  120. package/dist/esm/chunks/{chunk.KII37K76.js → chunk.SYGMZUV7.js} +2 -2
  121. package/dist/esm/chunks/{chunk.H3IPTBWM.js → chunk.T7UBP53Q.js} +2 -2
  122. package/dist/esm/chunks/{chunk.NLXSZNQI.js → chunk.TGF5WRAW.js} +2 -2
  123. package/dist/esm/chunks/{chunk.JCDIPDQR.js → chunk.TR4JGRMS.js} +2 -2
  124. package/dist/esm/chunks/{chunk.TBSCULSM.js → chunk.TT4KSKDQ.js} +2 -2
  125. package/dist/esm/chunks/{chunk.TBSCULSM.js.map → chunk.TT4KSKDQ.js.map} +1 -1
  126. package/dist/esm/chunks/{chunk.73GVVX4K.js → chunk.UA7R255A.js} +2 -2
  127. package/dist/esm/chunks/{chunk.73GVVX4K.js.map → chunk.UA7R255A.js.map} +2 -2
  128. package/dist/esm/chunks/{chunk.PADHAJLS.js → chunk.VIMC4REI.js} +2 -2
  129. package/dist/esm/chunks/{chunk.SAQSXX2T.js → chunk.VVAZNQMU.js} +2 -2
  130. package/dist/esm/chunks/{chunk.42QTJZSF.js → chunk.VXT4TNZZ.js} +2 -2
  131. package/dist/esm/chunks/{chunk.6TTAKWXI.js → chunk.WHY2OAQJ.js} +2 -2
  132. package/dist/esm/chunks/{chunk.WOTVTBJS.js → chunk.XQS6FU2G.js} +2 -2
  133. package/dist/esm/chunks/{chunk.AIUIUCZH.js → chunk.YCKKFYVM.js} +2 -2
  134. package/dist/esm/chunks/chunk.YPR3VFCP.js +7 -0
  135. package/dist/esm/chunks/chunk.YPR3VFCP.js.map +7 -0
  136. package/dist/esm/chunks/chunk.ZFBCYZNK.js +7 -0
  137. package/dist/esm/chunks/chunk.ZFBCYZNK.js.map +7 -0
  138. package/dist/esm/chunks/chunk.ZTN2FNFX.js +7 -0
  139. package/dist/esm/chunks/chunk.ZTN2FNFX.js.map +7 -0
  140. package/dist/esm/color-picker/index.js +1 -1
  141. package/dist/esm/core/base/index.js +1 -1
  142. package/dist/esm/core/index.js +1 -1
  143. package/dist/esm/core/utils/index.js +1 -1
  144. package/dist/esm/date-picker/index.js +1 -1
  145. package/dist/esm/date-range-picker/index.js +1 -1
  146. package/dist/esm/dialog/index.js +1 -1
  147. package/dist/esm/drawer/base/index.js +1 -1
  148. package/dist/esm/drawer/drawer/index.js +1 -1
  149. package/dist/esm/drawer/index.js +1 -1
  150. package/dist/esm/drawer/mini-drawer/index.js +1 -1
  151. package/dist/esm/drawer/modal-drawer/index.js +1 -1
  152. package/dist/esm/expansion-panel/index.js +1 -1
  153. package/dist/esm/file-picker/index.js +1 -1
  154. package/dist/esm/floating-action-button/index.js +1 -1
  155. package/dist/esm/icon/index.js +1 -1
  156. package/dist/esm/icon-button/index.js +1 -1
  157. package/dist/esm/index.js +1 -1
  158. package/dist/esm/keyboard-shortcut/index.js +1 -1
  159. package/dist/esm/label-value/index.js +1 -1
  160. package/dist/esm/list/index.js +1 -1
  161. package/dist/esm/list/list/index.js +1 -1
  162. package/dist/esm/list/list-item/index.js +1 -1
  163. package/dist/esm/list-dropdown/index.js +1 -1
  164. package/dist/esm/menu/index.js +1 -1
  165. package/dist/esm/open-icon/index.js +1 -1
  166. package/dist/esm/paginator/index.js +1 -1
  167. package/dist/esm/popup/index.js +1 -1
  168. package/dist/esm/product-icon/index.js +1 -1
  169. package/dist/esm/profile-card/index.js +1 -1
  170. package/dist/esm/quantity-field/index.js +1 -1
  171. package/dist/esm/radio/index.js +1 -1
  172. package/dist/esm/ripple/index.js +1 -1
  173. package/dist/esm/select/core/index.js +1 -1
  174. package/dist/esm/select/index.js +1 -1
  175. package/dist/esm/select/option/index.js +1 -1
  176. package/dist/esm/select/select/index.js +1 -1
  177. package/dist/esm/select/select-dropdown/index.js +1 -1
  178. package/dist/esm/slider/index.js +1 -1
  179. package/dist/esm/split-view/index.js +1 -1
  180. package/dist/esm/split-view/split-view/index.js +1 -1
  181. package/dist/esm/split-view/split-view-panel/index.js +1 -1
  182. package/dist/esm/stack/index.js +1 -1
  183. package/dist/esm/stepper/index.js +1 -1
  184. package/dist/esm/stepper/step/index.js +1 -1
  185. package/dist/esm/stepper/stepper/index.js +1 -1
  186. package/dist/esm/switch/index.js +1 -1
  187. package/dist/esm/table/index.js +1 -1
  188. package/dist/esm/tabs/index.js +1 -1
  189. package/dist/esm/tabs/tab/index.js +1 -1
  190. package/dist/esm/tabs/tab-bar/index.js +1 -1
  191. package/dist/esm/text-field/index.js +1 -1
  192. package/dist/esm/time-picker/index.js +1 -1
  193. package/dist/esm/toast/index.js +1 -1
  194. package/dist/esm/tooltip/index.js +1 -1
  195. package/dist/esm/view-switcher/index.js +1 -1
  196. package/esm/autocomplete/autocomplete.d.ts +8 -2
  197. package/esm/button/button.d.ts +1 -0
  198. package/esm/button/button.js +18 -7
  199. package/esm/button-area/button-area-adapter.d.ts +3 -1
  200. package/esm/button-area/button-area-adapter.js +14 -5
  201. package/esm/button-area/button-area-foundation.js +1 -0
  202. package/esm/calendar/calendar-foundation.js +22 -18
  203. package/esm/calendar/calendar.d.ts +1 -0
  204. package/esm/checkbox/checkbox-adapter.d.ts +1 -0
  205. package/esm/checkbox/checkbox-adapter.js +18 -7
  206. package/esm/core/base/base-adapter.d.ts +4 -2
  207. package/esm/core/base/base-adapter.js +3 -0
  208. package/esm/core/utils/utils.d.ts +5 -2
  209. package/esm/core/utils/utils.js +21 -6
  210. package/esm/date-picker/base/base-date-picker-adapter.js +1 -3
  211. package/esm/date-picker/base/base-date-picker-foundation.js +6 -0
  212. package/esm/dialog/dialog-adapter.d.ts +2 -0
  213. package/esm/dialog/dialog-adapter.js +14 -0
  214. package/esm/dialog/dialog-foundation.js +1 -0
  215. package/esm/icon-button/icon-button.d.ts +2 -0
  216. package/esm/icon-button/icon-button.js +31 -7
  217. package/esm/list/list/list-adapter.d.ts +2 -6
  218. package/esm/list/list/list-adapter.js +29 -18
  219. package/esm/list/list/list-constants.d.ts +2 -2
  220. package/esm/list/list/list-constants.js +3 -3
  221. package/esm/list/list/list-foundation.js +6 -0
  222. package/esm/list/list-item/list-item-adapter.d.ts +3 -3
  223. package/esm/list/list-item/list-item-adapter.js +3 -3
  224. package/esm/list/list-item/list-item-foundation.d.ts +1 -0
  225. package/esm/list/list-item/list-item-foundation.js +12 -2
  226. package/esm/menu/menu-foundation.js +1 -0
  227. package/esm/menu/menu.d.ts +4 -1
  228. package/esm/open-icon/open-icon.js +2 -2
  229. package/esm/paginator/paginator-adapter.d.ts +6 -2
  230. package/esm/paginator/paginator-adapter.js +34 -54
  231. package/esm/paginator/paginator-constants.d.ts +1 -1
  232. package/esm/paginator/paginator-foundation.js +7 -17
  233. package/esm/radio/radio-adapter.d.ts +1 -0
  234. package/esm/radio/radio-adapter.js +18 -7
  235. package/esm/ripple/forge-ripple.d.ts +2 -0
  236. package/esm/ripple/forge-ripple.js +4 -0
  237. package/esm/select/core/base-select.d.ts +4 -1
  238. package/esm/split-view/split-view-panel/split-view-panel.js +1 -1
  239. package/esm/switch/switch.js +15 -2
  240. package/esm/tooltip/tooltip.d.ts +1 -0
  241. package/package.json +2 -2
  242. package/dist/esm/chunks/chunk.45KYMP5J.js +0 -7
  243. package/dist/esm/chunks/chunk.4CWMNWZU.js +0 -7
  244. package/dist/esm/chunks/chunk.4CWMNWZU.js.map +0 -7
  245. package/dist/esm/chunks/chunk.5KC43VFL.js +0 -7
  246. package/dist/esm/chunks/chunk.5KC43VFL.js.map +0 -7
  247. package/dist/esm/chunks/chunk.AHDIUCUB.js +0 -7
  248. package/dist/esm/chunks/chunk.AHDIUCUB.js.map +0 -7
  249. package/dist/esm/chunks/chunk.CE6NTUWI.js +0 -7
  250. package/dist/esm/chunks/chunk.CE6NTUWI.js.map +0 -7
  251. package/dist/esm/chunks/chunk.DLALEZ73.js +0 -7
  252. package/dist/esm/chunks/chunk.DLALEZ73.js.map +0 -7
  253. package/dist/esm/chunks/chunk.DYF2MREZ.js +0 -7
  254. package/dist/esm/chunks/chunk.DYF2MREZ.js.map +0 -7
  255. package/dist/esm/chunks/chunk.ITXUKOKJ.js +0 -7
  256. package/dist/esm/chunks/chunk.ITXUKOKJ.js.map +0 -7
  257. package/dist/esm/chunks/chunk.MXVJSEF3.js +0 -7
  258. package/dist/esm/chunks/chunk.PWHMNJ5Y.js +0 -7
  259. package/dist/esm/chunks/chunk.Q7HX26UO.js +0 -7
  260. package/dist/esm/chunks/chunk.Q7HX26UO.js.map +0 -7
  261. package/dist/esm/chunks/chunk.QZ2NXIGY.js +0 -7
  262. package/dist/esm/chunks/chunk.QZ2NXIGY.js.map +0 -7
  263. package/dist/esm/chunks/chunk.RD7SYOAI.js +0 -12
  264. package/dist/esm/chunks/chunk.RLWX5BFQ.js +0 -7
  265. package/dist/esm/chunks/chunk.RLWX5BFQ.js.map +0 -7
  266. package/dist/esm/chunks/chunk.SXTM6OK4.js +0 -7
  267. package/dist/esm/chunks/chunk.SXTM6OK4.js.map +0 -7
  268. package/dist/esm/chunks/chunk.VT2QJ7SM.js +0 -29
  269. package/dist/esm/chunks/chunk.VT2QJ7SM.js.map +0 -7
  270. package/dist/esm/chunks/chunk.Y66GSZJB.js +0 -7
  271. package/dist/esm/chunks/chunk.Y66GSZJB.js.map +0 -7
  272. package/dist/esm/chunks/chunk.YG24YPYO.js +0 -7
  273. package/dist/esm/chunks/chunk.YG24YPYO.js.map +0 -7
  274. /package/dist/esm/chunks/{chunk.G6GRI7UL.js.map → chunk.34KPY5LA.js.map} +0 -0
  275. /package/dist/esm/chunks/{chunk.KQK2XX5H.js.map → chunk.34QUWF7V.js.map} +0 -0
  276. /package/dist/esm/chunks/{chunk.F5LXG5X7.js.map → chunk.34XMCEIP.js.map} +0 -0
  277. /package/dist/esm/chunks/{chunk.3FAYFYXF.js.map → chunk.4HYZFGYD.js.map} +0 -0
  278. /package/dist/esm/chunks/{chunk.2GDEYC4V.js.map → chunk.4OBKQO2C.js.map} +0 -0
  279. /package/dist/esm/chunks/{chunk.67G7HT5S.js.map → chunk.5TU5W4VX.js.map} +0 -0
  280. /package/dist/esm/chunks/{chunk.UHU4FUIS.js.map → chunk.5XP6JI3R.js.map} +0 -0
  281. /package/dist/esm/chunks/{chunk.TH7RLTJK.js.map → chunk.626HG3FA.js.map} +0 -0
  282. /package/dist/esm/chunks/{chunk.2T6HVSO4.js.map → chunk.6E43KAVU.js.map} +0 -0
  283. /package/dist/esm/chunks/{chunk.3C44DXZ2.js.map → chunk.6M3DKBNE.js.map} +0 -0
  284. /package/dist/esm/chunks/{chunk.UQTJSPU4.js.map → chunk.6TTLHD2N.js.map} +0 -0
  285. /package/dist/esm/chunks/{chunk.EMV7JGHB.js.map → chunk.7EL6SQHJ.js.map} +0 -0
  286. /package/dist/esm/chunks/{chunk.5E2BG6O3.js.map → chunk.AO6HECKT.js.map} +0 -0
  287. /package/dist/esm/chunks/{chunk.ON2K3O3I.js.map → chunk.B3FAMC7O.js.map} +0 -0
  288. /package/dist/esm/chunks/{chunk.76PI42C5.js.map → chunk.CZW42BMS.js.map} +0 -0
  289. /package/dist/esm/chunks/{chunk.D43PPRFO.js.map → chunk.DTSUVDYY.js.map} +0 -0
  290. /package/dist/esm/chunks/{chunk.XTMXGKUO.js.map → chunk.DX6QB7DJ.js.map} +0 -0
  291. /package/dist/esm/chunks/{chunk.RD7SYOAI.js.map → chunk.E5EFBGTJ.js.map} +0 -0
  292. /package/dist/esm/chunks/{chunk.Y2I2VRMF.js.map → chunk.FFABH6GU.js.map} +0 -0
  293. /package/dist/esm/chunks/{chunk.L52XPVYZ.js.map → chunk.FO3INOWB.js.map} +0 -0
  294. /package/dist/esm/chunks/{chunk.N6XHXCZE.js.map → chunk.G23TTQRE.js.map} +0 -0
  295. /package/dist/esm/chunks/{chunk.DPZU5F27.js.map → chunk.GIEAUIYJ.js.map} +0 -0
  296. /package/dist/esm/chunks/{chunk.44WDRTRR.js.map → chunk.HIS5OR6E.js.map} +0 -0
  297. /package/dist/esm/chunks/{chunk.7BAO5IED.js.map → chunk.HQA6NHEQ.js.map} +0 -0
  298. /package/dist/esm/chunks/{chunk.J2PHUKSR.js.map → chunk.I567TCRS.js.map} +0 -0
  299. /package/dist/esm/chunks/{chunk.BINM3NUA.js.map → chunk.JDGO7PBU.js.map} +0 -0
  300. /package/dist/esm/chunks/{chunk.APHMTBRQ.js.map → chunk.JIEPQLGT.js.map} +0 -0
  301. /package/dist/esm/chunks/{chunk.7NHFZL6J.js.map → chunk.JOPEH3MU.js.map} +0 -0
  302. /package/dist/esm/chunks/{chunk.43RHBWGI.js.map → chunk.KDGNGV2Q.js.map} +0 -0
  303. /package/dist/esm/chunks/{chunk.M6PJ3PNN.js.map → chunk.L3PT6MFO.js.map} +0 -0
  304. /package/dist/esm/chunks/{chunk.AZFF62ZK.js.map → chunk.LOA2PXPF.js.map} +0 -0
  305. /package/dist/esm/chunks/{chunk.M2ATVI24.js.map → chunk.N24HFRA7.js.map} +0 -0
  306. /package/dist/esm/chunks/{chunk.YJTE34LC.js.map → chunk.NGNONQIQ.js.map} +0 -0
  307. /package/dist/esm/chunks/{chunk.SFTWKDQV.js.map → chunk.NOQTT5CC.js.map} +0 -0
  308. /package/dist/esm/chunks/{chunk.IWICN773.js.map → chunk.NZI24S27.js.map} +0 -0
  309. /package/dist/esm/chunks/{chunk.GQCUI7YS.js.map → chunk.O3HLTRZ7.js.map} +0 -0
  310. /package/dist/esm/chunks/{chunk.IV2GMOPB.js.map → chunk.OQ2YXL5K.js.map} +0 -0
  311. /package/dist/esm/chunks/{chunk.L3SL4NW6.js.map → chunk.OVRFFUGY.js.map} +0 -0
  312. /package/dist/esm/chunks/{chunk.COS4RDZB.js.map → chunk.PIEVCFVP.js.map} +0 -0
  313. /package/dist/esm/chunks/{chunk.IZSUW7WG.js.map → chunk.PITKIE6U.js.map} +0 -0
  314. /package/dist/esm/chunks/{chunk.4R6NK524.js.map → chunk.PXXVBTZK.js.map} +0 -0
  315. /package/dist/esm/chunks/{chunk.OEZZ2NEY.js.map → chunk.REOK5HDT.js.map} +0 -0
  316. /package/dist/esm/chunks/{chunk.PKVY6EWM.js.map → chunk.RNV6JSP4.js.map} +0 -0
  317. /package/dist/esm/chunks/{chunk.LM57IEFE.js.map → chunk.S5GROM77.js.map} +0 -0
  318. /package/dist/esm/chunks/{chunk.F5CFD2NG.js.map → chunk.SFREF7YC.js.map} +0 -0
  319. /package/dist/esm/chunks/{chunk.7SULS4D2.js.map → chunk.SKFSEWYY.js.map} +0 -0
  320. /package/dist/esm/chunks/{chunk.UVL4TIK2.js.map → chunk.SS46JP47.js.map} +0 -0
  321. /package/dist/esm/chunks/{chunk.KII37K76.js.map → chunk.SYGMZUV7.js.map} +0 -0
  322. /package/dist/esm/chunks/{chunk.H3IPTBWM.js.map → chunk.T7UBP53Q.js.map} +0 -0
  323. /package/dist/esm/chunks/{chunk.NLXSZNQI.js.map → chunk.TGF5WRAW.js.map} +0 -0
  324. /package/dist/esm/chunks/{chunk.JCDIPDQR.js.map → chunk.TR4JGRMS.js.map} +0 -0
  325. /package/dist/esm/chunks/{chunk.PADHAJLS.js.map → chunk.VIMC4REI.js.map} +0 -0
  326. /package/dist/esm/chunks/{chunk.SAQSXX2T.js.map → chunk.VVAZNQMU.js.map} +0 -0
  327. /package/dist/esm/chunks/{chunk.42QTJZSF.js.map → chunk.VXT4TNZZ.js.map} +0 -0
  328. /package/dist/esm/chunks/{chunk.6TTAKWXI.js.map → chunk.WHY2OAQJ.js.map} +0 -0
  329. /package/dist/esm/chunks/{chunk.WOTVTBJS.js.map → chunk.XQS6FU2G.js.map} +0 -0
  330. /package/dist/esm/chunks/{chunk.AIUIUCZH.js.map → chunk.YCKKFYVM.js.map} +0 -0
@@ -7,7 +7,7 @@ import { __decorate } from "tslib";
7
7
  import { CustomElement, ensureChildren, toggleAttribute } from '@tylertech/forge-core';
8
8
  import { BaseComponent } from '../core/base/base-component';
9
9
  import { ALLOWED_CHILDREN, BUTTON_CONSTANTS } from './button-constants';
10
- import { userInteractionListener } from '../core/utils/utils';
10
+ import { createUserInteractionListener } from '../core/utils/utils';
11
11
  import { ForgeRipple } from '../ripple';
12
12
  /**
13
13
  * The custom element class behind the `<forge-button>` element.
@@ -37,6 +37,10 @@ let ButtonComponent = class ButtonComponent extends BaseComponent {
37
37
  }
38
38
  }
39
39
  disconnectedCallback() {
40
+ if (typeof this._destroyUserInteractionListener === 'function') {
41
+ this._destroyUserInteractionListener();
42
+ this._destroyUserInteractionListener = undefined;
43
+ }
40
44
  if (this._rippleInstance) {
41
45
  this._rippleInstance.destroy();
42
46
  }
@@ -102,12 +106,19 @@ let ButtonComponent = class ButtonComponent extends BaseComponent {
102
106
  this._deferRippleInitialization();
103
107
  }
104
108
  async _deferRippleInitialization() {
105
- const type = await userInteractionListener(this._buttonElement);
106
- if (!this._rippleInstance) {
107
- this._rippleInstance = this._createRipple();
108
- if (type === 'focusin') {
109
- this._rippleInstance.handleFocus();
110
- }
109
+ if (typeof this._destroyUserInteractionListener === 'function') {
110
+ this._destroyUserInteractionListener();
111
+ }
112
+ const { userInteraction, destroy } = createUserInteractionListener(this._buttonElement);
113
+ this._destroyUserInteractionListener = destroy;
114
+ const { type } = await userInteraction;
115
+ this._destroyUserInteractionListener = undefined;
116
+ if (!this.isConnected) {
117
+ return;
118
+ }
119
+ this._rippleInstance = this._createRipple();
120
+ if (type === 'focusin') {
121
+ this._rippleInstance.handleFocus();
111
122
  }
112
123
  }
113
124
  _createRipple() {
@@ -7,6 +7,7 @@ import { BaseAdapter, IBaseAdapter } from '../core';
7
7
  import { ForgeRippleCapableSurface } from '../ripple';
8
8
  import { IButtonAreaComponent } from './button-area';
9
9
  export interface IButtonAreaAdapter extends IBaseAdapter {
10
+ destroy(): void;
10
11
  setDisabled(value: boolean): void;
11
12
  addListener(type: string, listener: (event: Event) => void): void;
12
13
  removeListener(type: string, listener: (event: Event) => void): void;
@@ -25,10 +26,12 @@ export declare class ButtonAreaAdapter extends BaseAdapter<IButtonAreaComponent>
25
26
  private _buttonElement?;
26
27
  private _rippleInstance?;
27
28
  private _buttonObserver?;
29
+ private _destroyUserInteractionListener;
28
30
  constructor(component: IButtonAreaComponent);
29
31
  get root(): HTMLElement;
30
32
  get unbounded(): boolean | undefined;
31
33
  get disabled(): boolean | undefined;
34
+ destroy(): void;
32
35
  setDisabled(value: boolean): void;
33
36
  addListener(type: string, listener: (event: Event) => void): void;
34
37
  removeListener(type: string, listener: (event: Event) => void): void;
@@ -40,6 +43,5 @@ export declare class ButtonAreaAdapter extends BaseAdapter<IButtonAreaComponent>
40
43
  buttonIsDisabled(): boolean;
41
44
  requestDisabledButtonFrame(): void;
42
45
  createRipple(): Promise<void>;
43
- private _userInteractionListener;
44
46
  private _isRootEvent;
45
47
  }
@@ -4,7 +4,7 @@
4
4
  * License: Apache-2.0
5
5
  */
6
6
  import { addClass, getShadowElement, removeClass, toggleClass } from '@tylertech/forge-core';
7
- import { BaseAdapter, userInteractionListener } from '../core';
7
+ import { BaseAdapter, createUserInteractionListener } from '../core';
8
8
  import { ForgeRipple, ForgeRippleFoundation } from '../ripple';
9
9
  import { BUTTON_AREA_CONSTANTS } from './button-area-constants';
10
10
  export class ButtonAreaAdapter extends BaseAdapter {
@@ -22,6 +22,12 @@ export class ButtonAreaAdapter extends BaseAdapter {
22
22
  get disabled() {
23
23
  return this.buttonIsDisabled();
24
24
  }
25
+ destroy() {
26
+ if (typeof this._destroyUserInteractionListener === 'function') {
27
+ this._destroyUserInteractionListener();
28
+ this._destroyUserInteractionListener = undefined;
29
+ }
30
+ }
25
31
  setDisabled(value) {
26
32
  var _a;
27
33
  toggleClass(this._rootElement, value, BUTTON_AREA_CONSTANTS.classes.DISABLED);
@@ -67,7 +73,13 @@ export class ButtonAreaAdapter extends BaseAdapter {
67
73
  }
68
74
  async createRipple() {
69
75
  if (!this._rippleInstance) {
70
- const type = await this._userInteractionListener();
76
+ const { userInteraction, destroy } = await createUserInteractionListener(this._rootElement);
77
+ this._destroyUserInteractionListener = destroy;
78
+ const { type } = await userInteraction;
79
+ this._destroyUserInteractionListener = undefined;
80
+ if (!this.isConnected) {
81
+ return;
82
+ }
71
83
  if (!this._rippleInstance) {
72
84
  const adapter = Object.assign(Object.assign({}, ForgeRipple.createAdapter(this)), { isSurfaceActive: () => { var _a, _b; return this._rootElement.matches(':active') || ((_b = (_a = this._buttonElement) === null || _a === void 0 ? void 0 : _a.matches(':active')) !== null && _b !== void 0 ? _b : false); }, isSurfaceDisabled: () => { var _a; return (_a = this.disabled) !== null && _a !== void 0 ? _a : true; }, isUnbounded: () => !!this.unbounded, registerInteractionHandler: (evtType, handler) => {
73
85
  var _a;
@@ -97,9 +109,6 @@ export class ButtonAreaAdapter extends BaseAdapter {
97
109
  this._rippleInstance = undefined;
98
110
  }
99
111
  }
100
- _userInteractionListener() {
101
- return userInteractionListener(this._rootElement);
102
- }
103
112
  _isRootEvent(evtType) {
104
113
  return ['touchstart', 'pointerdown', 'mousedown'].includes(evtType);
105
114
  }
@@ -22,6 +22,7 @@ export class ButtonAreaFoundation {
22
22
  this._adapter.createRipple();
23
23
  }
24
24
  disconnect() {
25
+ this._adapter.destroy();
25
26
  this._adapter.removeListener('click', this._clickListener);
26
27
  this._adapter.removeSlotChangeListener(this._slotListener);
27
28
  this._adapter.stopButtonObserver();
@@ -1170,21 +1170,16 @@ export class CalendarFoundation {
1170
1170
  const year = date.getFullYear();
1171
1171
  const month = date.getMonth();
1172
1172
  this._focusedDate = date;
1173
- if (this._year !== year || this._month !== month) {
1174
- this._month = month;
1175
- this._setMonth();
1176
- this._year = year;
1177
- this._setYear();
1178
- if (this._view !== 'date') {
1179
- this._closeMenu(false, setFocus);
1180
- }
1181
- else {
1182
- this._resetDateGrid();
1183
- }
1184
- }
1185
- else if (this._view !== 'date') {
1173
+ this._month = month;
1174
+ this._setMonth();
1175
+ this._year = year;
1176
+ this._setYear();
1177
+ if (this._view !== 'date') {
1186
1178
  this._closeMenu(false, setFocus);
1187
1179
  }
1180
+ else {
1181
+ this._resetDateGrid();
1182
+ }
1188
1183
  this._adapter.setActiveDate(date, setFocus, this._preventFocus);
1189
1184
  this._emitFocusChangeEvent(this._focusedDate);
1190
1185
  }
@@ -1471,9 +1466,13 @@ export class CalendarFoundation {
1471
1466
  }
1472
1467
  _applyMin() {
1473
1468
  this._adapter.toggleHostAttribute(CALENDAR_CONSTANTS.attributes.MIN, !!this._minAttribute, this._minAttribute);
1474
- if (this._min && (this._min.getMonth() > this._month || this._min.getFullYear() > this._year)) {
1475
- this._year = this._min.getFullYear();
1476
- this._month = this._min.getMonth();
1469
+ if (this._min) {
1470
+ const minFirstOfMonth = new Date(this._min.getFullYear(), this._min.getMonth(), 1);
1471
+ const currentFirstOfMonth = new Date(this._year, this._month, 1);
1472
+ if (minFirstOfMonth > currentFirstOfMonth) {
1473
+ this._year = this._min.getFullYear();
1474
+ this._month = this._min.getMonth();
1475
+ }
1477
1476
  }
1478
1477
  if (this._isInitialized) {
1479
1478
  this._applyDisabledDates();
@@ -1487,8 +1486,13 @@ export class CalendarFoundation {
1487
1486
  }
1488
1487
  _applyMax() {
1489
1488
  this._adapter.toggleHostAttribute(CALENDAR_CONSTANTS.attributes.MAX, !!this._maxAttribute, this._maxAttribute);
1490
- if (this._max && this._max.getMonth() < this._month) {
1491
- this._month = this._max.getMonth();
1489
+ if (this._max) {
1490
+ const maxFirstOfMonth = new Date(this._max.getFullYear(), this._max.getMonth(), 1);
1491
+ const currentFirstOfMonth = new Date(this._year, this._month, 1);
1492
+ if (maxFirstOfMonth < currentFirstOfMonth) {
1493
+ this._year = this._max.getFullYear();
1494
+ this._month = this._max.getMonth();
1495
+ }
1492
1496
  }
1493
1497
  if (this._isInitialized) {
1494
1498
  this._applyDisabledDates();
@@ -53,6 +53,7 @@ export declare class CalendarComponent extends HTMLElement implements ICalendarC
53
53
  connectedCallback(): void;
54
54
  disconnectedCallback(): void;
55
55
  attributeChangedCallback(name: string, oldValue: string, newValue: string): void;
56
+ /** readonly */
56
57
  activeDate: Date;
57
58
  allowSingleDateRange: boolean;
58
59
  clearButton: boolean;
@@ -35,6 +35,7 @@ export declare class CheckboxAdapter extends BaseAdapter<ICheckboxComponent> imp
35
35
  private _inputBlurHandler;
36
36
  private _inputMutationObserver;
37
37
  private _rippleInstance;
38
+ private _destroyUserInteractionListener;
38
39
  constructor(component: ICheckboxComponent);
39
40
  get root(): Element;
40
41
  get unbounded(): boolean | undefined;
@@ -4,7 +4,7 @@
4
4
  * License: Apache-2.0
5
5
  */
6
6
  import { addClass, getShadowElement, removeClass } from '@tylertech/forge-core';
7
- import { userInteractionListener } from '../core';
7
+ import { createUserInteractionListener } from '../core';
8
8
  import { BaseAdapter } from '../core/base/base-adapter';
9
9
  import { ForgeRipple, ForgeRippleFoundation } from '../ripple';
10
10
  import { CHECKBOX_CONSTANTS } from './checkbox-constants';
@@ -28,12 +28,19 @@ export class CheckboxAdapter extends BaseAdapter {
28
28
  this._deferRippleInitialization();
29
29
  }
30
30
  async _deferRippleInitialization() {
31
- const type = await userInteractionListener(this._rootElement);
32
- if (!this._rippleInstance) {
33
- this._rippleInstance = this._createRipple();
34
- if (type === 'focusin') {
35
- this._rippleInstance.handleFocus();
36
- }
31
+ if (typeof this._destroyUserInteractionListener === 'function') {
32
+ this._destroyUserInteractionListener();
33
+ }
34
+ const { userInteraction, destroy } = createUserInteractionListener(this._rootElement);
35
+ this._destroyUserInteractionListener = destroy;
36
+ const { type } = await userInteraction;
37
+ this._destroyUserInteractionListener = undefined;
38
+ if (!this.isConnected) {
39
+ return;
40
+ }
41
+ this._rippleInstance = this._createRipple();
42
+ if (type === 'focusin') {
43
+ this._rippleInstance.handleFocus();
37
44
  }
38
45
  }
39
46
  setDense(value) {
@@ -71,6 +78,10 @@ export class CheckboxAdapter extends BaseAdapter {
71
78
  this._component.removeAttribute(name);
72
79
  }
73
80
  disconnect() {
81
+ if (typeof this._destroyUserInteractionListener === 'function') {
82
+ this._destroyUserInteractionListener();
83
+ this._destroyUserInteractionListener = undefined;
84
+ }
74
85
  if (this._labelElement) {
75
86
  this._labelElement.removeAttribute(CHECKBOX_CONSTANTS.attributes.SLOT);
76
87
  }
@@ -4,7 +4,8 @@
4
4
  * License: Apache-2.0
5
5
  */
6
6
  import { IBaseComponent } from './base-component';
7
- export interface IBaseAdapter {
7
+ export interface IBaseAdapter<T extends HTMLElement = HTMLElement> {
8
+ readonly hostElement: T;
8
9
  readonly isConnected: boolean;
9
10
  removeHostAttribute(name: string): void;
10
11
  getHostAttribute(name: string): string | null;
@@ -21,9 +22,10 @@ export interface IBaseAdapter {
21
22
  setBodyAttribute(name: string, value: string): void;
22
23
  removeBodyAttribute(name: string): void;
23
24
  }
24
- export declare class BaseAdapter<T extends IBaseComponent> implements IBaseAdapter {
25
+ export declare class BaseAdapter<T extends IBaseComponent> implements IBaseAdapter<T> {
25
26
  protected _component: T;
26
27
  constructor(_component: T);
28
+ get hostElement(): T;
27
29
  getHostAttribute(name: string): string | null;
28
30
  setHostAttribute(name: string, value?: string): void;
29
31
  removeHostAttribute(name: string): void;
@@ -8,6 +8,9 @@ export class BaseAdapter {
8
8
  constructor(_component) {
9
9
  this._component = _component;
10
10
  }
11
+ get hostElement() {
12
+ return this._component;
13
+ }
11
14
  getHostAttribute(name) {
12
15
  return this._component.getAttribute(name);
13
16
  }
@@ -18,11 +18,14 @@ export declare function highlightTextHTML(label: string, highlightText: string):
18
18
  * @param capture Whether to use capturing listeners or not.
19
19
  * @returns A `Promise` that will be resolved when either of the listeners has executed.
20
20
  */
21
- export declare function userInteractionListener(element: HTMLElement, { capture, pointerenter, focusin }?: {
21
+ export declare function createUserInteractionListener(element: HTMLElement, { capture, pointerenter, focusin }?: {
22
22
  capture?: boolean | undefined;
23
23
  pointerenter?: boolean | undefined;
24
24
  focusin?: boolean | undefined;
25
- }): Promise<'pointerenter' | 'focusin'>;
25
+ }): {
26
+ userInteraction: Promise<Event>;
27
+ destroy: () => void;
28
+ };
26
29
  /**
27
30
  * Converts a percent value to pixels.
28
31
  * @param amount A percent value.
@@ -33,20 +33,34 @@ export function highlightTextHTML(label, highlightText) {
33
33
  * @param capture Whether to use capturing listeners or not.
34
34
  * @returns A `Promise` that will be resolved when either of the listeners has executed.
35
35
  */
36
- export function userInteractionListener(element, { capture = true, pointerenter = true, focusin = true } = {}) {
37
- return new Promise(resolve => {
36
+ export function createUserInteractionListener(element, { capture = true, pointerenter = true, focusin = true } = {}) {
37
+ let destroyFn;
38
+ const destroy = () => {
39
+ if (typeof destroyFn === 'function') {
40
+ destroyFn();
41
+ }
42
+ };
43
+ const userInteraction = new Promise(resolve => {
38
44
  const listenerOpts = { once: true, capture };
39
- const handlePointerenter = () => {
45
+ const handlePointerenter = (evt) => {
40
46
  if (focusin) {
41
47
  element.removeEventListener('focusin', handleFocusin, listenerOpts);
42
48
  }
43
- resolve('pointerenter');
49
+ resolve(evt);
50
+ };
51
+ const handleFocusin = (evt) => {
52
+ if (pointerenter) {
53
+ element.removeEventListener('pointerenter', handlePointerenter, listenerOpts);
54
+ }
55
+ resolve(evt);
44
56
  };
45
- const handleFocusin = () => {
57
+ destroyFn = () => {
46
58
  if (pointerenter) {
47
59
  element.removeEventListener('pointerenter', handlePointerenter, listenerOpts);
48
60
  }
49
- resolve('focusin');
61
+ if (focusin) {
62
+ element.removeEventListener('focusin', handleFocusin, listenerOpts);
63
+ }
50
64
  };
51
65
  if (pointerenter) {
52
66
  element.addEventListener('pointerenter', handlePointerenter, listenerOpts);
@@ -55,6 +69,7 @@ export function userInteractionListener(element, { capture = true, pointerenter
55
69
  element.addEventListener('focusin', handleFocusin, listenerOpts);
56
70
  }
57
71
  });
72
+ return { userInteraction, destroy };
58
73
  }
59
74
  /**
60
75
  * Converts a percent value to pixels.
@@ -37,9 +37,7 @@ export class BaseDatePickerAdapter extends BaseAdapter {
37
37
  }
38
38
  attachCalendar(calendarConfig, dropdownConfig) {
39
39
  var _a, _b, _c;
40
- if (this._calendarDropdown) {
41
- (_a = this._calendarDropdown) === null || _a === void 0 ? void 0 : _a.destroy();
42
- }
40
+ (_a = this._calendarDropdown) === null || _a === void 0 ? void 0 : _a.destroy();
43
41
  this._initializeCalendarDropdown();
44
42
  if (!this._calendarDropdown) {
45
43
  throw new Error('CalendarDropdown was not initialized.');
@@ -132,6 +132,12 @@ export class BaseDatePickerFoundation {
132
132
  closeCallback: this._dropdownCloseListener,
133
133
  activeChangeCallback: this._activeChangeListener
134
134
  };
135
+ // If the max date is in the past, set the calendar to the min date
136
+ const currentDate = new Date().getTime();
137
+ if (this._min && this._max && this._max.getTime() < currentDate) {
138
+ calendarConfig.year = this._min.getFullYear();
139
+ calendarConfig.month = this._min.getMonth();
140
+ }
135
141
  this._adapter.attachCalendar(calendarConfig, dropdownConfig);
136
142
  this._adapter.addDateSelectListener(this._dateSelectListener);
137
143
  this._open = true;
@@ -26,6 +26,7 @@ export interface IDialogAdapter extends IBaseAdapter {
26
26
  addRootClass(name: string): void;
27
27
  setFullscreen(value: boolean): void;
28
28
  setMoveable(value: boolean): void;
29
+ tryLayoutRippleChildren(): void;
29
30
  setMoveTarget(selector: string): boolean;
30
31
  setMoveTargetHandler(type: string, listener: (evt: MouseEvent) => void): void;
31
32
  removeDragTargetHandler(type: string, listener: (evt: MouseEvent) => void): void;
@@ -63,6 +64,7 @@ export declare class DialogAdapter extends BaseAdapter<IDialogComponent> impleme
63
64
  addRootClass(name: string): void;
64
65
  setFullscreen(value: boolean): void;
65
66
  setMoveable(value: boolean): void;
67
+ tryLayoutRippleChildren(): void;
66
68
  setMoveTarget(selector: string): boolean;
67
69
  setMoveTargetHandler(type: string, listener: (evt: MouseEvent) => void): void;
68
70
  removeDragTargetHandler(type: string, listener: (evt: MouseEvent) => void): void;
@@ -5,7 +5,11 @@
5
5
  */
6
6
  import { deepQuerySelectorAll, getActiveElement, getShadowElement, removeElement, toggleClass } from '@tylertech/forge-core';
7
7
  import { BACKDROP_CONSTANTS } from '../backdrop';
8
+ import { CHECKBOX_CONSTANTS } from '../checkbox/checkbox-constants';
8
9
  import { BaseAdapter } from '../core/base/base-adapter';
10
+ import { ICON_BUTTON_CONSTANTS } from '../icon-button/icon-button-constants';
11
+ import { RADIO_CONSTANTS } from '../radio/radio-constants';
12
+ import { SWITCH_CONSTANTS } from '../switch/switch-constants';
9
13
  import { DIALOG_CONSTANTS } from './dialog-constants';
10
14
  /**
11
15
  * Provides facilities for interacting with the internal DOM of `DialogComponent`.
@@ -103,6 +107,16 @@ export class DialogAdapter extends BaseAdapter {
103
107
  setMoveable(value) {
104
108
  toggleClass(this._containerElement, value, DIALOG_CONSTANTS.classes.MOVEABLE);
105
109
  }
110
+ tryLayoutRippleChildren() {
111
+ const selectors = [
112
+ ICON_BUTTON_CONSTANTS.elementName,
113
+ SWITCH_CONSTANTS.elementName,
114
+ CHECKBOX_CONSTANTS.elementName,
115
+ RADIO_CONSTANTS.elementName
116
+ ];
117
+ const rippleChildren = deepQuerySelectorAll(this._component, selectors.join(':focus-within,'));
118
+ rippleChildren.filter(el => typeof el.layout === 'function').forEach(el => el.layout());
119
+ }
106
120
  setMoveTarget(selector) {
107
121
  if (!selector) {
108
122
  return false;
@@ -168,6 +168,7 @@ export class DialogFoundation {
168
168
  this._adapter.deregisterTransitionEndHandler(this._transitionEndHandler);
169
169
  this._adapter.setAnimating(false);
170
170
  this._adapter.emitHostEvent(DIALOG_CONSTANTS.events.READY);
171
+ this._adapter.tryLayoutRippleChildren();
171
172
  if (this._moveable) {
172
173
  this._initMoveTarget();
173
174
  }
@@ -33,6 +33,8 @@ export declare class IconButtonComponent extends BaseComponent implements IIconB
33
33
  private _dense;
34
34
  private _densityLevel;
35
35
  private _toggleHandler;
36
+ private _buttonAttrMutationObserver;
37
+ private _destroyUserInteractionListener;
36
38
  constructor();
37
39
  connectedCallback(): void;
38
40
  disconnectedCallback(): void;
@@ -7,7 +7,7 @@ import { __decorate } from "tslib";
7
7
  import { coerceBoolean, coerceNumber, CustomElement, emitEvent, ensureChild, toggleClass } from '@tylertech/forge-core';
8
8
  import { BaseComponent } from '../core/base/base-component';
9
9
  import { ForgeRipple } from '../ripple';
10
- import { userInteractionListener } from '../core/utils';
10
+ import { createUserInteractionListener } from '../core/utils';
11
11
  import { ICON_BUTTON_CONSTANTS } from './icon-button-constants';
12
12
  /**
13
13
  * The custom element class behind the `<forge-icon-button>` element.
@@ -39,6 +39,13 @@ let IconButtonComponent = class IconButtonComponent extends BaseComponent {
39
39
  }
40
40
  }
41
41
  disconnectedCallback() {
42
+ if (typeof this._destroyUserInteractionListener === 'function') {
43
+ this._destroyUserInteractionListener();
44
+ this._destroyUserInteractionListener = undefined;
45
+ }
46
+ if (this._buttonAttrMutationObserver) {
47
+ this._buttonAttrMutationObserver.disconnect();
48
+ }
42
49
  if (this._rippleInstance) {
43
50
  this._rippleInstance.destroy();
44
51
  }
@@ -123,6 +130,16 @@ let IconButtonComponent = class IconButtonComponent extends BaseComponent {
123
130
  this._toggleValue();
124
131
  emitEvent(this, ICON_BUTTON_CONSTANTS.events.CHANGE, this._isOn, true);
125
132
  };
133
+ // Watch attributes on the `<button>` element
134
+ this._buttonAttrMutationObserver = new MutationObserver(mutationList => {
135
+ var _a;
136
+ if (mutationList.some(mutation => mutation.attributeName === 'disabled')) {
137
+ if (this._buttonElement.hasAttribute('disabled')) {
138
+ (_a = this._rippleInstance) === null || _a === void 0 ? void 0 : _a.handleBlur();
139
+ }
140
+ }
141
+ });
142
+ this._buttonAttrMutationObserver.observe(this._buttonElement, { attributes: true, attributeFilter: ['disabled'] });
126
143
  if (this._toggle) {
127
144
  this._initializeToggle();
128
145
  }
@@ -130,12 +147,19 @@ let IconButtonComponent = class IconButtonComponent extends BaseComponent {
130
147
  this._deferRippleInitialization();
131
148
  }
132
149
  async _deferRippleInitialization() {
133
- const type = await userInteractionListener(this._buttonElement);
134
- if (!this._rippleInstance) {
135
- this._rippleInstance = this._createRipple();
136
- if (type === 'focusin') {
137
- this._rippleInstance.handleFocus();
138
- }
150
+ if (typeof this._destroyUserInteractionListener === 'function') {
151
+ this._destroyUserInteractionListener();
152
+ }
153
+ const { userInteraction, destroy } = createUserInteractionListener(this._buttonElement);
154
+ this._destroyUserInteractionListener = destroy;
155
+ const { type } = await userInteraction;
156
+ this._destroyUserInteractionListener = undefined;
157
+ if (!this.isConnected) {
158
+ return;
159
+ }
160
+ this._rippleInstance = this._createRipple();
161
+ if (type === 'focusin') {
162
+ this._rippleInstance.handleFocus();
139
163
  }
140
164
  }
141
165
  _createRipple() {
@@ -6,11 +6,10 @@
6
6
  import { BaseAdapter, IBaseAdapter } from '../../core/base/base-adapter';
7
7
  import { IListItemComponent } from '../list-item';
8
8
  import { IListComponent } from './list';
9
- export interface IListAdapter extends IBaseAdapter {
9
+ export interface IListAdapter extends IBaseAdapter<IListComponent> {
10
10
  initializeAccessibility(): void;
11
11
  addListener(type: string, listener: (evt: Event) => void): void;
12
12
  removeListener(type: string, listener: (evt: Event) => void): void;
13
- getListItems(): IListItemComponent[];
14
13
  focusNextListItem(): void;
15
14
  focusPreviousListItem(): void;
16
15
  focusFirstListItem(): void;
@@ -36,10 +35,6 @@ export declare class ListAdapter extends BaseAdapter<IListComponent> implements
36
35
  * @param {Function} listener The event callback.
37
36
  */
38
37
  removeListener(type: string, listener: (evt: Event) => void): void;
39
- /**
40
- * Returns all child `<forge-list-item>` elements.
41
- */
42
- getListItems(): IListItemComponent[];
43
38
  /**
44
39
  * Sets focus to the next item in the list.
45
40
  */
@@ -58,4 +53,5 @@ export declare class ListAdapter extends BaseAdapter<IListComponent> implements
58
53
  focusLastListItem(): void;
59
54
  setSelectedListItems(values: any[]): void;
60
55
  updateListItems(cb: (li: IListItemComponent) => void): void;
56
+ private _getOwnListItems;
61
57
  }
@@ -3,7 +3,7 @@
3
3
  * Copyright 2023 Tyler Technologies, Inc.
4
4
  * License: Apache-2.0
5
5
  */
6
- import { deepQuerySelectorAll, getActiveElement } from '@tylertech/forge-core';
6
+ import { deepQuerySelectorAll } from '@tylertech/forge-core';
7
7
  import { BaseAdapter } from '../../core/base/base-adapter';
8
8
  import { LIST_ITEM_CONSTANTS } from '../list-item';
9
9
  import { LIST_CONSTANTS } from './list-constants';
@@ -35,19 +35,13 @@ export class ListAdapter extends BaseAdapter {
35
35
  removeListener(type, listener) {
36
36
  this._component.removeEventListener(type, listener);
37
37
  }
38
- /**
39
- * Returns all child `<forge-list-item>` elements.
40
- */
41
- getListItems() {
42
- return Array.from(this._component.children).filter(child => child.tagName === LIST_ITEM_CONSTANTS.elementName.toUpperCase());
43
- }
44
38
  /**
45
39
  * Sets focus to the next item in the list.
46
40
  */
47
41
  focusNextListItem() {
48
- const listItems = deepQuerySelectorAll(this._component, LIST_CONSTANTS.selectors.FOCUSABLE_LIST_ITEMS, false);
49
- if (listItems && listItems.length > 0) {
50
- const focusedListItemIndex = listItems.indexOf(getActiveElement(this._component.ownerDocument));
42
+ const listItems = this._getOwnListItems();
43
+ if (listItems.length > 0) {
44
+ const focusedListItemIndex = listItems.findIndex(li => li.matches(':focus-within'));
51
45
  const nextIndex = focusedListItemIndex < listItems.length - 1 ? focusedListItemIndex + 1 : 0;
52
46
  if (nextIndex <= listItems.length - 1) {
53
47
  listItems[nextIndex].focus();
@@ -58,9 +52,9 @@ export class ListAdapter extends BaseAdapter {
58
52
  * Sets focus to the previous item in the list.
59
53
  */
60
54
  focusPreviousListItem() {
61
- const listItems = deepQuerySelectorAll(this._component, LIST_CONSTANTS.selectors.FOCUSABLE_LIST_ITEMS, false);
62
- if (listItems && listItems.length > 0) {
63
- const focusedListItemIndex = listItems.indexOf(getActiveElement(this._component.ownerDocument));
55
+ const listItems = this._getOwnListItems();
56
+ if (listItems.length > 0) {
57
+ const focusedListItemIndex = listItems.findIndex(li => li.matches(':focus-within'));
64
58
  const nextIndex = focusedListItemIndex > 0 ? focusedListItemIndex - 1 : listItems.length - 1;
65
59
  if (nextIndex >= 0) {
66
60
  listItems[nextIndex].focus();
@@ -71,8 +65,8 @@ export class ListAdapter extends BaseAdapter {
71
65
  * Sets focus to the first item in the list.
72
66
  */
73
67
  focusFirstListItem() {
74
- const listItems = deepQuerySelectorAll(this._component, LIST_CONSTANTS.selectors.FOCUSABLE_LIST_ITEMS, false);
75
- if (listItems && listItems.length > 0) {
68
+ const listItems = this._getOwnListItems();
69
+ if (listItems.length > 0) {
76
70
  listItems[0].focus();
77
71
  }
78
72
  }
@@ -80,8 +74,8 @@ export class ListAdapter extends BaseAdapter {
80
74
  * Sets focus to the last item in the list.
81
75
  */
82
76
  focusLastListItem() {
83
- const listItems = deepQuerySelectorAll(this._component, LIST_CONSTANTS.selectors.FOCUSABLE_LIST_ITEMS, false);
84
- if (listItems && listItems.length > 0) {
77
+ const listItems = this._getOwnListItems();
78
+ if (listItems.length > 0) {
85
79
  listItems[listItems.length - 1].focus();
86
80
  }
87
81
  }
@@ -94,6 +88,23 @@ export class ListAdapter extends BaseAdapter {
94
88
  }
95
89
  }
96
90
  updateListItems(cb) {
97
- this.getListItems().forEach(li => cb(li));
91
+ this._getOwnListItems().forEach(li => cb(li));
92
+ }
93
+ _getOwnListItems() {
94
+ // Find all deeply nested list items
95
+ const allChildListItems = deepQuerySelectorAll(this._component, LIST_ITEM_CONSTANTS.elementName);
96
+ // Get all list items that are scoped to this component only (not within sub-lists).
97
+ const scopedListItems = [];
98
+ const listener = evt => {
99
+ const composedPath = evt.composedPath();
100
+ const composedBeforeUs = composedPath.slice(0, composedPath.indexOf(this._component));
101
+ if (!composedBeforeUs.some((el) => el.localName === LIST_CONSTANTS.elementName.toLowerCase())) {
102
+ scopedListItems.push(evt.target);
103
+ }
104
+ };
105
+ this._component.addEventListener(LIST_CONSTANTS.events.SCOPE_TEST, listener);
106
+ allChildListItems.forEach(li => li.dispatchEvent(new CustomEvent(LIST_CONSTANTS.events.SCOPE_TEST, { bubbles: true, composed: true })));
107
+ this._component.removeEventListener(LIST_CONSTANTS.events.SCOPE_TEST, listener);
108
+ return scopedListItems;
98
109
  }
99
110
  }
@@ -12,7 +12,7 @@ export declare const LIST_CONSTANTS: {
12
12
  INDENTED: string;
13
13
  SELECTED_VALUE: string;
14
14
  };
15
- selectors: {
16
- FOCUSABLE_LIST_ITEMS: string;
15
+ events: {
16
+ readonly SCOPE_TEST: "forge-list-item-scope-test";
17
17
  };
18
18
  };