@nextcloud/vue 8.29.0 → 8.29.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (415) hide show
  1. package/CHANGELOG.md +28 -0
  2. package/README.md +4 -3
  3. package/dist/Components/NcActionButton.cjs +1 -1
  4. package/dist/Components/NcActionButton.mjs +1 -1
  5. package/dist/Components/NcActionButtonGroup.cjs +1 -1
  6. package/dist/Components/NcActionButtonGroup.mjs +1 -1
  7. package/dist/Components/NcActionInput.cjs +1 -1
  8. package/dist/Components/NcActionInput.mjs +1 -1
  9. package/dist/Components/NcActionTextEditable.cjs +1 -1
  10. package/dist/Components/NcActionTextEditable.mjs +1 -1
  11. package/dist/Components/NcActions.cjs +1 -1
  12. package/dist/Components/NcActions.mjs +1 -1
  13. package/dist/Components/NcAppContent.cjs +1 -1
  14. package/dist/Components/NcAppContent.mjs +1 -1
  15. package/dist/Components/NcAppNavigation.cjs +1 -1
  16. package/dist/Components/NcAppNavigation.mjs +1 -1
  17. package/dist/Components/NcAppNavigationCaption.cjs +1 -1
  18. package/dist/Components/NcAppNavigationCaption.mjs +1 -1
  19. package/dist/Components/NcAppNavigationItem.cjs +1 -1
  20. package/dist/Components/NcAppNavigationItem.mjs +1 -1
  21. package/dist/Components/NcAppNavigationNewItem.cjs +1 -1
  22. package/dist/Components/NcAppNavigationNewItem.mjs +1 -1
  23. package/dist/Components/NcAppNavigationSearch.cjs +1 -1
  24. package/dist/Components/NcAppNavigationSearch.mjs +1 -1
  25. package/dist/Components/NcAppNavigationSettings.cjs +1 -1
  26. package/dist/Components/NcAppNavigationSettings.mjs +1 -1
  27. package/dist/Components/NcAppNavigationToggle.cjs +1 -1
  28. package/dist/Components/NcAppNavigationToggle.mjs +1 -1
  29. package/dist/Components/NcAppSettingsDialog.cjs +1 -1
  30. package/dist/Components/NcAppSettingsDialog.mjs +1 -1
  31. package/dist/Components/NcAppSidebar.cjs +1 -1
  32. package/dist/Components/NcAppSidebar.mjs +1 -1
  33. package/dist/Components/NcAvatar.cjs +1 -1
  34. package/dist/Components/NcAvatar.mjs +1 -1
  35. package/dist/Components/NcBreadcrumb.cjs +1 -1
  36. package/dist/Components/NcBreadcrumb.mjs +1 -1
  37. package/dist/Components/NcBreadcrumbs.cjs +1 -1
  38. package/dist/Components/NcBreadcrumbs.mjs +1 -1
  39. package/dist/Components/NcButton.cjs +3 -3
  40. package/dist/Components/NcButton.cjs.map +1 -1
  41. package/dist/Components/NcButton.mjs +3 -3
  42. package/dist/Components/NcButton.mjs.map +1 -1
  43. package/dist/Components/NcCheckboxRadioSwitch.cjs +1 -1
  44. package/dist/Components/NcCheckboxRadioSwitch.mjs +1 -1
  45. package/dist/Components/NcChip.cjs +4 -4
  46. package/dist/Components/NcChip.mjs +4 -4
  47. package/dist/Components/NcCollectionList.cjs +1 -1
  48. package/dist/Components/NcCollectionList.mjs +1 -1
  49. package/dist/Components/NcColorPicker.cjs +1 -1
  50. package/dist/Components/NcColorPicker.mjs +1 -1
  51. package/dist/Components/NcContent.cjs +1 -1
  52. package/dist/Components/NcContent.mjs +1 -1
  53. package/dist/Components/NcDashboardWidget.cjs +1 -1
  54. package/dist/Components/NcDashboardWidget.mjs +1 -1
  55. package/dist/Components/NcDashboardWidgetItem.cjs +1 -1
  56. package/dist/Components/NcDashboardWidgetItem.mjs +1 -1
  57. package/dist/Components/NcDateTimePicker.cjs +6 -6
  58. package/dist/Components/NcDateTimePicker.cjs.map +1 -1
  59. package/dist/Components/NcDateTimePicker.mjs +6 -6
  60. package/dist/Components/NcDateTimePicker.mjs.map +1 -1
  61. package/dist/Components/NcDateTimePickerNative.cjs +1 -1
  62. package/dist/Components/NcDateTimePickerNative.mjs +1 -1
  63. package/dist/Components/NcDialog.cjs +1 -1
  64. package/dist/Components/NcDialog.mjs +1 -1
  65. package/dist/Components/NcDialogButton.cjs +1 -1
  66. package/dist/Components/NcDialogButton.mjs +1 -1
  67. package/dist/Components/NcEmojiPicker.cjs +1 -1
  68. package/dist/Components/NcEmojiPicker.mjs +1 -1
  69. package/dist/Components/NcHeaderButton.cjs +2 -2
  70. package/dist/Components/NcHeaderButton.cjs.map +1 -1
  71. package/dist/Components/NcHeaderButton.mjs +2 -2
  72. package/dist/Components/NcHeaderButton.mjs.map +1 -1
  73. package/dist/Components/NcHeaderMenu.cjs +1 -1
  74. package/dist/Components/NcHeaderMenu.mjs +1 -1
  75. package/dist/Components/NcInputField.cjs +1 -1
  76. package/dist/Components/NcInputField.mjs +1 -1
  77. package/dist/Components/NcListItem.cjs +1 -1
  78. package/dist/Components/NcListItem.mjs +1 -1
  79. package/dist/Components/NcListItemIcon.cjs +1 -1
  80. package/dist/Components/NcListItemIcon.mjs +1 -1
  81. package/dist/Components/NcModal.cjs +4 -4
  82. package/dist/Components/NcModal.mjs +4 -4
  83. package/dist/Components/NcNoteCard.cjs +13 -18
  84. package/dist/Components/NcNoteCard.cjs.map +1 -1
  85. package/dist/Components/NcNoteCard.mjs +13 -18
  86. package/dist/Components/NcNoteCard.mjs.map +1 -1
  87. package/dist/Components/NcPasswordField.cjs +1 -1
  88. package/dist/Components/NcPasswordField.mjs +1 -1
  89. package/dist/Components/NcPopover.cjs +1 -1
  90. package/dist/Components/NcPopover.mjs +1 -1
  91. package/dist/Components/NcProgressBar.cjs +1 -1
  92. package/dist/Components/NcProgressBar.mjs +1 -1
  93. package/dist/Components/NcRelatedResourcesPanel.cjs +1 -1
  94. package/dist/Components/NcRelatedResourcesPanel.mjs +1 -1
  95. package/dist/Components/NcRichContenteditable.cjs +1 -1
  96. package/dist/Components/NcRichContenteditable.mjs +1 -1
  97. package/dist/Components/NcRichText.cjs +2 -2
  98. package/dist/Components/NcRichText.mjs +3 -3
  99. package/dist/Components/NcSavingIndicatorIcon.cjs +1 -1
  100. package/dist/Components/NcSavingIndicatorIcon.mjs +1 -1
  101. package/dist/Components/NcSelect.cjs +1 -1
  102. package/dist/Components/NcSelect.mjs +1 -1
  103. package/dist/Components/NcSelectTags.cjs +1 -1
  104. package/dist/Components/NcSelectTags.mjs +1 -1
  105. package/dist/Components/NcSelectUsers.cjs +1 -1
  106. package/dist/Components/NcSelectUsers.mjs +1 -1
  107. package/dist/Components/NcSettingsInputText.cjs +1 -1
  108. package/dist/Components/NcSettingsInputText.mjs +1 -1
  109. package/dist/Components/NcSettingsSection.cjs +1 -1
  110. package/dist/Components/NcSettingsSection.mjs +1 -1
  111. package/dist/Components/NcSettingsSelectGroup.cjs +1 -1
  112. package/dist/Components/NcSettingsSelectGroup.mjs +1 -1
  113. package/dist/Components/NcTextArea.cjs +1 -1
  114. package/dist/Components/NcTextArea.mjs +1 -1
  115. package/dist/Components/NcTextField.cjs +1 -1
  116. package/dist/Components/NcTextField.mjs +1 -1
  117. package/dist/Components/NcTimezonePicker.cjs +1 -1
  118. package/dist/Components/NcTimezonePicker.mjs +1 -1
  119. package/dist/Components/NcUserBubble.cjs +1 -1
  120. package/dist/Components/NcUserBubble.mjs +1 -1
  121. package/dist/Components/NcUserStatusIcon.cjs +1 -1
  122. package/dist/Components/NcUserStatusIcon.mjs +1 -1
  123. package/dist/Composables/useFormatDateTime.cjs +1 -1
  124. package/dist/Composables/useFormatDateTime.mjs +1 -1
  125. package/dist/Functions/reference.cjs +1 -1
  126. package/dist/Functions/reference.mjs +1 -1
  127. package/dist/Functions/usernameToColor.cjs +1 -1
  128. package/dist/Functions/usernameToColor.mjs +1 -1
  129. package/dist/assets/{NcActionButtonGroup-BND4GQdv.css → NcActionButtonGroup-oAqMyrzr.css} +8 -8
  130. package/dist/assets/{NcActionInput-Q0DfTHVL.css → NcActionInput-D79204Jr.css} +1 -1
  131. package/dist/assets/{NcActionTextEditable-BflqGcjc.css → NcActionTextEditable-i1KSVe0J.css} +1 -1
  132. package/dist/assets/{NcActions-C3F-rqxz.css → NcActions-CXnDIMae.css} +13 -13
  133. package/dist/assets/{NcAppNavigationItem-Ca2ekElv.css → NcAppNavigationItem-DKcGNjYx.css} +43 -39
  134. package/dist/assets/{NcAppNavigationNewItem-PE-w8y-g.css → NcAppNavigationNewItem-CS2gLROV.css} +6 -0
  135. package/dist/assets/{NcAppNavigationSearch-CFtTLRbc.css → NcAppNavigationSearch-CD7kv7L_.css} +6 -6
  136. package/dist/assets/{NcAppNavigationSettings-vd47rlNY.css → NcAppNavigationSettings-_Qi3rUlw.css} +11 -16
  137. package/dist/assets/{NcButton-Cjx-v-Qz.css → NcButton-C_LOxojs.css} +54 -57
  138. package/dist/assets/{NcCheckboxRadioSwitch-B-axx3m7.css → NcCheckboxRadioSwitch-DqEP1SPR.css} +36 -32
  139. package/dist/assets/{NcColorPicker-C-3wb1sk.css → NcColorPicker-DBcVuSwg.css} +28 -28
  140. package/dist/assets/{NcDashboardWidget-BSTvIgiJ.css → NcDashboardWidget-CrhZaGWD.css} +12 -12
  141. package/dist/assets/{NcDateTimePicker-Bx7XHFo7.css → NcDateTimePicker-FNnAz7ls.css} +19 -19
  142. package/dist/assets/NcEmojiPicker-BRSm8OUy.css +546 -0
  143. package/dist/assets/{NcHeaderButton-ByNXqS7x.css → NcHeaderButton-BRhv2o2J.css} +9 -9
  144. package/dist/assets/{NcHeaderMenu-Dp_vJKTP.css → NcHeaderMenu-Cjb3kKi1.css} +13 -13
  145. package/dist/assets/{NcInputField-Cdd0B1OR.css → NcInputField-DAiNwtp_.css} +77 -46
  146. package/dist/assets/{NcListItem-CCu1OBiG.css → NcListItem-KrH47Efg.css} +44 -44
  147. package/dist/assets/{NcNoteCard-C6xb7vi0.css → NcNoteCard-ChweF_5Q.css} +26 -14
  148. package/dist/assets/{NcPopover-Dx28oc68.css → NcPopover--XoXIhLx.css} +13 -13
  149. package/dist/assets/{NcProgressBar--z-WqmX4.css → NcProgressBar-DTCznR-m.css} +14 -14
  150. package/dist/assets/{NcRichContenteditable-CGRMNrie.css → NcRichContenteditable-DZLSoy84.css} +12 -12
  151. package/dist/assets/{NcSettingsSelectGroup-BEjOwCJQ.css → NcSettingsSelectGroup-tjJNoh16.css} +3 -3
  152. package/dist/assets/NcTextArea-vxeIyeSg.css +136 -0
  153. package/dist/assets/{NcUserStatusIcon-ChHaXPex.css → NcUserStatusIcon-Dc-aUzBe.css} +8 -4
  154. package/dist/assets/{referencePickerModal-Ba6soz9w.css → referencePickerModal-BgSz7IyB.css} +9 -26
  155. package/dist/chunks/{GenColors-BnYS3bvv.cjs → GenColors-BjsCKF7S.cjs} +2 -2
  156. package/dist/chunks/{GenColors-BnYS3bvv.cjs.map → GenColors-BjsCKF7S.cjs.map} +1 -1
  157. package/dist/chunks/{GenColors-DNN63dHB.mjs → GenColors-BrpkL3hT.mjs} +2 -2
  158. package/dist/chunks/{GenColors-DNN63dHB.mjs.map → GenColors-BrpkL3hT.mjs.map} +1 -1
  159. package/dist/chunks/{NcActionButton-2qh96K_i.cjs → NcActionButton-D_9FsTpM.cjs} +2 -2
  160. package/dist/chunks/{NcActionButton-2qh96K_i.cjs.map → NcActionButton-D_9FsTpM.cjs.map} +1 -1
  161. package/dist/chunks/{NcActionButton-CHrE7amZ.mjs → NcActionButton-rjMoymt-.mjs} +2 -2
  162. package/dist/chunks/{NcActionButton-CHrE7amZ.mjs.map → NcActionButton-rjMoymt-.mjs.map} +1 -1
  163. package/dist/chunks/{NcActionButtonGroup-B8Bj-Qb3.cjs → NcActionButtonGroup-Cr4OSmyb.cjs} +4 -4
  164. package/dist/chunks/{NcActionButtonGroup-B8Bj-Qb3.cjs.map → NcActionButtonGroup-Cr4OSmyb.cjs.map} +1 -1
  165. package/dist/chunks/{NcActionButtonGroup-_R4fp-bK.mjs → NcActionButtonGroup-hhh3GBSS.mjs} +4 -4
  166. package/dist/chunks/{NcActionButtonGroup-_R4fp-bK.mjs.map → NcActionButtonGroup-hhh3GBSS.mjs.map} +1 -1
  167. package/dist/chunks/{NcActionInput-Bv4_2oYO.cjs → NcActionInput-CA9bOHxb.cjs} +5 -5
  168. package/dist/chunks/{NcActionInput-Bv4_2oYO.cjs.map → NcActionInput-CA9bOHxb.cjs.map} +1 -1
  169. package/dist/chunks/{NcActionInput-BXOssTbe.mjs → NcActionInput-CQ_WEPqQ.mjs} +5 -5
  170. package/dist/chunks/{NcActionInput-BXOssTbe.mjs.map → NcActionInput-CQ_WEPqQ.mjs.map} +1 -1
  171. package/dist/chunks/{NcActionTextEditable-DqcHZqN5.cjs → NcActionTextEditable-B4g2kszt.cjs} +3 -3
  172. package/dist/chunks/{NcActionTextEditable-DqcHZqN5.cjs.map → NcActionTextEditable-B4g2kszt.cjs.map} +1 -1
  173. package/dist/chunks/{NcActionTextEditable-xrMV-kE8.mjs → NcActionTextEditable-xWQGdOVl.mjs} +3 -3
  174. package/dist/chunks/{NcActionTextEditable-xrMV-kE8.mjs.map → NcActionTextEditable-xWQGdOVl.mjs.map} +1 -1
  175. package/dist/chunks/{NcActions-DV3CjPHr.cjs → NcActions-B76VN_Gz.cjs} +5 -5
  176. package/dist/chunks/{NcActions-DV3CjPHr.cjs.map → NcActions-B76VN_Gz.cjs.map} +1 -1
  177. package/dist/chunks/{NcActions-BANvgaMn.mjs → NcActions-BKZA1xVL.mjs} +5 -5
  178. package/dist/chunks/{NcActions-BANvgaMn.mjs.map → NcActions-BKZA1xVL.mjs.map} +1 -1
  179. package/dist/chunks/{NcAppContent-twZJBrQv.mjs → NcAppContent-BS7BiMG0.mjs} +2 -2
  180. package/dist/chunks/{NcAppContent-twZJBrQv.mjs.map → NcAppContent-BS7BiMG0.mjs.map} +1 -1
  181. package/dist/chunks/{NcAppContent-BqR67yTH.cjs → NcAppContent-POt1Lj3W.cjs} +2 -2
  182. package/dist/chunks/{NcAppContent-BqR67yTH.cjs.map → NcAppContent-POt1Lj3W.cjs.map} +1 -1
  183. package/dist/chunks/{NcAppNavigation-COge8_bn.cjs → NcAppNavigation-BKxSUpcQ.cjs} +2 -2
  184. package/dist/chunks/{NcAppNavigation-COge8_bn.cjs.map → NcAppNavigation-BKxSUpcQ.cjs.map} +1 -1
  185. package/dist/chunks/{NcAppNavigation-VSGTDckG.mjs → NcAppNavigation-BvEa92PC.mjs} +2 -2
  186. package/dist/chunks/{NcAppNavigation-VSGTDckG.mjs.map → NcAppNavigation-BvEa92PC.mjs.map} +1 -1
  187. package/dist/chunks/{NcAppNavigationCaption-ofy-JSGu.cjs → NcAppNavigationCaption-CjOJyYIY.cjs} +2 -2
  188. package/dist/chunks/{NcAppNavigationCaption-ofy-JSGu.cjs.map → NcAppNavigationCaption-CjOJyYIY.cjs.map} +1 -1
  189. package/dist/chunks/{NcAppNavigationCaption-oxc7chGv.mjs → NcAppNavigationCaption-hDsiQMLr.mjs} +2 -2
  190. package/dist/chunks/{NcAppNavigationCaption-oxc7chGv.mjs.map → NcAppNavigationCaption-hDsiQMLr.mjs.map} +1 -1
  191. package/dist/chunks/{NcAppNavigationItem-B-uv2tWu.cjs → NcAppNavigationItem-Cu3S2chM.cjs} +18 -11
  192. package/dist/chunks/NcAppNavigationItem-Cu3S2chM.cjs.map +1 -0
  193. package/dist/chunks/{NcAppNavigationItem-CbtPNTg_.mjs → NcAppNavigationItem-NIMhmJHh.mjs} +18 -11
  194. package/dist/chunks/NcAppNavigationItem-NIMhmJHh.mjs.map +1 -0
  195. package/dist/chunks/{NcAppNavigationNewItem-DzpW6cIK.cjs → NcAppNavigationNewItem-CTAoGkDy.cjs} +3 -3
  196. package/dist/chunks/{NcAppNavigationNewItem-DzpW6cIK.cjs.map → NcAppNavigationNewItem-CTAoGkDy.cjs.map} +1 -1
  197. package/dist/chunks/{NcAppNavigationNewItem-Cz8VbLjN.mjs → NcAppNavigationNewItem-D4fJeBl0.mjs} +3 -3
  198. package/dist/chunks/{NcAppNavigationNewItem-Cz8VbLjN.mjs.map → NcAppNavigationNewItem-D4fJeBl0.mjs.map} +1 -1
  199. package/dist/chunks/{NcAppNavigationSearch-BvCjwhyQ.mjs → NcAppNavigationSearch-B9OkdsuE.mjs} +7 -7
  200. package/dist/chunks/{NcAppNavigationSearch-BvCjwhyQ.mjs.map → NcAppNavigationSearch-B9OkdsuE.mjs.map} +1 -1
  201. package/dist/chunks/{NcAppNavigationSearch-s1mEjjZM.cjs → NcAppNavigationSearch-CaBrnpf9.cjs} +7 -7
  202. package/dist/chunks/{NcAppNavigationSearch-s1mEjjZM.cjs.map → NcAppNavigationSearch-CaBrnpf9.cjs.map} +1 -1
  203. package/dist/chunks/NcAppNavigationSettings-BV34ogWP.mjs +86 -0
  204. package/dist/chunks/NcAppNavigationSettings-BV34ogWP.mjs.map +1 -0
  205. package/dist/chunks/NcAppNavigationSettings-C8YaW_Kj.cjs +85 -0
  206. package/dist/chunks/NcAppNavigationSettings-C8YaW_Kj.cjs.map +1 -0
  207. package/dist/chunks/{NcAppNavigationToggle-CbZem2gZ.cjs → NcAppNavigationToggle-DGppWo0q.cjs} +2 -2
  208. package/dist/chunks/{NcAppNavigationToggle-CbZem2gZ.cjs.map → NcAppNavigationToggle-DGppWo0q.cjs.map} +1 -1
  209. package/dist/chunks/{NcAppNavigationToggle-CINjg2Mo.mjs → NcAppNavigationToggle-VxL1CfJY.mjs} +2 -2
  210. package/dist/chunks/{NcAppNavigationToggle-CINjg2Mo.mjs.map → NcAppNavigationToggle-VxL1CfJY.mjs.map} +1 -1
  211. package/dist/chunks/{NcAppSettingsDialog-C1m0QYAK.cjs → NcAppSettingsDialog-BDo3la0P.cjs} +3 -3
  212. package/dist/chunks/{NcAppSettingsDialog-C1m0QYAK.cjs.map → NcAppSettingsDialog-BDo3la0P.cjs.map} +1 -1
  213. package/dist/chunks/{NcAppSettingsDialog-Duyfikm-.mjs → NcAppSettingsDialog-BwsIc_QT.mjs} +3 -3
  214. package/dist/chunks/{NcAppSettingsDialog-Duyfikm-.mjs.map → NcAppSettingsDialog-BwsIc_QT.mjs.map} +1 -1
  215. package/dist/chunks/{NcAppSidebar-ape8OSJ3.mjs → NcAppSidebar-BJgPYOcZ.mjs} +4 -4
  216. package/dist/chunks/{NcAppSidebar-ape8OSJ3.mjs.map → NcAppSidebar-BJgPYOcZ.mjs.map} +1 -1
  217. package/dist/chunks/{NcAppSidebar-C-7OzN3N.cjs → NcAppSidebar-Dbvy4M4h.cjs} +4 -4
  218. package/dist/chunks/{NcAppSidebar-C-7OzN3N.cjs.map → NcAppSidebar-Dbvy4M4h.cjs.map} +1 -1
  219. package/dist/chunks/{NcAvatar-BA6pHpbT.mjs → NcAvatar-CgF-MFtU.mjs} +5 -5
  220. package/dist/chunks/{NcAvatar-BA6pHpbT.mjs.map → NcAvatar-CgF-MFtU.mjs.map} +1 -1
  221. package/dist/chunks/{NcAvatar-CdBMEKsO.cjs → NcAvatar-DThzrxm-.cjs} +5 -5
  222. package/dist/chunks/{NcAvatar-CdBMEKsO.cjs.map → NcAvatar-DThzrxm-.cjs.map} +1 -1
  223. package/dist/chunks/{NcBreadcrumb-BiW4k0c_.cjs → NcBreadcrumb-86ycrDeH.cjs} +2 -2
  224. package/dist/chunks/{NcBreadcrumb-BiW4k0c_.cjs.map → NcBreadcrumb-86ycrDeH.cjs.map} +1 -1
  225. package/dist/chunks/{NcBreadcrumb-BjsavDr1.mjs → NcBreadcrumb-DJpYjXCe.mjs} +2 -2
  226. package/dist/chunks/{NcBreadcrumb-BjsavDr1.mjs.map → NcBreadcrumb-DJpYjXCe.mjs.map} +1 -1
  227. package/dist/chunks/{NcBreadcrumbs-Bc2obqjl.mjs → NcBreadcrumbs-B722pBOd.mjs} +4 -4
  228. package/dist/chunks/{NcBreadcrumbs-Bc2obqjl.mjs.map → NcBreadcrumbs-B722pBOd.mjs.map} +1 -1
  229. package/dist/chunks/{NcBreadcrumbs-Dwnn6dKU.cjs → NcBreadcrumbs-CBMTGNxS.cjs} +4 -4
  230. package/dist/chunks/{NcBreadcrumbs-Dwnn6dKU.cjs.map → NcBreadcrumbs-CBMTGNxS.cjs.map} +1 -1
  231. package/dist/chunks/{NcCheckboxRadioSwitch-qmvgRzxb.mjs → NcCheckboxRadioSwitch-ip_mRd2T.mjs} +4 -4
  232. package/dist/chunks/{NcCheckboxRadioSwitch-qmvgRzxb.mjs.map → NcCheckboxRadioSwitch-ip_mRd2T.mjs.map} +1 -1
  233. package/dist/chunks/{NcCheckboxRadioSwitch-ewtyZP3Z.cjs → NcCheckboxRadioSwitch-kdoDmLpF.cjs} +4 -4
  234. package/dist/chunks/{NcCheckboxRadioSwitch-ewtyZP3Z.cjs.map → NcCheckboxRadioSwitch-kdoDmLpF.cjs.map} +1 -1
  235. package/dist/chunks/{NcCollectionList-C5nw4svt.cjs → NcCollectionList-C-FWulfV.cjs} +6 -6
  236. package/dist/chunks/{NcCollectionList-C5nw4svt.cjs.map → NcCollectionList-C-FWulfV.cjs.map} +1 -1
  237. package/dist/chunks/{NcCollectionList-CXAtmdEZ.mjs → NcCollectionList-Khg3X3Zq.mjs} +6 -6
  238. package/dist/chunks/{NcCollectionList-CXAtmdEZ.mjs.map → NcCollectionList-Khg3X3Zq.mjs.map} +1 -1
  239. package/dist/chunks/{NcColorPicker-DkoxNQJS.cjs → NcColorPicker-C3lzQVxY.cjs} +9 -8
  240. package/dist/chunks/{NcColorPicker-DkoxNQJS.cjs.map → NcColorPicker-C3lzQVxY.cjs.map} +1 -1
  241. package/dist/chunks/{NcColorPicker-CU2sbJKt.mjs → NcColorPicker-MXMbRaLk.mjs} +9 -8
  242. package/dist/chunks/{NcColorPicker-CU2sbJKt.mjs.map → NcColorPicker-MXMbRaLk.mjs.map} +1 -1
  243. package/dist/chunks/{NcContent-BkmB4vmh.mjs → NcContent-BbmqoSY7.mjs} +2 -2
  244. package/dist/chunks/{NcContent-BkmB4vmh.mjs.map → NcContent-BbmqoSY7.mjs.map} +1 -1
  245. package/dist/chunks/{NcContent-h4LUA1hj.cjs → NcContent-DH7uH5Gv.cjs} +2 -2
  246. package/dist/chunks/{NcContent-h4LUA1hj.cjs.map → NcContent-DH7uH5Gv.cjs.map} +1 -1
  247. package/dist/chunks/{NcDashboardWidget-B_Egc1Og.mjs → NcDashboardWidget-D0cFVt4i.mjs} +7 -7
  248. package/dist/chunks/{NcDashboardWidget-B_Egc1Og.mjs.map → NcDashboardWidget-D0cFVt4i.mjs.map} +1 -1
  249. package/dist/chunks/{NcDashboardWidget-EsWoGPKV.cjs → NcDashboardWidget-DD_fZTj6.cjs} +7 -7
  250. package/dist/chunks/{NcDashboardWidget-EsWoGPKV.cjs.map → NcDashboardWidget-DD_fZTj6.cjs.map} +1 -1
  251. package/dist/chunks/{NcDashboardWidgetItem-qibYWTLk.cjs → NcDashboardWidgetItem-BiH7ivQn.cjs} +4 -4
  252. package/dist/chunks/{NcDashboardWidgetItem-qibYWTLk.cjs.map → NcDashboardWidgetItem-BiH7ivQn.cjs.map} +1 -1
  253. package/dist/chunks/{NcDashboardWidgetItem-3oirT6j6.mjs → NcDashboardWidgetItem-D33MR-DH.mjs} +4 -4
  254. package/dist/chunks/{NcDashboardWidgetItem-3oirT6j6.mjs.map → NcDashboardWidgetItem-D33MR-DH.mjs.map} +1 -1
  255. package/dist/chunks/{NcDialog-C_IHQciE.mjs → NcDialog-C1b3UtA7.mjs} +2 -2
  256. package/dist/chunks/{NcDialog-C_IHQciE.mjs.map → NcDialog-C1b3UtA7.mjs.map} +1 -1
  257. package/dist/chunks/{NcDialog-Cqdo11BM.cjs → NcDialog-ps0F3IQM.cjs} +2 -2
  258. package/dist/chunks/{NcDialog-Cqdo11BM.cjs.map → NcDialog-ps0F3IQM.cjs.map} +1 -1
  259. package/dist/chunks/{NcDialogButton-_biPxXPQ.cjs → NcDialogButton-CEdM0Qnr.cjs} +3 -3
  260. package/dist/chunks/NcDialogButton-CEdM0Qnr.cjs.map +1 -0
  261. package/dist/chunks/{NcDialogButton-Cc3iWZH1.mjs → NcDialogButton-Di9tU3e_.mjs} +3 -3
  262. package/dist/chunks/NcDialogButton-Di9tU3e_.mjs.map +1 -0
  263. package/dist/chunks/{NcEmojiPicker-Dynz_fRD.cjs → NcEmojiPicker-C2-Q-RoT.cjs} +10 -10
  264. package/dist/chunks/NcEmojiPicker-C2-Q-RoT.cjs.map +1 -0
  265. package/dist/chunks/{NcEmojiPicker-C3rhl7Xh.mjs → NcEmojiPicker-DJHvkF--.mjs} +10 -10
  266. package/dist/chunks/NcEmojiPicker-DJHvkF--.mjs.map +1 -0
  267. package/dist/chunks/{NcHeaderMenu-B12nEFGc.cjs → NcHeaderMenu-BWFubuox.cjs} +14 -5
  268. package/dist/chunks/NcHeaderMenu-BWFubuox.cjs.map +1 -0
  269. package/dist/chunks/{NcHeaderMenu--AvoyMeD.mjs → NcHeaderMenu-Dq_Avv2T.mjs} +14 -5
  270. package/dist/chunks/NcHeaderMenu-Dq_Avv2T.mjs.map +1 -0
  271. package/dist/chunks/{NcInputConfirmCancel-P1H1ymiB.mjs → NcInputConfirmCancel-DA740BJ-.mjs} +2 -2
  272. package/dist/chunks/{NcInputConfirmCancel-P1H1ymiB.mjs.map → NcInputConfirmCancel-DA740BJ-.mjs.map} +1 -1
  273. package/dist/chunks/{NcInputConfirmCancel-BpPXGiKs.cjs → NcInputConfirmCancel-Dz7-CkOl.cjs} +2 -2
  274. package/dist/chunks/{NcInputConfirmCancel-BpPXGiKs.cjs.map → NcInputConfirmCancel-Dz7-CkOl.cjs.map} +1 -1
  275. package/dist/chunks/{NcInputField-a50IXAHm.mjs → NcInputField-BNSfmQqu.mjs} +9 -5
  276. package/dist/chunks/NcInputField-BNSfmQqu.mjs.map +1 -0
  277. package/dist/chunks/{NcInputField-CD_Jxnho.cjs → NcInputField-cT3u4gMS.cjs} +9 -5
  278. package/dist/chunks/NcInputField-cT3u4gMS.cjs.map +1 -0
  279. package/dist/chunks/{NcListItem-DIupNkcV.mjs → NcListItem-CnxZixD_.mjs} +4 -4
  280. package/dist/chunks/NcListItem-CnxZixD_.mjs.map +1 -0
  281. package/dist/chunks/{NcListItem-BJLfBv4G.cjs → NcListItem-DV4HPJWQ.cjs} +4 -4
  282. package/dist/chunks/NcListItem-DV4HPJWQ.cjs.map +1 -0
  283. package/dist/chunks/{NcListItemIcon-BGehR6IP.cjs → NcListItemIcon-BUthbF_v.cjs} +2 -2
  284. package/dist/chunks/{NcListItemIcon-BGehR6IP.cjs.map → NcListItemIcon-BUthbF_v.cjs.map} +1 -1
  285. package/dist/chunks/{NcListItemIcon-C2PVlvB7.mjs → NcListItemIcon-CTfYEjBB.mjs} +2 -2
  286. package/dist/chunks/{NcListItemIcon-C2PVlvB7.mjs.map → NcListItemIcon-CTfYEjBB.mjs.map} +1 -1
  287. package/dist/chunks/{NcPasswordField-CNUa4WOq.mjs → NcPasswordField-DSdrAkZy.mjs} +3 -3
  288. package/dist/chunks/{NcPasswordField-CNUa4WOq.mjs.map → NcPasswordField-DSdrAkZy.mjs.map} +1 -1
  289. package/dist/chunks/{NcPasswordField-Bci0EOiA.cjs → NcPasswordField-DcFBNVHn.cjs} +3 -3
  290. package/dist/chunks/{NcPasswordField-Bci0EOiA.cjs.map → NcPasswordField-DcFBNVHn.cjs.map} +1 -1
  291. package/dist/chunks/{NcPopover-4-YxCZOD.mjs → NcPopover-CAJVK-MR.mjs} +27 -7
  292. package/dist/chunks/NcPopover-CAJVK-MR.mjs.map +1 -0
  293. package/dist/chunks/{NcPopover-DH2oMHFe.cjs → NcPopover-QGSKWhSP.cjs} +24 -4
  294. package/dist/chunks/NcPopover-QGSKWhSP.cjs.map +1 -0
  295. package/dist/chunks/{NcProgressBar-DegJ2JjE.mjs → NcProgressBar-CI_nOrPg.mjs} +4 -4
  296. package/dist/chunks/{NcProgressBar-DegJ2JjE.mjs.map → NcProgressBar-CI_nOrPg.mjs.map} +1 -1
  297. package/dist/chunks/{NcProgressBar-Do5Y3u8S.cjs → NcProgressBar-lh4Gtdfr.cjs} +4 -4
  298. package/dist/chunks/{NcProgressBar-Do5Y3u8S.cjs.map → NcProgressBar-lh4Gtdfr.cjs.map} +1 -1
  299. package/dist/chunks/{NcRelatedResourcesPanel-D_4x0nYR.cjs → NcRelatedResourcesPanel-BR_ggojH.cjs} +2 -2
  300. package/dist/chunks/{NcRelatedResourcesPanel-D_4x0nYR.cjs.map → NcRelatedResourcesPanel-BR_ggojH.cjs.map} +1 -1
  301. package/dist/chunks/{NcRelatedResourcesPanel-qQK3J_qe.mjs → NcRelatedResourcesPanel-DyvwxDjI.mjs} +2 -2
  302. package/dist/chunks/{NcRelatedResourcesPanel-qQK3J_qe.mjs.map → NcRelatedResourcesPanel-DyvwxDjI.mjs.map} +1 -1
  303. package/dist/chunks/{NcRichContenteditable-BLXUzOmi.cjs → NcRichContenteditable-B5-V1mov.cjs} +11 -11
  304. package/dist/chunks/NcRichContenteditable-B5-V1mov.cjs.map +1 -0
  305. package/dist/chunks/{NcRichContenteditable-C5Dfv3nk.mjs → NcRichContenteditable-cpptFUeI.mjs} +11 -11
  306. package/dist/chunks/NcRichContenteditable-cpptFUeI.mjs.map +1 -0
  307. package/dist/chunks/{NcRichText-BE5jQHKt.mjs → NcRichText-CmuVmSzl.mjs} +3 -3
  308. package/dist/chunks/{NcRichText-BE5jQHKt.mjs.map → NcRichText-CmuVmSzl.mjs.map} +1 -1
  309. package/dist/chunks/{NcRichText-Blh7R46K.cjs → NcRichText-DKesJDDM.cjs} +3 -3
  310. package/dist/chunks/{NcRichText-Blh7R46K.cjs.map → NcRichText-DKesJDDM.cjs.map} +1 -1
  311. package/dist/chunks/{NcSavingIndicatorIcon-DmGFZsmS.cjs → NcSavingIndicatorIcon-DFyB2KRK.cjs} +2 -2
  312. package/dist/chunks/{NcSavingIndicatorIcon-DmGFZsmS.cjs.map → NcSavingIndicatorIcon-DFyB2KRK.cjs.map} +1 -1
  313. package/dist/chunks/{NcSavingIndicatorIcon-BPlY5Y9p.mjs → NcSavingIndicatorIcon-U7AIamCl.mjs} +2 -2
  314. package/dist/chunks/{NcSavingIndicatorIcon-BPlY5Y9p.mjs.map → NcSavingIndicatorIcon-U7AIamCl.mjs.map} +1 -1
  315. package/dist/chunks/{NcSelect-B3fxFbfG.mjs → NcSelect-BUOuXJUQ.mjs} +3 -3
  316. package/dist/chunks/{NcSelect-B3fxFbfG.mjs.map → NcSelect-BUOuXJUQ.mjs.map} +1 -1
  317. package/dist/chunks/{NcSelect-R8bPyBFL.cjs → NcSelect-CnLfkqdF.cjs} +3 -3
  318. package/dist/chunks/{NcSelect-R8bPyBFL.cjs.map → NcSelect-CnLfkqdF.cjs.map} +1 -1
  319. package/dist/chunks/{NcSelectTags-CmOvIcGU.cjs → NcSelectTags-D9-2HA1H.cjs} +3 -3
  320. package/dist/chunks/{NcSelectTags-CmOvIcGU.cjs.map → NcSelectTags-D9-2HA1H.cjs.map} +1 -1
  321. package/dist/chunks/{NcSelectTags-BxII3k6P.mjs → NcSelectTags-hP98xYkg.mjs} +3 -3
  322. package/dist/chunks/{NcSelectTags-BxII3k6P.mjs.map → NcSelectTags-hP98xYkg.mjs.map} +1 -1
  323. package/dist/chunks/{NcSelectUsers-BlVsLFrq.mjs → NcSelectUsers-DaHVPRPE.mjs} +4 -4
  324. package/dist/chunks/{NcSelectUsers-BlVsLFrq.mjs.map → NcSelectUsers-DaHVPRPE.mjs.map} +1 -1
  325. package/dist/chunks/{NcSelectUsers-4dbGg26c.cjs → NcSelectUsers-arPrkqH_.cjs} +4 -4
  326. package/dist/chunks/{NcSelectUsers-4dbGg26c.cjs.map → NcSelectUsers-arPrkqH_.cjs.map} +1 -1
  327. package/dist/chunks/{NcSettingsInputText-DYN2i2d2.mjs → NcSettingsInputText-BKoaCiQU.mjs} +2 -2
  328. package/dist/chunks/{NcSettingsInputText-DYN2i2d2.mjs.map → NcSettingsInputText-BKoaCiQU.mjs.map} +1 -1
  329. package/dist/chunks/{NcSettingsInputText-Cf-juMyF.cjs → NcSettingsInputText-D7eoCI2o.cjs} +2 -2
  330. package/dist/chunks/{NcSettingsInputText-Cf-juMyF.cjs.map → NcSettingsInputText-D7eoCI2o.cjs.map} +1 -1
  331. package/dist/chunks/{NcSettingsSection-VrSMms0R.cjs → NcSettingsSection-Bmo90KQR.cjs} +2 -2
  332. package/dist/chunks/{NcSettingsSection-VrSMms0R.cjs.map → NcSettingsSection-Bmo90KQR.cjs.map} +1 -1
  333. package/dist/chunks/{NcSettingsSection-DK0dtGcw.mjs → NcSettingsSection-fe_YIg-L.mjs} +2 -2
  334. package/dist/chunks/{NcSettingsSection-DK0dtGcw.mjs.map → NcSettingsSection-fe_YIg-L.mjs.map} +1 -1
  335. package/dist/chunks/{NcSettingsSelectGroup-CutKYnV3.cjs → NcSettingsSelectGroup-D0s0bzQI.cjs} +5 -5
  336. package/dist/chunks/{NcSettingsSelectGroup-CutKYnV3.cjs.map → NcSettingsSelectGroup-D0s0bzQI.cjs.map} +1 -1
  337. package/dist/chunks/{NcSettingsSelectGroup-buP5uEyf.mjs → NcSettingsSelectGroup-SuQNKdqU.mjs} +5 -5
  338. package/dist/chunks/{NcSettingsSelectGroup-buP5uEyf.mjs.map → NcSettingsSelectGroup-SuQNKdqU.mjs.map} +1 -1
  339. package/dist/chunks/{NcTextArea-BUqxDVLX.cjs → NcTextArea-B2hcap39.cjs} +10 -5
  340. package/dist/chunks/NcTextArea-B2hcap39.cjs.map +1 -0
  341. package/dist/chunks/{NcTextArea-C10S9llK.mjs → NcTextArea-BFLuhsEv.mjs} +10 -5
  342. package/dist/chunks/NcTextArea-BFLuhsEv.mjs.map +1 -0
  343. package/dist/chunks/{NcTextField-GdOVvMI8.mjs → NcTextField-Do6wBDGH.mjs} +4 -4
  344. package/dist/chunks/{NcTextField-GdOVvMI8.mjs.map → NcTextField-Do6wBDGH.mjs.map} +1 -1
  345. package/dist/chunks/{NcTextField-C24Y7Zzr.cjs → NcTextField-Dyuxj4yu.cjs} +4 -4
  346. package/dist/chunks/{NcTextField-C24Y7Zzr.cjs.map → NcTextField-Dyuxj4yu.cjs.map} +1 -1
  347. package/dist/chunks/{NcTimezonePicker-CHrv7H1J.mjs → NcTimezonePicker-bIwFQlmV.mjs} +4 -4
  348. package/dist/chunks/{NcTimezonePicker-CHrv7H1J.mjs.map → NcTimezonePicker-bIwFQlmV.mjs.map} +1 -1
  349. package/dist/chunks/{NcTimezonePicker-DiYxhC2U.cjs → NcTimezonePicker-obgDIrK0.cjs} +4 -4
  350. package/dist/chunks/{NcTimezonePicker-DiYxhC2U.cjs.map → NcTimezonePicker-obgDIrK0.cjs.map} +1 -1
  351. package/dist/chunks/{NcUserBubble-DMHgoLZr.mjs → NcUserBubble-BmPOx3MW.mjs} +3 -3
  352. package/dist/chunks/{NcUserBubble-DMHgoLZr.mjs.map → NcUserBubble-BmPOx3MW.mjs.map} +1 -1
  353. package/dist/chunks/{NcUserBubble-Bb2KMW2-.cjs → NcUserBubble-BusyVqGW.cjs} +3 -3
  354. package/dist/chunks/{NcUserBubble-Bb2KMW2-.cjs.map → NcUserBubble-BusyVqGW.cjs.map} +1 -1
  355. package/dist/chunks/{NcUserStatusIcon-4MmJE11d.cjs → NcUserStatusIcon-CKPJ27oi.cjs} +17 -19
  356. package/dist/chunks/NcUserStatusIcon-CKPJ27oi.cjs.map +1 -0
  357. package/dist/chunks/{NcUserStatusIcon-C1nS9t71.mjs → NcUserStatusIcon-DQr5EGWZ.mjs} +17 -19
  358. package/dist/chunks/NcUserStatusIcon-DQr5EGWZ.mjs.map +1 -0
  359. package/dist/chunks/{ScopeComponent-DRKCxrLx.mjs → ScopeComponent-CNZNqO-O.mjs} +2 -2
  360. package/dist/chunks/{ScopeComponent-DRKCxrLx.mjs.map → ScopeComponent-CNZNqO-O.mjs.map} +1 -1
  361. package/dist/chunks/{ScopeComponent-CB6JQj2P.cjs → ScopeComponent-CTlekHht.cjs} +2 -2
  362. package/dist/chunks/{ScopeComponent-CB6JQj2P.cjs.map → ScopeComponent-CTlekHht.cjs.map} +1 -1
  363. package/dist/chunks/{_l10n-BU8-kQzN.mjs → _l10n-CW0YfIWk.mjs} +19 -19
  364. package/dist/chunks/_l10n-CW0YfIWk.mjs.map +1 -0
  365. package/dist/chunks/{_l10n-DpwcsAC3.cjs → _l10n-RKohWu5d.cjs} +6 -6
  366. package/dist/chunks/{_l10n-DpwcsAC3.cjs.map → _l10n-RKohWu5d.cjs.map} +1 -1
  367. package/dist/chunks/legacy-KBXhWdRy.cjs +5 -0
  368. package/dist/chunks/legacy-KBXhWdRy.cjs.map +1 -0
  369. package/dist/chunks/legacy-MK4GvP26.mjs +6 -0
  370. package/dist/chunks/legacy-MK4GvP26.mjs.map +1 -0
  371. package/dist/chunks/mdi-B_QN3oas.cjs +22 -0
  372. package/dist/chunks/{mdi-BqDPfc6J.cjs.map → mdi-B_QN3oas.cjs.map} +1 -1
  373. package/dist/chunks/mdi-DoaiuWye.mjs +23 -0
  374. package/dist/chunks/{mdi-vLkDaZ9y.mjs.map → mdi-DoaiuWye.mjs.map} +1 -1
  375. package/dist/chunks/{referencePickerModal-Yw2bZ96U.cjs → referencePickerModal-C1Srl207.cjs} +7 -7
  376. package/dist/chunks/{referencePickerModal-Yw2bZ96U.cjs.map → referencePickerModal-C1Srl207.cjs.map} +1 -1
  377. package/dist/chunks/{referencePickerModal-C9Ot-OgO.mjs → referencePickerModal-CtMUY45l.mjs} +7 -7
  378. package/dist/chunks/{referencePickerModal-C9Ot-OgO.mjs.map → referencePickerModal-CtMUY45l.mjs.map} +1 -1
  379. package/dist/index.cjs +49 -49
  380. package/dist/index.mjs +50 -50
  381. package/dist/utils/legacy.d.ts +4 -0
  382. package/package.json +1 -1
  383. package/dist/assets/NcEmojiPicker-Ca6U46T8.css +0 -575
  384. package/dist/assets/NcTextArea-DhttRTsL.css +0 -112
  385. package/dist/chunks/NcAppNavigationItem-B-uv2tWu.cjs.map +0 -1
  386. package/dist/chunks/NcAppNavigationItem-CbtPNTg_.mjs.map +0 -1
  387. package/dist/chunks/NcAppNavigationSettings-DhQ5tXEJ.mjs +0 -109
  388. package/dist/chunks/NcAppNavigationSettings-DhQ5tXEJ.mjs.map +0 -1
  389. package/dist/chunks/NcAppNavigationSettings-DnvFbZyP.cjs +0 -108
  390. package/dist/chunks/NcAppNavigationSettings-DnvFbZyP.cjs.map +0 -1
  391. package/dist/chunks/NcDialogButton-Cc3iWZH1.mjs.map +0 -1
  392. package/dist/chunks/NcDialogButton-_biPxXPQ.cjs.map +0 -1
  393. package/dist/chunks/NcEmojiPicker-C3rhl7Xh.mjs.map +0 -1
  394. package/dist/chunks/NcEmojiPicker-Dynz_fRD.cjs.map +0 -1
  395. package/dist/chunks/NcHeaderMenu--AvoyMeD.mjs.map +0 -1
  396. package/dist/chunks/NcHeaderMenu-B12nEFGc.cjs.map +0 -1
  397. package/dist/chunks/NcInputField-CD_Jxnho.cjs.map +0 -1
  398. package/dist/chunks/NcInputField-a50IXAHm.mjs.map +0 -1
  399. package/dist/chunks/NcListItem-BJLfBv4G.cjs.map +0 -1
  400. package/dist/chunks/NcListItem-DIupNkcV.mjs.map +0 -1
  401. package/dist/chunks/NcPopover-4-YxCZOD.mjs.map +0 -1
  402. package/dist/chunks/NcPopover-DH2oMHFe.cjs.map +0 -1
  403. package/dist/chunks/NcRichContenteditable-BLXUzOmi.cjs.map +0 -1
  404. package/dist/chunks/NcRichContenteditable-C5Dfv3nk.mjs.map +0 -1
  405. package/dist/chunks/NcTextArea-BUqxDVLX.cjs.map +0 -1
  406. package/dist/chunks/NcTextArea-C10S9llK.mjs.map +0 -1
  407. package/dist/chunks/NcUserStatusIcon-4MmJE11d.cjs.map +0 -1
  408. package/dist/chunks/NcUserStatusIcon-C1nS9t71.mjs.map +0 -1
  409. package/dist/chunks/_l10n-BU8-kQzN.mjs.map +0 -1
  410. package/dist/chunks/legacy-Brrs7mi9.cjs +0 -4
  411. package/dist/chunks/legacy-Brrs7mi9.cjs.map +0 -1
  412. package/dist/chunks/legacy-SvM_Of-C.mjs +0 -5
  413. package/dist/chunks/legacy-SvM_Of-C.mjs.map +0 -1
  414. package/dist/chunks/mdi-BqDPfc6J.cjs +0 -18
  415. package/dist/chunks/mdi-vLkDaZ9y.mjs +0 -19
