@dialpad/dialtone-vue 3.120.0 → 3.120.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (425) hide show
  1. package/dist/chunks/_plugin-vue_export-helper-caHeSgYY.js +11 -0
  2. package/dist/chunks/_plugin-vue_export-helper-caHeSgYY.js.map +1 -0
  3. package/dist/chunks/_plugin-vue_export-helper-fhnQq0tA.js +10 -0
  4. package/dist/chunks/_plugin-vue_export-helper-fhnQq0tA.js.map +1 -0
  5. package/dist/chunks/{dropdown-eWOvBvwq.js → dropdown-Hn-TeTvZ.js} +151 -104
  6. package/dist/chunks/{dropdown-UO3UJalk.js.map → dropdown-Hn-TeTvZ.js.map} +1 -1
  7. package/dist/chunks/dropdown-w8Do29L5.js +442 -0
  8. package/dist/chunks/{dropdown-eWOvBvwq.js.map → dropdown-w8Do29L5.js.map} +1 -1
  9. package/dist/chunks/dropdown_constants-2pGCXy7m.js +8 -0
  10. package/dist/chunks/dropdown_constants-2pGCXy7m.js.map +1 -0
  11. package/dist/chunks/dropdown_constants-w1MXGC3Z.js +9 -0
  12. package/dist/chunks/dropdown_constants-w1MXGC3Z.js.map +1 -0
  13. package/dist/chunks/{icon_constants-OpYAAKwF.js → icon_constants-Dy4MEUJL.js} +7 -6
  14. package/dist/chunks/{icon_constants-2S_OSQ1t.js.map → icon_constants-Dy4MEUJL.js.map} +1 -1
  15. package/dist/chunks/icon_constants-QYpmdE0R.js +16 -0
  16. package/dist/chunks/{icon_constants-OpYAAKwF.js.map → icon_constants-QYpmdE0R.js.map} +1 -1
  17. package/dist/chunks/index-4qgKeErp.js +446 -0
  18. package/dist/chunks/{index-b4iXYvId.js.map → index-4qgKeErp.js.map} +1 -1
  19. package/dist/chunks/index-b_MgDylR.js +447 -0
  20. package/dist/chunks/{index-6tYeqbgP.js.map → index-b_MgDylR.js.map} +1 -1
  21. package/dist/chunks/{input-4UQWegUk.js → input-NmYDD5bn.js} +83 -60
  22. package/dist/chunks/{input-0Uksk4DP.js.map → input-NmYDD5bn.js.map} +1 -1
  23. package/dist/chunks/input-ttnte8zB.js +295 -0
  24. package/dist/chunks/{input-4UQWegUk.js.map → input-ttnte8zB.js.map} +1 -1
  25. package/dist/chunks/input_group-M-D25pOJ.js +152 -0
  26. package/dist/chunks/{input_group-bBKaq3Wi.js.map → input_group-M-D25pOJ.js.map} +1 -1
  27. package/dist/chunks/{input_group-bBKaq3Wi.js → input_group-jWnq2DJT.js} +27 -24
  28. package/dist/chunks/{input_group-AS760Cp7.js.map → input_group-jWnq2DJT.js.map} +1 -1
  29. package/dist/chunks/keyboard_list_navigation-ScXhrxya.js +284 -0
  30. package/dist/chunks/{keyboard_list_navigation-N74Bpdq7.js.map → keyboard_list_navigation-ScXhrxya.js.map} +1 -1
  31. package/dist/chunks/keyboard_list_navigation-fJnl_Iox.js +283 -0
  32. package/dist/chunks/{keyboard_list_navigation-F0O8nht0.js.map → keyboard_list_navigation-fJnl_Iox.js.map} +1 -1
  33. package/dist/chunks/link_constants-Huj7D_hm.js +22 -0
  34. package/dist/chunks/{link_constants-Kn6kP4i1.js.map → link_constants-Huj7D_hm.js.map} +1 -1
  35. package/dist/chunks/link_constants-nWVlXQBs.js +23 -0
  36. package/dist/chunks/{link_constants-vIUB92L4.js.map → link_constants-nWVlXQBs.js.map} +1 -1
  37. package/dist/chunks/list_item_constants-EiqkqZvP.js +13 -0
  38. package/dist/chunks/{list_item_constants-Tsz5CO1m.js.map → list_item_constants-EiqkqZvP.js.map} +1 -1
  39. package/dist/chunks/list_item_constants-u1xcN9Dd.js +14 -0
  40. package/dist/chunks/{list_item_constants-LTUc74pD.js.map → list_item_constants-u1xcN9Dd.js.map} +1 -1
  41. package/dist/chunks/modal-VgxXAQFP.js +105 -0
  42. package/dist/chunks/{modal-qEzlo0Sj.js.map → modal-VgxXAQFP.js.map} +1 -1
  43. package/dist/chunks/modal-XOr4kiNZ.js +106 -0
  44. package/dist/chunks/{modal-VuMFkZFH.js.map → modal-XOr4kiNZ.js.map} +1 -1
  45. package/dist/chunks/notice_action-WTucGhvr.js +222 -0
  46. package/dist/chunks/{notice_action-tJfD5Qw1.js.map → notice_action-WTucGhvr.js.map} +1 -1
  47. package/dist/chunks/notice_action-p-ePanW_.js +223 -0
  48. package/dist/chunks/{notice_action-jO199emq.js.map → notice_action-p-ePanW_.js.map} +1 -1
  49. package/dist/chunks/notice_constants-7Qt2CQEY.js +7 -0
  50. package/dist/chunks/{notice_constants-mC6al2Dm.js.map → notice_constants-7Qt2CQEY.js.map} +1 -1
  51. package/dist/chunks/notice_constants-UXo9e3bS.js +6 -0
  52. package/dist/chunks/{notice_constants-c--hBFQw.js.map → notice_constants-UXo9e3bS.js.map} +1 -1
  53. package/dist/chunks/popover_constants-JwBF9h1Z.js +143 -0
  54. package/dist/chunks/{popover_constants-hOEhklvr.js.map → popover_constants-JwBF9h1Z.js.map} +1 -1
  55. package/dist/chunks/popover_constants-Qkpb0yh2.js +144 -0
  56. package/dist/chunks/{popover_constants-qjlEkroB.js.map → popover_constants-Qkpb0yh2.js.map} +1 -1
  57. package/dist/chunks/{sr_only_close_button-7O-Ev8uM.js → sr_only_close_button-3EdsV-dH.js} +28 -24
  58. package/dist/chunks/{sr_only_close_button-iD7s1Pbj.js.map → sr_only_close_button-3EdsV-dH.js.map} +1 -1
  59. package/dist/chunks/sr_only_close_button-xGrHFjwA.js +91 -0
  60. package/dist/chunks/{sr_only_close_button-7O-Ev8uM.js.map → sr_only_close_button-xGrHFjwA.js.map} +1 -1
  61. package/dist/chunks/stack_constants-HraCekPm.js +15 -0
  62. package/dist/chunks/{stack_constants-m9Ickqw0.js.map → stack_constants-HraCekPm.js.map} +1 -1
  63. package/dist/chunks/stack_constants-SMzMWnAQ.js +14 -0
  64. package/dist/chunks/{stack_constants-u7tNqGtc.js.map → stack_constants-SMzMWnAQ.js.map} +1 -1
  65. package/dist/chunks/tab-RTDgnD9-.js +391 -0
  66. package/dist/chunks/{tab-at7WWglk.js.map → tab-RTDgnD9-.js.map} +1 -1
  67. package/dist/chunks/tab-qc3f42Yp.js +390 -0
  68. package/dist/chunks/{tab-GQZFMq83.js.map → tab-qc3f42Yp.js.map} +1 -1
  69. package/dist/common/constants.cjs +60 -0
  70. package/dist/{lib → common}/constants.cjs.map +1 -1
  71. package/dist/{lib → common}/constants.js +25 -18
  72. package/dist/{lib → common}/constants.js.map +1 -1
  73. package/dist/common/dates.cjs +72 -0
  74. package/dist/{lib → common}/dates.cjs.map +1 -1
  75. package/dist/common/dates.js +72 -0
  76. package/dist/{lib → common}/dates.js.map +1 -1
  77. package/dist/common/emoji.cjs +163 -0
  78. package/dist/common/emoji.cjs.map +1 -0
  79. package/dist/common/emoji.js +168 -0
  80. package/dist/common/emoji.js.map +1 -0
  81. package/dist/common/mixins.cjs +17 -0
  82. package/dist/{lib → common}/mixins.cjs.map +1 -1
  83. package/dist/common/mixins.js +17 -0
  84. package/dist/common/utils.cjs +243 -0
  85. package/dist/{lib → common}/utils.cjs.map +1 -1
  86. package/dist/common/utils.js +243 -0
  87. package/dist/{lib → common}/utils.js.map +1 -1
  88. package/dist/common/validators.cjs +23 -0
  89. package/dist/{lib → common}/validators.cjs.map +1 -1
  90. package/dist/common/validators.js +23 -0
  91. package/dist/{lib → common}/validators.js.map +1 -1
  92. package/dist/dialtone-vue.cjs +373 -1
  93. package/dist/dialtone-vue.cjs.map +1 -1
  94. package/dist/dialtone-vue.js +328 -327
  95. package/dist/dialtone-vue.js.map +1 -1
  96. package/dist/lib/attachment-carousel.cjs +345 -1
  97. package/dist/lib/attachment-carousel.cjs.map +1 -1
  98. package/dist/lib/attachment-carousel.js +126 -108
  99. package/dist/lib/attachment-carousel.js.map +1 -1
  100. package/dist/lib/avatar.cjs +447 -1
  101. package/dist/lib/avatar.cjs.map +1 -1
  102. package/dist/lib/avatar.js +135 -101
  103. package/dist/lib/avatar.js.map +1 -1
  104. package/dist/lib/badge.cjs +206 -1
  105. package/dist/lib/badge.cjs.map +1 -1
  106. package/dist/lib/badge.js +64 -48
  107. package/dist/lib/badge.js.map +1 -1
  108. package/dist/lib/banner.cjs +242 -2
  109. package/dist/lib/banner.cjs.map +1 -1
  110. package/dist/lib/banner.js +81 -71
  111. package/dist/lib/banner.js.map +1 -1
  112. package/dist/lib/breadcrumbs.cjs +150 -1
  113. package/dist/lib/breadcrumbs.cjs.map +1 -1
  114. package/dist/lib/breadcrumbs.js +60 -52
  115. package/dist/lib/breadcrumbs.js.map +1 -1
  116. package/dist/lib/button-group.cjs +41 -1
  117. package/dist/lib/button-group.cjs.map +1 -1
  118. package/dist/lib/button-group.js +15 -14
  119. package/dist/lib/button-group.js.map +1 -1
  120. package/dist/lib/button.cjs +356 -1
  121. package/dist/lib/button.cjs.map +1 -1
  122. package/dist/lib/button.js +108 -88
  123. package/dist/lib/button.js.map +1 -1
  124. package/dist/lib/callbar-button-with-popover.cjs +322 -1
  125. package/dist/lib/callbar-button-with-popover.cjs.map +1 -1
  126. package/dist/lib/callbar-button-with-popover.js +101 -83
  127. package/dist/lib/callbar-button-with-popover.js.map +1 -1
  128. package/dist/lib/callbar-button.cjs +200 -1
  129. package/dist/lib/callbar-button.cjs.map +1 -1
  130. package/dist/lib/callbar-button.js +52 -45
  131. package/dist/lib/callbar-button.js.map +1 -1
  132. package/dist/lib/callbox.cjs +217 -1
  133. package/dist/lib/callbox.cjs.map +1 -1
  134. package/dist/lib/callbox.js +80 -67
  135. package/dist/lib/callbox.js.map +1 -1
  136. package/dist/lib/card.cjs +91 -1
  137. package/dist/lib/card.cjs.map +1 -1
  138. package/dist/lib/card.js +27 -27
  139. package/dist/lib/card.js.map +1 -1
  140. package/dist/lib/checkbox-group.cjs +115 -1
  141. package/dist/lib/checkbox-group.cjs.map +1 -1
  142. package/dist/lib/checkbox-group.js +34 -23
  143. package/dist/lib/checkbox-group.js.map +1 -1
  144. package/dist/lib/checkbox.cjs +156 -1
  145. package/dist/lib/checkbox.cjs.map +1 -1
  146. package/dist/lib/checkbox.js +72 -60
  147. package/dist/lib/checkbox.js.map +1 -1
  148. package/dist/lib/chip.cjs +235 -1
  149. package/dist/lib/chip.cjs.map +1 -1
  150. package/dist/lib/chip.js +84 -67
  151. package/dist/lib/chip.js.map +1 -1
  152. package/dist/lib/codeblock.cjs +23 -2
  153. package/dist/lib/codeblock.cjs.map +1 -1
  154. package/dist/lib/codeblock.js +13 -13
  155. package/dist/lib/codeblock.js.map +1 -1
  156. package/dist/lib/collapsible.cjs +398 -1
  157. package/dist/lib/collapsible.cjs.map +1 -1
  158. package/dist/lib/collapsible.js +123 -100
  159. package/dist/lib/collapsible.js.map +1 -1
  160. package/dist/lib/combobox-multi-select.cjs +589 -1
  161. package/dist/lib/combobox-multi-select.cjs.map +1 -1
  162. package/dist/lib/combobox-multi-select.js +270 -177
  163. package/dist/lib/combobox-multi-select.js.map +1 -1
  164. package/dist/lib/combobox-with-popover.cjs +452 -1
  165. package/dist/lib/combobox-with-popover.cjs.map +1 -1
  166. package/dist/lib/combobox-with-popover.js +172 -127
  167. package/dist/lib/combobox-with-popover.js.map +1 -1
  168. package/dist/lib/combobox.cjs +18 -1
  169. package/dist/lib/combobox.cjs.map +1 -1
  170. package/dist/lib/combobox.js +9 -9
  171. package/dist/lib/contact-info.cjs +205 -1
  172. package/dist/lib/contact-info.cjs.map +1 -1
  173. package/dist/lib/contact-info.js +69 -60
  174. package/dist/lib/contact-info.js.map +1 -1
  175. package/dist/lib/contact-row.cjs +246 -1
  176. package/dist/lib/contact-row.cjs.map +1 -1
  177. package/dist/lib/contact-row.js +67 -63
  178. package/dist/lib/contact-row.js.map +1 -1
  179. package/dist/lib/datepicker.cjs +854 -1
  180. package/dist/lib/datepicker.cjs.map +1 -1
  181. package/dist/lib/datepicker.js +585 -441
  182. package/dist/lib/datepicker.js.map +1 -1
  183. package/dist/lib/description-list.cjs +116 -1
  184. package/dist/lib/description-list.cjs.map +1 -1
  185. package/dist/lib/description-list.js +56 -24
  186. package/dist/lib/description-list.js.map +1 -1
  187. package/dist/lib/dropdown.cjs +36 -1
  188. package/dist/lib/dropdown.cjs.map +1 -1
  189. package/dist/lib/dropdown.js +22 -21
  190. package/dist/lib/dropdown.js.map +1 -1
  191. package/dist/lib/editor.cjs +711 -1
  192. package/dist/lib/editor.cjs.map +1 -1
  193. package/dist/lib/editor.js +271 -235
  194. package/dist/lib/editor.js.map +1 -1
  195. package/dist/lib/emoji-picker.cjs +1277 -1
  196. package/dist/lib/emoji-picker.cjs.map +1 -1
  197. package/dist/lib/emoji-picker.js +859 -569
  198. package/dist/lib/emoji-picker.js.map +1 -1
  199. package/dist/lib/emoji-row.cjs +128 -1
  200. package/dist/lib/emoji-row.cjs.map +1 -1
  201. package/dist/lib/emoji-row.js +89 -75
  202. package/dist/lib/emoji-row.js.map +1 -1
  203. package/dist/lib/emoji-text-wrapper.cjs +102 -1
  204. package/dist/lib/emoji-text-wrapper.cjs.map +1 -1
  205. package/dist/lib/emoji-text-wrapper.js +42 -31
  206. package/dist/lib/emoji-text-wrapper.js.map +1 -1
  207. package/dist/lib/emoji.cjs +158 -1
  208. package/dist/lib/emoji.cjs.map +1 -1
  209. package/dist/lib/emoji.js +153 -6
  210. package/dist/lib/emoji.js.map +1 -1
  211. package/dist/lib/feed-item-row.cjs +296 -1
  212. package/dist/lib/feed-item-row.cjs.map +1 -1
  213. package/dist/lib/feed-item-row.js +119 -100
  214. package/dist/lib/feed-item-row.js.map +1 -1
  215. package/dist/lib/feed-pill.cjs +173 -1
  216. package/dist/lib/feed-pill.cjs.map +1 -1
  217. package/dist/lib/feed-pill.js +70 -57
  218. package/dist/lib/feed-pill.js.map +1 -1
  219. package/dist/lib/general-row.cjs +518 -1
  220. package/dist/lib/general-row.cjs.map +1 -1
  221. package/dist/lib/general-row.js +186 -148
  222. package/dist/lib/general-row.js.map +1 -1
  223. package/dist/lib/group-row.cjs +116 -1
  224. package/dist/lib/group-row.cjs.map +1 -1
  225. package/dist/lib/group-row.js +37 -35
  226. package/dist/lib/group-row.js.map +1 -1
  227. package/dist/lib/grouped-chip.cjs +96 -1
  228. package/dist/lib/grouped-chip.cjs.map +1 -1
  229. package/dist/lib/grouped-chip.js +51 -46
  230. package/dist/lib/grouped-chip.js.map +1 -1
  231. package/dist/lib/hovercard.cjs +223 -1
  232. package/dist/lib/hovercard.cjs.map +1 -1
  233. package/dist/lib/hovercard.js +115 -80
  234. package/dist/lib/hovercard.js.map +1 -1
  235. package/dist/lib/icon.cjs +58 -1
  236. package/dist/lib/icon.cjs.map +1 -1
  237. package/dist/lib/icon.js +20 -20
  238. package/dist/lib/icon.js.map +1 -1
  239. package/dist/lib/image-viewer.cjs +243 -1
  240. package/dist/lib/image-viewer.cjs.map +1 -1
  241. package/dist/lib/image-viewer.js +104 -80
  242. package/dist/lib/image-viewer.js.map +1 -1
  243. package/dist/lib/input-group.cjs +91 -1
  244. package/dist/lib/input-group.cjs.map +1 -1
  245. package/dist/lib/input-group.js +41 -39
  246. package/dist/lib/input-group.js.map +1 -1
  247. package/dist/lib/input.cjs +578 -1
  248. package/dist/lib/input.cjs.map +1 -1
  249. package/dist/lib/input.js +185 -137
  250. package/dist/lib/input.js.map +1 -1
  251. package/dist/lib/item-layout.cjs +91 -1
  252. package/dist/lib/item-layout.cjs.map +1 -1
  253. package/dist/lib/item-layout.js +45 -39
  254. package/dist/lib/item-layout.js.map +1 -1
  255. package/dist/lib/ivr-node.cjs +263 -1
  256. package/dist/lib/ivr-node.cjs.map +1 -1
  257. package/dist/lib/ivr-node.js +130 -112
  258. package/dist/lib/ivr-node.js.map +1 -1
  259. package/dist/lib/keyboard-shortcut.cjs +119 -1
  260. package/dist/lib/keyboard-shortcut.cjs.map +1 -1
  261. package/dist/lib/keyboard-shortcut.js +58 -48
  262. package/dist/lib/keyboard-shortcut.js.map +1 -1
  263. package/dist/lib/lazy-show.cjs +82 -1
  264. package/dist/lib/lazy-show.cjs.map +1 -1
  265. package/dist/lib/lazy-show.js +21 -19
  266. package/dist/lib/lazy-show.js.map +1 -1
  267. package/dist/lib/link.cjs +43 -1
  268. package/dist/lib/link.cjs.map +1 -1
  269. package/dist/lib/link.js +20 -19
  270. package/dist/lib/link.js.map +1 -1
  271. package/dist/lib/list-item-group.cjs +67 -1
  272. package/dist/lib/list-item-group.cjs.map +1 -1
  273. package/dist/lib/list-item-group.js +24 -22
  274. package/dist/lib/list-item-group.js.map +1 -1
  275. package/dist/lib/list-item.cjs +216 -1
  276. package/dist/lib/list-item.cjs.map +1 -1
  277. package/dist/lib/list-item.js +71 -60
  278. package/dist/lib/list-item.js.map +1 -1
  279. package/dist/lib/message-input.cjs +708 -1
  280. package/dist/lib/message-input.cjs.map +1 -1
  281. package/dist/lib/message-input.js +232 -206
  282. package/dist/lib/message-input.js.map +1 -1
  283. package/dist/lib/modal.cjs +444 -2
  284. package/dist/lib/modal.cjs.map +1 -1
  285. package/dist/lib/modal.js +153 -120
  286. package/dist/lib/modal.js.map +1 -1
  287. package/dist/lib/notice.cjs +197 -1
  288. package/dist/lib/notice.cjs.map +1 -1
  289. package/dist/lib/notice.js +66 -63
  290. package/dist/lib/notice.js.map +1 -1
  291. package/dist/lib/pagination.cjs +205 -1
  292. package/dist/lib/pagination.cjs.map +1 -1
  293. package/dist/lib/pagination.js +96 -81
  294. package/dist/lib/pagination.js.map +1 -1
  295. package/dist/lib/popover.cjs +1080 -1
  296. package/dist/lib/popover.cjs.map +1 -1
  297. package/dist/lib/popover.js +447 -267
  298. package/dist/lib/popover.js.map +1 -1
  299. package/dist/lib/presence.cjs +70 -1
  300. package/dist/lib/presence.cjs.map +1 -1
  301. package/dist/lib/presence.js +33 -27
  302. package/dist/lib/presence.js.map +1 -1
  303. package/dist/lib/radio-group.cjs +88 -1
  304. package/dist/lib/radio-group.cjs.map +1 -1
  305. package/dist/lib/radio-group.js +18 -18
  306. package/dist/lib/radio-group.js.map +1 -1
  307. package/dist/lib/radio.cjs +162 -1
  308. package/dist/lib/radio.cjs.map +1 -1
  309. package/dist/lib/radio.js +66 -57
  310. package/dist/lib/radio.js.map +1 -1
  311. package/dist/lib/rich-text-editor.cjs +1137 -1
  312. package/dist/lib/rich-text-editor.cjs.map +1 -1
  313. package/dist/lib/rich-text-editor.js +567 -386
  314. package/dist/lib/rich-text-editor.js.map +1 -1
  315. package/dist/lib/root-layout.cjs +158 -1
  316. package/dist/lib/root-layout.cjs.map +1 -1
  317. package/dist/lib/root-layout.js +33 -31
  318. package/dist/lib/root-layout.js.map +1 -1
  319. package/dist/lib/scroller.cjs +1090 -1
  320. package/dist/lib/scroller.cjs.map +1 -1
  321. package/dist/lib/scroller.js +668 -345
  322. package/dist/lib/scroller.js.map +1 -1
  323. package/dist/lib/select-menu.cjs +312 -1
  324. package/dist/lib/select-menu.cjs.map +1 -1
  325. package/dist/lib/select-menu.js +124 -79
  326. package/dist/lib/select-menu.js.map +1 -1
  327. package/dist/lib/settings-menu-button.cjs +77 -1
  328. package/dist/lib/settings-menu-button.cjs.map +1 -1
  329. package/dist/lib/settings-menu-button.js +31 -30
  330. package/dist/lib/settings-menu-button.js.map +1 -1
  331. package/dist/lib/skeleton.cjs +635 -1
  332. package/dist/lib/skeleton.cjs.map +1 -1
  333. package/dist/lib/skeleton.js +189 -152
  334. package/dist/lib/skeleton.js.map +1 -1
  335. package/dist/lib/stack.cjs +123 -1
  336. package/dist/lib/stack.cjs.map +1 -1
  337. package/dist/lib/stack.js +61 -53
  338. package/dist/lib/stack.js.map +1 -1
  339. package/dist/lib/tabs.cjs +102 -1
  340. package/dist/lib/tabs.cjs.map +1 -1
  341. package/dist/lib/tabs.js +47 -41
  342. package/dist/lib/tabs.js.map +1 -1
  343. package/dist/lib/time-pill.cjs +41 -1
  344. package/dist/lib/time-pill.cjs.map +1 -1
  345. package/dist/lib/time-pill.js +18 -14
  346. package/dist/lib/time-pill.js.map +1 -1
  347. package/dist/lib/toast.cjs +281 -1
  348. package/dist/lib/toast.cjs.map +1 -1
  349. package/dist/lib/toast.js +96 -74
  350. package/dist/lib/toast.js.map +1 -1
  351. package/dist/lib/toggle.cjs +192 -1
  352. package/dist/lib/toggle.cjs.map +1 -1
  353. package/dist/lib/toggle.js +60 -49
  354. package/dist/lib/toggle.js.map +1 -1
  355. package/dist/lib/tooltip-directive.cjs +84 -1
  356. package/dist/lib/tooltip-directive.cjs.map +1 -1
  357. package/dist/lib/tooltip-directive.js +56 -42
  358. package/dist/lib/tooltip-directive.js.map +1 -1
  359. package/dist/lib/tooltip.cjs +460 -1
  360. package/dist/lib/tooltip.cjs.map +1 -1
  361. package/dist/lib/tooltip.js +162 -103
  362. package/dist/lib/tooltip.js.map +1 -1
  363. package/dist/lib/top-banner-info.cjs +71 -1
  364. package/dist/lib/top-banner-info.cjs.map +1 -1
  365. package/dist/lib/top-banner-info.js +27 -22
  366. package/dist/lib/top-banner-info.js.map +1 -1
  367. package/dist/lib/unread-pill.cjs +73 -1
  368. package/dist/lib/unread-pill.cjs.map +1 -1
  369. package/dist/lib/unread-pill.js +28 -25
  370. package/dist/lib/unread-pill.js.map +1 -1
  371. package/dist/lib/validation-messages.cjs +89 -1
  372. package/dist/lib/validation-messages.cjs.map +1 -1
  373. package/dist/lib/validation-messages.js +41 -36
  374. package/dist/lib/validation-messages.js.map +1 -1
  375. package/dist/style.css +1257 -1
  376. package/dist/types/components/rich_text_editor/extensions/emoji/EmojiComponent.vue.d.ts +2 -2
  377. package/dist/types/components/rich_text_editor/extensions/mentions/MentionComponent.vue.d.ts +2 -2
  378. package/package.json +30 -29
  379. package/dist/chunks/_plugin-vue_export-helper-6_y-gaV6.js +0 -2
  380. package/dist/chunks/_plugin-vue_export-helper-6_y-gaV6.js.map +0 -1
  381. package/dist/chunks/_plugin-vue_export-helper-hUChTQA_.js +0 -10
  382. package/dist/chunks/_plugin-vue_export-helper-hUChTQA_.js.map +0 -1
  383. package/dist/chunks/dropdown-UO3UJalk.js +0 -2
  384. package/dist/chunks/dropdown_constants-EUcDxBrX.js +0 -9
  385. package/dist/chunks/dropdown_constants-EUcDxBrX.js.map +0 -1
  386. package/dist/chunks/dropdown_constants-KHFvVI2L.js +0 -2
  387. package/dist/chunks/dropdown_constants-KHFvVI2L.js.map +0 -1
  388. package/dist/chunks/icon_constants-2S_OSQ1t.js +0 -2
  389. package/dist/chunks/index-6tYeqbgP.js +0 -3
  390. package/dist/chunks/index-IBtQ5jRJ.js +0 -2
  391. package/dist/chunks/index-IBtQ5jRJ.js.map +0 -1
  392. package/dist/chunks/index-b4iXYvId.js +0 -399
  393. package/dist/chunks/index-mRmwpCBG.js +0 -256
  394. package/dist/chunks/index-mRmwpCBG.js.map +0 -1
  395. package/dist/chunks/input-0Uksk4DP.js +0 -2
  396. package/dist/chunks/input_group-AS760Cp7.js +0 -2
  397. package/dist/chunks/keyboard_list_navigation-F0O8nht0.js +0 -197
  398. package/dist/chunks/keyboard_list_navigation-N74Bpdq7.js +0 -2
  399. package/dist/chunks/link_constants-Kn6kP4i1.js +0 -2
  400. package/dist/chunks/link_constants-vIUB92L4.js +0 -16
  401. package/dist/chunks/list_item_constants-LTUc74pD.js +0 -13
  402. package/dist/chunks/list_item_constants-Tsz5CO1m.js +0 -2
  403. package/dist/chunks/modal-VuMFkZFH.js +0 -82
  404. package/dist/chunks/modal-qEzlo0Sj.js +0 -2
  405. package/dist/chunks/notice_action-jO199emq.js +0 -2
  406. package/dist/chunks/notice_action-tJfD5Qw1.js +0 -209
  407. package/dist/chunks/notice_constants-c--hBFQw.js +0 -6
  408. package/dist/chunks/notice_constants-mC6al2Dm.js +0 -2
  409. package/dist/chunks/popover_constants-hOEhklvr.js +0 -2
  410. package/dist/chunks/popover_constants-qjlEkroB.js +0 -114
  411. package/dist/chunks/sr_only_close_button-iD7s1Pbj.js +0 -3
  412. package/dist/chunks/stack_constants-m9Ickqw0.js +0 -2
  413. package/dist/chunks/stack_constants-u7tNqGtc.js +0 -13
  414. package/dist/chunks/tab-GQZFMq83.js +0 -367
  415. package/dist/chunks/tab-at7WWglk.js +0 -2
  416. package/dist/lib/constants.cjs +0 -2
  417. package/dist/lib/dates.cjs +0 -2
  418. package/dist/lib/dates.js +0 -57
  419. package/dist/lib/mixins.cjs +0 -2
  420. package/dist/lib/mixins.js +0 -17
  421. package/dist/lib/utils.cjs +0 -2
  422. package/dist/lib/utils.js +0 -171
  423. package/dist/lib/validators.cjs +0 -2
  424. package/dist/lib/validators.js +0 -12
  425. /package/dist/{lib → common}/mixins.js.map +0 -0
