@nextcloud/vue 8.6.0 → 8.6.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 (326) hide show
  1. package/CHANGELOG.md +29 -0
  2. package/dist/Components/NcActionButton.cjs +1 -1
  3. package/dist/Components/NcActionButton.mjs +1 -1
  4. package/dist/Components/NcActionButtonGroup.cjs +1 -1
  5. package/dist/Components/NcActionButtonGroup.mjs +1 -1
  6. package/dist/Components/NcActionCheckbox.cjs +1 -1
  7. package/dist/Components/NcActionCheckbox.mjs +1 -1
  8. package/dist/Components/NcActionInput.cjs +1 -1
  9. package/dist/Components/NcActionInput.mjs +1 -1
  10. package/dist/Components/NcActionLink.cjs +1 -1
  11. package/dist/Components/NcActionLink.mjs +1 -1
  12. package/dist/Components/NcActionRadio.cjs +1 -1
  13. package/dist/Components/NcActionRadio.mjs +1 -1
  14. package/dist/Components/NcActionRouter.cjs +1 -1
  15. package/dist/Components/NcActionRouter.mjs +1 -1
  16. package/dist/Components/NcActionText.cjs +1 -1
  17. package/dist/Components/NcActionText.mjs +1 -1
  18. package/dist/Components/NcActionTextEditable.cjs +1 -1
  19. package/dist/Components/NcActionTextEditable.mjs +1 -1
  20. package/dist/Components/NcActions.cjs +1 -1
  21. package/dist/Components/NcActions.mjs +1 -1
  22. package/dist/Components/NcAppContent.cjs +1 -1
  23. package/dist/Components/NcAppContent.mjs +1 -1
  24. package/dist/Components/NcAppNavigation.cjs +1 -1
  25. package/dist/Components/NcAppNavigation.mjs +1 -1
  26. package/dist/Components/NcAppNavigationCaption.cjs +1 -1
  27. package/dist/Components/NcAppNavigationCaption.mjs +1 -1
  28. package/dist/Components/NcAppNavigationItem.cjs +1 -1
  29. package/dist/Components/NcAppNavigationItem.mjs +1 -1
  30. package/dist/Components/NcAppNavigationNewItem.cjs +1 -1
  31. package/dist/Components/NcAppNavigationNewItem.mjs +1 -1
  32. package/dist/Components/NcAppNavigationSettings.cjs +1 -1
  33. package/dist/Components/NcAppNavigationSettings.mjs +1 -1
  34. package/dist/Components/NcAppNavigationToggle.cjs +1 -1
  35. package/dist/Components/NcAppNavigationToggle.mjs +1 -1
  36. package/dist/Components/NcAppSettingsDialog.cjs +1 -1
  37. package/dist/Components/NcAppSettingsDialog.mjs +1 -1
  38. package/dist/Components/NcAppSidebar.cjs +1 -1
  39. package/dist/Components/NcAppSidebar.mjs +1 -1
  40. package/dist/Components/NcAppSidebarTab.cjs +3 -3
  41. package/dist/Components/NcAppSidebarTab.cjs.map +1 -1
  42. package/dist/Components/NcAppSidebarTab.mjs +5 -5
  43. package/dist/Components/NcAppSidebarTab.mjs.map +1 -1
  44. package/dist/Components/NcAvatar.cjs +1 -1
  45. package/dist/Components/NcAvatar.mjs +1 -1
  46. package/dist/Components/NcBreadcrumb.cjs +1 -1
  47. package/dist/Components/NcBreadcrumb.mjs +1 -1
  48. package/dist/Components/NcBreadcrumbs.cjs +1 -1
  49. package/dist/Components/NcBreadcrumbs.mjs +1 -1
  50. package/dist/Components/NcCheckboxRadioSwitch.cjs +1 -1
  51. package/dist/Components/NcCheckboxRadioSwitch.mjs +1 -1
  52. package/dist/Components/NcColorPicker.cjs +1 -1
  53. package/dist/Components/NcColorPicker.mjs +1 -1
  54. package/dist/Components/NcContent.cjs +1 -1
  55. package/dist/Components/NcContent.mjs +1 -1
  56. package/dist/Components/NcDashboardWidget.cjs +1 -1
  57. package/dist/Components/NcDashboardWidget.mjs +1 -1
  58. package/dist/Components/NcDashboardWidgetItem.cjs +1 -1
  59. package/dist/Components/NcDashboardWidgetItem.mjs +1 -1
  60. package/dist/Components/NcDateTime.cjs +1 -1
  61. package/dist/Components/NcDateTime.mjs +1 -1
  62. package/dist/Components/NcDateTimePicker.cjs +2 -2
  63. package/dist/Components/NcDateTimePicker.mjs +4 -4
  64. package/dist/Components/NcDateTimePickerNative.cjs +1 -1
  65. package/dist/Components/NcDateTimePickerNative.mjs +1 -1
  66. package/dist/Components/NcEmojiPicker.cjs +1 -1
  67. package/dist/Components/NcEmojiPicker.mjs +1 -1
  68. package/dist/Components/NcHeaderMenu.cjs +1 -1
  69. package/dist/Components/NcHeaderMenu.mjs +1 -1
  70. package/dist/Components/NcListItem.cjs +1 -1
  71. package/dist/Components/NcListItem.mjs +1 -1
  72. package/dist/Components/NcListItemIcon.cjs +1 -1
  73. package/dist/Components/NcListItemIcon.mjs +1 -1
  74. package/dist/Components/NcModal.cjs +1 -1
  75. package/dist/Components/NcModal.mjs +3 -3
  76. package/dist/Components/NcPasswordField.cjs +1 -1
  77. package/dist/Components/NcPasswordField.mjs +1 -1
  78. package/dist/Components/NcRelatedResourcesPanel.cjs +1 -1
  79. package/dist/Components/NcRelatedResourcesPanel.mjs +1 -1
  80. package/dist/Components/NcRichContenteditable.cjs +1 -1
  81. package/dist/Components/NcRichContenteditable.mjs +2 -2
  82. package/dist/Components/NcRichText.cjs +1 -1
  83. package/dist/Components/NcRichText.mjs +3 -3
  84. package/dist/Components/NcSelect.cjs +1 -1
  85. package/dist/Components/NcSelect.mjs +1 -1
  86. package/dist/Components/NcSelectTags.cjs +1 -1
  87. package/dist/Components/NcSelectTags.mjs +1 -1
  88. package/dist/Components/NcSettingsInputText.cjs +1 -1
  89. package/dist/Components/NcSettingsInputText.mjs +1 -1
  90. package/dist/Components/NcSettingsSection.cjs +1 -1
  91. package/dist/Components/NcSettingsSection.mjs +1 -1
  92. package/dist/Components/NcSettingsSelectGroup.cjs +1 -1
  93. package/dist/Components/NcSettingsSelectGroup.mjs +1 -1
  94. package/dist/Components/NcTextField.cjs +1 -1
  95. package/dist/Components/NcTextField.mjs +1 -1
  96. package/dist/Components/NcTimezonePicker.cjs +1 -1
  97. package/dist/Components/NcTimezonePicker.mjs +1 -1
  98. package/dist/Components/NcUserBubble.cjs +1 -1
  99. package/dist/Components/NcUserBubble.mjs +1 -1
  100. package/dist/Components/NcUserStatusIcon.cjs +1 -1
  101. package/dist/Components/NcUserStatusIcon.mjs +1 -1
  102. package/dist/Functions/usernameToColor.cjs +1 -1
  103. package/dist/Functions/usernameToColor.mjs +1 -1
  104. package/dist/Mixins/richEditor.cjs +1 -1
  105. package/dist/Mixins/richEditor.mjs +1 -1
  106. package/dist/assets/{NcActions-mSL9fcPO.css → NcActions-4Gq5bZLW.css} +12 -12
  107. package/dist/assets/{NcAppNavigationItem-n-wauJE7.css → NcAppNavigationItem-caMsw_N_.css} +14 -7
  108. package/dist/assets/{NcAppNavigationNewItem-MQBvffq9.css → NcAppNavigationNewItem-ue-H4LQY.css} +14 -7
  109. package/dist/assets/{NcAppSidebar-iU8Zp4Qk.css → NcAppSidebar-YHd7DpMW.css} +44 -44
  110. package/dist/assets/{NcAppSidebarTab-Phau6edJ.css → NcAppSidebarTab-FywbKxqo.css} +4 -4
  111. package/dist/assets/{NcDateTimePicker-RY_Hm2sB.css → NcDateTimePicker-rixdCL1X.css} +10 -10
  112. package/dist/assets/{NcHeaderMenu-06vdn4tC.css → NcHeaderMenu-Srn5iXdL.css} +14 -15
  113. package/dist/assets/NcListItem-5XAhBDJv.css +165 -0
  114. package/dist/assets/{NcMentionBubble-2OXF_uEJ.css → NcMentionBubble-YYl1ib_F.css} +9 -9
  115. package/dist/assets/{NcRichContenteditable-j9edXOEH.css → NcRichContenteditable-WQVknpPy.css} +72 -80
  116. package/dist/assets/{referencePickerModal-iy5QSWj6.css → referencePickerModal-yucfxaTX.css} +65 -65
  117. package/dist/chunks/{GenColors-OoWIPB3C.mjs → GenColors-wNwbCHuq.mjs} +1 -1
  118. package/dist/chunks/{GenColors-OoWIPB3C.mjs.map → GenColors-wNwbCHuq.mjs.map} +1 -1
  119. package/dist/chunks/{GenColors-gc0oVgC_.cjs → GenColors-zPMSiY0e.cjs} +1 -1
  120. package/dist/chunks/{GenColors-gc0oVgC_.cjs.map → GenColors-zPMSiY0e.cjs.map} +1 -1
  121. package/dist/chunks/{NcActionButtonGroup-D49ovBAN.mjs → NcActionButtonGroup-A5Ixaw5n.mjs} +1 -1
  122. package/dist/chunks/{NcActionButtonGroup-D49ovBAN.mjs.map → NcActionButtonGroup-A5Ixaw5n.mjs.map} +1 -1
  123. package/dist/chunks/{NcActionButtonGroup-hpwif0u3.cjs → NcActionButtonGroup-HIUn669C.cjs} +1 -1
  124. package/dist/chunks/{NcActionButtonGroup-hpwif0u3.cjs.map → NcActionButtonGroup-HIUn669C.cjs.map} +1 -1
  125. package/dist/chunks/{NcActionInput-cyxUHqTr.mjs → NcActionInput-BN9rIyI8.mjs} +5 -5
  126. package/dist/chunks/{NcActionInput-cyxUHqTr.mjs.map → NcActionInput-BN9rIyI8.mjs.map} +1 -1
  127. package/dist/chunks/{NcActionInput-m10Amrmc.cjs → NcActionInput-qeRQBGlt.cjs} +1 -1
  128. package/dist/chunks/{NcActionInput-m10Amrmc.cjs.map → NcActionInput-qeRQBGlt.cjs.map} +1 -1
  129. package/dist/chunks/{NcActions-bAnBpPrc.mjs → NcActions-5_igU-CH.mjs} +21 -21
  130. package/dist/chunks/{NcActions-bAnBpPrc.mjs.map → NcActions-5_igU-CH.mjs.map} +1 -1
  131. package/dist/chunks/{NcActions-z-BOuDhM.cjs → NcActions-JXnhQhum.cjs} +7 -7
  132. package/dist/chunks/{NcActions-z-BOuDhM.cjs.map → NcActions-JXnhQhum.cjs.map} +1 -1
  133. package/dist/chunks/{NcAppContent-t8UhBH3s.cjs → NcAppContent-Kq5fJ7_W.cjs} +1 -1
  134. package/dist/chunks/{NcAppContent-t8UhBH3s.cjs.map → NcAppContent-Kq5fJ7_W.cjs.map} +1 -1
  135. package/dist/chunks/{NcAppContent-y9KdCdfx.mjs → NcAppContent-WBzZJh-y.mjs} +1 -1
  136. package/dist/chunks/{NcAppContent-y9KdCdfx.mjs.map → NcAppContent-WBzZJh-y.mjs.map} +1 -1
  137. package/dist/chunks/{NcAppNavigation-PLg2oNao.cjs → NcAppNavigation-U6yaDk7k.cjs} +1 -1
  138. package/dist/chunks/{NcAppNavigation-PLg2oNao.cjs.map → NcAppNavigation-U6yaDk7k.cjs.map} +1 -1
  139. package/dist/chunks/{NcAppNavigation-hiPB8YDB.mjs → NcAppNavigation-n6P3oVZv.mjs} +1 -1
  140. package/dist/chunks/{NcAppNavigation-hiPB8YDB.mjs.map → NcAppNavigation-n6P3oVZv.mjs.map} +1 -1
  141. package/dist/chunks/{NcAppNavigationCaption-q8C0HzdM.mjs → NcAppNavigationCaption-2rUO5Mns.mjs} +1 -1
  142. package/dist/chunks/{NcAppNavigationCaption-q8C0HzdM.mjs.map → NcAppNavigationCaption-2rUO5Mns.mjs.map} +1 -1
  143. package/dist/chunks/{NcAppNavigationCaption-kKsAcV3F.cjs → NcAppNavigationCaption-JQWbmgdy.cjs} +1 -1
  144. package/dist/chunks/{NcAppNavigationCaption-kKsAcV3F.cjs.map → NcAppNavigationCaption-JQWbmgdy.cjs.map} +1 -1
  145. package/dist/chunks/{NcAppNavigationItem-WmNVPGgg.mjs → NcAppNavigationItem-A1yAdDNN.mjs} +4 -4
  146. package/dist/chunks/{NcAppNavigationItem-WmNVPGgg.mjs.map → NcAppNavigationItem-A1yAdDNN.mjs.map} +1 -1
  147. package/dist/chunks/{NcAppNavigationItem-BTI9BVOR.cjs → NcAppNavigationItem-Wb8gX-Ln.cjs} +2 -2
  148. package/dist/chunks/{NcAppNavigationItem-BTI9BVOR.cjs.map → NcAppNavigationItem-Wb8gX-Ln.cjs.map} +1 -1
  149. package/dist/chunks/{NcAppNavigationNewItem-bEBZNF2D.cjs → NcAppNavigationNewItem-TyGHutbG.cjs} +2 -2
  150. package/dist/chunks/{NcAppNavigationNewItem-bEBZNF2D.cjs.map → NcAppNavigationNewItem-TyGHutbG.cjs.map} +1 -1
  151. package/dist/chunks/{NcAppNavigationNewItem-iJxYhc8O.mjs → NcAppNavigationNewItem-t1ST1cif.mjs} +2 -2
  152. package/dist/chunks/{NcAppNavigationNewItem-iJxYhc8O.mjs.map → NcAppNavigationNewItem-t1ST1cif.mjs.map} +1 -1
  153. package/dist/chunks/{NcAppNavigationSettings-J7w9P7fI.cjs → NcAppNavigationSettings-VLa79G7w.cjs} +2 -2
  154. package/dist/chunks/{NcAppNavigationSettings-J7w9P7fI.cjs.map → NcAppNavigationSettings-VLa79G7w.cjs.map} +1 -1
  155. package/dist/chunks/{NcAppNavigationSettings--bavO03z.mjs → NcAppNavigationSettings-gwL_FqLN.mjs} +2 -2
  156. package/dist/chunks/{NcAppNavigationSettings--bavO03z.mjs.map → NcAppNavigationSettings-gwL_FqLN.mjs.map} +1 -1
  157. package/dist/chunks/{NcAppNavigationToggle-8FtmM4XU.mjs → NcAppNavigationToggle-KT8eqw6r.mjs} +1 -1
  158. package/dist/chunks/{NcAppNavigationToggle-8FtmM4XU.mjs.map → NcAppNavigationToggle-KT8eqw6r.mjs.map} +1 -1
  159. package/dist/chunks/{NcAppNavigationToggle-mMhLE73x.cjs → NcAppNavigationToggle-Wz0s35Rd.cjs} +1 -1
  160. package/dist/chunks/{NcAppNavigationToggle-mMhLE73x.cjs.map → NcAppNavigationToggle-Wz0s35Rd.cjs.map} +1 -1
  161. package/dist/chunks/{NcAppSettingsDialog-FqEZ3lXG.mjs → NcAppSettingsDialog-5t3vGpRF.mjs} +1 -1
  162. package/dist/chunks/{NcAppSettingsDialog-FqEZ3lXG.mjs.map → NcAppSettingsDialog-5t3vGpRF.mjs.map} +1 -1
  163. package/dist/chunks/{NcAppSettingsDialog-tN3bu9XO.cjs → NcAppSettingsDialog-h22q7l_7.cjs} +1 -1
  164. package/dist/chunks/{NcAppSettingsDialog-tN3bu9XO.cjs.map → NcAppSettingsDialog-h22q7l_7.cjs.map} +1 -1
  165. package/dist/chunks/{NcAppSidebar-J2XzL1WT.cjs → NcAppSidebar-rRNJnN-k.cjs} +59 -31
  166. package/dist/chunks/NcAppSidebar-rRNJnN-k.cjs.map +1 -0
  167. package/dist/chunks/{NcAppSidebar-lE3w-VIf.mjs → NcAppSidebar-tnHBPGbL.mjs} +139 -110
  168. package/dist/chunks/NcAppSidebar-tnHBPGbL.mjs.map +1 -0
  169. package/dist/chunks/{NcAvatar-MNJp-c9e.mjs → NcAvatar-xT3kz6mU.mjs} +5 -5
  170. package/dist/chunks/{NcAvatar-MNJp-c9e.mjs.map → NcAvatar-xT3kz6mU.mjs.map} +1 -1
  171. package/dist/chunks/{NcAvatar-OWW68uV3.cjs → NcAvatar-zTS9P1lK.cjs} +3 -3
  172. package/dist/chunks/{NcAvatar-OWW68uV3.cjs.map → NcAvatar-zTS9P1lK.cjs.map} +1 -1
  173. package/dist/chunks/{NcBreadcrumb-YClz0EeP.cjs → NcBreadcrumb-EGgIr-sA.cjs} +1 -1
  174. package/dist/chunks/{NcBreadcrumb-YClz0EeP.cjs.map → NcBreadcrumb-EGgIr-sA.cjs.map} +1 -1
  175. package/dist/chunks/{NcBreadcrumb-4FfLWUDX.mjs → NcBreadcrumb-on01ofev.mjs} +1 -1
  176. package/dist/chunks/{NcBreadcrumb-4FfLWUDX.mjs.map → NcBreadcrumb-on01ofev.mjs.map} +1 -1
  177. package/dist/chunks/{NcBreadcrumbs-Gln66w_d.mjs → NcBreadcrumbs-2l-mWYHl.mjs} +2 -2
  178. package/dist/chunks/{NcBreadcrumbs-Gln66w_d.mjs.map → NcBreadcrumbs-2l-mWYHl.mjs.map} +1 -1
  179. package/dist/chunks/{NcBreadcrumbs-SPqCk2mi.cjs → NcBreadcrumbs-hQmUGh48.cjs} +1 -1
  180. package/dist/chunks/{NcBreadcrumbs-SPqCk2mi.cjs.map → NcBreadcrumbs-hQmUGh48.cjs.map} +1 -1
  181. package/dist/chunks/{NcCheckboxRadioSwitch-R-zNvd7d.cjs → NcCheckboxRadioSwitch-7pZp_rWo.cjs} +2 -2
  182. package/dist/chunks/{NcCheckboxRadioSwitch-R-zNvd7d.cjs.map → NcCheckboxRadioSwitch-7pZp_rWo.cjs.map} +1 -1
  183. package/dist/chunks/{NcCheckboxRadioSwitch-paTuPXGc.mjs → NcCheckboxRadioSwitch-PlgK1zWr.mjs} +2 -2
  184. package/dist/chunks/{NcCheckboxRadioSwitch-paTuPXGc.mjs.map → NcCheckboxRadioSwitch-PlgK1zWr.mjs.map} +1 -1
  185. package/dist/chunks/{NcCheckboxRadioSwitch.vue_vue_type_style_index_0_scoped_2603be83_lang-Ooje-q1U.cjs → NcCheckboxRadioSwitch.vue_vue_type_style_index_0_scoped_2603be83_lang-kOW4T17e.cjs} +1 -1
  186. package/dist/chunks/NcCheckboxRadioSwitch.vue_vue_type_style_index_0_scoped_2603be83_lang-kOW4T17e.cjs.map +1 -0
  187. package/dist/chunks/{NcCheckboxRadioSwitch.vue_vue_type_style_index_0_scoped_2603be83_lang-l6e0b34w.mjs → NcCheckboxRadioSwitch.vue_vue_type_style_index_0_scoped_2603be83_lang-rJ3UZLGm.mjs} +1 -1
  188. package/dist/chunks/NcCheckboxRadioSwitch.vue_vue_type_style_index_0_scoped_2603be83_lang-rJ3UZLGm.mjs.map +1 -0
  189. package/dist/chunks/{NcColorPicker-ullH7CFZ.mjs → NcColorPicker-rPobPO3M.mjs} +2 -2
  190. package/dist/chunks/{NcColorPicker-ullH7CFZ.mjs.map → NcColorPicker-rPobPO3M.mjs.map} +1 -1
  191. package/dist/chunks/{NcColorPicker-vHHSVKQS.cjs → NcColorPicker-yr9Pfeem.cjs} +1 -1
  192. package/dist/chunks/{NcColorPicker-vHHSVKQS.cjs.map → NcColorPicker-yr9Pfeem.cjs.map} +1 -1
  193. package/dist/chunks/{NcContent-M_ZUbKIL.cjs → NcContent-BdekB7Zr.cjs} +1 -1
  194. package/dist/chunks/{NcContent-M_ZUbKIL.cjs.map → NcContent-BdekB7Zr.cjs.map} +1 -1
  195. package/dist/chunks/{NcContent-RGzECysY.mjs → NcContent-EGBAB5sy.mjs} +1 -1
  196. package/dist/chunks/{NcContent-RGzECysY.mjs.map → NcContent-EGBAB5sy.mjs.map} +1 -1
  197. package/dist/chunks/{NcDashboardWidget-mV9UTaUo.cjs → NcDashboardWidget-QciRRvL4.cjs} +1 -1
  198. package/dist/chunks/{NcDashboardWidget-mV9UTaUo.cjs.map → NcDashboardWidget-QciRRvL4.cjs.map} +1 -1
  199. package/dist/chunks/{NcDashboardWidget-KMrDOCQC.mjs → NcDashboardWidget-ogqyHahY.mjs} +3 -3
  200. package/dist/chunks/{NcDashboardWidget-KMrDOCQC.mjs.map → NcDashboardWidget-ogqyHahY.mjs.map} +1 -1
  201. package/dist/chunks/{NcDashboardWidgetItem-_dvqhu7z.cjs → NcDashboardWidgetItem-mIPkPR7r.cjs} +1 -1
  202. package/dist/chunks/{NcDashboardWidgetItem-_dvqhu7z.cjs.map → NcDashboardWidgetItem-mIPkPR7r.cjs.map} +1 -1
  203. package/dist/chunks/{NcDashboardWidgetItem-Hg805JCn.mjs → NcDashboardWidgetItem-wuUHTeLl.mjs} +2 -2
  204. package/dist/chunks/{NcDashboardWidgetItem-Hg805JCn.mjs.map → NcDashboardWidgetItem-wuUHTeLl.mjs.map} +1 -1
  205. package/dist/chunks/{NcDateTime-t_L5Vf2V.mjs → NcDateTime-UCw1o96E.mjs} +1 -1
  206. package/dist/chunks/{NcDateTime-t_L5Vf2V.mjs.map → NcDateTime-UCw1o96E.mjs.map} +1 -1
  207. package/dist/chunks/{NcDateTime-TRJPnoyx.cjs → NcDateTime-hyWStpUj.cjs} +1 -1
  208. package/dist/chunks/{NcDateTime-TRJPnoyx.cjs.map → NcDateTime-hyWStpUj.cjs.map} +1 -1
  209. package/dist/chunks/{NcEmojiPicker-t9ZKXOeE.mjs → NcEmojiPicker-O0EAGlkS.mjs} +4 -4
  210. package/dist/chunks/{NcEmojiPicker-t9ZKXOeE.mjs.map → NcEmojiPicker-O0EAGlkS.mjs.map} +1 -1
  211. package/dist/chunks/{NcEmojiPicker-SiFuLrOy.cjs → NcEmojiPicker-xzt2RvDK.cjs} +1 -1
  212. package/dist/chunks/{NcEmojiPicker-SiFuLrOy.cjs.map → NcEmojiPicker-xzt2RvDK.cjs.map} +1 -1
  213. package/dist/chunks/{NcHeaderMenu-BSi8E43v.cjs → NcHeaderMenu-0d6eqre6.cjs} +6 -6
  214. package/dist/chunks/{NcHeaderMenu-Vytc8Eqg.mjs.map → NcHeaderMenu-0d6eqre6.cjs.map} +1 -1
  215. package/dist/chunks/{NcHeaderMenu-Vytc8Eqg.mjs → NcHeaderMenu-91qMsRIw.mjs} +3 -3
  216. package/dist/chunks/{NcHeaderMenu-BSi8E43v.cjs.map → NcHeaderMenu-91qMsRIw.mjs.map} +1 -1
  217. package/dist/chunks/{NcInputConfirmCancel-QI-5lWEZ.cjs → NcInputConfirmCancel-tvpFnpKT.cjs} +1 -1
  218. package/dist/chunks/{NcInputConfirmCancel-QI-5lWEZ.cjs.map → NcInputConfirmCancel-tvpFnpKT.cjs.map} +1 -1
  219. package/dist/chunks/{NcInputConfirmCancel-iPOBMuwq.mjs → NcInputConfirmCancel-z3ANO-1N.mjs} +1 -1
  220. package/dist/chunks/{NcInputConfirmCancel-iPOBMuwq.mjs.map → NcInputConfirmCancel-z3ANO-1N.mjs.map} +1 -1
  221. package/dist/chunks/{NcListItem-J1Ru_eFH.cjs → NcListItem-RDF4Yv0n.cjs} +30 -47
  222. package/dist/chunks/NcListItem-RDF4Yv0n.cjs.map +1 -0
  223. package/dist/chunks/{NcListItem-m2T3a1c4.mjs → NcListItem-_PBHug1k.mjs} +34 -51
  224. package/dist/chunks/NcListItem-_PBHug1k.mjs.map +1 -0
  225. package/dist/chunks/{NcListItemIcon-aE0JNfCX.cjs → NcListItemIcon-BnoIbVbD.cjs} +2 -2
  226. package/dist/chunks/{NcListItemIcon-aE0JNfCX.cjs.map → NcListItemIcon-BnoIbVbD.cjs.map} +1 -1
  227. package/dist/chunks/{NcListItemIcon-RHDhF_NC.mjs → NcListItemIcon-rqgXledP.mjs} +2 -2
  228. package/dist/chunks/{NcListItemIcon-RHDhF_NC.mjs.map → NcListItemIcon-rqgXledP.mjs.map} +1 -1
  229. package/dist/chunks/{NcPasswordField-h__iqTKL.mjs → NcPasswordField-EbKN3MlL.mjs} +1 -1
  230. package/dist/chunks/{NcPasswordField-h__iqTKL.mjs.map → NcPasswordField-EbKN3MlL.mjs.map} +1 -1
  231. package/dist/chunks/{NcPasswordField-rgZThnoq.cjs → NcPasswordField-IkBZCjOy.cjs} +1 -1
  232. package/dist/chunks/{NcPasswordField-rgZThnoq.cjs.map → NcPasswordField-IkBZCjOy.cjs.map} +1 -1
  233. package/dist/chunks/{NcRelatedResourcesPanel-DCGxBHHT.mjs → NcRelatedResourcesPanel-EDvgZgjQ.mjs} +1 -1
  234. package/dist/chunks/{NcRelatedResourcesPanel-DCGxBHHT.mjs.map → NcRelatedResourcesPanel-EDvgZgjQ.mjs.map} +1 -1
  235. package/dist/chunks/{NcRelatedResourcesPanel-u1ob1njl.cjs → NcRelatedResourcesPanel-f2UeB_6X.cjs} +1 -1
  236. package/dist/chunks/{NcRelatedResourcesPanel-u1ob1njl.cjs.map → NcRelatedResourcesPanel-f2UeB_6X.cjs.map} +1 -1
  237. package/dist/chunks/{NcRichContenteditable-_Ac_ZEfF.mjs → NcRichContenteditable-glkLWE43.mjs} +267 -168
  238. package/dist/chunks/NcRichContenteditable-glkLWE43.mjs.map +1 -0
  239. package/dist/chunks/{NcRichContenteditable-03_DWRDq.cjs → NcRichContenteditable-xcoJkj3I.cjs} +202 -103
  240. package/dist/chunks/NcRichContenteditable-xcoJkj3I.cjs.map +1 -0
  241. package/dist/chunks/{NcRichText-Qh1uk4U8.cjs → NcRichText-TdyEC_z7.cjs} +2 -2
  242. package/dist/chunks/{NcRichText-Qh1uk4U8.cjs.map → NcRichText-TdyEC_z7.cjs.map} +1 -1
  243. package/dist/chunks/{NcRichText-4Y574QZM.mjs → NcRichText-lyvuLvpr.mjs} +3 -3
  244. package/dist/chunks/{NcRichText-4Y574QZM.mjs.map → NcRichText-lyvuLvpr.mjs.map} +1 -1
  245. package/dist/chunks/{NcSelect-DzZqm1fn.mjs → NcSelect-2ClmJ8jJ.mjs} +3 -3
  246. package/dist/chunks/{NcSelect-BnTLFd27.cjs.map → NcSelect-2ClmJ8jJ.mjs.map} +1 -1
  247. package/dist/chunks/{NcSelect-BnTLFd27.cjs → NcSelect-SlL-Y8Qz.cjs} +6 -6
  248. package/dist/chunks/{NcSelect-DzZqm1fn.mjs.map → NcSelect-SlL-Y8Qz.cjs.map} +1 -1
  249. package/dist/chunks/{NcSelectTags-PgYBpBfS.cjs → NcSelectTags-FKigJPco.cjs} +1 -1
  250. package/dist/chunks/{NcSelectTags-PgYBpBfS.cjs.map → NcSelectTags-FKigJPco.cjs.map} +1 -1
  251. package/dist/chunks/{NcSelectTags-qBzjNabg.mjs → NcSelectTags-TC2UmbfI.mjs} +2 -2
  252. package/dist/chunks/{NcSelectTags-qBzjNabg.mjs.map → NcSelectTags-TC2UmbfI.mjs.map} +1 -1
  253. package/dist/chunks/{NcSettingsInputText-FH_6k117.cjs → NcSettingsInputText-0K3HYGJr.cjs} +1 -1
  254. package/dist/chunks/{NcSettingsInputText-FH_6k117.cjs.map → NcSettingsInputText-0K3HYGJr.cjs.map} +1 -1
  255. package/dist/chunks/{NcSettingsInputText-DROaqnIE.mjs → NcSettingsInputText-Pz6fV7At.mjs} +1 -1
  256. package/dist/chunks/{NcSettingsInputText-DROaqnIE.mjs.map → NcSettingsInputText-Pz6fV7At.mjs.map} +1 -1
  257. package/dist/chunks/{NcSettingsSection-pxZK64xe.mjs → NcSettingsSection-CRmU7GLC.mjs} +1 -1
  258. package/dist/chunks/{NcSettingsSection-pxZK64xe.mjs.map → NcSettingsSection-CRmU7GLC.mjs.map} +1 -1
  259. package/dist/chunks/{NcSettingsSection-HGZQAB56.cjs → NcSettingsSection-IbUOeZ-e.cjs} +1 -1
  260. package/dist/chunks/{NcSettingsSection-HGZQAB56.cjs.map → NcSettingsSection-IbUOeZ-e.cjs.map} +1 -1
  261. package/dist/chunks/{NcSettingsSelectGroup-NtqYZTN-.mjs → NcSettingsSelectGroup-Bcai5uHx.mjs} +2 -2
  262. package/dist/chunks/{NcSettingsSelectGroup-NtqYZTN-.mjs.map → NcSettingsSelectGroup-Bcai5uHx.mjs.map} +1 -1
  263. package/dist/chunks/{NcSettingsSelectGroup-d0wrSLXq.cjs → NcSettingsSelectGroup-fOU9O4VD.cjs} +1 -1
  264. package/dist/chunks/{NcSettingsSelectGroup-d0wrSLXq.cjs.map → NcSettingsSelectGroup-fOU9O4VD.cjs.map} +1 -1
  265. package/dist/chunks/{NcTextField-RnMWfagW.mjs → NcTextField-NnW31cA4.mjs} +1 -1
  266. package/dist/chunks/{NcTextField-RnMWfagW.mjs.map → NcTextField-NnW31cA4.mjs.map} +1 -1
  267. package/dist/chunks/{NcTextField-2P7HaQ-i.cjs → NcTextField-eclRKl_B.cjs} +1 -1
  268. package/dist/chunks/{NcTextField-2P7HaQ-i.cjs.map → NcTextField-eclRKl_B.cjs.map} +1 -1
  269. package/dist/chunks/{NcTimezonePicker-HvUUs7VK.mjs → NcTimezonePicker-DDce-mch.mjs} +2 -2
  270. package/dist/chunks/{NcTimezonePicker-HvUUs7VK.mjs.map → NcTimezonePicker-DDce-mch.mjs.map} +1 -1
  271. package/dist/chunks/{NcTimezonePicker-98XoQsZ0.cjs → NcTimezonePicker-Dv6pIP9O.cjs} +1 -1
  272. package/dist/chunks/{NcTimezonePicker-98XoQsZ0.cjs.map → NcTimezonePicker-Dv6pIP9O.cjs.map} +1 -1
  273. package/dist/chunks/{NcUserBubble-pCJK4AXS.cjs → NcUserBubble-027_C0cM.cjs} +1 -1
  274. package/dist/chunks/{NcUserBubble-pCJK4AXS.cjs.map → NcUserBubble-027_C0cM.cjs.map} +1 -1
  275. package/dist/chunks/{NcUserBubble-y-RdfxGU.mjs → NcUserBubble-9StjszDh.mjs} +1 -1
  276. package/dist/chunks/{NcUserBubble-y-RdfxGU.mjs.map → NcUserBubble-9StjszDh.mjs.map} +1 -1
  277. package/dist/chunks/{NcUserStatusIcon-iczxs1an.cjs → NcUserStatusIcon-79RsINrv.cjs} +1 -1
  278. package/dist/chunks/{NcUserStatusIcon-iczxs1an.cjs.map → NcUserStatusIcon-79RsINrv.cjs.map} +1 -1
  279. package/dist/chunks/{NcUserStatusIcon-Wwtp8zH3.mjs → NcUserStatusIcon-pRUzQidI.mjs} +1 -1
  280. package/dist/chunks/{NcUserStatusIcon-Wwtp8zH3.mjs.map → NcUserStatusIcon-pRUzQidI.mjs.map} +1 -1
  281. package/dist/chunks/{ScopeComponent-3zN8-DXa.mjs → ScopeComponent-hYwaRplQ.mjs} +3 -3
  282. package/dist/chunks/{ScopeComponent-3zN8-DXa.mjs.map → ScopeComponent-hYwaRplQ.mjs.map} +1 -1
  283. package/dist/chunks/{ScopeComponent-_Qe2Qn0v.cjs → ScopeComponent-qBzpvxit.cjs} +1 -1
  284. package/dist/chunks/{ScopeComponent-_Qe2Qn0v.cjs.map → ScopeComponent-qBzpvxit.cjs.map} +1 -1
  285. package/dist/chunks/_l10n-FmsZpnE4.mjs +66 -0
  286. package/dist/chunks/_l10n-FmsZpnE4.mjs.map +1 -0
  287. package/dist/chunks/_l10n-Od-4xzJA.cjs +64 -0
  288. package/dist/chunks/_l10n-Od-4xzJA.cjs.map +1 -0
  289. package/dist/chunks/{actionGlobal-_f-PhW84.cjs → actionGlobal-SGFis4LZ.cjs} +1 -1
  290. package/dist/chunks/{actionGlobal-ejpd0zqm.mjs.map → actionGlobal-SGFis4LZ.cjs.map} +1 -1
  291. package/dist/chunks/{actionGlobal-ejpd0zqm.mjs → actionGlobal-fRayfdEK.mjs} +1 -1
  292. package/dist/chunks/{actionGlobal-_f-PhW84.cjs.map → actionGlobal-fRayfdEK.mjs.map} +1 -1
  293. package/dist/chunks/{actionText-AoAs4kqP.mjs → actionText-bMy_49i8.mjs} +1 -1
  294. package/dist/chunks/{actionText-AoAs4kqP.mjs.map → actionText-bMy_49i8.mjs.map} +1 -1
  295. package/dist/chunks/{actionText-pGrMQtZ3.cjs → actionText-nj1gFMEY.cjs} +1 -1
  296. package/dist/chunks/{actionText-pGrMQtZ3.cjs.map → actionText-nj1gFMEY.cjs.map} +1 -1
  297. package/dist/chunks/{index-U21dQVa7.cjs → index-5TyVc_TT.cjs} +29 -16
  298. package/dist/chunks/index-5TyVc_TT.cjs.map +1 -0
  299. package/dist/chunks/{index-n2q3iT69.mjs → index-xnq0-IMW.mjs} +26 -13
  300. package/dist/chunks/index-xnq0-IMW.mjs.map +1 -0
  301. package/dist/chunks/{referencePickerModal-Cnscu3tI.cjs → referencePickerModal-cy4_Q5bu.cjs} +2 -2
  302. package/dist/chunks/{referencePickerModal-Cnscu3tI.cjs.map → referencePickerModal-cy4_Q5bu.cjs.map} +1 -1
  303. package/dist/chunks/{referencePickerModal-oI8JiWDV.mjs → referencePickerModal-wDsYQHxX.mjs} +4 -4
  304. package/dist/chunks/{referencePickerModal-oI8JiWDV.mjs.map → referencePickerModal-wDsYQHxX.mjs.map} +1 -1
  305. package/dist/chunks/{usernameToColor-nIJ4GOsW.cjs → usernameToColor-D5bplyWJ.cjs} +1 -1
  306. package/dist/chunks/{usernameToColor-nIJ4GOsW.cjs.map → usernameToColor-D5bplyWJ.cjs.map} +1 -1
  307. package/dist/chunks/{usernameToColor-HiPZbTLh.mjs → usernameToColor-xm3MLiw4.mjs} +1 -1
  308. package/dist/chunks/{usernameToColor-HiPZbTLh.mjs.map → usernameToColor-xm3MLiw4.mjs.map} +1 -1
  309. package/dist/index.cjs +4 -4
  310. package/dist/index.mjs +43 -43
  311. package/package.json +3 -3
  312. package/dist/assets/NcListItem-6sL-frKJ.css +0 -165
  313. package/dist/chunks/NcAppSidebar-J2XzL1WT.cjs.map +0 -1
  314. package/dist/chunks/NcAppSidebar-lE3w-VIf.mjs.map +0 -1
  315. package/dist/chunks/NcCheckboxRadioSwitch.vue_vue_type_style_index_0_scoped_2603be83_lang-Ooje-q1U.cjs.map +0 -1
  316. package/dist/chunks/NcCheckboxRadioSwitch.vue_vue_type_style_index_0_scoped_2603be83_lang-l6e0b34w.mjs.map +0 -1
  317. package/dist/chunks/NcListItem-J1Ru_eFH.cjs.map +0 -1
  318. package/dist/chunks/NcListItem-m2T3a1c4.mjs.map +0 -1
  319. package/dist/chunks/NcRichContenteditable-03_DWRDq.cjs.map +0 -1
  320. package/dist/chunks/NcRichContenteditable-_Ac_ZEfF.mjs.map +0 -1
  321. package/dist/chunks/_l10n--bDJ_Qyj.mjs +0 -66
  322. package/dist/chunks/_l10n--bDJ_Qyj.mjs.map +0 -1
  323. package/dist/chunks/_l10n-mEcF7TYU.cjs +0 -64
  324. package/dist/chunks/_l10n-mEcF7TYU.cjs.map +0 -1
  325. package/dist/chunks/index-U21dQVa7.cjs.map +0 -1
  326. package/dist/chunks/index-n2q3iT69.mjs.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NcRichContenteditable-glkLWE43.mjs","sources":["../../src/components/NcRichContenteditable/NcAutoCompleteResult.vue","../../src/components/NcRichContenteditable/NcRichContenteditable.vue"],"sourcesContent":["<!--\n - @copyright Copyright (c) 2020 John Molakvoæ <skjnldsv@protonmail.com>\n -\n - @author John Molakvoæ <skjnldsv@protonmail.com>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n-->\n\n<template>\n\t<div class=\"autocomplete-result\">\n\t\t<!-- Avatar or icon -->\n\t\t<div :class=\"[icon, `autocomplete-result__icon--${avatarUrl ? 'with-avatar' : ''}`]\"\n\t\t\t:style=\"avatarUrl ? { backgroundImage: `url(${avatarUrl})` } : null \"\n\t\t\tclass=\"autocomplete-result__icon\">\n\t\t\t<span v-if=\"status.icon\"\n\t\t\t\tclass=\"autocomplete-result__status autocomplete-result__status--icon\">\n\t\t\t\t{{ status && status.icon || '' }}\n\t\t\t</span>\n\t\t\t<NcUserStatusIcon v-else-if=\"status.status && status.status !== 'offline'\"\n\t\t\t\tclass=\"autocomplete-result__status\"\n\t\t\t\t:status=\"status.status\" />\n\t\t</div>\n\n\t\t<!-- Label and subline -->\n\t\t<span class=\"autocomplete-result__content\">\n\t\t\t<span class=\"autocomplete-result__title\" :title=\"labelWithFallback\">\n\t\t\t\t{{ labelWithFallback }}\n\t\t\t</span>\n\t\t\t<span v-if=\"subline\" class=\"autocomplete-result__subline\">\n\t\t\t\t{{ subline }}\n\t\t\t</span>\n\t\t</span>\n\t</div>\n</template>\n\n<script>\nimport { generateUrl } from '@nextcloud/router'\n\nimport NcUserStatusIcon from '../NcUserStatusIcon/index.js'\n\nexport default {\n\tname: 'NcAutoCompleteResult',\n\n\tcomponents: {\n\t\tNcUserStatusIcon,\n\t},\n\n\tprops: {\n\t\t/**\n\t\t * @deprecated Use `label` instead\n\t\t */\n\t\ttitle: {\n\t\t\ttype: String,\n\t\t\trequired: false,\n\t\t\tdefault: null,\n\t\t},\n\t\tlabel: {\n\t\t\ttype: String,\n\t\t\trequired: false,\n\t\t\tdefault: null,\n\t\t},\n\t\tsubline: {\n\t\t\ttype: String,\n\t\t\tdefault: null,\n\t\t},\n\t\tid: {\n\t\t\ttype: String,\n\t\t\tdefault: null,\n\t\t},\n\t\ticon: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\ticonUrl: {\n\t\t\ttype: String,\n\t\t\tdefault: null,\n\t\t},\n\t\tsource: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tstatus: {\n\t\t\ttype: [Object, Array],\n\t\t\tdefault: () => ({}),\n\t\t},\n\t},\n\tcomputed: {\n\t\tavatarUrl() {\n\t\t\tif (this.iconUrl) {\n\t\t\t\treturn this.iconUrl\n\t\t\t}\n\n\t\t\treturn this.id && this.source === 'users'\n\t\t\t\t? this.getAvatarUrl(this.id, 44)\n\t\t\t\t: null\n\t\t},\n\t\t// For backwards compatibility\n\t\tlabelWithFallback() {\n\t\t\treturn this.label || this.title\n\t\t},\n\t},\n\n\tmethods: {\n\t\tgetAvatarUrl(user, size) {\n\t\t\treturn generateUrl('/avatar/{user}/{size}', {\n\t\t\t\tuser,\n\t\t\t\tsize,\n\t\t\t})\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.autocomplete-result {\n\tdisplay: flex;\n\theight: var(--default-clickable-area);\n\tpadding: var(--default-grid-baseline) 0;\n\n\t&__icon {\n\t\tposition: relative;\n\t\tflex: 0 0 var(--default-clickable-area);\n\t\twidth: var(--default-clickable-area);\n\t\tmin-width: var(--default-clickable-area);\n\t\theight: var(--default-clickable-area);\n\t\tborder-radius: var(--default-clickable-area);\n\t\tbackground-color: var(--color-background-darker);\n\t\tbackground-repeat: no-repeat;\n\t\tbackground-position: center;\n\t\tbackground-size: contain;\n\t\t&--with-avatar {\n\t\t\tcolor: inherit;\n\t\t\tbackground-size: cover;\n\t\t}\n\t}\n\n\t&__status {\n\t\tbox-sizing: border-box;\n\t\tposition: absolute;\n\t\tright: -4px;\n\t\tbottom: -4px;\n\t\tmin-width: 18px;\n\t\tmin-height: 18px;\n\t\twidth: 18px;\n\t\theight: 18px;\n\t\tborder: 2px solid var(--color-main-background);\n\t\tborder-radius: 50%;\n\t\tbackground-color: var(--color-main-background);\n\t\tfont-size: var(--default-font-size);\n\t\tline-height: 15px;\n\t\tbackground-repeat: no-repeat;\n\t\tbackground-size: 16px;\n\t\tbackground-position: center;\n\n\t\t&--icon {\n\t\t\tborder: none;\n\t\t\tbackground-color: transparent;\n\t\t}\n\t}\n\n\t&__content {\n\t\tdisplay: flex;\n\t\tflex: 1 1 100%;\n\t\tflex-direction: column;\n\t\tjustify-content: center;\n\t\tmin-width: 0;\n\t\tpadding-left: calc(var(--default-grid-baseline) * 2);\n\t}\n\n\t&__title,\n\t&__subline {\n\t\twhite-space: nowrap;\n\t\toverflow: hidden;\n\t\ttext-overflow: ellipsis;\n\t}\n\n\t&__subline {\n\t\tcolor: var(--color-text-maxcontrast);\n\t}\n}\n\n</style>\n","<!--\n - @copyright Copyright (c) 2020 John Molakvoæ <skjnldsv@protonmail.com>\n -\n - @author John Molakvoæ <skjnldsv@protonmail.com>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n-->\n\n<docs>\n\n### General description\n\nThis component displays contenteditable div with automated `@` [at] autocompletion and `:` [colon] emoji autocompletion.\n\n### Examples\n\nTry mentioning user @Test01 or inserting emoji :smile\n\n```vue\n<template>\n\t<div>\n\t\t<NcRichContenteditable\n\t\t\tlabel=\"Write a comment\"\n\t\t\t:value.sync=\"message\"\n\t\t\t:auto-complete=\"autoComplete\"\n\t\t\t:maxlength=\"100\"\n\t\t\t:user-data=\"userData\"\n\t\t\t@submit=\"onSubmit\" />\n\t\t<br>\n\n\t\t<NcRichContenteditable\n\t\t\t:value.sync=\"message\"\n\t\t\t:auto-complete=\"autoComplete\"\n\t\t\t:maxlength=\"400\"\n\t\t\t:multiline=\"true\"\n\t\t\t:user-data=\"userData\"\n\t\t\t@submit=\"onSubmit\" />\n\n\t\t<h5>Output - raw</h5>\n\t\t{{ JSON.stringify(message) }}\n\n\t\t<h5>Output - preformatted</h5>\n\t\t<p class=\"pre-line\">{{ message }}</p>\n\n\t\t<h5>Output - in NcRichText with markdown support</h5>\n\t\t<NcRichText :text=\"text\" :arguments=\"userMentions\" autolink use-markdown />\n\t</div>\n</template>\n<script>\nexport default {\n\tdata() {\n\t\treturn {\n\t\t\tmessage: '**Lorem ipsum** dolor sit amet.',\n\t\t\t// You need to provide this for the inline mention to understand what to display or not.\n\t\t\t// Key should be a string with leading '@', like @Test02 or @\"Test Offline\"\n\t\t\tuserData: {\n\t\t\t\tTest01: {\n\t\t\t\t\ticon: 'icon-user',\n\t\t\t\t\tid: 'Test01',\n\t\t\t\t\tlabel: 'Test01',\n\t\t\t\t\tsource: 'users',\n\t\t\t\t\tprimary: true,\n\t\t\t\t},\n\t\t\t\tTest02: {\n\t\t\t\t\ticon: 'icon-user',\n\t\t\t\t\tid: 'Test02',\n\t\t\t\t\tlabel: 'Test02',\n\t\t\t\t\tsource: 'users',\n\t\t\t\t\tstatus: {\n\t\t\t\t\t\tclearAt: null,\n\t\t\t\t\t\ticon: '🎡',\n\t\t\t\t\t\tmessage: 'Visiting London',\n\t\t\t\t\t\tstatus: 'away',\n\t\t\t\t\t},\n\t\t\t\t\tsubline: 'Visiting London',\n\t\t\t\t},\n\t\t\t\t'Test@User': {\n\t\t\t\t\ticon: 'icon-user',\n\t\t\t\t\tid: 'Test@User',\n\t\t\t\t\tlabel: 'Test 03',\n\t\t\t\t\tsource: 'users',\n\t\t\t\t\tstatus: {\n\t\t\t\t\t\tclearAt: null,\n\t\t\t\t\t\ticon: '🎡',\n\t\t\t\t\t\tmessage: 'Having space in my name',\n\t\t\t\t\t\tstatus: 'online',\n\t\t\t\t\t},\n\t\t\t\t\tsubline: 'Visiting London',\n\t\t\t\t},\n\t\t\t\t'Test Offline': {\n\t\t\t\t\ticon: 'icon-user',\n\t\t\t\t\tid: 'Test Offline',\n\t\t\t\t\tlabel: 'Test Offline',\n\t\t\t\t\tsource: 'users',\n\t\t\t\t\tstatus: {\n\t\t\t\t\t\tclearAt: null,\n\t\t\t\t\t\ticon: null,\n\t\t\t\t\t\tmessage: null,\n\t\t\t\t\t\tstatus: 'offline',\n\t\t\t\t\t},\n\t\t\t\t\tsubline: null,\n\t\t\t\t},\n\t\t\t\t'Test DND': {\n\t\t\t\t\ticon: 'icon-user',\n\t\t\t\t\tid: 'Test DND',\n\t\t\t\t\tlabel: 'Test DND',\n\t\t\t\t\tsource: 'users',\n\t\t\t\t\tstatus: {\n\t\t\t\t\t\tclearAt: null,\n\t\t\t\t\t\ticon: null,\n\t\t\t\t\t\tmessage: 'Out sick',\n\t\t\t\t\t\tstatus: 'dnd',\n\t\t\t\t\t},\n\t\t\t\t\tsubline: 'Out sick',\n\t\t\t\t},\n\t\t\t},\n\t\t\t// To display user bubbles in NcRichText, special format of data should be provided:\n\t\t\t// Key should be in curly brackets without '@' and ' ' symbols, like {user-2}\n\t\t\tuserMentions: {\n\t\t\t\t'user-1': {\n\t\t\t\t\tcomponent: 'NcUserBubble',\n\t\t\t\t\tprops: {\n\t\t\t\t\t\tdisplayName: 'Test01',\n\t\t\t\t\t\tuser: 'Test01',\n\t\t\t\t\t\tprimary: true,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t'user-2': {\n\t\t\t\t\tcomponent: 'NcUserBubble',\n\t\t\t\t\tprops: {\n\t\t\t\t\t\tdisplayName: 'Test02',\n\t\t\t\t\t\tuser: 'Test02',\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t'user-3': {\n\t\t\t\t\tcomponent: 'NcUserBubble',\n\t\t\t\t\tprops: {\n\t\t\t\t\t\tdisplayName: 'Test 03',\n\t\t\t\t\t\tuser: 'Test@User',\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t'user-4': {\n\t\t\t\t\tcomponent: 'NcUserBubble',\n\t\t\t\t\tprops: {\n\t\t\t\t\t\tdisplayName: 'Test Offline',\n\t\t\t\t\t\tuser: 'Test Offline',\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t'user-5': {\n\t\t\t\t\tcomponent: 'NcUserBubble',\n\t\t\t\t\tprops: {\n\t\t\t\t\t\tdisplayName: 'Test DND',\n\t\t\t\t\t\tuser: 'Test DND',\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t}\n\t\t}\n\t},\n\tcomputed: {\n\t\ttext() {\n\t\t\treturn this.message\n\t\t\t\t\t.replace('@Test01', '{user-1}')\n\t\t\t\t\t.replace('@Test02', '{user-2}')\n\t\t\t\t\t.replace('@Test@User', '{user-3}')\n\t\t\t\t\t.replace('@\"Test Offline\"', '{user-4}')\n\t\t\t\t\t.replace('@\"Test DND\"', '{user-5}')\n\t\t},\n\t},\n\tmethods: {\n\t\t/**\n\t\t* Do your own query to the autocompletion api.\n\t\t* The returned data bellow is a fake data example.\n\t\t* The callback expects the same format returned by the core/autocomplete/get ocs api endpoint!\n\t\t* @see userData example above\n\t\t*\n\t\t* @param {string} search the query\n\t\t* @param {Function} callback the callback to process the results with\n\t\t*/\n\t\tautoComplete(search, callback) {\n\t\t\tcallback(Object.values(this.userData))\n\t\t},\n\t\tonSubmit() {\n\t\t\talert(this.message)\n\t\t}\n\t}\n}\n</script>\n<style lang=\"scss\" scoped>\n\th5 {\n\t\tfont-weight: bold;\n\t\tmargin: 40px 0 20px 0;\n\t}\n\n\t.pre-line {\n\t\twhite-space: pre-line;\n\t}\n</style>\n```\n\n</docs>\n\n<template>\n\t<div class=\"rich-contenteditable\">\n\t\t<div :id=\"id\"\n\t\t\tref=\"contenteditable\"\n\t\t\tv-tooltip=\"tooltipString\"\n\t\t\t:class=\"{\n\t\t\t\t'rich-contenteditable__input--empty': isEmptyValue,\n\t\t\t\t'rich-contenteditable__input--multiline': multiline,\n\t\t\t\t'rich-contenteditable__input--has-label': label,\n\t\t\t\t'rich-contenteditable__input--overflow': isOverMaxlength,\n\t\t\t\t'rich-contenteditable__input--disabled': disabled,\n\t\t\t}\"\n\t\t\t:contenteditable=\"canEdit\"\n\t\t\t:aria-labelledby=\"label ? labelId : undefined\"\n\t\t\t:aria-placeholder=\"placeholder\"\n\t\t\taria-multiline=\"true\"\n\t\t\tclass=\"rich-contenteditable__input\"\n\t\t\trole=\"textbox\"\n\t\t\taria-haspopup=\"listbox\"\n\t\t\taria-autocomplete=\"inline\"\n\t\t\t:aria-controls=\"tributeId\"\n\t\t\t:aria-expanded=\"isAutocompleteOpen ? 'true' : 'false'\"\n\t\t\t:aria-activedescendant=\"autocompleteActiveId\"\n\t\t\tv-bind=\"$attrs\"\n\t\t\tv-on=\"listeners\"\n\t\t\t@focus=\"moveCursorToEnd\"\n\t\t\t@input=\"onInput\"\n\t\t\t@compositionstart=\"isComposing = true\"\n\t\t\t@compositionend=\"isComposing = false\"\n\t\t\t@keydown.delete=\"onDelete\"\n\t\t\t@keydown.enter.exact=\"onEnter\"\n\t\t\t@keydown.ctrl.enter.exact.stop.prevent=\"onCtrlEnter\"\n\t\t\t@paste=\"onPaste\"\n\t\t\t@keyup.stop.prevent.capture=\"onKeyUp\"\n\t\t\t@keydown.up.exact.stop=\"onTributeArrowKeyDown\"\n\t\t\t@keydown.down.exact.stop=\"onTributeArrowKeyDown\"\n\t\t\t@tribute-active-true=\"onTributeActive(true)\"\n\t\t\t@tribute-active-false=\"onTributeActive(false)\" />\n\t\t<div v-if=\"label\"\n\t\t\t:id=\"labelId\"\n\t\t\tclass=\"rich-contenteditable__label\">\n\t\t\t{{ label }}\n\t\t</div>\n\t</div>\n</template>\n\n<script>\nimport { t } from '../../l10n.js'\nimport NcAutoCompleteResult from './NcAutoCompleteResult.vue'\nimport richEditor from '../../mixins/richEditor/index.js'\nimport Tooltip from '../../directives/Tooltip/index.js'\nimport { emojiSearch, emojiAddRecent } from '../../functions/emoji/index.ts'\nimport { searchProvider, getLinkWithPicker } from '../NcRichText/index.js'\n\nimport Tribute from 'tributejs/dist/tribute.esm.js'\nimport debounce from 'debounce'\nimport stringLength from 'string-length'\nimport GenRandomId from '../../utils/GenRandomId.js'\n\n/**\n * Populate the list of text smiles we want to offer via Tribute.\n * We add the colon `:)` and colon-dash `:-)` version for each of them.\n */\nconst smilesCharacters = ['d', 'D', 'p', 'P', 's', 'S', 'x', 'X', ')', '(', '|', '/']\nconst textSmiles = []\nsmilesCharacters.forEach((char) => {\n\ttextSmiles.push(':' + char)\n\ttextSmiles.push(':-' + char)\n})\n\nexport default {\n\tname: 'NcRichContenteditable',\n\n\tdirectives: {\n\t\ttooltip: Tooltip,\n\t},\n\n\tmixins: [richEditor],\n\n\tinheritAttrs: false,\n\n\tprops: {\n\t\t/**\n\t\t * The ID attribute of the content editable\n\t\t */\n\t\tid: {\n\t\t\ttype: String,\n\t\t\tdefault: () => GenRandomId(7),\n\t\t},\n\n\t\t/**\n\t\t * Visual label of the contenteditable\n\t\t */\n\t\tlabel: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\n\t\tvalue: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t\trequired: true,\n\t\t},\n\n\t\tplaceholder: {\n\t\t\ttype: String,\n\t\t\tdefault: t('Write a message …'),\n\t\t},\n\n\t\tautoComplete: {\n\t\t\ttype: Function,\n\t\t\tdefault: () => [],\n\t\t},\n\n\t\tmenuContainer: {\n\t\t\ttype: Element,\n\t\t\tdefault: () => document.body,\n\t\t},\n\n\t\t/**\n\t\t * Make the contenteditable looks like a textarea or not.\n\t\t * Default looks like a single-line input.\n\t\t * This also handle the default enter/shift+enter behaviour.\n\t\t * if multiline, enter = newline; otherwise enter = submit\n\t\t * shift+enter always add a new line. ctrl+enter always submits\n\t\t */\n\t\tmultiline: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\n\t\t/**\n\t\t * Is the content editable ?\n\t\t */\n\t\tcontenteditable: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true,\n\t\t},\n\n\t\t/**\n\t\t * Disable the editing and show specific disabled design\n\t\t */\n\t\tdisabled: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\n\t\t/**\n\t\t * Max allowed length\n\t\t */\n\t\tmaxlength: {\n\t\t\ttype: Number,\n\t\t\tdefault: null,\n\t\t},\n\n\t\t/**\n\t\t * Enable or disable emoji autocompletion\n\t\t */\n\t\temojiAutocomplete: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true,\n\t\t},\n\n\t\t/**\n\t\t * Enable or disable link autocompletion\n\t\t */\n\t\tlinkAutocomplete: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true,\n\t\t},\n\t},\n\n\temits: [\n\t\t'submit',\n\t\t'paste',\n\t\t'update:value',\n\t\t'smart-picker-submit',\n\t],\n\n\tsetup() {\n\t\tconst uid = GenRandomId(5)\n\t\treturn {\n\t\t\t// Constants\n\t\t\tlabelId: `nc-rich-contenteditable-${uid}-label`,\n\t\t\ttributeId: `nc-rich-contenteditable-${uid}-tribute`,\n\t\t\t/**\n\t\t\t * Non-reactive property to store Tribute instance\n\t\t\t *\n\t\t\t * @type {import('tributejs').default | null}\n\t\t\t */\n\t\t\ttribute: null,\n\t\t\ttributeStyleMutationObserver: null,\n\t\t}\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\t// Represent the raw untrimmed text of the contenteditable\n\t\t\t// serves no other purpose than to check whether the\n\t\t\t// content is empty or not\n\t\t\tlocalValue: this.value,\n\n\t\t\t// Is in text composition session in IME\n\t\t\tisComposing: false,\n\n\t\t\t// Tribute autocomplete\n\t\t\tisAutocompleteOpen: false,\n\t\t\tautocompleteActiveId: undefined,\n\t\t\tisTributeIntegrationDone: false,\n\t\t}\n\t},\n\n\tcomputed: {\n\t\t/**\n\t\t * Is the current trimmed value empty?\n\t\t *\n\t\t * @return {boolean}\n\t\t */\n\t\tisEmptyValue() {\n\t\t\treturn !this.localValue || this.localValue.trim() === ''\n\t\t},\n\n\t\t/**\n\t\t * Is this Firefox? 🙄\n\t\t *\n\t\t * @return {boolean}\n\t\t */\n\t\tisFF() {\n\t\t\treturn !!navigator.userAgent.match(/firefox/i)\n\t\t},\n\n\t\t/**\n\t\t * Is the current value over maxlength?\n\t\t *\n\t\t * @return {boolean}\n\t\t */\n\t\tisOverMaxlength() {\n\t\t\tif (this.isEmptyValue || !this.maxlength) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\treturn stringLength(this.localValue) > this.maxlength\n\t\t},\n\n\t\t/**\n\t\t * Tooltip to show if characters count is over limit\n\t\t *\n\t\t * @return {string}\n\t\t */\n\t\ttooltipString() {\n\t\t\tif (!this.isOverMaxlength) {\n\t\t\t\treturn null\n\t\t\t}\n\t\t\treturn {\n\t\t\t\tcontent: t('Message limit of {count} characters reached', { count: this.maxlength }),\n\t\t\t\tshown: true,\n\t\t\t\ttrigger: 'manual',\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Edit is only allowed when contenteditableis true and disabled is false\n\t\t *\n\t\t * @return {boolean}\n\t\t */\n\t\tcanEdit() {\n\t\t\treturn this.contenteditable && !this.disabled\n\t\t},\n\n\t\t/**\n\t\t * Proxied native event handlers without custom event handlers\n\t\t *\n\t\t * @return {Record<string, Function>}\n\t\t */\n\t\tlisteners() {\n\t\t\t/**\n\t\t\t * All component's event handlers are set as native event handlers with by v-on directive.\n\t\t\t * The component also raised custom events manually by $emit for corresponding events.\n\t\t\t * As a result, it triggers handlers twice.\n\t\t\t * The v-on=\"listeners\" directive should only set proxied native events handler without custom events\n\t\t\t */\n\t\t\tconst listeners = { ...this.$listeners }\n\t\t\tdelete listeners.paste\n\t\t\treturn listeners\n\t\t},\n\n\t\t/**\n\t\t * Compute debounce function for the autocomplete function\n\t\t */\n\t\t debouncedAutoComplete() {\n\t\t\treturn debounce(async (search, callback) => {\n\t\t\t\tthis.autoComplete(search, callback)\n\t\t\t}, 100)\n\t\t},\n\t},\n\n\twatch: {\n\t\t/**\n\t\t * If the parent value change, we compare the plain text rendering\n\t\t * If it's different, we render everything and update the main content\n\t\t */\n\t\tvalue() {\n\t\t\tconst html = this.$refs.contenteditable.innerHTML\n\t\t\t// Compare trimmed versions to be safe\n\t\t\tif (this.value.trim() !== this.parseContent(html).trim()) {\n\t\t\t\tthis.updateContent(this.value)\n\t\t\t}\n\t\t},\n\t},\n\n\tmounted() {\n\t\tthis.initializeTribute()\n\n\t\t// Update default value\n\t\tthis.updateContent(this.value)\n\n\t\t// Removes the contenteditable attribute at first load if the prop is\n\t\t// set to false.\n\t\tthis.$refs.contenteditable.contentEditable = this.canEdit\n\t},\n\n\tbeforeDestroy() {\n\t\tif (this.tribute) {\n\t\t\tthis.tribute.detach(this.$refs.contenteditable)\n\t\t}\n\n\t\tif (this.tributeStyleMutationObserver) {\n\t\t\tthis.tributeStyleMutationObserver.disconnect()\n\t\t}\n\t},\n\n\tmethods: {\n\t\t/**\n\t\t * Focus the richContenteditable\n\t\t *\n\t\t * @public\n\t\t */\n\t\tfocus() {\n\t\t\tthis.$refs.contenteditable.focus()\n\t\t},\n\n\t\tinitializeTribute() {\n\t\t\tconst renderMenuItem = (content) => `<div id=\"nc-rich-contenteditable-tribute-item-${GenRandomId(5)}\" class=\"tribute-item\" role=\"option\">${content}</div>`\n\n\t\t\tconst tributesCollection = []\n\t\t\ttributesCollection.push({\n\t\t\t\t// Allow spaces in the middle of mentions\n\t\t\t\tallowSpaces: true,\n\t\t\t\tfillAttr: 'id',\n\t\t\t\t// Search against id and label (display name) (fallback to title for v8.0.0..8.6.1 compatibility)\n\t\t\t\tlookup: result => `${result.id} ${result.label ?? result.title}`,\n\t\t\t\t// Where to inject the menu popup\n\t\t\t\tmenuContainer: this.menuContainer,\n\t\t\t\t// Popup mention autocompletion templates\n\t\t\t\tmenuItemTemplate: item => renderMenuItem(this.renderComponentHtml(item.original, NcAutoCompleteResult)),\n\t\t\t\t// Hide if no results\n\t\t\t\tnoMatchTemplate: () => '<span class=\"hidden\"></span>',\n\t\t\t\t// Inner display of mentions\n\t\t\t\tselectTemplate: item => this.genSelectTemplate(item?.original?.id),\n\t\t\t\t// Autocompletion results\n\t\t\t\tvalues: this.debouncedAutoComplete,\n\t\t\t\t// Class added to the menu container\n\t\t\t\tcontainerClass: 'tribute-container tribute-container-autocomplete',\n\t\t\t\t// Class added to each list item\n\t\t\t\titemClass: 'tribute-container__item',\n\n\t\t\t})\n\n\t\t\tif (this.emojiAutocomplete) {\n\t\t\t\ttributesCollection.push({\n\t\t\t\t\ttrigger: ':',\n\t\t\t\t\t// Don't use the tribute search function at all\n\t\t\t\t\t// We pass search results as values (see below)\n\t\t\t\t\tlookup: (result, query) => query,\n\t\t\t\t\t// Where to inject the menu popup\n\t\t\t\t\tmenuContainer: this.menuContainer,\n\t\t\t\t\t// Popup mention autocompletion templates\n\t\t\t\t\tmenuItemTemplate: item => {\n\t\t\t\t\t\tif (textSmiles.includes(item.original)) {\n\t\t\t\t\t\t\t// Display the raw text string for :), :-D, … for non emoji results,\n\t\t\t\t\t\t\t// instead of trying to show an image and their name.\n\t\t\t\t\t\t\treturn item.original\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn renderMenuItem(`<span class=\"tribute-container-emoji__item__emoji\">${item.original.native}</span> :${item.original.short_name}`)\n\t\t\t\t\t},\n\t\t\t\t\t// Hide if no results\n\t\t\t\t\tnoMatchTemplate: () => t('No emoji found'),\n\t\t\t\t\t// Display raw emoji along with its name\n\t\t\t\t\tselectTemplate: (item) => {\n\t\t\t\t\t\tif (textSmiles.includes(item.original)) {\n\t\t\t\t\t\t\t// Replace the selection with the raw text string for :), :-D, … for non emoji results\n\t\t\t\t\t\t\treturn item.original\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\temojiAddRecent(item.original)\n\t\t\t\t\t\treturn item.original.native\n\t\t\t\t\t},\n\t\t\t\t\t// Pass the search results as values\n\t\t\t\t\tvalues: (text, cb) => {\n\t\t\t\t\t\tconst emojiResults = emojiSearch(text)\n\t\t\t\t\t\tif (textSmiles.includes(':' + text)) {\n\t\t\t\t\t\t\t/**\n\t\t\t\t\t\t\t * Prepend text smiles to the search results so that Tribute\n\t\t\t\t\t\t\t * is not interfering with normal writing, aka. \"Cocos Island Meme\".\n\t\t\t\t\t\t\t * E.g. `:)` and `:-)` got replaced by the flag of Cocos Island,\n\t\t\t\t\t\t\t * when submitting the input with Enter after writing them\n\t\t\t\t\t\t\t */\n\t\t\t\t\t\t\temojiResults.unshift(':' + text)\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcb(emojiResults)\n\t\t\t\t\t},\n\t\t\t\t\t// Class added to the menu container\n\t\t\t\t\tcontainerClass: 'tribute-container tribute-container-emoji',\n\t\t\t\t\t// Class added to each list item\n\t\t\t\t\titemClass: 'tribute-container__item tribute-container-emoji__item',\n\t\t\t\t})\n\t\t\t}\n\n\t\t\tif (this.linkAutocomplete) {\n\t\t\t\ttributesCollection.push({\n\t\t\t\t\ttrigger: '/',\n\t\t\t\t\t// Don't use the tribute search function at all\n\t\t\t\t\t// We pass search results as values (see below)\n\t\t\t\t\tlookup: (result, query) => query,\n\t\t\t\t\t// Where to inject the menu popup\n\t\t\t\t\tmenuContainer: this.menuContainer,\n\t\t\t\t\t// Popup mention autocompletion templates\n\t\t\t\t\tmenuItemTemplate: item => renderMenuItem(`<img class=\"tribute-container-link__item__icon\" src=\"${item.original.icon_url}\"> <span class=\"tribute-container-link__item__title\">${item.original.title}</span>`),\n\t\t\t\t\t// Hide if no results\n\t\t\t\t\tnoMatchTemplate: () => t('No link provider found'),\n\t\t\t\t\tselectTemplate: this.getLink,\n\t\t\t\t\t// Pass the search results as values\n\t\t\t\t\tvalues: (text, cb) => cb(searchProvider(text)),\n\t\t\t\t\t// Class added to the menu container\n\t\t\t\t\tcontainerClass: 'tribute-container tribute-container-link',\n\t\t\t\t\t// Class added to each list item\n\t\t\t\t\titemClass: 'tribute-container__item tribute-container-link__item',\n\t\t\t\t})\n\t\t\t}\n\n\t\t\tthis.tribute = new Tribute({ collection: tributesCollection })\n\t\t\tthis.tribute.attach(this.$refs.contenteditable)\n\t\t},\n\n\t\tgetLink(item) {\n\t\t\t// there is no way to get a tribute result asynchronously\n\t\t\t// so we immediately insert a node and replace it when the result comes\n\t\t\tgetLinkWithPicker(item.original.id)\n\t\t\t\t.then(result => {\n\t\t\t\t\t// replace dummy temp element by a text node which contains the picker result\n\t\t\t\t\tconst tmpElem = document.getElementById('tmp-smart-picker-result-node')\n\t\t\t\t\tconst eventData = {\n\t\t\t\t\t\tresult,\n\t\t\t\t\t\tinsertText: true,\n\t\t\t\t\t}\n\t\t\t\t\tthis.$emit('smart-picker-submit', eventData)\n\t\t\t\t\tif (eventData.insertText) {\n\t\t\t\t\t\tconst newElem = document.createTextNode(result)\n\t\t\t\t\t\ttmpElem.replaceWith(newElem)\n\t\t\t\t\t\tthis.setCursorAfter(newElem)\n\t\t\t\t\t\tthis.updateValue(this.$refs.contenteditable.innerHTML)\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttmpElem.remove()\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t\t.catch((error) => {\n\t\t\t\t\tconsole.debug('Smart picker promise rejected:', error)\n\t\t\t\t\tconst tmpElem = document.getElementById('tmp-smart-picker-result-node')\n\t\t\t\t\tthis.setCursorAfter(tmpElem)\n\t\t\t\t\ttmpElem.remove()\n\t\t\t\t})\n\t\t\treturn '<span id=\"tmp-smart-picker-result-node\"></span>'\n\t\t},\n\t\tsetCursorAfter(element) {\n\t\t\tconst range = document.createRange()\n\t\t\trange.setEndAfter(element)\n\t\t\trange.collapse()\n\t\t\tconst selection = window.getSelection()\n\t\t\tselection.removeAllRanges()\n\t\t\tselection.addRange(range)\n\t\t},\n\t\tmoveCursorToEnd() {\n\t\t\tif (!document.createRange) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tconst range = document.createRange()\n\t\t\trange.selectNodeContents(this.$refs.contenteditable)\n\t\t\trange.collapse(false)\n\t\t\tconst selection = window.getSelection()\n\t\t\tselection.removeAllRanges()\n\t\t\tselection.addRange(range)\n\t\t},\n\t\t/**\n\t\t * Re-emit the input event to the parent\n\t\t *\n\t\t * @param {Event} event the input event\n\t\t */\n\t\tonInput(event) {\n\t\t\tthis.updateValue(event.target.innerHTML)\n\t\t},\n\n\t\t/**\n\t\t * When pasting, sanitize the content, extract text\n\t\t * and render it again\n\t\t *\n\t\t * @param {Event} event the paste event\n\t\t * @fires Event paste the original paste event\n\t\t */\n\t\tonPaste(event) {\n\t\t\t// Either disabled or edit deactivated\n\t\t\tif (!this.canEdit) {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tevent.preventDefault()\n\t\t\tconst clipboardData = event.clipboardData\n\n\t\t\t/** The original paste event */\n\t\t\tthis.$emit('paste', event)\n\n\t\t\t// If we have a file or if we don't have any text, ignore\n\t\t\tif (clipboardData.files.length !== 0\n\t\t\t\t|| !Object.values(clipboardData.items).find(item => item?.type.startsWith('text'))) {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tconst text = clipboardData.getData('text')\n\t\t\tconst selection = window.getSelection()\n\n\t\t\t// If no selection, replace the whole data\n\t\t\tif (!selection.rangeCount) {\n\t\t\t\tthis.updateValue(text)\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\t// Generate text and insert\n\t\t\tconst range = selection.getRangeAt(0)\n\t\t\tselection.deleteFromDocument()\n\t\t\trange.insertNode(document.createTextNode(text))\n\n\t\t\t// Put cursor at the end of the selection\n\t\t\tconst newRange = document.createRange()\n\t\t\tnewRange.setStart(event.target, range.endOffset)\n\t\t\tnewRange.collapse(true)\n\t\t\tselection.removeAllRanges()\n\t\t\tselection.addRange(newRange)\n\n\t\t\t// Propagate data\n\t\t\tthis.updateValue(this.$refs.contenteditable.innerHTML)\n\t\t},\n\n\t\t/**\n\t\t * Update the value text from the provided html\n\t\t *\n\t\t * @param {string} htmlOrText the html content (or raw text with @mentions)\n\t\t */\n\t\tupdateValue(htmlOrText) {\n\t\t\tconst text = this.parseContent(htmlOrText)\n\t\t\tthis.localValue = text\n\t\t\tthis.$emit('update:value', text)\n\t\t},\n\n\t\t/**\n\t\t * Update content and local value\n\t\t *\n\t\t * @param {string} value the message value\n\t\t */\n\t\tupdateContent(value) {\n\t\t\tconst renderedContent = this.renderContent(value)\n\t\t\tthis.$refs.contenteditable.innerHTML = renderedContent\n\t\t\tthis.localValue = value\n\t\t},\n\n\t\t/**\n\t\t * Because FF have a decade old bug preventing contenteditable=false\n\t\t * to properly be deleted on backspace, we have to hack 👀\n\t\t * https://stackoverflow.com/a/59383394/3885878\n\t\t * https://stackoverflow.com/a/30574622\n\t\t *\n\t\t * @param {Event} event the delete keydown event\n\t\t */\n\t\tonDelete(event) {\n\t\t\tif (!this.isFF || !window.getSelection) {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\t// Either disabled or edit deactivated\n\t\t\tif (!this.canEdit) {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\t// fix backspace bug in FF\n\t\t\t// https://bugzilla.mozilla.org/show_bug.cgi?id=685445\n\t\t\t// https://bugzilla.mozilla.org/show_bug.cgi?id=1665167\n\t\t\tconst selection = window.getSelection()\n\t\t\tconst node = event.target\n\t\t\tif (!selection.isCollapsed || !selection.rangeCount) {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tconst curRange = selection.getRangeAt(selection.rangeCount - 1)\n\t\t\tif (curRange.commonAncestorContainer.nodeType === 3 && curRange.startOffset > 0) {\n\t\t\t\t// we are in child selection. The characters of the text node is being deleted\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tconst range = document.createRange()\n\t\t\tif (selection.anchorNode !== node) {\n\t\t\t\t// selection is in character mode. expand it to the whole editable field\n\t\t\t\trange.selectNodeContents(node)\n\t\t\t\trange.setEndBefore(selection.anchorNode)\n\t\t\t} else if (selection.anchorOffset > 0) {\n\t\t\t\trange.setEnd(node, selection.anchorOffset)\n\t\t\t} else {\n\t\t\t\t// reached the beginning of editable field\n\t\t\t\treturn\n\t\t\t}\n\t\t\trange.setStart(node, range.endOffset - 1)\n\n\t\t\tconst previousNode = range.cloneContents().lastChild\n\t\t\tif (previousNode && previousNode.contentEditable === 'false') {\n\t\t\t\t// this is some rich content, e.g. smile. We should help the user to delete it\n\t\t\t\trange.deleteContents()\n\t\t\t\tevent.preventDefault()\n\t\t\t}\n\t\t},\n\t\t/**\n\t\t * Enter key pressed. Submits if not multiline\n\t\t *\n\t\t * @param {Event} event the keydown event\n\t\t */\n\t\tonEnter(event) {\n\t\t\t// Prevent submitting if multiline\n\t\t\t// or length is over maxlength\n\t\t\t// or autocompletion menu is opened\n\t\t\t// or in a text composition session with IME\n\t\t\tif (this.multiline\n\t\t\t\t|| this.isOverMaxlength\n\t\t\t\t|| this.tribute.isActive\n\t\t\t\t|| this.isComposing) {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tevent.preventDefault()\n\t\t\tevent.stopPropagation()\n\t\t\tthis.$emit('submit', event)\n\t\t},\n\n\t\t/**\n\t\t * Ctrl + Enter key pressed is used to submit\n\t\t *\n\t\t * @param {Event} event the keydown event\n\t\t */\n\t\tonCtrlEnter(event) {\n\t\t\tif (this.isOverMaxlength) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tthis.$emit('submit', event)\n\t\t},\n\n\t\tonKeyUp(event) {\n\t\t\t// prevent tribute from opening on keyup\n\t\t\tevent.stopImmediatePropagation()\n\t\t},\n\n\t\t/**\n\t\t * Get HTML element with Tribute.js container\n\t\t * @return {HTMLElement}\n\t\t */\n\t\tgetTributeContainer() {\n\t\t\treturn this.tribute.menu\n\t\t},\n\n\t\t/**\n\t\t * Get the currently selected item element id in Tribute.js container\n\t\t * @return {HTMLElement}\n\t\t */\n\t\tgetTributeSelectedItem() {\n\t\t\t// Tribute does not provide a way to get the active item, only the data index\n\t\t\t// So we have to find it manually by select class\n\t\t\treturn this.getTributeContainer().querySelector('.highlight [id^=\"nc-rich-contenteditable-tribute-item-\"]')\n\t\t},\n\n\t\t/**\n\t\t * Handle Tribute activation\n\t\t * @param {boolean} isActive - is active\n\t\t */\n\t\tonTributeActive(isActive) {\n\t\t\tthis.isAutocompleteOpen = isActive\n\n\t\t\tif (isActive) {\n\t\t\t\t// Tribute.js doesn't support containerClass update when new collection is open\n\t\t\t\t// The first opened collection's containerClass stays forever\n\t\t\t\t// https://github.com/zurb/tribute/issues/595\n\t\t\t\t// https://github.com/zurb/tribute/issues/627\n\t\t\t\t// So we have to manually update the class\n\t\t\t\t// The default class is \"tribute-container\"\n\t\t\t\tthis.getTributeContainer().setAttribute('class', this.tribute.current.collection.containerClass || 'tribute-container')\n\n\t\t\t\tthis.setupTributeIntegration()\n\t\t\t} else {\n\t\t\t\t// Cancel loading data for autocomplete\n\t\t\t\t// Otherwise it could be received when another autocomplete is already opened\n\t\t\t\tthis.debouncedAutoComplete.clear()\n\n\t\t\t\t// Reset active item\n\t\t\t\tthis.autocompleteActiveId = undefined\n\n\t\t\t\tthis.setTributeFocusVisible(false)\n\t\t\t}\n\t\t},\n\n\t\tonTributeArrowKeyDown() {\n\t\t\tif (!this.isAutocompleteOpen) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tthis.setTributeFocusVisible(true)\n\t\t\tthis.onTributeSelectedItemWillChange()\n\t\t},\n\n\t\tonTributeSelectedItemWillChange() {\n\t\t\t// Wait until tribute has updated the selected item\n\t\t\trequestAnimationFrame(() => {\n\t\t\t\tthis.autocompleteActiveId = this.getTributeSelectedItem()?.id\n\t\t\t})\n\t\t},\n\n\t\tsetupTributeIntegration() {\n\t\t\t// Setup integration only once on the first open\n\t\t\tif (this.isTributeIntegrationDone) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tthis.isTributeIntegrationDone = true\n\n\t\t\tconst tributeContainer = this.getTributeContainer()\n\n\t\t\t// For aria-controls\n\t\t\ttributeContainer.id = this.tributeId\n\n\t\t\t// Container with options must be a listbox\n\t\t\ttributeContainer.setAttribute('role', 'listbox')\n\t\t\t// Reset list+listitem role from ul+li\n\t\t\tconst ul = tributeContainer.children[0]\n\t\t\tul.setAttribute('role', 'presentation')\n\n\t\t\t// Tribute.js does not provide a way to react on show/hide\n\t\t\t// tribute-active-true/false events are fired on initial activation, which is too early with async autoComplete function\n\t\t\tthis.tributeStyleMutationObserver = new MutationObserver(([{ target }]) => {\n\t\t\t\tif (target.style.display !== 'none') {\n\t\t\t\t\t// Tribute is visible - there will be selected item\n\t\t\t\t\tthis.onTributeSelectedItemWillChange()\n\t\t\t\t}\n\t\t\t}).observe(tributeContainer, {\n\t\t\t\tattributes: true,\n\t\t\t\tattributeFilter: ['style'],\n\t\t\t})\n\n\t\t\t// Handle selecting new item on mouse selection\n\t\t\ttributeContainer.addEventListener('mousemove', () => {\n\t\t\t\tthis.setTributeFocusVisible(false)\n\t\t\t\tthis.onTributeSelectedItemWillChange()\n\t\t\t}, { passive: true })\n\t\t},\n\n\t\t/**\n\t\t * Set tribute-container--focus-visible class on the Tribute container when the user navigates the listbox via keyboard.\n\t\t *\n\t\t * Because the real focus is kept on the textbox, we cannot use the :focus-visible pseudo-class\n\t\t * to style selected options in the autocomplete listbox.\n\t\t *\n\t\t * @param {boolean} withFocusVisible - should the focus-visible class be added\n\t\t */\n\t\tsetTributeFocusVisible(withFocusVisible) {\n\t\t\tif (withFocusVisible) {\n\t\t\t\tthis.getTributeContainer().classList.add('tribute-container--focus-visible')\n\t\t\t} else {\n\t\t\t\tthis.getTributeContainer().classList.remove('tribute-container--focus-visible')\n\t\t\t}\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n// Standalone styling, independent from server\n.rich-contenteditable {\n\tposition: relative;\n\twidth: auto;\n\n\t&__label {\n\t\tposition: absolute;\n\t\tmargin-inline: 14px 0;\n\t\tmax-width: fit-content;\n\t\tinset-block-start: 11px;\n\t\tinset-inline: 0;\n\t\t// Fix color so that users do not think the input already has content\n\t\tcolor: var(--color-text-maxcontrast);\n\t\t// only one line labels are allowed\n\t\twhite-space: nowrap;\n\t\toverflow: hidden;\n\t\ttext-overflow: ellipsis;\n\t\t// forward events to input\n\t\tpointer-events: none;\n\t\t// Position transition\n\t\ttransition: height var(--animation-quick), inset-block-start var(--animation-quick), font-size var(--animation-quick), color var(--animation-quick), background-color var(--animation-quick) var(--animation-slow);\n\t}\n\n\t&__input:focus + &__label,\n\t&__input:not(&__input--empty) + &__label {\n\t\tinset-block-start: -10px;\n\t\tline-height: 1.5; // minimum allowed line height for accessibility\n\t\tfont-size: 13px; // minimum allowed font size for accessibility\n\t\tfont-weight: 500;\n\t\tborder-radius: var(--default-grid-baseline) var(--default-grid-baseline) 0 0;\n\t\tbackground-color: var(--color-main-background);\n\t\tpadding-inline: 5px;\n\t\tmargin-inline-start: 9px;\n\n\t\ttransition: height var(--animation-quick), inset-block-start var(--animation-quick), font-size var(--animation-quick), color var(--animation-quick);\n\t}\n\n\t&__input {\n\t\toverflow-y: auto;\n\t\twidth: auto;\n\t\tmargin: 0;\n\t\tpadding: 8px;\n\t\tcursor: text;\n\t\twhite-space: pre-wrap;\n\t\tword-break: break-word;\n\t\tcolor: var(--color-main-text);\n\t\tborder: 2px solid var(--color-border-maxcontrast);\n\t\tborder-radius: var(--border-radius-large);\n\t\toutline: none;\n\t\tbackground-color: var(--color-main-background);\n\t\tfont-family: var(--font-face);\n\t\tfont-size: inherit;\n\t\tmin-height: $clickable-area;\n\t\tmax-height: $clickable-area * 5.5;\n\n\t\t&--has-label {\n\t\t\tmargin-top: 10px;\n\t\t}\n\n\t\t// Cannot use :empty because of firefox bug https://bugzilla.mozilla.org/show_bug.cgi?id=1513303\n\t\t&--empty:focus:before,\n\t\t&--empty:not(&--has-label):before {\n\t\t\tcontent: attr(aria-placeholder);\n\t\t\tcolor: var(--color-text-maxcontrast);\n\t\t\tposition: absolute;\n\t\t}\n\n\t\t&[contenteditable='false']:not(&--disabled) {\n\t\t\tcursor: default;\n\t\t\tbackground-color: transparent;\n\t\t\tcolor: var(--color-main-text);\n\t\t\tborder-color: transparent;\n\t\t\topacity: 1;\n\t\t\tborder-radius: 0;\n\t\t}\n\n\t\t&--multiline {\n\t\t\tmin-height: $clickable-area * 3;\n\t\t\t// No max for mutiline\n\t\t\tmax-height: none;\n\t\t}\n\n\t\t&--disabled {\n\t\t\topacity: $opacity_disabled;\n\t\t\tcolor: var(--color-text-maxcontrast);\n\t\t\tborder: 2px solid var(--color-background-darker);\n\t\t\tborder-radius: var(--border-radius);\n\t\t\tbackground-color: var(--color-background-dark);\n\t\t}\n\t}\n}\n\n</style>\n\n<style lang=\"scss\">\n.tribute-container {\n\tz-index: 9000;\n\toverflow: auto;\n\t// Space it out a bit from the text\n\tmargin: var(--default-grid-baseline) 0;\n\tpadding: var(--default-grid-baseline);\n\tcolor: var(--color-text-maxcontrast);\n\tborder-radius: var(--border-radius);\n\tbackground: var(--color-main-background);\n\tbox-shadow: 0 1px 5px var(--color-box-shadow);\n\n\t.tribute-container__item {\n\t\tcolor: var(--color-max-contrast);\n\t\tborder-radius: var(--border-radius);\n\t\tpadding: var(--default-grid-baseline) calc(2 * var(--default-grid-baseline));\n\t\tmargin-bottom: var(--default-grid-baseline);\n\t\tcursor: pointer;\n\n\t\t&:last-child {\n\t\t\tmargin-bottom: 0;\n\t\t}\n\n\t\t&.highlight {\n\t\t\tcolor: var(--color-main-text);\n\t\t\tbackground: var(--color-background-hover);\n\n\t\t\t&, * {\n\t\t\t\tcursor: pointer;\n\t\t\t}\n\t\t}\n\t}\n\n\t&.tribute-container--focus-visible {\n\t\t.highlight.tribute-container__item {\n\t\t\toutline: 2px solid var(--color-main-text) !important;\n\t\t}\n\t}\n}\n\n.tribute-container-autocomplete {\n\tmin-width: 250px;\n\tmax-width: 300px;\n\t// Show maximum 4 entries and a half to show scroll\n\t// Autocomplete height\n\t// + 2 paddings around autocomplete\n\t// + 2 paddings arouind tribute item\n\t// + 1 padding gap\n\t// And 1.5 paddings - container's padding without the last gap\n\tmax-height: calc((var(--default-clickable-area) + 5 * var(--default-grid-baseline)) * 4.5 - 1.5 * var(--default-grid-baseline));\n}\n\n.tribute-container-emoji,\n.tribute-container-link {\n\tmin-width: 200px;\n\tmax-width: 200px;\n\t// Show maximum 5 entries and a half to show scroll\n\t// Item height\n\t// + 2 paddings around autocomplete\n\t// + 2 paddings arouind tribute item\n\t// + 1 padding gap\n\t// And 1.5 paddings - container's padding without the last gap\n\tmax-height: calc((24px + 3 * var(--default-grid-baseline)) * 5.5 - 1.5 * var(--default-grid-baseline));\n\n\t.tribute-item {\n\t\t// Take care of long names\n\t\twhite-space: nowrap;\n\t\toverflow: hidden;\n\t\ttext-overflow: ellipsis;\n\n\t\t&__emoji {\n\t\t\tpadding-right: calc(var(--default-grid-baseline) * 2);\n\t\t}\n\t}\n}\n\n.tribute-container-link {\n\tmin-width: 200px;\n\tmax-width: 300px;\n\t.tribute-item {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\t&__title {\n\t\t\twhite-space: nowrap;\n\t\t\toverflow: hidden;\n\t\t\ttext-overflow: ellipsis;\n\t\t}\n\t\t&__icon {\n\t\t\tmargin: auto 0;\n\t\t\twidth: 20px;\n\t\t\theight: 20px;\n\t\t\tobject-fit: contain;\n\t\t\tpadding-right: calc(var(--default-grid-baseline) * 2);\n\t\t\tfilter: var(--background-invert-if-dark);\n\t\t}\n\t}\n}\n\n</style>\n"],"names":["_sfc_main","NcUserStatusIcon","user","size","generateUrl","smilesCharacters","textSmiles","char","Tooltip","richEditor","GenRandomId","t","uid","stringLength","listeners","debounce","search","callback","html","renderMenuItem","content","tributesCollection","result","item","NcAutoCompleteResult","query","emojiAddRecent","text","cb","emojiResults","emojiSearch","searchProvider","Tribute","getLinkWithPicker","tmpElem","eventData","newElem","error","element","range","selection","event","clipboardData","newRange","htmlOrText","value","renderedContent","node","curRange","previousNode","isActive","tributeContainer","target","withFocusVisible"],"mappings":"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"}
