@nextcloud/vue 8.0.0-beta.7 → 8.0.0-beta.9

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 (583) hide show
  1. package/CHANGELOG.md +36 -0
  2. package/dist/Components/NcActionButton.cjs +49 -1
  3. package/dist/Components/NcActionButton.cjs.map +1 -1
  4. package/dist/Components/NcActionButton.mjs +49 -13
  5. package/dist/Components/NcActionButton.mjs.map +1 -1
  6. package/dist/Components/NcActionButtonGroup.cjs +30 -1
  7. package/dist/Components/NcActionButtonGroup.cjs.map +1 -1
  8. package/dist/Components/NcActionButtonGroup.mjs +30 -9
  9. package/dist/Components/NcActionButtonGroup.mjs.map +1 -1
  10. package/dist/Components/NcActionCaption.cjs +29 -1
  11. package/dist/Components/NcActionCaption.cjs.map +1 -1
  12. package/dist/Components/NcActionCaption.mjs +29 -9
  13. package/dist/Components/NcActionCaption.mjs.map +1 -1
  14. package/dist/Components/NcActionCheckbox.cjs +78 -1
  15. package/dist/Components/NcActionCheckbox.cjs.map +1 -1
  16. package/dist/Components/NcActionCheckbox.mjs +80 -19
  17. package/dist/Components/NcActionCheckbox.mjs.map +1 -1
  18. package/dist/Components/NcActionInput.cjs +231 -1
  19. package/dist/Components/NcActionInput.cjs.map +1 -1
  20. package/dist/Components/NcActionInput.mjs +235 -70
  21. package/dist/Components/NcActionInput.mjs.map +1 -1
  22. package/dist/Components/NcActionLink.cjs +69 -1
  23. package/dist/Components/NcActionLink.cjs.map +1 -1
  24. package/dist/Components/NcActionLink.mjs +66 -14
  25. package/dist/Components/NcActionLink.mjs.map +1 -1
  26. package/dist/Components/NcActionRadio.cjs +85 -1
  27. package/dist/Components/NcActionRadio.cjs.map +1 -1
  28. package/dist/Components/NcActionRadio.mjs +87 -19
  29. package/dist/Components/NcActionRadio.mjs.map +1 -1
  30. package/dist/Components/NcActionRouter.cjs +42 -1
  31. package/dist/Components/NcActionRouter.cjs.map +1 -1
  32. package/dist/Components/NcActionRouter.mjs +41 -12
  33. package/dist/Components/NcActionRouter.mjs.map +1 -1
  34. package/dist/Components/NcActionSeparator.cjs +20 -1
  35. package/dist/Components/NcActionSeparator.cjs.map +1 -1
  36. package/dist/Components/NcActionSeparator.mjs +20 -9
  37. package/dist/Components/NcActionSeparator.mjs.map +1 -1
  38. package/dist/Components/NcActionText.cjs +23 -1
  39. package/dist/Components/NcActionText.cjs.map +1 -1
  40. package/dist/Components/NcActionText.mjs +21 -9
  41. package/dist/Components/NcActionText.mjs.map +1 -1
  42. package/dist/Components/NcActionTextEditable.cjs +81 -1
  43. package/dist/Components/NcActionTextEditable.cjs.map +1 -1
  44. package/dist/Components/NcActionTextEditable.mjs +79 -22
  45. package/dist/Components/NcActionTextEditable.mjs.map +1 -1
  46. package/dist/Components/NcActions.cjs +459 -1
  47. package/dist/Components/NcActions.cjs.map +1 -1
  48. package/dist/Components/NcActions.mjs +463 -100
  49. package/dist/Components/NcActions.mjs.map +1 -1
  50. package/dist/Components/NcAppContent.cjs +218 -1
  51. package/dist/Components/NcAppContent.cjs.map +1 -1
  52. package/dist/Components/NcAppContent.mjs +220 -66
  53. package/dist/Components/NcAppContent.mjs.map +1 -1
  54. package/dist/Components/NcAppContentDetails.cjs +19 -1
  55. package/dist/Components/NcAppContentDetails.cjs.map +1 -1
  56. package/dist/Components/NcAppContentDetails.mjs +18 -7
  57. package/dist/Components/NcAppContentDetails.mjs.map +1 -1
  58. package/dist/Components/NcAppContentList.cjs +29 -1
  59. package/dist/Components/NcAppContentList.cjs.map +1 -1
  60. package/dist/Components/NcAppContentList.mjs +29 -8
  61. package/dist/Components/NcAppContentList.mjs.map +1 -1
  62. package/dist/Components/NcAppNavigation.cjs +66 -1
  63. package/dist/Components/NcAppNavigation.cjs.map +1 -1
  64. package/dist/Components/NcAppNavigation.mjs +67 -28
  65. package/dist/Components/NcAppNavigation.mjs.map +1 -1
  66. package/dist/Components/NcAppNavigationCaption.cjs +44 -1
  67. package/dist/Components/NcAppNavigationCaption.cjs.map +1 -1
  68. package/dist/Components/NcAppNavigationCaption.mjs +40 -9
  69. package/dist/Components/NcAppNavigationCaption.mjs.map +1 -1
  70. package/dist/Components/NcAppNavigationIconBullet.cjs +40 -1
  71. package/dist/Components/NcAppNavigationIconBullet.cjs.map +1 -1
  72. package/dist/Components/NcAppNavigationIconBullet.mjs +40 -15
  73. package/dist/Components/NcAppNavigationIconBullet.mjs.map +1 -1
  74. package/dist/Components/NcAppNavigationItem.cjs +386 -1
  75. package/dist/Components/NcAppNavigationItem.cjs.map +1 -1
  76. package/dist/Components/NcAppNavigationItem.mjs +382 -81
  77. package/dist/Components/NcAppNavigationItem.mjs.map +1 -1
  78. package/dist/Components/NcAppNavigationNew.cjs +50 -1
  79. package/dist/Components/NcAppNavigationNew.cjs.map +1 -1
  80. package/dist/Components/NcAppNavigationNew.mjs +51 -14
  81. package/dist/Components/NcAppNavigationNew.mjs.map +1 -1
  82. package/dist/Components/NcAppNavigationNewItem.cjs +87 -1
  83. package/dist/Components/NcAppNavigationNewItem.cjs.map +1 -1
  84. package/dist/Components/NcAppNavigationNewItem.mjs +83 -17
  85. package/dist/Components/NcAppNavigationNewItem.mjs.map +1 -1
  86. package/dist/Components/NcAppNavigationSettings.cjs +69 -1
  87. package/dist/Components/NcAppNavigationSettings.cjs.map +1 -1
  88. package/dist/Components/NcAppNavigationSettings.mjs +60 -21
  89. package/dist/Components/NcAppNavigationSettings.mjs.map +1 -1
  90. package/dist/Components/NcAppNavigationSpacer.cjs +20 -1
  91. package/dist/Components/NcAppNavigationSpacer.cjs.map +1 -1
  92. package/dist/Components/NcAppNavigationSpacer.mjs +20 -9
  93. package/dist/Components/NcAppNavigationSpacer.mjs.map +1 -1
  94. package/dist/Components/NcAppNavigationToggle.cjs +25 -1
  95. package/dist/Components/NcAppNavigationToggle.cjs.map +1 -1
  96. package/dist/Components/NcAppNavigationToggle.mjs +21 -1
  97. package/dist/Components/NcAppNavigationToggle.mjs.map +1 -1
  98. package/dist/Components/NcAppSettingsDialog.cjs +156 -1
  99. package/dist/Components/NcAppSettingsDialog.cjs.map +1 -1
  100. package/dist/Components/NcAppSettingsDialog.mjs +160 -50
  101. package/dist/Components/NcAppSettingsDialog.mjs.map +1 -1
  102. package/dist/Components/NcAppSettingsSection.cjs +39 -1
  103. package/dist/Components/NcAppSettingsSection.cjs.map +1 -1
  104. package/dist/Components/NcAppSettingsSection.mjs +39 -13
  105. package/dist/Components/NcAppSettingsSection.mjs.map +1 -1
  106. package/dist/Components/NcAppSidebar.cjs +443 -1
  107. package/dist/Components/NcAppSidebar.cjs.map +1 -1
  108. package/dist/Components/NcAppSidebar.mjs +409 -92
  109. package/dist/Components/NcAppSidebar.mjs.map +1 -1
  110. package/dist/Components/NcAppSidebarTab.cjs +83 -1
  111. package/dist/Components/NcAppSidebarTab.cjs.map +1 -1
  112. package/dist/Components/NcAppSidebarTab.mjs +83 -20
  113. package/dist/Components/NcAppSidebarTab.mjs.map +1 -1
  114. package/dist/Components/NcAvatar.cjs +3 -1
  115. package/dist/Components/NcAvatar.cjs.map +1 -1
  116. package/dist/Components/NcAvatar.mjs +1 -1
  117. package/dist/Components/NcBreadcrumb.cjs +175 -1
  118. package/dist/Components/NcBreadcrumb.cjs.map +1 -1
  119. package/dist/Components/NcBreadcrumb.mjs +175 -35
  120. package/dist/Components/NcBreadcrumb.mjs.map +1 -1
  121. package/dist/Components/NcBreadcrumbs.cjs +372 -1
  122. package/dist/Components/NcBreadcrumbs.cjs.map +1 -1
  123. package/dist/Components/NcBreadcrumbs.mjs +373 -142
  124. package/dist/Components/NcBreadcrumbs.mjs.map +1 -1
  125. package/dist/Components/NcButton.cjs +226 -1
  126. package/dist/Components/NcButton.cjs.map +1 -1
  127. package/dist/Components/NcButton.mjs +226 -24
  128. package/dist/Components/NcButton.mjs.map +1 -1
  129. package/dist/Components/NcCheckboxRadioSwitch.cjs +352 -1
  130. package/dist/Components/NcCheckboxRadioSwitch.cjs.map +1 -1
  131. package/dist/Components/NcCheckboxRadioSwitch.mjs +360 -59
  132. package/dist/Components/NcCheckboxRadioSwitch.mjs.map +1 -1
  133. package/dist/Components/NcColorPicker.cjs +118 -1
  134. package/dist/Components/NcColorPicker.cjs.map +1 -1
  135. package/dist/Components/NcColorPicker.mjs +124 -46
  136. package/dist/Components/NcColorPicker.mjs.map +1 -1
  137. package/dist/Components/NcContent.cjs +25 -1
  138. package/dist/Components/NcContent.cjs.map +1 -1
  139. package/dist/Components/NcContent.mjs +24 -8
  140. package/dist/Components/NcContent.mjs.map +1 -1
  141. package/dist/Components/NcCounterBubble.cjs +47 -1
  142. package/dist/Components/NcCounterBubble.cjs.map +1 -1
  143. package/dist/Components/NcCounterBubble.mjs +46 -12
  144. package/dist/Components/NcCounterBubble.mjs.map +1 -1
  145. package/dist/Components/NcDashboardWidget.cjs +133 -1
  146. package/dist/Components/NcDashboardWidget.cjs.map +1 -1
  147. package/dist/Components/NcDashboardWidget.mjs +128 -39
  148. package/dist/Components/NcDashboardWidget.mjs.map +1 -1
  149. package/dist/Components/NcDashboardWidgetItem.cjs +138 -1
  150. package/dist/Components/NcDashboardWidgetItem.cjs.map +1 -1
  151. package/dist/Components/NcDashboardWidgetItem.mjs +130 -23
  152. package/dist/Components/NcDashboardWidgetItem.mjs.map +1 -1
  153. package/dist/Components/NcDateTime.cjs +125 -1
  154. package/dist/Components/NcDateTime.cjs.map +1 -1
  155. package/dist/Components/NcDateTime.mjs +126 -41
  156. package/dist/Components/NcDateTime.mjs.map +1 -1
  157. package/dist/Components/NcDateTimePicker.cjs +217 -1
  158. package/dist/Components/NcDateTimePicker.cjs.map +1 -1
  159. package/dist/Components/NcDateTimePicker.mjs +212 -53
  160. package/dist/Components/NcDateTimePicker.mjs.map +1 -1
  161. package/dist/Components/NcDateTimePickerNative.cjs +199 -1
  162. package/dist/Components/NcDateTimePickerNative.cjs.map +1 -1
  163. package/dist/Components/NcDateTimePickerNative.mjs +195 -58
  164. package/dist/Components/NcDateTimePickerNative.mjs.map +1 -1
  165. package/dist/Components/NcDialog.cjs +171 -0
  166. package/dist/Components/NcDialog.cjs.map +1 -0
  167. package/dist/Components/NcDialog.mjs +177 -0
  168. package/dist/Components/NcDialog.mjs.map +1 -0
  169. package/dist/Components/NcDialogButton.cjs +69 -0
  170. package/dist/Components/NcDialogButton.cjs.map +1 -0
  171. package/dist/Components/NcDialogButton.mjs +74 -0
  172. package/dist/Components/NcDialogButton.mjs.map +1 -0
  173. package/dist/Components/NcEllipsisedOption.cjs +74 -1
  174. package/dist/Components/NcEllipsisedOption.cjs.map +1 -1
  175. package/dist/Components/NcEllipsisedOption.mjs +73 -20
  176. package/dist/Components/NcEllipsisedOption.mjs.map +1 -1
  177. package/dist/Components/NcEmojiPicker.cjs +175 -1
  178. package/dist/Components/NcEmojiPicker.cjs.map +1 -1
  179. package/dist/Components/NcEmojiPicker.mjs +172 -52
  180. package/dist/Components/NcEmojiPicker.mjs.map +1 -1
  181. package/dist/Components/NcEmptyContent.cjs +54 -1
  182. package/dist/Components/NcEmptyContent.cjs.map +1 -1
  183. package/dist/Components/NcEmptyContent.mjs +46 -10
  184. package/dist/Components/NcEmptyContent.mjs.map +1 -1
  185. package/dist/Components/NcGuestContent.cjs +26 -1
  186. package/dist/Components/NcGuestContent.cjs.map +1 -1
  187. package/dist/Components/NcGuestContent.mjs +24 -11
  188. package/dist/Components/NcGuestContent.mjs.map +1 -1
  189. package/dist/Components/NcHeaderMenu.cjs +167 -1
  190. package/dist/Components/NcHeaderMenu.cjs.map +1 -1
  191. package/dist/Components/NcHeaderMenu.mjs +161 -49
  192. package/dist/Components/NcHeaderMenu.mjs.map +1 -1
  193. package/dist/Components/NcHighlight.cjs +3 -1
  194. package/dist/Components/NcHighlight.cjs.map +1 -1
  195. package/dist/Components/NcHighlight.mjs +1 -1
  196. package/dist/Components/NcIconSvgWrapper.cjs +59 -1
  197. package/dist/Components/NcIconSvgWrapper.cjs.map +1 -1
  198. package/dist/Components/NcIconSvgWrapper.mjs +60 -12
  199. package/dist/Components/NcIconSvgWrapper.mjs.map +1 -1
  200. package/dist/Components/NcInputField.cjs +210 -1
  201. package/dist/Components/NcInputField.cjs.map +1 -1
  202. package/dist/Components/NcInputField.mjs +211 -38
  203. package/dist/Components/NcInputField.mjs.map +1 -1
  204. package/dist/Components/NcListItem.cjs +237 -1
  205. package/dist/Components/NcListItem.cjs.map +1 -1
  206. package/dist/Components/NcListItem.mjs +233 -57
  207. package/dist/Components/NcListItem.mjs.map +1 -1
  208. package/dist/Components/NcListItemIcon.cjs +158 -1
  209. package/dist/Components/NcListItemIcon.cjs.map +1 -1
  210. package/dist/Components/NcListItemIcon.mjs +154 -30
  211. package/dist/Components/NcListItemIcon.mjs.map +1 -1
  212. package/dist/Components/NcLoadingIcon.cjs +54 -1
  213. package/dist/Components/NcLoadingIcon.cjs.map +1 -1
  214. package/dist/Components/NcLoadingIcon.mjs +54 -14
  215. package/dist/Components/NcLoadingIcon.mjs.map +1 -1
  216. package/dist/Components/NcModal.cjs +403 -1
  217. package/dist/Components/NcModal.cjs.map +1 -1
  218. package/dist/Components/NcModal.mjs +392 -96
  219. package/dist/Components/NcModal.mjs.map +1 -1
  220. package/dist/Components/NcNoteCard.cjs +71 -1
  221. package/dist/Components/NcNoteCard.cjs.map +1 -1
  222. package/dist/Components/NcNoteCard.mjs +72 -38
  223. package/dist/Components/NcNoteCard.mjs.map +1 -1
  224. package/dist/Components/NcPasswordField.cjs +163 -1
  225. package/dist/Components/NcPasswordField.cjs.map +1 -1
  226. package/dist/Components/NcPasswordField.mjs +169 -54
  227. package/dist/Components/NcPasswordField.mjs.map +1 -1
  228. package/dist/Components/NcPopover.cjs +125 -1
  229. package/dist/Components/NcPopover.cjs.map +1 -1
  230. package/dist/Components/NcPopover.mjs +124 -41
  231. package/dist/Components/NcPopover.mjs.map +1 -1
  232. package/dist/Components/NcProgressBar.cjs +57 -1
  233. package/dist/Components/NcProgressBar.cjs.map +1 -1
  234. package/dist/Components/NcProgressBar.mjs +57 -15
  235. package/dist/Components/NcProgressBar.mjs.map +1 -1
  236. package/dist/Components/NcRelatedResourcesPanel.cjs +184 -1
  237. package/dist/Components/NcRelatedResourcesPanel.cjs.map +1 -1
  238. package/dist/Components/NcRelatedResourcesPanel.mjs +183 -61
  239. package/dist/Components/NcRelatedResourcesPanel.mjs.map +1 -1
  240. package/dist/Components/NcRichContenteditable.cjs +478 -1
  241. package/dist/Components/NcRichContenteditable.cjs.map +1 -1
  242. package/dist/Components/NcRichContenteditable.mjs +447 -127
  243. package/dist/Components/NcRichContenteditable.mjs.map +1 -1
  244. package/dist/Components/NcRichText.cjs +44 -1
  245. package/dist/Components/NcRichText.cjs.map +1 -1
  246. package/dist/Components/NcRichText.mjs +25 -4
  247. package/dist/Components/NcRichText.mjs.map +1 -1
  248. package/dist/Components/NcSavingIndicatorIcon.cjs +59 -1
  249. package/dist/Components/NcSavingIndicatorIcon.cjs.map +1 -1
  250. package/dist/Components/NcSavingIndicatorIcon.mjs +56 -9
  251. package/dist/Components/NcSavingIndicatorIcon.mjs.map +1 -1
  252. package/dist/Components/NcSelect.cjs +411 -1
  253. package/dist/Components/NcSelect.cjs.map +1 -1
  254. package/dist/Components/NcSelect.mjs +405 -47
  255. package/dist/Components/NcSelect.mjs.map +1 -1
  256. package/dist/Components/NcSelectTags.cjs +251 -2
  257. package/dist/Components/NcSelectTags.cjs.map +1 -1
  258. package/dist/Components/NcSelectTags.mjs +236 -73
  259. package/dist/Components/NcSelectTags.mjs.map +1 -1
  260. package/dist/Components/NcSettingsInputText.cjs +90 -1
  261. package/dist/Components/NcSettingsInputText.cjs.map +1 -1
  262. package/dist/Components/NcSettingsInputText.mjs +88 -19
  263. package/dist/Components/NcSettingsInputText.mjs.map +1 -1
  264. package/dist/Components/NcSettingsSection.cjs +62 -1
  265. package/dist/Components/NcSettingsSection.cjs.map +1 -1
  266. package/dist/Components/NcSettingsSection.mjs +62 -15
  267. package/dist/Components/NcSettingsSection.mjs.map +1 -1
  268. package/dist/Components/NcSettingsSelectGroup.cjs +26 -1
  269. package/dist/Components/NcSettingsSelectGroup.cjs.map +1 -1
  270. package/dist/Components/NcSettingsSelectGroup.mjs +22 -1
  271. package/dist/Components/NcSettingsSelectGroup.mjs.map +1 -1
  272. package/dist/Components/NcTextArea.cjs +167 -0
  273. package/dist/Components/NcTextArea.cjs.map +1 -0
  274. package/dist/Components/NcTextArea.mjs +172 -0
  275. package/dist/Components/NcTextArea.mjs.map +1 -0
  276. package/dist/Components/NcTextField.cjs +98 -1
  277. package/dist/Components/NcTextField.cjs.map +1 -1
  278. package/dist/Components/NcTextField.mjs +102 -22
  279. package/dist/Components/NcTextField.mjs.map +1 -1
  280. package/dist/Components/NcTimezonePicker.cjs +4387 -614
  281. package/dist/Components/NcTimezonePicker.cjs.map +1 -1
  282. package/dist/Components/NcTimezonePicker.mjs +4372 -663
  283. package/dist/Components/NcTimezonePicker.mjs.map +1 -1
  284. package/dist/Components/NcUserBubble.cjs +189 -1
  285. package/dist/Components/NcUserBubble.cjs.map +1 -1
  286. package/dist/Components/NcUserBubble.mjs +190 -47
  287. package/dist/Components/NcUserBubble.mjs.map +1 -1
  288. package/dist/Components/NcVNodes.cjs +35 -1
  289. package/dist/Components/NcVNodes.cjs.map +1 -1
  290. package/dist/Components/NcVNodes.mjs +35 -8
  291. package/dist/Components/NcVNodes.mjs.map +1 -1
  292. package/dist/Directives/Focus.cjs +30 -1
  293. package/dist/Directives/Focus.cjs.map +1 -1
  294. package/dist/Directives/Focus.mjs +28 -5
  295. package/dist/Directives/Focus.mjs.map +1 -1
  296. package/dist/Directives/Linkify.cjs +8 -1
  297. package/dist/Directives/Linkify.cjs.map +1 -1
  298. package/dist/Directives/Linkify.mjs +6 -6
  299. package/dist/Directives/Linkify.mjs.map +1 -1
  300. package/dist/Directives/Tooltip.cjs +37 -1
  301. package/dist/Directives/Tooltip.cjs.map +1 -1
  302. package/dist/Directives/Tooltip.mjs +29 -4
  303. package/dist/Directives/Tooltip.mjs.map +1 -1
  304. package/dist/Functions/emoji.cjs +36 -1
  305. package/dist/Functions/emoji.cjs.map +1 -1
  306. package/dist/Functions/emoji.mjs +32 -11
  307. package/dist/Functions/emoji.mjs.map +1 -1
  308. package/dist/Functions/usernameToColor.cjs +39 -1
  309. package/dist/Functions/usernameToColor.cjs.map +1 -1
  310. package/dist/Functions/usernameToColor.mjs +32 -11
  311. package/dist/Functions/usernameToColor.mjs.map +1 -1
  312. package/dist/Mixins/clickOutsideOptions.cjs +40 -1
  313. package/dist/Mixins/clickOutsideOptions.cjs.map +1 -1
  314. package/dist/Mixins/clickOutsideOptions.mjs +39 -4
  315. package/dist/Mixins/clickOutsideOptions.mjs.map +1 -1
  316. package/dist/Mixins/isFullscreen.cjs +44 -1
  317. package/dist/Mixins/isFullscreen.cjs.map +1 -1
  318. package/dist/Mixins/isFullscreen.mjs +42 -11
  319. package/dist/Mixins/isFullscreen.mjs.map +1 -1
  320. package/dist/Mixins/isMobile.cjs +87 -1
  321. package/dist/Mixins/isMobile.cjs.map +1 -1
  322. package/dist/Mixins/isMobile.mjs +86 -11
  323. package/dist/Mixins/isMobile.mjs.map +1 -1
  324. package/dist/Mixins/richEditor.cjs +10 -1
  325. package/dist/Mixins/richEditor.cjs.map +1 -1
  326. package/dist/Mixins/richEditor.mjs +2 -2
  327. package/dist/assets/NcAppNavigationToggle-2cc5b864.css +35 -0
  328. package/dist/assets/NcInputConfirmCancel-2ba60a52.css +51 -0
  329. package/dist/assets/NcMentionBubble-6e887c5f.css +81 -0
  330. package/dist/assets/{index-23405a74.css → NcSettingsSelectGroup-0d38d76b.css} +15 -2
  331. package/dist/assets/index-0adc989c.css +96 -0
  332. package/dist/assets/index-1151d229.css +41 -0
  333. package/dist/assets/index-1beccc92.css +140 -0
  334. package/dist/assets/index-236620b0.css +150 -0
  335. package/dist/assets/{index-823ec431.css → index-24f6c355.css} +67 -3
  336. package/dist/assets/index-2a8e4ca1.css +540 -0
  337. package/dist/assets/{index-29421a2e.css → index-2d4de2fc.css} +19 -2
  338. package/dist/assets/{NcSettingsSelectGroup-e88cbf1a.css → index-30e099f7.css} +17 -2
  339. package/dist/assets/index-34dfc54e.css +88 -0
  340. package/dist/assets/index-3764a447.css +99 -0
  341. package/dist/assets/index-400b48a6.css +60 -0
  342. package/dist/assets/{index-1d28ce70.css → index-441b6552.css} +25 -2
  343. package/dist/assets/{NcInputConfirmCancel-c1d05dd9.css → index-4611417f.css} +31 -2
  344. package/dist/assets/index-4a775ba1.css +204 -0
  345. package/dist/assets/index-4b75fe20.css +79 -0
  346. package/dist/assets/index-4ebacc78.css +107 -0
  347. package/dist/assets/index-4ef32afd.css +128 -0
  348. package/dist/assets/index-50b0766d.css +202 -0
  349. package/dist/assets/index-574438d6.css +884 -0
  350. package/dist/assets/index-57b305d3.css +44 -0
  351. package/dist/assets/index-5ee8a575.css +295 -0
  352. package/dist/assets/index-5fa0ac5a.css +46 -0
  353. package/dist/assets/index-61b63a8f.css +57 -0
  354. package/dist/assets/index-6416f636.css +83 -0
  355. package/dist/assets/index-6c47e88a.css +46 -0
  356. package/dist/assets/index-6f721577.css +80 -0
  357. package/dist/assets/index-73867d38.css +133 -0
  358. package/dist/assets/index-76a58945.css +68 -0
  359. package/dist/assets/index-76dd9f11.css +5 -0
  360. package/dist/assets/index-7813bab3.css +66 -0
  361. package/dist/assets/index-793eae6b.css +234 -0
  362. package/dist/assets/index-8304db49.css +129 -0
  363. package/dist/assets/index-8aa4712e.css +51 -0
  364. package/dist/assets/{index-3e8ea1d6.css → index-8f52a20f.css} +16 -2
  365. package/dist/assets/index-93ad846c.css +259 -0
  366. package/dist/assets/index-9dcf6260.css +151 -0
  367. package/dist/assets/index-9e44e336.css +59 -0
  368. package/dist/assets/index-9e9587e1.css +45 -0
  369. package/dist/assets/index-a2b51bce.css +47 -0
  370. package/dist/assets/index-a2d55f92.css +204 -0
  371. package/dist/assets/index-a9e4fe04.css +46 -0
  372. package/dist/assets/index-abb90c97.css +164 -0
  373. package/dist/assets/{index-3b76db9b.css → index-af72a30b.css} +78 -3
  374. package/dist/assets/{NcAppNavigationToggle-110970cd.css → index-b8f13a1f.css} +13 -2
  375. package/dist/assets/index-b991895f.css +87 -0
  376. package/dist/assets/{index-25b448e3.css → index-baf8711a.css} +67 -3
  377. package/dist/assets/index-c06ad941.css +175 -0
  378. package/dist/assets/index-c5ae3bc4.css +303 -0
  379. package/dist/assets/index-c6f0da2e.css +69 -0
  380. package/dist/assets/index-d211cae8.css +93 -0
  381. package/dist/assets/index-d646553d.css +41 -0
  382. package/dist/assets/index-dc612aa3.css +112 -0
  383. package/dist/assets/index-e7c55791.css +243 -0
  384. package/dist/assets/index-e7eadba7.css +82 -0
  385. package/dist/assets/index-e828b286.css +76 -0
  386. package/dist/assets/index-ed4adf1d.css +115 -0
  387. package/dist/assets/{index-19f059f6.css → index-edee3304.css} +33 -2
  388. package/dist/assets/index-eea65531.css +129 -0
  389. package/dist/assets/index-f85aa003.css +78 -0
  390. package/dist/assets/index-fc61f2d8.css +41 -0
  391. package/dist/assets/referencePickerModal-3a127978.css +482 -0
  392. package/dist/chunks/GenColors-38246c38.mjs +46 -0
  393. package/dist/chunks/{GenColors-8097de04.cjs.map → GenColors-38246c38.mjs.map} +1 -1
  394. package/dist/chunks/GenColors-eedcc70a.cjs +45 -0
  395. package/dist/chunks/{GenColors-85cb6194.mjs.map → GenColors-eedcc70a.cjs.map} +1 -1
  396. package/dist/{assets/index-cb18d6f3.css → chunks/GenRandomId-c214d235.cjs} +8 -5
  397. package/dist/chunks/{GenRandomId-67df40eb.cjs.map → GenRandomId-c214d235.cjs.map} +1 -1
  398. package/dist/chunks/GenRandomId-cb9ccebe.mjs +25 -0
  399. package/dist/chunks/{GenRandomId-1e1b509a.mjs.map → GenRandomId-cb9ccebe.mjs.map} +1 -1
  400. package/dist/chunks/Linkify-39f20c9a.mjs +33 -0
  401. package/dist/chunks/{Linkify-a0faf443.mjs.map → Linkify-39f20c9a.mjs.map} +1 -1
  402. package/dist/chunks/Linkify-40cdd635.cjs +32 -0
  403. package/dist/chunks/{Linkify-a4db36a9.cjs.map → Linkify-40cdd635.cjs.map} +1 -1
  404. package/dist/chunks/NcAppNavigationToggle-841d3015.cjs +49 -0
  405. package/dist/chunks/NcAppNavigationToggle-841d3015.cjs.map +1 -0
  406. package/dist/chunks/NcAppNavigationToggle-e358aa47.mjs +55 -0
  407. package/dist/chunks/NcAppNavigationToggle-e358aa47.mjs.map +1 -0
  408. package/dist/chunks/NcInputConfirmCancel-44052477.mjs +96 -0
  409. package/dist/chunks/NcInputConfirmCancel-44052477.mjs.map +1 -0
  410. package/dist/chunks/NcInputConfirmCancel-6bea0fdc.cjs +90 -0
  411. package/dist/chunks/NcInputConfirmCancel-6bea0fdc.cjs.map +1 -0
  412. package/dist/chunks/NcRichText-332fe454.cjs +289 -0
  413. package/dist/chunks/{NcRichText-bb9d3893.mjs.map → NcRichText-332fe454.cjs.map} +1 -1
  414. package/dist/chunks/NcRichText-8fda53c8.mjs +302 -0
  415. package/dist/chunks/{NcRichText-3c54a3cc.cjs.map → NcRichText-8fda53c8.mjs.map} +1 -1
  416. package/dist/chunks/NcSettingsSelectGroup-a5ff8c36.cjs +183 -0
  417. package/dist/chunks/NcSettingsSelectGroup-a5ff8c36.cjs.map +1 -0
  418. package/dist/chunks/NcSettingsSelectGroup-fdd3309c.mjs +192 -0
  419. package/dist/chunks/NcSettingsSelectGroup-fdd3309c.mjs.map +1 -0
  420. package/dist/chunks/ScopeComponent-9519afcc.mjs +29 -0
  421. package/dist/chunks/{ScopeComponent-1f3a7612.mjs.map → ScopeComponent-9519afcc.mjs.map} +1 -1
  422. package/dist/chunks/ScopeComponent-e060526a.cjs +28 -0
  423. package/dist/chunks/{ScopeComponent-4b8bd1ee.cjs.map → ScopeComponent-e060526a.cjs.map} +1 -1
  424. package/dist/chunks/_plugin-vue2_normalizer-71e2aa87.mjs +32 -0
  425. package/dist/chunks/_plugin-vue2_normalizer-71e2aa87.mjs.map +1 -0
  426. package/dist/chunks/_plugin-vue2_normalizer-7f9efb60.cjs +31 -0
  427. package/dist/chunks/_plugin-vue2_normalizer-7f9efb60.cjs.map +1 -0
  428. package/dist/chunks/actionGlobal-8c1c28c9.mjs +50 -0
  429. package/dist/chunks/{actionGlobal-cda46023.mjs.map → actionGlobal-8c1c28c9.mjs.map} +1 -1
  430. package/dist/chunks/actionGlobal-9e29e11b.cjs +49 -0
  431. package/dist/chunks/{actionGlobal-ec7003e8.cjs.map → actionGlobal-9e29e11b.cjs.map} +1 -1
  432. package/dist/chunks/actionText-54bc24a6.cjs +120 -0
  433. package/dist/chunks/{actionText-bef01778.cjs.map → actionText-54bc24a6.cjs.map} +1 -1
  434. package/dist/chunks/actionText-a64be267.mjs +121 -0
  435. package/dist/chunks/{actionText-6c35d3fc.mjs.map → actionText-a64be267.mjs.map} +1 -1
  436. package/dist/chunks/focusTrap-14985831.cjs +26 -0
  437. package/dist/chunks/{focusTrap-173aba65.mjs.map → focusTrap-14985831.cjs.map} +1 -1
  438. package/dist/chunks/focusTrap-5d0f71d4.mjs +27 -0
  439. package/dist/chunks/{focusTrap-139520e2.cjs.map → focusTrap-5d0f71d4.mjs.map} +1 -1
  440. package/dist/chunks/index-032137a6.cjs +468 -0
  441. package/dist/chunks/index-032137a6.cjs.map +1 -0
  442. package/dist/chunks/index-20a9ace9.mjs +149 -0
  443. package/dist/chunks/{index-cd3f1f8f.mjs.map → index-20a9ace9.mjs.map} +1 -1
  444. package/dist/chunks/index-4398f925.cjs +149 -0
  445. package/dist/chunks/{index-858938bd.cjs.map → index-4398f925.cjs.map} +1 -1
  446. package/dist/chunks/index-5f2a5f57.mjs +155 -0
  447. package/dist/chunks/{index-377488aa.mjs.map → index-5f2a5f57.mjs.map} +1 -1
  448. package/dist/chunks/index-e894376a.cjs +148 -0
  449. package/dist/chunks/{index-df3f51c6.cjs.map → index-e894376a.cjs.map} +1 -1
  450. package/dist/chunks/index-fb2ee22c.mjs +481 -0
  451. package/dist/chunks/index-fb2ee22c.mjs.map +1 -0
  452. package/dist/chunks/l10n-05a09c66.mjs +31 -0
  453. package/dist/chunks/l10n-05a09c66.mjs.map +1 -0
  454. package/dist/chunks/l10n-9aa6482d.mjs +10 -0
  455. package/dist/chunks/l10n-9aa6482d.mjs.map +1 -0
  456. package/dist/chunks/l10n-b1d264c7.cjs +29 -0
  457. package/dist/chunks/l10n-b1d264c7.cjs.map +1 -0
  458. package/dist/chunks/l10n-c7bd0ea6.cjs +8 -0
  459. package/dist/chunks/l10n-c7bd0ea6.cjs.map +1 -0
  460. package/dist/chunks/logger-3612e664.mjs +25 -0
  461. package/dist/chunks/{logger-01af1a78.cjs.map → logger-3612e664.mjs.map} +1 -1
  462. package/dist/chunks/logger-4998b668.cjs +24 -0
  463. package/dist/chunks/{logger-ccc7ee65.mjs.map → logger-4998b668.cjs.map} +1 -1
  464. package/dist/chunks/referencePickerModal-279a483d.cjs +858 -0
  465. package/dist/chunks/referencePickerModal-279a483d.cjs.map +1 -0
  466. package/dist/chunks/referencePickerModal-443a4c57.mjs +877 -0
  467. package/dist/chunks/referencePickerModal-443a4c57.mjs.map +1 -0
  468. package/dist/index.cjs +257 -1
  469. package/dist/index.cjs.map +1 -1
  470. package/dist/index.mjs +301 -150
  471. package/dist/index.mjs.map +1 -1
  472. package/package.json +7 -4
  473. package/dist/assets/NcMentionBubble-67378a12.css +0 -21
  474. package/dist/assets/index-2cedaf24.css +0 -21
  475. package/dist/assets/index-30d74459.css +0 -42
  476. package/dist/assets/index-317f55be.css +0 -21
  477. package/dist/assets/index-34f6bb3f.css +0 -21
  478. package/dist/assets/index-37970f20.css +0 -21
  479. package/dist/assets/index-3aba62de.css +0 -21
  480. package/dist/assets/index-47fab7bf.css +0 -21
  481. package/dist/assets/index-49a0d570.css +0 -21
  482. package/dist/assets/index-4a4c1700.css +0 -21
  483. package/dist/assets/index-4a4c2637.css +0 -21
  484. package/dist/assets/index-4efbac36.css +0 -21
  485. package/dist/assets/index-6140ff62.css +0 -21
  486. package/dist/assets/index-66b19339.css +0 -21
  487. package/dist/assets/index-6cb0dc4a.css +0 -21
  488. package/dist/assets/index-6f63d18f.css +0 -42
  489. package/dist/assets/index-76287c8f.css +0 -21
  490. package/dist/assets/index-7a7195d0.css +0 -21
  491. package/dist/assets/index-7e084b52.css +0 -21
  492. package/dist/assets/index-7f55fed2.css +0 -21
  493. package/dist/assets/index-7ffde264.css +0 -21
  494. package/dist/assets/index-81f5e4c8.css +0 -21
  495. package/dist/assets/index-82b5969a.css +0 -21
  496. package/dist/assets/index-852d8576.css +0 -21
  497. package/dist/assets/index-8f58dd75.css +0 -21
  498. package/dist/assets/index-935fa6f9.css +0 -42
  499. package/dist/assets/index-939ba6f0.css +0 -21
  500. package/dist/assets/index-a17dfbc4.css +0 -21
  501. package/dist/assets/index-a4a40fa3.css +0 -21
  502. package/dist/assets/index-a50a8de6.css +0 -1
  503. package/dist/assets/index-a513dcd5.css +0 -21
  504. package/dist/assets/index-a8c5cf75.css +0 -21
  505. package/dist/assets/index-a999ba9f.css +0 -21
  506. package/dist/assets/index-afc15e11.css +0 -21
  507. package/dist/assets/index-b814f5fa.css +0 -21
  508. package/dist/assets/index-ba6ad1b4.css +0 -21
  509. package/dist/assets/index-bf10e8e1.css +0 -21
  510. package/dist/assets/index-bf46edd7.css +0 -21
  511. package/dist/assets/index-c6d7f3b0.css +0 -21
  512. package/dist/assets/index-c736204a.css +0 -21
  513. package/dist/assets/index-cb76ef23.css +0 -21
  514. package/dist/assets/index-cc70a006.css +0 -21
  515. package/dist/assets/index-dd464a52.css +0 -21
  516. package/dist/assets/index-e0ceef85.css +0 -21
  517. package/dist/assets/index-ecdb616f.css +0 -42
  518. package/dist/assets/index-ee410fad.css +0 -21
  519. package/dist/assets/index-ef0bca81.css +0 -42
  520. package/dist/assets/index-f1030e54.css +0 -21
  521. package/dist/assets/index-f6ca40ca.css +0 -21
  522. package/dist/assets/index-f8466b88.css +0 -21
  523. package/dist/assets/referencePickerModal-41e4705a.css +0 -21
  524. package/dist/chunks/GenColors-8097de04.cjs +0 -1
  525. package/dist/chunks/GenColors-85cb6194.mjs +0 -25
  526. package/dist/chunks/GenRandomId-1e1b509a.mjs +0 -4
  527. package/dist/chunks/GenRandomId-67df40eb.cjs +0 -1
  528. package/dist/chunks/IsMobileState-151fc57d.cjs +0 -1
  529. package/dist/chunks/IsMobileState-151fc57d.cjs.map +0 -1
  530. package/dist/chunks/IsMobileState-e1fe5f58.mjs +0 -15
  531. package/dist/chunks/IsMobileState-e1fe5f58.mjs.map +0 -1
  532. package/dist/chunks/Linkify-a0faf443.mjs +0 -5
  533. package/dist/chunks/Linkify-a4db36a9.cjs +0 -1
  534. package/dist/chunks/NcAppNavigationToggle-5f3b9b9a.cjs +0 -1
  535. package/dist/chunks/NcAppNavigationToggle-5f3b9b9a.cjs.map +0 -1
  536. package/dist/chunks/NcAppNavigationToggle-86cc2542.mjs +0 -23
  537. package/dist/chunks/NcAppNavigationToggle-86cc2542.mjs.map +0 -1
  538. package/dist/chunks/NcInputConfirmCancel-0cd93e0e.mjs +0 -43
  539. package/dist/chunks/NcInputConfirmCancel-0cd93e0e.mjs.map +0 -1
  540. package/dist/chunks/NcInputConfirmCancel-17c8ddfb.cjs +0 -1
  541. package/dist/chunks/NcInputConfirmCancel-17c8ddfb.cjs.map +0 -1
  542. package/dist/chunks/NcMentionBubble.vue_vue_type_style_index_0_scoped_357e6d0e_lang-072bbb05.cjs.map +0 -1
  543. package/dist/chunks/NcMentionBubble.vue_vue_type_style_index_0_scoped_357e6d0e_lang-55016398.mjs.map +0 -1
  544. package/dist/chunks/NcRichText-3c54a3cc.cjs +0 -1
  545. package/dist/chunks/NcRichText-bb9d3893.mjs +0 -123
  546. package/dist/chunks/NcSettingsSelectGroup-0be1fe91.mjs +0 -58
  547. package/dist/chunks/NcSettingsSelectGroup-0be1fe91.mjs.map +0 -1
  548. package/dist/chunks/NcSettingsSelectGroup-62ca94a9.cjs +0 -1
  549. package/dist/chunks/NcSettingsSelectGroup-62ca94a9.cjs.map +0 -1
  550. package/dist/chunks/ScopeComponent-1f3a7612.mjs +0 -8
  551. package/dist/chunks/ScopeComponent-4b8bd1ee.cjs +0 -1
  552. package/dist/chunks/_plugin-vue2_normalizer-5b4c43a4.mjs +0 -24
  553. package/dist/chunks/_plugin-vue2_normalizer-5b4c43a4.mjs.map +0 -1
  554. package/dist/chunks/_plugin-vue2_normalizer-764a4c12.cjs +0 -1
  555. package/dist/chunks/_plugin-vue2_normalizer-764a4c12.cjs.map +0 -1
  556. package/dist/chunks/actionGlobal-cda46023.mjs +0 -15
  557. package/dist/chunks/actionGlobal-ec7003e8.cjs +0 -1
  558. package/dist/chunks/actionText-6c35d3fc.mjs +0 -23
  559. package/dist/chunks/actionText-bef01778.cjs +0 -1
  560. package/dist/chunks/focusTrap-139520e2.cjs +0 -1
  561. package/dist/chunks/focusTrap-173aba65.mjs +0 -6
  562. package/dist/chunks/index-197226c7.mjs +0 -171
  563. package/dist/chunks/index-197226c7.mjs.map +0 -1
  564. package/dist/chunks/index-377488aa.mjs +0 -46
  565. package/dist/chunks/index-858938bd.cjs +0 -3
  566. package/dist/chunks/index-cd3f1f8f.mjs +0 -43
  567. package/dist/chunks/index-cebd6e80.cjs +0 -1
  568. package/dist/chunks/index-cebd6e80.cjs.map +0 -1
  569. package/dist/chunks/index-df3f51c6.cjs +0 -1
  570. package/dist/chunks/l10n-05baf7da.mjs +0 -5
  571. package/dist/chunks/l10n-05baf7da.mjs.map +0 -1
  572. package/dist/chunks/l10n-46d0c1c0.cjs +0 -1
  573. package/dist/chunks/l10n-46d0c1c0.cjs.map +0 -1
  574. package/dist/chunks/l10n-9a5a6afc.mjs +0 -18
  575. package/dist/chunks/l10n-9a5a6afc.mjs.map +0 -1
  576. package/dist/chunks/l10n-dacb6440.cjs +0 -1
  577. package/dist/chunks/l10n-dacb6440.cjs.map +0 -1
  578. package/dist/chunks/logger-01af1a78.cjs +0 -1
  579. package/dist/chunks/logger-ccc7ee65.mjs +0 -5
  580. package/dist/chunks/referencePickerModal-6120a321.cjs +0 -1
  581. package/dist/chunks/referencePickerModal-6120a321.cjs.map +0 -1
  582. package/dist/chunks/referencePickerModal-d0573462.mjs +0 -428
  583. package/dist/chunks/referencePickerModal-d0573462.mjs.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"NcRelatedResourcesPanel.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"NcRelatedResourcesPanel.mjs","sources":["../../src/components/NcRelatedResourcesPanel/NcResource.vue","../../src/components/NcRelatedResourcesPanel/NcRelatedResourcesPanel.vue"],"sourcesContent":["<!--\n - @copyright 2022 Christopher Ng <chrng8@gmail.com>\n -\n - @author Christopher Ng <chrng8@gmail.com>\n -\n - @license AGPL-3.0-or-later\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n-->\n\n<template>\n\t<li class=\"resource\">\n\t\t<NcButton class=\"resource__button\"\n\t\t\t:aria-label=\"labelTranslated\"\n\t\t\ttype=\"tertiary\"\n\t\t\t:href=\"url\">\n\t\t\t<template #icon>\n\t\t\t\t<div class=\"resource__icon\">\n\t\t\t\t\t<img :src=\"icon\">\n\t\t\t\t</div>\n\t\t\t</template>\n\t\t\t{{ name }}\n\t\t</NcButton>\n\t</li>\n</template>\n\n<script>\nimport NcButton from '../NcButton/index.js'\n\nimport { t } from '../../l10n.js'\n\nexport default {\n\tname: 'NcResource',\n\n\tcomponents: {\n\t\tNcButton,\n\t},\n\n\tprops: {\n\t\ticon: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tname: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\turl: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tlabelTranslated: t('Open link to \"{resourceName}\"', { resourceName: this.name }),\n\t\t}\n\t},\n\n\tmethods: {\n\t\tt,\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.resource {\n\tdisplay: flex;\n\talign-items: center;\n\theight: 44px;\n\n\t// Override default NcButton styles\n\t&__button {\n\t\twidth: 100% !important;\n\t\tjustify-content: flex-start !important;\n\t\tpadding: 0 !important;\n\n\t\t&:deep {\n\t\t\t.button-vue__wrapper {\n\t\t\t\tjustify-content: flex-start !important;\n\n\t\t\t\t.button-vue__text {\n\t\t\t\t\tfont-weight: normal !important;\n\t\t\t\t\tmargin-left: 2px !important;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t&__icon {\n\t\twidth: 32px;\n\t\theight: 32px;\n\t\tbackground-color: var(--color-text-maxcontrast);\n\t\tborder-radius: 50%;\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tjustify-content: center;\n\n\t\timg {\n\t\t\twidth: 16px;\n\t\t\theight: 16px;\n\t\t\tfilter: var(--background-invert-if-dark);\n\t\t}\n\t}\n}\n</style>\n","<!--\n - @copyright 2022 Christopher Ng <chrng8@gmail.com>\n -\n - @author Christopher Ng <chrng8@gmail.com>\n -\n - @license AGPL-3.0-or-later\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n-->\n\n<docs>\n### Usage\n\nUse this component to display the related resources of a given item.\n\n```\n<template>\n\t<NcRelatedResourcesPanel provider-id=\"talk\"\n\t\t:item-id=\"conversationId\" />\n</template>\n\n<script>\nexport default {\n\tdata() {\n\t\treturn {\n\t\t\tconversationId: 1,\n\t\t}\n\t},\n}\n</script>\n```\n</docs>\n\n<template>\n\t<div v-if=\"appEnabled && isVisible\" class=\"related-resources\">\n\t\t<div class=\"related-resources__header\">\n\t\t\t<h5>{{ headerTranslated }}</h5>\n\t\t\t<p>{{ description }}</p>\n\t\t</div>\n\n\t\t<NcResource v-for=\"resource in resources\"\n\t\t\t:key=\"resource.itemId\"\n\t\t\tclass=\"related-resources__entry\"\n\t\t\t:icon=\"resource.icon\"\n\t\t\t:name=\"resource.title\"\n\t\t\t:url=\"resource.url\" />\n\t</div>\n</template>\n\n<script>\nimport axios from '@nextcloud/axios'\nimport { generateOcsUrl } from '@nextcloud/router'\n\nimport NcResource from './NcResource.vue'\n\nimport { t } from '../../l10n.js'\n\nexport default {\n\tname: 'NcRelatedResourcesPanel',\n\n\tcomponents: {\n\t\tNcResource,\n\t},\n\n\tprops: {\n\t\t/**\n\t\t * The provider id implemented with `\\OCA\\RelatedResources\\IRelatedResourceProvider::getProviderId()`\n\t\t */\n\t\tproviderId: {\n\t\t\ttype: String,\n\t\t\tdefault: null,\n\t\t},\n\t\t/**\n\t\t * The item id which uniquely identities the e.g. Calendar event, Deck board, file, Talk room, etc.\n\t\t */\n\t\titemId: {\n\t\t\ttype: [String, Number],\n\t\t\tdefault: null,\n\t\t},\n\t\t/**\n\t\t * Limits to specific resource type. i.e. any provider id implemented with `\\OCA\\RelatedResources\\IRelatedResourceProvider::getProviderId()`\n\t\t */\n\t\tresourceType: {\n\t\t\ttype: String,\n\t\t\tdefault: null,\n\t\t},\n\t\t/**\n\t\t * Set the maximum number of resources to load\n\t\t */\n\t\tlimit: {\n\t\t\ttype: Number,\n\t\t\tdefault: null,\n\t\t},\n\t\t/**\n\t\t * Only used by the files sidebar\n\t\t *\n\t\t * File info is passed when registered with `OCA.Sharing.ShareTabSections.registerSection()`\n\t\t */\n\t\tfileInfo: {\n\t\t\ttype: Object,\n\t\t\tdefault: null,\n\t\t},\n\t},\n\n\temits: [\n\t\t'has-error',\n\t\t'has-resources',\n\t],\n\n\tdata() {\n\t\treturn {\n\t\t\tappEnabled: OC?.appswebroots?.related_resources !== undefined,\n\t\t\theaderTranslated: t('Related resources'),\n\t\t\tloading: false,\n\t\t\terror: null,\n\t\t\tresources: [],\n\t\t}\n\t},\n\n\tcomputed: {\n\t\tisVisible() {\n\t\t\tif (this.loading) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\treturn this.error ?? this.resources.length > 0\n\t\t},\n\n\t\tdescription() {\n\t\t\tif (this.error) {\n\t\t\t\treturn t('Error getting related resources. Please contact your system administrator if you have any questions.')\n\t\t\t}\n\t\t\treturn t('Anything shared with the same group of people will show up here')\n\t\t},\n\n\t\thasResourceInfo() {\n\t\t\tif (this.providerId !== null && this.itemId !== null) {\n\t\t\t\treturn true\n\t\t\t}\n\t\t\tif (this.fileInfo !== null) {\n\t\t\t\treturn true\n\t\t\t}\n\t\t\treturn false\n\t\t},\n\n\t\tisFiles() {\n\t\t\treturn this.fileInfo?.id !== undefined\n\t\t},\n\n\t\turl() {\n\t\t\tlet providerId = null\n\t\t\tlet itemId = null\n\n\t\t\tif (this.isFiles) {\n\t\t\t\tproviderId = 'files'\n\t\t\t\titemId = this.fileInfo.id\n\t\t\t} else {\n\t\t\t\tproviderId = this.providerId\n\t\t\t\titemId = this.itemId\n\t\t\t}\n\n\t\t\treturn generateOcsUrl('/apps/related_resources/related/{providerId}?itemId={itemId}&resourceType={resourceType}&limit={limit}&format=json', {\n\t\t\t\tproviderId,\n\t\t\t\titemId,\n\t\t\t\tresourceType: this.resourceType,\n\t\t\t\tlimit: this.limit,\n\t\t\t})\n\t\t},\n\t},\n\n\twatch: {\n\t\tproviderId() {\n\t\t\tthis.fetchRelatedResources()\n\t\t},\n\t\titemId() {\n\t\t\tthis.fetchRelatedResources()\n\t\t},\n\t\tfileInfo() {\n\t\t\tthis.fetchRelatedResources()\n\t\t},\n\t\terror(error) {\n\t\t\t/**\n\t\t\t * Emitted when the error value changes\n\t\t\t *\n\t\t\t * @type {boolean}\n\t\t\t */\n\t\t\tthis.$emit('has-error', Boolean(error))\n\t\t},\n\t\tresources(resources) {\n\t\t\t/**\n\t\t\t * Emitted when the resources value changes\n\t\t\t *\n\t\t\t * @type {boolean}\n\t\t\t */\n\t\t\tthis.$emit('has-resources', resources.length > 0)\n\t\t},\n\t},\n\n\tcreated() {\n\t\tthis.fetchRelatedResources()\n\t},\n\n\tmethods: {\n\t\tt,\n\t\tasync fetchRelatedResources() {\n\t\t\tif (!this.appEnabled || !this.hasResourceInfo) {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tthis.loading = true\n\t\t\tthis.error = null\n\t\t\tthis.resources = []\n\t\t\ttry {\n\t\t\t\tconst response = await axios.get(this.url)\n\t\t\t\tthis.resources = response.data.ocs?.data\n\t\t\t} catch (e) {\n\t\t\t\tthis.error = e\n\t\t\t\tconsole.error(e)\n\t\t\t} finally {\n\t\t\t\tthis.loading = false\n\t\t\t}\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.related-resources {\n\t&__header {\n\t\tmargin: 0 0 10px 46px;\n\n\t\th5 {\n\t\t\tfont-weight: bold;\n\t\t}\n\n\t\tp {\n\t\t\tcolor: var(--color-text-maxcontrast);\n\t\t}\n\t}\n}\n</style>\n"],"names":["_sfc_main$1","NcButton","t","_sfc_main","NcResource","_a","providerId","itemId","generateOcsUrl","error","resources","response","axios"],"mappings":"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"}
