@nextcloud/vue 9.0.0-alpha.8 → 9.0.0-rc.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (335) hide show
  1. package/CHANGELOG.md +88 -12
  2. package/dist/assets/{NcActionButton-d8aZCq9u.css → NcActionButton-DfdRrSEu.css} +16 -16
  3. package/dist/assets/{NcActionCheckbox-tMIOGziy.css → NcActionCheckbox--lTDnNsx.css} +12 -12
  4. package/dist/assets/{NcActionInput-C-rQsTEA.css → NcActionInput-BNWL2Q-3.css} +62 -62
  5. package/dist/assets/{NcActionLink-jSPFFKV8.css → NcActionLink-C9_ycPLF.css} +12 -12
  6. package/dist/assets/{NcActionRadio-xdrmoEIq.css → NcActionRadio-DnAjyubC.css} +12 -12
  7. package/dist/assets/{NcActionRouter-qNNqBZab.css → NcActionRouter-CVsc7Ezc.css} +15 -15
  8. package/dist/assets/{NcActionText-0XNfku_2.css → NcActionText-C7y7Pe6P.css} +17 -17
  9. package/dist/assets/{NcActionTextEditable-ZlNtR_B_.css → NcActionTextEditable-OBnWSj_T.css} +60 -60
  10. package/dist/assets/{NcAppContent-CLu_1q4O.css → NcAppContent-CvTesBem.css} +23 -23
  11. package/dist/assets/{NcAppNavigationItem-aVy0uQwf.css → NcAppNavigationItem-DRU-cLRN.css} +30 -30
  12. package/dist/assets/{NcAppNavigationNewItem-rCrG0Uuo.css → NcAppNavigationNewItem-CsqJ6c8v.css} +32 -32
  13. package/dist/assets/{NcAvatar-DUKfNDGL.css → NcAvatar-UxFZ39EC.css} +24 -24
  14. package/dist/assets/{NcButton-wmjlEdLP.css → NcButton-DbE0wInI.css} +68 -64
  15. package/dist/assets/{NcCheckboxRadioSwitch-uwXbP_jb.css → NcCheckboxRadioSwitch-sqQXUuVB.css} +45 -44
  16. package/dist/assets/NcDateTimePicker-pmbCzZnb.css +83 -0
  17. package/dist/assets/{NcDialog-Dkeikssh.css → NcDialog-bP7Jt0ZE.css} +15 -15
  18. package/dist/assets/{NcHeaderButton-BPIasMkw.css → NcHeaderButton-Ct8k0yDh.css} +7 -7
  19. package/dist/assets/{NcHeaderMenu-ZmtqwEYA.css → NcHeaderMenu-zo6kw_jn.css} +11 -11
  20. package/dist/assets/{NcIconSvgWrapper-DQFhmjCC.css → NcIconSvgWrapper-BzRHs8iB.css} +11 -8
  21. package/dist/assets/{NcMentionBubble-BL05HUeF.css → NcMentionBubble-CB5c5ue2.css} +10 -9
  22. package/dist/assets/{NcPopover-ChETNAVH.css → NcPopover-zFjgXDlM.css} +13 -0
  23. package/dist/assets/{NcRichContenteditable-Bxi-Ki0j.css → NcRichContenteditable-CkyUKlIz.css} +31 -28
  24. package/dist/assets/{NcRichText-Dvt8jvWN.css → NcRichText-BbVi69cc.css} +87 -89
  25. package/dist/assets/{NcSelect-B6DUjUdl.css → NcSelect-BCBpQnFL.css} +0 -3
  26. package/dist/assets/{index-Du_FXiPy.css → index-CjPwAJ46.css} +68 -69
  27. package/dist/assets/index-D9L0rgJk.css +4 -0
  28. package/dist/chunks/{NcActionButton-BdQ_qmvW.mjs → NcActionButton-BZEDhdCm.mjs} +48 -6
  29. package/dist/chunks/NcActionButton-BZEDhdCm.mjs.map +1 -0
  30. package/dist/chunks/{NcActionButtonGroup-TitZerDl.mjs → NcActionButtonGroup-Dqt8Gekb.mjs} +2 -2
  31. package/dist/chunks/{NcActionButtonGroup-TitZerDl.mjs.map → NcActionButtonGroup-Dqt8Gekb.mjs.map} +1 -1
  32. package/dist/chunks/{NcActionCheckbox-CUYbo1rw.mjs → NcActionCheckbox-DLPDTACR.mjs} +3 -3
  33. package/dist/chunks/{NcActionCheckbox-CUYbo1rw.mjs.map → NcActionCheckbox-DLPDTACR.mjs.map} +1 -1
  34. package/dist/chunks/{NcActionInput-TI648L3V.mjs → NcActionInput-C_rmP0eZ.mjs} +10 -10
  35. package/dist/chunks/{NcActionInput-TI648L3V.mjs.map → NcActionInput-C_rmP0eZ.mjs.map} +1 -1
  36. package/dist/chunks/{NcActionLink-cQlsviu9.mjs → NcActionLink-BTIApspK.mjs} +3 -3
  37. package/dist/chunks/{NcActionLink-cQlsviu9.mjs.map → NcActionLink-BTIApspK.mjs.map} +1 -1
  38. package/dist/chunks/{NcActionRadio-tORL1qPt.mjs → NcActionRadio-CPoWB58D.mjs} +3 -3
  39. package/dist/chunks/{NcActionRadio-tORL1qPt.mjs.map → NcActionRadio-CPoWB58D.mjs.map} +1 -1
  40. package/dist/chunks/{NcActionRouter-Bw1tpEZt.mjs → NcActionRouter-DATNpU_e.mjs} +3 -3
  41. package/dist/chunks/{NcActionRouter-Bw1tpEZt.mjs.map → NcActionRouter-DATNpU_e.mjs.map} +1 -1
  42. package/dist/chunks/{NcActionText-VLCHOiIy.mjs → NcActionText-3mJjsJz_.mjs} +3 -3
  43. package/dist/chunks/{NcActionText-VLCHOiIy.mjs.map → NcActionText-3mJjsJz_.mjs.map} +1 -1
  44. package/dist/chunks/{NcActionTextEditable-nTbwgRy2.mjs → NcActionTextEditable-Dv1_bMFY.mjs} +3 -3
  45. package/dist/chunks/NcActionTextEditable-Dv1_bMFY.mjs.map +1 -0
  46. package/dist/chunks/{NcActions-CgKHXNbF.mjs → NcActions-DpYAcY6a.mjs} +19 -6
  47. package/dist/chunks/NcActions-DpYAcY6a.mjs.map +1 -0
  48. package/dist/chunks/{NcAppContent-C4gBVRQs.mjs → NcAppContent-BMiA5ySy.mjs} +19 -21
  49. package/dist/chunks/NcAppContent-BMiA5ySy.mjs.map +1 -0
  50. package/dist/chunks/{NcAppNavigation-DbRpHbi9.mjs → NcAppNavigation-DuLUJbsJ.mjs} +2 -2
  51. package/dist/chunks/{NcAppNavigation-DbRpHbi9.mjs.map → NcAppNavigation-DuLUJbsJ.mjs.map} +1 -1
  52. package/dist/chunks/{NcAppNavigationCaption-R_UZ7iKw.mjs → NcAppNavigationCaption-DTVdWgpf.mjs} +2 -2
  53. package/dist/chunks/{NcAppNavigationCaption-R_UZ7iKw.mjs.map → NcAppNavigationCaption-DTVdWgpf.mjs.map} +1 -1
  54. package/dist/chunks/{NcAppNavigationItem-CxYtFEhV.mjs → NcAppNavigationItem-5KG5Pl2c.mjs} +9 -9
  55. package/dist/chunks/{NcAppNavigationItem-CxYtFEhV.mjs.map → NcAppNavigationItem-5KG5Pl2c.mjs.map} +1 -1
  56. package/dist/chunks/{NcAppNavigationNew-sMVo_IoL.mjs → NcAppNavigationNew-BUQgcKdv.mjs} +2 -2
  57. package/dist/chunks/{NcAppNavigationNew-sMVo_IoL.mjs.map → NcAppNavigationNew-BUQgcKdv.mjs.map} +1 -1
  58. package/dist/chunks/{NcAppNavigationNewItem-CJZcL6GH.mjs → NcAppNavigationNewItem-CRCOC0hV.mjs} +4 -4
  59. package/dist/chunks/{NcAppNavigationNewItem-CJZcL6GH.mjs.map → NcAppNavigationNewItem-CRCOC0hV.mjs.map} +1 -1
  60. package/dist/chunks/{NcAppNavigationSearch-Dbhh-Vtw.mjs → NcAppNavigationSearch-AT_S98B0.mjs} +3 -3
  61. package/dist/chunks/{NcAppNavigationSearch-Dbhh-Vtw.mjs.map → NcAppNavigationSearch-AT_S98B0.mjs.map} +1 -1
  62. package/dist/chunks/{NcAppNavigationSettings-Bfo3EWk_.mjs → NcAppNavigationSettings-DFsvNlME.mjs} +3 -3
  63. package/dist/chunks/{NcAppNavigationSettings-Bfo3EWk_.mjs.map → NcAppNavigationSettings-DFsvNlME.mjs.map} +1 -1
  64. package/dist/chunks/{NcAppNavigationToggle-Ys-PjFo3.mjs → NcAppNavigationToggle-CqZs9ls-.mjs} +3 -3
  65. package/dist/chunks/{NcAppNavigationToggle-Ys-PjFo3.mjs.map → NcAppNavigationToggle-CqZs9ls-.mjs.map} +1 -1
  66. package/dist/chunks/{NcAppSettingsDialog-Cc-OdY9a.mjs → NcAppSettingsDialog-CTUoQezW.mjs} +4 -4
  67. package/dist/chunks/{NcAppSettingsDialog-Cc-OdY9a.mjs.map → NcAppSettingsDialog-CTUoQezW.mjs.map} +1 -1
  68. package/dist/chunks/{NcAppSidebar-Dgwj8O_Z.mjs → NcAppSidebar-B7shIqzm.mjs} +5 -5
  69. package/dist/chunks/{NcAppSidebar-Dgwj8O_Z.mjs.map → NcAppSidebar-B7shIqzm.mjs.map} +1 -1
  70. package/dist/chunks/{NcAvatar-CA8y4d-c.mjs → NcAvatar-CvPCBukb.mjs} +36 -14
  71. package/dist/chunks/NcAvatar-CvPCBukb.mjs.map +1 -0
  72. package/dist/chunks/{NcBreadcrumb-DSjIxTeU.mjs → NcBreadcrumb-C3qGDt3z.mjs} +3 -3
  73. package/dist/chunks/{NcBreadcrumb-DSjIxTeU.mjs.map → NcBreadcrumb-C3qGDt3z.mjs.map} +1 -1
  74. package/dist/chunks/{NcBreadcrumbs-jPvP6Cmo.mjs → NcBreadcrumbs-DtBCo9yI.mjs} +6 -7
  75. package/dist/chunks/{NcBreadcrumbs-jPvP6Cmo.mjs.map → NcBreadcrumbs-DtBCo9yI.mjs.map} +1 -1
  76. package/dist/chunks/NcButton-Byg8-ta1.mjs +102 -0
  77. package/dist/chunks/NcButton-Byg8-ta1.mjs.map +1 -0
  78. package/dist/chunks/{NcCheckboxRadioSwitch-CWU_M_ui.mjs → NcCheckboxRadioSwitch-DrNlVZw8.mjs} +29 -27
  79. package/dist/chunks/NcCheckboxRadioSwitch-DrNlVZw8.mjs.map +1 -0
  80. package/dist/chunks/{NcChip-C3U2HYR9.mjs → NcChip-Cq8DrWKb.mjs} +5 -5
  81. package/dist/chunks/{NcChip-C3U2HYR9.mjs.map → NcChip-Cq8DrWKb.mjs.map} +1 -1
  82. package/dist/chunks/{NcCollectionList-BtHsipae.mjs → NcCollectionList-CFuwV9sI.mjs} +6 -6
  83. package/dist/chunks/{NcCollectionList-BtHsipae.mjs.map → NcCollectionList-CFuwV9sI.mjs.map} +1 -1
  84. package/dist/chunks/{NcColorPicker-BI-Is4nj.mjs → NcColorPicker-Clo5oIYN.mjs} +5 -5
  85. package/dist/chunks/{NcColorPicker-BI-Is4nj.mjs.map → NcColorPicker-Clo5oIYN.mjs.map} +1 -1
  86. package/dist/chunks/{NcContent-BcF6f3N-.mjs → NcContent-CUuf0HwJ.mjs} +4 -4
  87. package/dist/chunks/{NcContent-BcF6f3N-.mjs.map → NcContent-CUuf0HwJ.mjs.map} +1 -1
  88. package/dist/chunks/{NcDashboardWidget-1rVqTzgV.mjs → NcDashboardWidget-CXw7Hxc8.mjs} +4 -4
  89. package/dist/chunks/{NcDashboardWidget-1rVqTzgV.mjs.map → NcDashboardWidget-CXw7Hxc8.mjs.map} +1 -1
  90. package/dist/chunks/{NcDashboardWidgetItem-7RXY5EKJ.mjs → NcDashboardWidgetItem-C6GoJEri.mjs} +4 -4
  91. package/dist/chunks/{NcDashboardWidgetItem-7RXY5EKJ.mjs.map → NcDashboardWidgetItem-C6GoJEri.mjs.map} +1 -1
  92. package/dist/chunks/{NcDateTime.vue_vue_type_script_setup_true_lang-DtP-oauZ.mjs → NcDateTime.vue_vue_type_script_setup_true_lang-BYXau4sd.mjs} +2 -2
  93. package/dist/chunks/{NcDateTime.vue_vue_type_script_setup_true_lang-DtP-oauZ.mjs.map → NcDateTime.vue_vue_type_script_setup_true_lang-BYXau4sd.mjs.map} +1 -1
  94. package/dist/chunks/{NcDateTimePicker-BzfuHym4.mjs → NcDateTimePicker-CDFvxL3U.mjs} +79 -37
  95. package/dist/chunks/NcDateTimePicker-CDFvxL3U.mjs.map +1 -0
  96. package/dist/chunks/{NcDateTimePickerNative-Dake1IML.mjs → NcDateTimePickerNative-BRuMK89z.mjs} +2 -2
  97. package/dist/chunks/{NcDateTimePickerNative-Dake1IML.mjs.map → NcDateTimePickerNative-BRuMK89z.mjs.map} +1 -1
  98. package/dist/chunks/{NcDialog-_pc2BPHU.mjs → NcDialog-BX0IET9Y.mjs} +7 -7
  99. package/dist/chunks/NcDialog-BX0IET9Y.mjs.map +1 -0
  100. package/dist/chunks/NcDialogButton.vue_vue_type_script_setup_true_lang-DbzPc_gW.mjs +69 -0
  101. package/dist/chunks/NcDialogButton.vue_vue_type_script_setup_true_lang-DbzPc_gW.mjs.map +1 -0
  102. package/dist/chunks/{NcEmojiPicker-CWbez_of.mjs → NcEmojiPicker-C30Ofq8B.mjs} +7 -7
  103. package/dist/chunks/{NcEmojiPicker-CWbez_of.mjs.map → NcEmojiPicker-C30Ofq8B.mjs.map} +1 -1
  104. package/dist/chunks/{NcHeaderButton-BsstEWtv.mjs → NcHeaderButton-BXfTpkIm.mjs} +4 -4
  105. package/dist/chunks/{NcHeaderButton-BsstEWtv.mjs.map → NcHeaderButton-BXfTpkIm.mjs.map} +1 -1
  106. package/dist/chunks/{NcHeaderMenu-ZzoCwPvX.mjs → NcHeaderMenu-CEH_-KT_.mjs} +5 -5
  107. package/dist/chunks/{NcHeaderMenu-ZzoCwPvX.mjs.map → NcHeaderMenu-CEH_-KT_.mjs.map} +1 -1
  108. package/dist/chunks/{NcIconSvgWrapper-BYTrkA66.mjs → NcIconSvgWrapper-Bc3ogp8T.mjs} +34 -21
  109. package/dist/chunks/NcIconSvgWrapper-Bc3ogp8T.mjs.map +1 -0
  110. package/dist/chunks/{NcInputConfirmCancel-CX56m05a.mjs → NcInputConfirmCancel-DeWD9uc6.mjs} +3 -3
  111. package/dist/chunks/{NcInputConfirmCancel-CX56m05a.mjs.map → NcInputConfirmCancel-DeWD9uc6.mjs.map} +1 -1
  112. package/dist/chunks/{NcInputField-DdZlDVwQ.mjs → NcInputField-BBS1E7r-.mjs} +2 -2
  113. package/dist/chunks/{NcInputField-DdZlDVwQ.mjs.map → NcInputField-BBS1E7r-.mjs.map} +1 -1
  114. package/dist/chunks/{NcListItem-DF8Yv05m.mjs → NcListItem-CVX52kG-.mjs} +2 -2
  115. package/dist/chunks/{NcListItem-DF8Yv05m.mjs.map → NcListItem-CVX52kG-.mjs.map} +1 -1
  116. package/dist/chunks/{NcListItemIcon-nzw_x2Q5.mjs → NcListItemIcon-Cc6vXRrY.mjs} +4 -4
  117. package/dist/chunks/{NcListItemIcon-nzw_x2Q5.mjs.map → NcListItemIcon-Cc6vXRrY.mjs.map} +1 -1
  118. package/dist/chunks/{NcMentionBubble.vue_vue_type_style_index_0_scoped_6c8d0da9_lang-DYJMHclV.mjs → NcMentionBubble.vue_vue_type_style_index_0_scoped_5b8f093f_lang-DZbkIMTW.mjs} +2 -2
  119. package/dist/chunks/{NcMentionBubble.vue_vue_type_style_index_0_scoped_6c8d0da9_lang-DYJMHclV.mjs.map → NcMentionBubble.vue_vue_type_style_index_0_scoped_5b8f093f_lang-DZbkIMTW.mjs.map} +1 -1
  120. package/dist/chunks/{NcPasswordField-BnnlEhT1.mjs → NcPasswordField-CYPRKGml.mjs} +3 -3
  121. package/dist/chunks/{NcPasswordField-BnnlEhT1.mjs.map → NcPasswordField-CYPRKGml.mjs.map} +1 -1
  122. package/dist/chunks/{NcPopover-C3ZoyUjc.mjs → NcPopover-EPnt2iHh.mjs} +152 -26
  123. package/dist/chunks/NcPopover-EPnt2iHh.mjs.map +1 -0
  124. package/dist/chunks/{NcRelatedResourcesPanel-D2YLEouH.mjs → NcRelatedResourcesPanel-Bcy58V31.mjs} +4 -4
  125. package/dist/chunks/{NcRelatedResourcesPanel-D2YLEouH.mjs.map → NcRelatedResourcesPanel-Bcy58V31.mjs.map} +1 -1
  126. package/dist/chunks/{NcRichContenteditable-B16VJW0Y.mjs → NcRichContenteditable-BR08SbpA.mjs} +209 -44
  127. package/dist/chunks/NcRichContenteditable-BR08SbpA.mjs.map +1 -0
  128. package/dist/chunks/{NcRichText-4jIBSmap.mjs → NcRichText-jZif8PdV.mjs} +8 -8
  129. package/dist/chunks/{NcRichText-4jIBSmap.mjs.map → NcRichText-jZif8PdV.mjs.map} +1 -1
  130. package/dist/chunks/NcSavingIndicatorIcon.vue_vue_type_script_setup_true_lang-DlRBo3QU.mjs +58 -0
  131. package/dist/chunks/NcSavingIndicatorIcon.vue_vue_type_script_setup_true_lang-DlRBo3QU.mjs.map +1 -0
  132. package/dist/chunks/{NcSelect-CAx_ixPU.mjs → NcSelect-BkTH-Yqm.mjs} +25 -68
  133. package/dist/chunks/NcSelect-BkTH-Yqm.mjs.map +1 -0
  134. package/dist/chunks/{NcSelectTags-UXzC7lDz.mjs → NcSelectTags-BY8LM7qV.mjs} +3 -3
  135. package/dist/chunks/{NcSelectTags-UXzC7lDz.mjs.map → NcSelectTags-BY8LM7qV.mjs.map} +1 -1
  136. package/dist/chunks/{NcSettingsInputText-BEHu3xAI.mjs → NcSettingsInputText-B129n9sr.mjs} +3 -3
  137. package/dist/chunks/{NcSettingsInputText-BEHu3xAI.mjs.map → NcSettingsInputText-B129n9sr.mjs.map} +1 -1
  138. package/dist/chunks/{NcSettingsSection-X7f0W7vZ.mjs → NcSettingsSection-CjWtq7TT.mjs} +2 -2
  139. package/dist/chunks/{NcSettingsSection-X7f0W7vZ.mjs.map → NcSettingsSection-CjWtq7TT.mjs.map} +1 -1
  140. package/dist/chunks/{NcSettingsSelectGroup-DfrKchOy.mjs → NcSettingsSelectGroup-B8uq0KIw.mjs} +4 -4
  141. package/dist/chunks/{NcSettingsSelectGroup-DfrKchOy.mjs.map → NcSettingsSelectGroup-B8uq0KIw.mjs.map} +1 -1
  142. package/dist/chunks/{NcTextField-BTzKCPza.mjs → NcTextField-KGXtf7Y6.mjs} +4 -4
  143. package/dist/chunks/{NcTextField-BTzKCPza.mjs.map → NcTextField-KGXtf7Y6.mjs.map} +1 -1
  144. package/dist/chunks/NcTimezonePicker.vue_vue_type_script_setup_true_lang-DxoB-jLa.mjs +98 -0
  145. package/dist/chunks/NcTimezonePicker.vue_vue_type_script_setup_true_lang-DxoB-jLa.mjs.map +1 -0
  146. package/dist/chunks/{NcUserBubble-Dgzog0Ps.mjs → NcUserBubble-qqRewR9C.mjs} +3 -3
  147. package/dist/chunks/{NcUserBubble-Dgzog0Ps.mjs.map → NcUserBubble-qqRewR9C.mjs.map} +1 -1
  148. package/dist/chunks/{NcUserStatusIcon-DvYiEs2L.mjs → NcUserStatusIcon-DpZVD4HJ.mjs} +3 -3
  149. package/dist/chunks/{NcUserStatusIcon-DvYiEs2L.mjs.map → NcUserStatusIcon-DpZVD4HJ.mjs.map} +1 -1
  150. package/dist/chunks/{ScopeComponent-BWZEma4R.mjs → ScopeComponent-BIpNSmeE.mjs} +2 -2
  151. package/dist/chunks/{ScopeComponent-BWZEma4R.mjs.map → ScopeComponent-BIpNSmeE.mjs.map} +1 -1
  152. package/dist/chunks/{_l10n-7kR7gXFc.mjs → _l10n-BNGeEX3W.mjs} +58 -62
  153. package/dist/chunks/_l10n-BNGeEX3W.mjs.map +1 -0
  154. package/dist/chunks/{colors-BJbWzaQ-.mjs → colors-CSUSQx1k.mjs} +2 -2
  155. package/dist/chunks/{colors-BJbWzaQ-.mjs.map → colors-CSUSQx1k.mjs.map} +1 -1
  156. package/dist/chunks/{referencePickerModal-BpNnwC_g.mjs → referencePickerModal-DzM7CkKN.mjs} +6 -6
  157. package/dist/chunks/{referencePickerModal-BpNnwC_g.mjs.map → referencePickerModal-DzM7CkKN.mjs.map} +1 -1
  158. package/dist/chunks/{useFormatDateTime-B5sWtJdj.mjs → useFormatDateTime-BPGWjR3-.mjs} +2 -2
  159. package/dist/chunks/{useFormatDateTime-B5sWtJdj.mjs.map → useFormatDateTime-BPGWjR3-.mjs.map} +1 -1
  160. package/dist/chunks/{usernameToColor-CzXWY0j4.mjs → usernameToColor-Bl9NGU_9.mjs} +2 -2
  161. package/dist/chunks/{usernameToColor-CzXWY0j4.mjs.map → usernameToColor-Bl9NGU_9.mjs.map} +1 -1
  162. package/dist/components/NcActionButton/NcActionButton.vue.d.ts +3 -3
  163. package/dist/components/NcActionButton/index.mjs +1 -1
  164. package/dist/components/NcActionButtonGroup/index.mjs +1 -1
  165. package/dist/components/NcActionCheckbox/NcActionCheckbox.vue.d.ts +2 -2
  166. package/dist/components/NcActionCheckbox/index.mjs +1 -1
  167. package/dist/components/NcActionInput/index.mjs +1 -1
  168. package/dist/components/NcActionLink/index.mjs +1 -1
  169. package/dist/components/NcActionRadio/NcActionRadio.vue.d.ts +2 -2
  170. package/dist/components/NcActionRadio/index.mjs +1 -1
  171. package/dist/components/NcActionRouter/NcActionRouter.vue.d.ts +2 -2
  172. package/dist/components/NcActionRouter/index.mjs +1 -1
  173. package/dist/components/NcActionText/index.mjs +1 -1
  174. package/dist/components/NcActionTextEditable/NcActionTextEditable.vue.d.ts +2 -2
  175. package/dist/components/NcActionTextEditable/index.mjs +1 -1
  176. package/dist/components/NcActions/index.mjs +1 -1
  177. package/dist/components/NcAppContent/index.mjs +1 -1
  178. package/dist/components/NcAppNavigation/index.mjs +1 -1
  179. package/dist/components/NcAppNavigationCaption/index.mjs +1 -1
  180. package/dist/components/NcAppNavigationItem/index.mjs +1 -1
  181. package/dist/components/NcAppNavigationNew/index.mjs +1 -1
  182. package/dist/components/NcAppNavigationNewItem/index.mjs +1 -1
  183. package/dist/components/NcAppNavigationSearch/index.mjs +1 -1
  184. package/dist/components/NcAppNavigationSettings/NcAppNavigationSettings.vue.d.ts +3 -10
  185. package/dist/components/NcAppNavigationSettings/index.mjs +1 -1
  186. package/dist/components/NcAppNavigationToggle/index.mjs +1 -1
  187. package/dist/components/NcAppSettingsDialog/index.mjs +1 -1
  188. package/dist/components/NcAppSidebar/index.mjs +1 -1
  189. package/dist/components/NcAppSidebarTab/NcAppSidebarTab.vue.d.ts +1 -1
  190. package/dist/components/NcAvatar/index.mjs +1 -1
  191. package/dist/components/NcBlurHash/NcBlurHash.vue.d.ts +6 -13
  192. package/dist/components/NcBreadcrumb/index.mjs +1 -1
  193. package/dist/components/NcBreadcrumbs/index.mjs +1 -1
  194. package/dist/components/NcButton/NcButton.vue.d.ts +102 -238
  195. package/dist/components/NcButton/index.d.ts +2 -2
  196. package/dist/components/NcButton/index.mjs +1 -4
  197. package/dist/components/NcCheckboxRadioSwitch/index.mjs +1 -1
  198. package/dist/components/NcChip/NcChip.vue.d.ts +3 -32
  199. package/dist/components/NcChip/index.mjs +1 -1
  200. package/dist/components/NcCollectionList/index.mjs +1 -1
  201. package/dist/components/NcColorPicker/index.mjs +1 -1
  202. package/dist/components/NcContent/index.mjs +1 -1
  203. package/dist/components/NcCounterBubble/NcCounterBubble.vue.d.ts +1 -1
  204. package/dist/components/NcDashboardWidget/index.mjs +1 -1
  205. package/dist/components/NcDashboardWidgetItem/index.mjs +1 -1
  206. package/dist/components/NcDateTime/NcDateTime.vue.d.ts +2 -31
  207. package/dist/components/NcDateTime/index.mjs +1 -1
  208. package/dist/components/NcDateTimePicker/NcDateTimePicker.vue.d.ts +49 -60
  209. package/dist/components/NcDateTimePicker/index.mjs +1 -1
  210. package/dist/components/NcDateTimePickerNative/index.mjs +1 -1
  211. package/dist/components/NcDialog/NcDialog.vue.d.ts +58 -132
  212. package/dist/components/NcDialog/index.mjs +1 -1
  213. package/dist/components/NcDialogButton/NcDialogButton.vue.d.ts +34 -110
  214. package/dist/components/NcDialogButton/index.mjs +1 -1
  215. package/dist/components/NcEmojiPicker/index.mjs +1 -1
  216. package/dist/components/NcHeaderButton/NcHeaderButton.vue.d.ts +4 -13
  217. package/dist/components/NcHeaderButton/index.mjs +1 -1
  218. package/dist/components/NcHeaderMenu/index.mjs +1 -1
  219. package/dist/components/NcIconSvgWrapper/NcIconSvgWrapper.vue.d.ts +20 -11
  220. package/dist/components/NcIconSvgWrapper/index.mjs +1 -1
  221. package/dist/components/NcInputField/index.mjs +1 -1
  222. package/dist/components/NcListItem/index.mjs +1 -1
  223. package/dist/components/NcListItemIcon/index.mjs +1 -1
  224. package/dist/components/NcLoadingIcon/NcLoadingIcon.vue.d.ts +1 -1
  225. package/dist/components/NcModal/index.mjs +52 -48
  226. package/dist/components/NcModal/index.mjs.map +1 -1
  227. package/dist/components/NcPasswordField/index.mjs +1 -1
  228. package/dist/components/NcPopover/index.mjs +1 -1
  229. package/dist/components/NcRelatedResourcesPanel/index.mjs +1 -1
  230. package/dist/components/NcRichContenteditable/NcAutoCompleteResult.vue.d.ts +2 -2
  231. package/dist/components/NcRichContenteditable/NcMentionBubble.vue.d.ts +2 -2
  232. package/dist/components/NcRichContenteditable/NcRichContenteditable.vue.d.ts +347 -0
  233. package/dist/components/NcRichContenteditable/index.mjs +3 -4
  234. package/dist/components/NcRichContenteditable/index.mjs.map +1 -1
  235. package/dist/components/NcRichText/NcReferencePicker/NcProviderList.vue.d.ts +194 -0
  236. package/dist/components/NcRichText/NcReferencePicker/NcSearch.vue.d.ts +268 -0
  237. package/dist/components/NcRichText/index.mjs +3 -3
  238. package/dist/components/NcSavingIndicatorIcon/NcSavingIndicatorIcon.vue.d.ts +13 -56
  239. package/dist/components/NcSavingIndicatorIcon/index.d.ts +4 -0
  240. package/dist/components/NcSavingIndicatorIcon/index.mjs +2 -2
  241. package/dist/components/NcSelect/NcSelect.vue.d.ts +121 -0
  242. package/dist/components/NcSelect/index.mjs +1 -1
  243. package/dist/components/NcSelectTags/NcSelectTags.vue.d.ts +205 -0
  244. package/dist/components/NcSelectTags/index.mjs +1 -1
  245. package/dist/components/NcSelectUsers/NcSelectUsers.vue.d.ts +117 -0
  246. package/dist/components/NcSelectUsers/index.d.ts +5 -0
  247. package/dist/components/NcSelectUsers/index.mjs +73 -0
  248. package/dist/components/NcSelectUsers/index.mjs.map +1 -0
  249. package/dist/components/NcSettingsInputText/NcSettingsInputText.vue.d.ts +3 -3
  250. package/dist/components/NcSettingsInputText/index.mjs +1 -1
  251. package/dist/components/NcSettingsSection/index.mjs +1 -1
  252. package/dist/components/NcSettingsSelectGroup/NcSettingsSelectGroup.vue.d.ts +265 -0
  253. package/dist/components/NcSettingsSelectGroup/index.mjs +1 -1
  254. package/dist/components/NcTextArea/NcTextArea.vue.d.ts +6 -6
  255. package/dist/components/NcTextField/index.mjs +1 -1
  256. package/dist/components/NcTimezonePicker/NcTimezonePicker.vue.d.ts +23 -0
  257. package/dist/components/NcTimezonePicker/index.d.ts +5 -0
  258. package/dist/components/NcTimezonePicker/index.mjs +2 -2
  259. package/dist/components/NcTimezonePicker/timezoneDataProviderService.d.ts +5 -1
  260. package/dist/components/NcUserBubble/index.mjs +1 -1
  261. package/dist/components/NcUserStatusIcon/index.mjs +1 -1
  262. package/dist/components/index.d.ts +2 -2
  263. package/dist/directives/index.d.ts +0 -1
  264. package/dist/functions/contactsMenu/index.d.ts +40 -0
  265. package/dist/functions/contactsMenu/index.mjs +22 -0
  266. package/dist/functions/contactsMenu/index.mjs.map +1 -0
  267. package/dist/functions/dialog/index.d.ts +22 -13
  268. package/dist/functions/dialog/index.mjs +27 -18
  269. package/dist/functions/dialog/index.mjs.map +1 -1
  270. package/dist/functions/index.d.ts +1 -0
  271. package/dist/functions/reference/index.mjs +1 -1
  272. package/dist/functions/usernameToColor/index.mjs +1 -1
  273. package/dist/index.d.ts +0 -1
  274. package/dist/index.mjs +86 -89
  275. package/dist/index.mjs.map +1 -1
  276. package/package.json +20 -12
  277. package/dist/assets/NcDateTimePicker-AIJmp5dC.css +0 -81
  278. package/dist/assets/index-DQ4Plm4r.css +0 -89
  279. package/dist/chunks/ChevronLeft-FfC-tiIS.mjs +0 -49
  280. package/dist/chunks/ChevronLeft-FfC-tiIS.mjs.map +0 -1
  281. package/dist/chunks/NcActionButton-BdQ_qmvW.mjs.map +0 -1
  282. package/dist/chunks/NcActionTextEditable-nTbwgRy2.mjs.map +0 -1
  283. package/dist/chunks/NcActions-CgKHXNbF.mjs.map +0 -1
  284. package/dist/chunks/NcAppContent-C4gBVRQs.mjs.map +0 -1
  285. package/dist/chunks/NcAvatar-CA8y4d-c.mjs.map +0 -1
  286. package/dist/chunks/NcButton-BHLqKKYP.mjs +0 -308
  287. package/dist/chunks/NcButton-BHLqKKYP.mjs.map +0 -1
  288. package/dist/chunks/NcCheckboxRadioSwitch-CWU_M_ui.mjs.map +0 -1
  289. package/dist/chunks/NcDateTimePicker-BzfuHym4.mjs.map +0 -1
  290. package/dist/chunks/NcDialog-_pc2BPHU.mjs.map +0 -1
  291. package/dist/chunks/NcDialogButton.vue_vue_type_script_setup_true_lang-BKrJ_xd8.mjs +0 -119
  292. package/dist/chunks/NcDialogButton.vue_vue_type_script_setup_true_lang-BKrJ_xd8.mjs.map +0 -1
  293. package/dist/chunks/NcIconSvgWrapper-BYTrkA66.mjs.map +0 -1
  294. package/dist/chunks/NcPopover-C3ZoyUjc.mjs.map +0 -1
  295. package/dist/chunks/NcRichContenteditable-B16VJW0Y.mjs.map +0 -1
  296. package/dist/chunks/NcSavingIndicatorIcon-icWy8J5x.mjs +0 -80
  297. package/dist/chunks/NcSavingIndicatorIcon-icWy8J5x.mjs.map +0 -1
  298. package/dist/chunks/NcSelect-CAx_ixPU.mjs.map +0 -1
  299. package/dist/chunks/NcTimezonePicker-CMoUk4sZ.mjs +0 -188
  300. package/dist/chunks/NcTimezonePicker-CMoUk4sZ.mjs.map +0 -1
  301. package/dist/chunks/_l10n-7kR7gXFc.mjs.map +0 -1
  302. package/dist/chunks/index--u6iHwFv.mjs +0 -184
  303. package/dist/chunks/index--u6iHwFv.mjs.map +0 -1
  304. package/dist/components/NcActions/NcActions.vue.d.ts +0 -544
  305. package/dist/components/NcAppNavigation/NcAppNavigation.vue.d.ts +0 -215
  306. package/dist/components/NcAppNavigationCaption/NcAppNavigationCaption.vue.d.ts +0 -379
  307. package/dist/components/NcAppNavigationItem/NcAppNavigationIconCollapsible.vue.d.ts +0 -161
  308. package/dist/components/NcAppNavigationItem/NcAppNavigationItem.vue.d.ts +0 -1310
  309. package/dist/components/NcAppNavigationItem/NcInputConfirmCancel.vue.d.ts +0 -195
  310. package/dist/components/NcAppNavigationNew/NcAppNavigationNew.vue.d.ts +0 -195
  311. package/dist/components/NcAppNavigationNewItem/NcAppNavigationNewItem.vue.d.ts +0 -316
  312. package/dist/components/NcAppNavigationSearch/NcAppNavigationSearch.vue.d.ts +0 -389
  313. package/dist/components/NcAppNavigationToggle/NcAppNavigationToggle.vue.d.ts +0 -173
  314. package/dist/components/NcBreadcrumb/NcBreadcrumb.vue.d.ts +0 -717
  315. package/dist/components/NcBreadcrumbs/NcBreadcrumbs.vue.d.ts +0 -1330
  316. package/dist/components/NcButton/types.d.ts +0 -30
  317. package/dist/components/NcContent/NcContent.vue.d.ts +0 -227
  318. package/dist/components/NcEmojiPicker/NcEmojiPicker.vue.d.ts +0 -642
  319. package/dist/components/NcHeaderMenu/NcHeaderMenu.vue.d.ts +0 -245
  320. package/dist/components/NcInputField/NcInputField.vue.d.ts +0 -419
  321. package/dist/components/NcListItem/NcListItem.vue.d.ts +0 -714
  322. package/dist/components/NcRelatedResourcesPanel/NcRelatedResourcesPanel.vue.d.ts +0 -553
  323. package/dist/components/NcRelatedResourcesPanel/NcResource.vue.d.ts +0 -173
  324. package/dist/components/NcRelatedResourcesPanel/NcTeamResources.vue.d.ts +0 -241
  325. package/dist/components/NcRichText/NcReferenceList.vue.d.ts +0 -292
  326. package/dist/components/NcRichText/NcReferencePicker/NcRawLinkInput.vue.d.ts +0 -606
  327. package/dist/components/NcRichText/NcReferenceWidget.vue.d.ts +0 -211
  328. package/dist/components/NcRichText/NcRichText.vue.d.ts +0 -409
  329. package/dist/components/NcTextField/NcTextField.vue.d.ts +0 -314
  330. package/dist/components/NcTimezonePicker/timezone.d.ts +0 -14
  331. package/dist/directives/Tooltip/index.d.ts +0 -3
  332. package/dist/directives/Tooltip/index.mjs +0 -12
  333. package/dist/directives/Tooltip/index.mjs.map +0 -1
  334. package/dist/mixins/richEditor/index.mjs +0 -10
  335. package/dist/mixins/richEditor/index.mjs.map +0 -1