@@ -1,12 +1,12 @@
1
- require('../assets/NcRichContenteditable-j9edXOEH.css');
1
+ require('../assets/NcRichContenteditable-WQVknpPy.css');
2
2
  "use strict";
3
- const s = require("./_l10n-mEcF7TYU.cjs"), f = require("@nextcloud/router"), g = require("./NcUserStatusIcon-iczxs1an.cjs"), p = require("./_plugin-vue2_normalizer-DCfUPqga.cjs"), _ = require("./index-U21dQVa7.cjs");
3
+ const s = require("./_l10n-Od-4xzJA.cjs"), f = require("@nextcloud/router"), b = require("./NcUserStatusIcon-79RsINrv.cjs"), p = require("./_plugin-vue2_normalizer-DCfUPqga.cjs"), g = require("./index-5TyVc_TT.cjs");
4
4
  require("../Directives/Tooltip.cjs");
5
- const u = require("./emoji-mJIuLpNR.cjs"), c = require("./referencePickerModal-Cnscu3tI.cjs");
5
+ const c = require("./emoji-mJIuLpNR.cjs"), d = require("./referencePickerModal-cy4_Q5bu.cjs");
6
6
  require("@nextcloud/axios");
7
7
  require("../Components/NcLoadingIcon.cjs");