@@ -1 +0,0 @@
1
- {"version":3,"file":"NcRichContenteditable-C5Dfv3nk.mjs","sources":["../../src/components/NcRichContenteditable/NcAutoCompleteResult.vue","../../src/components/NcRichContenteditable/NcRichContenteditable.vue"],"sourcesContent":["<!--\n - SPDX-FileCopyrightText: 2020 Nextcloud GmbH and Nextcloud contributors\n - SPDX-License-Identifier: AGPL-3.0-or-later\n-->\n\n<template>\n\t<div class=\"autocomplete-result\">\n\t\t<!-- Avatar or icon -->\n\t\t<div :class=\"[icon, `autocomplete-result__icon--${avatarUrl ? 'with-avatar' : ''}`]\"\n\t\t\t:style=\"avatarUrl ? { backgroundImage: `url(${avatarUrl})` } : null \"\n\t\t\tclass=\"autocomplete-result__icon\">\n\t\t\t<span v-if=\"status.icon\"\n\t\t\t\tclass=\"autocomplete-result__status autocomplete-result__status--icon\">\n\t\t\t\t{{ status && status.icon || '' }}\n\t\t\t</span>\n\t\t\t<NcUserStatusIcon v-else-if=\"status.status && status.status !== 'offline'\"\n\t\t\t\tclass=\"autocomplete-result__status\"\n\t\t\t\t:status=\"status.status\" />\n\t\t</div>\n\n\t\t<!-- Label and subline -->\n\t\t<span class=\"autocomplete-result__content\">\n\t\t\t<span class=\"autocomplete-result__title\" :title=\"labelWithFallback\">\n\t\t\t\t{{ labelWithFallback }}\n\t\t\t</span>\n\t\t\t<span v-if=\"subline\" class=\"autocomplete-result__subline\">\n\t\t\t\t{{ subline }}\n\t\t\t</span>\n\t\t</span>\n\t</div>\n</template>\n\n<script>\nimport { useIsDarkTheme } from '../../composables/useIsDarkTheme/index.ts'\nimport { getAvatarUrl } from '../../utils/getAvatarUrl.ts'\n\nimport NcUserStatusIcon from '../NcUserStatusIcon/index.js'\n\nexport default {\n\tname: 'NcAutoCompleteResult',\n\n\tcomponents: {\n\t\tNcUserStatusIcon,\n\t},\n\n\tprops: {\n\t\t/**\n\t\t * @deprecated Use `label` instead\n\t\t */\n\t\ttitle: {\n\t\t\ttype: String,\n\t\t\trequired: false,\n\t\t\tdefault: null,\n\t\t},\n\t\tlabel: {\n\t\t\ttype: String,\n\t\t\trequired: false,\n\t\t\tdefault: null,\n\t\t},\n\t\tsubline: {\n\t\t\ttype: String,\n\t\t\tdefault: null,\n\t\t},\n\t\tid: {\n\t\t\ttype: String,\n\t\t\tdefault: null,\n\t\t},\n\t\ticon: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\ticonUrl: {\n\t\t\ttype: String,\n\t\t\tdefault: null,\n\t\t},\n\t\tsource: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tstatus: {\n\t\t\ttype: [Object, Array],\n\t\t\tdefault: () => ({}),\n\t\t},\n\t},\n\n\tsetup() {\n\t\tconst isDarkTheme = useIsDarkTheme()\n\t\treturn {\n\t\t\tisDarkTheme,\n\t\t}\n\t},\n\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? getAvatarUrl(this.id, { isDarkTheme: this.isDarkTheme })\n\t\t\t\t: null\n\t\t},\n\t\t// For backwards compatibility\n\t\tlabelWithFallback() {\n\t\t\treturn this.label || this.title\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.autocomplete-result {\n\tdisplay: flex;\n\talign-items: center;\n\tgap: var(--default-grid-baseline);\n\tline-height: 1.2;\n\t--auto-complete-result-avatar-size: var(--default-clickable-area);\n\n\t&__icon {\n\t\tposition: relative;\n\t\tflex: 0 0 var(--default-clickable-area);\n\t\twidth: var(--default-clickable-area);\n\t\tmin-width: var(--default-clickable-area);\n\t\theight: var(--default-clickable-area);\n\t\tborder-radius: var(--default-clickable-area);\n\t\tbackground-color: var(--color-background-darker);\n\t\tbackground-repeat: no-repeat;\n\t\tbackground-position: center;\n\t\tbackground-size: contain;\n\t\t&--with-avatar {\n\t\t\tcolor: inherit;\n\t\t\tbackground-size: cover;\n\t\t}\n\t}\n\n\t&__status {\n\t\t--auto-complete-result-status-icon-size: clamp(14px, var(--auto-complete-result-avatar-size) * 0.4, 18px);\n\t\t// Avatar Radius * (1 - 1 / sqrt(2)) - Status Icon Radius / 2\n\t\t--auto-complete-result-status-icon-position: calc(var(--auto-complete-result-avatar-size) / 2 * (1 - 1 / sqrt(2)) - var(--auto-complete-result-status-icon-size) / 2);\n\t\tbox-sizing: border-box;\n\t\tposition: absolute;\n\t\tinset-inline-end: var(--auto-complete-result-status-icon-position);\n\t\tbottom: var(--auto-complete-result-status-icon-position);\n\t\theight: var(--auto-complete-result-status-icon-size);\n\t\twidth: var(--auto-complete-result-status-icon-size);\n\t\tborder: 2px solid var(--color-main-background);\n\t\tborder-radius: 50%;\n\t\tbackground-color: var(--color-main-background);\n\t\tfont-size: calc(var(--auto-complete-result-status-icon-size) / 1.2);\n\t\tline-height: 1.2;\n\t\tbackground-repeat: no-repeat;\n\t\tbackground-size: var(--auto-complete-result-status-icon-size);\n\t\tbackground-position: center;\n\n\t\t&--icon {\n\t\t\tborder: none;\n\t\t\tbackground-color: transparent;\n\t\t}\n\t}\n\n\t&__content {\n\t\tdisplay: flex;\n\t\tflex: 1 1 100%;\n\t\tflex-direction: column;\n\t\tjustify-content: center;\n\t\tmin-width: 0;\n\t}\n\n\t&__title,\n\t&__subline {\n\t\twhite-space: nowrap;\n\t\toverflow: hidden;\n\t\ttext-overflow: ellipsis;\n\t}\n\n\t&__subline {\n\t\tcolor: var(--color-text-maxcontrast);\n\t}\n}\n\n</style>\n","<!--\n - SPDX-FileCopyrightText: 2020 Nextcloud GmbH and Nextcloud contributors\n - SPDX-License-Identifier: AGPL-3.0-or-later\n-->\n\n<docs>\n\n### General description\n\nThis component displays contenteditable div with automated `@` [at] autocompletion and `:` [colon] emoji autocompletion.\n\n### Examples\n\nTry mentioning user @Test01 or inserting emoji :smile\n\n```vue\n<template>\n\t<div>\n\t\t<NcRichContenteditable\n\t\t\tlabel=\"Write a comment\"\n\t\t\tv-model=\"message\"\n\t\t\t:auto-complete=\"autoComplete\"\n\t\t\t:maxlength=\"100\"\n\t\t\t:user-data=\"userData\"\n\t\t\t@submit=\"onSubmit\" />\n\t\t<br>\n\n\t\t<NcRichContenteditable\n\t\t\tv-model=\"message\"\n\t\t\t:auto-complete=\"autoComplete\"\n\t\t\t:maxlength=\"400\"\n\t\t\t:multiline=\"true\"\n\t\t\t:user-data=\"userData\"\n\t\t\t@submit=\"onSubmit\" />\n\n\t\t<h5>Output - raw</h5>\n\t\t{{ JSON.stringify(message) }}\n\n\t\t<h5>Output - preformatted</h5>\n\t\t<p class=\"pre-line\">{{ message }}</p>\n\n\t\t<h5>Output - in NcRichText with markdown support</h5>\n\t\t<NcRichText :text=\"text\" :arguments=\"userMentions\" autolink use-markdown />\n\t</div>\n</template>\n<script>\nexport default {\n\tdata() {\n\t\treturn {\n\t\t\tmessage: '**Lorem ipsum** dolor sit amet.',\n\t\t\t// You need to provide this for the inline mention to understand what to display or not.\n\t\t\t// Key should be a string with leading '@', like @Test02 or @\"Test Offline\"\n\t\t\tuserData: {\n\t\t\t\tTest01: {\n\t\t\t\t\ticon: 'icon-user',\n\t\t\t\t\tid: 'Test01',\n\t\t\t\t\tlabel: 'Test01',\n\t\t\t\t\tsource: 'users',\n\t\t\t\t\tprimary: true,\n\t\t\t\t},\n\t\t\t\tTest02: {\n\t\t\t\t\ticon: 'icon-user',\n\t\t\t\t\tid: 'Test02',\n\t\t\t\t\tlabel: 'Test02',\n\t\t\t\t\tsource: 'users',\n\t\t\t\t\tstatus: {\n\t\t\t\t\t\tclearAt: null,\n\t\t\t\t\t\ticon: '🎡',\n\t\t\t\t\t\tmessage: 'Visiting London',\n\t\t\t\t\t\tstatus: 'away',\n\t\t\t\t\t},\n\t\t\t\t\tsubline: 'Visiting London',\n\t\t\t\t},\n\t\t\t\t'Test@User': {\n\t\t\t\t\ticon: 'icon-user',\n\t\t\t\t\tid: 'Test@User',\n\t\t\t\t\tlabel: 'Test 03',\n\t\t\t\t\tsource: 'users',\n\t\t\t\t\tstatus: {\n\t\t\t\t\t\tclearAt: null,\n\t\t\t\t\t\ticon: '🎡',\n\t\t\t\t\t\tmessage: 'Having space in my name',\n\t\t\t\t\t\tstatus: 'online',\n\t\t\t\t\t},\n\t\t\t\t\tsubline: 'Visiting London',\n\t\t\t\t},\n\t\t\t\t'Test Offline': {\n\t\t\t\t\ticon: 'icon-user',\n\t\t\t\t\tid: 'Test Offline',\n\t\t\t\t\tlabel: 'Test Offline',\n\t\t\t\t\tsource: 'users',\n\t\t\t\t\tstatus: {\n\t\t\t\t\t\tclearAt: null,\n\t\t\t\t\t\ticon: null,\n\t\t\t\t\t\tmessage: null,\n\t\t\t\t\t\tstatus: 'offline',\n\t\t\t\t\t},\n\t\t\t\t\tsubline: null,\n\t\t\t\t},\n\t\t\t\t'Test DND': {\n\t\t\t\t\ticon: 'icon-user',\n\t\t\t\t\tid: 'Test DND',\n\t\t\t\t\tlabel: 'Test DND',\n\t\t\t\t\tsource: 'users',\n\t\t\t\t\tstatus: {\n\t\t\t\t\t\tclearAt: null,\n\t\t\t\t\t\ticon: null,\n\t\t\t\t\t\tmessage: 'Out sick',\n\t\t\t\t\t\tstatus: 'dnd',\n\t\t\t\t\t},\n\t\t\t\t\tsubline: 'Out sick',\n\t\t\t\t},\n\t\t\t},\n\t\t\t// To display user bubbles in NcRichText, special format of data should be provided:\n\t\t\t// Key should be in curly brackets without '@' and ' ' symbols, like {user-2}\n\t\t\tuserMentions: {\n\t\t\t\t'user-1': {\n\t\t\t\t\tcomponent: 'NcUserBubble',\n\t\t\t\t\tprops: {\n\t\t\t\t\t\tdisplayName: 'Test01',\n\t\t\t\t\t\tuser: 'Test01',\n\t\t\t\t\t\tprimary: true,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t'user-2': {\n\t\t\t\t\tcomponent: 'NcUserBubble',\n\t\t\t\t\tprops: {\n\t\t\t\t\t\tdisplayName: 'Test02',\n\t\t\t\t\t\tuser: 'Test02',\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t'user-3': {\n\t\t\t\t\tcomponent: 'NcUserBubble',\n\t\t\t\t\tprops: {\n\t\t\t\t\t\tdisplayName: 'Test 03',\n\t\t\t\t\t\tuser: 'Test@User',\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t'user-4': {\n\t\t\t\t\tcomponent: 'NcUserBubble',\n\t\t\t\t\tprops: {\n\t\t\t\t\t\tdisplayName: 'Test Offline',\n\t\t\t\t\t\tuser: 'Test Offline',\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t'user-5': {\n\t\t\t\t\tcomponent: 'NcUserBubble',\n\t\t\t\t\tprops: {\n\t\t\t\t\t\tdisplayName: 'Test DND',\n\t\t\t\t\t\tuser: 'Test DND',\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t}\n\t\t}\n\t},\n\tcomputed: {\n\t\ttext() {\n\t\t\treturn this.message\n\t\t\t\t\t.replace('@Test01', '{user-1}')\n\t\t\t\t\t.replace('@Test02', '{user-2}')\n\t\t\t\t\t.replace('@Test@User', '{user-3}')\n\t\t\t\t\t.replace('@\"Test Offline\"', '{user-4}')\n\t\t\t\t\t.replace('@\"Test DND\"', '{user-5}')\n\t\t},\n\t},\n\tmethods: {\n\t\t/**\n\t\t* Do your own query to the autocompletion api.\n\t\t* The returned data bellow is a fake data example.\n\t\t* The callback expects the same format returned by the core/autocomplete/get ocs api endpoint!\n\t\t* @see userData example above\n\t\t*\n\t\t* @param {string} search the query\n\t\t* @param {Function} callback the callback to process the results with\n\t\t*/\n\t\tautoComplete(search, callback) {\n\t\t\tcallback(Object.values(this.userData))\n\t\t},\n\t\tonSubmit() {\n\t\t\talert(this.message)\n\t\t}\n\t}\n}\n</script>\n<style lang=\"scss\" scoped>\n\th5 {\n\t\tfont-weight: bold;\n\t\tmargin: 40px 0 20px;\n\t}\n\n\t.pre-line {\n\t\twhite-space: pre-line;\n\t}\n</style>\n```\n\n### Using public methods\n\n```vue\n<template>\n\t<div>\n\t\t<div class=\"buttons-wrapper\">\n\t\t\t<NcButton class=\"show-slash-button\" @click=\"showSlashCommands\">Slash commands</NcButton>\n\t\t\t<NcButton class=\"focus-button\" @click=\"focus\">Focus on input</NcButton>\n\t\t</div>\n\t\t<NcRichContenteditable\n\t\t\tref=\"contenteditable\"\n\t\t\tlabel=\"Write a comment\"\n\t\t\tv-model=\"message\"\n\t\t\t:maxlength=\"100\"/>\n\t</div>\n</template>\n<script>\nexport default {\n\tdata() {\n\t\treturn {\n\t\t\tmessage: '**Lorem ipsum** dolor sit amet. ',\n\t\t}\n\t},\n\tmethods: {\n\t\tshowSlashCommands() {\n\t\t\tthis.$refs.contenteditable.showTribute('/')\n\t\t},\n\t\tfocus() {\n\t\t\tthis.$refs.contenteditable.focus()\n\t\t},\n\t},\n}\n</script>\n<style lang=\"scss\" scoped>\n\t.buttons-wrapper {\n\t\tdisplay: flex;\n\t\tgap: 10px;\n\t\tmargin-bottom: 20px;\n\t}\n</style>\n```\n\n</docs>\n\n<template>\n\t<div class=\"rich-contenteditable\">\n\t\t<div :id=\"id\"\n\t\t\tref=\"contenteditable\"\n\t\t\t:class=\"{\n\t\t\t\t'rich-contenteditable__input--empty': isEmptyValue,\n\t\t\t\t'rich-contenteditable__input--multiline': multiline,\n\t\t\t\t'rich-contenteditable__input--has-label': label,\n\t\t\t\t'rich-contenteditable__input--overflow': isOverMaxlength,\n\t\t\t\t'rich-contenteditable__input--disabled': disabled,\n\t\t\t}\"\n\t\t\t:contenteditable=\"canEdit\"\n\t\t\t:aria-labelledby=\"label ? labelId : undefined\"\n\t\t\t:aria-placeholder=\"placeholder\"\n\t\t\taria-multiline=\"true\"\n\t\t\tclass=\"rich-contenteditable__input\"\n\t\t\trole=\"textbox\"\n\t\t\taria-haspopup=\"listbox\"\n\t\t\taria-autocomplete=\"inline\"\n\t\t\t:aria-controls=\"tributeId\"\n\t\t\t:aria-expanded=\"isAutocompleteOpen ? 'true' : 'false'\"\n\t\t\t:aria-activedescendant=\"autocompleteActiveId\"\n\t\t\t:title=\"tooltipString\"\n\t\t\tv-bind=\"$attrs\"\n\t\t\tv-on=\"listeners\"\n\t\t\t@focus=\"moveCursorToEnd\"\n\t\t\t@input=\"onInput\"\n\t\t\t@compositionstart=\"isComposing = true\"\n\t\t\t@compositionend=\"isComposing = false\"\n\t\t\t@keydown.esc.capture=\"onKeyEsc\"\n\t\t\t@keydown.enter.exact=\"onEnter\"\n\t\t\t@keydown.ctrl.enter.exact.stop.prevent=\"onCtrlEnter\"\n\t\t\t@paste=\"onPaste\"\n\t\t\t@keyup.stop.prevent.capture=\"onKeyUp\"\n\t\t\t@keydown.up.exact.stop=\"onTributeArrowKeyDown\"\n\t\t\t@keydown.down.exact.stop=\"onTributeArrowKeyDown\"\n\t\t\t@tribute-active-true=\"onTributeActive(true)\"\n\t\t\t@tribute-active-false=\"onTributeActive(false)\" />\n\t\t<div v-if=\"label\"\n\t\t\t:id=\"labelId\"\n\t\t\tclass=\"rich-contenteditable__label\">\n\t\t\t{{ label }}\n\t\t</div>\n\t</div>\n</template>\n\n<script>\nimport { n, t } from '../../l10n.js'\nimport NcAutoCompleteResult from './NcAutoCompleteResult.vue'\nimport richEditor from '../../mixins/richEditor/index.js'\nimport { emojiSearch, emojiAddRecent } from '../../functions/emoji/index.ts'\nimport { searchProvider, getLinkWithPicker } from '../NcRichText/index.js'\n\nimport Tribute from 'tributejs/dist/tribute.esm.js'\nimport debounce from 'debounce'\nimport stringLength from 'string-length'\nimport GenRandomId from '../../utils/GenRandomId.js'\nimport { useModelMigration } from '../../composables/useModelMigration.ts'\n\n/**\n * Populate the list of text smiles we want to offer via Tribute.\n * We add the colon `:)` and colon-dash `:-)` version for each of them.\n */\nconst smilesCharacters = ['d', 'D', 'p', 'P', 's', 'S', 'x', 'X', ')', '(', '|', '/']\nconst textSmiles = []\nsmilesCharacters.forEach((char) => {\n\ttextSmiles.push(':' + char)\n\ttextSmiles.push(':-' + char)\n})\n\nexport default {\n\tname: 'NcRichContenteditable',\n\n\tmixins: [richEditor],\n\n\tinheritAttrs: false,\n\n\tmodel: {\n\t\tprop: 'modelValue',\n\t\tevent: 'update:modelValue',\n\t},\n\n\tprops: {\n\t\t/**\n\t\t * The ID attribute of the content editable\n\t\t */\n\t\tid: {\n\t\t\ttype: String,\n\t\t\tdefault: () => GenRandomId(7),\n\t\t},\n\n\t\t/**\n\t\t * Visual label of the contenteditable\n\t\t */\n\t\tlabel: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\n\t\t/**\n\t\t * Removed in v9 - use `modelValue` (`v-model`) instead\n\t\t * @deprecated\n\t\t */\n\t\tvalue: {\n\t\t\ttype: String,\n\t\t\tdefault: undefined,\n\t\t},\n\n\t\tmodelValue: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\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/**\n\t\t * Removed in v9 - use `update:modelValue` (`v-model`) instead\n\t\t * @deprecated\n\t\t */\n\t\t'update:value',\n\t\t'update:modelValue',\n\t\t/** Same as update:modelValue for Vue 2 compatibility */\n\t\t'update:model-value',\n\t\t'smart-picker-submit',\n\t],\n\n\tsetup() {\n\t\tconst uid = GenRandomId(5)\n\t\tconst model = useModelMigration('value', 'update:value', true)\n\t\treturn {\n\t\t\tmodel,\n\t\t\t// Constants\n\t\t\tlabelId: `nc-rich-contenteditable-${uid}-label`,\n\t\t\ttributeId: `nc-rich-contenteditable-${uid}-tribute`,\n\t\t\t/**\n\t\t\t * Non-reactive property to store Tribute instance\n\t\t\t *\n\t\t\t * @type {import('tributejs').default | null}\n\t\t\t */\n\t\t\ttribute: null,\n\t\t\ttributeStyleMutationObserver: null,\n\t\t}\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\t// Represent the raw untrimmed text of the contenteditable\n\t\t\t// serves no other purpose than to check whether the\n\t\t\t// content is empty or not\n\t\t\tlocalValue: this.model,\n\n\t\t\t// Is in text composition session in IME\n\t\t\tisComposing: false,\n\n\t\t\t// Tribute autocomplete\n\t\t\tisAutocompleteOpen: false,\n\t\t\tautocompleteActiveId: undefined,\n\t\t\tisTributeIntegrationDone: false,\n\t\t}\n\t},\n\n\tcomputed: {\n\t\t/**\n\t\t * Is the current trimmed value empty?\n\t\t *\n\t\t * @return {boolean}\n\t\t */\n\t\tisEmptyValue() {\n\t\t\treturn !this.localValue || this.localValue.trim() === ''\n\t\t},\n\n\t\t/**\n\t\t * Is the current value over maxlength?\n\t\t *\n\t\t * @return {boolean}\n\t\t */\n\t\tisOverMaxlength() {\n\t\t\tif (this.isEmptyValue || !this.maxlength) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\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('Message limit of %n character reached', 'Message limit of %n characters reached', this.maxlength)\n\t\t},\n\n\t\t/**\n\t\t * Edit is only allowed when contenteditableis true and disabled is false\n\t\t *\n\t\t * @return {boolean}\n\t\t */\n\t\tcanEdit() {\n\t\t\treturn this.contenteditable && !this.disabled\n\t\t},\n\n\t\t/**\n\t\t * Proxied native event handlers without custom event handlers\n\t\t *\n\t\t * @return {Record<string, Function>}\n\t\t */\n\t\tlisteners() {\n\t\t\t/**\n\t\t\t * All component's event handlers are set as native event handlers with by v-on directive.\n\t\t\t * The component also raised custom events manually by $emit for corresponding events.\n\t\t\t * As a result, it triggers handlers twice.\n\t\t\t * The v-on=\"listeners\" directive should only set proxied native events handler without custom events\n\t\t\t */\n\t\t\tconst listeners = { ...this.$listeners }\n\t\t\tdelete listeners.paste\n\t\t\treturn listeners\n\t\t},\n\n\t\t/**\n\t\t * Compute debounce function for the autocomplete function\n\t\t */\n\t\t debouncedAutoComplete() {\n\t\t\treturn debounce(async (search, callback) => {\n\t\t\t\tthis.autoComplete(search, callback)\n\t\t\t}, 100)\n\t\t},\n\t},\n\n\twatch: {\n\t\t/**\n\t\t * If the parent value change, we compare the plain text rendering\n\t\t * If it's different, we render everything and update the main content\n\t\t */\n\t\tmodel() {\n\t\t\tconst html = this.$refs.contenteditable.innerHTML\n\t\t\t// Compare trimmed versions to be safe\n\t\t\tif (this.model.trim() !== this.parseContent(html).trim()) {\n\t\t\t\tthis.updateContent(this.model)\n\t\t\t}\n\t\t},\n\t},\n\n\tmounted() {\n\t\tthis.initializeTribute()\n\n\t\t// Update default value\n\t\tthis.updateContent(this.model)\n\n\t\t// Removes the contenteditable attribute at first load if the prop is\n\t\t// set to false.\n\t\tthis.$refs.contenteditable.contentEditable = this.canEdit\n\t},\n\n\tbeforeDestroy() {\n\t\tif (this.tribute) {\n\t\t\tthis.tribute.detach(this.$refs.contenteditable)\n\t\t}\n\n\t\tif (this.tributeStyleMutationObserver) {\n\t\t\tthis.tributeStyleMutationObserver.disconnect()\n\t\t}\n\t},\n\n\tmethods: {\n\t\t/**\n\t\t * Focus the richContenteditable\n\t\t *\n\t\t * @public\n\t\t */\n\t\tfocus() {\n\t\t\tthis.$refs.contenteditable.focus()\n\t\t},\n\n\t\tinitializeTribute() {\n\t\t\tconst renderMenuItem = (content) => `<div id=\"nc-rich-contenteditable-tribute-item-${GenRandomId(5)}\" class=\"${this.$style['tribute-item']}\" role=\"option\">${content}</div>`\n\n\t\t\tconst tributesCollection = []\n\t\t\ttributesCollection.push({\n\t\t\t\tfillAttr: 'id',\n\t\t\t\t// Search against id and label (display name) (fallback to title for v8.0.0..8.6.1 compatibility)\n\t\t\t\tlookup: result => `${result.id} ${result.label ?? result.title}`,\n\t\t\t\trequireLeadingSpace: true,\n\t\t\t\t// Popup mention autocompletion templates\n\t\t\t\tmenuItemTemplate: item => renderMenuItem(this.renderComponentHtml(item.original, NcAutoCompleteResult)),\n\t\t\t\t// Hide if no results\n\t\t\t\tnoMatchTemplate: () => '<span class=\"hidden\"></span>',\n\t\t\t\t// Inner display of mentions\n\t\t\t\tselectTemplate: item => this.genSelectTemplate(item?.original?.id),\n\t\t\t\t// Autocompletion results\n\t\t\t\tvalues: this.debouncedAutoComplete,\n\t\t\t\t// Class added to the menu container\n\t\t\t\tcontainerClass: `${this.$style['tribute-container']} ${this.$style['tribute-container-autocomplete']}`,\n\t\t\t\t// Class added to each list item\n\t\t\t\titemClass: this.$style['tribute-container__item'],\n\n\t\t\t})\n\n\t\t\tif (this.emojiAutocomplete) {\n\t\t\t\ttributesCollection.push({\n\t\t\t\t\ttrigger: ':',\n\t\t\t\t\t// Don't use the tribute search function at all\n\t\t\t\t\t// We pass search results as values (see below)\n\t\t\t\t\tlookup: (result, query) => query,\n\t\t\t\t\trequireLeadingSpace: true,\n\t\t\t\t\t// Popup mention autocompletion templates\n\t\t\t\t\tmenuItemTemplate: item => {\n\t\t\t\t\t\tif (textSmiles.includes(item.original)) {\n\t\t\t\t\t\t\t// Display the raw text string for :), :-D, … for non emoji results,\n\t\t\t\t\t\t\t// instead of trying to show an image and their name.\n\t\t\t\t\t\t\treturn item.original\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn renderMenuItem(`<span class=\"${this.$style['tribute-item__emoji']}\">${item.original.native}</span> :${item.original.short_name}`)\n\t\t\t\t\t},\n\t\t\t\t\t// Hide if no results\n\t\t\t\t\tnoMatchTemplate: () => t('No emoji found'),\n\t\t\t\t\t// Display raw emoji along with its name\n\t\t\t\t\tselectTemplate: (item) => {\n\t\t\t\t\t\tif (textSmiles.includes(item.original)) {\n\t\t\t\t\t\t\t// Replace the selection with the raw text string for :), :-D, … for non emoji results\n\t\t\t\t\t\t\treturn item.original\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\temojiAddRecent(item.original)\n\t\t\t\t\t\treturn item.original.native\n\t\t\t\t\t},\n\t\t\t\t\t// Pass the search results as values\n\t\t\t\t\tvalues: (text, cb) => {\n\t\t\t\t\t\tconst emojiResults = emojiSearch(text)\n\t\t\t\t\t\tif (textSmiles.includes(':' + text)) {\n\t\t\t\t\t\t\t/**\n\t\t\t\t\t\t\t * Prepend text smiles to the search results so that Tribute\n\t\t\t\t\t\t\t * is not interfering with normal writing, aka. \"Cocos Island Meme\".\n\t\t\t\t\t\t\t * E.g. `:)` and `:-)` got replaced by the flag of Cocos Island,\n\t\t\t\t\t\t\t * when submitting the input with Enter after writing them\n\t\t\t\t\t\t\t */\n\t\t\t\t\t\t\temojiResults.unshift(':' + text)\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcb(emojiResults)\n\t\t\t\t\t},\n\t\t\t\t\t// Class added to the menu container\n\t\t\t\t\tcontainerClass: `${this.$style['tribute-container']} ${this.$style['tribute-container-emoji']}`,\n\t\t\t\t\t// Class added to each list item\n\t\t\t\t\titemClass: this.$style['tribute-container__item'],\n\t\t\t\t})\n\t\t\t}\n\n\t\t\tif (this.linkAutocomplete) {\n\t\t\t\ttributesCollection.push({\n\t\t\t\t\ttrigger: '/',\n\t\t\t\t\t// Don't use the tribute search function at all\n\t\t\t\t\t// We pass search results as values (see below)\n\t\t\t\t\tlookup: (result, query) => query,\n\t\t\t\t\trequireLeadingSpace: true,\n\t\t\t\t\t// Popup mention autocompletion templates\n\t\t\t\t\tmenuItemTemplate: item => renderMenuItem(`<img class=\"${this.$style['tribute-item__icon']}\" src=\"${item.original.icon_url}\"> <span class=\"${this.$style['tribute-item__title']}\">${item.original.title}</span>`),\n\t\t\t\t\t// Hide if no results\n\t\t\t\t\tnoMatchTemplate: () => t('No link provider found'),\n\t\t\t\t\tselectTemplate: this.getLink,\n\t\t\t\t\t// Pass the search results as values\n\t\t\t\t\tvalues: (text, cb) => cb(searchProvider(text)),\n\t\t\t\t\t// Class added to the menu container\n\t\t\t\t\tcontainerClass: `${this.$style['tribute-container']} ${this.$style['tribute-container-link']}`,\n\t\t\t\t\t// Class added to each list item\n\t\t\t\t\titemClass: this.$style['tribute-container__item'],\n\t\t\t\t})\n\t\t\t}\n\n\t\t\tthis.tribute = new Tribute({\n\t\t\t\tcollection: tributesCollection,\n\t\t\t\t// FIXME: tributejs doesn't support allowSpaces as a collection option, only as a global one\n\t\t\t\t// Requires to fork a library to allow spaces only in the middle of mentions ('@' trigger)\n\t\t\t\tallowSpaces: false,\n\t\t\t\t// Where to inject the menu popup\n\t\t\t\tmenuContainer: this.menuContainer,\n\t\t\t})\n\t\t\tthis.tribute.attach(this.$refs.contenteditable)\n\t\t},\n\n\t\tgetLink(item) {\n\t\t\t// there is no way to get a tribute result asynchronously\n\t\t\t// so we immediately insert a node and replace it when the result comes\n\t\t\tgetLinkWithPicker(item.original.id)\n\t\t\t\t.then(result => {\n\t\t\t\t\t// replace dummy temp element by a text node which contains the picker result\n\t\t\t\t\tconst tmpElem = document.getElementById('tmp-smart-picker-result-node')\n\t\t\t\t\tconst eventData = {\n\t\t\t\t\t\tresult,\n\t\t\t\t\t\tinsertText: true,\n\t\t\t\t\t}\n\t\t\t\t\tthis.$emit('smart-picker-submit', eventData)\n\t\t\t\t\tif (eventData.insertText) {\n\t\t\t\t\t\tconst newElem = document.createTextNode(result)\n\t\t\t\t\t\ttmpElem.replaceWith(newElem)\n\t\t\t\t\t\tthis.setCursorAfter(newElem)\n\t\t\t\t\t\tthis.updateValue(this.$refs.contenteditable.innerHTML)\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttmpElem.remove()\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t\t.catch((error) => {\n\t\t\t\t\tconsole.debug('Smart picker promise rejected:', error)\n\t\t\t\t\tconst tmpElem = document.getElementById('tmp-smart-picker-result-node')\n\t\t\t\t\tthis.setCursorAfter(tmpElem)\n\t\t\t\t\ttmpElem.remove()\n\t\t\t\t})\n\t\t\treturn '<span id=\"tmp-smart-picker-result-node\"></span>'\n\t\t},\n\t\tsetCursorAfter(element) {\n\t\t\tconst range = document.createRange()\n\t\t\trange.setEndAfter(element)\n\t\t\trange.collapse()\n\t\t\tconst selection = window.getSelection()\n\t\t\tselection.removeAllRanges()\n\t\t\tselection.addRange(range)\n\t\t},\n\t\tmoveCursorToEnd() {\n\t\t\tif (!document.createRange) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tconst range = document.createRange()\n\t\t\trange.selectNodeContents(this.$refs.contenteditable)\n\t\t\trange.collapse(false)\n\t\t\tconst selection = window.getSelection()\n\t\t\tselection.removeAllRanges()\n\t\t\tselection.addRange(range)\n\t\t},\n\t\t/**\n\t\t * Re-emit the input event to the parent\n\t\t *\n\t\t * @param {Event} event the input event\n\t\t */\n\t\tonInput(event) {\n\t\t\tthis.updateValue(event.target.innerHTML)\n\t\t},\n\n\t\t/**\n\t\t * When pasting, sanitize the content, extract text\n\t\t * and render it again\n\t\t *\n\t\t * @param {Event} event the paste event\n\t\t * @fires Event paste the original paste event\n\t\t */\n\t\tonPaste(event) {\n\t\t\t// Either disabled or edit deactivated\n\t\t\tif (!this.canEdit) {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tevent.preventDefault()\n\t\t\tconst clipboardData = event.clipboardData\n\n\t\t\t/** The original paste event */\n\t\t\tthis.$emit('paste', event)\n\n\t\t\t// If we have a file or if we don't have any text, ignore\n\t\t\tif (clipboardData.files.length !== 0\n\t\t\t\t|| !Object.values(clipboardData.items).find(item => item?.type.startsWith('text'))) {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tconst text = clipboardData.getData('text')\n\t\t\tconst selection = window.getSelection()\n\n\t\t\t// Generate text and insert\n\t\t\tconst range = selection.getRangeAt(0)\n\t\t\trange.deleteContents()\n\t\t\trange.insertNode(document.createTextNode(text))\n\n\t\t\t// Collapse the range to the end position\n\t\t\trange.collapse(false)\n\n\t\t\t// Propagate data\n\t\t\tthis.updateValue(this.$refs.contenteditable.innerHTML)\n\t\t},\n\n\t\t/**\n\t\t * Update the value text from the provided html\n\t\t *\n\t\t * @param {string} htmlOrText the html content (or raw text with @mentions)\n\t\t */\n\t\tupdateValue(htmlOrText) {\n\t\t\t// Browsers keep <br> after erasing contenteditable\n\t\t\tconst text = this.parseContent(htmlOrText).replace(/^\\n$/, '')\n\t\t\tthis.localValue = text\n\t\t\tthis.model = text\n\t\t},\n\n\t\t/**\n\t\t * Update content and local value\n\t\t *\n\t\t * @param {string} value the message value\n\t\t */\n\t\tupdateContent(value) {\n\t\t\tconst renderedContent = this.renderContent(value)\n\t\t\tthis.$refs.contenteditable.innerHTML = renderedContent\n\t\t\tthis.localValue = value\n\t\t},\n\n\t\t/**\n\t\t * Enter key pressed. Submits if not multiline\n\t\t *\n\t\t * @param {Event} event the keydown event\n\t\t */\n\t\tonEnter(event) {\n\t\t\t// Prevent submitting if multiline\n\t\t\t// or length is over maxlength\n\t\t\t// or autocompletion menu is opened\n\t\t\t// or in a text composition session with IME\n\t\t\tif (this.multiline\n\t\t\t\t|| this.isOverMaxlength\n\t\t\t\t|| this.tribute.isActive\n\t\t\t\t|| this.isComposing) {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tevent.preventDefault()\n\t\t\tevent.stopPropagation()\n\t\t\tthis.$emit('submit', event)\n\t\t},\n\n\t\t/**\n\t\t * Ctrl + Enter key pressed is used to submit\n\t\t *\n\t\t * @param {Event} event the keydown event\n\t\t */\n\t\tonCtrlEnter(event) {\n\t\t\tif (this.isOverMaxlength) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tthis.$emit('submit', event)\n\t\t},\n\n\t\tonKeyUp(event) {\n\t\t\t// prevent tribute from opening on keyup\n\t\t\tevent.stopImmediatePropagation()\n\t\t},\n\n\t\tonKeyEsc(event) {\n\t\t\t// prevent event from bubbling when tribute is open\n\t\t\tif (this.tribute && this.isAutocompleteOpen) {\n\t\t\t\tevent.stopImmediatePropagation()\n\t\t\t\tthis.tribute.hideMenu()\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Get HTML element with Tribute.js container\n\t\t * @return {HTMLElement}\n\t\t */\n\t\tgetTributeContainer() {\n\t\t\treturn this.tribute.menu\n\t\t},\n\n\t\t/**\n\t\t * Get the currently selected item element id in Tribute.js container\n\t\t * @return {HTMLElement}\n\t\t */\n\t\tgetTributeSelectedItem() {\n\t\t\t// Tribute does not provide a way to get the active item, only the data index\n\t\t\t// So we have to find it manually by select class\n\t\t\treturn this.getTributeContainer().querySelector('.highlight [id^=\"nc-rich-contenteditable-tribute-item-\"]')\n\t\t},\n\n\t\t/**\n\t\t * Handle Tribute activation\n\t\t * @param {boolean} isActive - is active\n\t\t */\n\t\tonTributeActive(isActive) {\n\t\t\tthis.isAutocompleteOpen = isActive\n\n\t\t\tif (isActive) {\n\t\t\t\t// Tribute.js doesn't support containerClass update when new collection is open\n\t\t\t\t// The first opened collection's containerClass stays forever\n\t\t\t\t// https://github.com/zurb/tribute/issues/595\n\t\t\t\t// https://github.com/zurb/tribute/issues/627\n\t\t\t\t// So we have to manually update the class\n\t\t\t\t// The default class is \"tribute-container\"\n\t\t\t\tthis.getTributeContainer().setAttribute('class', this.tribute.current.collection.containerClass || this.$style['tribute-container'])\n\n\t\t\t\tthis.setupTributeIntegration()\n\t\t\t\t// Remove the event handler if any\n\t\t\t\tdocument.removeEventListener('click', this.hideTribute, true)\n\t\t\t} else {\n\t\t\t\t// Cancel loading data for autocomplete\n\t\t\t\t// Otherwise it could be received when another autocomplete is already opened\n\t\t\t\tthis.debouncedAutoComplete.clear()\n\n\t\t\t\t// Reset active item\n\t\t\t\tthis.autocompleteActiveId = undefined\n\n\t\t\t\tthis.setTributeFocusVisible(false)\n\t\t\t}\n\t\t},\n\n\t\tonTributeArrowKeyDown() {\n\t\t\tif (!this.isAutocompleteOpen) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tthis.setTributeFocusVisible(true)\n\t\t\tthis.onTributeSelectedItemWillChange()\n\t\t},\n\n\t\tonTributeSelectedItemWillChange() {\n\t\t\t// Wait until tribute has updated the selected item\n\t\t\trequestAnimationFrame(() => {\n\t\t\t\tthis.autocompleteActiveId = this.getTributeSelectedItem()?.id\n\t\t\t})\n\t\t},\n\n\t\tsetupTributeIntegration() {\n\t\t\t// Setup integration only once on the first open\n\t\t\tif (this.isTributeIntegrationDone) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tthis.isTributeIntegrationDone = true\n\n\t\t\tconst tributeContainer = this.getTributeContainer()\n\n\t\t\t// For aria-controls\n\t\t\ttributeContainer.id = this.tributeId\n\n\t\t\t// Container with options must be a listbox\n\t\t\ttributeContainer.setAttribute('role', 'listbox')\n\t\t\t// Reset list+listitem role from ul+li\n\t\t\tconst ul = tributeContainer.children[0]\n\t\t\tul.setAttribute('role', 'presentation')\n\n\t\t\t// Tribute.js does not provide a way to react on show/hide\n\t\t\t// tribute-active-true/false events are fired on initial activation, which is too early with async autoComplete function\n\t\t\tthis.tributeStyleMutationObserver = new MutationObserver(([{ target }]) => {\n\t\t\t\tif (target.style.display !== 'none') {\n\t\t\t\t\t// Tribute is visible - there will be selected item\n\t\t\t\t\tthis.onTributeSelectedItemWillChange()\n\t\t\t\t}\n\t\t\t}).observe(tributeContainer, {\n\t\t\t\tattributes: true,\n\t\t\t\tattributeFilter: ['style'],\n\t\t\t})\n\n\t\t\t// Handle selecting new item on mouse selection\n\t\t\ttributeContainer.addEventListener('mousemove', () => {\n\t\t\t\tthis.setTributeFocusVisible(false)\n\t\t\t\tthis.onTributeSelectedItemWillChange()\n\t\t\t}, { passive: true })\n\t\t},\n\n\t\t/**\n\t\t * Set tribute-container--focus-visible class on the Tribute container when the user navigates the listbox via keyboard.\n\t\t *\n\t\t * Because the real focus is kept on the textbox, we cannot use the :focus-visible pseudo-class\n\t\t * to style selected options in the autocomplete listbox.\n\t\t *\n\t\t * @param {boolean} withFocusVisible - should the focus-visible class be added\n\t\t */\n\t\tsetTributeFocusVisible(withFocusVisible) {\n\t\t\tif (withFocusVisible) {\n\t\t\t\tthis.getTributeContainer().classList.add(this.$style['tribute-container--focus-visible'])\n\t\t\t} else {\n\t\t\t\tthis.getTributeContainer().classList.remove(this.$style['tribute-container--focus-visible'])\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Show tribute menu programmatically.\n\t\t * @param {string} trigger - trigger character, can be '/', '@', or ':'\n\t\t *\n\t\t * @public\n\t\t */\n\t\tshowTribute(trigger) {\n\t\t\tthis.focus()\n\t\t\tconst index = this.tribute.collection.findIndex(collection => collection.trigger === trigger)\n\t\t\tthis.tribute.showMenuForCollection(this.$refs.contenteditable, index)\n\t\t\tthis.updateValue(this.$refs.contenteditable.innerHTML)\n\t\t\tdocument.addEventListener('click', this.hideTribute, true)\n\t\t},\n\n\t\t/**\n\t\t * Hide tribute menu programmatically\n\t\t *\n\t\t */\n\t\thideTribute() {\n\t\t\tthis.tribute.hideMenu()\n\t\t\tdocument.removeEventListener('click', this.hideTribute, true)\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n// Standalone styling, independent from server\n.rich-contenteditable {\n\t--contenteditable-block-offset: calc(2 * var(--default-grid-baseline));\n\t--contenteditable-inline-start-offset: calc(2 * var(--default-grid-baseline));\n\t--contenteditable-inline-end-offset: calc(2 * var(--default-grid-baseline));\n\tposition: relative;\n\twidth: auto;\n\n\t&__label {\n\t\tposition: absolute;\n\t\tmargin-inline: 14px;\n\t\tmax-width: fit-content;\n\t\tinset-block-start: 11px;\n\t\tinset-inline: 0;\n\t\t// Fix color so that users do not think the input already has content\n\t\tcolor: var(--color-text-maxcontrast);\n\t\t// only one line labels are allowed\n\t\twhite-space: nowrap;\n\t\toverflow: hidden;\n\t\ttext-overflow: ellipsis;\n\t\t// forward events to input\n\t\tpointer-events: none;\n\t\t// Position transition\n\t\ttransition: height var(--animation-quick), inset-block-start var(--animation-quick), font-size var(--animation-quick), color var(--animation-quick), background-color var(--animation-quick) var(--animation-slow);\n\t}\n\n\t&__input:focus + &__label,\n\t&__input:not(&__input--empty) + &__label {\n\t\tinset-block-start: -10px;\n\t\tline-height: 1.5; // minimum allowed line height for accessibility\n\t\tfont-size: 13px; // minimum allowed font size for accessibility\n\t\tfont-weight: 500;\n\t\tborder-radius: var(--default-grid-baseline) var(--default-grid-baseline) 0 0;\n\t\tbackground-color: var(--color-main-background);\n\t\tpadding-inline: 5px;\n\t\tmargin-inline: 9px;\n\n\t\ttransition: height var(--animation-quick), inset-block-start var(--animation-quick), font-size var(--animation-quick), color var(--animation-quick);\n\t}\n\n\t&__input {\n\t\toverflow-y: auto;\n\t\twidth: auto;\n\t\tmargin: 0;\n\t\tpadding-block: var(--contenteditable-block-offset);\n\t\tpadding-inline: var(--contenteditable-inline-start-offset) var(--contenteditable-inline-end-offset);\n\t\tcursor: text;\n\t\twhite-space: pre-wrap;\n\t\tword-break: break-word;\n\t\tcolor: var(--color-main-text);\n\t\tborder: 2px solid var(--color-border-maxcontrast);\n\t\tborder-radius: var(--border-radius-large);\n\t\toutline: none;\n\t\tbackground-color: var(--color-main-background);\n\t\tfont-family: var(--font-face);\n\t\tfont-size: inherit;\n\t\ttab-size: 4;\n\t\tmin-height: var(--default-clickable-area);\n\t\tmax-height: calc(var(--default-clickable-area) * 5.5);\n\n\t\t&--has-label {\n\t\t\tmargin-top: 10px;\n\t\t}\n\n\t\t// Cannot use :empty because of firefox bug https://bugzilla.mozilla.org/show_bug.cgi?id=1513303\n\t\t&--empty:focus:before,\n\t\t&--empty:not(&--has-label):before {\n\t\t\tcontent: attr(aria-placeholder);\n\t\t\tcolor: var(--color-text-maxcontrast);\n\t\t\tposition: absolute;\n\t\t\twidth: calc(100% - var(--contenteditable-inline-start-offset) - var(--contenteditable-inline-end-offset));\n\t\t\theight: calc(100% - 2 * var(--contenteditable-block-offset));\n\t\t\toverflow: hidden;\n\t\t\twhite-space: nowrap;\n\t\t\ttext-overflow: ellipsis;\n\t\t}\n\n\t\t&[contenteditable='false']:not(&--disabled) {\n\t\t\tcursor: default;\n\t\t\tbackground-color: transparent;\n\t\t\tcolor: var(--color-main-text);\n\t\t\tborder-color: transparent;\n\t\t\topacity: 1;\n\t\t\tborder-radius: 0;\n\t\t}\n\n\t\t&--multiline {\n\t\t\tmin-height: calc(var(--default-clickable-area) * 3);\n\t\t\t// No max for mutiline\n\t\t\tmax-height: none;\n\t\t}\n\n\t\t&--disabled {\n\t\t\topacity: $opacity_disabled;\n\t\t\tcolor: var(--color-text-maxcontrast);\n\t\t\tborder: 2px solid var(--color-background-darker);\n\t\t\tborder-radius: var(--border-radius);\n\t\t\tbackground-color: var(--color-background-dark);\n\t\t}\n\n\t\t&--overflow,\n\t\t&--overflow:hover {\n\t\t\t// we need important to override server styles\n\t\t\tborder-color: var(--color-error) !important;\n\t\t}\n\t}\n}\n\n</style>\n\n<style lang=\"scss\" module>\n.tribute-container {\n\tz-index: 9000;\n\toverflow: auto;\n\t// Hide container root element while initializing\n\tposition: absolute;\n\t/* stylelint-disable-next-line csstools/use-logical */ /* upstream logic */\n\tleft: -100vw;\n\t// Space it out a bit from the text\n\tmargin: var(--default-grid-baseline) 0;\n\tpadding: var(--default-grid-baseline);\n\tcolor: var(--color-text-maxcontrast);\n\tborder-radius: var(--border-radius-element, var(--border-radius));\n\tbackground: var(--color-main-background);\n\tbox-shadow: 0 1px 5px var(--color-box-shadow);\n\n\t&,\n\t& * {\n\t\tbox-sizing: border-box;\n\t}\n\n\tul {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\tgap: var(--default-grid-baseline);\n\t}\n\n\t.tribute-container__item {\n\t\tcolor: var(--color-text-maxcontrast);\n\t\tborder-radius: var(--border-radius-small, var(--border-radius));\n\t\tpadding: var(--default-grid-baseline);\n\t\tcursor: pointer;\n\t\tmin-height: var(--clickable-area-small, auto);\n\n\t\t&:global(.highlight) {\n\t\t\tcolor: var(--color-main-text);\n\t\t\tbackground: var(--color-background-hover);\n\n\t\t\t&, * {\n\t\t\t\tcursor: pointer;\n\t\t\t}\n\t\t}\n\t}\n\n\t&.tribute-container--focus-visible {\n\t\t:global(.highlight).tribute-container__item {\n\t\t\toutline: 2px solid var(--color-main-text) !important;\n\t\t}\n\t}\n}\n\n.tribute-container-autocomplete {\n\tmin-width: 250px;\n\tmax-width: 300px;\n\t// Show maximum 4 entries and a half to show scroll\n\t// Autocomplete height\n\t// + 2 paddings inside autocomplete\n\t// + 1 padding gap\n\t// And 1.5 paddings - container's padding without the last gap\n\tmax-height: calc((var(--default-clickable-area) + 3 * var(--default-grid-baseline)) * 4.5 - 1.5 * var(--default-grid-baseline));\n}\n\n.tribute-container-emoji,\n.tribute-container-link {\n\tmin-width: 200px;\n\tmax-width: 200px;\n\t// Show maximum 5 entries and a half to show scroll\n\t// Item height\n\t// + 2 paddings around tribute item\n\t// + 1 padding gap\n\t// And 1.5 paddings - container's padding without the last gap\n\tmax-height: calc((24px + 3 * var(--default-grid-baseline)) * 5.5 - 1.5 * var(--default-grid-baseline));\n\n\t.tribute-item {\n\t\t// Take care of long names\n\t\twhite-space: nowrap;\n\t\toverflow: hidden;\n\t\ttext-overflow: ellipsis;\n\t}\n}\n\n.tribute-container-link {\n\tmin-width: 200px;\n\tmax-width: 300px;\n\t.tribute-item {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\t&__title {\n\t\t\twhite-space: nowrap;\n\t\t\toverflow: hidden;\n\t\t\ttext-overflow: ellipsis;\n\t\t}\n\t\t&__icon {\n\t\t\tmargin: auto 0;\n\t\t\twidth: 20px;\n\t\t\theight: 20px;\n\t\t\tobject-fit: contain;\n\t\t\tpadding-inline-end: var(--default-grid-baseline);\n\t\t\tfilter: var(--background-invert-if-dark);\n\t\t}\n\t}\n}\n\n</style>\n"],"names":["_sfc_main"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"NcTextArea-BUqxDVLX.cjs","sources":["../../src/components/NcTextArea/NcTextArea.vue"],"sourcesContent":["<!--\n - SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors\n - SPDX-License-Identifier: AGPL-3.0-or-later\n-->\n\n<docs>\n### Description\n\nThis component is a textarea field.\nIt extends and styles an HTMLTextAreaElement.\n\n```\n<template>\n\t<div class=\"wrapper\">\n\t\t<NcTextArea label=\"Text area\"\n\t\t\tv-model=\"text1\"\n\t\t\tplaceholder=\"Placeholders are possible\"\n\t\t\thelper-text=\"This is a regular helper text.\" >\n\t\t</NcTextArea>\n\t\t<NcTextArea label=\"Success state\"\n\t\t\tv-model=\"text2\"\n\t\t\t:success=\"true\">\n\t\t</NcTextArea>\n\t\t<NcTextArea label=\"Error state\"\n\t\t\tv-model=\"text3\"\n\t\t\tplaceholder=\"Enter something valid\"\n\t\t\thelper-text=\"Helper texts will be styled accordingly.\"\n\t\t\t:error=\"true\">\n\t\t</NcTextArea>\n\t\t<NcTextArea label=\"Disabled\"\n\t\t\tv-model=\"text4\"\n\t\t\t:disabled=\"true\" />\n\t\t<NcTextArea label=\"Disabled + Success\"\n\t\t\tv-model=\"text5\"\n\t\t\t:success=\"true\"\n\t\t\t:disabled=\"true\" />\n\t\t<div class=\"external-label\">\n\t\t\t<label for=\"textField\">External label</label>\n\t\t\t<NcTextArea id=\"textField\"\n\t\t\t\tv-model=\"text6\"\n\t\t\t\t:label-outside=\"true\"\n\t\t\t\tplaceholder=\"Text area with external label\" />\n\t\t</div>\n\t\t<NcTextArea label=\"Custom size and no resize\"\n\t\t\tv-model=\"text7\"\n\t\t\tresize=\"none\"\n\t\t\trows=\"5\" />\n\t\t</NcTextArea>\n\t</div>\n</template>\n\n<script>\n\texport default {\n\t\tdata() {\n\t\t\treturn {\n\t\t\t\ttext1: '',\n\t\t\t\ttext2: '',\n\t\t\t\ttext3: '',\n\t\t\t\ttext4: '',\n\t\t\t\ttext5: '',\n\t\t\t\ttext6: '',\n\t\t\t\ttext7: '',\n\t\t\t}\n\t\t},\n\t}\n</script>\n\n<style lang=\"scss\" scoped>\n.wrapper {\n\tdisplay: flex;\n\tgap: 4px;\n\talign-items: flex-end;\n\tflex-wrap: wrap;\n}\n\n.external-label {\n\tdisplay: flex;\n\twidth: 100%;\n\talign-items: center;\n\tgap: 14px;\n\n\t> label {\n\t\tflex-shrink: 0;\n\t}\n}\n</style>\n```\n</docs>\n\n<template>\n\t<div class=\"textarea\" :class=\"{ 'textarea--disabled': disabled }\">\n\t\t<div class=\"textarea__main-wrapper\">\n\t\t\t<textarea v-bind=\"$attrs\"\n\t\t\t\t:id=\"computedId\"\n\t\t\t\tref=\"input\"\n\t\t\t\tclass=\"textarea__input\"\n\t\t\t\t:disabled=\"disabled\"\n\t\t\t\t:placeholder=\"computedPlaceholder\"\n\t\t\t\t:aria-describedby=\"ariaDescribedby\"\n\t\t\t\taria-live=\"polite\"\n\t\t\t\t:class=\"[inputClass,\n\t\t\t\t\t{\n\t\t\t\t\t\t'textarea__input--label-outside': labelOutside,\n\t\t\t\t\t\t'textarea__input--success': success,\n\t\t\t\t\t\t'textarea__input--error': error,\n\t\t\t\t\t}]\"\n\t\t\t\t:style=\"{ resize: resize }\"\n\t\t\t\t:value=\"model\"\n\t\t\t\tv-on=\"$listeners\"\n\t\t\t\t@input=\"handleInput\" />\n\t\t\t<!-- Label -->\n\t\t\t<label v-if=\"!labelOutside && isValidLabel\"\n\t\t\t\tclass=\"textarea__label\"\n\t\t\t\t:for=\"computedId\">\n\t\t\t\t{{ label }}\n\t\t\t</label>\n\t\t</div>\n\t\t<p v-if=\"helperText.length > 0\"\n\t\t\t:id=\"`${inputName}-helper-text`\"\n\t\t\tclass=\"textarea__helper-text-message\"\n\t\t\t:class=\"{\n\t\t\t\t'textarea__helper-text-message--error': error,\n\t\t\t\t'textarea__helper-text-message--success': success,\n\t\t\t}\">\n\t\t\t<Check v-if=\"success\" class=\"textarea__helper-text-message__icon\" :size=\"18\" />\n\t\t\t<AlertCircle v-else-if=\"error\" class=\"textarea__helper-text-message__icon\" :size=\"18\" />\n\t\t\t{{ helperText }}\n\t\t</p>\n\t</div>\n</template>\n\n<script>\nimport GenRandomId from '../../utils/GenRandomId.js'\n\nimport AlertCircle from 'vue-material-design-icons/AlertCircleOutline.vue'\nimport Check from 'vue-material-design-icons/Check.vue'\nimport { useModelMigration } from '../../composables/useModelMigration.ts'\nimport { isLegacy32 } from '../../utils/legacy.ts'\n\nexport default {\n\tname: 'NcTextArea',\n\n\tcomponents: {\n\t\tAlertCircle,\n\t\tCheck,\n\t},\n\n\tinheritAttrs: false,\n\n\tmodel: {\n\t\tprop: 'modelValue',\n\t\tevent: 'update:modelValue',\n\t},\n\n\tprops: {\n\t\t/**\n\t\t * Removed in v9 - use `modelValue` (`v-model`) instead\n\t\t * @deprecated\n\t\t */\n\t\tvalue: {\n\t\t\ttype: String,\n\t\t\tdefault: undefined,\n\t\t},\n\n\t\t/**\n\t\t * The value of the input field\n\t\t */\n\t\tmodelValue: {\n\t\t\ttype: String,\n\t\t\tdefault: undefined,\n\t\t},\n\n\t\t/**\n\t\t * The input label, always provide one for accessibility purposes.\n\t\t * This will also be used as a placeholder unless the placeholder\n\t\t * prop is populated with a different string.\n\t\t */\n\t\tlabel: {\n\t\t\ttype: String,\n\t\t\tdefault: undefined,\n\t\t},\n\n\t\t/**\n\t\t * Pass in true if you want to use an external label. This is useful\n\t\t * if you need a label that looks different from the one provided by\n\t\t * this component\n\t\t */\n\t\tlabelOutside: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\n\t\t/**\n\t\t * The placeholder of the input. This defaults as the string that's\n\t\t * passed into the label prop. In order to remove the placeholder,\n\t\t * pass in an empty string.\n\t\t */\n\t\tplaceholder: {\n\t\t\ttype: String,\n\t\t\tdefault: undefined,\n\t\t},\n\n\t\t/**\n\t\t * Toggles the success state of the component. Adds a checkmark icon.\n\t\t * this cannot be used together with canClear.\n\t\t */\n\t\tsuccess: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\n\t\t/**\n\t\t * Toggles the error state of the component. Adds an error icon.\n\t\t * this cannot be used together with canClear.\n\t\t */\n\t\terror: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\n\t\t/**\n\t\t * Additional helper text message\n\t\t *\n\t\t * This will be displayed beneath the input field. In case the field is\n\t\t * also marked as having an error, the text will be displayed in red.\n\t\t */\n\t\thelperText: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\n\t\t/**\n\t\t * Disable the input field\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 * Class to add to the input field.\n\t\t * Necessary to use NcInputField in the NcActionInput component.\n\t\t */\n\t\tinputClass: {\n\t\t\ttype: [Object, String],\n\t\t\tdefault: '',\n\t\t},\n\n\t\t/**\n\t\t * The resize CSS property sets whether an element is resizable, and if\n\t\t * so, in which directions.\n\t\t */\n\t\tresize: {\n\t\t\ttype: String,\n\t\t\tdefault: 'both',\n\t\t\tvalidator: (value) => ['both', 'vertical', 'horizontal', 'none'].includes(value),\n\t\t},\n\t},\n\n\temits: [\n\t\t/**\n\t\t * Removed in v9 - use `update:modelValue` (`v-model`) instead\n\t\t * @deprecated\n\t\t */\n\t\t'update:value',\n\t\t'update:modelValue',\n\t\t/** Same as update:modelValue for Vue 2 compatibility */\n\t\t'update:model-value',\n\t],\n\n\tsetup() {\n\t\tconst model = useModelMigration('value', 'update:value', true)\n\t\treturn {\n\t\t\tmodel,\n\t\t}\n\t},\n\n\tcomputed: {\n\t\tcomputedId() {\n\t\t\treturn this.$attrs.id && this.$attrs.id !== '' ? this.$attrs.id : this.inputName\n\t\t},\n\n\t\tinputName() {\n\t\t\treturn 'input' + GenRandomId()\n\t\t},\n\n\t\thasPlaceholder() {\n\t\t\treturn this.placeholder !== '' && this.placeholder !== undefined\n\t\t},\n\n\t\tcomputedPlaceholder() {\n\t\t\tif (this.hasPlaceholder) {\n\t\t\t\treturn this.placeholder\n\t\t\t}\n\t\t\tif (isLegacy32) {\n\t\t\t\treturn this.label\n\t\t\t}\n\t\t\treturn undefined\n\t\t},\n\n\t\tisValidLabel() {\n\t\t\tconst isValidLabel = this.label || this.labelOutside\n\t\t\tif (!isValidLabel) {\n\t\t\t\tconsole.warn('You need to add a label to the NcInputField component. Either use the prop label or use an external one, as per the example in the documentation.')\n\t\t\t}\n\t\t\treturn isValidLabel\n\t\t},\n\n\t\tariaDescribedby() {\n\t\t\tconst ariaDescribedby = []\n\t\t\tif (this.helperText.length > 0) {\n\t\t\t\tariaDescribedby.push(`${this.inputName}-helper-text`)\n\t\t\t}\n\t\t\tif (this.$attrs['aria-describedby']) {\n\t\t\t\tariaDescribedby.push(this.$attrs['aria-describedby'])\n\t\t\t}\n\t\t\treturn ariaDescribedby.join(' ') || null\n\t\t},\n\t},\n\n\tmethods: {\n\t\t/**\n\t\t * Focus the input element\n\t\t *\n\t\t * @public\n\t\t */\n\t\tfocus() {\n\t\t\tthis.$refs.input.focus()\n\t\t},\n\n\t\t/**\n\t\t * Select all the text in the input\n\t\t *\n\t\t * @public\n\t\t */\n\t\tselect() {\n\t\t\tthis.$refs.input.select()\n\t\t},\n\n\t\thandleInput(event) {\n\t\t\tthis.model = event.target.value\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n\n.textarea {\n\tposition: relative;\n\twidth: 100%;\n\tborder-radius: var(--border-radius-large);\n\tmargin-block-start: 6px; // for the label in active state\n\tresize: vertical;\n\n\t&__main-wrapper {\n\t\tposition: relative;\n\t}\n\n\t&--disabled {\n\t\topacity: 0.7;\n\t\tfilter: saturate(0.7);\n\t}\n\n\t&__input {\n\t\tmargin: 0;\n\t\tpadding-inline: 10px 6px; // align with label 8px margin label + 4px padding label - 2px border input\n\t\twidth: 100%;\n\t\theight: calc(var(--default-clickable-area) * 2);\n\t\tfont-size: var(--default-font-size);\n\t\ttext-overflow: ellipsis;\n\n\t\tbackground-color: var(--color-main-background);\n\t\tcolor: var(--color-main-text);\n\t\tborder: var(--border-width-input, 2px) solid var(--color-border-maxcontrast);\n\t\tborder-radius: var(--border-radius-large);\n\n\t\tcursor: pointer;\n\n\t\t&:active:not([disabled]),\n\t\t&:hover:not([disabled]),\n\t\t&:focus:not([disabled]) {\n\t\t\tborder-width: var(--border-width-input-focused, 2px);\n\t\t\tborder-color: var(--color-main-text);\n\t\t\tbox-shadow: 0 0 0 2px var(--color-main-background) !important;\n\t\t}\n\n\t\t// Hide placeholder while not focussed -> show label instead (only if internal label is used)\n\t\t&:not(:focus,&--label-outside)::placeholder {\n\t\t\topacity: 0;\n\t\t}\n\n\t\t&:focus {\n\t\t\tcursor: text;\n\t\t}\n\n\t\t&:disabled {\n\t\t\tcursor: default;\n\t\t}\n\n\t\t&:focus-visible {\n\t\t\tbox-shadow: unset !important; // Override server rules\n\t\t}\n\n\t\t&--success {\n\t\t\tborder-color: var(--color-success) !important; //Override hover border color\n\t\t\t&:focus-visible {\n\t\t\t\tbox-shadow: rgb(248, 250, 252) 0px 0px 0px 2px, var(--color-primary-element) 0px 0px 0px 4px, rgba(0, 0, 0, 0.05) 0px 1px 2px 0px\n\t\t\t}\n\t\t}\n\n\t\t&--error {\n\t\t\tborder-color: var(--color-error) !important; //Override hover border color\n\t\t\t&:focus-visible {\n\t\t\t\tbox-shadow: rgb(248, 250, 252) 0px 0px 0px 2px, var(--color-primary-element) 0px 0px 0px 4px, rgba(0, 0, 0, 0.05) 0px 1px 2px 0px\n\t\t\t}\n\t\t}\n\t}\n\n\t&__label {\n\t\tposition: absolute;\n\t\tmargin-inline: 12px 0;\n\t\tmax-width: fit-content;\n\t\tinset-block-start: 11px;\n\t\tinset-inline: 0;\n\t\t// Fix color so that users do not think the input already has content\n\t\tcolor: var(--color-text-maxcontrast);\n\t\t// only one line labels are allowed\n\t\twhite-space: nowrap;\n\t\toverflow: hidden;\n\t\ttext-overflow: ellipsis;\n\t\t// forward events to input\n\t\tpointer-events: none;\n\t\t// Position transition\n\t\ttransition: height var(--animation-quick), inset-block-start var(--animation-quick), font-size var(--animation-quick), color var(--animation-quick), background-color var(--animation-quick) var(--animation-slow);\n\t}\n\n\t&__input:focus + &__label,\n\t&__input:not(:placeholder-shown) + &__label {\n\t\tinset-block-start: -10px;\n\t\tline-height: 1.5; // minimum allowed line height for accessibility\n\t\tfont-size: 13px; // minimum allowed font size for accessibility\n\t\tfont-weight: 500;\n\t\tcolor: var(--color-main-text);\n\t\tbackground-color: var(--color-main-background);\n\t\tpadding-inline: 4px;\n\t\tmargin-inline-start: 8px;\n\n\t\ttransition: height var(--animation-quick), inset-block-start var(--animation-quick), font-size var(--animation-quick), color var(--animation-quick);\n\t}\n\n\t&__helper-text-message {\n\t\tpadding-block: 4px;\n\t\tdisplay: flex;\n\t\talign-items: center;\n\n\t\t&__icon {\n\t\t\tmargin-inline-end: 8px;\n\t\t}\n\n\t\t&--error {\n\t\t\tcolor: var(--color-error-text);\n\t\t}\n\n\t\t&--success {\n\t\t\tcolor: var(--color-success-text);\n\t\t}\n\t}\n}\n</style>\n"],"names":["AlertCircle","Check","useModelMigration","GenRandomId","isLegacy32"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"NcTextArea-C10S9llK.mjs","sources":["../../src/components/NcTextArea/NcTextArea.vue"],"sourcesContent":["<!--\n - SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors\n - SPDX-License-Identifier: AGPL-3.0-or-later\n-->\n\n<docs>\n### Description\n\nThis component is a textarea field.\nIt extends and styles an HTMLTextAreaElement.\n\n```\n<template>\n\t<div class=\"wrapper\">\n\t\t<NcTextArea label=\"Text area\"\n\t\t\tv-model=\"text1\"\n\t\t\tplaceholder=\"Placeholders are possible\"\n\t\t\thelper-text=\"This is a regular helper text.\" >\n\t\t</NcTextArea>\n\t\t<NcTextArea label=\"Success state\"\n\t\t\tv-model=\"text2\"\n\t\t\t:success=\"true\">\n\t\t</NcTextArea>\n\t\t<NcTextArea label=\"Error state\"\n\t\t\tv-model=\"text3\"\n\t\t\tplaceholder=\"Enter something valid\"\n\t\t\thelper-text=\"Helper texts will be styled accordingly.\"\n\t\t\t:error=\"true\">\n\t\t</NcTextArea>\n\t\t<NcTextArea label=\"Disabled\"\n\t\t\tv-model=\"text4\"\n\t\t\t:disabled=\"true\" />\n\t\t<NcTextArea label=\"Disabled + Success\"\n\t\t\tv-model=\"text5\"\n\t\t\t:success=\"true\"\n\t\t\t:disabled=\"true\" />\n\t\t<div class=\"external-label\">\n\t\t\t<label for=\"textField\">External label</label>\n\t\t\t<NcTextArea id=\"textField\"\n\t\t\t\tv-model=\"text6\"\n\t\t\t\t:label-outside=\"true\"\n\t\t\t\tplaceholder=\"Text area with external label\" />\n\t\t</div>\n\t\t<NcTextArea label=\"Custom size and no resize\"\n\t\t\tv-model=\"text7\"\n\t\t\tresize=\"none\"\n\t\t\trows=\"5\" />\n\t\t</NcTextArea>\n\t</div>\n</template>\n\n<script>\n\texport default {\n\t\tdata() {\n\t\t\treturn {\n\t\t\t\ttext1: '',\n\t\t\t\ttext2: '',\n\t\t\t\ttext3: '',\n\t\t\t\ttext4: '',\n\t\t\t\ttext5: '',\n\t\t\t\ttext6: '',\n\t\t\t\ttext7: '',\n\t\t\t}\n\t\t},\n\t}\n</script>\n\n<style lang=\"scss\" scoped>\n.wrapper {\n\tdisplay: flex;\n\tgap: 4px;\n\talign-items: flex-end;\n\tflex-wrap: wrap;\n}\n\n.external-label {\n\tdisplay: flex;\n\twidth: 100%;\n\talign-items: center;\n\tgap: 14px;\n\n\t> label {\n\t\tflex-shrink: 0;\n\t}\n}\n</style>\n```\n</docs>\n\n<template>\n\t<div class=\"textarea\" :class=\"{ 'textarea--disabled': disabled }\">\n\t\t<div class=\"textarea__main-wrapper\">\n\t\t\t<textarea v-bind=\"$attrs\"\n\t\t\t\t:id=\"computedId\"\n\t\t\t\tref=\"input\"\n\t\t\t\tclass=\"textarea__input\"\n\t\t\t\t:disabled=\"disabled\"\n\t\t\t\t:placeholder=\"computedPlaceholder\"\n\t\t\t\t:aria-describedby=\"ariaDescribedby\"\n\t\t\t\taria-live=\"polite\"\n\t\t\t\t:class=\"[inputClass,\n\t\t\t\t\t{\n\t\t\t\t\t\t'textarea__input--label-outside': labelOutside,\n\t\t\t\t\t\t'textarea__input--success': success,\n\t\t\t\t\t\t'textarea__input--error': error,\n\t\t\t\t\t}]\"\n\t\t\t\t:style=\"{ resize: resize }\"\n\t\t\t\t:value=\"model\"\n\t\t\t\tv-on=\"$listeners\"\n\t\t\t\t@input=\"handleInput\" />\n\t\t\t<!-- Label -->\n\t\t\t<label v-if=\"!labelOutside && isValidLabel\"\n\t\t\t\tclass=\"textarea__label\"\n\t\t\t\t:for=\"computedId\">\n\t\t\t\t{{ label }}\n\t\t\t</label>\n\t\t</div>\n\t\t<p v-if=\"helperText.length > 0\"\n\t\t\t:id=\"`${inputName}-helper-text`\"\n\t\t\tclass=\"textarea__helper-text-message\"\n\t\t\t:class=\"{\n\t\t\t\t'textarea__helper-text-message--error': error,\n\t\t\t\t'textarea__helper-text-message--success': success,\n\t\t\t}\">\n\t\t\t<Check v-if=\"success\" class=\"textarea__helper-text-message__icon\" :size=\"18\" />\n\t\t\t<AlertCircle v-else-if=\"error\" class=\"textarea__helper-text-message__icon\" :size=\"18\" />\n\t\t\t{{ helperText }}\n\t\t</p>\n\t</div>\n</template>\n\n<script>\nimport GenRandomId from '../../utils/GenRandomId.js'\n\nimport AlertCircle from 'vue-material-design-icons/AlertCircleOutline.vue'\nimport Check from 'vue-material-design-icons/Check.vue'\nimport { useModelMigration } from '../../composables/useModelMigration.ts'\nimport { isLegacy32 } from '../../utils/legacy.ts'\n\nexport default {\n\tname: 'NcTextArea',\n\n\tcomponents: {\n\t\tAlertCircle,\n\t\tCheck,\n\t},\n\n\tinheritAttrs: false,\n\n\tmodel: {\n\t\tprop: 'modelValue',\n\t\tevent: 'update:modelValue',\n\t},\n\n\tprops: {\n\t\t/**\n\t\t * Removed in v9 - use `modelValue` (`v-model`) instead\n\t\t * @deprecated\n\t\t */\n\t\tvalue: {\n\t\t\ttype: String,\n\t\t\tdefault: undefined,\n\t\t},\n\n\t\t/**\n\t\t * The value of the input field\n\t\t */\n\t\tmodelValue: {\n\t\t\ttype: String,\n\t\t\tdefault: undefined,\n\t\t},\n\n\t\t/**\n\t\t * The input label, always provide one for accessibility purposes.\n\t\t * This will also be used as a placeholder unless the placeholder\n\t\t * prop is populated with a different string.\n\t\t */\n\t\tlabel: {\n\t\t\ttype: String,\n\t\t\tdefault: undefined,\n\t\t},\n\n\t\t/**\n\t\t * Pass in true if you want to use an external label. This is useful\n\t\t * if you need a label that looks different from the one provided by\n\t\t * this component\n\t\t */\n\t\tlabelOutside: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\n\t\t/**\n\t\t * The placeholder of the input. This defaults as the string that's\n\t\t * passed into the label prop. In order to remove the placeholder,\n\t\t * pass in an empty string.\n\t\t */\n\t\tplaceholder: {\n\t\t\ttype: String,\n\t\t\tdefault: undefined,\n\t\t},\n\n\t\t/**\n\t\t * Toggles the success state of the component. Adds a checkmark icon.\n\t\t * this cannot be used together with canClear.\n\t\t */\n\t\tsuccess: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\n\t\t/**\n\t\t * Toggles the error state of the component. Adds an error icon.\n\t\t * this cannot be used together with canClear.\n\t\t */\n\t\terror: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\n\t\t/**\n\t\t * Additional helper text message\n\t\t *\n\t\t * This will be displayed beneath the input field. In case the field is\n\t\t * also marked as having an error, the text will be displayed in red.\n\t\t */\n\t\thelperText: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\n\t\t/**\n\t\t * Disable the input field\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 * Class to add to the input field.\n\t\t * Necessary to use NcInputField in the NcActionInput component.\n\t\t */\n\t\tinputClass: {\n\t\t\ttype: [Object, String],\n\t\t\tdefault: '',\n\t\t},\n\n\t\t/**\n\t\t * The resize CSS property sets whether an element is resizable, and if\n\t\t * so, in which directions.\n\t\t */\n\t\tresize: {\n\t\t\ttype: String,\n\t\t\tdefault: 'both',\n\t\t\tvalidator: (value) => ['both', 'vertical', 'horizontal', 'none'].includes(value),\n\t\t},\n\t},\n\n\temits: [\n\t\t/**\n\t\t * Removed in v9 - use `update:modelValue` (`v-model`) instead\n\t\t * @deprecated\n\t\t */\n\t\t'update:value',\n\t\t'update:modelValue',\n\t\t/** Same as update:modelValue for Vue 2 compatibility */\n\t\t'update:model-value',\n\t],\n\n\tsetup() {\n\t\tconst model = useModelMigration('value', 'update:value', true)\n\t\treturn {\n\t\t\tmodel,\n\t\t}\n\t},\n\n\tcomputed: {\n\t\tcomputedId() {\n\t\t\treturn this.$attrs.id && this.$attrs.id !== '' ? this.$attrs.id : this.inputName\n\t\t},\n\n\t\tinputName() {\n\t\t\treturn 'input' + GenRandomId()\n\t\t},\n\n\t\thasPlaceholder() {\n\t\t\treturn this.placeholder !== '' && this.placeholder !== undefined\n\t\t},\n\n\t\tcomputedPlaceholder() {\n\t\t\tif (this.hasPlaceholder) {\n\t\t\t\treturn this.placeholder\n\t\t\t}\n\t\t\tif (isLegacy32) {\n\t\t\t\treturn this.label\n\t\t\t}\n\t\t\treturn undefined\n\t\t},\n\n\t\tisValidLabel() {\n\t\t\tconst isValidLabel = this.label || this.labelOutside\n\t\t\tif (!isValidLabel) {\n\t\t\t\tconsole.warn('You need to add a label to the NcInputField component. Either use the prop label or use an external one, as per the example in the documentation.')\n\t\t\t}\n\t\t\treturn isValidLabel\n\t\t},\n\n\t\tariaDescribedby() {\n\t\t\tconst ariaDescribedby = []\n\t\t\tif (this.helperText.length > 0) {\n\t\t\t\tariaDescribedby.push(`${this.inputName}-helper-text`)\n\t\t\t}\n\t\t\tif (this.$attrs['aria-describedby']) {\n\t\t\t\tariaDescribedby.push(this.$attrs['aria-describedby'])\n\t\t\t}\n\t\t\treturn ariaDescribedby.join(' ') || null\n\t\t},\n\t},\n\n\tmethods: {\n\t\t/**\n\t\t * Focus the input element\n\t\t *\n\t\t * @public\n\t\t */\n\t\tfocus() {\n\t\t\tthis.$refs.input.focus()\n\t\t},\n\n\t\t/**\n\t\t * Select all the text in the input\n\t\t *\n\t\t * @public\n\t\t */\n\t\tselect() {\n\t\t\tthis.$refs.input.select()\n\t\t},\n\n\t\thandleInput(event) {\n\t\t\tthis.model = event.target.value\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n\n.textarea {\n\tposition: relative;\n\twidth: 100%;\n\tborder-radius: var(--border-radius-large);\n\tmargin-block-start: 6px; // for the label in active state\n\tresize: vertical;\n\n\t&__main-wrapper {\n\t\tposition: relative;\n\t}\n\n\t&--disabled {\n\t\topacity: 0.7;\n\t\tfilter: saturate(0.7);\n\t}\n\n\t&__input {\n\t\tmargin: 0;\n\t\tpadding-inline: 10px 6px; // align with label 8px margin label + 4px padding label - 2px border input\n\t\twidth: 100%;\n\t\theight: calc(var(--default-clickable-area) * 2);\n\t\tfont-size: var(--default-font-size);\n\t\ttext-overflow: ellipsis;\n\n\t\tbackground-color: var(--color-main-background);\n\t\tcolor: var(--color-main-text);\n\t\tborder: var(--border-width-input, 2px) solid var(--color-border-maxcontrast);\n\t\tborder-radius: var(--border-radius-large);\n\n\t\tcursor: pointer;\n\n\t\t&:active:not([disabled]),\n\t\t&:hover:not([disabled]),\n\t\t&:focus:not([disabled]) {\n\t\t\tborder-width: var(--border-width-input-focused, 2px);\n\t\t\tborder-color: var(--color-main-text);\n\t\t\tbox-shadow: 0 0 0 2px var(--color-main-background) !important;\n\t\t}\n\n\t\t// Hide placeholder while not focussed -> show label instead (only if internal label is used)\n\t\t&:not(:focus,&--label-outside)::placeholder {\n\t\t\topacity: 0;\n\t\t}\n\n\t\t&:focus {\n\t\t\tcursor: text;\n\t\t}\n\n\t\t&:disabled {\n\t\t\tcursor: default;\n\t\t}\n\n\t\t&:focus-visible {\n\t\t\tbox-shadow: unset !important; // Override server rules\n\t\t}\n\n\t\t&--success {\n\t\t\tborder-color: var(--color-success) !important; //Override hover border color\n\t\t\t&:focus-visible {\n\t\t\t\tbox-shadow: rgb(248, 250, 252) 0px 0px 0px 2px, var(--color-primary-element) 0px 0px 0px 4px, rgba(0, 0, 0, 0.05) 0px 1px 2px 0px\n\t\t\t}\n\t\t}\n\n\t\t&--error {\n\t\t\tborder-color: var(--color-error) !important; //Override hover border color\n\t\t\t&:focus-visible {\n\t\t\t\tbox-shadow: rgb(248, 250, 252) 0px 0px 0px 2px, var(--color-primary-element) 0px 0px 0px 4px, rgba(0, 0, 0, 0.05) 0px 1px 2px 0px\n\t\t\t}\n\t\t}\n\t}\n\n\t&__label {\n\t\tposition: absolute;\n\t\tmargin-inline: 12px 0;\n\t\tmax-width: fit-content;\n\t\tinset-block-start: 11px;\n\t\tinset-inline: 0;\n\t\t// Fix color so that users do not think the input already has content\n\t\tcolor: var(--color-text-maxcontrast);\n\t\t// only one line labels are allowed\n\t\twhite-space: nowrap;\n\t\toverflow: hidden;\n\t\ttext-overflow: ellipsis;\n\t\t// forward events to input\n\t\tpointer-events: none;\n\t\t// Position transition\n\t\ttransition: height var(--animation-quick), inset-block-start var(--animation-quick), font-size var(--animation-quick), color var(--animation-quick), background-color var(--animation-quick) var(--animation-slow);\n\t}\n\n\t&__input:focus + &__label,\n\t&__input:not(:placeholder-shown) + &__label {\n\t\tinset-block-start: -10px;\n\t\tline-height: 1.5; // minimum allowed line height for accessibility\n\t\tfont-size: 13px; // minimum allowed font size for accessibility\n\t\tfont-weight: 500;\n\t\tcolor: var(--color-main-text);\n\t\tbackground-color: var(--color-main-background);\n\t\tpadding-inline: 4px;\n\t\tmargin-inline-start: 8px;\n\n\t\ttransition: height var(--animation-quick), inset-block-start var(--animation-quick), font-size var(--animation-quick), color var(--animation-quick);\n\t}\n\n\t&__helper-text-message {\n\t\tpadding-block: 4px;\n\t\tdisplay: flex;\n\t\talign-items: center;\n\n\t\t&__icon {\n\t\t\tmargin-inline-end: 8px;\n\t\t}\n\n\t\t&--error {\n\t\t\tcolor: var(--color-error-text);\n\t\t}\n\n\t\t&--success {\n\t\t\tcolor: var(--color-success-text);\n\t\t}\n\t}\n}\n</style>\n"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"NcUserStatusIcon-4MmJE11d.cjs","sources":["../../src/assets/status-icons/user-status-online.svg?raw","../../src/assets/status-icons/user-status-online-legacy.svg?raw","../../src/assets/status-icons/user-status-away.svg?raw","../../src/assets/status-icons/user-status-away-legacy.svg?raw","../../src/assets/status-icons/user-status-busy.svg?raw","../../src/assets/status-icons/user-status-dnd.svg?raw","../../src/assets/status-icons/user-status-dnd-legacy.svg?raw","../../src/assets/status-icons/user-status-invisible.svg?raw","../../src/assets/status-icons/user-status-invisible-legacy.svg?raw","../../src/utils/UserStatus.ts","../../src/components/NcUserStatusIcon/NcUserStatusIcon.vue"],"sourcesContent":["export default \"<!--\\n - SPDX-FileCopyrightText: 2020 Google Inc.\\n - SPDX-License-Identifier: Apache-2.0\\n-->\\n<svg viewBox=\\\"0 -960 960 960\\\" width=\\\"24px\\\" height=\\\"24px\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\">\\n\\t<path\\n\\t\\tfill=\\\"var(--color-success)\\\"\\n\\t\\td=\\\"m424-296 282-282-56-56-226 226-114-114-56 56 170 170Zm56 216q-83 0-156-31.5T197-197q-54-54-85.5-127T80-480q0-83 31.5-156T197-763q54-54 127-85.5T480-880q83 0 156 31.5T763-763q54 54 85.5 127T880-480q0 83-31.5 156T763-197q-54 54-127 85.5T480-80Z\\\"/>\\n</svg>\\n\"","export default \"<!--\\n - SPDX-FileCopyrightText: 2020 Google Inc.\\n - SPDX-License-Identifier: Apache-2.0\\n-->\\n<svg viewBox=\\\"-1 -1 18 18\\\" width=\\\"16\\\" height=\\\"16\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\">\\n\\t<path fill=\\\"var(--color-success)\\\" d=\\\"M4.8 11.2h6.4V4.8H4.8v6.4zM8 0C3.6 0 0 3.6 0 8s3.6 8 8 8 8-3.6 8-8-3.6-8-8-8z\\\" />\\n</svg>\\n\"","export default \"<!--\\n - SPDX-FileCopyrightText: 2020 Google Inc.\\n - SPDX-License-Identifier: Apache-2.0\\n-->\\n<svg viewBox=\\\"0 -960 960 960\\\" width=\\\"24px\\\" height=\\\"24px\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\">\\n\\t<path\\n\\t\\tfill=\\\"var(--color-warning)\\\"\\n\\t\\td=\\\"m612-292 56-56-148-148v-184h-80v216l172 172ZM480-80q-83 0-156-31.5T197-197q-54-54-85.5-127T80-480q0-83 31.5-156T197-763q54-54 127-85.5T480-880q83 0 156 31.5T763-763q54 54 85.5 127T880-480q0 83-31.5 156T763-197q-54 54-127 85.5T480-80Z\\\"/>\\n</svg>\\n\"","export default \"<!--\\n - SPDX-FileCopyrightText: 2020 Google Inc.\\n - SPDX-License-Identifier: Apache-2.0\\n-->\\n<svg viewBox=\\\"-1 -1 18 18\\\" width=\\\"16\\\" height=\\\"16\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\">\\n\\t<path fill=\\\"none\\\" d=\\\"M-4-4h24v24H-4z\\\" />\\n\\t<path fill=\\\"var(--color-warning)\\\" d=\\\"M6.9.1C3 .6-.1 4-.1 8c0 4.4 3.6 8 8 8 4 0 7.4-3 8-6.9-1.2 1.3-2.9 2.1-4.7 2.1-3.5 0-6.4-2.9-6.4-6.4 0-1.9.8-3.6 2.1-4.7z\\\" />\\n</svg>\\n\"","export default \"<!--\\r\\n - SPDX-FileCopyrightText: 2020 Google Inc.\\r\\n - SPDX-License-Identifier: Apache-2.0\\r\\n-->\\r\\n<svg viewBox=\\\"0 -960 960 960\\\" width=\\\"24px\\\" height=\\\"24px\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\">\\r\\n\\t<path\\r\\n\\t\\tfill=\\\"var(--color-error)\\\"\\r\\n\\t\\td=\\\"M480-80q-83 0-156-31.5T197-197q-54-54-85.5-127T80-480q0-83 31.5-156T197-763q54-54 127-85.5T480-880q83 0 156 31.5T763-763q54 54 85.5 127T880-480q0 83-31.5 156T763-197q-54 54-127 85.5T480-80Z\\\"/>\\r\\n</svg>\\r\\n\"","export default \"<!--\\n - SPDX-FileCopyrightText: 2020 Google Inc.\\n - SPDX-License-Identifier: Apache-2.0\\n-->\\n<svg viewBox=\\\"0 -960 960 960\\\" width=\\\"24px\\\" height=\\\"24px\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\">\\n\\t<path\\n\\t\\tfill=\\\"var(--color-error)\\\"\\n\\t\\td=\\\"M280-440h400v-80H280v80ZM480-80q-83 0-156-31.5T197-197q-54-54-85.5-127T80-480q0-83 31.5-156T197-763q54-54 127-85.5T480-880q83 0 156 31.5T763-763q54 54 85.5 127T880-480q0 83-31.5 156T763-197q-54 54-127 85.5T480-80Z\\\"/>\\n</svg>\\n\"","export default \"<!--\\n - SPDX-FileCopyrightText: 2020 Google Inc.\\n - SPDX-License-Identifier: Apache-2.0\\n-->\\n<svg viewBox=\\\"-1 -1 18 18\\\" width=\\\"16\\\" height=\\\"16\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\">\\n\\t<path fill=\\\"none\\\" d=\\\"M-4-4h24v24H-4V-4z\\\" />\\n\\t<path fill=\\\"var(--color-error)\\\" d=\\\"M8 0C3.6 0 0 3.6 0 8s3.6 8 8 8 8-3.6 8-8-3.6-8-8-8z\\\" />\\n\\t<path fill=\\\"#fdffff\\\" d=\\\"M5 6.5h6c.8 0 1.5.7 1.5 1.5s-.7 1.5-1.5 1.5H5c-.8 0-1.5-.7-1.5-1.5S4.2 6.5 5 6.5z\\\" />\\n</svg>\\n\"","export default \"<!--\\n - SPDX-FileCopyrightText: 2020 Google Inc.\\n - SPDX-License-Identifier: Apache-2.0\\n-->\\n<svg viewBox=\\\"0 -960 960 960\\\" width=\\\"24px\\\" height=\\\"24px\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\">\\n\\t<path\\n\\t\\tfill=\\\"var(--color-text-maxcontrast)\\\"\\n\\t\\td=\\\"M480-80q-83 0-156-31.5T197-197q-54-54-85.5-127T80-480q0-83 31.5-156T197-763q54-54 127-85.5T480-880q83 0 156 31.5T763-763q54 54 85.5 127T880-480q0 83-31.5 156T763-197q-54 54-127 85.5T480-80Zm0-80q134 0 227-93t93-227q0-134-93-227t-227-93q-134 0-227 93t-93 227q0 134 93 227t227 93Zm0-320Z\\\"/>\\n</svg>\\n\"","export default \"<!--\\n - SPDX-FileCopyrightText: 2020 Google Inc.\\n - SPDX-License-Identifier: Apache-2.0\\n-->\\n<svg viewBox=\\\"-1 -1 18 18\\\" width=\\\"16\\\" height=\\\"16\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\">\\n\\t<path fill=\\\"none\\\" d=\\\"M-4-4h24v24H-4V-4z\\\" />\\n\\t<path d=\\\"M8 0C3.6 0 0 3.6 0 8s3.6 8 8 8 8-3.6 8-8-3.6-8-8-8zm0 3.2c2.7 0 4.8 2.1 4.8 4.8s-2.1 4.8-4.8 4.8S3.2 10.7 3.2 8 5.3 3.2 8 3.2z\\\" />\\n</svg>\\n\"","/**\n * SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport { t } from '../l10n.js'\n\ntype Status = 'online' | 'away' | 'busy' | 'dnd' | 'invisible' | 'offline'\n\nexport const getUserStatusText = (status: Status): string => {\n\tswitch (status) {\n\tcase 'away': return t('away') // TRANSLATORS: User status if the user is currently away from keyboard\n\tcase 'busy': return t('busy')\n\tcase 'dnd': return t('do not disturb')\n\tcase 'online': return t('online')\n\tcase 'invisible': return t('invisible')\n\tcase 'offline': return t('offline')\n\tdefault: return status\n\t}\n}\n","<!--\n - SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors\n - SPDX-License-Identifier: AGPL-3.0-or-later\n-->\n\n<docs>\n### Description\n\nThis component displays a user status icon.\n\n### Example\n\n```vue\n<template>\n\t<div class=\"grid\">\n\t\t<NcUserStatusIcon status=\"online\" />\n\t\t<span>Online</span>\n\t\t<NcUserStatusIcon status=\"away\" />\n\t\t<span>Away</span>\n\t\t<NcUserStatusIcon status=\"busy\" />\n\t\t<span>Busy</span>\n\t\t<NcUserStatusIcon status=\"dnd\" />\n\t\t<span>Do not disturb</span>\n\t\t<NcUserStatusIcon status=\"invisible\" />\n\t\t<span>Invisible</span>\n\t\t<NcUserStatusIcon status=\"offline\" />\n\t\t<span>Offline</span>\n\t</div>\n</template>\n\n<style>\n.grid {\n\tdisplay: grid;\n\tgrid-template-columns: 20px 1fr;\n\tgap: 8px;\n\talign-items: center;\n\twidth: fit-content;\n}\n</style>\n```\n</docs>\n\n<template>\n\t<span v-if=\"activeStatus\"\n\t\tclass=\"user-status-icon\"\n\t\t:class=\"{\n\t\t\t'user-status-icon--invisible': ['invisible', 'offline'].includes(status),\n\t\t}\"\n\t\trole=\"img\"\n\t\t:aria-hidden=\"ariaHidden\"\n\t\t:aria-label=\"ariaLabel\"\n\t\tv-html=\"activeSvg\" /> <!-- eslint-disable-line vue/no-v-html -->\n</template>\n\n<script>\nimport axios from '@nextcloud/axios'\nimport { generateOcsUrl } from '@nextcloud/router'\nimport { getCapabilities } from '@nextcloud/capabilities'\nimport { loadState } from '@nextcloud/initial-state'\n\nimport onlineSvg from '../../assets/status-icons/user-status-online.svg?raw'\nimport onlineLegacySvg from '../../assets/status-icons/user-status-online-legacy.svg?raw'\nimport awaySvg from '../../assets/status-icons/user-status-away.svg?raw'\nimport awayLegacySvg from '../../assets/status-icons/user-status-away-legacy.svg?raw'\nimport busySvg from '../../assets/status-icons/user-status-busy.svg?raw'\nimport dndSvg from '../../assets/status-icons/user-status-dnd.svg?raw'\nimport dndLegacySvg from '../../assets/status-icons/user-status-dnd-legacy.svg?raw'\nimport invisibleSvg from '../../assets/status-icons/user-status-invisible.svg?raw'\nimport invisibleLegacySvg from '../../assets/status-icons/user-status-invisible-legacy.svg?raw'\n\nimport { getUserStatusText } from '../../utils/UserStatus.ts'\nimport { t } from '../../l10n.js'\n\nconst [major] = loadState('core', 'config', { version: '32.0' }).version.split('.', 2) ?? []\nconst isLegacy = major && Number.parseInt(major) < 32\nconst matchSvg = {\n\tonline: isLegacy ? onlineLegacySvg : onlineSvg,\n\taway: isLegacy ? awayLegacySvg : awaySvg,\n\tbusy: isLegacy ? awayLegacySvg : busySvg,\n\tdnd: isLegacy ? dndLegacySvg : dndSvg,\n\tinvisible: isLegacy ? invisibleLegacySvg : invisibleSvg,\n\toffline: isLegacy ? invisibleLegacySvg : invisibleSvg,\n}\n\nexport default {\n\tname: 'NcUserStatusIcon',\n\n\tprops: {\n\t\t/**\n\t\t * Set the user id to fetch the status\n\t\t */\n\t\tuser: {\n\t\t\ttype: String,\n\t\t\tdefault: null,\n\t\t},\n\n\t\t/**\n\t\t * Set the status\n\t\t *\n\t\t * @type {'online' | 'away' | 'busy' | 'dnd' | 'invisible' | 'offline'}\n\t\t */\n\t\tstatus: {\n\t\t\ttype: String,\n\t\t\tdefault: null,\n\t\t\tvalidator: (value) => [\n\t\t\t\t'online',\n\t\t\t\t'away',\n\t\t\t\t'busy',\n\t\t\t\t'dnd',\n\t\t\t\t'invisible',\n\t\t\t\t'offline',\n\t\t\t].includes(value),\n\t\t},\n\n\t\t/**\n\t\t * Set the `aria-hidden` attribute\n\t\t *\n\t\t * @type {'true' | 'false'}\n\t\t */\n\t\tariaHidden: {\n\t\t\ttype: String,\n\t\t\tdefault: null,\n\t\t\tvalidator: (value) => [\n\t\t\t\t'true',\n\t\t\t\t'false',\n\t\t\t].includes(value),\n\t\t},\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tfetchedUserStatus: null,\n\t\t}\n\t},\n\n\tcomputed: {\n\t\tactiveStatus() {\n\t\t\treturn this.status ?? this.fetchedUserStatus\n\t\t},\n\n\t\tactiveSvg() {\n\t\t\treturn matchSvg[this.activeStatus] ?? null\n\t\t},\n\n\t\tariaLabel() {\n\t\t\tif (this.ariaHidden === 'true') {\n\t\t\t\treturn null\n\t\t\t}\n\t\t\treturn t('User status: {status}', { status: getUserStatusText(this.activeStatus) })\n\t\t},\n\t},\n\n\twatch: {\n\t\tuser: {\n\t\t\timmediate: true,\n\t\t\tasync handler(user, _oldUser) {\n\t\t\t\tif (!user || !getCapabilities()?.user_status?.enabled) {\n\t\t\t\t\tthis.fetchedUserStatus = null\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\ttry {\n\t\t\t\t\tconst { data } = await axios.get(generateOcsUrl('/apps/user_status/api/v1/statuses/{user}', { user }))\n\t\t\t\t\tthis.fetchedUserStatus = data.ocs?.data?.status\n\t\t\t\t} catch (error) {\n\t\t\t\t\tthis.fetchedUserStatus = null\n\t\t\t\t}\n\t\t\t},\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.user-status-icon {\n\tdisplay: flex;\n\tjustify-content: center;\n\talign-items: center;\n\n\t&--invisible {\n\t\tfilter: var(--background-invert-if-dark);\n\t}\n\n\t:deep(svg) {\n\t\twidth: 100%;\n\t\theight: 100%;\n\t}\n}\n</style>\n"],"names":["t","loadState","getCapabilities","axios","generateOcsUrl"],"mappings":";;;;;;;;;AAAA,MAAe,YAAA;ACAf,MAAe,kBAAA;ACAf,MAAe,UAAA;ACAf,MAAe,gBAAA;ACAf,MAAe,UAAA;ACAf,MAAe,SAAA;ACAf,MAAe,eAAA;ACAf,MAAe,eAAA;ACAf,MAAe,qBAAA;;ACSF,MAAA,oBAAoB,CAAC,WAA2B;AAC5D,UAAQ,QAAQ;AAAA,IAChB,KAAK;AAAQ,aAAOA,MAAAA,EAAE,MAAM;AAAA;AAAA,IAC5B,KAAK;AAAQ,aAAOA,MAAAA,EAAE,MAAM;AAAA,IAC5B,KAAK;AAAO,aAAOA,MAAAA,EAAE,gBAAgB;AAAA,IACrC,KAAK;AAAU,aAAOA,MAAAA,EAAE,QAAQ;AAAA,IAChC,KAAK;AAAa,aAAOA,MAAAA,EAAE,WAAW;AAAA,IACtC,KAAK;AAAW,aAAOA,MAAAA,EAAE,SAAS;AAAA,IAClC;AAAgB,aAAA;AAAA,EAAA;AAEjB;;ACsDA,MAAA,CAAA,KAAA,IAAAC,aAAAA,UAAA,QAAA,UAAA,EAAA,SAAA,OAAA,CAAA,EAAA,QAAA,MAAA,KAAA,CAAA,KAAA,CAAA;AACA,MAAA,WAAA,SAAA,OAAA,SAAA,KAAA,IAAA;AACA,MAAA,WAAA;AAAA,EACA,QAAA,WAAA,kBAAA;AAAA,EACA,MAAA,WAAA,gBAAA;AAAA,EACA,MAAA,WAAA,gBAAA;AAAA,EACA,KAAA,WAAA,eAAA;AAAA,EACA,WAAA,WAAA,qBAAA;AAAA,EACA,SAAA,WAAA,qBAAA;AACA;AAEA,MAAA,YAAA;AAAA,EACA,MAAA;AAAA,EAEA,OAAA;AAAA;AAAA;AAAA;AAAA,IAIA,MAAA;AAAA,MACA,MAAA;AAAA,MACA,SAAA;AAAA,IACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAOA,QAAA;AAAA,MACA,MAAA;AAAA,MACA,SAAA;AAAA,MACA,WAAA,CAAA,UAAA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACA,EAAA,SAAA,KAAA;AAAA,IACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAOA,YAAA;AAAA,MACA,MAAA;AAAA,MACA,SAAA;AAAA,MACA,WAAA,CAAA,UAAA;AAAA,QACA;AAAA,QACA;AAAA,MACA,EAAA,SAAA,KAAA;AAAA,IACA;AAAA,EACA;AAAA,EAEA,OAAA;AACA,WAAA;AAAA,MACA,mBAAA;AAAA,IACA;AAAA,EACA;AAAA,EAEA,UAAA;AAAA,IACA,eAAA;AACA,aAAA,KAAA,UAAA,KAAA;AAAA,IACA;AAAA,IAEA,YAAA;AACA,aAAA,SAAA,KAAA,YAAA,KAAA;AAAA,IACA;AAAA,IAEA,YAAA;AACA,UAAA,KAAA,eAAA,QAAA;AACA,eAAA;AAAA,MACA;AACA,aAAAD,MAAAA,EAAA,yBAAA,EAAA,QAAA,kBAAA,KAAA,YAAA,EAAA,CAAA;AAAA,IACA;AAAA,EACA;AAAA,EAEA,OAAA;AAAA,IACA,MAAA;AAAA,MACA,WAAA;AAAA,MACA,MAAA,QAAA,MAAA,UAAA;AACA,YAAA,CAAA,QAAA,CAAAE,aAAA,gBAAA,GAAA,aAAA,SAAA;AACA,eAAA,oBAAA;AACA;AAAA,QACA;AACA,YAAA;AACA,gBAAA,EAAA,KAAA,IAAA,MAAAC,eAAA,QAAA,IAAAC,sBAAA,4CAAA,EAAA,MAAA,CAAA;AACA,eAAA,oBAAA,KAAA,KAAA,MAAA;AAAA,QACA,SAAA,OAAA;AACA,eAAA,oBAAA;AAAA,QACA;AAAA,MACA;AAAA,IACA;AAAA,EACA;AACA;;;;;;;;;;;;;;;;;;;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"NcUserStatusIcon-C1nS9t71.mjs","sources":["../../src/assets/status-icons/user-status-online.svg?raw","../../src/assets/status-icons/user-status-online-legacy.svg?raw","../../src/assets/status-icons/user-status-away.svg?raw","../../src/assets/status-icons/user-status-away-legacy.svg?raw","../../src/assets/status-icons/user-status-busy.svg?raw","../../src/assets/status-icons/user-status-dnd.svg?raw","../../src/assets/status-icons/user-status-dnd-legacy.svg?raw","../../src/assets/status-icons/user-status-invisible.svg?raw","../../src/assets/status-icons/user-status-invisible-legacy.svg?raw","../../src/utils/UserStatus.ts","../../src/components/NcUserStatusIcon/NcUserStatusIcon.vue"],"sourcesContent":["export default \"<!--\\n - SPDX-FileCopyrightText: 2020 Google Inc.\\n - SPDX-License-Identifier: Apache-2.0\\n-->\\n<svg viewBox=\\\"0 -960 960 960\\\" width=\\\"24px\\\" height=\\\"24px\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\">\\n\\t<path\\n\\t\\tfill=\\\"var(--color-success)\\\"\\n\\t\\td=\\\"m424-296 282-282-56-56-226 226-114-114-56 56 170 170Zm56 216q-83 0-156-31.5T197-197q-54-54-85.5-127T80-480q0-83 31.5-156T197-763q54-54 127-85.5T480-880q83 0 156 31.5T763-763q54 54 85.5 127T880-480q0 83-31.5 156T763-197q-54 54-127 85.5T480-80Z\\\"/>\\n</svg>\\n\"","export default \"<!--\\n - SPDX-FileCopyrightText: 2020 Google Inc.\\n - SPDX-License-Identifier: Apache-2.0\\n-->\\n<svg viewBox=\\\"-1 -1 18 18\\\" width=\\\"16\\\" height=\\\"16\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\">\\n\\t<path fill=\\\"var(--color-success)\\\" d=\\\"M4.8 11.2h6.4V4.8H4.8v6.4zM8 0C3.6 0 0 3.6 0 8s3.6 8 8 8 8-3.6 8-8-3.6-8-8-8z\\\" />\\n</svg>\\n\"","export default \"<!--\\n - SPDX-FileCopyrightText: 2020 Google Inc.\\n - SPDX-License-Identifier: Apache-2.0\\n-->\\n<svg viewBox=\\\"0 -960 960 960\\\" width=\\\"24px\\\" height=\\\"24px\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\">\\n\\t<path\\n\\t\\tfill=\\\"var(--color-warning)\\\"\\n\\t\\td=\\\"m612-292 56-56-148-148v-184h-80v216l172 172ZM480-80q-83 0-156-31.5T197-197q-54-54-85.5-127T80-480q0-83 31.5-156T197-763q54-54 127-85.5T480-880q83 0 156 31.5T763-763q54 54 85.5 127T880-480q0 83-31.5 156T763-197q-54 54-127 85.5T480-80Z\\\"/>\\n</svg>\\n\"","export default \"<!--\\n - SPDX-FileCopyrightText: 2020 Google Inc.\\n - SPDX-License-Identifier: Apache-2.0\\n-->\\n<svg viewBox=\\\"-1 -1 18 18\\\" width=\\\"16\\\" height=\\\"16\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\">\\n\\t<path fill=\\\"none\\\" d=\\\"M-4-4h24v24H-4z\\\" />\\n\\t<path fill=\\\"var(--color-warning)\\\" d=\\\"M6.9.1C3 .6-.1 4-.1 8c0 4.4 3.6 8 8 8 4 0 7.4-3 8-6.9-1.2 1.3-2.9 2.1-4.7 2.1-3.5 0-6.4-2.9-6.4-6.4 0-1.9.8-3.6 2.1-4.7z\\\" />\\n</svg>\\n\"","export default \"<!--\\r\\n - SPDX-FileCopyrightText: 2020 Google Inc.\\r\\n - SPDX-License-Identifier: Apache-2.0\\r\\n-->\\r\\n<svg viewBox=\\\"0 -960 960 960\\\" width=\\\"24px\\\" height=\\\"24px\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\">\\r\\n\\t<path\\r\\n\\t\\tfill=\\\"var(--color-error)\\\"\\r\\n\\t\\td=\\\"M480-80q-83 0-156-31.5T197-197q-54-54-85.5-127T80-480q0-83 31.5-156T197-763q54-54 127-85.5T480-880q83 0 156 31.5T763-763q54 54 85.5 127T880-480q0 83-31.5 156T763-197q-54 54-127 85.5T480-80Z\\\"/>\\r\\n</svg>\\r\\n\"","export default \"<!--\\n - SPDX-FileCopyrightText: 2020 Google Inc.\\n - SPDX-License-Identifier: Apache-2.0\\n-->\\n<svg viewBox=\\\"0 -960 960 960\\\" width=\\\"24px\\\" height=\\\"24px\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\">\\n\\t<path\\n\\t\\tfill=\\\"var(--color-error)\\\"\\n\\t\\td=\\\"M280-440h400v-80H280v80ZM480-80q-83 0-156-31.5T197-197q-54-54-85.5-127T80-480q0-83 31.5-156T197-763q54-54 127-85.5T480-880q83 0 156 31.5T763-763q54 54 85.5 127T880-480q0 83-31.5 156T763-197q-54 54-127 85.5T480-80Z\\\"/>\\n</svg>\\n\"","export default \"<!--\\n - SPDX-FileCopyrightText: 2020 Google Inc.\\n - SPDX-License-Identifier: Apache-2.0\\n-->\\n<svg viewBox=\\\"-1 -1 18 18\\\" width=\\\"16\\\" height=\\\"16\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\">\\n\\t<path fill=\\\"none\\\" d=\\\"M-4-4h24v24H-4V-4z\\\" />\\n\\t<path fill=\\\"var(--color-error)\\\" d=\\\"M8 0C3.6 0 0 3.6 0 8s3.6 8 8 8 8-3.6 8-8-3.6-8-8-8z\\\" />\\n\\t<path fill=\\\"#fdffff\\\" d=\\\"M5 6.5h6c.8 0 1.5.7 1.5 1.5s-.7 1.5-1.5 1.5H5c-.8 0-1.5-.7-1.5-1.5S4.2 6.5 5 6.5z\\\" />\\n</svg>\\n\"","export default \"<!--\\n - SPDX-FileCopyrightText: 2020 Google Inc.\\n - SPDX-License-Identifier: Apache-2.0\\n-->\\n<svg viewBox=\\\"0 -960 960 960\\\" width=\\\"24px\\\" height=\\\"24px\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\">\\n\\t<path\\n\\t\\tfill=\\\"var(--color-text-maxcontrast)\\\"\\n\\t\\td=\\\"M480-80q-83 0-156-31.5T197-197q-54-54-85.5-127T80-480q0-83 31.5-156T197-763q54-54 127-85.5T480-880q83 0 156 31.5T763-763q54 54 85.5 127T880-480q0 83-31.5 156T763-197q-54 54-127 85.5T480-80Zm0-80q134 0 227-93t93-227q0-134-93-227t-227-93q-134 0-227 93t-93 227q0 134 93 227t227 93Zm0-320Z\\\"/>\\n</svg>\\n\"","export default \"<!--\\n - SPDX-FileCopyrightText: 2020 Google Inc.\\n - SPDX-License-Identifier: Apache-2.0\\n-->\\n<svg viewBox=\\\"-1 -1 18 18\\\" width=\\\"16\\\" height=\\\"16\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\">\\n\\t<path fill=\\\"none\\\" d=\\\"M-4-4h24v24H-4V-4z\\\" />\\n\\t<path d=\\\"M8 0C3.6 0 0 3.6 0 8s3.6 8 8 8 8-3.6 8-8-3.6-8-8-8zm0 3.2c2.7 0 4.8 2.1 4.8 4.8s-2.1 4.8-4.8 4.8S3.2 10.7 3.2 8 5.3 3.2 8 3.2z\\\" />\\n</svg>\\n\"","/**\n * SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport { t } from '../l10n.js'\n\ntype Status = 'online' | 'away' | 'busy' | 'dnd' | 'invisible' | 'offline'\n\nexport const getUserStatusText = (status: Status): string => {\n\tswitch (status) {\n\tcase 'away': return t('away') // TRANSLATORS: User status if the user is currently away from keyboard\n\tcase 'busy': return t('busy')\n\tcase 'dnd': return t('do not disturb')\n\tcase 'online': return t('online')\n\tcase 'invisible': return t('invisible')\n\tcase 'offline': return t('offline')\n\tdefault: return status\n\t}\n}\n","<!--\n - SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors\n - SPDX-License-Identifier: AGPL-3.0-or-later\n-->\n\n<docs>\n### Description\n\nThis component displays a user status icon.\n\n### Example\n\n```vue\n<template>\n\t<div class=\"grid\">\n\t\t<NcUserStatusIcon status=\"online\" />\n\t\t<span>Online</span>\n\t\t<NcUserStatusIcon status=\"away\" />\n\t\t<span>Away</span>\n\t\t<NcUserStatusIcon status=\"busy\" />\n\t\t<span>Busy</span>\n\t\t<NcUserStatusIcon status=\"dnd\" />\n\t\t<span>Do not disturb</span>\n\t\t<NcUserStatusIcon status=\"invisible\" />\n\t\t<span>Invisible</span>\n\t\t<NcUserStatusIcon status=\"offline\" />\n\t\t<span>Offline</span>\n\t</div>\n</template>\n\n<style>\n.grid {\n\tdisplay: grid;\n\tgrid-template-columns: 20px 1fr;\n\tgap: 8px;\n\talign-items: center;\n\twidth: fit-content;\n}\n</style>\n```\n</docs>\n\n<template>\n\t<span v-if=\"activeStatus\"\n\t\tclass=\"user-status-icon\"\n\t\t:class=\"{\n\t\t\t'user-status-icon--invisible': ['invisible', 'offline'].includes(status),\n\t\t}\"\n\t\trole=\"img\"\n\t\t:aria-hidden=\"ariaHidden\"\n\t\t:aria-label=\"ariaLabel\"\n\t\tv-html=\"activeSvg\" /> <!-- eslint-disable-line vue/no-v-html -->\n</template>\n\n<script>\nimport axios from '@nextcloud/axios'\nimport { generateOcsUrl } from '@nextcloud/router'\nimport { getCapabilities } from '@nextcloud/capabilities'\nimport { loadState } from '@nextcloud/initial-state'\n\nimport onlineSvg from '../../assets/status-icons/user-status-online.svg?raw'\nimport onlineLegacySvg from '../../assets/status-icons/user-status-online-legacy.svg?raw'\nimport awaySvg from '../../assets/status-icons/user-status-away.svg?raw'\nimport awayLegacySvg from '../../assets/status-icons/user-status-away-legacy.svg?raw'\nimport busySvg from '../../assets/status-icons/user-status-busy.svg?raw'\nimport dndSvg from '../../assets/status-icons/user-status-dnd.svg?raw'\nimport dndLegacySvg from '../../assets/status-icons/user-status-dnd-legacy.svg?raw'\nimport invisibleSvg from '../../assets/status-icons/user-status-invisible.svg?raw'\nimport invisibleLegacySvg from '../../assets/status-icons/user-status-invisible-legacy.svg?raw'\n\nimport { getUserStatusText } from '../../utils/UserStatus.ts'\nimport { t } from '../../l10n.js'\n\nconst [major] = loadState('core', 'config', { version: '32.0' }).version.split('.', 2) ?? []\nconst isLegacy = major && Number.parseInt(major) < 32\nconst matchSvg = {\n\tonline: isLegacy ? onlineLegacySvg : onlineSvg,\n\taway: isLegacy ? awayLegacySvg : awaySvg,\n\tbusy: isLegacy ? awayLegacySvg : busySvg,\n\tdnd: isLegacy ? dndLegacySvg : dndSvg,\n\tinvisible: isLegacy ? invisibleLegacySvg : invisibleSvg,\n\toffline: isLegacy ? invisibleLegacySvg : invisibleSvg,\n}\n\nexport default {\n\tname: 'NcUserStatusIcon',\n\n\tprops: {\n\t\t/**\n\t\t * Set the user id to fetch the status\n\t\t */\n\t\tuser: {\n\t\t\ttype: String,\n\t\t\tdefault: null,\n\t\t},\n\n\t\t/**\n\t\t * Set the status\n\t\t *\n\t\t * @type {'online' | 'away' | 'busy' | 'dnd' | 'invisible' | 'offline'}\n\t\t */\n\t\tstatus: {\n\t\t\ttype: String,\n\t\t\tdefault: null,\n\t\t\tvalidator: (value) => [\n\t\t\t\t'online',\n\t\t\t\t'away',\n\t\t\t\t'busy',\n\t\t\t\t'dnd',\n\t\t\t\t'invisible',\n\t\t\t\t'offline',\n\t\t\t].includes(value),\n\t\t},\n\n\t\t/**\n\t\t * Set the `aria-hidden` attribute\n\t\t *\n\t\t * @type {'true' | 'false'}\n\t\t */\n\t\tariaHidden: {\n\t\t\ttype: String,\n\t\t\tdefault: null,\n\t\t\tvalidator: (value) => [\n\t\t\t\t'true',\n\t\t\t\t'false',\n\t\t\t].includes(value),\n\t\t},\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tfetchedUserStatus: null,\n\t\t}\n\t},\n\n\tcomputed: {\n\t\tactiveStatus() {\n\t\t\treturn this.status ?? this.fetchedUserStatus\n\t\t},\n\n\t\tactiveSvg() {\n\t\t\treturn matchSvg[this.activeStatus] ?? null\n\t\t},\n\n\t\tariaLabel() {\n\t\t\tif (this.ariaHidden === 'true') {\n\t\t\t\treturn null\n\t\t\t}\n\t\t\treturn t('User status: {status}', { status: getUserStatusText(this.activeStatus) })\n\t\t},\n\t},\n\n\twatch: {\n\t\tuser: {\n\t\t\timmediate: true,\n\t\t\tasync handler(user, _oldUser) {\n\t\t\t\tif (!user || !getCapabilities()?.user_status?.enabled) {\n\t\t\t\t\tthis.fetchedUserStatus = null\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\ttry {\n\t\t\t\t\tconst { data } = await axios.get(generateOcsUrl('/apps/user_status/api/v1/statuses/{user}', { user }))\n\t\t\t\t\tthis.fetchedUserStatus = data.ocs?.data?.status\n\t\t\t\t} catch (error) {\n\t\t\t\t\tthis.fetchedUserStatus = null\n\t\t\t\t}\n\t\t\t},\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.user-status-icon {\n\tdisplay: flex;\n\tjustify-content: center;\n\talign-items: center;\n\n\t&--invisible {\n\t\tfilter: var(--background-invert-if-dark);\n\t}\n\n\t:deep(svg) {\n\t\twidth: 100%;\n\t\theight: 100%;\n\t}\n}\n</style>\n"],"names":[],"mappings":";;;;;;AAAA,MAAe,YAAA;ACAf,MAAe,kBAAA;ACAf,MAAe,UAAA;ACAf,MAAe,gBAAA;ACAf,MAAe,UAAA;ACAf,MAAe,SAAA;ACAf,MAAe,eAAA;ACAf,MAAe,eAAA;ACAf,MAAe,qBAAA;;ACSF,MAAA,oBAAoB,CAAC,WAA2B;AAC5D,UAAQ,QAAQ;AAAA,IAChB,KAAK;AAAQ,aAAO,EAAE,MAAM;AAAA;AAAA,IAC5B,KAAK;AAAQ,aAAO,EAAE,MAAM;AAAA,IAC5B,KAAK;AAAO,aAAO,EAAE,gBAAgB;AAAA,IACrC,KAAK;AAAU,aAAO,EAAE,QAAQ;AAAA,IAChC,KAAK;AAAa,aAAO,EAAE,WAAW;AAAA,IACtC,KAAK;AAAW,aAAO,EAAE,SAAS;AAAA,IAClC;AAAgB,aAAA;AAAA,EAAA;AAEjB;;ACsDA,MAAA,CAAA,KAAA,IAAA,UAAA,QAAA,UAAA,EAAA,SAAA,OAAA,CAAA,EAAA,QAAA,MAAA,KAAA,CAAA,KAAA,CAAA;AACA,MAAA,WAAA,SAAA,OAAA,SAAA,KAAA,IAAA;AACA,MAAA,WAAA;AAAA,EACA,QAAA,WAAA,kBAAA;AAAA,EACA,MAAA,WAAA,gBAAA;AAAA,EACA,MAAA,WAAA,gBAAA;AAAA,EACA,KAAA,WAAA,eAAA;AAAA,EACA,WAAA,WAAA,qBAAA;AAAA,EACA,SAAA,WAAA,qBAAA;AACA;AAEA,MAAA,YAAA;AAAA,EACA,MAAA;AAAA,EAEA,OAAA;AAAA;AAAA;AAAA;AAAA,IAIA,MAAA;AAAA,MACA,MAAA;AAAA,MACA,SAAA;AAAA,IACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAOA,QAAA;AAAA,MACA,MAAA;AAAA,MACA,SAAA;AAAA,MACA,WAAA,CAAA,UAAA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACA,EAAA,SAAA,KAAA;AAAA,IACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAOA,YAAA;AAAA,MACA,MAAA;AAAA,MACA,SAAA;AAAA,MACA,WAAA,CAAA,UAAA;AAAA,QACA;AAAA,QACA;AAAA,MACA,EAAA,SAAA,KAAA;AAAA,IACA;AAAA,EACA;AAAA,EAEA,OAAA;AACA,WAAA;AAAA,MACA,mBAAA;AAAA,IACA;AAAA,EACA;AAAA,EAEA,UAAA;AAAA,IACA,eAAA;AACA,aAAA,KAAA,UAAA,KAAA;AAAA,IACA;AAAA,IAEA,YAAA;AACA,aAAA,SAAA,KAAA,YAAA,KAAA;AAAA,IACA;AAAA,IAEA,YAAA;AACA,UAAA,KAAA,eAAA,QAAA;AACA,eAAA;AAAA,MACA;AACA,aAAA,EAAA,yBAAA,EAAA,QAAA,kBAAA,KAAA,YAAA,EAAA,CAAA;AAAA,IACA;AAAA,EACA;AAAA,EAEA,OAAA;AAAA,IACA,MAAA;AAAA,MACA,WAAA;AAAA,MACA,MAAA,QAAA,MAAA,UAAA;AACA,YAAA,CAAA,QAAA,CAAA,gBAAA,GAAA,aAAA,SAAA;AACA,eAAA,oBAAA;AACA;AAAA,QACA;AACA,YAAA;AACA,gBAAA,EAAA,KAAA,IAAA,MAAA,MAAA,IAAA,eAAA,4CAAA,EAAA,MAAA,CAAA;AACA,eAAA,oBAAA,KAAA,KAAA,MAAA;AAAA,QACA,SAAA,OAAA;AACA,eAAA,oBAAA;AAAA,QACA;AAAA,MACA;AAAA,IACA;AAAA,EACA;AACA;;;;;;;;;;;;;;;;;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"_l10n-BU8-kQzN.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -1,4 +0,0 @@
1
- "use strict";
2
- const isLegacy32 = Number.parseInt(window.OC?.config.version.split(".")[0] ?? "0") < 32;
3
- exports.isLegacy32 = isLegacy32;
4
- //# sourceMappingURL=legacy-Brrs7mi9.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"legacy-Brrs7mi9.cjs","sources":["../../src/utils/legacy.ts"],"sourcesContent":["/*\n * SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nexport const isLegacy32 = Number.parseInt(window.OC?.config.version.split('.')[0] ?? '0') < 32\n"],"names":[],"mappings":";AAKO,MAAM,aAAa,OAAO,SAAS,OAAO,IAAI,OAAO,QAAQ,MAAM,GAAG,EAAE,CAAC,KAAK,GAAG,IAAI;;"}
@@ -1,5 +0,0 @@
1
- const isLegacy32 = Number.parseInt(window.OC?.config.version.split(".")[0] ?? "0") < 32;
2
- export {
3
- isLegacy32 as i
4
- };
5
- //# sourceMappingURL=legacy-SvM_Of-C.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"legacy-SvM_Of-C.mjs","sources":["../../src/utils/legacy.ts"],"sourcesContent":["/*\n * SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nexport const isLegacy32 = Number.parseInt(window.OC?.config.version.split('.')[0] ?? '0') < 32\n"],"names":[],"mappings":"AAKO,MAAM,aAAa,OAAO,SAAS,OAAO,IAAI,OAAO,QAAQ,MAAM,GAAG,EAAE,CAAC,KAAK,GAAG,IAAI;"}
@@ -1,18 +0,0 @@
1
- "use strict";
2
- var mdiArrowLeft = "M20,11V13H8L13.5,18.5L12.08,19.92L4.16,12L12.08,4.08L13.5,5.5L8,11H20Z";
3
- var mdiArrowRight = "M4,11V13H16L10.5,18.5L11.92,19.92L19.84,12L11.92,4.08L10.5,5.5L16,11H4Z";
4
- var mdiCheck = "M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z";
5
- var mdiChevronLeft = "M15.41,16.58L10.83,12L15.41,7.41L14,6L8,12L14,18L15.41,16.58Z";
6
- var mdiChevronRight = "M8.59,16.58L13.17,12L8.59,7.41L10,6L16,12L10,18L8.59,16.58Z";
7
- var mdiClose = "M19,6.41L17.59,5L12,10.59L6.41,5L5,6.41L10.59,12L5,17.59L6.41,19L12,13.41L17.59,19L19,17.59L13.41,12L19,6.41Z";
8
- var mdiDotsHorizontal = "M16,12A2,2 0 0,1 18,10A2,2 0 0,1 20,12A2,2 0 0,1 18,14A2,2 0 0,1 16,12M10,12A2,2 0 0,1 12,10A2,2 0 0,1 14,12A2,2 0 0,1 12,14A2,2 0 0,1 10,12M4,12A2,2 0 0,1 6,10A2,2 0 0,1 8,12A2,2 0 0,1 6,14A2,2 0 0,1 4,12Z";
9
- var mdiUndo = "M12.5,8C9.85,8 7.45,9 5.6,10.6L2,7V16H11L7.38,12.38C8.77,11.22 10.54,10.5 12.5,10.5C16.04,10.5 19.05,12.81 20.1,16L22.47,15.22C21.08,11.03 17.15,8 12.5,8Z";
10
- exports.mdiArrowLeft = mdiArrowLeft;
11
- exports.mdiArrowRight = mdiArrowRight;
12
- exports.mdiCheck = mdiCheck;
13
- exports.mdiChevronLeft = mdiChevronLeft;
14
- exports.mdiChevronRight = mdiChevronRight;
15
- exports.mdiClose = mdiClose;
16
- exports.mdiDotsHorizontal = mdiDotsHorizontal;
17
- exports.mdiUndo = mdiUndo;
18
- //# sourceMappingURL=mdi-BqDPfc6J.cjs.map
@@ -1,19 +0,0 @@
1
- var mdiArrowLeft = "M20,11V13H8L13.5,18.5L12.08,19.92L4.16,12L12.08,4.08L13.5,5.5L8,11H20Z";
2
- var mdiArrowRight = "M4,11V13H16L10.5,18.5L11.92,19.92L19.84,12L11.92,4.08L10.5,5.5L16,11H4Z";
3
- var mdiCheck = "M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z";
4
- var mdiChevronLeft = "M15.41,16.58L10.83,12L15.41,7.41L14,6L8,12L14,18L15.41,16.58Z";
5
- var mdiChevronRight = "M8.59,16.58L13.17,12L8.59,7.41L10,6L16,12L10,18L8.59,16.58Z";
6
- var mdiClose = "M19,6.41L17.59,5L12,10.59L6.41,5L5,6.41L10.59,12L5,17.59L6.41,19L12,13.41L17.59,19L19,17.59L13.41,12L19,6.41Z";
7
- var mdiDotsHorizontal = "M16,12A2,2 0 0,1 18,10A2,2 0 0,1 20,12A2,2 0 0,1 18,14A2,2 0 0,1 16,12M10,12A2,2 0 0,1 12,10A2,2 0 0,1 14,12A2,2 0 0,1 12,14A2,2 0 0,1 10,12M4,12A2,2 0 0,1 6,10A2,2 0 0,1 8,12A2,2 0 0,1 6,14A2,2 0 0,1 4,12Z";
8
- var mdiUndo = "M12.5,8C9.85,8 7.45,9 5.6,10.6L2,7V16H11L7.38,12.38C8.77,11.22 10.54,10.5 12.5,10.5C16.04,10.5 19.05,12.81 20.1,16L22.47,15.22C21.08,11.03 17.15,8 12.5,8Z";
9
- export {
10
- mdiCheck as a,
11
- mdiUndo as b,
12
- mdiClose as c,
13
- mdiArrowRight as d,
14
- mdiDotsHorizontal as e,
15
- mdiArrowLeft as f,
16
- mdiChevronLeft as g,
17
- mdiChevronRight as m
18
- };
19
- //# sourceMappingURL=mdi-vLkDaZ9y.mjs.map