@@ -1,34 +1,204 @@
1
- import '../assets/NcRichContenteditable-Bxi-Ki0j.css';
2
- import { r as register, v as t35, z as t32, a as t } from "./_l10n-7kR7gXFc.mjs";
3
- import { g as getAvatarUrl } from "./NcMentionBubble.vue_vue_type_style_index_0_scoped_6c8d0da9_lang-DYJMHclV.mjs";
4
- import { N as NcUserStatusIcon } from "./NcUserStatusIcon-DvYiEs2L.mjs";
5
- import { resolveComponent, createElementBlock, openBlock, createElementVNode, normalizeStyle, normalizeClass, createBlock, createCommentVNode, toDisplayString, resolveDirective, withDirectives, mergeProps, withModifiers, withKeys } from "vue";
1
+ import '../assets/NcRichContenteditable-CkyUKlIz.css';
2
+ import { r as register, s as t35, B as t32, a as t, C as n } from "./_l10n-BNGeEX3W.mjs";
3
+ import { g as getAvatarUrl } from "./NcMentionBubble.vue_vue_type_style_index_0_scoped_5b8f093f_lang-DZbkIMTW.mjs";
4
+ import { N as NcUserStatusIcon } from "./NcUserStatusIcon-DpZVD4HJ.mjs";
5
+ import { createElementBlock, openBlock, normalizeClass, createElementVNode, normalizeStyle, toDisplayString, createApp, resolveComponent, createBlock, createCommentVNode, mergeProps, withModifiers, withKeys } from "vue";
6
6
  import { _ as _export_sfc } from "./_plugin-vue_export-helper-1tPrXgE0.mjs";
