@tylertech/forge 2.21.1 → 2.21.3-dev.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 (378) hide show
  1. package/custom-elements.json +2059 -1221
  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/card/index.js +1 -1
  25. package/dist/esm/checkbox/index.js +1 -1
  26. package/dist/esm/chip-field/index.js +1 -1
  27. package/dist/esm/chips/chip/index.js +1 -1
  28. package/dist/esm/chips/chip-set/index.js +1 -1
  29. package/dist/esm/chips/index.js +1 -1
  30. package/dist/esm/chunks/{chunk.6ATSOUJQ.js → chunk.2PPBLQZB.js} +2 -2
  31. package/dist/esm/chunks/{chunk.4R6NK524.js → chunk.2XZ6BY33.js} +2 -2
  32. package/dist/esm/chunks/{chunk.D43PPRFO.js → chunk.3463HRWW.js} +2 -2
  33. package/dist/esm/chunks/{chunk.L3SL4NW6.js → chunk.3JJ5BNQS.js} +2 -2
  34. package/dist/esm/chunks/{chunk.76PI42C5.js → chunk.3PWL5O53.js} +2 -2
  35. package/dist/esm/chunks/{chunk.NMKDIHFB.js → chunk.4OWKFHAE.js} +2 -2
  36. package/dist/esm/chunks/{chunk.2GDEYC4V.js → chunk.4TDZGLY4.js} +2 -2
  37. package/dist/esm/chunks/{chunk.TBSCULSM.js → chunk.4VOG3DHT.js} +2 -2
  38. package/dist/esm/chunks/{chunk.TBSCULSM.js.map → chunk.4VOG3DHT.js.map} +1 -1
  39. package/dist/esm/chunks/chunk.4W3D3MDK.js +7 -0
  40. package/dist/esm/chunks/chunk.4W3D3MDK.js.map +7 -0
  41. package/dist/esm/chunks/chunk.5ESMU755.js +7 -0
  42. package/dist/esm/chunks/chunk.5ESMU755.js.map +7 -0
  43. package/dist/esm/chunks/chunk.5QKZUMJK.js +7 -0
  44. package/dist/esm/chunks/chunk.5QKZUMJK.js.map +7 -0
  45. package/dist/esm/chunks/chunk.5YRBAF55.js +7 -0
  46. package/dist/esm/chunks/{chunk.45KYMP5J.js.map → chunk.5YRBAF55.js.map} +1 -1
  47. package/dist/esm/chunks/{chunk.5E2BG6O3.js → chunk.62E3LRCI.js} +2 -2
  48. package/dist/esm/chunks/{chunk.JCDIPDQR.js → chunk.6N2DTQEX.js} +2 -2
  49. package/dist/esm/chunks/{chunk.F5CFD2NG.js → chunk.6P5FHZUS.js} +2 -2
  50. package/dist/esm/chunks/{chunk.3FAYFYXF.js → chunk.6PDOZYVS.js} +2 -2
  51. package/dist/esm/chunks/chunk.6YHMCE3A.js +12 -0
  52. package/dist/esm/chunks/chunk.7BPT4PPX.js +7 -0
  53. package/dist/esm/chunks/{chunk.PWHMNJ5Y.js.map → chunk.7BPT4PPX.js.map} +3 -3
  54. package/dist/esm/chunks/{chunk.7IHNVPY5.js → chunk.A52AXPOG.js} +2 -2
  55. package/dist/esm/chunks/{chunk.7IHNVPY5.js.map → chunk.A52AXPOG.js.map} +3 -3
  56. package/dist/esm/chunks/{chunk.RUK5PIER.js → chunk.AAU5YRKV.js} +2 -2
  57. package/dist/esm/chunks/{chunk.NLXSZNQI.js → chunk.AP2U5NXZ.js} +2 -2
  58. package/dist/esm/chunks/{chunk.JD4APKZS.js → chunk.APHQBFX2.js} +2 -2
  59. package/dist/esm/chunks/chunk.AZIQUHDG.js +7 -0
  60. package/dist/esm/chunks/chunk.AZIQUHDG.js.map +7 -0
  61. package/dist/esm/chunks/{chunk.PKVY6EWM.js → chunk.BDIZD35A.js} +2 -2
  62. package/dist/esm/chunks/{chunk.3YT72ZWJ.js → chunk.BLXQYTBF.js} +2 -2
  63. package/dist/esm/chunks/chunk.BTJNWEJC.js +7 -0
  64. package/dist/esm/chunks/chunk.BTJNWEJC.js.map +7 -0
  65. package/dist/esm/chunks/{chunk.GQCUI7YS.js → chunk.BZOB3WK3.js} +2 -2
  66. package/dist/esm/chunks/{chunk.QOA2O575.js → chunk.CP3RUPXU.js} +2 -2
  67. package/dist/esm/chunks/chunk.D4DZUGEV.js +7 -0
  68. package/dist/esm/chunks/chunk.D4DZUGEV.js.map +7 -0
  69. package/dist/esm/chunks/{chunk.F5LXG5X7.js → chunk.DKTVITIN.js} +2 -2
  70. package/dist/esm/chunks/{chunk.OEZZ2NEY.js → chunk.DMNCQ65M.js} +2 -2
  71. package/dist/esm/chunks/chunk.DMVVKGUE.js +7 -0
  72. package/dist/esm/chunks/chunk.DMVVKGUE.js.map +7 -0
  73. package/dist/esm/chunks/chunk.DXKC3WSJ.js +7 -0
  74. package/dist/esm/chunks/chunk.DXKC3WSJ.js.map +7 -0
  75. package/dist/esm/chunks/{chunk.Y2I2VRMF.js → chunk.EWODE3XY.js} +2 -2
  76. package/dist/esm/chunks/{chunk.G6GRI7UL.js → chunk.F2BTDJGX.js} +2 -2
  77. package/dist/esm/chunks/chunk.F44B5HVQ.js +7 -0
  78. package/dist/esm/chunks/chunk.F44B5HVQ.js.map +7 -0
  79. package/dist/esm/chunks/chunk.F4V3I2N6.js +7 -0
  80. package/dist/esm/chunks/chunk.F4V3I2N6.js.map +7 -0
  81. package/dist/esm/chunks/{chunk.42QTJZSF.js → chunk.FHVUINRK.js} +2 -2
  82. package/dist/esm/chunks/{chunk.44WDRTRR.js → chunk.FYRB5HEB.js} +2 -2
  83. package/dist/esm/chunks/{chunk.J2PHUKSR.js → chunk.G237CWYN.js} +2 -2
  84. package/dist/esm/chunks/{chunk.UQTJSPU4.js → chunk.G32SGSIY.js} +2 -2
  85. package/dist/esm/chunks/{chunk.PADHAJLS.js → chunk.H453YDP7.js} +2 -2
  86. package/dist/esm/chunks/{chunk.DPZU5F27.js → chunk.HANVBHOC.js} +2 -2
  87. package/dist/esm/chunks/{chunk.BL4IBI6G.js → chunk.HURHZXUW.js} +2 -2
  88. package/dist/esm/chunks/{chunk.XQ5CDWDY.js → chunk.HXNVTFM2.js} +2 -2
  89. package/dist/esm/chunks/{chunk.SAQSXX2T.js → chunk.I57ANSQV.js} +2 -2
  90. package/dist/esm/chunks/{chunk.Y7YPNMPI.js → chunk.IAIRKZA4.js} +2 -2
  91. package/dist/esm/chunks/{chunk.Y7YPNMPI.js.map → chunk.IAIRKZA4.js.map} +2 -2
  92. package/dist/esm/chunks/{chunk.73GVVX4K.js → chunk.IBUO2ECP.js} +2 -2
  93. package/dist/esm/chunks/{chunk.73GVVX4K.js.map → chunk.IBUO2ECP.js.map} +2 -2
  94. package/dist/esm/chunks/chunk.IEHJRFK3.js +7 -0
  95. package/dist/esm/chunks/chunk.IEHJRFK3.js.map +7 -0
  96. package/dist/esm/chunks/{chunk.6G4DOKR2.js → chunk.IF6EQQHS.js} +2 -2
  97. package/dist/esm/chunks/{chunk.6G4DOKR2.js.map → chunk.IF6EQQHS.js.map} +2 -2
  98. package/dist/esm/chunks/{chunk.FPLHVO6D.js → chunk.IXERIVWC.js} +2 -2
  99. package/dist/esm/chunks/{chunk.AIUIUCZH.js → chunk.J5RH7JNF.js} +2 -2
  100. package/dist/esm/chunks/{chunk.YJTE34LC.js → chunk.JS3EC7ZT.js} +2 -2
  101. package/dist/esm/chunks/{chunk.67G7HT5S.js → chunk.K256XE5K.js} +2 -2
  102. package/dist/esm/chunks/{chunk.APHMTBRQ.js → chunk.KXJTDCIF.js} +2 -2
  103. package/dist/esm/chunks/chunk.KZJYLYWN.js +7 -0
  104. package/dist/esm/chunks/chunk.KZJYLYWN.js.map +7 -0
  105. package/dist/esm/chunks/{chunk.IV2GMOPB.js → chunk.LDHCZ2XZ.js} +2 -2
  106. package/dist/esm/chunks/{chunk.6TTAKWXI.js → chunk.LFNRRMUA.js} +2 -2
  107. package/dist/esm/chunks/{chunk.FCTKNIBN.js → chunk.LLOJKGBZ.js} +2 -2
  108. package/dist/esm/chunks/{chunk.FCTKNIBN.js.map → chunk.LLOJKGBZ.js.map} +2 -2
  109. package/dist/esm/chunks/{chunk.3C44DXZ2.js → chunk.LWKEQQSZ.js} +2 -2
  110. package/dist/esm/chunks/{chunk.7K44O5RO.js → chunk.LZRRQRLQ.js} +2 -2
  111. package/dist/esm/chunks/{chunk.LM57IEFE.js → chunk.MJRCAYWO.js} +2 -2
  112. package/dist/esm/chunks/{chunk.K7HRCGML.js → chunk.MQLALZA2.js} +2 -2
  113. package/dist/esm/chunks/chunk.MQMORXQE.js +7 -0
  114. package/dist/esm/chunks/chunk.MQMORXQE.js.map +7 -0
  115. package/dist/esm/chunks/{chunk.ON2K3O3I.js → chunk.N65R3467.js} +2 -2
  116. package/dist/esm/chunks/{chunk.3IXTRC6Z.js → chunk.NHG22ATF.js} +2 -2
  117. package/dist/esm/chunks/{chunk.7SULS4D2.js → chunk.OHFGFCWK.js} +2 -2
  118. package/dist/esm/chunks/{chunk.43RHBWGI.js → chunk.ONZWRAL2.js} +2 -2
  119. package/dist/esm/chunks/{chunk.TH7RLTJK.js → chunk.OSLPQH7C.js} +2 -2
  120. package/dist/esm/chunks/chunk.OWDH3AE3.js +7 -0
  121. package/dist/esm/chunks/chunk.OWDH3AE3.js.map +7 -0
  122. package/dist/esm/chunks/{chunk.XTMXGKUO.js → chunk.P2OQZWGG.js} +2 -2
  123. package/dist/esm/chunks/{chunk.L52XPVYZ.js → chunk.P4SR3CV7.js} +2 -2
  124. package/dist/esm/chunks/{chunk.KII37K76.js → chunk.P5ZQZKFX.js} +2 -2
  125. package/dist/esm/chunks/chunk.PDH27IKB.js +7 -0
  126. package/dist/esm/chunks/{chunk.VTB27IL7.js → chunk.Q7R5XWS7.js} +2 -2
  127. package/dist/esm/chunks/chunk.RX7IOKBK.js +7 -0
  128. package/dist/esm/chunks/chunk.RX7IOKBK.js.map +7 -0
  129. package/dist/esm/chunks/{chunk.COS4RDZB.js → chunk.SSJFLG7R.js} +2 -2
  130. package/dist/esm/chunks/{chunk.KQK2XX5H.js → chunk.TDF42HNZ.js} +2 -2
  131. package/dist/esm/chunks/chunk.TF4DRMEL.js +7 -0
  132. package/dist/esm/chunks/chunk.TF4DRMEL.js.map +7 -0
  133. package/dist/esm/chunks/{chunk.IZSUW7WG.js → chunk.TJDJHXUO.js} +2 -2
  134. package/dist/esm/chunks/{chunk.CX7MOSLM.js → chunk.TMLHKTB4.js} +2 -2
  135. package/dist/esm/chunks/{chunk.BINM3NUA.js → chunk.TNCZEZGT.js} +2 -2
  136. package/dist/esm/chunks/chunk.TQARIRN7.js +7 -0
  137. package/dist/esm/chunks/chunk.TQARIRN7.js.map +7 -0
  138. package/dist/esm/chunks/{chunk.AZFF62ZK.js → chunk.TTONWP6R.js} +2 -2
  139. package/dist/esm/chunks/{chunk.SFTWKDQV.js → chunk.TTZZQ2LC.js} +2 -2
  140. package/dist/esm/chunks/{chunk.N6XHXCZE.js → chunk.UJ4YJO2U.js} +2 -2
  141. package/dist/esm/chunks/chunk.V5DI7JR6.js +7 -0
  142. package/dist/esm/chunks/chunk.VJA7DAS7.js +29 -0
  143. package/dist/esm/chunks/chunk.VJA7DAS7.js.map +7 -0
  144. package/dist/esm/chunks/{chunk.UVL4TIK2.js → chunk.VPGS3ZWT.js} +2 -2
  145. package/dist/esm/chunks/{chunk.M6PJ3PNN.js → chunk.VPIPNSLG.js} +2 -2
  146. package/dist/esm/chunks/chunk.WFOTCL2T.js +7 -0
  147. package/dist/esm/chunks/chunk.WFOTCL2T.js.map +7 -0
  148. package/dist/esm/chunks/{chunk.M2ATVI24.js → chunk.WGYEDOPA.js} +2 -2
  149. package/dist/esm/chunks/chunk.WJ7SH5VI.js +7 -0
  150. package/dist/esm/chunks/{chunk.IWICN773.js → chunk.WMGXMDNO.js} +2 -2
  151. package/dist/esm/chunks/{chunk.H3IPTBWM.js → chunk.XNNDCXKG.js} +2 -2
  152. package/dist/esm/chunks/chunk.XPW5QMOA.js +7 -0
  153. package/dist/esm/chunks/{chunk.MXVJSEF3.js.map → chunk.XPW5QMOA.js.map} +1 -1
  154. package/dist/esm/chunks/{chunk.EMV7JGHB.js → chunk.Y5KHNONH.js} +2 -2
  155. package/dist/esm/chunks/{chunk.WOTVTBJS.js → chunk.ZA5NG3NP.js} +2 -2
  156. package/dist/esm/chunks/{chunk.2T6HVSO4.js → chunk.ZFXDVJUN.js} +2 -2
  157. package/dist/esm/chunks/{chunk.ZCQO3N25.js → chunk.ZIABFRW3.js} +2 -2
  158. package/dist/esm/circular-progress/index.js +1 -1
  159. package/dist/esm/color-picker/index.js +1 -1
  160. package/dist/esm/core/base/index.js +1 -1
  161. package/dist/esm/core/index.js +1 -1
  162. package/dist/esm/core/utils/index.js +1 -1
  163. package/dist/esm/date-picker/index.js +1 -1
  164. package/dist/esm/date-range-picker/index.js +1 -1
  165. package/dist/esm/dialog/index.js +1 -1
  166. package/dist/esm/divider/index.js +1 -1
  167. package/dist/esm/drawer/base/index.js +1 -1
  168. package/dist/esm/drawer/drawer/index.js +1 -1
  169. package/dist/esm/drawer/index.js +1 -1
  170. package/dist/esm/drawer/mini-drawer/index.js +1 -1
  171. package/dist/esm/drawer/modal-drawer/index.js +1 -1
  172. package/dist/esm/expansion-panel/index.js +1 -1
  173. package/dist/esm/file-picker/index.js +1 -1
  174. package/dist/esm/floating-action-button/index.js +1 -1
  175. package/dist/esm/icon/index.js +1 -1
  176. package/dist/esm/icon-button/index.js +1 -1
  177. package/dist/esm/index.js +1 -1
  178. package/dist/esm/inline-message/index.js +1 -1
  179. package/dist/esm/keyboard-shortcut/index.js +1 -1
  180. package/dist/esm/label-value/index.js +1 -1
  181. package/dist/esm/linear-progress/index.js +1 -1
  182. package/dist/esm/list/index.js +1 -1
  183. package/dist/esm/list/list/index.js +1 -1
  184. package/dist/esm/list/list-item/index.js +1 -1
  185. package/dist/esm/list-dropdown/index.js +1 -1
  186. package/dist/esm/menu/index.js +1 -1
  187. package/dist/esm/open-icon/index.js +1 -1
  188. package/dist/esm/page-state/index.js +1 -1
  189. package/dist/esm/paginator/index.js +1 -1
  190. package/dist/esm/popup/index.js +1 -1
  191. package/dist/esm/product-icon/index.js +1 -1
  192. package/dist/esm/profile-card/index.js +1 -1
  193. package/dist/esm/quantity-field/index.js +1 -1
  194. package/dist/esm/radio/index.js +1 -1
  195. package/dist/esm/ripple/index.js +1 -1
  196. package/dist/esm/scaffold/index.js +1 -1
  197. package/dist/esm/select/core/index.js +1 -1
  198. package/dist/esm/select/index.js +1 -1
  199. package/dist/esm/select/option/index.js +1 -1
  200. package/dist/esm/select/option-group/index.js +1 -1
  201. package/dist/esm/select/select/index.js +1 -1
  202. package/dist/esm/select/select-dropdown/index.js +1 -1
  203. package/dist/esm/skeleton/index.js +1 -1
  204. package/dist/esm/slider/index.js +1 -1
  205. package/dist/esm/split-view/index.js +1 -1
  206. package/dist/esm/split-view/split-view/index.js +1 -1
  207. package/dist/esm/split-view/split-view-panel/index.js +1 -1
  208. package/dist/esm/stack/index.js +1 -1
  209. package/dist/esm/stepper/index.js +1 -1
  210. package/dist/esm/stepper/step/index.js +1 -1
  211. package/dist/esm/stepper/stepper/index.js +1 -1
  212. package/dist/esm/switch/index.js +1 -1
  213. package/dist/esm/table/index.js +1 -1
  214. package/dist/esm/tabs/index.js +1 -1
  215. package/dist/esm/tabs/tab/index.js +1 -1
  216. package/dist/esm/tabs/tab-bar/index.js +1 -1
  217. package/dist/esm/text-field/index.js +1 -1
  218. package/dist/esm/time-picker/index.js +1 -1
  219. package/dist/esm/toast/index.js +1 -1
  220. package/dist/esm/toolbar/index.js +1 -1
  221. package/dist/esm/tooltip/index.js +1 -1
  222. package/dist/esm/view-switcher/index.js +1 -1
  223. package/dist/esm/view-switcher/view/index.js +1 -1
  224. package/esm/autocomplete/autocomplete.d.ts +8 -2
  225. package/esm/button/button.d.ts +1 -0
  226. package/esm/button/button.js +18 -7
  227. package/esm/button-area/button-area-adapter.d.ts +3 -1
  228. package/esm/button-area/button-area-adapter.js +14 -5
  229. package/esm/button-area/button-area-foundation.js +1 -0
  230. package/esm/calendar/calendar-foundation.js +22 -18
  231. package/esm/calendar/calendar.d.ts +1 -0
  232. package/esm/checkbox/checkbox-adapter.d.ts +1 -0
  233. package/esm/checkbox/checkbox-adapter.js +18 -7
  234. package/esm/core/base/base-adapter.d.ts +4 -2
  235. package/esm/core/base/base-adapter.js +3 -0
  236. package/esm/core/utils/utils.d.ts +5 -2
  237. package/esm/core/utils/utils.js +21 -6
  238. package/esm/date-picker/base/base-date-picker-adapter.js +1 -3
  239. package/esm/date-picker/base/base-date-picker-foundation.js +6 -0
  240. package/esm/dialog/dialog-adapter.d.ts +2 -0
  241. package/esm/dialog/dialog-adapter.js +14 -0
  242. package/esm/dialog/dialog-foundation.js +1 -0
  243. package/esm/icon-button/icon-button.d.ts +2 -0
  244. package/esm/icon-button/icon-button.js +31 -7
  245. package/esm/list/list/list-adapter.d.ts +2 -6
  246. package/esm/list/list/list-adapter.js +29 -18
  247. package/esm/list/list/list-constants.d.ts +2 -2
  248. package/esm/list/list/list-constants.js +3 -3
  249. package/esm/list/list/list-foundation.js +6 -0
  250. package/esm/list/list-item/list-item-adapter.d.ts +3 -3
  251. package/esm/list/list-item/list-item-adapter.js +3 -3
  252. package/esm/list/list-item/list-item-foundation.d.ts +1 -0
  253. package/esm/list/list-item/list-item-foundation.js +12 -2
  254. package/esm/menu/menu-foundation.js +1 -0
  255. package/esm/menu/menu.d.ts +4 -1
  256. package/esm/open-icon/open-icon.js +2 -2
  257. package/esm/paginator/paginator-adapter.d.ts +6 -2
  258. package/esm/paginator/paginator-adapter.js +34 -54
  259. package/esm/paginator/paginator-constants.d.ts +1 -1
  260. package/esm/paginator/paginator-foundation.js +7 -17
  261. package/esm/radio/radio-adapter.d.ts +1 -0
  262. package/esm/radio/radio-adapter.js +18 -7
  263. package/esm/ripple/forge-ripple.d.ts +2 -0
  264. package/esm/ripple/forge-ripple.js +4 -0
  265. package/esm/select/core/base-select.d.ts +4 -1
  266. package/esm/split-view/split-view-panel/split-view-panel.js +1 -1
  267. package/esm/switch/switch.js +15 -2
  268. package/esm/tooltip/tooltip.d.ts +1 -0
  269. package/package.json +3 -3
  270. package/dist/esm/chunks/chunk.45KYMP5J.js +0 -7
  271. package/dist/esm/chunks/chunk.4CWMNWZU.js +0 -7
  272. package/dist/esm/chunks/chunk.4CWMNWZU.js.map +0 -7
  273. package/dist/esm/chunks/chunk.5KC43VFL.js +0 -7
  274. package/dist/esm/chunks/chunk.5KC43VFL.js.map +0 -7
  275. package/dist/esm/chunks/chunk.7BAO5IED.js +0 -7
  276. package/dist/esm/chunks/chunk.7NHFZL6J.js +0 -7
  277. package/dist/esm/chunks/chunk.AHDIUCUB.js +0 -7
  278. package/dist/esm/chunks/chunk.AHDIUCUB.js.map +0 -7
  279. package/dist/esm/chunks/chunk.CE6NTUWI.js +0 -7
  280. package/dist/esm/chunks/chunk.CE6NTUWI.js.map +0 -7
  281. package/dist/esm/chunks/chunk.DLALEZ73.js +0 -7
  282. package/dist/esm/chunks/chunk.DLALEZ73.js.map +0 -7
  283. package/dist/esm/chunks/chunk.DYF2MREZ.js +0 -7
  284. package/dist/esm/chunks/chunk.DYF2MREZ.js.map +0 -7
  285. package/dist/esm/chunks/chunk.HOXFK44F.js +0 -7
  286. package/dist/esm/chunks/chunk.HOXFK44F.js.map +0 -7
  287. package/dist/esm/chunks/chunk.ITXUKOKJ.js +0 -7
  288. package/dist/esm/chunks/chunk.ITXUKOKJ.js.map +0 -7
  289. package/dist/esm/chunks/chunk.MXVJSEF3.js +0 -7
  290. package/dist/esm/chunks/chunk.PWHMNJ5Y.js +0 -7
  291. package/dist/esm/chunks/chunk.Q7HX26UO.js +0 -7
  292. package/dist/esm/chunks/chunk.Q7HX26UO.js.map +0 -7
  293. package/dist/esm/chunks/chunk.QZ2NXIGY.js +0 -7
  294. package/dist/esm/chunks/chunk.QZ2NXIGY.js.map +0 -7
  295. package/dist/esm/chunks/chunk.RD7SYOAI.js +0 -12
  296. package/dist/esm/chunks/chunk.RLWX5BFQ.js +0 -7
  297. package/dist/esm/chunks/chunk.RLWX5BFQ.js.map +0 -7
  298. package/dist/esm/chunks/chunk.SXTM6OK4.js +0 -7
  299. package/dist/esm/chunks/chunk.SXTM6OK4.js.map +0 -7
  300. package/dist/esm/chunks/chunk.UHU4FUIS.js +0 -7
  301. package/dist/esm/chunks/chunk.VT2QJ7SM.js +0 -29
  302. package/dist/esm/chunks/chunk.VT2QJ7SM.js.map +0 -7
  303. package/dist/esm/chunks/chunk.Y66GSZJB.js +0 -7
  304. package/dist/esm/chunks/chunk.Y66GSZJB.js.map +0 -7
  305. package/dist/esm/chunks/chunk.YG24YPYO.js +0 -7
  306. package/dist/esm/chunks/chunk.YG24YPYO.js.map +0 -7
  307. /package/dist/esm/chunks/{chunk.6ATSOUJQ.js.map → chunk.2PPBLQZB.js.map} +0 -0
  308. /package/dist/esm/chunks/{chunk.4R6NK524.js.map → chunk.2XZ6BY33.js.map} +0 -0
  309. /package/dist/esm/chunks/{chunk.D43PPRFO.js.map → chunk.3463HRWW.js.map} +0 -0
  310. /package/dist/esm/chunks/{chunk.L3SL4NW6.js.map → chunk.3JJ5BNQS.js.map} +0 -0
  311. /package/dist/esm/chunks/{chunk.76PI42C5.js.map → chunk.3PWL5O53.js.map} +0 -0
  312. /package/dist/esm/chunks/{chunk.NMKDIHFB.js.map → chunk.4OWKFHAE.js.map} +0 -0
  313. /package/dist/esm/chunks/{chunk.2GDEYC4V.js.map → chunk.4TDZGLY4.js.map} +0 -0
  314. /package/dist/esm/chunks/{chunk.5E2BG6O3.js.map → chunk.62E3LRCI.js.map} +0 -0
  315. /package/dist/esm/chunks/{chunk.JCDIPDQR.js.map → chunk.6N2DTQEX.js.map} +0 -0
  316. /package/dist/esm/chunks/{chunk.F5CFD2NG.js.map → chunk.6P5FHZUS.js.map} +0 -0
  317. /package/dist/esm/chunks/{chunk.3FAYFYXF.js.map → chunk.6PDOZYVS.js.map} +0 -0
  318. /package/dist/esm/chunks/{chunk.RD7SYOAI.js.map → chunk.6YHMCE3A.js.map} +0 -0
  319. /package/dist/esm/chunks/{chunk.RUK5PIER.js.map → chunk.AAU5YRKV.js.map} +0 -0
  320. /package/dist/esm/chunks/{chunk.NLXSZNQI.js.map → chunk.AP2U5NXZ.js.map} +0 -0
  321. /package/dist/esm/chunks/{chunk.JD4APKZS.js.map → chunk.APHQBFX2.js.map} +0 -0
  322. /package/dist/esm/chunks/{chunk.PKVY6EWM.js.map → chunk.BDIZD35A.js.map} +0 -0
  323. /package/dist/esm/chunks/{chunk.3YT72ZWJ.js.map → chunk.BLXQYTBF.js.map} +0 -0
  324. /package/dist/esm/chunks/{chunk.GQCUI7YS.js.map → chunk.BZOB3WK3.js.map} +0 -0
  325. /package/dist/esm/chunks/{chunk.QOA2O575.js.map → chunk.CP3RUPXU.js.map} +0 -0
  326. /package/dist/esm/chunks/{chunk.F5LXG5X7.js.map → chunk.DKTVITIN.js.map} +0 -0
  327. /package/dist/esm/chunks/{chunk.OEZZ2NEY.js.map → chunk.DMNCQ65M.js.map} +0 -0
  328. /package/dist/esm/chunks/{chunk.Y2I2VRMF.js.map → chunk.EWODE3XY.js.map} +0 -0
  329. /package/dist/esm/chunks/{chunk.G6GRI7UL.js.map → chunk.F2BTDJGX.js.map} +0 -0
  330. /package/dist/esm/chunks/{chunk.42QTJZSF.js.map → chunk.FHVUINRK.js.map} +0 -0
  331. /package/dist/esm/chunks/{chunk.44WDRTRR.js.map → chunk.FYRB5HEB.js.map} +0 -0
  332. /package/dist/esm/chunks/{chunk.J2PHUKSR.js.map → chunk.G237CWYN.js.map} +0 -0
  333. /package/dist/esm/chunks/{chunk.UQTJSPU4.js.map → chunk.G32SGSIY.js.map} +0 -0
  334. /package/dist/esm/chunks/{chunk.PADHAJLS.js.map → chunk.H453YDP7.js.map} +0 -0
  335. /package/dist/esm/chunks/{chunk.DPZU5F27.js.map → chunk.HANVBHOC.js.map} +0 -0
  336. /package/dist/esm/chunks/{chunk.BL4IBI6G.js.map → chunk.HURHZXUW.js.map} +0 -0
  337. /package/dist/esm/chunks/{chunk.XQ5CDWDY.js.map → chunk.HXNVTFM2.js.map} +0 -0
  338. /package/dist/esm/chunks/{chunk.SAQSXX2T.js.map → chunk.I57ANSQV.js.map} +0 -0
  339. /package/dist/esm/chunks/{chunk.FPLHVO6D.js.map → chunk.IXERIVWC.js.map} +0 -0
  340. /package/dist/esm/chunks/{chunk.AIUIUCZH.js.map → chunk.J5RH7JNF.js.map} +0 -0
  341. /package/dist/esm/chunks/{chunk.YJTE34LC.js.map → chunk.JS3EC7ZT.js.map} +0 -0
  342. /package/dist/esm/chunks/{chunk.67G7HT5S.js.map → chunk.K256XE5K.js.map} +0 -0
  343. /package/dist/esm/chunks/{chunk.APHMTBRQ.js.map → chunk.KXJTDCIF.js.map} +0 -0
  344. /package/dist/esm/chunks/{chunk.IV2GMOPB.js.map → chunk.LDHCZ2XZ.js.map} +0 -0
  345. /package/dist/esm/chunks/{chunk.6TTAKWXI.js.map → chunk.LFNRRMUA.js.map} +0 -0
  346. /package/dist/esm/chunks/{chunk.3C44DXZ2.js.map → chunk.LWKEQQSZ.js.map} +0 -0
  347. /package/dist/esm/chunks/{chunk.7K44O5RO.js.map → chunk.LZRRQRLQ.js.map} +0 -0
  348. /package/dist/esm/chunks/{chunk.LM57IEFE.js.map → chunk.MJRCAYWO.js.map} +0 -0
  349. /package/dist/esm/chunks/{chunk.K7HRCGML.js.map → chunk.MQLALZA2.js.map} +0 -0
  350. /package/dist/esm/chunks/{chunk.ON2K3O3I.js.map → chunk.N65R3467.js.map} +0 -0
  351. /package/dist/esm/chunks/{chunk.3IXTRC6Z.js.map → chunk.NHG22ATF.js.map} +0 -0
  352. /package/dist/esm/chunks/{chunk.7SULS4D2.js.map → chunk.OHFGFCWK.js.map} +0 -0
  353. /package/dist/esm/chunks/{chunk.43RHBWGI.js.map → chunk.ONZWRAL2.js.map} +0 -0
  354. /package/dist/esm/chunks/{chunk.TH7RLTJK.js.map → chunk.OSLPQH7C.js.map} +0 -0
  355. /package/dist/esm/chunks/{chunk.XTMXGKUO.js.map → chunk.P2OQZWGG.js.map} +0 -0
  356. /package/dist/esm/chunks/{chunk.L52XPVYZ.js.map → chunk.P4SR3CV7.js.map} +0 -0
  357. /package/dist/esm/chunks/{chunk.KII37K76.js.map → chunk.P5ZQZKFX.js.map} +0 -0
  358. /package/dist/esm/chunks/{chunk.7NHFZL6J.js.map → chunk.PDH27IKB.js.map} +0 -0
  359. /package/dist/esm/chunks/{chunk.VTB27IL7.js.map → chunk.Q7R5XWS7.js.map} +0 -0
  360. /package/dist/esm/chunks/{chunk.COS4RDZB.js.map → chunk.SSJFLG7R.js.map} +0 -0
  361. /package/dist/esm/chunks/{chunk.KQK2XX5H.js.map → chunk.TDF42HNZ.js.map} +0 -0
  362. /package/dist/esm/chunks/{chunk.IZSUW7WG.js.map → chunk.TJDJHXUO.js.map} +0 -0
  363. /package/dist/esm/chunks/{chunk.CX7MOSLM.js.map → chunk.TMLHKTB4.js.map} +0 -0
  364. /package/dist/esm/chunks/{chunk.BINM3NUA.js.map → chunk.TNCZEZGT.js.map} +0 -0
  365. /package/dist/esm/chunks/{chunk.AZFF62ZK.js.map → chunk.TTONWP6R.js.map} +0 -0
  366. /package/dist/esm/chunks/{chunk.SFTWKDQV.js.map → chunk.TTZZQ2LC.js.map} +0 -0
  367. /package/dist/esm/chunks/{chunk.N6XHXCZE.js.map → chunk.UJ4YJO2U.js.map} +0 -0
  368. /package/dist/esm/chunks/{chunk.7BAO5IED.js.map → chunk.V5DI7JR6.js.map} +0 -0
  369. /package/dist/esm/chunks/{chunk.UVL4TIK2.js.map → chunk.VPGS3ZWT.js.map} +0 -0
  370. /package/dist/esm/chunks/{chunk.M6PJ3PNN.js.map → chunk.VPIPNSLG.js.map} +0 -0
  371. /package/dist/esm/chunks/{chunk.M2ATVI24.js.map → chunk.WGYEDOPA.js.map} +0 -0
  372. /package/dist/esm/chunks/{chunk.UHU4FUIS.js.map → chunk.WJ7SH5VI.js.map} +0 -0
  373. /package/dist/esm/chunks/{chunk.IWICN773.js.map → chunk.WMGXMDNO.js.map} +0 -0
  374. /package/dist/esm/chunks/{chunk.H3IPTBWM.js.map → chunk.XNNDCXKG.js.map} +0 -0
  375. /package/dist/esm/chunks/{chunk.EMV7JGHB.js.map → chunk.Y5KHNONH.js.map} +0 -0
  376. /package/dist/esm/chunks/{chunk.WOTVTBJS.js.map → chunk.ZA5NG3NP.js.map} +0 -0
  377. /package/dist/esm/chunks/{chunk.2T6HVSO4.js.map → chunk.ZFXDVJUN.js.map} +0 -0
  378. /package/dist/esm/chunks/{chunk.ZCQO3N25.js.map → chunk.ZIABFRW3.js.map} +0 -0
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/menu/menu-constants.ts", "../../src/menu/menu-adapter.ts", "../../src/menu/menu-foundation.ts", "../../src/menu/menu.ts", "../../src/menu/index.ts"],
4
- "sourcesContent": ["import { COMPONENT_NAME_PREFIX } from '../constants';\nimport { IListDropdownOption, IListDropdownOptionGroup } from '../list-dropdown';\n\nconst elementName: keyof HTMLElementTagNameMap = `${COMPONENT_NAME_PREFIX}menu`;\n\nconst classes = {\n POPUP: 'forge-menu__popup',\n MENU: 'mdc-menu'\n};\n\nconst selectors = {\n TOGGLE: `.${elementName}__toggle,[${elementName}-toggle],button,[type=button],[role=button],a,[tabindex]:not([tabindex^=\"-\"])`,\n MENU_LIST: 'forge-list'\n};\n\nconst attributes = {\n OPEN: 'open',\n PLACEMENT: 'placement',\n SELECTED_INDEX: 'selected-index',\n SELECTED_VALUE: 'selected-value',\n DENSE: 'dense',\n ICON_CLASS: 'icon-class',\n PERSIST_SELECTION: 'persist-selection',\n MODE: 'mode',\n SYNC_POPUP_WIDTH: 'sync-popup-width',\n POPUP_CLASSES: 'popup-classes',\n OPTION_LIMIT: 'option-limit',\n OBSERVE_SCROLL: 'observe-scroll',\n OBSERVE_SCROLL_THRESHOLD: 'observe-scroll-threshold'\n};\n\nconst events = {\n SELECT: `${elementName}-select`,\n OPEN: `${elementName}-open`,\n CLOSE: `${elementName}-close`,\n ACTIVE_CHANGE: `${elementName}-active-change`\n};\n\nconst numbers = {\n CHILD_MOUSE_LEAVE_TIMEOUT: 300,\n POPUP_MOUSE_LEAVE_TIMEOUT: 500\n};\n\nexport const MENU_CONSTANTS = {\n elementName,\n classes,\n selectors,\n attributes,\n events,\n numbers\n};\n\nexport interface IMenuSelectEventData<T = any, K = any> {\n index: number;\n value?: T;\n parentValue?: K;\n}\n\nexport interface IMenuActiveChangeEventData {\n id: string;\n}\n\nexport interface IMenuOption<T = any> extends IListDropdownOption<T> {\n icon?: string;\n selected?: boolean;\n}\n\nexport interface IMenuOptionGroup extends IListDropdownOptionGroup {}\n\nexport type MenuOptionBuilder = (option: IMenuOption, parentElement: HTMLElement) => HTMLElement | string | void;\nexport type MenuOptionFactory = (() => Array<IMenuOption | IMenuOptionGroup>) | (() => Promise<Array<IMenuOption | IMenuOptionGroup>>);\nexport type MenuMode = 'click' | 'cascade';\n", "import { BaseAdapter, IBaseAdapter } from '../core/base/base-adapter';\nimport { IMenuOption } from './index';\nimport { IMenuComponent } from './menu';\nimport { MENU_CONSTANTS, IMenuSelectEventData, IMenuOptionGroup } from './menu-constants';\nimport { IListDropdownConfig, IListDropdown, ListDropdown } from '../list-dropdown';\nimport { IListComponent, IListItemComponent, LIST_CONSTANTS, LIST_ITEM_CONSTANTS } from '../list';\n\nexport interface IMenuAdapter extends IBaseAdapter {\n getDropdownElement(): HTMLElement | null;\n initializeTarget(): void;\n initializeAccessibility(id: string): void;\n hasTargetElement(): boolean;\n addTargetListener(event: string, callback: (event: Event) => void, bubbles?: boolean): void;\n removeTargetListener(event: string, callback: (event: Event) => void): void;\n attachMenu(config: IListDropdownConfig): void;\n detachMenu(): void;\n setOptions(options: Array<IMenuOption | IMenuOptionGroup>): void;\n getActiveOptionIndex(): number;\n setActiveOption(index: number): void;\n activateFirstOption(): void;\n setCascadeTargetInactive(): void;\n propagateKey(key: string): void;\n proxyKeyboardEventToChild(evt: KeyboardEvent, id: string): void;\n toggleChildMenu(index: number, open?: boolean): void;\n focusTarget(): void;\n isTargetFocused(): boolean;\n updateActiveDescendant(id: string): void;\n isOwnElement(element: Element): boolean;\n addDropdownListener(type: string, listener: (evt: any) => void): void;\n createChildMenu(index: number, parentValue: any, openCb: (index: number) => void, closeCb: (index: number) => void, selectCb: (data: IMenuSelectEventData) => void): IMenuComponent;\n closeOtherChildMenus(excludeIndex?: number): void;\n setSelectedValues(values: any[]): void;\n}\n\nexport class MenuAdapter extends BaseAdapter<IMenuComponent> implements IMenuAdapter {\n private _targetElement: HTMLElement | null;\n private _listDropdown?: IListDropdown;\n private _childMenus = new Map<number, IMenuComponent>();\n\n constructor(component: IMenuComponent) {\n super(component);\n }\n\n public getDropdownElement(): HTMLElement | null {\n return this._listDropdown?.dropdownElement ?? null;\n }\n\n public hasTargetElement(): boolean {\n return !!this._targetElement;\n }\n\n public initializeTarget(): void {\n this._targetElement = this._component.querySelector(MENU_CONSTANTS.selectors.TOGGLE);\n if (!this._targetElement) {\n this._targetElement = this._component.firstElementChild as HTMLElement;\n }\n }\n\n public initializeAccessibility(id: string): void {\n if (!this._targetElement) {\n return;\n }\n\n this._targetElement.setAttribute('aria-atomic', 'true');\n this._targetElement.setAttribute('aria-live', 'assertive');\n this._targetElement.setAttribute('aria-haspopup', 'true');\n this._targetElement.setAttribute('aria-expanded', 'false');\n\n if (!this._targetElement.hasAttribute('aria-label')) {\n this._targetElement.setAttribute('aria-label', this._targetElement.textContent || '');\n }\n }\n\n public addTargetListener(event: string, callback: (event: Event) => void, bubbles = false): void {\n if (this._targetElement) {\n this._targetElement.addEventListener(event, callback, bubbles);\n }\n }\n\n public removeTargetListener(event: string, callback: (event: Event) => void): void {\n if (this._targetElement) {\n this._targetElement.removeEventListener(event, callback);\n }\n }\n\n public attachMenu(config: IListDropdownConfig): void {\n if (this._listDropdown || !this._targetElement) {\n return;\n }\n this._listDropdown = new ListDropdown(this._targetElement as HTMLElement, config);\n this._listDropdown.open();\n this._targetElement.setAttribute('aria-expanded', 'true');\n this._targetElement.setAttribute('aria-controls', `list-dropdown-popup-${config.id}`);\n }\n\n public setOptions(options: Array<IMenuOption | IMenuOptionGroup>): void {\n if (this._listDropdown) {\n this._listDropdown.setOptions(options);\n }\n }\n\n public detachMenu(): void {\n if (this._targetElement) {\n this._targetElement.removeAttribute('aria-activedescendant');\n this._targetElement.removeAttribute('aria-expanded');\n this._targetElement.removeAttribute('aria-controls');\n }\n\n if (this._listDropdown) {\n this._listDropdown.close();\n this._listDropdown.destroy();\n this._listDropdown = undefined;\n }\n }\n\n public setActiveOption(index: number): void {\n this._listDropdown?.activateOption(index);\n }\n\n public activateFirstOption(): void {\n this._listDropdown?.activateFirstOption();\n }\n\n public setCascadeTargetInactive(): void {\n const listItem = this._targetElement as IListItemComponent;\n if (listItem?.active) {\n listItem.active = false;\n }\n }\n\n public getActiveOptionIndex(): number {\n return this._listDropdown?.getActiveOptionIndex() ?? -1;\n }\n\n public focusTarget(): void {\n if (this._targetElement) {\n this._targetElement.focus();\n }\n }\n\n public isTargetFocused(): boolean {\n return document.activeElement === this._targetElement;\n }\n\n public updateActiveDescendant(id: string): void {\n if (!this._targetElement) {\n return;\n }\n if (id) {\n this._targetElement.setAttribute('aria-activedescendant', id);\n } else {\n this._targetElement.removeAttribute('aria-activedescendant');\n }\n }\n\n public addDropdownListener(type: string, listener: (evt: any) => void): void {\n if (!this._listDropdown || !this._listDropdown.dropdownElement) {\n return;\n }\n this._listDropdown.dropdownElement.addEventListener(type, listener);\n }\n\n public isOwnElement(el: Element): boolean {\n if (!this._targetElement || !this._listDropdown || !this._listDropdown.dropdownElement) {\n return false;\n }\n return this._targetElement.contains(el) || !!this._listDropdown.dropdownElement.contains(el);\n }\n\n public propagateKey(key: string): void {\n this._listDropdown?.handleKey(key);\n }\n\n public proxyKeyboardEventToChild(evt: KeyboardEvent, id: string): void {\n if (!this.getDropdownElement()) {\n return;\n }\n const openMenu = this._getOpenChildMenu(id);\n if (openMenu) {\n openMenu.propagateKeyEvent(evt);\n }\n }\n\n public toggleChildMenu(index: number, open?: boolean): void {\n const listItems = this._getListItems();\n const listItem = listItems[index];\n const childMenu = listItem.parentElement as IMenuComponent;\n if (childMenu && childMenu.tagName.toLowerCase() === MENU_CONSTANTS.elementName) {\n if (open === undefined) {\n childMenu.open = !childMenu.open;\n } else {\n childMenu.open = open;\n }\n childMenu.activateFirstOption();\n }\n }\n\n public createChildMenu(index: number, parentValue: any, openCb: (index: number) => void, closeCb: (index: number) => void, selectCb: (data: IMenuSelectEventData) => void): IMenuComponent {\n const menu = document.createElement('forge-menu');\n menu.style.display = 'block';\n\n // Set listeners to notify the parent menu when anything important happens within a child menu that needs to be propagated to the root menu\n menu.addEventListener(MENU_CONSTANTS.events.OPEN, () => {\n this._childMenus.set(index, menu);\n openCb(index);\n });\n menu.addEventListener(MENU_CONSTANTS.events.CLOSE, () => {\n this._childMenus.delete(index);\n closeCb(index);\n });\n menu.addEventListener(MENU_CONSTANTS.events.SELECT, (evt: CustomEvent<IMenuSelectEventData>) => {\n evt.stopPropagation();\n selectCb({ ...evt.detail, parentValue });\n });\n\n return menu;\n }\n\n public closeOtherChildMenus(excludeIndex?: number): void {\n const menusToRemove: number[] = [];\n this._childMenus.forEach((menu, index) => {\n if (index !== excludeIndex) {\n menu.open = false;\n menusToRemove.push(index);\n }\n });\n menusToRemove.forEach(index => this._childMenus.delete(index));\n }\n\n public setSelectedValues(values: any[]): void {\n this._listDropdown?.setSelectedValues(values);\n }\n\n private _getOpenChildMenu(id: string): IMenuComponent | null {\n if (!this.getDropdownElement()) {\n return null;\n }\n const list = this._getOwnList(id);\n return list ? list.querySelector(`${MENU_CONSTANTS.elementName}[${MENU_CONSTANTS.attributes.OPEN}]`) : null;\n }\n\n private _getOwnList(id: string): IListComponent | null {\n const popup = this.getDropdownElement();\n if (!popup) {\n return null;\n }\n return popup.querySelector(`${LIST_CONSTANTS.elementName}[id=\"list-dropdown-list-${id}\"]`);\n }\n\n private _getListItems(): IListItemComponent[] {\n const popup = this.getDropdownElement();\n if (!popup) {\n return [];\n }\n const listElement = popup.querySelector(LIST_CONSTANTS.elementName);\n if (listElement) {\n return Array.from(listElement.querySelectorAll(LIST_ITEM_CONSTANTS.elementName)) as IListItemComponent[];\n }\n return [];\n }\n}\n", "import { ICustomElementFoundation, isArray, randomChars } from '@tylertech/forge-core';\nimport { ICON_CLASS_NAME } from '../constants';\nimport { CascadingListDropdownAwareFoundation, IListDropdownCascadingElementFactoryConfig, IListDropdownConfig, ListDropdownAsyncStyle, ListDropdownType } from '../list-dropdown';\nimport { isListDropdownOptionType, ListDropdownOptionType } from '../list-dropdown/list-dropdown-utils';\nimport { IPopupPosition, PopupPlacement } from '../popup';\nimport { IMenuOption } from './index';\nimport { IMenuAdapter } from './menu-adapter';\nimport { IMenuActiveChangeEventData, IMenuOptionGroup, IMenuSelectEventData, MenuMode, MenuOptionBuilder, MenuOptionFactory, MENU_CONSTANTS } from './menu-constants';\n\nexport interface IMenuFoundation extends ICustomElementFoundation {\n initialize(): void;\n disconnect(): void;\n onKeydown(evt: KeyboardEvent): void;\n open: boolean;\n options: Array<IMenuOption | IMenuOptionGroup>;\n optionsFactory: MenuOptionFactory | undefined;\n selectedIndex: number;\n selectedValue: any;\n placement: PopupPlacement;\n fallbackPlacements: PopupPlacement[];\n dense: boolean;\n iconClass: string;\n persistSelection: boolean;\n mode: MenuMode;\n popupOffset: IPopupPosition;\n optionBuilder: MenuOptionBuilder | undefined;\n activateFirstOption(): void;\n}\n\nexport class MenuFoundation extends CascadingListDropdownAwareFoundation<IMenuOption | IMenuOptionGroup> implements IMenuFoundation {\n private _optionsFactory: MenuOptionFactory | undefined;\n private _placement: PopupPlacement = 'bottom-start';\n private _fallbackPlacements: PopupPlacement[] = [];\n private _dense = false;\n private _selectedValue: any;\n private _iconClass = ICON_CLASS_NAME;\n private _persistSelection = false;\n private _mode: MenuMode = 'click';\n private _popupOffset: IPopupPosition;\n private _optionBuilder: MenuOptionBuilder | undefined;\n private _identifier: string;\n private _clickListener: (evt: MouseEvent) => void;\n private _blurListener: (evt: MouseEvent) => void;\n private _selectListener: (value: any) => void;\n private _keydownListener: (evt: KeyboardEvent) => void;\n private _activeChangeListener: (id: string) => void;\n \n constructor(private _adapter: IMenuAdapter) {\n super({\n popupTimeout: MENU_CONSTANTS.numbers.POPUP_MOUSE_LEAVE_TIMEOUT,\n targetTimeout: MENU_CONSTANTS.numbers.CHILD_MOUSE_LEAVE_TIMEOUT\n });\n this._identifier = randomChars();\n this._clickListener = evt => this._onTargetClick(evt);\n this._blurListener = evt => this._onTargetBlur(evt);\n this._selectListener = value => this._handleSelectEvent(value);\n this._keydownListener = evt => this.onKeydown(evt);\n this._activeChangeListener = id => this._onActiveOptionChanged(id);\n }\n\n public initialize(): void {\n this._adapter.initializeTarget();\n this._adapter.initializeAccessibility(this._identifier);\n this._initializeInteractionListeners();\n }\n\n public disconnect(): void {\n if (this._open) {\n this._closeDropdown();\n }\n this._destroyInteractionListeners();\n }\n\n public activateFirstOption(): void {\n this._adapter.activateFirstOption();\n }\n\n private _applyMode(): void {\n if (!this._adapter.hasTargetElement()) {\n return;\n }\n\n if (this._mode !== 'cascade') {\n this._adapter.addTargetListener('click', this._clickListener);\n } else {\n this._attachCascadingListeners();\n }\n }\n\n private _initializeInteractionListeners(): void {\n if (!this._adapter.hasTargetElement()) {\n return;\n }\n this._applyMode();\n this._adapter.addTargetListener('keydown', this._keydownListener, true);\n this._adapter.addTargetListener('focusout', this._blurListener);\n }\n\n private _destroyInteractionListeners(): void {\n if (!this._adapter.hasTargetElement()) {\n return;\n }\n this._adapter.removeTargetListener('keydown', this._clickListener);\n this._adapter.removeTargetListener('focusout', this._blurListener);\n this._adapter.removeTargetListener('click', this._clickListener);\n this._detachCascadingListeners();\n }\n\n protected _attachCascadingListeners(): void {\n this._adapter.addTargetListener('mouseenter', this._targetMouseEnterListener);\n this._adapter.addTargetListener('mouseleave', this._targetMouseLeaveListener);\n\n // We listen for document mousemove events only to track mouse coords for use when determining\n // if popups should open/close after specific delays\n this._adapter.addDocumentListener('mousemove', this._documentMouseMoveListener);\n }\n\n protected _detachCascadingListeners(): void {\n this._adapter.removeTargetListener('mouseenter', this._targetMouseEnterListener);\n this._adapter.removeTargetListener('mouseleave', this._targetMouseLeaveListener);\n this._adapter.removeDocumentListener('mousemove', this._documentMouseMoveListener);\n }\n\n private get _nonDividerOptions(): IMenuOption[] {\n return this._flatOptions.filter(o => !o.divider);\n }\n\n private get _flatOptions(): IMenuOption[] {\n return this._flattenOptions(this._options);\n }\n\n private _flattenOptions(options: Array<IMenuOption | IMenuOptionGroup>): IMenuOption[] {\n if (isListDropdownOptionType(options, ListDropdownOptionType.Group)) {\n return (options as IMenuOptionGroup[])\n .reduce((previousValue, currentValue) => {\n return currentValue.options ? previousValue.concat(currentValue.options) : previousValue;\n }, [] as IMenuOption[]);\n }\n return options as IMenuOption[];\n }\n\n private _onTargetClick(evt: MouseEvent): void {\n if (this._open) {\n this._closeDropdown();\n return;\n }\n this.open = !this._open;\n if (this._open) {\n this._adapter.focusTarget();\n }\n }\n\n private _onTargetBlur(evt: Event): void {\n if (this._open) {\n this._closeDropdown();\n }\n }\n\n private _onActiveOptionChanged(id: string): void {\n // We need to dispatch an event when the active descendant changes to propagate that to the proper target element\n const data: IMenuActiveChangeEventData = { id };\n const canSetActiveDescendant = this._adapter.emitHostEvent(MENU_CONSTANTS.events.ACTIVE_CHANGE, data, true, true);\n if (this._mode !== 'cascade' && canSetActiveDescendant) {\n this._adapter.updateActiveDescendant(id);\n }\n }\n\n public onKeydown(evt: KeyboardEvent): void {\n // If we have any child menus open, we need to proxy the keyboard events to those and exit\n if (this._childOpen) {\n this._adapter.proxyKeyboardEventToChild(evt, this._identifier);\n return;\n }\n\n switch (evt.code) {\n case 'Tab':\n if (this._open) {\n this._selectActiveOption();\n }\n break;\n case 'Escape':\n if (this._open) {\n evt.preventDefault();\n evt.stopPropagation();\n this._closeDropdown();\n }\n break;\n case 'Space':\n evt.preventDefault();\n\n if (this._open) {\n this._closeDropdown();\n } else {\n this._openDropdown({ fromKeyboard: true });\n }\n break;\n case 'Home':\n case 'End':\n if (this._open) {\n evt.preventDefault();\n this._adapter.propagateKey(evt.code);\n }\n break;\n case 'Enter':\n evt.preventDefault();\n\n if (!this._open) {\n evt.preventDefault();\n this._openDropdown({ fromKeyboard: true });\n return;\n }\n\n evt.stopImmediatePropagation();\n\n this._adapter.propagateKey(evt.code);\n\n // Check if we need to toggle the child menu open state\n const activeIndex = this._adapter.getActiveOptionIndex();\n const activeOption = this._nonDividerOptions[activeIndex];\n if (activeOption && activeOption.options && activeOption.options.length) {\n this._adapter.toggleChildMenu(activeIndex);\n }\n break;\n case 'ArrowUp':\n case 'ArrowDown':\n if (this._open) {\n evt.stopImmediatePropagation();\n }\n\n evt.preventDefault();\n\n if (!this._open && evt.code === 'ArrowDown') {\n this._openDropdown({ fromKeyboard: true });\n this._adapter.activateFirstOption();\n return;\n }\n\n this._adapter.propagateKey(evt.code);\n break;\n case 'ArrowLeft':\n if (this._open) {\n evt.stopImmediatePropagation();\n }\n if (this._mode === 'cascade' && this._open) {\n this._closeDropdown();\n }\n break;\n case 'ArrowRight':\n if (this._open) {\n evt.stopImmediatePropagation();\n }\n if (!this._open) {\n return;\n }\n const hoveredIndex = this._adapter.getActiveOptionIndex();\n const hoveredOption = this._nonDividerOptions[hoveredIndex];\n if (hoveredOption && hoveredOption.options) {\n this._adapter.toggleChildMenu(hoveredIndex, evt.code === 'ArrowRight');\n return;\n }\n break;\n }\n }\n\n private async _openMenu({ fromKeyboard }: { fromKeyboard?: boolean } = {}): Promise<void> {\n this._open = true;\n let options: IMenuOption[] = [];\n\n if (typeof this._optionsFactory === 'function') {\n this._loadOptionsAsync();\n this._options = [];\n } else {\n if (!this._options || !this._options.length) {\n return;\n }\n options = this._options as IMenuOption[];\n }\n\n if (!this._persistSelection) {\n options.forEach(o => o.selected = false);\n }\n\n this._mapIconToLeadingIcon();\n\n const selectedValues = this._persistSelection ? this._getSelectedValues() : [];\n\n const config: IListDropdownConfig = {\n id: this._identifier,\n type: ListDropdownType.Menu,\n options: this._options,\n selectedValues,\n iconClass: this._iconClass,\n dense: this._dense,\n multiple: false,\n popupStatic: true,\n allowBusy: true,\n asyncStyle: ListDropdownAsyncStyle.Spinner,\n optionBuilder: this._optionBuilder,\n optionLimit: this._optionLimit,\n headerBuilder: this._popupHeaderBuilder,\n footerBuilder: this._popupFooterBuilder,\n observeScroll: this._observeScroll,\n observeScrollThreshold: this._observeScrollThreshold,\n popupPlacement: this._placement,\n popupFallbackPlacements: this._fallbackPlacements,\n activeStartIndex: fromKeyboard ? 0 : undefined,\n popupClasses: [\n MENU_CONSTANTS.classes.POPUP,\n MENU_CONSTANTS.classes.MENU,\n ...this._popupClasses as string[]\n ],\n syncWidth: this._syncPopupWidth,\n activeChangeCallback: this._activeChangeListener,\n selectCallback: this._selectListener,\n popupOffset: this._popupOffset,\n cascadingElementFactory: params => this._createCascadingElement(params)\n };\n\n this._adapter.setHostAttribute(MENU_CONSTANTS.attributes.OPEN, '');\n this._adapter.attachMenu(config);\n\n // If this menu is in a hover mode, we need to listen for mouse enter/leave events to know when the user is hovering over the popup\n if (this._mode === 'cascade') {\n this._adapter.addDropdownListener('mouseenter', this._childPopupMouseEnterListener);\n this._adapter.addDropdownListener('mouseleave', this._childPopupMouseLeaveListener);\n }\n \n this._adapter.addDropdownListener(MENU_CONSTANTS.events.ACTIVE_CHANGE, (evt: CustomEvent<IMenuActiveChangeEventData>) => {\n this._onActiveOptionChanged(evt.detail.id);\n });\n this._adapter.emitHostEvent(MENU_CONSTANTS.events.OPEN);\n }\n\n private _closeMenu(): void {\n this._open = false;\n this._childOpen = false;\n this._adapter.detachMenu();\n\n if (this._activeMouseLeaveTimeout !== undefined) {\n window.clearTimeout(this._activeMouseLeaveTimeout);\n }\n\n this._adapter.removeHostAttribute(MENU_CONSTANTS.attributes.OPEN);\n this._adapter.emitHostEvent(MENU_CONSTANTS.events.CLOSE);\n }\n\n private _loadOptionsAsync(): Promise<void> {\n if (!this._optionsFactory) {\n if (this._open) {\n this._closeMenu();\n }\n return Promise.resolve();\n }\n\n return Promise.resolve(this._optionsFactory())\n .then(results => {\n if (!this._persistSelection) {\n const flatResults = this._flattenOptions(results);\n flatResults.filter(o => o.selected).forEach(o => o.selected = false);\n }\n\n if (this._open) {\n if (results && isArray(results) && results.length) {\n this._options = results;\n this._adapter.setOptions(results);\n const selectedValues = this._getSelectedValues();\n if (selectedValues.length) {\n this._adapter.setSelectedValues(selectedValues);\n }\n } else if (this._open) {\n this._closeDropdown();\n }\n }\n })\n .catch(e => {\n console.error('An unexpected error ocurred while opening the menu:', e);\n if (this._open) {\n this._closeDropdown();\n }\n });\n }\n\n private _handleSelectEvent(value: any): void {\n const index = this._nonDividerOptions.findIndex(o => o.value === value);\n if (index < 0) {\n return;\n }\n this._selectOptionByIndex(index);\n }\n\n private _selectActiveOption(): void {\n const index = this._adapter.getActiveOptionIndex();\n if (index >= 0 && this._nonDividerOptions[index]) {\n this._selectOptionByIndex(index);\n }\n }\n\n private _selectOptionByIndex(index: number): void {\n const { options, value } = this._nonDividerOptions[index];\n\n // We ignore selections if the option has child options\n if (options) {\n this._adapter.setActiveOption(index);\n return;\n }\n\n this._closeDropdown();\n \n const data: IMenuSelectEventData = { index, value };\n const isCancelled = !this._adapter.emitHostEvent(MENU_CONSTANTS.events.SELECT, data, true, true);\n if (!isCancelled) {\n this._selectedValue = this._persistSelection ? value : undefined;\n }\n }\n\n private _getSelectedValues(): any[] {\n const values = this._flatOptions.filter(o => o.selected).map(o => o.value);\n if (this._selectedValue !== undefined) {\n values.push(this._selectedValue);\n }\n return values;\n }\n\n /** Called when a child menu option is selected. */\n protected _onCascadingOptionSelected(data: IMenuSelectEventData): void {\n if (this._persistSelection) {\n this._selectedValue = data.value;\n }\n this._adapter.emitHostEvent(MENU_CONSTANTS.events.SELECT, data);\n this._closeDropdown();\n }\n\n /** Called when a child menu is opened off of one of our menu options. */\n protected _onCascadingChildOpen(index: number): void {\n super._clearMouseLeaveTimeout();\n this._adapter.closeOtherChildMenus(index);\n this._childOpen = true;\n this._adapter.setActiveOption(index);\n }\n\n /** Called when a child menu is closed off of one of our menu options. */\n protected _onCascadingChildClose(index: number): void {\n this._childOpen = false;\n }\n\n protected _closeDropdown(): void {\n this._closeMenu();\n }\n\n protected _openDropdown({ fromKeyboard }: { fromKeyboard?: boolean } = {}): void {\n this._openMenu({ fromKeyboard });\n }\n\n protected _setCascadeTargetInactive(): void {\n this._adapter.setCascadeTargetInactive();\n }\n\n protected _isOwnElement(element: Element): boolean {\n return this._adapter.isOwnElement(element);\n }\n\n private _createCascadingElement({ index, options, parentValue }: IListDropdownCascadingElementFactoryConfig): HTMLElement {\n const menu = this._adapter.createChildMenu(\n index,\n parentValue,\n this._onCascadingChildOpen.bind(this),\n this._onCascadingChildClose.bind(this),\n this._onCascadingOptionSelected.bind(this)\n );\n menu.mode = 'cascade';\n menu.popupOffset = { x: 0, y: -8 };\n menu.dense = this._dense;\n menu.placement = 'right-start';\n menu.fallbackPlacements = ['left-start', 'right-start']; // Cascading menus should only fallback to left or right placement if needed\n menu.persistSelection = this._persistSelection;\n if (this._persistSelection) {\n menu.selectedValue = this._selectedValue;\n }\n menu.options = options;\n menu.optionBuilder = this._optionBuilder;\n menu.iconClass = this._iconClass;\n\n return menu;\n }\n\n private _mapIconToLeadingIcon(): void {\n // For backwards compatibility with old API, map the old \"icon\" property to the new \"leadingIcon\" property (if exists)\n this._flatOptions.filter(o => o.icon).forEach(o => o.leadingIcon = o.icon);\n }\n\n public get open(): boolean {\n return this._open;\n }\n public set open(value: boolean) {\n value = Boolean(value);\n if (this._open !== value) {\n this._open = value;\n if (value) {\n this._openDropdown();\n } else {\n this._closeDropdown();\n }\n }\n }\n\n public set options(options: IMenuOption[]) {\n if (typeof options === 'function') {\n this.optionsFactory = options;\n } else {\n this.optionsFactory = undefined;\n // Intentional shallow copy of member properties. These member objects have properties that are references to functions.\n this._options = options.map(o => ({ ...o }));\n \n if (this._open) {\n this._mapIconToLeadingIcon();\n this._adapter.setOptions(this._options as IMenuOption[]);\n if (this._persistSelection) {\n const selectedValues = this._getSelectedValues();\n if (selectedValues.length) {\n this._adapter.setSelectedValues(selectedValues);\n }\n }\n }\n }\n }\n public get options(): IMenuOption[] {\n if (!this._options) {\n return [];\n }\n\n // Intentional shallow copy of member properties. These member objects have properties that are references to functions.\n return this._flatOptions.map(o => ({ ...o }));\n }\n\n public set optionsFactory(factory: MenuOptionFactory | undefined) {\n this._optionsFactory = factory;\n }\n\n public set selectedIndex(value: number) {\n const option = this._nonDividerOptions[value];\n if (option && option.value !== this._selectedValue) {\n this.selectedValue = option.value;\n }\n }\n public get selectedIndex(): number {\n return this._selectedValue !== undefined ? this._nonDividerOptions.findIndex(o => o.value === this._selectedValue) : -1;\n }\n\n public set selectedValue(value: any) {\n if (this._selectedValue !== value) {\n this._selectedValue = value;\n this._adapter.setSelectedValues(this._selectedValue);\n }\n }\n public get selectedValue(): any {\n return this._selectedValue;\n }\n\n public get placement(): PopupPlacement {\n return this._placement;\n }\n public set placement(value: PopupPlacement) {\n if (this._placement !== value) {\n this._placement = value || 'bottom-start';\n this._adapter.setHostAttribute(MENU_CONSTANTS.attributes.PLACEMENT, this._placement);\n }\n }\n\n public get fallbackPlacements(): PopupPlacement[] {\n return this._fallbackPlacements;\n }\n public set fallbackPlacements(value: PopupPlacement[]) {\n this._fallbackPlacements = Array.isArray(value) ? value : [];\n }\n\n public get dense(): boolean {\n return this._dense;\n }\n public set dense(value: boolean) {\n this._dense = value;\n }\n\n public get iconClass(): string {\n return this._iconClass;\n }\n public set iconClass(value: string) {\n this._iconClass = value;\n }\n\n public get persistSelection(): boolean {\n return this._persistSelection;\n }\n public set persistSelection(value: boolean) {\n if (this._persistSelection === value) {\n return;\n }\n\n this._persistSelection = value;\n this._adapter.toggleHostAttribute(MENU_CONSTANTS.attributes.PERSIST_SELECTION, this._persistSelection);\n\n if (!this._persistSelection) {\n this._flatOptions.forEach(o => o.selected = false);\n this._selectedValue = undefined;\n }\n }\n\n public get mode(): MenuMode {\n return this._mode;\n }\n public set mode(value: MenuMode) {\n if (this._mode !== value) {\n this._mode = value;\n this._destroyInteractionListeners();\n this._applyMode();\n this._adapter.setHostAttribute(MENU_CONSTANTS.attributes.MODE, this._mode);\n }\n }\n\n public get popupOffset(): IPopupPosition {\n return this._popupOffset;\n }\n public set popupOffset(value: IPopupPosition) {\n this._popupOffset = value;\n }\n\n public get optionBuilder(): MenuOptionBuilder | undefined {\n return this._optionBuilder;\n }\n public set optionBuilder(cb: MenuOptionBuilder | undefined) {\n this._optionBuilder = cb;\n }\n\n public get popupElement(): HTMLElement | null {\n return this._adapter.getDropdownElement();\n }\n}\n", "import { attachShadowTemplate, coerceBoolean, CustomElement, ensureChild, FoundationProperty, isDefined } from '@tylertech/forge-core';\nimport { tylIconArrowRight } from '@tylertech/tyler-icons/standard';\nimport { CircularProgressComponent } from '../circular-progress';\nimport { IconRegistry } from '../icon';\nimport { LinearProgressComponent } from '../linear-progress';\nimport { ListComponent } from '../list';\nimport { IListDropdownAware, ListDropdownAware } from '../list-dropdown/list-dropdown-aware';\nimport { IPopupPosition, PopupComponent, PopupPlacement } from '../popup';\nimport { MenuAdapter } from './menu-adapter';\nimport { IMenuActiveChangeEventData, IMenuOption, IMenuOptionGroup, IMenuSelectEventData, MenuMode, MenuOptionBuilder, MenuOptionFactory, MENU_CONSTANTS } from './menu-constants';\nimport { MenuFoundation } from './menu-foundation';\nconst template = '<template><slot></slot></template>';\nconst styles = ':host{display:inline-block}:host([hidden]){display:none}';\n\nexport interface IMenuComponent extends IListDropdownAware {\n open: boolean;\n options: Array<IMenuOption | IMenuOptionGroup> | MenuOptionFactory;\n selectedIndex: number;\n selectedValue: number;\n placement: PopupPlacement;\n fallbackPlacements: PopupPlacement[];\n dense: boolean;\n iconClass: string;\n persistSelection: boolean;\n mode: MenuMode;\n popupOffset: IPopupPosition;\n optionBuilder: MenuOptionBuilder | undefined;\n popupElement: HTMLElement | undefined;\n propagateKeyEvent(evt: KeyboardEvent): void;\n activateFirstOption(): void;\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'forge-menu': IMenuComponent;\n }\n\n interface HTMLElementEventMap {\n 'forge-menu-select': CustomEvent<IMenuSelectEventData>;\n 'forge-menu-open': CustomEvent<void>;\n 'forge-menu-close': CustomEvent<void>;\n 'forge-menu-active-change': CustomEvent<IMenuActiveChangeEventData>;\n }\n}\n\n/**\n * The web component class behind the `<forge-menu>` custom element.\n * \n * @tag forge-menu\n */\n@CustomElement({\n name: MENU_CONSTANTS.elementName,\n dependencies: [\n PopupComponent,\n ListComponent,\n CircularProgressComponent,\n LinearProgressComponent\n ]\n})\nexport class MenuComponent extends ListDropdownAware implements IMenuComponent {\n public static get observedAttributes(): string[] {\n return [\n MENU_CONSTANTS.attributes.OPEN,\n MENU_CONSTANTS.attributes.PLACEMENT,\n MENU_CONSTANTS.attributes.SELECTED_INDEX,\n MENU_CONSTANTS.attributes.SELECTED_VALUE,\n MENU_CONSTANTS.attributes.DENSE,\n MENU_CONSTANTS.attributes.ICON_CLASS,\n MENU_CONSTANTS.attributes.PERSIST_SELECTION,\n MENU_CONSTANTS.attributes.MODE,\n MENU_CONSTANTS.attributes.SYNC_POPUP_WIDTH,\n MENU_CONSTANTS.attributes.POPUP_CLASSES,\n MENU_CONSTANTS.attributes.OPTION_LIMIT,\n MENU_CONSTANTS.attributes.OBSERVE_SCROLL,\n MENU_CONSTANTS.attributes.OBSERVE_SCROLL_THRESHOLD\n ];\n }\n\n private _foundation: MenuFoundation;\n\n constructor() {\n super();\n IconRegistry.define(tylIconArrowRight);\n this._foundation = new MenuFoundation(new MenuAdapter(this));\n attachShadowTemplate(this, template, styles);\n }\n\n public connectedCallback(): void {\n if (this.querySelector(MENU_CONSTANTS.selectors.TOGGLE)) {\n this._foundation.initialize();\n } else {\n ensureChild(this, MENU_CONSTANTS.selectors.TOGGLE).then(() => this._foundation.initialize());\n }\n }\n\n public attributeChangedCallback(name: string, oldValue: string, newValue: string): void {\n super.attributeChangedCallback(name, oldValue, newValue);\n switch (name) {\n case MENU_CONSTANTS.attributes.OPEN:\n this._foundation.open = isDefined(newValue);\n break;\n case MENU_CONSTANTS.attributes.PLACEMENT:\n this._foundation.placement = newValue as PopupPlacement;\n break;\n case MENU_CONSTANTS.attributes.SELECTED_INDEX:\n this._foundation.selectedIndex = Number(newValue);\n break;\n case MENU_CONSTANTS.attributes.SELECTED_VALUE:\n this._foundation.selectedValue = newValue;\n break;\n case MENU_CONSTANTS.attributes.DENSE:\n this._foundation.dense = coerceBoolean(newValue);\n break;\n case MENU_CONSTANTS.attributes.ICON_CLASS:\n this._foundation.iconClass = newValue;\n break;\n case MENU_CONSTANTS.attributes.PERSIST_SELECTION:\n this.persistSelection = coerceBoolean(newValue);\n break;\n case MENU_CONSTANTS.attributes.MODE:\n this.mode = newValue as MenuMode;\n break;\n }\n }\n\n public disconnectedCallback(): void {\n this._foundation.disconnect();\n }\n\n /** Gets/sets the open state. */\n @FoundationProperty()\n public declare open: boolean;\n\n /** Gets/sets the array of options to display in the menu. */\n @FoundationProperty()\n public declare options: Array<IMenuOption | IMenuOptionGroup> | MenuOptionFactory;\n\n /** Gets/sets the selected option to the index. Does not support cascading menus. */\n @FoundationProperty()\n public declare selectedIndex: number;\n\n /** Gets/sets the value of the option to select. */\n @FoundationProperty()\n public declare selectedValue: any;\n\n /** Gets/sets the menu placement (default is bottom-left). */\n @FoundationProperty()\n public declare placement: `${PopupPlacement}`;\n\n /** Gets/sets the fallback menu placement for overriding the default of any side. */\n @FoundationProperty()\n public declare fallbackPlacements: `${PopupPlacement}`[];\n\n /** Gets/sets dense state of the list options used in the menu popup. */\n @FoundationProperty()\n public declare dense: boolean;\n\n /** Gets/sets the class name to use for option icons. */\n @FoundationProperty()\n public declare iconClass: string;\n\n /**\n * Gets/sets whether selection of menu items is persisted.\n * @deprecated Please use `<forge-select-dropdown>` for handling selection states.\n */\n @FoundationProperty()\n public declare persistSelection: boolean;\n\n /** Gets/sets the mode that this menu is using. */\n @FoundationProperty()\n public declare mode: MenuMode;\n\n /** Sets the position adjustment on the internal popup element. */\n @FoundationProperty()\n public declare popupOffset: IPopupPosition;\n\n /** Sets the callback that will be executed for each option in the dropdown for producing custom option templates. */\n @FoundationProperty()\n public declare optionBuilder: MenuOptionBuilder;\n\n /** Gets the currently active popup element when the dropdown is open. */\n @FoundationProperty({ set: false })\n public declare popupElement: HTMLElement | undefined;\n\n /** Force propagates the key event from another element this component. */\n public propagateKeyEvent(evt: KeyboardEvent): void {\n this._foundation.onKeydown(evt);\n }\n\n public activateFirstOption(): void {\n this._foundation.activateFirstOption();\n }\n}\n", "import { defineCustomElement } from '@tylertech/forge-core';\n\nimport { MenuComponent } from './menu';\n\nexport * from './menu-adapter';\nexport * from './menu-constants';\nexport * from './menu-foundation';\nexport * from './menu';\n\nexport function defineMenuComponent(): void {\n defineCustomElement(MenuComponent);\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import { COMPONENT_NAME_PREFIX } from '../constants';\nimport { IListDropdownOption, IListDropdownOptionGroup } from '../list-dropdown';\n\nconst elementName: keyof HTMLElementTagNameMap = `${COMPONENT_NAME_PREFIX}menu`;\n\nconst classes = {\n POPUP: 'forge-menu__popup',\n MENU: 'mdc-menu'\n};\n\nconst selectors = {\n TOGGLE: `.${elementName}__toggle,[${elementName}-toggle],button,[type=button],[role=button],a,[tabindex]:not([tabindex^=\"-\"])`,\n MENU_LIST: 'forge-list'\n};\n\nconst attributes = {\n OPEN: 'open',\n PLACEMENT: 'placement',\n SELECTED_INDEX: 'selected-index',\n SELECTED_VALUE: 'selected-value',\n DENSE: 'dense',\n ICON_CLASS: 'icon-class',\n PERSIST_SELECTION: 'persist-selection',\n MODE: 'mode',\n SYNC_POPUP_WIDTH: 'sync-popup-width',\n POPUP_CLASSES: 'popup-classes',\n OPTION_LIMIT: 'option-limit',\n OBSERVE_SCROLL: 'observe-scroll',\n OBSERVE_SCROLL_THRESHOLD: 'observe-scroll-threshold'\n};\n\nconst events = {\n SELECT: `${elementName}-select`,\n OPEN: `${elementName}-open`,\n CLOSE: `${elementName}-close`,\n ACTIVE_CHANGE: `${elementName}-active-change`\n};\n\nconst numbers = {\n CHILD_MOUSE_LEAVE_TIMEOUT: 300,\n POPUP_MOUSE_LEAVE_TIMEOUT: 500\n};\n\nexport const MENU_CONSTANTS = {\n elementName,\n classes,\n selectors,\n attributes,\n events,\n numbers\n};\n\nexport interface IMenuSelectEventData<T = any, K = any> {\n index: number;\n value?: T;\n parentValue?: K;\n}\n\nexport interface IMenuActiveChangeEventData {\n id: string;\n}\n\nexport interface IMenuOption<T = any> extends IListDropdownOption<T> {\n icon?: string;\n selected?: boolean;\n}\n\nexport interface IMenuOptionGroup extends IListDropdownOptionGroup {}\n\nexport type MenuOptionBuilder = (option: IMenuOption, parentElement: HTMLElement) => HTMLElement | string | void;\nexport type MenuOptionFactory = (() => Array<IMenuOption | IMenuOptionGroup>) | (() => Promise<Array<IMenuOption | IMenuOptionGroup>>);\nexport type MenuMode = 'click' | 'cascade';\n", "import { BaseAdapter, IBaseAdapter } from '../core/base/base-adapter';\nimport { IMenuOption } from './index';\nimport { IMenuComponent } from './menu';\nimport { MENU_CONSTANTS, IMenuSelectEventData, IMenuOptionGroup } from './menu-constants';\nimport { IListDropdownConfig, IListDropdown, ListDropdown } from '../list-dropdown';\nimport { IListComponent, IListItemComponent, LIST_CONSTANTS, LIST_ITEM_CONSTANTS } from '../list';\n\nexport interface IMenuAdapter extends IBaseAdapter {\n getDropdownElement(): HTMLElement | null;\n initializeTarget(): void;\n initializeAccessibility(id: string): void;\n hasTargetElement(): boolean;\n addTargetListener(event: string, callback: (event: Event) => void, bubbles?: boolean): void;\n removeTargetListener(event: string, callback: (event: Event) => void): void;\n attachMenu(config: IListDropdownConfig): void;\n detachMenu(): void;\n setOptions(options: Array<IMenuOption | IMenuOptionGroup>): void;\n getActiveOptionIndex(): number;\n setActiveOption(index: number): void;\n activateFirstOption(): void;\n setCascadeTargetInactive(): void;\n propagateKey(key: string): void;\n proxyKeyboardEventToChild(evt: KeyboardEvent, id: string): void;\n toggleChildMenu(index: number, open?: boolean): void;\n focusTarget(): void;\n isTargetFocused(): boolean;\n updateActiveDescendant(id: string): void;\n isOwnElement(element: Element): boolean;\n addDropdownListener(type: string, listener: (evt: any) => void): void;\n createChildMenu(index: number, parentValue: any, openCb: (index: number) => void, closeCb: (index: number) => void, selectCb: (data: IMenuSelectEventData) => void): IMenuComponent;\n closeOtherChildMenus(excludeIndex?: number): void;\n setSelectedValues(values: any[]): void;\n}\n\nexport class MenuAdapter extends BaseAdapter<IMenuComponent> implements IMenuAdapter {\n private _targetElement: HTMLElement | null;\n private _listDropdown?: IListDropdown;\n private _childMenus = new Map<number, IMenuComponent>();\n\n constructor(component: IMenuComponent) {\n super(component);\n }\n\n public getDropdownElement(): HTMLElement | null {\n return this._listDropdown?.dropdownElement ?? null;\n }\n\n public hasTargetElement(): boolean {\n return !!this._targetElement;\n }\n\n public initializeTarget(): void {\n this._targetElement = this._component.querySelector(MENU_CONSTANTS.selectors.TOGGLE);\n if (!this._targetElement) {\n this._targetElement = this._component.firstElementChild as HTMLElement;\n }\n }\n\n public initializeAccessibility(id: string): void {\n if (!this._targetElement) {\n return;\n }\n\n this._targetElement.setAttribute('aria-atomic', 'true');\n this._targetElement.setAttribute('aria-live', 'assertive');\n this._targetElement.setAttribute('aria-haspopup', 'true');\n this._targetElement.setAttribute('aria-expanded', 'false');\n\n if (!this._targetElement.hasAttribute('aria-label')) {\n this._targetElement.setAttribute('aria-label', this._targetElement.textContent || '');\n }\n }\n\n public addTargetListener(event: string, callback: (event: Event) => void, bubbles = false): void {\n if (this._targetElement) {\n this._targetElement.addEventListener(event, callback, bubbles);\n }\n }\n\n public removeTargetListener(event: string, callback: (event: Event) => void): void {\n if (this._targetElement) {\n this._targetElement.removeEventListener(event, callback);\n }\n }\n\n public attachMenu(config: IListDropdownConfig): void {\n if (this._listDropdown || !this._targetElement) {\n return;\n }\n this._listDropdown = new ListDropdown(this._targetElement as HTMLElement, config);\n this._listDropdown.open();\n this._targetElement.setAttribute('aria-expanded', 'true');\n this._targetElement.setAttribute('aria-controls', `list-dropdown-popup-${config.id}`);\n }\n\n public setOptions(options: Array<IMenuOption | IMenuOptionGroup>): void {\n if (this._listDropdown) {\n this._listDropdown.setOptions(options);\n }\n }\n\n public detachMenu(): void {\n if (this._targetElement) {\n this._targetElement.removeAttribute('aria-activedescendant');\n this._targetElement.removeAttribute('aria-expanded');\n this._targetElement.removeAttribute('aria-controls');\n }\n\n if (this._listDropdown) {\n this._listDropdown.close();\n this._listDropdown.destroy();\n this._listDropdown = undefined;\n }\n }\n\n public setActiveOption(index: number): void {\n this._listDropdown?.activateOption(index);\n }\n\n public activateFirstOption(): void {\n this._listDropdown?.activateFirstOption();\n }\n\n public setCascadeTargetInactive(): void {\n const listItem = this._targetElement as IListItemComponent;\n if (listItem?.active) {\n listItem.active = false;\n }\n }\n\n public getActiveOptionIndex(): number {\n return this._listDropdown?.getActiveOptionIndex() ?? -1;\n }\n\n public focusTarget(): void {\n if (this._targetElement) {\n this._targetElement.focus();\n }\n }\n\n public isTargetFocused(): boolean {\n return document.activeElement === this._targetElement;\n }\n\n public updateActiveDescendant(id: string): void {\n if (!this._targetElement) {\n return;\n }\n if (id) {\n this._targetElement.setAttribute('aria-activedescendant', id);\n } else {\n this._targetElement.removeAttribute('aria-activedescendant');\n }\n }\n\n public addDropdownListener(type: string, listener: (evt: any) => void): void {\n if (!this._listDropdown || !this._listDropdown.dropdownElement) {\n return;\n }\n this._listDropdown.dropdownElement.addEventListener(type, listener);\n }\n\n public isOwnElement(el: Element): boolean {\n if (!this._targetElement || !this._listDropdown || !this._listDropdown.dropdownElement) {\n return false;\n }\n return this._targetElement.contains(el) || !!this._listDropdown.dropdownElement.contains(el);\n }\n\n public propagateKey(key: string): void {\n this._listDropdown?.handleKey(key);\n }\n\n public proxyKeyboardEventToChild(evt: KeyboardEvent, id: string): void {\n if (!this.getDropdownElement()) {\n return;\n }\n const openMenu = this._getOpenChildMenu(id);\n if (openMenu) {\n openMenu.propagateKeyEvent(evt);\n }\n }\n\n public toggleChildMenu(index: number, open?: boolean): void {\n const listItems = this._getListItems();\n const listItem = listItems[index];\n const childMenu = listItem.parentElement as IMenuComponent;\n if (childMenu && childMenu.tagName.toLowerCase() === MENU_CONSTANTS.elementName) {\n if (open === undefined) {\n childMenu.open = !childMenu.open;\n } else {\n childMenu.open = open;\n }\n childMenu.activateFirstOption();\n }\n }\n\n public createChildMenu(index: number, parentValue: any, openCb: (index: number) => void, closeCb: (index: number) => void, selectCb: (data: IMenuSelectEventData) => void): IMenuComponent {\n const menu = document.createElement('forge-menu');\n menu.style.display = 'block';\n\n // Set listeners to notify the parent menu when anything important happens within a child menu that needs to be propagated to the root menu\n menu.addEventListener(MENU_CONSTANTS.events.OPEN, () => {\n this._childMenus.set(index, menu);\n openCb(index);\n });\n menu.addEventListener(MENU_CONSTANTS.events.CLOSE, () => {\n this._childMenus.delete(index);\n closeCb(index);\n });\n menu.addEventListener(MENU_CONSTANTS.events.SELECT, (evt: CustomEvent<IMenuSelectEventData>) => {\n evt.stopPropagation();\n selectCb({ ...evt.detail, parentValue });\n });\n\n return menu;\n }\n\n public closeOtherChildMenus(excludeIndex?: number): void {\n const menusToRemove: number[] = [];\n this._childMenus.forEach((menu, index) => {\n if (index !== excludeIndex) {\n menu.open = false;\n menusToRemove.push(index);\n }\n });\n menusToRemove.forEach(index => this._childMenus.delete(index));\n }\n\n public setSelectedValues(values: any[]): void {\n this._listDropdown?.setSelectedValues(values);\n }\n\n private _getOpenChildMenu(id: string): IMenuComponent | null {\n if (!this.getDropdownElement()) {\n return null;\n }\n const list = this._getOwnList(id);\n return list ? list.querySelector(`${MENU_CONSTANTS.elementName}[${MENU_CONSTANTS.attributes.OPEN}]`) : null;\n }\n\n private _getOwnList(id: string): IListComponent | null {\n const popup = this.getDropdownElement();\n if (!popup) {\n return null;\n }\n return popup.querySelector(`${LIST_CONSTANTS.elementName}[id=\"list-dropdown-list-${id}\"]`);\n }\n\n private _getListItems(): IListItemComponent[] {\n const popup = this.getDropdownElement();\n if (!popup) {\n return [];\n }\n const listElement = popup.querySelector(LIST_CONSTANTS.elementName);\n if (listElement) {\n return Array.from(listElement.querySelectorAll(LIST_ITEM_CONSTANTS.elementName)) as IListItemComponent[];\n }\n return [];\n }\n}\n", "import { ICustomElementFoundation, isArray, randomChars } from '@tylertech/forge-core';\nimport { ICON_CLASS_NAME } from '../constants';\nimport { CascadingListDropdownAwareFoundation, IListDropdownCascadingElementFactoryConfig, IListDropdownConfig, ListDropdownAsyncStyle, ListDropdownType } from '../list-dropdown';\nimport { isListDropdownOptionType, ListDropdownOptionType } from '../list-dropdown/list-dropdown-utils';\nimport { IPopupPosition, PopupPlacement } from '../popup';\nimport { IMenuOption } from './index';\nimport { IMenuAdapter } from './menu-adapter';\nimport { IMenuActiveChangeEventData, IMenuOptionGroup, IMenuSelectEventData, MenuMode, MenuOptionBuilder, MenuOptionFactory, MENU_CONSTANTS } from './menu-constants';\n\nexport interface IMenuFoundation extends ICustomElementFoundation {\n initialize(): void;\n disconnect(): void;\n onKeydown(evt: KeyboardEvent): void;\n open: boolean;\n options: Array<IMenuOption | IMenuOptionGroup>;\n optionsFactory: MenuOptionFactory | undefined;\n selectedIndex: number;\n selectedValue: any;\n placement: PopupPlacement;\n fallbackPlacements: PopupPlacement[];\n dense: boolean;\n iconClass: string;\n persistSelection: boolean;\n mode: MenuMode;\n popupOffset: IPopupPosition;\n optionBuilder: MenuOptionBuilder | undefined;\n activateFirstOption(): void;\n}\n\nexport class MenuFoundation extends CascadingListDropdownAwareFoundation<IMenuOption | IMenuOptionGroup> implements IMenuFoundation {\n private _optionsFactory: MenuOptionFactory | undefined;\n private _placement: PopupPlacement = 'bottom-start';\n private _fallbackPlacements: PopupPlacement[] = [];\n private _dense = false;\n private _selectedValue: any;\n private _iconClass = ICON_CLASS_NAME;\n private _persistSelection = false;\n private _mode: MenuMode = 'click';\n private _popupOffset: IPopupPosition;\n private _optionBuilder: MenuOptionBuilder | undefined;\n private _identifier: string;\n private _clickListener: (evt: MouseEvent) => void;\n private _blurListener: (evt: MouseEvent) => void;\n private _selectListener: (value: any) => void;\n private _keydownListener: (evt: KeyboardEvent) => void;\n private _activeChangeListener: (id: string) => void;\n \n constructor(private _adapter: IMenuAdapter) {\n super({\n popupTimeout: MENU_CONSTANTS.numbers.POPUP_MOUSE_LEAVE_TIMEOUT,\n targetTimeout: MENU_CONSTANTS.numbers.CHILD_MOUSE_LEAVE_TIMEOUT\n });\n this._identifier = randomChars();\n this._clickListener = evt => this._onTargetClick(evt);\n this._blurListener = evt => this._onTargetBlur(evt);\n this._selectListener = value => this._handleSelectEvent(value);\n this._keydownListener = evt => this.onKeydown(evt);\n this._activeChangeListener = id => this._onActiveOptionChanged(id);\n }\n\n public initialize(): void {\n this._adapter.initializeTarget();\n this._adapter.initializeAccessibility(this._identifier);\n this._initializeInteractionListeners();\n }\n\n public disconnect(): void {\n if (this._open) {\n this._closeDropdown();\n }\n this._destroyInteractionListeners();\n }\n\n public activateFirstOption(): void {\n this._adapter.activateFirstOption();\n }\n\n private _applyMode(): void {\n if (!this._adapter.hasTargetElement()) {\n return;\n }\n\n if (this._mode !== 'cascade') {\n this._adapter.addTargetListener('click', this._clickListener);\n } else {\n this._attachCascadingListeners();\n }\n }\n\n private _initializeInteractionListeners(): void {\n if (!this._adapter.hasTargetElement()) {\n return;\n }\n this._applyMode();\n this._adapter.addTargetListener('keydown', this._keydownListener, true);\n this._adapter.addTargetListener('focusout', this._blurListener);\n }\n\n private _destroyInteractionListeners(): void {\n if (!this._adapter.hasTargetElement()) {\n return;\n }\n this._adapter.removeTargetListener('keydown', this._clickListener);\n this._adapter.removeTargetListener('focusout', this._blurListener);\n this._adapter.removeTargetListener('click', this._clickListener);\n this._detachCascadingListeners();\n }\n\n protected _attachCascadingListeners(): void {\n this._adapter.addTargetListener('mouseenter', this._targetMouseEnterListener);\n this._adapter.addTargetListener('mouseleave', this._targetMouseLeaveListener);\n\n // We listen for document mousemove events only to track mouse coords for use when determining\n // if popups should open/close after specific delays\n this._adapter.addDocumentListener('mousemove', this._documentMouseMoveListener);\n }\n\n protected _detachCascadingListeners(): void {\n this._adapter.removeTargetListener('mouseenter', this._targetMouseEnterListener);\n this._adapter.removeTargetListener('mouseleave', this._targetMouseLeaveListener);\n this._adapter.removeDocumentListener('mousemove', this._documentMouseMoveListener);\n }\n\n private get _nonDividerOptions(): IMenuOption[] {\n return this._flatOptions.filter(o => !o.divider);\n }\n\n private get _flatOptions(): IMenuOption[] {\n return this._flattenOptions(this._options);\n }\n\n private _flattenOptions(options: Array<IMenuOption | IMenuOptionGroup>): IMenuOption[] {\n if (isListDropdownOptionType(options, ListDropdownOptionType.Group)) {\n return (options as IMenuOptionGroup[])\n .reduce((previousValue, currentValue) => {\n return currentValue.options ? previousValue.concat(currentValue.options) : previousValue;\n }, [] as IMenuOption[]);\n }\n return options as IMenuOption[];\n }\n\n private _onTargetClick(evt: MouseEvent): void {\n if (this._open) {\n this._closeDropdown();\n return;\n }\n this.open = !this._open;\n if (this._open) {\n this._adapter.focusTarget();\n }\n }\n\n private _onTargetBlur(evt: Event): void {\n if (this._open) {\n this._closeDropdown();\n }\n }\n\n private _onActiveOptionChanged(id: string): void {\n // We need to dispatch an event when the active descendant changes to propagate that to the proper target element\n const data: IMenuActiveChangeEventData = { id };\n const canSetActiveDescendant = this._adapter.emitHostEvent(MENU_CONSTANTS.events.ACTIVE_CHANGE, data, true, true);\n if (this._mode !== 'cascade' && canSetActiveDescendant) {\n this._adapter.updateActiveDescendant(id);\n }\n }\n\n public onKeydown(evt: KeyboardEvent): void {\n // If we have any child menus open, we need to proxy the keyboard events to those and exit\n if (this._childOpen) {\n this._adapter.proxyKeyboardEventToChild(evt, this._identifier);\n return;\n }\n\n switch (evt.code) {\n case 'Tab':\n if (this._open) {\n this._selectActiveOption();\n }\n break;\n case 'Escape':\n if (this._open) {\n evt.preventDefault();\n evt.stopPropagation();\n this._closeDropdown();\n }\n break;\n case 'Space':\n evt.preventDefault();\n\n if (this._open) {\n this._closeDropdown();\n } else {\n this._openDropdown({ fromKeyboard: true });\n }\n break;\n case 'Home':\n case 'End':\n if (this._open) {\n evt.preventDefault();\n this._adapter.propagateKey(evt.code);\n }\n break;\n case 'Enter':\n evt.preventDefault();\n\n if (!this._open) {\n evt.preventDefault();\n this._openDropdown({ fromKeyboard: true });\n return;\n }\n\n evt.stopImmediatePropagation();\n\n this._adapter.propagateKey(evt.code);\n\n // Check if we need to toggle the child menu open state\n const activeIndex = this._adapter.getActiveOptionIndex();\n const activeOption = this._nonDividerOptions[activeIndex];\n if (activeOption && activeOption.options && activeOption.options.length) {\n this._adapter.toggleChildMenu(activeIndex);\n }\n break;\n case 'ArrowUp':\n case 'ArrowDown':\n if (this._open) {\n evt.stopImmediatePropagation();\n }\n\n evt.preventDefault();\n\n if (!this._open && evt.code === 'ArrowDown') {\n this._openDropdown({ fromKeyboard: true });\n this._adapter.activateFirstOption();\n return;\n }\n\n this._adapter.propagateKey(evt.code);\n break;\n case 'ArrowLeft':\n if (this._open) {\n evt.stopImmediatePropagation();\n }\n if (this._mode === 'cascade' && this._open) {\n this._closeDropdown();\n }\n break;\n case 'ArrowRight':\n if (this._open) {\n evt.stopImmediatePropagation();\n }\n if (!this._open) {\n return;\n }\n const hoveredIndex = this._adapter.getActiveOptionIndex();\n const hoveredOption = this._nonDividerOptions[hoveredIndex];\n if (hoveredOption && hoveredOption.options) {\n this._adapter.toggleChildMenu(hoveredIndex, evt.code === 'ArrowRight');\n return;\n }\n break;\n }\n }\n\n private async _openMenu({ fromKeyboard }: { fromKeyboard?: boolean } = {}): Promise<void> {\n this._open = true;\n let options: IMenuOption[] = [];\n\n if (typeof this._optionsFactory === 'function') {\n this._loadOptionsAsync();\n this._options = [];\n } else {\n if (!this._options || !this._options.length) {\n return;\n }\n options = this._options as IMenuOption[];\n }\n\n if (!this._persistSelection) {\n options.forEach(o => o.selected = false);\n }\n\n this._mapIconToLeadingIcon();\n\n const selectedValues = this._persistSelection ? this._getSelectedValues() : [];\n\n const config: IListDropdownConfig = {\n id: this._identifier,\n type: ListDropdownType.Menu,\n options: this._options,\n selectedValues,\n iconClass: this._iconClass,\n dense: this._dense,\n multiple: false,\n popupStatic: true,\n allowBusy: true,\n asyncStyle: ListDropdownAsyncStyle.Spinner,\n optionBuilder: this._optionBuilder,\n optionLimit: this._optionLimit,\n headerBuilder: this._popupHeaderBuilder,\n footerBuilder: this._popupFooterBuilder,\n observeScroll: this._observeScroll,\n observeScrollThreshold: this._observeScrollThreshold,\n popupPlacement: this._placement,\n popupFallbackPlacements: this._fallbackPlacements,\n activeStartIndex: fromKeyboard ? 0 : undefined,\n popupClasses: [\n MENU_CONSTANTS.classes.POPUP,\n MENU_CONSTANTS.classes.MENU,\n ...this._popupClasses as string[]\n ],\n syncWidth: this._syncPopupWidth,\n activeChangeCallback: this._activeChangeListener,\n selectCallback: this._selectListener,\n popupOffset: this._popupOffset,\n cascadingElementFactory: params => this._createCascadingElement(params)\n };\n\n this._adapter.setHostAttribute(MENU_CONSTANTS.attributes.OPEN, '');\n this._adapter.attachMenu(config);\n\n // If this menu is in a hover mode, we need to listen for mouse enter/leave events to know when the user is hovering over the popup\n if (this._mode === 'cascade') {\n this._adapter.addDropdownListener('mouseenter', this._childPopupMouseEnterListener);\n this._adapter.addDropdownListener('mouseleave', this._childPopupMouseLeaveListener);\n }\n \n this._adapter.addDropdownListener(MENU_CONSTANTS.events.ACTIVE_CHANGE, (evt: CustomEvent<IMenuActiveChangeEventData>) => {\n this._onActiveOptionChanged(evt.detail.id);\n });\n this._adapter.emitHostEvent(MENU_CONSTANTS.events.OPEN);\n }\n\n private _closeMenu(): void {\n this._open = false;\n this._childOpen = false;\n this._adapter.detachMenu();\n\n if (this._activeMouseLeaveTimeout !== undefined) {\n window.clearTimeout(this._activeMouseLeaveTimeout);\n }\n\n this._adapter.removeHostAttribute(MENU_CONSTANTS.attributes.OPEN);\n this._adapter.emitHostEvent(MENU_CONSTANTS.events.CLOSE);\n }\n\n private _loadOptionsAsync(): Promise<void> {\n if (!this._optionsFactory) {\n if (this._open) {\n this._closeMenu();\n }\n return Promise.resolve();\n }\n\n return Promise.resolve(this._optionsFactory())\n .then(results => {\n if (!this._persistSelection) {\n const flatResults = this._flattenOptions(results);\n flatResults.filter(o => o.selected).forEach(o => o.selected = false);\n }\n\n if (this._open) {\n if (results && isArray(results) && results.length) {\n this._options = results;\n this._mapIconToLeadingIcon();\n this._adapter.setOptions(results);\n const selectedValues = this._getSelectedValues();\n if (selectedValues.length) {\n this._adapter.setSelectedValues(selectedValues);\n }\n } else if (this._open) {\n this._closeDropdown();\n }\n }\n })\n .catch(e => {\n console.error('An unexpected error ocurred while opening the menu:', e);\n if (this._open) {\n this._closeDropdown();\n }\n });\n }\n\n private _handleSelectEvent(value: any): void {\n const index = this._nonDividerOptions.findIndex(o => o.value === value);\n if (index < 0) {\n return;\n }\n this._selectOptionByIndex(index);\n }\n\n private _selectActiveOption(): void {\n const index = this._adapter.getActiveOptionIndex();\n if (index >= 0 && this._nonDividerOptions[index]) {\n this._selectOptionByIndex(index);\n }\n }\n\n private _selectOptionByIndex(index: number): void {\n const { options, value } = this._nonDividerOptions[index];\n\n // We ignore selections if the option has child options\n if (options) {\n this._adapter.setActiveOption(index);\n return;\n }\n\n this._closeDropdown();\n \n const data: IMenuSelectEventData = { index, value };\n const isCancelled = !this._adapter.emitHostEvent(MENU_CONSTANTS.events.SELECT, data, true, true);\n if (!isCancelled) {\n this._selectedValue = this._persistSelection ? value : undefined;\n }\n }\n\n private _getSelectedValues(): any[] {\n const values = this._flatOptions.filter(o => o.selected).map(o => o.value);\n if (this._selectedValue !== undefined) {\n values.push(this._selectedValue);\n }\n return values;\n }\n\n /** Called when a child menu option is selected. */\n protected _onCascadingOptionSelected(data: IMenuSelectEventData): void {\n if (this._persistSelection) {\n this._selectedValue = data.value;\n }\n this._adapter.emitHostEvent(MENU_CONSTANTS.events.SELECT, data);\n this._closeDropdown();\n }\n\n /** Called when a child menu is opened off of one of our menu options. */\n protected _onCascadingChildOpen(index: number): void {\n super._clearMouseLeaveTimeout();\n this._adapter.closeOtherChildMenus(index);\n this._childOpen = true;\n this._adapter.setActiveOption(index);\n }\n\n /** Called when a child menu is closed off of one of our menu options. */\n protected _onCascadingChildClose(index: number): void {\n this._childOpen = false;\n }\n\n protected _closeDropdown(): void {\n this._closeMenu();\n }\n\n protected _openDropdown({ fromKeyboard }: { fromKeyboard?: boolean } = {}): void {\n this._openMenu({ fromKeyboard });\n }\n\n protected _setCascadeTargetInactive(): void {\n this._adapter.setCascadeTargetInactive();\n }\n\n protected _isOwnElement(element: Element): boolean {\n return this._adapter.isOwnElement(element);\n }\n\n private _createCascadingElement({ index, options, parentValue }: IListDropdownCascadingElementFactoryConfig): HTMLElement {\n const menu = this._adapter.createChildMenu(\n index,\n parentValue,\n this._onCascadingChildOpen.bind(this),\n this._onCascadingChildClose.bind(this),\n this._onCascadingOptionSelected.bind(this)\n );\n menu.mode = 'cascade';\n menu.popupOffset = { x: 0, y: -8 };\n menu.dense = this._dense;\n menu.placement = 'right-start';\n menu.fallbackPlacements = ['left-start', 'right-start']; // Cascading menus should only fallback to left or right placement if needed\n menu.persistSelection = this._persistSelection;\n if (this._persistSelection) {\n menu.selectedValue = this._selectedValue;\n }\n menu.options = options;\n menu.optionBuilder = this._optionBuilder;\n menu.iconClass = this._iconClass;\n\n return menu;\n }\n\n private _mapIconToLeadingIcon(): void {\n // For backwards compatibility with old API, map the old \"icon\" property to the new \"leadingIcon\" property (if exists)\n this._flatOptions.filter(o => o.icon).forEach(o => o.leadingIcon = o.icon);\n }\n\n public get open(): boolean {\n return this._open;\n }\n public set open(value: boolean) {\n value = Boolean(value);\n if (this._open !== value) {\n this._open = value;\n if (value) {\n this._openDropdown();\n } else {\n this._closeDropdown();\n }\n }\n }\n\n public set options(options: IMenuOption[]) {\n if (typeof options === 'function') {\n this.optionsFactory = options;\n } else {\n this.optionsFactory = undefined;\n // Intentional shallow copy of member properties. These member objects have properties that are references to functions.\n this._options = options.map(o => ({ ...o }));\n \n if (this._open) {\n this._mapIconToLeadingIcon();\n this._adapter.setOptions(this._options as IMenuOption[]);\n if (this._persistSelection) {\n const selectedValues = this._getSelectedValues();\n if (selectedValues.length) {\n this._adapter.setSelectedValues(selectedValues);\n }\n }\n }\n }\n }\n public get options(): IMenuOption[] {\n if (!this._options) {\n return [];\n }\n\n // Intentional shallow copy of member properties. These member objects have properties that are references to functions.\n return this._flatOptions.map(o => ({ ...o }));\n }\n\n public set optionsFactory(factory: MenuOptionFactory | undefined) {\n this._optionsFactory = factory;\n }\n\n public set selectedIndex(value: number) {\n const option = this._nonDividerOptions[value];\n if (option && option.value !== this._selectedValue) {\n this.selectedValue = option.value;\n }\n }\n public get selectedIndex(): number {\n return this._selectedValue !== undefined ? this._nonDividerOptions.findIndex(o => o.value === this._selectedValue) : -1;\n }\n\n public set selectedValue(value: any) {\n if (this._selectedValue !== value) {\n this._selectedValue = value;\n this._adapter.setSelectedValues(this._selectedValue);\n }\n }\n public get selectedValue(): any {\n return this._selectedValue;\n }\n\n public get placement(): PopupPlacement {\n return this._placement;\n }\n public set placement(value: PopupPlacement) {\n if (this._placement !== value) {\n this._placement = value || 'bottom-start';\n this._adapter.setHostAttribute(MENU_CONSTANTS.attributes.PLACEMENT, this._placement);\n }\n }\n\n public get fallbackPlacements(): PopupPlacement[] {\n return this._fallbackPlacements;\n }\n public set fallbackPlacements(value: PopupPlacement[]) {\n this._fallbackPlacements = Array.isArray(value) ? value : [];\n }\n\n public get dense(): boolean {\n return this._dense;\n }\n public set dense(value: boolean) {\n this._dense = value;\n }\n\n public get iconClass(): string {\n return this._iconClass;\n }\n public set iconClass(value: string) {\n this._iconClass = value;\n }\n\n public get persistSelection(): boolean {\n return this._persistSelection;\n }\n public set persistSelection(value: boolean) {\n if (this._persistSelection === value) {\n return;\n }\n\n this._persistSelection = value;\n this._adapter.toggleHostAttribute(MENU_CONSTANTS.attributes.PERSIST_SELECTION, this._persistSelection);\n\n if (!this._persistSelection) {\n this._flatOptions.forEach(o => o.selected = false);\n this._selectedValue = undefined;\n }\n }\n\n public get mode(): MenuMode {\n return this._mode;\n }\n public set mode(value: MenuMode) {\n if (this._mode !== value) {\n this._mode = value;\n this._destroyInteractionListeners();\n this._applyMode();\n this._adapter.setHostAttribute(MENU_CONSTANTS.attributes.MODE, this._mode);\n }\n }\n\n public get popupOffset(): IPopupPosition {\n return this._popupOffset;\n }\n public set popupOffset(value: IPopupPosition) {\n this._popupOffset = value;\n }\n\n public get optionBuilder(): MenuOptionBuilder | undefined {\n return this._optionBuilder;\n }\n public set optionBuilder(cb: MenuOptionBuilder | undefined) {\n this._optionBuilder = cb;\n }\n\n public get popupElement(): HTMLElement | null {\n return this._adapter.getDropdownElement();\n }\n}\n", "import { attachShadowTemplate, coerceBoolean, CustomElement, ensureChild, FoundationProperty, isDefined } from '@tylertech/forge-core';\nimport { tylIconArrowRight } from '@tylertech/tyler-icons/standard';\nimport { CircularProgressComponent } from '../circular-progress';\nimport { IconRegistry } from '../icon';\nimport { LinearProgressComponent } from '../linear-progress';\nimport { ListComponent } from '../list';\nimport { IListDropdownAware, ListDropdownAware } from '../list-dropdown/list-dropdown-aware';\nimport { IPopupPosition, PopupComponent, PopupPlacement } from '../popup';\nimport { MenuAdapter } from './menu-adapter';\nimport { IMenuActiveChangeEventData, IMenuOption, IMenuOptionGroup, IMenuSelectEventData, MenuMode, MenuOptionBuilder, MenuOptionFactory, MENU_CONSTANTS } from './menu-constants';\nimport { MenuFoundation } from './menu-foundation';\nconst template = '<template><slot></slot></template>';\nconst styles = ':host{display:inline-block}:host([hidden]){display:none}';\n\nexport interface IMenuComponent extends IListDropdownAware {\n open: boolean;\n options: Array<IMenuOption | IMenuOptionGroup> | MenuOptionFactory;\n selectedIndex: number;\n selectedValue: number;\n placement: PopupPlacement;\n fallbackPlacements: PopupPlacement[];\n dense: boolean;\n iconClass: string;\n persistSelection: boolean;\n mode: MenuMode;\n popupOffset: IPopupPosition;\n optionBuilder: MenuOptionBuilder | undefined;\n popupElement: HTMLElement | undefined;\n propagateKeyEvent(evt: KeyboardEvent): void;\n activateFirstOption(): void;\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'forge-menu': IMenuComponent;\n }\n\n interface HTMLElementEventMap {\n 'forge-menu-select': CustomEvent<IMenuSelectEventData>;\n 'forge-menu-open': CustomEvent<void>;\n 'forge-menu-close': CustomEvent<void>;\n 'forge-menu-active-change': CustomEvent<IMenuActiveChangeEventData>;\n }\n}\n\n/**\n * The web component class behind the `<forge-menu>` custom element.\n * \n * @tag forge-menu\n */\n@CustomElement({\n name: MENU_CONSTANTS.elementName,\n dependencies: [\n PopupComponent,\n ListComponent,\n CircularProgressComponent,\n LinearProgressComponent\n ]\n})\nexport class MenuComponent extends ListDropdownAware implements IMenuComponent {\n public static get observedAttributes(): string[] {\n return [\n MENU_CONSTANTS.attributes.OPEN,\n MENU_CONSTANTS.attributes.PLACEMENT,\n MENU_CONSTANTS.attributes.SELECTED_INDEX,\n MENU_CONSTANTS.attributes.SELECTED_VALUE,\n MENU_CONSTANTS.attributes.DENSE,\n MENU_CONSTANTS.attributes.ICON_CLASS,\n MENU_CONSTANTS.attributes.PERSIST_SELECTION,\n MENU_CONSTANTS.attributes.MODE,\n MENU_CONSTANTS.attributes.SYNC_POPUP_WIDTH,\n MENU_CONSTANTS.attributes.POPUP_CLASSES,\n MENU_CONSTANTS.attributes.OPTION_LIMIT,\n MENU_CONSTANTS.attributes.OBSERVE_SCROLL,\n MENU_CONSTANTS.attributes.OBSERVE_SCROLL_THRESHOLD\n ];\n }\n\n private _foundation: MenuFoundation;\n\n constructor() {\n super();\n IconRegistry.define(tylIconArrowRight);\n this._foundation = new MenuFoundation(new MenuAdapter(this));\n attachShadowTemplate(this, template, styles);\n }\n\n public connectedCallback(): void {\n if (this.querySelector(MENU_CONSTANTS.selectors.TOGGLE)) {\n this._foundation.initialize();\n } else {\n ensureChild(this, MENU_CONSTANTS.selectors.TOGGLE).then(() => this._foundation.initialize());\n }\n }\n\n public attributeChangedCallback(name: string, oldValue: string, newValue: string): void {\n super.attributeChangedCallback(name, oldValue, newValue);\n switch (name) {\n case MENU_CONSTANTS.attributes.OPEN:\n this._foundation.open = isDefined(newValue);\n break;\n case MENU_CONSTANTS.attributes.PLACEMENT:\n this._foundation.placement = newValue as PopupPlacement;\n break;\n case MENU_CONSTANTS.attributes.SELECTED_INDEX:\n this._foundation.selectedIndex = Number(newValue);\n break;\n case MENU_CONSTANTS.attributes.SELECTED_VALUE:\n this._foundation.selectedValue = newValue;\n break;\n case MENU_CONSTANTS.attributes.DENSE:\n this._foundation.dense = coerceBoolean(newValue);\n break;\n case MENU_CONSTANTS.attributes.ICON_CLASS:\n this._foundation.iconClass = newValue;\n break;\n case MENU_CONSTANTS.attributes.PERSIST_SELECTION:\n this.persistSelection = coerceBoolean(newValue);\n break;\n case MENU_CONSTANTS.attributes.MODE:\n this.mode = newValue as MenuMode;\n break;\n }\n }\n\n public disconnectedCallback(): void {\n this._foundation.disconnect();\n }\n\n /** Gets/sets the open state. */\n @FoundationProperty()\n public declare open: boolean;\n\n /** Gets/sets the array of options to display in the menu. */\n @FoundationProperty()\n public declare options: Array<IMenuOption | IMenuOptionGroup> | MenuOptionFactory;\n\n /** Gets/sets the selected option to the index. Does not support cascading menus. */\n @FoundationProperty()\n public declare selectedIndex: number;\n\n /** Gets/sets the value of the option to select. */\n @FoundationProperty()\n public declare selectedValue: any;\n\n /** Gets/sets the menu placement (default is bottom-left). */\n @FoundationProperty()\n public declare placement: `${PopupPlacement}`;\n\n /** Gets/sets the fallback menu placement for overriding the default of any side. */\n @FoundationProperty()\n public declare fallbackPlacements: `${PopupPlacement}`[];\n\n /** Gets/sets dense state of the list options used in the menu popup. */\n @FoundationProperty()\n public declare dense: boolean;\n\n /** Gets/sets the class name to use for option icons. */\n @FoundationProperty()\n public declare iconClass: string;\n\n /**\n * Gets/sets whether selection of menu items is persisted.\n * @deprecated Please use `<forge-select-dropdown>` for handling selection states.\n */\n @FoundationProperty()\n public declare persistSelection: boolean;\n\n /** Gets/sets the mode that this menu is using. */\n @FoundationProperty()\n public declare mode: MenuMode;\n\n /** Sets the position adjustment on the internal popup element. */\n @FoundationProperty()\n public declare popupOffset: IPopupPosition;\n\n /** Sets the callback that will be executed for each option in the dropdown for producing custom option templates. */\n @FoundationProperty()\n public declare optionBuilder: MenuOptionBuilder;\n\n /**\n * Gets the currently active popup element when the dropdown is open.\n * @readonly\n */\n @FoundationProperty({ set: false })\n public declare popupElement: HTMLElement | undefined;\n\n /** Force propagates the key event from another element this component. */\n public propagateKeyEvent(evt: KeyboardEvent): void {\n this._foundation.onKeydown(evt);\n }\n\n public activateFirstOption(): void {\n this._foundation.activateFirstOption();\n }\n}\n", "import { defineCustomElement } from '@tylertech/forge-core';\n\nimport { MenuComponent } from './menu';\n\nexport * from './menu-adapter';\nexport * from './menu-constants';\nexport * from './menu-foundation';\nexport * from './menu';\n\nexport function defineMenuComponent(): void {\n defineCustomElement(MenuComponent);\n}\n"],
5
+ "mappings": "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",
6
6
  "names": ["elementName", "COMPONENT_NAME_PREFIX", "classes", "selectors", "attributes", "events", "numbers", "MENU_CONSTANTS", "MenuAdapter", "BaseAdapter", "component", "_a", "_b", "MENU_CONSTANTS", "id", "event", "callback", "bubbles", "config", "ListDropdown", "options", "index", "listItem", "type", "listener", "el", "key", "evt", "openMenu", "open", "childMenu", "parentValue", "openCb", "closeCb", "selectCb", "menu", "__spreadProps", "__spreadValues", "excludeIndex", "menusToRemove", "values", "list", "popup", "LIST_CONSTANTS", "listElement", "LIST_ITEM_CONSTANTS", "MenuFoundation", "CascadingListDropdownAwareFoundation", "_adapter", "MENU_CONSTANTS", "ICON_CLASS_NAME", "randomChars", "evt", "value", "id", "o", "options", "isListDropdownOptionType", "previousValue", "currentValue", "data", "canSetActiveDescendant", "activeIndex", "activeOption", "hoveredIndex", "hoveredOption", "fromKeyboard", "selectedValues", "config", "params", "results", "isArray", "index", "values", "element", "parentValue", "menu", "__spreadValues", "factory", "option", "cb", "template", "styles", "MenuComponent", "ListDropdownAware", "IconRegistry", "tylIconArrowRight", "MenuFoundation", "MenuAdapter", "attachShadowTemplate", "MENU_CONSTANTS", "ensureChild", "name", "oldValue", "newValue", "isDefined", "coerceBoolean", "evt", "__decorateClass", "FoundationProperty", "CustomElement", "PopupComponent", "ListComponent", "CircularProgressComponent", "LinearProgressComponent", "defineMenuComponent", "defineCustomElement", "MenuComponent"]