@@ -1 +1,478 @@
1
- var A=require("../assets/index-76287c8f.css");Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const p=require("../chunks/index-858938bd.cjs"),h=require("@nextcloud/router"),d=require("../chunks/_plugin-vue2_normalizer-764a4c12.cjs"),l=require("../chunks/l10n-46d0c1c0.cjs");require("../Directives/Tooltip.cjs");const u=require("../Functions/emoji.cjs"),c=require("../chunks/referencePickerModal-6120a321.cjs");require("@nextcloud/axios"),require("unist-util-visit"),require("unist-builder"),require("unified"),require("remark-parse"),require("remark-breaks"),require("remark-rehype"),require("rehype-react"),require("rehype-external-links"),require("./NcEmptyContent.cjs"),require("./NcSelect.cjs"),require("vue-material-design-icons/LinkVariant.vue"),require("./NcLoadingIcon.cjs"),require("./NcTextField.cjs"),require("vue-material-design-icons/DotsHorizontal.vue"),require("./NcButton.cjs"),require("./NcModal.cjs"),require("@nextcloud/event-bus"),require("vue-material-design-icons/ArrowLeft.vue"),require("vue-material-design-icons/Close.vue");const o=require("tributejs/dist/tribute.esm.js"),g=require("debounce"),f=require("string-length"),b=require("floating-vue");const v={name:"NcAutoCompleteResult",props:{title:{type:String,required:!0},subline:{type:String,default:null},id:{type:String,default:null},icon:{type:String,required:!0},iconUrl:{type:String,default:null},source:{type:String,required:!0},status:{type:[Object,Array],default:()=>({})}},computed:{avatarUrl(){return this.iconUrl?this.iconUrl:this.id&&this.source==="users"?this.getAvatarUrl(this.id,44):null},haveStatus(){var e,t,i;return((e=this.status)==null?void 0:e.icon)||((t=this.status)==null?void 0:t.status)&&((i=this.status)==null?void 0:i.status)!=="offline"}},methods:{getAvatarUrl(e,t){return h.generateUrl("/avatar/{user}/{size}",{user:e,size:t})}}};var _=function(){var e=this,t=e._self._c;return t("div",{staticClass:"autocomplete-result"},[t("div",{staticClass:"autocomplete-result__icon",class:[e.icon,`autocomplete-result__icon--${e.avatarUrl?"with-avatar":""}`],style:e.avatarUrl?{backgroundImage:`url(${e.avatarUrl})`}:null},[e.haveStatus?t("div",{staticClass:"autocomplete-result__status",class:[`autocomplete-result__status--${e.status&&e.status.icon?"icon":e.status.status}`]},[e._v(" "+e._s(e.status&&e.status.icon||"")+" ")]):e._e()]),t("span",{staticClass:"autocomplete-result__content"},[t("span",{staticClass:"autocomplete-result__title",attrs:{title:e.title}},[e._v(" "+e._s(e.title)+" ")]),e.subline?t("span",{staticClass:"autocomplete-result__subline"},[e._v(" "+e._s(e.subline)+" ")]):e._e()])])},y=[],C=d.normalizeComponent(v,_,y,!1,null,"25cf09d8",null,null);const m=C.exports;const k={name:"NcRichContenteditable",directives:{tooltip:b.VTooltip},mixins:[p.richEditor],props:{value:{type:String,default:"",required:!0},placeholder:{type:String,default:l.t("Write a message …")},autoComplete:{type:Function,default:()=>[]},menuContainer:{type:Element,default:()=>document.body},multiline:{type:Boolean,default:!1},contenteditable:{type:Boolean,default:!0},disabled:{type:Boolean,default:!1},maxlength:{type:Number,default:null},emojiAutocomplete:{type:Boolean,default:!0},linkAutocomplete:{type:Boolean,default:!0}},emits:["submit","paste","update:value"],data(){return{textSmiles:[],tribute:null,autocompleteOptions:{allowSpaces:!0,fillAttr:"id",lookup:e=>`${e.id} ${e.title}`,menuContainer:this.menuContainer,menuItemTemplate:e=>this.renderComponentHtml(e.original,m),noMatchTemplate:()=>'<span class="hidden"></span>',selectTemplate:e=>{var t;return this.genSelectTemplate((t=e==null?void 0:e.original)==null?void 0:t.id)},values:this.debouncedAutoComplete},emojiOptions:{trigger:":",lookup:(e,t)=>t,menuContainer:this.menuContainer,menuItemTemplate:e=>this.textSmiles.includes(e.original)?e.original:`<span class="tribute-container-emoji__item__emoji">${e.original.native}</span> :${e.original.short_name}`,noMatchTemplate:()=>l.t("No emoji found"),selectTemplate:e=>this.textSmiles.includes(e.original)?e.original:(u.emojiAddRecent(e.original),e.original.native),values:(e,t)=>{const i=u.emojiSearch(e);this.textSmiles.includes(":"+e)&&i.unshift(":"+e),t(i)},containerClass:"tribute-container-emoji",itemClass:"tribute-container-emoji__item"},linkOptions:{trigger:"/",lookup:(e,t)=>t,menuContainer:this.menuContainer,menuItemTemplate:e=>`<img class="tribute-container-link__item__icon" src="${e.original.icon_url}"> <span class="tribute-container-link__item__title">${e.original.title}</span>`,noMatchTemplate:()=>l.t("No link provider found"),selectTemplate:this.getLink,values:(e,t)=>t(c.searchProvider(e)),containerClass:"tribute-container-link",itemClass:"tribute-container-link__item"},localValue:this.value,isComposing:!1}},computed:{isEmptyValue(){return!this.localValue||this.localValue&&this.localValue.trim()===""},isFF(){return!!navigator.userAgent.match(/firefox/i)},isOverMaxlength(){return this.isEmptyValue||!this.maxlength?!1:f(this.localValue)>this.maxlength},tooltipString(){return this.isOverMaxlength?{content:l.t("Message limit of {count} characters reached",{count:this.maxlength}),shown:!0,trigger:"manual"}:null},canEdit(){return this.contenteditable&&!this.disabled},listeners(){const e={...this.$listeners};return delete e.paste,e}},watch:{value(){const e=this.$refs.contenteditable.innerHTML;this.value.trim()!==this.parseContent(e).trim()&&this.updateContent(this.value)}},mounted(){const e=["d","D","p","P","s","S","x","X",")","(","|","/"];this.textSmiles=[],e.forEach(t=>{this.textSmiles.push(":"+t),this.textSmiles.push(":-"+t)}),this.autocompleteTribute=new o(this.autocompleteOptions),this.autocompleteTribute.attach(this.$el),this.emojiAutocomplete&&(this.emojiTribute=new o(this.emojiOptions),this.emojiTribute.attach(this.$el)),this.linkAutocomplete&&(this.linkTribute=new o(this.linkOptions),this.linkTribute.attach(this.$el)),this.updateContent(this.value),this.$refs.contenteditable.contentEditable=this.canEdit},beforeDestroy(){this.autocompleteTribute&&this.autocompleteTribute.detach(this.$el),this.emojiTribute&&this.emojiTribute.detach(this.$el),this.linkTribute&&this.linkTribute.detach(this.$el)},methods:{focus(){this.$refs.contenteditable.focus()},getLink(e){return c.getLinkWithPicker(e.original.id).then(t=>{const i=document.getElementById("tmp-link-result-node"),n=document.createTextNode(t);i.replaceWith(n),this.setCursorAfter(n),this.updateValue(this.$refs.contenteditable.innerHTML)}).catch(t=>{console.debug("Smart picker promise rejected:",t);const i=document.getElementById("tmp-link-result-node");this.setCursorAfter(i),i.remove()}),'<span id="tmp-link-result-node"></span>'},setCursorAfter(e){const t=document.createRange();t.setEndAfter(e),t.collapse();const i=window.getSelection();i.removeAllRanges(),i.addRange(t)},onInput(e){this.updateValue(e.target.innerHTML)},onPaste(e){if(!this.canEdit)return;e.preventDefault();const t=e.clipboardData;if(this.$emit("paste",e),t.files.length!==0||!Object.values(t.items).find(a=>a==null?void 0:a.type.startsWith("text")))return;const i=t.getData("text"),n=window.getSelection();if(!n.rangeCount){this.updateValue(i);return}const s=n.getRangeAt(0);n.deleteFromDocument(),s.insertNode(document.createTextNode(i));const r=document.createRange();r.setStart(e.target,s.endOffset),r.collapse(!0),n.removeAllRanges(),n.addRange(r),this.updateValue(this.$refs.contenteditable.innerHTML)},updateValue(e){const t=this.parseContent(e);this.localValue=t,this.$emit("update:value",t)},updateContent(e){const t=this.renderContent(e);this.$refs.contenteditable.innerHTML=t,this.localValue=e},onDelete(e){if(!this.isFF||!window.getSelection||!this.canEdit)return;const t=window.getSelection(),i=e.target;if(!t.isCollapsed||!t.rangeCount)return;const n=t.getRangeAt(t.rangeCount-1);if(n.commonAncestorContainer.nodeType===3&&n.startOffset>0)return;const s=document.createRange();if(t.anchorNode!==i)s.selectNodeContents(i),s.setEndBefore(t.anchorNode);else if(t.anchorOffset>0)s.setEnd(i,t.anchorOffset);else return;s.setStart(i,s.endOffset-1);const r=s.cloneContents().lastChild;r&&r.contentEditable==="false"&&(s.deleteContents(),e.preventDefault())},onEnter(e){this.multiline||this.isOverMaxlength||this.autocompleteTribute.isActive||this.emojiTribute.isActive||this.linkTribute.isActive||this.isComposing||(e.preventDefault(),e.stopPropagation(),this.$emit("submit",e))},onCtrlEnter(e){this.isOverMaxlength||this.$emit("submit",e)},debouncedAutoComplete:g(async function(e,t){this.autoComplete(e,t)},100),onKeyUp(e){e.stopImmediatePropagation()}}};var q=function(){var e=this,t=e._self._c;return t("div",e._g({directives:[{name:"tooltip",rawName:"v-tooltip",value:e.tooltipString,expression:"tooltipString"}],ref:"contenteditable",staticClass:"rich-contenteditable__input",class:{"rich-contenteditable__input--empty":e.isEmptyValue,"rich-contenteditable__input--multiline":e.multiline,"rich-contenteditable__input--overflow":e.isOverMaxlength,"rich-contenteditable__input--disabled":e.disabled},attrs:{contenteditable:e.canEdit,placeholder:e.placeholder,"aria-placeholder":e.placeholder,"aria-multiline":"true",role:"textbox"},on:{input:e.onInput,compositionstart:function(i){e.isComposing=!0},compositionend:function(i){e.isComposing=!1},keydown:[function(i){return!i.type.indexOf("key")&&e._k(i.keyCode,"delete",[8,46],i.key,["Backspace","Delete","Del"])?null:e.onDelete.apply(null,arguments)},function(i){return!i.type.indexOf("key")&&e._k(i.keyCode,"enter",13,i.key,"Enter")||i.ctrlKey||i.shiftKey||i.altKey||i.metaKey?null:e.onEnter.apply(null,arguments)},function(i){return!i.type.indexOf("key")&&e._k(i.keyCode,"enter",13,i.key,"Enter")||!i.ctrlKey||i.shiftKey||i.altKey||i.metaKey?null:(i.stopPropagation(),i.preventDefault(),e.onCtrlEnter.apply(null,arguments))}],paste:e.onPaste,"!keyup":function(i){return i.stopPropagation(),i.preventDefault(),e.onKeyUp.apply(null,arguments)}}},e.listeners))},T=[],S=d.normalizeComponent(k,q,T,!1,null,"b7f5e546",null,null);const x=S.exports;exports.NcMentionBubble=p.NcMentionBubble,exports.NcAutoCompleteResult=m,exports.default=x;
1
+ var O = require("../assets/index-793eae6b.css");
2
+ Object.defineProperties(exports, { __esModule: { value: !0 }, [Symbol.toStringTag]: { value: "Module" } });
3
+ const p = require("../chunks/index-4398f925.cjs"), f = require("@nextcloud/router"), m = require("../chunks/_plugin-vue2_normalizer-7f9efb60.cjs"), l = require("../chunks/l10n-b1d264c7.cjs");
4
+ require("../Directives/Tooltip.cjs");
5
+ const c = require("../Functions/emoji.cjs"), d = require("../chunks/referencePickerModal-279a483d.cjs");
6
+ require("@nextcloud/axios");
7
+ require("unist-util-visit");
8
+ require("unist-builder");
9
+ require("unified");
10
+ require("remark-parse");
11
+ require("remark-breaks");
12
+ require("remark-rehype");
13
+ require("rehype-react");
14
+ require("rehype-external-links");
15
+ require("./NcEmptyContent.cjs");
16
+ require("./NcSelect.cjs");
17
+ require("vue-material-design-icons/LinkVariant.vue");
18
+ require("./NcLoadingIcon.cjs");
19
+ require("./NcTextField.cjs");
20
+ require("vue-material-design-icons/DotsHorizontal.vue");
21
+ require("./NcButton.cjs");
22
+ require("./NcModal.cjs");
23
+ require("@nextcloud/event-bus");
24
+ require("vue-material-design-icons/ArrowLeft.vue");
25
+ require("vue-material-design-icons/Close.vue");
26
+ const _ = require("tributejs/dist/tribute.esm.js"), g = require("debounce"), b = require("string-length"), y = require("floating-vue"), u = (t) => t && t.__esModule ? t : { default: t }, a = /* @__PURE__ */ u(_), C = /* @__PURE__ */ u(g), v = /* @__PURE__ */ u(b);
27
+ const k = {
28
+ name: "NcAutoCompleteResult",
29
+ props: {
30
+ title: {
31
+ type: String,
32
+ required: !0
33
+ },
34
+ subline: {
35
+ type: String,
36
+ default: null
37
+ },
38
+ id: {
39
+ type: String,
40
+ default: null
41
+ },
42
+ icon: {
43
+ type: String,
44
+ required: !0
45
+ },
46
+ iconUrl: {
47
+ type: String,
48
+ default: null
49
+ },
50
+ source: {
51
+ type: String,
52
+ required: !0
53
+ },
54
+ status: {
55
+ type: [Object, Array],
56
+ default: () => ({})
57
+ }
58
+ },
59
+ computed: {
60
+ avatarUrl() {
61
+ return this.iconUrl ? this.iconUrl : this.id && this.source === "users" ? this.getAvatarUrl(this.id, 44) : null;
62
+ },
63
+ haveStatus() {
64
+ var t, e, n;
65
+ return ((t = this.status) == null ? void 0 : t.icon) || ((e = this.status) == null ? void 0 : e.status) && ((n = this.status) == null ? void 0 : n.status) !== "offline";
66
+ }
67
+ },
68
+ methods: {
69
+ getAvatarUrl(t, e) {
70
+ return f.generateUrl("/avatar/{user}/{size}", {
71
+ user: t,
72
+ size: e
73
+ });
74
+ }
75
+ }
76
+ };
77
+ var T = function() {
78
+ var e = this, n = e._self._c;
79
+ return n("div", { staticClass: "autocomplete-result" }, [n("div", { staticClass: "autocomplete-result__icon", class: [e.icon, `autocomplete-result__icon--${e.avatarUrl ? "with-avatar" : ""}`], style: e.avatarUrl ? { backgroundImage: `url(${e.avatarUrl})` } : null }, [e.haveStatus ? n("div", { staticClass: "autocomplete-result__status", class: [`autocomplete-result__status--${e.status && e.status.icon ? "icon" : e.status.status}`] }, [e._v(" " + e._s(e.status && e.status.icon || "") + " ")]) : e._e()]), n("span", { staticClass: "autocomplete-result__content" }, [n("span", { staticClass: "autocomplete-result__title", attrs: { title: e.title } }, [e._v(" " + e._s(e.title) + " ")]), e.subline ? n("span", { staticClass: "autocomplete-result__subline" }, [e._v(" " + e._s(e.subline) + " ")]) : e._e()])]);
80
+ }, q = [], x = /* @__PURE__ */ m.normalizeComponent(
81
+ k,
82
+ T,
83
+ q,
84
+ !1,
85
+ null,
86
+ "25cf09d8",
87
+ null,
88
+ null
89
+ );
90
+ const h = x.exports;
91
+ const S = {
92
+ name: "NcRichContenteditable",
93
+ directives: {
94
+ tooltip: y.VTooltip
95
+ },
96
+ mixins: [p.richEditor],
97
+ props: {
98
+ value: {
99
+ type: String,
100
+ default: "",
101
+ required: !0
102
+ },
103
+ placeholder: {
104
+ type: String,
105
+ default: l.t("Write a message …")
106
+ },
107
+ autoComplete: {
108
+ type: Function,
109
+ default: () => []
110
+ },
111
+ menuContainer: {
112
+ type: Element,
113
+ default: () => document.body
114
+ },
115
+ /**
116
+ * Make the contenteditable looks like a textarea or not.
117
+ * Default looks like a single-line input.
118
+ * This also handle the default enter/shift+enter behaviour.
119
+ * if multiline, enter = newline; otherwise enter = submit
120
+ * shift+enter always add a new line. ctrl+enter always submits
121
+ */
122
+ multiline: {
123
+ type: Boolean,
124
+ default: !1
125
+ },
126
+ /**
127
+ * Is the content editable ?
128
+ */
129
+ contenteditable: {
130
+ type: Boolean,
131
+ default: !0
132
+ },
133
+ /**
134
+ * Disable the editing and show specific disabled design
135
+ */
136
+ disabled: {
137
+ type: Boolean,
138
+ default: !1
139
+ },
140
+ /**
141
+ * Max allowed length
142
+ */
143
+ maxlength: {
144
+ type: Number,
145
+ default: null
146
+ },
147
+ /**
148
+ * Enable or disable emoji autocompletion
149
+ */
150
+ emojiAutocomplete: {
151
+ type: Boolean,
152
+ default: !0
153
+ },
154
+ /**
155
+ * Enable or disable link autocompletion
156
+ */
157
+ linkAutocomplete: {
158
+ type: Boolean,
159
+ default: !0
160
+ }
161
+ },
162
+ emits: [
163
+ "submit",
164
+ "paste",
165
+ "update:value"
166
+ ],
167
+ data() {
168
+ return {
169
+ textSmiles: [],
170
+ tribute: null,
171
+ autocompleteOptions: {
172
+ // Allow spaces in the middle of mentions
173
+ allowSpaces: !0,
174
+ fillAttr: "id",
175
+ // Search against id and title (display name)
176
+ lookup: (t) => `${t.id} ${t.title}`,
177
+ // Where to inject the menu popup
178
+ menuContainer: this.menuContainer,
179
+ // Popup mention autocompletion templates
180
+ menuItemTemplate: (t) => this.renderComponentHtml(t.original, h),
181
+ // Hide if no results
182
+ noMatchTemplate: () => '<span class="hidden"></span>',
183
+ // Inner display of mentions
184
+ selectTemplate: (t) => {
185
+ var e;
186
+ return this.genSelectTemplate((e = t == null ? void 0 : t.original) == null ? void 0 : e.id);
187
+ },
188
+ // Autocompletion results
189
+ values: this.debouncedAutoComplete
190
+ },
191
+ emojiOptions: {
192
+ trigger: ":",
193
+ // Don't use the tribute search function at all
194
+ // We pass search results as values (see below)
195
+ lookup: (t, e) => e,
196
+ // Where to inject the menu popup
197
+ menuContainer: this.menuContainer,
198
+ // Popup mention autocompletion templates
199
+ menuItemTemplate: (t) => this.textSmiles.includes(t.original) ? t.original : `<span class="tribute-container-emoji__item__emoji">${t.original.native}</span> :${t.original.short_name}`,
200
+ // Hide if no results
201
+ noMatchTemplate: () => l.t("No emoji found"),
202
+ // Display raw emoji along with its name
203
+ selectTemplate: (t) => this.textSmiles.includes(t.original) ? t.original : (c.emojiAddRecent(t.original), t.original.native),
204
+ // Pass the search results as values
205
+ values: (t, e) => {
206
+ const n = c.emojiSearch(t);
207
+ this.textSmiles.includes(":" + t) && n.unshift(":" + t), e(n);
208
+ },
209
+ // Class added to the menu container
210
+ containerClass: "tribute-container-emoji",
211
+ // Class added to each list item
212
+ itemClass: "tribute-container-emoji__item"
213
+ },
214
+ linkOptions: {
215
+ trigger: "/",
216
+ // Don't use the tribute search function at all
217
+ // We pass search results as values (see below)
218
+ lookup: (t, e) => e,
219
+ // Where to inject the menu popup
220
+ menuContainer: this.menuContainer,
221
+ // Popup mention autocompletion templates
222
+ menuItemTemplate: (t) => `<img class="tribute-container-link__item__icon" src="${t.original.icon_url}"> <span class="tribute-container-link__item__title">${t.original.title}</span>`,
223
+ // Hide if no results
224
+ noMatchTemplate: () => l.t("No link provider found"),
225
+ selectTemplate: this.getLink,
226
+ // Pass the search results as values
227
+ values: (t, e) => e(d.searchProvider(t)),
228
+ // Class added to the menu container
229
+ containerClass: "tribute-container-link",
230
+ // Class added to each list item
231
+ itemClass: "tribute-container-link__item"
232
+ },
233
+ // Represent the raw untrimmed text of the contenteditable
234
+ // serves no other purpose than to check whether the
235
+ // content is empty or not
236
+ localValue: this.value,
237
+ // Is in text composition session in IME
238
+ isComposing: !1
239
+ };
240
+ },
241
+ computed: {
242
+ /**
243
+ * Is the current trimmed value empty?
244
+ *
245
+ * @return {boolean}
246
+ */
247
+ isEmptyValue() {
248
+ return !this.localValue || this.localValue && this.localValue.trim() === "";
249
+ },
250
+ /**
251
+ * Is this Firefox? 🙄
252
+ *
253
+ * @return {boolean}
254
+ */
255
+ isFF() {
256
+ return !!navigator.userAgent.match(/firefox/i);
257
+ },
258
+ /**
259
+ * Is the current value over maxlength?
260
+ *
261
+ * @return {boolean}
262
+ */
263
+ isOverMaxlength() {
264
+ return this.isEmptyValue || !this.maxlength ? !1 : v.default(this.localValue) > this.maxlength;
265
+ },
266
+ /**
267
+ * Tooltip to show if characters count is over limit
268
+ *
269
+ * @return {string}
270
+ */
271
+ tooltipString() {
272
+ return this.isOverMaxlength ? {
273
+ content: l.t("Message limit of {count} characters reached", { count: this.maxlength }),
274
+ shown: !0,
275
+ trigger: "manual"
276
+ } : null;
277
+ },
278
+ /**
279
+ * Edit is only allowed when contenteditableis true and disabled is false
280
+ *
281
+ * @return {boolean}
282
+ */
283
+ canEdit() {
284
+ return this.contenteditable && !this.disabled;
285
+ },
286
+ /**
287
+ * Proxied native event handlers without custom event handlers
288
+ *
289
+ * @return {Record<string, Function>}
290
+ */
291
+ listeners() {
292
+ const t = { ...this.$listeners };
293
+ return delete t.paste, t;
294
+ }
295
+ },
296
+ watch: {
297
+ /**
298
+ * If the parent value change, we compare the plain text rendering
299
+ * If it's different, we render everything and update the main content
300
+ */
301
+ value() {
302
+ const t = this.$refs.contenteditable.innerHTML;
303
+ this.value.trim() !== this.parseContent(t).trim() && this.updateContent(this.value);
304
+ }
305
+ },
306
+ mounted() {
307
+ const t = ["d", "D", "p", "P", "s", "S", "x", "X", ")", "(", "|", "/"];
308
+ this.textSmiles = [], t.forEach((e) => {
309
+ this.textSmiles.push(":" + e), this.textSmiles.push(":-" + e);
310
+ }), this.autocompleteTribute = new a.default(this.autocompleteOptions), this.autocompleteTribute.attach(this.$el), this.emojiAutocomplete && (this.emojiTribute = new a.default(this.emojiOptions), this.emojiTribute.attach(this.$el)), this.linkAutocomplete && (this.linkTribute = new a.default(this.linkOptions), this.linkTribute.attach(this.$el)), this.updateContent(this.value), this.$refs.contenteditable.contentEditable = this.canEdit;
311
+ },
312
+ beforeDestroy() {
313
+ this.autocompleteTribute && this.autocompleteTribute.detach(this.$el), this.emojiTribute && this.emojiTribute.detach(this.$el), this.linkTribute && this.linkTribute.detach(this.$el);
314
+ },
315
+ methods: {
316
+ /**
317
+ * Focus the richContenteditable
318
+ *
319
+ * @public
320
+ */
321
+ focus() {
322
+ this.$refs.contenteditable.focus();
323
+ },
324
+ getLink(t) {
325
+ return d.getLinkWithPicker(t.original.id).then((e) => {
326
+ const n = document.getElementById("tmp-link-result-node"), i = document.createTextNode(e);
327
+ n.replaceWith(i), this.setCursorAfter(i), this.updateValue(this.$refs.contenteditable.innerHTML);
328
+ }).catch((e) => {
329
+ console.debug("Smart picker promise rejected:", e);
330
+ const n = document.getElementById("tmp-link-result-node");
331
+ this.setCursorAfter(n), n.remove();
332
+ }), '<span id="tmp-link-result-node"></span>';
333
+ },
334
+ setCursorAfter(t) {
335
+ const e = document.createRange();
336
+ e.setEndAfter(t), e.collapse();
337
+ const n = window.getSelection();
338
+ n.removeAllRanges(), n.addRange(e);
339
+ },
340
+ /**
341
+ * Re-emit the input event to the parent
342
+ *
343
+ * @param {Event} event the input event
344
+ */
345
+ onInput(t) {
346
+ this.updateValue(t.target.innerHTML);
347
+ },
348
+ /**
349
+ * When pasting, sanitize the content, extract text
350
+ * and render it again
351
+ *
352
+ * @param {Event} event the paste event
353
+ * @fires Event paste the original paste event
354
+ */
355
+ onPaste(t) {
356
+ if (!this.canEdit)
357
+ return;
358
+ t.preventDefault();
359
+ const e = t.clipboardData;
360
+ if (this.$emit("paste", t), e.files.length !== 0 || !Object.values(e.items).find((o) => o == null ? void 0 : o.type.startsWith("text")))
361
+ return;
362
+ const n = e.getData("text"), i = window.getSelection();
363
+ if (!i.rangeCount) {
364
+ this.updateValue(n);
365
+ return;
366
+ }
367
+ const r = i.getRangeAt(0);
368
+ i.deleteFromDocument(), r.insertNode(document.createTextNode(n));
369
+ const s = document.createRange();
370
+ s.setStart(t.target, r.endOffset), s.collapse(!0), i.removeAllRanges(), i.addRange(s), this.updateValue(this.$refs.contenteditable.innerHTML);
371
+ },
372
+ /**
373
+ * Update the value text from the provided html
374
+ *
375
+ * @param {string} htmlOrText the html content (or raw text with @mentions)
376
+ */
377
+ updateValue(t) {
378
+ const e = this.parseContent(t);
379
+ this.localValue = e, this.$emit("update:value", e);
380
+ },
381
+ /**
382
+ * Update content and local value
383
+ *
384
+ * @param {string} value the message value
385
+ */
386
+ updateContent(t) {
387
+ const e = this.renderContent(t);
388
+ this.$refs.contenteditable.innerHTML = e, this.localValue = t;
389
+ },
390
+ /**
391
+ * Because FF have a decade old bug preventing contenteditable=false
392
+ * to properly be deleted on backspace, we have to hack 👀
393
+ * https://stackoverflow.com/a/59383394/3885878
394
+ * https://stackoverflow.com/a/30574622
395
+ *
396
+ * @param {Event} event the delete keydown event
397
+ */
398
+ onDelete(t) {
399
+ if (!this.isFF || !window.getSelection || !this.canEdit)
400
+ return;
401
+ const e = window.getSelection(), n = t.target;
402
+ if (!e.isCollapsed || !e.rangeCount)
403
+ return;
404
+ const i = e.getRangeAt(e.rangeCount - 1);
405
+ if (i.commonAncestorContainer.nodeType === 3 && i.startOffset > 0)
406
+ return;
407
+ const r = document.createRange();
408
+ if (e.anchorNode !== n)
409
+ r.selectNodeContents(n), r.setEndBefore(e.anchorNode);
410
+ else if (e.anchorOffset > 0)
411
+ r.setEnd(n, e.anchorOffset);
412
+ else
413
+ return;
414
+ r.setStart(n, r.endOffset - 1);
415
+ const s = r.cloneContents().lastChild;
416
+ s && s.contentEditable === "false" && (r.deleteContents(), t.preventDefault());
417
+ },
418
+ /**
419
+ * Enter key pressed. Submits if not multiline
420
+ *
421
+ * @param {Event} event the keydown event
422
+ */
423
+ onEnter(t) {
424
+ this.multiline || this.isOverMaxlength || this.autocompleteTribute.isActive || this.emojiTribute.isActive || this.linkTribute.isActive || this.isComposing || (t.preventDefault(), t.stopPropagation(), this.$emit("submit", t));
425
+ },
426
+ /**
427
+ * Ctrl + Enter key pressed is used to submit
428
+ *
429
+ * @param {Event} event the keydown event
430
+ */
431
+ onCtrlEnter(t) {
432
+ this.isOverMaxlength || this.$emit("submit", t);
433
+ },
434
+ /**
435
+ * Debounce the autocomplete function
436
+ */
437
+ debouncedAutoComplete: C.default(async function(t, e) {
438
+ this.autoComplete(t, e);
439
+ }, 100),
440
+ onKeyUp(t) {
441
+ t.stopImmediatePropagation();
442
+ }
443
+ }
444
+ };
445
+ var A = function() {
446
+ var e = this, n = e._self._c;
447
+ return n("div", e._g({ directives: [{ name: "tooltip", rawName: "v-tooltip", value: e.tooltipString, expression: "tooltipString" }], ref: "contenteditable", staticClass: "rich-contenteditable__input", class: {
448
+ "rich-contenteditable__input--empty": e.isEmptyValue,
449
+ "rich-contenteditable__input--multiline": e.multiline,
450
+ "rich-contenteditable__input--overflow": e.isOverMaxlength,
451
+ "rich-contenteditable__input--disabled": e.disabled
452
+ }, attrs: { contenteditable: e.canEdit, placeholder: e.placeholder, "aria-placeholder": e.placeholder, "aria-multiline": "true", role: "textbox" }, on: { input: e.onInput, compositionstart: function(i) {
453
+ e.isComposing = !0;
454
+ }, compositionend: function(i) {
455
+ e.isComposing = !1;
456
+ }, keydown: [function(i) {
457
+ return !i.type.indexOf("key") && e._k(i.keyCode, "delete", [8, 46], i.key, ["Backspace", "Delete", "Del"]) ? null : e.onDelete.apply(null, arguments);
458
+ }, function(i) {
459
+ return !i.type.indexOf("key") && e._k(i.keyCode, "enter", 13, i.key, "Enter") || i.ctrlKey || i.shiftKey || i.altKey || i.metaKey ? null : e.onEnter.apply(null, arguments);
460
+ }, function(i) {
461
+ return !i.type.indexOf("key") && e._k(i.keyCode, "enter", 13, i.key, "Enter") || !i.ctrlKey || i.shiftKey || i.altKey || i.metaKey ? null : (i.stopPropagation(), i.preventDefault(), e.onCtrlEnter.apply(null, arguments));
462
+ }], paste: e.onPaste, "!keyup": function(i) {
463
+ return i.stopPropagation(), i.preventDefault(), e.onKeyUp.apply(null, arguments);
464
+ } } }, e.listeners));
465
+ }, E = [], R = /* @__PURE__ */ m.normalizeComponent(
466
+ S,
467
+ A,
468
+ E,
469
+ !1,
470
+ null,
471
+ "b7f5e546",
472
+ null,
473
+ null
474
+ );
475
+ const j = R.exports;
476
+ exports.NcMentionBubble = p.NcMentionBubble;
477
+ exports.NcAutoCompleteResult = h;
478
+ exports.default = j;
@@ -1 +1 @@
1
- {"version":3,"file":"NcRichContenteditable.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":""}
1
+ {"version":3,"file":"NcRichContenteditable.cjs","sources":["../../src/components/NcRichContenteditable/NcAutoCompleteResult.vue","../../src/components/NcRichContenteditable/NcRichContenteditable.vue"],"sourcesContent":["<!--\n - @copyright Copyright (c) 2020 John Molakvoæ <skjnldsv@protonmail.com>\n -\n - @author John Molakvoæ <skjnldsv@protonmail.com>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n-->\n\n<template>\n\t<div class=\"autocomplete-result\">\n\t\t<!-- Avatar or icon -->\n\t\t<div :class=\"[icon, `autocomplete-result__icon--${avatarUrl ? 'with-avatar' : ''}`]\"\n\t\t\t:style=\"avatarUrl ? { backgroundImage: `url(${avatarUrl})` } : null \"\n\t\t\tclass=\"autocomplete-result__icon\">\n\t\t\t<div v-if=\"haveStatus\"\n\t\t\t\t:class=\"[`autocomplete-result__status--${status && status.icon ? 'icon' : status.status}`]\"\n\t\t\t\tclass=\"autocomplete-result__status\">\n\t\t\t\t{{ status && status.icon || '' }}\n\t\t\t</div>\n\t\t</div>\n\n\t\t<!-- Title and subline -->\n\t\t<span class=\"autocomplete-result__content\">\n\t\t\t<span class=\"autocomplete-result__title\" :title=\"title\">\n\t\t\t\t{{ title }}\n\t\t\t</span>\n\t\t\t<span v-if=\"subline\" class=\"autocomplete-result__subline\">\n\t\t\t\t{{ subline }}\n\t\t\t</span>\n\t\t</span>\n\t</div>\n</template>\n\n<script>\nimport { generateUrl } from '@nextcloud/router'\n\nexport default {\n\tname: 'NcAutoCompleteResult',\n\n\tprops: {\n\t\ttitle: {\n\t\t\ttype: String,\n\t\t\trequired: true,\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\thaveStatus() {\n\t\t\treturn this.status?.icon || (this.status?.status && this.status?.status !== 'offline')\n\t\t},\n\t},\n\n\tmethods: {\n\t\tgetAvatarUrl(user, size) {\n\t\t\treturn generateUrl('/avatar/{user}/{size}', {\n\t\t\t\tuser,\n\t\t\t\tsize,\n\t\t\t})\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n$autocomplete-padding: 10px;\n\n.autocomplete-result {\n\tdisplay: flex;\n\theight: $clickable-area;\n\tpadding: $autocomplete-padding;\n\n\t.highlight & {\n\t\tcolor: var(--color-primary-element-light-text);\n\t\tbackground: var(--color-primary-element-light);\n\t\t&, * {\n\t\t\tcursor: pointer;\n\t\t}\n\t}\n\n\t&__icon {\n\t\tposition: relative;\n\t\tflex: 0 0 $clickable-area;\n\t\twidth: $clickable-area;\n\t\tmin-width: $clickable-area;\n\t\theight: $clickable-area;\n\t\tborder-radius: $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: $clickable-area - 2 * $autocomplete-padding;\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\tposition: absolute;\n\t\tright: -4px;\n\t\tbottom: -4px;\n\t\tbox-sizing: border-box;\n\t\twidth: 18px;\n\t\theight: 18px;\n\t\tborder: 2px solid var(--color-main-background);\n\t\tborder-radius: 50%;\n\t\tbackground-color: var(--color-main-background);\n\t\tfont-size: var(--default-font-size);\n\t\tline-height: 15px;\n\t\tbackground-repeat: no-repeat;\n\t\tbackground-size: 16px;\n\t\tbackground-position: center;\n\n\t\t&--online{\n\t\t\tbackground-image: url('../../assets/status-icons/user-status-online.svg');\n\t\t}\n\t\t&--dnd{\n\t\t\tbackground-image: url('../../assets/status-icons/user-status-dnd.svg');\n\t\t\tbackground-color: #ffffff;\n\t\t}\n\t\t&--away{\n\t\t\tbackground-image: url('../../assets/status-icons/user-status-away.svg');\n\t\t}\n\t\t&--icon {\n\t\t\tborder: none;\n\t\t\tbackground-color: transparent;\n\t\t}\n\t}\n\n\t&__content {\n\t\tdisplay: flex;\n\t\tflex: 1 1 100%;\n\t\tflex-direction: column;\n\t\tjustify-content: center;\n\t\tmin-width: 0;\n\t\tpadding-left: $autocomplete-padding;\n\t}\n\n\t&__title,\n\t&__subline {\n\t\twhite-space: nowrap;\n\t\toverflow: hidden;\n\t\ttext-overflow: ellipsis;\n\t}\n\n\t&__subline {\n\t\tcolor: var(--color-text-maxcontrast);\n\t}\n}\n\n</style>\n","<!--\n - @copyright Copyright (c) 2020 John Molakvoæ <skjnldsv@protonmail.com>\n -\n - @author John Molakvoæ <skjnldsv@protonmail.com>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n-->\n\n<docs>\n\n### General description\n\nThis component displays contenteditable div with automated `@` [at] autocompletion and `:` [colon] emoji autocompletion.\n\n### Examples\n\nTry mentioning user @Test01 or inserting emoji :smile\n\n```vue\n<template>\n\t<div>\n\t\t<NcRichContenteditable\n\t\t\t:value.sync=\"message\"\n\t\t\t:auto-complete=\"autoComplete\"\n\t\t\t:maxlength=\"100\"\n\t\t\t:user-data=\"userData\"\n\t\t\t@submit=\"onSubmit\" />\n\t\t<br>\n\n\t\t<NcRichContenteditable\n\t\t\t:value.sync=\"message\"\n\t\t\t:auto-complete=\"autoComplete\"\n\t\t\t:maxlength=\"400\"\n\t\t\t:multiline=\"true\"\n\t\t\t:user-data=\"userData\"\n\t\t\t@submit=\"onSubmit\" />\n\n\t\t<h5>Output - raw</h5>\n\t\t{{ JSON.stringify(message) }}\n\n\t\t<h5>Output - preformatted</h5>\n\t\t<p class=\"pre-line\">{{ message }}</p>\n\n\t\t<h5>Output - in NcRichText with markdown support</h5>\n\t\t<NcRichText :text=\"text\" :arguments=\"userMentions\" autolink use-markdown />\n\t</div>\n</template>\n<script>\nexport default {\n\tdata() {\n\t\treturn {\n\t\t\tmessage: '**Lorem ipsum** dolor sit amet.',\n\t\t\t// You need to provide this for the inline mention to understand what to display or not.\n\t\t\t// Key should be a string with leading '@', like @Test02 or @\"Test Offline\"\n\t\t\tuserData: {\n\t\t\t\tTest01: {\n\t\t\t\t\ticon: 'icon-user',\n\t\t\t\t\tid: 'Test01',\n\t\t\t\t\ttitle: '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\ttitle: '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\ttitle: '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\ttitle: '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\ttitle: 'Test DND',\n\t\t\t\t\tsource: 'users',\n\t\t\t\t\tstatus: {\n\t\t\t\t\t\tclearAt: null,\n\t\t\t\t\t\ticon: null,\n\t\t\t\t\t\tmessage: 'Out sick',\n\t\t\t\t\t\tstatus: 'dnd',\n\t\t\t\t\t},\n\t\t\t\t\tsubline: 'Out sick',\n\t\t\t\t},\n\t\t\t},\n\t\t\t// To display user bubbles in NcRichText, special format of data should be provided:\n\t\t\t// Key should be in curly brackets without '@' and ' ' symbols, like {user-2}\n\t\t\tuserMentions: {\n\t\t\t\t'user-1': {\n\t\t\t\t\tcomponent: 'NcUserBubble',\n\t\t\t\t\tprops: {\n\t\t\t\t\t\tdisplayName: 'Test01',\n\t\t\t\t\t\tuser: 'Test01',\n\t\t\t\t\t\tprimary: true,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t'user-2': {\n\t\t\t\t\tcomponent: 'NcUserBubble',\n\t\t\t\t\tprops: {\n\t\t\t\t\t\tdisplayName: 'Test02',\n\t\t\t\t\t\tuser: 'Test02',\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t'user-3': {\n\t\t\t\t\tcomponent: 'NcUserBubble',\n\t\t\t\t\tprops: {\n\t\t\t\t\t\tdisplayName: 'Test 03',\n\t\t\t\t\t\tuser: 'Test@User',\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t'user-4': {\n\t\t\t\t\tcomponent: 'NcUserBubble',\n\t\t\t\t\tprops: {\n\t\t\t\t\t\tdisplayName: 'Test Offline',\n\t\t\t\t\t\tuser: 'Test Offline',\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t'user-5': {\n\t\t\t\t\tcomponent: 'NcUserBubble',\n\t\t\t\t\tprops: {\n\t\t\t\t\t\tdisplayName: 'Test DND',\n\t\t\t\t\t\tuser: 'Test DND',\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t}\n\t\t}\n\t},\n\tcomputed: {\n\t\ttext() {\n\t\t\treturn this.message\n\t\t\t\t\t.replace('@Test01', '{user-1}')\n\t\t\t\t\t.replace('@Test02', '{user-2}')\n\t\t\t\t\t.replace('@Test@User', '{user-3}')\n\t\t\t\t\t.replace('@\"Test Offline\"', '{user-4}')\n\t\t\t\t\t.replace('@\"Test DND\"', '{user-5}')\n\t\t},\n\t},\n\tmethods: {\n\t\t/**\n\t\t* Do your own query to the autocompletion api.\n\t\t* The returned data bellow is a fake data example.\n\t\t* The callback expects the same format returned by the core/autocomplete/get ocs api endpoint!\n\t\t* @see userData example above\n\t\t*\n\t\t* @param {string} search the query\n\t\t* @param {Function} callback the callback to process the results with\n\t\t*/\n\t\tautoComplete(search, callback) {\n\t\t\tcallback(Object.values(this.userData))\n\t\t},\n\t\tonSubmit() {\n\t\t\talert(this.message)\n\t\t}\n\t}\n}\n</script>\n<style lang=\"scss\" scoped>\n\th5 {\n\t\tfont-weight: bold;\n\t\tmargin: 40px 0 20px 0;\n\t}\n\n\t.pre-line {\n\t\twhite-space: pre-line;\n\t}\n</style>\n```\n\n</docs>\n\n<template>\n\t<div ref=\"contenteditable\"\n\t\tv-tooltip=\"tooltipString\"\n\t\t:class=\"{\n\t\t\t'rich-contenteditable__input--empty': isEmptyValue,\n\t\t\t'rich-contenteditable__input--multiline': multiline,\n\t\t\t'rich-contenteditable__input--overflow': isOverMaxlength,\n\t\t\t'rich-contenteditable__input--disabled': disabled,\n\t\t}\"\n\t\t:contenteditable=\"canEdit\"\n\t\t:placeholder=\"placeholder\"\n\t\t:aria-placeholder=\"placeholder\"\n\t\taria-multiline=\"true\"\n\t\tclass=\"rich-contenteditable__input\"\n\t\trole=\"textbox\"\n\t\tv-on=\"listeners\"\n\t\t@input=\"onInput\"\n\t\t@compositionstart=\"isComposing = true\"\n\t\t@compositionend=\"isComposing = false\"\n\t\t@keydown.delete=\"onDelete\"\n\t\t@keydown.enter.exact=\"onEnter\"\n\t\t@keydown.ctrl.enter.exact.stop.prevent=\"onCtrlEnter\"\n\t\t@paste=\"onPaste\"\n\t\t@keyup.stop.prevent.capture=\"onKeyUp\" />\n</template>\n\n<script>\nimport { t } from '../../l10n.js'\nimport NcAutoCompleteResult from './NcAutoCompleteResult.vue'\nimport richEditor from '../../mixins/richEditor/index.js'\nimport Tooltip from '../../directives/Tooltip/index.js'\nimport { emojiSearch, emojiAddRecent } from '../../functions/emoji/index.js'\nimport { searchProvider, getLinkWithPicker } from '../NcRichText/index.js'\n\nimport Tribute from 'tributejs/dist/tribute.esm.js'\nimport debounce from 'debounce'\nimport stringLength from 'string-length'\n\nexport default {\n\tname: 'NcRichContenteditable',\n\n\tdirectives: {\n\t\ttooltip: Tooltip,\n\t},\n\n\tmixins: [richEditor],\n\n\tprops: {\n\t\tvalue: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t\trequired: true,\n\t\t},\n\n\t\tplaceholder: {\n\t\t\ttype: String,\n\t\t\tdefault: t('Write a message …'),\n\t\t},\n\n\t\tautoComplete: {\n\t\t\ttype: Function,\n\t\t\tdefault: () => [],\n\t\t},\n\n\t\tmenuContainer: {\n\t\t\ttype: Element,\n\t\t\tdefault: () => document.body,\n\t\t},\n\n\t\t/**\n\t\t * Make the contenteditable looks like a textarea or not.\n\t\t * Default looks like a single-line input.\n\t\t * This also handle the default enter/shift+enter behaviour.\n\t\t * if multiline, enter = newline; otherwise enter = submit\n\t\t * shift+enter always add a new line. ctrl+enter always submits\n\t\t */\n\t\tmultiline: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\n\t\t/**\n\t\t * Is the content editable ?\n\t\t */\n\t\tcontenteditable: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true,\n\t\t},\n\n\t\t/**\n\t\t * Disable the editing and show specific disabled design\n\t\t */\n\t\tdisabled: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\n\t\t/**\n\t\t * Max allowed length\n\t\t */\n\t\tmaxlength: {\n\t\t\ttype: Number,\n\t\t\tdefault: null,\n\t\t},\n\n\t\t/**\n\t\t * Enable or disable emoji autocompletion\n\t\t */\n\t\temojiAutocomplete: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true,\n\t\t},\n\n\t\t/**\n\t\t * Enable or disable link autocompletion\n\t\t */\n\t\tlinkAutocomplete: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true,\n\t\t},\n\t},\n\n\temits: [\n\t\t'submit',\n\t\t'paste',\n\t\t'update:value',\n\t],\n\n\tdata() {\n\t\treturn {\n\t\t\ttextSmiles: [],\n\t\t\ttribute: null,\n\t\t\tautocompleteOptions: {\n\t\t\t\t// Allow spaces in the middle of mentions\n\t\t\t\tallowSpaces: true,\n\t\t\t\tfillAttr: 'id',\n\t\t\t\t// Search against id and title (display name)\n\t\t\t\tlookup: result => `${result.id} ${result.title}`,\n\t\t\t\t// Where to inject the menu popup\n\t\t\t\tmenuContainer: this.menuContainer,\n\t\t\t\t// Popup mention autocompletion templates\n\t\t\t\tmenuItemTemplate: item => 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},\n\t\t\temojiOptions: {\n\t\t\t\ttrigger: ':',\n\t\t\t\t// Don't use the tribute search function at all\n\t\t\t\t// We pass search results as values (see below)\n\t\t\t\tlookup: (result, query) => query,\n\t\t\t\t// Where to inject the menu popup\n\t\t\t\tmenuContainer: this.menuContainer,\n\t\t\t\t// Popup mention autocompletion templates\n\t\t\t\tmenuItemTemplate: item => {\n\t\t\t\t\tif (this.textSmiles.includes(item.original)) {\n\t\t\t\t\t\t// Display the raw text string for :), :-D, … for non emoji results,\n\t\t\t\t\t\t// instead of trying to show an image and their name.\n\t\t\t\t\t\treturn item.original\n\t\t\t\t\t}\n\n\t\t\t\t\treturn `<span class=\"tribute-container-emoji__item__emoji\">${item.original.native}</span> :${item.original.short_name}`\n\t\t\t\t},\n\t\t\t\t// Hide if no results\n\t\t\t\tnoMatchTemplate: () => t('No emoji found'),\n\t\t\t\t// Display raw emoji along with its name\n\t\t\t\tselectTemplate: (item) => {\n\t\t\t\t\tif (this.textSmiles.includes(item.original)) {\n\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\treturn item.original\n\t\t\t\t\t}\n\n\t\t\t\t\temojiAddRecent(item.original)\n\t\t\t\t\treturn item.original.native\n\t\t\t\t},\n\t\t\t\t// Pass the search results as values\n\t\t\t\tvalues: (text, cb) => {\n\t\t\t\t\tconst emojiResults = emojiSearch(text)\n\t\t\t\t\tif (this.textSmiles.includes(':' + text)) {\n\t\t\t\t\t\t/**\n\t\t\t\t\t\t * Prepend text smiles to the search results so that Tribute\n\t\t\t\t\t\t * is not interfering with normal writing, aka. \"Cocos Island Meme\".\n\t\t\t\t\t\t * E.g. `:)` and `:-)` got replaced by the flag of Cocos Island,\n\t\t\t\t\t\t * when submitting the input with Enter after writing them\n\t\t\t\t\t\t */\n\t\t\t\t\t\temojiResults.unshift(':' + text)\n\t\t\t\t\t}\n\t\t\t\t\tcb(emojiResults)\n\t\t\t\t},\n\t\t\t\t// Class added to the menu container\n\t\t\t\tcontainerClass: 'tribute-container-emoji',\n\t\t\t\t// Class added to each list item\n\t\t\t\titemClass: 'tribute-container-emoji__item',\n\t\t\t},\n\t\t\tlinkOptions: {\n\t\t\t\ttrigger: '/',\n\t\t\t\t// Don't use the tribute search function at all\n\t\t\t\t// We pass search results as values (see below)\n\t\t\t\tlookup: (result, query) => query,\n\t\t\t\t// Where to inject the menu popup\n\t\t\t\tmenuContainer: this.menuContainer,\n\t\t\t\t// Popup mention autocompletion templates\n\t\t\t\tmenuItemTemplate: item => `<img class=\"tribute-container-link__item__icon\" src=\"${item.original.icon_url}\"> <span class=\"tribute-container-link__item__title\">${item.original.title}</span>`,\n\t\t\t\t// Hide if no results\n\t\t\t\tnoMatchTemplate: () => t('No link provider found'),\n\t\t\t\tselectTemplate: this.getLink,\n\t\t\t\t// Pass the search results as values\n\t\t\t\tvalues: (text, cb) => cb(searchProvider(text)),\n\t\t\t\t// Class added to the menu container\n\t\t\t\tcontainerClass: 'tribute-container-link',\n\t\t\t\t// Class added to each list item\n\t\t\t\titemClass: 'tribute-container-link__item',\n\t\t\t},\n\n\t\t\t// Represent the raw untrimmed text of the contenteditable\n\t\t\t// serves no other purpose than to check whether the\n\t\t\t// content is empty or not\n\t\t\tlocalValue: this.value,\n\n\t\t\t// Is in text composition session in IME\n\t\t\tisComposing: false,\n\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\n\t\t\t\t|| (this.localValue && this.localValue.trim() === '')\n\t\t},\n\n\t\t/**\n\t\t * Is this Firefox? 🙄\n\t\t *\n\t\t * @return {boolean}\n\t\t */\n\t\tisFF() {\n\t\t\treturn !!navigator.userAgent.match(/firefox/i)\n\t\t},\n\n\t\t/**\n\t\t * Is the current value over maxlength?\n\t\t *\n\t\t * @return {boolean}\n\t\t */\n\t\tisOverMaxlength() {\n\t\t\tif (this.isEmptyValue || !this.maxlength) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\treturn stringLength(this.localValue) > this.maxlength\n\t\t},\n\n\t\t/**\n\t\t * Tooltip to show if characters count is over limit\n\t\t *\n\t\t * @return {string}\n\t\t */\n\t\ttooltipString() {\n\t\t\tif (!this.isOverMaxlength) {\n\t\t\t\treturn null\n\t\t\t}\n\t\t\treturn {\n\t\t\t\tcontent: t('Message limit of {count} characters reached', { count: this.maxlength }),\n\t\t\t\tshown: true,\n\t\t\t\ttrigger: 'manual',\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Edit is only allowed when contenteditableis true and disabled is false\n\t\t *\n\t\t * @return {boolean}\n\t\t */\n\t\tcanEdit() {\n\t\t\treturn this.contenteditable && !this.disabled\n\t\t},\n\n\t\t/**\n\t\t * Proxied native event handlers without custom event handlers\n\t\t *\n\t\t * @return {Record<string, Function>}\n\t\t */\n\t\tlisteners() {\n\t\t\t/**\n\t\t\t * All component's event handlers are set as native event handlers with by v-on directive.\n\t\t\t * The component also raised custom events manually by $emit for corresponding events.\n\t\t\t * As a result, it triggers handlers twice.\n\t\t\t * The v-on=\"listeners\" directive should only set proxied native events handler without custom events\n\t\t\t */\n\t\t\tconst listeners = { ...this.$listeners }\n\t\t\tdelete listeners.paste\n\t\t\treturn listeners\n\t\t},\n\t},\n\n\twatch: {\n\t\t/**\n\t\t * If the parent value change, we compare the plain text rendering\n\t\t * If it's different, we render everything and update the main content\n\t\t */\n\t\tvalue() {\n\t\t\tconst html = this.$refs.contenteditable.innerHTML\n\t\t\t// Compare trimmed versions to be safe\n\t\t\tif (this.value.trim() !== this.parseContent(html).trim()) {\n\t\t\t\tthis.updateContent(this.value)\n\t\t\t}\n\t\t},\n\t},\n\n\tmounted() {\n\t\t/**\n\t\t * Populate the list of text smiles we want to offer via Tribute.\n\t\t * We add the colon `:)` and colon-dash `:-)` version for each of them.\n\t\t */\n\t\tconst smilesCharacters = ['d', 'D', 'p', 'P', 's', 'S', 'x', 'X', ')', '(', '|', '/']\n\t\tthis.textSmiles = []\n\t\tsmilesCharacters.forEach((char) => {\n\t\t\tthis.textSmiles.push(':' + char)\n\t\t\tthis.textSmiles.push(':-' + char)\n\t\t})\n\n\t\tthis.autocompleteTribute = new Tribute(this.autocompleteOptions)\n\t\tthis.autocompleteTribute.attach(this.$el)\n\n\t\tif (this.emojiAutocomplete) {\n\t\t\tthis.emojiTribute = new Tribute(this.emojiOptions)\n\t\t\tthis.emojiTribute.attach(this.$el)\n\t\t}\n\n\t\tif (this.linkAutocomplete) {\n\t\t\tthis.linkTribute = new Tribute(this.linkOptions)\n\t\t\tthis.linkTribute.attach(this.$el)\n\t\t}\n\n\t\t// Update default value\n\t\tthis.updateContent(this.value)\n\n\t\t// Removes the contenteditable attribute at first load if the prop is\n\t\t// set to false.\n\t\tthis.$refs.contenteditable.contentEditable = this.canEdit\n\t},\n\tbeforeDestroy() {\n\t\tif (this.autocompleteTribute) {\n\t\t\tthis.autocompleteTribute.detach(this.$el)\n\t\t}\n\t\tif (this.emojiTribute) {\n\t\t\tthis.emojiTribute.detach(this.$el)\n\t\t}\n\t\tif (this.linkTribute) {\n\t\t\tthis.linkTribute.detach(this.$el)\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\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(link => {\n\t\t\t\t\t// replace dummy temp element by a text node which contains the link\n\t\t\t\t\tconst tmpElem = document.getElementById('tmp-link-result-node')\n\t\t\t\t\tconst newElem = document.createTextNode(link)\n\t\t\t\t\ttmpElem.replaceWith(newElem)\n\t\t\t\t\tthis.setCursorAfter(newElem)\n\t\t\t\t\tthis.updateValue(this.$refs.contenteditable.innerHTML)\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-link-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-link-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\t/**\n\t\t * Re-emit the input event to the parent\n\t\t *\n\t\t * @param {Event} event the input event\n\t\t */\n\t\tonInput(event) {\n\t\t\tthis.updateValue(event.target.innerHTML)\n\t\t},\n\n\t\t/**\n\t\t * When pasting, sanitize the content, extract text\n\t\t * and render it again\n\t\t *\n\t\t * @param {Event} event the paste event\n\t\t * @fires Event paste the original paste event\n\t\t */\n\t\tonPaste(event) {\n\t\t\t// Either disabled or edit deactivated\n\t\t\tif (!this.canEdit) {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tevent.preventDefault()\n\t\t\tconst clipboardData = event.clipboardData\n\n\t\t\t/** The original paste event */\n\t\t\tthis.$emit('paste', event)\n\n\t\t\t// If we have a file or if we don't have any text, ignore\n\t\t\tif (clipboardData.files.length !== 0\n\t\t\t\t|| !Object.values(clipboardData.items).find(item => item?.type.startsWith('text'))) {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tconst text = clipboardData.getData('text')\n\t\t\tconst selection = window.getSelection()\n\n\t\t\t// If no selection, replace the whole data\n\t\t\tif (!selection.rangeCount) {\n\t\t\t\tthis.updateValue(text)\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\t// Generate text and insert\n\t\t\tconst range = selection.getRangeAt(0)\n\t\t\tselection.deleteFromDocument()\n\t\t\trange.insertNode(document.createTextNode(text))\n\n\t\t\t// Put cursor at the end of the selection\n\t\t\tconst newRange = document.createRange()\n\t\t\tnewRange.setStart(event.target, range.endOffset)\n\t\t\tnewRange.collapse(true)\n\t\t\tselection.removeAllRanges()\n\t\t\tselection.addRange(newRange)\n\n\t\t\t// Propagate data\n\t\t\tthis.updateValue(this.$refs.contenteditable.innerHTML)\n\t\t},\n\n\t\t/**\n\t\t * Update the value text from the provided html\n\t\t *\n\t\t * @param {string} htmlOrText the html content (or raw text with @mentions)\n\t\t */\n\t\tupdateValue(htmlOrText) {\n\t\t\tconst text = this.parseContent(htmlOrText)\n\t\t\tthis.localValue = text\n\t\t\tthis.$emit('update:value', text)\n\t\t},\n\n\t\t/**\n\t\t * Update content and local value\n\t\t *\n\t\t * @param {string} value the message value\n\t\t */\n\t\tupdateContent(value) {\n\t\t\tconst renderedContent = this.renderContent(value)\n\t\t\tthis.$refs.contenteditable.innerHTML = renderedContent\n\t\t\tthis.localValue = value\n\t\t},\n\n\t\t/**\n\t\t * Because FF have a decade old bug preventing contenteditable=false\n\t\t * to properly be deleted on backspace, we have to hack 👀\n\t\t * https://stackoverflow.com/a/59383394/3885878\n\t\t * https://stackoverflow.com/a/30574622\n\t\t *\n\t\t * @param {Event} event the delete keydown event\n\t\t */\n\t\tonDelete(event) {\n\t\t\tif (!this.isFF || !window.getSelection) {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\t// Either disabled or edit deactivated\n\t\t\tif (!this.canEdit) {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\t// fix backspace bug in FF\n\t\t\t// https://bugzilla.mozilla.org/show_bug.cgi?id=685445\n\t\t\t// https://bugzilla.mozilla.org/show_bug.cgi?id=1665167\n\t\t\tconst selection = window.getSelection()\n\t\t\tconst node = event.target\n\t\t\tif (!selection.isCollapsed || !selection.rangeCount) {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tconst curRange = selection.getRangeAt(selection.rangeCount - 1)\n\t\t\tif (curRange.commonAncestorContainer.nodeType === 3 && curRange.startOffset > 0) {\n\t\t\t\t// we are in child selection. The characters of the text node is being deleted\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tconst range = document.createRange()\n\t\t\tif (selection.anchorNode !== node) {\n\t\t\t\t// selection is in character mode. expand it to the whole editable field\n\t\t\t\trange.selectNodeContents(node)\n\t\t\t\trange.setEndBefore(selection.anchorNode)\n\t\t\t} else if (selection.anchorOffset > 0) {\n\t\t\t\trange.setEnd(node, selection.anchorOffset)\n\t\t\t} else {\n\t\t\t\t// reached the beginning of editable field\n\t\t\t\treturn\n\t\t\t}\n\t\t\trange.setStart(node, range.endOffset - 1)\n\n\t\t\tconst previousNode = range.cloneContents().lastChild\n\t\t\tif (previousNode && previousNode.contentEditable === 'false') {\n\t\t\t\t// this is some rich content, e.g. smile. We should help the user to delete it\n\t\t\t\trange.deleteContents()\n\t\t\t\tevent.preventDefault()\n\t\t\t}\n\t\t},\n\t\t/**\n\t\t * Enter key pressed. Submits if not multiline\n\t\t *\n\t\t * @param {Event} event the keydown event\n\t\t */\n\t\tonEnter(event) {\n\t\t\t// Prevent submitting if multiline\n\t\t\t// or length is over maxlength\n\t\t\t// or autocompletion menu is opened\n\t\t\t// or in a text composition session with IME\n\t\t\tif (this.multiline\n\t\t\t\t|| this.isOverMaxlength\n\t\t\t\t|| this.autocompleteTribute.isActive || this.emojiTribute.isActive || this.linkTribute.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\t/**\n\t\t * Debounce the autocomplete function\n\t\t */\n\t\tdebouncedAutoComplete: debounce(async function(search, callback) {\n\t\t\tthis.autoComplete(search, callback)\n\t\t}, 100),\n\n\t\tonKeyUp(event) {\n\t\t\t// prevent tribute from opening on keyup\n\t\t\tevent.stopImmediatePropagation()\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n// Standalone styling, independent from server\n.rich-contenteditable__input {\n\toverflow-y: auto;\n\twidth: auto;\n\tmargin: 0;\n\tpadding: 8px;\n\tcursor: text;\n\twhite-space: pre-wrap;\n\tword-break: break-word;\n\tcolor: var(--color-main-text);\n\tborder: 2px solid var(--color-border-dark);\n\tborder-radius: var(--border-radius-large);\n\toutline: none;\n\tbackground-color: var(--color-main-background);\n\tfont-family: var(--font-face);\n\tfont-size: inherit;\n\tmin-height: $clickable-area;\n\tmax-height: $clickable-area * 5.5;\n\n\t// Cannot use :empty because of firefox bug https://bugzilla.mozilla.org/show_bug.cgi?id=1513303\n\t&--empty:before {\n\t\tcontent: attr(placeholder);\n\t\tcolor: var(--color-text-maxcontrast);\n\t\tposition: absolute;\n\t}\n\n\t&[contenteditable='false']:not(&--disabled) {\n\t\tcursor: default;\n\t\tbackground-color: transparent;\n\t\tcolor: var(--color-main-text);\n\t\tborder-color: transparent;\n\t\topacity: 1;\n\t\tborder-radius: 0;\n\t}\n\n\t&--multiline {\n\t\tmin-height: $clickable-area * 3;\n\t\t// No max for mutiline\n\t\tmax-height: none;\n\t}\n\n\t&--disabled {\n\t\topacity: $opacity_disabled;\n\t\tcolor: var(--color-text-maxcontrast);\n\t\tborder: 2px solid var(--color-background-darker);\n\t\tborder-radius: var(--border-radius);\n\t\tbackground-color: var(--color-background-dark);\n\t}\n}\n\n</style>\n\n<style lang=\"scss\">\n.tribute-container, .tribute-container-emoji, .tribute-container-link {\n\tz-index: 9000;\n\toverflow: auto;\n\tmin-width: 250px;\n\tmax-width: 300px;\n\t// Show maximum 4 entries and a half to show scroll\n\t// 44px + 10px padding\n\tmax-height: ($clickable-area + 20px) * 4.5;\n\t// Space it out a bit from the text\n\tmargin: 5px 0;\n\tcolor: var(--color-main-text);\n\tborder-radius: var(--border-radius);\n\tbackground: var(--color-main-background);\n\tbox-shadow: 0 1px 5px var(--color-box-shadow);\n}\n\n.tribute-container-emoji, .tribute-container-link {\n\tmin-width: 200px;\n\tmax-width: 200px;\n\tpadding: 4px;\n\t// Show maximum 5 entries and a half to show scroll\n\tmax-height: 35px * 5 + math.div(35px, 2) !important;\n\n\t&__item {\n\t\tborder-radius: 8px;\n\t\tpadding: 4px 8px;\n\t\tmargin-bottom: 4px;\n\t\topacity: 0.8;\n\t\tcursor: pointer;\n\n\t\t// Take care of long names\n\t\twhite-space: nowrap;\n\t\toverflow: hidden;\n\t\ttext-overflow: ellipsis;\n\n\t\t&:last-child {\n\t\t\tmargin-bottom: 0;\n\t\t}\n\n\t\t&__emoji {\n\t\t\tpadding-right: 8px;\n\t\t}\n\t}\n\n\t.highlight {\n\t\topacity: 1;\n\t\tcolor: var(--color-primary-element-light-text);\n\t\tbackground: var(--color-primary-element-light);\n\t\t&, * {\n\t\t\tcursor: pointer;\n\t\t}\n\t}\n}\n\n.tribute-container-link {\n\tmin-width: 200px;\n\tmax-width: 300px;\n\t&__item {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\t&__title {\n\t\t\twhite-space: nowrap;\n\t\t\toverflow: hidden;\n\t\t\ttext-overflow: ellipsis;\n\t\t}\n\t\t&__icon {\n\t\t\tmargin: auto 0;\n\t\t\twidth: 20px;\n\t\t\theight: 20px;\n\t\t\tobject-fit: contain;\n\t\t\tpadding-right: 8px;\n\t\t\tfilter: var(--background-invert-if-dark);\n\t\t}\n\t}\n}\n\n</style>\n"],"names":["_sfc_main$1","_a","_b","_c","user","size","router","_sfc_main","floatingVue","Mixins_richEditor","l10n","result","item","NcAutoCompleteResult","query","Functions_emoji","text","cb","emojiResults","referencePickerModal","stringLength__default","listeners","html","smilesCharacters","char","Tribute__default","link","tmpElem","newElem","error","element","range","selection","event","clipboardData","newRange","htmlOrText","value","renderedContent","node","curRange","previousNode","debounce__default","search","callback"],"mappings":"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"}