7
- import { r as richEditor } from "./index--u6iHwFv.mjs";
8
- import "../directives/Tooltip/index.mjs";
7
+ import escapeHTML from "escape-html";
8
+ import stripTags from "striptags";
9
9
  import { e as emojiSearch, a as emojiAddRecent } from "./emoji-BY_D0V5K.mjs";
10
- import "./NcRichText-4jIBSmap.mjs";
10
+ import "./NcRichText-jZif8PdV.mjs";
11
11
  import "./index-BF8joS9W.mjs";
12
12
  import "@vueuse/core";
13
13
  import "vue-router";
14
- import { g as getLinkWithPicker, d as searchProvider } from "./referencePickerModal-BpNnwC_g.mjs";
14
+ import { g as getLinkWithPicker, d as searchProvider } from "./referencePickerModal-DzM7CkKN.mjs";
15
15
  import "./autolink-CKPk5rzg.mjs";
16
- import "./NcButton-BHLqKKYP.mjs";
16
+ import "./NcButton-Byg8-ta1.mjs";
17
17
  import "@nextcloud/axios";
18
18
  import "@nextcloud/sharing/public";
19
19
  import "@nextcloud/auth";
20
20
  import "@nextcloud/router";
21
21
  import "./NcEmptyContent-BQnIrQQn.mjs";