7
7
  }
@@ -3,5 +3,5 @@
3
3
  * Copyright 2023 Tyler Technologies, Inc.
4
4
  * License: Apache-2.0
5
5
  */
6
- import{a as r}from"./chunk.3IXTRC6Z.js";import{a as _}from"./chunk.YI4JTY4T.js";import{a as f}from"./chunk.3KQL7VAZ.js";import{a as y}from"./chunk.5KC43VFL.js";import{a}from"./chunk.KTGSZEAG.js";import{a as O}from"./chunk.QOA2O575.js";import{a as L,l as x}from"./chunk.HOXFK44F.js";import{d as g,i as E,q as b}from"./chunk.4LA6HEA7.js";import{b as h,l as T,p as v}from"./chunk.J2M2MXP2.js";import{f as n}from"./chunk.MCIQXNKY.js";function I(s){s.style.border="0",s.style.clip="rect(0 0 0 0)",s.style.height="1px",s.style.margin="-1px",s.style.overflow="hidden",s.style.padding="0",s.style.position="absolute",s.style.width="1px",s.style.outline="0",s.style.setProperty("-webkit-appearance","none"),s.style.setProperty("-moz-appearance","none")}function P(s,e,t){typeof t=="string"&&(t=document.createTextNode(t));let i=document.createElement("div");i.setAttribute("role","tooltip"),i.classList.add(r.classes.TOOLTIP),i.appendChild(t),i.setAttribute("role","tooltip"),i.setAttribute("aria-hidden","true"),(s.ownerDocument||document).body.appendChild(i);let d={x:0,y:0},u=4;switch(e){case"top":d.y=-u,i.classList.add(r.classes.TOOLTIP_TOP);break;case"right":d.x=u,i.classList.add(r.classes.TOOLTIP_RIGHT);break;case"bottom":d.y=u,i.classList.add(r.classes.TOOLTIP_BOTTOM);break;case"left":d.x=-u,i.classList.add(r.classes.TOOLTIP_LEFT);break}return window.requestAnimationFrame(()=>{window.requestAnimationFrame(()=>{i.classList.add(r.classes.TOOLTIP_OPEN),f({element:i,targetElement:s,placement:e,transform:!1,offset:d})})}),i}var m=class extends y{constructor(t){super(t);this._tooltipElement=null}initializeTargetElement(t){this._targetElement=this._getTargetElement(t)}initializeAccessibility(t){this._targetElement&&!this._targetElement.hasAttribute("aria-describedby")&&this._targetElement.setAttribute("aria-describedby",t)}hasTargetElement(){return!!this._targetElement}hasTooltipElement(){return!!this._tooltipElement}isTargetElementConnected(){return!!this._targetElement&&this._targetElement.isConnected}destroy(t){this._targetElement&&this._targetElement.getAttribute("aria-describedby")===t&&this._targetElement.removeAttribute("aria-describedby")}setTextContent(t){g(this._component),t&&this._component.appendChild(document.createTextNode(t))}addTargetEventListener(t,i){this._targetElement&&this._targetElement.addEventListener(t,i)}removeTargetEventListener(t,i){this._targetElement&&this._targetElement.removeEventListener(t,i)}showTooltip(t,i){if(!this._targetElement)return;i||(i=this._getTooltipContent().cloneNode(!0));let l=i.nodeType===3&&(!i.textContent||i.textContent.trim().length===0);!i||l||(this._tooltipElement=P(this._targetElement,t,i))}getInnerText(){return this._component.innerText}hideTooltip(){this._tooltipElement&&(E(this._tooltipElement),this._tooltipElement=null)}getTooltipElement(){return this._tooltipElement}_getTargetElement(t){if(t){if(this._component.parentElement)return b(this._component.parentElement,t)?this._component.parentElement:this._component.parentElement.querySelector(t)}else return this._component.previousElementSibling||this._component.parentElement;return null}_getTooltipContent(){return this._component.firstElementChild||this._component.firstChild||document.createTextNode("")}};var c=class{constructor(e){this._adapter=e;this._delay=r.numbers.DEFAULT_DELAY;this._position=r.strings.DEFAULT_POSITION;this._isOpen=!1;this._mouseOverListener=t=>this._onMouseOver(t),this._mouseOutListener=t=>this._onMouseOut(t),this._touchStartListener=t=>this._onTouchStart(t),this._touchEndListener=t=>this._onTouchEnd(t),this._scrollListener=v(t=>this._onScroll(t),100),this._clickListener=()=>this._targetInteracted(),this._mouseDownListener=()=>this._targetInteracted(),this._dragListener=()=>this._targetInteracted()}initialize(){if(this._adapter.initializeTargetElement(this._target),!this._adapter.hasTargetElement())throw new Error("Unable to locate target element.");this._identifier=this._adapter.getHostAttribute("id"),this._identifier||(this._identifier=this._getNextIdentifier(),this._adapter.setHostAttribute("id",this._identifier)),this._addTargetListeners(),this._adapter.initializeAccessibility(this._identifier)}disconnect(){this._mouseOverTimeout&&(window.clearTimeout(this._mouseOverTimeout),this._mouseOverTimeout=void 0),this._touchTimeout&&(window.clearTimeout(this._touchTimeout),this._touchTimeout=void 0),this._adapter.destroy(this._identifier),this._isOpen&&this.hide(),this._adapter.hasTargetElement()&&this._removeTargetListeners()}_getNextIdentifier(){return`forge-tooltip-${c._tooltipIdentifier++}`}_addTargetListeners(){_.isMobile?(this._adapter.addTargetEventListener("touchstart",this._touchStartListener),this._adapter.addTargetEventListener("touchend",this._touchEndListener)):(this._adapter.addTargetEventListener("mouseover",this._mouseOverListener),this._adapter.addTargetEventListener("mouseout",this._mouseOutListener)),this._adapter.addTargetEventListener("click",this._clickListener),this._adapter.addTargetEventListener("mousedown",this._mouseDownListener),this._adapter.addTargetEventListener("dragstart",this._dragListener)}_removeTargetListeners(){_.isMobile?(this._adapter.removeTargetEventListener("touchstart",this._touchStartListener),this._adapter.removeTargetEventListener("touchend",this._touchEndListener)):(this._adapter.removeTargetEventListener("mouseover",this._mouseOverListener),this._adapter.removeTargetEventListener("mouseout",this._mouseOutListener)),this._adapter.removeTargetEventListener("click",this._clickListener),this._adapter.removeTargetEventListener("mousedown",this._mouseDownListener),this._adapter.removeTargetEventListener("dragstart",this._dragListener)}_onTouchStart(e){this._touchTimeout=window.setTimeout(()=>{this._show(),window.setTimeout(()=>this.hide(),r.numbers.LONGPRESS_VISIBILITY_DURATION),this._touchTimeout=void 0},r.numbers.LONGPRESS_THRESHOLD)}_onTouchEnd(e){this._touchTimeout&&this._clearTouchTimer()}_clearTouchTimer(){window.clearTimeout(this._touchTimeout),this._touchTimeout=void 0}_onMouseOver(e){this._isOpen||!this._adapter.hasTargetElement()||!this._adapter.isTargetElementConnected()||(this._delay?this._mouseOverTimeout=window.setTimeout(()=>{this._show(),this._mouseOverTimeout=void 0},this._delay):this._show())}_onMouseOut(e){if(this._mouseOverTimeout){window.clearTimeout(this._mouseOverTimeout),this._mouseOverTimeout=void 0;return}this.hide()}_show(){let e;this._builder&&typeof this._builder=="function"&&(e=this._builder()),this._adapter.showTooltip(this._position,e),this._adapter.hasTooltipElement()&&(this._isOpen=!0,this._adapter.addWindowListener("scroll",this._scrollListener))}hide(){!this._isOpen||(this._touchTimeout&&this._clearTouchTimer(),this._isOpen=!1,this._adapter.removeWindowListener("scroll",this._scrollListener),this._adapter.hideTooltip())}_onScroll(e){!this._isOpen||this.hide()}_targetInteracted(){this._mouseOverTimeout&&window.clearTimeout(this._mouseOverTimeout),this._isOpen&&this.hide()}get text(){return this._text||this._adapter.getInnerText()}set text(e){this._text!==e&&(this._text=e,this._adapter.setTextContent(this._text),this._adapter.setHostAttribute(r.attributes.TEXT,this._text))}get builder(){return this._builder}set builder(e){this._builder=e}get target(){return this._target}set target(e){this._target!==e&&(this._target=e,this._adapter.hasTargetElement()&&this._removeTargetListeners(),this._adapter.initializeTargetElement(this._target),this._adapter.hasTargetElement()&&this._addTargetListeners(),this._adapter.setHostAttribute(r.attributes.TARGET,h(this._target)?this._target:""))}get delay(){return this._delay}set delay(e){this._delay!==e&&(this._delay=e,this._adapter.setHostAttribute(r.attributes.DELAY,h(this._delay)?this._delay.toString():""))}get position(){return this._position}set position(e){this._position!==e&&(this._position=e,this._adapter.setHostAttribute(r.attributes.POSITION,h(this._position)?this._position.toString():""))}set open(e){this._show()}get open(){return this._isOpen}get tooltipElement(){return this._adapter.getTooltipElement()}},p=c;p._tooltipIdentifier=0;var o=class extends x{constructor(){super();this._foundation=new p(new m(this))}static get observedAttributes(){return[r.attributes.TEXT,r.attributes.TARGET,r.attributes.DELAY,r.attributes.POSITION]}connectedCallback(){I(this),requestAnimationFrame(()=>this._foundation.initialize())}disconnectedCallback(){this._foundation.disconnect()}attributeChangedCallback(t,i,l){switch(t){case r.attributes.TEXT:this.text=l;break;case r.attributes.TARGET:this.target=l;break;case r.attributes.DELAY:this.delay=T(l);break;case r.attributes.POSITION:this.position=l;break}}hide(){this._foundation.hide()}};n([a()],o.prototype,"text",2),n([a()],o.prototype,"builder",2),n([a()],o.prototype,"target",2),n([a()],o.prototype,"delay",2),n([a()],o.prototype,"position",2),n([a()],o.prototype,"open",2),n([a({set:!1})],o.prototype,"tooltipElement",2),o=n([O({name:r.elementName})],o);function Z(){L(o)}export{P as a,m as b,p as c,o as d,Z as e};
7
- //# sourceMappingURL=chunk.73GVVX4K.js.map
6
+ import{a as r}from"./chunk.NHG22ATF.js";import{a as _}from"./chunk.YI4JTY4T.js";import{a as f}from"./chunk.3KQL7VAZ.js";import{a as y}from"./chunk.D4DZUGEV.js";import{a}from"./chunk.KTGSZEAG.js";import{a as O}from"./chunk.CP3RUPXU.js";import{a as L,l as x}from"./chunk.RX7IOKBK.js";import{d as g,i as E,q as b}from"./chunk.4LA6HEA7.js";import{b as h,l as T,p as v}from"./chunk.J2M2MXP2.js";import{f as n}from"./chunk.MCIQXNKY.js";function I(s){s.style.border="0",s.style.clip="rect(0 0 0 0)",s.style.height="1px",s.style.margin="-1px",s.style.overflow="hidden",s.style.padding="0",s.style.position="absolute",s.style.width="1px",s.style.outline="0",s.style.setProperty("-webkit-appearance","none"),s.style.setProperty("-moz-appearance","none")}function P(s,e,t){typeof t=="string"&&(t=document.createTextNode(t));let i=document.createElement("div");i.setAttribute("role","tooltip"),i.classList.add(r.classes.TOOLTIP),i.appendChild(t),i.setAttribute("role","tooltip"),i.setAttribute("aria-hidden","true"),(s.ownerDocument||document).body.appendChild(i);let d={x:0,y:0},u=4;switch(e){case"top":d.y=-u,i.classList.add(r.classes.TOOLTIP_TOP);break;case"right":d.x=u,i.classList.add(r.classes.TOOLTIP_RIGHT);break;case"bottom":d.y=u,i.classList.add(r.classes.TOOLTIP_BOTTOM);break;case"left":d.x=-u,i.classList.add(r.classes.TOOLTIP_LEFT);break}return window.requestAnimationFrame(()=>{window.requestAnimationFrame(()=>{i.classList.add(r.classes.TOOLTIP_OPEN),f({element:i,targetElement:s,placement:e,transform:!1,offset:d})})}),i}var m=class extends y{constructor(t){super(t);this._tooltipElement=null}initializeTargetElement(t){this._targetElement=this._getTargetElement(t)}initializeAccessibility(t){this._targetElement&&!this._targetElement.hasAttribute("aria-describedby")&&this._targetElement.setAttribute("aria-describedby",t)}hasTargetElement(){return!!this._targetElement}hasTooltipElement(){return!!this._tooltipElement}isTargetElementConnected(){return!!this._targetElement&&this._targetElement.isConnected}destroy(t){this._targetElement&&this._targetElement.getAttribute("aria-describedby")===t&&this._targetElement.removeAttribute("aria-describedby")}setTextContent(t){g(this._component),t&&this._component.appendChild(document.createTextNode(t))}addTargetEventListener(t,i){this._targetElement&&this._targetElement.addEventListener(t,i)}removeTargetEventListener(t,i){this._targetElement&&this._targetElement.removeEventListener(t,i)}showTooltip(t,i){if(!this._targetElement)return;i||(i=this._getTooltipContent().cloneNode(!0));let l=i.nodeType===3&&(!i.textContent||i.textContent.trim().length===0);!i||l||(this._tooltipElement=P(this._targetElement,t,i))}getInnerText(){return this._component.innerText}hideTooltip(){this._tooltipElement&&(E(this._tooltipElement),this._tooltipElement=null)}getTooltipElement(){return this._tooltipElement}_getTargetElement(t){if(t){if(this._component.parentElement)return b(this._component.parentElement,t)?this._component.parentElement:this._component.parentElement.querySelector(t)}else return this._component.previousElementSibling||this._component.parentElement;return null}_getTooltipContent(){return this._component.firstElementChild||this._component.firstChild||document.createTextNode("")}};var c=class{constructor(e){this._adapter=e;this._delay=r.numbers.DEFAULT_DELAY;this._position=r.strings.DEFAULT_POSITION;this._isOpen=!1;this._mouseOverListener=t=>this._onMouseOver(t),this._mouseOutListener=t=>this._onMouseOut(t),this._touchStartListener=t=>this._onTouchStart(t),this._touchEndListener=t=>this._onTouchEnd(t),this._scrollListener=v(t=>this._onScroll(t),100),this._clickListener=()=>this._targetInteracted(),this._mouseDownListener=()=>this._targetInteracted(),this._dragListener=()=>this._targetInteracted()}initialize(){if(this._adapter.initializeTargetElement(this._target),!this._adapter.hasTargetElement())throw new Error("Unable to locate target element.");this._identifier=this._adapter.getHostAttribute("id"),this._identifier||(this._identifier=this._getNextIdentifier(),this._adapter.setHostAttribute("id",this._identifier)),this._addTargetListeners(),this._adapter.initializeAccessibility(this._identifier)}disconnect(){this._mouseOverTimeout&&(window.clearTimeout(this._mouseOverTimeout),this._mouseOverTimeout=void 0),this._touchTimeout&&(window.clearTimeout(this._touchTimeout),this._touchTimeout=void 0),this._adapter.destroy(this._identifier),this._isOpen&&this.hide(),this._adapter.hasTargetElement()&&this._removeTargetListeners()}_getNextIdentifier(){return`forge-tooltip-${c._tooltipIdentifier++}`}_addTargetListeners(){_.isMobile?(this._adapter.addTargetEventListener("touchstart",this._touchStartListener),this._adapter.addTargetEventListener("touchend",this._touchEndListener)):(this._adapter.addTargetEventListener("mouseover",this._mouseOverListener),this._adapter.addTargetEventListener("mouseout",this._mouseOutListener)),this._adapter.addTargetEventListener("click",this._clickListener),this._adapter.addTargetEventListener("mousedown",this._mouseDownListener),this._adapter.addTargetEventListener("dragstart",this._dragListener)}_removeTargetListeners(){_.isMobile?(this._adapter.removeTargetEventListener("touchstart",this._touchStartListener),this._adapter.removeTargetEventListener("touchend",this._touchEndListener)):(this._adapter.removeTargetEventListener("mouseover",this._mouseOverListener),this._adapter.removeTargetEventListener("mouseout",this._mouseOutListener)),this._adapter.removeTargetEventListener("click",this._clickListener),this._adapter.removeTargetEventListener("mousedown",this._mouseDownListener),this._adapter.removeTargetEventListener("dragstart",this._dragListener)}_onTouchStart(e){this._touchTimeout=window.setTimeout(()=>{this._show(),window.setTimeout(()=>this.hide(),r.numbers.LONGPRESS_VISIBILITY_DURATION),this._touchTimeout=void 0},r.numbers.LONGPRESS_THRESHOLD)}_onTouchEnd(e){this._touchTimeout&&this._clearTouchTimer()}_clearTouchTimer(){window.clearTimeout(this._touchTimeout),this._touchTimeout=void 0}_onMouseOver(e){this._isOpen||!this._adapter.hasTargetElement()||!this._adapter.isTargetElementConnected()||(this._delay?this._mouseOverTimeout=window.setTimeout(()=>{this._show(),this._mouseOverTimeout=void 0},this._delay):this._show())}_onMouseOut(e){if(this._mouseOverTimeout){window.clearTimeout(this._mouseOverTimeout),this._mouseOverTimeout=void 0;return}this.hide()}_show(){let e;this._builder&&typeof this._builder=="function"&&(e=this._builder()),this._adapter.showTooltip(this._position,e),this._adapter.hasTooltipElement()&&(this._isOpen=!0,this._adapter.addWindowListener("scroll",this._scrollListener))}hide(){!this._isOpen||(this._touchTimeout&&this._clearTouchTimer(),this._isOpen=!1,this._adapter.removeWindowListener("scroll",this._scrollListener),this._adapter.hideTooltip())}_onScroll(e){!this._isOpen||this.hide()}_targetInteracted(){this._mouseOverTimeout&&window.clearTimeout(this._mouseOverTimeout),this._isOpen&&this.hide()}get text(){return this._text||this._adapter.getInnerText()}set text(e){this._text!==e&&(this._text=e,this._adapter.setTextContent(this._text),this._adapter.setHostAttribute(r.attributes.TEXT,this._text))}get builder(){return this._builder}set builder(e){this._builder=e}get target(){return this._target}set target(e){this._target!==e&&(this._target=e,this._adapter.hasTargetElement()&&this._removeTargetListeners(),this._adapter.initializeTargetElement(this._target),this._adapter.hasTargetElement()&&this._addTargetListeners(),this._adapter.setHostAttribute(r.attributes.TARGET,h(this._target)?this._target:""))}get delay(){return this._delay}set delay(e){this._delay!==e&&(this._delay=e,this._adapter.setHostAttribute(r.attributes.DELAY,h(this._delay)?this._delay.toString():""))}get position(){return this._position}set position(e){this._position!==e&&(this._position=e,this._adapter.setHostAttribute(r.attributes.POSITION,h(this._position)?this._position.toString():""))}set open(e){this._show()}get open(){return this._isOpen}get tooltipElement(){return this._adapter.getTooltipElement()}},p=c;p._tooltipIdentifier=0;var o=class extends x{constructor(){super();this._foundation=new p(new m(this))}static get observedAttributes(){return[r.attributes.TEXT,r.attributes.TARGET,r.attributes.DELAY,r.attributes.POSITION]}connectedCallback(){I(this),requestAnimationFrame(()=>this._foundation.initialize())}disconnectedCallback(){this._foundation.disconnect()}attributeChangedCallback(t,i,l){switch(t){case r.attributes.TEXT:this.text=l;break;case r.attributes.TARGET:this.target=l;break;case r.attributes.DELAY:this.delay=T(l);break;case r.attributes.POSITION:this.position=l;break}}hide(){this._foundation.hide()}};n([a()],o.prototype,"text",2),n([a()],o.prototype,"builder",2),n([a()],o.prototype,"target",2),n([a()],o.prototype,"delay",2),n([a()],o.prototype,"position",2),n([a()],o.prototype,"open",2),n([a({set:!1})],o.prototype,"tooltipElement",2),o=n([O({name:r.elementName})],o);function Z(){L(o)}export{P as a,m as b,p as c,o as d,Z as e};
7
+ //# sourceMappingURL=chunk.IBUO2ECP.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../../node_modules/@tylertech/forge-core/esm/a11y/a11y.js", "../../src/tooltip/tooltip-utils.ts", "../../src/tooltip/tooltip-adapter.ts", "../../src/tooltip/tooltip-foundation.ts", "../../src/tooltip/tooltip.ts", "../../src/tooltip/index.ts"],
4
- "sourcesContent": ["/**\n * Hides an element from the user visually, while keeping it in the DOM.\n * @param element The element to hide from view.\n */\nexport function hideElementVisually(element) {\n element.style.border = '0';\n element.style.clip = 'rect(0 0 0 0)';\n element.style.height = '1px';\n element.style.margin = '-1px';\n element.style.overflow = 'hidden';\n element.style.padding = '0';\n element.style.position = 'absolute';\n element.style.width = '1px';\n element.style.outline = '0';\n element.style.setProperty('-webkit-appearance', 'none');\n element.style.setProperty('-moz-appearance', 'none');\n}\n", "import { IElementPosition, positionElementAsync } from '@tylertech/forge-core';\nimport { PopupPlacement } from '../popup';\nimport { TOOLTIP_CONSTANTS } from './tooltip-constants';\n\n/**\n * Attaches a positioned tooltip to the provided target element.\n * @param targetElement The element to position the tooltip around.\n * @param placement The placement of the tooltip relative to the target element.\n * @param content The content of the tooltip.\n */\nexport function attachTooltip(targetElement: HTMLElement, placement: PopupPlacement, content: string | HTMLElement | Text): HTMLElement {\n if (typeof content === 'string') {\n content = document.createTextNode(content);\n }\n\n const element = document.createElement('div');\n element.setAttribute('role', 'tooltip');\n element.classList.add(TOOLTIP_CONSTANTS.classes.TOOLTIP);\n element.appendChild(content);\n element.setAttribute('role', 'tooltip');\n element.setAttribute('aria-hidden', 'true');\n\n const hostDocument = targetElement.ownerDocument || document;\n hostDocument.body.appendChild(element);\n\n const offset: IElementPosition = { x: 0, y: 0 };\n const offsetAmount = 4;\n\n switch (placement) {\n case 'top':\n offset.y = -offsetAmount;\n element.classList.add(TOOLTIP_CONSTANTS.classes.TOOLTIP_TOP);\n break;\n case 'right':\n offset.x = offsetAmount;\n element.classList.add(TOOLTIP_CONSTANTS.classes.TOOLTIP_RIGHT);\n break;\n case 'bottom':\n offset.y = offsetAmount;\n element.classList.add(TOOLTIP_CONSTANTS.classes.TOOLTIP_BOTTOM);\n break;\n case 'left':\n offset.x = -offsetAmount;\n element.classList.add(TOOLTIP_CONSTANTS.classes.TOOLTIP_LEFT);\n break;\n }\n\n window.requestAnimationFrame(() => {\n window.requestAnimationFrame(() => {\n element.classList.add(TOOLTIP_CONSTANTS.classes.TOOLTIP_OPEN);\n positionElementAsync({ element, targetElement, placement, transform: false, offset });\n });\n });\n\n return element;\n}\n", "import { removeAllChildren, removeElement, matchesSelectors } from '@tylertech/forge-core';\nimport { BaseAdapter, IBaseAdapter } from '../core/base/base-adapter';\nimport { PopupPlacement } from '../popup';\nimport { ITooltipComponent } from './tooltip';\nimport { attachTooltip } from './tooltip-utils';\n\nexport interface ITooltipAdapter extends IBaseAdapter {\n hasTargetElement(): boolean;\n hasTooltipElement(): boolean;\n isTargetElementConnected(): boolean;\n initializeTargetElement(selector: string): void;\n destroy(identifier: string | null): void;\n initializeAccessibility(identifier: string): void;\n setTextContent(text: string): void;\n addTargetEventListener(type: string, listener: (evt: MouseEvent) => void): void;\n removeTargetEventListener(type: string, listener: (evt: MouseEvent) => void): void;\n showTooltip(position: PopupPlacement, content?: HTMLElement | Text): void;\n getInnerText(): string;\n hideTooltip(): void;\n getTooltipElement(): HTMLElement | null;\n}\n\n/**\n * The DOM adapter for the tooltip component.\n */\nexport class TooltipAdapter extends BaseAdapter<ITooltipComponent> implements ITooltipAdapter {\n private _targetElement: HTMLElement | null;\n private _tooltipElement: HTMLElement | null = null;\n\n constructor(component: ITooltipComponent) {\n super(component);\n }\n\n public initializeTargetElement(selector: string): void {\n this._targetElement = this._getTargetElement(selector);\n }\n\n public initializeAccessibility(identifier: string): void {\n if (this._targetElement && !this._targetElement.hasAttribute('aria-describedby')) {\n this._targetElement.setAttribute('aria-describedby', identifier);\n }\n }\n\n public hasTargetElement(): boolean {\n return !!this._targetElement;\n }\n\n public hasTooltipElement(): boolean {\n return !!this._tooltipElement;\n }\n\n public isTargetElementConnected(): boolean {\n return !!this._targetElement && this._targetElement.isConnected;\n }\n\n public destroy(identifier: string | null): void {\n if (this._targetElement && this._targetElement.getAttribute('aria-describedby') === identifier) {\n this._targetElement.removeAttribute('aria-describedby');\n }\n }\n\n /**\n * Sets the text content of the host element to the provided text.\n * @param text The text content.\n */\n public setTextContent(text: string): void {\n removeAllChildren(this._component);\n if (text) {\n this._component.appendChild(document.createTextNode(text));\n }\n }\n\n /**\n * Adds an event listener to the target element.\n * @param targetElement The target element instance.\n * @param type The event type.\n * @param listener The event listener.\n */\n public addTargetEventListener(type: string, listener: (evt: MouseEvent) => void): void {\n if (this._targetElement) {\n this._targetElement.addEventListener(type, listener);\n }\n }\n\n /**\n * Removes an event listener from the target element.\n * @param type The event type.\n * @param listener The event listener.\n */\n public removeTargetEventListener(type: string, listener: (evt: MouseEvent) => void): void {\n if (this._targetElement) {\n this._targetElement.removeEventListener(type, listener);\n }\n }\n\n /**\n * Displays the tooltip around the target element based on the provided configuration.\n * @param position The position.\n * @param content The tooltip content.\n */\n public showTooltip(position: PopupPlacement, content?: HTMLElement | Text): void {\n if (!this._targetElement) {\n return;\n }\n\n if (!content) {\n const child = this._getTooltipContent();\n content = child.cloneNode(true) as HTMLElement | Text;\n }\n\n const isEmptyTextNode = content.nodeType === 3 && (!content.textContent || content.textContent.trim().length === 0);\n const isEmptyNode = !content || isEmptyTextNode;\n if (isEmptyNode) {\n return;\n }\n\n this._tooltipElement = attachTooltip(this._targetElement, position, content);\n }\n\n public getInnerText(): string {\n return this._component.innerText;\n }\n\n /**\n * Removes the tooltip from the DOM.\n * @param tooltipElement The target element instance.\n */\n public hideTooltip(): void {\n if (this._tooltipElement) {\n removeElement(this._tooltipElement);\n this._tooltipElement = null;\n }\n }\n\n public getTooltipElement(): HTMLElement | null {\n return this._tooltipElement;\n }\n\n /**\n * Gets the target element based on the provided CSS selector.\n * @param {string | undefined} selector The target element selector.\n */\n private _getTargetElement(selector: string | undefined): HTMLElement | null {\n if (selector) {\n if (this._component.parentElement) {\n if (matchesSelectors(this._component.parentElement, selector)) {\n return this._component.parentElement;\n }\n return this._component.parentElement.querySelector(selector);\n }\n } else {\n return (this._component.previousElementSibling || this._component.parentElement) as HTMLElement;\n }\n return null;\n }\n\n private _getTooltipContent(): Node {\n return this._component.firstElementChild || this._component.firstChild || document.createTextNode('');\n }\n}\n", "import { ICustomElementFoundation, throttle, Platform, isDefined } from '@tylertech/forge-core';\n\nimport { ITooltipAdapter } from './tooltip-adapter';\nimport { TOOLTIP_CONSTANTS, TooltipBuilder } from './tooltip-constants';\nimport { PopupPlacement } from '../popup';\n\nexport interface ITooltipFoundation extends ICustomElementFoundation {\n text: string;\n builder: TooltipBuilder | undefined;\n target: string;\n delay: number;\n position: PopupPlacement;\n open: boolean;\n hide(): void;\n tooltipElement: HTMLElement | null;\n}\n\n/**\n * The foundation class behind the tooltip component.\n */\nexport class TooltipFoundation implements ITooltipFoundation {\n private static _tooltipIdentifier = 0;\n private _identifier: string | null;\n private _text: string;\n private _builder: TooltipBuilder | undefined;\n private _target: string;\n private _delay = TOOLTIP_CONSTANTS.numbers.DEFAULT_DELAY;\n private _position: PopupPlacement = TOOLTIP_CONSTANTS.strings.DEFAULT_POSITION as PopupPlacement;\n private _mouseOverTimeout: number | undefined;\n private _isOpen = false;\n private _touchTimeout: number | undefined;\n private _mouseOverListener: (evt: MouseEvent) => void;\n private _mouseOutListener: (evt: MouseEvent) => void;\n private _touchStartListener: (evt: MouseEvent) => void;\n private _touchEndListener: (evt: MouseEvent) => void;\n private _scrollListener: (evt: Event) => void;\n private _clickListener: (evt: MouseEvent) => void;\n private _mouseDownListener: (evt: MouseEvent) => void;\n private _dragListener: (evt: DragEvent) => void;\n \n constructor(private _adapter: ITooltipAdapter) {\n this._mouseOverListener = evt => this._onMouseOver(evt);\n this._mouseOutListener = evt => this._onMouseOut(evt);\n this._touchStartListener = evt => this._onTouchStart(evt);\n this._touchEndListener = evt => this._onTouchEnd(evt);\n this._scrollListener = throttle((evt: Event) => this._onScroll(evt), 100);\n this._clickListener = () => this._targetInteracted();\n this._mouseDownListener = () => this._targetInteracted();\n this._dragListener = () => this._targetInteracted();\n }\n\n public initialize(): void {\n this._adapter.initializeTargetElement(this._target);\n\n if (!this._adapter.hasTargetElement()) {\n throw new Error('Unable to locate target element.');\n }\n\n // Set a unique id for this tooltip (unless it already has one)\n this._identifier = this._adapter.getHostAttribute('id');\n if (!this._identifier) {\n this._identifier = this._getNextIdentifier();\n this._adapter.setHostAttribute('id', this._identifier);\n }\n\n this._addTargetListeners();\n this._adapter.initializeAccessibility(this._identifier);\n }\n\n public disconnect(): void {\n if (this._mouseOverTimeout) {\n window.clearTimeout(this._mouseOverTimeout);\n this._mouseOverTimeout = undefined;\n }\n if (this._touchTimeout) {\n window.clearTimeout(this._touchTimeout);\n this._touchTimeout = undefined;\n }\n this._adapter.destroy(this._identifier);\n if (this._isOpen) {\n this.hide();\n }\n if (this._adapter.hasTargetElement()) {\n this._removeTargetListeners();\n }\n }\n\n /**\n * Generates the next available tooltip identifier.\n */\n private _getNextIdentifier(): string {\n return `forge-tooltip-${TooltipFoundation._tooltipIdentifier++}`;\n }\n\n /** Adds event listeners to the target element. */\n private _addTargetListeners(): void {\n if (Platform.isMobile) {\n this._adapter.addTargetEventListener('touchstart', this._touchStartListener);\n this._adapter.addTargetEventListener('touchend', this._touchEndListener);\n } else {\n this._adapter.addTargetEventListener('mouseover', this._mouseOverListener);\n this._adapter.addTargetEventListener('mouseout', this._mouseOutListener);\n }\n\n this._adapter.addTargetEventListener('click', this._clickListener);\n this._adapter.addTargetEventListener('mousedown', this._mouseDownListener);\n this._adapter.addTargetEventListener('dragstart', this._dragListener);\n }\n\n /**\n * Removes the event listeners from the target element.\n * @param targetElement The target element instance.\n */\n private _removeTargetListeners(): void {\n if (Platform.isMobile) {\n this._adapter.removeTargetEventListener('touchstart', this._touchStartListener);\n this._adapter.removeTargetEventListener('touchend', this._touchEndListener);\n } else {\n this._adapter.removeTargetEventListener('mouseover', this._mouseOverListener);\n this._adapter.removeTargetEventListener('mouseout', this._mouseOutListener);\n }\n\n this._adapter.removeTargetEventListener('click', this._clickListener);\n this._adapter.removeTargetEventListener('mousedown', this._mouseDownListener);\n this._adapter.removeTargetEventListener('dragstart', this._dragListener);\n }\n\n /**\n * Handles the touchstart event on the target element to detect long press.\n */\n private _onTouchStart(evt: Event): void {\n this._touchTimeout = window.setTimeout(() => {\n this._show();\n window.setTimeout(() => this.hide(), TOOLTIP_CONSTANTS.numbers.LONGPRESS_VISIBILITY_DURATION);\n this._touchTimeout = undefined;\n }, TOOLTIP_CONSTANTS.numbers.LONGPRESS_THRESHOLD);\n }\n \n /**\n * Handles the touchend event on the target element to cancel a long press action.\n */\n private _onTouchEnd(evt: Event): void {\n if (this._touchTimeout) {\n this._clearTouchTimer();\n }\n }\n\n private _clearTouchTimer(): void {\n window.clearTimeout(this._touchTimeout);\n this._touchTimeout = undefined;\n }\n\n /**\n * Handles the mouseover event on the target element.\n */\n private _onMouseOver(evt: MouseEvent): void {\n if (this._isOpen || !this._adapter.hasTargetElement() || !this._adapter.isTargetElementConnected()) {\n return;\n }\n\n if (this._delay) {\n this._mouseOverTimeout = window.setTimeout(() => {\n this._show();\n this._mouseOverTimeout = undefined;\n }, this._delay);\n } else {\n this._show();\n }\n }\n\n /**\n * Handles the mouseout event on the target element.\n */\n private _onMouseOut(evt: MouseEvent): void {\n if (this._mouseOverTimeout) {\n window.clearTimeout(this._mouseOverTimeout);\n this._mouseOverTimeout = undefined;\n return;\n }\n this.hide();\n }\n\n /**\n * Displays the tooltip.\n */\n private _show(): void {\n let content: HTMLElement | undefined;\n\n if (this._builder && typeof this._builder === 'function') {\n content = this._builder();\n }\n\n this._adapter.showTooltip(this._position, content);\n\n if (this._adapter.hasTooltipElement()) {\n this._isOpen = true;\n this._adapter.addWindowListener('scroll', this._scrollListener);\n }\n }\n\n /**\n * Hides the tooltip.\n */\n public hide(): void {\n if (!this._isOpen) {\n return;\n }\n if (this._touchTimeout) {\n this._clearTouchTimer();\n }\n this._isOpen = false;\n this._adapter.removeWindowListener('scroll', this._scrollListener);\n this._adapter.hideTooltip();\n }\n\n /**\n * Handles scrolling events when the tooltip is open.\n */\n private _onScroll(evt: Event): void {\n if (!this._isOpen) {\n return;\n }\n this.hide();\n }\n\n private _targetInteracted(): void {\n if (this._mouseOverTimeout) {\n window.clearTimeout(this._mouseOverTimeout);\n }\n if (this._isOpen) {\n this.hide();\n }\n }\n\n /** Gets/sets the tooltip text. */\n public get text(): string {\n return this._text || this._adapter.getInnerText();\n }\n public set text(value: string) {\n if (this._text !== value) {\n this._text = value;\n this._adapter.setTextContent(this._text);\n this._adapter.setHostAttribute(TOOLTIP_CONSTANTS.attributes.TEXT, this._text);\n }\n }\n\n /** Sets the tooltip builder function. */\n public get builder(): TooltipBuilder | undefined {\n return this._builder;\n }\n public set builder(value: TooltipBuilder | undefined) {\n this._builder = value;\n }\n \n /** Gets/sets the target element CSS selector. */\n public get target(): string {\n return this._target;\n }\n public set target(value: string) {\n if (this._target !== value) {\n this._target = value;\n\n if (this._adapter.hasTargetElement()) {\n this._removeTargetListeners();\n }\n\n this._adapter.initializeTargetElement(this._target);\n \n if (this._adapter.hasTargetElement()) {\n this._addTargetListeners();\n }\n\n this._adapter.setHostAttribute(TOOLTIP_CONSTANTS.attributes.TARGET, isDefined(this._target) ? this._target : '');\n }\n }\n\n /** Gets/sets the interaction delay. */\n public get delay(): number {\n return this._delay;\n }\n public set delay(value: number) {\n if (this._delay !== value) {\n this._delay = value;\n this._adapter.setHostAttribute(TOOLTIP_CONSTANTS.attributes.DELAY, isDefined(this._delay) ? this._delay.toString() : '');\n }\n }\n\n /** Gets/sets the tooltip position. */\n public get position(): PopupPlacement {\n return this._position;\n }\n public set position(value: PopupPlacement) {\n if (this._position !== value) {\n this._position = value;\n this._adapter.setHostAttribute(TOOLTIP_CONSTANTS.attributes.POSITION, isDefined(this._position) ? this._position.toString() : '');\n }\n }\n\n public set open(value: boolean) {\n this._show();\n }\n public get open(): boolean {\n return this._isOpen;\n }\n\n public get tooltipElement(): HTMLElement | null {\n return this._adapter.getTooltipElement();\n }\n}\n", "import { CustomElement, coerceNumber, hideElementVisually, FoundationProperty } from '@tylertech/forge-core';\nimport { TooltipAdapter } from './tooltip-adapter';\nimport { TooltipFoundation } from './tooltip-foundation';\nimport { TOOLTIP_CONSTANTS, TooltipBuilder } from './tooltip-constants';\nimport { PopupPlacement } from '../popup';\nimport { BaseComponent, IBaseComponent } from '../core/base/base-component';\n\nexport interface ITooltipComponent extends IBaseComponent {\n text: string;\n builder: TooltipBuilder | undefined;\n target: string;\n delay: number;\n position: PopupPlacement;\n open: boolean;\n hide(): void;\n tooltipElement: HTMLElement | null;\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'forge-tooltip': ITooltipComponent;\n }\n}\n\n/**\n * The custom element class behind the `<forge-tooltip>` element.\n * \n * @tag forge-tooltip\n */\n@CustomElement({\n name: TOOLTIP_CONSTANTS.elementName\n})\nexport class TooltipComponent extends BaseComponent implements ITooltipComponent {\n public static get observedAttributes(): string[] {\n return [\n TOOLTIP_CONSTANTS.attributes.TEXT,\n TOOLTIP_CONSTANTS.attributes.TARGET,\n TOOLTIP_CONSTANTS.attributes.DELAY,\n TOOLTIP_CONSTANTS.attributes.POSITION\n ];\n }\n\n private _foundation: TooltipFoundation;\n\n constructor() {\n super();\n this._foundation = new TooltipFoundation(new TooltipAdapter(this));\n }\n\n public connectedCallback(): void {\n hideElementVisually(this);\n requestAnimationFrame(() => this._foundation.initialize());\n }\n\n public disconnectedCallback(): void {\n this._foundation.disconnect();\n }\n\n public attributeChangedCallback(name: string, oldValue: string, newValue: string): void {\n switch (name) {\n case TOOLTIP_CONSTANTS.attributes.TEXT:\n this.text = newValue;\n break;\n case TOOLTIP_CONSTANTS.attributes.TARGET:\n this.target = newValue;\n break;\n case TOOLTIP_CONSTANTS.attributes.DELAY:\n this.delay = coerceNumber(newValue);\n break;\n case TOOLTIP_CONSTANTS.attributes.POSITION:\n this.position = newValue as PopupPlacement;\n break;\n }\n }\n\n /** Gets/sets the tooltip text. */\n @FoundationProperty()\n public declare text: string;\n\n /** Sets the tooltip builder function for display complex tooltip content. */\n @FoundationProperty()\n public declare builder: TooltipBuilder | undefined;\n \n /** Gets/sets the target element selector. */\n @FoundationProperty()\n public declare target: string;\n\n /** The tooltip display delay in milliseconds. */\n @FoundationProperty()\n public declare delay: number;\n\n /** Gets/sets the position. */\n @FoundationProperty()\n public declare position: `${PopupPlacement}`;\n\n /** Gets the open state of the tooltip. */\n @FoundationProperty()\n public declare open: boolean;\n\n @FoundationProperty({ set: false })\n public declare tooltipElement: HTMLElement | null;\n\n /** Hides the tooltip if it's open. */\n public hide(): void {\n this._foundation.hide();\n }\n}\n", "import { defineCustomElement } from '@tylertech/forge-core';\n\nimport { TooltipComponent } from './tooltip';\n\nexport * from './tooltip-adapter';\nexport * from './tooltip-constants';\nexport * from './tooltip-foundation';\nexport * from './tooltip-utils';\nexport * from './tooltip';\n\nexport function defineTooltipComponent(): void {\n defineCustomElement(TooltipComponent);\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["/**\n * Hides an element from the user visually, while keeping it in the DOM.\n * @param element The element to hide from view.\n */\nexport function hideElementVisually(element) {\n element.style.border = '0';\n element.style.clip = 'rect(0 0 0 0)';\n element.style.height = '1px';\n element.style.margin = '-1px';\n element.style.overflow = 'hidden';\n element.style.padding = '0';\n element.style.position = 'absolute';\n element.style.width = '1px';\n element.style.outline = '0';\n element.style.setProperty('-webkit-appearance', 'none');\n element.style.setProperty('-moz-appearance', 'none');\n}\n", "import { IElementPosition, positionElementAsync } from '@tylertech/forge-core';\nimport { PopupPlacement } from '../popup';\nimport { TOOLTIP_CONSTANTS } from './tooltip-constants';\n\n/**\n * Attaches a positioned tooltip to the provided target element.\n * @param targetElement The element to position the tooltip around.\n * @param placement The placement of the tooltip relative to the target element.\n * @param content The content of the tooltip.\n */\nexport function attachTooltip(targetElement: HTMLElement, placement: PopupPlacement, content: string | HTMLElement | Text): HTMLElement {\n if (typeof content === 'string') {\n content = document.createTextNode(content);\n }\n\n const element = document.createElement('div');\n element.setAttribute('role', 'tooltip');\n element.classList.add(TOOLTIP_CONSTANTS.classes.TOOLTIP);\n element.appendChild(content);\n element.setAttribute('role', 'tooltip');\n element.setAttribute('aria-hidden', 'true');\n\n const hostDocument = targetElement.ownerDocument || document;\n hostDocument.body.appendChild(element);\n\n const offset: IElementPosition = { x: 0, y: 0 };\n const offsetAmount = 4;\n\n switch (placement) {\n case 'top':\n offset.y = -offsetAmount;\n element.classList.add(TOOLTIP_CONSTANTS.classes.TOOLTIP_TOP);\n break;\n case 'right':\n offset.x = offsetAmount;\n element.classList.add(TOOLTIP_CONSTANTS.classes.TOOLTIP_RIGHT);\n break;\n case 'bottom':\n offset.y = offsetAmount;\n element.classList.add(TOOLTIP_CONSTANTS.classes.TOOLTIP_BOTTOM);\n break;\n case 'left':\n offset.x = -offsetAmount;\n element.classList.add(TOOLTIP_CONSTANTS.classes.TOOLTIP_LEFT);\n break;\n }\n\n window.requestAnimationFrame(() => {\n window.requestAnimationFrame(() => {\n element.classList.add(TOOLTIP_CONSTANTS.classes.TOOLTIP_OPEN);\n positionElementAsync({ element, targetElement, placement, transform: false, offset });\n });\n });\n\n return element;\n}\n", "import { removeAllChildren, removeElement, matchesSelectors } from '@tylertech/forge-core';\nimport { BaseAdapter, IBaseAdapter } from '../core/base/base-adapter';\nimport { PopupPlacement } from '../popup';\nimport { ITooltipComponent } from './tooltip';\nimport { attachTooltip } from './tooltip-utils';\n\nexport interface ITooltipAdapter extends IBaseAdapter {\n hasTargetElement(): boolean;\n hasTooltipElement(): boolean;\n isTargetElementConnected(): boolean;\n initializeTargetElement(selector: string): void;\n destroy(identifier: string | null): void;\n initializeAccessibility(identifier: string): void;\n setTextContent(text: string): void;\n addTargetEventListener(type: string, listener: (evt: MouseEvent) => void): void;\n removeTargetEventListener(type: string, listener: (evt: MouseEvent) => void): void;\n showTooltip(position: PopupPlacement, content?: HTMLElement | Text): void;\n getInnerText(): string;\n hideTooltip(): void;\n getTooltipElement(): HTMLElement | null;\n}\n\n/**\n * The DOM adapter for the tooltip component.\n */\nexport class TooltipAdapter extends BaseAdapter<ITooltipComponent> implements ITooltipAdapter {\n private _targetElement: HTMLElement | null;\n private _tooltipElement: HTMLElement | null = null;\n\n constructor(component: ITooltipComponent) {\n super(component);\n }\n\n public initializeTargetElement(selector: string): void {\n this._targetElement = this._getTargetElement(selector);\n }\n\n public initializeAccessibility(identifier: string): void {\n if (this._targetElement && !this._targetElement.hasAttribute('aria-describedby')) {\n this._targetElement.setAttribute('aria-describedby', identifier);\n }\n }\n\n public hasTargetElement(): boolean {\n return !!this._targetElement;\n }\n\n public hasTooltipElement(): boolean {\n return !!this._tooltipElement;\n }\n\n public isTargetElementConnected(): boolean {\n return !!this._targetElement && this._targetElement.isConnected;\n }\n\n public destroy(identifier: string | null): void {\n if (this._targetElement && this._targetElement.getAttribute('aria-describedby') === identifier) {\n this._targetElement.removeAttribute('aria-describedby');\n }\n }\n\n /**\n * Sets the text content of the host element to the provided text.\n * @param text The text content.\n */\n public setTextContent(text: string): void {\n removeAllChildren(this._component);\n if (text) {\n this._component.appendChild(document.createTextNode(text));\n }\n }\n\n /**\n * Adds an event listener to the target element.\n * @param targetElement The target element instance.\n * @param type The event type.\n * @param listener The event listener.\n */\n public addTargetEventListener(type: string, listener: (evt: MouseEvent) => void): void {\n if (this._targetElement) {\n this._targetElement.addEventListener(type, listener);\n }\n }\n\n /**\n * Removes an event listener from the target element.\n * @param type The event type.\n * @param listener The event listener.\n */\n public removeTargetEventListener(type: string, listener: (evt: MouseEvent) => void): void {\n if (this._targetElement) {\n this._targetElement.removeEventListener(type, listener);\n }\n }\n\n /**\n * Displays the tooltip around the target element based on the provided configuration.\n * @param position The position.\n * @param content The tooltip content.\n */\n public showTooltip(position: PopupPlacement, content?: HTMLElement | Text): void {\n if (!this._targetElement) {\n return;\n }\n\n if (!content) {\n const child = this._getTooltipContent();\n content = child.cloneNode(true) as HTMLElement | Text;\n }\n\n const isEmptyTextNode = content.nodeType === 3 && (!content.textContent || content.textContent.trim().length === 0);\n const isEmptyNode = !content || isEmptyTextNode;\n if (isEmptyNode) {\n return;\n }\n\n this._tooltipElement = attachTooltip(this._targetElement, position, content);\n }\n\n public getInnerText(): string {\n return this._component.innerText;\n }\n\n /**\n * Removes the tooltip from the DOM.\n * @param tooltipElement The target element instance.\n */\n public hideTooltip(): void {\n if (this._tooltipElement) {\n removeElement(this._tooltipElement);\n this._tooltipElement = null;\n }\n }\n\n public getTooltipElement(): HTMLElement | null {\n return this._tooltipElement;\n }\n\n /**\n * Gets the target element based on the provided CSS selector.\n * @param {string | undefined} selector The target element selector.\n */\n private _getTargetElement(selector: string | undefined): HTMLElement | null {\n if (selector) {\n if (this._component.parentElement) {\n if (matchesSelectors(this._component.parentElement, selector)) {\n return this._component.parentElement;\n }\n return this._component.parentElement.querySelector(selector);\n }\n } else {\n return (this._component.previousElementSibling || this._component.parentElement) as HTMLElement;\n }\n return null;\n }\n\n private _getTooltipContent(): Node {\n return this._component.firstElementChild || this._component.firstChild || document.createTextNode('');\n }\n}\n", "import { ICustomElementFoundation, throttle, Platform, isDefined } from '@tylertech/forge-core';\n\nimport { ITooltipAdapter } from './tooltip-adapter';\nimport { TOOLTIP_CONSTANTS, TooltipBuilder } from './tooltip-constants';\nimport { PopupPlacement } from '../popup';\n\nexport interface ITooltipFoundation extends ICustomElementFoundation {\n text: string;\n builder: TooltipBuilder | undefined;\n target: string;\n delay: number;\n position: PopupPlacement;\n open: boolean;\n hide(): void;\n tooltipElement: HTMLElement | null;\n}\n\n/**\n * The foundation class behind the tooltip component.\n */\nexport class TooltipFoundation implements ITooltipFoundation {\n private static _tooltipIdentifier = 0;\n private _identifier: string | null;\n private _text: string;\n private _builder: TooltipBuilder | undefined;\n private _target: string;\n private _delay = TOOLTIP_CONSTANTS.numbers.DEFAULT_DELAY;\n private _position: PopupPlacement = TOOLTIP_CONSTANTS.strings.DEFAULT_POSITION as PopupPlacement;\n private _mouseOverTimeout: number | undefined;\n private _isOpen = false;\n private _touchTimeout: number | undefined;\n private _mouseOverListener: (evt: MouseEvent) => void;\n private _mouseOutListener: (evt: MouseEvent) => void;\n private _touchStartListener: (evt: MouseEvent) => void;\n private _touchEndListener: (evt: MouseEvent) => void;\n private _scrollListener: (evt: Event) => void;\n private _clickListener: (evt: MouseEvent) => void;\n private _mouseDownListener: (evt: MouseEvent) => void;\n private _dragListener: (evt: DragEvent) => void;\n \n constructor(private _adapter: ITooltipAdapter) {\n this._mouseOverListener = evt => this._onMouseOver(evt);\n this._mouseOutListener = evt => this._onMouseOut(evt);\n this._touchStartListener = evt => this._onTouchStart(evt);\n this._touchEndListener = evt => this._onTouchEnd(evt);\n this._scrollListener = throttle((evt: Event) => this._onScroll(evt), 100);\n this._clickListener = () => this._targetInteracted();\n this._mouseDownListener = () => this._targetInteracted();\n this._dragListener = () => this._targetInteracted();\n }\n\n public initialize(): void {\n this._adapter.initializeTargetElement(this._target);\n\n if (!this._adapter.hasTargetElement()) {\n throw new Error('Unable to locate target element.');\n }\n\n // Set a unique id for this tooltip (unless it already has one)\n this._identifier = this._adapter.getHostAttribute('id');\n if (!this._identifier) {\n this._identifier = this._getNextIdentifier();\n this._adapter.setHostAttribute('id', this._identifier);\n }\n\n this._addTargetListeners();\n this._adapter.initializeAccessibility(this._identifier);\n }\n\n public disconnect(): void {\n if (this._mouseOverTimeout) {\n window.clearTimeout(this._mouseOverTimeout);\n this._mouseOverTimeout = undefined;\n }\n if (this._touchTimeout) {\n window.clearTimeout(this._touchTimeout);\n this._touchTimeout = undefined;\n }\n this._adapter.destroy(this._identifier);\n if (this._isOpen) {\n this.hide();\n }\n if (this._adapter.hasTargetElement()) {\n this._removeTargetListeners();\n }\n }\n\n /**\n * Generates the next available tooltip identifier.\n */\n private _getNextIdentifier(): string {\n return `forge-tooltip-${TooltipFoundation._tooltipIdentifier++}`;\n }\n\n /** Adds event listeners to the target element. */\n private _addTargetListeners(): void {\n if (Platform.isMobile) {\n this._adapter.addTargetEventListener('touchstart', this._touchStartListener);\n this._adapter.addTargetEventListener('touchend', this._touchEndListener);\n } else {\n this._adapter.addTargetEventListener('mouseover', this._mouseOverListener);\n this._adapter.addTargetEventListener('mouseout', this._mouseOutListener);\n }\n\n this._adapter.addTargetEventListener('click', this._clickListener);\n this._adapter.addTargetEventListener('mousedown', this._mouseDownListener);\n this._adapter.addTargetEventListener('dragstart', this._dragListener);\n }\n\n /**\n * Removes the event listeners from the target element.\n * @param targetElement The target element instance.\n */\n private _removeTargetListeners(): void {\n if (Platform.isMobile) {\n this._adapter.removeTargetEventListener('touchstart', this._touchStartListener);\n this._adapter.removeTargetEventListener('touchend', this._touchEndListener);\n } else {\n this._adapter.removeTargetEventListener('mouseover', this._mouseOverListener);\n this._adapter.removeTargetEventListener('mouseout', this._mouseOutListener);\n }\n\n this._adapter.removeTargetEventListener('click', this._clickListener);\n this._adapter.removeTargetEventListener('mousedown', this._mouseDownListener);\n this._adapter.removeTargetEventListener('dragstart', this._dragListener);\n }\n\n /**\n * Handles the touchstart event on the target element to detect long press.\n */\n private _onTouchStart(evt: Event): void {\n this._touchTimeout = window.setTimeout(() => {\n this._show();\n window.setTimeout(() => this.hide(), TOOLTIP_CONSTANTS.numbers.LONGPRESS_VISIBILITY_DURATION);\n this._touchTimeout = undefined;\n }, TOOLTIP_CONSTANTS.numbers.LONGPRESS_THRESHOLD);\n }\n \n /**\n * Handles the touchend event on the target element to cancel a long press action.\n */\n private _onTouchEnd(evt: Event): void {\n if (this._touchTimeout) {\n this._clearTouchTimer();\n }\n }\n\n private _clearTouchTimer(): void {\n window.clearTimeout(this._touchTimeout);\n this._touchTimeout = undefined;\n }\n\n /**\n * Handles the mouseover event on the target element.\n */\n private _onMouseOver(evt: MouseEvent): void {\n if (this._isOpen || !this._adapter.hasTargetElement() || !this._adapter.isTargetElementConnected()) {\n return;\n }\n\n if (this._delay) {\n this._mouseOverTimeout = window.setTimeout(() => {\n this._show();\n this._mouseOverTimeout = undefined;\n }, this._delay);\n } else {\n this._show();\n }\n }\n\n /**\n * Handles the mouseout event on the target element.\n */\n private _onMouseOut(evt: MouseEvent): void {\n if (this._mouseOverTimeout) {\n window.clearTimeout(this._mouseOverTimeout);\n this._mouseOverTimeout = undefined;\n return;\n }\n this.hide();\n }\n\n /**\n * Displays the tooltip.\n */\n private _show(): void {\n let content: HTMLElement | undefined;\n\n if (this._builder && typeof this._builder === 'function') {\n content = this._builder();\n }\n\n this._adapter.showTooltip(this._position, content);\n\n if (this._adapter.hasTooltipElement()) {\n this._isOpen = true;\n this._adapter.addWindowListener('scroll', this._scrollListener);\n }\n }\n\n /**\n * Hides the tooltip.\n */\n public hide(): void {\n if (!this._isOpen) {\n return;\n }\n if (this._touchTimeout) {\n this._clearTouchTimer();\n }\n this._isOpen = false;\n this._adapter.removeWindowListener('scroll', this._scrollListener);\n this._adapter.hideTooltip();\n }\n\n /**\n * Handles scrolling events when the tooltip is open.\n */\n private _onScroll(evt: Event): void {\n if (!this._isOpen) {\n return;\n }\n this.hide();\n }\n\n private _targetInteracted(): void {\n if (this._mouseOverTimeout) {\n window.clearTimeout(this._mouseOverTimeout);\n }\n if (this._isOpen) {\n this.hide();\n }\n }\n\n /** Gets/sets the tooltip text. */\n public get text(): string {\n return this._text || this._adapter.getInnerText();\n }\n public set text(value: string) {\n if (this._text !== value) {\n this._text = value;\n this._adapter.setTextContent(this._text);\n this._adapter.setHostAttribute(TOOLTIP_CONSTANTS.attributes.TEXT, this._text);\n }\n }\n\n /** Sets the tooltip builder function. */\n public get builder(): TooltipBuilder | undefined {\n return this._builder;\n }\n public set builder(value: TooltipBuilder | undefined) {\n this._builder = value;\n }\n \n /** Gets/sets the target element CSS selector. */\n public get target(): string {\n return this._target;\n }\n public set target(value: string) {\n if (this._target !== value) {\n this._target = value;\n\n if (this._adapter.hasTargetElement()) {\n this._removeTargetListeners();\n }\n\n this._adapter.initializeTargetElement(this._target);\n \n if (this._adapter.hasTargetElement()) {\n this._addTargetListeners();\n }\n\n this._adapter.setHostAttribute(TOOLTIP_CONSTANTS.attributes.TARGET, isDefined(this._target) ? this._target : '');\n }\n }\n\n /** Gets/sets the interaction delay. */\n public get delay(): number {\n return this._delay;\n }\n public set delay(value: number) {\n if (this._delay !== value) {\n this._delay = value;\n this._adapter.setHostAttribute(TOOLTIP_CONSTANTS.attributes.DELAY, isDefined(this._delay) ? this._delay.toString() : '');\n }\n }\n\n /** Gets/sets the tooltip position. */\n public get position(): PopupPlacement {\n return this._position;\n }\n public set position(value: PopupPlacement) {\n if (this._position !== value) {\n this._position = value;\n this._adapter.setHostAttribute(TOOLTIP_CONSTANTS.attributes.POSITION, isDefined(this._position) ? this._position.toString() : '');\n }\n }\n\n public set open(value: boolean) {\n this._show();\n }\n public get open(): boolean {\n return this._isOpen;\n }\n\n public get tooltipElement(): HTMLElement | null {\n return this._adapter.getTooltipElement();\n }\n}\n", "import { CustomElement, coerceNumber, hideElementVisually, FoundationProperty } from '@tylertech/forge-core';\nimport { TooltipAdapter } from './tooltip-adapter';\nimport { TooltipFoundation } from './tooltip-foundation';\nimport { TOOLTIP_CONSTANTS, TooltipBuilder } from './tooltip-constants';\nimport { PopupPlacement } from '../popup';\nimport { BaseComponent, IBaseComponent } from '../core/base/base-component';\n\nexport interface ITooltipComponent extends IBaseComponent {\n text: string;\n builder: TooltipBuilder | undefined;\n target: string;\n delay: number;\n position: PopupPlacement;\n open: boolean;\n hide(): void;\n tooltipElement: HTMLElement | null;\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'forge-tooltip': ITooltipComponent;\n }\n}\n\n/**\n * The custom element class behind the `<forge-tooltip>` element.\n * \n * @tag forge-tooltip\n */\n@CustomElement({\n name: TOOLTIP_CONSTANTS.elementName\n})\nexport class TooltipComponent extends BaseComponent implements ITooltipComponent {\n public static get observedAttributes(): string[] {\n return [\n TOOLTIP_CONSTANTS.attributes.TEXT,\n TOOLTIP_CONSTANTS.attributes.TARGET,\n TOOLTIP_CONSTANTS.attributes.DELAY,\n TOOLTIP_CONSTANTS.attributes.POSITION\n ];\n }\n\n private _foundation: TooltipFoundation;\n\n constructor() {\n super();\n this._foundation = new TooltipFoundation(new TooltipAdapter(this));\n }\n\n public connectedCallback(): void {\n hideElementVisually(this);\n requestAnimationFrame(() => this._foundation.initialize());\n }\n\n public disconnectedCallback(): void {\n this._foundation.disconnect();\n }\n\n public attributeChangedCallback(name: string, oldValue: string, newValue: string): void {\n switch (name) {\n case TOOLTIP_CONSTANTS.attributes.TEXT:\n this.text = newValue;\n break;\n case TOOLTIP_CONSTANTS.attributes.TARGET:\n this.target = newValue;\n break;\n case TOOLTIP_CONSTANTS.attributes.DELAY:\n this.delay = coerceNumber(newValue);\n break;\n case TOOLTIP_CONSTANTS.attributes.POSITION:\n this.position = newValue as PopupPlacement;\n break;\n }\n }\n\n /** Gets/sets the tooltip text. */\n @FoundationProperty()\n public declare text: string;\n\n /** Sets the tooltip builder function for display complex tooltip content. */\n @FoundationProperty()\n public declare builder: TooltipBuilder | undefined;\n \n /** Gets/sets the target element selector. */\n @FoundationProperty()\n public declare target: string;\n\n /** The tooltip display delay in milliseconds. */\n @FoundationProperty()\n public declare delay: number;\n\n /** Gets/sets the position. */\n @FoundationProperty()\n public declare position: `${PopupPlacement}`;\n\n /** Gets the open state of the tooltip. */\n @FoundationProperty()\n public declare open: boolean;\n\n /** @readonly */\n @FoundationProperty({ set: false })\n public declare tooltipElement: HTMLElement | null;\n\n /** Hides the tooltip if it's open. */\n public hide(): void {\n this._foundation.hide();\n }\n}\n", "import { defineCustomElement } from '@tylertech/forge-core';\n\nimport { TooltipComponent } from './tooltip';\n\nexport * from './tooltip-adapter';\nexport * from './tooltip-constants';\nexport * from './tooltip-foundation';\nexport * from './tooltip-utils';\nexport * from './tooltip';\n\nexport function defineTooltipComponent(): void {\n defineCustomElement(TooltipComponent);\n}\n"],
5
+ "mappings": "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",
6
6
  "names": ["hideElementVisually", "element", "attachTooltip", "targetElement", "placement", "content", "element", "TOOLTIP_CONSTANTS", "offset", "offsetAmount", "positionElementAsync", "TooltipAdapter", "BaseAdapter", "component", "selector", "identifier", "text", "removeAllChildren", "type", "listener", "position", "content", "isEmptyTextNode", "attachTooltip", "removeElement", "matchesSelectors", "_TooltipFoundation", "_adapter", "TOOLTIP_CONSTANTS", "evt", "throttle", "Platform", "content", "value", "isDefined", "TooltipFoundation", "TooltipComponent", "BaseComponent", "TooltipFoundation", "TooltipAdapter", "TOOLTIP_CONSTANTS", "hideElementVisually", "name", "oldValue", "newValue", "coerceNumber", "__decorateClass", "FoundationProperty", "CustomElement", "defineTooltipComponent", "defineCustomElement", "TooltipComponent"]
7
7
  }
@@ -0,0 +1,7 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2023 Tyler Technologies, Inc.
4
+ * License: Apache-2.0
5
+ */
6
+ import{b as e}from"./chunk.CP3RUPXU.js";var E=`${e}checkbox`,c={CONTAINER:"forge-checkbox-container",ROOT:"mdc-checkbox",CHECKBOX:"mdc-checkbox",CHECKBOX_DENSE:"forge-checkbox--dense",ANIM_CHECKED_INDETERMINATE:"mdc-checkbox--anim-checked-indeterminate",ANIM_CHECKED_UNCHECKED:"mdc-checkbox--anim-checked-unchecked",ANIM_INDETERMINATE_CHECKED:"mdc-checkbox--anim-indeterminate-checked",ANIM_INDETERMINATE_UNCHECKED:"mdc-checkbox--anim-indeterminate-unchecked",ANIM_UNCHECKED_CHECKED:"mdc-checkbox--anim-unchecked-checked",ANIM_UNCHECKED_INDETERMINATE:"mdc-checkbox--anim-unchecked-indeterminate",BACKGROUND:"mdc-checkbox__background",CHECKMARK:"mdc-checkbox__checkmark",CHECKMARK_PATH:"mdc-checkbox__checkmark-path",DISABLED:"mdc-checkbox--disabled",WRAPPER_DISABLED:"forge-checkbox-wrapper--disabled",MIXEDMARK:"mdc-checkbox__mixedmark",SELECTED:"mdc-checkbox--selected",UPGRADED:"mdc-checkbox--upgraded",CHECKED:"forge-checkbox--checked",INDETERMINATE:"forge-checkbox--indeterminate",FOCUSED:"forge-checkbox--focused",ENABLED:"forge-checkbox--enabled"},d={INPUT:"input",LABEL:"label",ROOT:`.${c.ROOT}`,WRAPPER:".forge-checkbox-wrapper"},T={DENSE:"dense",CHECKED:"checked",SLOT:"slot",DISABLED:"disabled",INDETERMINATE:"indeterminate"},N={ARIA_CHECKED_ATTR:"aria-checked",ARIA_CHECKED_INDETERMINATE_VALUE:"mixed",DATA_INDETERMINATE_ATTR:"data-indeterminate",NATIVE_CONTROL_SELECTOR:".mdc-checkbox__native-control",TRANSITION_STATE_CHECKED:"checked",TRANSITION_STATE_INDETERMINATE:"indeterminate",TRANSITION_STATE_INIT:"init",TRANSITION_STATE_UNCHECKED:"unchecked"},o=["checked","indeterminate","disabled"],n={ANIM_END_LATCH_MS:250},_={elementName:E,classes:c,selectors:d,attributes:T,strings:N,CB_PROTO_PROPS:o,numbers:n};export{N as a,n as b,_ as c};
7
+ //# sourceMappingURL=chunk.IEHJRFK3.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/checkbox/checkbox-constants.ts"],
4
+ "sourcesContent": ["import { COMPONENT_NAME_PREFIX } from '../constants';\n\nconst elementName: keyof HTMLElementTagNameMap = `${COMPONENT_NAME_PREFIX}checkbox`;\n\nconst classes = {\n CONTAINER: 'forge-checkbox-container',\n ROOT: 'mdc-checkbox',\n CHECKBOX: 'mdc-checkbox',\n CHECKBOX_DENSE: 'forge-checkbox--dense',\n ANIM_CHECKED_INDETERMINATE: 'mdc-checkbox--anim-checked-indeterminate',\n ANIM_CHECKED_UNCHECKED: 'mdc-checkbox--anim-checked-unchecked',\n ANIM_INDETERMINATE_CHECKED: 'mdc-checkbox--anim-indeterminate-checked',\n ANIM_INDETERMINATE_UNCHECKED: 'mdc-checkbox--anim-indeterminate-unchecked',\n ANIM_UNCHECKED_CHECKED: 'mdc-checkbox--anim-unchecked-checked',\n ANIM_UNCHECKED_INDETERMINATE: 'mdc-checkbox--anim-unchecked-indeterminate',\n BACKGROUND: 'mdc-checkbox__background',\n CHECKMARK: 'mdc-checkbox__checkmark',\n CHECKMARK_PATH: 'mdc-checkbox__checkmark-path',\n DISABLED: 'mdc-checkbox--disabled',\n WRAPPER_DISABLED: 'forge-checkbox-wrapper--disabled',\n MIXEDMARK: 'mdc-checkbox__mixedmark',\n SELECTED: 'mdc-checkbox--selected',\n UPGRADED: 'mdc-checkbox--upgraded',\n CHECKED: 'forge-checkbox--checked',\n INDETERMINATE: 'forge-checkbox--indeterminate',\n FOCUSED: 'forge-checkbox--focused',\n ENABLED: 'forge-checkbox--enabled'\n};\n\nconst selectors = {\n INPUT: 'input',\n LABEL: 'label',\n ROOT: `.${classes.ROOT}`,\n WRAPPER: '.forge-checkbox-wrapper'\n};\n\nconst attributes = {\n DENSE: 'dense',\n CHECKED: 'checked',\n SLOT: 'slot',\n DISABLED: 'disabled',\n INDETERMINATE: 'indeterminate'\n};\n\nexport const strings = {\n ARIA_CHECKED_ATTR: 'aria-checked',\n ARIA_CHECKED_INDETERMINATE_VALUE: 'mixed',\n DATA_INDETERMINATE_ATTR: 'data-indeterminate',\n NATIVE_CONTROL_SELECTOR: '.mdc-checkbox__native-control',\n TRANSITION_STATE_CHECKED: 'checked',\n TRANSITION_STATE_INDETERMINATE: 'indeterminate',\n TRANSITION_STATE_INIT: 'init',\n TRANSITION_STATE_UNCHECKED: 'unchecked'\n};\n\nconst CB_PROTO_PROPS = ['checked', 'indeterminate', 'disabled'];\n\nexport const numbers = {\n ANIM_END_LATCH_MS: 250\n};\n\nexport const CHECKBOX_CONSTANTS = {\n elementName,\n classes,\n selectors,\n attributes,\n strings,\n CB_PROTO_PROPS,\n numbers\n};\n"],
5
+ "mappings": "wCAEA,IAAMA,EAA2C,GAAGC,YAE9CC,EAAU,CACd,UAAW,2BACX,KAAM,eACN,SAAU,eACV,eAAgB,wBAChB,2BAA4B,2CAC5B,uBAAwB,uCACxB,2BAA4B,2CAC5B,6BAA8B,6CAC9B,uBAAwB,uCACxB,6BAA8B,6CAC9B,WAAY,2BACZ,UAAW,0BACX,eAAgB,+BAChB,SAAU,yBACV,iBAAkB,mCAClB,UAAW,0BACX,SAAU,yBACV,SAAU,yBACV,QAAS,0BACT,cAAe,gCACf,QAAS,0BACT,QAAS,yBACX,EAEMC,EAAY,CAChB,MAAO,QACP,MAAO,QACP,KAAM,IAAID,EAAQ,OAClB,QAAS,yBACX,EAEME,EAAa,CACjB,MAAO,QACP,QAAS,UACT,KAAM,OACN,SAAU,WACV,cAAe,eACjB,EAEaC,EAAU,CACrB,kBAAmB,eACnB,iCAAkC,QAClC,wBAAyB,qBACzB,wBAAyB,gCACzB,yBAA0B,UAC1B,+BAAgC,gBAChC,sBAAuB,OACvB,2BAA4B,WAC9B,EAEMC,EAAiB,CAAC,UAAW,gBAAiB,UAAU,EAEjDC,EAAU,CACrB,kBAAmB,GACrB,EAEaC,EAAqB,CAChC,YAAAR,EACA,QAAAE,EACA,UAAAC,EACA,WAAAC,EACA,QAAAC,EACA,eAAAC,EACA,QAAAC,CACF",
6
+ "names": ["elementName", "COMPONENT_NAME_PREFIX", "classes", "selectors", "attributes", "strings", "CB_PROTO_PROPS", "numbers", "CHECKBOX_CONSTANTS"]
7
+ }