8
- require("./NcCheckboxRadioSwitch.vue_vue_type_style_index_0_scoped_2603be83_lang-Ooje-q1U.cjs");
9
- const d = require("./GenRandomId-ULxaMkkr.cjs");
8
+ require("./NcCheckboxRadioSwitch.vue_vue_type_style_index_0_scoped_2603be83_lang-kOW4T17e.cjs");
9
+ const o = require("./GenRandomId-ULxaMkkr.cjs");
10
10
  require("unist-util-visit");
11
11
  require("unist-builder");
12
12
  require("unified");
@@ -17,20 +17,29 @@ require("remark-rehype");
17
17
  require("rehype-react");
18
18
  require("rehype-external-links");
19
19
  require("../Components/NcEmptyContent.cjs");
20
- require("./NcSelect-BnTLFd27.cjs");
21
- require("./NcTextField-2P7HaQ-i.cjs");
20
+ require("./NcSelect-SlL-Y8Qz.cjs");
21
+ require("./NcTextField-eclRKl_B.cjs");
22
22
  require("../Components/NcButton.cjs");
23
23
  require("../Components/NcModal.cjs");
24
24
  require("@nextcloud/event-bus");
25
- const b = require("tributejs/dist/tribute.esm.js"), C = require("debounce"), y = require("string-length"), v = require("floating-vue"), o = (t) => t && t.__esModule ? t : { default: t }, l = /* @__PURE__ */ o(b), k = /* @__PURE__ */ o(C), T = /* @__PURE__ */ o(y), S = {
25
+ const _ = require("tributejs/dist/tribute.esm.js"), y = require("debounce"), C = require("string-length"), v = require("floating-vue"), u = (t) => t && t.__esModule ? t : { default: t }, T = /* @__PURE__ */ u(_), k = /* @__PURE__ */ u(y), A = /* @__PURE__ */ u(C), S = {
26
26
  name: "NcAutoCompleteResult",
27
27
  components: {
28
- NcUserStatusIcon: g.NcUserStatusIcon
28
+ NcUserStatusIcon: b.NcUserStatusIcon
29
29
  },
30
30
  props: {
31
+ /**
32
+ * @deprecated Use `label` instead
33
+ */
31
34
  title: {
32
35
  type: String,
33
- required: !0
36
+ required: !1,
37
+ default: null
38
+ },
39
+ label: {
40
+ type: String,
41
+ required: !1,
42
+ default: null
34
43
  },
35
44
  subline: {
36
45
  type: String,
@@ -60,6 +69,10 @@ const b = require("tributejs/dist/tribute.esm.js"), C = require("debounce"), y =
60
69
  computed: {
61
70
  avatarUrl() {
62
71
  return this.iconUrl ? this.iconUrl : this.id && this.source === "users" ? this.getAvatarUrl(this.id, 44) : null;
72
+ },
73
+ // For backwards compatibility
74
+ labelWithFallback() {
75
+ return this.label || this.title;
63
76
  }
64
77
  },
65
78
  methods: {
@@ -71,27 +84,31 @@ const b = require("tributejs/dist/tribute.esm.js"), C = require("debounce"), y =
71
84
  }
72
85
  }
73
86
  };
74
- var q = function() {
87
+ var I = function() {
75
88
  var e = this, n = e._self._c;
76
- return n("div", { staticClass: "autocomplete-result" }, [n("div", { staticClass: "autocomplete-result__icon", class: [e.icon, `autocomplete-result__icon--${e.avatarUrl ? "with-avatar" : ""}`], style: e.avatarUrl ? { backgroundImage: `url(${e.avatarUrl})` } : null }, [e.status.icon ? n("span", { staticClass: "autocomplete-result__status autocomplete-result__status--icon" }, [e._v(" " + e._s(e.status && e.status.icon || "") + " ")]) : e.status.status && e.status.status !== "offline" ? n("NcUserStatusIcon", { staticClass: "autocomplete-result__status", attrs: { status: e.status.status } }) : e._e()], 1), n("span", { staticClass: "autocomplete-result__content" }, [n("span", { staticClass: "autocomplete-result__title", attrs: { title: e.title } }, [e._v(" " + e._s(e.title) + " ")]), e.subline ? n("span", { staticClass: "autocomplete-result__subline" }, [e._v(" " + e._s(e.subline) + " ")]) : e._e()])]);
77
- }, x = [], E = /* @__PURE__ */ p.normalizeComponent(
89
+ return n("div", { staticClass: "autocomplete-result" }, [n("div", { staticClass: "autocomplete-result__icon", class: [e.icon, `autocomplete-result__icon--${e.avatarUrl ? "with-avatar" : ""}`], style: e.avatarUrl ? { backgroundImage: `url(${e.avatarUrl})` } : null }, [e.status.icon ? n("span", { staticClass: "autocomplete-result__status autocomplete-result__status--icon" }, [e._v(" " + e._s(e.status && e.status.icon || "") + " ")]) : e.status.status && e.status.status !== "offline" ? n("NcUserStatusIcon", { staticClass: "autocomplete-result__status", attrs: { status: e.status.status } }) : e._e()], 1), n("span", { staticClass: "autocomplete-result__content" }, [n("span", { staticClass: "autocomplete-result__title", attrs: { title: e.labelWithFallback } }, [e._v(" " + e._s(e.labelWithFallback) + " ")]), e.subline ? n("span", { staticClass: "autocomplete-result__subline" }, [e._v(" " + e._s(e.subline) + " ")]) : e._e()])]);
90
+ }, q = [], x = /* @__PURE__ */ p.normalizeComponent(
78
91
  S,
92
+ I,
79
93
  q,
80
- x,
81
94
  !1,
82
95
  null,
83
- "b6d7cce6",
96
+ "9cff39ed",
84
97
  null,
85
98
  null
86
99
  );
87
- const m = E.exports;
100
+ const m = x.exports;
88
101
  s.register(s.t27, s.t30);
89
- const A = {
102
+ const w = ["d", "D", "p", "P", "s", "S", "x", "X", ")", "(", "|", "/"], l = [];
103
+ w.forEach((t) => {
104
+ l.push(":" + t), l.push(":-" + t);
105
+ });
106
+ const E = {
90
107
  name: "NcRichContenteditable",
91
108
  directives: {
92
109
  tooltip: v.VTooltip
93
110
  },
94
- mixins: [_.richEditor],
111
+ mixins: [g.richEditor],
95
112
  inheritAttrs: !1,
96
113
  props: {
97
114
  /**
@@ -99,7 +116,7 @@ const A = {
99
116
  */
100
117
  id: {
101
118
  type: String,
102
- default: () => d.GenRandomId(7)
119
+ default: () => o.GenRandomId(7)
103
120
  },
104
121
  /**
105
122
  * Visual label of the contenteditable
@@ -178,76 +195,33 @@ const A = {
178
195
  "update:value",
179
196
  "smart-picker-submit"
180
197
  ],
181
- data() {
198
+ setup() {
199
+ const t = o.GenRandomId(5);
182
200
  return {
183
- labelId: `rich-label-${d.GenRandomId(5)}`,
184
- textSmiles: [],
201
+ // Constants
202
+ labelId: `nc-rich-contenteditable-${t}-label`,
203
+ tributeId: `nc-rich-contenteditable-${t}-tribute`,
204
+ /**
205
+ * Non-reactive property to store Tribute instance
206
+ *
207
+ * @type {import('tributejs').default | null}
208
+ */
185
209
  tribute: null,
186
- autocompleteOptions: {
187
- // Allow spaces in the middle of mentions
188
- allowSpaces: !0,
189
- fillAttr: "id",
190
- // Search against id and title (display name)
191
- lookup: (t) => `${t.id} ${t.title}`,
192
- // Where to inject the menu popup
193
- menuContainer: this.menuContainer,
194
- // Popup mention autocompletion templates
195
- menuItemTemplate: (t) => this.renderComponentHtml(t.original, m),
196
- // Hide if no results
197
- noMatchTemplate: () => '<span class="hidden"></span>',
198
- // Inner display of mentions
199
- selectTemplate: (t) => this.genSelectTemplate(t?.original?.id),
200
- // Autocompletion results
201
- values: this.debouncedAutoComplete
202
- },
203
- emojiOptions: {
204
- trigger: ":",
205
- // Don't use the tribute search function at all
206
- // We pass search results as values (see below)
207
- lookup: (t, e) => e,
208
- // Where to inject the menu popup
209
- menuContainer: this.menuContainer,
210
- // Popup mention autocompletion templates
211
- menuItemTemplate: (t) => this.textSmiles.includes(t.original) ? t.original : `<span class="tribute-container-emoji__item__emoji">${t.original.native}</span> :${t.original.short_name}`,
212
- // Hide if no results
213
- noMatchTemplate: () => s.t("No emoji found"),
214
- // Display raw emoji along with its name
215
- selectTemplate: (t) => this.textSmiles.includes(t.original) ? t.original : (u.emojiAddRecent(t.original), t.original.native),
216
- // Pass the search results as values
217
- values: (t, e) => {
218
- const n = u.emojiSearch(t);
219
- this.textSmiles.includes(":" + t) && n.unshift(":" + t), e(n);
220
- },
221
- // Class added to the menu container
222
- containerClass: "tribute-container-emoji",
223
- // Class added to each list item
224
- itemClass: "tribute-container-emoji__item"
225
- },
226
- linkOptions: {
227
- trigger: "/",
228
- // Don't use the tribute search function at all
229
- // We pass search results as values (see below)
230
- lookup: (t, e) => e,
231
- // Where to inject the menu popup
232
- menuContainer: this.menuContainer,
233
- // Popup mention autocompletion templates
234
- menuItemTemplate: (t) => `<img class="tribute-container-link__item__icon" src="${t.original.icon_url}"> <span class="tribute-container-link__item__title">${t.original.title}</span>`,
235
- // Hide if no results
236
- noMatchTemplate: () => s.t("No link provider found"),
237
- selectTemplate: this.getLink,
238
- // Pass the search results as values
239
- values: (t, e) => e(c.searchProvider(t)),
240
- // Class added to the menu container
241
- containerClass: "tribute-container-link",
242
- // Class added to each list item
243
- itemClass: "tribute-container-link__item"
244
- },
210
+ tributeStyleMutationObserver: null
211
+ };
212
+ },
213
+ data() {
214
+ return {
245
215
  // Represent the raw untrimmed text of the contenteditable
246
216
  // serves no other purpose than to check whether the
247
217
  // content is empty or not
248
218
  localValue: this.value,
249
219
  // Is in text composition session in IME
250
- isComposing: !1
220
+ isComposing: !1,
221
+ // Tribute autocomplete
222
+ isAutocompleteOpen: !1,
223
+ autocompleteActiveId: void 0,
224
+ isTributeIntegrationDone: !1
251
225
  };
252
226
  },
253
227
  computed: {
@@ -273,7 +247,7 @@ const A = {
273
247
  * @return {boolean}
274
248
  */
275
249
  isOverMaxlength() {
276
- return this.isEmptyValue || !this.maxlength ? !1 : T.default(this.localValue) > this.maxlength;
250
+ return this.isEmptyValue || !this.maxlength ? !1 : A.default(this.localValue) > this.maxlength;
277
251
  },
278
252
  /**
279
253
  * Tooltip to show if characters count is over limit
@@ -303,6 +277,14 @@ const A = {
303
277
  listeners() {
304
278
  const t = { ...this.$listeners };
305
279
  return delete t.paste, t;
280
+ },
281
+ /**
282
+ * Compute debounce function for the autocomplete function
283
+ */
284
+ debouncedAutoComplete() {
285
+ return k.default(async (t, e) => {
286
+ this.autoComplete(t, e);
287
+ }, 100);
306
288
  }
307
289
  },
308
290
  watch: {
@@ -316,13 +298,10 @@ const A = {
316
298
  }
317
299
  },
318
300
  mounted() {
319
- const t = ["d", "D", "p", "P", "s", "S", "x", "X", ")", "(", "|", "/"];
320
- this.textSmiles = [], t.forEach((e) => {
321
- this.textSmiles.push(":" + e), this.textSmiles.push(":-" + e);
322
- }), this.autocompleteTribute = new l.default(this.autocompleteOptions), this.autocompleteTribute.attach(this.$refs.contenteditable), this.emojiAutocomplete && (this.emojiTribute = new l.default(this.emojiOptions), this.emojiTribute.attach(this.$refs.contenteditable)), this.linkAutocomplete && (this.linkTribute = new l.default(this.linkOptions), this.linkTribute.attach(this.$refs.contenteditable)), this.updateContent(this.value), this.$refs.contenteditable.contentEditable = this.canEdit;
301
+ this.initializeTribute(), this.updateContent(this.value), this.$refs.contenteditable.contentEditable = this.canEdit;
323
302
  },
324
303
  beforeDestroy() {
325
- this.autocompleteTribute && this.autocompleteTribute.detach(this.$refs.contenteditable), this.emojiTribute && this.emojiTribute.detach(this.$refs.contenteditable), this.linkTribute && this.linkTribute.detach(this.$refs.contenteditable);
304
+ this.tribute && this.tribute.detach(this.$refs.contenteditable), this.tributeStyleMutationObserver && this.tributeStyleMutationObserver.disconnect();
326
305
  },
327
306
  methods: {
328
307
  /**
@@ -333,8 +312,72 @@ const A = {
333
312
  focus() {
334
313
  this.$refs.contenteditable.focus();
335
314
  },
315
+ initializeTribute() {
316
+ const t = (n) => `<div id="nc-rich-contenteditable-tribute-item-${o.GenRandomId(5)}" class="tribute-item" role="option">${n}</div>`, e = [];
317
+ e.push({
318
+ // Allow spaces in the middle of mentions
319
+ allowSpaces: !0,
320
+ fillAttr: "id",
321
+ // Search against id and label (display name) (fallback to title for v8.0.0..8.6.1 compatibility)
322
+ lookup: (n) => `${n.id} ${n.label ?? n.title}`,
323
+ // Where to inject the menu popup
324
+ menuContainer: this.menuContainer,
325
+ // Popup mention autocompletion templates
326
+ menuItemTemplate: (n) => t(this.renderComponentHtml(n.original, m)),
327
+ // Hide if no results
328
+ noMatchTemplate: () => '<span class="hidden"></span>',
329
+ // Inner display of mentions
330
+ selectTemplate: (n) => this.genSelectTemplate(n?.original?.id),
331
+ // Autocompletion results
332
+ values: this.debouncedAutoComplete,
333
+ // Class added to the menu container
334
+ containerClass: "tribute-container tribute-container-autocomplete",
335
+ // Class added to each list item
336
+ itemClass: "tribute-container__item"
337
+ }), this.emojiAutocomplete && e.push({
338
+ trigger: ":",
339
+ // Don't use the tribute search function at all
340
+ // We pass search results as values (see below)
341
+ lookup: (n, i) => i,
342
+ // Where to inject the menu popup
343
+ menuContainer: this.menuContainer,
344
+ // Popup mention autocompletion templates
345
+ menuItemTemplate: (n) => l.includes(n.original) ? n.original : t(`<span class="tribute-container-emoji__item__emoji">${n.original.native}</span> :${n.original.short_name}`),
346
+ // Hide if no results
347
+ noMatchTemplate: () => s.t("No emoji found"),
348
+ // Display raw emoji along with its name
349
+ selectTemplate: (n) => l.includes(n.original) ? n.original : (c.emojiAddRecent(n.original), n.original.native),
350
+ // Pass the search results as values
351
+ values: (n, i) => {
352
+ const r = c.emojiSearch(n);
353
+ l.includes(":" + n) && r.unshift(":" + n), i(r);
354
+ },
355
+ // Class added to the menu container
356
+ containerClass: "tribute-container tribute-container-emoji",
357
+ // Class added to each list item
358
+ itemClass: "tribute-container__item tribute-container-emoji__item"
359
+ }), this.linkAutocomplete && e.push({
360
+ trigger: "/",
361
+ // Don't use the tribute search function at all
362
+ // We pass search results as values (see below)
363
+ lookup: (n, i) => i,
364
+ // Where to inject the menu popup
365
+ menuContainer: this.menuContainer,
366
+ // Popup mention autocompletion templates
367
+ menuItemTemplate: (n) => t(`<img class="tribute-container-link__item__icon" src="${n.original.icon_url}"> <span class="tribute-container-link__item__title">${n.original.title}</span>`),
368
+ // Hide if no results
369
+ noMatchTemplate: () => s.t("No link provider found"),
370
+ selectTemplate: this.getLink,
371
+ // Pass the search results as values
372
+ values: (n, i) => i(d.searchProvider(n)),
373
+ // Class added to the menu container
374
+ containerClass: "tribute-container tribute-container-link",
375
+ // Class added to each list item
376
+ itemClass: "tribute-container__item tribute-container-link__item"
377
+ }), this.tribute = new T.default({ collection: e }), this.tribute.attach(this.$refs.contenteditable);
378
+ },
336
379
  getLink(t) {
337
- return c.getLinkWithPicker(t.original.id).then((e) => {
380
+ return d.getLinkWithPicker(t.original.id).then((e) => {
338
381
  const n = document.getElementById("tmp-smart-picker-result-node"), i = {
339
382
  result: e,
340
383
  insertText: !0
@@ -448,7 +491,7 @@ const A = {
448
491
  * @param {Event} event the keydown event
449
492
  */
450
493
  onEnter(t) {
451
- this.multiline || this.isOverMaxlength || this.autocompleteTribute.isActive || this.emojiTribute.isActive || this.linkTribute.isActive || this.isComposing || (t.preventDefault(), t.stopPropagation(), this.$emit("submit", t));
494
+ this.multiline || this.isOverMaxlength || this.tribute.isActive || this.isComposing || (t.preventDefault(), t.stopPropagation(), this.$emit("submit", t));
452
495
  },
453
496
  /**
454
497
  * Ctrl + Enter key pressed is used to submit
@@ -458,14 +501,62 @@ const A = {
458
501
  onCtrlEnter(t) {
459
502
  this.isOverMaxlength || this.$emit("submit", t);
460
503
  },
461
- /**
462
- * Debounce the autocomplete function
463
- */
464
- debouncedAutoComplete: k.default(async function(t, e) {
465
- this.autoComplete(t, e);
466
- }, 100),
467
504
  onKeyUp(t) {
468
505
  t.stopImmediatePropagation();
506
+ },
507
+ /**
508
+ * Get HTML element with Tribute.js container
509
+ * @return {HTMLElement}
510
+ */
511
+ getTributeContainer() {
512
+ return this.tribute.menu;
513
+ },
514
+ /**
515
+ * Get the currently selected item element id in Tribute.js container
516
+ * @return {HTMLElement}
517
+ */
518
+ getTributeSelectedItem() {
519
+ return this.getTributeContainer().querySelector('.highlight [id^="nc-rich-contenteditable-tribute-item-"]');
520
+ },
521
+ /**
522
+ * Handle Tribute activation
523
+ * @param {boolean} isActive - is active
524
+ */
525
+ onTributeActive(t) {
526
+ this.isAutocompleteOpen = t, t ? (this.getTributeContainer().setAttribute("class", this.tribute.current.collection.containerClass || "tribute-container"), this.setupTributeIntegration()) : (this.debouncedAutoComplete.clear(), this.autocompleteActiveId = void 0, this.setTributeFocusVisible(!1));
527
+ },
528
+ onTributeArrowKeyDown() {
529
+ this.isAutocompleteOpen && (this.setTributeFocusVisible(!0), this.onTributeSelectedItemWillChange());
530
+ },
531
+ onTributeSelectedItemWillChange() {
532
+ requestAnimationFrame(() => {
533
+ this.autocompleteActiveId = this.getTributeSelectedItem()?.id;
534
+ });
535
+ },
536
+ setupTributeIntegration() {
537
+ if (this.isTributeIntegrationDone)
538
+ return;
539
+ this.isTributeIntegrationDone = !0;
540
+ const t = this.getTributeContainer();
541
+ t.id = this.tributeId, t.setAttribute("role", "listbox"), t.children[0].setAttribute("role", "presentation"), this.tributeStyleMutationObserver = new MutationObserver(([{ target: n }]) => {
542
+ n.style.display !== "none" && this.onTributeSelectedItemWillChange();
543
+ }).observe(t, {
544
+ attributes: !0,
545
+ attributeFilter: ["style"]
546
+ }), t.addEventListener("mousemove", () => {
547
+ this.setTributeFocusVisible(!1), this.onTributeSelectedItemWillChange();
548
+ }, { passive: !0 });
549
+ },
550
+ /**
551
+ * Set tribute-container--focus-visible class on the Tribute container when the user navigates the listbox via keyboard.
552
+ *
553
+ * Because the real focus is kept on the textbox, we cannot use the :focus-visible pseudo-class
554
+ * to style selected options in the autocomplete listbox.
555
+ *
556
+ * @param {boolean} withFocusVisible - should the focus-visible class be added
557
+ */
558
+ setTributeFocusVisible(t) {
559
+ t ? this.getTributeContainer().classList.add("tribute-container--focus-visible") : this.getTributeContainer().classList.remove("tribute-container--focus-visible");
469
560
  }
470
561
  }
471
562
  };
@@ -477,7 +568,7 @@ var R = function() {
477
568
  "rich-contenteditable__input--has-label": e.label,
478
569
  "rich-contenteditable__input--overflow": e.isOverMaxlength,
479
570
  "rich-contenteditable__input--disabled": e.disabled
480
- }, attrs: { id: e.id, contenteditable: e.canEdit, "aria-labelledby": e.label ? e.labelId : void 0, "aria-placeholder": e.placeholder, "aria-multiline": "true", role: "textbox" }, on: { focus: e.moveCursorToEnd, input: e.onInput, compositionstart: function(i) {
571
+ }, attrs: { id: e.id, contenteditable: e.canEdit, "aria-labelledby": e.label ? e.labelId : void 0, "aria-placeholder": e.placeholder, "aria-multiline": "true", role: "textbox", "aria-haspopup": "listbox", "aria-autocomplete": "inline", "aria-controls": e.tributeId, "aria-expanded": e.isAutocompleteOpen ? "true" : "false", "aria-activedescendant": e.autocompleteActiveId }, on: { focus: e.moveCursorToEnd, input: e.onInput, compositionstart: function(i) {
481
572
  e.isComposing = !0;
482
573
  }, compositionend: function(i) {
483
574
  e.isComposing = !1;
@@ -487,19 +578,27 @@ var R = function() {
487
578
  return !i.type.indexOf("key") && e._k(i.keyCode, "enter", 13, i.key, "Enter") || i.ctrlKey || i.shiftKey || i.altKey || i.metaKey ? null : e.onEnter.apply(null, arguments);
488
579
  }, function(i) {
489
580
  return !i.type.indexOf("key") && e._k(i.keyCode, "enter", 13, i.key, "Enter") || !i.ctrlKey || i.shiftKey || i.altKey || i.metaKey ? null : (i.stopPropagation(), i.preventDefault(), e.onCtrlEnter.apply(null, arguments));
581
+ }, function(i) {
582
+ return !i.type.indexOf("key") && e._k(i.keyCode, "up", 38, i.key, ["Up", "ArrowUp"]) || i.ctrlKey || i.shiftKey || i.altKey || i.metaKey ? null : (i.stopPropagation(), e.onTributeArrowKeyDown.apply(null, arguments));
583
+ }, function(i) {
584
+ return !i.type.indexOf("key") && e._k(i.keyCode, "down", 40, i.key, ["Down", "ArrowDown"]) || i.ctrlKey || i.shiftKey || i.altKey || i.metaKey ? null : (i.stopPropagation(), e.onTributeArrowKeyDown.apply(null, arguments));
490
585
  }], paste: e.onPaste, "!keyup": function(i) {
491
586
  return i.stopPropagation(), i.preventDefault(), e.onKeyUp.apply(null, arguments);
587
+ }, "tribute-active-true": function(i) {
588
+ return e.onTributeActive(!0);
589
+ }, "tribute-active-false": function(i) {
590
+ return e.onTributeActive(!1);
492
591
  } } }, "div", e.$attrs, !1), e.listeners)), e.label ? n("div", { staticClass: "rich-contenteditable__label", attrs: { id: e.labelId } }, [e._v(" " + e._s(e.label) + " ")]) : e._e()]);
493
- }, w = [], N = /* @__PURE__ */ p.normalizeComponent(
494
- A,
592
+ }, O = [], D = /* @__PURE__ */ p.normalizeComponent(
593
+ E,
495
594
  R,
496
- w,
595
+ O,
497
596
  !1,
498
597
  null,
499
- "eb9c34f9",
598
+ "04a9f8cd",
500
599
  null,
501
600
  null
502
601
  );
503
- const j = N.exports;
602
+ const M = D.exports;
504
603
  exports.NcAutoCompleteResult = m;
505
- exports.NcRichContenteditable = j;
604
+ exports.NcRichContenteditable = M;