@@ -1,2 +1,1278 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("vue"),te=require("./input.cjs"),P=require("./icon.cjs"),W=require("../chunks/tab-at7WWglk.js"),T=require("@dialpad/dialtone-emojis"),oe=require("./tooltip.cjs");require("./constants.cjs");require("./utils.cjs");require("../chunks/input-0Uksk4DP.js");require("./validators.cjs");require("../chunks/_plugin-vue_export-helper-6_y-gaV6.js");require("./validation-messages.cjs");require("@dialpad/dialtone-icons/vue3");require("../chunks/icon_constants-2S_OSQ1t.js");require("@dialpad/dialtone-icons/icons.json");require("./button.cjs");require("../chunks/link_constants-Kn6kP4i1.js");require("../chunks/popover_constants-hOEhklvr.js");require("tippy.js");require("./lazy-show.cjs");const le={class:"d-emoji-picker__search d-emoji-picker__alignment"},ne=["onKeydown"],se={__name:"emoji_search",props:{searchPlaceholderLabel:{type:String,required:!0},modelValue:{type:String,default:""}},emits:["update:modelValue","focus-emoji-selector","focus-tabset","select-first-emoji"],setup(l,{expose:g,emit:R}){const i=R,u=e.ref(null);function E(){i("update:modelValue",""),h()}function h(){u.value.focus()}return e.onMounted(()=>{h()}),g({focusSearchInput:h}),(y,f)=>(e.openBlock(),e.createElementBlock("div",le,[e.createVNode(e.unref(te.DtInput),{id:"searchInput",ref_key:"searchInput",ref:u,placeholder:l.searchPlaceholderLabel,"model-value":l.modelValue,"onUpdate:modelValue":f[0]||(f[0]=s=>y.$emit("update:modelValue",s)),onKeydown:[f[1]||(f[1]=e.withKeys(s=>y.$emit("focus-tabset"),["up"])),f[2]||(f[2]=e.withKeys(e.withModifiers(s=>y.$emit("focus-emoji-selector"),["prevent"]),["down"])),f[3]||(f[3]=e.withKeys(s=>y.$emit("select-first-emoji"),["enter"]))]},e.createSlots({leftIcon:e.withCtx(()=>[e.createVNode(e.unref(P.DtIcon),{name:"search",size:"200"})]),_:2},[l.modelValue.length>0?{name:"rightIcon",fn:e.withCtx(()=>[e.createElementVNode("button",{class:"d-emoji-picker__search-button",onClick:E,onKeydown:e.withKeys(E,["enter"])},[e.createVNode(e.unref(P.DtIcon),{name:"close"})],40,ne)]),key:"0"}:void 0]),1032,["placeholder","model-value"])]))}},re={class:"d-emoji-picker__tabset"},ie={__name:"emoji_tabset",props:{showRecentlyUsedTab:{type:Boolean,default:!1},scrollIntoTab:{type:Number,required:!0},isScrolling:{type:Boolean,default:!1},emojiFilter:{type:String,default:""},tabsetLabels:{type:Array,required:!0}},emits:["selected-tabset","focus-search-input","focus-skin-selector"],setup(l,{expose:g,emit:R}){const i=l,u=R,E=[{label:A.MOST_RECENTLY_USED,icon:"clock"},{label:A.SMILEYS_AND_PEOPLE,icon:"satisfied"},{label:A.NATURE,icon:"living-thing"},{label:A.FOOD,icon:"food"},{label:A.ACTIVITY,icon:"object"},{label:A.TRAVEL,icon:"transportation"},{label:A.OBJECTS,icon:"lightbulb"},{label:A.SYMBOLS,icon:"heart"},{label:A.FLAGS,icon:"flag"}],h=e.computed(()=>(i.showRecentlyUsedTab?E:E.slice(1)).map((o,a)=>({...o,label:i.tabsetLabels[a],id:(a+1).toString(),panelId:(a+1).toString()}))),y=e.computed(()=>i.emojiFilter.length>0),f=e.ref("1"),{isScrolling:s}=e.toRefs(i),k=e.ref([]);e.watch(()=>i.scrollIntoTab,()=>{!s.value&&!y.value&&(f.value=(i.scrollIntoTab+1).toString())}),e.watch(y,()=>{y.value&&(f.value=null)});function L(t){s.value||(f.value=t),u("selected-tabset",t)}function I(t){k.value.push(t.$el)}function w(){k.value[0].focus()}function n(t,o){t.key==="Enter"&&(L(o),k.value[o-1].blur()),t.key==="Tab"&&(t.preventDefault(),t.shiftKey?u("focus-skin-selector"):u("focus-search-input")),t.key==="ArrowDown"&&u("focus-search-input")}return g({focusTabset:w}),(t,o)=>(e.openBlock(),e.createElementBlock("div",re,[e.createVNode(e.unref(W.D),{"tab-list-class":"d-emoji-picker__tabset-list",selected:f.value},{tabs:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(h.value,(a,d)=>(e.openBlock(),e.createBlock(e.unref(W.a),{id:a.id,ref_for:!0,ref:b=>{b&&I(b)},key:a.id,"panel-id":a.panelId,label:a.label,"aria-controls":"d-emoji-picker-list",tabindex:d+1,onClickCapture:e.withModifiers(b=>L(a.id),["stop"]),onKeydown:b=>n(b,a.id)},{default:e.withCtx(()=>[e.createVNode(e.unref(P.DtIcon),{size:"400",name:a.icon},null,8,["name"])]),_:2},1032,["id","panel-id","label","tabindex","onClickCapture","onKeydown"]))),128))]),_:1},8,["selected"])]))}},C={ARROW_UP:"ArrowUp",ARROW_DOWN:"ArrowDown",ARROW_LEFT:"ArrowLeft",ARROW_RIGHT:"ArrowRight"},V="https://static.dialpadcdn.com/joypixels/png/unicode/32/",_=9,B={DEFAULT:"Default",LIGHT:"Light",MEDIUM_LIGHT:"MediumLight",MEDIUM:"Medium",MEDIUM_DARK:"MediumDark",DARK:"Dark"},A={MOST_RECENTLY_USED:"Most recently used",SMILEYS_AND_PEOPLE:"Smileys and people",NATURE:"Nature",FOOD:"Food",ACTIVITY:"Activity",TRAVEL:"Travel",OBJECTS:"Objects",SYMBOLS:"Symbols",FLAGS:"Flags"};function ae(){const l=e.ref([]),g=e.ref([]),R=e.ref(!1),i=e.ref(!0);function u(n,t){s(n,t-1)||(l.value[n-1]?s(n-1,l.value[n-1].length-1):s(l.value.length-1,l.value[l.value.length-1].length-1))}function E(n,t){s(n,t+1)||s(n+1,0)||s(0,0)}function h(n,t){s(0,t-1)||s(0,g.value.length-1)}function y(n,t){s(0,t+1)||s(0,0)}function f(n,t,o){R.value?n==="left"?h(t,o):n==="right"&&y(t,o):n==="left"?u(t,o):n==="right"&&E(t,o)}function s(n,t){var a,d,b;const o=R.value?(a=g.value)==null?void 0:a[t]:(b=(d=l.value)==null?void 0:d[n])==null?void 0:b[t];return o?(o.focus(),!0):!1}function k(n,t,o){l.value[t]||(l.value[t]=[]),l.value[t][o]=n}function L(n,t){g.value[t]=n}function I(n,t){var o;if(i.value=!1,n===C.ARROW_UP){const a=t%_;if(!s(0,t-_)){const d=g.value.length-g.value.length%_+a;s(0,d),s(0,d)||s(0,g.value.length-1)}}if(n===C.ARROW_DOWN&&!s(0,t+_)){const a=t%_;(o=g.value)!=null&&o[t+(_-a)]?s(0,g.value.length-1):s(0,a)}n===C.ARROW_LEFT&&f("left",0,t),n===C.ARROW_RIGHT&&f("right",0,t)}function w(n,t,o){var a,d;if(n==="ArrowUp"){const b=o%_;if(t===0){const S=_-l.value[l.value.length-1].length%_,$=l.value[l.value.length-1].length+S-(_-b);s(l.value.length-1,$)||s(l.value.length-1,l.value[l.value.length-1].length-1);return}if(!s(t,o-_)){const S=t-1<0?0:t-1,$=l.value[S].length,q=$-$%_+b;s(S,q)||s(t-1,l.value[t-1].length-1)}}if(n==="ArrowDown"&&!s(t,o+_)){const b=o%_;(d=(a=l.value)==null?void 0:a[t])!=null&&d[o+(_-b)]?s(t,l.value[t].length-1):s(t+1,b)||s(0,b)||s(0,l.value[0].length-1)}n==="ArrowLeft"&&f("left",t,o),n==="ArrowRight"&&f("right",t,o)}return{emojiFilteredRefs:g,isFiltering:R,hoverFirstEmoji:i,setEmojiRef:k,setFilteredRef:L,focusEmoji:s,handleArrowNavigationFiltered:I,handleArrowNavigation:w}}const ce={class:"d-emoji-picker__selector"},ue={key:0,class:"d-emoji-picker__search-label d-emoji-picker__alignment"},fe={key:0},de={class:"d-emoji-picker__tab"},me=["aria-label","onClick","onFocusin","onMouseover","onKeydown"],ve=["alt","aria-label","title","src"],pe={key:2,class:"d-emoji-picker__alignment"},be={class:"d-emoji-picker__tab","data-qa":"filtered-emojis"},he=["aria-label","onClick","onFocusin","onMouseover","onKeydown"],ke=["alt","aria-label","title","src"],ge={__name:"emoji_selector",props:{emojiFilter:{type:String,default:""},skinTone:{type:String,required:!0},tabsetLabels:{type:Array,required:!0},selectedTabset:{type:Object,required:!0},searchResultsLabel:{type:String,required:!0},searchNoResultsLabel:{type:String,required:!0},recentlyUsedEmojis:{type:Array,default:()=>[]}},emits:["highlighted-emoji","selected-emoji","scroll-into-tab","is-scrolling","focus-skin-selector","focus-search-input"],setup(l,{expose:g,emit:R}){const i=l,u=R,{emojiFilteredRefs:E,isFiltering:h,hoverFirstEmoji:y,setEmojiRef:f,setFilteredRef:s,focusEmoji:k,handleArrowNavigationFiltered:L,handleArrowNavigation:I}=ae(),w=e.ref(null),n=e.ref(null),t=e.ref(null),o=["Recently used","People","Nature","Food","Activity","Travel","Objects","Symbols","Flags"],a=e.computed(()=>i.recentlyUsedEmojis.length?i.tabsetLabels.map(r=>({label:r,ref:e.ref(null)})):i.tabsetLabels.slice(1).map(r=>({label:r,ref:e.ref(null)}))),d=e.ref(a.value[0].label),b=e.computed(()=>i.recentlyUsedEmojis.length?o:o.slice(1)),S=e.ref([]),$=e.computed(()=>[...T.emojisGrouped[`People${i.skinTone}`],...T.emojisGrouped.Nature,...T.emojisGrouped.Food,...T.emojisGrouped[`Activity${i.skinTone}`],...T.emojisGrouped.Travel,...T.emojisGrouped[`Objects${i.skinTone}`],...T.emojisGrouped.Symbols,...T.emojisGrouped.Flags]),q=H(()=>{E.value=[],G()});e.watch($,()=>{G()},{immediate:!0}),e.watch(()=>i.recentlyUsedEmojis,()=>{T.emojisGrouped["Recently used"]=i.recentlyUsedEmojis},{immediate:!0}),e.watch(()=>i.emojiFilter,()=>{J(),i.emojiFilter?h.value=!0:(h.value=!1,F(null)),q()}),e.watch(()=>i.selectedTabset,r=>{K(r.tabId)},{deep:!0});function U(r,c=!1){y.value=c,u("highlighted-emoji",r)}function G(){const r=i.emojiFilter.toLowerCase();S.value=$.value.filter(c=>{const v=c.name.toLowerCase().includes(r),p=c.keywords.some(m=>m.toLowerCase().includes(r));return v||p}),e.nextTick(()=>{r&&U(S.value[0],!0)})}function H(r,c=300){let v;return(...p)=>{clearTimeout(v),v=setTimeout(()=>r(...p),c)}}function z(r){return`${V+r}.png`}function Y(r){r.target.parentNode.style.display="none"}function K(r,c=!0){const p=a.value[r-1].ref.value[0];e.nextTick(()=>{const m=n.value,N=r==="1"?0:p.offsetTop-20;let j=!0,O=m.scrollTop;u("is-scrolling",!0),m.addEventListener("scroll",()=>{if(j){const D=m.scrollTop;(O<D&&D>=N||O>D&&D<=N)&&(j=!1,u("is-scrolling",!1)),O=D}}),m.scrollTop=N,c&&k(r-1,0)})}function J(){const r=n.value;r.scrollTop=0}function Q(){t.value=new IntersectionObserver(r=>{r.forEach(c=>{var m,N,j,O,D;const{target:v}=c,p=parseInt(v.dataset.index);c.isIntersecting&&v.offsetTop<=w.value.offsetTop+50?(d.value=((m=a.value[p-1])==null?void 0:m.label)??((N=a.value[0])==null?void 0:N.label),u("scroll-into-tab",p-1)):c.boundingClientRect.bottom<=((j=w.value)==null?void 0:j.getBoundingClientRect().bottom)?(u("scroll-into-tab",p),d.value=(O=a.value[p])==null?void 0:O.label):p===1&&(u("scroll-into-tab",p),d.value=(D=a.value[0])==null?void 0:D.label)})}),t.value.observe(w.value),Array.from(n.value.children).forEach((r,c)=>{t.value.observe(r),r.dataset.index=c})}const X=(r,c,v)=>{if(r.preventDefault(),Object.values(C).includes(r.key)){L(r.key,c);return}switch(r.key){case"Tab":u("focus-skin-selector");break;case"Enter":M(v);break}},Z=(r,c,v,p)=>{if(r.preventDefault(),Object.values(C).includes(r.key)){I(r.key,c,v);return}switch(r.key){case"Tab":r.shiftKey?k(c,0)&&c>0?K(c,!0):(K(1,!1),u("focus-search-input")):k(c+1,0)?K(c+1+1,!1):u("focus-skin-selector");break;case"Enter":M(p);break}};function M(r){u("selected-emoji",r)}function F(r){u("highlighted-emoji",r)}function x(){k(0,0)}function ee(){k(b.value.length-1,0)}return e.onMounted(()=>{Q()}),e.onUnmounted(()=>{t.value.disconnect()}),g({focusEmojiSelector:x,focusLastEmoji:ee}),(r,c)=>(e.openBlock(),e.createElementBlock("div",ce,[e.createElementVNode("div",{id:"d-emoji-picker-list",ref_key:"listRef",ref:n,class:"d-emoji-picker__list"},[l.emojiFilter?(e.openBlock(),e.createElementBlock("p",ue,e.toDisplayString(S.value.length>0?l.searchResultsLabel:l.searchNoResultsLabel),1)):(e.openBlock(),e.createElementBlock("div",{key:1,ref_key:"tabCategoryRef",ref:w,class:"d-emoji-picker__category d-emoji-picker__alignment"},[e.createElementVNode("p",null,e.toDisplayString(d.value),1)],512)),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(a.value,(v,p)=>e.withDirectives((e.openBlock(),e.createElementBlock("div",{key:p,ref_for:!0,ref:v.ref,class:"d-emoji-picker__alignment"},[p?(e.openBlock(),e.createElementBlock("p",fe,e.toDisplayString(v.label),1)):e.createCommentVNode("",!0),e.createElementVNode("div",de,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(e.unref(T.emojisGrouped)[b.value[p]+l.skinTone]?e.unref(T.emojisGrouped)[b.value[p]+l.skinTone]:e.unref(T.emojisGrouped)[b.value[p]],(m,N)=>(e.openBlock(),e.createElementBlock("button",{key:m.shortname,ref_for:!0,ref:j=>{j&&e.unref(f)(j,p,N)},type:"button","aria-label":m.name,onClick:j=>M(m),onFocusin:j=>F(m),onFocusout:c[0]||(c[0]=j=>F(null)),onMouseover:j=>F(m),onMouseleave:c[1]||(c[1]=j=>F(null)),onKeydown:j=>Z(j,p,N,m)},[e.createElementVNode("img",{class:"d-icon d-icon--size-500",alt:m.name,"aria-label":m.name,title:m.name,src:z(m.unicode_character),onError:Y},null,40,ve)],40,me))),128))])])),[[e.vShow,!l.emojiFilter]])),128)),l.emojiFilter?(e.openBlock(),e.createElementBlock("div",pe,[e.createElementVNode("div",be,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(S.value,(v,p)=>(e.openBlock(),e.createElementBlock("button",{key:v.shortname,ref_for:!0,ref:m=>{m&&e.unref(s)(m,p)},type:"button","aria-label":v.name,class:e.normalizeClass({"hover-emoji":p===0&&e.unref(y)}),onClick:m=>M(v),onFocusin:m=>F(v),onFocusout:c[2]||(c[2]=m=>F(null)),onMouseover:m=>U(v),onMouseleave:c[3]||(c[3]=m=>U(null)),onKeydown:m=>X(m,p,v)},[e.createElementVNode("img",{class:"d-icon d-icon--size-500",alt:v.name,"aria-label":v.name,title:v.name,src:`${e.unref(V)+v.unicode_character}.png`},null,8,ke)],42,he))),128))])])):e.createCommentVNode("",!0)],512)]))}},ye={"data-qa":"skin-selector"},Se={class:"d-emoji-picker__skin-list"},Ee=["onKeydown","onClick"],_e=["alt","aria-label","title","src"],je={class:"d-emoji-picker__skin-selected"},Re=["aria-label"],we=["alt","aria-label","title","src"],Te={__name:"emoji_skin_selector",props:{skinTone:{type:String,required:!0},isHovering:{type:Boolean,default:!1},skinSelectorButtonTooltipLabel:{type:String,required:!0}},emits:["skin-tone","focus-tabset","focus-last-emoji"],setup(l,{expose:g,emit:R}){const i=l,u=R,E=[{name:":wave_tone1:",unicode_output:"1f44b-1f3fb",skinTone:B.LIGHT,skinCode:"_tone1"},{name:":wave_tone2:",unicode_output:"1f44b-1f3fc",skinTone:B.MEDIUM_LIGHT,skinCode:"_tone2"},{name:":wave_tone3:",unicode_output:"1f44b-1f3fd",skinTone:B.MEDIUM,skinCode:"_tone3"},{name:":wave_tone4:",unicode_output:"1f44b-1f3fe",skinTone:B.MEDIUM_DARK,skinCode:"_tone4"},{name:":wave_tone5:",unicode_output:"1f44b-1f3ff",skinTone:B.DARK,skinCode:"_tone5"},{name:":wave:",unicode_output:"1f44b",skinTone:B.DEFAULT,skinCode:""}],h=e.ref(!1),y=e.ref(null),f=e.ref([]);e.watchEffect(()=>i.isHovering&&(h.value=!1));const s=e.computed(()=>E.find(o=>o.skinTone===i.skinTone)),k=e.ref(s.value);e.watchEffect(()=>s.value&&(k.value=s.value));function L(o){f.value.push(o)}function I(){y.value.focus()}function w(o){k.value=o,h.value=!1,u("skin-tone",o.skinTone),e.nextTick(()=>I())}const n=(o,a,d)=>{var b,S,$;o.preventDefault(),o.key==="ArrowLeft"&&(d===0&&((b=f.value[f.value.length-1])==null||b.focus()),(S=f.value[d-1])==null||S.focus()),o.key==="ArrowRight"&&(($=f.value[d+1])==null||$.focus()),o.key==="Enter"&&(a?w(a):t()),o.key==="Tab"&&(o.shiftKey?u("focus-last-emoji"):u("focus-tabset"))};function t(){h.value=!h.value,e.nextTick(()=>f.value[0].focus())}return g({focusSkinSelector:I}),(o,a)=>(e.openBlock(),e.createElementBlock("div",ye,[e.withDirectives(e.createElementVNode("div",Se,[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(E,(d,b)=>e.createElementVNode("button",{ref_for:!0,ref:S=>{S&&L(S)},key:d.name,class:e.normalizeClass({selected:k.value.skinCode===d.skinCode}),onKeydown:S=>n(S,d,b),onClick:S=>w(d)},[e.createElementVNode("img",{class:"d-icon d-icon--size-500",alt:d.name,"aria-label":d.name,title:d.name,src:`${e.unref(V)+d.unicode_output}.png`},null,8,_e)],42,Ee)),64))],512),[[e.vShow,h.value]]),e.withDirectives(e.createElementVNode("div",je,[e.createVNode(e.unref(oe.DtTooltip),{placement:"top-end"},{anchor:e.withCtx(()=>[e.createElementVNode("button",{ref_key:"skinSelectorRef",ref:y,"aria-label":l.skinSelectorButtonTooltipLabel,tabindex:"-1",onClick:t,onKeydown:a[0]||(a[0]=d=>n(d))},[e.createElementVNode("img",{class:"d-icon d-icon--size-500",alt:k.value.name,"aria-label":k.value.name,title:k.value.name,src:`${e.unref(V)+k.value.unicode_output}.png`},null,8,we)],40,Re)]),default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(l.skinSelectorButtonTooltipLabel)+" ",1)]),_:1})],512),[[e.vShow,!h.value]])]))}},Le={class:"d-emoji-picker__data"},Ie=["alt","aria-label","title","src"],$e={__name:"emoji_description",props:{emoji:{type:Object,default:null}},setup(l){return(g,R)=>{var i;return e.openBlock(),e.createElementBlock("div",Le,[l.emoji?(e.openBlock(),e.createElementBlock("img",{key:0,class:"d-icon d-icon--size-500",alt:l.emoji.name,"aria-label":l.emoji.name,title:l.emoji.name,src:`${e.unref(V)+l.emoji.unicode_character}.png`},null,8,Ie)):e.createCommentVNode("",!0),e.createTextVNode(" "+e.toDisplayString((i=l.emoji)==null?void 0:i.name),1)])}}},Ae={class:"d-emoji-picker"},Ne={class:"d-emoji-picker--header"},De={class:"d-emoji-picker--body"},Fe={class:"d-emoji-picker--footer"},Be={__name:"emoji_picker",props:{recentlyUsedEmojis:{type:Array,default:()=>[]},searchPlaceholderLabel:{type:String,required:!0},searchResultsLabel:{type:String,required:!0},searchNoResultsLabel:{type:String,required:!0},tabSetLabels:{type:Array,required:!0},skinTone:{type:String,default:"Default"},skinSelectorButtonTooltipLabel:{type:String,required:!0}},emits:["selected-emoji","skin-tone","close"],setup(l,{emit:g}){const R=l,i=g,u=e.ref(""),E=e.ref(null),h=e.ref({}),y=e.ref(0),f=e.ref(!1),s=e.computed(()=>R.recentlyUsedEmojis.length>0);function k(n){u.value="",h.value=n,h.value={...h.value,tabId:n}}function L(n){y.value=n}function I(n){f.value=n}function w(n){E.value=n}return(n,t)=>(e.openBlock(),e.createElementBlock("div",Ae,[e.createElementVNode("div",Ne,[e.createVNode(ie,{ref:"tabsetRef","emoji-filter":u.value,"show-recently-used-tab":s.value,"scroll-into-tab":y.value,"tabset-labels":l.tabSetLabels,"is-scrolling":f.value,onFocusSearchInput:t[0]||(t[0]=o=>n.$refs.searchInputRef.focusSearchInput()),onFocusSkinSelector:t[1]||(t[1]=o=>n.$refs.skinSelectorRef.focusSkinSelector()),onSelectedTabset:k,onKeydown:t[2]||(t[2]=e.withKeys(o=>i("close"),["esc"]))},null,8,["emoji-filter","show-recently-used-tab","scroll-into-tab","tabset-labels","is-scrolling"])]),e.createElementVNode("div",De,[e.createVNode(se,{ref:"searchInputRef",modelValue:u.value,"onUpdate:modelValue":t[3]||(t[3]=o=>u.value=o),"search-placeholder-label":l.searchPlaceholderLabel,onSelectFirstEmoji:t[4]||(t[4]=o=>i("selected-emoji",E.value)),onFocusTabset:t[5]||(t[5]=o=>n.$refs.tabsetRef.focusTabset()),onFocusEmojiSelector:t[6]||(t[6]=o=>n.$refs.emojiSelectorRef.focusEmojiSelector()),onKeydown:t[7]||(t[7]=e.withKeys(o=>i("close"),["esc"]))},null,8,["modelValue","search-placeholder-label"]),e.createVNode(ge,{ref:"emojiSelectorRef","emoji-filter":u.value,"skin-tone":l.skinTone,"tabset-labels":l.tabSetLabels,"search-results-label":l.searchResultsLabel,"search-no-results-label":l.searchNoResultsLabel,"recently-used-emojis":l.recentlyUsedEmojis,"selected-tabset":h.value,onScrollIntoTab:L,onIsScrolling:I,onHighlightedEmoji:w,onSelectedEmoji:t[8]||(t[8]=o=>i("selected-emoji",o)),onFocusSkinSelector:t[9]||(t[9]=o=>n.$refs.skinSelectorRef.focusSkinSelector()),onFocusSearchInput:t[10]||(t[10]=o=>n.$refs.searchInputRef.focusSearchInput()),onKeydown:t[11]||(t[11]=e.withKeys(o=>i("close"),["esc"]))},null,8,["emoji-filter","skin-tone","tabset-labels","search-results-label","search-no-results-label","recently-used-emojis","selected-tabset"])]),e.createElementVNode("div",Fe,[e.createVNode($e,{emoji:E.value},null,8,["emoji"]),e.createVNode(Te,{ref:"skinSelectorRef","is-hovering":!!E.value,"skin-selector-button-tooltip-label":l.skinSelectorButtonTooltipLabel,"skin-tone":l.skinTone,onSkinTone:t[12]||(t[12]=o=>i("skin-tone",o)),onFocusTabset:t[13]||(t[13]=o=>n.$refs.tabsetRef.focusTabset()),onFocusLastEmoji:t[14]||(t[14]=o=>n.$refs.emojiSelectorRef.focusLastEmoji()),onKeydown:t[15]||(t[15]=e.withKeys(o=>i("close"),["esc"]))},null,8,["is-hovering","skin-selector-button-tooltip-label","skin-tone"])])]))}};exports.ARROW_KEYS=C;exports.CDN_URL=V;exports.DtEmojiPicker=Be;exports.EMOJIS_PER_ROW=_;exports.EMOJI_PICKER_CATEGORIES=A;exports.EMOJI_PICKER_SKIN_TONE_MODIFIERS=B;
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const vue = require("vue");
4
+ const lib_input = require("./input.cjs");
5
+ const lib_icon = require("./icon.cjs");
6
+ const tab = require("../chunks/tab-qc3f42Yp.js");
7
+ const dialtoneEmojis = require("@dialpad/dialtone-emojis");
8
+ const lib_tooltip = require("./tooltip.cjs");
9
+ require("../common/constants.cjs");
10
+ require("../common/utils.cjs");
11
+ require("../chunks/input-ttnte8zB.js");
12
+ require("../common/validators.cjs");
13
+ require("../chunks/_plugin-vue_export-helper-fhnQq0tA.js");
14
+ require("./validation-messages.cjs");
15
+ require("@dialpad/dialtone-icons/vue3");
16
+ require("../chunks/icon_constants-QYpmdE0R.js");
17
+ require("@dialpad/dialtone-icons/icons.json");
18
+ require("./button.cjs");
19
+ require("../chunks/link_constants-Huj7D_hm.js");
20
+ require("../chunks/popover_constants-JwBF9h1Z.js");
21
+ require("tippy.js");
22
+ require("./lazy-show.cjs");
23
+ const _hoisted_1$5 = { class: "d-emoji-picker__search d-emoji-picker__alignment" };
24
+ const _hoisted_2$4 = ["onKeydown"];
25
+ const _sfc_main$5 = {
26
+ __name: "emoji_search",
27
+ props: {
28
+ searchPlaceholderLabel: {
29
+ type: String,
30
+ required: true
31
+ },
32
+ modelValue: {
33
+ type: String,
34
+ default: ""
35
+ }
36
+ },
37
+ emits: ["update:modelValue", "focus-emoji-selector", "focus-tabset", "select-first-emoji"],
38
+ setup(__props, { expose: __expose, emit: __emit }) {
39
+ const emits = __emit;
40
+ const searchInput = vue.ref(null);
41
+ function clearSearch() {
42
+ emits("update:modelValue", "");
43
+ focusSearchInput();
44
+ }
45
+ function focusSearchInput() {
46
+ searchInput.value.focus();
47
+ }
48
+ vue.onMounted(() => {
49
+ focusSearchInput();
50
+ });
51
+ __expose({
52
+ focusSearchInput
53
+ });
54
+ return (_ctx, _cache) => {
55
+ return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$5, [
56
+ vue.createVNode(vue.unref(lib_input.DtInput), {
57
+ id: "searchInput",
58
+ ref_key: "searchInput",
59
+ ref: searchInput,
60
+ placeholder: __props.searchPlaceholderLabel,
61
+ "model-value": __props.modelValue,
62
+ "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => _ctx.$emit("update:modelValue", $event)),
63
+ onKeydown: [
64
+ _cache[1] || (_cache[1] = vue.withKeys(($event) => _ctx.$emit("focus-tabset"), ["up"])),
65
+ _cache[2] || (_cache[2] = vue.withKeys(vue.withModifiers(($event) => _ctx.$emit("focus-emoji-selector"), ["prevent"]), ["down"])),
66
+ _cache[3] || (_cache[3] = vue.withKeys(($event) => _ctx.$emit("select-first-emoji"), ["enter"]))
67
+ ]
68
+ }, vue.createSlots({
69
+ leftIcon: vue.withCtx(() => [
70
+ vue.createVNode(vue.unref(lib_icon.DtIcon), {
71
+ name: "search",
72
+ size: "200"
73
+ })
74
+ ]),
75
+ _: 2
76
+ }, [
77
+ __props.modelValue.length > 0 ? {
78
+ name: "rightIcon",
79
+ fn: vue.withCtx(() => [
80
+ vue.createElementVNode("button", {
81
+ class: "d-emoji-picker__search-button",
82
+ onClick: clearSearch,
83
+ onKeydown: vue.withKeys(clearSearch, ["enter"])
84
+ }, [
85
+ vue.createVNode(vue.unref(lib_icon.DtIcon), { name: "close" })
86
+ ], 40, _hoisted_2$4)
87
+ ]),
88
+ key: "0"
89
+ } : void 0
90
+ ]), 1032, ["placeholder", "model-value"])
91
+ ]);
92
+ };
93
+ }
94
+ };
95
+ const _hoisted_1$4 = { class: "d-emoji-picker__tabset" };
96
+ const _sfc_main$4 = {
97
+ __name: "emoji_tabset",
98
+ props: {
99
+ /**
100
+ * Whether to show the recently used tab or not
101
+ * @type {Boolean}
102
+ * @default false
103
+ */
104
+ showRecentlyUsedTab: {
105
+ type: Boolean,
106
+ default: false
107
+ },
108
+ scrollIntoTab: {
109
+ type: Number,
110
+ required: true
111
+ },
112
+ isScrolling: {
113
+ type: Boolean,
114
+ default: false
115
+ },
116
+ emojiFilter: {
117
+ type: String,
118
+ default: ""
119
+ },
120
+ /**
121
+ * The labels for the aria-label
122
+ * @type {Array}
123
+ * @required
124
+ */
125
+ tabsetLabels: {
126
+ type: Array,
127
+ required: true
128
+ }
129
+ },
130
+ emits: [
131
+ /**
132
+ * Emitted when a tab is selected
133
+ * @event selected-tabset
134
+ * @param {String} tabId - The name of the tab that was selected
135
+ */
136
+ "selected-tabset",
137
+ "focus-search-input",
138
+ "focus-skin-selector"
139
+ ],
140
+ setup(__props, { expose: __expose, emit: __emit }) {
141
+ const props = __props;
142
+ const emits = __emit;
143
+ const TABS_DATA = [
144
+ { label: EMOJI_PICKER_CATEGORIES.MOST_RECENTLY_USED, icon: "clock" },
145
+ { label: EMOJI_PICKER_CATEGORIES.SMILEYS_AND_PEOPLE, icon: "satisfied" },
146
+ { label: EMOJI_PICKER_CATEGORIES.NATURE, icon: "living-thing" },
147
+ { label: EMOJI_PICKER_CATEGORIES.FOOD, icon: "food" },
148
+ { label: EMOJI_PICKER_CATEGORIES.ACTIVITY, icon: "object" },
149
+ { label: EMOJI_PICKER_CATEGORIES.TRAVEL, icon: "transportation" },
150
+ { label: EMOJI_PICKER_CATEGORIES.OBJECTS, icon: "lightbulb" },
151
+ { label: EMOJI_PICKER_CATEGORIES.SYMBOLS, icon: "heart" },
152
+ { label: EMOJI_PICKER_CATEGORIES.FLAGS, icon: "flag" }
153
+ ];
154
+ const tabs = vue.computed(() => {
155
+ const tabsData = props.showRecentlyUsedTab ? TABS_DATA : TABS_DATA.slice(1);
156
+ return tabsData.map((tab2, index) => ({
157
+ ...tab2,
158
+ label: props.tabsetLabels[index],
159
+ id: (index + 1).toString(),
160
+ panelId: (index + 1).toString()
161
+ }));
162
+ });
163
+ const isSearching = vue.computed(() => props.emojiFilter.length > 0);
164
+ const selectedTab = vue.ref("1");
165
+ const { isScrolling } = vue.toRefs(props);
166
+ const tabsetRef = vue.ref([]);
167
+ vue.watch(
168
+ () => props.scrollIntoTab,
169
+ () => {
170
+ if (!isScrolling.value && !isSearching.value) {
171
+ selectedTab.value = (props.scrollIntoTab + 1).toString();
172
+ }
173
+ }
174
+ );
175
+ vue.watch(
176
+ isSearching,
177
+ () => {
178
+ if (isSearching.value) {
179
+ selectedTab.value = null;
180
+ }
181
+ }
182
+ );
183
+ function selectTabset(id) {
184
+ if (!isScrolling.value) {
185
+ selectedTab.value = id;
186
+ }
187
+ emits("selected-tabset", id);
188
+ }
189
+ function setTabsetRef(ref) {
190
+ tabsetRef.value.push(ref.$el);
191
+ }
192
+ function focusTabset() {
193
+ tabsetRef.value[0].focus();
194
+ }
195
+ function handleKeyDown(event, tabId) {
196
+ if (event.key === "Enter") {
197
+ selectTabset(tabId);
198
+ tabsetRef.value[tabId - 1].blur();
199
+ }
200
+ if (event.key === "Tab") {
201
+ event.preventDefault();
202
+ if (event.shiftKey) {
203
+ emits("focus-skin-selector");
204
+ } else {
205
+ emits("focus-search-input");
206
+ }
207
+ }
208
+ if (event.key === "ArrowDown") {
209
+ emits("focus-search-input");
210
+ }
211
+ }
212
+ __expose({
213
+ focusTabset
214
+ });
215
+ return (_ctx, _cache) => {
216
+ return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$4, [
217
+ vue.createVNode(vue.unref(tab.DtTabGroup), {
218
+ "tab-list-class": "d-emoji-picker__tabset-list",
219
+ selected: selectedTab.value
220
+ }, {
221
+ tabs: vue.withCtx(() => [
222
+ (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(tabs.value, (tab$1, index) => {
223
+ return vue.openBlock(), vue.createBlock(vue.unref(tab.DtTab), {
224
+ id: tab$1.id,
225
+ ref_for: true,
226
+ ref: (el) => {
227
+ if (el)
228
+ setTabsetRef(el);
229
+ },
230
+ key: tab$1.id,
231
+ "panel-id": tab$1.panelId,
232
+ label: tab$1.label,
233
+ "aria-controls": "d-emoji-picker-list",
234
+ tabindex: index + 1,
235
+ onClickCapture: vue.withModifiers(($event) => selectTabset(tab$1.id), ["stop"]),
236
+ onKeydown: ($event) => handleKeyDown($event, tab$1.id)
237
+ }, {
238
+ default: vue.withCtx(() => [
239
+ vue.createVNode(vue.unref(lib_icon.DtIcon), {
240
+ size: "400",
241
+ name: tab$1.icon
242
+ }, null, 8, ["name"])
243
+ ]),
244
+ _: 2
245
+ }, 1032, ["id", "panel-id", "label", "tabindex", "onClickCapture", "onKeydown"]);
246
+ }), 128))
247
+ ]),
248
+ _: 1
249
+ }, 8, ["selected"])
250
+ ]);
251
+ };
252
+ }
253
+ };
254
+ const ARROW_KEYS = {
255
+ ARROW_UP: "ArrowUp",
256
+ ARROW_DOWN: "ArrowDown",
257
+ ARROW_LEFT: "ArrowLeft",
258
+ ARROW_RIGHT: "ArrowRight"
259
+ };
260
+ const CDN_URL = "https://static.dialpadcdn.com/joypixels/png/unicode/32/";
261
+ const EMOJIS_PER_ROW = 9;
262
+ const EMOJI_PICKER_SKIN_TONE_MODIFIERS = {
263
+ DEFAULT: "Default",
264
+ LIGHT: "Light",
265
+ MEDIUM_LIGHT: "MediumLight",
266
+ MEDIUM: "Medium",
267
+ MEDIUM_DARK: "MediumDark",
268
+ DARK: "Dark"
269
+ };
270
+ const EMOJI_PICKER_CATEGORIES = {
271
+ MOST_RECENTLY_USED: "Most recently used",
272
+ SMILEYS_AND_PEOPLE: "Smileys and people",
273
+ NATURE: "Nature",
274
+ FOOD: "Food",
275
+ ACTIVITY: "Activity",
276
+ TRAVEL: "Travel",
277
+ OBJECTS: "Objects",
278
+ SYMBOLS: "Symbols",
279
+ FLAGS: "Flags"
280
+ };
281
+ function useKeyboardNavigation() {
282
+ const emojiRefs = vue.ref([]);
283
+ const emojiFilteredRefs = vue.ref([]);
284
+ const isFiltering = vue.ref(false);
285
+ const hoverFirstEmoji = vue.ref(true);
286
+ function _handleArrowLeft(indexTab, indexEmoji) {
287
+ if (!focusEmoji(indexTab, indexEmoji - 1)) {
288
+ if (emojiRefs.value[indexTab - 1]) {
289
+ focusEmoji(indexTab - 1, emojiRefs.value[indexTab - 1].length - 1);
290
+ } else {
291
+ focusEmoji(emojiRefs.value.length - 1, emojiRefs.value[emojiRefs.value.length - 1].length - 1);
292
+ }
293
+ }
294
+ }
295
+ function _handleArrowRight(indexTab, indexEmoji) {
296
+ if (!focusEmoji(indexTab, indexEmoji + 1)) {
297
+ if (!focusEmoji(indexTab + 1, 0)) {
298
+ focusEmoji(0, 0);
299
+ }
300
+ }
301
+ }
302
+ function _handleArrowLeftFiltered(indexTab, indexEmoji) {
303
+ if (!focusEmoji(0, indexEmoji - 1)) {
304
+ focusEmoji(0, emojiFilteredRefs.value.length - 1);
305
+ }
306
+ }
307
+ function _handleArrowRightFiltered(indexTab, indexEmoji) {
308
+ if (!focusEmoji(0, indexEmoji + 1)) {
309
+ focusEmoji(0, 0);
310
+ }
311
+ }
312
+ function _handleHorizontalNavigation(direction, indexTab, indexEmoji) {
313
+ if (isFiltering.value) {
314
+ if (direction === "left") {
315
+ _handleArrowLeftFiltered(indexTab, indexEmoji);
316
+ } else if (direction === "right") {
317
+ _handleArrowRightFiltered(indexTab, indexEmoji);
318
+ }
319
+ } else {
320
+ if (direction === "left") {
321
+ _handleArrowLeft(indexTab, indexEmoji);
322
+ } else if (direction === "right") {
323
+ _handleArrowRight(indexTab, indexEmoji);
324
+ }
325
+ }
326
+ }
327
+ function focusEmoji(indexTab, indexEmoji) {
328
+ var _a, _b, _c;
329
+ const emojiRef = isFiltering.value ? (_a = emojiFilteredRefs.value) == null ? void 0 : _a[indexEmoji] : (_c = (_b = emojiRefs.value) == null ? void 0 : _b[indexTab]) == null ? void 0 : _c[indexEmoji];
330
+ if (emojiRef) {
331
+ emojiRef.focus();
332
+ return true;
333
+ }
334
+ return false;
335
+ }
336
+ function setEmojiRef(el, indexTab, indexEmoji) {
337
+ if (!emojiRefs.value[indexTab]) {
338
+ emojiRefs.value[indexTab] = [];
339
+ }
340
+ emojiRefs.value[indexTab][indexEmoji] = el;
341
+ }
342
+ function setFilteredRef(el, index) {
343
+ emojiFilteredRefs.value[index] = el;
344
+ }
345
+ function handleArrowNavigationFiltered(key, indexEmoji) {
346
+ var _a;
347
+ hoverFirstEmoji.value = false;
348
+ if (key === ARROW_KEYS.ARROW_UP) {
349
+ const position = indexEmoji % EMOJIS_PER_ROW;
350
+ if (!focusEmoji(0, indexEmoji - EMOJIS_PER_ROW)) {
351
+ const lastEmojiPosition = emojiFilteredRefs.value.length - emojiFilteredRefs.value.length % EMOJIS_PER_ROW + position;
352
+ focusEmoji(0, lastEmojiPosition);
353
+ if (!focusEmoji(0, lastEmojiPosition)) {
354
+ focusEmoji(0, emojiFilteredRefs.value.length - 1);
355
+ }
356
+ }
357
+ }
358
+ if (key === ARROW_KEYS.ARROW_DOWN) {
359
+ if (!focusEmoji(0, indexEmoji + EMOJIS_PER_ROW)) {
360
+ const position = indexEmoji % EMOJIS_PER_ROW;
361
+ if ((_a = emojiFilteredRefs.value) == null ? void 0 : _a[indexEmoji + (EMOJIS_PER_ROW - position)]) {
362
+ focusEmoji(0, emojiFilteredRefs.value.length - 1);
363
+ } else {
364
+ focusEmoji(0, position);
365
+ }
366
+ }
367
+ }
368
+ if (key === ARROW_KEYS.ARROW_LEFT) {
369
+ _handleHorizontalNavigation("left", 0, indexEmoji);
370
+ }
371
+ if (key === ARROW_KEYS.ARROW_RIGHT) {
372
+ _handleHorizontalNavigation("right", 0, indexEmoji);
373
+ }
374
+ }
375
+ function handleArrowNavigation(key, indexTab, indexEmoji) {
376
+ var _a, _b;
377
+ if (key === "ArrowUp") {
378
+ const position = indexEmoji % EMOJIS_PER_ROW;
379
+ if (indexTab === 0) {
380
+ const numberOfMissingEmojis = EMOJIS_PER_ROW - emojiRefs.value[emojiRefs.value.length - 1].length % EMOJIS_PER_ROW;
381
+ const emojiToJump = emojiRefs.value[emojiRefs.value.length - 1].length + numberOfMissingEmojis - (EMOJIS_PER_ROW - position);
382
+ if (!focusEmoji(emojiRefs.value.length - 1, emojiToJump)) {
383
+ focusEmoji(emojiRefs.value.length - 1, emojiRefs.value[emojiRefs.value.length - 1].length - 1);
384
+ }
385
+ return;
386
+ }
387
+ if (!focusEmoji(indexTab, indexEmoji - EMOJIS_PER_ROW)) {
388
+ const previousTab = indexTab - 1 < 0 ? 0 : indexTab - 1;
389
+ const emojisInPreviousTab = emojiRefs.value[previousTab].length;
390
+ const lastEmojiPosition = emojisInPreviousTab - emojisInPreviousTab % EMOJIS_PER_ROW + position;
391
+ if (!focusEmoji(previousTab, lastEmojiPosition)) {
392
+ focusEmoji(indexTab - 1, emojiRefs.value[indexTab - 1].length - 1);
393
+ }
394
+ }
395
+ }
396
+ if (key === "ArrowDown") {
397
+ if (!focusEmoji(indexTab, indexEmoji + EMOJIS_PER_ROW)) {
398
+ const position = indexEmoji % EMOJIS_PER_ROW;
399
+ if ((_b = (_a = emojiRefs.value) == null ? void 0 : _a[indexTab]) == null ? void 0 : _b[indexEmoji + (EMOJIS_PER_ROW - position)]) {
400
+ focusEmoji(indexTab, emojiRefs.value[indexTab].length - 1);
401
+ } else {
402
+ if (!focusEmoji(indexTab + 1, position)) {
403
+ if (!focusEmoji(0, position)) {
404
+ focusEmoji(0, emojiRefs.value[0].length - 1);
405
+ }
406
+ }
407
+ }
408
+ }
409
+ }
410
+ if (key === "ArrowLeft") {
411
+ _handleHorizontalNavigation("left", indexTab, indexEmoji);
412
+ }
413
+ if (key === "ArrowRight") {
414
+ _handleHorizontalNavigation("right", indexTab, indexEmoji);
415
+ }
416
+ }
417
+ return {
418
+ emojiFilteredRefs,
419
+ isFiltering,
420
+ hoverFirstEmoji,
421
+ setEmojiRef,
422
+ setFilteredRef,
423
+ focusEmoji,
424
+ handleArrowNavigationFiltered,
425
+ handleArrowNavigation
426
+ };
427
+ }
428
+ const _hoisted_1$3 = { class: "d-emoji-picker__selector" };
429
+ const _hoisted_2$3 = {
430
+ key: 0,
431
+ class: "d-emoji-picker__search-label d-emoji-picker__alignment"
432
+ };
433
+ const _hoisted_3$2 = { key: 0 };
434
+ const _hoisted_4$2 = { class: "d-emoji-picker__tab" };
435
+ const _hoisted_5$1 = ["aria-label", "onClick", "onFocusin", "onMouseover", "onKeydown"];
436
+ const _hoisted_6$1 = ["alt", "aria-label", "title", "src"];
437
+ const _hoisted_7$1 = {
438
+ key: 2,
439
+ class: "d-emoji-picker__alignment"
440
+ };
441
+ const _hoisted_8 = {
442
+ class: "d-emoji-picker__tab",
443
+ "data-qa": "filtered-emojis"
444
+ };
445
+ const _hoisted_9 = ["aria-label", "onClick", "onFocusin", "onMouseover", "onKeydown"];
446
+ const _hoisted_10 = ["alt", "aria-label", "title", "src"];
447
+ const _sfc_main$3 = {
448
+ __name: "emoji_selector",
449
+ props: {
450
+ /**
451
+ * The filter to apply to the emoji list
452
+ * @type {String}
453
+ * @default ''
454
+ */
455
+ emojiFilter: {
456
+ type: String,
457
+ default: ""
458
+ },
459
+ /**
460
+ * The skin tone to apply to the emoji list
461
+ * @type {String}
462
+ * @required
463
+ */
464
+ skinTone: {
465
+ type: String,
466
+ required: true
467
+ },
468
+ /**
469
+ * The labels for the tabset
470
+ * @type {Array}
471
+ * @required
472
+ */
473
+ tabsetLabels: {
474
+ type: Array,
475
+ required: true
476
+ },
477
+ selectedTabset: {
478
+ type: Object,
479
+ required: true
480
+ },
481
+ /**
482
+ * The label for the search results tab
483
+ * @type {String}
484
+ * @required
485
+ */
486
+ searchResultsLabel: {
487
+ type: String,
488
+ required: true
489
+ },
490
+ searchNoResultsLabel: {
491
+ type: String,
492
+ required: true
493
+ },
494
+ /**
495
+ * The list of recently used emojis
496
+ * @type {Array}
497
+ */
498
+ recentlyUsedEmojis: {
499
+ type: Array,
500
+ default: () => []
501
+ }
502
+ },
503
+ emits: [
504
+ /**
505
+ * Emitted when the user hover over an emoji
506
+ * @event highlighted-emoji
507
+ * @param {Object} emoji - The emoji data that was hovered
508
+ */
509
+ "highlighted-emoji",
510
+ /**
511
+ * Emitted when the user select an emoji
512
+ * @event selected-emoji
513
+ * @param {Object} emoji - The emoji data that was selected
514
+ */
515
+ "selected-emoji",
516
+ /**
517
+ * Emitted when the user scroll into an emoji tab
518
+ * @event scroll-into-tab
519
+ * @param {Number} tab-index - The tab that was scrolled into
520
+ */
521
+ "scroll-into-tab",
522
+ /**
523
+ * Emitted when the scrollTo function starts scrolling and stops scrolling
524
+ * @event is-scrolling
525
+ * @param {Boolean} is-scrolling - Whether the user is scrolling with the scroll-to
526
+ */
527
+ "is-scrolling",
528
+ /**
529
+ * Emitted when the user reach the end of the emoji list
530
+ * @event focus-skin-selector
531
+ */
532
+ "focus-skin-selector",
533
+ /**
534
+ * Emitted when the user shift tab in first tab of emoji selector
535
+ * @event focus-search-input
536
+ */
537
+ "focus-search-input"
538
+ ],
539
+ setup(__props, { expose: __expose, emit: __emit }) {
540
+ const props = __props;
541
+ const emits = __emit;
542
+ const {
543
+ emojiFilteredRefs,
544
+ isFiltering,
545
+ hoverFirstEmoji,
546
+ setEmojiRef,
547
+ setFilteredRef,
548
+ focusEmoji,
549
+ handleArrowNavigationFiltered,
550
+ handleArrowNavigation
551
+ } = useKeyboardNavigation();
552
+ const tabCategoryRef = vue.ref(null);
553
+ const listRef = vue.ref(null);
554
+ const tabLabelObserver = vue.ref(null);
555
+ const TABS_DATA = ["Recently used", "People", "Nature", "Food", "Activity", "Travel", "Objects", "Symbols", "Flags"];
556
+ const tabLabels = vue.computed(() => {
557
+ return props.recentlyUsedEmojis.length ? props.tabsetLabels.map((label) => ({ label, ref: vue.ref(null) })) : props.tabsetLabels.slice(1).map((label) => ({ label, ref: vue.ref(null) }));
558
+ });
559
+ const fixedLabel = vue.ref(tabLabels.value[0].label);
560
+ const tabs = vue.computed(() => {
561
+ return props.recentlyUsedEmojis.length ? TABS_DATA : TABS_DATA.slice(1);
562
+ });
563
+ const filteredEmojis = vue.ref([]);
564
+ const currentEmojis = vue.computed(() => {
565
+ return [
566
+ ...dialtoneEmojis.emojisGrouped[`People${props.skinTone}`],
567
+ ...dialtoneEmojis.emojisGrouped.Nature,
568
+ ...dialtoneEmojis.emojisGrouped.Food,
569
+ ...dialtoneEmojis.emojisGrouped[`Activity${props.skinTone}`],
570
+ ...dialtoneEmojis.emojisGrouped.Travel,
571
+ ...dialtoneEmojis.emojisGrouped[`Objects${props.skinTone}`],
572
+ ...dialtoneEmojis.emojisGrouped.Symbols,
573
+ ...dialtoneEmojis.emojisGrouped.Flags
574
+ ];
575
+ });
576
+ const debouncedSearch = debounce(() => {
577
+ emojiFilteredRefs.value = [];
578
+ searchByNameAndKeywords();
579
+ });
580
+ vue.watch(currentEmojis, () => {
581
+ searchByNameAndKeywords();
582
+ }, { immediate: true });
583
+ vue.watch(
584
+ () => props.recentlyUsedEmojis,
585
+ () => {
586
+ dialtoneEmojis.emojisGrouped["Recently used"] = props.recentlyUsedEmojis;
587
+ },
588
+ { immediate: true }
589
+ );
590
+ vue.watch(() => props.emojiFilter, () => {
591
+ resetScroll();
592
+ if (props.emojiFilter) {
593
+ isFiltering.value = true;
594
+ } else {
595
+ isFiltering.value = false;
596
+ highlightEmoji(null);
597
+ }
598
+ debouncedSearch();
599
+ });
600
+ vue.watch(
601
+ () => props.selectedTabset,
602
+ (tab2) => {
603
+ scrollToTab(tab2.tabId);
604
+ },
605
+ { deep: true }
606
+ );
607
+ function hoverEmoji(emoji, isFirst = false) {
608
+ hoverFirstEmoji.value = isFirst;
609
+ emits("highlighted-emoji", emoji);
610
+ }
611
+ function searchByNameAndKeywords() {
612
+ const searchStr = props.emojiFilter.toLowerCase();
613
+ filteredEmojis.value = currentEmojis.value.filter((obj) => {
614
+ const nameIncludesSearchStr = obj.name.toLowerCase().includes(searchStr);
615
+ const keywordsIncludeSearchStr = obj.keywords.some((keyword) => keyword.toLowerCase().includes(searchStr));
616
+ return nameIncludesSearchStr || keywordsIncludeSearchStr;
617
+ });
618
+ vue.nextTick(() => {
619
+ if (searchStr) {
620
+ hoverEmoji(filteredEmojis.value[0], true);
621
+ }
622
+ });
623
+ }
624
+ function debounce(fn, delay = 300) {
625
+ let timeout;
626
+ return (...args) => {
627
+ clearTimeout(timeout);
628
+ timeout = setTimeout(() => fn(...args), delay);
629
+ };
630
+ }
631
+ function getImgSrc(emoji) {
632
+ return `${CDN_URL + emoji}.png`;
633
+ }
634
+ function handleImageError(event) {
635
+ event.target.parentNode.style.display = "none";
636
+ }
637
+ function scrollToTab(tabIndex, focusFirstEmoji = true) {
638
+ const tabLabel = tabLabels.value[tabIndex - 1];
639
+ const tabElement = tabLabel.ref.value[0];
640
+ vue.nextTick(() => {
641
+ const container = listRef.value;
642
+ const offsetTop = tabIndex === "1" ? 0 : tabElement.offsetTop - 20;
643
+ let isScrolling = true;
644
+ let prevScrollTop = container.scrollTop;
645
+ emits("is-scrolling", true);
646
+ container.addEventListener("scroll", () => {
647
+ if (isScrolling) {
648
+ const scrollTop = container.scrollTop;
649
+ if (prevScrollTop < scrollTop && scrollTop >= offsetTop || prevScrollTop > scrollTop && scrollTop <= offsetTop) {
650
+ isScrolling = false;
651
+ emits("is-scrolling", false);
652
+ }
653
+ prevScrollTop = scrollTop;
654
+ }
655
+ });
656
+ container.scrollTop = offsetTop;
657
+ if (focusFirstEmoji) {
658
+ focusEmoji(tabIndex - 1, 0);
659
+ }
660
+ });
661
+ }
662
+ function resetScroll() {
663
+ const container = listRef.value;
664
+ container.scrollTop = 0;
665
+ }
666
+ function setTabLabelObserver() {
667
+ tabLabelObserver.value = new IntersectionObserver((entries) => {
668
+ entries.forEach((entry) => {
669
+ var _a, _b, _c, _d, _e;
670
+ const { target } = entry;
671
+ const index = parseInt(target.dataset.index);
672
+ if (entry.isIntersecting && target.offsetTop <= tabCategoryRef.value.offsetTop + 50) {
673
+ fixedLabel.value = ((_a = tabLabels.value[index - 1]) == null ? void 0 : _a.label) ?? ((_b = tabLabels.value[0]) == null ? void 0 : _b.label);
674
+ emits("scroll-into-tab", index - 1);
675
+ } else if (entry.boundingClientRect.bottom <= ((_c = tabCategoryRef.value) == null ? void 0 : _c.getBoundingClientRect().bottom)) {
676
+ emits("scroll-into-tab", index);
677
+ fixedLabel.value = (_d = tabLabels.value[index]) == null ? void 0 : _d.label;
678
+ } else if (index === 1) {
679
+ emits("scroll-into-tab", index);
680
+ fixedLabel.value = (_e = tabLabels.value[0]) == null ? void 0 : _e.label;
681
+ }
682
+ });
683
+ });
684
+ tabLabelObserver.value.observe(tabCategoryRef.value);
685
+ Array.from(listRef.value.children).forEach((child, index) => {
686
+ tabLabelObserver.value.observe(child);
687
+ child.dataset.index = index;
688
+ });
689
+ }
690
+ const handleKeyDownFilteredEmojis = (event, indexEmoji, emoji) => {
691
+ event.preventDefault();
692
+ if (Object.values(ARROW_KEYS).includes(event.key)) {
693
+ handleArrowNavigationFiltered(event.key, indexEmoji);
694
+ return;
695
+ }
696
+ switch (event.key) {
697
+ case "Tab":
698
+ emits("focus-skin-selector");
699
+ break;
700
+ case "Enter":
701
+ selectEmoji(emoji);
702
+ break;
703
+ }
704
+ };
705
+ const handleKeyDown = (event, indexTab, indexEmoji, emoji) => {
706
+ event.preventDefault();
707
+ if (Object.values(ARROW_KEYS).includes(event.key)) {
708
+ handleArrowNavigation(event.key, indexTab, indexEmoji);
709
+ return;
710
+ }
711
+ switch (event.key) {
712
+ case "Tab":
713
+ if (event.shiftKey) {
714
+ if (focusEmoji(indexTab, 0) && indexTab > 0) {
715
+ scrollToTab(indexTab, true);
716
+ } else {
717
+ scrollToTab(1, false);
718
+ emits("focus-search-input");
719
+ }
720
+ } else {
721
+ if (focusEmoji(indexTab + 1, 0)) {
722
+ scrollToTab(indexTab + 1 + 1, false);
723
+ } else {
724
+ emits("focus-skin-selector");
725
+ }
726
+ }
727
+ break;
728
+ case "Enter":
729
+ selectEmoji(emoji);
730
+ break;
731
+ }
732
+ };
733
+ function selectEmoji(emoji) {
734
+ emits("selected-emoji", emoji);
735
+ }
736
+ function highlightEmoji(emoji) {
737
+ emits("highlighted-emoji", emoji);
738
+ }
739
+ function focusEmojiSelector() {
740
+ focusEmoji(0, 0);
741
+ }
742
+ function focusLastEmoji() {
743
+ focusEmoji(tabs.value.length - 1, 0);
744
+ }
745
+ vue.onMounted(() => {
746
+ setTabLabelObserver();
747
+ });
748
+ vue.onUnmounted(() => {
749
+ tabLabelObserver.value.disconnect();
750
+ });
751
+ __expose({
752
+ focusEmojiSelector,
753
+ focusLastEmoji
754
+ });
755
+ return (_ctx, _cache) => {
756
+ return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$3, [
757
+ vue.createElementVNode("div", {
758
+ id: "d-emoji-picker-list",
759
+ ref_key: "listRef",
760
+ ref: listRef,
761
+ class: "d-emoji-picker__list"
762
+ }, [
763
+ __props.emojiFilter ? (vue.openBlock(), vue.createElementBlock("p", _hoisted_2$3, vue.toDisplayString(filteredEmojis.value.length > 0 ? __props.searchResultsLabel : __props.searchNoResultsLabel), 1)) : (vue.openBlock(), vue.createElementBlock("div", {
764
+ key: 1,
765
+ ref_key: "tabCategoryRef",
766
+ ref: tabCategoryRef,
767
+ class: "d-emoji-picker__category d-emoji-picker__alignment"
768
+ }, [
769
+ vue.createElementVNode("p", null, vue.toDisplayString(fixedLabel.value), 1)
770
+ ], 512)),
771
+ (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(tabLabels.value, (tabLabel, indexTab) => {
772
+ return vue.withDirectives((vue.openBlock(), vue.createElementBlock("div", {
773
+ key: indexTab,
774
+ ref_for: true,
775
+ ref: tabLabel.ref,
776
+ class: "d-emoji-picker__alignment"
777
+ }, [
778
+ indexTab ? (vue.openBlock(), vue.createElementBlock("p", _hoisted_3$2, vue.toDisplayString(tabLabel.label), 1)) : vue.createCommentVNode("", true),
779
+ vue.createElementVNode("div", _hoisted_4$2, [
780
+ (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(vue.unref(dialtoneEmojis.emojisGrouped)[tabs.value[indexTab] + __props.skinTone] ? vue.unref(dialtoneEmojis.emojisGrouped)[tabs.value[indexTab] + __props.skinTone] : vue.unref(dialtoneEmojis.emojisGrouped)[tabs.value[indexTab]], (emoji, indexEmoji) => {
781
+ return vue.openBlock(), vue.createElementBlock("button", {
782
+ key: emoji.shortname,
783
+ ref_for: true,
784
+ ref: (el) => {
785
+ if (el)
786
+ vue.unref(setEmojiRef)(el, indexTab, indexEmoji);
787
+ },
788
+ type: "button",
789
+ "aria-label": emoji.name,
790
+ onClick: ($event) => selectEmoji(emoji),
791
+ onFocusin: ($event) => highlightEmoji(emoji),
792
+ onFocusout: _cache[0] || (_cache[0] = ($event) => highlightEmoji(null)),
793
+ onMouseover: ($event) => highlightEmoji(emoji),
794
+ onMouseleave: _cache[1] || (_cache[1] = ($event) => highlightEmoji(null)),
795
+ onKeydown: (event) => handleKeyDown(event, indexTab, indexEmoji, emoji)
796
+ }, [
797
+ vue.createElementVNode("img", {
798
+ class: "d-icon d-icon--size-500",
799
+ alt: emoji.name,
800
+ "aria-label": emoji.name,
801
+ title: emoji.name,
802
+ src: getImgSrc(emoji.unicode_character),
803
+ onError: handleImageError
804
+ }, null, 40, _hoisted_6$1)
805
+ ], 40, _hoisted_5$1);
806
+ }), 128))
807
+ ])
808
+ ])), [
809
+ [vue.vShow, !__props.emojiFilter]
810
+ ]);
811
+ }), 128)),
812
+ __props.emojiFilter ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_7$1, [
813
+ vue.createElementVNode("div", _hoisted_8, [
814
+ (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(filteredEmojis.value, (emoji, index) => {
815
+ return vue.openBlock(), vue.createElementBlock("button", {
816
+ key: emoji.shortname,
817
+ ref_for: true,
818
+ ref: (el) => {
819
+ if (el)
820
+ vue.unref(setFilteredRef)(el, index);
821
+ },
822
+ type: "button",
823
+ "aria-label": emoji.name,
824
+ class: vue.normalizeClass({
825
+ "hover-emoji": index === 0 && vue.unref(hoverFirstEmoji)
826
+ }),
827
+ onClick: ($event) => selectEmoji(emoji),
828
+ onFocusin: ($event) => highlightEmoji(emoji),
829
+ onFocusout: _cache[2] || (_cache[2] = ($event) => highlightEmoji(null)),
830
+ onMouseover: ($event) => hoverEmoji(emoji),
831
+ onMouseleave: _cache[3] || (_cache[3] = ($event) => hoverEmoji(null)),
832
+ onKeydown: (event) => handleKeyDownFilteredEmojis(event, index, emoji)
833
+ }, [
834
+ vue.createElementVNode("img", {
835
+ class: "d-icon d-icon--size-500",
836
+ alt: emoji.name,
837
+ "aria-label": emoji.name,
838
+ title: emoji.name,
839
+ src: `${vue.unref(CDN_URL) + emoji.unicode_character}.png`
840
+ }, null, 8, _hoisted_10)
841
+ ], 42, _hoisted_9);
842
+ }), 128))
843
+ ])
844
+ ])) : vue.createCommentVNode("", true)
845
+ ], 512)
846
+ ]);
847
+ };
848
+ }
849
+ };
850
+ const _hoisted_1$2 = { "data-qa": "skin-selector" };
851
+ const _hoisted_2$2 = { class: "d-emoji-picker__skin-list" };
852
+ const _hoisted_3$1 = ["onKeydown", "onClick"];
853
+ const _hoisted_4$1 = ["alt", "aria-label", "title", "src"];
854
+ const _hoisted_5 = { class: "d-emoji-picker__skin-selected" };
855
+ const _hoisted_6 = ["aria-label"];
856
+ const _hoisted_7 = ["alt", "aria-label", "title", "src"];
857
+ const _sfc_main$2 = {
858
+ __name: "emoji_skin_selector",
859
+ props: {
860
+ /**
861
+ * The skin tone to apply to the emoji list
862
+ * @type {String}
863
+ * @required
864
+ */
865
+ skinTone: {
866
+ type: String,
867
+ required: true
868
+ },
869
+ isHovering: {
870
+ type: Boolean,
871
+ default: false
872
+ },
873
+ skinSelectorButtonTooltipLabel: {
874
+ type: String,
875
+ required: true
876
+ }
877
+ },
878
+ emits: [
879
+ /**
880
+ * The skin tone that was selected
881
+ * @event skin-tone
882
+ * @type {Number}
883
+ */
884
+ "skin-tone",
885
+ "focus-tabset",
886
+ "focus-last-emoji"
887
+ ],
888
+ setup(__props, { expose: __expose, emit: __emit }) {
889
+ const props = __props;
890
+ const emits = __emit;
891
+ const skinList = [
892
+ {
893
+ name: ":wave_tone1:",
894
+ unicode_output: "1f44b-1f3fb",
895
+ skinTone: EMOJI_PICKER_SKIN_TONE_MODIFIERS.LIGHT,
896
+ skinCode: "_tone1"
897
+ },
898
+ {
899
+ name: ":wave_tone2:",
900
+ unicode_output: "1f44b-1f3fc",
901
+ skinTone: EMOJI_PICKER_SKIN_TONE_MODIFIERS.MEDIUM_LIGHT,
902
+ skinCode: "_tone2"
903
+ },
904
+ {
905
+ name: ":wave_tone3:",
906
+ unicode_output: "1f44b-1f3fd",
907
+ skinTone: EMOJI_PICKER_SKIN_TONE_MODIFIERS.MEDIUM,
908
+ skinCode: "_tone3"
909
+ },
910
+ {
911
+ name: ":wave_tone4:",
912
+ unicode_output: "1f44b-1f3fe",
913
+ skinTone: EMOJI_PICKER_SKIN_TONE_MODIFIERS.MEDIUM_DARK,
914
+ skinCode: "_tone4"
915
+ },
916
+ {
917
+ name: ":wave_tone5:",
918
+ unicode_output: "1f44b-1f3ff",
919
+ skinTone: EMOJI_PICKER_SKIN_TONE_MODIFIERS.DARK,
920
+ skinCode: "_tone5"
921
+ },
922
+ {
923
+ name: ":wave:",
924
+ unicode_output: "1f44b",
925
+ skinTone: EMOJI_PICKER_SKIN_TONE_MODIFIERS.DEFAULT,
926
+ skinCode: ""
927
+ }
928
+ ];
929
+ const isOpen = vue.ref(false);
930
+ const skinSelectorRef = vue.ref(null);
931
+ const skinsRef = vue.ref([]);
932
+ vue.watchEffect(
933
+ () => props.isHovering && (isOpen.value = false)
934
+ );
935
+ const skinPassedIn = vue.computed(() => skinList.find((skin) => skin.skinTone === props.skinTone));
936
+ const skinSelected = vue.ref(skinPassedIn.value);
937
+ vue.watchEffect(() => skinPassedIn.value && (skinSelected.value = skinPassedIn.value));
938
+ function setSkinsRef(ref) {
939
+ skinsRef.value.push(ref);
940
+ }
941
+ function focusSkinSelector() {
942
+ skinSelectorRef.value.focus();
943
+ }
944
+ function selectSkin(skin) {
945
+ skinSelected.value = skin;
946
+ isOpen.value = false;
947
+ emits("skin-tone", skin.skinTone);
948
+ vue.nextTick(() => focusSkinSelector());
949
+ }
950
+ const handleKeyDown = (event, skin, index) => {
951
+ var _a, _b, _c;
952
+ event.preventDefault();
953
+ if (event.key === "ArrowLeft") {
954
+ if (index === 0)
955
+ (_a = skinsRef.value[skinsRef.value.length - 1]) == null ? void 0 : _a.focus();
956
+ (_b = skinsRef.value[index - 1]) == null ? void 0 : _b.focus();
957
+ }
958
+ if (event.key === "ArrowRight") {
959
+ (_c = skinsRef.value[index + 1]) == null ? void 0 : _c.focus();
960
+ }
961
+ if (event.key === "Enter") {
962
+ if (skin) {
963
+ selectSkin(skin);
964
+ } else {
965
+ toggleSkinList();
966
+ }
967
+ }
968
+ if (event.key === "Tab") {
969
+ if (event.shiftKey) {
970
+ emits("focus-last-emoji");
971
+ } else {
972
+ emits("focus-tabset");
973
+ }
974
+ }
975
+ };
976
+ function toggleSkinList() {
977
+ isOpen.value = !isOpen.value;
978
+ vue.nextTick(() => skinsRef.value[0].focus());
979
+ }
980
+ __expose({
981
+ focusSkinSelector
982
+ });
983
+ return (_ctx, _cache) => {
984
+ return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$2, [
985
+ vue.withDirectives(vue.createElementVNode("div", _hoisted_2$2, [
986
+ (vue.openBlock(), vue.createElementBlock(vue.Fragment, null, vue.renderList(skinList, (skin, index) => {
987
+ return vue.createElementVNode("button", {
988
+ ref_for: true,
989
+ ref: (el) => {
990
+ if (el)
991
+ setSkinsRef(el);
992
+ },
993
+ key: skin.name,
994
+ class: vue.normalizeClass({
995
+ "selected": skinSelected.value.skinCode === skin.skinCode
996
+ }),
997
+ onKeydown: (event) => handleKeyDown(event, skin, index),
998
+ onClick: ($event) => selectSkin(skin)
999
+ }, [
1000
+ vue.createElementVNode("img", {
1001
+ class: "d-icon d-icon--size-500",
1002
+ alt: skin.name,
1003
+ "aria-label": skin.name,
1004
+ title: skin.name,
1005
+ src: `${vue.unref(CDN_URL) + skin.unicode_output}.png`
1006
+ }, null, 8, _hoisted_4$1)
1007
+ ], 42, _hoisted_3$1);
1008
+ }), 64))
1009
+ ], 512), [
1010
+ [vue.vShow, isOpen.value]
1011
+ ]),
1012
+ vue.withDirectives(vue.createElementVNode("div", _hoisted_5, [
1013
+ vue.createVNode(vue.unref(lib_tooltip.DtTooltip), { placement: "top-end" }, {
1014
+ anchor: vue.withCtx(() => [
1015
+ vue.createElementVNode("button", {
1016
+ ref_key: "skinSelectorRef",
1017
+ ref: skinSelectorRef,
1018
+ "aria-label": __props.skinSelectorButtonTooltipLabel,
1019
+ tabindex: "-1",
1020
+ onClick: toggleSkinList,
1021
+ onKeydown: _cache[0] || (_cache[0] = (event) => handleKeyDown(event))
1022
+ }, [
1023
+ vue.createElementVNode("img", {
1024
+ class: "d-icon d-icon--size-500",
1025
+ alt: skinSelected.value.name,
1026
+ "aria-label": skinSelected.value.name,
1027
+ title: skinSelected.value.name,
1028
+ src: `${vue.unref(CDN_URL) + skinSelected.value.unicode_output}.png`
1029
+ }, null, 8, _hoisted_7)
1030
+ ], 40, _hoisted_6)
1031
+ ]),
1032
+ default: vue.withCtx(() => [
1033
+ vue.createTextVNode(vue.toDisplayString(__props.skinSelectorButtonTooltipLabel) + " ", 1)
1034
+ ]),
1035
+ _: 1
1036
+ })
1037
+ ], 512), [
1038
+ [vue.vShow, !isOpen.value]
1039
+ ])
1040
+ ]);
1041
+ };
1042
+ }
1043
+ };
1044
+ const _hoisted_1$1 = { class: "d-emoji-picker__data" };
1045
+ const _hoisted_2$1 = ["alt", "aria-label", "title", "src"];
1046
+ const _sfc_main$1 = {
1047
+ __name: "emoji_description",
1048
+ props: {
1049
+ /**
1050
+ * Emoji data
1051
+ * @type {Object}
1052
+ * @default null
1053
+ */
1054
+ emoji: {
1055
+ type: Object,
1056
+ default: null
1057
+ }
1058
+ },
1059
+ setup(__props) {
1060
+ return (_ctx, _cache) => {
1061
+ var _a;
1062
+ return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$1, [
1063
+ __props.emoji ? (vue.openBlock(), vue.createElementBlock("img", {
1064
+ key: 0,
1065
+ class: "d-icon d-icon--size-500",
1066
+ alt: __props.emoji.name,
1067
+ "aria-label": __props.emoji.name,
1068
+ title: __props.emoji.name,
1069
+ src: `${vue.unref(CDN_URL) + __props.emoji.unicode_character}.png`
1070
+ }, null, 8, _hoisted_2$1)) : vue.createCommentVNode("", true),
1071
+ vue.createTextVNode(" " + vue.toDisplayString((_a = __props.emoji) == null ? void 0 : _a.name), 1)
1072
+ ]);
1073
+ };
1074
+ }
1075
+ };
1076
+ const _hoisted_1 = { class: "d-emoji-picker" };
1077
+ const _hoisted_2 = { class: "d-emoji-picker--header" };
1078
+ const _hoisted_3 = { class: "d-emoji-picker--body" };
1079
+ const _hoisted_4 = { class: "d-emoji-picker--footer" };
1080
+ const _sfc_main = {
1081
+ __name: "emoji_picker",
1082
+ props: {
1083
+ /**
1084
+ * The array with recently used emoji object
1085
+ * This list is necessary to fill the recently used tab
1086
+ * @type {Array}
1087
+ * @default []
1088
+ * @example
1089
+ * <dt-emoji-picker :recentlyUsedEmojis="[emojiObject, emojiObject]" />
1090
+ */
1091
+ // TODO try to simplify this to achieve an array of unicode characters and not an entire emoji data object
1092
+ recentlyUsedEmojis: {
1093
+ type: Array,
1094
+ default: () => []
1095
+ },
1096
+ /**
1097
+ * The placeholder text for the search input
1098
+ * @type {String}
1099
+ * @required
1100
+ * @example
1101
+ * <dt-emoji-picker :searchPlaceholderLabel="'Search...'" />
1102
+ */
1103
+ searchPlaceholderLabel: {
1104
+ type: String,
1105
+ required: true
1106
+ },
1107
+ /**
1108
+ * The label for the search results tab
1109
+ * @type {String}
1110
+ * @required
1111
+ * @example
1112
+ * <dt-emoji-picker :searchResultsLabel="'Search results'" />
1113
+ */
1114
+ searchResultsLabel: {
1115
+ type: String,
1116
+ required: true
1117
+ },
1118
+ /**
1119
+ * The label for the search no results
1120
+ * @type {String}
1121
+ * @required
1122
+ * @example
1123
+ * <dt-emoji-picker :searchNoResultsLabel="'No results'" />
1124
+ */
1125
+ searchNoResultsLabel: {
1126
+ type: String,
1127
+ required: true
1128
+ },
1129
+ /**
1130
+ * The list of tabsets to show, it is necessary to be updated with the correct language
1131
+ * It must respect the provided order.
1132
+ * @type {Array}
1133
+ * @required
1134
+ * @example
1135
+ * <dt-emoji-picker
1136
+ * :tabSetLabels="['Most recently used', 'Smileys and people', 'Nature',
1137
+ * 'Food', 'Activity', 'Travel', 'Objects', 'Symbols', 'Flags']" />
1138
+ */
1139
+ tabSetLabels: {
1140
+ type: Array,
1141
+ required: true
1142
+ },
1143
+ /**
1144
+ * The skin tone to show the emojis
1145
+ * This prop gives the possibility to use the skin tone selected by the user previously
1146
+ * @type {String}
1147
+ * @default 'Default'
1148
+ * @values 'Default', 'Light', 'MediumLight', 'Medium', 'MediumDark', 'Dark'
1149
+ * @example
1150
+ * <dt-emoji-picker :skinTone="'Default'" />
1151
+ */
1152
+ skinTone: {
1153
+ type: String,
1154
+ default: "Default"
1155
+ },
1156
+ /**
1157
+ * Tooltip shown when skin selector button is hovered.
1158
+ * @type {String}
1159
+ * @required
1160
+ * @example
1161
+ * <dt-emoji-picker :skin-selector-button-tooltip-label="'Change default skin tone'" />
1162
+ */
1163
+ skinSelectorButtonTooltipLabel: {
1164
+ type: String,
1165
+ required: true
1166
+ }
1167
+ },
1168
+ emits: [
1169
+ /**
1170
+ * It will emit the selected emoji
1171
+ * @event selected-emoji
1172
+ * @param {Object} emoji - The selected emoji from the emoji selector
1173
+ */
1174
+ "selected-emoji",
1175
+ /**
1176
+ * It will emit the selected skin tone
1177
+ * @event skin-tone
1178
+ * @param {String} skin - The selected skin tone from the skin selector
1179
+ */
1180
+ "skin-tone",
1181
+ /**
1182
+ * Since the keyboard events are encapsulated, we emit this event to close the picker
1183
+ * @event close
1184
+ */
1185
+ "close"
1186
+ ],
1187
+ setup(__props, { emit: __emit }) {
1188
+ const props = __props;
1189
+ const emits = __emit;
1190
+ const searchQuery = vue.ref("");
1191
+ const highlightedEmoji = vue.ref(null);
1192
+ const selectedTabset = vue.ref({});
1193
+ const scrollIntoTab = vue.ref(0);
1194
+ const isScrolling = vue.ref(false);
1195
+ const showRecentlyUsedTab = vue.computed(() => props.recentlyUsedEmojis.length > 0);
1196
+ function scrollToSelectedTabset(tabId) {
1197
+ searchQuery.value = "";
1198
+ selectedTabset.value = tabId;
1199
+ selectedTabset.value = { ...selectedTabset.value, tabId };
1200
+ }
1201
+ function updateScrollIntoTab(value) {
1202
+ scrollIntoTab.value = value;
1203
+ }
1204
+ function updateIsScrolling(value) {
1205
+ isScrolling.value = value;
1206
+ }
1207
+ function updateHighlightedEmoji(emoji) {
1208
+ highlightedEmoji.value = emoji;
1209
+ }
1210
+ return (_ctx, _cache) => {
1211
+ return vue.openBlock(), vue.createElementBlock("div", _hoisted_1, [
1212
+ vue.createElementVNode("div", _hoisted_2, [
1213
+ vue.createVNode(_sfc_main$4, {
1214
+ ref: "tabsetRef",
1215
+ "emoji-filter": searchQuery.value,
1216
+ "show-recently-used-tab": showRecentlyUsedTab.value,
1217
+ "scroll-into-tab": scrollIntoTab.value,
1218
+ "tabset-labels": __props.tabSetLabels,
1219
+ "is-scrolling": isScrolling.value,
1220
+ onFocusSearchInput: _cache[0] || (_cache[0] = ($event) => _ctx.$refs.searchInputRef.focusSearchInput()),
1221
+ onFocusSkinSelector: _cache[1] || (_cache[1] = ($event) => _ctx.$refs.skinSelectorRef.focusSkinSelector()),
1222
+ onSelectedTabset: scrollToSelectedTabset,
1223
+ onKeydown: _cache[2] || (_cache[2] = vue.withKeys(($event) => emits("close"), ["esc"]))
1224
+ }, null, 8, ["emoji-filter", "show-recently-used-tab", "scroll-into-tab", "tabset-labels", "is-scrolling"])
1225
+ ]),
1226
+ vue.createElementVNode("div", _hoisted_3, [
1227
+ vue.createVNode(_sfc_main$5, {
1228
+ ref: "searchInputRef",
1229
+ modelValue: searchQuery.value,
1230
+ "onUpdate:modelValue": _cache[3] || (_cache[3] = ($event) => searchQuery.value = $event),
1231
+ "search-placeholder-label": __props.searchPlaceholderLabel,
1232
+ onSelectFirstEmoji: _cache[4] || (_cache[4] = ($event) => emits("selected-emoji", highlightedEmoji.value)),
1233
+ onFocusTabset: _cache[5] || (_cache[5] = ($event) => _ctx.$refs.tabsetRef.focusTabset()),
1234
+ onFocusEmojiSelector: _cache[6] || (_cache[6] = ($event) => _ctx.$refs.emojiSelectorRef.focusEmojiSelector()),
1235
+ onKeydown: _cache[7] || (_cache[7] = vue.withKeys(($event) => emits("close"), ["esc"]))
1236
+ }, null, 8, ["modelValue", "search-placeholder-label"]),
1237
+ vue.createVNode(_sfc_main$3, {
1238
+ ref: "emojiSelectorRef",
1239
+ "emoji-filter": searchQuery.value,
1240
+ "skin-tone": __props.skinTone,
1241
+ "tabset-labels": __props.tabSetLabels,
1242
+ "search-results-label": __props.searchResultsLabel,
1243
+ "search-no-results-label": __props.searchNoResultsLabel,
1244
+ "recently-used-emojis": __props.recentlyUsedEmojis,
1245
+ "selected-tabset": selectedTabset.value,
1246
+ onScrollIntoTab: updateScrollIntoTab,
1247
+ onIsScrolling: updateIsScrolling,
1248
+ onHighlightedEmoji: updateHighlightedEmoji,
1249
+ onSelectedEmoji: _cache[8] || (_cache[8] = ($event) => emits("selected-emoji", $event)),
1250
+ onFocusSkinSelector: _cache[9] || (_cache[9] = ($event) => _ctx.$refs.skinSelectorRef.focusSkinSelector()),
1251
+ onFocusSearchInput: _cache[10] || (_cache[10] = ($event) => _ctx.$refs.searchInputRef.focusSearchInput()),
1252
+ onKeydown: _cache[11] || (_cache[11] = vue.withKeys(($event) => emits("close"), ["esc"]))
1253
+ }, null, 8, ["emoji-filter", "skin-tone", "tabset-labels", "search-results-label", "search-no-results-label", "recently-used-emojis", "selected-tabset"])
1254
+ ]),
1255
+ vue.createElementVNode("div", _hoisted_4, [
1256
+ vue.createVNode(_sfc_main$1, { emoji: highlightedEmoji.value }, null, 8, ["emoji"]),
1257
+ vue.createVNode(_sfc_main$2, {
1258
+ ref: "skinSelectorRef",
1259
+ "is-hovering": !!highlightedEmoji.value,
1260
+ "skin-selector-button-tooltip-label": __props.skinSelectorButtonTooltipLabel,
1261
+ "skin-tone": __props.skinTone,
1262
+ onSkinTone: _cache[12] || (_cache[12] = ($event) => emits("skin-tone", $event)),
1263
+ onFocusTabset: _cache[13] || (_cache[13] = ($event) => _ctx.$refs.tabsetRef.focusTabset()),
1264
+ onFocusLastEmoji: _cache[14] || (_cache[14] = ($event) => _ctx.$refs.emojiSelectorRef.focusLastEmoji()),
1265
+ onKeydown: _cache[15] || (_cache[15] = vue.withKeys(($event) => emits("close"), ["esc"]))
1266
+ }, null, 8, ["is-hovering", "skin-selector-button-tooltip-label", "skin-tone"])
1267
+ ])
1268
+ ]);
1269
+ };
1270
+ }
1271
+ };
1272
+ exports.ARROW_KEYS = ARROW_KEYS;
1273
+ exports.CDN_URL = CDN_URL;
1274
+ exports.DtEmojiPicker = _sfc_main;
1275
+ exports.EMOJIS_PER_ROW = EMOJIS_PER_ROW;
1276
+ exports.EMOJI_PICKER_CATEGORIES = EMOJI_PICKER_CATEGORIES;
1277
+ exports.EMOJI_PICKER_SKIN_TONE_MODIFIERS = EMOJI_PICKER_SKIN_TONE_MODIFIERS;
2
1278
  //# sourceMappingURL=emoji-picker.cjs.map