22
- import "./NcSelect-CAx_ixPU.mjs";
22
+ import "./NcSelect-BkTH-Yqm.mjs";
23
23
  import "./NcLoadingIcon-CsMn1bFR.mjs";
24
- import "./NcTextField-BTzKCPza.mjs";
24
+ import "./NcTextField-KGXtf7Y6.mjs";
25
25
  import "../components/NcModal/index.mjs";
26
26
  import "@nextcloud/event-bus";
27
27
  import { c as createElementId } from "./createElementId-DhjFt1I9.mjs";
28
28
  import Tribute from "tributejs/dist/tribute.esm.js";
29
29
  import debounce from "debounce";
30
- import stringLength from "string-length";
31
- import { VTooltip } from "floating-vue";
30
+ const _sfc_main$2 = {
31
+ name: "NcMentionBubble",
32
+ props: {
33
+ id: {
34
+ type: String,
35
+ required: true
36
+ },
37
+ /**
38
+ * @deprecated Use `label` instead
39
+ */
40
+ title: {
41
+ type: String,
42
+ required: false,
43
+ default: null
44
+ },
45
+ label: {
46
+ type: String,
47
+ required: false,
48
+ default: null
49
+ },
50
+ icon: {
51
+ type: String,
52
+ required: true
53
+ },
54
+ iconUrl: {
55
+ type: [String, null],
56
+ default: null
57
+ },
58
+ source: {
59
+ type: String,
60
+ required: true
61
+ },
62
+ primary: {
63
+ type: Boolean,
64
+ default: false
65
+ }
66
+ },
67
+ computed: {
68
+ avatarUrl() {
69
+ if (this.iconUrl) {
70
+ return this.iconUrl;
71
+ }
72
+ return this.id && this.source === "users" ? this.getAvatarUrl(this.id, 44) : null;
73
+ },
74
+ mentionText() {
75
+ return !this.id.includes(" ") && !this.id.includes("/") ? `@${this.id}` : `@"${this.id}"`;
76
+ },
77
+ // Fallback to title for compatibility
78
+ labelWithFallback() {
79
+ return this.label || this.title;
80
+ }
81
+ },
82
+ methods: {
83
+ getAvatarUrl
84
+ }
85
+ };
86
+ const _hoisted_1$2 = { class: "mention-bubble__wrapper" };
87
+ const _hoisted_2$2 = { class: "mention-bubble__content" };
88
+ const _hoisted_3$1 = ["title"];
89
+ const _hoisted_4$1 = {
90
+ role: "none",
91
+ class: "mention-bubble__select"
92
+ };
93
+ function _sfc_render$2(_ctx, _cache, $props, $setup, $data, $options) {
94
+ return openBlock(), createElementBlock("span", {
95
+ class: normalizeClass([{ "mention-bubble--primary": $props.primary }, "mention-bubble"]),
96
+ contenteditable: "false"
97
+ }, [
98
+ createElementVNode("span", _hoisted_1$2, [
99
+ createElementVNode("span", _hoisted_2$2, [
100
+ createElementVNode("span", {
101
+ class: normalizeClass([[$props.icon, `mention-bubble__icon--${$options.avatarUrl ? "with-avatar" : ""}`], "mention-bubble__icon"]),
102
+ style: normalizeStyle($options.avatarUrl ? { backgroundImage: `url(${$options.avatarUrl})` } : null)
103
+ }, null, 6),
104
+ createElementVNode("span", {
105
+ role: "heading",
106
+ class: "mention-bubble__title",
107
+ title: $options.labelWithFallback
108
+ }, null, 8, _hoisted_3$1)
109
+ ]),
110
+ createElementVNode("span", _hoisted_4$1, toDisplayString($options.mentionText), 1)
111
+ ])
112
+ ], 2);
113
+ }
114
+ const NcMentionBubble = /* @__PURE__ */ _export_sfc(_sfc_main$2, [["render", _sfc_render$2], ["__scopeId", "data-v-5b8f093f"]]);
115
+ const MENTION_START = /(?=[a-z0-9_\-@.'])\B/.source;
116
+ const MENTION_SIMPLE = /(@[a-z0-9_\-@.']+)/.source;
117
+ const MENTION_GUEST = /@"(?:guest|email){1}\/[a-f0-9]+"/.source;
118
+ const MENTION_PREFIXED = /@"(?:federated_)?(?:group|team|user){1}\/[a-z0-9_\-@.' /:]+"/.source;
119
+ const MENTION_WITH_SPACE = /@"[a-z0-9_\-@.' ]+"/.source;
120
+ const MENTION_COMPLEX = `(${MENTION_GUEST}|${MENTION_PREFIXED}|${MENTION_WITH_SPACE})`;
121
+ const USERID_REGEX = new RegExp(`${MENTION_START}${MENTION_SIMPLE}`, "gi");
122
+ const USERID_REGEX_WITH_SPACE = new RegExp(`${MENTION_START}${MENTION_COMPLEX}`, "gi");
123
+ const richEditor = {
124
+ props: {
125
+ userData: {
126
+ type: Object,
127
+ default: () => ({})
128
+ }
129
+ },
130
+ methods: {
131
+ /**
132
+ * Convert the value string to html for the inner content
133
+ *
134
+ * @param {string} value the content without html
135
+ * @return {string} rendered html
136
+ */
137
+ renderContent(value) {
138
+ const sanitizedValue = escapeHTML(value);
139
+ const splitValue = sanitizedValue.split(USERID_REGEX).map((part) => part.split(USERID_REGEX_WITH_SPACE)).flat();
140
+ return splitValue.map((part) => {
141
+ if (!part.startsWith("@")) {
142
+ return part;
143
+ }
144
+ const id = part.slice(1).replace(/"/gi, "");
145
+ return this.genSelectTemplate(id);
146
+ }).join("").replace(/\n/gmi, "<br>").replace(/&amp;/gmi, "&");
147
+ },
148
+ /**
149
+ * Convert the innerHtml content to a string with mentions as text
150
+ *
151
+ * @param {string} content the content without html
152
+ * @return {string}
153
+ */
154
+ parseContent(content) {
155
+ let text = content;
156
+ text = text.replace(/<br>/gmi, "\n");
157
+ text = text.replace(/&nbsp;/gmi, " ");
158
+ text = text.replace(/&amp;/gmi, "&");
159
+ text = text.replace(/<\/div>/gmi, "\n");
160
+ text = stripTags(text, "<div>");
161
+ text = stripTags(text);
162
+ return text;
163
+ },
164
+ /**
165
+ * Generate an autocompletion popup entry template
166
+ *
167
+ * @param {string} value the value to match against the userData
168
+ * @return {string}
169
+ */
170
+ genSelectTemplate(value) {
171
+ if (typeof value === "undefined") {
172
+ return `${this.autocompleteTribute.current.collection.trigger}${this.autocompleteTribute.current.mentionText}`;
173
+ }
174
+ const data = this.userData[value];
175
+ if (!data) {
176
+ return [" ", "/", ":"].every((char) => !value.includes(char)) ? `@${value}` : `@"${value}"`;
177
+ }
178
+ return this.renderComponentHtml(data, NcMentionBubble).replace(/[\n\t]/gmi, "").replace(/>\s+</g, "><");
179
+ },
180
+ /**
181
+ * Render a component and return its html content
182
+ *
183
+ * @param {object} props the props to pass to the component
184
+ * @param {object} component the component to render
185
+ * @return {string} the rendered html
186
+ */
187
+ renderComponentHtml(props, component) {
188
+ const Item = createApp(component, {
189
+ ...props
190
+ });
191
+ const mount = document.createElement("div");
192
+ mount.style.display = "none";
193
+ document.body.appendChild(mount);
194
+ Item.mount(mount);
195
+ const renderedHtml = mount.innerHTML;
196
+ Item.unmount();
197
+ mount.remove();
198
+ return renderedHtml;
199
+ }
200
+ }
201
+ };
32
202
  const _sfc_main$1 = {
33
203
  name: "NcAutoCompleteResult",
34
204
  components: {
@@ -125,16 +295,16 @@ function _sfc_render$1(_ctx, _cache, $props, $setup, $data, $options) {
125
295
  const NcAutoCompleteResult = /* @__PURE__ */ _export_sfc(_sfc_main$1, [["render", _sfc_render$1], ["__scopeId", "data-v-c723f255"]]);
126
296
  register(t32, t35);
127
297
  const style1 = {
128
- "material-design-icon": "_material-design-icon_9ec48_12",
129
- "tribute-container": "_tribute-container_9ec48_20",
130
- "tribute-container__item": "_tribute-container__item_9ec48_41",
131
- "tribute-container--focus-visible": "_tribute-container--focus-visible_9ec48_55",
132
- "tribute-container-autocomplete": "_tribute-container-autocomplete_9ec48_59",
133
- "tribute-container-emoji": "_tribute-container-emoji_9ec48_65",
134
- "tribute-container-link": "_tribute-container-link_9ec48_66",
135
- "tribute-item": "_tribute-item_9ec48_71",
136
- "tribute-item__title": "_tribute-item__title_9ec48_86",
137
- "tribute-item__icon": "_tribute-item__icon_9ec48_91"
298
+ "material-design-icon": "_material-design-icon_1sdgd_12",
299
+ "tribute-container": "_tribute-container_1sdgd_20",
300
+ "tribute-container__item": "_tribute-container__item_1sdgd_41",
301
+ "tribute-container--focus-visible": "_tribute-container--focus-visible_1sdgd_55",
302
+ "tribute-container-autocomplete": "_tribute-container-autocomplete_1sdgd_59",
303
+ "tribute-container-emoji": "_tribute-container-emoji_1sdgd_65",
304
+ "tribute-container-link": "_tribute-container-link_1sdgd_66",
305
+ "tribute-item": "_tribute-item_1sdgd_71",
306
+ "tribute-item__title": "_tribute-item__title_1sdgd_86",
307
+ "tribute-item__icon": "_tribute-item__icon_1sdgd_91"
138
308
  };
139
309
  const smilesCharacters = ["d", "D", "p", "P", "s", "S", "x", "X", ")", "(", "|", "/"];
140
310
  const textSmiles = [];
@@ -144,9 +314,6 @@ smilesCharacters.forEach((char) => {
144
314
  });
145
315
  const _sfc_main = {
146
316
  name: "NcRichContenteditable",
147
- directives: {
148
- tooltip: VTooltip
149
- },
150
317
  mixins: [richEditor],
151
318
  inheritAttrs: false,
152
319
  props: {
@@ -242,10 +409,12 @@ const _sfc_main = {
242
409
  "smart-picker-submit"
243
410
  ],
244
411
  setup() {
412
+ const segmenter = new Intl.Segmenter();
245
413
  return {
246
414
  // Constants
247
415
  labelId: createElementId(),
248
416
  tributeId: createElementId(),
417
+ segmenter,
249
418
  /**
250
419
  * Non-reactive property to store Tribute instance
251
420
  *
@@ -287,7 +456,8 @@ const _sfc_main = {
287
456
  if (this.isEmptyValue || !this.maxlength) {
288
457
  return false;
289
458
  }
290
- return stringLength(this.localValue) > this.maxlength;
459
+ const length = [...this.segmenter.segment(this.localValue)].length;
460
+ return length > this.maxlength;
291
461
  },
292
462
  /**
293
463
  * Tooltip to show if characters count is over limit
@@ -298,11 +468,7 @@ const _sfc_main = {
298
468
  if (!this.isOverMaxlength) {
299
469
  return null;
300
470
  }
301
- return {
302
- content: t("Message limit of {count} characters reached", { count: this.maxlength }),
303
- shown: true,
304
- trigger: "manual"
305
- };
471
+ return n("Message limit of %n character reached", "Message limit of %n characters reached", this.maxlength);
306
472
  },
307
473
  /**
308
474
  * Edit is only allowed when contenteditableis true and disabled is false
@@ -676,14 +842,13 @@ const _sfc_main = {
676
842
  }
677
843
  }
678
844
  };
679
- const _hoisted_1 = ["id", "contenteditable", "aria-labelledby", "aria-placeholder", "aria-controls", "aria-expanded", "aria-activedescendant"];
845
+ const _hoisted_1 = ["id", "contenteditable", "aria-labelledby", "aria-placeholder", "aria-controls", "aria-expanded", "aria-activedescendant", "title"];
680
846
  const _hoisted_2 = ["id"];
681
847
  function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
682
- const _directive_tooltip = resolveDirective("tooltip");
683
848
  return openBlock(), createElementBlock("div", {
684
849
  class: normalizeClass(["rich-contenteditable", _ctx.$props.class])
685
850
  }, [
686
- withDirectives(createElementVNode("div", mergeProps({
851
+ createElementVNode("div", mergeProps({
687
852
  id: $props.id,
688
853
  ref: "contenteditable",
689
854
  class: [{
@@ -702,7 +867,8 @@ function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
702
867
  "aria-autocomplete": "inline",
703
868
  "aria-controls": $setup.tributeId,
704
869
  "aria-expanded": $data.isAutocompleteOpen ? "true" : "false",
705
- "aria-activedescendant": $data.autocompleteActiveId
870
+ "aria-activedescendant": $data.autocompleteActiveId,
871
+ title: $options.tooltipString
706
872
  }, _ctx.$attrs, {
707
873
  onFocus: _cache[0] || (_cache[0] = (...args) => $options.moveCursorToEnd && $options.moveCursorToEnd(...args)),
708
874
  onInput: _cache[1] || (_cache[1] = (...args) => $options.onInput && $options.onInput(...args)),
@@ -719,9 +885,7 @@ function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
719
885
  onKeyupCapture: _cache[8] || (_cache[8] = withModifiers((...args) => $options.onKeyUp && $options.onKeyUp(...args), ["stop", "prevent"])),
720
886
  onTributeActiveTrue: _cache[11] || (_cache[11] = ($event) => $options.onTributeActive(true)),
721
887
  onTributeActiveFalse: _cache[12] || (_cache[12] = ($event) => $options.onTributeActive(false))
722
- }), null, 16, _hoisted_1), [
723
- [_directive_tooltip, $options.tooltipString]
724
- ]),
888
+ }), null, 16, _hoisted_1),
725
889
  $props.label ? (openBlock(), createElementBlock("div", {
726
890
  key: 0,
727
891
  id: $setup.labelId,
@@ -732,9 +896,10 @@ function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
732
896
  const cssModules = {
733
897
  "$style": style1
734
898
  };
735
- const NcRichContenteditable = /* @__PURE__ */ _export_sfc(_sfc_main, [["render", _sfc_render], ["__cssModules", cssModules], ["__scopeId", "data-v-7477451d"]]);
899
+ const NcRichContenteditable = /* @__PURE__ */ _export_sfc(_sfc_main, [["render", _sfc_render], ["__cssModules", cssModules], ["__scopeId", "data-v-3833d740"]]);
736
900
  export {
737
- NcAutoCompleteResult as N,
738
- NcRichContenteditable as a
901
+ NcMentionBubble as N,
902
+ NcAutoCompleteResult as a,
903
+ NcRichContenteditable as b
739
904
  };
740
- //# sourceMappingURL=NcRichContenteditable-B16VJW0Y.mjs.map
905
+ //# sourceMappingURL=NcRichContenteditable-BR08SbpA.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NcRichContenteditable-BR08SbpA.mjs","sources":["../../src/components/NcRichContenteditable/NcMentionBubble.vue","../../src/mixins/richEditor/index.js","../../src/components/NcRichContenteditable/NcAutoCompleteResult.vue","../../src/components/NcRichContenteditable/NcRichContenteditable.vue"],"sourcesContent":["<!--\n - SPDX-FileCopyrightText: 2020 Nextcloud GmbH and Nextcloud contributors\n - SPDX-License-Identifier: AGPL-3.0-or-later\n-->\n\n<template>\n\t<span :class=\"{'mention-bubble--primary': primary}\"\n\t\tclass=\"mention-bubble\"\n\t\tcontenteditable=\"false\">\n\t\t<span class=\"mention-bubble__wrapper\">\n\t\t\t<span class=\"mention-bubble__content\">\n\t\t\t\t<!-- Avatar or icon -->\n\t\t\t\t<span :class=\"[icon, `mention-bubble__icon--${avatarUrl ? 'with-avatar' : ''}`]\"\n\t\t\t\t\t:style=\"avatarUrl ? { backgroundImage: `url(${avatarUrl})` } : null\"\n\t\t\t\t\tclass=\"mention-bubble__icon\" />\n\n\t\t\t\t<!-- Title -->\n\t\t\t\t<span role=\"heading\" class=\"mention-bubble__title\" :title=\"labelWithFallback\" />\n\t\t\t</span>\n\n\t\t\t<!-- Selectable text for copy/paste -->\n\t\t\t<span role=\"none\" class=\"mention-bubble__select\">{{ mentionText }}</span>\n\t\t</span>\n\t</span>\n</template>\n\n<script>\nimport { getAvatarUrl } from '../../utils/getAvatarUrl.ts'\n\nexport default {\n\tname: 'NcMentionBubble',\n\n\tprops: {\n\t\tid: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\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\ticon: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\ticonUrl: {\n\t\t\ttype: [String, null],\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\tprimary: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\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\tmentionText() {\n\t\t\treturn !this.id.includes(' ') && !this.id.includes('/')\n\t\t\t\t? `@${this.id}`\n\t\t\t\t: `@\"${this.id}\"`\n\t\t},\n\t\t// Fallback to title for compatibility\n\t\tlabelWithFallback() {\n\t\t\treturn this.label || this.title\n\t\t},\n\t},\n\n\tmethods: {\n\t\tgetAvatarUrl,\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n$bubble-height: 20px;\n$bubble-max-width: 150px;\n$bubble-padding: 2px;\n$bubble-avatar-size: $bubble-height - 2 * $bubble-padding;\n\n.mention-bubble {\n\t&--primary &__content {\n\t\tcolor: var(--color-primary-element-text);\n\t\tbackground-color: var(--color-primary-element);\n\t}\n\n\t&__wrapper {\n\t\tposition: relative;\n\t\tmax-width: $bubble-max-width;\n\t\t// Align with text\n\t\theight: $bubble-height - $bubble-padding;\n\t\tvertical-align: text-bottom;\n\t\tdisplay: inline-flex;\n\t\talign-items: center;\n\t}\n\n\t&__content {\n\t\tdisplay: inline-flex;\n\t\toverflow: hidden;\n\t\talign-items: center;\n\t\tmax-width: 100%;\n\t\theight: $bubble-height;\n\t\t-webkit-user-select: none;\n\t\tuser-select: none;\n\t\tpadding-inline: $bubble-padding $bubble-padding * 3;\n\t\tborder-radius: math.div($bubble-height, 2);\n\t\tbackground-color: var(--color-background-dark);\n\t}\n\n\t&__icon {\n\t\tposition: relative;\n\t\twidth: $bubble-avatar-size;\n\t\theight: $bubble-avatar-size;\n\t\tborder-radius: math.div($bubble-avatar-size, 2);\n\t\tbackground-color: var(--color-background-darker);\n\t\tbackground-repeat: no-repeat;\n\t\tbackground-position: center;\n\t\tbackground-size: $bubble-avatar-size - 2 * $bubble-padding;\n\n\t\t&--with-avatar {\n\t\t\tcolor: inherit;\n\t\t\tbackground-size: cover;\n\t\t}\n\t}\n\n\t&__title {\n\t\toverflow: hidden;\n\t\tmargin-inline-start: $bubble-padding;\n\t\twhite-space: nowrap;\n\t\ttext-overflow: ellipsis;\n\t\t// Put title in ::before so it is not selectable\n\t\t&::before {\n\t\t\tcontent: attr(title);\n\t\t}\n\t}\n\n\t// Hide the mention id so it is selectable\n\t&__select {\n\t\tposition: absolute;\n\t\tz-index: -1;\n\t\tinset-inline-start: -100vw;\n\t\twidth: 1px;\n\t\theight: 1px;\n\t\toverflow: hidden;\n\t}\n}\n\n</style>\n","/**\n * SPDX-FileCopyrightText: 2020 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport NcMentionBubble from '../../components/NcRichContenteditable/NcMentionBubble.vue'\n\nimport escapeHtml from 'escape-html'\nimport stripTags from 'striptags'\nimport { createApp } from 'vue'\n\n// Referenced from public function getMentions(): https://github.com/nextcloud/server/blob/master/lib/private/Comments/Comment.php\n// Beginning or whitespace. Uses positive lookahead (to work on MobileSafari <16.4)\nconst MENTION_START = /(?=[a-z0-9_\\-@.'])\\B/.source\n// Capturing groups like: @user-id, @\"guest/abc16def\", @\"federated_user/user-id\", @\"user-id with space\"\nconst MENTION_SIMPLE = /(@[a-z0-9_\\-@.']+)/.source\nconst MENTION_GUEST = /@&quot;(?:guest|email){1}\\/[a-f0-9]+&quot;/.source\nconst MENTION_PREFIXED = /@&quot;(?:federated_)?(?:group|team|user){1}\\/[a-z0-9_\\-@.' /:]+&quot;/.source\nconst MENTION_WITH_SPACE = /@&quot;[a-z0-9_\\-@.' ]+&quot;/.source\nconst MENTION_COMPLEX = `(${MENTION_GUEST}|${MENTION_PREFIXED}|${MENTION_WITH_SPACE})`\n// Concatenated regular expressions\nexport const USERID_REGEX = new RegExp(`${MENTION_START}${MENTION_SIMPLE}`, 'gi')\nexport const USERID_REGEX_WITH_SPACE = new RegExp(`${MENTION_START}${MENTION_COMPLEX}`, 'gi')\n\nexport default {\n\tprops: {\n\t\tuserData: {\n\t\t\ttype: Object,\n\t\t\tdefault: () => ({}),\n\t\t},\n\t},\n\tmethods: {\n\t\t/**\n\t\t * Convert the value string to html for the inner content\n\t\t *\n\t\t * @param {string} value the content without html\n\t\t * @return {string} rendered html\n\t\t */\n\t\trenderContent(value) {\n\t\t\t// Sanitize the value prop\n\t\t\tconst sanitizedValue = escapeHtml(value)\n\n\t\t\t// Extract all the userIds\n\t\t\tconst splitValue = sanitizedValue.split(USERID_REGEX)\n\t\t\t\t.map(part => part.split(USERID_REGEX_WITH_SPACE)).flat()\n\n\t\t\t// Replace userIds by html\n\t\t\treturn splitValue\n\t\t\t\t.map(part => {\n\t\t\t\t\t// When splitting, the string is always putting the userIds\n\t\t\t\t\t// on the uneven indexes. We only want to generate the mentions html\n\t\t\t\t\tif (!part.startsWith('@')) {\n\t\t\t\t\t\treturn part\n\t\t\t\t\t}\n\n\t\t\t\t\t// Extracting the id, nuking the leading @ and all \"\n\t\t\t\t\tconst id = part.slice(1).replace(/&quot;/gi, '')\n\t\t\t\t\t// Compiling template and prepend with the space we removed during the split\n\t\t\t\t\treturn this.genSelectTemplate(id)\n\t\t\t\t})\n\t\t\t\t.join('')\n\t\t\t\t.replace(/\\n/gmi, '<br>')\n\t\t\t\t.replace(/&amp;/gmi, '&')\n\t\t},\n\n\t\t/**\n\t\t * Convert the innerHtml content to a string with mentions as text\n\t\t *\n\t\t * @param {string} content the content without html\n\t\t * @return {string}\n\t\t */\n\t\tparseContent(content) {\n\t\t\tlet text = content\n\t\t\t// Replace break lines with new lines\n\t\t\ttext = text.replace(/<br>/gmi, '\\n')\n\t\t\t// Replace some html special characters\n\t\t\ttext = text.replace(/&nbsp;/gmi, ' ')\n\t\t\ttext = text.replace(/&amp;/gmi, '&')\n\n\t\t\t// Convert the mentions to text only\n\t\t\t// first we replace divs with new lines\n\t\t\ttext = text.replace(/<\\/div>/gmi, '\\n')\n\t\t\t// then we remove all leftover html\n\t\t\ttext = stripTags(text, '<div>')\n\t\t\ttext = stripTags(text)\n\n\t\t\treturn text\n\t\t},\n\n\t\t/**\n\t\t * Generate an autocompletion popup entry template\n\t\t *\n\t\t * @param {string} value the value to match against the userData\n\t\t * @return {string}\n\t\t */\n\t\tgenSelectTemplate(value) {\n\t\t\t// The value returned by this function will replace the trigger '@'\n\t\t\t// and the search text, so when there is no match we simply return\n\t\t\t// '@' and the text.\n\t\t\tif (typeof value === 'undefined') {\n\t\t\t\treturn `${this.autocompleteTribute.current.collection.trigger}${this.autocompleteTribute.current.mentionText}`\n\t\t\t}\n\n\t\t\tconst data = this.userData[value]\n\n\t\t\t// Fallback to @mention in case no data matches\n\t\t\tif (!data) {\n\t\t\t\t// return @value if matches MENTION_SIMPLE, @\"value\" otherwise\n\t\t\t\treturn [' ', '/', ':'].every(char => !value.includes(char))\n\t\t\t\t\t? `@${value}`\n\t\t\t\t\t: `@\"${value}\"`\n\t\t\t}\n\n\t\t\t// Return template and make sure we strip off new lines, tabs and consecutive whitespaces\n\t\t\treturn this.renderComponentHtml(data, NcMentionBubble)\n\t\t\t\t.replace(/[\\n\\t]/gmi, '')\n\t\t\t\t.replace(/>\\s+</g, '><')\n\t\t},\n\n\t\t/**\n\t\t * Render a component and return its html content\n\t\t *\n\t\t * @param {object} props the props to pass to the component\n\t\t * @param {object} component the component to render\n\t\t * @return {string} the rendered html\n\t\t */\n\t\trenderComponentHtml(props, component) {\n\t\t\tconst Item = createApp(component, {\n\t\t\t\t...props,\n\t\t\t})\n\n\t\t\t// Prepare mountpoint\n\t\t\tconst mount = document.createElement('div')\n\t\t\tmount.style.display = 'none'\n\t\t\tdocument.body.appendChild(mount)\n\n\t\t\t// Mount and get raw html\n\t\t\tItem.mount(mount)\n\t\t\tconst renderedHtml = mount.innerHTML\n\n\t\t\t// Destroy\n\t\t\tItem.unmount()\n\t\t\tmount.remove()\n\n\t\t\treturn renderedHtml\n\t\t},\n\t},\n}\n","<!--\n - SPDX-FileCopyrightText: 2020 Nextcloud GmbH and Nextcloud contributors\n - SPDX-License-Identifier: AGPL-3.0-or-later\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 { getAvatarUrl } from '../../utils/getAvatarUrl.ts'\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,\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.autocomplete-result {\n\tdisplay: flex;\n\talign-items: center;\n\tgap: var(--default-grid-baseline);\n\tline-height: 1.2;\n\t--auto-complete-result-avatar-size: var(--default-clickable-area);\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\t--auto-complete-result-status-icon-size: clamp(14px, var(--auto-complete-result-avatar-size) * 0.4, 18px);\n\t\t// Avatar Radius * (1 - 1 / sqrt(2)) - Status Icon Radius / 2\n\t\t--auto-complete-result-status-icon-position: calc(var(--auto-complete-result-avatar-size) / 2 * (1 - 1 / sqrt(2)) - var(--auto-complete-result-status-icon-size) / 2);\n\t\tbox-sizing: border-box;\n\t\tposition: absolute;\n\t\tinset-inline-end: var(--auto-complete-result-status-icon-position);\n\t\tbottom: var(--auto-complete-result-status-icon-position);\n\t\theight: var(--auto-complete-result-status-icon-size);\n\t\twidth: var(--auto-complete-result-status-icon-size);\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: calc(var(--auto-complete-result-status-icon-size) / 1.2);\n\t\tline-height: 1.2;\n\t\tbackground-repeat: no-repeat;\n\t\tbackground-size: var(--auto-complete-result-status-icon-size);\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}\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 - SPDX-FileCopyrightText: 2020 Nextcloud GmbH and Nextcloud contributors\n - SPDX-License-Identifier: AGPL-3.0-or-later\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\tv-model=\"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\tv-model=\"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;\n\t}\n\n\t.pre-line {\n\t\twhite-space: pre-line;\n\t}\n</style>\n```\n\n### Using public methods\n\n```vue\n<template>\n\t<div>\n\t\t<div class=\"buttons-wrapper\">\n\t\t\t<NcButton class=\"show-slash-button\" @click=\"showSlashCommands\">Slash commands</NcButton>\n\t\t\t<NcButton class=\"focus-button\" @click=\"focus\">Focus on input</NcButton>\n\t\t</div>\n\t\t<NcRichContenteditable\n\t\t\tref=\"contenteditable\"\n\t\t\tv-model=\"message\"\n\t\t\tlabel=\"Write a comment\"\n\t\t\t:maxlength=\"100\"/>\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}\n\t},\n\tmethods: {\n\t\tshowSlashCommands() {\n\t\t\tthis.$refs.contenteditable.showTribute('/')\n\t\t},\n\t\tfocus() {\n\t\t\tthis.$refs.contenteditable.focus()\n\t\t},\n\t},\n}\n</script>\n<style lang=\"scss\" scoped>\n\t.buttons-wrapper {\n\t\tdisplay: flex;\n\t\tgap: 10px;\n\t\tmargin-bottom: 20px;\n\t}\n</style>\n```\n\n</docs>\n\n<template>\n\t<div class=\"rich-contenteditable\" :class=\"$props.class\">\n\t\t<div :id=\"id\"\n\t\t\tref=\"contenteditable\"\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\t:title=\"tooltipString\"\n\t\t\tv-bind=\"$attrs\"\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.esc.capture=\"onKeyEsc\"\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 { n, t } from '../../l10n.js'\nimport NcAutoCompleteResult from './NcAutoCompleteResult.vue'\nimport richEditor from '../../mixins/richEditor/index.js'\nimport { emojiSearch, emojiAddRecent } from '../../functions/emoji/index.ts'\nimport { searchProvider, getLinkWithPicker } from '../NcRichText/index.js'\nimport { createElementId } from '../../utils/createElementId.ts'\n\nimport Tribute from 'tributejs/dist/tribute.esm.js'\nimport debounce from 'debounce'\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\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: () => createElementId(),\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\tmodelValue: {\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\n\t\t/**\n\t\t * CSS class to apply to the root element.\n\t\t */\n\t\tclass: {\n\t\t\ttype: [String, Array, Object],\n\t\t\tdefault: '',\n\t\t},\n\t},\n\n\temits: [\n\t\t'submit',\n\t\t'paste',\n\t\t'update:modelValue',\n\t\t'smart-picker-submit',\n\t],\n\n\tsetup() {\n\t\tconst segmenter = new Intl.Segmenter()\n\n\t\treturn {\n\t\t\t// Constants\n\t\t\tlabelId: createElementId(),\n\t\t\ttributeId: createElementId(),\n\n\t\t\tsegmenter,\n\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.modelValue,\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 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\tconst length = [...this.segmenter.segment(this.localValue)].length\n\t\t\treturn length > 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('Message limit of %n character reached', 'Message limit of %n characters reached', this.maxlength)\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 * Compute debounce function for the autocomplete function\n\t\t */\n\t\tdebouncedAutoComplete() {\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\tmodelValue() {\n\t\t\tconst html = this.$refs.contenteditable.innerHTML\n\t\t\t// Compare trimmed versions to be safe\n\t\t\tif (this.modelValue.trim() !== this.parseContent(html).trim()) {\n\t\t\t\tthis.updateContent(this.modelValue)\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.modelValue)\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\tbeforeUnmount() {\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=\"${createElementId()}\" class=\"${this.$style['tribute-item']}\" role=\"option\">${content}</div>`\n\n\t\t\tconst tributesCollection = []\n\t\t\ttributesCollection.push({\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\trequireLeadingSpace: true,\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: `${this.$style['tribute-container']} ${this.$style['tribute-container-autocomplete']}`,\n\t\t\t\t// Class added to each list item\n\t\t\t\titemClass: this.$style['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\trequireLeadingSpace: true,\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=\"${this.$style['tribute-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: `${this.$style['tribute-container']} ${this.$style['tribute-container-emoji']}`,\n\t\t\t\t\t// Class added to each list item\n\t\t\t\t\titemClass: this.$style['tribute-container__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\trequireLeadingSpace: true,\n\t\t\t\t\t// Popup mention autocompletion templates\n\t\t\t\t\tmenuItemTemplate: item => renderMenuItem(`<img class=\"${this.$style['tribute-item__icon']}\" src=\"${item.original.icon_url}\"> <span class=\"${this.$style['tribute-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: `${this.$style['tribute-container']} ${this.$style['tribute-container-link']}`,\n\t\t\t\t\t// Class added to each list item\n\t\t\t\t\titemClass: this.$style['tribute-container__item'],\n\t\t\t\t})\n\t\t\t}\n\n\t\t\tthis.tribute = new Tribute({\n\t\t\t\tcollection: tributesCollection,\n\t\t\t\t// FIXME: tributejs doesn't support allowSpaces as a collection option, only as a global one\n\t\t\t\t// Requires to fork a library to allow spaces only in the middle of mentions ('@' trigger)\n\t\t\t\tallowSpaces: false,\n\t\t\t\t// Where to inject the menu popup\n\t\t\t\tmenuContainer: this.menuContainer,\n\t\t\t})\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// Generate text and insert\n\t\t\tconst range = selection.getRangeAt(0)\n\t\t\trange.deleteContents()\n\t\t\trange.insertNode(document.createTextNode(text))\n\n\t\t\t// Collapse the range to the end position\n\t\t\trange.collapse(false)\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\t// Browsers keep <br> after erasing contenteditable\n\t\t\tconst text = this.parseContent(htmlOrText).replace(/^\\n$/, '')\n\t\t\tthis.localValue = text\n\t\t\tthis.$emit('update:modelValue', 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 * 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\tonKeyEsc(event) {\n\t\t\t// prevent event from bubbling when tribute is open\n\t\t\tif (this.tribute && this.isAutocompleteOpen) {\n\t\t\t\tevent.stopImmediatePropagation()\n\t\t\t\tthis.tribute.hideMenu()\n\t\t\t}\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 || this.$style['tribute-container'])\n\n\t\t\t\tthis.setupTributeIntegration()\n\t\t\t\t// Remove the event handler if any\n\t\t\t\tdocument.removeEventListener('click', this.hideTribute, true)\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(this.$style['tribute-container--focus-visible'])\n\t\t\t} else {\n\t\t\t\tthis.getTributeContainer().classList.remove(this.$style['tribute-container--focus-visible'])\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Show tribute menu programmatically.\n\t\t * @param {string} trigger - trigger character, can be '/', '@', or ':'\n\t\t *\n\t\t * @public\n\t\t */\n\t\tshowTribute(trigger) {\n\t\t\tthis.focus()\n\t\t\tconst index = this.tribute.collection.findIndex(collection => collection.trigger === trigger)\n\t\t\tthis.tribute.showMenuForCollection(this.$refs.contenteditable, index)\n\t\t\tthis.updateValue(this.$refs.contenteditable.innerHTML)\n\t\t\tdocument.addEventListener('click', this.hideTribute, true)\n\t\t},\n\n\t\t/**\n\t\t * Hide tribute menu programmatically\n\t\t *\n\t\t */\n\t\thideTribute() {\n\t\t\tthis.tribute.hideMenu()\n\t\t\tdocument.removeEventListener('click', this.hideTribute, true)\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n// Standalone styling, independent from server\n.rich-contenteditable {\n\t--contenteditable-block-offset: calc(2 * var(--default-grid-baseline));\n\t--contenteditable-inline-start-offset: calc(2 * var(--default-grid-baseline));\n\t--contenteditable-inline-end-offset: calc(2 * var(--default-grid-baseline));\n\tposition: relative;\n\twidth: auto;\n\n\t&__label {\n\t\tposition: absolute;\n\t\tmargin-inline: 14px;\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: 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-block: var(--contenteditable-block-offset);\n\t\tpadding-inline: var(--contenteditable-inline-start-offset) var(--contenteditable-inline-end-offset);\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\ttab-size: 4;\n\t\tmin-height: var(--default-clickable-area);\n\t\tmax-height: calc(var(--default-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\twidth: calc(100% - var(--contenteditable-inline-start-offset) - var(--contenteditable-inline-end-offset));\n\t\t\theight: calc(100% - 2 * var(--contenteditable-block-offset));\n\t\t\toverflow: hidden;\n\t\t\twhite-space: nowrap;\n\t\t\ttext-overflow: ellipsis;\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: calc(var(--default-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\n\t\t&--overflow,\n\t\t&--overflow:hover {\n\t\t\t// we need important to override server styles\n\t\t\tborder-color: var(--color-error) !important;\n\t\t}\n\t}\n}\n\n</style>\n\n<style lang=\"scss\" module>\n.tribute-container {\n\tz-index: 9000;\n\toverflow: auto;\n\t// Hide container root element while initializing\n\tposition: absolute;\n\t/* stylelint-disable-next-line csstools/use-logical */ /* upstream logic */\n\tleft: -100vw;\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-element, var(--border-radius));\n\tbackground: var(--color-main-background);\n\tbox-shadow: 0 1px 5px var(--color-box-shadow);\n\n\t&,\n\t& * {\n\t\tbox-sizing: border-box;\n\t}\n\n\tul {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\tgap: var(--default-grid-baseline);\n\t}\n\n\t.tribute-container__item {\n\t\tcolor: var(--color-text-maxcontrast);\n\t\tborder-radius: var(--border-radius-small, var(--border-radius));\n\t\tpadding: var(--default-grid-baseline);\n\t\tcursor: pointer;\n\t\tmin-height: var(--clickable-area-small, auto);\n\n\t\t&:global(.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:global(.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 inside autocomplete\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) + 3 * 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 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\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-inline-end: var(--default-grid-baseline);\n\t\t\tfilter: var(--background-invert-if-dark);\n\t\t}\n\t}\n}\n\n</style>\n"],"names":["_sfc_main","_hoisted_1","_hoisted_2","_hoisted_3","_createElementBlock","_normalizeClass","_createElementVNode","_normalizeStyle","_hoisted_4","_toDisplayString","escapeHtml","_openBlock","_createBlock","_createCommentVNode","_mergeProps","_withKeys","_withModifiers"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import '../assets/NcRichText-Dvt8jvWN.css';
1
+ import '../assets/NcRichText-BbVi69cc.css';
2
2
  import { unified } from "unified";
3
3
  import { resolveComponent, createElementBlock, createCommentVNode, openBlock, normalizeClass, Fragment, renderList, createBlock, ref, h } from "vue";
4
4
  import { RouterLink } from "vue-router";
@@ -7,8 +7,8 @@ import breaks from "remark-breaks";
7
7
  import remark2rehype from "remark-rehype";
8
8
  import rehype2react from "rehype-react";
9
9
  import rehypeExternalLinks from "rehype-external-links";
10
- import { N as NcCheckboxRadioSwitch } from "./NcCheckboxRadioSwitch-CWU_M_ui.mjs";
11
- import { N as NcReferenceWidget } from "./referencePickerModal-BpNnwC_g.mjs";
10
+ import { N as NcCheckboxRadioSwitch } from "./NcCheckboxRadioSwitch-DrNlVZw8.mjs";
11
+ import { N as NcReferenceWidget } from "./referencePickerModal-DzM7CkKN.mjs";
12
12
  import { U as URL_PATTERN, p as parseUrl, g as getRoute, r as remarkAutolink } from "./autolink-CKPk5rzg.mjs";
13
13
  import axios from "@nextcloud/axios";
14
14
  import { getSharingToken } from "@nextcloud/sharing/public";
@@ -3288,7 +3288,7 @@ const _sfc_main$1 = {
3288
3288
  default: ""
3289
3289
  },
3290
3290
  referenceData: {
3291
- type: Object,
3291
+ type: Array,
3292
3292
  default: null
3293
3293
  },
3294
3294
  limit: {
@@ -3410,7 +3410,7 @@ function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
3410
3410
  }), 128))
3411
3411
  ], 2)) : createCommentVNode("", true);
3412
3412
  }
3413
- const NcReferenceList = /* @__PURE__ */ _export_sfc(_sfc_main$1, [["render", _sfc_render], ["__scopeId", "data-v-8d575d2d"]]);
3413
+ const NcReferenceList = /* @__PURE__ */ _export_sfc(_sfc_main$1, [["render", _sfc_render], ["__scopeId", "data-v-8e70b916"]]);
3414
3414
  const remarkPlaceholder = function() {
3415
3415
  return function(ast) {
3416
3416
  visit(ast, (node2) => node2.type === "text", visitor);
@@ -3499,7 +3499,7 @@ const _sfc_main = {
3499
3499
  },
3500
3500
  /** Provide data upfront to avoid extra http request */
3501
3501
  references: {
3502
- type: Object,
3502
+ type: Array,
3503
3503
  default: null
3504
3504
  },
3505
3505
  /** Provide basic Markdown syntax */
@@ -3665,9 +3665,9 @@ const _sfc_main = {
3665
3665
  return this.useMarkdown || this.useExtendedMarkdown ? this.renderMarkdown() : this.renderPlaintext();
3666
3666
  }
3667
3667
  };
3668
- const NcRichText = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-958de8f1"]]);
3668
+ const NcRichText = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-403b817c"]]);
3669
3669
  export {
3670
3670
  NcRichText as N,
3671
3671
  NcReferenceList as a
3672
3672
  };
3673
- //# sourceMappingURL=NcRichText-4jIBSmap.mjs.map
3673
+ //# sourceMappingURL=NcRichText-jZif8PdV.mjs.map